part3 of 3 for GitHub issue #1441

> Perhaps related: when a wand of sleep hits a disguised already-sleeping
> mimic (about which it is a separate question if they should go into
> disguise when sleeping, is it supposed to be automagic or conscious
> effort for them? but I digress), the mimic is not revealed (should it?)
> but the message says "hits a mimic".

Adjust restrap() so that a revealed mimic won't disguise itself while
sleeping. This seems to be in keeping with mimic lore.

Also, normal shop sounds (chime of register etc.) will wake a
mimic up from indeterminate sleep.

Closes #1441
This commit is contained in:
nhmall
2025-09-05 12:37:40 -04:00
parent 602678aa5a
commit e8e1868b70
4 changed files with 20 additions and 0 deletions

View File

@@ -2920,6 +2920,8 @@ extern void globby_bill_fixup(struct obj *, struct obj *) NONNULLARG12;
extern void credit_report(struct monst *shkp, int idx,
boolean silent) NONNULLARG1;
extern void use_unpaid_trapobj(struct obj *, coordxy, coordxy) NONNULLARG1;
extern void noisy_shop(struct mkroom *);
/* ### shknam.c ### */

View File

@@ -4647,6 +4647,13 @@ restrap(struct monst *mtmp)
return FALSE;
if (mtmp->data->mlet == S_MIMIC) {
if (mtmp->msleeping || mtmp->mfrozen) {
/*
* The mimic needs to be awake to disguise itself
* as something else.
*/
return FALSE;
}
set_mimic_sym(mtmp);
return TRUE;
} else if (levl[mtmp->mx][mtmp->my].typ == ROOM) {

View File

@@ -1063,6 +1063,16 @@ tended_shop(struct mkroom *sroom)
return !mtmp ? FALSE : (boolean) inhishop(mtmp);
}
void
noisy_shop(struct mkroom *sroom)
{
struct monst *mtmp = sroom->resident;
if (mtmp && inhishop(mtmp)) {
wake_nearto(mtmp->mx, mtmp->my, 11 * 11);
}
}
staticfn struct bill_x *
onbill(struct obj *obj, struct monst *shkp, boolean silent)
{

View File

@@ -323,6 +323,7 @@ dosounds(void)
"the chime of a cash register.", "Neiman and Marcus arguing!",
};
You_hear1(shop_msg[rn2(2) + hallu]);
noisy_shop(sroom);
}
return;
}