home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume5 / omega2 / part04 / omtalk.c < prev   
C/C++ Source or Header  |  1988-07-22  |  19KB  |  710 lines

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