fix github issue #581 - "You see no door there."
Year old issue from copperwater: 'open' directed at a non-door told player that there isn't a door and took no time unless character was blind and learned what type of terrain it is, applying a key gave the same message but used a turn and didn't update map to reflect any terrain discovery. Attempting to open an adjacent door or applying a key to one while in a pit had a similar issue: they produced the same "you can't reach it from here" but had different time vs no-time outcome. There may be other actions in the same situation. Closes #581
This commit is contained in:
@@ -1024,6 +1024,11 @@ room stocking would put multiple items on the same spot
|
|||||||
splitting a stack of named, shop-owned objects while perm_invent is enabled
|
splitting a stack of named, shop-owned objects while perm_invent is enabled
|
||||||
produced impossible "unpaid_cost: object wasn't on any bill."
|
produced impossible "unpaid_cost: object wasn't on any bill."
|
||||||
more consistent feedback if a reviving corpse becomes an unseen monster
|
more consistent feedback if a reviving corpse becomes an unseen monster
|
||||||
|
improve consistency between applying a key and explicitly opening a door:
|
||||||
|
if in a pit, you're told "you can't" and no time elapses; if there
|
||||||
|
isn't any door in the direction supplied, you're told "no door" and
|
||||||
|
time elapses if you discover the non-door's terrain type but doesn't
|
||||||
|
if you already knew the type there
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
32
src/lock.c
32
src/lock.c
@@ -341,9 +341,9 @@ autokey(boolean opening) /* True: key, pick, or card; False: key or pick */
|
|||||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||||
|
|
||||||
/* for doapply(); if player gives a direction or resumes an interrupted
|
/* for doapply(); if player gives a direction or resumes an interrupted
|
||||||
previous attempt then it costs hero a move even if nothing ultimately
|
previous attempt then it usually costs hero a move even if nothing
|
||||||
happens; when told "can't do that" before being asked for direction
|
ultimately happens; when told "can't do that" before being asked for
|
||||||
or player cancels with ESC while giving direction, it doesn't */
|
direction or player cancels with ESC while giving direction, it doesn't */
|
||||||
#define PICKLOCK_LEARNED_SOMETHING (-1) /* time passes */
|
#define PICKLOCK_LEARNED_SOMETHING (-1) /* time passes */
|
||||||
#define PICKLOCK_DID_NOTHING 0 /* no time passes */
|
#define PICKLOCK_DID_NOTHING 0 /* no time passes */
|
||||||
#define PICKLOCK_DID_SOMETHING 1
|
#define PICKLOCK_DID_SOMETHING 1
|
||||||
@@ -353,8 +353,8 @@ int
|
|||||||
pick_lock(
|
pick_lock(
|
||||||
struct obj *pick,
|
struct obj *pick,
|
||||||
coordxy rx, coordxy ry, /* coordinates of door/container, for autounlock:
|
coordxy rx, coordxy ry, /* coordinates of door/container, for autounlock:
|
||||||
* does not prompt for direction if these are set */
|
* doesn't prompt for direction if these are set */
|
||||||
struct obj *container) /* container, for autounlock */
|
struct obj *container) /* container, for autounlock */
|
||||||
{
|
{
|
||||||
struct obj dummypick;
|
struct obj dummypick;
|
||||||
int picktyp, c, ch;
|
int picktyp, c, ch;
|
||||||
@@ -535,12 +535,16 @@ pick_lock(
|
|||||||
There("doesn't seem to be any sort of lock here.");
|
There("doesn't seem to be any sort of lock here.");
|
||||||
return PICKLOCK_LEARNED_SOMETHING; /* decided against all boxes */
|
return PICKLOCK_LEARNED_SOMETHING; /* decided against all boxes */
|
||||||
}
|
}
|
||||||
} else { /* pick the lock in a door */
|
|
||||||
|
/* not the hero's location; pick the lock in an adjacent door */
|
||||||
|
} else {
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
|
|
||||||
if (u.utrap && u.utraptype == TT_PIT) {
|
if (u.utrap && u.utraptype == TT_PIT) {
|
||||||
You_cant("reach over the edge of the pit.");
|
You_cant("reach over the edge of the pit.");
|
||||||
return PICKLOCK_LEARNED_SOMETHING;
|
/* this used to return PICKLOCK_LEARNED_SOMETHING but the
|
||||||
|
#open command doesn't use a turn for similar situation */
|
||||||
|
return PICKLOCK_DID_NOTHING;
|
||||||
}
|
}
|
||||||
|
|
||||||
door = &levl[cc.x][cc.y];
|
door = &levl[cc.x][cc.y];
|
||||||
@@ -562,11 +566,20 @@ pick_lock(
|
|||||||
return PICKLOCK_LEARNED_SOMETHING;
|
return PICKLOCK_LEARNED_SOMETHING;
|
||||||
}
|
}
|
||||||
if (!IS_DOOR(door->typ)) {
|
if (!IS_DOOR(door->typ)) {
|
||||||
|
int res = PICKLOCK_DID_NOTHING, oldglyph = door->glyph;
|
||||||
|
schar oldlastseentyp = g.lastseentyp[cc.x][cc.y];
|
||||||
|
|
||||||
|
/* this is probably only relevant when blind */
|
||||||
|
feel_location(cc.x, cc.y);
|
||||||
|
if (door->glyph != oldglyph
|
||||||
|
|| g.lastseentyp[cc.x][cc.y] != oldlastseentyp)
|
||||||
|
res = PICKLOCK_LEARNED_SOMETHING;
|
||||||
|
|
||||||
if (is_drawbridge_wall(cc.x, cc.y) >= 0)
|
if (is_drawbridge_wall(cc.x, cc.y) >= 0)
|
||||||
You("%s no lock on the drawbridge.", Blind ? "feel" : "see");
|
You("%s no lock on the drawbridge.", Blind ? "feel" : "see");
|
||||||
else
|
else
|
||||||
You("%s no door there.", Blind ? "feel" : "see");
|
You("%s no door there.", Blind ? "feel" : "see");
|
||||||
return PICKLOCK_LEARNED_SOMETHING;
|
return res;
|
||||||
}
|
}
|
||||||
switch (door->doormask) {
|
switch (door->doormask) {
|
||||||
case D_NODOOR:
|
case D_NODOOR:
|
||||||
@@ -800,7 +813,8 @@ doopen_indir(coordxy x, coordxy y)
|
|||||||
|
|
||||||
door = &levl[cc.x][cc.y];
|
door = &levl[cc.x][cc.y];
|
||||||
portcullis = (is_drawbridge_wall(cc.x, cc.y) >= 0);
|
portcullis = (is_drawbridge_wall(cc.x, cc.y) >= 0);
|
||||||
if (Blind) {
|
/* this used to be 'if (Blind)' but using a key skips that so we do too */
|
||||||
|
{
|
||||||
int oldglyph = door->glyph;
|
int oldglyph = door->glyph;
|
||||||
schar oldlastseentyp = g.lastseentyp[cc.x][cc.y];
|
schar oldlastseentyp = g.lastseentyp[cc.x][cc.y];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user