/* * File: monspeak.cc * Summary: Functions to handle speaking monsters * * Change History (most recent first): * * <1> 01/09/00 BWR Created */ #include "AppHdr.h" #include "monspeak.h" #include #include #include #ifdef DOS #include #endif #include "externs.h" #include "beam.h" #include "debug.h" #include "fight.h" #include "insult.h" #include "itemname.h" #include "misc.h" #include "monplace.h" #include "monstuff.h" #include "mon-util.h" #include "mstuff2.h" #include "player.h" #include "spells2.h" #include "spells4.h" #include "stuff.h" #include "view.h" // returns true if something is said bool mons_speaks(struct monsters *monster) { int temp_rand; // probability determination // This function is a little bit of a problem for the message channels // since some of the messages it generates are "fake" warning to // scare the player. In order to accomidate this intent, we're // falsely categorizing various things in the function as spells and // danger warning... everything else just goes into the talk channel -- bwr int msg_type = MSGCH_TALK; const char *m_name = ptr_monam(monster, DESC_CAP_THE); strcpy(info, m_name); if (mons_has_ench(monster, ENCH_INVIS)) return false; // invisible monster tries to remain unnoticed //mv: if it's also invisible, program never gets here if (silenced(monster->x, monster->y)) { if (!one_chance_in(3)) return false; // while silenced, don't bother so often if (mons_has_ench(monster, ENCH_CONFUSION)) { temp_rand = random2(10); strcat(info, (temp_rand < 4) ? " gestures wildly." : (temp_rand == 4) ? " looks confused." : (temp_rand == 5) ? " grins evilly." : (temp_rand == 6) ? " smiles happily." : (temp_rand == 7) ? " cries." : " says something but you don't hear anything."); } else if (monster->behaviour == BEH_FLEE) { temp_rand = random2(10); strcat(info, (temp_rand < 3) ? " glances furtively about." : (temp_rand == 3) ? " opens its mouth, as if shouting." : (temp_rand == 4) ? " looks around." : (temp_rand == 5) ? " appears indecisive." : (temp_rand == 6) ? " ponders the situation." : " seems to says something."); } // disregard charmed critters.. they're not too expressive else if (monster->attitude == ATT_FRIENDLY) { temp_rand = random2(10); strcat(info, (temp_rand < 3) ? " gives you a thumbs up." : (temp_rand == 3) ? " looks at you." : (temp_rand == 4) ? " waves at you." : (temp_rand == 5) ? " smiles happily.": (temp_rand == 6) ? " winks at you." : " says something you can't hear."); } else { temp_rand = random2(10); strcat(info, (temp_rand < 3) ? " gestures." : (temp_rand == 3) ? " gestures obscenely." : (temp_rand == 4) ? " grins." : (temp_rand == 5) ? " looks angry." : (temp_rand == 6) ? " seems to be listening." : " says something but you don't hear anything."); } //end switch silenced monster's behaviour mpr(info, MSGCH_TALK); return true; } // end silenced monster // charmed monsters aren't too expressive if (mons_has_ench(monster, ENCH_CHARM)) return false; if (mons_has_ench(monster, ENCH_CONFUSION)) { if (mons_holiness( monster ) == MH_DEMONIC && monster->type != MONS_IMP) { return (false); } if (mons_friendly(monster)) { switch (random2(18)) // speaks for friendly confused monsters { case 0: strcat(info, " prays for help."); break; case 1: strcat(info, " screams, \"Help!\""); break; case 2: strcat(info, " shouts, \"I'm losing control!\""); break; case 3: strcat(info, " shouts, \"What's happening?\""); break; case 4: case 5: strcat(info, " gestures wildly."); break; case 6: strcat(info, " cries."); break; case 7: strcat(info, " shouts, \"Yeah!\""); break; case 8: strcat(info, " sings."); break; case 9: strcat(info, " laughs crazily."); break; case 10: strcat(info, " ponders the situation."); break; case 11: strcat(info, " grins madly."); break; case 12: strcat(info, " looks very confused."); break; case 13: strcat(info, " mumbles something."); break; case 14: strcat(info, " giggles crazily."); break; case 15: strcat(info, " screams, \""); strcat(info, you.your_name); strcat(info, "! Help!\""); break; case 16: strcat(info, " screams, \""); strcat(info, you.your_name); strcat(info, "! What's going on?\""); break; case 17: strcat(info, " says, \""); strcat(info, you.your_name); strcat(info, ", I'm little bit confused.\""); break; } } else { switch (random2(23)) // speaks for unfriendly confused monsters { case 0: strcat(info, " yells, \"Get them off of me!\""); break; case 1: strcat(info, " screams, \"I will kill you anyway!\""); break; case 2: strcat(info, " shouts, \"What's happening?\""); break; case 3: case 4: case 5: strcat(info, " gestures wildly."); break; case 6: strcat(info, " cries."); break; case 7: strcat(info, " shouts, \"NO!\""); break; case 8: strcat(info, " shouts, \"YES!\""); break; case 9: strcat(info, " laughs crazily."); break; case 10: strcat(info, " ponders the situation."); break; case 11: strcat(info, " grins madly."); break; case 12: strcat(info, " looks very confused."); break; case 13: strcat(info, " mumbles something."); break; case 14: strcat(info, " says, \"I'm little bit confused.\""); break; case 15: strcat(info, " asks, \"Where am I?\""); break; case 16: strcat(info, " shakes."); break; case 17: strcat(info, " asks, \"Who are you?\""); break; case 18: strcat(info, " asks, \"What the hell are we doing here? Mmm, I see...\""); break; case 19: strcat(info, " cries, \"My head! MY HEAD!!!\""); break; case 20: strcat(info, " says, \"Why is everything spinning?\""); break; case 21: strcat(info, " screams, \"NO! I can't bear up that noise!\""); break; case 22: strcat(info, " is trying to cover his eyes."); break; } } } else if (monster->behaviour == BEH_FLEE) { if (mons_holiness( monster ) == MH_DEMONIC && monster->type != MONS_IMP) { return (false); } if (mons_friendly(monster)) { switch (random2(11)) { case 0: snprintf( info, INFO_SIZE, "%s %s, \"WAIT FOR ME!\"", m_name, coinflip() ? "shouts" : "yells"); strcat(info, you.your_name); strcat(info, ", could you help me?\""); break; case 1: strcat(info, " screams, \"Help!\""); break; case 2: strcat(info, " shouts, \"Cover me!\""); break; case 3: strcat(info, " screams, \""); strcat(info, you.your_name); strcat(info, "! Help me!\""); break; case 4: case 5: case 6: strcat(info, " tries to hide somewhere."); break; case 7: strcat(info, " prays for help."); break; case 8: strcat(info, " looks at you beseechingly."); break; case 9: strcat(info, " shouts, \"Protect me!\""); break; case 10: strcat(info, " cries, \"Don't forget your friends!\""); break; } } else { switch (random2(20)) // speaks for unfriendly fleeing monsters { case 0: snprintf( info, INFO_SIZE, "%s %s, \"Help!\"", m_name, coinflip()? "yells" : "wails"); break; case 1: snprintf( info, INFO_SIZE, "%s %s, \"Help!\"", m_name, coinflip() ? "cries" : "screams"); break; case 2: snprintf( info, INFO_SIZE, "%s %s, \"Why can't we all just get along?\"", m_name, coinflip() ? "begs" : "pleads"); break; case 3: snprintf( info, INFO_SIZE, "%s %s trips in trying to escape.", m_name, coinflip() ? "nearly" : "almost"); break; case 4: snprintf( info, INFO_SIZE, "%s %s, \"Of all the rotten luck!\"", m_name, coinflip() ? "mutters" : "mumbles"); break; case 5: snprintf( info, INFO_SIZE, "%s %s, \"Oh dear! Oh dear!\"", m_name, coinflip() ? "moans" : "wails"); case 6: snprintf( info, INFO_SIZE, "%s %s, \"Damn and blast!\"", m_name, coinflip() ? "mutters" : "mumbles"); break; case 7: strcat(info, " prays for help."); break; case 8: strcat(info, " shouts, \"No! I'll never do that again!\""); break; case 9: snprintf( info, INFO_SIZE, "%s %s", m_name, coinflip() ? "begs for mercy." : "cries, \"Mercy!\""); break; case 10: snprintf( info, INFO_SIZE, "%s %s, \"%s!\"", m_name, coinflip() ? "blubbers" : "cries", coinflip() ? "Mommeee" : "Daddeee"); break; case 11: snprintf( info, INFO_SIZE, "%s %s, \"Please don't kill me!\"", m_name, coinflip() ? "begs" : "pleads"); break; case 12: snprintf( info, INFO_SIZE, "%s %s, \"Please don't hurt me!\"", m_name, coinflip() ? "begs" : "pleads"); break; case 13: snprintf( info, INFO_SIZE, "%s %s, \"Please, I have a lot of children...\"", m_name, coinflip() ? "begs" : "pleads"); break; case 14: strcat(info, " tries to recover lost courage."); break; case 15: case 16: case 17: strcat(info, " gives up."); break; case 19: snprintf( info, INFO_SIZE, "%s looks really %s.", m_name, coinflip() ? "scared stiff" : "rattled"); break; } } } else if (mons_friendly(monster)) { if (mons_holiness( monster ) == MH_DEMONIC && monster->type != MONS_IMP) { return (false); } // friendly imps are too common so they speak very very rarely if ((monster->type == MONS_IMP) && (random2(10))) return (false); switch (random2(18)) { case 0: strcat(info, " yells, \"Run! I'll cover you!\""); break; case 1: strcat(info, " shouts, \"Die, monster!\""); break; case 2: strcat(info, " says, \"It's nice to have friends.\""); break; case 3: strcat(info, " looks at you."); break; case 4: strcat(info, " smiles at you."); break; case 5: strcat(info, " says, \""); strcat(info, you.your_name); strcat(info, ", you are my only friend.\""); break; case 6: strcat(info, " says, \""); strcat(info, you.your_name); strcat(info, ", I like you.\""); break; case 7: strcat(info, " waves at you."); break; case 8: strcat(info, " says, \"Be careful!\""); break; case 9: strcat(info, " says, \"Don't worry. I'm here with you.\""); break; case 10: strcat(info, " smiles happily."); break; case 11: strcat(info, " shouts, \"No mercy! Kill them all!"); break; case 12: strcat(info, " winks at you."); break; case 13: strcat(info, " says, \"Me and you. It sounds cool.\""); break; case 14: strcat(info, " says, \"I'll never leave you.\""); break; case 15: strcat(info, " says, \"I would die for you.\""); break; case 16: strcat(info, " shouts, \"Beware of monsters!\""); break; case 17: strcat(info, " looks friendly."); break; } } else { switch (monster->type) { case MONS_TERENCE: // fighter who likes to kill switch (random2(15)) { case 0: strcat(info, " screams, \"I'm going to kill you! \""); break; case 1: strcat(info, " shouts, \"Now you die.\""); break; case 2: strcat(info, " says, \"Rest in peace.\""); break; case 3: snprintf( info, INFO_SIZE, "%s shouts, \"%s!!!\"", m_name, coinflip() ? "ATTACK" : "DIE"); break; case 4: strcat(info, " says, \"How do you enjoy it?\""); break; case 5: strcat(info, " shouts, \"Get ready for death!\""); break; case 6: strcat(info, " says, \"You are history.\""); break; case 7: strcat(info, " says, \"Do you want it fast or slow?.\""); break; case 8: strcat(info, " says, \"Did you write a testament? You should...\""); break; case 9: strcat(info, " says, \"Time to say good-bye...\""); break; case 10: snprintf( info, INFO_SIZE, "%s says, \"Don't try to defend, it's %s.\"", m_name, coinflip() ? "pointless" : "senseless"); break; case 11: strcat(info, " bares his teeth."); break; case 12: snprintf( info, INFO_SIZE, "%s says, \"I'll show you few %s.\"", m_name, coinflip() ? "tricks" : "ploys."); break; case 13: strcat(info, " screams, \"I want your blood.\""); break; case 14: strcat(info, " looks scornfully at you."); break; } break; // end Terence case MONS_EDMUND: // mercenaries guarding dungeon case MONS_LOUISE: case MONS_FRANCES: case MONS_DUANE: case MONS_ADOLF: switch (random2(17)) { case 0: strcat(info, " screams, \"I'm going to kill you! Now!\""); break; case 1: strcat(info, " shouts, \"Return immediately or I'll kill you!\""); break; case 2: strcat(info, " says, \"Now you've reached the end of your journey!\""); break; case 3: strcat(info, " screams, \"One false step and I'll kill you!\""); break; case 4: strcat(info, " says, \"Drop everything you've found here and return home.\""); break; case 5: strcat(info, " shouts, \"You will never get the Orb.\""); break; case 6: strcat(info, " looks very unfriendly."); break; case 7: strcat(info, " looks very cold."); break; case 8: strcat(info, " shouts, \"It's the end of the party!\""); break; case 9: strcat(info, " says, \"Return every stolen item!\""); break; case 10: strcat(info, " says, \"No trespassing is allowed here.\""); break; case 11: strcat(info, " grins evilly."); break; case 12: strcat(info, " screams, \"You must be punished!\""); break; case 13: strcat(info, " says, \"It's nothing personal...\""); break; case 14: strcat(info, " says, \"A dead adventurer is good adventurer.\""); break; case 15: strcat(info, " says, \"Coming here was your last mistake.\""); break; case 16: strcat(info, " shouts, \"Intruder!\""); break; } break; // end Edmund & Co case MONS_JOSEPH: switch (random2(16)) { case 0: strcat(info, " smiles happily."); break; case 1: strcat(info, " says, \"I'm happy to see you. And I'll be happy to kill you.\""); break; case 2: strcat(info, " says, \"I've waited for this moment for such a long time.\""); break; case 3: strcat(info, " says, \"It's nothing personal but I have kill you.\""); break; case 5: strcat(info, " says, \"You will never get the Orb, sorry.\""); break; case 9: strcat(info, " shouts, \"I love to fight! I love killing!\""); break; case 10: strcat(info, " says, \"I'm here to kill trespassers. I like my job.\""); break; case 11: strcat(info, " tries to grin evilly."); break; case 12: strcat(info, " says, \"You must be punished! Or... I want to punish you!\""); break; case 13: strcat(info, " sighs, \"Being guard is usually so boring...\""); break; case 14: strcat(info, " shouts, \"At last some action!\""); break; case 15: strcat(info, " shouts, \"Wow!\""); break; } break; // end Joseph case MONS_ORC_HIGH_PRIEST: // priest, servants of dark ancient god case MONS_DEEP_ELF_HIGH_PRIEST: switch (random2(9)) { case 0: case 1: strcat(info, " prays."); msg_type = MSGCH_MONSTER_SPELL; break; case 2: strcat(info, " mumbles some strange prayers."); msg_type = MSGCH_MONSTER_SPELL; break; case 3: strcat(info, " shouts, \"You are a heretic and must be destroyed.\""); break; case 4: strcat(info, " says, \"All sinners must die.\""); break; case 5: strcat(info, " looks excited."); break; case 6: strcat(info, " says, \"You will make a fine sacrifice.\""); break; case 7: strcat(info, " starts to sing a prayer."); break; case 8: strcat(info, " shouts, \"You must be punished.\""); break; } break; // end priests case MONS_ORC_SORCERER: // hateful wizards, using strange powers case MONS_DEEP_ELF_SORCERER: case MONS_WIZARD: switch (random2(19)) { case 0: case 1: case 2: strcat(info, " wildly gestures."); mpr( info, MSGCH_MONSTER_SPELL ); if (coinflip()) canned_msg( MSG_NOTHING_HAPPENS ); else canned_msg( MSG_YOU_RESIST ); return (true); case 3: case 4: case 5: strcat(info, " mumbles some strange words."); mpr( info, MSGCH_MONSTER_SPELL ); if (coinflip()) canned_msg( MSG_NOTHING_HAPPENS ); else canned_msg( MSG_YOU_RESIST ); return (true); case 6: strcat(info, " shouts, \"You can't withstand my power!\""); break; case 7: strcat(info, " shouts, \"You are history.\""); break; case 8: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " becomes transparent for a moment."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 9: strcat(info, " throws some strange powder towards you."); msg_type = MSGCH_MONSTER_SPELL; break; case 10: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " glows brightly for a moment."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 11: strcat(info, " says, \"argatax netranoch dertex\""); msg_type = MSGCH_MONSTER_SPELL; break; case 12: strcat(info, " says, \"dogrw nutew berg\""); msg_type = MSGCH_MONSTER_SPELL; break; case 13: strcat(info, " shouts, \"Entram moth deg ulag!\""); msg_type = MSGCH_MONSTER_SPELL; break; case 14: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); strcpy(info, m_name); strcat(info, " becomes larger for a moment."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 15: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); strcpy(info, m_name); strcat(info, "'s fingertips starts to glow."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 16: strcat(info, "'s eyes starts to glow."); msg_type = MSGCH_MONSTER_SPELL; break; case 17: strcat(info, " tries to paralyze you with his gaze."); msg_type = MSGCH_MONSTER_SPELL; break; case 18: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); canned_msg( MSG_YOU_RESIST ); return (true); } break; // end wizards case MONS_JESSICA: // sorceress disturbed by player switch (random2(10)) { case 0: strcat(info, " grins evilly."); break; case 1: strcat(info, " says, \"I'm really upset.\""); break; case 2: strcat(info, " shouts, \"I don't like beings like you.\""); break; case 3: strcat(info, " shouts, \"Stop bothering me, or I'll kill you!\""); break; case 4: strcat(info, " very coldly says, \"I hate your company.\""); break; case 5: strcat(info, " mumbles something strange."); msg_type = MSGCH_MONSTER_SPELL; break; case 6: strcat(info, " looks very angry."); break; case 7: strcat(info, " shouts, \"You're disturbing me. I'll have kill you.\""); break; case 8: strcat(info, " screams, \"You are a ghastly nuisance!\""); break; case 9: strcat(info, " gestures wildly."); msg_type = MSGCH_MONSTER_SPELL; break; } break; // end Jessica case MONS_SIGMUND: // mad old wizard switch (random2(19)) { case 0: case 1: case 2: strcat(info, " laughs crazily."); break; case 3: strcat(info, " says, \"Don't worry, I'll kill you fast.\""); break; case 4: strcat(info, " grinds his teeth."); break; case 5: strcat(info, " asks, \"Do you like me?\""); break; case 6: strcat(info, " screams, \"Die, monster!\""); break; case 7: strcat(info, " says, \"You will soon forget everything.\""); break; case 8: strcat(info, " screams, \"You will never... NEVER!\""); break; case 9: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, "'s eyes starts to glow with a red light. "); msg_type = MSGCH_MONSTER_ENCHANT; break; case 10: strcat(info, " says, \"Look in to my eyes.\""); break; case 11: strcat(info, " says, \"I'm your fate.\""); break; case 12: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " is suddenly surrounded by pale blue light."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 13: strcat(info, " tries to bite you."); break; case 14: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " is suddenly surrounded by pale green light."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 15: strcat(info, " screams, \"I am the angel of Death!\""); break; case 16: strcat(info, " screams, \"Only death can liberate you!\""); break; case 17: strcat(info, " whispers, \"You'll know eternity soon...\""); break; case 18: strcat(info, " screams, \"Don't try to resist!\""); break; } break; // end Sigmund case MONS_IMP: // small demon case MONS_WHITE_IMP: case MONS_SHADOW_IMP: if (one_chance_in(3)) { imp_taunt( monster ); return (true); } else { switch (random2(11)) { case 0: strcat(info, " laughs crazily."); break; case 1: strcat(info, " grins evilly."); break; case 2: strcat(info, " breathes a bit of smoke at you."); break; case 3: strcat(info, " lashes with his tail."); break; case 4: strcat(info, " grinds his teeth."); break; case 5: strcat(info, " sputters."); break; case 6: strcat(info, " breathes some steam toward you."); break; case 7: strcat(info, " spits at you."); break; case 8: strcat(info, " disappears for a moment."); break; case 9: strcat(info, " summons a swarm of flies."); break; case 10: strcat(info, " picks up some beetle and eats it."); break; } } break; // end imp case MONS_TORMENTOR: // cruel devil if (one_chance_in(10)) { demon_taunt( monster ); return (true); } else { switch (random2(18)) { case 0: strcat(info, " laughs crazily."); break; case 1: strcat(info, " grins evilly."); break; case 2: strcat(info, " says, \"I am all your nightmares come true.\""); break; case 3: strcat(info, " says, \"I will show you what pain is.\""); break; case 4: strcat(info, " shouts, \"I'll tear you apart.\""); break; case 5: strcat(info, " says, \"You will wish to die when I get to you.\""); break; case 6: strcat(info, " says, \"I will drown you in your own blood.\""); break; case 7: strcat(info, " screams, \"You will die horribly!\""); break; case 8: strcat(info, " says, \"I will eat your liver.\""); break; case 9: strcat(info, " grins madly."); break; case 10: strcat(info, " shouts, \"Prepare for my thousand needles of pain!\""); break; case 11: strcat(info, " says, \"I know thousand and one way to kill you.\""); break; case 12: strcat(info, " says, \"I'll show you my torture chamber!\""); break; case 13: case 14: strcat(info, " says, \"I'll crush your bones, one by one.\""); break; case 15: strcat(info, " says, \"I know your fate. It's pain.\""); break; case 16: strcat(info, " says, \"Get ready! Throes await you.\""); break; case 17: strcat(info, " grins malevolently."); break; } } break; // end tormentor case MONS_PANDEMONIUM_DEMON: // named demons case MONS_GERYON: case MONS_ASMODEUS: case MONS_DISPATER: case MONS_ANTAEUS: case MONS_ERESHKIGAL: case MONS_MNOLEG: case MONS_LOM_LOBON: case MONS_CEREBOV: case MONS_GLOORX_VLOQ: demon_taunt( monster ); return (true); case MONS_PLAYER_GHOST: // ghost of unsuccesful player switch (random2(24)) { case 0: strcat(info, " laughs crazily."); break; case 1: strcat(info, " grins evilly."); break; case 2: strcat(info, " shouts, \"You will never get the ORB!\""); break; case 3: // mv: ghosts are usually wailing, aren't ? case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: strcat(info, " wails."); break; case 12: strcat(info, " stares at you."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel cold.", MSGCH_WARN); return (true); case 13: strcat(info, " screams, \"You will join me soon!\""); break; case 14: strcat(info, " wails, \"To die, to sleep, no more.\""); break; //Hamlet case 15: strcat(info, " screams, \"You must not succeed where I failed.\""); break; case 16: strcat(info, " screams, \"I'll kill anyone who wants the ORB.\""); break; case 17: strcat(info, " whispers, \"Meet emptiness of death!\""); break; case 18: strcat(info, " whispers, \"Death is liberation.\""); break; case 19: strcat(info, " whispers, \"Everlasting silence awaits you.\""); break; case 20: strcat(info, " screams, \"Don't try to defend. You have no chance!\""); break; case 21: strcat(info, " whispers, \"Death doesn't hurt. What you feel is life.\""); break; case 22: strcat(info, " whispers, \"The ORB doesn't exist.\""); break; case 23: strcat(info, " wails, \"Death is your only future.\""); break; } break; // end players ghost case MONS_PSYCHE: // insane girl switch (random2(20)) { case 0: strcat(info, " smiles happily."); break; case 1: strcat(info, " giggles crazily."); break; case 2: strcat(info, " cries."); break; case 3: strcat(info, " stares at you for a moment."); break; case 4: strcat(info, " sings."); break; case 5: strcat(info, " says, \"Please, could you die a little faster?\""); break; case 6: strcat(info, " says, \"I'm bad girl. But I can't do anything about it.\""); break; case 7: strcat(info, " screams, \"YOU ARE VIOLATING AREA SECURITY!\""); break; case 8: strcat(info, " cries, \"I hate blood and violence.\""); break; case 9: strcat(info, " screams, \"Peace! Flowers! Freedom! Dead adventurers!\""); break; case 10: strcat(info, " says, \"I'm so lonely. Only corpses are my friends.\""); break; case 11: strcat(info, " cries, \"You've killed my pet.\""); break; case 12: strcat(info, " cries, \"You want to steal my orb collection?!\""); break; case 13: strcat(info, " sings some strange song."); break; case 14: strcat(info, " bursts in tears."); break; case 15: strcat(info, " sucks her thumb."); break; case 16: strcat(info, " whispers, \"Hold me, thrill me, kiss me, kill me.\""); break; //(c) U2 ? case 17: strcat(info, " says, \"I'll kill you and take you home.\""); break; case 18: strcat(info, " shouts, \"Well, maybe I'm nutty, but who cares?\""); break; case 19: strcat(info, " shouts, \"I hope that you are sorry for that.\""); break; } break; // end Psyche case MONS_DONALD: // adventurers hating competition case MONS_WAYNE: switch (random2(11)) { case 0: strcat(info, " screams, \"Return home!\""); break; case 1: strcat(info, " screams, \"The Orb is mine!\""); break; case 2: strcat(info, " screams, \"Give me all your treasure!\""); break; case 3: strcat(info, " screams, \"You will never get the Orb!\""); break; case 4: strcat(info, " screams, \"I was here first!\""); break; case 5: strcat(info, " frowns.\""); break; case 6: strcat(info, " looks very upset."); break; case 7: strcat(info, " screams, \"Get away or die!\""); break; case 8: strcat(info, " screams, \"Die!\""); break; case 9: strcat(info, " screams, \"First you have to pass me!\""); break; case 10: strcat(info, " screams, \"I hate you!\""); break; } break; // end Donald case MONS_MICHAEL: // spellcaster who wanted to be alone switch (random2(11)) { case 0: strcat(info, " looks very angry."); break; case 1: strcat(info, " frowns."); break; case 2: strcat(info, " screams, \"I want to be alone!\""); break; case 3: strcat(info, " says, \"You are really nuisance.\""); break; case 4: strcat(info, " screams, \"I wanted to be alone. And you...\""); break; case 5: strcat(info, " screams, \"Get away! Or better yet, die!\""); break; case 6: strcat(info, " mumbles some strange words."); msg_type = MSGCH_MONSTER_SPELL; break; case 7: strcat(info, " points at you."); mpr(info, MSGCH_MONSTER_SPELL); canned_msg(MSG_YOU_RESIST); return (true); case 8: strcat(info, " shakes with wrath."); break; case 9: strcat(info, " drinks a potion."); break; case 10: strcat(info, " gestures wildly."); msg_type = MSGCH_MONSTER_SPELL; break; } break; // end Michael case MONS_ERICA: // wild tempered adventuress switch (random2(12)) { case 0: strcat(info, " screams, \"Die!\""); break; case 1: strcat(info, " screams, \"Do you want it fast or slow?\""); break; case 2: strcat(info, " looks angry."); break; case 3: strcat(info, " drinks a potion."); break; case 4: strcat(info, " says, \"I'm so much better than you.\""); break; case 5: strcat(info, " says, \"Fast and perfect. Such is my way of killing.\""); break; case 6: strcat(info, " screams, \"Hurry! Death awaits!\""); break; case 7: strcat(info, " laughs wildly."); break; case 8: strcat(info, " screams, \"I'll never tell where it is!\""); break; case 9: strcat(info, " screams, \"You'll never get it!\""); break; case 10: strcat(info, " screams, \"Coming here was suicide!\""); break; case 11: strcat(info, " says, \"I love to fight, but killing is better.\""); break; } break; // end Erica case MONS_JOSEPHINE: // ugly old witch looking for somone to kill switch (random2(13)) { case 0: case 1: case 2: strcat(info, " grins evilly."); break; case 3: case 4: strcat(info, " screams, \"I will kill you!\""); break; case 5: strcat(info, " grinds her teeth."); break; case 6: strcat(info, " grins malevolently."); break; case 7: strcat(info, " laughs insanely."); break; case 8: strcat(info, " screams, \"Die!\""); break; case 9: strcat(info, " screams, \"I have something special for you!\""); break; case 10: strcat(info, " screams, \"I'll use your head as decoration in my hut!\""); break; case 11: strcat(info, " says, \"I'll make a rug of your skin.\""); break; case 12: strcat(info, " says, \"How about some decapitation?\""); break; } break; // end Josephine case MONS_HAROLD: // middle aged man, hired to kill you. He is in a hurry. switch (random2(11)) { case 0: strcat(info, " looks nervous."); break; case 1: strcat(info, " screams, \"Hurry up!\""); break; case 2: strcat(info, " screams, \"Could you die faster?\""); break; case 3: strcat(info, " says, \"Stand still. I'm trying to kill you.\""); break; case 4: strcat(info, " screams, \"Die!\""); break; case 5: strcat(info, " says, \"I hope you die soon!\""); break; case 6: strcat(info, " says, \"Only few hits and it's over.\"."); break; case 7: strcat(info, " says, \"You know, I'm in a hurry.\""); break; case 8: strcat(info, " screams, \"I'll finish you soon!\""); break; case 9: strcat(info, " screams, \"Don't delay it.\""); break; case 11: strcat(info, " says, \"Mine is not to reason why. Mine's to do, yours to die.\"" ); } break; // end Harold // skilled warrior looking for some fame. More deads = more fame case MONS_NORBERT: switch (random2(13)) { case 0: strcat(info, " smiles happily."); break; case 1: strcat(info, " screams, \"Die, monster!\""); break; case 2: strcat(info, " screams, \"I'm a hero!\""); break; case 3: strcat(info, " shouts, \"YES! Another notch!\""); break; case 4: strcat(info, " says, \"A pity your head will make such an ugly trophy.\""); break; case 5: strcat(info, " screams, \"Pray, because you'll die soon!\""); break; case 6: strcat(info, " asks \"Did you write a will? You should.\"."); break; case 7: strcat(info, " says, \"I love killing ugly monsters like you.\""); break; case 8: strcat(info, " screams, \"Blood and destruction!\""); break; case 9: strcat(info, " says, \"You know, it's honour to die by my hand.\""); break; case 10: strcat(info, " shouts, \"Your time has come!\""); break; case 11: strcat(info, " says, \"I'm sorry but you don't have a chance.\""); break; case 12: strcat(info, " says, \"Another dead monster... It must be my lucky day!\""); break; } break; // end Norbert case MONS_JOZEF: // bounty hunter switch (random2(14)) { case 0: strcat(info, " looks satisfied."); break; case 1: strcat(info, " screams, \"Die!\""); break; case 2: strcat(info, " screams, \"At last I found you!\""); break; case 3: strcat(info, " shouts, \"I'll get 500 for your head!\""); break; case 4: strcat(info, " says, \"You don't look worth for that money.\""); break; case 5: strcat(info, " says, \"It's nothing personal. I'm paid for it!\""); break; case 6: strcat(info, " asks \"Did you write a testament? You should.\""); break; case 7: strcat(info, " says, \"You are "); strcat(info, you.your_name); strcat(info, ", aren't you?.\""); break; case 8: strcat(info, " says, \"I suppose that you are "); strcat(info, you.your_name); strcat(info, ". Sorry, if I'm wrong.\""); break; case 9: strcat(info, " says, \"One dead "); strcat(info, you.your_name); strcat(info, ", 500 gold pieces. It's in my contract.\""); break; case 10: strcat(info, " shouts, \"Your time has come!\""); break; case 11: strcat(info, " says, \"My job is sometimes very exciting. Sometimes...\""); break; case 12: strcat(info, " says, \"I think I deserve my money.\""); break; case 13: strcat(info, " screams, \"Die! I've got more contracts today.\""); break; } break; // end Jozef case MONS_AGNES: // she is trying to get money and treasure switch (random2(10)) { case 0: strcat(info, " screams, \"Give me all your money!\""); break; case 1: strcat(info, " screams, \"All treasure is mine!\""); break; case 2: strcat(info, " screams, \"You'll never get my money!\""); break; case 3: strcat(info, " grins evilly."); break; case 4: strcat(info, " screams, \"Give me everything and get away!\""); break; case 5: strcat(info, " says, \"I need new robe. I'll buy it from your money.\""); break; case 6: strcat(info, " screams, \"I want your rings! And amulets! And... EVERYTHING!\""); break; case 7: strcat(info, " screams, \"I hate dirty adventurers like you.\""); break; case 8: strcat(info, " says, \"How can you wear that ugly dress?\""); break; case 9: strcat(info, " screams, \"Die, beast!\""); break; } break; // end Agnes case MONS_MAUD: // warrior princess looking for sword "Entarex" switch (random2(11)) { case 0: strcat(info, " screams, \"Submit or die!\""); break; case 1: strcat(info, " screams, \"Give me \"Entarex\"!\""); break; case 2: strcat(info, " screams, \"If you give me \"Entarex\", I'll let you live!\""); break; case 3: strcat(info, " frowns."); break; case 4: strcat(info, " looks upset."); break; case 5: strcat(info, " screams, \"You can't face my power!\""); break; case 6: strcat(info, " screams, \"Give me that sword! Immediately!\""); break; case 7: strcat(info, " screams, \"Your life or \"Entarex\"! You must choose.\""); break; case 8: strcat(info, " screams, \"I want it!\""); break; case 9: strcat(info, " screams, \"Die, you thief!\""); break; case 10: // needed at least one in here to tie to the amnesia // scroll reference -- bwr strcat(info, " asks \"Will you think of me as you die?\""); break; } break; // end Maud // wizard looking for bodyparts as spell components case MONS_FRANCIS: switch (random2(15)) { case 0: strcat(info, " says, \"You've nice eyes. I could use them.\""); break; case 1: strcat(info, " says, \"Excuse me, but I need your head.\""); break; case 2: strcat(info, " says, \"I only need a few of your organs!\""); break; case 3: strcat(info, " ponders the situation."); break; case 4: strcat(info, " looks for scalpel."); break; case 5: simple_monster_message( monster, " casts a spell", MSGCH_MONSTER_SPELL ); strcat(info, "'s hands started to glow with soft light."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 6: strcat(info, " says, \"This won't hurt a bit.\""); break; case 7: strcat(info, " throws something at you."); break; case 8: strcat(info, " says, \"I want you in my laboratory!\""); break; case 9: strcat(info, " says, \"What about little dissection?\""); break; case 10: strcat(info, " says, \"I have something special for you.\""); break; case 11: strcat(info, " screams, \"Don't move! I want to cut your ear!\""); break; case 12: strcat(info, " says, \"What about your heart? Do you need it?\""); break; case 13: strcat(info, " says, \"Did you know that corpses are an important natural resource?\""); break; case 14: strcat(info, " says, \"Don't worry, I'll only take what I need.\""); break; } break; // end Francis case MONS_RUPERT: // crazy adventurer switch (random2(11)) { case 0: strcat(info, " says, \"You are a monster, aren't you?\""); break; case 1: strcat(info, " screams, \"Die, monster!\""); break; case 2: strcat(info, " screams, \"Give me Holy Grail!\""); break; case 3: strcat(info, " screams, \"Red! No, blue!\""); break; case 4: strcat(info, " looks confused."); break; case 5: strcat(info, " looks excited."); break; case 6: strcat(info, " shouts, \"I'm great and powerful hero!\""); break; case 7: strcat(info, " screams, \"Get ready! I'll kill you! Or something like it...\""); break; case 8: strcat(info, " says, \"My Mom always said, kill them all.\""); break; case 9: strcat(info, " screams, \"You killed all those lovely monsters, you murderer!\""); break; case 10: strcat(info, " screams, \"Hurray!\""); break; } break; // end Rupert case MONS_NORRIS: // enlighten but crazy man switch (random2(24)) { case 0: strcat(info, " sings \"Hare Rama, Hare Krishna!\""); break; case 1: strcat(info, " smiles at you."); break; case 2: strcat(info, " says, \"After death you'll find inner peace.\""); break; case 3: strcat(info, " says, \"Life is just suffering. I'll help you.\""); break; case 4: strcat(info, " is surrounded with aura of peace."); break; case 5: strcat(info, " looks very balanced."); break; case 6: strcat(info, " says, \"Don't resist. I'll do it for you.\""); break; case 7: strcat(info, " screams, \"Enter NIRVANA! Now!\""); break; case 8: strcat(info, " says, \"Death is just a liberation!\""); break; case 9: strcat(info, " says, \"Feel free to die. It's great thing.\""); break; case 10: strcat(info, " says, \"OHM MANI PADME HUM!\""); break; case 11: strcat(info, " mumbles some mantras."); msg_type = MSGCH_MONSTER_SPELL; break; case 12: strcat(info, " says, \"Breath deeply.\""); break; case 13: strcat(info, " screams, \"Love! Eternal love!\""); break; case 14: strcat(info, " screams, \"Peace! I bring you eternal peace!\""); break; case 15: strcat(info, " sighs \"Enlightenment is such responsibility.\""); break; case 16: strcat(info, " looks relaxed."); break; case 17: strcat(info, " screams, \"Free your soul! Die!\""); break; case 18: strcat(info, " screams, \"Blow your mind!\""); break; case 19: strcat(info, " says, \"The Orb is only a myth. Forget about it.\""); break; case 20: strcat(info, " says, \"It's all maya.\""); break; case 21: strcat(info, " says, \"Drop out!\""); break; case 22: strcat(info, " sings, \"Peace now, freedom now! Peace now, freedom now!\""); break; case 23: strcat(info, " says, \"This is called Combat Meditation.\""); break; } break; // end Norris case MONS_MARGERY: // powerful sorceress, guarding the ORB switch (random2(22)) { case 0: strcat(info, " says, \"You are dead.\""); break; case 1: strcat(info, " looks very self-confident."); break; case 2: strcat(info, " screams, \"You must be punished!\""); break; case 3: strcat(info, " screams, \"You can't withstand my power!\""); break; case 4: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " is surrounded with aura of power."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 5: strcat(info, "'s eyes starts to glow with a red light."); break; case 6: strcat(info, "'s eyes starts to glow with a green light."); break; case 7: strcat(info, "'s eyes starts to glow with a blue light."); break; case 8: strcat(info, " screams, \"All trespassers must die!\""); break; case 9: strcat(info, " says, \"Die!\""); break; case 10: strcat(info, " screams, \"You'll have to get past me!\""); break; case 11: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, " becomes transparent for a moment."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 12: strcat(info, " gestures."); msg_type = MSGCH_MONSTER_SPELL; break; case 13: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat(info, "'s hands start to glow."); msg_type = MSGCH_MONSTER_ENCHANT; break; case 14: strcat(info, " screams, \"Ergichanteg reztahaw!\""); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel really bad.", MSGCH_WARN); return (true); case 15: strcat(info, " screams, \"You are doomed!\""); break; case 16: strcat(info, " screams, \"Nothing can help you.\""); break; case 17: strcat(info, " screams, \"Death is my middle name!\""); break; case 18: strcat(info, " gestures."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel doomed.", MSGCH_WARN); return (true); case 19: strcat(info, " gestures."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel weakened.", MSGCH_WARN); return (true); case 20: strcat(info, " throws some purple powder towards you."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel cursed.", MSGCH_WARN); return (true); case 21: strcat(info, " screams, \"The ORB is only a tale, but I will kill you anyway!"); break; } break; // end Margery case MONS_IJYB: // twisted goblin switch (random2(14)) { case 0: strcat(info, " screams, \"Die!\""); break; case 1: strcat(info, " screams, \"Me kill you!\""); break; case 2: strcat(info, " screams, \"Me stronger than you!\""); break; case 3: case 4: strcat(info, " grins evilly."); break; case 5: strcat(info, " screams, \"It's all mine!\""); break; case 6: strcat(info, " screams, \"Get away!\""); break; case 7: strcat(info, " screams, \"Level is mine! All mine!\""); break; case 8: strcat(info, " screams, \"I cut your head off!\""); break; case 9: strcat(info, " screams, \"I dance on your bones!\""); break; case 10: strcat(info, " screams, \"Me very upset!\""); break; case 11: strcat(info, " screams, \"You nasty! Big nasty!\""); break; case 12: strcat(info, " screams, \"No! No, no, no, no!\""); break; case 13: strcat(info, " screams, \"I no like you!\""); break; } break; // end IJYB case MONS_BLORK_THE_ORC: // unfriendly orc switch (random2(21)) { case 0: strcat(info, " screams, \"I don't like you!\""); break; case 1: strcat(info, " screams, \"I'm going to kill you!\""); break; case 2: strcat(info, " screams, \"I'm much stronger than you!\""); break; case 3: case 4: strcat(info, " grins evilly."); break; case 5: strcat(info, " frowns."); break; case 6: case 7: case 8: case 9: strcat(info, " looks angry."); break; case 10: strcat(info, " screams, \"I'll eat your brain! And then I'll vomit it back up!\""); break; case 11: strcat(info, " screams, \"You are the ugliest creature I've ever seen!\""); break; case 12: strcat(info, " screams, \"I'll cut your head off!\""); break; case 13: strcat(info, " screams, \"I'll break your legs!\""); break; case 14: strcat(info, " screams, \"I'll break your arms!\""); break; case 15: strcat(info, " screams, \"I'll crush all your ribs! One by one!\""); break; case 16: strcat(info, " screams, \"I'll make a cloak from your skin!\""); break; case 17: strcat(info, " screams, \"I'll decorate my home with your organs!\""); break; case 18: strcat(info, " screams, \"Die!\""); break; case 19: strcat(info, " screams, \"I'll cover the dungeon with your blood!\""); break; case 20: strcat(info, " screams, \"I'll drink your blood! Soon!\""); break; } break; // end Blork case MONS_EROLCHA: // ugly ogre switch (random2(11)) { case 0: strcat(info, " tries to grin evilly."); break; case 1: strcat(info, " screams, \"Eat!\""); break; case 2: strcat(info, " screams, \"Stand! Erolcha hit you!\""); break; case 3: strcat(info, " screams, \"Blood!\""); break; case 4: strcat(info, " screams, \"Erolcha kill you!\""); break; case 5: strcat(info, " screams, \"Erolcha crush your head!\""); break; case 6: strcat(info, " roars."); break; case 7: strcat(info, " growls."); break; case 8: strcat(info, " screams, \"Lunch!\""); break; case 9: strcat(info, " screams, \"Erolcha happy to kill you!\""); break; case 10: strcat(info, " screams, \"Erolcha angry!\""); break; } break; // end Erolcha case MONS_URUG: // orc hired to kill you switch (random2(11)) { case 0: strcat(info, " grins evilly."); break; case 1: strcat(info, " screams, \"Die!\""); break; case 2: strcat(info, " screams, \"I'm going to kill you! Now!\""); break; case 3: strcat(info, " screams, \"Blood and destruction!\""); break; case 4: strcat(info, " sneers, \"Innocent? I'll kill you anyway.\""); break; case 5: strcat(info, " screams, \"I'll get 30 silver pieces for your head!\""); break; case 6: strcat(info, " roars."); break; case 7: strcat(info, " howls with blood-lust."); break; case 8: strcat(info, " screams, \"You are already dead.\""); break; case 9: strcat(info, " says, \"Maybe you aren't "); strcat(info, you.your_name); strcat(info, ". It doesn't matter.\""); break; case 10: strcat(info, " screams, \"I love blood!\""); break; } break; // end Urug case MONS_SNORG: // troll switch (random2(16)) { case 0: strcat(info, " grins."); break; case 1: case 2: case 3: strcat(info, " smells terrible."); break; case 4: case 5: case 6: strcat(info, " looks very hungry."); break; case 7: strcat(info, " screams, \"Snack!\""); break; case 8: strcat(info, " roars."); break; case 9: strcat(info, " says, \"Food!\""); break; case 10: strcat(info, " screams, \"Snorg hungry!\""); break; case 11: strcat(info, " screams, \"Snorg very, very hungry!\""); case 12: strcat(info, " says, \"Snorg eat you.\""); break; case 13: strcat(info, " says, \"You food?\""); break; case 14: strcat(info, " says, \"Yum, yum.\""); break; case 15: strcat(info, " burps."); break; } break; // end Snorg case MONS_XTAHUA: // ancient dragon switch (random2(13)) { case 0: strcat(info, " roars, \"DIE, PUNY ONE!\""); break; case 1: strcat(info, " growls, \"YOU BORE ME SO.\""); break; case 2: strcat(info, " rumbles, \"YOU'RE BARELY A SNACK.\""); break; case 3: strcat(info, " roars, \"I HATE BEING BOTHERED!\""); break; case 4: strcat(info, " roars, \"I HOPE YOU'RE TASTY!\""); break; case 5: strcat(info, " roars, \"BAH! BLOODY ADVENTURERS.\""); break; case 6: strcat(info, " roars, \"FACE MY WRATH!\""); break; case 7: strcat(info, " glares at you."); break; case 8: strcat(info, " roars, \"COMING HERE WAS YOUR LAST MISTAKE!\""); break; case 9: strcat(info, " roars, \"I'VE KILLED HUNDREDS OF ADVENTURERS!\""); break; case 10: case 11: case 12: strcat(info, " roars horribly."); mpr(info, MSGCH_TALK); mpr("You are afraid.", MSGCH_WARN); return (true); } break; // end Xtahua case MONS_BORIS: // ancient lich switch (random2(24)) { case 0: strcat(info, " says, \"I didn't invite you.\""); break; case 1: strcat(info, " says, \"You can't imagine my power.\""); break; case 2: strcat(info, " says, \"Orb? You want the Orb? You'll never get it.\""); break; case 3: strcat(info, " says, \"The world, the flesh, and the devil.\""); break; case 4: strcat(info, " gestures."); break; case 5: strcat(info, " stares at you."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel drained.", MSGCH_WARN); return (true); case 6: strcat(info, " stares at you."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel weakened.", MSGCH_WARN); return (true); case 7: strcat(info, " stares at you."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You feel troubled.", MSGCH_WARN); return (true); case 8: strcat(info, " says \"Magic. You know nothing about it.\""); break; case 9: strcat(info, " says, \"My power is unlimited.\""); break; case 10: strcat(info, " says, \"You can't kill me. I'm immortal.\""); break; case 11: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); mpr("Your equipment suddenly seems to weigh more.", MSGCH_WARN); return (true); case 12: strcat(info, " says, \"I know the secret of eternal life. Do you?\""); break; case 13: strcat(info, " says, \"I'll be back.\""); break; case 14: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); canned_msg( MSG_YOU_RESIST ); return (true); case 15: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); mpr("Suddenly you are surrounded with pale green light.", MSGCH_WARN); return (true); case 16: strcat(info, " casts a spell."); mpr(info, MSGCH_MONSTER_SPELL); mpr("You have terrible head-ache.", MSGCH_WARN); return (true); case 17: strcat(info, " says, \"I know your future. Your future is death.\""); break; case 18: strcat(info, " says, \"Who wants to live forever? Me.\""); break; case 19: strcat(info, " laughs."); break; case 20: strcat(info, " says, \"Join the legion of my servants.\""); break; case 21: strcat(info, " says, \"There's only one solution for you. To die.\""); break; case 22: strcat(info, " says, \"You can never win.\""); break; case 23: simple_monster_message( monster, " casts a spell.", MSGCH_MONSTER_SPELL ); strcat( info, " speeds up." ); msg_type = MSGCH_MONSTER_ENCHANT; break; } break; // end BORIS case MONS_DEATH_COB: if (one_chance_in(2000)) { mpr("The death cob makes a corny joke.", MSGCH_TALK); return (true); } return (false); case MONS_KILLER_KLOWN: // Killer Klown - guess! switch (random2(10)) { case 0: strcat(info, " giggles crazily."); break; case 1: strcat(info, " laughs merrily."); break; case 2: strcat(info, " beckons to you."); break; case 3: strcat(info, " does a flip."); break; case 4: strcat(info, " does a somersault."); break; case 5: strcat(info, " smiles at you."); break; case 6: strcat(info, " grins with merry abandon."); break; case 7: strcat(info, " howls with blood-lust!"); break; case 8: strcat(info, " pokes out its tongue."); break; case 9: strcat(info, " says, \"Come and play with me!\""); break; } break; // end Killer Klown default: strcat(info, " says, \"I don't know what to say. It's a bug.\""); break; } // end monster->type - monster type switch } // end default mpr(info, msg_type); return true; } // end mons_speaks = end of routine