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
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*/
#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;
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));
}