Riders when sorting vanquished monsters by class
Explicitly sort and label Riders before major demons when displaying vanquished monsters with sort-by-class. They're lumped in with '&' but they aren't really demons.
This commit is contained in:
@@ -2590,6 +2590,8 @@ for ranger characters, shooting any type of arrow while wielding the Longbow
|
|||||||
change the #vanquished command from debug-only to general user command
|
change the #vanquished command from debug-only to general user command
|
||||||
add 'sortvanquished' option to be able to set the preferred sort order without
|
add 'sortvanquished' option to be able to set the preferred sort order without
|
||||||
using 'm #vanquished' and to have it persist across save/restore
|
using 'm #vanquished' and to have it persist across save/restore
|
||||||
|
when sorting vanquished monsters by monster class, treat the Riders as a
|
||||||
|
separate class from major demons
|
||||||
add #genocided command
|
add #genocided command
|
||||||
have 'I u' mention whether there are any unpaid items on the floor (unusual
|
have 'I u' mention whether there are any unpaid items on the floor (unusual
|
||||||
but not impossible); it doesn't itemize them or show shop price
|
but not impossible); it doesn't itemize them or show shop price
|
||||||
|
|||||||
+27
-3
@@ -2632,6 +2632,14 @@ vanqsort_cmp(
|
|||||||
}
|
}
|
||||||
res = mcls1 - mcls2; /* class */
|
res = mcls1 - mcls2; /* class */
|
||||||
if (res == 0) {
|
if (res == 0) {
|
||||||
|
/* Riders are in the same class as major demons; group Riders
|
||||||
|
at the start of that class regardless of secondary ordering;
|
||||||
|
res -1 => #1 is a Rider, #2 isn't;
|
||||||
|
0 => both riders or both major demons;
|
||||||
|
+1 => #2 is a Rider, #1 isn't */
|
||||||
|
res = is_rider(&mons[indx2]) - is_rider(&mons[indx1]);
|
||||||
|
if (res)
|
||||||
|
break;
|
||||||
mlev1 = mons[indx1].mlevel;
|
mlev1 = mons[indx1].mlevel;
|
||||||
mlev2 = mons[indx2].mlevel;
|
mlev2 = mons[indx2].mlevel;
|
||||||
res = mlev1 - mlev2; /* mlevel low to high */
|
res = mlev1 - mlev2; /* mlevel low to high */
|
||||||
@@ -2710,6 +2718,7 @@ int
|
|||||||
dovanquished(void)
|
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;
|
return ECMD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2746,12 +2755,19 @@ list_vanquished(char defquery, boolean ask)
|
|||||||
total_killed += (long) nkilled;
|
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;
|
/* vanquished creatures list;
|
||||||
* includes all dead monsters, not just those killed by the player
|
* includes all dead monsters, not just those killed by the player
|
||||||
*/
|
*/
|
||||||
if (ntypes != 0) {
|
if (ntypes != 0) {
|
||||||
char mlet, prev_mlet = 0; /* used as small integer, not character */
|
char mlet, prev_mlet = 0; /* used as small integer, not character */
|
||||||
boolean class_header, uniq_header, was_uniq = FALSE;
|
boolean class_header, uniq_header, Rider,
|
||||||
|
was_uniq = FALSE, special_hdr = FALSE;
|
||||||
|
|
||||||
c = ask ? yn_function(
|
c = ask ? yn_function(
|
||||||
"Do you want an account of creatures vanquished?",
|
"Do you want an account of creatures vanquished?",
|
||||||
@@ -2780,9 +2796,17 @@ list_vanquished(char defquery, boolean ask)
|
|||||||
for (ni = 0; ni < ntypes; ni++) {
|
for (ni = 0; ni < ntypes; ni++) {
|
||||||
i = mindx[ni];
|
i = mindx[ni];
|
||||||
nkilled = svm.mvitals[i].died;
|
nkilled = svm.mvitals[i].died;
|
||||||
|
Rider = is_rider(&mons[i]);
|
||||||
mlet = mons[i].mlet;
|
mlet = mons[i].mlet;
|
||||||
if (class_header && mlet != prev_mlet) {
|
if (class_header
|
||||||
Strcpy(buf, def_monsyms[(int) mlet].explain);
|
&& (mlet != prev_mlet || (special_hdr && !Rider))) {
|
||||||
|
if (!Rider) {
|
||||||
|
Strcpy(buf, def_monsyms[(int) mlet].explain);
|
||||||
|
special_hdr = FALSE;
|
||||||
|
} else {
|
||||||
|
Strcpy(buf, "Rider");
|
||||||
|
special_hdr = TRUE;
|
||||||
|
}
|
||||||
/* 'ask' implies final disclosure, where highlighting
|
/* 'ask' implies final disclosure, where highlighting
|
||||||
of various header lines is suppressed */
|
of various header lines is suppressed */
|
||||||
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings.attr,
|
putstr(klwin, ask ? ATR_NONE : iflags.menu_headings.attr,
|
||||||
|
|||||||
Reference in New Issue
Block a user