From: PatR Date: Sun, 1 May 2016 07:34:36 +0000 (-0700) Subject: long worm #stats X-Git-Tag: NetHack-3.6.1_RC01~798 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=759544dd33d85defbaf03361a10a13b1d96d9598;p=nethack long worm #stats When #stats shows memory use for monsters, include long worm tails. --- diff --git a/include/extern.h b/include/extern.h index 4bee6fcd0..3905c3382 100644 --- a/include/extern.h +++ b/include/extern.h @@ -2719,6 +2719,7 @@ E void FDECL(rest_worm, (int)); E void FDECL(place_wsegs, (struct monst *)); E void FDECL(remove_worm, (struct monst *)); E void FDECL(place_worm_tail_randomly, (struct monst *, XCHAR_P, XCHAR_P)); +E int FDECL(size_wseg, (struct monst *)); E int FDECL(count_wsegs, (struct monst *)); E boolean FDECL(worm_known, (struct monst *)); E boolean FDECL(worm_cross, (int, int, int, int)); diff --git a/src/cmd.c b/src/cmd.c index 061a3d59e..f8f779fc5 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -144,7 +144,7 @@ extern void FDECL(show_borlandc_stats, (winid)); #ifdef DEBUG_MIGRATING_MONS STATIC_PTR int NDECL(wiz_migrate_mons); #endif -STATIC_DCL int FDECL(size_monst, (struct monst *)); +STATIC_DCL int FDECL(size_monst, (struct monst *, BOOLEAN_P)); STATIC_DCL int FDECL(size_obj, (struct obj *)); STATIC_DCL void FDECL(count_obj, (struct obj *, long *, long *, BOOLEAN_P, BOOLEAN_P)); @@ -3016,25 +3016,29 @@ long *total_size; } STATIC_OVL int -size_monst(mtmp) +size_monst(mtmp, incl_wsegs) struct monst *mtmp; +boolean incl_wsegs; { - int sz = (int) sizeof(struct monst); + int sz = (int) sizeof (struct monst); + + if (mtmp->wormno && incl_wsegs) + sz += size_wseg(mtmp); if (mtmp->mextra) { - sz += (int) sizeof(struct mextra); + sz += (int) sizeof (struct mextra); if (MNAME(mtmp)) sz += (int) strlen(MNAME(mtmp)) + 1; if (EGD(mtmp)) - sz += (int) sizeof(struct egd); + sz += (int) sizeof (struct egd); if (EPRI(mtmp)) - sz += (int) sizeof(struct epri); + sz += (int) sizeof (struct epri); if (ESHK(mtmp)) - sz += (int) sizeof(struct eshk); + sz += (int) sizeof (struct eshk); if (EMIN(mtmp)) - sz += (int) sizeof(struct emin); + sz += (int) sizeof (struct emin); if (EDOG(mtmp)) - sz += (int) sizeof(struct edog); + sz += (int) sizeof (struct edog); /* mextra->mcorpsenm doesn't point to more memory */ } return sz; @@ -3052,11 +3056,13 @@ long *total_size; char buf[BUFSZ]; long count, size; struct monst *mon; + /* mon->wormno means something different for migrating_mons and mydogs */ + boolean incl_wsegs = !strcmpi(src, "fmon"); count = size = 0L; for (mon = chain; mon; mon = mon->nmon) { count++; - size += size_monst(mon); + size += size_monst(mon, incl_wsegs); } if (count || size || force) { *total_count += count; diff --git a/src/mon.c b/src/mon.c index bf742ad2b..d3e9c97de 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1580,7 +1580,10 @@ struct monst **monst_list; /* &migrating_mons or &mydogs or null */ seemimic(mon); } - remove_monster(mx, my); + if (mon->wormno) + remove_worm(mon); + else + remove_monster(mx, my); if (mon == fmon) { fmon = fmon->nmon; diff --git a/src/worm.c b/src/worm.c index 839b0193e..ac69ea72b 100644 --- a/src/worm.c +++ b/src/worm.c @@ -677,6 +677,14 @@ register xchar *nx, *ny; : (y > 1 ? (y < ROWNO ? (rn2(3) - 1) : -rn2(2)) : rn2(2))); } +/* for size_monst(cmd.c) to support #stats */ +int +size_wseg(worm) +struct monst *worm; +{ + return (int) (count_wsegs(worm) * sizeof (struct wseg)); +} + /* count_wsegs() * returns the number of segments that a worm has. */