Also add a new wizmode command #wizborn to show those.
#timeout == look at timeout queue and hero's timed intrinsics
#vanquished == disclose counts of dead monsters sorted in various ways
#vision == show vision array
+#wizborn == show monster birth/death/geno/extinct stats
#wizintrinsic == set selected intrinsic timeouts
#wizmakemap == recreate the current dungeon level
#wizrumorcheck == validate first and last rumor for true and false set
Wipe off your face.
Autocompletes.
Default key is \(oqM-w\(cq.
+.lp "#wizborn "
+Show monster birth, death, genocide, and extinct statistics.
+Debug mode only.
.lp "#wizbury "
Bury objects under and around you.
Autocompletes.
\item[\tb{\#wipe}]
Wipe off your face. Autocompletes. Default key is `{\tt M-w}'.
%.lp
+\item[\tb{\#wizborn}]
+Show monster birth, death, genocide, and extinct statistics.
+Debug mode only.
+%.lp
\item[\tb{\#wizbury}]
Bury objects under and around you.
Autocompletes.
of water), its grab attack could succeed even if no longer adjacent
specifying a count when picking [part of] a stack of scrolls of scare monster
ignored that count and the whole stack was affected
+wizmakemap didn't account for unique monsters and didn't correct monster
+ birth counts
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
for !fixinv option where inventory letters normally don't stick, try to put
a throw-and-return weapon back into the same inventory slot it gets
thrown from; only works if it does return and is successfully caught
+wizard mode #wizborn command
Platform- and/or Interface-Specific New Features
E boolean FDECL(remove_achievement, (XCHAR_P));
E int NDECL(count_achievements);
E int NDECL(dovanquished);
+E int NDECL(doborn);
E void FDECL(list_vanquished, (CHAR_P, BOOLEAN_P));
E int NDECL(num_genocides);
E void FDECL(list_genocided, (CHAR_P, BOOLEAN_P));
if (pre) {
rm_mapseen(ledger_no(&u.uz));
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ int ndx = monsndx(mtmp->data);
if (mtmp->isgd) { /* vault is going away; get rid of guard */
mtmp->isgd = 0;
mongone(mtmp);
}
+ if (mtmp->data->geno & G_UNIQ)
+ g.mvitals[ndx].mvflags &= ~(G_EXTINCT);
+ if (g.mvitals[ndx].born)
+ g.mvitals[ndx].born--;
if (DEADMONSTER(mtmp))
continue;
if (mtmp->isshk)
g.context.achieveo.soko_prize_oid = 0;
}
}
- /* TODO?
- * Reduce 'born' tally for each monster about to be discarded
- * by savelev(), otherwise replacing heavily populated levels
- * tends to make their inhabitants become extinct.
- */
}
if (Punished) {
ballrelease(FALSE);
dowhatis, IFBURIED | GENERALCMD },
{ 'w', "wield", "wield (put in use) a weapon", dowield },
{ M('w'), "wipe", "wipe off your face", dowipe, AUTOCOMPLETE },
+ { '\0', "wizborn", "show stats of monsters created",
+ doborn, IFBURIED | WIZMODECMD },
#ifdef DEBUG
{ '\0', "wizbury", "bury objs under and around you",
wiz_debug_cmd_bury, IFBURIED | AUTOCOMPLETE | WIZMODECMD },
return 0;
}
+/* #wizborn extended command */
+int
+doborn()
+{
+ static const char fmt[] = "%4i %4i %c %-30s";
+ int i;
+ winid datawin = create_nhwindow(NHW_TEXT);
+ char buf[BUFSZ];
+ int nborn = 0, ndied = 0;
+
+ putstr(datawin, 0, "died born");
+ for (i = LOW_PM; i < NUMMONS; i++)
+ if (g.mvitals[i].born || g.mvitals[i].died
+ || (g.mvitals[i].mvflags & G_GONE)) {
+ Sprintf(buf, fmt,
+ g.mvitals[i].died, g.mvitals[i].born,
+ ((g.mvitals[i].mvflags & G_GONE) == G_EXTINCT) ? 'E' :
+ ((g.mvitals[i].mvflags & G_GONE) == G_GENOD) ? 'G' : ' ',
+ mons[i].mname);
+ putstr(datawin, 0, buf);
+ nborn += g.mvitals[i].born;
+ ndied += g.mvitals[i].died;
+ }
+
+ putstr(datawin, 0, "");
+ Sprintf(buf, fmt, ndied, nborn, ' ', "");
+
+ display_nhwindow(datawin, FALSE);
+ destroy_nhwindow(datawin);
+
+ return 0;
+}
+
/* high priests aren't unique but are flagged as such to simplify something */
#define UniqCritterIndx(mndx) ((mons[mndx].geno & G_UNIQ) \
&& mndx != PM_HIGH_PRIEST)