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,
|
extern void credit_report(struct monst *shkp, int idx,
|
||||||
boolean silent) NONNULLARG1;
|
boolean silent) NONNULLARG1;
|
||||||
extern void use_unpaid_trapobj(struct obj *, coordxy, coordxy) NONNULLARG1;
|
extern void use_unpaid_trapobj(struct obj *, coordxy, coordxy) NONNULLARG1;
|
||||||
|
extern void noisy_shop(struct mkroom *);
|
||||||
|
|
||||||
|
|
||||||
/* ### shknam.c ### */
|
/* ### shknam.c ### */
|
||||||
|
|
||||||
|
|||||||
@@ -4647,6 +4647,13 @@ restrap(struct monst *mtmp)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (mtmp->data->mlet == S_MIMIC) {
|
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);
|
set_mimic_sym(mtmp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else if (levl[mtmp->mx][mtmp->my].typ == ROOM) {
|
} else if (levl[mtmp->mx][mtmp->my].typ == ROOM) {
|
||||||
|
|||||||
@@ -1063,6 +1063,16 @@ tended_shop(struct mkroom *sroom)
|
|||||||
return !mtmp ? FALSE : (boolean) inhishop(mtmp);
|
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 *
|
staticfn struct bill_x *
|
||||||
onbill(struct obj *obj, struct monst *shkp, boolean silent)
|
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!",
|
"the chime of a cash register.", "Neiman and Marcus arguing!",
|
||||||
};
|
};
|
||||||
You_hear1(shop_msg[rn2(2) + hallu]);
|
You_hear1(shop_msg[rn2(2) + hallu]);
|
||||||
|
noisy_shop(sroom);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user