-/* NetHack 3.7 insight.c $NHDT-Date: 1581322662 2020/02/10 08:17:42 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ */
+/* NetHack 3.7 insight.c $NHDT-Date: 1581362470 2020/02/10 19:21:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
{
int i, achidx, acnt;
char title[BUFSZ];
- boolean ach_amulet = FALSE;
winid awin = WIN_ERR;
/* unfortunately we can't show the achievements (at least not all of
putstr(awin, 0, title);
/* display achievements in the order in which they were recorded;
- lone exception is to defer the Amulet (by taking it out of list)
- if we just ascended; it warrants alternate wording when given
- away during ascension, but the Amulet achievement is always
- attained before entering endgame and the alternate wording looks
- strange if shown before "reached endgame" and "reached Astral" */
+ lone exception is to defer the Amulet if we just ascended;
+ it warrants alternate wording when given away during ascension,
+ but the Amulet achievement is always attained before entering
+ endgame and the alternate wording looks strange if shown before
+ "reached endgame" and "reached Astral" */
if (remove_achievement(ACH_UWIN)) { /* UWIN == Ascended! */
- ach_amulet = remove_achievement(ACH_AMUL);
- record_achievement(ACH_UWIN); /* put back; always last when present */
- acnt = count_achievements();
+ /* for ascension, force it to be last and Amulet next to last
+ by taking them out and then adding them back */
+ if (remove_achievement(ACH_AMUL)) /* should always be True here */
+ record_achievement(ACH_AMUL);
+ record_achievement(ACH_UWIN);
}
for (i = 0; i < acnt; ++i) {
achidx = u.uachieved[i];
"gained access to Moloch's Sanctum", "");
break;
case ACH_AMUL:
- /* note: we won't get here if ACH_UWIN is going to be shown */
+ /* alternate wording for ascended (always past tense) since
+ hero had it until #offer forced it to be relinquished */
enl_msg(You_,
u.uhave.amulet ? "have" : "have obtained",
- u.uhave.amulet ? "had" : "had obtained",
+ u.uevent.ascended ? "delivered"
+ : u.uhave.amulet ? "had" : "had obtained",
" the Amulet of Yendor", "");
break;
enl_msg(You_, "have ", "", "reached the Astral Plane", "");
break;
case ACH_UWIN:
- /* if we took Amulet achievement out of the list, show it now;
- always uses past tense here since game ends upon ascension */
- if (ach_amulet)
- enl_msg(You_, "?", "delivered", " the Amulet of Yendor", "");
/* the ultimate achievement... */
enlght_out(" You ascended!");
break;
break;
} /* switch */
} /* for */
-#ifdef XLOGFILE
- /* if we removed the Amulet achievement because of ascension, put it
- back for encoding in the achievements field of xlogfile; it will
- change position from the original ordering but that doesn't matter
- to the bitmask which is going to be constructed and logged */
- if (ach_amulet)
- record_achievement(ACH_AMUL);
-#endif
if (awin != g.en_win) {
display_nhwindow(awin, TRUE);