home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume5 / omega2 / part15 / opriest.c < prev   
C/C++ Source or Header  |  1988-07-26  |  14KB  |  509 lines

  1. /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988 */
  2. /* opriest.c */
  3. /* functions for clerics. */
  4.  
  5. #include "oglob.h"
  6.  
  7. /* prayer occurs at altars, hence name of function */
  8. void l_altar()
  9. {
  10.   int i,deity;
  11.   char response;
  12.  
  13.   if (Current_Environment == E_COUNTRYSIDE) deity = DRUID;
  14.   else deity = Level->site[Player.x][Player.y].aux;
  15.  
  16.   switch(deity) {
  17.     default:
  18.       print1("This rude altar has no markings.");
  19.       break;
  20.     case ODIN:
  21.       print1("This granite altar is graven with a gallows.");
  22.       break;
  23.     case SET:
  24.       print1("This sandstone altar has a black hand drawn on it.");
  25.       break;
  26.     case HECATE:
  27.       print1("This silver altar is inlaid with a black crescent moon.");
  28.       break;
  29.     case ATHENA:
  30.       print1("This golden altar is inscribed with an owl.");
  31.       break;
  32.     case DESTINY:
  33.       print1("This crystal altar is in the form of an omega.");
  34.       break;
  35.     case DRUID:
  36.       print1("This oaken altar is ornately engraved with leaves.");
  37.       break;
  38.   }
  39.   print2("Worship at this altar? [yn] ");
  40.   if (ynq2() == 'y') {
  41.     if (Player.rank[PRIESTHOOD] == 0) increase_priest_rank(deity);
  42.     else if (! check_sacrilege(deity)) {
  43.       if (Blessing) print1("You have a sense of immanence.");
  44.       print2("Request a Blessing, Sacrifice an item, or just Pray [b,s,p] ");
  45.       do response = mcigetc();
  46.       while ((response != 'b') && 
  47.          (response != 's') && 
  48.          (response != 'p') && 
  49.          (response != ESCAPE));
  50.       if (response == 'b') {
  51.     print1("You beg a heavenly benefice.");
  52.     print2("You hear a gong resonating throughout eternity....");
  53.     morewait();
  54.     if (Blessing) {
  55.       print1("A shaft of lucent radiance lances down from the heavens!");
  56.       print2("You feel uplifted....");
  57.       morewait();
  58.       gain_experience(Player.rank[PRIESTHOOD]*Player.rank[PRIESTHOOD]*50);
  59.       cleanse(1);
  60.       heal(10);
  61.       bless(1);
  62.       Blessing = FALSE;
  63.       increase_priest_rank(deity);
  64.     }
  65.     else {
  66.       print1("Your ardent plea is ignored.");
  67.       print2("You feel ashamed.");
  68.       Player.xp -= (Player.xp/4);
  69.     }
  70.     calc_melee();
  71.       }
  72.       else if (response == 's') {
  73.     print1("Which item to Sacrifice?");
  74.     i = getitem(NULL);
  75.     if (i==ABORT) i = 0;
  76.     if (Player.possessions[i] == NULL) {
  77.       print1("You have insulted your deity!");
  78.       print2("Not a good idea, as it turns out...");
  79.       dispel(-1);
  80.       p_damage(Player.hp-1,UNSTOPPABLE,"a god's pique");
  81.     }
  82.     else if (true_item_value(Player.possessions[i]) >
  83.          (Player.rank[PRIESTHOOD] *
  84.           Player.rank[PRIESTHOOD] *
  85.           Player.rank[PRIESTHOOD] * 50)) {
  86.       print1("With a burst of blue flame, your offering vanishes!");
  87.       dispose_lost_objects(1,Player.possessions[i]);
  88.       print2("A violet nimbus settles around your head and slowly fades.");
  89.       morewait();
  90.       Blessing = TRUE;
  91.     }
  92.     else {
  93.       print1("A darkling glow envelopes your offering!");
  94.       print2("The glow slowly fades....");
  95.       morewait();
  96.       setgamestatus(SUPPRESS_PRINTING);
  97.       if (Player.possessions[i]->used) {
  98.         Player.possessions[i]->used = FALSE;
  99.         item_use(Player.possessions[i]);
  100.         Player.possessions[i]->blessing =
  101.           -1 - abs(Player.possessions[i]->blessing);
  102.         Player.possessions[i]->used = TRUE;
  103.         item_use(Player.possessions[i]);
  104.       }
  105.       else Player.possessions[i]->blessing =
  106.         -1 - abs(Player.possessions[i]->blessing);
  107.       resetgamestatus(SUPPRESS_PRINTING);
  108.     }
  109.       }
  110.       else if (response == 'p') {
  111.     if (deity != Player.patron) 
  112.       print1("Nothing seems to happen.");
  113.     else increase_priest_rank(deity);
  114.       }
  115.     }
  116.   }
  117. }
  118.  
  119.  
  120.  
  121.  
  122. int check_sacrilege(deity)
  123. int deity;
  124. {
  125.   int i,sacrilege=FALSE;
  126.   if ((Player.patron != deity) && (Player.patron > 0)) {
  127.     sacrilege=TRUE;
  128.     Player.pow--;
  129.     Player.maxpow--;
  130.     switch(Player.patron) {
  131.     case ODIN:
  132.       print1("Odin notices your lack of faith! ");
  133.       morewait();
  134.       if (deity == ATHENA) {
  135.     print2("However, Athena intercedes on your behalf.");
  136.     sacrilege = FALSE;
  137.       }
  138.       else {
  139.     print2("You are struck by a thunderbolt!");
  140.     p_damage(Player.level*5,UNSTOPPABLE,"Odin's wrath");
  141.     if (Player.hp > 0) {
  142.       morewait();
  143.       print2("The bolt warps your feeble frame....");
  144.       Player.maxcon = Player.maxcon/2;
  145.       Player.con = min(Player.con,Player.maxcon);
  146.       Player.maxstr = Player.maxstr/2;
  147.       Player.con = min(Player.str,Player.maxstr);
  148.     }
  149.       }
  150.       morewait();
  151.       break;
  152.     case SET:
  153.       print1("Set notices your lack of faith! ");
  154.       morewait();
  155.       if (deity == HECATE) {
  156.     print1("But since you pray to a friendly deity,");
  157.     print2("Set decides not to punish you.");
  158.     sacrilege = FALSE;
  159.       }
  160.       else {
  161.     print2("You are blasted by a shaft of black fire!");
  162.     p_damage(Player.level*5,UNSTOPPABLE,"Set's anger");
  163.     if (Player.hp > 0) {
  164.       morewait();
  165.       print1("You are wreathed in clouds of smoke.");
  166.       for(i=0;i<MAXITEMS;i++) 
  167.         if ((Player.possessions[i] != NULL) &&
  168.         (Player.possessions[i]->blessing > -1))
  169.           conform_lost_object(Player.possessions[i]);
  170.       morewait();
  171.       print2("You feel Set's Black Hand on your heart....");
  172.       Player.con = Player.maxcon = Player.maxcon / 4;
  173.     }
  174.       }
  175.       morewait();
  176.       break;
  177.     case HECATE:
  178.       print1("Hecate notices your lack of faith! ");
  179.       morewait();
  180.       if (deity == SET) {
  181.     print1("But ignores the affront since she likes Set.");
  182.     sacrilege = FALSE;
  183.       }
  184.       else {
  185.     print1("You are zapped by dark moonbeams!");
  186.     p_damage(Player.level*5,UNSTOPPABLE,"Hecate's malice");
  187.     if (Player.hp > 0) {
  188.       print2("The beams leach you of magical power!");
  189.       Player.maxpow = Player.maxpow/5;
  190.       Player.pow = min(Player.pow,Player.maxpow);
  191.       for(i=0;i<NUMSPELLS;i++) 
  192.         Spells[i].known = FALSE;
  193.     }
  194.       }
  195.       morewait();
  196.       break;
  197.     case ATHENA:
  198.       print1("Athena notices your lack of faith! ");
  199.       morewait();
  200.       if (deity == ODIN) {
  201.     print2("But lets you off this time since Odin is also Lawful.");
  202.     sacrilege = FALSE;
  203.       }
  204.       else {
  205.     print2("You are zorched by godsfire!");
  206.     if (Player.hp > 0) {
  207.       morewait();
  208.       print1("The fire burns away your worldly experience!");
  209.         Player.level = 0;
  210.       Player.xp = 0;
  211.       Player.maxhp = Player.hp = Player.con;
  212.       print2("Your power is reduced by the blast!!!");
  213.       Player.pow = Player.maxpow = Player.maxpow/3;
  214.       Player.mana = min(Player.mana,calcmana());
  215.     }
  216.       }
  217.       morewait();
  218.       break;
  219.     case DESTINY:
  220.       print2("The Lords of Destiny ignore your lack of faith.");
  221.       sacrilege = FALSE;
  222.       morewait();
  223.       break;
  224.     case DRUID:
  225.       print2("Your treachery to the ArchDruid has been noted.");
  226.       if (random_range(2) == 1)
  227.     Player.alignment += 40;
  228.       else Player.alignment -= 40;
  229.       morewait();
  230.       break;
  231.     }
  232.     if (sacrilege) {
  233.       Player.patron = 0;
  234.       Player.rank[PRIESTHOOD] = 0;
  235.     }
  236.   }
  237.   return(sacrilege);
  238. }
  239.  
  240. void increase_priest_rank(deity)
  241. int deity;
  242. {
  243.   if (Player.rank[PRIESTHOOD] == 0) switch(deity) {
  244.   default:
  245.     print2("Some nameless god blesses you....");
  246.     Player.hp = Player.maxhp;
  247.     morewait();
  248.     print2("The altar crumbles to dust and blows away.");
  249.     Level->site[Player.x][Player.y].locchar = FLOOR;
  250.     Level->site[Player.x][Player.y].p_locf = L_NO_OP;
  251.     break;
  252.   case ODIN:
  253.     if (Player.alignment > 0) {
  254.       print1("Odin hears your prayer!");
  255.       print2(Priest[ODIN]);
  256.       nprint2(" personally blesses you.");
  257.       nprint2(" You are now a lay devotee of Odin.");
  258.       Player.patron = ODIN;
  259.       Player.rank[PRIESTHOOD] = LAY;
  260.       Player.guildxp[PRIESTHOOD] = 1;
  261.       morewait();
  262.       learnclericalspells(ODIN,LAY);
  263.     }
  264.     else print1("Odin ignores you.");
  265.     break;
  266.   case SET:
  267.     if (Player.alignment < 0) {
  268.       print1("Set hears your prayer!");
  269.       print2(Priest[SET]);
  270.       nprint2(" personally blesses you. ");
  271.       nprint2(" You are now a lay devotee of Set.");
  272.       Player.patron = SET;
  273.       Player.rank[PRIESTHOOD] = LAY;
  274.       Player.guildxp[PRIESTHOOD] = 1;
  275.       morewait();
  276.       learnclericalspells(SET,LAY);
  277.     }
  278.     else print1("Set ignores you.");
  279.     break;
  280.   case ATHENA:
  281.     if (Player.alignment > 0) {
  282.       print1("Athena hears your prayer!");
  283.       print2(Priest[ATHENA]);
  284.       nprint2(" personally blesses you.");
  285.       nprint2(" You are now a lay devotee of Athena.");
  286.       Player.patron = ATHENA;
  287.       Player.rank[PRIESTHOOD] = LAY;
  288.       Player.guildxp[PRIESTHOOD] = 1;
  289.       morewait();
  290.       learnclericalspells(ATHENA,LAY);
  291.     }
  292.     else print1("Athena ignores you.");
  293.     break;
  294.   case HECATE:
  295.     if (Player.alignment < 0) {
  296.       print1("Hecate hears your prayer!");
  297.       print2(Priest[HECATE]);
  298.       nprint2(" personally blesses you.");
  299.       nprint2(" You are now a lay devotee of Hecate.");
  300.       Player.patron = HECATE;
  301.       Player.rank[PRIESTHOOD] = LAY;
  302.       Player.guildxp[PRIESTHOOD] = 1;
  303.       morewait();
  304.       learnclericalspells(HECATE,LAY);
  305.     }
  306.     else print1("Hecate ignores you.");
  307.     break;
  308.   case DRUID:
  309.     if (abs(Player.alignment) < 10) {
  310.       print1(Priest[DRUID]);
  311.       nprint1(" personally blesses you.");
  312.       print2("You are now a lay devotee of the Druids.");
  313.       Player.patron = DRUID;
  314.       Player.rank[PRIESTHOOD] = LAY;
  315.       Player.guildxp[PRIESTHOOD] = 1;
  316.       morewait();
  317.       learnclericalspells(DRUID,LAY);
  318.     }
  319.     else {
  320.       print1("You hear a voice....");
  321.       morewait();
  322.       print2("'Only those who embody the Balance may become Druids.'");
  323.     }
  324.     break;
  325.   case DESTINY:
  326.     print1("The Lords of Destiny could hardly care less.");
  327.     print2("But you can consider yourself now to be a lay devotee.");
  328.     Player.patron = DESTINY;
  329.     Player.rank[PRIESTHOOD] = LAY;
  330.       Player.guildxp[PRIESTHOOD] = 1;
  331.     break;
  332.   }
  333.   else if (deity == Player.patron) {
  334.     if ((((deity == ODIN) || (deity == ATHENA)) && 
  335.      (Player.alignment < 1)) ||
  336.     (((deity == SET) || (deity == HECATE)) && 
  337.      (Player.alignment > 1)) ||
  338.     ((deity == DRUID) && (abs(Player.alignment) > 10))) {
  339.       print1("You have swerved from the One True Path!");
  340.       print2("Your deity is greatly displeased...");
  341.       Player.xp -= Player.level*Player.level;
  342.       Player.xp = max(0,Player.xp);
  343.     }
  344.     else if (Player.rank[PRIESTHOOD]== HIGHPRIEST) answer_prayer();
  345.     else if (Player.rank[PRIESTHOOD]== SPRIEST) {
  346.       if (Player.level > Priestlevel[deity])
  347.     hp_req_test();
  348.       else answer_prayer();
  349.     }
  350.     else if (Player.rank[PRIESTHOOD]==PRIEST) {
  351.       if (Player.guildxp[PRIESTHOOD] >= 4000) {
  352.     print1("An heavenly fanfare surrounds you!");
  353.     print2("Your deity raises you to the post of Senior Priest.");
  354.     hp_req_print();
  355.     Player.rank[PRIESTHOOD] = SPRIEST;
  356.       }
  357.       else answer_prayer();
  358.     }
  359.     else if (Player.rank[PRIESTHOOD]==ACOLYTE) {
  360.       if (Player.guildxp[PRIESTHOOD] >= 1500) {
  361.     print1("A trumpet sounds in the distance.");
  362.     print2("Your deity raises you to the post of Priest.");
  363.     Player.rank[PRIESTHOOD] = PRIEST;
  364.     morewait();
  365.     learnclericalspells(deity,PRIEST);
  366.       }
  367.       else answer_prayer();
  368.     }
  369.     else if (Player.rank[PRIESTHOOD]==LAY) {
  370.       if (Player.guildxp[PRIESTHOOD] >= 400) {
  371.     print1("A mellifluous chime sounds from above the altar.");
  372.     print2("Your deity raises you to the post of Acolyte.");
  373.     Player.rank[PRIESTHOOD] = ACOLYTE;
  374.     morewait();
  375.     learnclericalspells(deity,ACOLYTE);
  376.       }
  377.       else answer_prayer();
  378.     }
  379.   }
  380. }
  381.  
  382.  
  383. void answer_prayer()
  384. {
  385.   clearmsg();
  386.   switch(random_range(12)) {
  387.   case 0: print1("You have a revelation!"); break;
  388.   case 1: print1("You feel pious."); break;
  389.   case 2: print1("A feeling of sanctity comes over you."); break;
  390.   default: print1("Nothing unusual seems to happen."); break;
  391.   }
  392. }
  393.  
  394.  
  395. void hp_req_test()
  396. {
  397.   pob o;
  398.   switch  (Player.patron) {
  399.   case ODIN:
  400.     if (find_item(&o,ARTIFACTID+17,-1))
  401.       make_hp(o);
  402.     else hp_req_print();
  403.     break;
  404.   case SET:
  405.     if (find_item(&o,ARTIFACTID+14,-1))
  406.       make_hp(o);
  407.     else hp_req_print();
  408.     break;
  409.   case ATHENA:
  410.     if (find_item(&o,ARTIFACTID+15,-1))
  411.       make_hp(o);
  412.     else hp_req_print();
  413.     break;
  414.   case HECATE:
  415.     if (find_item(&o,ARTIFACTID+16,-1))
  416.       make_hp(o);
  417.     else hp_req_print();
  418.     break;
  419.   case DRUID:
  420.     if (find_item(&o,ARTIFACTID+14,-1))
  421.       make_hp(o);
  422.     else if (find_item(&o,ARTIFACTID+15,-1))
  423.       make_hp(o);
  424.     else if (find_item(&o,ARTIFACTID+16,-1))
  425.       make_hp(o);
  426.     else if (find_item(&o,ARTIFACTID+17,-1))
  427.       make_hp(o);
  428.     else hp_req_print();
  429.     break;
  430.   case DESTINY:
  431.     if (find_item(&o,ARTIFACTID+19,-1))
  432.       make_hp(o);
  433.     else hp_req_print();
  434.     break;
  435.   }
  436. }
  437.  
  438.  
  439. void hp_req_print()
  440. {
  441.   morewait();
  442.   print1("To advance further, you must obtain the Holy Symbol of ");
  443.   switch(Player.patron) {
  444.   case ODIN:
  445.     nprint1(Priest[SET]);
  446.     print2("who may be found in the main Temple of Set.");
  447.     break;
  448.   case SET:
  449.     nprint1(Priest[ODIN]);
  450.     print2("who may be found in the main Temple of Odin.");
  451.     break;
  452.   case ATHENA:
  453.     nprint1(Priest[HECATE]);
  454.     print2("who may be found in the main Temple of Hecate.");
  455.     break;
  456.   case HECATE:
  457.     nprint1(Priest[ATHENA]);
  458.     print2("who may be found in the main Temple of Athena.");
  459.     break;
  460.   case DRUID:
  461.     print2("any of the aligned priests");
  462.     nprint2(" who may be found in their main temples.");
  463.     break;
  464.   case DESTINY:
  465.     nprint1(Priest[DESTINY]);
  466.     print2("who may be found in the main Temple of Destiny.");
  467.     break;
  468.   }
  469. }
  470.  
  471. void make_hp(o)
  472. pob o;
  473. {
  474.   print1("A full-scale heavenly choir chants 'Hallelujah' all around you!");
  475.   print2("You notice a change in the symbol you carry....");
  476.   switch(Player.patron) {
  477.   case ODIN:
  478.     *o = Objects[ARTIFACTID+14];
  479.     break;
  480.   case SET:
  481.     *o = Objects[ARTIFACTID+17];
  482.     break;
  483.   case ATHENA:
  484.     *o = Objects[ARTIFACTID+16];
  485.     break;
  486.   case HECATE:
  487.     *o = Objects[ARTIFACTID+15];
  488.     break;
  489.   case DRUID:
  490.     *o = Objects[ARTIFACTID+18];
  491.     break;
  492.   case DESTINY:
  493.     *o = Objects[ARTIFACTID+19];
  494.     break;
  495.   }
  496.   o->known = 2;
  497.   o->charge = 17; /* random hack to convey bit that symbol is functional */
  498.   morewait();
  499.   if (Player.patron == DRUID)
  500.     print1("Your deity raises you to the post of ArchDruid!");
  501.   else print1("Your deity raises you to the post of High Priest!");
  502.   print2("You feel holy.");
  503.   strcpy(Priest[Player.patron],Player.name);
  504.   Priestlevel[Player.patron] = Player.level;
  505.   Player.rank[PRIESTHOOD] = HIGHPRIEST;
  506.   morewait();
  507.   learnclericalspells(Player.patron,HIGHPRIEST);
  508. }
  509.