Merge branch 'NetHack-3.7'
This commit is contained in:
+16
-10
@@ -5,6 +5,11 @@ matrix:
|
||||
env: DESCR=linux-xenial-gcc HINTS=linux
|
||||
compiler: gcc
|
||||
script: "cd sys/unix/ && sh setup.sh hints/$HINTS && cd ../../ && make fetch-lua && make install"
|
||||
- os: linux
|
||||
env: DESCR=linux-bionic-gcc HINTS=linux
|
||||
dist: bionic
|
||||
compiler: gcc
|
||||
script: "cd sys/unix/ && sh setup.sh hints/$HINTS && cd ../../ && make fetch-lua && make install"
|
||||
- os: linux
|
||||
env: DESCR=linux-xenial-clang HINTS=linux
|
||||
compiler: clang
|
||||
@@ -74,6 +79,17 @@ matrix:
|
||||
language: shell
|
||||
script:
|
||||
- ./win/win32/vs2017/travisci.sh
|
||||
- os: windows
|
||||
# install: choco install mingw
|
||||
env: DESCR=windows-mingw
|
||||
script:
|
||||
- sh sys/winnt/travis-gcc.sh
|
||||
- export ADD_CURSES=Y
|
||||
- export PDCURSES_TOP=../lib/pdcurses
|
||||
- export LUA_VERSION=5.3.5
|
||||
- cd src
|
||||
- cp ../sys/winnt/Makefile.gcc ./Makefile
|
||||
- mingw32-make install
|
||||
- os: linux
|
||||
env: DESCR=msdos-cross-on-linux HINTS=linux LUA_VERSION=5.3.5
|
||||
compiler: gcc
|
||||
@@ -84,16 +100,6 @@ matrix:
|
||||
- cd lib/lua-$LUA_VERSION/src && make a && cd ../../..
|
||||
- sh sys/msdos/msdos-cross-compile.sh
|
||||
exclude:
|
||||
- os: windows
|
||||
# install: choco install mingw
|
||||
env: DESCR=windows-mingw
|
||||
script:
|
||||
- git clone --depth 1 https://github.com/wmcbrine/PDCurses.git ../pdcurses
|
||||
- export ADD_CURSES=Y
|
||||
- export PDCURSES_TOP=../../pdcurses
|
||||
- cd src
|
||||
- cp ../sys/winnt/Makefile.gcc ./Makefile
|
||||
- mingw32-make install
|
||||
# - os: osx
|
||||
# osx_image: xcode10.3
|
||||
# env: DESCR=osx-xcode10.3-x11 HINTS=macosx10.14 WANT_WIN_CURSES=1 WANT_WIN_X11=1 USE_XPM=1
|
||||
|
||||
@@ -163,13 +163,13 @@ sys/msdos:
|
||||
Install.dos Makefile.BC Makefile.GCC
|
||||
Makefile.MSC Makefile1.cross Makefile2.cross
|
||||
SCHEMA35.MSC moveinit.pat msdos-cross-compile.sh
|
||||
msdos.c msdoshlp.txt ovlinit.c
|
||||
pckeys.c pctiles.c pctiles.h
|
||||
pcvideo.h portio.h schema1.BC
|
||||
schema2.BC schema3.MSC setup.bat
|
||||
sysconf tile2bin.c vesa.h
|
||||
video.c vidtxt.c vidvesa.c
|
||||
vidvga.c
|
||||
msdos.c msdoshlp.txt nhlua.h
|
||||
ovlinit.c pckeys.c pctiles.c
|
||||
pctiles.h pcvideo.h portio.h
|
||||
schema1.BC schema2.BC schema3.MSC
|
||||
setup.bat sysconf tile2bin.c
|
||||
vesa.h video.c vidtxt.c
|
||||
vidvesa.c vidvga.c
|
||||
|
||||
(files for running MSDOS binary under Windows)
|
||||
nhico.uu nhpif.uu
|
||||
@@ -289,9 +289,9 @@ Makefile.msc console.rc nethack.def
|
||||
nh340key.c nhdefkey.c nhico.uu
|
||||
nhraykey.c nhsetup.bat ntsound.c
|
||||
nttty.c porthelp stub-pdcscrn.c
|
||||
stubs.c sysconf.template win10.c
|
||||
win10.h win32api.h windmain.c
|
||||
winnt.c winos.h
|
||||
stubs.c sysconf.template travis-gcc.sh
|
||||
win10.c win10.h win32api.h
|
||||
windmain.c winnt.c winos.h
|
||||
|
||||
test:
|
||||
(files in top directory)
|
||||
|
||||
@@ -43,6 +43,8 @@ perm_invent keep inventory in a permanent window [FALSE]
|
||||
pickup_thrown override pickup_types for thrown objects [TRUE]
|
||||
pushweapon when wielding a new weapon, put your previously [FALSE]
|
||||
wielded weapon into the secondary weapon slot
|
||||
quick_farsight usually skip the chance to browse the map when [FALSE]
|
||||
randomly triggered clairvoyance takes place
|
||||
rawio allow the use of raw I/O [FALSE]
|
||||
rest_on_space count the space bar as a rest character [FALSE]
|
||||
safe_pet prevent you from (knowingly) attacking your pet(s) [TRUE]
|
||||
|
||||
+9
-1
@@ -1,4 +1,4 @@
|
||||
.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.337 $ $NHDT-Date: 1576431522 2019/12/15 17:38:42 $
|
||||
.\" $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.345 $ $NHDT-Date: 1577050469 2019/12/22 21:34:29 $
|
||||
.\"
|
||||
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
|
||||
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
|
||||
@@ -3422,6 +3422,14 @@ something pushes the old item into your alternate weapon slot (default off).
|
||||
Likewise for the \(oqa\(cq (apply) command if it causes the applied item to
|
||||
become wielded.
|
||||
Persistent.
|
||||
.lp quick_farsight
|
||||
When set, usually prevents the \(lqyou sense your surroundings\(rq message
|
||||
where play pauses to allow you to browse the map whenever clairvoyance
|
||||
randomly activates.
|
||||
Some situations, such as being underwater or engulfed, ignore this option.
|
||||
It does not affect the clairvoyance spell where pausing to examine revealed
|
||||
objects or monsters is less intrusive.
|
||||
Default is off. Persistent.
|
||||
.lp "race "
|
||||
Selects your race (for example, \(lqrace:human\(rq).
|
||||
Default is random.
|
||||
|
||||
+10
-1
@@ -3760,7 +3760,16 @@ Using the `w' (wield) command when already wielding
|
||||
something pushes the old item into your alternate weapon slot (default off).
|
||||
Likewise for the `a' (apply) command if it causes the applied item to
|
||||
become wielded. Persistent.
|
||||
%.Ip
|
||||
%.lp
|
||||
\item[\ib(quick\verb+_+farsight}
|
||||
When set, usually prevents the ``you sense your surroundings'' message
|
||||
where play pauses to allow you to browse the map whenever clairvoyance
|
||||
randomly activates.
|
||||
Some situations, such as being underwater or engulfed, ignore this option.
|
||||
It does not affect the clairvoyance spell where pausing to examine revealed
|
||||
objects or monsters is less intrusive.
|
||||
Default is off. Persistent.
|
||||
%.lp
|
||||
\item[\ib{race}]
|
||||
Selects your race (for example, ``{\tt race:human}''). Default is random.
|
||||
If you prefix the value with `{\tt !}' or ``{\tt no}'', you will
|
||||
|
||||
+190
-190
@@ -3934,6 +3934,15 @@
|
||||
off). Likewise for the `a' (apply) command if it causes the
|
||||
applied item to become wielded. Persistent.
|
||||
|
||||
quick_farsight
|
||||
When set, usually prevents the "you sense your surroundings"
|
||||
message where play pauses to allow you to browse the map when-
|
||||
ever clairvoyance randomly activates. Some situations, such as
|
||||
being underwater or engulfed, ignore this option. It does not
|
||||
affect the clairvoyance spell where pausing to examine revealed
|
||||
objects or monsters is less intrusive. Default is off. Per-
|
||||
sistent.
|
||||
|
||||
race
|
||||
Selects your race (for example, "race:human"). Default is ran-
|
||||
dom. If you prefix the value with `!' or "no", you will ex-
|
||||
@@ -3944,15 +3953,6 @@
|
||||
Make the space bar a synonym for the `.' (#wait) command (de-
|
||||
fault off). Persistent.
|
||||
|
||||
role
|
||||
Pick your type of character (for example "role:Samurai"); syn-
|
||||
onym for "character". See "name" for an alternate method of
|
||||
specifying your role. Normally only the first letter of the
|
||||
value is examined; `r' is an exception with "Rogue", "Ranger",
|
||||
and "random" values. If you prefix the value with `!' or "no",
|
||||
you will exclude that role from being picked randomly. Cannot
|
||||
be set with the `O' command. Persistent.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
@@ -3964,6 +3964,15 @@
|
||||
|
||||
|
||||
|
||||
role
|
||||
Pick your type of character (for example "role:Samurai"); syn-
|
||||
onym for "character". See "name" for an alternate method of
|
||||
specifying your role. Normally only the first letter of the
|
||||
value is examined; `r' is an exception with "Rogue", "Ranger",
|
||||
and "random" values. If you prefix the value with `!' or "no",
|
||||
you will exclude that role from being picked randomly. Cannot
|
||||
be set with the `O' command. Persistent.
|
||||
|
||||
roguesymset
|
||||
This option may be used to select one of the named symbol sets
|
||||
found within "symbols" to alter the symbols displayed on the
|
||||
@@ -4009,15 +4018,6 @@
|
||||
Show your accumulated experience points on bottom line (default
|
||||
off). Persistent.
|
||||
|
||||
showrace
|
||||
Display yourself as the glyph for your race, rather than the
|
||||
glyph for your role (default off). Note that this setting af-
|
||||
fects only the appearance of the display, not the way the game
|
||||
treats you. Persistent.
|
||||
|
||||
showscore
|
||||
Show your approximate accumulated score on bottom line (default
|
||||
off). Persistent.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4030,6 +4030,16 @@
|
||||
|
||||
|
||||
|
||||
showrace
|
||||
Display yourself as the glyph for your race, rather than the
|
||||
glyph for your role (default off). Note that this setting af-
|
||||
fects only the appearance of the display, not the way the game
|
||||
treats you. Persistent.
|
||||
|
||||
showscore
|
||||
Show your approximate accumulated score on bottom line (default
|
||||
off). Persistent.
|
||||
|
||||
silent
|
||||
Suppress terminal beeps (default on). Persistent.
|
||||
|
||||
@@ -4075,16 +4085,6 @@
|
||||
screen. Use "symset:default" to explicitly select the default
|
||||
symbols.
|
||||
|
||||
time
|
||||
Show the elapsed game time in turns on bottom line (default
|
||||
off). Persistent.
|
||||
|
||||
timed_delay
|
||||
When pausing momentarily for display effect, such as with ex-
|
||||
plosions and moving objects, use a timer rather than sending
|
||||
extra characters to the screen. (Applies to "tty" interface
|
||||
only; "X11" interface always uses a timer based delay. The
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
@@ -4096,7 +4096,16 @@
|
||||
|
||||
|
||||
|
||||
default is on if configured into the program.) Persistent.
|
||||
time
|
||||
Show the elapsed game time in turns on bottom line (default
|
||||
off). Persistent.
|
||||
|
||||
timed_delay
|
||||
When pausing momentarily for display effect, such as with ex-
|
||||
plosions and moving objects, use a timer rather than sending
|
||||
extra characters to the screen. (Applies to "tty" interface
|
||||
only; "X11" interface always uses a timer based delay. The de-
|
||||
fault is on if configured into the program.) Persistent.
|
||||
|
||||
tombstone
|
||||
Draw a tombstone graphic upon your death (default on). Persis-
|
||||
@@ -4141,15 +4150,6 @@
|
||||
through next and previous targets, allows filtering the possi-
|
||||
ble targets.
|
||||
|
||||
n - no filtering [default]
|
||||
v - in view only
|
||||
a - in same area only
|
||||
|
||||
The area-filter tries to be slightly predictive -- if you're
|
||||
standing on a doorway, it will consider the area on the side of
|
||||
the door you were last moving towards.
|
||||
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4162,6 +4162,14 @@
|
||||
|
||||
|
||||
|
||||
n - no filtering [default]
|
||||
v - in view only
|
||||
a - in same area only
|
||||
|
||||
The area-filter tries to be slightly predictive -- if you're
|
||||
standing on a doorway, it will consider the area on the side of
|
||||
the door you were last moving towards.
|
||||
|
||||
Filtering can also be changed when getting a location with the
|
||||
"getpos.filter" key.
|
||||
|
||||
@@ -4208,14 +4216,6 @@
|
||||
ing to suit your preferences, it will attempt to do so. If it
|
||||
can't it will silently ignore it. You can find out if an option
|
||||
is supported by the window port that you are currently using by
|
||||
checking to see if it shows up in the Options list. Some options
|
||||
are dynamic and can be specified during the game with the `O'
|
||||
command.
|
||||
|
||||
align_message
|
||||
Where to align or place the message window (top, bottom, left,
|
||||
or right)
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4228,6 +4228,14 @@
|
||||
|
||||
|
||||
|
||||
checking to see if it shows up in the Options list. Some options
|
||||
are dynamic and can be specified during the game with the `O'
|
||||
command.
|
||||
|
||||
align_message
|
||||
Where to align or place the message window (top, bottom, left,
|
||||
or right)
|
||||
|
||||
align_status
|
||||
Where to align or place the status window (top, bottom, left,
|
||||
or right).
|
||||
@@ -4274,14 +4282,6 @@
|
||||
|
||||
font_size_message
|
||||
If NetHack can, it should use this size font for the message
|
||||
window.
|
||||
|
||||
font_size_status
|
||||
If NetHack can, it should use this size font for the status
|
||||
window.
|
||||
|
||||
font_size_text
|
||||
If NetHack can, it should use this size font for text windows.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4294,6 +4294,15 @@
|
||||
|
||||
|
||||
|
||||
window.
|
||||
|
||||
font_size_status
|
||||
If NetHack can, it should use this size font for the status
|
||||
window.
|
||||
|
||||
font_size_text
|
||||
If NetHack can, it should use this size font for text windows.
|
||||
|
||||
fullscreen
|
||||
If NetHack can, it should try and display on the entire screen
|
||||
rather than in a window.
|
||||
@@ -4338,16 +4347,7 @@
|
||||
games for the player to choose from at game startup, if it can.
|
||||
Not all ports support this option.
|
||||
|
||||
softkeyboard
|
||||
Display an onscreen keyboard. Handhelds are most likely to
|
||||
support this option.
|
||||
|
||||
splash_screen
|
||||
If NetHack can, it should display an opening splash screen when
|
||||
it starts up (default yes).
|
||||
|
||||
statuslines
|
||||
Number of lines for traditional below-the-map status display.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4360,6 +4360,16 @@
|
||||
|
||||
|
||||
|
||||
softkeyboard
|
||||
Display an onscreen keyboard. Handhelds are most likely to
|
||||
support this option.
|
||||
|
||||
splash_screen
|
||||
If NetHack can, it should display an opening splash screen when
|
||||
it starts up (default yes).
|
||||
|
||||
statuslines
|
||||
Number of lines for traditional below-the-map status display.
|
||||
Acceptable values are 2 and 3 (default is 2). Curses and tty
|
||||
interfaces only.
|
||||
|
||||
@@ -4405,16 +4415,6 @@
|
||||
1 - on, always show borders
|
||||
2 - auto, on if display is at least (24+2)x(80+2) (default)
|
||||
|
||||
(The 26x82 size threshold for `2' refers to number of rows and
|
||||
columns of the display. A width of at least 110 columns
|
||||
(80+2+26+2) is needed for align_status set to left or right.)
|
||||
|
||||
windowcolors
|
||||
If NetHack can, it should display windows with the specified
|
||||
foreground/background colors. Windows GUI only. The format is
|
||||
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
@@ -4426,6 +4426,14 @@
|
||||
|
||||
|
||||
|
||||
(The 26x82 size threshold for `2' refers to number of rows and
|
||||
columns of the display. A width of at least 110 columns
|
||||
(80+2+26+2) is needed for align_status set to left or right.)
|
||||
|
||||
windowcolors
|
||||
If NetHack can, it should display windows with the specified
|
||||
foreground/background colors. Windows GUI only. The format is
|
||||
|
||||
OPTION=windowcolors:wintype foreground/background
|
||||
|
||||
where wintype is one of "menu", "message", "status", or
|
||||
@@ -4472,14 +4480,6 @@
|
||||
abort the count by typing ESC will leave NetHack waiting for
|
||||
another character to complete the two character sequence. Type
|
||||
a second ESC to finish cancelling such a count. At other
|
||||
prompts a single ESC suffices.
|
||||
|
||||
BIOS
|
||||
Use BIOS calls to update the screen display quickly and to read
|
||||
the keyboard (allowing the use of arrow keys to move) on ma-
|
||||
chines with an IBM PC compatible BIOS ROM (default off, OS/2,
|
||||
PC, and ST NetHack only).
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4492,6 +4492,14 @@
|
||||
|
||||
|
||||
|
||||
prompts a single ESC suffices.
|
||||
|
||||
BIOS
|
||||
Use BIOS calls to update the screen display quickly and to read
|
||||
the keyboard (allowing the use of arrow keys to move) on ma-
|
||||
chines with an IBM PC compatible BIOS ROM (default off, OS/2,
|
||||
PC, and ST NetHack only).
|
||||
|
||||
flush
|
||||
(default off, Amiga NetHack only).
|
||||
|
||||
@@ -4538,14 +4546,6 @@
|
||||
not correct the problem, try !color. Cannot be set with the
|
||||
`O' command.
|
||||
|
||||
9.7. Regular Expressions
|
||||
|
||||
Regular expressions are normally POSIX extended regular ex-
|
||||
pressions. It is possible to compile NetHack without regular ex-
|
||||
pression support on a platform where there is no regular expres-
|
||||
sion library. While this is not true of any modern platform, if
|
||||
your NetHack was built this way, patterns are instead glob pat-
|
||||
terns. This applies to Autopickup exceptions, Message types, Menu
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4558,6 +4558,14 @@
|
||||
|
||||
|
||||
|
||||
9.7. Regular Expressions
|
||||
|
||||
Regular expressions are normally POSIX extended regular ex-
|
||||
pressions. It is possible to compile NetHack without regular ex-
|
||||
pression support on a platform where there is no regular expres-
|
||||
sion library. While this is not true of any modern platform, if
|
||||
your NetHack was built this way, patterns are instead glob pat-
|
||||
terns. This applies to Autopickup exceptions, Message types, Menu
|
||||
colors, and User sounds.
|
||||
|
||||
9.8. Configuring Autopickup Exceptions
|
||||
@@ -4601,16 +4609,8 @@
|
||||
any corpse from autopickup. The last example results in the ex-
|
||||
clusion of items known to be cursed from autopickup.
|
||||
|
||||
9.9. Changing Key Bindings
|
||||
|
||||
It is possible to change the default key bindings of some
|
||||
special commands, menu accelerator keys, and extended commands,
|
||||
by using BIND stanzas in the configuration file. Format is key,
|
||||
followed by the command to bind to, separated by a colon. The
|
||||
key can be a single character ("x"), a control key ("^X", "C-x"),
|
||||
a meta key ("M-x"), or a three-digit decimal ASCII code.
|
||||
|
||||
For example:
|
||||
|
||||
|
||||
|
||||
@@ -4624,6 +4624,17 @@
|
||||
|
||||
|
||||
|
||||
9.9. Changing Key Bindings
|
||||
|
||||
It is possible to change the default key bindings of some
|
||||
special commands, menu accelerator keys, and extended commands,
|
||||
by using BIND stanzas in the configuration file. Format is key,
|
||||
followed by the command to bind to, separated by a colon. The
|
||||
key can be a single character ("x"), a control key ("^X", "C-x"),
|
||||
a meta key ("M-x"), or a three-digit decimal ASCII code.
|
||||
|
||||
For example:
|
||||
|
||||
BIND=^X:getpos.autodescribe
|
||||
BIND={:menu_first_page
|
||||
BIND=v:loot
|
||||
@@ -4668,17 +4679,6 @@
|
||||
When asked for a direction, the key to target yourself. De-
|
||||
fault is `.'.
|
||||
|
||||
getdir.self2
|
||||
When asked for a direction, the key to target yourself. De-
|
||||
fault is `s'.
|
||||
|
||||
getpos.autodescribe
|
||||
When asked for a location, the key to toggle autodescribe. De-
|
||||
fault is `#'.
|
||||
|
||||
getpos.all.next
|
||||
When asked for a location, the key to go to next closest
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
@@ -4690,7 +4690,17 @@
|
||||
|
||||
|
||||
|
||||
interesting thing. Default is `a'.
|
||||
getdir.self2
|
||||
When asked for a direction, the key to target yourself. De-
|
||||
fault is `s'.
|
||||
|
||||
getpos.autodescribe
|
||||
When asked for a location, the key to toggle autodescribe. De-
|
||||
fault is `#'.
|
||||
|
||||
getpos.all.next
|
||||
When asked for a location, the key to go to next closest inter-
|
||||
esting thing. Default is `a'.
|
||||
|
||||
getpos.all.prev
|
||||
When asked for a location, the key to go to previous closest
|
||||
@@ -4734,16 +4744,6 @@
|
||||
or meta-digit keys to fast-move around, move by skipping the
|
||||
same glyphs instead of by 8 units. Default is `*'.
|
||||
|
||||
getpos.filter
|
||||
When asked for a location, change the filtering mode when using
|
||||
one of the next or previous keys to cycle through targets.
|
||||
Toggles between no filtering, in view only, and in the same
|
||||
area only. Default is `"'.
|
||||
|
||||
getpos.pick
|
||||
When asked for a location, the key to choose the location, and
|
||||
possibly ask for more info. Default is `.'.
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4756,6 +4756,16 @@
|
||||
|
||||
|
||||
|
||||
getpos.filter
|
||||
When asked for a location, change the filtering mode when using
|
||||
one of the next or previous keys to cycle through targets.
|
||||
Toggles between no filtering, in view only, and in the same
|
||||
area only. Default is `"'.
|
||||
|
||||
getpos.pick
|
||||
When asked for a location, the key to choose the location, and
|
||||
possibly ask for more info. Default is `.'.
|
||||
|
||||
getpos.pick.once
|
||||
When asked for a location, the key to choose the location, and
|
||||
skip asking for more info. Default is `,'.
|
||||
@@ -4799,16 +4809,6 @@
|
||||
redraw
|
||||
Key to redraw the screen. Default is `^R'.
|
||||
|
||||
redraw.numpad
|
||||
Key to redraw the screen. With number_pad only. Default is
|
||||
`^L'.
|
||||
|
||||
repeat
|
||||
Key to repeat previous command. Default is `^A'.
|
||||
|
||||
reqmenu
|
||||
Prefix key to request menu from some commands. Default is `m'.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -4822,6 +4822,16 @@
|
||||
|
||||
|
||||
|
||||
redraw.numpad
|
||||
Key to redraw the screen. With number_pad only. Default is
|
||||
`^L'.
|
||||
|
||||
repeat
|
||||
Key to repeat previous command. Default is `^A'.
|
||||
|
||||
reqmenu
|
||||
Prefix key to request menu from some commands. Default is `m'.
|
||||
|
||||
run
|
||||
Prefix key to run towards a direction. Default is `G'.
|
||||
|
||||
@@ -4867,16 +4877,6 @@
|
||||
the user is prompted with more-prompt, and a message matching
|
||||
"You displaced <something>." is not shown at all.
|
||||
|
||||
The order of the defined MSGTYPE lines is important; the last
|
||||
matching rule is used. Put the general case first, exceptions
|
||||
below them.
|
||||
|
||||
9.11. Configuring Menu Colors
|
||||
|
||||
Some platforms allow you to define colors used in menu lines
|
||||
when the line matches a user-defined pattern. At this time the
|
||||
tty, curses, win32tty and win32gui interfaces support this.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
@@ -4888,6 +4888,16 @@
|
||||
|
||||
|
||||
|
||||
The order of the defined MSGTYPE lines is important; the last
|
||||
matching rule is used. Put the general case first, exceptions
|
||||
below them.
|
||||
|
||||
9.11. Configuring Menu Colors
|
||||
|
||||
Some platforms allow you to define colors used in menu lines
|
||||
when the line matches a user-defined pattern. At this time the
|
||||
tty, curses, win32tty and win32gui interfaces support this.
|
||||
|
||||
In general, the configuration file entries to describe the
|
||||
menu color mappings look like this:
|
||||
|
||||
@@ -4932,16 +4942,6 @@
|
||||
Note that if you intend to have one or more color specifica-
|
||||
tions match " uncursed ", you will probably want to turn the im-
|
||||
plicit_uncursed option off so that all items known to be uncursed
|
||||
are actually displayed with the "uncursed" description.
|
||||
|
||||
9.12. Configuring User Sounds
|
||||
|
||||
Some platforms allow you to define sound files to be played
|
||||
when a message that matches a user-defined pattern is delivered
|
||||
to the message window. At this time the Qt port and the win32tty
|
||||
and win32gui ports support the use of user sounds.
|
||||
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -4954,6 +4954,15 @@
|
||||
|
||||
|
||||
|
||||
are actually displayed with the "uncursed" description.
|
||||
|
||||
9.12. Configuring User Sounds
|
||||
|
||||
Some platforms allow you to define sound files to be played
|
||||
when a message that matches a user-defined pattern is delivered
|
||||
to the message window. At this time the Qt port and the win32tty
|
||||
and win32gui ports support the use of user sounds.
|
||||
|
||||
The following configuration file entries are relevant to
|
||||
mapping user sounds to messages:
|
||||
|
||||
@@ -4999,15 +5008,6 @@
|
||||
|
||||
OPTION=hilite_status:wisdom/down/red/up/green
|
||||
|
||||
Allowed colors are black, red, green, brown, blue, magenta,
|
||||
cyan, gray, orange, light-green, yellow, light-blue, light-magen-
|
||||
ta, light-cyan, and white. And "no-color", the default fore-
|
||||
ground color on the display, which is not necessarily the same as
|
||||
black or white or any of the other colors.
|
||||
|
||||
Allowed attributes are none, bold, dim, underline, blink,
|
||||
and inverse. "Normal" is a synonym for "none"; they should not
|
||||
be used in combination with any of the other attributes.
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -5020,6 +5020,16 @@
|
||||
|
||||
|
||||
|
||||
Allowed colors are black, red, green, brown, blue, magenta,
|
||||
cyan, gray, orange, light-green, yellow, light-blue, light-magen-
|
||||
ta, light-cyan, and white. And "no-color", the default fore-
|
||||
ground color on the display, which is not necessarily the same as
|
||||
black or white or any of the other colors.
|
||||
|
||||
Allowed attributes are none, bold, dim, underline, blink,
|
||||
and inverse. "Normal" is a synonym for "none"; they should not
|
||||
be used in combination with any of the other attributes.
|
||||
|
||||
To specify both a color and an attribute, use `&' to combine
|
||||
them. To specify multiple attributes, use `+' to combine those.
|
||||
For example: "magenta&inverse+dim".
|
||||
@@ -5064,16 +5074,6 @@
|
||||
|
||||
* "always" will set the default attributes for that field.
|
||||
|
||||
* "up", "down" set the field attributes for when the field
|
||||
value changes upwards or downwards. This attribute times
|
||||
out after statushilites turns.
|
||||
|
||||
* "changed" sets the field attribute for when the field val-
|
||||
ue changes. This attribute times out after statushilites
|
||||
turns. (If a field has both a "changed" rule and an "up"
|
||||
or "down" rule which matches a change in the field's val-
|
||||
ue, the "up" or "down" one takes precedence.)
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -5086,6 +5086,16 @@
|
||||
|
||||
|
||||
|
||||
* "up", "down" set the field attributes for when the field
|
||||
value changes upwards or downwards. This attribute times
|
||||
out after statushilites turns.
|
||||
|
||||
* "changed" sets the field attribute for when the field val-
|
||||
ue changes. This attribute times out after statushilites
|
||||
turns. (If a field has both a "changed" rule and an "up"
|
||||
or "down" rule which matches a change in the field's val-
|
||||
ue, the "up" or "down" one takes precedence.)
|
||||
|
||||
* percentage sets the field attribute when the field value
|
||||
matches the percentage. It is specified as a number be-
|
||||
tween 0 and 100, followed by `%' (percent sign). If the
|
||||
@@ -5129,16 +5139,6 @@
|
||||
The whole feature can be disabled by setting option sta-
|
||||
tushilites to 0.
|
||||
|
||||
Example hilites:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5152,6 +5152,8 @@
|
||||
|
||||
|
||||
|
||||
Example hilites:
|
||||
|
||||
OPTION=hilite_status: gold/up/yellow/down/brown
|
||||
OPTION=hilite_status: characteristics/up/green/down/red
|
||||
OPTION=hilite_status: hitpoints/100%/gray&normal
|
||||
@@ -5203,8 +5205,6 @@
|
||||
B S_bat (bat or bird)
|
||||
^ S_bear_trap (bear trap)
|
||||
- S_blcorn (bottom left corner)
|
||||
b S_blob (blob)
|
||||
+ S_book (spellbook)
|
||||
|
||||
|
||||
|
||||
@@ -5218,6 +5218,8 @@
|
||||
|
||||
|
||||
|
||||
b S_blob (blob)
|
||||
+ S_book (spellbook)
|
||||
) S_boomleft (boomerang open left)
|
||||
( S_boomright (boomerang open right)
|
||||
` S_boulder (boulder)
|
||||
@@ -5269,8 +5271,6 @@
|
||||
. S_hodbridge (horizontal lowered drawbridge)
|
||||
| S_hodoor (open door in horizontal wall)
|
||||
^ S_hole (hole)
|
||||
@ S_human (human or elf)
|
||||
h S_humanoid (humanoid)
|
||||
|
||||
|
||||
|
||||
@@ -5284,6 +5284,8 @@
|
||||
|
||||
|
||||
|
||||
@ S_human (human or elf)
|
||||
h S_humanoid (humanoid)
|
||||
- S_hwall (horizontal wall)
|
||||
. S_ice (ice)
|
||||
i S_imp (imp or minor demon)
|
||||
@@ -5335,8 +5337,6 @@
|
||||
s S_spider (arachnid or centipede)
|
||||
^ S_spiked_pit (spiked pit)
|
||||
^ S_squeaky_board (squeaky board)
|
||||
0 S_ss1 (magic shield 1 of 4)
|
||||
# S_ss2 (magic shield 2 of 4)
|
||||
|
||||
|
||||
|
||||
@@ -5350,6 +5350,8 @@
|
||||
|
||||
|
||||
|
||||
0 S_ss1 (magic shield 1 of 4)
|
||||
# S_ss2 (magic shield 2 of 4)
|
||||
@ S_ss3 (magic shield 3 of 4)
|
||||
* S_ss4 (magic shield 4 of 4)
|
||||
^ S_statue_trap (statue trap)
|
||||
@@ -5401,8 +5403,6 @@
|
||||
x S_xan (xan or other extraordinary insect)
|
||||
X S_xorn (xorn)
|
||||
Y S_yeti (apelike creature)
|
||||
Z S_zombie (zombie)
|
||||
z S_zruty (zruty)
|
||||
|
||||
|
||||
|
||||
@@ -5416,6 +5416,8 @@
|
||||
|
||||
|
||||
|
||||
Z S_zombie (zombie)
|
||||
z S_zruty (zruty)
|
||||
S_pet_override (any pet if ACCESSIBILITY=1 is set)
|
||||
S_hero_override (hero if ACCESSIBILITY=1 is set)
|
||||
|
||||
@@ -5468,8 +5470,6 @@
|
||||
ficial distributions of NetHack is a symset called NHAccess. Se-
|
||||
lecting that symset in your configuration file will cause the
|
||||
game to run in a manner accessible to the blind. After you have
|
||||
gained some experience with the game and with editing files, you
|
||||
may want to alter settings via SYMBOLS= and ROGUESYMBOLS= in your
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
@@ -5482,6 +5482,8 @@
|
||||
|
||||
|
||||
|
||||
gained some experience with the game and with editing files, you
|
||||
may want to alter settings via SYMBOLS= and ROGUESYMBOLS= in your
|
||||
configuration file to better suit your preferences. See the pre-
|
||||
vious section for the special symbols S_pet_override to force a
|
||||
consistent symbol for all pets and S_hero_override to force a
|
||||
@@ -5536,8 +5538,6 @@
|
||||
formation can be seen via the "#attributes" command.
|
||||
|
||||
|
||||
|
||||
|
||||
NetHack 3.7 December 18, 2019
|
||||
|
||||
|
||||
|
||||
+26
-5
@@ -1,8 +1,7 @@
|
||||
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.22 $ $NHDT-Date: 1576288434 2019/12/14 01:53:54 $
|
||||
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.35 $ $NHDT-Date: 1577190687 2019/12/24 12:31:27 $
|
||||
|
||||
General Fixes and Modified Features
|
||||
-----------------------------------
|
||||
fix compile when DLB isn't defined
|
||||
hero polymorphed into a vampire can use #monster to shape-shift rather than
|
||||
just do a one-shot polymorph into bat/cloud/wolf and shifted vampire
|
||||
hero can use #monster again to take on another form (randomly chosen
|
||||
@@ -12,10 +11,28 @@ fix internal self-recover to work with recent fields added to checkpoint file
|
||||
improvements to pronoun usage when hallucinating
|
||||
function calls made from mapglyph based on dungeon level are now called once
|
||||
per level
|
||||
fix accessing mons[-1] when trying to gate in a non-valid demon
|
||||
fast hero could have random clairvoyance happen more than once on same turn
|
||||
using 'Q' on wielded weapon would offer to split stack; make using 'w' on a
|
||||
quivered stack behave similarly
|
||||
weight for giant spider was too low for creature of size 'large';
|
||||
weight for giant beetle was much too low for 'large'
|
||||
leave some menu items out of "invert all" via '@' when their inclusion would
|
||||
degrade the usefulness of that interface feature
|
||||
change crysknife from mineral to bone and worm tooth from unspecified to bone
|
||||
worn meat ring shouldn't cause increased hunger; neither should fake Amulet
|
||||
worn +0 ring of protection should cause increased hunger if it is the only
|
||||
source of extrinsic Protection
|
||||
|
||||
|
||||
Fixes to Pre-3.7.0 Problems that Were Exposed Via git Repository
|
||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||
------------------------------------------------------------------
|
||||
fix compile when DLB isn't defined
|
||||
urealtime.realtime was being incorrectly calculated
|
||||
revised "mysterious force" when climbing out of gehennom could generate
|
||||
warnings about "rn2(0) attempted" or "rn2(-n) attempted"
|
||||
after 'w' on split stack patch, wielding '-' would cause an object_lost panic
|
||||
same patch allowed partial stack from getobj to replace cursed wielded weapon
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
@@ -40,6 +57,9 @@ split off some of the functionality that was in makedefs (compiled-in options
|
||||
replace quest.txt and associated conversion to quest.dat via makedefs with
|
||||
lua quest texts loaded at runtime
|
||||
some altars are displayed in different colors (for tty and curses at least)
|
||||
add 'quick_farsight' option to provide some control over random clairvoyance
|
||||
where pausing to be able to browse temporarily visible aspects of the
|
||||
revealed map can seem intrusive; doesn't affect clairvoyance spell
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific New Features
|
||||
@@ -57,7 +77,8 @@ Code Cleanup and Reorganization
|
||||
move majority of global variables into instance_globals struct g
|
||||
move zeroobj, zeromonst, zeroany into const_globals struct cg
|
||||
remove STATIC_DCL, STATIC_OVL, STATIC_VAR, STATIC_PTR
|
||||
old Qt moved from win/Qt to win/Qt3
|
||||
old Qt moved from win/Qt to win/Qt3 and files renamed to use qt3_ prefix
|
||||
more current Qt for Qt version 4 and 5 moved from win/Qt4 to win/Qt; qt4
|
||||
moniker changed to qt_
|
||||
|
||||
window-port-interface: add_menu() modified to take a more general itemflags
|
||||
parameter to support uses beyond just 'preselected'
|
||||
|
||||
+2
-3
@@ -310,7 +310,7 @@ start_menu(window)
|
||||
be used for menus.
|
||||
add_menu(windid window, int glyph, const anything identifier,
|
||||
char accelerator, char groupacc,
|
||||
int attr, char *str, boolean preselected)
|
||||
int attr, char *str, unsigned itemflags)
|
||||
-- Add a text line str to the given menu window. If identifier
|
||||
is 0, then the line cannot be selected (e.g. a title).
|
||||
Otherwise, identifier is the value returned if the line is
|
||||
@@ -337,8 +337,7 @@ add_menu(windid window, int glyph, const anything identifier,
|
||||
the menu command (or their user defined aliases), it loses.
|
||||
The menu commands and aliases take care not to interfere
|
||||
with the default object class symbols.
|
||||
-- If you want this choice to be preselected when the
|
||||
menu is displayed, set preselected to TRUE.
|
||||
-- itemflags on this item (such as MENU_ITEMFLAGS_SELECTED etc.).
|
||||
|
||||
end_menu(window, prompt)
|
||||
-- Stop adding entries to the menu and flushes the window
|
||||
|
||||
+8
-7
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 context.h $NHDT-Date: 1575775592 2019/12/08 03:26:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.35 $ */
|
||||
/* NetHack 3.6 context.h $NHDT-Date: 1577050216 2019/12/22 21:30:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.36 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -111,14 +111,15 @@ struct context_info {
|
||||
unsigned run; /* 0: h (etc), 1: H (etc), 2: fh (etc) */
|
||||
/* 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF- */
|
||||
/* 8: travel */
|
||||
unsigned startingpet_mid;
|
||||
int current_fruit; /* fruit->fid corresponding to g.pl_fruit[] */
|
||||
int warnlevel;
|
||||
unsigned startingpet_mid; /* monster id number for initial pet */
|
||||
int current_fruit; /* fruit->fid corresponding to g.pl_fruit[] */
|
||||
int mysteryforce; /* adjusts how often "mysterious force" kicks in */
|
||||
int rndencode; /* randomized escape sequence introducer */
|
||||
int mysteryforce;
|
||||
int warnlevel; /* threshold (digit) to warn about unseen mons */
|
||||
long next_attrib_check; /* next attribute check */
|
||||
long stethoscope_move;
|
||||
short stethoscope_movement;
|
||||
long seer_turn; /* when random clairvoyance will next kick in */
|
||||
long stethoscope_move; /* when a stethoscope was last used */
|
||||
short stethoscope_movement; /* to track multiple moves on same turn */
|
||||
boolean travel; /* find way automatically to u.tx,u.ty */
|
||||
boolean travel1; /* first travel step */
|
||||
boolean forcefight;
|
||||
|
||||
@@ -1217,6 +1217,7 @@ E int FDECL(mapglyph, (int, int *, int *, unsigned *, int, int, unsigned));
|
||||
E char *FDECL(encglyph, (int));
|
||||
E char *FDECL(decode_mixed, (char *, const char *));
|
||||
E void FDECL(genl_putmixed, (winid, int, const char *));
|
||||
E boolean FDECL(menuitem_invert_test, (int, unsigned, BOOLEAN_P));
|
||||
|
||||
/* ### mcastu.c ### */
|
||||
|
||||
@@ -1674,6 +1675,7 @@ E int FDECL(l_selection_register, (lua_State *));
|
||||
|
||||
/* ### nhlobj.c ### */
|
||||
#if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
|
||||
E void FDECL(nhl_push_obj, (lua_State *, struct obj *));
|
||||
E int FDECL(l_obj_register, (lua_State *));
|
||||
#endif
|
||||
|
||||
|
||||
+16
-13
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 flag.h $NHDT-Date: 1574982014 2019/11/28 23:00:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.166 $ */
|
||||
/* NetHack 3.7 flag.h $NHDT-Date: 1577050470 2019/12/22 21:34:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.167 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -16,20 +16,19 @@
|
||||
*/
|
||||
|
||||
struct flag {
|
||||
boolean acoustics; /* allow dungeon sound messages */
|
||||
boolean autodig; /* MRKR: Automatically dig */
|
||||
boolean autoquiver; /* Automatically fill quiver */
|
||||
boolean autoopen; /* open doors by walking into them */
|
||||
boolean acoustics; /* allow dungeon sound messages */
|
||||
boolean autodig; /* MRKR: Automatically dig */
|
||||
boolean autoquiver; /* Automatically fill quiver */
|
||||
boolean autoopen; /* open doors by walking into them */
|
||||
boolean autounlock; /* automatically apply unlocking tools */
|
||||
boolean beginner;
|
||||
boolean biff; /* enable checking for mail */
|
||||
boolean bones; /* allow saving/loading bones */
|
||||
boolean confirm; /* confirm before hitting tame monsters */
|
||||
boolean dark_room; /* show shadows in lit rooms */
|
||||
boolean debug; /* in debugging mode */
|
||||
boolean biff; /* enable checking for mail */
|
||||
boolean bones; /* allow saving/loading bones */
|
||||
boolean confirm; /* confirm before hitting tame monsters */
|
||||
boolean dark_room; /* show shadows in lit rooms */
|
||||
boolean debug; /* in debugging mode (aka wizard mode) */
|
||||
#define wizard flags.debug
|
||||
boolean end_own; /* list all own scores */
|
||||
boolean explore; /* in exploration mode */
|
||||
boolean end_own; /* list all own scores */
|
||||
boolean explore; /* in exploration mode (aka discover mode) */
|
||||
#define discover flags.explore
|
||||
boolean female;
|
||||
boolean friday13; /* it's Friday the 13th */
|
||||
@@ -45,6 +44,8 @@ struct flag {
|
||||
boolean pickup; /* whether you pickup or move and look */
|
||||
boolean pickup_thrown; /* auto-pickup items you threw */
|
||||
boolean pushweapon; /* When wielding, push old weapon into second slot */
|
||||
boolean quick_farsight; /* True disables map browsing during random
|
||||
* clairvoyance */
|
||||
boolean rest_on_space; /* space means rest */
|
||||
boolean safe_dog; /* give complete protection to the dog */
|
||||
boolean showexp; /* show experience points */
|
||||
@@ -242,6 +243,8 @@ struct instance_flags {
|
||||
*/
|
||||
unsigned msg_history; /* hint: # of top lines to save */
|
||||
int getpos_coords; /* show coordinates when getting cursor position */
|
||||
int menuinvertmode; /* 0 = invert toggles every item;
|
||||
1 = invert skips 'all items' item */
|
||||
int menu_headings; /* ATR for menu headings */
|
||||
int *opt_booldup; /* for duplication of boolean opts in config file */
|
||||
int *opt_compdup; /* for duplication of compound opts in conf file */
|
||||
|
||||
@@ -490,9 +490,6 @@ enum bodypart_types {
|
||||
#define MENU_FULL 2
|
||||
#define MENU_PARTIAL 3
|
||||
|
||||
#define MENU_SELECTED TRUE
|
||||
#define MENU_UNSELECTED FALSE
|
||||
|
||||
/*
|
||||
* Option flags
|
||||
* Each higher number includes the characteristics of the numbers
|
||||
|
||||
+1
-1
@@ -227,7 +227,7 @@ E void FDECL(mac_curs, (winid, int, int));
|
||||
E void FDECL(mac_putstr, (winid, int, const char *));
|
||||
E void FDECL(mac_start_menu, (winid));
|
||||
E void FDECL(mac_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int,
|
||||
const char *, BOOLEAN_P));
|
||||
const char *, unsigned int));
|
||||
E void FDECL(mac_end_menu, (winid, const char *));
|
||||
E int FDECL(mac_select_menu, (winid, int, menu_item **));
|
||||
#ifdef CLIPPING
|
||||
|
||||
@@ -119,6 +119,7 @@ struct obj {
|
||||
unsigned oeaten; /* nutrition left in food, if partly eaten */
|
||||
long age; /* creation date */
|
||||
long owornmask;
|
||||
unsigned lua_ref_cnt; /* # of lua script references for this object */
|
||||
struct oextra *oextra; /* pointer to oextra struct */
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 patchlevel.h $NHDT-Date: 1575775596 2019/12/08 03:26:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.136 $ */
|
||||
/* NetHack 3.7 patchlevel.h $NHDT-Date: 1577050471 2019/12/22 21:34:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.142 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -14,7 +14,7 @@
|
||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||
* and save files.
|
||||
*/
|
||||
#define EDITLEVEL 3
|
||||
#define EDITLEVEL 6
|
||||
|
||||
#define COPYRIGHT_BANNER_A "NetHack, Copyright 1985-2019"
|
||||
#define COPYRIGHT_BANNER_B \
|
||||
|
||||
+2
-1
@@ -133,6 +133,7 @@ typedef struct x11_mi {
|
||||
int attr; /* Attribute for the line. */
|
||||
boolean selected; /* Been selected? */
|
||||
boolean preselected; /* in advance? */
|
||||
unsigned itemflags; /* MENU_ITEMFLAGS_foo */
|
||||
char selector; /* Char used to select this entry. */
|
||||
char gselector; /* Group selector. */
|
||||
Widget w;
|
||||
@@ -418,7 +419,7 @@ E void FDECL(X11_putstr, (winid, int, const char *));
|
||||
E void FDECL(X11_display_file, (const char *, BOOLEAN_P));
|
||||
E void FDECL(X11_start_menu, (winid));
|
||||
E void FDECL(X11_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
|
||||
const char *, BOOLEAN_P));
|
||||
const char *, unsigned int));
|
||||
E void FDECL(X11_end_menu, (winid, const char *));
|
||||
E int FDECL(X11_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
E void NDECL(X11_update_inventory);
|
||||
|
||||
+2
-2
@@ -82,7 +82,7 @@ extern void curses_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
extern void curses_start_menu(winid wid);
|
||||
extern void curses_add_menu(winid wid, int glyph, const ANY_P * identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned int itemflags);
|
||||
extern void curses_end_menu(winid wid, const char *prompt);
|
||||
extern int curses_select_menu(winid wid, int how, MENU_ITEM_P **selected);
|
||||
extern void curses_update_inventory(void);
|
||||
@@ -177,7 +177,7 @@ extern void curses_create_nhmenu(winid wid);
|
||||
extern void curses_add_nhmenu_item(winid wid, int glyph,
|
||||
const ANY_P *identifier, CHAR_P accelerator,
|
||||
CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned itemflags);
|
||||
extern void curs_menu_set_bottom_heavy(winid);
|
||||
extern void curses_finalize_nhmenu(winid wid, const char *prompt);
|
||||
extern int curses_display_nhmenu(winid wid, int how, MENU_ITEM_P **_selected);
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ E void FDECL(Gem_putstr, (winid, int, const char *));
|
||||
E void FDECL(Gem_display_file, (const char *, BOOLEAN_P));
|
||||
E void FDECL(Gem_start_menu, (winid));
|
||||
E void FDECL(Gem_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
|
||||
const char *, BOOLEAN_P));
|
||||
const char *, unsigned int));
|
||||
E void FDECL(Gem_end_menu, (winid, const char *));
|
||||
E int FDECL(Gem_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
E char FDECL(Gem_message_menu, (CHAR_P, int, const char *));
|
||||
|
||||
+3
-3
@@ -32,7 +32,7 @@ struct window_procs {
|
||||
void FDECL((*win_display_file), (const char *, BOOLEAN_P));
|
||||
void FDECL((*win_start_menu), (winid));
|
||||
void FDECL((*win_add_menu), (winid, int, const ANY_P *, CHAR_P, CHAR_P,
|
||||
int, const char *, BOOLEAN_P));
|
||||
int, const char *, unsigned int));
|
||||
void FDECL((*win_end_menu), (winid, const char *));
|
||||
int FDECL((*win_select_menu), (winid, int, MENU_ITEM_P **));
|
||||
char FDECL((*win_message_menu), (CHAR_P, int, const char *));
|
||||
@@ -331,7 +331,7 @@ struct chain_procs {
|
||||
void FDECL((*win_display_file), (CARGS, const char *, BOOLEAN_P));
|
||||
void FDECL((*win_start_menu), (CARGS, winid));
|
||||
void FDECL((*win_add_menu), (CARGS, winid, int, const ANY_P *, CHAR_P,
|
||||
CHAR_P, int, const char *, BOOLEAN_P));
|
||||
CHAR_P, int, const char *, unsigned int));
|
||||
void FDECL((*win_end_menu), (CARGS, winid, const char *));
|
||||
int FDECL((*win_select_menu), (CARGS, winid, int, MENU_ITEM_P **));
|
||||
char FDECL((*win_message_menu), (CARGS, CHAR_P, int, const char *));
|
||||
@@ -405,7 +405,7 @@ extern void FDECL(safe_putmixed, (winid, int, const char *));
|
||||
extern void FDECL(safe_display_file, (const char *, BOOLEAN_P));
|
||||
extern void FDECL(safe_start_menu, (winid));
|
||||
extern void FDECL(safe_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P,
|
||||
int, const char *, BOOLEAN_P));
|
||||
int, const char *, unsigned int));
|
||||
extern void FDECL(safe_end_menu, (winid, const char *));
|
||||
extern int FDECL(safe_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
extern char FDECL(safe_message_menu, (CHAR_P, int, const char *));
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@ typedef struct tty_mi {
|
||||
char *str; /* description string (including accelerator) */
|
||||
int attr; /* string attribute */
|
||||
boolean selected; /* TRUE if selected by user */
|
||||
unsigned itemflags; /* item flags */
|
||||
char selector; /* keyboard accelerator */
|
||||
char gselector; /* group accelerator */
|
||||
} tty_menu_item;
|
||||
@@ -191,7 +192,7 @@ E void FDECL(tty_putstr, (winid, int, const char *));
|
||||
E void FDECL(tty_display_file, (const char *, BOOLEAN_P));
|
||||
E void FDECL(tty_start_menu, (winid));
|
||||
E void FDECL(tty_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
|
||||
const char *, BOOLEAN_P));
|
||||
const char *, unsigned int));
|
||||
E void FDECL(tty_end_menu, (winid, const char *));
|
||||
E int FDECL(tty_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
E char FDECL(tty_message_menu, (CHAR_P, int, const char *));
|
||||
|
||||
+8
-2
@@ -54,8 +54,9 @@ enum any_types {
|
||||
|
||||
/* menu return list */
|
||||
typedef struct mi {
|
||||
anything item; /* identifier */
|
||||
long count; /* count */
|
||||
anything item; /* identifier */
|
||||
long count; /* count */
|
||||
unsigned itemflags; /* item flags */
|
||||
} menu_item;
|
||||
#define MENU_ITEM_P struct mi
|
||||
|
||||
@@ -105,6 +106,11 @@ typedef struct mi {
|
||||
#define MENU_UNSELECT_PAGE '\\'
|
||||
#define MENU_INVERT_PAGE '~'
|
||||
#define MENU_SEARCH ':'
|
||||
|
||||
#define MENU_ITEMFLAGS_NONE 0x0000000U
|
||||
#define MENU_ITEMFLAGS_SELECTED 0x0000001U
|
||||
#define MENU_ITEMFLAGS_SKIPINVERT 0x0000002U
|
||||
|
||||
/* clang-format on */
|
||||
|
||||
#endif /* WINTYPE_H */
|
||||
|
||||
@@ -11,3 +11,5 @@ tiles.bmp
|
||||
graphicschk
|
||||
nhdat
|
||||
o
|
||||
nhdat370
|
||||
|
||||
|
||||
+20
-4
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 allmain.c $NHDT-Date: 1555552624 2019/04/18 01:57:04 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.100 $ */
|
||||
/* NetHack 3.6 allmain.c $NHDT-Date: 1577050218 2019/12/22 21:30:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.136 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -66,6 +66,10 @@ boolean resuming;
|
||||
g.context.rndencode = rnd(9000);
|
||||
set_wear((struct obj *) 0); /* for side-effects of starting gear */
|
||||
(void) pickup(1); /* autopickup at initial location */
|
||||
/* only matters if someday a character is able to start with
|
||||
clairvoyance (wizard with cornuthaum perhaps?); without this,
|
||||
first "random" occurrence would always kick in on turn 1 */
|
||||
g.context.seer_turn = (long) rnd(30);
|
||||
}
|
||||
g.context.botlx = TRUE; /* for STATUS_HILITES */
|
||||
update_inventory(); /* for perm_invent */
|
||||
@@ -336,9 +340,21 @@ boolean resuming;
|
||||
#endif
|
||||
if (g.context.bypasses)
|
||||
clear_bypasses();
|
||||
if ((u.uhave.amulet || Clairvoyant) && !In_endgame(&u.uz)
|
||||
&& !BClairvoyant && !(g.moves % 15) && !rn2(2))
|
||||
do_vicinity_map((struct obj *) 0);
|
||||
if (g.moves >= g.context.seer_turn) {
|
||||
if ((u.uhave.amulet || Clairvoyant) && !In_endgame(&u.uz)
|
||||
&& !BClairvoyant)
|
||||
do_vicinity_map((struct obj *) 0);
|
||||
/* we maintain this counter even when clairvoyance isn't
|
||||
taking place; on average, go again 30 turns from now */
|
||||
g.context.seer_turn = g.moves + (long) rn1(31, 15); /*15..45*/
|
||||
/* [it used to be that on every 15th turn, there was a 50%
|
||||
chance of farsight, so it could happen as often as every
|
||||
15 turns or theoretically never happen at all; but when
|
||||
a fast hero got multiple moves on that 15th turn, it
|
||||
could actually happen more than once on the same turn!] */
|
||||
}
|
||||
/* [fast hero who gets multiple moves per turn ends up sinking
|
||||
multiple times per turn; is that what we really want?] */
|
||||
if (u.utrap && u.utraptype == TT_LAVA)
|
||||
sink_into_lava();
|
||||
/* when/if hero escapes from lava, he can't just stay there */
|
||||
|
||||
+3
-3
@@ -3173,14 +3173,14 @@ struct obj *obj;
|
||||
any.a_int++;
|
||||
Sprintf(buf, "an object on the %s", surface(cc.x, cc.y));
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int++;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "a monster",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int++;
|
||||
Sprintf(buf, "the %s", surface(cc.x, cc.y));
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
end_menu(tmpwin, "Aim for what?");
|
||||
tohit = rn2(4);
|
||||
if (select_menu(tmpwin, PICK_ONE, &selected) > 0
|
||||
|
||||
+1
-1
@@ -1524,7 +1524,7 @@ struct obj *obj;
|
||||
continue;
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
g.dungeons[i].dname, MENU_UNSELECTED);
|
||||
g.dungeons[i].dname, MENU_ITEMFLAGS_NONE);
|
||||
num_ok_dungeons++;
|
||||
last_ok_dungeon = i;
|
||||
}
|
||||
|
||||
+27
-22
@@ -1930,7 +1930,7 @@ int arrmin, arrmax;
|
||||
any = cg.zeroany;
|
||||
any.a_int = i + adj;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
arr[i], MENU_UNSELECTED);
|
||||
arr[i], MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
end_menu(tmpwin, querystr);
|
||||
@@ -2305,7 +2305,7 @@ query_conditions()
|
||||
any = cg.zeroany;
|
||||
any.a_ulong = valid_conditions[i].bitmask;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
valid_conditions[i].id, MENU_UNSELECTED);
|
||||
valid_conditions[i].id, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
end_menu(tmpwin, "Choose status conditions");
|
||||
@@ -2874,7 +2874,7 @@ status_hilite_menu_choose_field()
|
||||
any = cg.zeroany;
|
||||
any.a_int = (i + 1);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
initblstats[i].fldname, MENU_UNSELECTED);
|
||||
initblstats[i].fldname, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
end_menu(tmpwin, "Select a hilite field:");
|
||||
@@ -2913,7 +2913,7 @@ int fld;
|
||||
any.a_int = onlybeh = BL_TH_ALWAYS_HILITE;
|
||||
Sprintf(buf, "Always highlight %s", initblstats[fld].fldname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'a', 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -2921,7 +2921,7 @@ int fld;
|
||||
any = cg.zeroany;
|
||||
any.a_int = onlybeh = BL_TH_CONDITION;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'b', 0, ATR_NONE,
|
||||
"Bitmask of conditions", MENU_UNSELECTED);
|
||||
"Bitmask of conditions", MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -2930,7 +2930,7 @@ int fld;
|
||||
any.a_int = onlybeh = BL_TH_UPDOWN;
|
||||
Sprintf(buf, "%s value changes", initblstats[fld].fldname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -2939,7 +2939,7 @@ int fld;
|
||||
any = cg.zeroany;
|
||||
any.a_int = onlybeh = BL_TH_VAL_ABSOLUTE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'n', 0, ATR_NONE,
|
||||
"Number threshold", MENU_UNSELECTED);
|
||||
"Number threshold", MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -2947,7 +2947,7 @@ int fld;
|
||||
any = cg.zeroany;
|
||||
any.a_int = onlybeh = BL_TH_VAL_PERCENTAGE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'p', 0, ATR_NONE,
|
||||
"Percentage threshold", MENU_UNSELECTED);
|
||||
"Percentage threshold", MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -2957,7 +2957,7 @@ int fld;
|
||||
any.a_int = onlybeh = BL_TH_TEXTMATCH;
|
||||
Sprintf(buf, "%s text match", initblstats[fld].fldname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 't', 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
nopts++;
|
||||
}
|
||||
|
||||
@@ -3004,7 +3004,7 @@ boolean ltok, gtok;
|
||||
any = cg.zeroany;
|
||||
any.a_int = 10 + LT_VALUE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
|
||||
if (str) {
|
||||
Sprintf(buf, "%s or %s",
|
||||
@@ -3012,7 +3012,7 @@ boolean ltok, gtok;
|
||||
any = cg.zeroany;
|
||||
any.a_int = 10 + LE_VALUE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3023,7 +3023,7 @@ boolean ltok, gtok;
|
||||
any = cg.zeroany;
|
||||
any.a_int = 10 + EQ_VALUE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
|
||||
if (gtok) {
|
||||
if (str) {
|
||||
@@ -3032,7 +3032,7 @@ boolean ltok, gtok;
|
||||
any = cg.zeroany;
|
||||
any.a_int = 10 + GE_VALUE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
if (str)
|
||||
@@ -3043,7 +3043,7 @@ boolean ltok, gtok;
|
||||
any = cg.zeroany;
|
||||
any.a_int = 10 + GT_VALUE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
Sprintf(buf, "Select field %s value:", initblstats[fld].fldname);
|
||||
end_menu(tmpwin, buf);
|
||||
@@ -3545,25 +3545,28 @@ int fld;
|
||||
any = cg.zeroany;
|
||||
any.a_int = hlstr->id;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
hlstr->str, MENU_UNSELECTED);
|
||||
hlstr->str, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
hlstr = hlstr->next;
|
||||
}
|
||||
} else {
|
||||
any = cg.zeroany;
|
||||
Sprintf(buf, "No current hilites for %s", initblstats[fld].fldname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* separator line */
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
if (count) {
|
||||
any = cg.zeroany;
|
||||
any.a_int = -1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'X', 0, ATR_NONE,
|
||||
"Remove selected hilites", MENU_UNSELECTED);
|
||||
"Remove selected hilites",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
#ifndef SCORE_ON_BOTL
|
||||
@@ -3579,7 +3582,7 @@ int fld;
|
||||
any = cg.zeroany;
|
||||
any.a_int = -2;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'Z', 0, ATR_NONE,
|
||||
"Add a new hilite", MENU_UNSELECTED);
|
||||
"Add a new hilite", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
Sprintf(buf, "Current %s hilites:", initblstats[fld].fldname);
|
||||
@@ -3675,10 +3678,12 @@ shlmenu_redo:
|
||||
any = cg.zeroany;
|
||||
any.a_int = -1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"View all hilites in config format", MENU_UNSELECTED);
|
||||
"View all hilites in config format",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXBLSTATS; i++) {
|
||||
@@ -3699,7 +3704,7 @@ shlmenu_redo:
|
||||
if (count)
|
||||
Sprintf(eos(buf), " (%d defined)", count);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
end_menu(tmpwin, "Status hilites:");
|
||||
|
||||
@@ -378,9 +378,10 @@ doextlist(VOID_ARGS)
|
||||
any = cg.zeroany;
|
||||
start_menu(menuwin);
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Extended Commands List", MENU_UNSELECTED);
|
||||
"Extended Commands List",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"", MENU_UNSELECTED);
|
||||
"", MENU_ITEMFLAGS_NONE);
|
||||
|
||||
Strcpy(buf, menumode ? "Show" : "Hide");
|
||||
Strcat(buf, " commands that don't autocomplete");
|
||||
@@ -388,7 +389,7 @@ doextlist(VOID_ARGS)
|
||||
Strcat(buf, " (those not marked with [A])");
|
||||
any.a_int = 1;
|
||||
add_menu(menuwin, NO_GLYPH, &any, 'a', 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
if (!*searchbuf) {
|
||||
any.a_int = 2;
|
||||
@@ -398,7 +399,8 @@ doextlist(VOID_ARGS)
|
||||
having ':' as an explicit selector overrides the default
|
||||
menu behavior for it; we retain 's' as a group accelerator */
|
||||
add_menu(menuwin, NO_GLYPH, &any, ':', 's', ATR_NONE,
|
||||
"Search extended commands", MENU_UNSELECTED);
|
||||
"Search extended commands",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else {
|
||||
Strcpy(buf, "Show all, clear search");
|
||||
if (strlen(buf) + strlen(searchbuf) + strlen(" (\"\")") < QBUFSZ)
|
||||
@@ -410,18 +412,18 @@ doextlist(VOID_ARGS)
|
||||
work for interfaces which support ':' to search; use as a
|
||||
general menu command takes precedence over group accelerator */
|
||||
add_menu(menuwin, NO_GLYPH, &any, 's', ':', ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (wizard) {
|
||||
any.a_int = 4;
|
||||
add_menu(menuwin, NO_GLYPH, &any, 'z', 0, ATR_NONE,
|
||||
onelist ? "Show debugging commands in separate section"
|
||||
: "Show all alphabetically, including debugging commands",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any = cg.zeroany;
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"", MENU_UNSELECTED);
|
||||
"", MENU_ITEMFLAGS_NONE);
|
||||
menushown[0] = menushown[1] = 0;
|
||||
n = 0;
|
||||
for (pass = 0; pass <= 1; ++pass) {
|
||||
@@ -463,7 +465,8 @@ doextlist(VOID_ARGS)
|
||||
if (!menushown[pass]) {
|
||||
Strcpy(buf, headings[pass]);
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0,
|
||||
iflags.menu_headings, buf, MENU_UNSELECTED);
|
||||
iflags.menu_headings, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
menushown[pass] = 1;
|
||||
}
|
||||
Sprintf(buf, " %-14s %-3s %s",
|
||||
@@ -471,16 +474,16 @@ doextlist(VOID_ARGS)
|
||||
(efp->flags & AUTOCOMPLETE) ? "[A]" : " ",
|
||||
efp->ef_desc);
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
++n;
|
||||
}
|
||||
if (n)
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"", MENU_UNSELECTED);
|
||||
"", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (*searchbuf && !n)
|
||||
add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"no matches", MENU_UNSELECTED);
|
||||
"no matches", MENU_ITEMFLAGS_NONE);
|
||||
|
||||
end_menu(menuwin, (char *) 0);
|
||||
n = select_menu(menuwin, PICK_ONE, &selected);
|
||||
@@ -617,7 +620,7 @@ extcmd_via_menu()
|
||||
Sprintf(buf, fmtstr, prompt);
|
||||
any.a_char = prevaccelerator;
|
||||
add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE,
|
||||
buf, FALSE);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
acount = 0;
|
||||
if (!(accelerator != prevaccelerator || one_per_line))
|
||||
wastoolong = TRUE;
|
||||
@@ -641,7 +644,7 @@ extcmd_via_menu()
|
||||
Sprintf(buf, fmtstr, prompt);
|
||||
any.a_char = prevaccelerator;
|
||||
add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE, buf,
|
||||
FALSE);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
Sprintf(prompt, "Extended Command: %s", cbuf);
|
||||
end_menu(win, prompt);
|
||||
@@ -943,7 +946,7 @@ wiz_detect(VOID_ARGS)
|
||||
static int
|
||||
wiz_load_lua(VOID_ARGS)
|
||||
{
|
||||
if (wizard) {
|
||||
if (wizard && !iflags.debug_fuzzer) {
|
||||
char buf[BUFSZ];
|
||||
|
||||
buf[0] = '\0';
|
||||
@@ -961,7 +964,7 @@ wiz_load_lua(VOID_ARGS)
|
||||
static int
|
||||
wiz_load_splua(VOID_ARGS)
|
||||
{
|
||||
if (wizard) {
|
||||
if (wizard && !iflags.debug_fuzzer) {
|
||||
boolean was_in_W_tower = In_W_tower(u.ux, u.uy, &u.uz);
|
||||
char buf[BUFSZ];
|
||||
int ridx;
|
||||
@@ -1488,7 +1491,8 @@ wiz_intrinsic(VOID_ARGS)
|
||||
}
|
||||
if (p == FIRE_RES) {
|
||||
any.a_int = 0;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "--", FALSE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "--",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = i + 1; /* +1: avoid 0 */
|
||||
oldtimeout = u.uprops[p].intrinsic & TIMEOUT;
|
||||
@@ -1496,7 +1500,8 @@ wiz_intrinsic(VOID_ARGS)
|
||||
Sprintf(buf, "%-27s [%li]", propname, oldtimeout);
|
||||
else
|
||||
Sprintf(buf, "%s", propname);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(win, "Which intrinsics?");
|
||||
n = select_menu(win, PICK_ANY, &pick_list);
|
||||
@@ -1623,29 +1628,29 @@ doterrain(VOID_ARGS)
|
||||
any.a_int = 1;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"known map without monsters, objects, and traps",
|
||||
MENU_SELECTED);
|
||||
MENU_ITEMFLAGS_SELECTED);
|
||||
any.a_int = 2;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"known map without monsters and objects",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = 3;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"known map without monsters",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
if (discover || wizard) {
|
||||
any.a_int = 4;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"full map without monsters, objects, and traps",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
if (wizard) {
|
||||
any.a_int = 5;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"internal levl[][].typ codes in base-36",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = 6;
|
||||
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"legend of base-36 levl[][].typ codes",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
end_menu(men, "View which?");
|
||||
@@ -1715,7 +1720,8 @@ const char *buf;
|
||||
anything any;
|
||||
|
||||
any = cg.zeroany;
|
||||
add_menu(g.en_win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(g.en_win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else
|
||||
putstr(g.en_win, 0, buf);
|
||||
}
|
||||
@@ -3163,64 +3169,78 @@ minimal_enlightenment()
|
||||
tmpwin = create_nhwindow(NHW_MENU);
|
||||
start_menu(tmpwin);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Starting", FALSE);
|
||||
"Starting", MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* Starting name, race, role, gender */
|
||||
Sprintf(buf, fmtstr, "name", g.plname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf, fmtstr, "race", g.urace.noun);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf, fmtstr, "role",
|
||||
(flags.initgend && g.urole.name.f) ? g.urole.name.f : g.urole.name.m);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf, fmtstr, "gender", genders[flags.initgend].adj);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* Starting alignment */
|
||||
Sprintf(buf, fmtstr, "alignment", align_str(u.ualignbase[A_ORIGINAL]));
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* Current name, race, role, gender */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Current", FALSE);
|
||||
"Current", MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf, fmtstr, "race", Upolyd ? g.youmonst.data->mname : g.urace.noun);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
if (Upolyd) {
|
||||
Sprintf(buf, fmtstr, "role (base)",
|
||||
(u.mfemale && g.urole.name.f) ? g.urole.name.f
|
||||
: g.urole.name.m);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else {
|
||||
Sprintf(buf, fmtstr, "role",
|
||||
(flags.female && g.urole.name.f) ? g.urole.name.f
|
||||
: g.urole.name.m);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
/* don't want poly_gender() here; it forces `2' for non-humanoids */
|
||||
genidx = is_neuter(g.youmonst.data) ? 2 : flags.female;
|
||||
Sprintf(buf, fmtstr, "gender", genders[genidx].adj);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
if (Upolyd && (int) u.mfemale != genidx) {
|
||||
Sprintf(buf, fmtstr, "gender (base)", genders[u.mfemale].adj);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* Current alignment */
|
||||
Sprintf(buf, fmtstr, "alignment", align_str(u.ualign.type));
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* Deity list */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Deities", FALSE);
|
||||
"Deities", MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf2, deity_fmtstr, align_gname(A_CHAOTIC),
|
||||
(u.ualignbase[A_ORIGINAL] == u.ualign.type
|
||||
&& u.ualign.type == A_CHAOTIC) ? " (s,c)"
|
||||
: (u.ualignbase[A_ORIGINAL] == A_CHAOTIC) ? " (s)"
|
||||
: (u.ualign.type == A_CHAOTIC) ? " (c)" : "");
|
||||
Sprintf(buf, fmtstr, "Chaotic", buf2);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
Sprintf(buf2, deity_fmtstr, align_gname(A_NEUTRAL),
|
||||
(u.ualignbase[A_ORIGINAL] == u.ualign.type
|
||||
@@ -3228,7 +3248,8 @@ minimal_enlightenment()
|
||||
: (u.ualignbase[A_ORIGINAL] == A_NEUTRAL) ? " (s)"
|
||||
: (u.ualign.type == A_NEUTRAL) ? " (c)" : "");
|
||||
Sprintf(buf, fmtstr, "Neutral", buf2);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
Sprintf(buf2, deity_fmtstr, align_gname(A_LAWFUL),
|
||||
(u.ualignbase[A_ORIGINAL] == u.ualign.type
|
||||
@@ -3236,7 +3257,8 @@ minimal_enlightenment()
|
||||
: (u.ualignbase[A_ORIGINAL] == A_LAWFUL) ? " (s)"
|
||||
: (u.ualign.type == A_LAWFUL) ? " (c)" : "");
|
||||
Sprintf(buf, fmtstr, "Lawful", buf2);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
end_menu(tmpwin, "Base Attributes");
|
||||
n = select_menu(tmpwin, PICK_NONE, &selected);
|
||||
@@ -5443,7 +5465,8 @@ const char *text;
|
||||
if ((ch = cmd_from_func(func)) != '\0') {
|
||||
any = cg.zeroany;
|
||||
any.a_nfunc = func;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, text, MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, text,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-3
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 detect.c $NHDT-Date: 1575245054 2019/12/02 00:04:14 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.100 $ */
|
||||
/* NetHack 3.6 detect.c $NHDT-Date: 1577050472 2019/12/22 21:34:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.110 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2018. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -1314,7 +1314,8 @@ struct obj *sobj; /* scroll--actually fake spellbook--object */
|
||||
/* fake spellbook 'sobj' implies hero has cast the spell;
|
||||
when book is blessed, casting is skilled or expert level;
|
||||
if already clairvoyant, non-skilled spell acts like skilled */
|
||||
extended = (sobj && (sobj->blessed || Clairvoyant));
|
||||
extended = (sobj && (sobj->blessed || Clairvoyant)),
|
||||
random_farsight = !sobj;
|
||||
int newglyph, oldglyph,
|
||||
lo_y = ((u.uy - 5 < 0) ? 0 : u.uy - 5),
|
||||
hi_y = ((u.uy + 6 >= ROWNO) ? ROWNO - 1 : u.uy + 6),
|
||||
@@ -1391,7 +1392,18 @@ struct obj *sobj; /* scroll--actually fake spellbook--object */
|
||||
}
|
||||
}
|
||||
|
||||
if (!g.level.flags.hero_memory || unconstrained || mdetected || odetected) {
|
||||
/* when this instance of clairvoyance is random (see allmain()) and
|
||||
the only reason to browse the map is that previously undetected
|
||||
monster(s) or object(s) have been revealed, player can prevent
|
||||
the you-sense-your-surroundings message and browse operation from
|
||||
happening by setting 'quick_farsight' option; for clairvoyance
|
||||
spell, that option is ignored because the message and the pause
|
||||
for map browsing isn't as intrusive in that circumstance */
|
||||
if (random_farsight && flags.quick_farsight)
|
||||
mdetected = odetected = FALSE;
|
||||
|
||||
if (!g.level.flags.hero_memory || unconstrained
|
||||
|| mdetected || odetected) {
|
||||
flush_screen(1); /* flush temp screen */
|
||||
/* the getpos() prompt from browse_map() is only shown when
|
||||
flags.verbose is set, but make this unconditional so that
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 do.c $NHDT-Date: 1576638499 2019/12/18 03:08:19 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.198 $ */
|
||||
/* NetHack 3.6 do.c $NHDT-Date: 1577063925 2019/12/23 01:18:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.220 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Derek S. Ray, 2015. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -1311,7 +1311,7 @@ boolean at_stairs, falling, portal;
|
||||
if (diff != 0) {
|
||||
assign_rnd_level(newlevel, &u.uz, diff);
|
||||
/* assign_rnd_level() may have used a value less than diff */
|
||||
diff = u.uz.dlevel - newlevel->dlevel; /* actual descent */
|
||||
diff = newlevel->dlevel - u.uz.dlevel; /* actual descent */
|
||||
/* if inside the tower, stay inside */
|
||||
if (was_in_W_tower && !On_W_tower_level(newlevel))
|
||||
diff = 0;
|
||||
|
||||
+7
-7
@@ -601,7 +601,7 @@ int gloc;
|
||||
Sprintf(fullbuf, "%s%s%s", firstmatch,
|
||||
(*tmpbuf ? " " : ""), tmpbuf);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, fullbuf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1352,26 +1352,26 @@ docallcmd()
|
||||
any = cg.zeroany;
|
||||
any.a_char = 'm'; /* group accelerator 'C' */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'C', ATR_NONE,
|
||||
"a monster", MENU_UNSELECTED);
|
||||
"a monster", MENU_ITEMFLAGS_NONE);
|
||||
if (g.invent) {
|
||||
/* we use y and n as accelerators so that we can accept user's
|
||||
response keyed to old "name an individual object?" prompt */
|
||||
any.a_char = 'i'; /* group accelerator 'y' */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'y', ATR_NONE,
|
||||
"a particular object in inventory", MENU_UNSELECTED);
|
||||
"a particular object in inventory", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'o'; /* group accelerator 'n' */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'n', ATR_NONE,
|
||||
"the type of an object in inventory", MENU_UNSELECTED);
|
||||
"the type of an object in inventory", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_char = 'f'; /* group accelerator ',' (or ':' instead?) */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, ',', ATR_NONE,
|
||||
"the type of an object upon the floor", MENU_UNSELECTED);
|
||||
"the type of an object upon the floor", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'd'; /* group accelerator '\' */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, '\\', ATR_NONE,
|
||||
"the type of an object on discoveries list", MENU_UNSELECTED);
|
||||
"the type of an object on discoveries list", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'a'; /* group accelerator 'l' */
|
||||
add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'l', ATR_NONE,
|
||||
"record an annotation for the current level", MENU_UNSELECTED);
|
||||
"record an annotation for the current level", MENU_ITEMFLAGS_NONE);
|
||||
end_menu(win, "What do you want to name?");
|
||||
if (select_menu(win, PICK_ONE, &pick_list) > 0) {
|
||||
ch = pick_list[0].item.a_char;
|
||||
|
||||
+2
-2
@@ -1978,7 +1978,7 @@ boolean unreachable;
|
||||
any.a_int = lchoices->idx + 1;
|
||||
}
|
||||
add_menu(win, NO_GLYPH, &any, lchoices->menuletter, 0, ATR_NONE, entry,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
/* this assumes there are at most 52 interesting levels */
|
||||
if (lchoices->menuletter == 'z')
|
||||
lchoices->menuletter = 'A';
|
||||
@@ -2090,7 +2090,7 @@ xchar *rdgn;
|
||||
if (bymenu) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else
|
||||
putstr(win, 0, buf);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 eat.c $NHDT-Date: 1574900825 2019/11/28 00:27:05 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.206 $ */
|
||||
/* NetHack 3.6 eat.c $NHDT-Date: 1577190688 2019/12/24 12:31:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.222 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -2810,19 +2810,47 @@ gethungry()
|
||||
/* Conflict uses up food too */
|
||||
if (HConflict || (EConflict & (~W_ARTI)))
|
||||
u.uhunger--;
|
||||
/* +0 charged rings don't do anything, so don't affect hunger.
|
||||
Slow digestion cancels move hunger but still causes ring hunger. */
|
||||
/*
|
||||
* +0 charged rings don't do anything, so don't affect hunger.
|
||||
* Slow digestion cancels movement and melee hunger but still
|
||||
* causes ring hunger.
|
||||
* Possessing the real Amulet imposes a separate hunger penalty
|
||||
* from wearing an amulet (so gets a double penalty when worn).
|
||||
*
|
||||
* 3.7.0: Worn meat rings don't affect hunger.
|
||||
* Same with worn cheap plastic imitation of the Amulet.
|
||||
* +0 ring of protection might do something (enhanced "magical
|
||||
* cancellation") if hero doesn't have protection from some
|
||||
* other source (cloak or second ring).
|
||||
*/
|
||||
switch ((int) (g.moves % 20)) { /* note: use even cases only */
|
||||
case 4:
|
||||
if (uleft && (uleft->spe || !objects[uleft->otyp].oc_charged))
|
||||
if (uleft && uleft->otyp != MEAT_RING
|
||||
/* more hungry if +/- is nonzero or +/- doesn't apply or
|
||||
+0 ring of protection is only source of protection;
|
||||
need to check whether both rings are +0 protection or
|
||||
they'd both slip by the "is there another source?" test,
|
||||
but don't do that for both rings or they will both be
|
||||
treated as supplying "MC" when only one matters */
|
||||
&& (uleft->spe
|
||||
|| !objects[uleft->otyp].oc_charged
|
||||
|| (uleft->otyp == RIN_PROTECTION
|
||||
&& ((EProtection & ~W_RINGL) == 0L
|
||||
|| ((EProtection & ~W_RINGL) == W_RINGR
|
||||
&& uright && uright->otyp == RIN_PROTECTION
|
||||
&& !uright->spe)))))
|
||||
u.uhunger--;
|
||||
break;
|
||||
case 8:
|
||||
if (uamul)
|
||||
if (uamul && uamul->otyp != FAKE_AMULET_OF_YENDOR)
|
||||
u.uhunger--;
|
||||
break;
|
||||
case 12:
|
||||
if (uright && (uright->spe || !objects[uright->otyp].oc_charged))
|
||||
if (uright && uright->otyp != MEAT_RING
|
||||
&& (uright->spe
|
||||
|| !objects[uright->otyp].oc_charged
|
||||
|| (uright->otyp == RIN_PROTECTION
|
||||
&& (EProtection & ~W_RINGR) == 0L)))
|
||||
u.uhunger--;
|
||||
break;
|
||||
case 16:
|
||||
|
||||
@@ -1815,7 +1815,8 @@ set_vanq_order()
|
||||
continue;
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, vanqorders[i],
|
||||
(i == g.vanq_sortmode) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(i == g.vanq_sortmode)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Sort order for vanquished monster counts");
|
||||
|
||||
|
||||
+15
-15
@@ -2654,11 +2654,11 @@ long *out_cnt;
|
||||
Sprintf(eos(prompt),
|
||||
" -- unidentified or partially identified item%s",
|
||||
plur(unid_cnt));
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, prompt, MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, prompt, MENU_ITEMFLAGS_NONE);
|
||||
if (!unid_cnt) {
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"(all items are permanently identified already)",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
gotsomething = TRUE;
|
||||
} else {
|
||||
any.a_obj = &wizid_fakeobj;
|
||||
@@ -2673,17 +2673,17 @@ long *out_cnt;
|
||||
Sprintf(eos(prompt), " (%s for all)",
|
||||
visctrl(iflags.override_ID));
|
||||
add_menu(win, NO_GLYPH, &any, '_', iflags.override_ID, ATR_NONE,
|
||||
prompt, MENU_UNSELECTED);
|
||||
prompt, MENU_ITEMFLAGS_NONE);
|
||||
gotsomething = TRUE;
|
||||
}
|
||||
} else if (xtra_choice) {
|
||||
/* wizard override ID and xtra_choice are mutually exclusive */
|
||||
if (flags.sortpack)
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Miscellaneous", MENU_UNSELECTED);
|
||||
"Miscellaneous", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = HANDS_SYM; /* '-' */
|
||||
add_menu(win, NO_GLYPH, &any, HANDS_SYM, 0, ATR_NONE,
|
||||
xtra_choice, MENU_UNSELECTED);
|
||||
xtra_choice, MENU_ITEMFLAGS_NONE);
|
||||
gotsomething = TRUE;
|
||||
}
|
||||
nextclass:
|
||||
@@ -2700,7 +2700,7 @@ long *out_cnt;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
let_to_name(*invlet, FALSE,
|
||||
(want_reply && iflags.menu_head_objsym)),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
classcount++;
|
||||
}
|
||||
if (wizid)
|
||||
@@ -2709,7 +2709,7 @@ long *out_cnt;
|
||||
any.a_char = ilet;
|
||||
add_menu(win, obj_to_glyph(otmp, rn2_on_display_rng), &any, ilet,
|
||||
wizid ? def_oc_syms[(int) otmp->oclass].sym : 0,
|
||||
ATR_NONE, doname(otmp), MENU_UNSELECTED);
|
||||
ATR_NONE, doname(otmp), MENU_ITEMFLAGS_NONE);
|
||||
gotsomething = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -2724,10 +2724,10 @@ long *out_cnt;
|
||||
if (iflags.force_invmenu && lets && want_reply) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Special", MENU_UNSELECTED);
|
||||
"Special", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = '*';
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE,
|
||||
"(list everything)", MENU_UNSELECTED);
|
||||
"(list everything)", MENU_ITEMFLAGS_NONE);
|
||||
gotsomething = TRUE;
|
||||
}
|
||||
unsortloot(&sortedinvent);
|
||||
@@ -2738,7 +2738,7 @@ long *out_cnt;
|
||||
if (iflags.perm_invent && !lets && !gotsomething) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, 0,
|
||||
not_carrying_anything, MENU_UNSELECTED);
|
||||
not_carrying_anything, MENU_ITEMFLAGS_NONE);
|
||||
want_reply = FALSE;
|
||||
}
|
||||
end_menu(win, query && *query ? query : (char *) 0);
|
||||
@@ -2824,13 +2824,13 @@ char avoidlet;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0,
|
||||
iflags.menu_headings,
|
||||
let_to_name(*invlet, FALSE, FALSE),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
classcount++;
|
||||
}
|
||||
any.a_char = ilet;
|
||||
add_menu(win, obj_to_glyph(otmp, rn2_on_display_rng),
|
||||
&any, ilet, 0, ATR_NONE,
|
||||
doname(otmp), MENU_UNSELECTED);
|
||||
doname(otmp), MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
if (flags.sortpack && *++invlet)
|
||||
@@ -4274,9 +4274,9 @@ const char *hdr, *txt;
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, hdr,
|
||||
MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, txt, MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, txt, MENU_ITEMFLAGS_NONE);
|
||||
end_menu(win, (char *) 0);
|
||||
if (select_menu(win, PICK_NONE, &selected) > 0)
|
||||
free((genericptr_t) selected);
|
||||
|
||||
@@ -438,4 +438,26 @@ const char *str;
|
||||
putstr(window, attr, decode_mixed(buf, str));
|
||||
}
|
||||
|
||||
/*
|
||||
* Window port helper function for menu invert routines to move the decision
|
||||
* logic into one place instead of 7 different window-port routines.
|
||||
*/
|
||||
boolean
|
||||
menuitem_invert_test(mode, itemflags, is_selected)
|
||||
int mode;
|
||||
unsigned itemflags; /* The itemflags for the item */
|
||||
boolean is_selected; /* The current selection status of the item */
|
||||
{
|
||||
boolean skipinvert = (itemflags & MENU_ITEMFLAGS_SKIPINVERT) != 0;
|
||||
|
||||
if ((iflags.menuinvertmode == 1 || iflags.menuinvertmode == 2)
|
||||
&& !mode && skipinvert && !is_selected)
|
||||
return FALSE;
|
||||
else if (iflags.menuinvertmode == 2
|
||||
&& !mode && skipinvert && is_selected)
|
||||
return TRUE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*mapglyph.c*/
|
||||
|
||||
+8
-4
@@ -78,11 +78,13 @@ struct monst *mon;
|
||||
if (is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) {
|
||||
dtype = (!rn2(20)) ? dprince(atyp) : (!rn2(4)) ? dlord(atyp)
|
||||
: ndemon(atyp);
|
||||
cnt = (!rn2(4) && is_ndemon(&mons[dtype])) ? 2 : 1;
|
||||
cnt = ((dtype != NON_PM)
|
||||
&& !rn2(4) && is_ndemon(&mons[dtype])) ? 2 : 1;
|
||||
} else if (is_dlord(ptr)) {
|
||||
dtype = (!rn2(50)) ? dprince(atyp) : (!rn2(20)) ? dlord(atyp)
|
||||
: ndemon(atyp);
|
||||
cnt = (!rn2(4) && is_ndemon(&mons[dtype])) ? 2 : 1;
|
||||
cnt = ((dtype != NON_PM)
|
||||
&& !rn2(4) && is_ndemon(&mons[dtype])) ? 2 : 1;
|
||||
} else if (is_ndemon(ptr)) {
|
||||
dtype = (!rn2(20)) ? dlord(atyp) : (!rn2(6)) ? ndemon(atyp)
|
||||
: monsndx(ptr);
|
||||
@@ -91,7 +93,8 @@ struct monst *mon;
|
||||
dtype = (is_lord(ptr) && !rn2(20))
|
||||
? llord()
|
||||
: (is_lord(ptr) || !rn2(6)) ? lminion() : monsndx(ptr);
|
||||
cnt = (!rn2(4) && !is_lord(&mons[dtype])) ? 2 : 1;
|
||||
cnt = ((dtype != NON_PM)
|
||||
&& !rn2(4) && !is_lord(&mons[dtype])) ? 2 : 1;
|
||||
} else if (ptr == &mons[PM_ANGEL]) {
|
||||
/* non-lawful angels can also summon */
|
||||
if (!rn2(6)) {
|
||||
@@ -107,7 +110,8 @@ struct monst *mon;
|
||||
} else {
|
||||
dtype = PM_ANGEL;
|
||||
}
|
||||
cnt = (!rn2(4) && !is_lord(&mons[dtype])) ? 2 : 1;
|
||||
cnt = ((dtype != NON_PM)
|
||||
&& !rn2(4) && !is_lord(&mons[dtype])) ? 2 : 1;
|
||||
}
|
||||
|
||||
if (dtype == NON_PM)
|
||||
|
||||
+7
-1
@@ -444,6 +444,7 @@ long num;
|
||||
obj->owt = weight(obj);
|
||||
otmp->quan = num;
|
||||
otmp->owt = weight(otmp); /* -= obj->owt ? */
|
||||
otmp->lua_ref_cnt = 0;
|
||||
|
||||
g.context.objsplit.parent_oid = obj->o_id;
|
||||
g.context.objsplit.child_oid = otmp->o_id;
|
||||
@@ -797,6 +798,7 @@ boolean artif;
|
||||
otmp->lknown = 0;
|
||||
otmp->cknown = 0;
|
||||
otmp->corpsenm = NON_PM;
|
||||
otmp->lua_ref_cnt = 0;
|
||||
|
||||
if (init) {
|
||||
switch (let) {
|
||||
@@ -2178,8 +2180,10 @@ struct obj *obj;
|
||||
* list must track all objects that can have a light source
|
||||
* attached to it (and also requires lamplit to be set).
|
||||
*/
|
||||
if (obj_sheds_light(obj))
|
||||
if (obj_sheds_light(obj)) {
|
||||
del_light_source(LS_OBJECT, obj_to_any(obj));
|
||||
obj->lamplit = 0;
|
||||
}
|
||||
|
||||
if (obj == g.thrownobj)
|
||||
g.thrownobj = 0;
|
||||
@@ -2188,6 +2192,8 @@ struct obj *obj;
|
||||
|
||||
if (obj->oextra)
|
||||
dealloc_oextra(obj);
|
||||
if (obj->lua_ref_cnt)
|
||||
return; /* obj is referenced from a lua script, let lua gc free it */
|
||||
free((genericptr_t) obj);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 monst.c $NHDT-Date: 1547118631 2019/01/10 11:10:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.62 $ */
|
||||
/* NetHack 3.6 monst.c $NHDT-Date: 1577096800 2019/12/23 10:26:40 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.70 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -131,7 +131,7 @@ NEARDATA struct permonst mons_init[] = {
|
||||
MON("giant beetle", S_ANT, LVL(5, 6, 4, 0, 0), (G_GENO | 3),
|
||||
A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
|
||||
NO_ATTK),
|
||||
SIZ(10, 10, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON,
|
||||
SIZ(200, 50, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON,
|
||||
M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0,
|
||||
6, CLR_BLACK),
|
||||
MON("queen bee", S_ANT, LVL(9, 24, -4, 0, 0), (G_GENO | G_NOGEN),
|
||||
@@ -787,7 +787,7 @@ NEARDATA struct permonst mons_init[] = {
|
||||
MON("giant spider", S_SPIDER, LVL(5, 15, 4, 0, 0), (G_GENO | 1),
|
||||
A(ATTK(AT_BITE, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
|
||||
NO_ATTK),
|
||||
SIZ(100, 100, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON,
|
||||
SIZ(200, 100, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON,
|
||||
M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE,
|
||||
M2_HOSTILE | M2_STRONG, 0, 7, CLR_MAGENTA),
|
||||
MON("scorpion", S_SPIDER, LVL(5, 15, 3, 0, 0), (G_GENO | 2),
|
||||
|
||||
+16
-12
@@ -6,24 +6,16 @@
|
||||
#include "sp_lev.h"
|
||||
|
||||
static int FDECL(l_obj_add_to_container, (lua_State *));
|
||||
static int FDECL(l_obj_addcontent, (lua_State *));
|
||||
static int FDECL(l_obj_at, (lua_State *));
|
||||
static int FDECL(l_obj_class, (lua_State *));
|
||||
static int FDECL(l_obj_container, (lua_State *));
|
||||
static int FDECL(l_obj_contents, (lua_State *));
|
||||
static int FDECL(l_obj_gc, (lua_State *));
|
||||
static int FDECL(l_obj_getcontents, (lua_State *));
|
||||
static int FDECL(l_obj_isnull, (lua_State *));
|
||||
static int FDECL(l_obj_new_readobjnam, (lua_State *));
|
||||
static int FDECL(l_obj_next, (lua_State *));
|
||||
static int FDECL(l_obj_nextobj, (lua_State *));
|
||||
static int FDECL(l_obj_obj_add_to_container, (lua_State *));
|
||||
static int FDECL(l_obj_obj_getcontents, (lua_State *));
|
||||
static int FDECL(l_obj_obj_objects_to_table, (lua_State *));
|
||||
static int FDECL(l_obj_objects_to_table, (lua_State *));
|
||||
static int FDECL(l_obj_placeobj, (lua_State *));
|
||||
static int FDECL(l_obj_to_table, (lua_State *));
|
||||
static int FDECL(l_obj_totable, (lua_State *));
|
||||
static int FDECL(l_obj_at, (lua_State *));
|
||||
static int FDECL(l_obj_container, (lua_State *));
|
||||
|
||||
struct _lua_obj {
|
||||
int state; /* UNUSED */
|
||||
@@ -51,8 +43,10 @@ lua_State *L;
|
||||
struct _lua_obj *lo = l_obj_check(L, 1);
|
||||
|
||||
if (lo && lo->obj) {
|
||||
/* free-floating objects are deallocated */
|
||||
if (lo->obj->where == OBJ_FREE) {
|
||||
if (lo->obj->lua_ref_cnt > 0)
|
||||
lo->obj->lua_ref_cnt--;
|
||||
/* free-floating objects with no other refs are deallocated. */
|
||||
if (lo->obj->where == OBJ_FREE && !lo->obj->lua_ref_cnt) {
|
||||
if (Has_contents(lo->obj)) {
|
||||
struct obj *otmp;
|
||||
while ((otmp = lo->obj->cobj) != 0) {
|
||||
@@ -79,10 +73,20 @@ struct obj *otmp;
|
||||
|
||||
lo->state = 0;
|
||||
lo->obj = otmp;
|
||||
if (otmp)
|
||||
otmp->lua_ref_cnt++;
|
||||
|
||||
return lo;
|
||||
}
|
||||
|
||||
void
|
||||
nhl_push_obj(L, otmp)
|
||||
lua_State *L;
|
||||
struct obj *otmp;
|
||||
{
|
||||
(void) l_obj_push(L, otmp);
|
||||
}
|
||||
|
||||
/* local o = obj.new("large chest");
|
||||
local cobj = o:contents(); */
|
||||
static int
|
||||
|
||||
+7
-1
@@ -482,7 +482,8 @@ lua_State *L;
|
||||
if (*key)
|
||||
any.a_char = key[0];
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, str,
|
||||
(*defval && *key && defval[0] == key[0]) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(*defval && *key && defval[0] == key[0])
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
|
||||
lua_pop(L, 1); /* removes 'value'; keeps 'key' for next iteration */
|
||||
}
|
||||
@@ -838,6 +839,11 @@ lua_State *L;
|
||||
return nhl_push_anything(L, ustruct[i].type, ustruct[i].ptr);
|
||||
}
|
||||
|
||||
if (!strcmp(tkey, "inventory")) {
|
||||
nhl_push_obj(L, g.invent);
|
||||
return 1;
|
||||
}
|
||||
|
||||
nhl_error(L, "Unknown u table index");
|
||||
return 0;
|
||||
}
|
||||
|
||||
+5
-5
@@ -532,7 +532,7 @@ doclassdisco()
|
||||
if (!traditional) {
|
||||
any.a_int = 'u';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, menulet++, 0, ATR_NONE,
|
||||
unique_items, MENU_UNSELECTED);
|
||||
unique_items, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -543,7 +543,7 @@ doclassdisco()
|
||||
if (!traditional) {
|
||||
any.a_int = 'a';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, menulet++, 0, ATR_NONE,
|
||||
artifact_items, MENU_UNSELECTED);
|
||||
artifact_items, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -565,7 +565,7 @@ doclassdisco()
|
||||
any.a_int = c;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, menulet++, c,
|
||||
ATR_NONE, oclass_to_name(oclass, buf),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -707,12 +707,12 @@ rename_disco()
|
||||
any.a_int = 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
let_to_name(oclass, FALSE, FALSE),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
prev_class = oclass;
|
||||
}
|
||||
any.a_int = dis;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
obj_typename(dis), MENU_UNSELECTED);
|
||||
obj_typename(dis), MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
if (ct == 0) {
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 objects.c $NHDT-Date: 1535422421 2018/08/28 02:13:41 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.51 $ */
|
||||
/* NetHack 3.6 objects.c $NHDT-Date: 1577184069 2019/12/24 10:41:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.59 $ */
|
||||
/* Copyright (c) Mike Threepoint, 1989. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -173,10 +173,11 @@ WEAPON("stiletto", None,
|
||||
/* 3.6: worm teeth and crysknives now stack;
|
||||
when a stack of teeth is enchanted at once, they fuse into one crysknife;
|
||||
when a stack of crysknives drops, the whole stack reverts to teeth */
|
||||
/* 3.7: change crysknife from MINERAL to BONE and worm tooth from 0 to BONE */
|
||||
WEAPON("worm tooth", None,
|
||||
1, 1, 0, 0, 20, 2, 2, 2, 0, 0, P_KNIFE, 0, CLR_WHITE),
|
||||
1, 1, 0, 0, 20, 2, 2, 2, 0, 0, P_KNIFE, BONE, CLR_WHITE),
|
||||
WEAPON("crysknife", None,
|
||||
1, 1, 0, 0, 20, 100, 10, 10, 3, P, P_KNIFE, MINERAL, CLR_WHITE),
|
||||
1, 1, 0, 0, 20, 100, 10, 10, 3, P, P_KNIFE, BONE, CLR_WHITE),
|
||||
|
||||
/* axes */
|
||||
WEAPON("axe", None,
|
||||
|
||||
+97
-66
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 options.c $NHDT-Date: 1575245078 2019/12/02 00:04:38 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.391 $ */
|
||||
/* NetHack 3.7 options.c $NHDT-Date: 1577050473 2019/12/22 21:34:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.422 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -185,6 +185,7 @@ static const struct Bool_Opt {
|
||||
{ "popup_dialog", &iflags.wc_popup_dialog, FALSE, SET_IN_GAME }, /*WC*/
|
||||
{ "preload_tiles", &iflags.wc_preload_tiles, TRUE, DISP_IN_GAME }, /*WC*/
|
||||
{ "pushweapon", &flags.pushweapon, FALSE, SET_IN_GAME },
|
||||
{ "quick_farsight", &flags.quick_farsight, FALSE, SET_IN_GAME },
|
||||
#if defined(MICRO) && !defined(AMIGA)
|
||||
{ "rawio", &iflags.rawio, FALSE, DISP_IN_GAME },
|
||||
#else
|
||||
@@ -311,6 +312,7 @@ static struct Comp_Opt {
|
||||
{ "horsename", "the name of your (first) horse (e.g., horsename:Silver)",
|
||||
PL_PSIZ, DISP_IN_GAME },
|
||||
{ "map_mode", "map display mode under Windows", 20, DISP_IN_GAME }, /*WC*/
|
||||
{ "menuinvertmode", "behaviour of menu iverts", 5, SET_IN_GAME },
|
||||
{ "menustyle", "user interface for object selection", MENUTYPELEN,
|
||||
SET_IN_GAME },
|
||||
{ "menu_deselect_all", "deselect all items in a menu", 4, SET_IN_FILE },
|
||||
@@ -1451,8 +1453,8 @@ const char *prompt;
|
||||
break;
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, colornames[i].name,
|
||||
(colornames[i].color == NO_COLOR) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(colornames[i].color == NO_COLOR) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, (prompt && *prompt) ? prompt : "Pick a color");
|
||||
pick_cnt = select_menu(tmpwin, PICK_ONE, &picks);
|
||||
@@ -1498,8 +1500,8 @@ const char *prompt;
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, attrnames[i].attr,
|
||||
attrnames[i].name,
|
||||
(attrnames[i].attr == default_attr) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(attrnames[i].attr == default_attr) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, (prompt && *prompt) ? prompt : "Pick an attribute");
|
||||
pick_cnt = select_menu(tmpwin, allow_many ? PICK_ANY : PICK_ONE, &picks);
|
||||
@@ -1595,7 +1597,7 @@ query_msgtype()
|
||||
if (msgtype_names[i].descr) {
|
||||
any.a_int = msgtype_names[i].msgtyp + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
msgtype_names[i].descr, MENU_UNSELECTED);
|
||||
msgtype_names[i].descr, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "How to show the message");
|
||||
pick_cnt = select_menu(tmpwin, PICK_ONE, &picks);
|
||||
@@ -2362,6 +2364,24 @@ boolean tinitial, tfrom_file;
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* menuinvertmode=0 or 1 or 2 (2 is experimental) */
|
||||
fullname = "menuinvertmode";
|
||||
if (match_optname(opts, fullname, 5, TRUE)) {
|
||||
if (negated) {
|
||||
bad_negation(fullname, FALSE);
|
||||
return FALSE;
|
||||
} else {
|
||||
int mode = atoi(op);
|
||||
|
||||
if (mode < 0 || mode > 2) {
|
||||
config_error_add("Illegal %s parameter '%s'", fullname, op);
|
||||
return FALSE;
|
||||
}
|
||||
iflags.menuinvertmode = mode;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
fullname = "msghistory";
|
||||
if (match_optname(opts, fullname, 3, TRUE)) {
|
||||
if (duplicate)
|
||||
@@ -4340,7 +4360,7 @@ int indexoffset; /* value to add to index in compopt[], or zero
|
||||
value);
|
||||
else
|
||||
Sprintf(buf, fmtstr_doset_tab, option, value);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4364,7 +4384,7 @@ int nset;
|
||||
name, buf2);
|
||||
else
|
||||
Sprintf(buf, fmtstr_doset_tab, name, buf2);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -4462,7 +4482,7 @@ doset() /* changing options via menu by Per Liboriussen */
|
||||
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Booleans (selecting will toggle value):", MENU_UNSELECTED);
|
||||
"Booleans (selecting will toggle value):", MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = 0;
|
||||
/* first list any other non-modifiable booleans, then modifiable ones */
|
||||
for (pass = 0; pass <= 1; pass++)
|
||||
@@ -4486,16 +4506,16 @@ doset() /* changing options via menu by Per Liboriussen */
|
||||
Sprintf(buf, fmtstr_doset_tab,
|
||||
name, *bool_p ? "true" : "false");
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
boolcount = i;
|
||||
indexoffset = boolcount;
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Compounds (selecting will prompt for new value):",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* deliberately put playmode, name, role+race+gender+align first */
|
||||
doset_add_menu(tmpwin, "playmode", 0);
|
||||
@@ -4521,9 +4541,9 @@ doset() /* changing options via menu by Per Liboriussen */
|
||||
}
|
||||
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Other settings:", MENU_UNSELECTED);
|
||||
"Other settings:", MENU_ITEMFLAGS_NONE);
|
||||
|
||||
for (i = 0; (name = othropt[i].name) != 0; i++) {
|
||||
if ((is_wc_option(name) && !wc_supported(name))
|
||||
@@ -4535,9 +4555,9 @@ doset() /* changing options via menu by Per Liboriussen */
|
||||
|
||||
#ifdef PREFIXES_IN_USE
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Variable playground locations:", MENU_UNSELECTED);
|
||||
"Variable playground locations:", MENU_ITEMFLAGS_NONE);
|
||||
for (i = 0; i < PREFIX_COUNT; i++)
|
||||
doset_add_menu(tmpwin, fqn_prefix_names[i], 0);
|
||||
#endif
|
||||
@@ -4649,7 +4669,7 @@ int numtotal;
|
||||
Sprintf(tmpbuf, action_titles[i].desc,
|
||||
(i == 1) ? makeplural(optname) : optname);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, action_titles[i].letr, 0, ATR_NONE,
|
||||
tmpbuf, (i == 3) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
tmpbuf, (i == 3) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Do what?");
|
||||
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &pick_list)) > 0) {
|
||||
@@ -4691,7 +4711,7 @@ boolean setinitial, setfromfile;
|
||||
to avoid an optimizer bug in VAX C V2.3 */
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, *style_name, 0, ATR_NONE,
|
||||
style_name, MENU_UNSELECTED);
|
||||
style_name, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select menustyle:");
|
||||
if (select_menu(tmpwin, PICK_ONE, &style_pick) > 0) {
|
||||
@@ -4712,8 +4732,8 @@ boolean setinitial, setfromfile;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, *paranoia[i].argname, 0,
|
||||
ATR_NONE, paranoia[i].explain,
|
||||
(flags.paranoia_bits & paranoia[i].flagmask)
|
||||
? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Actions requiring extra confirmation:");
|
||||
i = select_menu(tmpwin, PICK_ANY, ¶noia_picks);
|
||||
@@ -4741,7 +4761,7 @@ boolean setinitial, setfromfile;
|
||||
burden_name = burdentype[i];
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, burden_letters[i], 0, ATR_NONE,
|
||||
burden_name, MENU_UNSELECTED);
|
||||
burden_name, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select encumbrance level:");
|
||||
if (select_menu(tmpwin, PICK_ONE, &burden_pick) > 0) {
|
||||
@@ -4773,7 +4793,7 @@ boolean setinitial, setfromfile;
|
||||
flags.end_disclose[i], disclosure_options[i]);
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, disclosure_options[i], 0,
|
||||
ATR_NONE, buf, MENU_UNSELECTED);
|
||||
ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
disc_cat[i] = 0;
|
||||
}
|
||||
end_menu(tmpwin, "Change which disclosure options categories:");
|
||||
@@ -4800,32 +4820,32 @@ boolean setinitial, setfromfile;
|
||||
any.a_char = DISCLOSE_NO_WITHOUT_PROMPT;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Never disclose, without prompting",
|
||||
(c == any.a_char) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = DISCLOSE_YES_WITHOUT_PROMPT;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Always disclose, without prompting",
|
||||
(c == any.a_char) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
if (*disclosure_names[i] == 'v') {
|
||||
any.a_char = DISCLOSE_SPECIAL_WITHOUT_PROMPT; /* '#' */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Always disclose, pick sort order from menu",
|
||||
(c == any.a_char) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_char = DISCLOSE_PROMPT_DEFAULT_NO;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Prompt, with default answer of \"No\"",
|
||||
(c == any.a_char) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = DISCLOSE_PROMPT_DEFAULT_YES;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Prompt, with default answer of \"Yes\"",
|
||||
(c == any.a_char) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
if (*disclosure_names[i] == 'v') {
|
||||
any.a_char = DISCLOSE_PROMPT_DEFAULT_SPECIAL; /* '?' */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE,
|
||||
"Prompt, with default answer of \"Ask\" to request sort menu",
|
||||
(c == any.a_char) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(c == any.a_char) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, buf);
|
||||
n = select_menu(tmpwin, PICK_ONE, &disclosure_pick);
|
||||
@@ -4849,7 +4869,7 @@ boolean setinitial, setfromfile;
|
||||
mode_name = runmodes[i];
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, *mode_name, 0, ATR_NONE,
|
||||
mode_name, MENU_UNSELECTED);
|
||||
mode_name, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select run/travel display mode:");
|
||||
if (select_menu(tmpwin, PICK_ONE, &mode_pick) > 0) {
|
||||
@@ -4868,33 +4888,38 @@ boolean setinitial, setfromfile;
|
||||
any.a_char = GPCOORDS_COMPASS;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMPASS, 0, ATR_NONE,
|
||||
"compass ('east' or '3s' or '2n,4w')",
|
||||
(gp == GPCOORDS_COMPASS) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gp == GPCOORDS_COMPASS)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = GPCOORDS_COMFULL;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMFULL, 0, ATR_NONE,
|
||||
"full compass ('east' or '3south' or '2north,4west')",
|
||||
(gp == GPCOORDS_COMFULL) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gp == GPCOORDS_COMFULL)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = GPCOORDS_MAP;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_MAP, 0, ATR_NONE,
|
||||
"map <x,y>",
|
||||
(gp == GPCOORDS_MAP) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gp == GPCOORDS_MAP)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = GPCOORDS_SCREEN;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_SCREEN, 0, ATR_NONE,
|
||||
"screen [row,column]",
|
||||
(gp == GPCOORDS_SCREEN) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gp == GPCOORDS_SCREEN)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = GPCOORDS_NONE;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_NONE, 0, ATR_NONE,
|
||||
"none (no coordinates displayed)",
|
||||
(gp == GPCOORDS_NONE) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gp == GPCOORDS_NONE)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_long = 0L;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(buf, "map: upper-left: <%d,%d>, lower-right: <%d,%d>%s",
|
||||
1, 0, COLNO - 1, ROWNO - 1,
|
||||
flags.verbose ? "; column 0 unused, off left edge" : "");
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
if (strcmp(windowprocs.name, "tty")) /* only show for non-tty */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"screen: row is offset to accommodate tty interface's use of top line",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
#if COLNO == 80
|
||||
#define COL80ARG flags.verbose ? "; column 80 is not used" : ""
|
||||
#else
|
||||
@@ -4903,8 +4928,8 @@ boolean setinitial, setfromfile;
|
||||
Sprintf(buf, "screen: upper-left: [%02d,%02d], lower-right: [%d,%d]%s",
|
||||
0 + 2, 1, ROWNO - 1 + 2, COLNO - 1, COL80ARG);
|
||||
#undef COL80ARG
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
end_menu(tmpwin,
|
||||
"Select coordinate display when auto-describing a map position:");
|
||||
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &window_pick)) > 0) {
|
||||
@@ -4927,15 +4952,18 @@ boolean setinitial, setfromfile;
|
||||
any.a_char = (GFILTER_NONE + 1);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'n',
|
||||
0, ATR_NONE, "no filtering",
|
||||
(gf == GFILTER_NONE) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gf == GFILTER_NONE)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = (GFILTER_VIEW + 1);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'v',
|
||||
0, ATR_NONE, "in view only",
|
||||
(gf == GFILTER_VIEW) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gf == GFILTER_VIEW)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = (GFILTER_AREA + 1);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'a',
|
||||
0, ATR_NONE, "in same area",
|
||||
(gf == GFILTER_AREA) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(gf == GFILTER_AREA)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
end_menu(tmpwin,
|
||||
"Select location filtering when going for next/previous map position:");
|
||||
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &window_pick)) > 0) {
|
||||
@@ -4959,17 +4987,17 @@ boolean setinitial, setfromfile;
|
||||
if (!WINDOWPORT("curses")) {
|
||||
any.a_char = 's';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 's', 0, ATR_NONE,
|
||||
"single", MENU_UNSELECTED);
|
||||
"single", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'c';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,
|
||||
"combination", MENU_UNSELECTED);
|
||||
"combination", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_char = 'f';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'f', 0, ATR_NONE, "full",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'r';
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'r', 0, ATR_NONE, "reversed",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
end_menu(tmpwin, "Select message history display type:");
|
||||
if (select_menu(tmpwin, PICK_ONE, &window_pick) > 0) {
|
||||
iflags.prevmsg_window = window_pick->item.a_char;
|
||||
@@ -4992,7 +5020,7 @@ boolean setinitial, setfromfile;
|
||||
any.a_char = *sortl_name;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, *sortl_name, 0, ATR_NONE,
|
||||
sortl_name, (flags.sortloot == *sortl_name)
|
||||
? MENU_SELECTED : MENU_UNSELECTED);
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select loot sorting type:");
|
||||
n = select_menu(tmpwin, PICK_ONE, &sortl_pick);
|
||||
@@ -5016,16 +5044,16 @@ boolean setinitial, setfromfile;
|
||||
any = cg.zeroany;
|
||||
any.a_int = ALIGN_TOP;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 't', 0, ATR_NONE, "top",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = ALIGN_BOTTOM;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'b', 0, ATR_NONE, "bottom",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = ALIGN_LEFT;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'l', 0, ATR_NONE, "left",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = ALIGN_RIGHT;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'r', 0, ATR_NONE, "right",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(abuf, "Select %s window placement relative to the map:",
|
||||
msg ? "message" : "status");
|
||||
end_menu(tmpwin, abuf);
|
||||
@@ -5052,7 +5080,7 @@ boolean setinitial, setfromfile;
|
||||
for (i = 0; i < SIZE(npchoices); i++) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 'a' + i, 0, ATR_NONE,
|
||||
npchoices[i], MENU_UNSELECTED);
|
||||
npchoices[i], MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select number_pad mode:");
|
||||
if (select_menu(tmpwin, PICK_ONE, &mode_pick) > 0) {
|
||||
@@ -5137,7 +5165,7 @@ boolean setinitial, setfromfile;
|
||||
else
|
||||
Strcat(strcat(mtbuf, tmp->pattern), "\"");
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, mtbuf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
tmp = tmp->next;
|
||||
}
|
||||
Sprintf(mtbuf, "%s message types",
|
||||
@@ -5226,7 +5254,7 @@ boolean setinitial, setfromfile;
|
||||
/* combine main string and suffix */
|
||||
Strcat(mcbuf, &buf[1]); /* skip buf[]'s initial quote */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, mcbuf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
tmp = tmp->next;
|
||||
}
|
||||
Sprintf(mcbuf, "%s menu colors",
|
||||
@@ -5284,7 +5312,7 @@ boolean setinitial, setfromfile;
|
||||
any = cg.zeroany;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
"Always pickup '<'; never pickup '>'",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
for (i = 0; i < numapes && ape; i++) {
|
||||
any.a_void = (opt_idx == 1) ? 0 : ape;
|
||||
/* length of pattern plus quotes (plus '<'/'>') is
|
||||
@@ -5292,7 +5320,7 @@ boolean setinitial, setfromfile;
|
||||
Sprintf(apebuf, "\"%c%s\"", ape->grab ? '<' : '>',
|
||||
ape->pattern);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, apebuf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
ape = ape->next;
|
||||
}
|
||||
}
|
||||
@@ -5371,8 +5399,8 @@ boolean setinitial, setfromfile;
|
||||
defindx = any.a_int;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Default Symbols",
|
||||
(any.a_int == defindx) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(any.a_int == defindx) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
|
||||
for (sl = g.symset_list; sl; sl = sl->next) {
|
||||
/* check restrictions */
|
||||
@@ -5391,8 +5419,8 @@ boolean setinitial, setfromfile;
|
||||
defindx = any.a_int;
|
||||
Sprintf(buf, fmtstr, sl->name, sl->desc ? sl->desc : "");
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
(any.a_int == defindx) ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(any.a_int == defindx) ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
Sprintf(buf, "Select %ssymbol set:",
|
||||
@@ -5606,7 +5634,9 @@ char *buf;
|
||||
: (i == MAP_MODE_ASCII_FIT_TO_SCREEN)
|
||||
? "fit_to_screen"
|
||||
: defopt);
|
||||
} else if (!strcmp(optname, "menustyle"))
|
||||
} else if (!strcmp(optname, "menuinvertmode"))
|
||||
Sprintf(buf, "%d", iflags.menuinvertmode);
|
||||
else if (!strcmp(optname, "menustyle"))
|
||||
Sprintf(buf, "%s", menutype[(int) flags.menu_style]);
|
||||
else if (!strcmp(optname, "menu_deselect_all"))
|
||||
Sprintf(buf, "%s", to_be_done);
|
||||
@@ -6422,7 +6452,8 @@ char *class_select;
|
||||
}
|
||||
any.a_int = *class_list;
|
||||
add_menu(win, NO_GLYPH, &any, accelerator, category ? *class_list : 0,
|
||||
ATR_NONE, buf, selected);
|
||||
ATR_NONE, buf,
|
||||
selected ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
++class_list;
|
||||
if (category > 0) {
|
||||
++next_accelerator;
|
||||
@@ -6435,13 +6466,13 @@ char *class_select;
|
||||
if (category == 1 && next_accelerator <= 'z') {
|
||||
/* for objects, add "A - ' ' all classes", after a separator */
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = (int) ' ';
|
||||
Sprintf(buf, "%c %s", (char) any.a_int, "all classes of objects");
|
||||
/* we won't preselect this even if the incoming list is empty;
|
||||
having it selected means that it would have to be explicitly
|
||||
de-selected in order to select anything else */
|
||||
add_menu(win, NO_GLYPH, &any, 'A', 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 'A', 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(win, prompt);
|
||||
n = select_menu(win, way ? PICK_ANY : PICK_ONE, &pick_list);
|
||||
|
||||
+9
-9
@@ -1166,19 +1166,19 @@ coord *click_cc;
|
||||
versions: "Specify unknown object by cursor?" */
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 'y', ATR_NONE,
|
||||
"something on the map", MENU_UNSELECTED);
|
||||
"something on the map", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'i';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
|
||||
"something you're carrying", MENU_UNSELECTED);
|
||||
"something you're carrying", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = '?';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 'n', ATR_NONE,
|
||||
"something else (by symbol or name)", MENU_UNSELECTED);
|
||||
"something else (by symbol or name)", MENU_ITEMFLAGS_NONE);
|
||||
if (!u.uswallow && !Hallucination) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"", MENU_UNSELECTED);
|
||||
"", MENU_ITEMFLAGS_NONE);
|
||||
/* these options work sensibly for the swallowed case,
|
||||
but there's no reason for the player to use them then;
|
||||
objects work fine when hallucinating, but screen
|
||||
@@ -1187,19 +1187,19 @@ coord *click_cc;
|
||||
any.a_char = 'm';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
|
||||
"nearby monsters", MENU_UNSELECTED);
|
||||
"nearby monsters", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'M';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
|
||||
"all monsters shown on map", MENU_UNSELECTED);
|
||||
"all monsters shown on map", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'o';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
|
||||
"nearby objects", MENU_UNSELECTED);
|
||||
"nearby objects", MENU_ITEMFLAGS_NONE);
|
||||
any.a_char = 'O';
|
||||
add_menu(win, NO_GLYPH, &any,
|
||||
flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
|
||||
"all objects shown on map", MENU_UNSELECTED);
|
||||
"all objects shown on map", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(win, "What do you want to look at:");
|
||||
if (select_menu(win, PICK_ONE, &pick_list) > 0) {
|
||||
@@ -2051,7 +2051,7 @@ dohelp()
|
||||
}
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
helpbuf, MENU_UNSELECTED);
|
||||
helpbuf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "Select one item:");
|
||||
n = select_menu(tmpwin, PICK_ONE, &selected);
|
||||
|
||||
+32
-28
@@ -901,7 +901,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
|
||||
let_to_name(*pack, FALSE,
|
||||
((how != PICK_NONE)
|
||||
&& iflags.menu_head_objsym)),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
printed_type_name = TRUE;
|
||||
}
|
||||
|
||||
@@ -910,7 +910,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
|
||||
(qflags & USE_INVLET) ? curr->invlet
|
||||
: (first && curr->oclass == COIN_CLASS) ? '$' : 0,
|
||||
def_oc_syms[(int) objects[curr->otyp].oc_class].sym,
|
||||
ATR_NONE, doname_with_price(curr), MENU_UNSELECTED);
|
||||
ATR_NONE, doname_with_price(curr), MENU_ITEMFLAGS_NONE);
|
||||
first = FALSE;
|
||||
}
|
||||
}
|
||||
@@ -926,7 +926,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
|
||||
Sprintf(buf, "%s Creatures",
|
||||
is_animal(u.ustuck->data) ? "Swallowed" : "Engulfed");
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
fake_hero_object = cg.zeroobj;
|
||||
fake_hero_object.quan = 1L; /* not strictly necessary... */
|
||||
@@ -934,7 +934,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
|
||||
add_menu(win, mon_to_glyph(&g.youmonst, rn2_on_display_rng), &any,
|
||||
/* fake inventory letter, no group accelerator */
|
||||
CONTAINED_SYM, 0, ATR_NONE, an(self_lookat(buf)),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
end_menu(win, qstr);
|
||||
@@ -1014,6 +1014,7 @@ int how; /* type of query */
|
||||
boolean do_blessed = FALSE, do_cursed = FALSE, do_uncursed = FALSE,
|
||||
do_buc_unknown = FALSE;
|
||||
int num_buc_types = 0;
|
||||
unsigned itemflags = MENU_ITEMFLAGS_NONE;
|
||||
|
||||
*pick_list = (menu_item *) 0;
|
||||
if (!olist)
|
||||
@@ -1068,22 +1069,24 @@ int how; /* type of query */
|
||||
invlet = 'A';
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'A';
|
||||
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
(qflags & WORN_TYPES) ? "Auto-select every item being worn"
|
||||
: "Auto-select every item",
|
||||
MENU_UNSELECTED);
|
||||
itemflags);
|
||||
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
if ((qflags & ALL_TYPES) && (ccount > 1)) {
|
||||
invlet = 'a';
|
||||
any = cg.zeroany;
|
||||
any.a_int = ALL_TYPES_SELECTED;
|
||||
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
(qflags & WORN_TYPES) ? "All worn types" : "All types",
|
||||
MENU_UNSELECTED);
|
||||
itemflags);
|
||||
invlet = 'b';
|
||||
} else
|
||||
invlet = 'a';
|
||||
@@ -1102,7 +1105,7 @@ int how; /* type of query */
|
||||
ATR_NONE, let_to_name(*pack, FALSE,
|
||||
(how != PICK_NONE)
|
||||
&& iflags.menu_head_objsym),
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
collected_type_name = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1118,7 +1121,7 @@ int how; /* type of query */
|
||||
if (do_unpaid || (qflags & BILLED_TYPES) || do_blessed || do_cursed
|
||||
|| do_uncursed || do_buc_unknown) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* unpaid items if there are any */
|
||||
@@ -1127,7 +1130,7 @@ int how; /* type of query */
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'u';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE, "Unpaid items",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
/* billed items: checked by caller, so always include if BILLED_TYPES */
|
||||
if (qflags & BILLED_TYPES) {
|
||||
@@ -1135,39 +1138,40 @@ int how; /* type of query */
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'x';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
"Unpaid items already used up", MENU_UNSELECTED);
|
||||
"Unpaid items already used up", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* items with b/u/c/unknown if there are any;
|
||||
this cluster of menu entries is in alphabetical order,
|
||||
reversing the usual sequence of 'U' and 'C' in BUCX */
|
||||
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
|
||||
if (do_blessed) {
|
||||
invlet = 'B';
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'B';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
"Items known to be Blessed", MENU_UNSELECTED);
|
||||
"Items known to be Blessed", itemflags);
|
||||
}
|
||||
if (do_cursed) {
|
||||
invlet = 'C';
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'C';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
"Items known to be Cursed", MENU_UNSELECTED);
|
||||
"Items known to be Cursed", itemflags);
|
||||
}
|
||||
if (do_uncursed) {
|
||||
invlet = 'U';
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'U';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
"Items known to be Uncursed", MENU_UNSELECTED);
|
||||
"Items known to be Uncursed", itemflags);
|
||||
}
|
||||
if (do_buc_unknown) {
|
||||
invlet = 'X';
|
||||
any = cg.zeroany;
|
||||
any.a_int = 'X';
|
||||
add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
|
||||
"Items of unknown Bless/Curse status", MENU_UNSELECTED);
|
||||
"Items of unknown Bless/Curse status", itemflags);
|
||||
}
|
||||
end_menu(win, qstr);
|
||||
n = select_menu(win, how, pick_list);
|
||||
@@ -1829,7 +1833,7 @@ doloot()
|
||||
if (Is_container(cobj)) {
|
||||
any.a_obj = cobj;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
doname(cobj), MENU_UNSELECTED);
|
||||
doname(cobj), MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(win, "Loot which containers?");
|
||||
n = select_menu(win, PICK_ANY, &pick_list);
|
||||
@@ -2897,47 +2901,47 @@ boolean outokay, inokay, alreadyused, more_containers;
|
||||
any.a_int = 1; /* ':' */
|
||||
Sprintf(buf, "Look inside %s", thesimpleoname(obj));
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
if (outokay) {
|
||||
any.a_int = 2; /* 'o' */
|
||||
Sprintf(buf, "take %s out", something);
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (inokay) {
|
||||
any.a_int = 3; /* 'i' */
|
||||
Sprintf(buf, "put %s in", something);
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (outokay) {
|
||||
any.a_int = 4; /* 'b' */
|
||||
Sprintf(buf, "%stake out, then put in", inokay ? "both; " : "");
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (inokay) {
|
||||
any.a_int = 5; /* 'r' */
|
||||
Sprintf(buf, "%sput in, then take out",
|
||||
outokay ? "both reversed; " : "");
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = 6; /* 's' */
|
||||
Sprintf(buf, "stash one item into %s", thesimpleoname(obj));
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = 0;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
if (more_containers) {
|
||||
any.a_int = 7; /* 'n' */
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
|
||||
"loot next container", MENU_SELECTED);
|
||||
"loot next container", MENU_ITEMFLAGS_SELECTED);
|
||||
}
|
||||
any.a_int = 8; /* 'q' */
|
||||
Strcpy(buf, alreadyused ? "done" : "do nothing");
|
||||
add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
|
||||
more_containers ? MENU_UNSELECTED : MENU_SELECTED);
|
||||
more_containers ? MENU_ITEMFLAGS_NONE : MENU_ITEMFLAGS_SELECTED);
|
||||
|
||||
end_menu(win, prompt);
|
||||
n = select_menu(win, PICK_ONE, &pick_list);
|
||||
@@ -2997,18 +3001,18 @@ dotip()
|
||||
++i;
|
||||
any.a_obj = cobj;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
doname(cobj), MENU_UNSELECTED);
|
||||
doname(cobj), MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (g.invent) {
|
||||
any = cg.zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"", MENU_UNSELECTED);
|
||||
"", MENU_ITEMFLAGS_NONE);
|
||||
any.a_obj = &dummyobj;
|
||||
/* use 'i' for inventory unless there are so many
|
||||
containers that it's already being used */
|
||||
i = (i <= 'i' - 'a' && !flags.lootabc) ? 'i' : 0;
|
||||
add_menu(win, NO_GLYPH, &any, i, 0, ATR_NONE,
|
||||
"tip something being carried", MENU_SELECTED);
|
||||
"tip something being carried", MENU_ITEMFLAGS_SELECTED);
|
||||
}
|
||||
end_menu(win, "Tip which container?");
|
||||
n = select_menu(win, PICK_ONE, &pick_list);
|
||||
|
||||
+7
-6
@@ -201,6 +201,7 @@ struct obj *otmp;
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) otmp, sizeof(struct obj));
|
||||
|
||||
otmp->lua_ref_cnt = 0;
|
||||
/* next object pointers are invalid; otmp->cobj needs to be left
|
||||
as is--being non-null is key to restoring container contents */
|
||||
otmp->nobj = otmp->nexthere = (struct obj *) 0;
|
||||
@@ -1435,25 +1436,25 @@ winid bannerwin; /* if not WIN_ERR, clear window and show copyright in menu */
|
||||
/* COPYRIGHT_BANNER_[ABCD] */
|
||||
for (k = 1; k <= 4; ++k)
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
copyright_banner_line(k), MENU_UNSELECTED);
|
||||
copyright_banner_line(k), MENU_ITEMFLAGS_NONE);
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Select one of your saved games", MENU_UNSELECTED);
|
||||
"Select one of your saved games", MENU_ITEMFLAGS_NONE);
|
||||
for (k = 0; saved[k]; ++k) {
|
||||
any.a_int = k + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, saved[k],
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
clet = (k <= 'n' - 'a') ? 'n' : 0; /* new game */
|
||||
any.a_int = -1; /* not >= 0 */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, clet, 0, ATR_NONE,
|
||||
"Start a new character", MENU_UNSELECTED);
|
||||
"Start a new character", MENU_ITEMFLAGS_NONE);
|
||||
clet = (k + 1 <= 'q' - 'a') ? 'q' : 0; /* quit */
|
||||
any.a_int = -2;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, clet, 0, ATR_NONE,
|
||||
"Never mind (quit)", MENU_SELECTED);
|
||||
"Never mind (quit)", MENU_ITEMFLAGS_SELECTED);
|
||||
/* no prompt on end_menu, as we've done our own at the top */
|
||||
end_menu(tmpwin, (char *) 0);
|
||||
if (select_menu(tmpwin, PICK_ONE, &chosen_game) > 0) {
|
||||
|
||||
+5
-5
@@ -1902,24 +1902,24 @@ boolean preselect;
|
||||
/* use four spaces of padding to fake a grayed out menu choice */
|
||||
Sprintf(buf, "%4s%s forces %s", "", constrainer, forcedvalue);
|
||||
add_menu(where, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else if (what) {
|
||||
any.a_int = RS_menu_arg(which);
|
||||
Sprintf(buf, "Pick%s %s first", (f >= 0) ? " another" : "", what);
|
||||
add_menu(where, NO_GLYPH, &any, RS_menu_let[which], 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else if (which == RS_filter) {
|
||||
any.a_int = RS_menu_arg(RS_filter);
|
||||
add_menu(where, NO_GLYPH, &any, '~', 0, ATR_NONE,
|
||||
"Reset role/race/&c filtering", MENU_UNSELECTED);
|
||||
"Reset role/race/&c filtering", MENU_ITEMFLAGS_NONE);
|
||||
} else if (which == ROLE_RANDOM) {
|
||||
any.a_int = ROLE_RANDOM;
|
||||
add_menu(where, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
preselect ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
preselect ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
} else if (which == ROLE_NONE) {
|
||||
any.a_int = ROLE_NONE;
|
||||
add_menu(where, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
preselect ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
preselect ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
} else {
|
||||
impossible("role_menu_extra: bad arg (%d)", which);
|
||||
}
|
||||
|
||||
@@ -287,10 +287,6 @@ NHFILE *nhfp;
|
||||
urealtime.finish_time = getnow();
|
||||
urealtime.realtime += (long) (urealtime.finish_time
|
||||
- urealtime.start_timing);
|
||||
|
||||
urealtime.finish_time = getnow();
|
||||
urealtime.realtime += (long) (urealtime.finish_time
|
||||
- urealtime.start_timing);
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) &u, sizeof u);
|
||||
bwrite(nhfp->fd, yyyymmddhhmmss(ubirthday), 14);
|
||||
|
||||
+5
-5
@@ -1565,13 +1565,13 @@ spellsortmenu()
|
||||
/* separate final choice from others with a blank line */
|
||||
any.a_int = 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else {
|
||||
let = 'a' + i;
|
||||
}
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, let, 0, ATR_NONE, spl_sortchoices[i],
|
||||
(i == g.spl_sortmode) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(i == g.spl_sortmode) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(tmpwin, "View known spells list sorted");
|
||||
|
||||
@@ -1658,7 +1658,7 @@ int *spell_no;
|
||||
fmt = "%s\t%-d\t%s\t%-d%%\t%s";
|
||||
}
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
for (i = 0; i < MAXSPELL && spellid(i) != NO_SPELL; i++) {
|
||||
splnum = !g.spl_orderindx ? i : g.spl_orderindx[i];
|
||||
Sprintf(buf, fmt, spellname(splnum), spellev(splnum),
|
||||
@@ -1668,7 +1668,7 @@ int *spell_no;
|
||||
|
||||
any.a_int = splnum + 1; /* must be non-zero */
|
||||
add_menu(tmpwin, NO_GLYPH, &any, spellet(splnum), 0, ATR_NONE, buf,
|
||||
(splnum == splaction) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(splnum == splaction) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
how = PICK_ONE;
|
||||
if (splaction == SPELLMENU_VIEW) {
|
||||
@@ -1679,7 +1679,7 @@ int *spell_no;
|
||||
/* more than 1 spell, add an extra menu entry */
|
||||
any.a_int = SPELLMENU_SORT + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, '+', 0, ATR_NONE,
|
||||
"[sort spells]", MENU_UNSELECTED);
|
||||
"[sort spells]", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
end_menu(tmpwin, prompt);
|
||||
|
||||
+2
-2
@@ -607,8 +607,8 @@ dotelecmd()
|
||||
any.a_int = (int) tports[i].menulet;
|
||||
add_menu(win, NO_GLYPH, &any, (char) any.a_int, 0, ATR_NONE,
|
||||
tports[i].menudesc,
|
||||
(tports[i].menulet == 'w') ? MENU_SELECTED
|
||||
: MENU_UNSELECTED);
|
||||
(tports[i].menulet == 'w') ? MENU_ITEMFLAGS_SELECTED
|
||||
: MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
end_menu(win, "Which way do you want to teleport?");
|
||||
i = select_menu(win, PICK_ONE, &picks);
|
||||
|
||||
+5
-5
@@ -1195,17 +1195,17 @@ enhance_weapon_skill()
|
||||
? "when you're more experienced"
|
||||
: "if skill slots become available");
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
if (maxxed_cnt > 0) {
|
||||
Sprintf(buf,
|
||||
"(Skill%s flagged by \"#\" cannot be enhanced any further.)",
|
||||
plur(maxxed_cnt));
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* List the skills, making ones that could be advanced
|
||||
@@ -1219,7 +1219,7 @@ enhance_weapon_skill()
|
||||
any = cg.zeroany;
|
||||
if (i == skill_ranges[pass].first)
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
skill_ranges[pass].name, MENU_UNSELECTED);
|
||||
skill_ranges[pass].name, MENU_ITEMFLAGS_NONE);
|
||||
|
||||
if (P_RESTRICTED(i))
|
||||
continue;
|
||||
@@ -1261,7 +1261,7 @@ enhance_weapon_skill()
|
||||
}
|
||||
any.a_int = can_advance(i, speedy) ? i + 1 : 0;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
Strcpy(buf, (to_advance > 0) ? "Pick a skill to advance:"
|
||||
|
||||
+68
-11
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 wield.c $NHDT-Date: 1559670611 2019/06/04 17:50:11 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.59 $ */
|
||||
/* NetHack 3.6 wield.c $NHDT-Date: 1577186790 2019/12/24 11:26:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.69 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2009. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -245,7 +245,7 @@ register struct obj *obj;
|
||||
/*** Commands to change particular slot(s) ***/
|
||||
|
||||
static NEARDATA const char wield_objs[] = {
|
||||
ALL_CLASSES, ALLOW_NONE, WEAPON_CLASS, TOOL_CLASS, 0
|
||||
ALLOW_COUNT, ALL_CLASSES, ALLOW_NONE, WEAPON_CLASS, TOOL_CLASS, 0
|
||||
};
|
||||
static NEARDATA const char ready_objs[] = {
|
||||
ALLOW_COUNT, COIN_CLASS, ALL_CLASSES, ALLOW_NONE, WEAPON_CLASS, 0
|
||||
@@ -258,7 +258,9 @@ static NEARDATA const char bullets[] = { /* (note: different from dothrow.c) */
|
||||
int
|
||||
dowield()
|
||||
{
|
||||
register struct obj *wep, *oldwep;
|
||||
char qbuf[QBUFSZ];
|
||||
struct obj *wep, *oldwep;
|
||||
boolean finish_splitting = FALSE;
|
||||
int result;
|
||||
|
||||
/* May we attempt this? */
|
||||
@@ -269,10 +271,12 @@ dowield()
|
||||
}
|
||||
|
||||
/* Prompt for a new weapon */
|
||||
if (!(wep = getobj(wield_objs, "wield")))
|
||||
clear_splitobjs();
|
||||
if (!(wep = getobj(wield_objs, "wield"))) {
|
||||
/* Cancelled */
|
||||
return 0;
|
||||
else if (wep == uwep) {
|
||||
} else if (wep == uwep) {
|
||||
already_wielded:
|
||||
You("are already wielding that!");
|
||||
if (is_weptool(wep) || is_wet_towel(wep))
|
||||
g.unweapon = FALSE; /* [see setuwep()] */
|
||||
@@ -281,21 +285,74 @@ dowield()
|
||||
weldmsg(uwep);
|
||||
/* previously interrupted armor removal mustn't be resumed */
|
||||
reset_remarm();
|
||||
/* if player chose a partial stack but can't wield it, undo split */
|
||||
if (wep->o_id && wep->o_id == g.context.objsplit.child_oid)
|
||||
unsplitobj(wep);
|
||||
return 0;
|
||||
} else if (wep->o_id && wep->o_id == g.context.objsplit.child_oid) {
|
||||
/* if wep is the result of supplying a count to getobj()
|
||||
we don't want to split something already wielded; for
|
||||
any other item, we need to give it its own inventory slot */
|
||||
if (uwep && uwep->o_id == g.context.objsplit.parent_oid) {
|
||||
unsplitobj(wep);
|
||||
goto already_wielded;
|
||||
}
|
||||
finish_splitting = TRUE;
|
||||
goto wielding;
|
||||
}
|
||||
|
||||
/* Handle no object, or object in other slot */
|
||||
if (wep == &cg.zeroobj)
|
||||
if (wep == &cg.zeroobj) {
|
||||
wep = (struct obj *) 0;
|
||||
else if (wep == uswapwep)
|
||||
} else if (wep == uswapwep) {
|
||||
return doswapweapon();
|
||||
else if (wep == uquiver)
|
||||
} else if (wep == uquiver) {
|
||||
/* offer to split stack if multiple are quivered */
|
||||
if (uquiver->quan > 1L && inv_cnt(FALSE) < 52 && splittable(uquiver)) {
|
||||
Sprintf(qbuf, "You have %ld %s readied. Wield one?",
|
||||
uquiver->quan, simpleonames(uquiver));
|
||||
switch (ynq(qbuf)) {
|
||||
case 'q':
|
||||
return 0;
|
||||
case 'y':
|
||||
/* leave N-1 quivered, split off 1 to wield */
|
||||
wep = splitobj(uquiver, 1L);
|
||||
finish_splitting = TRUE;
|
||||
goto wielding;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
Strcpy(qbuf, "Wield all of them instead?");
|
||||
} else {
|
||||
boolean use_plural = (is_plural(uquiver) || pair_of(uquiver));
|
||||
|
||||
Sprintf(qbuf, "You have %s readied. Wield %s instead?",
|
||||
!use_plural ? "that" : "those",
|
||||
!use_plural ? "it" : "them");
|
||||
}
|
||||
/* require confirmation to wield the quivered weapon */
|
||||
if (ynq(qbuf) != 'y') {
|
||||
(void) Shk_Your(qbuf, uquiver); /* replace qbuf[] contents */
|
||||
pline("%s%s %s readied.", qbuf,
|
||||
simpleonames(uquiver), otense(uquiver, "remain"));
|
||||
return 0;
|
||||
}
|
||||
/* wielding whole readied stack, so no longer quivered */
|
||||
setuqwep((struct obj *) 0);
|
||||
else if (wep->owornmask & (W_ARMOR | W_ACCESSORY | W_SADDLE)) {
|
||||
} else if (wep->owornmask & (W_ARMOR | W_ACCESSORY | W_SADDLE)) {
|
||||
You("cannot wield that!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
wielding:
|
||||
if (finish_splitting) {
|
||||
/* wep was split off from something; give it its own invlet */
|
||||
freeinv(wep);
|
||||
wep->nomerge = 1;
|
||||
addinv(wep);
|
||||
wep->nomerge = 0;
|
||||
}
|
||||
|
||||
/* Set your new primary weapon */
|
||||
oldwep = uwep;
|
||||
result = ready_weapon(wep);
|
||||
@@ -363,7 +420,7 @@ dowieldquiver()
|
||||
/* will_weld(), touch_petrifies(), etc. */
|
||||
g.multi = 0;
|
||||
/* forget last splitobj() before calling getobj() with ALLOW_COUNT */
|
||||
g.context.objsplit.child_oid = g.context.objsplit.parent_oid = 0;
|
||||
clear_splitobjs();
|
||||
|
||||
/* Prompt for a new quiver: "What do you want to ready?"
|
||||
(Include gems/stones as likely candidates if either primary
|
||||
@@ -398,7 +455,7 @@ dowieldquiver()
|
||||
}
|
||||
finish_splitting = TRUE;
|
||||
} else if (newquiver == uquiver) {
|
||||
already_quivered:
|
||||
already_quivered:
|
||||
pline("That ammunition is already readied!");
|
||||
return 0;
|
||||
} else if (newquiver->owornmask & (W_ARMOR | W_ACCESSORY | W_SADDLE)) {
|
||||
|
||||
+6
-6
@@ -68,7 +68,7 @@ static void FDECL(dump_display_nhwindow, (winid, BOOLEAN_P));
|
||||
static void FDECL(dump_destroy_nhwindow, (winid));
|
||||
static void FDECL(dump_start_menu, (winid));
|
||||
static void FDECL(dump_add_menu, (winid, int, const ANY_P *, CHAR_P,
|
||||
CHAR_P, int, const char *, BOOLEAN_P));
|
||||
CHAR_P, int, const char *, unsigned int));
|
||||
static void FDECL(dump_end_menu, (winid, const char *));
|
||||
static int FDECL(dump_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
static void FDECL(dump_putstr, (winid, int, const char *));
|
||||
@@ -495,7 +495,7 @@ static void FDECL(hup_exit_nhwindows, (const char *));
|
||||
static winid FDECL(hup_create_nhwindow, (int));
|
||||
static int FDECL(hup_select_menu, (winid, int, MENU_ITEM_P **));
|
||||
static void FDECL(hup_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P,
|
||||
int, const char *, BOOLEAN_P));
|
||||
int, const char *, unsigned int));
|
||||
static void FDECL(hup_end_menu, (winid, const char *));
|
||||
static void FDECL(hup_putstr, (winid, int, const char *));
|
||||
static void FDECL(hup_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int));
|
||||
@@ -681,13 +681,13 @@ struct mi **menu_list UNUSED;
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
hup_add_menu(window, glyph, identifier, sel, grpsel, attr, txt, preselected)
|
||||
hup_add_menu(window, glyph, identifier, sel, grpsel, attr, txt, itemflags)
|
||||
winid window UNUSED;
|
||||
int glyph UNUSED, attr UNUSED;
|
||||
const anything *identifier UNUSED;
|
||||
char sel UNUSED, grpsel UNUSED;
|
||||
const char *txt UNUSED;
|
||||
boolean preselected UNUSED;
|
||||
unsigned int itemflags UNUSED;
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1307,7 +1307,7 @@ winid win UNUSED;
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_add_menu(win, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
dump_add_menu(win, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid win UNUSED;
|
||||
int glyph;
|
||||
const anything *identifier UNUSED;
|
||||
@@ -1315,7 +1315,7 @@ char ch;
|
||||
char gch UNUSED;
|
||||
int attr UNUSED;
|
||||
const char *str;
|
||||
boolean preselected UNUSED;
|
||||
unsigned int itemflags UNUSED;
|
||||
{
|
||||
if (dumplog_file) {
|
||||
if (glyph == NO_GLYPH)
|
||||
|
||||
+14
-14
@@ -776,7 +776,7 @@ amii_get_ext_cmd(void)
|
||||
sprintf(buf, "%-10s - %s ", extcmdlist[i].ef_txt,
|
||||
extcmdlist[i].ef_desc);
|
||||
amii_add_menu(win, NO_GLYPH, &id, extcmdlist[i].ef_txt[0], 0, 0,
|
||||
buf, MENU_UNSELECTED);
|
||||
buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
amii_end_menu(win, (char *) 0);
|
||||
@@ -837,7 +837,7 @@ amii_get_ext_cmd(void)
|
||||
sprintf(buf, "%-10s - %s ", extcmdlist[i].ef_txt,
|
||||
extcmdlist[i].ef_desc);
|
||||
amii_add_menu(win, NO_GLYPH, &id, extcmdlist[i].ef_txt[0], 0,
|
||||
0, buf, MENU_UNSELECTED);
|
||||
0, buf, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
amii_end_menu(win, (char *) 0);
|
||||
@@ -1413,7 +1413,7 @@ amii_player_selection()
|
||||
Strcpy(rolenamebuf, roles[i].name.m);
|
||||
}
|
||||
add_menu(win, NO_GLYPH, &any, thisch, 0, ATR_NONE,
|
||||
an(rolenamebuf), MENU_UNSELECTED);
|
||||
an(rolenamebuf), MENU_ITEMFLAGS_NONE);
|
||||
lastch = thisch;
|
||||
}
|
||||
}
|
||||
@@ -1422,10 +1422,10 @@ amii_player_selection()
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrole(FALSE) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick a role for your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1488,17 +1488,17 @@ amii_player_selection()
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, races[i].noun[0], 0,
|
||||
ATR_NONE, races[i].noun,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_race(flags.initrole, flags.initgend,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrace(flags.initrole) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the race of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1560,17 +1560,17 @@ amii_player_selection()
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, genders[i].adj[0], 0,
|
||||
ATR_NONE, genders[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, genders[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_gend(flags.initrole, flags.initrace,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randgend(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the gender of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1631,17 +1631,17 @@ amii_player_selection()
|
||||
flags.initgend, i)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, aligns[i].adj[0], 0,
|
||||
ATR_NONE, aligns[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, aligns[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_align(flags.initrole, flags.initrace,
|
||||
flags.initgend, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randalign(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the alignment of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
void FDECL(amii_raw_print, (const char *));
|
||||
void FDECL(amii_raw_print_bold, (const char *));
|
||||
void FDECL(amii_start_menu, (winid ));
|
||||
void FDECL(amii_add_menu, (winid , char , int , const char *));
|
||||
void FDECL(amii_add_menu, (winid , char , int , const char *, unsigned int));
|
||||
void FDECL(amii_end_menu, (winid , char , const char * , const char *));
|
||||
char FDECL(amii_select_menu, (winid ));
|
||||
void NDECL(amii_update_inventory );
|
||||
|
||||
+4
-3
@@ -56,7 +56,7 @@ register winid window;
|
||||
|
||||
/* Add a string to a menu */
|
||||
void
|
||||
amii_add_menu(window, glyph, id, ch, gch, attr, str, preselected)
|
||||
amii_add_menu(window, glyph, id, ch, gch, attr, str, itemflags)
|
||||
register winid window;
|
||||
register int glyph;
|
||||
register const anything *id;
|
||||
@@ -64,9 +64,10 @@ register char ch;
|
||||
register char gch;
|
||||
register int attr;
|
||||
register const char *str;
|
||||
register BOOLEAN_P preselected;
|
||||
register unsigned int itemflags;
|
||||
{
|
||||
register struct amii_WinDesc *cw;
|
||||
boolean preselected = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
amii_menu_item *mip;
|
||||
char buf[4 + BUFSZ];
|
||||
|
||||
@@ -143,7 +144,7 @@ register const char *morestr;
|
||||
#endif
|
||||
any.a_void = 0;
|
||||
amii_add_menu(window, NO_GLYPH, &any, 0, 0, ATR_NONE, morestr,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
#ifdef PROMPTFIRST /* Do some shuffling. Last first, push others one forward \
|
||||
*/
|
||||
mip->next = NULL;
|
||||
|
||||
@@ -41,7 +41,7 @@ void amii_getret(void);
|
||||
/* winmenu.c */
|
||||
void amii_start_menu(winid window);
|
||||
void FDECL(amii_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int,
|
||||
const char *, BOOLEAN_P));
|
||||
const char *, unsigned int));
|
||||
void FDECL(amii_end_menu, (winid, const char *));
|
||||
int FDECL(amii_select_menu, (winid, int, menu_item **));
|
||||
int DoMenuScroll(int win, int blocking, int how, menu_item **);
|
||||
|
||||
+2
-1
@@ -1937,7 +1937,7 @@ mac_start_menu(winid win)
|
||||
|
||||
void
|
||||
mac_add_menu(winid win, int glyph, const anything *any, CHAR_P menuChar,
|
||||
CHAR_P groupAcc, int attr, const char *inStr, int preselected)
|
||||
CHAR_P groupAcc, int attr, const char *inStr, unsigned int itemflags)
|
||||
{
|
||||
#if defined(__SC__) || defined(__MRC__)
|
||||
#pragma unused(glyph)
|
||||
@@ -1946,6 +1946,7 @@ mac_add_menu(winid win, int glyph, const anything *any, CHAR_P menuChar,
|
||||
const char *str;
|
||||
char locStr[4 + BUFSZ];
|
||||
MacMHMenuItem *item;
|
||||
int preselected = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
|
||||
if (!inStr)
|
||||
return;
|
||||
|
||||
+61
-91
@@ -295,7 +295,7 @@ VOBJ07 = $(O)getline.o $(O)hack.o $(O)hacklib.o $(O)invent.o $(O)lock.o
|
||||
VOBJ08 = $(O)mail.o $(O)main.o $(O)makemon.o $(O)mapglyph.o $(O)mcastu.o $(O)mhitm.o
|
||||
VOBJ09 = $(O)mhitu.o $(O)minion.o $(O)mkmap.o $(O)mklev.o $(O)mkmaze.o
|
||||
VOBJ10 = $(O)mkobj.o $(O)mkroom.o $(O)mon.o $(O)mondata.o $(O)monmove.o
|
||||
VOBJ11 = $(O)monst.o $(O)monstr.o $(O)mplayer.o $(O)mthrowu.o $(O)muse.o
|
||||
VOBJ11 = $(O)monst.o $(O)mplayer.o $(O)mthrowu.o $(O)muse.o
|
||||
VOBJ12 = $(O)music.o $(O)o_init.o $(O)objects.o $(O)objnam.o $(O)options.o
|
||||
VOBJ13 = $(O)pickup.o $(O)pline.o $(O)polyself.o $(O)potion.o $(O)quest.o
|
||||
VOBJ14 = $(O)questpgr.o $(O)pager.o $(O)pray.o $(O)priest.o $(O)read.o
|
||||
@@ -357,14 +357,15 @@ LUASRCFILES = lapi.c lauxlib.c lbaselib.c lbitlib.c lcode.c \
|
||||
ltable.c ltablib.c ltm.c lundump.c lutf8lib.c \
|
||||
lvm.c lzio.c
|
||||
|
||||
LUAOBJFILES = $(O)lapi.o $(O)lauxlib.o $(O)lbaselib.o $(O)lbitlib.o \
|
||||
LUAOBJFILES1 = $(O)lapi.o $(O)lauxlib.o $(O)lbaselib.o $(O)lbitlib.o \
|
||||
$(O)lcode.o $(O)lcorolib.o $(O)lctype.o $(O)ldblib.o \
|
||||
$(O)ldebug.o $(O)ldo.o $(O)ldump.o $(O)lfunc.o \
|
||||
$(O)lgc.o $(O)linit.o $(O)liolib.o $(O)llex.o \
|
||||
$(O)ldebug.o $(O)ldo.o $(O)ldump.o $(O)lfunc.o
|
||||
LUAOBJFILES2 = $(O)lgc.o $(O)linit.o $(O)liolib.o $(O)llex.o \
|
||||
$(O)lmathlib.o $(O)lmem.o $(O)loadlib.o $(O)lobject.o \
|
||||
$(O)lopcodes.o $(O)loslib.o $(O)lparser.o $(O)lstate.o \
|
||||
$(O)lstring.o $(O)lstrlib.o $(O)ltable.o $(O)ltablib.o \
|
||||
$(O)lopcodes.o $(O)loslib.o $(O)lparser.o $(O)lstate.o
|
||||
LUAOBJFILES3 = $(O)lstring.o $(O)lstrlib.o $(O)ltable.o $(O)ltablib.o \
|
||||
$(O)ltm.o $(O)lundump.o $(O)lutf8lib.o $(O)lvm.o $(O)lzio.o
|
||||
LUAOBJFILES = $(LUAOBJFILES1) $(LUAOBJFILES2) $(LUAOBJFILES3)
|
||||
endif
|
||||
|
||||
ifeq "$(ADD_CURSES)" "Y"
|
||||
@@ -376,14 +377,17 @@ PDCURSES_CURSPRIV_H = $(PDCURSES_TOP)/curspriv.h
|
||||
PDCURSES_HEADERS = $(PDCURSES_CURSES_H) $(PDCURSES_CURSPRIV_H)
|
||||
PDCSRC = $(PDCURSES_TOP)/pdcurses
|
||||
PDCDOS = $(PDCURSES_TOP)/dos
|
||||
PDCLIBOBJS = $(O)addch.o $(O)addchstr.o $(O)addstr.o $(O)attr.o $(O)beep.o \
|
||||
PDCLIBOBJS1 = $(O)addch.o $(O)addchstr.o $(O)addstr.o $(O)attr.o $(O)beep.o \
|
||||
$(O)bkgd.o $(O)border.o $(O)clear.o $(O)color.o $(O)delch.o $(O)deleteln.o \
|
||||
$(O)getch.o $(O)getstr.o $(O)getyx.o $(O)inch.o $(O)inchstr.o \
|
||||
$(O)initscr.o $(O)inopts.o $(O)insch.o $(O)insstr.o $(O)instr.o $(O)kernel.o \
|
||||
$(O)keyname.o $(O)mouse.o $(O)move.o $(O)outopts.o $(O)overlay.o $(O)pad.o \
|
||||
$(O)panel.o $(O)printw.o $(O)refresh.o $(O)scanw.o $(O)scr_dump.o $(O)scroll.o \
|
||||
$(O)slk.o $(O)termattr.o $(O)touch.o $(O)util.o $(O)window.o \
|
||||
$(O)debug.o
|
||||
$(O)getch.o
|
||||
PDCLIBOBJS2 = $(O)getstr.o $(O)getyx.o $(O)inch.o $(O)inchstr.o $(O)initscr.o \
|
||||
$(O)inopts.o $(O)insch.o $(O)insstr.o $(O)instr.o $(O)kernel.o \
|
||||
$(O)keyname.o $(O)mouse.o
|
||||
PDCLIBOBJS3 = $(O)move.o $(O)outopts.o $(O)overlay.o $(O)pad.o $(O)panel.o \
|
||||
$(O)printw.o $(O)refresh.o $(O)scanw.o $(O)scr_dump.o $(O)scroll.o \
|
||||
$(O)slk.o $(O)termattr.o
|
||||
PDCLIBOBJS4 = $(O)touch.o $(O)util.o $(O)window.o $(O)debug.o
|
||||
PDCLIBOBJS = $(PDCLIBOBJS1) $(PDCLIBOBJS2) $(PDCLIBOBJS3) $(PDCLIBOBJS4)
|
||||
|
||||
PDCOBJS = $(O)pdcclip.o $(O)pdcdisp.o $(O)pdcgetsc.o $(O)pdckbd.o \
|
||||
$(O)pdcscrn.o $(O)pdcsetsc.o $(O)pdcutil.o
|
||||
@@ -586,7 +590,7 @@ else
|
||||
LEVCOMPEXE =
|
||||
endif
|
||||
$(O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \
|
||||
$(INCL)/pm.h monstr.c vis_tab.c $(TILEUTIL)
|
||||
$(INCL)/pm.h vis_tab.c $(TILEUTIL)
|
||||
$(subst /,\,echo utilities made > $@)
|
||||
|
||||
tileutil: $(U)gif2txt.exe $(U)txt2ppm.exe
|
||||
@@ -620,6 +624,7 @@ endif
|
||||
-@$(subst /,\,touch $(GAMEDIR)/record)
|
||||
@$(subst /,\,copy $(DOC)/guideb*.txt $(GAMEDIR))
|
||||
@$(subst /,\,copy ../sys/winnt/sysconf $(GAMEDIR))
|
||||
@$(subst /,\,if not exist $(GAMEDIR)/sysconf touch $(GAMEDIR)/sysconf)
|
||||
@$(subst /,\,if exist $(DOC)/nethack.txt copy $(DOC)/nethack.txt $(GAMEDIR))
|
||||
ifdef CWSDPMI
|
||||
@$(subst /,\,if exist $(CWSDPMI) copy $(CWSDPMI) $(GAMEDIR))
|
||||
@@ -633,86 +638,50 @@ endif
|
||||
#==========================================
|
||||
|
||||
$(GAMEFILE): $(O)obj.tag $(PATCHLEV_H) $(PDCLIB) $(LUATARGETS) \
|
||||
$(O)utility.tag $(ALLOBJ) $(O)$(GAME).lnk
|
||||
$(O)utility.tag $(ALLOBJ)
|
||||
@if exist temp.a del temp.a
|
||||
@ar ru temp.a $(VOBJ01)
|
||||
@ar ru temp.a $(VOBJ02)
|
||||
@ar ru temp.a $(VOBJ03)
|
||||
@ar ru temp.a $(VOBJ04)
|
||||
@ar ru temp.a $(VOBJ05)
|
||||
@ar ru temp.a $(VOBJ06)
|
||||
@ar ru temp.a $(VOBJ07)
|
||||
@ar ru temp.a $(VOBJ08)
|
||||
@ar ru temp.a $(VOBJ09)
|
||||
@ar ru temp.a $(VOBJ10)
|
||||
@ar ru temp.a $(VOBJ11)
|
||||
@ar ru temp.a $(VOBJ12)
|
||||
@ar ru temp.a $(VOBJ13)
|
||||
@ar ru temp.a $(VOBJ14)
|
||||
@ar ru temp.a $(VOBJ15)
|
||||
@ar ru temp.a $(VOBJ16)
|
||||
@ar ru temp.a $(VOBJ17)
|
||||
@ar ru temp.a $(VOBJ18)
|
||||
@ar ru temp.a $(VOBJ19)
|
||||
@ar ru temp.a $(VOBJ20)
|
||||
@ar ru temp.a $(VOBJ21)
|
||||
@ar ru temp.a $(VOBJ22)
|
||||
@ar ru temp.a $(VOBJ23)
|
||||
@ar ru temp.a $(VOBJ24)
|
||||
@ar ru temp.a $(VOBJ25)
|
||||
@ar ru temp.a $(SOBJ)
|
||||
@ar ru temp.a $(TILOBJ)
|
||||
@ar ru temp.a $(TILOBJ2)
|
||||
@ar ru temp.a $(VVOBJ)
|
||||
@ar ruS temp.a $(VOBJ01)
|
||||
@ar ruS temp.a $(VOBJ02)
|
||||
@ar ruS temp.a $(VOBJ03)
|
||||
@ar ruS temp.a $(VOBJ04)
|
||||
@ar ruS temp.a $(VOBJ05)
|
||||
@ar ruS temp.a $(VOBJ06)
|
||||
@ar ruS temp.a $(VOBJ07)
|
||||
@ar ruS temp.a $(VOBJ08)
|
||||
@ar ruS temp.a $(VOBJ09)
|
||||
@ar ruS temp.a $(VOBJ10)
|
||||
@ar ruS temp.a $(VOBJ11)
|
||||
@ar ruS temp.a $(VOBJ12)
|
||||
@ar ruS temp.a $(VOBJ13)
|
||||
@ar ruS temp.a $(VOBJ14)
|
||||
@ar ruS temp.a $(VOBJ15)
|
||||
@ar ruS temp.a $(VOBJ16)
|
||||
@ar ruS temp.a $(VOBJ17)
|
||||
@ar ruS temp.a $(VOBJ18)
|
||||
@ar ruS temp.a $(VOBJ19)
|
||||
@ar ruS temp.a $(VOBJ20)
|
||||
@ar ruS temp.a $(VOBJ21)
|
||||
@ar ruS temp.a $(VOBJ22)
|
||||
@ar ruS temp.a $(VOBJ23)
|
||||
@ar ruS temp.a $(VOBJ24)
|
||||
@ar ruS temp.a $(VOBJ25)
|
||||
@ar ruS temp.a $(SOBJ)
|
||||
@ar ruS temp.a $(TILOBJ)
|
||||
@ar ruS temp.a $(TILOBJ2)
|
||||
@ar ruS temp.a $(VVOBJ)
|
||||
ifeq "$(ADD_LUA)" "Y"
|
||||
@ar ru temp.a $(LUAOBJ)
|
||||
@ar ruS temp.a $(LUAOBJ)
|
||||
endif
|
||||
ifeq "$(ADD_CURSES)" "Y"
|
||||
@ar ru temp.a $(CURSESOBJ)
|
||||
@ar ruS temp.a $(CURSESOBJ)
|
||||
endif
|
||||
@ranlib temp.a
|
||||
$(LINK) $(LFLAGS) -o$(GAME).exe temp.a \
|
||||
$(PDCLIB) $(LUALIB) $(LIBRARIES) $(ZLIB)
|
||||
@$(subst /,\,stubedit $(GAME).exe minstack=2048K)
|
||||
@$(subst /,\,copy $(GAME).exe $(GAMEFILE))
|
||||
@$(subst /,\,del $(GAME).exe)
|
||||
|
||||
$(O)$(GAME).lnk: $(ALLOBJ)
|
||||
echo $(VOBJ01) > $(subst /,\,$@)
|
||||
echo $(VOBJ02) >> $(subst /,\,$@)
|
||||
echo $(VOBJ03) >> $(subst /,\,$@)
|
||||
echo $(VOBJ04) >> $(subst /,\,$@)
|
||||
echo $(VOBJ05) >> $(subst /,\,$@)
|
||||
echo $(VOBJ06) >> $(subst /,\,$@)
|
||||
echo $(VOBJ07) >> $(subst /,\,$@)
|
||||
echo $(VOBJ08) >> $(subst /,\,$@)
|
||||
echo $(VOBJ09) >> $(subst /,\,$@)
|
||||
echo $(VOBJ10) >> $(subst /,\,$@)
|
||||
echo $(VOBJ11) >> $(subst /,\,$@)
|
||||
echo $(VOBJ12) >> $(subst /,\,$@)
|
||||
echo $(VOBJ13) >> $(subst /,\,$@)
|
||||
echo $(VOBJ14) >> $(subst /,\,$@)
|
||||
echo $(VOBJ15) >> $(subst /,\,$@)
|
||||
echo $(VOBJ16) >> $(subst /,\,$@)
|
||||
echo $(VOBJ17) >> $(subst /,\,$@)
|
||||
echo $(VOBJ18) >> $(subst /,\,$@)
|
||||
echo $(VOBJ19) >> $(subst /,\,$@)
|
||||
echo $(VOBJ20) >> $(subst /,\,$@)
|
||||
echo $(VOBJ21) >> $(subst /,\,$@)
|
||||
echo $(VOBJ22) >> $(subst /,\,$@)
|
||||
echo $(VOBJ23) >> $(subst /,\,$@)
|
||||
echo $(VOBJ24) >> $(subst /,\,$@)
|
||||
echo $(VOBJ25) >> $(subst /,\,$@)
|
||||
echo $(SOBJ) >> $(subst /,\,$@)
|
||||
echo $(TILOBJ) >> $(subst /,\,$@)
|
||||
echo $(TILOBJ2) >> $(subst /,\,$@)
|
||||
echo $(VVOBJ) >> $(subst /,\,$@)
|
||||
ifeq "$(ADD_LUA)" "Y"
|
||||
echo $(LUAOBJ) >> $(subst /,\,$@)
|
||||
endif
|
||||
ifeq "$(ADD_CURSES)" "Y"
|
||||
echo $(CURSESOBJ) >> $(subst /,\,$@)
|
||||
endif
|
||||
|
||||
#==========================================
|
||||
#=========== SECONDARY TARGETS ============
|
||||
#==========================================
|
||||
@@ -732,9 +701,6 @@ $(INCL)/onames.h: $(U)makedefs.exe
|
||||
$(INCL)/pm.h: $(U)makedefs.exe
|
||||
-$(subst /,\,$(U)makedefs -p)
|
||||
|
||||
monstr.c: $(U)makedefs.exe
|
||||
-$(subst /,\,$(U)makedefs -m)
|
||||
|
||||
$(INCL)/vis_tab.h: $(U)makedefs.exe
|
||||
-$(subst /,\,$(U)makedefs -z)
|
||||
|
||||
@@ -1030,11 +996,14 @@ $(O)sp_lev.tag: $(O)utility.tag
|
||||
|
||||
#note that dir below assumes bin/dir.exe from djgpp distribution
|
||||
#
|
||||
ifndef LUA_QTEXT_FILE
|
||||
QUEST_DAT = $(DAT)/quest.dat
|
||||
else
|
||||
QUEST_DAT =
|
||||
endif
|
||||
$(DAT)/nhdat: $(U)dlb_main.exe $(DAT)/data $(DAT)/rumors \
|
||||
$(DAT)/oracles \
|
||||
ifndef LUA_QTEXT_FILE
|
||||
$(DAT)/quest.dat \
|
||||
endif
|
||||
$(QUEST_DAT) \
|
||||
$(O)sp_lev.tag \
|
||||
$(DAT)/bogusmon $(DAT)/engrave $(DAT)/epitaph $(DAT)/tribute
|
||||
@$(subst /,\,echo dat done >$(O)dat.tag)
|
||||
@@ -1135,7 +1104,9 @@ $(O)lua535.a: $(LUAOBJFILES)
|
||||
-Wl,--add-stdcall-alias -o $@ $<
|
||||
|
||||
$(O)lua535s.a: $(LUAOBJFILES)
|
||||
ar rcs $@ $(LUAOBJFILES)
|
||||
ar rcS $@ $(LUAOBJFILES1)
|
||||
ar rcS $@ $(LUAOBJFILES2)
|
||||
ar rcs $@ $(LUAOBJFILES3)
|
||||
|
||||
$(O)lua.o: $(LUASRC)/lua.c
|
||||
$(O)luac.o: $(LUASRC)/luac.c
|
||||
@@ -1169,7 +1140,6 @@ spotless: clean
|
||||
$(subst /,\,if exist $(INCL)/onames.h del $(INCL)/onames.h)
|
||||
$(subst /,\,if exist $(INCL)/pm.h del $(INCL)/pm.h)
|
||||
$(subst /,\,if exist $(INCL)/date.h del $(INCL)/date.h)
|
||||
$(subst /,\,if exist $(SRC)/monstr.c del $(SRC)/monstr.c)
|
||||
$(subst /,\,if exist $(SRC)/vis_tab.c del $(SRC)/vis_tab.c)
|
||||
$(subst /,\,if exist $(SRC)/tile.c del $(SRC)/tile.c)
|
||||
$(subst /,\,if exist $(DAT)/options del $(DAT)/options)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/* nhlua.h - generated by top Makefile */
|
||||
#include "../lib/lua535/src/lua.h"
|
||||
LUA_API int (lua_error) (lua_State *L) NORETURN;
|
||||
#include "../lib/lua535/src/lualib.h"
|
||||
#include "../lib/lua535/src/lauxlib.h"
|
||||
/*nhlua.h*/
|
||||
+2
-32
@@ -1,5 +1,5 @@
|
||||
# Makefile for NetHack's utility programs.
|
||||
# NetHack 3.6 Makefile.utl $NHDT-Date: 1574646950 2019/11/25 01:55:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.44 $
|
||||
# NetHack 3.6 Makefile.utl $NHDT-Date: 1576976264 2019/12/22 00:57:44 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.49 $
|
||||
# Copyright (c) 2018 by Robert Patrick Rankin
|
||||
# NetHack may be freely redistributed. See license for details.
|
||||
|
||||
@@ -84,7 +84,6 @@ NHSROOT=..
|
||||
# LFLAGS = -b i486-linuxaout -L/usr/X11R6/lib
|
||||
|
||||
# flags for BeOS using the command line
|
||||
# remember to uncomment flex and bison below
|
||||
# BeOS on a Mac/BeBox:
|
||||
#CC = mwcc
|
||||
#CFLAGS = -I../include
|
||||
@@ -97,7 +96,7 @@ NHSROOT=..
|
||||
#CFLAGS = -O -I../include
|
||||
#LFLAGS =
|
||||
|
||||
CFLAGS += -I../lib/lua-$(LUA_VERSION)/src
|
||||
# -lm required by lua
|
||||
LFLAGS += -lm
|
||||
|
||||
# we specify C preprocessor flags via CFLAGS; files built with default rules
|
||||
@@ -112,23 +111,6 @@ LIBS =
|
||||
# otherwise, you can save a little bit of disk space with this:
|
||||
OBJDIR = ../src
|
||||
|
||||
# yacc/lex programs to use to generate *_comp.h, *_lex.c, and *_yacc.c.
|
||||
# if, instead of yacc/lex you have bison/flex, comment/uncomment the following.
|
||||
YACC = yacc
|
||||
LEX = lex
|
||||
# YACC = bison -y
|
||||
# YACC = byacc
|
||||
# LEX = flex
|
||||
|
||||
# these are the names of the output files from YACC/LEX. Under MS-DOS
|
||||
# and similar systems, they may differ
|
||||
YTABC = y.tab.c
|
||||
YTABH = y.tab.h
|
||||
LEXYYC = lex.yy.c
|
||||
# YTABC = y_tab.c
|
||||
# YTABH = y_tab.h
|
||||
# LEXYYC = lexyy.c
|
||||
|
||||
# if you change this to 1, feedback while building will omit -Dthis -Wthat
|
||||
# -Isomewhere so that each file being compiled is listed on one short line;
|
||||
# it requires support for '$<' in rules with more than one prerequisite
|
||||
@@ -204,18 +186,6 @@ RECOVOBJS = recover.o
|
||||
# object files for the data librarian
|
||||
DLBOBJS = dlb_main.o $(OBJDIR)/dlb.o $(OALLOC)
|
||||
|
||||
# flags for creating distribution versions of sys/share/*_lex.c, using
|
||||
# a more portable flex skeleton, which is not included in the distribution.
|
||||
# hopefully keeping this out of the section to be edited will keep too
|
||||
# many people from being confused by it...
|
||||
# FLEXDIST = -L -S../sys/share/flexhack.skl
|
||||
FLEXDIST =
|
||||
#
|
||||
# flags for creating distribution versions of sys/share/*_yacc.c, without
|
||||
# line numbers so patches from version to version are practical
|
||||
# YACCDIST = -l
|
||||
YACCDIST =
|
||||
|
||||
|
||||
# dependencies for makedefs
|
||||
#
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ typedef struct mswin_nhmsg_add_menu {
|
||||
CHAR_P group_accel;
|
||||
int attr;
|
||||
const char *str;
|
||||
BOOLEAN_P presel;
|
||||
unsigned int itemflags;
|
||||
} MSNHMsgAddMenu, *PMSNHMsgAddMenu;
|
||||
|
||||
typedef struct mswin_nhmsg_cursor {
|
||||
|
||||
+18
-16
@@ -390,7 +390,7 @@ prompt_for_player_selection(void)
|
||||
Strcpy(rolenamebuf, roles[i].name.m);
|
||||
}
|
||||
add_menu(win, NO_GLYPH, &any, thisch, 0, ATR_NONE,
|
||||
an(rolenamebuf), MENU_UNSELECTED);
|
||||
an(rolenamebuf), MENU_ITEMFLAGS_NONE);
|
||||
lastch = thisch;
|
||||
}
|
||||
}
|
||||
@@ -399,10 +399,10 @@ prompt_for_player_selection(void)
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrole(FALSE) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick a role for your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -465,17 +465,17 @@ prompt_for_player_selection(void)
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, races[i].noun[0], 0,
|
||||
ATR_NONE, races[i].noun, MENU_UNSELECTED);
|
||||
ATR_NONE, races[i].noun, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_race(flags.initrole, flags.initgend,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrace(flags.initrole) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the race of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -539,17 +539,17 @@ prompt_for_player_selection(void)
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, genders[i].adj[0], 0,
|
||||
ATR_NONE, genders[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, genders[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_gend(flags.initrole, flags.initrace,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randgend(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the gender of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -612,17 +612,17 @@ prompt_for_player_selection(void)
|
||||
flags.initgend, i)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, aligns[i].adj[0], 0,
|
||||
ATR_NONE, aligns[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, aligns[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_align(flags.initrole, flags.initrace,
|
||||
flags.initgend, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randalign(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the alignment of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1026,7 +1026,7 @@ mswin_start_menu(winid wid)
|
||||
/*
|
||||
add_menu(windid window, int glyph, const anything identifier,
|
||||
char accelerator, char groupacc,
|
||||
int attr, char *str, boolean preselected)
|
||||
int attr, char *str, unsigned int itemflags)
|
||||
-- Add a text line str to the given menu window. If
|
||||
identifier
|
||||
is 0, then the line cannot be selected (e.g. a title).
|
||||
@@ -1058,11 +1058,13 @@ identifier
|
||||
void
|
||||
mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned int itemflags)
|
||||
{
|
||||
logDebug("mswin_add_menu(%d, %d, %p, %c, %c, %d, %s, %d)\n", wid, glyph,
|
||||
boolean presel = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
|
||||
logDebug("mswin_add_menu(%d, %d, %p, %c, %c, %d, %s, %u)\n", wid, glyph,
|
||||
identifier, (char) accelerator, (char) group_accel, attr, str,
|
||||
presel);
|
||||
itemflags);
|
||||
if ((wid >= 0) && (wid < MAXWINDOWS)
|
||||
&& (GetNHApp()->windowlist[wid].win != NULL)) {
|
||||
MSNHMsgAddMenu data;
|
||||
|
||||
+1
-1
@@ -131,7 +131,7 @@ void mswin_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
void mswin_start_menu(winid wid);
|
||||
void mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned int itemflags);
|
||||
void mswin_end_menu(winid wid, const char *prompt);
|
||||
int mswin_select_menu(winid wid, int how, MENU_ITEM_P **selected);
|
||||
void mswin_update_inventory(void);
|
||||
|
||||
+12
-14
@@ -270,9 +270,7 @@ U = $(UTIL)/
|
||||
# Utility Objects.
|
||||
#
|
||||
|
||||
MAKESRC = $(U)makedefs.c
|
||||
|
||||
MAKEOBJS = $(O)makedefs.o $(O)monst.o $(O)objects.o
|
||||
MAKEDEFSOBJS = $(O)makedefs.o $(O)monst.o $(O)objects.o
|
||||
|
||||
RECOVOBJS = $(O)recover.o
|
||||
|
||||
@@ -304,8 +302,8 @@ VOBJ05 = $(O)do_wear.o $(O)dog.o $(O)dogmove.o $(O)dokick.o
|
||||
VOBJ06 = $(O)dothrow.o $(O)drawing.o $(O)dungeon.o $(O)eat.o
|
||||
VOBJ07 = $(O)end.o $(O)engrave.o $(O)exper.o $(O)explode.o
|
||||
VOBJ08 = $(O)extralev.o $(O)files.o $(O)fountain.o $(O)hack.o
|
||||
VOBJ09 = $(O)hacklib.o $(O)invent.o $(O)light.o $(O)lock.o
|
||||
VOBJ10 = $(O)mail.o $(O)makemon.o $(O)mapglyph.o $(O)isaac64.o
|
||||
VOBJ09 = $(O)hacklib.o $(O)invent.o $(O)light.o $(O)lock.o
|
||||
VOBJ10 = $(O)mail.o $(O)makemon.o $(O)mapglyph.o $(O)mdlib.o $(O)isaac64.o
|
||||
VOBJ11 = $(O)mcastu.o $(O)mhitm.o $(O)mhitu.o $(O)minion.o
|
||||
VOBJ12 = $(O)mklev.o $(O)mkmap.o $(O)mkmaze.o $(O)mkobj.o
|
||||
VOBJ13 = $(O)mkroom.o $(O)mon.o $(O)mondata.o $(O)monmove.o
|
||||
@@ -791,12 +789,12 @@ $(O)utility.tag: $(INCL)/date.h $(INCL)/onames.h $(INCL)/pm.h \
|
||||
@echo utilities made.
|
||||
|
||||
$(INCL)/nhlua.h:
|
||||
echo '/* nhlua.h - generated by top Makefile */' > $@
|
||||
@echo '#include "../lib/lua-$(LUA_VERSION)/src/lua.h"' >> $@
|
||||
@echo 'LUA_API int (lua_error) (lua_State *L) NORETURN;' >>$@
|
||||
@echo '#include "../lib/lua-$(LUA_VERSION)/src/lualib.h"' >> $@
|
||||
@echo '#include "../lib/lua-$(LUA_VERSION)/src/lauxlib.h"' >> $@
|
||||
@echo '/*nhlua.h*/' >> $@
|
||||
echo /* nhlua.h - generated by top Makefile */ > $@
|
||||
@echo #include "../lib/lua-$(LUA_VERSION)/src/lua.h" >> $@
|
||||
@echo LUA_API int (lua_error) (lua_State *L) NORETURN; >>$@
|
||||
@echo #include "../lib/lua-$(LUA_VERSION)/src/lualib.h" >> $@
|
||||
@echo #include "../lib/lua-$(LUA_VERSION)/src/lauxlib.h" >> $@
|
||||
@echo /*nhlua.h*/ >> $@
|
||||
|
||||
tileutil: $(U)gif2txt.exe $(U)gif2tx32.exe $(U)txt2ppm.exe
|
||||
@echo Optional tile development utilities are up to date.
|
||||
@@ -894,12 +892,12 @@ objdir.tag:
|
||||
# Makedefs Stuff
|
||||
#==========================================
|
||||
|
||||
$(U)makedefs.exe: $(MAKEOBJS)
|
||||
$(link) $(LFLAGSU) -o$@ $(MAKEOBJS)
|
||||
$(U)makedefs.exe: $(MAKEDEFSOBJS)
|
||||
$(link) $(LFLAGSU) -o$@ $(MAKEDEFSOBJS)
|
||||
|
||||
$(O)makedefs.o: $(CONFIG_H) $(INCL)/monattk.h $(INCL)/monflag.h \
|
||||
$(INCL)/objclass.h $(INCL)/monsym.h \
|
||||
$(INCL)/patchlevel.h $(U)makedefs.c
|
||||
$(INCL)/patchlevel.h $(U)makedefs.c $(SRC)\mdlib.c
|
||||
$(cc) $(CFLAGSU) -o$@ $(U)makedefs.c
|
||||
|
||||
#
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
set -x
|
||||
mkdir -p lib
|
||||
cd lib
|
||||
git clone --depth 1 https://github.com/wmcbrine/PDCurses.git pdcurses
|
||||
git clone --depth 1 https://github.com/universal-ctags/ctags.git ctags
|
||||
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
|
||||
tar zxf lua-5.3.5.tar.gz
|
||||
cd ../
|
||||
+2
-2
@@ -376,12 +376,12 @@ void NetHackQtBind::qt_start_menu(winid wid)
|
||||
|
||||
void NetHackQtBind::qt_add_menu(winid wid, int glyph,
|
||||
const ANY_P * identifier, CHAR_P ch, CHAR_P gch, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned itemflags)
|
||||
{
|
||||
NetHackQtWindow* window=id_to_window[(int)wid];
|
||||
window->AddMenu(glyph, identifier, ch, gch, attr,
|
||||
QString::fromLatin1(str),
|
||||
presel);
|
||||
itemflags);
|
||||
}
|
||||
|
||||
void NetHackQtBind::qt_end_menu(winid wid, const char *prompt)
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ public:
|
||||
static void qt_start_menu(winid wid);
|
||||
static void qt_add_menu(winid wid, int glyph,
|
||||
const ANY_P * identifier, CHAR_P ch, CHAR_P gch, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned int itemflags);
|
||||
static void qt_end_menu(winid wid, const char *prompt);
|
||||
static int qt_select_menu(winid wid, int how, MENU_ITEM_P **menu_list);
|
||||
static void qt_update_inventory();
|
||||
|
||||
+9
-3
@@ -160,8 +160,9 @@ NetHackQtMenuWindow::MenuItem::~MenuItem()
|
||||
}
|
||||
|
||||
void NetHackQtMenuWindow::AddMenu(int glyph, const ANY_P* identifier,
|
||||
char ch, char gch, int attr, const QString& str, bool presel)
|
||||
char ch, char gch, int attr, const QString& str, unsigned itemflags)
|
||||
{
|
||||
bool presel = (itemflags & MENU_ITEMFLAGS_SELECTED) != 0;
|
||||
if (!ch && identifier->a_void!=0) {
|
||||
// Supply a keyboard accelerator. Limited supply.
|
||||
static char accel[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
@@ -180,6 +181,7 @@ void NetHackQtMenuWindow::AddMenu(int glyph, const ANY_P* identifier,
|
||||
itemlist[itemcount].attr=attr;
|
||||
itemlist[itemcount].str=str;
|
||||
itemlist[itemcount].selected=presel;
|
||||
itemlist[itemcount].itemflags=itemflags;
|
||||
itemlist[itemcount].count=-1;
|
||||
itemlist[itemcount].color = -1;
|
||||
// Display the boulder symbol correctly
|
||||
@@ -532,6 +534,10 @@ void NetHackQtMenuWindow::Invert()
|
||||
return;
|
||||
|
||||
for (int i=0; i<itemcount; i++) {
|
||||
if (!menuitem_invert_test(0, itemlist[i].itemflags,
|
||||
itemlist[i].selected))
|
||||
continue;
|
||||
|
||||
QTableWidgetItem *count = table->item(i, 0);
|
||||
if (count != NULL) count->setText("");
|
||||
|
||||
@@ -811,10 +817,10 @@ void NetHackQtMenuOrTextWindow::StartMenu()
|
||||
actual->StartMenu();
|
||||
}
|
||||
void NetHackQtMenuOrTextWindow::AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const QString& str, bool presel)
|
||||
const QString& str, unsigned itemflags)
|
||||
{
|
||||
if (!actual) impossible("AddMenu called before we know if Menu or Text");
|
||||
actual->AddMenu(glyph,identifier,ch,gch,attr,str,presel);
|
||||
actual->AddMenu(glyph,identifier,ch,gch,attr,str,itemflags);
|
||||
}
|
||||
void NetHackQtMenuOrTextWindow::EndMenu(const QString& prompt)
|
||||
{
|
||||
|
||||
+3
-2
@@ -55,7 +55,7 @@ public:
|
||||
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const QString& str, bool presel);
|
||||
const QString& str, unsigned itemflags);
|
||||
virtual void EndMenu(const QString& prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
|
||||
@@ -85,6 +85,7 @@ private:
|
||||
char ch;
|
||||
char gch;
|
||||
bool selected;
|
||||
unsigned itemflags;
|
||||
unsigned color;
|
||||
|
||||
bool Selectable() const { return identifier.a_void!=0; }
|
||||
@@ -172,7 +173,7 @@ public:
|
||||
// Menu
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const QString& str, bool presel);
|
||||
const QString& str, unsigned itemflags);
|
||||
virtual void EndMenu(const QString& prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
|
||||
|
||||
+1
-1
@@ -125,7 +125,7 @@ void NetHackQtWindow::CursorTo(int x,int y) { puts("unexpected CursorTo"); }
|
||||
void NetHackQtWindow::PutStr(int attr, const QString& text) { puts("unexpected PutStr"); }
|
||||
void NetHackQtWindow::StartMenu() { puts("unexpected StartMenu"); }
|
||||
void NetHackQtWindow::AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const QString& str, bool presel) { puts("unexpected AddMenu"); }
|
||||
const QString& str, unsigned itemflags) { puts("unexpected AddMenu"); }
|
||||
void NetHackQtWindow::EndMenu(const QString& prompt) { puts("unexpected EndMenu"); }
|
||||
int NetHackQtWindow::SelectMenu(int how, MENU_ITEM_P **menu_list) { puts("unexpected SelectMenu"); return 0; }
|
||||
void NetHackQtWindow::ClipAround(int x,int y) { puts("unexpected ClipAround"); }
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ public:
|
||||
}
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const QString& str, bool presel);
|
||||
const QString& str, unsigned itemflags);
|
||||
virtual void EndMenu(const QString& prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
virtual void ClipAround(int x,int y);
|
||||
|
||||
+6
-3
@@ -1447,7 +1447,7 @@ void NetHackQtWindow::CursorTo(int x,int y) { puts("unexpected CursorTo"); }
|
||||
void NetHackQtWindow::PutStr(int attr, const char* text) { puts("unexpected PutStr"); }
|
||||
void NetHackQtWindow::StartMenu() { puts("unexpected StartMenu"); }
|
||||
void NetHackQtWindow::AddMenu(int glyph, const ANY_P* identifier, char ch, char gch, int attr,
|
||||
const char* str, bool presel) { puts("unexpected AddMenu"); }
|
||||
const char* str, unsigned itemflags) { puts("unexpected AddMenu"); }
|
||||
void NetHackQtWindow::EndMenu(const char* prompt) { puts("unexpected EndMenu"); }
|
||||
int NetHackQtWindow::SelectMenu(int how, MENU_ITEM_P **menu_list) { puts("unexpected SelectMenu"); return 0; }
|
||||
void NetHackQtWindow::ClipAround(int x,int y) { puts("unexpected ClipAround"); }
|
||||
@@ -2788,8 +2788,9 @@ NetHackQtMenuWindow::MenuItem::~MenuItem()
|
||||
#define STR_MARGIN 4
|
||||
|
||||
void NetHackQtMenuWindow::AddMenu(int glyph, const ANY_P* identifier,
|
||||
char ch, char gch, int attr, const char* str, bool presel)
|
||||
char ch, char gch, int attr, const char* str, unsigned itemflags)
|
||||
{
|
||||
bool presel = (itemflags & MENU_ITEMFLAGS_SELECTED) != 0;
|
||||
if (!ch && identifier->a_void!=0) {
|
||||
// Supply a keyboard accelerator. Limited supply.
|
||||
static char accel[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
@@ -2807,6 +2808,7 @@ void NetHackQtMenuWindow::AddMenu(int glyph, const ANY_P* identifier,
|
||||
item[itemcount].attr=attr;
|
||||
item[itemcount].str=strdup(str);
|
||||
item[itemcount].selected=presel;
|
||||
item[itemcount].itemflags=itemflags;
|
||||
item[itemcount].count=-1;
|
||||
++itemcount;
|
||||
|
||||
@@ -4817,8 +4819,9 @@ void NetHackQtBind::qt_start_menu(winid wid)
|
||||
|
||||
void NetHackQtBind::qt_add_menu(winid wid, int glyph,
|
||||
const ANY_P * identifier, CHAR_P ch, CHAR_P gch, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned int itemflags)
|
||||
{
|
||||
boolean presel = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
NetHackQtWindow* window=id_to_window[wid];
|
||||
window->AddMenu(glyph, identifier, ch, gch, attr, str, presel);
|
||||
}
|
||||
|
||||
+4
-4
@@ -258,7 +258,7 @@ class NetHackQtWindow
|
||||
virtual void PutStr(int attr, const char *text);
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P *identifier, char ch,
|
||||
char gch, int attr, const char *str, bool presel);
|
||||
char gch, int attr, const char *str, unsigned itemflags);
|
||||
virtual void EndMenu(const char *prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
virtual void ClipAround(int x, int y);
|
||||
@@ -550,7 +550,7 @@ class NetHackQtMenuWindow : public QTableView, public NetHackQtWindow
|
||||
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P *identifier, char ch,
|
||||
char gch, int attr, const char *str, bool presel);
|
||||
char gch, int attr, const char *str, unsigned itemflags);
|
||||
virtual void EndMenu(const char *prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
|
||||
@@ -699,7 +699,7 @@ class NetHackQtMenuOrTextWindow : public NetHackQtWindow
|
||||
// Menu
|
||||
virtual void StartMenu();
|
||||
virtual void AddMenu(int glyph, const ANY_P *identifier, char ch,
|
||||
char gch, int attr, const char *str, bool presel);
|
||||
char gch, int attr, const char *str, unsigned itemflags);
|
||||
virtual void EndMenu(const char *prompt);
|
||||
virtual int SelectMenu(int how, MENU_ITEM_P **menu_list);
|
||||
};
|
||||
@@ -854,7 +854,7 @@ class NetHackQtBind : NetHackQtBindBase
|
||||
static void qt_start_menu(winid wid);
|
||||
static void qt_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P ch, CHAR_P gch, int attr, const char *str,
|
||||
BOOLEAN_P presel);
|
||||
unsigned itemflags);
|
||||
static void qt_end_menu(winid wid, const char *prompt);
|
||||
static int qt_select_menu(winid wid, int how, MENU_ITEM_P **menu_list);
|
||||
static void qt_update_inventory();
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 winX.c $NHDT-Date: 1552441031 2019/03/13 01:37:11 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.73 $ */
|
||||
/* NetHack 3.6 winX.c $NHDT-Date: 1577063125 2019/12/23 01:05:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.79 $ */
|
||||
/* Copyright (c) Dean Luick, 1992 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -1965,7 +1965,7 @@ boolean complain;
|
||||
any = cg.zeroany;
|
||||
while (dlb_fgets(line, LLEN, fp)) {
|
||||
X11_add_menu(newwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
line, MENU_UNSELECTED);
|
||||
line, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
(void) dlb_fclose(fp);
|
||||
|
||||
|
||||
+9
-5
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 winmenu.c $NHDT-Date: 1542245161 2018/11/15 01:26:01 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.33 $ */
|
||||
/* NetHack 3.6 winmenu.c $NHDT-Date: 1577063136 2019/12/23 01:05:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.35 $ */
|
||||
/* Copyright (c) Dean Luick, 1992 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -542,10 +542,12 @@ struct xwindow *wp;
|
||||
|
||||
reset_menu_count(wp->menu_information);
|
||||
for (count = 0, curr = wp->menu_information->curr_menu.base; curr;
|
||||
curr = curr->next, count++)
|
||||
curr = curr->next, count++) {
|
||||
if (!menuitem_invert_test(0, curr->itemflags, curr->selected))
|
||||
continue;
|
||||
if (curr->identifier.a_void != 0)
|
||||
invert_line(wp, curr, count, -1L);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -628,7 +630,7 @@ winid window;
|
||||
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
X11_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
X11_add_menu(window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid window;
|
||||
int glyph; /* unused (for now) */
|
||||
const anything *identifier;
|
||||
@@ -636,10 +638,11 @@ char ch;
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr;
|
||||
const char *str;
|
||||
boolean preselected;
|
||||
unsigned itemflags;
|
||||
{
|
||||
x11_menu_item *item;
|
||||
struct menu_info_t *menu_info;
|
||||
boolean preselected = (itemflags & MENU_ITEMFLAGS_SELECTED) != 0;
|
||||
|
||||
nhUse(glyph);
|
||||
|
||||
@@ -654,6 +657,7 @@ boolean preselected;
|
||||
item->next = (x11_menu_item *) 0;
|
||||
item->identifier = *identifier;
|
||||
item->attr = attr;
|
||||
item->itemflags = itemflags;
|
||||
item->selected = item->preselected = preselected;
|
||||
item->pick_count = -1L;
|
||||
item->window = window;
|
||||
|
||||
@@ -182,7 +182,7 @@ winid window;
|
||||
}
|
||||
|
||||
void
|
||||
chainin_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
chainin_add_menu(window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph; /* glyph to display with item (unused) */
|
||||
const anything *identifier; /* what to return if selected */
|
||||
@@ -190,10 +190,11 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like tty_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* flags such as item is marked as selected
|
||||
MENU_ITEMFLAGS_SELECTED */
|
||||
{
|
||||
(*cibase->nprocs->win_add_menu)(cibase->ndata, window, glyph, identifier,
|
||||
ch, gch, attr, str, preselected);
|
||||
ch, gch, attr, str, itemflags);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -224,7 +224,7 @@ winid window;
|
||||
|
||||
void
|
||||
chainout_add_menu(vp, window, glyph, identifier, ch, gch, attr, str,
|
||||
preselected)
|
||||
itemflags)
|
||||
void *vp;
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph; /* glyph to display with item (unused) */
|
||||
@@ -233,12 +233,12 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like tty_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* itemflags such as marked as selected */
|
||||
{
|
||||
struct chainout_data *tdp = vp;
|
||||
|
||||
(*tdp->nprocs->win_add_menu)(window, glyph, identifier, ch, gch, attr,
|
||||
str, preselected);
|
||||
str, itemflags);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -370,7 +370,7 @@ winid window;
|
||||
}
|
||||
|
||||
void
|
||||
trace_add_menu(vp, window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
trace_add_menu(vp, window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
void *vp;
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph; /* glyph to display with item (unused) */
|
||||
@@ -379,7 +379,7 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like tty_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* itemflags such as marked as selected */
|
||||
{
|
||||
struct trace_data *tdp = vp;
|
||||
|
||||
@@ -400,19 +400,19 @@ boolean preselected; /* item is marked as selected */
|
||||
|
||||
if (str) {
|
||||
fprintf(wc_tracelogf,
|
||||
"%sadd_menu(%d, %d, %p, %s, %s, %d, '%s'(%d), %d)\n", INDENT,
|
||||
"%sadd_menu(%d, %d, %p, %s, %s, %d, '%s'(%d), %u)\n", INDENT,
|
||||
window, glyph, (void *) identifier, buf_ch, buf_gch, attr,
|
||||
str, (int) strlen(str), preselected);
|
||||
str, (int) strlen(str), itemflags);
|
||||
} else {
|
||||
fprintf(wc_tracelogf,
|
||||
"%sadd_menu(%d, %d, %p, %s, %s, %d, NULL, %d)\n", INDENT,
|
||||
"%sadd_menu(%d, %d, %p, %s, %s, %d, NULL, %u)\n", INDENT,
|
||||
window, glyph, (void *) identifier, buf_ch, buf_gch, attr,
|
||||
preselected);
|
||||
itemflags);
|
||||
}
|
||||
|
||||
PRE;
|
||||
(*tdp->nprocs->win_add_menu)(tdp->ndata, window, glyph, identifier, ch,
|
||||
gch, attr, str, preselected);
|
||||
gch, attr, str, itemflags);
|
||||
POST;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ typedef struct nhmi {
|
||||
const char *str; /* Text of menu item */
|
||||
BOOLEAN_P presel; /* Whether menu item should be preselected */
|
||||
boolean selected; /* Whether item is currently selected */
|
||||
unsigned itemflags;
|
||||
int page_num; /* Display page number for entry */
|
||||
int line_num; /* Line number on page where entry begins */
|
||||
int num_lines; /* Number of lines entry uses on page */
|
||||
@@ -586,6 +587,7 @@ curs_new_menu_item(winid wid, const char *str)
|
||||
new_item->str = new_str;
|
||||
new_item->presel = FALSE;
|
||||
new_item->selected = FALSE;
|
||||
new_item->itemflags = MENU_ITEMFLAGS_NONE;
|
||||
new_item->page_num = 0;
|
||||
new_item->line_num = 0;
|
||||
new_item->num_lines = 0;
|
||||
@@ -598,10 +600,11 @@ curs_new_menu_item(winid wid, const char *str)
|
||||
void
|
||||
curses_add_nhmenu_item(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned itemflags)
|
||||
{
|
||||
nhmenu_item *new_item, *current_items, *menu_item_ptr;
|
||||
nhmenu *current_menu = get_menu(wid);
|
||||
boolean presel = (itemflags & MENU_ITEMFLAGS_SELECTED) != 0;
|
||||
|
||||
if (current_menu == NULL) {
|
||||
impossible(
|
||||
@@ -620,7 +623,7 @@ curses_add_nhmenu_item(winid wid, int glyph, const ANY_P *identifier,
|
||||
new_item->group_accel = group_accel;
|
||||
new_item->attr = attr;
|
||||
new_item->presel = presel;
|
||||
|
||||
new_item->itemflags = itemflags;
|
||||
current_items = current_menu->entries;
|
||||
menu_item_ptr = current_items;
|
||||
|
||||
@@ -1549,7 +1552,10 @@ menu_operation(WINDOW * win, nhmenu *menu, menu_op
|
||||
}
|
||||
|
||||
if (menu_item_ptr->identifier.a_void != NULL) {
|
||||
menu_select_deselect(win, menu_item_ptr, operation, current_page);
|
||||
if (operation != INVERT
|
||||
|| menuitem_invert_test(0, menu_item_ptr->itemflags,
|
||||
menu_item_ptr->selected))
|
||||
menu_select_deselect(win, menu_item_ptr, operation, current_page);
|
||||
}
|
||||
|
||||
menu_item_ptr = menu_item_ptr->next_item;
|
||||
|
||||
@@ -15,7 +15,7 @@ int curses_ext_cmd(void);
|
||||
void curses_create_nhmenu(winid wid);
|
||||
void curses_add_nhmenu_item(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned itemflags);
|
||||
void curs_menu_set_bottom_heavy(winid);
|
||||
void curses_finalize_nhmenu(winid wid, const char *prompt);
|
||||
int curses_display_nhmenu(winid wid, int how, MENU_ITEM_P **_selected);
|
||||
|
||||
@@ -744,19 +744,19 @@ curses_character_dialog(const char **choices, const char *prompt)
|
||||
|
||||
identifier.a_int = (count + 1); /* Must be non-zero */
|
||||
curses_add_menu(wid, NO_GLYPH, &identifier, curletter, 0,
|
||||
A_NORMAL, choices[count], FALSE);
|
||||
A_NORMAL, choices[count], MENU_ITEMFLAGS_NONE);
|
||||
used_letters[count] = curletter;
|
||||
}
|
||||
|
||||
/* Random Selection */
|
||||
identifier.a_int = ROLE_RANDOM;
|
||||
curses_add_menu(wid, NO_GLYPH, &identifier, '*', 0, A_NORMAL, "Random",
|
||||
FALSE);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
/* Quit prompt */
|
||||
identifier.a_int = ROLE_NONE;
|
||||
curses_add_menu(wid, NO_GLYPH, &identifier, 'q', 0, A_NORMAL, "Quit",
|
||||
FALSE);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
curses_end_menu(wid, prompt);
|
||||
ret = curses_select_menu(wid, PICK_ONE, &selected);
|
||||
if (ret == 1) {
|
||||
|
||||
@@ -491,7 +491,7 @@ curses_start_menu(winid wid)
|
||||
/*
|
||||
add_menu(winid wid, int glyph, const anything identifier,
|
||||
char accelerator, char groupacc,
|
||||
int attr, char *str, boolean preselected)
|
||||
int attr, char *str, unsigned int itemflags)
|
||||
-- Add a text line str to the given menu window. If identifier
|
||||
is 0, then the line cannot be selected (e.g. a title).
|
||||
Otherwise, identifier is the value returned if the line is
|
||||
@@ -517,12 +517,12 @@ add_menu(winid wid, int glyph, const anything identifier,
|
||||
The menu commands and aliases take care not to interfere
|
||||
with the default object class symbols.
|
||||
-- If you want this choice to be preselected when the
|
||||
menu is displayed, set preselected to TRUE.
|
||||
menu is displayed, set bit MENU_ITEMFLAGS_SELECTED.
|
||||
*/
|
||||
void
|
||||
curses_add_menu(winid wid, int glyph, const ANY_P * identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned itemflags)
|
||||
{
|
||||
int curses_attr;
|
||||
|
||||
@@ -536,7 +536,7 @@ curses_add_menu(winid wid, int glyph, const ANY_P * identifier,
|
||||
}
|
||||
|
||||
curses_add_nhmenu_item(wid, glyph, identifier, accelerator, group_accel,
|
||||
curses_attr, str, presel);
|
||||
curses_attr, str, itemflags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -373,14 +373,17 @@ curses_prev_mesg()
|
||||
for (count = 0; count < num_messages; ++count) {
|
||||
mesg = get_msg_line(do_lifo, count);
|
||||
if (turn != mesg->turn && count != 0) {
|
||||
curses_add_menu(wid, NO_GLYPH, &Id, 0, 0, A_NORMAL, "---", FALSE);
|
||||
curses_add_menu(wid, NO_GLYPH, &Id, 0, 0, A_NORMAL, "---",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
curses_add_menu(wid, NO_GLYPH, &Id, 0, 0, A_NORMAL, mesg->str, FALSE);
|
||||
curses_add_menu(wid, NO_GLYPH, &Id, 0, 0, A_NORMAL, mesg->str,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
turn = mesg->turn;
|
||||
}
|
||||
if (!count)
|
||||
curses_add_menu(wid, NO_GLYPH, &Id, 0, 0, A_NORMAL,
|
||||
"[No past messages available.]", FALSE);
|
||||
"[No past messages available.]",
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
|
||||
curses_end_menu(wid, "");
|
||||
if (!do_lifo)
|
||||
|
||||
@@ -509,7 +509,8 @@ curses_puts(winid wid, int attr, const char *text)
|
||||
return;
|
||||
}
|
||||
Id = cg.zeroany;
|
||||
curses_add_nhmenu_item(wid, NO_GLYPH, &Id, 0, 0, attr, text, FALSE);
|
||||
curses_add_nhmenu_item(wid, NO_GLYPH, &Id, 0, 0, attr, text,
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
} else {
|
||||
waddstr(win, text);
|
||||
wnoutrefresh(win);
|
||||
|
||||
+17
-15
@@ -251,7 +251,7 @@ Gem_player_selection()
|
||||
if (currch == lastch)
|
||||
currch = highc(currch);
|
||||
add_menu(win, roles[i].malenum, &any, currch, 0, ATR_NONE,
|
||||
an(roles[i].name.m), MENU_UNSELECTED);
|
||||
an(roles[i].name.m), MENU_ITEMFLAGS_NONE);
|
||||
lastch = currch;
|
||||
}
|
||||
}
|
||||
@@ -260,10 +260,10 @@ Gem_player_selection()
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrole(FALSE) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
end_menu(win, "Pick a role");
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
destroy_nhwindow(win);
|
||||
@@ -320,17 +320,17 @@ Gem_player_selection()
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, races[i].noun[0], 0,
|
||||
ATR_NONE, races[i].noun, MENU_UNSELECTED);
|
||||
ATR_NONE, races[i].noun, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_race(flags.initrole, flags.initgend,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrace(flags.initrole) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the race of your %s",
|
||||
roles[flags.initrole].name.m);
|
||||
end_menu(win, pbuf);
|
||||
@@ -389,17 +389,17 @@ Gem_player_selection()
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, genders[i].adj[0], 0,
|
||||
ATR_NONE, genders[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, genders[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_gend(flags.initrole, flags.initrace,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randgend(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the gender of your %s %s",
|
||||
races[flags.initrace].adj,
|
||||
roles[flags.initrole].name.m);
|
||||
@@ -458,17 +458,17 @@ Gem_player_selection()
|
||||
flags.initgend, i)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, aligns[i].adj[0], 0,
|
||||
ATR_NONE, aligns[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, aligns[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_align(flags.initrole, flags.initrace,
|
||||
flags.initgend, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randalign(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the alignment of your %s %s %s",
|
||||
genders[flags.initgend].adj,
|
||||
races[flags.initrace].adj,
|
||||
@@ -754,7 +754,7 @@ boolean complain;
|
||||
* later.
|
||||
*/
|
||||
void
|
||||
Gem_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
Gem_add_menu(window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph; /* glyph to display with item (unused) */
|
||||
const anything *identifier; /* what to return if selected */
|
||||
@@ -762,8 +762,9 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like Gem_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* itemflags such as marked as selected */
|
||||
{
|
||||
boolean preselected = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
Gem_menu_item *G_item;
|
||||
const char *newstr;
|
||||
char buf[QBUFSZ];
|
||||
@@ -787,6 +788,7 @@ boolean preselected; /* item is marked as selected */
|
||||
G_item->Gmi_selected = preselected ? 1 : 0;
|
||||
G_item->Gmi_accelerator = ch;
|
||||
G_item->Gmi_groupacc = gch;
|
||||
G_item->Gmi_itemflags = itemflags;
|
||||
G_item->Gmi_attr = attr;
|
||||
G_item->Gmi_str = copy_of(newstr);
|
||||
mar_add_menu(window, G_item);
|
||||
@@ -1014,7 +1016,7 @@ Gem_get_ext_cmd()
|
||||
too_much = FALSE;
|
||||
tmp_acc = *ptr;
|
||||
Gem_add_menu(wind, NO_GLYPH, &any, accelerator, 0, ATR_NONE, ptr,
|
||||
FALSE);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
Gem_end_menu(wind, "What extended command?");
|
||||
count = Gem_select_menu(wind, PICK_ONE, &selected);
|
||||
|
||||
+5
-1
@@ -1783,7 +1783,10 @@ char acc;
|
||||
|
||||
for (curr = invent_list; start-- && curr; curr = curr->Gmi_next)
|
||||
;
|
||||
for (; page-- && curr; curr = curr->Gmi_next)
|
||||
for (; page-- && curr; curr = curr->Gmi_next) {
|
||||
if (!menuitem_invert_test(0, curr->Gmi_itemflags, curr->Gmi_selected)
|
||||
continue;
|
||||
|
||||
if (curr->Gmi_identifier && (acc == 0 || curr->Gmi_groupacc == acc)) {
|
||||
if (curr->Gmi_selected) {
|
||||
curr->Gmi_selected = FALSE;
|
||||
@@ -1791,6 +1794,7 @@ char acc;
|
||||
} else
|
||||
curr->Gmi_selected = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/************************* Inv_Handler and Inv_Init
|
||||
|
||||
+6
-5
@@ -681,10 +681,9 @@ gnome_start_menu(winid wid)
|
||||
/*
|
||||
add_menu(windid window, int glyph, const anything identifier,
|
||||
char accelerator, char groupacc,
|
||||
int attr, char *str, boolean preselected)
|
||||
int attr, char *str, unsigned int itemflags)
|
||||
-- Add a text line str to the given menu window. If
|
||||
identifier
|
||||
is 0, then the line cannot be selected (e.g. a title).
|
||||
identifier is 0, then the line cannot be selected (e.g. a title).
|
||||
Otherwise, identifier is the value returned if the line is
|
||||
selected. Accelerator is a keyboard key that can be used
|
||||
to select the line. If the accelerator of a selectable
|
||||
@@ -708,13 +707,14 @@ identifier
|
||||
The menu commands and aliases take care not to interfere
|
||||
with the default object class symbols.
|
||||
-- If you want this choice to be preselected when the
|
||||
menu is displayed, set preselected to TRUE.
|
||||
menu is displayed, set bit MENU_ITEMFLAGS_SELECTED.
|
||||
*/
|
||||
void
|
||||
gnome_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned int itemflags)
|
||||
{
|
||||
boolean presel = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
GHackMenuItem item;
|
||||
item.glyph = glyph;
|
||||
item.identifier = identifier;
|
||||
@@ -723,6 +723,7 @@ gnome_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
item.attr = attr;
|
||||
item.str = str;
|
||||
item.presel = presel;
|
||||
item.itemflags = itemflags;
|
||||
|
||||
if (wid != -1 && gnome_windowlist[wid].win != NULL) {
|
||||
gtk_signal_emit(GTK_OBJECT(gnome_windowlist[wid].win),
|
||||
|
||||
@@ -18,6 +18,7 @@ struct _GHackMenuItem {
|
||||
CHAR_P accelerator;
|
||||
CHAR_P group_accel;
|
||||
int attr;
|
||||
unsigned itemflags;
|
||||
const char *str;
|
||||
BOOLEAN_P presel;
|
||||
};
|
||||
|
||||
@@ -242,7 +242,7 @@ winid window;
|
||||
* later.
|
||||
*/
|
||||
void
|
||||
safe_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
safe_add_menu(window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph UNUSED; /* glyph to display with item (not used) */
|
||||
const anything *identifier; /* what to return if selected */
|
||||
@@ -250,7 +250,7 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like safe_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* itemflags such as marked as selected */
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
+42
-30
@@ -578,7 +578,7 @@ tty_player_selection()
|
||||
role_menu_extra(ROLE_RANDOM, win, TRUE);
|
||||
any = cg.zeroany; /* separator, not a choice */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
role_menu_extra(RS_RACE, win, FALSE);
|
||||
role_menu_extra(RS_GENDER, win, FALSE);
|
||||
role_menu_extra(RS_ALGNMNT, win, FALSE);
|
||||
@@ -677,7 +677,7 @@ tty_player_selection()
|
||||
role_menu_extra(ROLE_RANDOM, win, TRUE);
|
||||
any.a_int = 0; /* separator, not a choice */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
role_menu_extra(RS_ROLE, win, FALSE);
|
||||
role_menu_extra(RS_GENDER, win, FALSE);
|
||||
role_menu_extra(RS_ALGNMNT, win, FALSE);
|
||||
@@ -770,7 +770,7 @@ tty_player_selection()
|
||||
role_menu_extra(ROLE_RANDOM, win, TRUE);
|
||||
any.a_int = 0; /* separator, not a choice */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
role_menu_extra(RS_ROLE, win, FALSE);
|
||||
role_menu_extra(RS_RACE, win, FALSE);
|
||||
role_menu_extra(RS_ALGNMNT, win, FALSE);
|
||||
@@ -859,7 +859,7 @@ tty_player_selection()
|
||||
role_menu_extra(ROLE_RANDOM, win, TRUE);
|
||||
any.a_int = 0; /* separator, not a choice */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
role_menu_extra(RS_ROLE, win, FALSE);
|
||||
role_menu_extra(RS_RACE, win, FALSE);
|
||||
role_menu_extra(RS_GENDER, win, FALSE);
|
||||
@@ -947,25 +947,25 @@ tty_player_selection()
|
||||
(GEND == 1 && roles[ROLE].name.f) ? roles[ROLE].name.f
|
||||
: roles[ROLE].name.m);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, pbuf,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
/* blank separator */
|
||||
any.a_int = 0;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
/* [ynaq] menu choices */
|
||||
any.a_int = 1;
|
||||
add_menu(win, NO_GLYPH, &any, 'y', 0, ATR_NONE, "Yes; start game",
|
||||
MENU_SELECTED);
|
||||
MENU_ITEMFLAGS_SELECTED);
|
||||
any.a_int = 2;
|
||||
add_menu(win, NO_GLYPH, &any, 'n', 0, ATR_NONE,
|
||||
"No; choose role again", MENU_UNSELECTED);
|
||||
"No; choose role again", MENU_ITEMFLAGS_NONE);
|
||||
if (iflags.renameallowed) {
|
||||
any.a_int = 3;
|
||||
add_menu(win, NO_GLYPH, &any, 'a', 0, ATR_NONE,
|
||||
"Not yet; choose another name", MENU_UNSELECTED);
|
||||
"Not yet; choose another name", MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = -1;
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Is this ok? [yn%sq]", iflags.renameallowed ? "a" : "");
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1040,22 +1040,22 @@ reset_role_filtering()
|
||||
|
||||
/* no extra blank line preceding this entry; end_menu supplies one */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Unacceptable roles", MENU_UNSELECTED);
|
||||
"Unacceptable roles", MENU_ITEMFLAGS_NONE);
|
||||
setup_rolemenu(win, FALSE, ROLE_NONE, ROLE_NONE, ROLE_NONE);
|
||||
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Unacceptable races", MENU_UNSELECTED);
|
||||
"Unacceptable races", MENU_ITEMFLAGS_NONE);
|
||||
setup_racemenu(win, FALSE, ROLE_NONE, ROLE_NONE, ROLE_NONE);
|
||||
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Unacceptable genders", MENU_UNSELECTED);
|
||||
"Unacceptable genders", MENU_ITEMFLAGS_NONE);
|
||||
setup_gendmenu(win, FALSE, ROLE_NONE, ROLE_NONE, ROLE_NONE);
|
||||
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
"Unacceptable alignments", MENU_UNSELECTED);
|
||||
"Unacceptable alignments", MENU_ITEMFLAGS_NONE);
|
||||
setup_algnmenu(win, FALSE, ROLE_NONE, ROLE_NONE, ROLE_NONE);
|
||||
|
||||
end_menu(win, "Pick all that apply");
|
||||
@@ -1118,7 +1118,8 @@ int race, gend, algn; /* all ROLE_NONE for !filtering case */
|
||||
/* !filtering implies reset_role_filtering() where we want to
|
||||
mark this role as preseleted if current filter excludes it */
|
||||
add_menu(win, NO_GLYPH, &any, thisch, 0, ATR_NONE, an(rolenamebuf),
|
||||
(!filtering && !role_ok) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(!filtering && !role_ok)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
lastch = thisch;
|
||||
}
|
||||
}
|
||||
@@ -1152,7 +1153,8 @@ int role, gend, algn;
|
||||
filtering ? this_ch : highc(this_ch),
|
||||
filtering ? highc(this_ch) : 0,
|
||||
ATR_NONE, races[i].noun,
|
||||
(!filtering && !race_ok) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(!filtering && !race_ok)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1183,7 +1185,8 @@ int role, race, algn;
|
||||
filtering ? this_ch : highc(this_ch),
|
||||
filtering ? highc(this_ch) : 0,
|
||||
ATR_NONE, genders[i].adj,
|
||||
(!filtering && !gend_ok) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(!filtering && !gend_ok)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1214,7 +1217,8 @@ int role, race, gend;
|
||||
filtering ? this_ch : highc(this_ch),
|
||||
filtering ? highc(this_ch) : 0,
|
||||
ATR_NONE, aligns[i].adj,
|
||||
(!filtering && !algn_ok) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
(!filtering && !algn_ok)
|
||||
? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1769,7 +1773,10 @@ char acc; /* group accelerator, 0 => all */
|
||||
tty_menu_item *curr;
|
||||
int n;
|
||||
|
||||
for (n = 0, curr = page_start; curr != page_end; n++, curr = curr->next)
|
||||
for (n = 0, curr = page_start; curr != page_end; n++, curr = curr->next) {
|
||||
if (!menuitem_invert_test(0, curr->itemflags, curr->selected))
|
||||
continue;
|
||||
|
||||
if (curr->identifier.a_void && (acc == 0 || curr->gselector == acc)) {
|
||||
if (curr->selected) {
|
||||
curr->selected = FALSE;
|
||||
@@ -1778,6 +1785,7 @@ char acc; /* group accelerator, 0 => all */
|
||||
curr->selected = TRUE;
|
||||
set_item_state(window, n, curr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1804,11 +1812,13 @@ char acc; /* group accelerator, 0 => all */
|
||||
|
||||
if (!on_curr_page && curr->identifier.a_void
|
||||
&& (acc == 0 || curr->gselector == acc)) {
|
||||
if (curr->selected) {
|
||||
curr->selected = FALSE;
|
||||
curr->count = -1;
|
||||
} else
|
||||
if (menuitem_invert_test(0, curr->itemflags, curr->selected)) {
|
||||
if (curr->selected) {
|
||||
curr->selected = FALSE;
|
||||
curr->count = -1;
|
||||
} else
|
||||
curr->selected = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2900,7 +2910,7 @@ winid window;
|
||||
* later.
|
||||
*/
|
||||
void
|
||||
tty_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
|
||||
tty_add_menu(window, glyph, identifier, ch, gch, attr, str, itemflags)
|
||||
winid window; /* window to use, must be of type NHW_MENU */
|
||||
int glyph UNUSED; /* glyph to display with item (not used) */
|
||||
const anything *identifier; /* what to return if selected */
|
||||
@@ -2908,8 +2918,9 @@ char ch; /* keyboard accelerator (0 = pick our own) */
|
||||
char gch; /* group accelerator (0 = no group) */
|
||||
int attr; /* attribute for string (like tty_putstr()) */
|
||||
const char *str; /* menu string */
|
||||
boolean preselected; /* item is marked as selected */
|
||||
unsigned int itemflags; /* itemflags such as MENU_ITEMFLAGS_SELECTED */
|
||||
{
|
||||
boolean preselected = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
register struct WinDesc *cw = 0;
|
||||
tty_menu_item *item;
|
||||
const char *newstr;
|
||||
@@ -2944,6 +2955,7 @@ boolean preselected; /* item is marked as selected */
|
||||
item->identifier = *identifier;
|
||||
item->count = -1L;
|
||||
item->selected = preselected;
|
||||
item->itemflags = itemflags;
|
||||
item->selector = ch;
|
||||
item->gselector = gch;
|
||||
item->attr = attr;
|
||||
@@ -2999,9 +3011,9 @@ const char *prompt; /* prompt to for menu */
|
||||
|
||||
any = cg.zeroany; /* not selectable */
|
||||
tty_add_menu(window, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
tty_add_menu(window, NO_GLYPH, &any, 0, 0, ATR_NONE, prompt,
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
|
||||
/* 52: 'a'..'z' and 'A'..'Z'; avoids selector duplication within a page */
|
||||
|
||||
@@ -308,6 +308,10 @@ mswin_map_stretch(HWND hWnd, LPSIZE map_size, BOOL redraw)
|
||||
data->xFrontTile = (int) ((double) data->xBackTile * data->frontScale);
|
||||
data->yFrontTile = (int) ((double) data->yBackTile * data->frontScale);
|
||||
|
||||
/* ensure front tile is non-zero in size */
|
||||
data->xFrontTile = max(data->xFrontTile, 1);
|
||||
data->yFrontTile = max(data->yFrontTile, 1);
|
||||
|
||||
/* calcuate ASCII cursor height */
|
||||
data->yBlinkCursor = (int) ((double) CURSOR_HEIGHT * data->backScale);
|
||||
data->yNoBlinkCursor = data->yBackTile;
|
||||
|
||||
+8
-2
@@ -34,6 +34,7 @@ typedef struct mswin_menu_item {
|
||||
int attr;
|
||||
char str[NHMENU_STR_SIZE];
|
||||
BOOLEAN_P presel;
|
||||
unsigned int itemflags;
|
||||
int count;
|
||||
BOOL has_focus;
|
||||
} NHMenuItem, *PNHMenuItem;
|
||||
@@ -627,6 +628,7 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||
/* prevent & being interpreted as a mnemonic start */
|
||||
strNsubst(data->menu.items[new_item].str, "&", "&&", 0);
|
||||
data->menu.items[new_item].presel = msg_data->presel;
|
||||
data->menu.items[new_item].itemflags = msg_data->itemflags;
|
||||
|
||||
/* calculate tabstop size */
|
||||
hDC = GetDC(hWnd);
|
||||
@@ -1304,7 +1306,9 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
|
||||
if (data->how == PICK_ANY) {
|
||||
reset_menu_count(hwndList, data);
|
||||
for (i = 0; i < data->menu.size; i++) {
|
||||
SelectMenuItem(hwndList, data, i,
|
||||
if (menuitem_invert_test(0, data->menu.items[i].itemflags,
|
||||
NHMENU_IS_SELECTED(data->menu.items[i])))
|
||||
SelectMenuItem(hwndList, data, i,
|
||||
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0
|
||||
: -1);
|
||||
}
|
||||
@@ -1351,7 +1355,9 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
|
||||
from = max(0, topIndex);
|
||||
to = min(data->menu.size, from + pageSize);
|
||||
for (i = from; i < to; i++) {
|
||||
SelectMenuItem(hwndList, data, i,
|
||||
if (menuitem_invert_test(0, data->menu.items[i].itemflags,
|
||||
NHMENU_IS_SELECTED(data->menu.items[i])))
|
||||
SelectMenuItem(hwndList, data, i,
|
||||
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0
|
||||
: -1);
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ typedef struct mswin_nhmsg_add_menu {
|
||||
int attr;
|
||||
const char *str;
|
||||
BOOLEAN_P presel;
|
||||
unsigned int itemflags;
|
||||
} MSNHMsgAddMenu, *PMSNHMsgAddMenu;
|
||||
|
||||
typedef struct mswin_nhmsg_cursor {
|
||||
|
||||
+18
-16
@@ -429,7 +429,7 @@ prompt_for_player_selection(void)
|
||||
Strcpy(rolenamebuf, roles[i].name.m);
|
||||
}
|
||||
add_menu(win, NO_GLYPH, &any, thisch, 0, ATR_NONE,
|
||||
an(rolenamebuf), MENU_UNSELECTED);
|
||||
an(rolenamebuf), MENU_ITEMFLAGS_NONE);
|
||||
lastch = thisch;
|
||||
}
|
||||
}
|
||||
@@ -438,10 +438,10 @@ prompt_for_player_selection(void)
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrole(FALSE) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick a role for your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -504,17 +504,17 @@ prompt_for_player_selection(void)
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, races[i].noun[0], 0,
|
||||
ATR_NONE, races[i].noun, MENU_UNSELECTED);
|
||||
ATR_NONE, races[i].noun, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_race(flags.initrole, flags.initgend,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randrace(flags.initrole) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the race of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -578,17 +578,17 @@ prompt_for_player_selection(void)
|
||||
flags.initalign)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, genders[i].adj[0], 0,
|
||||
ATR_NONE, genders[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, genders[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_gend(flags.initrole, flags.initrace,
|
||||
flags.initalign, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randgend(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the gender of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -651,17 +651,17 @@ prompt_for_player_selection(void)
|
||||
flags.initgend, i)) {
|
||||
any.a_int = i + 1;
|
||||
add_menu(win, NO_GLYPH, &any, aligns[i].adj[0], 0,
|
||||
ATR_NONE, aligns[i].adj, MENU_UNSELECTED);
|
||||
ATR_NONE, aligns[i].adj, MENU_ITEMFLAGS_NONE);
|
||||
}
|
||||
any.a_int = pick_align(flags.initrole, flags.initrace,
|
||||
flags.initgend, PICK_RANDOM) + 1;
|
||||
if (any.a_int == 0) /* must be non-zero */
|
||||
any.a_int = randalign(flags.initrole, flags.initrace) + 1;
|
||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
any.a_int = i + 1; /* must be non-zero */
|
||||
add_menu(win, NO_GLYPH, &any, 'q', 0, ATR_NONE, "Quit",
|
||||
MENU_UNSELECTED);
|
||||
MENU_ITEMFLAGS_NONE);
|
||||
Sprintf(pbuf, "Pick the alignment of your %s", plbuf);
|
||||
end_menu(win, pbuf);
|
||||
n = select_menu(win, PICK_ONE, &selected);
|
||||
@@ -1095,7 +1095,7 @@ mswin_start_menu(winid wid)
|
||||
/*
|
||||
add_menu(windid window, int glyph, const anything identifier,
|
||||
char accelerator, char groupacc,
|
||||
int attr, char *str, boolean preselected)
|
||||
int attr, char *str, unsigned int itemflags)
|
||||
-- Add a text line str to the given menu window. If
|
||||
identifier
|
||||
is 0, then the line cannot be selected (e.g. a title).
|
||||
@@ -1127,11 +1127,12 @@ identifier
|
||||
void
|
||||
mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel)
|
||||
const char *str, unsigned int itemflags)
|
||||
{
|
||||
logDebug("mswin_add_menu(%d, %d, %p, %c, %c, %d, %s, %d)\n", wid, glyph,
|
||||
boolean presel = ((itemflags & MENU_ITEMFLAGS_SELECTED) != 0);
|
||||
logDebug("mswin_add_menu(%d, %d, %p, %c, %c, %d, %s, %u)\n", wid, glyph,
|
||||
identifier, (char) accelerator, (char) group_accel, attr, str,
|
||||
presel);
|
||||
itemflags);
|
||||
if ((wid >= 0) && (wid < MAXWINDOWS)
|
||||
&& (GetNHApp()->windowlist[wid].win != NULL)) {
|
||||
MSNHMsgAddMenu data;
|
||||
@@ -1143,6 +1144,7 @@ mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
data.attr = attr;
|
||||
data.str = str;
|
||||
data.presel = presel;
|
||||
data.itemflags = itemflags;
|
||||
|
||||
SendMessage(GetNHApp()->windowlist[wid].win, WM_MSNH_COMMAND,
|
||||
(WPARAM) MSNH_MSG_ADDMENU, (LPARAM) &data);
|
||||
|
||||
@@ -128,6 +128,7 @@
|
||||
<ClCompile Include="$(SrcDir)makemon.c" />
|
||||
<ClCompile Include="$(SrcDir)mapglyph.c" />
|
||||
<ClCompile Include="$(SrcDir)mcastu.c" />
|
||||
<ClCompile Include="$(SrcDir)mdlib.c" />
|
||||
<ClCompile Include="$(SrcDir)mhitm.c" />
|
||||
<ClCompile Include="$(SrcDir)mhitu.c" />
|
||||
<ClCompile Include="$(SrcDir)minion.c" />
|
||||
@@ -144,8 +145,9 @@
|
||||
<ClCompile Include="$(SrcDir)mthrowu.c" />
|
||||
<ClCompile Include="$(SrcDir)muse.c" />
|
||||
<ClCompile Include="$(SrcDir)music.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlua.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlobj.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlsel.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlua.c" />
|
||||
<ClCompile Include="$(SrcDir)objects.c" />
|
||||
<ClCompile Include="$(SrcDir)objnam.c" />
|
||||
<ClCompile Include="$(SrcDir)options.c" />
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
<ClCompile Include="$(SrcDir)makemon.c" />
|
||||
<ClCompile Include="$(SrcDir)mapglyph.c" />
|
||||
<ClCompile Include="$(SrcDir)mcastu.c" />
|
||||
<ClCompile Include="$(SrcDir)mdlib.c" />
|
||||
<ClCompile Include="$(SrcDir)mhitm.c" />
|
||||
<ClCompile Include="$(SrcDir)mhitu.c" />
|
||||
<ClCompile Include="$(SrcDir)minion.c" />
|
||||
@@ -138,8 +139,9 @@
|
||||
<ClCompile Include="$(SrcDir)mthrowu.c" />
|
||||
<ClCompile Include="$(SrcDir)muse.c" />
|
||||
<ClCompile Include="$(SrcDir)music.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlua.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlobj.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlsel.c" />
|
||||
<ClCompile Include="$(SrcDir)nhlua.c" />
|
||||
<ClCompile Include="$(SrcDir)objects.c" />
|
||||
<ClCompile Include="$(SrcDir)objnam.c" />
|
||||
<ClCompile Include="$(SrcDir)options.c" />
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ void mswin_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
void mswin_start_menu(winid wid);
|
||||
void mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
const char *str, unsigned int itemflags);
|
||||
void mswin_end_menu(winid wid, const char *prompt);
|
||||
int mswin_select_menu(winid wid, int how, MENU_ITEM_P **selected);
|
||||
void mswin_update_inventory(void);
|
||||
|
||||
Reference in New Issue
Block a user