Merge branch 'NetHack-3.6' into bart-test
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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.");
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1365,7 +1365,7 @@ fumaroles()
|
||||
}
|
||||
}
|
||||
if (snd && !Deaf)
|
||||
Norep("You hear a %swhoosh!", loud ? "loud " : "");
|
||||
Norep("You hear a %swhoosh!", loud ? "loud " : ""); /* Deaf-aware */
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"),
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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," -
|
||||
|
||||
@@ -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
@@ -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++;
|
||||
|
||||
@@ -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,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>
|
||||
|
||||
Reference in New Issue
Block a user