stuff/soapstone.c

965 lines
13 KiB
C

/*
soapstone.c : Random orange soapstone message generator.
(C)2016 Marisa the Magician, UnSX Team.
Released under the MIT license.
Dark Souls is (C)2011-2016 From Software.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
const char templates1[13][32] =
{
"%s ahead",
"Be wary of %s",
"Try %s",
"Need %s",
"Imminent %s...",
"Weakness: %s",
"%s",
"%s?",
"Good luck",
"I did it!",
"Here!",
"I can't take this...",
"Praise the Sun!"
};
const char words1[173][32] =
{
"Enemy",
"Tough enemy",
"Hollow",
"Soldier",
"Knight",
"Sniper",
"Caster",
"Giant",
"Skeleton",
"Ghost",
"Bug",
"Poison bug",
"Lizard",
"Drake",
"Flier",
"Golem",
"Statue",
"Monster",
"Strange creature",
"Demon",
"Darkwraith",
"Dragon",
"Boss",
"Saint",
"Wretch",
"Charmer",
"Miscreant",
"Liar",
"Fatty",
"Beanpole",
"Merchant",
"Blacksmith",
"Master",
"Prisoner",
"Bonfire",
"Fog wall",
"Humanity",
"Lever",
"Switch",
"Key",
"Treasure",
"Chest",
"Weapon",
"Shield",
"Projectile",
"Armour",
"Item",
"Ring",
"Sorcery scroll",
"Pyromancy scroll",
"Miracle scroll",
"Ember",
"Trap",
"Covenant",
"Amazing key",
"Amazing treasure",
"Amazing chest",
"Amazing weapon",
"Amazing armour",
"Amazing item",
"Amazing ring",
"Amazing sorcery scroll",
"Amazing pyromancy scroll",
"Amazing miracle scroll",
"Amazing ember",
"Amazing trap",
"Close-ranged battle",
"Ranged battle",
"Eliminating one at a time",
"Luring it out",
"Beating to a pulp",
"Lying in ambush",
"Stealth",
"Mimicry",
"Pincer attack",
"Hitting them in one swoop",
"Fleeing",
"Charging",
"Stabbing in the back",
"Sweeping attack",
"Shield breaking",
"Head shots",
"Sorcery",
"Pyromancy",
"Miracles",
"Jumping off",
"Sliding down",
"Dashing through",
"Rolling",
"Backstepping",
"Jumping",
"Attacking",
"Holding with both hands",
"Kicking",
"A plunging attack",
"Blocking",
"Parrying",
"Locking-on",
"Path",
"Hidden path",
"Shortcut",
"Detour",
"Illusory wall",
"Shortcut",
"Dead end",
"Swamp",
"Lava",
"Forest",
"Cave",
"Labyrinth",
"Safe zone",
"Danger zone",
"Sniper spot",
"Bright spot",
"Dark spot",
"Open area",
"Tight spot",
"Hiding place",
"Exchange",
"Gorgeous view",
"Fall",
"Front",
"Back",
"Left",
"Right",
"Up",
"Down",
"Feet",
"Head",
"Back",
"Head",
"Neck",
"Stomach",
"Back",
"Arm",
"Leg",
"Heel",
"Rear",
"Tail",
"Wings",
"Anywhere",
"Strike",
"Thrust",
"Slash",
"Magic",
"Fire",
"Lightning",
"Critical hits",
"Bleeding",
"Poison",
"Strong poison",
"Curses",
"Divine",
"Occult",
"Crystal",
"Chance",
"Hint",
"Secret",
"Happiness",
"Sorrow",
"Life",
"Death",
"Undead",
"Elation",
"Grief",
"Hope",
"Despair",
"Light",
"Dark",
"Bravery",
"Resignation",
"Comfort",
"Tears"
};
const char templates2[11][32] =
{
"%s ahead",
"%s required ahead",
"be wary of %s",
"try %s",
"weakness: %s",
"visions of %s...",
"%s",
"%s!",
"%s?",
"%s...",
"hurrah for %s!",
};
const char conjunctions2[7][32] =
{
" and then ",
" but ",
" therefore ",
" in short ",
" or ",
" by the way ",
", "
};
const char words2[247][32] =
{
"enemy",
"monster",
"lesser foe",
"tough enemy",
"boss",
"Hollow",
"skeleton",
"ghost",
"bug",
"Gyrm",
"beast",
"giant",
"dwarf",
"sniper",
"caster",
"duo",
"trio",
"saint",
"wretch",
"charmer",
"poor soul",
"oddball",
"nimble one",
"laggard",
"moneybags",
"beggar",
"miscreant",
"liar",
"fatty",
"beanpole",
"merchant",
"artisan",
"master",
"friend",
"ally",
"Dark Spirit",
"Phantom",
"Shade",
"bonfire",
"fog wall",
"lever",
"switch",
"key",
"trap",
"torch",
"door",
"treasure",
"chest",
"something",
"quite something",
"weapon",
"shield",
"projectile",
"armor",
"item",
"ring",
"scroll",
"ore",
"message",
"bloodstain",
"illusion",
"close-ranged battle",
"ranged battle",
"eliminating one at a time",
"luring it out",
"beating to a pulp",
"ambush",
"pincer attack",
"hitting them in one swoop",
"dual-wielding",
"stealth",
"mimicry",
"fleeing",
"charging",
"jumping off",
"dashing through",
"circling around",
"trapping inside",
"rescue",
"sorcery",
"pyromancy",
"miracles",
"hexes",
"pure luck",
"prudence",
"brief respite",
"play dead",
"jog",
"dash",
"rolling",
"backstepping",
"jumping",
"attacking",
"jump attack",
"dash attack",
"counter attack",
"stabbing in the back",
"guard stun & stab",
"parry stun & stab",
"plunging attack",
"sweeping attack",
"shield breaking",
"blocking",
"parrying",
"spell parry",
"locking-on",
"no lock-on",
"two-handing",
"gesture",
"control",
"destroy",
"boulder",
"lava",
"poison gas",
"enemy horde",
"forest",
"cave",
"arena",
"hidden path",
"detour",
"shortcut",
"dead end",
"labyrinth",
"hole",
"bright spot",
"dark spot",
"open area",
"tight spot",
"safe zone",
"danger zone",
"sniper spot",
"hiding place",
"illusory wall",
"ladder",
"lift",
"exchange",
"gorgeous view",
"looking away",
"overconfidence",
"slip-up",
"oversight",
"fatigue",
"bad luck",
"inattention",
"loss of stamina",
"front",
"back",
"left",
"right",
"up",
"down",
"below",
"above",
"behind",
"head",
"neck",
"stomach",
"back",
"arm",
"leg",
"rear",
"tail",
"wings",
"anywhere",
"tongue",
"right arm",
"left arm",
"right leg",
"left leg",
"right side",
"left side",
"pincer",
"wheel",
"core",
"horse",
"strike",
"thrust",
"slash",
"magic",
"sorcery",
"fire",
"lightning",
"critical hits",
"bleeding",
"poison",
"toxic",
"curse",
"equipment breakage",
"chance",
"quagmire",
"hint",
"secret",
"happiness",
"misfortune",
"life",
"death",
"joy",
"sadness",
"tears",
"hope",
"despair",
"victory",
"defeat",
"light",
"dark",
"bravery",
"confidence",
"vigor",
"revenge",
"resignation",
"overwhelming",
"regret",
"pointless",
"man",
"woman",
"recklessness",
"composure",
"guts",
"comfort",
"silence",
"good luck",
"fine work",
"I did it!",
"I've failed...",
"here!",
"not here!",
"I can't take this...",
"don't you dare!",
"do it!",
"look carefully",
"listen carefully",
"think carefully",
"this place again?",
"now the real fight begins",
"keep moving",
"pull back",
"give it up",
"don't give up",
"help me...",
"impossible...",
"bloody expensive...",
"nice job",
"let me out of here...",
"stay calm",
"like a dream...",
"are you ready?",
"praise the Sun!"
};
const char templates3[17][32] =
{
"%s ahead",
"No %s ahead",
"%s required ahead",
"be wary of %s",
"try %s",
"Could this be a %s?",
"If only I had a %s...",
"visions of %s...",
"Time for %s",
"%s",
"%s!",
"%s?",
"%s...",
"Huh. It's a %s...",
"praise the %s!",
"Let there be %s",
"Ahh, %s..."
};
const char conjunctions3[10][32] =
{
" and then ",
" but ",
" therefore ",
" in short ",
" or ",
" only ",
" by the way ",
" so to speak ",
" all the more ",
", ",
};
const char gestures3[33][32] =
{
"Point forward",
"Point up",
"Point down",
"Wave",
"Beckon",
"Call over",
"Welcome",
"Applause",
"Quiet Resolve",
"Jump for joy",
"Joy",
"Rejoice",
"Hurrah!",
"Praise the Sun",
"My thanks!",
"Bow",
"Proper bow",
"Dignified bow",
"Duel bow",
"Legion Etiquette",
"Darkmoon Loyalty",
"By my sword",
"Prayer",
"Silent Ally",
"Rest",
"Collapse",
"Patches Squat",
"Prostration",
"Toast",
"Sleep",
"Curl up",
"Stretch out",
"Path of the Dragon"
};
const char words3[322][32] =
{
"enemy",
"monster",
"mob enemy",
"tough enemy",
"critical foe",
"Hollow",
"pilgrim",
"prisoner",
"monstrosity",
"skeleton",
"ghost",
"beast",
"lizard",
"bug",
"grub",
"crab",
"dwarf",
"giant",
"demon",
"dragon",
"knight",
"sellsword",
"warrior",
"herald",
"bandit",
"assassin",
"sorcerer",
"pyromancer",
"cleric",
"deprived",
"sniper",
"duo",
"trio",
"you",
"you bastard",
"good fellow",
"saint",
"wretch",
"charmer",
"poor soul",
"oddball",
"nimble one",
"laggard",
"moneybags",
"beggar",
"miscreant",
"liar",
"fatty",
"beanpole",
"youth",
"elder",
"old codger",
"old dear",
"miscreant",
"artisan",
"master",
"sage",
"champion",
"Lord of Cinder",
"king",
"queen",
"prince",
"princess",
"angel",
"god",
"friend",
"ally",
"spouse",
"covenantor",
"Phantom",
"Dark Spirit",
"bonfire",
"ember",
"fog wall",
"lever",
"contraption",
"key",
"trap",
"torch",
"door",
"treasure",
"chest",
"something",
"quite something",
"rubbish",
"filth",
"weapon",
"shield",
"projectile",
"armor",
"item",
"ring",
"ore",
"coal",
"transposing kiln",
"scroll",
"umbral ash",
"throne",
"rite",
"coffin",
"cinder",
"ash",
"moon",
"eye",
"brew",
"soup",
"message",
"bloodstain",
"illusion",
"close-ranged battle",
"ranged battle",
"eliminating one at a time",
"luring it out",
"beating to a pulp",
"ambush",
"pincer attack",
"hitting them in one swoop",
"dual-wielding",
"stealth",
"mimicry",
"fleeing",
"charging",
"jumping off",
"dashing through",
"circling around",
"trapping inside",
"rescue",
"Skill",
"sorcery",
"pyromancy",
"miracles",
"pure luck",
"prudence",
"brief respite",
"play dead",
"jog",
"dash",
"rolling",
"backstepping",
"jumping",
"attacking",
"jump attack",
"dash attack",
"counter attack",
"stabbing in the back",
"guard stun & stab",
"plunging attack",
"sweeping attack",
"shield breaking",
"blocking",
"parrying",
"locking-on",
"no lock-on",
"two-handing",
"gesture",
"control",
"destroy",
"boulder",
"lava",
"poison gas",
"enemy horde",
"forest",
"swamp",
"cave",
"shortcut",
"detour",
"hidden path",
"secret passage",
"dead end",
"labyrinth",
"hole",
"bright spot",
"dark spot",
"open area",
"tight spot",
"safe zone",
"danger zone",
"sniper spot",
"hiding place",
"illusory wall",
"ladder",
"lift",
"gorgeous view",
"looking away",
"overconfidence",
"slip-up",
"oversight",
"fatigue",
"bad luck",
"inattention",
"loss of stamina",
"chance encounter",
"planned encounter",
"front",
"back",
"left",
"right",
"up",
"down",
"below",
"above",
"behind",
"head",
"neck",
"stomach",
"back",
"arm",
"finger",
"leg",
"rear",
"tail",
"wings",
"anywhere",
"tongue",
"right arm",
"left arm",
"thumb",
"indexfinger",
"longfinger",
"ringfinger",
"smallfinger",
"right leg",
"left leg",
"right side",
"left side",
"pincer",
"wheel",
"core",
"mount",
"regular",
"strike",
"thrust",
"slash",
"magic",
"crystal",
"fire",
"chaos",
"lightning",
"blessing",
"dark",
"critical hits",
"bleeding",
"poison",
"toxic",
"frost",
"curse",
"equipment breakage",
"chance",
"quagmire",
"hint",
"secret",
"sleeptalk",
"happiness",
"misfortune",
"life",
"death",
"demise",
"joy",
"fury",
"agony",
"sadness",
"tears",
"loyalty",
"betrayal",
"hope",
"despair",
"fear",
"losing sanity",
"victory",
"defeat",
"sacrifice",
"light",
"dark",
"bravery",
"confidence",
"vigor",
"revenge",
"resignation",
"overwhelming",
"regret",
"pointless",
"man",
"woman",
"friendship",
"love",
"recklessness",
"composure",
"guts",
"comfort",
"silence",
"deep",
"good luck",
"fine work",
"I did it!",
"I've failed...",
"here!",
"not here!",
"I can't take this...",
"lonely...",
"don't you dare!",
"do it!",
"look carefully",
"listen carefully",
"think carefully",
"this place again?",
"now the real fight begins",
"you don't deserve this",
"keep moving",
"pull back",
"give it up",
"don't give up",
"help me...",
"impossible...",
"bloody expensive...",
"let me out of here...",
"stay calm",
"like a dream...",
"seems familiar...",
"are you ready?",
"it'll happen to you too",
"praise the Sun!",
"may the flames guide thee"
};
void print_soapstone_ds1( void )
{
int template = rand()%13;
int word = rand()%173;
char mesg[256];
if ( template < 8 ) sprintf(mesg,templates1[template],words1[word]);
else strcpy(mesg,templates1[template]);
printf("%s\n",mesg);
}
void print_soapstone_ds2( void )
{
int template = rand()%11;
int word = rand()%(((template>5)&&(template<10))?247:220);
char mesg[256];
sprintf(mesg,templates2[template],words2[word]);
if ( rand()&1 )
{
char mesg2[256];
int template2 = rand()%11;
int word2 = rand()%(((template2>5)&&(template2<10))?247:220);
int conj = rand()%7;
sprintf(mesg2,templates2[template2],words2[word2]);
printf("%s%s%s\n",mesg,conjunctions2[conj],mesg2);
}
else printf("%s\n",mesg);
}
void print_soapstone_ds3( void )
{
if ( rand()&1 ) printf("[%s] ",gestures3[rand()%33]);
int template = rand()%17;
int word = rand()%322;
char mesg[256];
sprintf(mesg,templates3[template],words3[word]);
if ( rand()&1 )
{
char mesg2[256];
int template2 = rand()%17;
int word2 = rand()%211;
int conj = rand()%10;
sprintf(mesg2,templates3[template2],words3[word2]);
printf("%s%s%s\n",mesg,conjunctions3[conj],mesg2);
}
else printf("%s\n",mesg);
}
int main( int argc, char **argv )
{
int rsd = 0;
#ifndef WINDOWS
FILE *r;
if ( (r = fopen("/dev/random","r")) )
{
fread(&rsd,sizeof(int),1,r);
fclose(r);
}
else
#endif
rsd = time(0);
srand(rsd);
if ( argc < 2 )
{
fprintf(stderr,"usage: %s <gamenumber> [lines]\n",argv[0]);
return 1;
}
int times = 1;
if ( argc > 2 ) sscanf(argv[2],"%d",&times);
switch( *argv[1] )
{
case '1':
for ( int i=0; i<times; i++ ) print_soapstone_ds1();
break;
case '2':
for ( int i=0; i<times; i++ ) print_soapstone_ds2();
break;
case '3':
for ( int i=0; i<times; i++ ) print_soapstone_ds3();
break;
default:
fprintf(stderr,"unknown gamenum %c\n",*argv[1]);
break;
}
return 0;
}