fix a FIXME for 'm #vanquished'

If player uses the 'm' prefix before the #vanquished command when
the vanquished monsters list has fewer than two types so far,
select the preferred sort for #vanquished even though it won't be
applicable yet.

Also, when prompting about vanquished monsters during end of game
disclosure, where an 'a' response is given special meaning, use
"[ynq]" instead of "[ynaq]" if there is only one type of monster
vanquished.  It's skipped altogether when the list has zero types
and there's no point in picking sort order when there is just one
type.  The player can still answer with 'a' when [ynq] doesn't show
that (for tty and curses at least, probably X11); 'a' will end up
behaving as 'y' in that case.
This commit is contained in:
PatR
2024-08-24 19:04:41 -07:00
parent 0afa5bd564
commit a298052095

View File

@@ -2717,7 +2717,7 @@ set_vanq_order(boolean for_vanq)
int
dovanquished(void)
{
list_vanquished(iflags.menu_requested ? 'a' : 'y', FALSE);
list_vanquished(iflags.menu_requested ? 'A' : 'y', FALSE);
iflags.menu_requested = FALSE;
return ECMD_OK;
}
@@ -2728,6 +2728,7 @@ dovanquished(void)
#define done_stopprint program_state.stopprint
/* used for #vanquished and end of game disclosure and end of game dumplog */
void
list_vanquished(char defquery, boolean ask)
{
@@ -2738,12 +2739,25 @@ list_vanquished(char defquery, boolean ask)
winid klwin;
short mindx[NUMMONS];
char c, buf[BUFSZ], buftoo[BUFSZ];
boolean dumping; /* for DUMPLOG; doesn't need to be conditional */
/* 'A' is only supplied by 'm #vanquished'; 'd' is only supplied by
dump_everything() when writing dumplog, so won't happen if built
without '#define DUMPLOG' but there's no need for conditionals here */
boolean force_sort = (defquery == 'A'),
dumping = (defquery == 'd');
dumping = (defquery == 'd');
if (dumping) {
/* normally we don't ask about sort order for the vanquished list unless
it contains at least two entries; however, if player has used explicit
'm #vanquished', choose order no matter what it contains so far */
if (force_sort) { /* iflags.menu_requested via dovanquished() */
/* choose value for vanq_sortmode via menu; ESC cancels choosing
sort order but continues with vanquishd monsters display */
(void) set_vanq_order(TRUE);
}
if (dumping || force_sort) {
/* switch from 'A' or 'd' to 'y'; 'ask' is already False for the
cases that might supply 'A' or 'd' */
defquery = 'y';
ask = FALSE; /* redundant; caller passes False with defquery=='d' */
ask = FALSE; /* redundant */
}
/* get totals first */
@@ -2755,12 +2769,6 @@ list_vanquished(char defquery, boolean ask)
total_killed += (long) nkilled;
}
/*
* FIXME:
* Setting sort order should take place for explicit 'm #vanquished'
* even when there are less than 2 types vanquished so far.
*/
/* vanquished creatures list;
* includes all dead monsters, not just those killed by the player
*/
@@ -2769,10 +2777,23 @@ list_vanquished(char defquery, boolean ask)
boolean class_header, uniq_header, Rider,
was_uniq = FALSE, special_hdr = FALSE;
c = ask ? yn_function(
"Do you want an account of creatures vanquished?",
ynaqchars, defquery, TRUE)
: defquery;
if (ask) {
char allow_yn[10];
if (ntypes > 1) {
Strcpy(allow_yn, ynaqchars);
} else {
Strcpy(allow_yn, ynqchars); /* don't include 'a', but */
Strcat(allow_yn, "\033a"); /* allow user to answer 'a' */
if (defquery == 'a') /* potential default from 'disclose' */
defquery = 'y';
}
c = yn_function("Do you want an account of creatures vanquished?",
allow_yn, defquery, TRUE);
} else {
c = defquery;
}
if (c == 'q')
done_stopprint++;
if (c == 'y' || c == 'a') {