E struct obj *FDECL(readobjnam, (char *,struct obj *,BOOLEAN_P));
E int FDECL(rnd_class, (int,int));
E const char *FDECL(cloak_simple_name, (struct obj *));
+E const char *FDECL(mimic_obj_name, (struct monst *));
/* ### options.c ### */
/* Might be attacking your image around the corner, or
* invisible, or you might be blind....
*/
-
+ boolean mimickobj = (youmonst.m_ap_type == M_AP_OBJECT &&
+ (youmonst.mappearance > STRANGE_OBJECT &&
+ youmonst.mappearance < NUM_OBJECTS));
+ /* you are mimicking an object */
+
if(!ranged) nomul(0);
if(mtmp->mhp <= 0 || (Underwater && !is_swimmer(mtmp->data)))
return(0);
return(0);
}
- /* player might be mimicking gold */
- if (youmonst.m_ap_type == M_AP_OBJECT
- && youmonst.mappearance == GOLD_PIECE
- && !range2 && foundyou && !u.uswallow) {
+ /* player might be mimicking an object */
+ if (mimickobj && !range2 && foundyou && !u.uswallow) {
if (!youseeit)
- pline("%s %s!", Something, likes_gold(mtmp->data) ?
+ pline("%s %s!", Something,
+ (likes_gold(mtmp->data) && youmonst.mappearance == GOLD_PIECE) ?
"tries to pick you up" : "disturbs you");
- else pline("Wait, %s! That gold is really %s named %s!",
+ else pline("Wait, %s! That %s is really %s named %s!",
m_monnam(mtmp),
+ mimic_obj_name(&youmonst),
an(mons[u.umonnum].mname),
plname);
if (multi < 0) { /* this should always be the case */
Sprintf(buf, "You appear to be %s again.",
Upolyd ? (const char *) an(youmonst.data->mname) :
(const char *) "yourself");
- unmul(buf); /* immediately stop mimicking gold */
+ unmul(buf); /* immediately stop mimicking */
}
return 0;
}
return "cloak";
}
+const char *
+mimic_obj_name(mtmp)
+struct monst *mtmp;
+{
+ boolean mimickobj = (mtmp->m_ap_type == M_AP_OBJECT &&
+ (mtmp->mappearance > STRANGE_OBJECT &&
+ mtmp->mappearance < NUM_OBJECTS));
+ if (mimickobj) {
+ if (mtmp->mappearance == GOLD_PIECE) return "gold";
+ else return obj_descr[objects[mtmp->mappearance].oc_descr_idx].oc_name;
+ }
+ return "whatcha-may-callit";
+}
#endif /* OVLB */
/*objnam.c*/
const char *fmt, *arg;
{
boolean sticky = sticks(youmonst.data) && u.ustuck && !u.uswallow,
- was_mimicking_gold = (youmonst.m_ap_type == M_AP_OBJECT
- && youmonst.mappearance == GOLD_PIECE);
+ was_mimicking = (youmonst.m_ap_type == M_AP_OBJECT &&
+ (youmonst.mappearance > STRANGE_OBJECT &&
+ youmonst.mappearance < NUM_OBJECTS));
boolean was_blind = !!Blind;
if (Upolyd) {
if (sticky) uunstick();
find_ac();
- if (was_mimicking_gold) {
+ if (was_mimicking) {
if (multi < 0) unmul("");
} else {
/*
{
boolean sticky = sticks(youmonst.data) && u.ustuck && !u.uswallow,
was_blind = !!Blind, dochange = FALSE;
+ boolean was_mimicking = (youmonst.m_ap_type == M_AP_OBJECT &&
+ (youmonst.mappearance > STRANGE_OBJECT &&
+ youmonst.mappearance < NUM_OBJECTS));
int mlvl;
if (mvitals[mntmp].mvflags & G_GENOD) { /* allow G_EXTINCT */
flags.female = u.mfemale;
}
- if (youmonst.m_ap_type == M_AP_OBJECT &&
- youmonst.mappearance == GOLD_PIECE) {
- /* stop mimicking gold immediately */
+ if (was_mimicking) {
+ /* stop mimicking immediately */
if (multi < 0) unmul("");
} else if (mons[mntmp].mlet != S_MIMIC) {
/* as in polyman() */
#endif
struct monst *guard;
int trycount, vaultroom = (int)vault_occupied(u.urooms);
+ boolean mimickobj = (youmonst.m_ap_type == M_AP_OBJECT &&
+ (youmonst.mappearance > STRANGE_OBJECT &&
+ youmonst.mappearance < NUM_OBJECTS));
if(!vaultroom) {
u.uinvault = 0;
else
pline("Someone else has entered the Vault.");
newsym(guard->mx,guard->my);
- if ((youmonst.m_ap_type == M_AP_OBJECT &&
- youmonst.mappearance == GOLD_PIECE) || u.uundetected) {
- /* You're mimicking a pile of gold or you're hidden. */
+ if (mimickobj || u.uundetected) {
+ if (youmonst.mappearance != GOLD_PIECE)
+ verbalize("Hey! who left that %s in here?", mimic_obj_name(&youmonst));
+ /* You're mimicking some object or you're hidden. */
pline("Puzzled, %s turns around and leaves.", mhe(guard));
mongone(guard);
return;