/* obj: quest artifact; possibly null if carrying Amulet */ void finish_quest(struct obj *obj) { struct obj *otmp; if (Uhave_amulet) { /* unlikely but not impossible */ qt_pager(QT_HASAMULET); /* leader IDs the real amulet but ignores any fakes */ if ((otmp = carrying(AMULET_OF_YENDOR)) != 0) fully_identify_obj(otmp); } else { qt_pager(!Qstat(got_thanks) ? QT_OFFEREDIT : QT_OFFEREDIT2); /* should have obtained bell during quest; if not, suggest returning for it now */ if ((otmp = carrying(BELL_OF_OPENING)) == 0) com_pager(5); } Qstat(got_thanks) = TRUE; if (obj) { u.uevent.qcompleted = 1; /* you did it! */ historic_event(FALSE, FALSE, "completed the quest!"); /* behave as if leader imparts sufficient info about the quest artifact */ fully_identify_obj(obj); update_inventory(); } }
STATIC_OVL void on_goal() { if (Qstat(killed_nemesis)) { return; } else if (!Qstat(made_goal)) { qt_pager(QT_FIRSTGOAL); Qstat(made_goal) = 1; } else { /* * Some QT_NEXTGOAL messages reference the quest artifact; * find out if it is still present. If not, request an * alternate message (qt_pager() will revert to delivery * of QT_NEXTGOAL if current role doesn't have QT_ALTGOAL). * Note: if hero is already carrying it, it is treated as * being absent from the level for quest message purposes. */ unsigned whichobjchains = ((1 << OBJ_FLOOR) | (1 << OBJ_MINVENT) | (1 << OBJ_BURIED)); struct obj *qarti = find_quest_artifact(whichobjchains); qt_pager(qarti ? QT_NEXTGOAL : QT_ALTGOAL); if (Qstat(made_goal) < 7) Qstat(made_goal)++; } }
static void on_locate() { if(!Qstat(first_locate)) { qt_pager(QT_FIRSTLOCATE); Qstat(first_locate) = TRUE; } else if(u.uz0.dlevel < u.uz.dlevel) qt_pager(QT_NEXTLOCATE); }
STATIC_OVL void on_locate() { if(!Qstat(first_locate)) { qt_pager(QT_FIRSTLOCATE); Qstat(first_locate) = TRUE; } else if(u.uz0.dlevel < u.uz.dlevel && !Qstat(killed_nemesis)) qt_pager(QT_NEXTLOCATE); }
static void chat_with_guardian(void) { /* These guys/gals really don't have much to say... */ if (Uhave_questart && Qstat(killed_nemesis)) qt_pager(rn1(5, QT_GUARDTALK2)); else qt_pager(rn1(5, QT_GUARDTALK)); }
static void on_goal() { if(!Qstat(made_goal)) { qt_pager(QT_FIRSTGOAL); Qstat(made_goal) = 1; } else { qt_pager(QT_NEXTGOAL); if(Qstat(made_goal) < 7) Qstat(made_goal)++; } }
STATIC_OVL void on_start() { if(!Qstat(first_start)) { qt_pager(QT_FIRSTTIME); Qstat(first_start) = TRUE; } else if((u.uz0.dnum != u.uz.dnum) || (u.uz0.dlevel < u.uz.dlevel)) { if(Qstat(not_ready) <= 2) qt_pager(QT_NEXTTIME); else qt_pager(QT_OTHERTIME); } }
STATIC_OVL void on_goal() { if (Qstat(killed_nemesis)) { return; } else if (!Qstat(made_goal)) { qt_pager(QT_FIRSTGOAL); Qstat(made_goal) = 1; } else { qt_pager(QT_NEXTGOAL); if(Qstat(made_goal) < 7) Qstat(made_goal)++; } }
static void on_start(const d_level * orig_lev) { if (!Qstat(first_start)) { qt_pager(QT_FIRSTTIME); Qstat(first_start) = TRUE; } else if ((orig_lev->dnum != u.uz.dnum) || (orig_lev->dlevel < u.uz.dlevel)) { if (Qstat(not_ready) <= 2) qt_pager(QT_NEXTTIME); else qt_pager(QT_OTHERTIME); } }
static void chat_with_nemesis(void) { /* The nemesis will do most of the talking, but... */ qt_pager(rn1(10, QT_DISCOURAGE)); if (!Qstat(met_nemesis)) Qstat(met_nemesis++); }
void nemdead() { if(!Qstat(killed_nemesis)) { Qstat(killed_nemesis) = TRUE; qt_pager(QT_KILLEDNEM); } }
static void on_locate(const d_level * orig_lev) { /* the locate messages are phrased in a manner such that they only make sense when arriving on the level from above */ boolean from_above = (orig_lev->dlevel < u.uz.dlevel); if (Qstat(killed_nemesis)) { return; } else if (!Qstat(first_locate)) { if (from_above) qt_pager(QT_FIRSTLOCATE); /* if we've arrived from below this will be a lie, but there won't be any point in delivering the message upon a return visit from above later since the level has now been seen */ Qstat(first_locate) = TRUE; } else if (from_above) qt_pager(QT_NEXTLOCATE); }
void artitouch() { if(!Qstat(touched_artifact)) { Qstat(touched_artifact) = TRUE; qt_pager(QT_GOTIT); exercise(A_WIS, TRUE); } }
void leader_speaks(struct monst *mtmp) { /* maybe you attacked leader? */ if (!mtmp->mpeaceful) { Qstat(pissed_off) = TRUE; mtmp->mstrategy &= ~STRAT_WAITMASK; /* end the inaction */ } /* the quest leader might have passed through the portal into the regular dungeon; if so, mustn't perform "backwards expulsion" */ if (!on_level(&u.uz, &qstart_level)) return; if (Qstat(pissed_off)) { qt_pager(QT_LASTLEADER); expulsion(TRUE); } else chat_with_leader(); }
void nemesis_speaks(void) { if (!Qstat(in_battle)) { if (Uhave_questart) qt_pager(QT_NEMWANTSIT); else if (Qstat(made_goal) == 1 || !Qstat(met_nemesis)) qt_pager(QT_FIRSTNEMESIS); else if (Qstat(made_goal) < 4) qt_pager(QT_NEXTNEMESIS); else if (Qstat(made_goal) < 7) qt_pager(QT_OTHERNEMESIS); else if (!rn2(5)) qt_pager(rn1(10, QT_DISCOURAGE)); if (Qstat(made_goal) < 7) Qstat(made_goal)++; Qstat(met_nemesis) = TRUE; } else /* he will spit out random maledictions */ if (!rn2(5)) qt_pager(rn1(10, QT_DISCOURAGE)); }
static void chat_with_leader(void) { /* Rule 0: Cheater checks. */ if (u.uhave.questart && !Qstat(met_nemesis)) Qstat(cheater) = TRUE; /* It is possible for you to get the amulet without completing * the quest. If so, try to induce the player to quest. */ if (Qstat(got_thanks)) { /* Rule 1: You've gone back with/without the amulet. */ if (u.uhave.amulet) finish_quest(NULL); /* Rule 2: You've gone back before going for the amulet. */ else qt_pager(QT_POSTHANKS); } /* Rule 3: You've got the artifact and are back to return it. */ else if (u.uhave.questart) { struct obj *otmp; for (otmp = invent; otmp; otmp = otmp->nobj) if (is_quest_artifact(otmp)) break; finish_quest(otmp); /* Rule 4: You haven't got the artifact yet. */ } else if (Qstat(got_quest)) { qt_pager(rn1(10, QT_ENCOURAGE)); /* Rule 5: You aren't yet acceptable - or are you? */ } else { if (!Qstat(met_leader)) { qt_pager(QT_FIRSTLEADER); Qstat(met_leader) = TRUE; Qstat(not_ready) = 0; } else qt_pager(QT_NEXTLEADER); /* the quest leader might have passed through the portal into the regular dungeon; none of the remaining make sense there */ if (!on_level(&u.uz, &qstart_level)) return; if (not_capable()) { qt_pager(QT_BADLEVEL); exercise(A_WIS, TRUE); expulsion(FALSE); } else if (is_pure(TRUE) < 0) { com_pager(QT_BANISHED); expulsion(TRUE); } else if (is_pure(TRUE) == 0) { qt_pager(QT_BADALIGN); if (Qstat(not_ready) == MAX_QUEST_TRIES) { qt_pager(QT_LASTLEADER); expulsion(TRUE); } else { Qstat(not_ready)++; exercise(A_WIS, TRUE); expulsion(FALSE); } } else { /* You are worthy! */ qt_pager(QT_ASSIGNQUEST); exercise(A_WIS, TRUE); Qstat(got_quest) = TRUE; historic_event(FALSE, "embarked upon an epic quest."); } } }
static void chat_with_leader(void) { /* Rule 0: Cheater checks. */ if (Uhave_questart && !Qstat(met_nemesis)) Qstat(cheater) = TRUE; /* It is possible for you to get the amulet without completing * the quest. If so, try to induce the player to quest. */ if (Qstat(got_thanks)) { /* Rule 1: You've gone back with/without the amulet. */ if (Uhave_amulet) finish_quest(NULL); /* Rule 2: You've gone back before going for the amulet. */ else qt_pager(QT_POSTHANKS); } /* Rule 3: You've got the artifact and are back to return it. */ else if (Uhave_questart) { struct obj *otmp; for (otmp = invent; otmp; otmp = otmp->nobj) if (is_quest_artifact(otmp)) break; finish_quest(otmp); /* Rule 4: You haven't got the artifact yet. */ } else if (Qstat(got_quest)) { qt_pager(rn1(10, QT_ENCOURAGE)); /* Rule 5: You aren't yet acceptable - or are you? */ } else { if (!Qstat(met_leader)) { qt_pager(QT_FIRSTLEADER); Qstat(met_leader) = TRUE; Qstat(not_ready) = 0; } else qt_pager(QT_NEXTLEADER); /* the quest leader might have passed through the portal into the regular dungeon; none of the remaining make sense there */ if (!on_level(&u.uz, &qstart_level)) return; if ((is_pure(FALSE) > 0) && (u.ulevelmax < 2) && ((!challengemode) || !(u.uconduct[conduct_killer]))) { qt_pager(QT_LOWLEVEL); if (yn_function("Confirm your readiness and start the quest?", "yn", 'n') == 'y') { pline("\"Go on then.\""); Qstat(got_quest) = TRUE; /* TODO: levelport the player straight to Quest 2? */ historic_event(FALSE, FALSE, "embarked upon an epic quest."); } else { qt_pager(QT_BADLEVEL); expulsion(FALSE); } return; } if (not_capable()) { qt_pager(QT_BADLEVEL); expulsion(FALSE); } else if (is_pure(TRUE) < 0) { com_pager(QT_BANISHED); expulsion(TRUE); } else if (is_pure(FALSE) == 0) { qt_pager(QT_BADALIGN); if (Qstat(not_ready) == MAX_QUEST_TRIES) { qt_pager(QT_LASTLEADER); expulsion(TRUE); } else { Qstat(not_ready)++; expulsion(FALSE); } } else { /* You are worthy! */ qt_pager(QT_ASSIGNQUEST); Qstat(got_quest) = TRUE; historic_event(FALSE, FALSE, "embarked upon an epic quest."); } } }