diff --git a/doc/fixes35.0 b/doc/fixes35.0 index 6f21a3923..153584242 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -340,6 +340,8 @@ fix writing feedback "the spellbook warps strangely, then turns parchment" make stone artifacts usually resist stone-to-flesh when reading an unknown scroll and learning it, discovery of teleporation was too late if hero happened to land on another scroll of teleportation +using an unlocking tool on a closed door which was actually a mimic reported + that there was no door to unlock instead of exposing the mimic Platform- and/or Interface-Specific Fixes diff --git a/src/lock.c b/src/lock.c index 037253d0c..0fce4639c 100644 --- a/src/lock.c +++ b/src/lock.c @@ -387,9 +387,10 @@ pick_lock(pick) } door = &levl[cc.x][cc.y]; - if ((mtmp = m_at(cc.x, cc.y)) && canseemon(mtmp) - && mtmp->m_ap_type != M_AP_FURNITURE - && mtmp->m_ap_type != M_AP_OBJECT) { + mtmp = m_at(cc.x, cc.y); + if (mtmp && canseemon(mtmp) && + mtmp->m_ap_type != M_AP_FURNITURE && + mtmp->m_ap_type != M_AP_OBJECT) { #ifdef TOURIST if (picktyp == CREDIT_CARD && (mtmp->isshk || mtmp->data == &mons[PM_ORACLE])) @@ -398,6 +399,14 @@ pick_lock(pick) #endif pline("I don't think %s would appreciate that.", mon_nam(mtmp)); return PICKLOCK_LEARNED_SOMETHING; + } else if (mtmp && mtmp->m_ap_type == M_AP_FURNITURE && + /* not IS_DOOR() here; for M_AP_FURNITURE, mappearance + holds a map symbol rather than a topology type */ + (mtmp->mappearance == S_vcdoor || + mtmp->mappearance == S_hcdoor)) { + /* "The door actually was a !" */ + stumble_onto_mimic(mtmp); + return PICKLOCK_LEARNED_SOMETHING; } if(!IS_DOOR(door->typ)) { if (is_drawbridge_wall(cc.x,cc.y) >= 0)