From: PatR Date: Tue, 22 Feb 2022 20:12:13 +0000 (-0800) Subject: more sleeping monster X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82accf9169978b1116a56d45659031159c25c2a3;p=nethack more sleeping monster Extend the PR#660 change that shows whether a monster is asleep when examined by farlook/quicklook/autodescribe to monsters that aren't moving due to timed sleep as well as those that are asleep for an unspecified amount of time. Unfortunately 'mfrozen' isn't specific about why a monster can't move so the phrasing is less than ideal. --- diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 8f8e61952..a7f94ed94 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1458,6 +1458,9 @@ added a chronicle of major events, and optional live logging of those paranoid:swim to prevent accidental dunking into dangerous liquids looking at a monster will indicate whether it is asleep, and waking up a monster yields a message +extend farlook's ", asleep" to ", can't move (paralyzed or sleeping + or busy)" for timed sleep and also ", meditating" for monster + that is waiting for hero to approach Platform- and/or Interface-Specific New Features diff --git a/src/insight.c b/src/insight.c index d1414fc06..10bd74dd2 100644 --- a/src/insight.c +++ b/src/insight.c @@ -2882,8 +2882,8 @@ mstatusline(struct monst *mtmp) Strcat(info, ", stunned"); if (mtmp->msleeping) Strcat(info, ", asleep"); -#if 0 /* unfortunately mfrozen covers temporary sleep and being busy \ - (donning armor, for instance) as well as paralysis */ +#if 0 /* unfortunately mfrozen covers temporary sleep and being busy + * (donning armor, for instance) as well as paralysis */ else if (mtmp->mfrozen) Strcat(info, ", paralyzed"); #else @@ -2924,6 +2924,8 @@ mstatusline(struct monst *mtmp) Sprintf(eos(info), ", injured %s", what); } } + if (mtmp->mleashed) + Strcat(info, ", leashed"); /* avoid "Status of the invisible newt ..., invisible" */ /* and unlike a normal mon_nam, use "saddled" even if it has a name */ diff --git a/src/pager.c b/src/pager.c index 88f838883..89ad90e62 100644 --- a/src/pager.c +++ b/src/pager.c @@ -359,11 +359,22 @@ look_at_monster(char *buf, Strcat(buf, (Upolyd && sticks(g.youmonst.data)) ? ", being held" : ", holding you"); } - if (mtmp->msleeping) + /* if mtmp isn't able to move (other than because it is a type of + monster that never moves), say so [excerpt from mstatusline() for + stethoscope or wand of probing] */ + if (mtmp->mfrozen) + /* unfortunately mfrozen covers temporary sleep and being busy + (donning armor, for instance) as well as paralysis */ + Strcat(buf, ", can't move (paralyzed or sleeping or busy)"); + else if (mtmp->msleeping) + /* sleeping for an indeterminate duration */ Strcat(buf, ", asleep"); + else if ((mtmp->mstrategy & STRAT_WAITMASK) != 0) + /* arbitrary reason why it isn't moving */ + Strcat(buf, ", meditating"); + if (mtmp->mleashed) Strcat(buf, ", leashed to you"); - if (mtmp->mtrapped && cansee(mtmp->mx, mtmp->my)) { struct trap *t = t_at(mtmp->mx, mtmp->my); int tt = t ? t->ttyp : NO_TRAP;