Merge branch 'NetHack-3.6' into bart-test

This commit is contained in:
nhmall
2019-11-11 11:27:50 -05:00
45 changed files with 2062 additions and 1509 deletions
+8 -6
View File
@@ -273,12 +273,14 @@ stat.h
sys/winnt:
(files for Windows 7/8.x/10 version)
Install.nt Makefile.gcc Makefile.msc console.rc
.nethackrc.template 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
.nethackrc.template Install.nt Makefile.gcc
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
util:
(files for all versions)
+28 -3
View File
@@ -16,9 +16,34 @@ the "new features" section.
Below you will find some other general notes that were not considered
spoilers:
* Over 30 refinements to the curses window port.
* Some refinements to status highlights.
* A couple of fixes to prevent potential game crashes.
* Fixed stale 'thrownobj' pointer for returning thrown aklys while engulfed
* Fixed uarmh null pointer dereference if a helm of opposite alignment came
* off due to being polymorphed
* Fixed 'object lost' panic when attempting to crawl of of the water during
* emergency disrobing/dropping
* Running now stops when moving over engravings so you can tell where they are
* Fixed detection of unseen/secret doors which failed to find monsters hiding
* under objects and failed to find monsters hiding at trap locations
* Ensured fatal status conditions made it to disclosure and/or dumplog
* Fixed "Bad fruit #N" warnings when saving bones with 'perm_invent' On
* Fixed it so yellow dragons don't have green breath
* Added several grammar corrections
* Improved recognition of deafness for several situations including the
* playing of musical instruments and bribing negotiations with demon lords
* Fixed ignoring of god's wrath when hero injured himself during altar kick
* Fixed several cases where persistent inventory window was not updated
* Fixed temple priests or shopkeepers moving over other monsters
* Ensured that thrown or kicked objects will end up in bones
* Made water go all the way to the edges of level on the Plane of Water
* Made clouds disrupt line of sight along the edges of the Plane of Air
* Improved and expanded usage of status highlighting percentage rules
* Added more than 15 improvements and fixes to the curses window port
* Added and documented significant changes to default directory choices for
* the Windows platform
* Improved the layout and display of the player selection dialog used on the
* Windows graphical implementation
* Allowed the msdos implementation to build with curses and PDCurses
* Over 100 other fixes and improvements
- - - - - - - - - - -
+6 -25
View File
@@ -1,4 +1,4 @@
# NetHack 3.6 symbols $NHDT-Date: 1571314611 2019/10/17 12:16:51 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.20 $
# NetHack 3.6 symbols $NHDT-Date: 1572892906 2019/11/04 18:41:46 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.21 $
# Copyright (c) 2006 by Michael Allison
# NetHack may be freely redistributed. See license for details.
#
@@ -340,7 +340,7 @@ start: IBMgraphics
S_pool: \xf7 # meta-w, approx. equals
S_ice: \xfa # meta-z, centered dot
S_lava: \xf7 # meta-w, approx. equals
S_vodbridge: \xfa # meta-z, centered dot
S_vodbridge: \xfa # meta-z, centered dot
S_hodbridge: \xfa # meta-z, centered dot
S_water: \xf7 # meta-w, approx. equals
S_vbeam: \xb3 # meta-3, vertical rule
@@ -548,7 +548,8 @@ start: curses
S_tlwall: \xf5 # meta-u, T left
S_trwall: \xf4 # meta-t, T right
S_ndoor: \xfe # meta-z, centered dot
S_tree: \xf1 # plus or minus symbol
S_bars: \xfc # meta-|, not-equals sign (was '#')
S_tree: \xe7 # meta-g, plus or minus sign
S_room: \xfe # meta-z, centered dot
S_corr: \xe1 # meta-a, solid block
S_litcorr: \xe1 # meta-a, solid block
@@ -581,11 +582,12 @@ start: DECgraphics
S_ndoor: \xfe # meta-~, centered dot
S_vodoor: \xe1 # meta-a, solid block
S_hodoor: \xe1 # meta-a, solid block
S_bars: \xfb # meta-{, small pi
S_bars: \xfc # meta-|, not-equals (used to be pi)
S_tree: \xe7 # meta-g, plus-or-minus
S_room: \xfe # meta-~, centered dot
S_upladder: \xf9 # meta-y, less-than-or-equals
S_dnladder: \xfa # meta-z, greater-than-or-equals
S_altar: \xfb # meta-{, pi (used to default to '_')
S_pool: \xe0 # meta-\, diamond
S_ice: \xfe # meta-~, centered dot
S_lava: \xe0 # meta-\, diamond
@@ -604,27 +606,6 @@ start: DECgraphics
S_explode8: \xf3 # meta-s, low horizontal line
finish
#
# This is commented out because specifying alternate default set isn't
# implemented.
#
# DECgraphics_2: underscore (default for altar) can be hard to see if
# hero or highlighted pet is on the spot below (south of) it, making
# it look like part of slightly bigger block cursor. Bars are usually
# within walls and we have something else for doorless doorway so '#'
# for bars shouldn't be mistaken for the corridor symbol even by someone
# used to DECgraphics, at least not often enough to pose a problem.
# The pi symbol is small like lowercase but flat-topped like uppercase
# so could represent a side view of a raised platform or table.
#
# start: DECgraphics_2
# Defaults: DECgraphics # includes 'Handling: DEC'
# Description: variation of DECgraphics (iron bars:#, altar:pi)
# S_bars: '#' # (switch from pi to plain '#')
# S_altar: \xfb # meta-{, pi (switch from underscore)
# finish
#
start: MACgraphics
# Description: (pre-OSX: obsolete?)
# Restrictions: primary
+55 -38
View File
@@ -1,4 +1,4 @@
.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.325 $ $NHDT-Date: 1572735924 2019/11/02 23:05:24 $
.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.329 $ $NHDT-Date: 1573171723 2019/11/08 00:08:43 $
.\"
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -24,7 +24,7 @@
.ds vr "NetHack 3.6
.ds f0 "\*(vr
.ds f1
.ds f2 "November 2, 2019
.ds f2 "November 7, 2019
.
.\" A note on some special characters:
.\" \(lq = left double quote
@@ -511,8 +511,8 @@ information, then let you pick another location;
you to choose another location to examine; \(oq:\(cq will show additional
info, if any, without asking for confirmation.
When picking a location,
pressing the ESC key will terminate this command, or pressing \(oq?\(cq
will give a brief reminder about how it works.
pressing the ESC key will terminate this command, or pressing \(oq?\(cq will
give a brief reminder about how it works.
.lp ""
If the
.op autodescribe
@@ -2625,7 +2625,7 @@ and Mac OS X it is \(lq.nethackrc\(rq in the user's home directory.
The file may not exist, but it is a normal ASCII text file and
can be created with any text editor.
.pg
On Windows, it is \(lq.nethackrc\(rq in
On Windows, it is \(lq.nethackrc\(rq in the folder
\(lq\\%USERPROFILE%\\NetHack\\3.6\(rq. The file may not exist,
but it is a normal ASCII text file can can be created with any
text editor.
@@ -2775,26 +2775,38 @@ Example:
.sd
\f(CRWIZKIT=\(ti/wizkit.txt\fP \" \(ti == '~'
.ed
.lp ""
.pg \" this would look better outdented
Here is a short example of config file contents:
.sd
.
.pg
\ \" dummy paragraph to force some separation [.BR isn't working as intended]
.pg
.SD n \" suppress indentation
Here is an example of configuration file contents:
.ED
.\" [conditional indentation; see description of NETHACKOPTIONS below]
.ds sD i \" assume proportional, indentation acceptable and preferred
.\" Check for fixed-width font; 'f' will be same width as 'F'.
.if (\w'f'p)=(\w'F'p) .ds sD n \" if same width, suppress indentation
.SD \*(sD \" string variable sD will expand to either 'i' or 'n'
.ft CR \" set font to constant-width Roman
# Set your character's role, race, gender, and alignment.
OPTIONS=role:Valkyrie, race:Human, gender:female, align:lawful
#
# Turn on autopickup, set automatically picked up object types
OPTIONS=autopickup,pickup_types:$"=/!?+
# Show colored text if possible
OPTIONS=color
# Show lit corridors differently
OPTIONS=lit_corridor
#
# Map customization
OPTIONS=color # Display things in color if possible
OPTIONS=lit_corridor # Show lit corridors differently
OPTIONS=hilite_pet,hilite_pile
# Replace small punctuation (tick marks) with digits
SYMBOLS=S_boulder:0,S_golem:7
#
# No startup splash screen. Windows GUI only.
OPTIONS=!splash_screen
.ft \" revert to previous font
.ed
.BR 2
.ED
.pg
\ \" another dummy paragraph [.BR 2]
.hn 2
Using the NETHACKOPTIONS environment variable
.pg
@@ -3195,7 +3207,7 @@ Valid settings are:
.sd
.si
.CC 0 "disabled"
.CC 1 "enabled and make OS adjustments to support mouse use in the game"
.CC 1 "enabled and make OS adjustments to support mouse use"
.CC 2 "like 1 but does not make any OS adjustments"
.ei
.ed
@@ -3612,7 +3624,7 @@ used to customize and change the characteristics of the
windowtype that you have chosen.
Character strings that are too long may be truncated.
Not all window ports will adjust for all settings listed
here. You can safely add any of these options to your config
here. You can safely add any of these options to your configuration
file, and if the window port is capable of adjusting 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
@@ -3811,7 +3823,8 @@ May be used to alter the value of keystrokes that the operating system
returns to NetHack to help compensate for international keyboard issues.
OPTIONS=subkeyvalue:171/92
will return 92 to NetHack, if 171 was originally going to be returned.
You can use multiple subkeyvalue statements in the config file if needed.
You can use multiple subkeyvalue statements in the configuration file
if needed.
Cannot be set with the \(oqO\(cq command.
.lp video
Set the video mode used (PC NetHack only).
@@ -3875,12 +3888,12 @@ character in the pattern, specifically:
.ed
The
.op autopickup_exception
rules are processed in the order in which they appear in your config file,
thus allowing a later rule to override an earlier rule.
rules are processed in the order in which they appear in your configuration
file, thus allowing a later rule to override an earlier rule.
.lp ""
Exceptions can be set with the \(oqO\(cq command, but because they are not
included in your config file, they won't be in effect if you save and then
restore your game.
included in your configuration file, they won't be in effect if you save
and then restore your game.
.op autopickup_exception
rules and not saved with the game.
.\" end of ``.lp autopickup_exception'' entry; continue enclosing page...
@@ -3923,8 +3936,8 @@ You can bind multiple keys to the same extended command.
Unbind a key by using \(lqnothing\(rq as the extended command to bind to.
You can also bind the \(lq<esc>\(rq, \(lq<enter>\(rq, and \(lq<space>\(rq keys.
.lp "Menu accelerator keys"
The menu control or accelerator keys can also be rebound via OPTIONS-lines
in the config file.
The menu control or accelerator keys can also be rebound via OPTIONS lines
in the configuration file.
You cannot bind object symbols into menu accelerators.
.lp "Special command keys"
Below are the special commands you can rebind.
@@ -4083,7 +4096,7 @@ Configuring Message Types
You can change the way the messages are shown in the message area, when
the message matches a user-defined pattern.
.pg
In general, the config file entries to configure the message types
In general, the configuration file entries to describe the message types
look like this:
.si
MSGTYPE=type "pattern"
@@ -4123,16 +4136,17 @@ the user is prompted with more-prompt, and a message matching
.\" historical trivia: "You displaced Fido." was the sort of message you
.\" got when swapping places with your pet, but that was changed long ago...
.lp ""
The order of the defined MSGTYPE-lines is important; the last matching
The order of the defined MSGTYPE lines is important; the last matching
rule is used. Put the general case first, exceptions below them.
.hn 2
Configuring Menu Colors
.pg
Some platforms allow you to define colors used in menu lines when the
line matches a user-defined pattern. At this time the tty, win32tty and
win32gui support this.
line matches a user-defined pattern.
At this time the tty, curses, win32tty and
win32gui interfaces support this.
.pg
In general, the config file entries to configure the menu color mappings
In general, the configuration file entries to describe the menu color mappings
look like this:
.si
.lp MENUCOLOR="pattern"=color&attribute
@@ -4175,8 +4189,8 @@ in it will be shown in green color, lines with \(lq\ cursed\ \(rq will be
shown in red, and lines with \(lq\ cursed\ \(rq followed
by \(lq(being worn)\(rq
on the same line will be shown in red color and underlined.
You can have multiple MENUCOLOR entries in your config file,
and the last MENUCOLOR-line in your config file that matches
You can have multiple MENUCOLOR entries in your configuration file,
and the last MENUCOLOR line that matches
a menu line will be used for the line.
.pg
Note that if you intend to have one or more color specifications match
@@ -4192,7 +4206,7 @@ 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.
.pg
The following config file entries are relevant to mapping user sounds
The following configuration file entries are relevant to mapping user sounds
to messages:
.lp SOUNDDIR
The directory that houses the sound files to be played.
@@ -4361,7 +4375,7 @@ is tested; the character's name is ignored.
.ei
.pg
The in-game options menu can help you determine the correct syntax for a
config file.
configuration file.
.pg
The whole feature can be disabled by setting option
.op statushilites
@@ -4397,7 +4411,7 @@ Set the name of the symbol set that you want to load for display
on the rogue level.
.pg
You can also override one or more symbols using the SYMBOLS and
ROGUESYMBOLS config file options.
ROGUESYMBOLS configuration file options.
Symbols are specified as name:value pairs.
Note that
NetHack escape-processes the value string in conventional C fashion.
@@ -4607,11 +4621,13 @@ z S_zruty (zruty)
.\" don't hyphenate file name across lines
.hw sysconf
.pg
Notes: several symbols in this table appear to be blank.
.lp "Notes:"
.lp "*"
Several symbols in this table appear to be blank.
They are the space character, except for S_pet_override
and S_player_override which don't have any default value
and can only be used if enabled in the \(lqsysconf\(rq file.
.pg
.lp "*"
S_rock is misleadingly named; rocks and stones use S_gem.
Statues and boulders are the rock being referred to, but since
version 3.6.0, statues are displayed as the monster they depict.
@@ -5114,7 +5130,7 @@ The NetHack Development Team at the time of release of 3.6.1 consisted of
\fBPat Rankin\fP, \fBDerek S. Ray\fP, \fBAlex Smith\fP,
\fBMike Stephenson\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP.
.pg
In early May 2019, another 320 bug fixes along with some enhancements and
In early May 2019, another 320 bug fixes along with some enhancements and
the adopted curses window port, were released as 3.6.2.
.pg
\fBBart House\fP, who had contributed to the game as a porting team
@@ -5132,7 +5148,7 @@ again to \fBM. Drew Streib\fP and \fBPasi Kallinen\fP for providing a
public NetHack server at nethack.alt.org. Thanks to \fBKeith Simpson\fP
and \fBAndy Thomson\fP for hardfought.org. Thanks to all those
unnamed dungeoneers who invest their time and effort into annual
NetHack tournaments such as Junethack, The November NetHack Tournament
NetHack tournaments such as Junethack, The November NetHack Tournament
and in days past, devnull.net (gone for now, but not forgotten).
.pg
.ce
@@ -5199,3 +5215,4 @@ Izchak Miller Mike Stephenson
.\"Amiga is a trademark of Commodore-Amiga, Inc
.sm "Brand and product names are trademarks or registered trademarks \
of their respective holders."
.\"EOF
+48 -42
View File
@@ -45,7 +45,7 @@
%.au
\author{Original version - Eric S. Raymond\\
(Edited and expanded for 3.6 by Mike Stephenson and others)}
\date{November 2, 2019}
\date{November 7, 2019}
\maketitle
@@ -2044,8 +2044,8 @@ will result in it disappearing from your map, similarly if it is the
one who moved rather than you.
%.pg
However, if you encounter a monster which you can't see or
sense---perhaps it is invisible and has just tapped you on the
However, if you encounter a monster which you can't see or
sense---perhaps it is invisible and has just tapped you on the
noggin---a special ``remembered, unseen monster'' marker will be displayed at
the location where you think it is.
That will persist until you have
@@ -2701,8 +2701,8 @@ you are carrying (shopkeepers aside).
Normally, if you have seen an object at a particular map location and
move to another location where you can't directly see that object any
more, if will continue to be displayed on your map.
That remains the case even if it is not actually there any
more---perhaps a monster has picked it up or it has rotted
That remains the case even if it is not actually there any
more---perhaps a monster has picked it up or it has rotted
away---until you can see or feel that location again.
One notable exception is that if the object gets covered by the
``remembered, unseen monster'' marker.
@@ -2875,7 +2875,7 @@ directory. The file may not exist, but it is a normal ASCII text file and
can be created with any text editor.\\
%.lp ""
On Windows, it is \mbox{``.nethackrc''} in the foler
On Windows, it is \mbox{``.nethackrc''} in the folder
\mbox{{``\%USERPROFILE\%\textbackslash NetHack\textbackslash 3.6''}}. The
file may not exist, but it is a normal ASCII text file and can be created
with any text editor.
@@ -2886,7 +2886,7 @@ If you had not created the configuration file, {\it NetHack\/} will create
the configuration file for you using the default template file.
%.lp ""
On MS-DOS it is \mbox{``defaults.nh''} in the same folder as
On MS-DOS it is \mbox{``defaults.nh''} in the same folder as
\mbox{{\it nethack.exe\/}}.\\
%.lp ""
@@ -3065,7 +3065,7 @@ Example:
%.lp ""
%.pg
Here is a short example of config file contents:
Here is an example of configuration file contents:
%.sd
\begin{verbatim}
# Set your character's role, race, gender, and alignment.
@@ -3073,10 +3073,13 @@ Here is a short example of config file contents:
# Turn on autopickup, set automatically picked up object types
OPTIONS=autopickup,pickup_types:$"=/!?+
# Show colored text if possible
OPTIONS=color
# Show lit corridors differently
OPTIONS=lit_corridor
# Map customization
OPTIONS=color # Display things in color if possible
OPTIONS=lit_corridor # Show lit corridors differently
OPTIONS=hilite_pet,hilite_pile
# Replace small punctuation (tick marks) with digits
SYMBOLS=S_boulder:0,S_golem:7
# No startup splash screen. Windows GUI only.
OPTIONS=!splash_screen
@@ -3518,7 +3521,7 @@ Valid settings are:
%.sd
%.si
{\tt 0} --- disabled\\
{\tt 1} --- enabled and make OS adjustment to support mouse use in the game\\
{\tt 1} --- enabled and make OS adjustment to support mouse use\\
{\tt 2} --- enabled like {\tt 1}, but does not make any OS adjustments\\
%.ei
%.ed
@@ -3997,7 +4000,7 @@ windowtype that you have chosen.
Character strings that are too long may be truncated.
Not all window ports will adjust for all settings listed
here. You can safely add any of these options to your
config file, and if the window port is capable of adjusting
configuration file, and if the window port is capable of adjusting
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
@@ -4254,7 +4257,8 @@ returns to {\it NetHack\/} to help compensate for international keyboard
issues.
OPTIONS=subkeyvalue:171/92
will return 92 to {\it NetHack\/}, if 171 was originally going to be returned.
You can use multiple subkeyvalue statements in the config file if needed.
You can use multiple subkeyvalue statements in the configuration file
if needed.
Cannot be set with the `{\tt O}' command.
%.lp
\item[\ib{video}]
@@ -4324,13 +4328,14 @@ character in the pattern, specifically:
%.ei
%.ed
The {\it autopickup\verb+_+exception\/} rules are processed in the order
in which they appear in your config file, thus allowing a later rule to override
an earlier rule.
The {\it autopickup\verb+_+exception\/} rules are processed in the order
in which they appear in your configuration file, thus allowing a
later rule to override an earlier rule.
%.lp ""
Exceptions can be set with the `{\tt O}' command, but because they are not included
in your config file, they won't be in effect if you save and then restore your game.
Exceptions can be set with the `{\tt O}' command, but because they are not
included in your configuration file, they won't be in effect if you save
and then restore your game.
{\it autopickup\verb+_+exception\/} rules are not saved with the game.
\elist
@@ -4379,8 +4384,9 @@ the ``{\tt <esc>}'', ``{\tt <enter>}'', and ``{\tt <space>}'' keys.
%.lp "Menu accelerator keys"
\item[\tb{Menu accelerator keys}]
The menu control or accelerator keys can also be rebound via OPTIONS-lines
in the config file. You cannot bind object symbols into menu accelerators.
The menu control or accelerator keys can also be rebound via OPTIONS lines
in the configuration file.
You cannot bind object symbols into menu accelerators.
%.lp "Special command keys"
\item[\tb{Special command keys}]
@@ -4550,7 +4556,7 @@ You can change the way the messages are shown in the message area, when
the message matches a user-defined pattern.
%.pg
In general, the config file entries to configure the message types
In general, the configuration file entries to describe the message types
look like this:
\begin{verbatim}
MSGTYPE=type "pattern"
@@ -4588,7 +4594,7 @@ the user is prompted with more-prompt, and a message matching
``You displaced \verb+<+something\verb+>+'' is not shown at all.
%.lp
The order of the defined MSGTYPE-lines is important; the last matching
The order of the defined MSGTYPE lines is important; the last matching
rule is used. Put the general case first, exceptions below them.
%.pg
@@ -4599,11 +4605,12 @@ rule is used. Put the general case first, exceptions below them.
%.pg
Some platforms allow you to define colors used in menu lines when the
line matches a user-defined pattern. At this time the tty, win32tty and
win32gui support this.
line matches a user-defined pattern.
At this time the tty, curses, win32tty and
win32gui interfaces support this.
%.pg
In general, the config file entries to configure the menu color mappings
In general, the configuration file entries to describe the menu color mappings
look like this:
\begin{verbatim}
MENUCOLOR="pattern"=color&attribute
@@ -4655,8 +4662,8 @@ specifies that any menu line with ``~blessed~'' contained
in it will be shown in green color, lines with ``~cursed~'' will be
shown in red, and lines with ``~cursed~'' followed by ``(being worn)''
on the same line will be shown in red color and underlined.
You can have multiple MENUCOLOR entries in your config file,
and the last MENUCOLOR-line in your config file that matches
You can have multiple MENUCOLOR entries in your configuration file,
and the last MENUCOLOR line that matches
a menu line will be used for the line.
%.pg
@@ -4677,7 +4684,7 @@ At this time the Qt port and the win32tty and win32gui ports support the
use of user sounds.
%.pg
The following config file entries are relevant to mapping user sounds
The following configuration file entries are relevant to mapping user sounds
to messages:
\blist{}
@@ -4856,7 +4863,7 @@ is tested; the character's name is ignored.
\elist
The in-game options menu can help you determine the correct syntax for a
config file.
configuration file.
The whole feature can be disable by setting option {\it statushilites} to 0.
@@ -4898,7 +4905,7 @@ on the rogue level.
\elist
You can also override one or more symbols using the {\it SYMBOLS\/} and
{\it ROGUESYMBOLS\/} config file options.
{\it ROGUESYMBOLS\/} configuration file options.
Symbols are specified as {\it name:value\/} pairs.
Note that {\it NetHack\/} escape-processes
the {\it value\/} string in conventional C fashion.
@@ -5098,13 +5105,16 @@ Default & Symbol Name & Description\\
}
\hyphenation{sysconf} %no syllable breaks => don't hyphenate file name
%.pg
Notes: several symbols in this table appear to be blank.
%.lp
Notes:
%.lp "*"
Several symbols in this table appear to be blank.
They are the space character, except for S\verb+_+pet\verb+_+override
and S\verb+_+player\verb+_+override which don't have any default value
and can only be used if enabled in the ``sysconf'' file.
%.pg
%.lp "*"
S\verb+_+rock is misleadingly named; rocks and stones use S\verb+_+gem.
Statues and boulders are the rock being referred to, but since
version 3.6.0, statues are displayed as the monster they depict.
@@ -5720,7 +5730,7 @@ time of release of 3.6.1 consisted of
%.pg
\medskip
In early May 2019, another 320 bug fixes along with some enhancements and
In early May 2019, another 320 bug fixes along with some enhancements and
the adopted curses window port, were released as 3.6.2.
%.pg
@@ -5746,7 +5756,7 @@ again to {\it M. Drew Streib} and {\it Pasi Kallinen} for providing a
public NetHack server at nethack.alt.org. Thanks to {\it Keith Simpson}
and {\it Andy Thomson} for hardfought.org. Thanks to all those
unnamed dungeoneers who invest their time and effort into annual
{\it NetHack\/} tournaments such as {\it Junethack},
{\it NetHack\/} tournaments such as {\it Junethack},
{\it The November NetHack Tournament} and in days past,
{\it devnull.net\/} (gone for now, but not forgotten).
\clearpage
@@ -5755,7 +5765,7 @@ unnamed dungeoneers who invest their time and effort into annual
\section*{Dungeoneers}
%.pg
\nd From time to time, some depraved individual out there in netland sends a
particularly intriguing modification to help out with the game. The
particularly intriguing modification to help out with the game. The
{\it NetHack Development Team} sometimes makes note of the names of the worst
of these miscreants in this, the list of Dungeoneers:
%.sd
@@ -5824,7 +5834,3 @@ Izchak Miller & Mike Stephenson
%\end{flushleft}
\end{document}
+1316 -1250
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -347,7 +347,8 @@
# How the map window is shown? Windows GUI only.
# possible map_mode options include: tiles, ascii4x6,
# ascii6x8, ascii8x8, ascii16x8, ascii7x12, ascii8x12, ascii16x12,
# ascii12x16, ascii10x18, fit_to_screen
# ascii12x16, ascii10x18, fit_to_screen, ascii_fit_to_screen,
# tiles_fit_to_screen
#OPTIONS=map_mode:tiles
# Define alternative file for the files, and the tile size
+43 -21
View File
@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.151 $ $NHDT-Date: 1572530225 2019/10/31 13:57:05 $
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.168 $ $NHDT-Date: 1573290414 2019/11/09 09:06:54 $
This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -152,9 +152,9 @@ zapping self with wand of opening or spell of knock to escape from a pit trap
wielded aklys that returned to hero when thrown while inside an engulfer left
a stale 'thrownobj' pointer that triggered "add_to_minv: obj not free"
panic if same weapon killed any engulfer via melee from inside
uarmh null pointer dereference if a helm of opposite alignment came off due
uarmh null pointer dereference if a helm of opposite alignment came off due
to being polymorphed
verb tense was inappropriate in some messages when a mon/pet had a name
verb tense was inappropriate in some messages when a mon/pet had a name
ending in 's'
orctown booty items should have been initialized in mksobj()
query_category() and whatdoes_help() had early returns which could each leave
@@ -176,7 +176,7 @@ avoid 'object lost' panic when polymorph causes loss of levitation boots or
<shift><letter> running told player about engravings as they were being moved
over but buffered output didn't show it until hero stopped, so it
wasn't possible to tell where they were, unlike all other forms of
multiple movement; stop running if/when an engraving is reached
multiple movement; so stop running if/when an engraving is reached
fix exploding land mine moving ball or chain and causing a sanity error
fix firing attached iron ball when swallowed causing a sanity error
fix vault guard impossible when he could not relocate in certain situation
@@ -212,6 +212,15 @@ when entering Astral level, initial rendering of guardian angel didn't show
it as tame; noticeable if the level was entered with 'hilite_pet' On
fix a leashed pet polymorphed into a long worm staying leashed
prevent leashing unsolid monsters and monsters with no extremities
playing musical instruments gave feedback which ignored deafness
some other deafness-related message corrections
when dipping into holy/unholy water while blind (where the glow message is
suppressed), clear dipped item's bknown flag unless water potion's
bless/curse state is known
playing music while hallucinating: message misspelled "butterflies"
putting on gloves while having slippery fingers transfered slipperiness to
those gloves; taking off slippery gloves directly was disallowed but
losing them in other ways transfered slipperiness to bare fingers
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
@@ -233,8 +242,13 @@ monster throwing from stack of missiles (darts, daggers, spears) would cause
surviving death while polymorphed would yield "You are a <foo>" without
terminating period
'mksobj failure' commit resulted in wrong corpse types for dying monsters
a recent intended sanity check fix inadvertently bypassed placing
a thrown chained ball back onto the floor
a recent intended sanity check fix inadvertently bypassed placing a thrown
chained ball back onto the floor
in symset:curses, symbol S_tree was accidentally set to horizontal line where
plus-or-minus sign was meant; also, change S_bars to not-equals sign
percentage highlighting for Xp broke up/down/changed highlighting for it;
it was flagged as having gone up every time the percentage changed
deaf change to zap_over_floor needed to be restricted to player actions only
curses: sometimes the message window would show a blank line after a prompt
curses: the change to show map in columns 1..79 instead of 2..80 made the
highlight for '@' show up in the wrong place if clipped map had been
@@ -261,6 +275,7 @@ EDIT_GETLIN: using 'O' to set message types or menu colors was overloading the
during repeat prompting
EDIT_GETLIN: for paranoid confirmation, if answer was neither "yes" nor "no",
don't supply the rejected answer as the default when retrying
USE_FCNTL: nethack wasn't closing lock file 'perm'
curses: very tall menus tried to use selector characters a-z, A-Z, and 0-9,
but 0-9 should be reserved for counts and if the display was tall
enough for more than 62 entries, arbitrary ASCII punctuation got used
@@ -275,10 +290,10 @@ curses: support EDIT_GETLIN (but like with tty, it's disabled by default) to
(however, it's skipped if the 'popup_dialog' option is On)
curses: when display windows get reconfigured (after setting align_status,
align_message, statuslines, windowborders or due to external resize),
the message window was being refreshed with the oldest available N
messages rather than most recent N. [Still room for improvement;
when feasible it combines short lines, resulting in N messages on
fewer than N lines and leaving some of the available lines blank.]
the message window was being refreshed with most recent message and
the oldest available N-1 messages rather than next to most recent N-1.
[Still room for improvement when short lines are combined or long
ones are wrapped, where it still shows a subset of N original lines.]
curses: plug memory leak when getting a line of input is cancelled by ESC
curses: after requesting a line of input from player, next line of message
window could end up being skipped
@@ -289,10 +304,10 @@ curses: don't convert ^M (or <return> or <enter> key) into ^J; both ^J and ^M
cause the hero to try to move
curses: draw map in screen columns 1..79 like tty, rather than in 2..80
curses: make text windows wider so that help feedback is more readable
curses: using ':' for search string matching to toggle menu items in a multple
page menu would highlight arbitrary items on the currently visible
page in sync with the lines that matching items had on other pages
curses: when map window was clipped, the 'scrollbars' shown to indicate which
curses: using ':' for toggling menu items which match a search string, in a
multi-page menu it would highlight arbitrary items on the currently
visible page in sync with lines that matched items have on other pages
curses: when map window was clipped, position bars shown to indicate which
part of the map was in view didn't work as intended, always drawing
"*--------------" for horizontal (and comparable '*' with multiple '|'
underneath for vertical) when it meant to show "---******------" if
@@ -306,8 +321,8 @@ curses: disable the attempt to support Ctrl+Left_click as an alternate way
the mouse data passed to nethack didn't match the curses (ncurses on
OSX 10.11) documentation and things didn't work as intended
curses: menu coloring required that both 'menucolors' and 'guicolor' be On;
for menus, override guicolor with more-specific menucolors
curses: support symset:DECgraphics for map display
for menus, ignore 'guicolor' and honor more-specific 'menucolors'
curses: support symset:curses and symset:DECgraphics for map display
curses: enable the 'use_inverse' boolean option (via wincap WC_INVERSE flag)
for extended monster detection and black&white lava; forced to True
to override default of False (for tty's benefit)
@@ -346,13 +361,14 @@ tty: take two, if/when autodecribe feedback wraps past top line, clear
tty: video attributes (bold, inverse, &c) for status highlighting sometimes
were scrambled
unix: sysconf CHECK_PLNAME=1 wouldn't work if attempt to obtain unix username
failed even though it didn't need that username
failed even though it didn't need that to check player character name
unix+curses: startup error only reset terminal for tty; one noticeable
example was answering 'n' to "Destroy old game?"
vms: update install.com to include overlooked file bigrm-10.lev in nh-data.dlb
Windows: some startup error messages were not being delivered successfully
WindowsGUI: player selection dialog box layout was not being adjusted for DPI
Windows: signifiant changes to default directory choices. see documentation
for details.
Windows: significant changes to default directory choices; see documentation
for details
General New Features
@@ -386,20 +402,26 @@ curses+'perm_invent': since persistent inventory is narrow, strip off "a",
curses+'curses': change the curses map display to use new symbol set 'curses'
instead of hard-coded values; it attempts to show IBMgraphics-style
map using DECgraphics characters; DECgraphics can also be used as-is
fulfill a request from a blind player to have a unique overriding SYMBOL for pets
and for the player
fulfill a request from a blind player to have a unique overriding SYMBOL for
pets and for the player
ROGUESYMBOLS can be overridden in config files like SYMBOLS can
in symset:DECgraphics, set S_altar to 'pi' (was default '_'), S_bars to
not-equals sign (was 'pi')
NetHack Community Patches (or Variation) Included
-------------------------------------------------
add a couple of engraving suggestions in pull request #79
chasonr's faster method to write characters to msdos VGA in pull request #220
chasonr's msdos Makefile.gcc pdcurses build changes in pull request #243
autopickup exception priority change in pull request #226
Code Cleanup and Reorganization
-------------------------------
began to add some function caller BREADCRUMBS to aid debugging
flag existing occurrences of "You hear" as "Deaf-aware" to aid in
future maintenance
+7
View File
@@ -47,6 +47,9 @@ nethack \- Exploring The Mazes of Menace
.B \-ibm
]
[
.BR \-\-showpaths
]
[
.BR \-\-version [ :paste ]
]
.PP
@@ -223,6 +226,10 @@ the list of top scorers, and a subdirectory
.I save
where games are saved.
.PP
.B \-\-showpaths
can be used to cause NetHack to show where it is expecting
to find various configuration files.
.PP
.B \-\-version
can be used to cause NetHack to show the version information it
was compiled with, then exit. That will include the
+1 -1
View File
@@ -448,7 +448,7 @@ struct breadcrumbs {
E const char *ARGV0;
#endif
enum earlyarg {ARG_DEBUG, ARG_VERSION
enum earlyarg {ARG_DEBUG, ARG_VERSION, ARG_SHOWPATHS
#ifdef WIN32
,ARG_WINDOWS
#endif
+5 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 extern.h $NHDT-Date: 1571436000 2019/10/18 22:00:00 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.730 $ */
/* NetHack 3.6 extern.h $NHDT-Date: 1573346164 2019/11/10 00:36:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.738 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
@@ -474,6 +474,7 @@ E int NDECL(Helmet_on);
E int FDECL(select_off, (struct obj *));
E int NDECL(take_off);
#endif
E const char *FDECL(fingers_or_gloves, (BOOLEAN_P));
E void FDECL(off_msg, (struct obj *));
E void FDECL(set_wear, (struct obj *));
E boolean FDECL(donning, (struct obj *));
@@ -846,6 +847,7 @@ E void NDECL(really_close);
#ifdef DEBUG
E boolean FDECL(debugcore, (const char *, BOOLEAN_P));
#endif
E void NDECL(reveal_paths);
E boolean FDECL(read_tribute, (const char *, const char *, int,
char *, int, unsigned));
E boolean FDECL(Death_quote, (char *, int));
@@ -1750,6 +1752,7 @@ E int FDECL(rnd_class, (int, int));
E const char *FDECL(suit_simple_name, (struct obj *));
E const char *FDECL(cloak_simple_name, (struct obj *));
E const char *FDECL(helm_simple_name, (struct obj *));
E const char *FDECL(gloves_simple_name, (struct obj *));
E const char *FDECL(mimic_obj_name, (struct monst *));
E char *FDECL(safe_qbuf, (char *, const char *, const char *, struct obj *,
char *(*)(OBJ_P), char *(*)(OBJ_P), const char *));
@@ -1967,6 +1970,7 @@ E void FDECL(make_blinded, (long, BOOLEAN_P));
E void NDECL(toggle_blindness);
E boolean FDECL(make_hallucinated, (long, BOOLEAN_P, long));
E void FDECL(make_deaf, (long, BOOLEAN_P));
E void FDECL(make_glib, (int));
E void NDECL(self_invis_message);
E int NDECL(dodrink);
E int FDECL(dopotion, (struct obj *));
+35 -4
View File
@@ -37,12 +37,41 @@
/* Version 3.6.x */
/* Patch 3, <insert date here>
*
*
* Fixed stale 'thrownobj' pointer for returning thrown aklys while engulfed
* Fixed uarmh null pointer dereference if a helm of opposite alignment came
* off due to being polymorphed
* Fixed 'object lost' panic when attempting to crawl of of the water during
* emergency disrobing/dropping
* Running now stops when moving over engravings so you can tell where they are
* Fixed detection of unseen/secret doors which failed to find monsters hiding
* under objects and failed to find monsters hiding at trap locations
* Ensured fatal status conditions made it to disclosure and/or dumplog
* Fixed "Bad fruit #N" warnings when saving bones with 'perm_invent' On
* Fixed it so yellow dragons don't have green breath
* Added several grammar corrections
* Improved recognition of deafness for several situations including the
* playing of musical instruments and bribing negotiations with demon lords
* Fixed ignoring of god's wrath when hero injured himself during altar kick
* Fixed several cases where persistent inventory window was not updated
* Fixed temple priests or shopkeepers moving over other monsters
* Ensured that thrown or kicked objects will end up in bones
* Made water go all the way to the edges of level on the Plane of Water
* Made clouds disrupt line of sight along the edges of the Plane of Air
* Improved and expanded usage of status highlighting percentage rules
* Added more than 15 improvements and fixes to the curses window port
* Added and documented significant changes to default directory choices for
* the Windows platform
* Improved the layout and display of the player selection dialog used on the
* Windows graphical implementation
* Allowed the msdos implementation to build with curses and PDCurses
* Included over 100 other fixes and improvements as outlined in doc/fixes36.3
*/
/* Patch 2, May 7, 2019
*
* Over 320 bug fixes including a couple of crash bug fixes
* Over 320 bug fixes including a couple of crash bug fixes as outlined in
* doc/fixes36.2
* More than 15 enhancements or improvements
* Ensuring that unix Makefiles do not rely on features unique to gnu make
* Improvements to hilite_status parsing in an effort to ensure that expected
@@ -54,13 +83,15 @@
*/
/* Patch 1, April 27, 2018
* Over four hundred and seventy bug fixes and improvements.
*
* Over four hundred and seventy bug fixes and improvements as outlined in
* doc/fixes36.1
*/
/*
* NetHack 3.6.0, December 7, 2015
*
* Hundreds of bug fixes.
* Hundreds of bug fixes as outlined in doc/fixes36.0.
* Some code reorganization.
* Some new features.
* Variations of some community patches rolled in.
+4
View File
@@ -767,6 +767,7 @@ const char *msg;
static struct early_opt earlyopts[] = {
{ARG_DEBUG, "debug", 5, TRUE},
{ARG_VERSION, "version", 4, TRUE},
{ARG_SHOWPATHS, "showpaths", 9, FALSE},
#ifdef WIN32
{ARG_WINDOWS, "windows", 4, TRUE},
#endif
@@ -845,6 +846,9 @@ enum earlyarg e_arg;
early_version_info(insert_into_pastebuf);
return 2;
}
case ARG_SHOWPATHS: {
return 2;
}
#ifdef WIN32
case ARG_WINDOWS: {
if (extended_opt) {
+15 -11
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 apply.c $NHDT-Date: 1571531886 2019/10/20 00:38:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.279 $ */
/* NetHack 3.6 apply.c $NHDT-Date: 1573346182 2019/11/10 00:36:22 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.283 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -105,8 +105,8 @@ struct obj *obj;
switch (rn2(3)) {
case 2:
old = Glib;
incr_itimeout(&Glib, rn1(10, 3));
old = (Glib & TIMEOUT);
make_glib((int) old + rn1(10, 3)); /* + 3..12 */
Your("%s %s!", makeplural(body_part(HAND)),
(old ? "are filthier than ever" : "get slimy"));
if (is_wet_towel(obj))
@@ -145,8 +145,9 @@ struct obj *obj;
}
if (Glib) {
Glib = 0;
You("wipe off your %s.", makeplural(body_part(HAND)));
make_glib(0);
You("wipe off your %s.",
!uarmg ? makeplural(body_part(HAND)) : gloves_simple_name(uarmg));
if (is_wet_towel(obj))
dry_a_towel(obj, -1, drying_feedback);
return 1;
@@ -2292,17 +2293,19 @@ struct obj *obj;
if (Glib) {
pline("%s from your %s.", Tobjnam(obj, "slip"),
makeplural(body_part(FINGER)));
fingers_or_gloves(FALSE));
dropx(obj);
return;
}
if (obj->spe > 0) {
int oldglib;
if ((obj->cursed || Fumbling) && !rn2(2)) {
consume_obj_charge(obj, TRUE);
pline("%s from your %s.", Tobjnam(obj, "slip"),
makeplural(body_part(FINGER)));
fingers_or_gloves(FALSE));
dropx(obj);
return;
}
@@ -2313,17 +2316,18 @@ struct obj *obj;
return;
consume_obj_charge(obj, TRUE);
oldglib = (int) (Glib & TIMEOUT);
if (otmp != &zeroobj) {
You("cover %s with a thick layer of grease.", yname(otmp));
otmp->greased = 1;
if (obj->cursed && !nohands(youmonst.data)) {
incr_itimeout(&Glib, rnd(15));
make_glib(oldglib + rn1(6, 10)); /* + 10..15 */
pline("Some of the grease gets all over your %s.",
makeplural(body_part(HAND)));
fingers_or_gloves(TRUE));
}
} else {
incr_itimeout(&Glib, rnd(15));
You("coat your %s with grease.", makeplural(body_part(FINGER)));
make_glib(oldglib + rn1(11, 5)); /* + 5..15 */
You("coat your %s with grease.", fingers_or_gloves(TRUE));
}
} else {
if (obj->known)
+9 -3
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 botl.c $NHDT-Date: 1562114350 2019/07/03 00:39:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.146 $ */
/* NetHack 3.6 botl.c $NHDT-Date: 1573178085 2019/11/08 01:54:45 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.148 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Michael Allison, 2006. */
/* NetHack may be freely redistributed. See license for details. */
@@ -142,9 +142,9 @@ do_statusline2()
if (Upolyd)
Sprintf(expr, "HD:%d", mons[u.umonnum].mlevel);
else if (flags.showexp)
Sprintf(expr, "Xp:%u/%-1ld", u.ulevel, u.uexp);
Sprintf(expr, "Xp:%d/%-1ld", u.ulevel, u.uexp);
else
Sprintf(expr, "Exp:%u", u.ulevel);
Sprintf(expr, "Exp:%d", u.ulevel);
xln = strlen(expr);
/* time/move counter */
@@ -850,6 +850,12 @@ boolean *valsetlist;
if (anytype != ANY_MASK32) {
#ifdef STATUS_HILITES
if (chg || *curr->val) {
/* if Xp percentage changed, we set 'chg' to 1 above;
reset that if the Xp value hasn't actually changed
or possibly went down rather than up (level loss) */
if (chg == 1 && fld == BL_XP)
chg = compare_blstats(prev, curr);
curr->hilite_rule = get_hilite(idx, fld,
(genericptr_t) &curr->a,
chg, pc, &color);
+13 -6
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 cmd.c $NHDT-Date: 1572141702 2019/10/27 02:01:42 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.347 $ */
/* NetHack 3.6 cmd.c $NHDT-Date: 1573346187 2019/11/10 00:36:27 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.349 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
@@ -155,7 +155,6 @@ STATIC_PTR int NDECL(wiz_level_change);
STATIC_PTR int NDECL(wiz_show_seenv);
STATIC_PTR int NDECL(wiz_show_vision);
STATIC_PTR int NDECL(wiz_smell);
STATIC_PTR int NDECL(wiz_intrinsic);
STATIC_PTR int NDECL(wiz_show_wmodes);
STATIC_DCL void NDECL(wiz_map_levltyp);
STATIC_DCL void NDECL(wiz_levltyp_legend);
@@ -1485,15 +1484,21 @@ wiz_intrinsic(VOID_ARGS)
= &mons[context.warntype.speciesidx];
}
goto def_feedback;
case GLIB:
/* slippery fingers applies to gloves if worn at the time
so persistent inventory might need updating */
make_glib((int) newtimeout);
goto def_feedback;
case LEVITATION:
case FLYING:
float_vs_flight();
/*FALLTHRU*/
default:
def_feedback:
def_feedback:
pline("Timeout for %s %s %d.", propertynames[i].prop_name,
oldtimeout ? "increased by" : "set to", amt);
incr_itimeout(&u.uprops[p].intrinsic, amt);
if (p != GLIB)
incr_itimeout(&u.uprops[p].intrinsic, amt);
break;
}
context.botl = 1; /* probably not necessary... */
@@ -2472,7 +2477,9 @@ int final;
}
}
if (Glib) {
Sprintf(buf, "slippery %s", makeplural(body_part(FINGER)));
Sprintf(buf, "slippery %s", fingers_or_gloves(TRUE));
if (wizard)
Sprintf(eos(buf), " (%ld)", (Glib & TIMEOUT));
you_have(buf, "");
}
if (Fumbling) {
@@ -5046,7 +5053,7 @@ const char *s;
char dirsym;
int is_mov;
retry:
retry:
if (in_doagain || *readchar_queue)
dirsym = readchar();
else
+60 -12
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 do_wear.c $NHDT-Date: 1570566377 2019/10/08 20:26:17 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.111 $ */
/* NetHack 3.6 do_wear.c $NHDT-Date: 1573346188 2019/11/10 00:36:28 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.113 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -44,6 +44,16 @@ STATIC_PTR int FDECL(accessory_or_armor_on, (struct obj *));
STATIC_DCL void FDECL(already_wearing, (const char *));
STATIC_DCL void FDECL(already_wearing2, (const char *, const char *));
/* plural "fingers" or optionally "gloves" */
const char *
fingers_or_gloves(check_gloves)
boolean check_gloves;
{
return ((check_gloves && uarmg)
? gloves_simple_name(uarmg) /* "gloves" or "gauntlets" */
: makeplural(body_part(FINGER))); /* "fingers" */
}
void
off_msg(otmp)
struct obj *otmp;
@@ -562,6 +572,14 @@ Gloves_off(VOID_ARGS)
context.takeoff.cancelled_don = FALSE;
(void) encumber_msg(); /* immediate feedback for GoP */
/* usually can't remove gloves when they're slippery but it can
be done by having them fall off (polymorph), stolen, or
destroyed (scroll, overenchantment, monster spell); if that
happens, 'cure' slippery fingers so that it doesn't transfer
from gloves to bare hands */
if (Glib)
make_glib(0); /* for update_inventory() */
/* prevent wielding cockatrice when not wearing gloves */
if (uwep && uwep->otyp == CORPSE)
wielding_corpse(uwep, on_purpose);
@@ -1529,7 +1547,15 @@ struct obj *otmp;
boolean use_plural = (is_boots(otmp) || is_gloves(otmp)
|| otmp->otyp == LENSES || otmp->quan > 1L);
You("can't. %s cursed.", use_plural ? "They are" : "It is");
/* might be trying again after applying grease to hands */
if (Glib && otmp->bknown
/* for weapon, we'll only get here via 'A )' */
&& (uarmg ? (otmp == uwep)
: ((otmp->owornmask & (W_WEP | W_RING)) != 0)))
pline("Despite your slippery %s, you can't.",
fingers_or_gloves(TRUE));
else
You("can't. %s cursed.", use_plural ? "They are" : "It is");
set_bknown(otmp, 1);
return 1;
}
@@ -1586,7 +1612,7 @@ struct obj *otmp;
else if (is_shield(otmp))
(void) Shield_off();
else
setworn((struct obj *) 0, otmp->owornmask & W_ARMOR);
(void) Armor_off();
off_msg(otmp);
}
context.takeoff.mask = context.takeoff.what = 0L;
@@ -1736,6 +1762,13 @@ boolean noisy;
You("cannot wear gloves over your %s.",
is_sword(uwep) ? c_sword : c_weapon);
err++;
} else if (Glib) {
/* prevent slippery bare fingers from transferring to
gloved fingers */
if (noisy)
Your("%s are too slippery to pull on %s.",
fingers_or_gloves(FALSE), gloves_simple_name(otmp));
err++;
} else
*mask = W_ARMG;
} else if (is_shirt(otmp)) {
@@ -1833,7 +1866,7 @@ struct obj *obj;
if (uleft && uright) {
There("are no more %s%s to fill.",
humanoid(youmonst.data) ? "ring-" : "",
makeplural(body_part(FINGER)));
fingers_or_gloves(FALSE));
return 0;
}
if (uleft) {
@@ -1860,10 +1893,16 @@ struct obj *obj;
}
} while (!mask);
}
if (uarmg && Glib) {
Your(
"%s are too slippery to remove, so you cannot put on the ring.",
gloves_simple_name(uarmg));
return 1; /* always uses move */
}
if (uarmg && uarmg->cursed) {
res = !uarmg->bknown;
set_bknown(uarmg, 1);
You("cannot remove your gloves to put on the ring.");
You("cannot remove your %s to put on the ring.", c_gloves);
return res; /* uses move iff we learned gloves are cursed */
}
if (uwep) {
@@ -2018,7 +2057,7 @@ doputon()
/* 'P' message doesn't mention armor */
Your("%s%s are full, and you're already wearing an amulet and %s.",
humanoid(youmonst.data) ? "ring-" : "",
makeplural(body_part(FINGER)),
fingers_or_gloves(FALSE),
(ublindf->otyp == LENSES) ? "some lenses" : "a blindfold");
return 0;
}
@@ -2088,7 +2127,7 @@ glibr()
/* changed so cursed rings don't fall off, GAN 10/30/86 */
Your("%s off your %s.",
(leftfall && rightfall) ? "rings slip" : "ring slips",
(leftfall && rightfall) ? makeplural(body_part(FINGER))
(leftfall && rightfall) ? fingers_or_gloves(FALSE)
: body_part(FINGER));
xfl++;
if (leftfall) {
@@ -2210,6 +2249,10 @@ int otyp;
return uarmg;
if (ring->cursed)
return ring;
/* normally outermost layer is processed first, but slippery gloves
wears off quickly so uncurse ring itself before handling those */
if (uarmg && Glib)
return uarmg;
}
/* either no ring or not right type or nothing prevents its removal */
return (struct obj *) 0;
@@ -2238,17 +2281,21 @@ register struct obj *otmp;
/* special ring checks */
if (otmp == uright || otmp == uleft) {
struct obj glibdummy;
if (nolimbs(youmonst.data)) {
pline_The("ring is stuck.");
return 0;
}
glibdummy = zeroobj;
why = 0; /* the item which prevents ring removal */
if (welded(uwep) && (otmp == uright || bimanual(uwep))) {
Sprintf(buf, "free a weapon %s", body_part(HAND));
why = uwep;
} else if (uarmg && uarmg->cursed) {
Sprintf(buf, "take off your %s", c_gloves);
why = uarmg;
} else if (uarmg && (uarmg->cursed || Glib)) {
Sprintf(buf, "take off your %s%s",
Glib ? "slippery " : "", gloves_simple_name(uarmg));
why = !Glib ? uarmg : &glibdummy;
}
if (why) {
You("cannot %s to remove the ring.", buf);
@@ -2264,8 +2311,9 @@ register struct obj *otmp;
set_bknown(uwep, 1);
return 0;
} else if (Glib) {
You_cant("take off the slippery %s with your slippery %s.",
c_gloves, makeplural(body_part(FINGER)));
pline("%s %s are too slippery to take off.",
uarmg->unpaid ? "The" : "Your", /* simplified Shk_Your() */
gloves_simple_name(uarmg));
return 0;
}
}
+10 -3
View File
@@ -1197,9 +1197,16 @@ dokick()
exercise(A_DEX, TRUE);
return 1;
} else if (!rn2(3)) {
pline("Flupp! %s.",
(Blind ? "You hear a sloshing sound"
: "Muddy waste pops up from the drain"));
if (Blind && Deaf)
Sprintf(buf, " %s", body_part(FACE));
else
buf[0] = '\0';
pline("%s%s%s.", !Deaf ? "Flupp! " : "",
!Blind
? "Muddy waste pops up from the drain"
: !Deaf
? "You hear a sloshing sound" /* Deaf-aware */
: "Something splashes you in the", buf);
if (!(maploc->looted & S_LRING)) { /* once per sink */
if (!Blind)
You_see("a ring shining in its midst.");
+4 -5
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 eat.c $NHDT-Date: 1561233801 2019/06/22 20:03:21 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.203 $ */
/* NetHack 3.6 eat.c $NHDT-Date: 1573346189 2019/11/10 00:36:29 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.205 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1378,9 +1378,9 @@ const char *mesg;
if (tintxts[r].greasy) {
/* Assume !Glib, because you can't open tins when Glib. */
incr_itimeout(&Glib, rnd(15));
make_glib(rn1(11, 5)); /* 5..15 */
pline("Eating %s food made your %s very slippery.",
tintxts[r].txt, makeplural(body_part(FINGER)));
tintxts[r].txt, fingers_or_gloves(TRUE));
}
} else { /* spinach... */
@@ -1505,8 +1505,7 @@ struct obj *otmp;
no_opener:
pline("It is not so easy to open this tin.");
if (Glib) {
pline_The("tin slips from your %s.",
makeplural(body_part(FINGER)));
pline_The("tin slips from your %s.", fingers_or_gloves(FALSE));
if (otmp->quan > 1L) {
otmp = splitobj(otmp, 1L);
}
+2 -2
View File
@@ -755,7 +755,7 @@ doengrave()
}
Strcpy(post_engr_text,
(Blind && !Deaf)
? "You hear drilling!"
? "You hear drilling!" /* Deaf-aware */
: Blind
? "You feel tremors."
: IS_GRAVE(levl[u.ux][u.uy].typ)
@@ -792,7 +792,7 @@ doengrave()
doblind = TRUE;
} else
Strcpy(post_engr_text, !Deaf
? "You hear crackling!"
? "You hear crackling!" /* Deaf-aware */
: "Your hair stands up!");
break;
+161 -10
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 files.c $NHDT-Date: 1571347976 2019/10/17 21:32:56 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.254 $ */
/* NetHack 3.6 files.c $NHDT-Date: 1573358489 2019/11/10 04:01:29 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.263 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1644,7 +1644,7 @@ boolean uncomp;
static int nesting = 0;
#if defined(NO_FILE_LINKS) || defined(USE_FCNTL) /* implies UNIX */
static int lockfd; /* for lock_file() to pass to unlock_file() */
static int lockfd = -1; /* for lock_file() to pass to unlock_file() */
#endif
#ifdef USE_FCNTL
struct flock sflock; /* for unlocking, same as above */
@@ -1756,7 +1756,7 @@ int retryct;
return FALSE;
}
#else
register int errnosv = errno;
int errnosv = errno;
switch (errnosv) { /* George Barbanis */
case EEXIST:
@@ -1867,9 +1867,10 @@ const char *filename;
if (nesting == 1) {
#ifdef USE_FCNTL
sflock.l_type = F_UNLCK;
if (fcntl(lockfd, F_SETLK, &sflock) == -1) {
HUP raw_printf("Can't remove fcntl lock on %s.", filename);
(void) close(lockfd);
if (lockfd >= 0) {
if (fcntl(lockfd, F_SETLK, &sflock) == -1)
HUP raw_printf("Can't remove fcntl lock on %s.", filename);
(void) close(lockfd), lockfd = -1;
}
#else
lockname = make_lockname(filename, locknambuf);
@@ -1881,7 +1882,7 @@ const char *filename;
if (unlink(lockname) < 0)
HUP raw_printf("Can't unlink %s.", lockname);
#ifdef NO_FILE_LINKS
(void) nhclose(lockfd);
(void) nhclose(lockfd), lockfd = -1;
#endif
#endif /* UNIX || VMS */
@@ -2020,7 +2021,7 @@ int src;
/* constructed full path names don't need fqname() */
#ifdef VMS
/* no punctuation, so might be a logical name */
set_configfile_name(fqname("nethackini", CONFIGPREFIX, 0));
set_configfile_name("nethackini");
if ((fp = fopenp(configfile, "r")) != (FILE *) 0)
return fp;
set_configfile_name("sys$login:nethack.ini");
@@ -2056,7 +2057,7 @@ int src;
set_configfile_name(tmp_config);
if ((fp = fopenp(configfile, "r")) != (FILE *) 0)
return fp;
/* may be easier for user to edit if filename as '.txt' suffix */
/* may be easier for user to edit if filename has '.txt' suffix */
Sprintf(tmp_config, "%s/%s", envp,
"Library/Preferences/NetHack Defaults.txt");
set_configfile_name(tmp_config);
@@ -3198,7 +3199,13 @@ fopen_sym_file()
{
FILE *fp;
fp = fopen_datafile(SYMBOLS, "r", CONFIGPREFIX);
fp = fopen_datafile(SYMBOLS, "r",
#ifdef WIN32
SYSCONFPREFIX
#else
HACKPREFIX
#endif
);
return fp;
}
@@ -3970,6 +3977,150 @@ boolean wildcards;
#endif /*DEBUG*/
#ifdef UNIX
#ifndef PATH_MAX
#include <limits.h>
#endif
#endif
void
reveal_paths(VOID_ARGS)
{
const char *fqn, *filep;
char buf[BUFSZ];
#if defined(UNIX) || defined(PREFIXES_IN_USE)
char *strp;
#endif
#ifdef UNIX
char *envp, cwdbuf[PATH_MAX];
#endif
#ifdef PREFIXES_IN_USE
int i, maxlen = 0;
raw_print("Variable playground locations:");
for (i = 0; i < PREFIX_COUNT; i++)
raw_printf(" [%-10s]=\"%s\"", fqn_prefix_names[i],
fqn_prefix[i] ? fqn_prefix[i] : "not set");
#endif
/* sysconf file */
#ifdef SYSCF
#ifdef PREFIXES_IN_USE
strp = fqn_prefix_names[SYSCONFPREFIX];
maxlen = BUFSZ - sizeof " (in )";
if (strp && strlen(strp) < (size_t) maxlen)
Sprintf(buf, " (in %s)", strp);
#else
buf[0] = '\0';
#endif
raw_printf("Your system configuration file%s:", buf);
#ifdef SYSCF_FILE
filep = SYSCF_FILE;
#else
filep = "sysconf";
#endif
fqn = fqname(filep, SYSCONFPREFIX, 0);
if (fqn) {
set_configfile_name(fqn);
filep = configfile;
}
raw_printf(" \"%s\"", filep);
#else /* !SYSCF */
raw_printf("No system configuration file.");
#endif /* ?SYSCF */
/* symbols file */
buf[0] = '\0';
#ifndef UNIX
#ifdef PREFIXES_IN_USE
#ifdef WIN32
strp = fqn_prefix_names[SYSCONFPREFIX];
#else
strp = fqn_prefix_names[HACKPREFIX];
#endif /* WIN32 */
maxlen = BUFSZ - sizeof " (in )";
if (strp && strlen(strp) < (size_t) maxlen)
Sprintf(buf, " (in %s)", strp);
#endif /* PREFIXES_IN_USE */
raw_printf("Your game's loadable symbols file%s:", buf);
#endif /* UNIX */
#ifdef UNIX
envp = getcwd(cwdbuf, PATH_MAX);
if (envp) {
raw_print("Your game's loadable symbols file:");
raw_printf(" \"%s/%s\"", envp, SYMBOLS);
}
#else /* UNIX */
filep = SYMBOLS;
#ifdef PREFIXES_IN_USE
#ifdef WIN32
fqn = fqname(filep, SYSCONFPREFIX, 1);
#else
fqn = fqname(filep, HACKPREFIX, 1);
#endif /* WIN32 */
if (fqn)
filep = fqn;
#endif /* PREFIXES_IN_USE */
raw_printf(" \"%s\"", filep);
#endif /* UNIX */
/* personal configuration file */
buf[0] = '\0';
#ifdef PREFIXES_IN_USE
strp = fqn_prefix_names[CONFIGPREFIX];
maxlen = BUFSZ - sizeof " (in )";
if (strp && strlen(strp) < (size_t) maxlen)
Sprintf(buf, " (in %s)", strp);
#endif /* PREFIXES_IN_USE */
raw_printf("Your personal configuration file%s:", buf);
#ifdef UNIX
buf[0] = '\0';
if ((envp = nh_getenv("HOME")) != 0) {
copynchars(buf, envp, (int) sizeof buf - 1 - 1);
Strcat(buf, "/");
}
strp = eos(buf);
copynchars(strp, default_configfile,
(int) (sizeof buf - 1 - strlen(buf)));
#if defined(__APPLE__) /* UNIX+__APPLE__ => MacOSX aka OSX aka macOS */
if (envp) {
if (access(buf, 4) == -1) { /* 4: R_OK, -1: failure */
/* read access to default failed; might be protected excessively
but more likely it doesn't exist; try first alternate:
"$HOME/Library/Pref..."; 'strp' points past '/' */
copynchars(strp, "Library/Preferences/NetHack Defaults",
(int) (sizeof buf - 1 - strlen(buf)));
if (access(buf, 4) == -1) {
/* first alternate failed, try second:
".../NetHack Defaults.txt"; no 'strp', just append */
copynchars(eos(buf), ".txt",
(int) (sizeof buf - 1 - strlen(buf)));
if (access(buf, 4) == -1) {
/* second alternate failed too, so revert to the
original default ("$HOME/.nethackrc") for message */
copynchars(strp, default_configfile,
(int) (sizeof buf - 1 - strlen(buf)));
}
}
}
}
#endif /* __APPLE__ */
raw_printf(" \"%s\"", buf);
#else /* !UNIX */
fqn = (const char *) 0;
#ifdef PREFIXES_IN_USE
fqn = fqname(default_configfile, CONFIGPREFIX, 2);
#endif
raw_printf(" \"%s\"", fqn ? fqn : default_configfile);
#endif /* ?UNIX */
raw_print("");
}
/* ---------- BEGIN TRIBUTE ----------- */
/* 3.6 tribute code
+21 -3
View File
@@ -153,17 +153,35 @@ moverock()
if (mtmp && !noncorporeal(mtmp->data)
&& (!mtmp->mtrapped
|| !(ttmp && is_pit(ttmp->ttyp)))) {
boolean deliver_part1 = FALSE;
if (Blind)
feel_location(sx, sy);
if (canspotmon(mtmp)) {
pline("There's %s on the other side.", a_monnam(mtmp));
deliver_part1 = TRUE;
} else {
You_hear("a monster behind %s.", the(xname(otmp)));
if (!Deaf)
deliver_part1 = TRUE;
map_invisible(rx, ry);
}
if (flags.verbose)
pline("Perhaps that's why %s cannot move it.",
u.usteed ? y_monnam(u.usteed) : "you");
if (flags.verbose) {
char you_or_steed[BUFSZ];
Strcpy(you_or_steed,
u.usteed ? y_monnam(u.usteed) : "you");
pline("%s%s cannot move %s.",
deliver_part1
? "Perhaps that's why "
: "",
deliver_part1
? you_or_steed
: upstart(you_or_steed),
deliver_part1
? "it"
: the(xname(otmp)));
}
goto cannot_push;
}
+2 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 invent.c $NHDT-Date: 1571436003 2019/10/18 22:00:03 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.265 $ */
/* NetHack 3.6 invent.c $NHDT-Date: 1573346190 2019/11/10 00:36:30 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.266 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1719,7 +1719,7 @@ register const char *let, *word;
if (iflags.force_invmenu)
Sprintf(menuquery, "What do you want to %s?", word);
if (!strcmp(word, "grease"))
Sprintf(qbuf, "your %s", makeplural(body_part(FINGER)));
Sprintf(qbuf, "your %s", fingers_or_gloves(FALSE));
else if (!strcmp(word, "write with"))
Sprintf(qbuf, "your %s", body_part(FINGERTIP));
else if (!strcmp(word, "wield"))
+1 -1
View File
@@ -72,7 +72,7 @@ boolean undirected;
pline("%s points %s.", Monnam(mtmp), point_msg);
} else if ((!(moves % 4) || !rn2(4))) {
if (!Deaf)
Norep("You hear a mumbled curse.");
Norep("You hear a mumbled curse."); /* Deaf-aware */
}
}
+1 -1
View File
@@ -1365,7 +1365,7 @@ fumaroles()
}
}
if (snd && !Deaf)
Norep("You hear a %swhoosh!", loud ? "loud " : "");
Norep("You hear a %swhoosh!", loud ? "loud " : ""); /* Deaf-aware */
}
/*
+1 -1
View File
@@ -3762,7 +3762,7 @@ boolean msg; /* "The oldmon turns into a newmon!" */
/* take on the new form... */
set_mon_data(mtmp, mdat);
if (!leashable(mtmp))
if (mtmp->mleashed && !leashable(mtmp))
m_unleash(mtmp, TRUE);
if (emits_light(olddata) != emits_light(mtmp->data)) {
+73 -24
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 music.c $NHDT-Date: 1544442713 2018/12/10 11:51:53 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.57 $ */
/* NetHack 3.6 music.c $NHDT-Date: 1573063606 2019/11/06 18:06:46 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.60 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
@@ -187,8 +187,9 @@ struct monst *bugler; /* monster that played instrument */
mtmp->mstrategy &= ~STRAT_WAITMASK;
if (canseemon(mtmp))
pline("%s is now ready for battle!", Monnam(mtmp));
else
Norep("You hear the rattle of battle gear being readied.");
else if (!Deaf)
Norep("%s the rattle of battle gear being readied.",
"You hear"); /* Deaf-aware */
} else if ((distm = ((bugler == &youmonst)
? distu(mtmp->mx, mtmp->my)
: dist2(bugler->mx, bugler->my, mtmp->mx,
@@ -301,7 +302,7 @@ int force;
/*FALLTHRU*/
case ROOM:
case CORR: /* Try to make a pit */
do_pit:
do_pit:
chasm = maketrap(x, y, PIT);
if (!chasm)
break; /* no pit if portal at that location */
@@ -483,6 +484,7 @@ struct obj *instr;
itmp.otyp -= 1;
mundane = TRUE;
}
#ifdef MAC
mac_speaker(&itmp, "C");
#endif
@@ -509,18 +511,41 @@ struct obj *instr;
if (Hallucination)
mode |= PLAY_HALLU;
if (!rn2(2)) {
/*
* TEMPORARY? for multiple impairments, don't always
* give the generic "it's far from music" message.
*/
/* remove if STUNNED+CONFUSED ever gets its own message below */
if (mode == (PLAY_STUNNED | PLAY_CONFUSED))
mode = !rn2(2) ? PLAY_STUNNED : PLAY_CONFUSED;
/* likewise for stunned and/or confused combined with hallucination */
if (mode & PLAY_HALLU)
mode = PLAY_HALLU;
}
/* 3.6.3: most of these gave "You produce <blah>" and then many of
the instrument-specific messages below which immediately follow
also gave "You produce <something>." That looked strange so we
now use a different verb here */
switch (mode) {
case PLAY_NORMAL:
You("start playing %s.", yname(instr));
break;
case PLAY_STUNNED:
You("produce an obnoxious droning sound.");
if (!Deaf)
You("radiate an obnoxious droning sound.");
else
You_feel("a monotonous vibration.");
break;
case PLAY_CONFUSED:
You("produce a raucous noise.");
if (!Deaf)
You("generate a raucous noise.");
else
You_feel("a jarring vibration.");
break;
case PLAY_HALLU:
You("produce a kaleidoscopic display of floating butterfiles.");
You("disseminate a kaleidoscopic display of floating butterflies.");
break;
/* TODO? give some or all of these combinations their own feedback;
hallucination ones should reference senses other than hearing... */
@@ -529,7 +554,7 @@ struct obj *instr;
case PLAY_CONFUSED | PLAY_HALLU:
case PLAY_STUNNED | PLAY_CONFUSED | PLAY_HALLU:
default:
pline("What you produce is quite far from music...");
pline("What you perform is quite far from music...");
break;
}
#undef PLAY_NORMAL
@@ -541,13 +566,17 @@ struct obj *instr;
case MAGIC_FLUTE: /* Make monster fall asleep */
consume_obj_charge(instr, TRUE);
You("produce %s music.", Hallucination ? "piped" : "soft");
You("%sproduce %s music.", !Deaf ? "" : "seem to ",
Hallucination ? "piped" : "soft");
put_monsters_to_sleep(u.ulevel * 5);
exercise(A_DEX, TRUE);
break;
case WOODEN_FLUTE: /* May charm snakes */
do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25);
pline("%s.", Tobjnam(instr, do_spec ? "trill" : "toot"));
if (!Deaf)
pline("%s.", Tobjnam(instr, do_spec ? "trill" : "toot"));
else
You_feel("%s %s.", yname(instr), do_spec ? "trill" : "toot");
if (do_spec)
charm_snakes(u.ulevel * 3);
exercise(A_DEX, TRUE);
@@ -573,26 +602,38 @@ struct obj *instr;
makeknown(instr->otyp);
break;
case TOOLED_HORN: /* Awaken or scare monsters */
You("produce a frightful, grave sound.");
if (!Deaf)
You("produce a frightful, grave sound.");
else
You("blow into the horn.");
awaken_monsters(u.ulevel * 30);
exercise(A_WIS, FALSE);
break;
case BUGLE: /* Awaken & attract soldiers */
You("extract a loud noise from %s.", yname(instr));
if (!Deaf)
You("extract a loud noise from %s.", yname(instr));
else
You("blow into the bugle.");
awaken_soldiers(&youmonst);
exercise(A_WIS, FALSE);
break;
case MAGIC_HARP: /* Charm monsters */
consume_obj_charge(instr, TRUE);
pline("%s very attractive music.", Tobjnam(instr, "produce"));
if (!Deaf)
pline("%s very attractive music.", Tobjnam(instr, "produce"));
else
You_feel("very soothing vibrations.");
charm_monsters((u.ulevel - 1) / 3 + 1);
exercise(A_DEX, TRUE);
break;
case WOODEN_HARP: /* May calm Nymph */
do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25);
pline("%s %s.", Yname2(instr),
do_spec ? "produces a lilting melody" : "twangs");
if (!Deaf)
pline("%s %s.", Yname2(instr),
do_spec ? "produces a lilting melody" : "twangs");
else
You_feel("soothing vibrations.");
if (do_spec)
calm_nymphs(u.ulevel * 3);
exercise(A_DEX, TRUE);
@@ -613,8 +654,12 @@ struct obj *instr;
break;
case LEATHER_DRUM: /* Awaken monsters */
if (!mundane) {
You("beat a deafening row!");
incr_itimeout(&HDeaf, rn1(20, 30));
if (!Deaf) {
You("beat a deafening row!");
incr_itimeout(&HDeaf, rn1(20, 30));
} else {
You("pound on the drum.");
}
exercise(A_WIS, FALSE);
} else
You("%s %s.",
@@ -685,7 +730,10 @@ struct obj *instr;
*s = 'B';
}
}
You("extract a strange sound from %s!", the(xname(instr)));
You(!Deaf ? "extract a strange sound from %s!"
: "can feel %s emitting vibrations.", the(xname(instr)));
#ifdef UNIX386MUSIC
/* if user is at the console, play through the console speaker */
if (atconsole())
@@ -725,8 +773,8 @@ struct obj *instr;
for (x = u.ux - 1; x <= u.ux + 1; x++)
if (isok(x, y))
if (find_drawbridge(&x, &y)) {
u.uevent.uheard_tune =
2; /* tune now fully known */
/* tune now fully known */
u.uevent.uheard_tune = 2;
if (levl[x][y].typ == DRAWBRIDGE_DOWN)
close_drawbridge(x, y);
else
@@ -759,7 +807,7 @@ struct obj *instr;
if (buf[x] == tune[x]) {
gears++;
matched[x] = TRUE;
} else
} else {
for (y = 0; y < 5; y++)
if (!matched[y] && buf[x] == tune[y]
&& buf[y] != tune[y]) {
@@ -767,8 +815,9 @@ struct obj *instr;
matched[y] = TRUE;
break;
}
}
}
if (tumblers)
if (tumblers) {
if (gears)
You_hear("%d tumbler%s click and %d gear%s turn.",
tumblers, plur(tumblers), gears,
@@ -776,7 +825,7 @@ struct obj *instr;
else
You_hear("%d tumbler%s click.", tumblers,
plur(tumblers));
else if (gears) {
} else if (gears) {
You_hear("%d gear%s turn.", gears, plur(gears));
/* could only get `gears == 5' by playing five
correct notes followed by excess; otherwise,
@@ -791,7 +840,7 @@ struct obj *instr;
} else
return do_improvisation(instr);
nevermind:
nevermind:
pline1(Never_mind);
return 0;
}
+29 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 objnam.c $NHDT-Date: 1571436005 2019/10/18 22:00:05 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.247 $ */
/* NetHack 3.6 objnam.c $NHDT-Date: 1573290418 2019/11/09 09:06:58 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.248 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1059,7 +1059,7 @@ unsigned doname_flags;
Strcat(bp, " (being worn)");
break;
case ARMOR_CLASS:
if (obj->owornmask & W_ARMOR)
if (obj->owornmask & W_ARMOR) {
Strcat(bp, (obj == uskin) ? " (embedded in your skin)"
/* in case of perm_invent update while Wear/Takeoff
is in progress; check doffing() before donning()
@@ -1067,6 +1067,13 @@ unsigned doname_flags;
: doffing(obj) ? " (being doffed)"
: donning(obj) ? " (being donned)"
: " (being worn)");
/* slippery fingers is an intrinsic condition of the hero
rather than extrinsic condition of objects, but gloves
are described as slippery when hero has slippery fingers */
if (obj == uarmg && Glib) /* just appended "(something)",
* change to "(something; slippery)" */
Strcpy(rindex(bp, ')'), "; slippery)");
}
/*FALLTHRU*/
case WEAPON_CLASS:
if (ispoisoned)
@@ -4182,6 +4189,26 @@ struct obj *helmet;
return (helmet && !is_metallic(helmet)) ? "hat" : "helm";
}
/* gloves vs gauntlets; depends upon discovery state */
const char *
gloves_simple_name(gloves)
struct obj *gloves;
{
static const char gauntlets[] = "gauntlets";
if (gloves && gloves->dknown) {
int otyp = gloves->otyp;
struct objclass *ocl = &objects[otyp];
const char *actualn = OBJ_NAME(*ocl),
*descrpn = OBJ_DESCR(*ocl);
if (strstri(objects[otyp].oc_name_known ? actualn : descrpn,
gauntlets))
return gauntlets;
}
return "gloves";
}
const char *
mimic_obj_name(mtmp)
struct monst *mtmp;
+9 -2
View File
@@ -3396,7 +3396,8 @@ boolean tinitial, tfrom_file;
/* WINCAP
*
* map_mode:[tiles|ascii4x6|ascii6x8|ascii8x8|ascii16x8|ascii7x12
* |ascii8x12|ascii16x12|ascii12x16|ascii10x18|fit_to_screen]
* |ascii8x12|ascii16x12|ascii12x16|ascii10x18|fit_to_screen
* |ascii_fit_to_screen|tiles_fit_to_screen]
*/
fullname = "map_mode";
if (match_optname(opts, fullname, sizeof "map_mode" - 1, TRUE)) {
@@ -3404,7 +3405,7 @@ boolean tinitial, tfrom_file;
complain_about_duplicate(opts, 1);
op = string_for_opt(opts, negated);
if (op && !negated) {
if (!strncmpi(op, "tiles", sizeof "tiles" - 1))
if (!strcmpi(op, "tiles"))
iflags.wc_map_mode = MAP_MODE_TILES;
else if (!strncmpi(op, "ascii4x6", sizeof "ascii4x6" - 1))
iflags.wc_map_mode = MAP_MODE_ASCII4x6;
@@ -3427,6 +3428,12 @@ boolean tinitial, tfrom_file;
else if (!strncmpi(op, "fit_to_screen",
sizeof "fit_to_screen" - 1))
iflags.wc_map_mode = MAP_MODE_ASCII_FIT_TO_SCREEN;
else if (!strncmpi(op, "ascii_fit_to_screen",
sizeof "ascii_fit_to_screen" - 1))
iflags.wc_map_mode = MAP_MODE_ASCII_FIT_TO_SCREEN;
else if (!strncmpi(op, "tiles_fit_to_screen",
sizeof "tiles_fit_to_screen" - 1))
iflags.wc_map_mode = MAP_MODE_TILES_FIT_TO_SCREEN;
else {
config_error_add("Unknown %s parameter '%s'", fullname, op);
return FALSE;
+1 -1
View File
@@ -367,7 +367,7 @@ VA_DECL(const char *, line)
else if (Unaware)
YouPrefix(tmp, "You dream that you hear ", line);
else
YouPrefix(tmp, "You hear ", line);
YouPrefix(tmp, "You hear ", line); /* Deaf-aware */
vpline(strcat(tmp, line), VA_ARGS);
VA_END();
}
+3 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 polyself.c $NHDT-Date: 1570230710 2019/10/04 23:11:50 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.134 $ */
/* NetHack 3.6 polyself.c $NHDT-Date: 1573290419 2019/11/09 09:06:59 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.135 $ */
/* Copyright (C) 1987, 1988, 1989 by Ken Arromdee */
/* NetHack may be freely redistributed. See license for details. */
@@ -691,7 +691,7 @@ int mntmp;
}
check_strangling(FALSE); /* maybe stop strangling */
if (nohands(youmonst.data))
Glib = 0;
make_glib(0);
/*
mlvl = adj_lev(&mons[mntmp]);
@@ -967,6 +967,7 @@ break_armor()
You("drop your gloves%s!", uwep ? " and weapon" : "");
drop_weapon(0);
(void) Gloves_off();
/* Glib manipulation (ends immediately) handled by Gloves_off */
dropp(otmp);
}
if ((otmp = uarms) != 0) {
+23 -3
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 potion.c $NHDT-Date: 1570235292 2019/10/05 00:28:12 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.163 $ */
/* NetHack 3.6 potion.c $NHDT-Date: 1573346191 2019/11/10 00:36:31 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.166 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
@@ -440,6 +440,17 @@ boolean talk;
}
}
/* set or clear "slippery fingers" */
void
make_glib(xtime)
int xtime;
{
set_itimeout(&Glib, xtime);
/* may change "(being worn)" to "(being worn; slippery)" or vice versa */
if (uarmg)
update_inventory();
}
void
self_invis_message()
{
@@ -1268,6 +1279,15 @@ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
pline("%s %s.", objphrase, glowcolor);
iflags.last_msg = PLNMSG_OBJ_GLOWS;
targobj->bknown = !Hallucination;
} else {
/* didn't see what happened: forget the BUC state if that was
known unless the bless/curse state of the water is known;
without this, hero would know the new state even without
seeing the glow; priest[ess] will immediately relearn it */
if (!potion->bknown || !potion->dknown)
targobj->bknown = 0;
/* [should the bknown+dknown exception require that water
be discovered or at least named?] */
}
/* potions of water are the only shop goods whose price depends
on their curse/bless state */
@@ -2118,8 +2138,8 @@ dodip()
fire_damage(obj, TRUE, u.ux, u.uy);
} else if (potion->cursed) {
pline_The("potion spills and covers your %s with oil.",
makeplural(body_part(FINGER)));
incr_itimeout(&Glib, d(2, 10));
fingers_or_gloves(TRUE));
make_glib((int) (Glib & TIMEOUT) + d(2, 10));
} else if (obj->oclass != WEAPON_CLASS && !is_weptool(obj)) {
/* the following cases apply only to weapons */
goto more_dips;
+7 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 pray.c $NHDT-Date: 1564532667 2019/07/31 00:24:27 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.117 $ */
/* NetHack 3.6 pray.c $NHDT-Date: 1573346192 2019/11/10 00:36:32 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.118 $ */
/* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
/* NetHack may be freely redistributed. See license for details. */
@@ -494,6 +494,12 @@ int trouble;
impossible("fix_worst_trouble: nothing to uncurse.");
return;
}
if (otmp == uarmg && Glib) {
make_glib(0);
Your("%s are no longer slippery.", gloves_simple_name(uarmg));
if (!otmp->cursed)
break;
}
if (!Blind || (otmp == ublindf && Blindfolded_only)) {
pline("%s %s.",
what ? what : (const char *) Yobjnam2(otmp, "softly glow"),
+3 -2
View File
@@ -2989,8 +2989,9 @@ boolean peaceful, silent;
if (canseemon(shkp)) {
Norep("%s booms: \"%s, you are a thief!\"",
Shknam(shkp), plname);
} else
Norep("You hear a scream, \"Thief!\"");
} else if (!Deaf) {
Norep("You hear a scream, \"Thief!\""); /* Deaf-aware */
}
}
hot_pursuit(shkp);
(void) angry_guards(FALSE);
+4 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 timeout.c $NHDT-Date: 1565574996 2019/08/12 01:56:36 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.92 $ */
/* NetHack 3.6 timeout.c $NHDT-Date: 1573290422 2019/11/09 09:07:02 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.93 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */
@@ -725,6 +725,9 @@ nh_timeout()
case DETECT_MONSTERS:
see_monsters();
break;
case GLIB:
make_glib(0); /* might update persistent inventory */
break;
}
}
+2 -1
View File
@@ -2637,7 +2637,8 @@ register struct monst *mtmp;
a_your[trap->madeby_u]);
}
if (!in_sight && !Deaf)
pline("Kaablamm! You hear an explosion in the distance!");
pline("Kaablamm! %s an explosion in the distance!",
"You hear"); /* Deaf-aware */
blow_up_landmine(trap);
/* explosion might have destroyed a drawbridge; don't
dish out more damage if monster is already dead */
+2 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 write.c $NHDT-Date: 1450261366 2015/12/16 10:22:46 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.17 $ */
/* NetHack 3.6 write.c $NHDT-Date: 1573346194 2019/11/10 00:36:34 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.20 $ */
/* NetHack may be freely redistributed. See license for details. */
#include "hack.h"
@@ -109,7 +109,7 @@ register struct obj *pen;
return 0;
} else if (Glib) {
pline("%s from your %s.", Tobjnam(pen, "slip"),
makeplural(body_part(FINGER)));
fingers_or_gloves(FALSE));
dropx(pen);
return 1;
}
+7 -2
View File
@@ -4441,7 +4441,11 @@ short exploding_wand_typ;
if (is_ice(x, y)) {
melt_ice(x, y, (char *) 0);
} else if (is_pool(x, y)) {
const char *msgtxt = "You hear hissing gas.";
const char *msgtxt = (!Deaf)
? "You hear hissing gas." /* Deaf-aware */
: (type >= 0)
? "That seemed remarkably uneventful."
: (const char *) 0;
if (lev->typ != POOL) { /* MOAT or DRAWBRIDGE_UP */
if (see_it)
@@ -4455,7 +4459,8 @@ short exploding_wand_typ;
if (see_it)
msgtxt = "The water evaporates.";
}
Norep("%s", msgtxt);
if (msgtxt)
Norep("%s", msgtxt);
if (lev->typ == ROOM)
newsym(x, y);
} else if (IS_FOUNTAIN(lev->typ)) {
+15 -7
View File
@@ -332,13 +332,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
@@ -944,7 +948,11 @@ endif
#==========================================
$(O)pdcurses.a : $(PDCLIBOBJS) $(PDCOBJS)
ar rcs $@ $(PDCLIBOBJS) $(PDCOBJS)
ar rcS $@ $(PDCLIBOBJS1)
ar rcS $@ $(PDCLIBOBJS2)
ar rcS $@ $(PDCLIBOBJS3)
ar rcS $@ $(PDCLIBOBJS4)
ar rcs $@ $(PDCOBJS)
#==========================================
# Other Util Dependencies.
+8 -1
View File
@@ -114,11 +114,18 @@ char *argv[];
if (argcheck(argc, argv, ARG_VERSION) == 2)
exit(EXIT_SUCCESS);
if (argcheck(argc, argv, ARG_SHOWPATHS) == 2) {
#ifdef CHDIR
chdirx((char *) 0, 0);
#endif
initoptions();
reveal_paths();
exit(EXIT_SUCCESS);
}
if (argcheck(argc, argv, ARG_DEBUG) == 1) {
argc--;
argv++;
}
if (argc > 1 && !strncmp(argv[1], "-d", 2) && argv[1][2] != 'e') {
/* avoid matching "-dec" for DECgraphics; since the man page
* says -d directory, hope nobody's using -desomething_else
+3 -3
View File
@@ -1,9 +1,9 @@
$ ! vms/install.com -- set up nethack 'playground'
$! $NHDT-Date: 1542388600 2018/11/16 17:16:40 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.11 $
$! $NHDT-Date: 1573172443 2019/11/08 00:20:43 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.12 $
$! Copyright (c) 2016 by Robert Patrick Rankin
$! NetHack may be freely redistributed. See license for details.
$ !
$ ! $NHDT-Date: 1542388600 2018/11/16 17:16:40 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.11 $
$ ! $NHDT-Date: 1573172452 2019/11/08 00:20:52 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.12 $
$ !
$ ! Use vmsbuild.com to create nethack.exe, makedefs, and lev_comp *first*.
$ !
@@ -35,7 +35,7 @@ $ sysconf_file = "[.sys.vms]sysconf"
$ guidebook = "[.doc]Guidebook.txt"
$ invoc_proc = "[.sys.vms]nethack.com"
$ trmcp_file = "[.sys.share]termcap"
$ spec_files = "AIR.LEV,ASMODEUS.LEV,ASTRAL.LEV,BAALZ.LEV,BIGRM-%.LEV," -
$ spec_files = "AIR.LEV,ASMODEUS.LEV,ASTRAL.LEV,BAALZ.LEV,BIGRM-*.LEV," -
+ "CASTLE.LEV,EARTH.LEV,FAKEWIZ%.LEV,FIRE.LEV," -
+ "JUIBLEX.LEV,KNOX.LEV,MEDUSA-%.LEV,MINEFILL.LEV," -
+ "MINETN-%.LEV,MINEND-%.LEV,ORACLE.LEV,ORCUS.LEV," -
+2 -1
View File
@@ -104,7 +104,8 @@ OPTIONS=suppress_alert:3.3.1
# Map window settings
# possible map_mode options include: tiles|ascii4x6|ascii6x8|ascii8x8|ascii16x8|
# ascii7x12|ascii8x12|ascii16x12|ascii12x16|
# ascii10x18|fit_to_screen
# ascii10x18|fit_to_screen|ascii_fit_to_screen|
# tiles_fit_to_screen
OPTIONS=map_mode:tiles,scroll_margin:10
# Message window settings
+11 -1
View File
@@ -12,6 +12,9 @@
#include <sys\stat.h>
#include <errno.h>
#include <ShlObj.h>
#if !defined(VERSION_MAJOR)
#include "patchlevel.h"
#endif
#if !defined(SAFEPROCS)
#error You must #define SAFEPROCS to build windmain.c
@@ -104,7 +107,8 @@ build_known_folder_path(
strcat(path, "\\NetHack\\");
create_directory(path);
if (versioned) {
strcat(path, "3.6\\");
Sprintf(eos(path), "%d.%d\\",
VERSION_MAJOR, VERSION_MINOR);
create_directory(path);
}
}
@@ -160,6 +164,7 @@ set_default_prefix_locations(const char *programPath)
static char versioned_profile_path[MAX_PATH];
static char versioned_user_data_path[MAX_PATH];
static char versioned_global_data_path[MAX_PATH];
static char versioninfo[20];
strcpy(executable_path, get_executable_path());
append_slash(executable_path);
@@ -542,6 +547,11 @@ char *argv[];
if (argcheck(argc, argv, ARG_VERSION) == 2)
nethack_exit(EXIT_SUCCESS);
if (argcheck(argc, argv, ARG_SHOWPATHS) == 2) {
initoptions();
reveal_paths();
nethack_exit(EXIT_SUCCESS);
}
if (argcheck(argc, argv, ARG_DEBUG) == 1) {
argc--;
argv++;
+1
View File
@@ -259,6 +259,7 @@ NHSplashWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCANCEL:
case IDOK:
mswin_window_mark_dead(mswin_winid_from_handle(hWnd));
if (GetNHApp()->hMainWnd == hWnd)
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
<Identity Name="30485NetHackDevTeam.NetHack3.6" Publisher="CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F" Version="363.0.20.0" />
<Identity Name="30485NetHackDevTeam.NetHack3.6" Publisher="CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F" Version="363.0.21.0" />
<Properties>
<DisplayName>NetHack 3.6</DisplayName>
<PublisherDisplayName>NetHack DevTeam</PublisherDisplayName>