/* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */ /* mtalk.c */ /* monster talk functions */ #include "glob.h" /* The druid's altar is in the northern forest */ void m_talk_druid(pmt m) { int i; pml curr; if (! m_statusp(m,HOSTILE)) { print1("The Archdruid raises a hand in greeting."); if (! gamestatusp(SPOKE_TO_DRUID)) { setgamestatus(SPOKE_TO_DRUID); morewait(); print1("The Archdruid congratulates you on reaching his sanctum."); print2("You feel competent."); /* DAG gain_experience starts with a morewait as well... */ /* morewait(); */ gain_experience(300); if (Player.patron == DRUID) { print1("The Archdruid conveys to you the wisdom of nature...."); print2("You feel like a sage."); morewait(); for(i=0;i 0) Player.guildxp[i] += 300; } } } mprint("Do you request a ritual of neutralization? [yn] "); if (ynq() == 'y') { if (Phase/2 == 6 || Phase/2 == 0) { /* full or new moon */ mprint("\"Unfortunately, I cannot perform a ritual of balance on"); if (Phase/2 == 6) mprint("this lawful day.\""); else mprint("this chaotic day.\""); } else if (Phase/2 == 3 || Phase/2 == 9) { /* half moon */ mprint("You take part in today's holy celebration of balance..."); Player.alignment = 0; Player.mana = calcmana(); if (Player.patron == DRUID) gain_experience(200); /* if a druid wants to spend 2 days */ Time+=60; /* celebrating for 1600 xp, why not? */ hourly_check(); Time+=60; hourly_check(); Time+=60; hourly_check(); Time+=60; hourly_check(); Time+=60; hourly_check(); Time+=60; hourly_check(); } else { mprint("The ArchDruid conducts a sacred rite of balance..."); if (Player.patron == DRUID) { Player.alignment = 0; Player.mana = calcmana(); } else Player.alignment -= Player.alignment*max(0, 10 - Player.level)/10; /* the higher level the character is, the more set in his/her ways */ Time+=60; hourly_check(); } dataprint(); } } else { mprint("The ArchDruid looks at you and cries: 'Unclean! Unclean!'"); disrupt(Player.x,Player.y,100); mprint("This seems to have satiated his desire for vengeance."); mprint("'Have you learned your lesson?' The ArchDruid asks. [yn] "); /* WDT: this didn't used to have a 'y'. I'm not sure what was * intended. */ if (ynq() != 'n') { mprint("'I certainly hope so!' says the ArchDruid."); for (curr = Level->mlist; curr; curr = curr->next) m_status_reset(curr->m, HOSTILE); m_vanish(m); } else { mprint("'Idiot.' mutters the ArchDruid."); p_damage(500,UNSTOPPABLE,"the ArchDruid's Vengeance"); } } } void m_talk_silent(pmt m) { #ifdef NEW_QUOTES int reply = random_range(8); #else int reply = random_range(4); #endif if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (reply) { case 0:strcat(Str2," does not reply. "); break; case 1:strcat(Str2," shrugs silently. "); break; case 2:strcat(Str2," holds a finger to his mouth. "); break; case 3:strcat(Str2," glares at you but says nothing. "); break; case 4:strcat(Str2," is not going to answer you. "); break; case 5:strcat(Str2," has taken a vow of silence. "); break; case 6:strcat(Str2," attempts sign language. "); break; case 7:strcat(Str2," fails to respond."); break; } mprint(Str2); } void m_talk_stupid(pmt m) { int reply = random_range(4); if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (reply) { case 0:strcat(Str2," looks at you with mute incomprehension."); break; case 1:strcat(Str2," growls menacingly and ignores you."); break; case 2:strcat(Str2," does not seem to have heard you."); break; case 3:strcat(Str2," tries to pretend it didn't hear you."); break; } mprint(Str2); } void m_talk_greedy(pmt m) { int reply = random_range(4); if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (reply) { case 0:strcat(Str2," says: Give me a treasure.... ");break; case 1:strcat(Str2," says: Stand and deliver, knave! "); break; case 2:strcat(Str2," says: Your money or your life! "); break; case 3:strcat(Str2," says: Yield or Die! "); break; } mprint(Str2); } void m_talk_hungry(pmt m) { int reply = random_range(4); if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (reply) { case 0:strcat(Str2," says: I hunger, foolish adventurer! "); break; case 1:strcat(Str2," drools menacingly at you. "); break; case 2:strcat(Str2," says: You're invited to be lunch! "); break; case 3:strcat(Str2," says: Feeed Meee! "); break; } mprint(Str2); } void m_talk_guard(pmt m) { if (m_statusp(m,HOSTILE)) { print1("'Surrender in the name of the Law!'"); print2("Do it? [yn] "); if (ynq2()=='y') { Player.alignment++; if (Current_Environment == E_CITY) { print1("Go directly to jail. Do not pass go, do not collect 200Au."); print2("You are taken to the city gaol."); morewait(); send_to_jail(); drawvision(Player.x,Player.y); } else { clearmsg(); print1("Mollified, the guard disarms you and sends you away."); dispose_lost_objects(1,Player.possessions[O_WEAPON_HAND]); pacify_guards(); } } else { clearmsg(); print1("All right, you criminal scum, you asked for it!"); } } else /* not hostile */ { if ( (!CitySiteList[L_TOURIST-CITYSITEBASE][0]) && (Current_Environment == E_CITY) ) { print1("You should visit the tourist information booth and get their guidebook."); print2("The booth is located near the entrance to the city."); morewait(); CitySiteList[L_TOURIST-CITYSITEBASE][0] = TRUE; } else if (Player.rank[ORDER]>0) print1("'Greetings comrade! May you always tread the paths of Law.'"); #ifdef NEW_QUOTES else { if (random_range(2)) print1("Move it right along, stranger!"); else print1("Nothing to see here."); } #else else print1("Move it right along, stranger!"); #endif } } void m_talk_mp(pmt m) { mprint("The mendicant priest asks you to spare some treasure for the needy"); } void m_talk_titter(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); strcat(Str2," titters obscenely at you."); mprint(Str2); } void m_talk_ninja(pmt m) { mprint("The black-garbed figure says apologetically:"); mprint("'Situree simasita, wakarimasen.'"); } void m_talk_thief(pmt m) { if (Player.rank[THIEVES]) { if (m->level == 2) m->monstring = "sneak thief"; else m->monstring = "master thief"; print1("The cloaked figure makes a gesture which you recognize..."); print2("...the thieves' guild recognition signal!"); print3("'Sorry, mate, thought you were a mark....'"); morewait(); m_vanish(m); } else m_talk_man(m); } void m_talk_assassin(pmt m) { m->monstring = "master assassin"; print1("The ominous figure does not reply, but hands you an embossed card:"); print2("'Guild of Assassins Ops are forbidden to converse with targets.'"); } void m_talk_im(pmt m) { pol tmp; if (strcmp(m->monstring,"itinerant merchant") != 0) { m->monstring = "itinerant merchant"; } if (m->possessions == NULL) mprint("The merchant says: Alas! I have nothing to sell!"); else { m->possessions->thing->known = 2; clearmsg(); mprint("I have a fine"); mprint(itemid(m->possessions->thing)); mprint("for only"); mlongprint(max(10,4*true_item_value(m->possessions->thing))); mprint("Au."); mprint("Want it? [yn] "); if (ynq()=='y') { if (Player.cash < (max(10,4*true_item_value(m->possessions->thing)))) { if (Player.alignment > 10) { mprint("Well, I'll let you have it for what you've got."); Player.cash = 0; gain_item(m->possessions->thing); } else mprint("Beat it, you deadbeat!"); } else { mprint("Here you are. Have a good day."); Player.cash -= max(10,(4*item_value(m->possessions->thing))); gain_item(m->possessions->thing); } } else { mprint("Sorry I couldn't help you."); free_obj( m->possessions->thing, TRUE ); } tmp = m->possessions; m->possessions = tmp->next; free( tmp ); if (NULL != m->possessions) { mprint("Well then, I must be off. Good day."); m_vanish(m); } } } void m_talk_man(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (random_range(5)) { case 0:strcat(Str2," asks you for the way home."); break; case 1:strcat(Str2," wishes you a pleasant day."); break; case 2:strcat(Str2," sneers at you contemptuously."); break; case 3:strcat(Str2," smiles and nods."); break; case 4:strcat(Str2," tells you a joke."); break; } mprint(Str2); } void m_talk_evil(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (random_range(14)) { case 0:strcat(Str2," says: 'THERE CAN BE ONLY ONE!'"); break; case 1:strcat(Str2," says: 'Prepare to die, Buckwheat!'"); break; case 2:strcat(Str2," says: 'Time to die!'"); break; case 3:strcat(Str2," says: 'There will be no mercy.'"); break; case 4:strcat(Str2," insults your mother-in-law."); break; case 5:strcat(Str2," says: 'Kurav tu ando mul!'"); break; case 6:strcat(Str2," says: '!va al infierno!'"); break; case 7:strcat(Str2," says: 'dame desu, nee.'"); break; case 8:strcat(Str2," spits on your rug and calls your cat a bastard."); break; case 9:strcat(Str2," snickers malevolently and draws a weapon."); break; case 10:strcat(Str2," sends 'rm -r *' to your shell!"); break; case 11:strcat(Str2," tweaks your nose and cackles evilly."); break; case 12:strcat(Str2," thumbs you in the eyes."); break; case 13:strcat(Str2," kicks you in the groin."); break; } mprint(Str2); } void m_talk_robot(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); switch (random_range(4)) { case 0:strcat(Str2," says: 'exterminate...Exterminate...EXTERMINATE!!!'"); break; case 1:strcat(Str2," says: 'Kill ... Crush ... Destroy'"); break; case 2:strcat(Str2," says: 'Danger -- Danger'"); break; case 3:strcat(Str2," says: 'Yo Mama -- core dumped.'"); break; } mprint(Str2); } void m_talk_slithy(pmt m) { mprint("It can't talk -- it's too slithy!"); } void m_talk_mimsy(pmt m) { mprint("It can't talk -- it's too mimsy!"); } void m_talk_burble(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); strcat(Str2," burbles hatefully at you."); mprint(Str2); } void m_talk_beg(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); strcat(Str2," asks you for alms."); mprint(Str2); } void m_talk_hint(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); if (m_statusp(m,HOSTILE)) { strcat(Str2," only sneers at you. "); mprint(Str2); } else { strcat(Str2," whispers in your ear: "); mprint(Str2); hint(); m->talkf = M_TALK_SILENT; } } void m_talk_gf(pmt m) { mprint("The good fairy glints: Would you like a wish?"); if (ynq()=='y') { mprint("The good fairy glows: Are you sure?"); if (ynq()=='y') { mprint("The good fairy radiates: Really really sure?"); if (ynq()=='y') { mprint("The good fairy beams: I mean, like, sure as sure can be?"); if (ynq()=='y') { mprint("The good fairy dazzles: You don't want a wish, right?"); if (ynq()=='y') mprint("The good fairy laughs: I thought not."); else wish(0); } } } } mprint("In a flash of sweet-smelling light, the fairy vanishes...."); Player.hp = max(Player.hp,Player.maxhp); Player.mana = max(Player.mana,calcmana()); mprint("You feel mellow."); m_vanish(m); } void m_talk_ef(pmt m) { mprint("The evil fairy roils: Eat my pixie dust!"); mprint("She waves her black-glowing wand, which screams thinly...."); m->movef=M_MOVE_SMART; m->meleef=M_MELEE_POISON; m->specialf=M_SP_THIEF; m_status_set(m,HOSTILE); acquire(-1); bless(-1); sleep_player(m->level/2); summon(-1,-1); summon(-1,-1); summon(-1,-1); summon(-1,-1); } void m_talk_seductor(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); if (Player.preference == 'n') { strcat(Str2, " notices your disinterest and leaves with a pout."); mprint(Str2); } else { strcat(Str2," beckons seductively..."); mprint(Str2); mprint("Flee? [yn] "); if (ynq()=='y') { mprint("You feel stupid."); } else { strcpy(Str2,"The "); strcat(Str2,m->monstring); strcat(Str2," shows you a good time...."); mprint(Str2); gain_experience(500); Player.con++; } } m_vanish(m); } void m_talk_demonlover(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); if (Player.preference == 'n') { strcat(Str2, " notices your disinterest and changes with a snarl..."); mprint(Str2); morewait(); } else { strcat(Str2," beckons seductively..."); mprint(Str2); mprint("Flee? [yn] "); if (ynq()=='y') mprint("You feel fortunate...."); else { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); strcat(Str2," shows you a good time...."); mprint(Str2); morewait(); mprint("You feel your life energies draining..."); level_drain(random_range(3)+1,"a demon's kiss"); morewait(); } } m->talkf = M_TALK_EVIL; m->meleef = M_MELEE_SPIRIT; m->specialf = M_SP_DEMON; m_status_reset(m,NEEDY); m_status_set(m,HOSTILE); if ((m->monchar&0xff) == 's') { m->monchar = 'I'|CLR(RED); m->monstring = "incubus"; } else { m->monchar = 'S'|CLR(RED); m->monstring = "succubus"; } if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); strcat(Str2," laughs insanely."); mprint(Str2); mprint("You now notice the fangs, claws, batwings..."); } void m_talk_horse(pmt m) { if (m_statusp(m,HOSTILE)) mprint("The horse neighs angrily at you."); else if (m_statusp(m,HUNGRY)) mprint("The horse noses curiously at your pack."); else if (gamestatusp(MOUNTED)) mprint("The horse and your steed don't seem to get along."); else if (Current_Environment == Current_Dungeon) mprint("The horse shies; maybe he doesn't like the dungeon air...."); else { mprint("The horse lets you pat his nose. Want to ride him? [yn] "); if (ynq()=='y') { m_remove(m); setgamestatus(MOUNTED); calc_melee(); mprint("You are now equitating!"); } } } void m_talk_hyena(pmt m) { mprint("The hyena only laughs at you..."); } void m_talk_parrot(pmt m) { mprint("Polly wanna cracker?"); } void m_talk_servant(pmt m) { int target,x=Player.x,y=Player.y; if (m->id == SERV_LAW) { target = SERV_CHAOS; mprint("The Servant of Law pauses in thought for a moment."); mprint("You are asked: Are there any Servants of Chaos hereabouts? [yn] "); } else { target = SERV_LAW; mprint("The Servant of Chaos grins mischievously at you."); mprint("You are asked: Are there any Servants of Law hereabouts? [yn] "); } if (ynq()=='y') { print1("Show me."); show_screen(); drawmonsters(TRUE); setspot(&x,&y); if (Level->site[x][y].creature != NULL) { if (Level->site[x][y].creature->id == target) { mprint("The Servant launches itself towards its enemy."); mprint("In a blaze of combat, the Servants annihilate each other!"); gain_experience(m->xpv); m_death(Level->site[x][y].creature); Level->site[m->x][m->y].creature = NULL; m->x = x; m->y = y; Level->site[x][y].creature = m; m_death(Level->site[x][y].creature); } else mprint("Right. Tell me about it. Idiot!"); } else mprint("Right. Tell me about it. Idiot!"); } else mprint("The servant shrugs and turns away."); } void m_talk_animal(pmt m) { if (m->uniqueness == COMMON) { strcpy(Str2,"The "); strcat(Str2,m->monstring); } else strcpy(Str2,m->monstring); mprint(Str2); mprint("shows you a scholarly paper by Dolittle, D. Vet."); mprint("which demonstrates that animals don't have speech centers"); mprint("complex enough to communicate in higher languages."); mprint("It giggles softly to itself and takes back the paper."); } void m_talk_scream(pmt m) { mprint("A thinly echoing scream reaches your ears...."); morewait(); mprint("You feel doomed...."); morewait(); mprint("A bird appears and flies three times widdershins around your head."); summon(-1,QUAIL); m->talkf = M_TALK_EVIL; } void m_talk_archmage(pmt m) { if (m_statusp(m,HOSTILE)) { mprint("The Archmage ignores your attempt at conversation"); mprint("and concentrates on his spellcasting...."); } else if (Current_Environment == E_COURT) { mprint("The Archmage congratulates you on getting this far."); mprint("He invites you to attempt the Throne of High Magic"); mprint("but warns you that it is important to wield the Sceptre"); mprint("before sitting on the throne."); if (Level->site[m->x][m->y].p_locf == L_THRONE) { mprint("The Archmage smiles and makes an arcane gesture...."); m_vanish(m); } } else { mprint("The Archmage tells you to find him again in his"); mprint("Magical Court at the base of his castle in the mountains"); mprint("of the far North-East; if you do he will give you some"); mprint("important information."); } } void m_talk_maharaja(pmt m) { if (m_statusp(m,HOSTILE)) { switch (random_range(4)) { case 0: mprint("The Maharaja says: 'So Mote it be!'"); break; case 1: mprint("The Maharaja says: 'Let it be written!'"); break; case 2: mprint("The Maharaja says: 'Let it be done!'"); break; case 3: mprint("The Maharaja offers you goat-eyeball soup.'"); break; } } else if (Current_Environment == E_PALACE) { mprint("The Maharaja insists that you leave. Or die."); } else { mprint("Where did I put those dungeons?"); } } void m_talk_merchant(pmt m) { if (! m_statusp(m,HOSTILE)) { if (Current_Environment == E_VILLAGE) { mprint("The merchant asks you if you want to buy a horse for 250GP."); mprint("Pay the merchant? [yn] "); if (ynq()=='y') { if (Player.cash < 250) mprint("The merchant says: 'Come back when you've got the cash!'"); else { Player.cash -= 250; mprint("The merchant takes your money and tells you to select"); mprint("any horse you want in the stables."); mprint("He says: 'You'll want to get to know him before trying to"); mprint("ride him. By the way, food for the horse is not included.'"); mprint("The merchant runs off toward the bank, cackling gleefully."); m_vanish(m); } } else mprint("The merchant tells you to stop wasting his time."); } else { mprint("The merchant tells you to visit his stables at his village"); mprint("for a great deal on a horse."); } } else { mprint("The merchant ignores you and screams:"); mprint("'Help! Help! I'm being oppressed!'"); } } void m_talk_prime(pmt m) { if (!m_statusp(m,HOSTILE)) { if (Current_Environment == E_CIRCLE) { print1("The Prime nods brusquely at you, removes a gem from his"); print2("sleeve, places it on the floor, and vanishes wordlessly."); morewait(); m_dropstuff(m); m_vanish(m); } else { print1("The Prime makes an intricate gesture, which leaves behind"); print2("glowing blue sparks... He winks mischievously at you...."); if (Player.rank[CIRCLE] > 0) { morewait(); print1("The blue sparks strike you! You feel enhanced!"); print2("You feel more experienced...."); Player.pow+=Player.rank[CIRCLE]; Player.mana += calcmana(); gain_experience(1000); m_vanish(m); } } } else m_talk_evil(m); }