From 79be47b1ad92611716b3122995c6edab59ca61e5 Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 31 May 2025 16:41:43 -0700 Subject: [PATCH] montraits of weapon-wielding monsters Have save_mtraits() clear wielded weapon when attaching monster attributes to a corpse object. And have monster sanity check verify that wielded weapon is in the monster's inventory. --- src/mkobj.c | 1 + src/mon.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/mkobj.c b/src/mkobj.c index 57060e4c5..2f93d43c8 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -2154,6 +2154,7 @@ save_mtraits(struct obj *obj, struct monst *mtmp) mtmp2->nmon = (struct monst *) 0; mtmp2->data = (struct permonst *) 0; mtmp2->minvent = (struct obj *) 0; + MON_NOWEP(mtmp2); /* mtmp2->mw = (struct obj *) 0; */ if (mtmp->mextra) copy_mextra(mtmp2, mtmp); /* if mtmp is a long worm with segments, its saved traits will diff --git a/src/mon.c b/src/mon.c index ade679695..92a71c12a 100644 --- a/src/mon.c +++ b/src/mon.c @@ -233,6 +233,19 @@ sanity_check_single_mon( mtmp->m_id, distu(mtmp->mx, mtmp->my)); #endif } + if (MON_WEP(mtmp)) { /* mtmp->mw */ + struct obj *o; + + for (o = mtmp->minvent; o; o = o->nobj) + if (o == MON_WEP(mtmp)) + break; + if (!o) { + o = MON_WEP(mtmp); + impossible("monst (%s: %u) wielding %s (%u) not in inventory", + pmname(mtmp->data, Mgender(mtmp)), mtmp->m_id, + safe_typename(o->otyp), o->o_id); + } + } } void