From: PatR Date: Sun, 19 Dec 2021 17:30:07 +0000 (-0800) Subject: fix #K3496 - leash description when pet changes X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ccc1951553c156a0ea0bd72c05aaf1d92db9867;p=nethack fix #K3496 - leash description when pet changes If persistent inventory is displayed and contains an entry for a leash attached to a pet and the pet's type or name changes, the perm_invent window didn't get updated to reflect the new leash information: x - leash (attached to ) Report was for polymorph but applied to growing into bigger form and to being (re-/un-)christened as well. --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 7557dd1ff..72535099e 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -714,6 +714,9 @@ for accessibility reasons, give a message when monster teleports if a gremlin stole intrinsic 'see invisible' the map wasn't updated properly mark some messages as urgent ("You die*.", having equipment stolen, being caught in a magical explosion) +if a leashed pet changed name (#name m) or an unnamed pet changed type + (polymorph or grow-up) and perm_invent was On, persistent inventory + display didn't get updated to show the leash's changed information Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/do_name.c b/src/do_name.c index 4e71d5eaf..7a3cf7310 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -1107,6 +1107,9 @@ christen_monst(struct monst *mtmp, const char *name) new_mgivenname(mtmp, lth); /* removes old name if one is present */ if (lth) Strcpy(MGIVENNAME(mtmp), name); + /* if 'mtmp' is leashed, persistent inventory window needs updating */ + if (mtmp->mleashed) + update_inventory(); /* x - leash (attached to Fido) */ return mtmp; } diff --git a/src/makemon.c b/src/makemon.c index e2968c65d..d9769521e 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1914,6 +1914,9 @@ grow_up(struct monst *mtmp, struct monst *victim) lev_limit = (int) mtmp->m_lev; /* never undo increment */ mtmp->female = fem; /* gender might be changing */ + /* if 'mtmp' is leashed, persistent inventory window needs updating */ + if (mtmp->mleashed) + update_inventory(); /* x - leash (attached to a */ } /* sanity checks */ diff --git a/src/mon.c b/src/mon.c index 998fac1a9..5088005ed 100644 --- a/src/mon.c +++ b/src/mon.c @@ -4345,8 +4345,15 @@ newcham( /* take on the new form... */ set_mon_data(mtmp, mdat); - if (mtmp->mleashed && !leashable(mtmp)) - m_unleash(mtmp, TRUE); + if (mtmp->mleashed) { + if (!leashable(mtmp)) + m_unleash(mtmp, TRUE); + else + /* if leashed, persistent inventory window needs updating + (really only when mon_nam() is going to yield "a frog" + rather than "Kermit" but no need to micromanage here) */ + update_inventory(); /* x - leash (attached to a ) */ + } if (emits_light(olddata) != emits_light(mtmp->data)) { /* used to give light, now doesn't, or vice versa,