diff --git a/include/extern.h b/include/extern.h index f5f7de5d0..e34e7edb6 100644 --- a/include/extern.h +++ b/include/extern.h @@ -912,6 +912,7 @@ E boolean FDECL(peace_minded, (struct permonst *)); E void FDECL(set_malign, (struct monst *)); E void FDECL(set_mimic_sym, (struct monst *)); E int FDECL(mbirth_limit, (int)); +E void FDECL(mimic_hit_msg, (struct monst *, SHORT_P)); #ifdef GOLDOBJ E void FDECL(mkmonmoney, (struct monst *, long)); #endif diff --git a/src/mon.c b/src/mon.c index 410cd50e7..5583aa743 100644 --- a/src/mon.c +++ b/src/mon.c @@ -2701,6 +2701,28 @@ pacify_guards() mtmp->mpeaceful = 1; } } + +void +mimic_hit_msg(mtmp, otyp) +struct monst *mtmp; +short otyp; +{ + short ap = mtmp->mappearance; + + switch(mtmp->m_ap_type) { + case M_AP_NOTHING: + case M_AP_FURNITURE: + case M_AP_MONSTER: + break; + case M_AP_OBJECT: + if (otyp == SPE_HEALING || otyp == SPE_EXTRA_HEALING) { + pline("%s seems a more vivid %s than before.", + The(simple_typename(ap)), + c_obj_colors[objects[ap].oc_color]); + } + break; + } +} #endif /* OVLB */ /*mon.c*/ diff --git a/src/zap.c b/src/zap.c index f1f64ebcf..56cc896cd 100644 --- a/src/zap.c +++ b/src/zap.c @@ -112,6 +112,8 @@ struct obj *otmp; #ifdef STEED struct obj *obj; #endif + boolean disguised_mimic = (mtmp->data->mlet == S_MIMIC && + mtmp->m_ap_type != M_AP_NOTHING); if (u.uswallow && mtmp == u.ustuck) reveal_invis = FALSE; @@ -263,9 +265,17 @@ struct obj *otmp; mtmp->mblinded = 0; mtmp->mcansee = 1; } - if (canseemon(mtmp)) - pline("%s looks%s better.", Monnam(mtmp), - otyp == SPE_EXTRA_HEALING ? " much" : "" ); + if (canseemon(mtmp)) { + if (disguised_mimic) { + if (mtmp->m_ap_type == M_AP_OBJECT && + mtmp->mappearance == STRANGE_OBJECT) + /* it can do better now */ + set_mimic_sym(mtmp); + else + mimic_hit_msg(mtmp, otyp); + } else pline("%s looks%s better.", Monnam(mtmp), + otyp == SPE_EXTRA_HEALING ? " much" : "" ); + } if (mtmp->mtame || mtmp->mpeaceful) { adjalign(Role_if(PM_HEALER) ? 1 : sgn(u.ualign.type)); }