/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */ /* priest.c */ /* functions for clerics. */ #include "glob.h" /* prayer occurs at altars, hence name of function */ void l_altar(void) { int i,deity; char response; if (Current_Environment == E_COUNTRYSIDE) deity = DRUID; else deity = Level->site[Player.x][Player.y].aux; switch(deity) { default: print1("This rude altar has no markings."); break; case ODIN: print1("This granite altar is graven with a gallows."); break; case SET: print1("This sandstone altar has a black hand drawn on it."); break; case HECATE: print1("This silver altar is inlaid with a black crescent moon."); break; case ATHENA: print1("This golden altar is inscribed with an owl."); break; case DESTINY: print1("This crystal altar is in the form of an omega."); break; case DRUID: print1("This oaken altar is ornately engraved with leaves."); break; } print2("Worship at this altar? [yn] "); if (ynq2() == 'y') { #ifdef INCLUDE_MONKS if (Player.rank[MONKS] > 0) print2("A monk seeks truth within."); else #endif if (Player.rank[PRIESTHOOD] == 0) increase_priest_rank(deity); else if (! check_sacrilege(deity)) { if (Blessing) print1("You have a sense of immanence."); print2("Request a Blessing, Sacrifice an item, or just Pray [b,s,p] "); do response = (char) mcigetc(); while ((response != 'b') && (response != 's') && (response != 'p') && (response != ESCAPE)); if (response == 'b') { print1("You beg a heavenly benefice."); print2("You hear a gong resonating throughout eternity...."); morewait(); if (Blessing) { print1("A shaft of lucent radiance lances down from the heavens!"); print2("You feel uplifted...."); morewait(); gain_experience(Player.rank[PRIESTHOOD]*Player.rank[PRIESTHOOD]*50); cleanse(1); heal(10); bless(1); Blessing = FALSE; increase_priest_rank(deity); } else { print1("Your ardent plea is ignored."); print2("You feel ashamed."); Player.xp -= (Player.xp/4); } calc_melee(); } else if (response == 's') { i = getitem_prompt("Sacrifice what? ", NULL_ITEM); if (i==ABORT) i = 0; if (Player.possessions[i] == NULL) { print1("You have insulted your deity!"); print2("Not a good idea, as it turns out..."); dispel(-1); p_damage(Player.hp-1,UNSTOPPABLE,"a god's pique"); } else if (true_item_value(Player.possessions[i]) > (long) (Player.rank[PRIESTHOOD] * Player.rank[PRIESTHOOD] * Player.rank[PRIESTHOOD] * 50)) { print1("With a burst of blue flame, your offering vanishes!"); dispose_lost_objects(1,Player.possessions[i]); print2("A violet nimbus settles around your head and slowly fades."); morewait(); Blessing = TRUE; } else { print1("A darkling glow envelopes your offering!"); print2("The glow slowly fades...."); morewait(); setgamestatus(SUPPRESS_PRINTING); if (Player.possessions[i]->used) { Player.possessions[i]->used = FALSE; item_use(Player.possessions[i]); Player.possessions[i]->blessing = -1 - abs(Player.possessions[i]->blessing); Player.possessions[i]->used = TRUE; item_use(Player.possessions[i]); } else Player.possessions[i]->blessing = -1 - abs(Player.possessions[i]->blessing); resetgamestatus(SUPPRESS_PRINTING); } } else if (response == 'p') { if (deity != Player.patron) print1("Nothing seems to happen."); else if (!increase_priest_rank(deity)) answer_prayer(); } } } } int check_sacrilege(int deity) { int i,sacrilege=FALSE; if ((Player.patron != deity) && (Player.patron > 0)) { sacrilege=TRUE; Player.pow--; Player.maxpow--; switch(Player.patron) { case ODIN: print1("Odin notices your lack of faith! "); morewait(); if (deity == ATHENA) { print2("However, Athena intercedes on your behalf."); sacrilege = FALSE; } else { print2("You are struck by a thunderbolt!"); p_damage(Player.level*5,UNSTOPPABLE,"Odin's wrath"); if (Player.hp > 0) { morewait(); print2("The bolt warps your feeble frame...."); Player.maxcon = Player.maxcon/2; Player.con = min(Player.con,Player.maxcon); Player.maxstr = Player.maxstr/2; Player.con = min(Player.str,Player.maxstr); } } morewait(); break; case SET: print1("Set notices your lack of faith! "); morewait(); if (deity == HECATE) { print1("But since you pray to a friendly deity,"); print2("Set decides not to punish you."); sacrilege = FALSE; } else { print2("You are blasted by a shaft of black fire!"); p_damage(Player.level*5,UNSTOPPABLE,"Set's anger"); if (Player.hp > 0) { morewait(); print1("You are wreathed in clouds of smoke."); for(i=0;iblessing > -1)) conform_lost_object(Player.possessions[i]); morewait(); print2("You feel Set's Black Hand on your heart...."); Player.con = Player.maxcon = Player.maxcon / 4; } } morewait(); break; case HECATE: print1("Hecate notices your lack of faith! "); morewait(); if (deity == SET) { print1("But ignores the affront since she likes Set."); sacrilege = FALSE; } else { print1("You are zapped by dark moonbeams!"); p_damage(Player.level*5,UNSTOPPABLE,"Hecate's malice"); if (Player.hp > 0) { print2("The beams leach you of magical power!"); Player.maxpow = Player.maxpow/5; Player.pow = min(Player.pow,Player.maxpow); for(i=0;i 0) { morewait(); print1("The fire burns away your worldly experience!"); Player.level = 0; Player.xp = 0; Player.maxhp = Player.hp = Player.con; print2("Your power is reduced by the blast!!!"); Player.pow = Player.maxpow = Player.maxpow/3; Player.mana = min(Player.mana,calcmana()); } } morewait(); break; case DESTINY: print2("The Lords of Destiny ignore your lack of faith."); sacrilege = FALSE; morewait(); break; case DRUID: print2("Your treachery to the ArchDruid has been noted."); if (random_range(2) == 1) Player.alignment += 40; else Player.alignment -= 40; morewait(); break; } if (sacrilege) { Player.patron = 0; Player.rank[PRIESTHOOD] = 0; } } return(sacrilege); } int increase_priest_rank(int deity) { if (Player.rank[PRIESTHOOD] == 0) switch(deity) { default: print2("Some nameless god blesses you...."); Player.hp = max(Player.hp, Player.maxhp); morewait(); print2("The altar crumbles to dust and blows away."); Level->site[Player.x][Player.y].locchar = FLOOR; Level->site[Player.x][Player.y].p_locf = L_NO_OP; lset(Player.x, Player.y, CHANGED); break; case ODIN: if (Player.alignment > 0) { print1("Odin hears your prayer!"); print2(Priest[ODIN]); nprint2(" personally blesses you."); nprint2(" You are now a lay devotee of Odin."); Player.patron = ODIN; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(ODIN,LAY); } else print1("Odin ignores you."); break; case SET: if (Player.alignment < 0) { print1("Set hears your prayer!"); print2(Priest[SET]); nprint2(" personally blesses you. "); nprint2(" You are now a lay devotee of Set."); Player.patron = SET; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(SET,LAY); } else print1("Set ignores you."); break; case ATHENA: if (Player.alignment > 0) { print1("Athena hears your prayer!"); print2(Priest[ATHENA]); nprint2(" personally blesses you."); nprint2(" You are now a lay devotee of Athena."); Player.patron = ATHENA; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(ATHENA,LAY); } else print1("Athena ignores you."); break; case HECATE: if (Player.alignment < 0) { print1("Hecate hears your prayer!"); print2(Priest[HECATE]); nprint2(" personally blesses you."); nprint2(" You are now a lay devotee of Hecate."); Player.patron = HECATE; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(HECATE,LAY); } else print1("Hecate ignores you."); break; case DRUID: if (abs(Player.alignment) < 10) { print1(Priest[DRUID]); nprint1(" personally blesses you."); print2("You are now a lay devotee of the Druids."); Player.patron = DRUID; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(DRUID,LAY); } else { print1("You hear a voice...."); morewait(); print2("'Only those who embody the Balance may become Druids.'"); } break; case DESTINY: print1("The Lords of Destiny could hardly care less."); print2("But you can consider yourself now to be a lay devotee."); Player.patron = DESTINY; Player.rank[PRIESTHOOD] = LAY; Player.guildxp[PRIESTHOOD] = 1; break; } else if (deity == Player.patron) { if ((((deity == ODIN) || (deity == ATHENA)) && (Player.alignment < 1)) || (((deity == SET) || (deity == HECATE)) && (Player.alignment > 1)) || ((deity == DRUID) && (abs(Player.alignment) > 10))) { print1("You have swerved from the One True Path!"); print2("Your deity is greatly displeased..."); Player.xp -= Player.level*Player.level; Player.xp = max(0,Player.xp); } else if (Player.rank[PRIESTHOOD]== HIGHPRIEST) return 0; else if (Player.rank[PRIESTHOOD]== SPRIEST) { if (Player.level > Priestlevel[deity]) hp_req_test(); else return 0; } else if (Player.rank[PRIESTHOOD]==PRIEST) { if (Player.guildxp[PRIESTHOOD] >= 4000) { print1("An heavenly fanfare surrounds you!"); print2("Your deity raises you to the post of Senior Priest."); hp_req_print(); Player.rank[PRIESTHOOD] = SPRIEST; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(deity,SPRIEST); } else return 0; } else if (Player.rank[PRIESTHOOD]==ACOLYTE) { if (Player.guildxp[PRIESTHOOD] >= 1500) { print1("A trumpet sounds in the distance."); print2("Your deity raises you to the post of Priest."); Player.rank[PRIESTHOOD] = PRIEST; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(deity,PRIEST); } else return 0; } else if (Player.rank[PRIESTHOOD]==LAY) { if (Player.guildxp[PRIESTHOOD] >= 400) { print1("A mellifluous chime sounds from above the altar."); print2("Your deity raises you to the post of Acolyte."); Player.rank[PRIESTHOOD] = ACOLYTE; /* DAG learnclericalspells() starts with mprint() so don't need morewait */ /* morewait(); */ learnclericalspells(deity,ACOLYTE); } else return 0; } } return 1; } void answer_prayer(void) { clearmsg(); switch(random_range(12)) { case 0: print1("You have a revelation!"); break; case 1: print1("You feel pious."); break; case 2: print1("A feeling of sanctity comes over you."); break; default: print1("Nothing unusual seems to happen."); break; } } void hp_req_test(void) { pob o; switch (Player.patron) { case ODIN: if (find_item(&o,OB_SYMBOL_SET,-1)) make_hp(o); else hp_req_print(); break; case SET: if (find_item(&o,OB_SYMBOL_ODIN,-1)) make_hp(o); else hp_req_print(); break; case ATHENA: if (find_item(&o,OB_SYMBOL_HECATE,-1)) make_hp(o); else hp_req_print(); break; case HECATE: if (find_item(&o,OB_SYMBOL_ATHENA,-1)) make_hp(o); else hp_req_print(); break; case DRUID: if (find_item(&o,OB_SYMBOL_ODIN,-1)) make_hp(o); else if (find_item(&o,OB_SYMBOL_SET,-1)) make_hp(o); else if (find_item(&o,OB_SYMBOL_ATHENA,-1)) make_hp(o); else if (find_item(&o,OB_SYMBOL_HECATE,-1)) make_hp(o); else hp_req_print(); break; case DESTINY: if (find_item(&o,OB_SYMBOL_DESTINY,-1)) make_hp(o); else hp_req_print(); break; } } void hp_req_print(void) { morewait(); print1("To advance further, you must obtain the Holy Symbol of "); switch(Player.patron) { case ODIN: nprint1(Priest[SET]); print2("who may be found in the main Temple of Set."); break; case SET: nprint1(Priest[ODIN]); print2("who may be found in the main Temple of Odin."); break; case ATHENA: nprint1(Priest[HECATE]); print2("who may be found in the main Temple of Hecate."); break; case HECATE: nprint1(Priest[ATHENA]); print2("who may be found in the main Temple of Athena."); break; case DRUID: print2("any of the aligned priests who may be found in their main Temples."); break; case DESTINY: nprint1(Priest[DESTINY]); print2("who may be found in the main Temple of Destiny."); break; } } void make_hp(pob o) { print1("A full-scale heavenly choir chants 'Hallelujah' all around you!"); print2("You notice a change in the symbol you carry...."); switch(Player.patron) { case ODIN: *o = Objects[OB_SYMBOL_ODIN]; break; case SET: *o = Objects[OB_SYMBOL_SET]; break; case ATHENA: *o = Objects[OB_SYMBOL_ATHENA]; break; case HECATE: *o = Objects[OB_SYMBOL_HECATE]; break; case DRUID: *o = Objects[OB_SYMBOL_DRUID]; break; case DESTINY: *o = Objects[OB_SYMBOL_DESTINY]; break; } o->known = 2; o->charge = 17; /* random hack to convey bit that symbol is functional */ morewait(); if (Player.patron == DRUID) print1("Your deity raises you to the post of ArchDruid!"); else print1("Your deity raises you to the post of High Priest!"); print2("You feel holy."); strcpy(Priest[Player.patron],Player.name); Priestlevel[Player.patron] = Player.level; Player.rank[PRIESTHOOD] = HIGHPRIEST; morewait(); Priestbehavior[Player.patron] = fixnpc(4); save_hiscore_npc(Player.patron); learnclericalspells(Player.patron,HIGHPRIEST); }