fix #K112 - fumbling vs autoopen

Report complained that having autoopen not work when fumbling was
inconvenient and mentioned that the "ouch! you bump into a door"
result didn't take any time.  This updates the documentation to
state that autoopen won't work while fumbling (so the inconvenient
behavior persists) but changes movement so that bumping into a door
now takes time.  (Despite "ouch!", it doesn't inflict any damage.)

Also, document the recently added autounlock option.
This commit is contained in:
PatR
2020-01-07 17:57:38 -08:00
parent a49dcd1e12
commit df50d4cf17
5 changed files with 168 additions and 51 deletions

View File

@@ -9,6 +9,8 @@ autoopen walking into a door attempts to open it [TRUE]
autopickup automatically pick up objects you move over [TRUE]
autoquiver when firing with an empty quiver, select some [FALSE]
suitable inventory weapon to fill the quiver
autounlock when opening a locked door or looting a locked [TRUE]
container while carrying a key, offer to use it
BIOS allow the use of IBM ROM BIOS calls [FALSE]
blind your character is permanently blind [FALSE]
bones allow loading bones files [TRUE]

View File

@@ -1,4 +1,4 @@
.\" $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.345 $ $NHDT-Date: 1577050469 2019/12/22 21:34:29 $
.\" $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.346 $ $NHDT-Date: 1578448653 2020/01/08 01:57:33 $
.\"
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -24,7 +24,7 @@
.ds vr "NetHack 3.7
.ds f0 "\*(vr
.ds f1
.ds f2 "December 18, 2019
.ds f2 "January 7, 2020
.
.\" A note on some special characters:
.\" \(lq = left double quote
@@ -1607,30 +1607,75 @@ Any lit areas within your line of sight will be displayed;
dark areas are only displayed if they are within one space of you.
Walls and corridors remain on the map as you explore them.
.pg
Secret corridors are hidden. You can find them with the \(oqs\(cq (search)
command.
Secret corridors are hidden and appear to be solid rock.
You can find them with the \(oqs\(cq (search) command when adjacent
to them.
Multiple search attempts may be needed.
When searching is successful, secret corridors become ordinary open
corridor locations.
Mapping magic reveals secret corridors, so converts them into ordinary
corridors and shows them as such.
.hn 2
Doorways
.pg
Doorways connect rooms and corridors. Some doorways have no doors;
you can walk right through. Others have doors in them, which may be
open, closed, or locked. To open a closed door, use the \(oqo\(cq (open)
Doorways connect rooms and corridors.
Some doorways have no doors; you can walk right through.
Others have doors in them, which may be open, closed, or locked.
To open a closed door, use the \(oqo\(cq (open)
command; to close it again, use the \(oqc\(cq (close) command.
.pg
You can get through a locked door by using a tool to pick the lock
with the \(oqa\(cq (apply) command, or by kicking it open with
the \(oq\(haD\(cq (kick) command.
By default the
.op autoopen
option is enabled, so simply attempting to walk onto a closed door's
location will attempt to open it without needing \(oqo\(cq.
Opening via
.op autoopen
will not work if you are \fIconfused\fP or \fIstunned\fP or suffer from
the \fIfumbling\fP attribute.
.pg
Open doors cannot be entered diagonally; you must approach them
straight on, horizontally or vertically. Doorways without doors are
not restricted in this fashion.
straight on, horizontally or vertically.
Doorways without doors are
not restricted in this fashion except on one particular level
.\" the rogue level
(described by \(lq#overview\(rq as \(lqa primitive area\(rq).
.pg
Doors can be useful for shutting out monsters. Most monsters cannot
open doors, although a few don't need to (for example, ghosts can walk through
doors).
Unlocking magic exists but usually won't be available early on.
You can get through a locked door without magic by first using an
unlocking tool with the \(oqa\(cq (apply) command, and then opening it.
By default the
.op autounlock
option is also enabled, so if you attempt to open (via \(oqo\(cq or
.op autoopen)
a locked door while carrying an unlocking tool, you'll be asked whether
to use it on the door's lock.
Alternatively, you can break a closed door (whether locked or not) down
by kicking it via the \(oq\(haD\(cq (kick) command.
Kicking down a door destroys it and makes a lot of noise which might
wake sleeping monsters.
.pg
Secret doors are hidden. You can find them with the \(oqs\(cq (search)
command. Once found they are in all ways equivalent to normal doors.
Some closed doors are booby-trapped and will explode if an attempt is made
to open (when unlocked) or unlock (when locked) or kick down.
Like kicking, an explosion destroys the door and makes a lot of noise.
The \(lq#untrap\(rq command can be used to search a door for traps but
might take multiple attempts to find one.
When one is found, you'll be asked whether to try to disarm it.
If you accede, success will eliminate the trap but
failure will set off the trap's explosion.
(If you decline, you effectively forget that a trap was found there.)
.pg
Closed doors can be useful for shutting out monsters.
Most monsters cannot open closed doors, although a few don't need to
(for example, ghosts can walk through doors and fog clouds can flow
under them).
Some monsters who can open doors can also use unlocking tools.
And some (giants) can smash doors.
.pg
Secret doors are hidden and appear to be ordinary wall (from inside a
room) or solid rock (from outside).
You can find them with the \(oqs\(cq (search) command but it might
take multiple tries.
Once found they are in all ways equivalent to normal doors.
Mapping magic does not reveal secret doors.
.hn 2
Traps (\(oq\(ha\(cq)
.pg
@@ -2901,11 +2946,14 @@ The
option controls whether the description includes map coordinates.
.lp autodig
Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). Persistent.
that can be dug (default false).
Persistent.
.lp autoopen
Walking into a door attempts to open it (default true). Persistent.
Walking into a closed door attempts to open it (default true).
Persistent.
.lp "autopickup "
Automatically pick up things onto which you move (default on). Persistent.
Automatically pick up things onto which you move (default on).
Persistent.
See
.op pickup_types
to refine the behavior.
@@ -2922,6 +2970,11 @@ with the \(oqQ\(cq command instead.
If no weapon is found or the option is
false, the \(oqt\(cq (throw) command is executed instead.
Persistent.
.lp autounlock
Walking into a locked door or looting a locked container while carrying
an unlocking tool (such as a key) will ask whether to use that tool to
unlock the door or container (default true).
Persistent.
.lp blind
Start the character permanently blind (default false).
Persistent.

View File

@@ -45,7 +45,7 @@
%.au
\author{Original version - Eric S. Raymond\\
(Edited and expanded for 3.6 by Mike Stephenson and others)}
\date{December 18, 2019}
\date{January 7, 2020}
\maketitle
@@ -1765,36 +1765,82 @@ dark areas are only displayed if they are within one space of you.
Walls and corridors remain on the map as you explore them.
%.pg
Secret corridors are hidden. You can find them with the `{\tt s}' (search)
command.
Secret corridors are hidden and appear to be solid rock.
You can find them with the `{\tt s}' (search) command when adjacent
to them.
Multiple search attempts may be needed.
When searching is successful, secret corridors become ordinary open
corridor locations.
Mapping magic reveals secret corridors, so converts them into ordinary
corridors and shows them as such.
%.hn 2
\subsection*{Doorways}
%.pg
Doorways connect rooms and corridors. Some doorways have no doors;
you can walk right through. Others have doors in them, which may be
open, closed, or locked. To open a closed door, use the `{\tt o}' (open)
Doorways connect rooms and corridors.
Some doorways have no doors; you can walk right through.
Others have doors in them, which may be open, closed, or locked.
To open a closed door, use the `{\tt o}' (open)
command; to close it again, use the `{\tt c}' (close) command.
%.pg
You can get through a locked door by using a tool to pick the lock
with the `{\tt a}' (apply) command, or by kicking it open with the
`{\tt \^{}D}' (kick) command.
By default the
{\it autoopen}
option is enabled, so simply attempting to walk onto a closed door's
location will attempt to open it without needing `{\tt o}'.
Opening via
{\it autoopen}
will not work if you are {\it confused\/} or {\it stunned\/} or suffer from
the {\it fumbling\/} attribute.
%.pg
Open doors cannot be entered diagonally; you must approach them
straight on, horizontally or vertically. Doorways without doors are
not restricted in this fashion.
straight on, horizontally or vertically.
Doorways without doors are
not restricted in this fashion except on one particular level
%.\" the rogue level
(described by ``{\tt \#overview}'' as ``a primitive area'').
%.pg
Doors can be useful for shutting out monsters. Most monsters cannot
open doors, although a few don't need to (for example, ghosts can walk through
doors).
Unlocking magic exists but usually won't be available early on.
You can get through a locked door without magic by first using an
unlocking tool with the `{\tt a}' (apply) command, and then opening it.
By default the
{\it autounlock}
option is also enabled, so if you attempt to open (via `{\tt o}' or
{\it autoopen})
a locked door while carrying an unlocking tool, you'll be asked whether
to use it on the door's lock.
Alternatively, you can break a closed door (whether locked or not) down
by kicking it via the ``{\tt \^{}D}'' (kick) command.
Kicking down a door destroys it and makes a lot of noise which might
wake sleeping monsters.
%.pg
Secret doors are hidden. You can find them with the `{\tt s}' (search)
command. Once found they are in all ways equivalent to normal doors.
Some closed doors are booby-trapped and will explode if an attempt is made
to open (when unlocked) or unlock (when locked) or kick down.
Like kicking, an explosion destroys the door and makes a lot of noise.
The ``{\tt \#untrap}'' command can be used to search a door for traps but
might take multiple attempts to find one.
When one is found, you'll be asked whether to try to disarm it.
If you accede, success will eliminate the trap but
failure will set off the trap's explosion.
(If you decline, you effectively forget that a trap was found there.)
%.pg
Closed doors can be useful for shutting out monsters.
Most monsters cannot open closed doors, although a few don't need to
(for example, ghosts can walk through doors and fog clouds can flow
under them).
Some monsters who can open doors can also use unlocking tools.
And some (giants) can smash doors.
%.pg
Secret doors are hidden and appear to be ordinary wall (from inside a
room) or solid rock (from outside).
You can find them with the `{\tt s}' (search) command but it might
take multiple tries.
Once found they are in all ways equivalent to normal doors.
Mapping magic does not reveal secret doors.
%.hn 2
\subsection*{Traps (`{\tt \^{}}')}
@@ -3187,7 +3233,8 @@ Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). Persistent.
%.lp
\item[\ib{autoopen}]
Walking into a door attempts to open it (default true). Persistent.
Walking into a closed door attempts to open it (default true).
Persistent.
%.lp
\item[\ib{autopickup}]
Automatically pick up things onto which you move (default on). Persistent.
@@ -3206,6 +3253,12 @@ with the `Q' command instead.
If no weapon is found or the option is
false, the `t' (throw) command is executed instead. Persistent.
%.lp
\item[\ib{autounlock}]
Walking into a locked door or looting a locked container while carrying
an unlocking tool (such as a key) will ask whether to use that tool to
unlock the door or container (default true).
Persistent.
%.lp
\item[\ib{blind}]
Start the character permanently blind (default false). Persistent.
%.lp

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 allmain.c $NHDT-Date: 1577050218 2019/12/22 21:30:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.136 $ */
/* NetHack 3.6 allmain.c $NHDT-Date: 1578448653 2020/01/08 01:57:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.137 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -85,7 +85,7 @@ boolean resuming;
initrack();
u.uz0.dlevel = u.uz.dlevel;
g.youmonst.movement = NORMAL_SPEED; /* give the hero some movement points */
g.youmonst.movement = NORMAL_SPEED; /* give hero some movement points */
g.context.move = 0;
g.program_state.in_moveloop = 1;
@@ -178,7 +178,7 @@ boolean resuming;
g.youmonst.movement = 0;
settrack();
g.monstermoves++;
g.monstermoves++; /* [obsolete (for a long time...)] */
g.moves++;
/********************************/
@@ -468,7 +468,8 @@ boolean resuming;
vision_recalc(0); /* vision! */
/* when running in non-tport mode, this gets done through domove() */
if ((!g.context.run || flags.runmode == RUN_TPORT)
&& (g.multi && (!g.context.travel ? !(g.multi % 7) : !(g.moves % 7L)))) {
&& (g.multi && (!g.context.travel ? !(g.multi % 7)
: !(g.moves % 7L)))) {
if (flags.time && g.context.run)
g.context.botl = TRUE;
/* [should this be flush_screen() instead?] */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 hack.c $NHDT-Date: 1576638500 2019/12/18 03:08:20 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.220 $ */
/* NetHack 3.6 hack.c $NHDT-Date: 1578448654 2020/01/08 01:57:34 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.239 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -784,7 +784,8 @@ int mode;
if (mode == DO_MOVE)
pline("There is an obstacle there.");
return FALSE;
} else if (tunnels(g.youmonst.data) && !needspick(g.youmonst.data)) {
} else if (tunnels(g.youmonst.data)
&& !needspick(g.youmonst.data)) {
/* Eat the door. */
if (mode == DO_MOVE && still_chewing(x, y))
return FALSE;
@@ -793,10 +794,10 @@ int mode;
if (amorphous(g.youmonst.data))
You(
"try to ooze under the door, but can't squeeze your possessions through.");
if (flags.autoopen && !g.context.run && !Confusion
&& !Stunned && !Fumbling) {
g.context.door_opened = g.context.move =
doopen_indir(x, y);
if (flags.autoopen && !g.context.run
&& !Confusion && !Stunned && !Fumbling) {
g.context.door_opened
= g.context.move = doopen_indir(x, y);
} else if (x == ux || y == uy) {
if (Blind || Stunned || ACURR(A_DEX) < 10
|| Fumbling) {
@@ -807,6 +808,13 @@ int mode;
pline("Ouch! You bump into a door.");
exercise(A_DEX, FALSE);
}
/* use current move; needed for the "ouch" case
but done for steed case too for consistency;
we haven't opened a door but we're going to
return False and without having 'door_opened'
set, 'move' would get reset by caller */
g.context.door_opened
= g.context.move = TRUE;
} else
pline("That door is closed.");
}
@@ -1036,7 +1044,7 @@ int mode;
continue;
if ((!Passes_walls && !can_ooze(&g.youmonst)
&& closed_door(x, y)) || sobj_at(BOULDER, x, y)
|| test_move(x, y, nx-x, ny-y, TEST_TRAP)) {
|| test_move(x, y, nx - x, ny - y, TEST_TRAP)) {
/* closed doors and boulders usually
* cause a delay, so prefer another path */
if (travel[x][y] > radius - 3) {