fix #K3895 - 'o' at own spot during pass-walls
If standing at the location of a closed door while having Passes_walls ability, attemping to open that door with 'o' reported "you don't find anything here to loot". Using 'o' to loot for direction ./>/< is intentional but it ignored the possibility of there also being a closed door present. When the latter applies, only switch from open to loot for direction '>' so that '.' (and '<') will open the door. Doesn't matter for creatures that can ooze under a closed door--trying to use 'o' gets rejected for them because they lack hands. Also allow hero in Passes_walls form to use 'c' when at open door spot. (For creatures that ooze under doors, 'c' is rejected just like 'o'.) Unrelated: fix a typo in a recently added comment.
This commit is contained in:
@@ -1129,6 +1129,9 @@ having worn levitation boots removed and destroyed (scroll, monster spell,
|
||||
ensure that all window interfaces respect flags.silent (suppress terminal beep)
|
||||
falling into lava, being life-saved, and teleporting out could yield redundant
|
||||
descriptions of what was present at hero's new location
|
||||
if hero had passes-walls capability and was at the location of a closed door,
|
||||
attempting to use 'o' on own spot reported "you don't find anything
|
||||
here to loot"; change to open door for '.' (or '<'), only loot for '>'
|
||||
|
||||
|
||||
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
||||
|
||||
@@ -794,8 +794,9 @@ doopen_indir(coordxy x, coordxy y)
|
||||
return ECMD_OK;
|
||||
}
|
||||
|
||||
/* open at yourself/up/down */
|
||||
if (u_at(cc.x, cc.y))
|
||||
/* open at yourself/up/down: switch to loot unless there is a closed
|
||||
door here (possible with Passes_walls) and direction isn't 'down' */
|
||||
if (u_at(cc.x, cc.y) && (u.dz > 0 || !closed_door(u.ux, u.uy)))
|
||||
return doloot();
|
||||
|
||||
/* this used to be done prior to get_adjacent_loc() but doing so was
|
||||
@@ -958,7 +959,7 @@ doclose(void)
|
||||
|
||||
x = u.ux + u.dx;
|
||||
y = u.uy + u.dy;
|
||||
if (u_at(x, y)) {
|
||||
if (u_at(x, y) && !Passes_walls) {
|
||||
You("are in the way!");
|
||||
return ECMD_TIME;
|
||||
}
|
||||
|
||||
@@ -6162,7 +6162,7 @@ lava_effects(void)
|
||||
iflags.in_lava_effects--;
|
||||
|
||||
/*
|
||||
* 3.7: this used to be uncondtional "back on solid <surface>"
|
||||
* 3.7: this used to be unconditional "back on solid <surface>"
|
||||
* but surface() could return a lot of things where that ends up
|
||||
* sounding silly. Deal with water, ignore furniture; assume
|
||||
* surface types 'air' and 'cloud' won't be present on same level
|
||||
|
||||
Reference in New Issue
Block a user