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:
@@ -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