From b4dffbcc481b5a96a822ff98613d146c2e7dfa71 Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Mon, 12 Aug 2002 01:57:02 +0000 Subject: [PATCH] B07001 healed, undetected mimic > [Cast a healing spell in a shop where no mimic was visible] So, > "The small mimic looks better.". However, my picture still looks > the same. Either the mimic should be shown, *or* I shouldn't get > any message about the mimic healing. Both solutions seem equally > valid to me. If the mimic was mimicing the "strange object", then the healing causes them to start mimicing something else with no message (the observant player could notice however). If the mimic was already mimicing a real object, a message similar to this one results: "The crude dagger seems a more vivid black than before." --- include/extern.h | 1 + src/mon.c | 22 ++++++++++++++++++++++ src/zap.c | 16 +++++++++++++--- 3 files changed, 36 insertions(+), 3 deletions(-) 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)); } -- 2.40.0