From 85f03deca9f8c5104757e1ba695d883a341c2c7d Mon Sep 17 00:00:00 2001 From: nhmall Date: Sat, 11 Apr 2026 06:37:10 -0400 Subject: [PATCH] refine a dog_eat impossible() Have the impossible message indicate whether the pointed-to edog struct itself is still intact (not overwritten somewhere, such as misuse of a stale or bad pointer) versus the apport field itself being assigned an out-of-whack value some place. --- src/dogmove.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dogmove.c b/src/dogmove.c index d0005ab78..f4c7b4bcb 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -316,9 +316,13 @@ dog_eat(struct monst *mtmp, edog->apport += (int) (200L / ((long) edog->dropdist + svm.moves - edog->droptime)); if (edog->apport <= 0) { - impossible("dog_eat: pet apport <= 0 (%d, %d, %ld, %ld)", + impossible("dog_eat: pet apport <= 0 (%d, %d, %ld, %ld, %ud, %ud)", edog->apport, edog->dropdist, edog->droptime, - svm.moves); + svm.moves, + /* check whether edog struct got clobbered; + these two values should always match if + edog content is still intact */ + mtmp->m_id, edog->parentmid); edog->apport = 1; } }