Merge branch 'NetHack-3.6.0'

This commit is contained in:
nhmall
2015-12-17 08:45:19 -05:00
47 changed files with 583 additions and 301 deletions

28
Files
View File

@@ -86,7 +86,7 @@ wield.c windows.c wizard.c worm.c worn.c
write.c zap.c
sys/amiga:
(files for Amiga versions - untested for 3.6.0)
(files for Amiga versions - untested for 3.6.1)
Build.ami Install.ami Makefile.agc Makefile.ami NetHack.cnf
amidos.c amidos.p amifont.uu amifont8.uu amigst.c
amii.hlp amimenu.c amirip.c amisnd.c amistack.c
@@ -97,12 +97,12 @@ winfuncs.c winkey.c winmenu.c winproto.h winreq.c
winstr.c xpm2iff.c
sys/atari:
(files for Atari version - untested for 3.6.0)
(files for Atari version - untested for 3.6.1)
Install.tos atarifnt.uue nethack.mnu setup.g tos.c
unx2atar.sed
sys/be:
(files for BeOS version - untested for 3.6.0)
(files for BeOS version - untested for 3.6.1)
README bemain.c
sys/mac:
@@ -115,7 +115,7 @@ macwin.c mgetline.c mmodal.c mrecover.c mrecover.hqx
mttymain.c
sys/msdos:
(files for MSDOS version - untested for 3.6.0)
(files for MSDOS version - untested for 3.6.1)
Install.dos Makefile.BC Makefile.GCC Makefile.MSC moveinit.pat
msdos.c msdoshlp.txt ovlinit.c pckeys.c pctiles.c
pctiles.h pcvideo.h portio.h schema1.BC schema2.BC
@@ -125,17 +125,17 @@ video.c vidtxt.c vidvga.c
nhico.uu nhpif.uu
sys/os2:
(files for OS/2 version - untested for 3.6.0)
(files for OS/2 version - untested for 3.6.1)
Install.os2 Makefile.os2 nhpmico.uu os2.c
sys/share:
(files for MSDOS and OS/2 versions - untested for 3.6.0)
(files for MSDOS and OS/2 versions - untested for 3.6.1)
Makefile.lib termcap.uu
(file for MSDOS, OS/2, NT, Amiga, and Atari versions - untested for 3.6.0)
(file for MSDOS, OS/2, NT, Amiga, and Atari versions - untested for 3.6.1)
pcmain.c
(files for MSDOS, OS/2, NT, and Atari versions - untested for 3.6.0)
(files for MSDOS, OS/2, NT, and Atari versions - untested for 3.6.1)
pcsys.c pcunix.c
(file for MSDOS, OS/2, and Atari versions - untested for 3.6.0)
(file for MSDOS, OS/2, and Atari versions - untested for 3.6.1)
NetHack.cnf pctty.c
(files for UNIX and Be versions)
ioctl.c unixtty.c
@@ -189,7 +189,7 @@ spec_lev.com sysconf vmsbuild.com vmsfiles.c vmsmail.c
vmsmain.c vmsmisc.c vmstty.c vmsunix.c
sys/wince:
(files for Windows CE and PocketPC - untested for 3.6.0)
(files for Windows CE and PocketPC - untested for 3.6.1)
Install.ce bootstrp.mak celib.c cesetup.bat cesound.c
defaults.nh keypad.uu menubar.uu mhaskyn.c mhaskyn.h
mhcmd.c mhcmd.h mhcolor.c mhcolor.h mhdlg.c
@@ -202,11 +202,11 @@ resource.h winMS.h winhack.c winhack.rc winhcksp.rc
winmain.c
sys/wince/ceinc:
(header files for Windows CE and PocketPC - untested for 3.6.0)
(header files for Windows CE and PocketPC - untested for 3.6.1)
assert.h errno.h fcntl.h
sys/wince/ceinc/sys:
(sys/stat.h for Windows CE and PocketPC - untested for 3.6.0)
(sys/stat.h for Windows CE and PocketPC - untested for 3.6.1)
stat.h
sys/winnt:
@@ -242,13 +242,13 @@ win/chain:
wc_chainin.c wc_chainout.c wc_trace.c
win/gem:
(files for GEM versions - untested for 3.6.0)
(files for GEM versions - untested for 3.6.1)
Install.gem bitmfile.c gem_rsc.uu gem_rso.uu gr_rect.c
gr_rect.h load_img.c tile2img.c title.uu wingem.c
wingem1.c xpm2img.c
win/gnome:
(files for GNOME versions - untested for 3.6.0)
(files for GNOME versions - untested for 3.6.1)
README gn_xpms.h gnaskstr.c gnaskstr.h gnbind.c
gnbind.h gnglyph.c gnglyph.h gnmain.c gnmain.h
gnmap.c gnmap.h gnmenu.c gnmenu.h gnmesg.c

6
README
View File

@@ -1,13 +1,13 @@
NetHack 3.6.0 -- General information
NetHack 3.6.1 -- General information
NetHack 3.6 is an enhancement to the dungeon exploration game NetHack.
It is a distant descendent of Rogue and Hack, and a direct descendent of
NetHack 3.4. In order to avoid confusion with interim development code
that was posted online in 2014 by others, there is no NetHack 3.5 release.
NetHack 3.6.0 contains some code reorganization, new features, and bugfixes.
NetHack 3.6.1 contains several dozen bugfixes.
The file doc/fixes36.0 in the source distribution has a full list of each.
The file doc/fixes36.1 in the source distribution has a full list of each.
The text in there was written for the development team's own use and is
provided "as is", so please do not ask us to further explain the entries
in that file. Some entries might be considered "spoilers", particularly

View File

@@ -184,25 +184,30 @@ with some of the beloved community patches. Many bugs were fixed and some
code was restructured.
The development team, as well as Steve VanDevender and Kevin Smolkowski
ensured that NetHack 3.6.0 continued to operate on various Unix flavors
ensured that NetHack 3.6 continued to operate on various Unix flavors
as well as maintaining the X11 interface.
Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port
of NetHack 3.6.0 for Mac.
of NetHack 3.6 for Mac.
Michael Allison, Derek S. Ray, Yitzhak Sapir, Alex Kompel, Dion Nicolaas,
and David Cohrs maintained the port of NetHack 3.6.0 for Microsoft Windows.
and David Cohrs maintained the port of NetHack 3.6 for Microsoft Windows.
Pat Rankin attempted to keep the VMS port running for NetHack 3.6.0,
Pat Rankin attempted to keep the VMS port running for NetHack 3.6,
hindered by limited access. Kevin Smolkowski has updated and tested it
for the most recent version of OpenVMS (V8.4 as of this writing) on Alpha
and Integrity (aka Itanium aka IA64) but not VAX.
This version of the game is special in a particular way. Near the end of
the development of 3.6, one of the significant inspirations for many of
The 3.6 version of the game is special in a particular way. Near the end of
the development of 3.6.0, one of the significant inspirations for many of
the humorous and fun features found in the game, author Terry Pratchett,
passed away. This version of the game includes a tribute to him.
passed away. The 3.6 version of the game includes a tribute to him.
The 3.6 development team consisting of Michael Allison, Warwick Allison,
Ken Arromdee, David Cohrs, Jessie Collet, Sean Hunt, Pasi Kallinen,
Ken Lorber, Dean Luick, Pat Rankin, Derek Ray, Mike Stephenson,
Janet Walz, and Paul Winner released 3.6.1 as a bug fix release in
January 2016.
An official NetHack web site continues to be maintained by Ken Lorber at
http://www.nethack.org/.

View File

@@ -2,6 +2,7 @@ Boolean options not under specific compile flags (with default values in []):
(You can learn which options exist in your version by checking your current
option setting, which is reached via the 'O' cmd.)
autodescribe describe the terrain under cursor [FALSE]
autodig dig if moving and wielding digging tool [FALSE]
autoopen walking into a door attempts to open it [TRUE]
autopickup automatically pick up objects you move over [TRUE]

View File

@@ -156,6 +156,7 @@ Some questions the Sphynx asks just *don't* have any answers.
Sometimes "mu" is the answer.
Sorry, no fortune this time. Better luck next cookie!
Spare your scrolls of make-edible until it's really necessary!
Sticks and stones may break your bones but manes will never hurt you.
Stormbringer doesn't steal souls. People steal souls.
Suddenly, the dungeon will collapse...
Taming a mail daemon may cause a system security violation.
@@ -165,6 +166,7 @@ The longer the wand the better.
The magic word is "XYZZY".
The meek shall inherit your bones files.
The mines are dark and deep, and I have levels to go before I sleep.
The more you use the E word, the better.
The use of dynamite is dangerous.
There are no worms in the UNIX version.
There is a trap on this level!

View File

@@ -10,17 +10,19 @@
#
#
%title The Colour of Magic (2)
# p. 67 (Signet edition)
%passage 1
It has been remarked before that those who are sensitive to radiation in
the far octarine - the eighth colour, the pigment of the Imagination - can
It has been remarked before that those who are sensitive to radiations in
the far octarine--the eighth colour, the pigment of the Imagination--can
see things that others cannot.
Thus it was that Rincewind, hurrying through the crowded, flare-lit,
evening bazarrs of Morpork with the Luggage trundling behind him, jostled a
tall figure, turned to deliver a few suitable curses, and beheld Death.
evening bazaars of Morpork with the Luggage trundling behind him, jostled
a tall dark figure, turned to deliver a few suitable curses, and beheld
Death.
It had to be Death. No-one else went around with empty eye sockets and, of
course, the scythe over one shoulder was another clue.
It had to be Death. No-one else went around with empty eye sockets and,
of course, the scythe over one shoulder was another clue. [...]
[The Colour of Magic, by Terry Pratchett]
%e passage 1

View File

@@ -1,11 +1,11 @@
.\" $NHDT-Branch: master $:$NHDT-Revision: 1.188 $ $NHDT-Date: 1449420465 2015/12/06 16:47:45 $
.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.191 $ $NHDT-Date: 1450306152 2015/12/16 22:49:12 $
.ds h0 "NetHack Guidebook
.ds h1
.ds h2 %
.ds vr "NetHack 3.6
.ds f0 "\*(vr
.ds f1
.ds f2 "December 7, 2015
.ds f2 "December 16, 2015
.\" labeled paragraph start (should be part of tmac.n, but I don't want to
.\" make changes to that file)
.\" .PS word
@@ -1970,6 +1970,9 @@ The default is to randomly pick an appropriate alignment.
If you prefix a `!' or ``no'' to the value, you can
exclude that alignment from being picked randomly.
Cannot be set with the `O' command. Persistent.
.lp autodescribe
Automatically describe the terrain under cursor when asked to get a location
on the map.
.lp autodig
Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). Persistent.
@@ -2456,7 +2459,8 @@ alert notification messages about feature changes for that
and prior versions (ex. ``suppress_alert:3.3.1'').
.lp symset
This option may be used to select one of the named symbol sets found within
``symbols'' to alter the symbols displayed on the screen.
``symbols'' to alter the symbols displayed on the screen.
Use ``symset:default'' to explicitly select the default symbols.
.lp "time "
Show the elapsed game time in turns on bottom line (default off). Persistent.
.lp timed_delay
@@ -2667,7 +2671,8 @@ Regular expressions are normally POSIX extended regular expressions. It is
possible to compile NetHack without regular expression support on a platform
where there is no regular expression library. While this is not true of any
modern platform, if your NetHack was built this way, patterns are instead glob
patterns.
patterns. This applies to Autopickup exceptions, Message types, Menu colors,
and User sounds.
.hn 2
Configuring Autopickup Exceptions
.pg
@@ -3481,15 +3486,22 @@ with some of the beloved community patches. Many bugs were fixed and a
large amount of code was restructured.
.pg
\fBThe development team, as well as \fBSteve VanDevender\fP and
\fBKevin Smolkowski\fP ensured that NetHack 3.6.0 continued to operate on
\fBKevin Smolkowski\fP ensured that NetHack 3.6 continued to operate on
various Unix flavors and maintained the X11 interface.
.pg
\fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP
maintained the port of NetHack 3.6.0 for Mac.
maintained the port of NetHack 3.6 for Mac.
.pg
\fBMichael Allison\fP, \fBDerek S. Ray\fP, \fBYitzhak Sapir\fP,
\fBAlex Kompel\fP, and \fBDion Nicolaas\fP maintained the port of
NetHack 3.6.0 for Microsoft Windows.
NetHack 3.6 for Microsoft Windows.
.pg
The 3.6 development team consisting of
\fBMichael Allison\fP, \fBWarwick Allison\fP, \fBKen Arromdee\fP,
\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSean Hunt\fP,
\fBPasi Kallinen\fP, \fBKen Lorber\fP, \fBDean Luick\fP, \fBPat Rankin\fP,
\fBMike Stephenson\fP, \fBDerek S. Ray\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP
released 3.6.1 as a bug fix release in January 2016.
.pg
The official NetHack web site is maintained by \fBKen Lorber\fP at http://www.nethack.org/.
.pg

View File

@@ -1,5 +1,5 @@
\documentstyle[titlepage,longtable]{article}
% NetHack 3.6 Guidebook.tex $NHDT-Date: 1431192762 2015/05/09 17:32:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.60 $ */
% NetHack 3.6 Guidebook.tex $NHDT-Date: 1431192762 2015/12/16 17:32:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.60 $ */
%+% we're still limping along in LaTeX 2.09 compatibility mode
%-%\documentclass{article}
%-%\usepackage{hyperref} % before longtable
@@ -45,7 +45,7 @@
%.au
\author{Original version - Eric S. Raymond\\
(Edited and expanded for 3.6 by Mike Stephenson and others)}
\date{December 7, 2015}
\date{December 16, 2015}
\maketitle
@@ -2377,6 +2377,10 @@ If you prefix `{\tt !}' or ``{\tt no}'' to the value, you can
exclude that alignment from being picked randomly.
Cannot be set with the `{\tt O}' command. Persistent.
%.lp
\item[\ib{autodescribe}]
Automatically describe the terrain under cursor when asked to get a location
on the map.
%.lp
\item[\ib{autodig}]
Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). Persistent.
@@ -2944,6 +2948,7 @@ and prior versions (ex.\ ``{\tt suppress\verb+_+alert:3.3.1}'')
\item[\ib{symset}]
This option may be used to select one of the named symbol sets found within
{\tt symbols} to alter the symbols displayed on the screen.
Use ``{\tt symset:default}'' to explicitly select the default symbols.
%.lp
\item[\ib{time}]
Show the elapsed game time in turns on bottom line (default off). Persistent.
@@ -3223,7 +3228,8 @@ Regular expressions are normally POSIX extended regular expressions. It is
possible to compile NetHack without regular expression support on a platform where
there is no regular expression library. While this is not true of any modern
platform, if your NetHack was built this way, patterns are instead glob
patterns.
patterns. This applies to Autopickup exceptions, Message types, Menu colors,
and User sounds.
%.hn 2
\subsection*{Configuring Autopickup Exceptions}
@@ -4180,22 +4186,30 @@ version merges work done by the development team since the previous release
with some of the beloved community patches. Many bugs were fixed and a
large amount of code was restructured.
%.pg
\medskip
The development team, as well as {\it Steve VanDevender} and
{\it Kevin Smolkowski} ensured that NetHack 3.6.0 continued to operate on
{\it Kevin Smolkowski} ensured that NetHack 3.6 continued to operate on
various Unix flavors and maintained the X11 interface.
%.pg
{\it Ken Lorber}, {\it Haoyang Wang}, {\it Pat Rankin}, and {\it Dean Luick}
maintained the port of NetHack 3.6.0 for Mac.
maintained the port of NetHack 3.6 for Mac.
%.pg
\medskip
{\it Michael Allison}, {\it Derek S. Ray}, {\it Yitzhak Sapir},
{\it Alex Kompel}, and {\it Dion Nicolaas} maintained the port of
NetHack 3.6.0 for Microsoft Windows.
NetHack 3.6 for Microsoft Windows.
%.pg
\medskip
The 3.6 development team consisting of
{\it Michael Allison}, {\it Warwick Allison}, {\it Ken Arromdee},
{\it David Cohrs}, {\it Jessie Collet}, {\it Sean Hunt},
{\it Pasi Kallinen}, {\it Ken Lorber}, {\it Dean Luick}, {\it Pat Rankin},
{\it Mike Stephenson}, {\it Derek S. Ray}, {\it Janet Walz}, and {\it Paul Winner}
released 3.6.1 as a bug fix release in January 2016.
%.pg
\medskip

View File

@@ -15,10 +15,33 @@ support explicit 'symset:default' and 'symset:Default symbols' in options
crash during startup if player name set as 'player' in defaults
any existing vampire shape-shifted into critter (fog cloud, bat, wolf) became
an unkillable critter if vampires were genocided
unlike in previous versions, an uncursed scroll of enchant armor failed to
uncurse the piece of armor being enchanted (change was unintentional)
slice of {pizza,cake,&} pluralized as "slouse of ..." due to false match
with "lice" (discovered pre-3.6.0-release)
change dipping prompt to not ignore 'called' and 'named' attributes of item
to be dipped
avoid 'the unlabeled {scroll,spellbook} fades' when blank item is hit by water
wrong message given when high priest on astral plane rejects being assigned a
name (got the one for unique monsters instead of the one for priests)
negative intrinsic protection shouldn't confer MC=1, "you are warded" (not
possible from divine protection but is possible from eating rings)
make a slight adjustment to the quickmimic() sense wording
fix typo in passage 1 of The Colour of Magic
falling asleep when reading dull spellbook ignored sleep resistance
getpos() complaint about invalid movement keystroke didn't describe meta-chars
accurately
'realtime' value in xlogfile was incorrect if 'checkpoint' option was active
make a previously-discovered scroll written with marker while blind have its
label known so it can be read while blind
#name or C for discoveries list that spanned multiple pages would exit on
space instead of advancing to next page (workaround: use '>' instead)
Platform- and/or Interface-Specific Fixes
-----------------------------------------
tty: M-N gave "Unknown command 'M-" with "'." finishing the sentence on the
line below it, leaving bogus '.' displayed on the top row of the map
unix/X11: in top level Makefile, some commented out definitions of VARDATND
misspelled pilemark.xbm (as pilemark.xpm)
win32gui: getversionstring() was overflowing the provided Help About buffer
@@ -32,6 +55,7 @@ X11: core bug for '`' (backtick) command was only noticed by X11 interface,
General New Features
--------------------
naming Sting or Orcrist now breaks illiterate conduct
different feedback for reading a scroll of mail created by writing with marker
Platform- and/or Interface-Specific New Features

View File

@@ -1,5 +1,5 @@
.TH RECOVER 6 "7 December 2015"
.\" NetHack 3.6 recover.6 $NHDT-Date: 1449616497 2015/12/08 23:14:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.7 $
.TH RECOVER 6 "9 January 1993"
.\" NetHack 3.6 recover.6 $NHDT-Date: 1450129883 2015/12/14 21:51:23 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.8 $
.UC 4
.SH NAME
recover \- recover a NetHack game interrupted by disaster
@@ -34,11 +34,26 @@ It overrides the value from NETHACKDIR, HACKDIR, or the directory
specified by the game administrator during compilation
(usually /usr/games/lib/nethackdir).
.PP
^?ALLDOCS
For recovery to be possible,
the run-time option
.I nethack
must have been compiled with the INSURANCE option, and the run-time option
.I checkpoint
must have been on.
.PP
must also have been on.
^:
^?INSURANCE
For recovery to be possible,
.I nethack
must have been compiled with the INSURANCE option (this configuration was),
and the run-time option
.I checkpoint
must also have been on.
^:
This configuration of
.I nethack
was created without support for recovery.
^.
^.
NetHack normally writes out files for levels as the player leaves them,
so they will be ready for return visits.
When checkpointing, NetHack also writes out the level entered and

View File

@@ -1,81 +1,132 @@
RECOVER(6) RECOVER(6)
RECOVER(6) 1993 RECOVER(6)
NAME
recover - recover a NetHack game interrupted by disaster
recover - recover a NetHack game interrupted by disaster
SYNOPSIS
recover [ -d directory ] base1 base2 ...
recover [ -d directory ] base1 base2 ...
DESCRIPTION
Occasionally, a NetHack game will be interrupted by disaster when the
game or the system crashes. Prior to NetHack v3.1, these games were
lost because various information like the player's inventory was kept
only in memory. Now, all pertinent information can be written out to
disk, so such games can be recovered at the point of the last level
change.
Occasionally, a NetHack game will be interrupted by disaster
when the game or the system crashes. Prior to NetHack v3.1,
these games were lost because various information like the
player's inventory was kept only in memory. Now, all per-
tinent information can be written out to disk, so such games
can be recovered at the point of the last level change.
The base options tell recover which files to process. Each base option
specifies recovery of a separate game.
The base options tell recover which files to process. Each
base option specifies recovery of a separate game.
The -d option, which must be the first argument if it appears, supplies
a directory which is the NetHack playground. It overrides the value
from NETHACKDIR, HACKDIR, or the directory specified by the game admin-
istrator during compilation (usually /usr/games/lib/nethackdir).
The -d option, which must be the first argument if it
appears, supplies a directory which is the NetHack play-
ground. It overrides the value from NETHACKDIR, HACKDIR, or
the directory specified by the game administrator during
compilation (usually /usr/games/lib/nethackdir).
For recovery to be possible, the run-time option checkpoint must have
been on.
For recovery to be possible, nethack must have been compiled
with the INSURANCE option, and the run-time option check-
point must also have been on. NetHack normally writes out
files for levels as the player leaves them, so they will be
ready for return visits. When checkpointing, NetHack also
writes out the level entered and the current game state on
every level change. This naturally slows level changes down
somewhat.
NetHack normally writes out files for levels as the player leaves them,
so they will be ready for return visits. When checkpointing, NetHack
also writes out the level entered and the current game state on every
level change. This naturally slows level changes down somewhat.
The level file names are of the form base.nn, where nn is an
internal bookkeeping number for the level. The file base.0
is used for game identity, locking, and, when checkpointing,
for the game state. Various OSes use different strategies
for constructing the base name. Microcomputers use the
character name, possibly truncated and modified to be a
legal filename on that system. Multi-user systems use the
(modified) character name prefixed by a user number to avoid
conflicts, or "xlock" if the number of concurrent players is
being limited. It may be necessary to look in the play-
ground to find the correct base name of the interrupted
game. recover will transform these level files into a save
file of the same name as nethack would have used.
The level file names are of the form base.nn, where nn is an internal
bookkeeping number for the level. The file base.0 is used for game
identity, locking, and, when checkpointing, for the game state. Vari-
ous OSes use different strategies for constructing the base name.
Microcomputers use the character name, possibly truncated and modified
to be a legal filename on that system. Multi-user systems use the
(modified) character name prefixed by a user number to avoid conflicts,
or "xlock" if the number of concurrent players is being limited. It
may be necessary to look in the playground to find the correct base
name of the interrupted game. recover will transform these level files
into a save file of the same name as nethack would have used.
Since recover must be able to read and delete files from the
playground and create files in the save directory, it has
interesting interactions with game security. Giving ordi-
nary players access to recover through setuid or setgid is
tantamount to leaving the playground world-writable, with
respect to both cheating and messing up other players. For
Since recover must be able to read and delete files from the playground
and create files in the save directory, it has interesting interactions
with game security. Giving ordinary players access to recover through
setuid or setgid is tantamount to leaving the playground world-
writable, with respect to both cheating and messing up other players.
For a single-user system, this of course does not change anything, so
some of the microcomputer ports install recover by default.
For a multi-user system, the game administrator may want to arrange for
all .0 files in the playground to be fed to recover when the host
machine boots, and handle game crashes individually. If the user popu-
lation is sufficiently trustworthy, recover can be installed with the
same permissions the nethack executable has. In either case, recover
is easily compiled from the distribution utility directory.
January Last change: 9 1
RECOVER(6) 1993 RECOVER(6)
a single-user system, this of course does not change any-
thing, so some of the microcomputer ports install recover by
default.
For a multi-user system, the game administrator may want to
arrange for all .0 files in the playground to be fed to
recover when the host machine boots, and handle game crashes
individually. If the user population is sufficiently
trustworthy, recover can be installed with the same permis-
sions the nethack executable has. In either case, recover
is easily compiled from the distribution utility directory.
NOTES
Like nethack itself, recover will overwrite existing savefiles of the
same name. Savefiles created by recover are uncompressed; they may be
compressed afterwards if desired, but even a compression-using nethack
will find them in the uncompressed form.
Like nethack itself, recover will overwrite existing save-
files of the same name. Savefiles created by recover are
uncompressed; they may be compressed afterwards if desired,
but even a compression-using nethack will find them in the
uncompressed form.
SEE ALSO
nethack(6)
nethack(6)
BUGS
recover makes no attempt to find out if a base name specifies a game in
progress. If multiple machines share a playground, this would be
impossible to determine.
recover makes no attempt to find out if a base name speci-
fies a game in progress. If multiple machines share a play-
ground, this would be impossible to determine.
recover should be taught to use the nethack playground locking mecha-
nism to avoid conflicts.
recover should be taught to use the nethack playground lock-
ing mechanism to avoid conflicts.
January Last change: 9 2
4th Berkeley Distribution 7 December 2015 RECOVER(6)

View File

@@ -212,6 +212,7 @@ struct instance_flags {
boolean use_status_hilites; /* use color in status line */
boolean use_background_glyph; /* use background glyph when appropriate */
boolean hilite_pile; /* mark piles of objects with a hilite */
boolean autodescribe; /* autodescribe mode in getpos() */
#if 0
boolean DECgraphics; /* use DEC VT-xxx extended character set */
boolean IBMgraphics; /* use IBM extended character set */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 global.h $NHDT-Date: 1449116298 2015/12/03 04:18:18 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.46 $ */
/* NetHack 3.6 global.h $NHDT-Date: 1450306170 2015/12/16 22:49:30 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.47 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -7,9 +7,9 @@
#include <stdio.h>
/* #define BETA */ /* development or beta testing [MRS] */
#define BETA /* development or beta testing [MRS] */
/* #define DEBUG */
#define DEBUG
/*
* Files expected to exist in the playground directory.

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 obj.h $NHDT-Date: 1445126423 2015/10/18 00:00:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.50 $ */
/* NetHack 3.6 obj.h $NHDT-Date: 1450306176 2015/12/16 22:49:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.51 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -111,7 +111,7 @@ struct obj {
int corpsenm; /* type of corpse is mons[corpsenm] */
#define leashmon corpsenm /* gets m_id of attached pet */
#define fromsink corpsenm /* a potion from a sink */
#define novelidx corpsenm /* 3.6.0 tribute - the index of the novel title */
#define novelidx corpsenm /* 3.6 tribute - the index of the novel title */
#define record_achieve_special corpsenm
int usecount; /* overloaded for various things that tally */
#define spestudied usecount /* # of times a spellbook has been studied */

View File

@@ -1,19 +1,19 @@
/* NetHack 3.6 patchlevel.h $NHDT-Date: 1447755971 2015/11/17 10:26:11 $ $NHDT-Branch: master $:$NHDT-Revision: 1.112 $ */
/* NetHack 3.6 patchlevel.h $NHDT-Date: 1450306740 2015/12/16 22:59:00 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.115 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
/* NetHack 3.6.0 */
/* NetHack 3.6.1 */
#define VERSION_MAJOR 3
#define VERSION_MINOR 6
/*
* PATCHLEVEL is updated for each release.
*/
#define PATCHLEVEL 0
#define PATCHLEVEL 1
/*
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 2
#define EDITLEVEL 0
#define COPYRIGHT_BANNER_A "NetHack, Copyright 1985-2015"
#define COPYRIGHT_BANNER_B \
@@ -30,11 +30,16 @@
* PP = patch level, ee = edit level, L = literal suffix "L",
* with all four numbers specified as two hexadecimal digits.
*/
/* #define VERSION_COMPATIBILITY 0x03050000L */
#define VERSION_COMPATIBILITY 0x03060002L
/****************************************************************************/
/* Version 3.6.x */
/* Patch 1, [insert date here]
* A couple of dozen bug fixes.
*
*/
/*
* NetHack 3.6.0, December 7, 2015
*

View File

@@ -1,4 +1,131 @@
/* clang-format off */
/* XPM */
static const char *blind_xpm[] = {
/* width height ncolors chars_per_pixel */
"40 40 5 1",
/* colors */
" c #000000",
". c None",
"X c #909090",
"o c #606060",
"O c #303030",
/* pixels */
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"....ooooooooooooooooooooooooooooooooX...",
".... o...",
".... o...",
".... o...",
".... o...",
"......o ..o ......",
"......X O..X O......",
"....... o... o......",
".......o ....o .......",
"........O X.....O X.......",
".........O X.......O X........",
"..........o OX.........o OX.........",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................",
"........................................"
};
/* XPM */
static const char *cha_xpm[] = {
/* width height ncolors chars_per_pixel */
"40 40 14 1",
/* colors */
" c #F85848",
". c #949E9E",
"X c #F8B090",
"o c #E00028",
"O c #D4D4D4",
"+ c None",
"@ c #B0B0B0",
"# c #F82C24",
"$ c #F89E6C",
"% c #FF0000",
"& c #909090",
"* c #FFFFFF",
"= c #CEAA90",
"- c #DADAB6",
/* pixels */
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"+++++++++++++++=#%#=+=#%% ++++++++++++++",
"++++++++++++++ %O%%%#%$$%o%=++++++++++++",
"+++++++++++++# +#%%o%%o%%%%% +++++++++++",
"+++++++++++ %%%%%%%%%%%%%%%%o#=+++++++++",
"+++++++++ o%%%%%%%%%%%%%%%%%%%%# +++++++",
"++++++ #%%%%%%o%%%o%%o%%o%o%%%%%o%o +++",
"++=#%%o%%%#= =*+**O*+**O*+- = =%%%%#@+++",
"++++ %=++*+*+**O****O****O*O*O*OO%=+++++",
"+++++.%=OO+*O*OO****+****+*O*+O&%=@+++++",
"++++++=%=*OO+**O**O*O**O*O*OO+$%=+++++++",
"+++++++#% +*OOOO****+****@O+*#%=++++++++",
"++++++++#%#*+**+O+OO+O+OOO*O#o#+++++++++",
"+++++++++o% O**+****O****O*#%%=+++++++++",
"+++++++++ %%#O*O****+****+ %o#++++++++++",
"++++++++++o%% XO*O**O*O**#%%%+++++++++++",
"++++++++++ %%%o%$-**+**$%%%%=+++++++++++",
"+++++++++++o%%$X$%%%%%%#= o#++++++++++++",
"++++++++++@ %%%o#O$$+$$$%%%=++++++++++++",
"++++++++++++#o%%%%%%%%o%%%=@++++++++++++",
"+++++++++++++ %%%%%%%%%%o=++++++++++++++",
"+++++++++++++++= & & @++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++"
};
/* XPM */
static const char *chaotic_xpm[] = {
/* width height ncolors chars_per_pixel */
"40 40 9 1",
/* colors */
" c #000000",
". c #5C7A7A",
"X c None",
"o c #B0B0B0",
"O c #909090",
"+ c #788C8C",
"@ c #606060",
"# c #FFFFFF",
"$ c #303030",
/* pixels */
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 you.h $NHDT-Date: 1432512782 2015/05/25 00:13:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.29 $ */
/* NetHack 3.6 you.h $NHDT-Date: 1450231172 2015/12/16 01:59:32 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.30 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -68,10 +68,11 @@ struct u_achieve {
};
struct u_realtime {
long
realtime; /* actual playing time up until the last restore, seconds */
time_t restored; /* time the game was started or restored */
time_t endtime;
long realtime; /* accumulated playing time in seconds */
time_t start_timing; /* time game was started or restored or 'realtime'
was last updated (savegamestate for checkpoint) */
time_t finish_time; /* end of 'realtime' interval: time of save or
end of game; used for topten/logfile/xlogfile */
};
/* KMH, conduct --

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 allmain.c $NHDT-Date: 1446975459 2015/11/08 09:37:39 $ $NHDT-Branch: master $:$NHDT-Revision: 1.66 $ */
/* NetHack 3.6 allmain.c $NHDT-Date: 1450231173 2015/12/16 01:59:33 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.67 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -587,18 +587,13 @@ newgame()
com_pager(1);
}
urealtime.realtime = 0L;
urealtime.start_timing = getnow();
#ifdef INSURANCE
save_currentstate();
#endif
program_state.something_worth_saving++; /* useful data now exists */
urealtime.realtime = 0L;
#if defined(BSD) && !defined(POSIX_TYPES)
(void) time((long *) &urealtime.restored);
#else
(void) time(&urealtime.restored);
#endif
/* Success! */
welcome(TRUE);
return;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 bones.c $NHDT-Date: 1449269914 2015/12/04 22:58:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.66 $ */
/* NetHack 3.6 bones.c $NHDT-Date: 1450261363 2015/12/16 10:22:43 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.67 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
/* NetHack may be freely redistributed. See license for details. */
@@ -118,15 +118,18 @@ boolean restore;
free_oname(otmp);
}
if (otmp->otyp == SLIME_MOLD)
if (otmp->otyp == SLIME_MOLD) {
goodfruit(otmp->spe);
#ifdef MAIL
else if (otmp->otyp == SCR_MAIL)
otmp->spe = 1;
} else if (otmp->otyp == SCR_MAIL) {
/* 0: delivered in-game via external event;
1: from bones or wishing; 2: written with marker */
if (otmp->spe == 0)
otmp->spe = 1;
#endif
else if (otmp->otyp == EGG)
} else if (otmp->otyp == EGG) {
otmp->spe = 0;
else if (otmp->otyp == TIN) {
} else if (otmp->otyp == TIN) {
/* make tins of unique monster's meat be empty */
if (otmp->corpsenm >= LOW_PM
&& unique_corpstat(&mons[otmp->corpsenm]))

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 cmd.c $NHDT-Date: 1449736557 2015/12/10 08:35:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.208 $ */
/* NetHack 3.6 cmd.c $NHDT-Date: 1450178549 2015/12/15 11:22:29 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.209 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -107,7 +107,7 @@ extern int NDECL(dowield); /**/
extern int NDECL(dowieldquiver); /**/
extern int NDECL(dozap); /**/
extern int NDECL(doorganize); /**/
#endif /* DUMB */
#endif /* DUMB */
static int NDECL(dosuspend_core); /**/
@@ -3402,15 +3402,8 @@ register char *cmd;
register const struct func_tab *tlist;
int res, NDECL((*func));
#if 0
/* obsolete - scan through the cmdlist array looking for *cmd */
for (tlist = cmdlist; tlist->f_char; tlist++) {
if ((*cmd & 0xff) != (tlist->f_char & 0xff))
continue;
#else
/* current - use *cmd to directly index cmdlist array */
if ((tlist = Cmd.commands[*cmd & 0xff]) != 0) {
#endif
if (u.uburied && !tlist->can_if_buried) {
You_cant("do that while you are buried!");
res = 0;
@@ -3433,23 +3426,13 @@ register char *cmd;
}
if (bad_command) {
char expcmd[10];
register char c, *cp = expcmd;
char expcmd[20]; /* we expect 'cmd' to point to 1 or 2 chars */
register char c;
expcmd[0] = '\0';
while ((c = *cmd++) != '\0')
Strcat(expcmd, visctrl(c)); /* add 1..4 chars plus terminator */
while ((c = *cmd++) != '\0'
&& (int) (cp - expcmd) < (int) (sizeof expcmd - 3)) {
if (c >= 040 && c < 0177) {
*cp++ = c;
} else if (c & 0200) {
*cp++ = 'M';
*cp++ = '-';
*cp++ = c & ~0200;
} else {
*cp++ = '^';
*cp++ = c ^ 0100;
}
}
*cp = '\0';
if (!prefix_seen || !iflags.cmdassist
|| !help_dir(0, "Invalid direction key!"))
Norep("Unknown command '%s'.", expcmd);
@@ -3587,10 +3570,9 @@ retry:
if (!index(quitchars, dirsym)) {
help_requested = (dirsym == '?');
if (help_requested || iflags.cmdassist) {
did_help =
help_dir((s && *s == '^') ? dirsym : 0,
help_requested ? (const char *) 0
: "Invalid direction key!");
did_help = help_dir((s && *s == '^') ? dirsym : 0,
help_requested ? (const char *) 0
: "Invalid direction key!");
if (help_requested)
goto retry;
}
@@ -4121,14 +4103,14 @@ char def;
iflags.last_msg = PLNMSG_UNKNOWN; /* most recent pline is clobbered */
/* maximum acceptable length is QBUFSZ-1 */
if (strlen(query) < QBUFSZ)
return (*windowprocs.win_yn_function)(query, resp, def);
/* caller shouldn't have passed anything this long */
paniclog("Query truncated: ", query);
(void) strncpy(qbuf, query, QBUFSZ - 1 - 3);
Strcpy(&qbuf[QBUFSZ - 1 - 3], "...");
return (*windowprocs.win_yn_function)(qbuf, resp, def);
if (strlen(query) >= QBUFSZ) {
/* caller shouldn't have passed anything this long */
paniclog("Query truncated: ", query);
(void) strncpy(qbuf, query, QBUFSZ - 1 - 3);
Strcpy(&qbuf[QBUFSZ - 1 - 3], "...");
query = qbuf;
}
return (*windowprocs.win_yn_function)(query, resp, def);
}
/* for paranoid_confirm:quit,die,attack prompting */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 do_name.c $NHDT-Date: 1449914085 2015/12/12 09:54:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.78 $ */
/* NetHack 3.6 do_name.c $NHDT-Date: 1450178550 2015/12/15 11:22:30 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.80 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -54,7 +54,7 @@ const char *goal;
putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time.");
putstr(tmpwin, 0, "Or enter a background symbol (ex. <).");
putstr(tmpwin, 0, "Use @ to move the cursor on yourself.");
if (getpos_hilitefunc != NULL)
if (getpos_hilitefunc)
putstr(tmpwin, 0, "Use $ to display valid locations.");
putstr(tmpwin, 0, "Use # to toggle automatic description.");
/* disgusting hack; the alternate selection characters work for any
@@ -80,7 +80,6 @@ const char *goal;
int cx, cy, i, c;
int sidx, tx, ty;
boolean msg_given = TRUE; /* clear message window by default */
boolean auto_msg = FALSE;
boolean show_goal_msg = FALSE;
static const char pick_chars[] = ".,;:";
const char *cp;
@@ -108,7 +107,7 @@ const char *goal;
curs(WIN_MAP, cx, cy);
flush_screen(0);
show_goal_msg = FALSE;
} else if (auto_msg && !msg_given && !hilite_state) {
} else if (iflags.autodescribe && !msg_given && !hilite_state) {
coord cc;
int sym = 0;
char tmpbuf[BUFSZ];
@@ -132,7 +131,7 @@ const char *goal;
flush_screen(0);
}
if (auto_msg)
if (iflags.autodescribe)
msg_given = FALSE;
if (c == '\033') {
@@ -197,7 +196,7 @@ const char *goal;
/* update message window to reflect that we're still targetting */
show_goal_msg = TRUE;
msg_given = TRUE;
} else if ((c == '$') && (getpos_hilitefunc != NULL)) {
} else if (c == '$' && getpos_hilitefunc) {
if (!hilite_state) {
(*getpos_hilitefunc)(0);
(*getpos_hilitefunc)(1);
@@ -205,11 +204,11 @@ const char *goal;
}
goto nxtc;
} else if (c == '#') {
auto_msg = !auto_msg;
iflags.autodescribe = !iflags.autodescribe;
pline("Automatic description %sis %s.",
flags.verbose ? "of features under cursor " : "",
auto_msg ? "on" : "off");
if (!auto_msg)
iflags.autodescribe ? "on" : "off");
if (!iflags.autodescribe)
show_goal_msg = TRUE;
msg_given = TRUE;
goto nxtc;
@@ -307,7 +306,7 @@ const char *goal;
clear_nhwindow(WIN_MESSAGE);
ccp->x = cx;
ccp->y = cy;
getpos_hilitefunc = NULL;
getpos_hilitefunc = (void FDECL((*), (int))) 0;
return result;
}
@@ -463,7 +462,7 @@ do_mname()
/* unique monsters have their own specific names or titles;
shopkeepers, temple priests and other minions use alternate
name formatting routines which ignore any user-supplied name */
if (mtmp->data->geno & G_UNIQ)
if ((mtmp->data->geno & G_UNIQ) && !mtmp->ispriest)
pline("%s doesn't like being called names!", upstart(monnambuf));
else if (mtmp->isshk
&& !(Deaf || mtmp->msleeping || !mtmp->mcanmove

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 dogmove.c $NHDT-Date: 1446604109 2015/11/04 02:28:29 $ $NHDT-Branch: master $:$NHDT-Revision: 1.56 $ */
/* NetHack 3.6 dogmove.c $NHDT-Date: 1450061092 2015/12/14 02:44:52 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.57 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1094,8 +1094,8 @@ struct monst *mtmp;
(on the other hand, perhaps you're sensing a brief glimpse
of its mind as it changes form) */
newsym(mtmp->mx, mtmp->my);
You("%s %s appear where %s was!",
cansee(mtmp->mx, mtmp->my) ? "see" : "sense",
You("%s %s %sappear%s where %s was!",
cansee(mtmp->mx, mtmp->my) ? "see" : "sense that",
(mtmp->m_ap_type == M_AP_FURNITURE)
? an(defsyms[mtmp->mappearance].explanation)
: (mtmp->m_ap_type == M_AP_OBJECT
@@ -1107,6 +1107,8 @@ struct monst *mtmp;
: (mtmp->m_ap_type == M_AP_MONSTER)
? an(mons[mtmp->mappearance].mname)
: something,
cansee(mtmp->mx, mtmp->my) ? "" : "has ",
cansee(mtmp->mx, mtmp->my) ? "" : "ed",
buf);
display_nhwindow(WIN_MAP, TRUE);
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 end.c $NHDT-Date: 1448241780 2015/11/23 01:23:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.108 $ */
/* NetHack 3.6 end.c $NHDT-Date: 1450231174 2015/12/16 01:59:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.110 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -951,8 +951,8 @@ int how;
/* remember time of death here instead of having bones, rip, and
topten figure it out separately and possibly getting different
time or even day if player is slow responding to --More-- */
endtime = getnow();
urealtime.realtime += (long) (endtime - urealtime.restored);
urealtime.finish_time = endtime = getnow();
urealtime.realtime += (long) (endtime - urealtime.start_timing);
/* Sometimes you die on the first move. Life's not fair.
* On those rare occasions you get hosed immediately, go out

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 hacklib.c $NHDT-Date: 1446336792 2015/11/01 00:13:12 $ $NHDT-Branch: master $:$NHDT-Revision: 1.44 $ */
/* NetHack 3.6 hacklib.c $NHDT-Date: 1450178551 2015/12/15 11:22:31 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.46 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* Copyright (c) Robert Patrick Rankin, 1991 */
/* NetHack may be freely redistributed. See license for details. */
@@ -373,20 +373,24 @@ char *
visctrl(c)
char c;
{
Static char ccc[3];
Static char ccc[5];
register int i = 0;
c &= 0177;
ccc[2] = '\0';
if (c < 040) {
ccc[0] = '^';
ccc[1] = c | 0100; /* letter */
} else if (c == 0177) {
ccc[0] = '^';
ccc[1] = c & ~0100; /* '?' */
} else {
ccc[0] = c; /* printable character */
ccc[1] = '\0';
if ((uchar) c & 0200) {
ccc[i++] = 'M';
ccc[i++] = '-';
}
c &= 0177;
if (c < 040) {
ccc[i++] = '^';
ccc[i++] = c | 0100; /* letter */
} else if (c == 0177) {
ccc[i++] = '^';
ccc[i++] = c & ~0100; /* '?' */
} else {
ccc[i++] = c; /* printable character */
}
ccc[i] = '\0';
return ccc;
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 invent.c $NHDT-Date: 1447576348 2015/11/15 08:32:28 $ $NHDT-Branch: master $:$NHDT-Revision: 1.179 $ */
/* NetHack 3.6 invent.c $NHDT-Date: 1450306195 2015/12/16 22:49:55 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.180 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -820,7 +820,7 @@ have_lizard()
return FALSE;
}
/* 3.6.0 tribute */
/* 3.6 tribute */
struct obj *
u_have_novel()
{

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mail.c $NHDT-Date: 1436754892 2015/07/13 02:34:52 $ $NHDT-Branch: master $:$NHDT-Revision: 1.20 $ */
/* NetHack 3.6 mail.c $NHDT-Date: 1450261364 2015/12/16 10:22:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -11,25 +11,24 @@
* Notify user when new mail has arrived. Idea by Merlyn Leroy.
*
* The mail daemon can move with less than usual restraint. It can:
* - move diagonally from a door
* - use secret and closed doors
* - run through a monster ("Gangway!", etc.)
* - run over pools & traps
* - move diagonally from a door
* - use secret and closed doors
* - run through a monster ("Gangway!", etc.)
* - run over pools & traps
*
* Possible extensions:
* - Open the file MAIL and do fstat instead of stat for efficiency.
* (But sh uses stat, so this cannot be too bad.)
* - Examine the mail and produce a scroll of mail named "From somebody".
* - Invoke MAILREADER in such a way that only this single letter is
*read.
* - Do something to the text when the scroll is enchanted or cancelled.
* - Make the daemon always appear at a stairwell, and have it find a
* path to the hero.
* - Open the file MAIL and do fstat instead of stat for efficiency.
* (But sh uses stat, so this cannot be too bad.)
* - Examine the mail and produce a scroll of mail named "From somebody".
* - Invoke MAILREADER in such a way that only this single mail is read.
* - Do something to the text when the scroll is enchanted or cancelled.
* - Make the daemon always appear at a stairwell, and have it find a
* path to the hero.
*
* Note by Olaf Seibert: On the Amiga, we usually don't get mail. So we go
* through most of the effects at 'random' moments.
* through most of the effects at 'random' moments.
* Note by Paul Winner: The MSDOS port also 'fakes' the mail daemon at
* random intervals.
* random intervals.
*/
STATIC_DCL boolean FDECL(md_start, (coord *));
@@ -418,9 +417,9 @@ ckmailstatus()
return;
}
if (--mustgetmail <= 0) {
static struct mail_info deliver = { MSG_MAIL,
"I have some mail for you", 0,
0 };
static struct mail_info deliver = {
MSG_MAIL, "I have some mail for you", 0, 0
};
newmail(&deliver);
mustgetmail = -1;
}
@@ -429,7 +428,7 @@ ckmailstatus()
/*ARGSUSED*/
void
readmail(otmp)
struct obj *otmp;
struct obj *otmp UNUSED;
{
static char *junk[] = {
NULL, /* placeholder for "Report bugs to <devteam@nethack.org>.", */
@@ -502,7 +501,7 @@ ckmailstatus()
/*ARGSUSED*/
void
readmail(otmp)
struct obj *otmp;
struct obj *otmp UNUSED;
{
#ifdef DEF_MAILREADER /* This implies that UNIX is defined */
register const char *mr = 0;
@@ -518,8 +517,8 @@ struct obj *otmp;
#else
#ifndef AMS /* AMS mailboxes are directories */
display_file(mailbox, TRUE);
#endif /* AMS */
#endif /* DEF_MAILREADER */
#endif /* AMS */
#endif /* DEF_MAILREADER */
/* get new stat; not entirely correct: there is a small time
window where we do not see new mail */
@@ -585,6 +584,8 @@ struct obj *otmp;
vms_doshell(cmd, TRUE);
(void) sleep(1);
}
#else
nhUse(otmp);
#endif /* SHELL */
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mhitu.c $NHDT-Date: 1446854230 2015/11/06 23:57:10 $ $NHDT-Branch: master $:$NHDT-Revision: 1.130 $ */
/* NetHack 3.6 mhitu.c $NHDT-Date: 1450016149 2015/12/13 14:15:49 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.131 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -827,7 +827,7 @@ struct monst *mon;
} else if (mc < 1) {
/* intrinsic Protection is weaker (play balance; obtaining divine
protection is too easy); it confers minimum mc 1 instead of 0 */
if ((is_you && ((HProtection && u.ublessed) || u.uspellprot))
if ((is_you && ((HProtection && u.ublessed > 0) || u.uspellprot))
/* aligned priests and angels have innate intrinsic Protection */
|| (mon->data == &mons[PM_ALIGNED_PRIEST] || is_minion(mon->data)))
mc = 1;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 o_init.c $NHDT-Date: 1449588093 2015/12/08 15:21:33 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
/* NetHack 3.6 o_init.c $NHDT-Date: 1450318588 2015/12/17 02:16:28 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -688,8 +688,8 @@ rename_disco()
if (oclass != prev_class) {
any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings,
ATR_NONE, let_to_name(oclass, FALSE, FALSE),
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(oclass, FALSE, FALSE),
MENU_UNSELECTED);
prev_class = oclass;
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 objnam.c $NHDT-Date: 1449740045 2015/12/10 09:34:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.155 $ */
/* NetHack 3.6 objnam.c $NHDT-Date: 1450306207 2015/12/16 22:50:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.158 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1874,6 +1874,15 @@ const char *const *alt_as_is; /* another set like as_is[] */
}
}
/* avoid false hit on one_off[].plur == "lice";
if more of these turn up, one_off[] entries will need to flagged
as to which are whole words and which are matchable as suffices
then matching in the loop below will end up becoming more complex */
if (!strcmpi(basestr, "slice")) {
if (to_plural)
(void) strkitten(basestr, 's');
return TRUE;
}
for (sp = one_off; sp->sing; sp++) {
/* check whether endstring already matches */
same = to_plural ? sp->plur : sp->sing;
@@ -3336,6 +3345,8 @@ typfnd:
break;
#ifdef MAIL
case SCR_MAIL:
/* 0: delivered in-game via external event (or randomly for fake mail);
1: from bones or wishing; 2: written with marker */
otmp->spe = 1;
break;
#endif
@@ -3468,7 +3479,7 @@ typfnd:
if (aname && objtyp == otmp->otyp)
name = aname;
/* 3.6.0 tribute - fix up novel */
/* 3.6 tribute - fix up novel */
if (otmp->otyp == SPE_NOVEL) {
const char *novelname;

View File

@@ -75,6 +75,7 @@ static struct Bool_Opt {
#else
{ "asksavedisk", (boolean *) 0, FALSE, SET_IN_FILE },
#endif
{ "autodescribe", &iflags.autodescribe, FALSE, SET_IN_GAME },
{ "autodig", &flags.autodig, FALSE, SET_IN_GAME },
{ "autoopen", &flags.autoopen, TRUE, SET_IN_GAME },
{ "autopickup", &flags.pickup, TRUE, SET_IN_GAME },

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 potion.c $NHDT-Date: 1446861768 2015/11/07 02:02:48 $ $NHDT-Branch: master $:$NHDT-Revision: 1.121 $ */
/* NetHack 3.6 potion.c $NHDT-Date: 1449977945 2015/12/13 03:39:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.122 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1759,6 +1759,7 @@ dodip()
char allowall[2];
short mixture;
char qbuf[QBUFSZ], qtoo[QBUFSZ];
const char *shortestname; /* last resort obj name for prompt */
allowall[0] = ALL_CLASSES;
allowall[1] = '\0';
@@ -1767,13 +1768,13 @@ dodip()
if (inaccessible_equipment(obj, "dip", FALSE))
return 0;
Sprintf(qbuf, "dip %s into", thesimpleoname(obj));
shortestname = is_plural(obj) ? "them" : "it";
here = levl[u.ux][u.uy].typ;
/* Is there a fountain to dip into here? */
if (IS_FOUNTAIN(here)) {
/* "Dip <the object> into the fountain?" */
Sprintf(qtoo, "%s the fountain?", qbuf);
if (yn(upstart(qtoo)) == 'y') {
if (yn(safe_qbuf(qbuf, "Dip ", " into the fountain?", obj,
doname, thesimpleoname, shortestname)) == 'y') {
dipfountain(obj);
return 1;
}
@@ -1781,8 +1782,9 @@ dodip()
const char *pooltype = waterbody_name(u.ux, u.uy);
/* "Dip <the object> into the {pool, moat, &c}?" */
Sprintf(qtoo, "%s the %s?", qbuf, pooltype);
if (yn(upstart(qtoo)) == 'y') {
Sprintf(qtoo, " into the %s?", pooltype);
if (yn(safe_qbuf(qbuf, "Dip ", qtoo, obj,
doname, thesimpleoname, shortestname)) == 'y') {
if (Levitation) {
floating_above(pooltype);
} else if (u.usteed && !is_swimmer(u.usteed->data)
@@ -1799,6 +1801,9 @@ dodip()
}
/* "What do you want to dip <the object> into?" */
Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to dip ", " into?", obj,
doname, thesimpleoname, shortestname)
+ sizeof "What do you want to " - sizeof "");
potion = getobj(beverages, qbuf); /* "dip into" */
if (!potion)
return 0;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 read.c $NHDT-Date: 1449645144 2015/12/09 07:12:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.126 $ */
/* NetHack 3.6 read.c $NHDT-Date: 1450261365 2015/12/16 10:22:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.128 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -970,12 +970,16 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
#ifdef MAIL
case SCR_MAIL:
known = TRUE;
if (sobj->spe)
if (sobj->spe == 2)
/* "stamped scroll" created via magic marker--without a stamp */
pline("This scroll is marked \"postage due\".");
else if (sobj->spe)
/* scroll of mail obtained from bones file or from wishing;
* note to the puzzled: the game Larn actually sends you junk
* mail if you win!
*/
pline(
"This seems to be junk mail addressed to the finder of the Eye of Larn.");
/* note to the puzzled: the game Larn actually sends you junk
* mail if you win!
*/
else
readmail(sobj);
break;
@@ -1050,9 +1054,12 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
useup(otmp);
break;
}
s = scursed ? -1 : otmp->spe >= 9
? (rn2(otmp->spe) == 0)
: sblessed ? rnd(3 - otmp->spe / 3) : 1;
s = scursed ? -1
: (otmp->spe >= 9)
? (rn2(otmp->spe) == 0)
: sblessed
? rnd(3 - otmp->spe / 3)
: 1;
if (s >= 0 && Is_dragon_scales(otmp)) {
/* dragon scales get turned into dragon scale mail */
pline("%s merges and hardens!", Yname2(otmp));
@@ -1075,8 +1082,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
s == 0 ? "violently " : "",
otense(otmp, Blind ? "vibrate" : "glow"),
(!Blind && !same_color) ? " " : "",
(Blind || same_color) ? ""
: hcolor(scursed ? NH_BLACK : NH_SILVER),
(Blind || same_color)
? "" : hcolor(scursed ? NH_BLACK : NH_SILVER),
(s * s > 1) ? "while" : "moment");
/* [this cost handling will need updating if shop pricing is
ever changed to care about curse/bless status of armor] */
@@ -1086,6 +1093,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
curse(otmp);
else if (sblessed && !otmp->blessed)
bless(otmp);
else if (!scursed && otmp->cursed)
uncurse(otmp);
if (s) {
otmp->spe += s;
adj_abon(otmp, s);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 restore.c $NHDT-Date: 1446892455 2015/11/07 10:34:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.101 $ */
/* NetHack 3.6 restore.c $NHDT-Date: 1450231174 2015/12/16 01:59:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.102 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -568,13 +568,10 @@ unsigned int *stuckid, *steedid;
foo = time_from_yyyymmddhhmmss(timebuf);
ReadTimebuf(ubirthday);
mread(fd, &urealtime.realtime, sizeof(urealtime.realtime));
ReadTimebuf(urealtime.restored);
#if defined(BSD) && !defined(POSIX_TYPES)
(void) time((long *) &urealtime.restored);
#else
(void) time(&urealtime.restored);
#endif
mread(fd, &urealtime.realtime, sizeof urealtime.realtime);
ReadTimebuf(urealtime.start_timing); /** [not used] **/
/* current time is the time to use for next urealtime.realtime update */
urealtime.start_timing = getnow();
set_uasmon();
#ifdef CLIPPING

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 role.c $NHDT-Date: 1446861770 2015/11/07 02:02:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.34 $ */
/* NetHack 3.6 role.c $NHDT-Date: 1450320155 2015/12/17 02:42:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.35 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1927,7 +1927,7 @@ winid where;
any.a_int = 0;
/* use four spaces of padding to fake a grayed out menu choice */
Sprintf(buf, "%4s%s forces %s", "", constrainer, forcedvalue);
add_menu(where, NO_GLYPH, &any, ' ', 0, ATR_NONE, buf,
add_menu(where, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
MENU_UNSELECTED);
} else if (what) {
any.a_int = RS_menu_arg(which);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 save.c $NHDT-Date: 1448241784 2015/11/23 01:23:04 $ $NHDT-Branch: master $:$NHDT-Revision: 1.95 $ */
/* NetHack 3.6 save.c $NHDT-Date: 1450231175 2015/12/16 01:59:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.98 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -289,12 +289,15 @@ register int fd, mode;
#ifdef SYSFLAGS
bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
#endif
urealtime.realtime += (long) (getnow() - urealtime.restored);
urealtime.finish_time = getnow();
urealtime.realtime += (long) (urealtime.finish_time
- urealtime.start_timing);
bwrite(fd, (genericptr_t) &u, sizeof(struct you));
bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
bwrite(fd, (genericptr_t) &urealtime.realtime,
sizeof(urealtime.realtime));
bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14);
bwrite(fd, (genericptr_t) &urealtime.realtime, sizeof urealtime.realtime);
bwrite(fd, yyyymmddhhmmss(urealtime.start_timing), 14); /** Why? **/
/* this is the value to use for the next update of urealtime.realtime */
urealtime.start_timing = urealtime.finish_time;
save_killers(fd, mode);
/* must come before migrating_objs and migrating_mons are freed */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 shknam.c $NHDT-Date: 1448094342 2015/11/21 08:25:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.38 $ */
/* NetHack 3.6 shknam.c $NHDT-Date: 1450306213 2015/12/16 22:50:13 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.39 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -454,7 +454,7 @@ boolean mkspecl;
struct permonst *ptr;
int atype;
/* 3.6.0 tribute */
/* 3.6 tribute */
if (mkspecl && (!strcmp(shp->name, "rare books")
|| !strcmp(shp->name, "second-hand bookstore"))) {
struct obj *novel = mksobj_at(SPE_NOVEL, sx, sy, FALSE, FALSE);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 sounds.c $NHDT-Date: 1446713641 2015/11/05 08:54:01 $ $NHDT-Branch: master $:$NHDT-Revision: 1.74 $ */
/* NetHack 3.6 sounds.c $NHDT-Date: 1450306219 2015/12/16 22:50:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.75 $ */
/* Copyright (c) 1989 Janet Walz, Mike Threepoint */
/* NetHack may be freely redistributed. See license for details. */
@@ -908,7 +908,7 @@ register struct monst *mtmp;
break;
}
case MS_RIDER:
/* 3.6.0 tribute */
/* 3.6 tribute */
if (ptr == &mons[PM_DEATH]
&& !context.tribute.Deathnotice && u_have_novel()) {
struct obj *book = u_have_novel();

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 spell.c $NHDT-Date: 1447653429 2015/11/16 05:57:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.72 $ */
/* NetHack 3.6 spell.c $NHDT-Date: 1450306224 2015/12/16 22:50:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.74 $ */
/* Copyright (c) M. Stephenson 1988 */
/* NetHack may be freely redistributed. See license for details. */
@@ -430,7 +430,7 @@ register struct obj *spellbook;
boolean too_hard = FALSE;
/* attempting to read dull book may make hero fall asleep */
if (!confused && booktype != SPE_BLANK_PAPER
if (!confused && !Sleep_resistance
&& !strcmp(OBJ_DESCR(objects[booktype]), "dull")) {
const char *eyes;
int dullbook = rnd(25) - ACURR(A_WIS);
@@ -465,7 +465,7 @@ register struct obj *spellbook;
return 1;
}
/* 3.6.0 tribute */
/* 3.6 tribute */
if (booktype == SPE_NOVEL) {
/* Obtain current Terry Pratchett book title */
const char *tribtitle = noveltitle(&spellbook->novelidx);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 topten.c $NHDT-Date: 1448117546 2015/11/21 14:52:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */
/* NetHack 3.6 topten.c $NHDT-Date: 1450231176 2015/12/16 01:59:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.41 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -330,8 +330,8 @@ struct toptenentry *tt;
Fprintf(rfile, "%cconduct=0x%lx%cturns=%ld%cachieve=0x%lx", XLOG_SEP,
encodeconduct(), XLOG_SEP, moves, XLOG_SEP, encodeachieve());
Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld", XLOG_SEP,
(long) urealtime.realtime, XLOG_SEP, (long) ubirthday, XLOG_SEP,
(long) urealtime.endtime);
(long) urealtime.realtime, XLOG_SEP,
(long) ubirthday, XLOG_SEP, (long) urealtime.finish_time);
Fprintf(rfile, "%cgender0=%s%calign0=%s", XLOG_SEP,
genders[flags.initgend].filecode, XLOG_SEP,
aligns[1 - u.ualignbase[A_ORIGINAL]].filecode);
@@ -516,7 +516,6 @@ time_t when;
t0->birthdate = yyyymmdd(ubirthday);
t0->deathdate = yyyymmdd(when);
t0->tt_next = 0;
urealtime.endtime = when;
#ifdef UPDATE_RECORD_IN_PLACE
t0->fpos = -1L;
#endif

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 trap.c $NHDT-Date: 1448492213 2015/11/25 22:56:53 $ $NHDT-Branch: master $:$NHDT-Revision: 1.249 $ */
/* NetHack 3.6 trap.c $NHDT-Date: 1449977947 2015/12/13 03:39:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.250 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -3345,10 +3345,11 @@ boolean force;
*/
return ER_NOTHING;
} else if (obj->oclass == SCROLL_CLASS) {
if (obj->otyp == SCR_BLANK_PAPER
#ifdef MAIL
if (obj->otyp == SCR_MAIL)
return 0;
|| obj->otyp == SCR_MAIL
#endif
) return 0;
if (carried(obj))
pline("Your %s %s.", ostr, vtense(ostr, "fade"));
@@ -3362,8 +3363,9 @@ boolean force;
if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
pline("Steam rises from %s.", the(xname(obj)));
return 0;
} else if (obj->otyp == SPE_BLANK_PAPER) {
return 0;
}
if (carried(obj))
pline("Your %s %s.", ostr, vtense(ostr, "fade"));

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 write.c $NHDT-Date: 1446078770 2015/10/29 00:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */
/* 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 may be freely redistributed. See license for details. */
#include "hack.h"
@@ -58,7 +58,7 @@ register struct obj *otmp;
}
/* decide whether the hero knowns a particular scroll's label;
unfortunately, we can't track things are haven't been added to
unfortunately, we can't track things that haven't been added to
the discoveries list and aren't present in current inventory,
so some scrolls with ought to yield True will end up False */
STATIC_OVL boolean
@@ -335,11 +335,20 @@ found:
new_obj->cursed = (curseval < 0);
#ifdef MAIL
if (new_obj->otyp == SCR_MAIL)
new_obj->spe = 1;
/* 0: delivered in-game via external event (or randomly for fake mail);
1: from bones or wishing; 2: written with marker */
new_obj->spe = 2;
#endif
new_obj =
hold_another_object(new_obj, "Oops! %s out of your grasp!",
The(aobjnam(new_obj, "slip")), (const char *) 0);
/* unlike alchemy, for example, a successful result yields the
specifically chosen item so hero recognizes it even if blind;
the exception is for being lucky writing an undiscovered scroll,
where the label associated with the type-name isn't known yet */
new_obj->dknown = label_known(new_obj->otyp, invent) ? 1 : 0;
new_obj = hold_another_object(new_obj, "Oops! %s out of your grasp!",
The(aobjnam(new_obj, "slip")),
(const char *) 0);
nhUse(new_obj); /* try to avoid complaint about dead assignment */
return 1;
}

View File

@@ -5,7 +5,7 @@
NetHack 3.6 on a Windows system
(Windows 7/8.x/10 or later only. XP may work but is untested)
==============================================================
Last revision: $NHDT-Date: 1447979773 2015/11/20 00:36:13 $
Last revision: $NHDT-Date: 1450306349 2015/12/16 22:52:29 $
Credit for the porting of NetHack to the Win32 Console Subsystem goes to
the NT Porting Team started by Michael Allison.
@@ -16,7 +16,7 @@ contributed the port.
The PC Windows porting team consisting of Michael Allison, David Cohrs,
Alex Kompel, Dion Nicolaas, Yitzhak Sapir, and Janet Walz maintained the
tty and graphical win32 versions of NetHack 3.6.0.
tty and graphical win32 versions of NetHack 3.6.1.
You can build a TTY version of NetHack and a Windows Graphical
version. You can use one of the following build environments:
@@ -90,7 +90,7 @@ a 32-bit x86 version, or a 64-bit x64 version. The default Makefile
is set up for a 32-bit x86 version, but that's only because it will
run on the most number of existing Windows environments.
NetHack's save files and bones files in the 3.6.0 release have not
NetHack's save files and bones files in the 3.6.1 release have not
evolved enough to allow them to interchange between the 32-bit version
and the 64-bit version (or between different platforms). Hopefully
that will change in an upcoming release.
@@ -508,10 +508,10 @@ II. Executing the game
If you will be running it by launching it from a shortcut, just use
the following information when setting up the shortcut.
Description : NetHack 3.6.0 Console version
Description : NetHack 3.6.1 Console version
Command Line : C:\NETHACK\BINARY\NETHACK.EXE
Description : NetHack 3.6.0 Graphical Interface
Description : NetHack 3.6.1 Graphical Interface
Command Line : C:\NETHACK\BINARY\NETHACKW.EXE
(changing the directory to the appropriate one of course)

View File

@@ -1,5 +1,5 @@
NAME NETHACK
DESCRIPTION 'NetHack 3.6.0 for Windows NT'
DESCRIPTION 'NetHack 3.6.1 for Windows NT'
EXETYPE WINDOWS
STUB 'WINSTUB.EXE'
CODE PRELOAD MOVEABLE DISCARDABLE

View File

@@ -1,5 +1,5 @@
#!/usr/bin/osascript
# NetHack 3.6.0 NetHackGuidebook.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
# NetHack 3.6.1 NetHackGuidebook.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
# Copyright (c) Kenneth Lorber, Kensington, Maryland, 2011
# NetHack may be freely redistributed. See license for details.

View File

@@ -1,5 +1,5 @@
#!/usr/bin/osascript
# NetHack 3.6.0 NetHackTerm.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
# NetHack 3.6.1 NetHackTerm.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
# Copyright (c) Kenneth Lorber, Kensington, Maryland, 2011
# NetHack may be freely redistributed. See license for details.

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 wintty.c $NHDT-Date: 1449052583 2015/12/02 10:36:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.116 $ */
/* NetHack 3.6 wintty.c $NHDT-Date: 1450320157 2015/12/17 02:42:37 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.117 $ */
/* Copyright (c) David Cohrs, 1991 */
/* NetHack may be freely redistributed. See license for details. */
@@ -418,7 +418,7 @@ makepicks:
/* add miscellaneous menu entries */
role_menu_extra(ROLE_RANDOM, win);
any.a_int = 0; /* separator, not a choice */
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "",
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_UNSELECTED);
role_menu_extra(RS_RACE, win);
role_menu_extra(RS_GENDER, win);
@@ -502,7 +502,7 @@ makepicks:
/* add miscellaneous menu entries */
role_menu_extra(ROLE_RANDOM, win);
any.a_int = 0; /* separator, not a choice */
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "",
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_UNSELECTED);
role_menu_extra(RS_ROLE, win);
role_menu_extra(RS_GENDER, win);
@@ -591,7 +591,7 @@ makepicks:
/* add miscellaneous menu entries */
role_menu_extra(ROLE_RANDOM, win);
any.a_int = 0; /* separator, not a choice */
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "",
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_UNSELECTED);
role_menu_extra(RS_ROLE, win);
role_menu_extra(RS_RACE, win);
@@ -676,7 +676,7 @@ makepicks:
setup_algnmenu(win, TRUE, ROLE, RACE, GEND);
role_menu_extra(ROLE_RANDOM, win);
any.a_int = 0; /* separator, not a choice */
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "",
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
MENU_UNSELECTED);
role_menu_extra(RS_ROLE, win);
role_menu_extra(RS_RACE, win);
@@ -760,11 +760,11 @@ makepicks:
races[RACE].adj,
(GEND == 1 && roles[ROLE].name.f) ? roles[ROLE].name.f
: roles[ROLE].name.m);
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, pbuf,
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, pbuf,
MENU_UNSELECTED);
/* blank separator */
any.a_int = 0;
add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", MENU_UNSELECTED);
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
/* [ynaq] menu choices */
any.a_int = 1;
add_menu(win, NO_GLYPH, &any, 'y', 0, ATR_NONE, "Yes; start game",

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mswproc.c $NHDT-Date: 1449751720 2015/12/10 12:48:40 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.95 $ */
/* NetHack 3.6 mswproc.c $NHDT-Date: 1450306253 2015/12/16 22:50:53 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.96 $ */
/* Copyright (C) 2001 by Alex Kompel */
/* NetHack may be freely redistributed. See license for details. */
@@ -2222,7 +2222,7 @@ logDebug(const char *fmt, ...)
/* Reading and writing settings from the registry. */
#define CATEGORYKEY "Software"
#define COMPANYKEY "NetHack"
#define PRODUCTKEY "NetHack 3.6.0"
#define PRODUCTKEY "NetHack 3.6.1"
#define SETTINGSKEY "Settings"
#define MAINSHOWSTATEKEY "MainShowState"
#define MAINMINXKEY "MainMinX"