1 /* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */
2 /* mtalk.c */
3 /* monster talk functions */
4 
5 #include "glob.h"
6 
7 
8 /* The druid's altar is in the northern forest */
m_talk_druid(m)9 void m_talk_druid(m)
10 struct monster *m;
11 {
12   int i;
13   pml curr;
14 
15   if (! m_statusp(m,HOSTILE)) {
16     print1("The Archdruid raises a hand in greeting.");
17     if (! gamestatusp(SPOKE_TO_DRUID)) {
18       setgamestatus(SPOKE_TO_DRUID);
19       morewait();
20       print1("The Archdruid congratulates you on reaching his sanctum.");
21       print2("You feel competent.");
22       morewait();
23       gain_experience(300);
24       if (Player.patron == DRUID) {
25 	print1("The Archdruid conveys to you the wisdom of nature....");
26 	print2("You feel like a sage.");
27 	morewait();
28 	for(i=0;i<NUMRANKS;i++) {
29 	  if (Player.guildxp[i] > 0)
30 	    Player.guildxp[i] += 300;
31 	}
32       }
33     }
34     mprint("Do you request a ritual of neutralization? [yn] ");
35     if (ynq() == 'y') {
36       if (Phase/2 == 6 || Phase/2 == 0) {	/* full or new moon */
37 	mprint("\"Unfortunately, I cannot perform a ritual of balance on");
38 	if (Phase/2 == 6)
39 	  mprint("this lawful day.\"");
40 	else
41 	  mprint("this chaotic day.\"");
42       }
43       else if (Phase/2 == 3 || Phase/2 == 9) {	/* half moon */
44 	mprint("You take part in today's holy celebration of balance...");
45 	Player.alignment = 0;
46 	Player.mana = calcmana();
47 	if (Player.patron == DRUID)
48 	  gain_experience(200);	/* if a druid wants to spend 2 days */
49 	Time+=60;		/* celebrating for 1600 xp, why not? */
50 	hourly_check();
51 	Time+=60;
52 	hourly_check();
53 	Time+=60;
54 	hourly_check();
55 	Time+=60;
56 	hourly_check();
57 	Time+=60;
58 	hourly_check();
59 	Time+=60;
60 	hourly_check();
61       }
62       else {
63 	mprint("The ArchDruid conducts a sacred rite of balance...");
64 	if (Player.patron == DRUID) {
65 	  Player.alignment = 0;
66 	  Player.mana = calcmana();
67 	}
68 	else
69 	  Player.alignment -= Player.alignment*max(0, 10 - Player.level)/10;
70 	  /* the higher level the character is, the more set in his/her ways */
71 	Time+=60;
72 	hourly_check();
73       }
74       dataprint();
75     }
76   }
77   else {
78     mprint("The ArchDruid looks at you and cries: 'Unclean! Unclean!'");
79     disrupt(Player.x,Player.y,100);
80     mprint("This seems to have satiated his desire for vengeance.");
81     mprint("'Have you learned your lesson?' The ArchDruid asks. [yn] ");
82     if (ynq()) {
83       mprint("'I certainly hope so!' says the ArchDruid.");
84       for (curr = Level->mlist; curr; curr = curr->next)
85 	m_status_reset(curr->m, HOSTILE);
86       m_vanish(m);
87     }
88     else {
89       mprint("'Idiot.' mutters the ArchDruid.");
90       p_damage(500,UNSTOPPABLE,"the ArchDruid's Vengeance");
91     }
92   }
93 }
94 
95 
m_talk_silent(m)96 void m_talk_silent(m)
97 struct monster *m;
98 {
99 
100   int reply = random_range(4);
101 
102   if (m->uniqueness == COMMON) {
103     strcpy(Str2,"The ");
104     strcat(Str2,m->monstring);
105   }
106   else strcpy(Str2,m->monstring);
107   switch (reply) {
108     case 0:strcat(Str2," does not reply. "); break;
109     case 1:strcat(Str2," shrugs silently. "); break;
110     case 2:strcat(Str2," hold a finger to his mouth. "); break;
111     case 3:strcat(Str2," glares at you but says nothing. "); break;
112   }
113   mprint(Str2);
114 }
115 
m_talk_stupid(m)116 void m_talk_stupid(m)
117 struct monster *m;
118 {
119 
120   int reply = random_range(4);
121   if (m->uniqueness == COMMON) {
122     strcpy(Str2,"The ");
123     strcat(Str2,m->monstring);
124   }
125   else strcpy(Str2,m->monstring);
126   switch (reply) {
127     case 0:strcat(Str2," looks at you with mute incomprehension."); break;
128     case 1:strcat(Str2," growls menacingly and ignores you."); break;
129     case 2:strcat(Str2," does not seem to have heard you."); break;
130     case 3:strcat(Str2," tries to pretend it didn't hear you."); break;
131   }
132   mprint(Str2);
133 }
134 
m_talk_greedy(m)135 void m_talk_greedy(m)
136 struct monster *m;
137 {
138 
139   int reply = random_range(4);
140   if (m->uniqueness == COMMON) {
141     strcpy(Str2,"The ");
142     strcat(Str2,m->monstring);
143   }
144   else strcpy(Str2,m->monstring);
145   switch (reply) {
146     case 0:strcat(Str2," says: Give me a treasure.... ");break;
147     case 1:strcat(Str2," says: Stand and deliver, knave! "); break;
148     case 2:strcat(Str2," says: Your money or your life! "); break;
149     case 3:strcat(Str2," says: Yield or Die! "); break;
150   }
151   mprint(Str2);
152 }
153 
m_talk_hungry(m)154 void m_talk_hungry(m)
155 struct monster *m;
156 {
157 
158   int reply = random_range(4);
159   if (m->uniqueness == COMMON) {
160     strcpy(Str2,"The ");
161     strcat(Str2,m->monstring);
162   }
163   else strcpy(Str2,m->monstring);
164   switch (reply) {
165     case 0:strcat(Str2," says: I hunger, foolish adventurer! "); break;
166     case 1:strcat(Str2," drools menacingly at you. "); break;
167     case 2:strcat(Str2," says: You're invited to be lunch! "); break;
168     case 3:strcat(Str2," says: Feeed Meee! "); break;
169   }
170   mprint(Str2);
171 }
172 
173 
m_talk_guard(m)174 void m_talk_guard(m)
175 struct monster *m;
176 {
177   if (m_statusp(m,HOSTILE)) {
178     print1("'Surrender in the name of the Law!'");
179     print2("Do it? [yn] ");
180     if (ynq2()=='y') {
181       Player.alignment++;
182       if (Current_Environment == E_CITY) {
183 	print1("Go directly to jail. Do not pass go, do not collect 200Au.");
184 	print2("You are taken to the city gaol.");
185 	morewait();
186 	send_to_jail();
187 	drawvision(Player.x,Player.y);
188       }
189       else {
190 	clearmsg();
191 	print1("Mollified, the guard disarms you and sends you away.");
192 	dispose_lost_objects(1,Player.possessions[O_WEAPON_HAND]);
193 	pacify_guards();
194       }
195     }
196     else {
197       clearmsg();
198       print1("All right, you criminal scum, you asked for it!");
199     }
200   }
201   else if (Player.rank[ORDER]>0)
202     print1("'Greetings comrade! May you always tread the paths of Law.'");
203   else print1("Move it right along, stranger!");
204 }
205 
206 
m_talk_mp(m)207 void m_talk_mp(m)
208 struct monster *m;
209 {
210   mprint("The mendicant priest asks you to spare some treasure for the needy");
211 }
212 
213 
m_talk_titter(m)214 void m_talk_titter(m)
215 struct monster *m;
216 {
217 
218   if (m->uniqueness == COMMON) {
219     strcpy(Str2,"The ");
220     strcat(Str2,m->monstring);
221   }
222   else strcpy(Str2,m->monstring);
223   strcat(Str2," titters obscenely at you.");
224   mprint(Str2);
225 }
226 
227 
m_talk_ninja(m)228 void m_talk_ninja(m)
229 struct monster *m;
230 {
231   mprint("The black-garbed figure says apologetically:");
232   mprint("'Situree simasita, wakarimasen.'");
233 }
234 
235 
236 
237 
m_talk_thief(m)238 void m_talk_thief(m)
239 struct monster *m;
240 {
241   if (Player.rank[THIEVES]) {
242     if (m->level == 2)
243       m->monstring = "sneak thief";
244     else m->monstring = "master thief";
245     print1("The cloaked figure makes a gesture which you recognize...");
246     print2("...the thieves' guild recognition signal!");
247     print3("'Sorry, mate, thought you were a mark....'");
248     morewait();
249     m_vanish(m);
250   }
251   else m_talk_man(m);
252 
253 }
254 
255 
256 
m_talk_assassin(m)257 void m_talk_assassin(m)
258 struct monster *m;
259 {
260   m->monstring = "master assassin";
261   print1("The ominous figure does not reply, but hands you an embossed card:");
262   print2("'Guild of Assassins Ops are forbidden to converse with targets.'");
263 }
264 
265 
m_talk_im(m)266 void m_talk_im(m)
267 struct monster *m;
268 {
269   if (strcmp(m->monstring,"itinerant merchant") != 0) {
270     m->monstring = "itinerant merchant";
271   }
272   if (m->possessions == NULL)
273     mprint("The merchant says: Alas! I have nothing to sell!");
274   else {
275     m->possessions->thing->known = 2;
276     clearmsg();
277     mprint("I have a fine");
278     mprint(itemid(m->possessions->thing));
279     mprint("for only");
280     mlongprint(max(10,4*true_item_value(m->possessions->thing)));
281     mprint("Au.");
282     mprint("Want it? [yn] ");
283     if (ynq()=='y') {
284       if (Player.cash < (max(10,4*true_item_value(m->possessions->thing)))) {
285 	if (Player.alignment > 10) {
286 	  mprint("Well, I'll let you have it for what you've got.");
287 	  Player.cash = 0;
288 	  gain_item(m->possessions->thing);
289 	  m->possessions = NULL;
290 	}
291 	else mprint("Beat it, you deadbeat!");
292       }
293       else {
294 	mprint("Here you are. Have a good day.");
295 	Player.cash -= max(10,(4*item_value(m->possessions->thing)));
296 	gain_item(m->possessions->thing);
297 	m->possessions = NULL;
298       }
299     }
300     else mprint("Well then, I must be off. Good day.");
301     m_vanish(m);
302   }
303 }
304 
305 
m_talk_man(m)306 void m_talk_man(m)
307 struct monster *m;
308 {
309 
310   if (m->uniqueness == COMMON) {
311     strcpy(Str2,"The ");
312     strcat(Str2,m->monstring);
313   }
314   else strcpy(Str2,m->monstring);
315   switch (random_range(5)) {
316     case 0:strcat(Str2," asks you for the way home."); break;
317     case 1:strcat(Str2," wishes you a pleasant day."); break;
318     case 2:strcat(Str2," sneers at you contemptuously."); break;
319     case 3:strcat(Str2," smiles and nods."); break;
320     case 4:strcat(Str2," tells you a joke."); break;
321   }
322   mprint(Str2);
323 }
324 
325 
m_talk_evil(m)326 void m_talk_evil(m)
327 struct monster *m;
328 {
329 
330   if (m->uniqueness == COMMON) {
331     strcpy(Str2,"The ");
332     strcat(Str2,m->monstring);
333   }
334   else strcpy(Str2,m->monstring);
335   switch (random_range(14)) {
336     case 0:strcat(Str2," says: 'THERE CAN BE ONLY ONE!'"); break;
337     case 1:strcat(Str2," says: 'Prepare to die, Buckwheat!'"); break;
338     case 2:strcat(Str2," says: 'Time to die!'"); break;
339     case 3:strcat(Str2," says: 'There will be no mercy.'"); break;
340     case 4:strcat(Str2," insults your mother-in-law."); break;
341     case 5:strcat(Str2," says: 'Kurav tu ando mul!'");
342     case 6:strcat(Str2," says: '!va al infierno!'"); break;
343     case 7:strcat(Str2," says: 'dame desu, nee.'"); break;
344     case 8:strcat(Str2," spits on your rug and calls your cat a bastard.");
345       break;
346     case 9:strcat(Str2," snickers malevolently and draws a weapon."); break;
347     case 10:strcat(Str2," sends 'rm -r *' to your shell!"); break;
348     case 11:strcat(Str2," tweaks your nose and cackles evilly."); break;
349     case 12:strcat(Str2," thumbs you in the eyes."); break;
350     case 13:strcat(Str2," kicks you in the groin."); break;
351   }
352   mprint(Str2);
353 }
354 
355 
m_talk_robot(m)356 void m_talk_robot(m)
357 struct monster *m;
358 {
359   if (m->uniqueness == COMMON) {
360     strcpy(Str2,"The ");
361     strcat(Str2,m->monstring);
362   }
363   else strcpy(Str2,m->monstring);
364   switch (random_range(4)) {
365     case 0:strcat(Str2," says: 'exterminate...Exterminate...EXTERMINATE!!!'");
366       break;
367     case 1:strcat(Str2," says: 'Kill ... Crush ... Destroy'");
368       break;
369     case 2:strcat(Str2," says: 'Danger -- Danger'");
370       break;
371     case 3:strcat(Str2," says: 'Yo Mama -- core dumped.'");
372       break;
373   }
374   mprint(Str2);
375 }
376 
m_talk_slithy(m)377 void m_talk_slithy(m)
378 struct monster *m;
379 {
380   mprint("It can't talk -- it's too slithy!");
381 }
382 
383 
m_talk_mimsy(m)384 void m_talk_mimsy(m)
385 struct monster *m;
386 {
387   mprint("It can't talk -- it's too mimsy!");
388 }
389 
390 
391 
m_talk_burble(m)392 void m_talk_burble(m)
393 struct monster *m;
394 {
395 
396   if (m->uniqueness == COMMON) {
397     strcpy(Str2,"The ");
398     strcat(Str2,m->monstring);
399   }
400   else strcpy(Str2,m->monstring);
401   strcat(Str2," burbles hatefully at you.");
402   mprint(Str2);
403 }
404 
405 
406 
407 
m_talk_beg(m)408 void m_talk_beg(m)
409 struct monster *m;
410 {
411   if (m->uniqueness == COMMON) {
412     strcpy(Str2,"The ");
413     strcat(Str2,m->monstring);
414   }
415   else strcpy(Str2,m->monstring);
416   strcat(Str2," asks you for alms.");
417   mprint(Str2);
418 }
419 
420 
m_talk_hint(m)421 void m_talk_hint(m)
422 struct monster *m;
423 {
424   if (m->uniqueness == COMMON) {
425     strcpy(Str2,"The ");
426     strcat(Str2,m->monstring);
427   }
428   else strcpy(Str2,m->monstring);
429   if (m_statusp(m,HOSTILE)) {
430     strcat(Str2," only sneers at you. ");
431     mprint(Str2);
432   }
433   else {
434     strcat(Str2," whispers in your ear: ");
435     mprint(Str2);
436     hint();
437     m->talkf = M_TALK_SILENT;
438   }
439 }
440 
m_talk_gf(m)441 void m_talk_gf(m)
442 struct monster *m;
443 {
444   mprint("The good fairy glints: Would you like a wish?");
445   if (ynq()=='y') {
446     mprint("The good fairy glows: Are you sure?");
447     if (ynq()=='y') {
448       mprint("The good fairy radiates: Really really sure?");
449       if (ynq()=='y') {
450 	mprint("The good fairy beams: I mean, like, sure as sure can be?");
451 	if (ynq()=='y') {
452 	  mprint("The good fairy dazzles: You don't want a wish, right?");
453 	  if (ynq()=='y') mprint("The good fairy laughs: I thought not.");
454 	  else wish(0);
455 	}
456       }
457     }
458   }
459   mprint("In a flash of sweet-smelling light, the fairy vanishes....");
460   Player.hp = max(Player.hp,Player.maxhp);
461   Player.mana = max(Player.mana,calcmana());
462   mprint("You feel mellow.");
463   m_vanish(m);
464 }
465 
m_talk_ef(m)466 void m_talk_ef(m)
467 struct monster *m;
468 {
469   mprint("The evil fairy roils: Eat my pixie dust!");
470   mprint("She waves her black-glowing wand, which screams thinly....");
471   m->movef=M_MOVE_SMART;
472   m->meleef=M_MELEE_POISON;
473   m->specialf=M_SP_THIEF;
474   acquire(-1);
475   bless(-1);
476   sleep_player(m->level/2);
477   summon(-1,-1);
478   summon(-1,-1);
479   summon(-1,-1);
480   summon(-1,-1);
481 }
482 
483 
m_talk_seductor(m)484 void m_talk_seductor(m)
485 struct monster *m;
486 {
487   if (m->uniqueness == COMMON) {
488     strcpy(Str2,"The ");
489     strcat(Str2,m->monstring);
490   }
491   else strcpy(Str2,m->monstring);
492   if (Player.preference == 'n')
493   {
494     strcat(Str2, " notices your disinterest and leaves with a pout.");
495     mprint(Str2);
496   }
497   else
498   {
499     strcat(Str2," beckons seductively...");
500     mprint(Str2);
501     mprint("Flee? [yn] ");
502     if (ynq()=='y') {
503       mprint("You feel stupid.");
504     }
505     else {
506       strcpy(Str2,"The ");
507       strcat(Str2,m->monstring);
508       strcat(Str2," shows you a good time....");
509       mprint(Str2);
510       gain_experience(500);
511       Player.con++;
512     }
513   }
514   m_vanish(m);
515 }
516 
517 
m_talk_demonlover(m)518 void m_talk_demonlover(m)
519 struct monster *m;
520 {
521   if (m->uniqueness == COMMON) {
522     strcpy(Str2,"The ");
523     strcat(Str2,m->monstring);
524   }
525   else strcpy(Str2,m->monstring);
526   if (Player.preference == 'n')
527   {
528     strcat(Str2, " notices your disinterest and changes with a snarl...");
529     mprint(Str2);
530     morewait();
531   }
532   else
533   {
534     strcat(Str2," beckons seductively...");
535     mprint(Str2);
536     mprint("Flee? [yn] ");
537     if (ynq()=='y')
538       mprint("You feel fortunate....");
539     else {
540       if (m->uniqueness == COMMON) {
541 	strcpy(Str2,"The ");
542 	strcat(Str2,m->monstring);
543       }
544       else strcpy(Str2,m->monstring);
545       strcat(Str2," shows you a good time....");
546       mprint(Str2);
547       morewait();
548       mprint("You feel your life energies draining...");
549       level_drain(random_range(3)+1,"a demon's kiss");
550       morewait();
551     }
552   }
553   m->talkf = M_TALK_EVIL;
554   m->meleef = M_MELEE_SPIRIT;
555   m->specialf = M_SP_DEMON;
556 
557   if ((m->monchar&0xff) == 's') {
558     m->monchar = 'I'|CLR(RED);
559     m->monstring = "incubus";
560   }
561   else {
562     m->monchar = 'S'|CLR(RED);
563     m->monstring = "succubus";
564   }
565   if (m->uniqueness == COMMON) {
566     strcpy(Str2,"The ");
567     strcat(Str2,m->monstring);
568   }
569   else strcpy(Str2,m->monstring);
570   strcat(Str2," laughs insanely.");
571   mprint(Str2);
572   mprint("You now notice the fangs, claws, batwings...");
573 }
574 
575 
m_talk_horse(m)576 void m_talk_horse(m)
577 struct monster *m;
578 {
579   if (m_statusp(m,HOSTILE))
580     mprint("The horse neighs angrily at you.");
581   else if (m_statusp(m,HUNGRY))
582     mprint("The horse noses curiously at your pack.");
583   else if (gamestatusp(MOUNTED))
584     mprint("The horse and your steed don't seem to get along.");
585   else if (Current_Environment == Current_Dungeon)
586     mprint("The horse shies; maybe he doesn't like the dungeon air....");
587   else {
588     mprint("The horse lets you pat his nose. Want to ride him? [yn] ");
589     if (ynq()=='y') {
590       m->hp = -1;
591       Level->site[m->x][m->y].creature = NULL;
592       putspot(m->x,m->y,getspot(m->x,m->y,FALSE));
593       setgamestatus(MOUNTED);
594       calc_melee();
595       mprint("You are now equitating!");
596     }
597   }
598 }
599 
m_talk_hyena(m)600 void m_talk_hyena(m)
601 struct monster *m;
602 {
603   mprint("The hyena only laughs at you...");
604 }
605 
m_talk_parrot(m)606 void m_talk_parrot(m)
607 struct monster *m;
608 {
609   mprint("Polly wanna cracker?");
610 }
611 
612 
m_talk_servant(m)613 void m_talk_servant(m)
614 struct monster *m;
615 {
616   int target,x=Player.x,y=Player.y;
617   if (m->id == SERV_LAW) {
618     target = SERV_CHAOS;
619     mprint("The Servant of Law pauses in thought for a moment.");
620     mprint("You are asked: Are there any Servants of Chaos hereabouts? [yn] ");
621   }
622   else {
623     target = SERV_LAW;
624     mprint("The Servant of Chaos grins mischievously at you.");
625     mprint("You are asked: Are there any Servants of Law hereabouts? [yn] ");
626   }
627   if (ynq()=='y') {
628     print1("Show me.");
629     show_screen();
630     drawmonsters(TRUE);
631     setspot(&x,&y);
632     if (Level->site[x][y].creature != NULL) {
633       if (Level->site[x][y].creature->id == target) {
634 	mprint("The Servant launches itself towards its enemy.");
635 	mprint("In a blaze of combat, the Servants annihilate each other!");
636 	gain_experience(m->xpv);
637 	m_death(Level->site[x][y].creature);
638 	Level->site[m->x][m->y].creature = NULL;
639 	m->x = x;
640 	m->y = y;
641 	Level->site[x][y].creature = m;
642 	m_death(Level->site[x][y].creature);
643       }
644       else mprint("Right. Tell me about it. Idiot!");
645     }
646     else mprint("Right. Tell me about it. Idiot!");
647   }
648   else mprint("The servant shrugs and turns away.");
649 }
650 
651 
m_talk_animal(m)652 void m_talk_animal(m)
653 struct monster *m;
654 {
655   if (m->uniqueness == COMMON) {
656     strcpy(Str2,"The ");
657     strcat(Str2,m->monstring);
658   }
659   else strcpy(Str2,m->monstring);
660   mprint(Str2);
661   mprint("shows you a scholarly paper by Dolittle, D. Vet.");
662   mprint("which demonstrates that animals don't have speech centers");
663   mprint("complex enough to communicate in higher languages.");
664   mprint("It giggles softly to itself and takes back the paper.");
665 }
666 
667 
m_talk_scream(m)668 void m_talk_scream(m)
669 struct monster *m;
670 {
671   mprint("A thinly echoing scream reaches your ears....");
672   morewait();
673   mprint("You feel doomed....");
674   morewait();
675   mprint("A bird appears and flies three times widdershins around your head.");
676   summon(-1,QUAIL);
677   m->talkf = M_TALK_EVIL;
678 }
679 
680 
m_talk_archmage(m)681 void m_talk_archmage(m)
682 struct monster *m;
683 {
684   if (m_statusp(m,HOSTILE)) {
685     mprint("The Archmage ignores your attempt at conversation");
686     mprint("and concentrates on his spellcasting....");
687   }
688   else if (Current_Environment == E_COURT) {
689     mprint("The Archmage congratulates you on getting this far.");
690     mprint("He invites you to attempt the Throne of High Magic");
691     mprint("but warns you that it is important to wield the Sceptre");
692     mprint("before sitting on the throne.");
693     if (Level->site[m->x][m->y].p_locf == L_THRONE) {
694       mprint("The Archmage smiles and makes an arcane gesture....");
695       m_vanish(m);
696     }
697   }
698   else {
699     mprint("The Archmage tells you to find him again in his");
700     mprint("Magical Court at the base of his castle in the mountains");
701     mprint("of the far North-East; if you do he will give you some");
702     mprint("important information.");
703   }
704 }
705 
706 
m_talk_merchant(m)707 void m_talk_merchant(m)
708 struct monster *m;
709 {
710   if (! m_statusp(m,HOSTILE)) {
711     if (Current_Environment == E_VILLAGE) {
712       mprint("The merchant asks you if you want to buy a horse for 250GP.");
713       mprint("Pay the merchant? [yn] ");
714       if (ynq()=='y') {
715 	if (Player.cash < 250)
716 	  mprint("The merchant says: 'Come back when you've got the cash!'");
717 	else {
718 	  Player.cash -= 250;
719 	  mprint("The merchant takes your money and tells you to select");
720 	  mprint("any horse you want in the stables.");
721 	  mprint("He says: 'You'll want to get to know him before trying to");
722 	  mprint("ride him. By the way, food for the horse is not included.'");
723 	  mprint("The merchant runs off toward the bank, cackling gleefully.");
724 	  m_vanish(m);
725 	}
726       }
727       else mprint("The merchant tells you to stop wasting his time.");
728     }
729     else {
730       mprint("The merchant tells you to visit his stables at his village");
731       mprint("for a great deal on a horse.");
732     }
733   }
734   else {
735     mprint("The merchant ignores you and screams:");
736     mprint("'Help! Help! I'm being oppressed!'");
737   }
738 }
739 
740 
m_talk_prime(m)741 void m_talk_prime(m)
742 struct monster *m;
743 {
744   if (!m_statusp(m,HOSTILE)) {
745     if (Current_Environment == E_CIRCLE) {
746       print1("The Prime nods brusquely at you, removes a gem from his");
747       print2("sleeve, places it on the floor, and vanishes wordlessly.");
748       morewait();
749       m_dropstuff(m);
750       m_vanish(m);
751     }
752     else {
753       print1("The Prime makes an intricate gesture, which leaves behind");
754       print2("glowing blue sparks... He winks mischievously at you....");
755       if (Player.rank[CIRCLE] > 0) {
756 	morewait();
757 	print1("The blue sparks strike you! You feel enhanced!");
758 	print2("You feel more experienced....");
759 	Player.pow+=Player.rank[CIRCLE];
760 	Player.mana += calcmana();
761 	gain_experience(1000);
762 	m_vanish(m);
763       }
764     }
765   }
766   else m_talk_evil(m);
767 }
768