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:
@@ -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 ### */
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
10
src/shk.c
10
src/shk.c
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user