Merge branch 'NetHack-3.7' into copperwater-hallutraps-3.7

This commit is contained in:
nhmall
2019-12-19 18:32:53 -05:00
584 changed files with 43065 additions and 64400 deletions

View File

@@ -1,4 +1,4 @@
.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.312 $ $NHDT-Date: 1562838836 2019/07/11 09:53:56 $
.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.337 $ $NHDT-Date: 1576431522 2019/12/15 17:38:42 $
.\"
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -24,7 +24,7 @@
.ds vr "NetHack 3.7
.ds f0 "\*(vr
.ds f1
.ds f2 "October 1, 2019
.ds f2 "December 18, 2019
.
.\" A note on some special characters:
.\" \(lq = left double quote
@@ -45,6 +45,8 @@ A Guide to the Mazes of Menace
.au
Original version - Eric S. Raymond
(Edited and expanded for 3.6 by Mike Stephenson and others)
.sp 1
\*(f2
.hn 1
Introduction
.pg
@@ -511,8 +513,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
@@ -693,6 +695,14 @@ Normally checks for edible item(s) on the floor, then if none are found
or none are chosen, checks for edible item(s) in inventory.
Precede \(oqe\(cq with the \(oqm\(cq prefix to bypass attempting to eat
anything off the floor.
.lp ""
If you attempt to eat while already satiated, you might choke to death.
If you risk it, you will be asked whether
to \(lqcontinue eating?\(rq \fIif you survive the first bite\fP.
You can set the
.op paranoid_confirmation:eating
option to require a response of \f(CRyes\fP instead of just \f(CRy\fP.
.
.\" Make sure Elbereth is not hyphenated below, the exact spelling matters
.hw Elbereth
.lp E
@@ -2617,8 +2627,7 @@ Using a configuration file
.hw .nethackrc defaults.nh nethack.exe nethackW.exe
The default name of the configuration file varies on different
operating systems.
On MS-DOS and Windows, it is \(lqdefaults.nh\(rq
in the same folder as nethack.exe or nethackW.exe.
.pg
On
.UX ,
Linux,
@@ -2626,6 +2635,18 @@ 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 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.
After running NetHack for the first time, you should find a default
template for the configuration file named \(lq.nethackrc.template\(rq
in \(lq\\%USERPROFILE%\\NetHack\\3.6\(rq.
If you had not created the configuration file, NetHack will create
the configuration file for you using the default template file.
.pg
On MS-DOS, it is \(lqdefaults.nh\(rq in the same folder as nethack.exe.
.pg
Any line in the configuration file starting with \(oq#\(cq is treated
as a comment.
Empty lines are ignored.
@@ -2642,6 +2663,7 @@ of which can be used multiple times.
In general, the statements are
written in capital letters, followed by an equals sign, followed by
settings particular to that statement.
.pg
Here is a list of allowed statements:
.lp OPTIONS
There are two types of options, boolean and compound options.
@@ -2653,7 +2675,7 @@ Some options are persistent, and apply only to new games.
You can specify multiple OPTIONS statements, and multiple options
separated by commas in a single OPTIONS statement.
(Comma separated options are processed from right to left.)
.pg
.lp ""
Example:
.sd
.ft CR
@@ -2682,6 +2704,9 @@ HACKDIR, must be writable.
.lp TROUBLEDIR
The location that a record of game aborts and self-diagnosed game problems
is kept. Defaults to HACKDIR, must be writable.
.\"
.\" config file entries beyond this point are shown alphabetically
.\"
.lp AUTOCOMPLETE
Enable or disable an extended command autocompletion.
Autocompletion has no effect for the X11 windowport.
@@ -2689,7 +2714,7 @@ You can specify multiple autocompletions.
To enable autocompletion, list the extended command.
Prefix the command with \(lq!\(rq to disable the autocompletion
for that command.
.pg
.lp ""
Example:
.sd
\f(CRAUTOCOMPLETE=zap,!annotate\fP
@@ -2705,7 +2730,7 @@ extended commands.
You can specify multiple bindings.
Format is key followed by the command, separated by a colon.
See the \(lqChanging Key Bindings\(rq section for more information.
.pg
.lp ""
Example:
.sd
\f(CRBIND=\(haX:getpos.autodescribe\fP
@@ -2713,7 +2738,7 @@ Example:
.lp CHOOSE
Chooses at random one of the comma-separated parameters as an active
section name. Lines in other sections are ignored.
.pg
.lp ""
Example:
.sd
.ft CR \" constant-width Roman
@@ -2725,55 +2750,73 @@ OPTIONS=role:arc,race:dwa,align:law,gender:fem
OPTIONS=role:wiz,race:elf,align:cha,gender:mal
.ft \" revert to previous font
.ed
.lp MSGTYPE
Change the way messages are shown in the top status line.
See the \(lqConfiguring Message Types\(rq section.
.lp MENUCOLOR
Highlight menu lines with different colors.
See the \(lqConfiguring Menu Colors\(rq section.
.lp MSGTYPE
Change the way messages are shown in the top status line.
See the \(lqConfiguring Message Types\(rq section.
.lp ROGUESYMBOLS
Custom symbols for for the rogue level's symbol set.
See \fISYMBOLS\fP below.
.lp SOUND
Define a sound mapping.
See the \(lqConfiguring User Sounds\(rq section.
.lp SOUNDDIR
Define the directory that contains the sound files.
See the \(lqConfiguring User Sounds\(rq section.
.lp SYMBOLS
Override one or more symbols in the symbols files.
Override one or more symbols in the symbol set used for all dungeon
levels except for the special rogue level.
See the \(lqModifying NetHack Symbols\(rq section.
.pg
.lp ""
Example:
.sd
\f(CRSYMBOLS=S_boulder:0\fP
\f(CR# replace small punctuation (tick marks) with digits\fP
\f(CRSYMBOLS=S_boulder:0,S_golem:7\fP
.ed
.lp WIZKIT
Debug mode only: extra items to add to initial inventory.
Value is the name of a text file containing a list of item names,
one per line, up to a maximum of 128 lines.
Each line is processed by the function that handles wishing.
.pg
.lp ""
Example:
.sd
\f(CRWIZKIT=\(ti/wizkit.txt\fP \" \(ti == '~'
.ed
.lp SOUNDDIR
Define the directory that contains the sound files.
See the \(lqConfiguring User Sounds\(rq section.
.lp SOUND
Define a sound mapping.
See the \(lqConfiguring User Sounds\(rq section.
.
.pg
Here is a short example of config file contents:
.sd
\ \" 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
@@ -3174,7 +3217,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
@@ -3274,6 +3317,8 @@ bones data when dying in debug mode;
require \(lqyes\(rq rather than \(oqy\(cq to confirm attacking a peaceful monster;
.PL wand-break
require \(lqyes\(rq rather than \(oqy\(cq to confirm breaking a wand;
.PL eating
require \(lqyes\(rq rather than \(oqy\(cq to confirm whether to continue eating;
.PL Were-change
require \(lqyes\(rq rather than \(oqy\(cq to confirm changing form due to lycanthropy
when hero has polymorph control;
@@ -3591,7 +3636,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
@@ -3787,7 +3832,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).
@@ -3851,12 +3897,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...
@@ -3899,8 +3945,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.
@@ -4059,7 +4105,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"
@@ -4099,16 +4145,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
@@ -4151,8 +4198,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
@@ -4168,7 +4215,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.
@@ -4276,7 +4323,7 @@ text to match against.
.lp "*"
\(lqalways\(rq will set the default attributes for that field.
.lp "*"
\(lqup\(rq and \(lqdown\(rq set the field attributes for when the field
\(lqup\(rq, \(lqdown\(rq set the field attributes for when the field
value changes upwards or downwards.
This attribute times out after
.op statushilites
@@ -4337,7 +4384,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
@@ -4372,8 +4419,9 @@ Set the name of the symbol set that you want to load.
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 config
file option. Symbols are specified as name:value pairs.
You can also override one or more symbols using the SYMBOLS and
ROGUESYMBOLS configuration file options.
Symbols are specified as name:value pairs.
Note that
NetHack escape-processes the value string in conventional C fashion.
This means that \\ is a prefix to take the following character literally.
@@ -4382,16 +4430,23 @@ The special prefix form \\m switches on the meta bit in the symbol value,
and the \(ha prefix causes the following character to be treated as a
control character.
.pg
.\" Table is centered.
.\" First line (title) is left justified and spans second and third columns;
.\" it used to be centered but tended to look as if too far to the right.
.\" Remaining lines are left justified in each of three columns. First
.\" line (second overall) contains column labels; the first column has a
.\" dummy label of two spaces. (That used to be "Default" but it made all
.\" the lines wider because of the label's width and caused several lines
.\" to be too wide when generating plain text output. Two spaces leaves
.\" some room between the symbol character and name.) Entries in first
.\" column now use constant-width Roman font to approximate TeX tt font.
.TS S
center;
c s s
c1 l1 l.
l s s
l1fCR l1 l.
.\"TABLE_START
.\" because description is wide, centered title seems off, so pad it a bit
.\" note that each backslash precedes one space of padding (including the
.\" last one; in other words, there's a trailing space here)
NetHack Symbols\ \ \ \ \ \ \
Default Symbol Name Description
NetHack Symbols
\ \ Symbol Name Description
\_ \_ \_
\ S_air (air)
\&_ S_altar (altar)
@@ -4518,7 +4573,8 @@ s S_spider (arachnid or centipede)
@ S_ss3 (magic shield 3 of 4)
* S_ss4 (magic shield 4 of 4)
\(ha S_statue_trap (statue trap)
\ S_stone (dark part of a room)
\ S_stone (solid rock or unexplored terrain
\ \ \ or dark part of a room)
] S_strange_obj (strange object)
\- S_sw_bc (swallow bottom center)
\\ S_sw_bl (swallow bottom left)
@@ -4562,13 +4618,30 @@ v S_vortex (vortex)
w S_worm (worm)
\(ti S_worm_tail (long worm tail)
W S_wraith (wraith)
x S_xan (xan or other mythical/fantastic insect)
x S_xan (xan or other extraordinary insect)
X S_xorn (xorn)
Y S_yeti (apelike creature)
Z S_zombie (zombie)
z S_zruty (zruty)
\ S_pet_override (any pet if ACCESSIBILITY=1 is set)
\ S_hero_override (hero if ACCESSIBILITY=1 is set)
.\"TABLE_END Do not delete this line.
.TE
.\" don't hyphenate file name across lines
.hw sysconf
.pg
.lp "Notes:"
.lp "*"
Several symbols in this table appear to be blank.
They are the space character, except for S_pet_override
and S_hero_override which don't have any default value
and can only be used if enabled in the \(lqsysconf\(rq file.
.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.
So S_rock is only used for boulders and not used at all if
overridden by the more specific S_boulder.
.pg
.hn 2
Configuring NetHack for Play by the Blind
@@ -4609,8 +4682,14 @@ configuration file will cause the game to run in a manner accessible
to the blind.
After you have gained some experience with the game
and with editing files, you may want to alter settings via \fBSYMBOLS=\fP
and \fBROGUESYMBOLS=\fP
in your configuration file to better suit your preferences.
The most crucial settings to make the game accessible are:
See the previous section for the special symbols S_pet_override
to force a consistent symbol for all pets and
S_hero_override to force a unique symbol for the player character
if \fBaccessibility\fP is enabled in the sysconf file.
.pg
The most crucial settings to make the game more accessible are:
.pg
.lp symset:NHAccess
Load a symbol set appropriate for use by blind players.
@@ -4644,7 +4723,7 @@ of moving 8 units at a time.
.lp nostatus_updates
Prevent updates to the status lines at the bottom of the screen, if
your screen-reader reads those lines. The same information can be
seen via the #attributes command.
seen via the \(lq#attributes\(rq command.
.hn 2
Global Configuration for System Administrators
.pg
@@ -4721,6 +4800,13 @@ to identify unique people for the score file.
MAX_STATUENAME_RANK\ =\ Maximum number of score file entries to use for
random statue names (default is 10).
.lp
ACCESSIBILITY\ =\ 0 or 1 to disable or enable, respectively, the ability for players
to set S_pet_override and S_hero_override symbols in their configuration file.
.lp
PORTABLE_DEVICE_PATHS\ =\ 0 or 1 Windows OS only, the game will look
for all of its external files, and write to all of its output files in one place
rather than at the standard locations.
.lp
DUMPLOGFILE\ =\ A filename where the end-of-game dumplog is saved.
Not defining this will prevent dumplog from being created. Only available
if your game is compiled with DUMPLOG. Allows the following placeholders:
@@ -4730,7 +4816,7 @@ if your game is compiled with DUMPLOG. Allows the following placeholders:
.PL %%
literal \(oq\f(CR%\fP\(cq
.PL %v
version (eg. \(lq\f(CR3.6.2\-0\fP\(rq)
version (eg. \(lq\f(CR3.6.3\-0\fP\(rq)
.PL %u
game UID
.PL %t
@@ -4893,7 +4979,7 @@ and \fBPaul Winner\fP, ported NetHack 3.1 to the PC.
\fBMike Engber\fP, \fBDavid Hairston\fP, \fBMichael Hamel\fP,
\fBJonathan Handler\fP, \fBJohnny Lee\fP, \fBTim Lennan\fP, \fBRob Menke\fP,
and \fBAndy Swanson\fP, developed NetHack 3.1 for the Macintosh,
porting it for MPW. Building on their development, \fBBarton House\fP
porting it for MPW. Building on their development, \fBBart House\fP
added a Think C port.
.pg
\fBTimo Hakulinen\fP ported NetHack 3.1 to OS/2. \fBEric Smith\fP
@@ -5052,7 +5138,7 @@ flavors and maintained the X11 interface.
\fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP
maintained the port of NetHack 3.6 for Mac OSX.
.pg
\fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBBarton House\fP,
\fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBBart House\fP,
\fBPasi Kallinen\fP, \fBAlex Kompel\fP, \fBDion Nicolaas\fP,
\fBDerek S. Ray\fP and \fBYitzhak Sapir\fP maintained the port of
NetHack 3.6 for Microsoft Windows.
@@ -5074,12 +5160,21 @@ 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
participant for decades, joined the NetHack Development Team in late May 2019.
.pg
NetHack 3.6.3 was released on December 5, 2019 containing over 190 bug
fixes to NetHack 3.6.2.
.pg
NetHack 3.6.4 was released on December 18, 2019 containing a security fix
and a few bug fixes.
.pg
The official NetHack web site is maintained by \fBKen Lorber\fP
at
.UR http://www.nethack.org/ .
.UR https://www.nethack.org/ .
.pg
.hn 2
SPECIAL THANKS
@@ -5089,7 +5184,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
@@ -5103,49 +5198,50 @@ miscreants in this, the list of Dungeoneers:
.
.TS S
center;
c c c.
c2 c2 c.
.\"TABLE_START
Adam Aronow Janet Walz Nathan Eady
Alex Kompel Janne Salmijarvi Norm Meluch
Alex Smith Jean-Christophe Collet Olaf Seibert
Andreas Dorn Jeff Bailey Pasi Kallinen
Andy Church Jochen Erwied Pat Rankin
Andy Swanson John Kallen Patric Mueller
Adam Aronow J. Ali Harlow Mikko Juola
Alex Kompel Janet Walz Nathan Eady
Alex Smith Janne Salmijarvi Norm Meluch
Andreas Dorn Jean-Christophe Collet Olaf Seibert
Andy Church Jeff Bailey Pasi Kallinen
Andy Swanson Jochen Erwied Pat Rankin
Andy Thomson John Kallen Patric Mueller
Ari Huttunen John Rupley Paul Winner
Barton House John S. Bien Pierre Martineau
Bart House John S. Bien Pierre Martineau
Benson I. Margulies Johnny Lee Ralf Brown
Bill Dyer Jon W{tte Ray Chason
Boudewijn Waijers Jonathan Handler Richard Addison
Bruce Cox Joshua Delahunty Richard Beigel
Bruce Holloway Karl Garrison Richard P. Hughey
Bruce Mewborne Keizo Yamamoto Rob Menke
Carl Schelin Ken Arnold Robin Bandy
Chris Russo Ken Arromdee Robin Johnson
David Cohrs Ken Lorber Roderick Schertler
David Damerell Ken Washikita Roland McGrath
David Gentzel Kevin Darcy Ron Van Iwaarden
David Hairston Kevin Hugo Ronnen Miller
Dean Luick Kevin Sitze Ross Brown
Del Lamb Kevin Smolkowski Sascha Wostmann
Derek S. Ray Kevin Sweet Scott Bigham
Deron Meranda Lars Huttar Scott R. Turner
Dion Nicolaas Leon Arnott Sean Hunt
Dylan O'Donnell M. Drew Streib Stephen Spackman
Eric Backus Malcolm Ryan Stefan Thielscher
Eric Hendrickson Mark Gooderum Stephen White
Eric R. Smith Mark Modrall Steve Creps
Eric S. Raymond Marvin Bressler Steve Linhart
Erik Andersen Matthew Day Steve VanDevender
Frederick Roeber Merlyn LeRoy Teemu Suikki
Gil Neiger Michael Allison Tim Lennan
Greg Laskin Michael Feir Timo Hakulinen
Greg Olson Michael Hamel Tom Almy
Gregg Wonderly Michael Sokolov Tom West
Hao-yang Wang Mike Engber Warren Cheung
Helge Hafting Mike Gallop Warwick Allison
Irina Rempt-Drijfhout Mike Passaretti Yitzhak Sapir
Carl Schelin Keith Simpson Robin Bandy
Chris Russo Ken Arnold Robin Johnson
David Cohrs Ken Arromdee Roderick Schertler
David Damerell Ken Lorber Roland McGrath
David Gentzel Ken Washikita Ron Van Iwaarden
David Hairston Kevin Darcy Ronnen Miller
Dean Luick Kevin Hugo Ross Brown
Del Lamb Kevin Sitze Sascha Wostmann
Derek S. Ray Kevin Smolkowski Scott Bigham
Deron Meranda Kevin Sweet Scott R. Turner
Dion Nicolaas Lars Huttar Sean Hunt
Dylan O'Donnell Leon Arnott Stephen Spackman
Eric Backus M. Drew Streib Stefan Thielscher
Eric Hendrickson Malcolm Ryan Stephen White
Eric R. Smith Mark Gooderum Steve Creps
Eric S. Raymond Mark Modrall Steve Linhart
Erik Andersen Marvin Bressler Steve VanDevender
Fredrik Ljungdahl Matthew Day Teemu Suikki
Frederick Roeber Merlyn LeRoy Tim Lennan
Gil Neiger Michael Allison Timo Hakulinen
Greg Laskin Michael Feir Tom Almy
Greg Olson Michael Hamel Tom West
Gregg Wonderly Michael Sokolov Warren Cheung
Hao-yang Wang Mike Engber Warwick Allison
Helge Hafting Mike Gallop Yitzhak Sapir
Irina Rempt-Drijfhout Mike Passaretti
Izchak Miller Mike Stephenson
J. Ali Harlow Mikko Juola
.\"TABLE_END Do not delete this line.
.TE
.pg
@@ -5155,3 +5251,4 @@ J. Ali Harlow Mikko Juola
.\"Amiga is a trademark of Commodore-Amiga, Inc
.sm "Brand and product names are trademarks or registered trademarks \
of their respective holders."
.\"EOF

View File

@@ -45,7 +45,7 @@
%.au
\author{Original version - Eric S. Raymond\\
(Edited and expanded for 3.6 by Mike Stephenson and others)}
\date{October 1, 2019}
\date{December 18, 2019}
\maketitle
@@ -796,7 +796,14 @@ Eat food.\\
Normally checks for edible item(s) on the floor, then if none are found
or none are chosen, checks for edible item(s) in inventory.
Precede `{\tt e}' with the `{\tt m}' prefix to bypass attempting to eat
anything off the floor.
anything off the floor.\\
%.lp ""
If you attempt to eat while already satiated, you might choke to death.
If you risk it, you will be asked whether
to ``continue eating?'' {\it if you survive the first bite\/}.
You can set the
{\it paranoid\verb+_+confirmation:eating\/}
option to require a response of ``{\tt yes}'' instead of just `{\tt y}'.
%.lp
% Make sure Elbereth is not hyphenated below, the exact spelling matters.
% (Only specified here to parallel Guidebook.mn; use of \tt font implicity
@@ -1130,7 +1137,7 @@ slot to another so that it has a letter which is more meaningful for you
or that it will appear in a particular location when inventory listings
are displayed.
You can move to a currently empty slot, or if the destination is
occupied--and won't merge--the item there will swap slots with the one
occupied---and won't merge---the item there will swap slots with the one
being moved.
``{\tt \#adjust}'' can also be used to split a stack of objects; when
choosing the item to adjust, enter a count prior to its letter.\\
@@ -1333,7 +1340,7 @@ Autocompletes.
Debug mode only.\\
%.lp ""
Asks for confirmation; default is `{\tt n}' (no); continue playing.
To really panic, respond with `{\tt y}''.
To really panic, respond with `{\tt y}'.
You can set the
{\it paranoid\verb+_+confirmation:quit\/}
option to require a response of ``{\tt yes}'' instead.
@@ -2044,9 +2051,9 @@ 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 noggin--
a special ``remembered, unseen monster'' marker will be displayed at
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
proven that there is no monster there, even if the unseen monster
@@ -2326,7 +2333,7 @@ But first you need to have a weapon in each hand.
(Note that your two weapons are not fully equal; the one in the
hand you normally wield with is considered primary and the other
one is considered secondary. The most noticeable difference is
after you stop--or before you begin, for that matter--wielding
after you stop---or before you begin, for that matter---wielding
two weapons at once. The primary is your wielded weapon and the
secondary is just an item in your inventory that's been designated
as alternate weapon.)
@@ -2558,7 +2565,7 @@ The commands to use rings are `{\tt P}' (put on) and `{\tt R}' (remove).
%.pg
Spellbooks are tomes of mighty magic. When studied with the `{\tt r}' (read)
command, they transfer to the reader the knowledge of a spell (and
therefore eventually become unreadable) --- unless the attempt backfires.
therefore eventually become unreadable)---unless the attempt backfires.
Reading a cursed spellbook or one with mystic runes beyond
your ken can be harmful to your health!
@@ -2701,9 +2708,9 @@ 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 away--
until you can see or feel that location again.
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.
When that marker is later removed
@@ -2866,19 +2873,32 @@ for system administrators.
\subsection*{Using a configuration file}
%.pg
The default name of the configuration file varies on different
operating systems. On MS-DOS and Windows, it is \mbox{``defaults.nh''} in
the same folder as \mbox{{\it nethack.exe\/}} or \mbox{{\it nethackW.exe\/}}.
The default name and location of the configuration file varies on different
operating systems.\\
%.lp ""
On Unix, Linux and Mac OS X it is \mbox{``.nethackrc''} 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.
can be created with any text editor.\\
%.pg
%.lp ""
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.
After runing {\it NetHack\/} for the first time, you should find a default
template for ths configuration file named \mbox{``.nethackrc.template''} in
\mbox{{``\%USERPROFILE\%\textbackslash NetHack\textbackslash 3.6''}}.
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
\mbox{{\it nethack.exe\/}}.\\
%.lp ""
Any line in the configuration file starting with `{\tt \#}' is treated as a comment.
Empty lines are ignored.
%.pg
Any line beginning with `{\tt [}' and ending in `{\tt ]}' is considered a section
Empty lines are ignored. Any line beginning with `{\tt [}' and ending in `{\tt ]}' is considered a section
marker. The text between the square brackets is the section name.
Lines after a section marker belong to that section, and are
ignored unless a CHOOSE -statement was used to select that section.
@@ -2886,9 +2906,13 @@ Section names are case insensitive.
%.pg
You can use different configuration statements in the file, some
of which can be used multiple times. In general, the statements are
of which can be used multiple times.
In general, the statements are
written in capital letters, followed by an equals sign, followed by
settings particular to that statement. Here is a list of allowed statements:
settings particular to that statement.
%.pg
Here is a list of allowed statements:
%.lp
\blist{}
@@ -2903,7 +2927,7 @@ You can specify multiple OPTIONS statements, and multiple options
separated by commas in a single OPTIONS statement.
(Comma separated options are processed from right to left.)
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
@@ -2937,6 +2961,9 @@ HACKDIR, must be writable.
\item[\bb{TROUBLEDIR}]
The location that a record of game aborts and self-diagnosed game problems
is kept. Defaults to HACKDIR, must be writable.
%
% config file entries beyond this point are shown alphabetically
%
%.lp
\item[\bb{AUTOCOMPLETE}]
Enable or disable an extended command autocompletion.
@@ -2946,11 +2973,11 @@ autocompletion, list the extended command. Prefix the
command with ``{{\tt !}}'' to disable the autocompletion
for that command.
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
AUTOCOMPLETE=zap,!annotate
AUTOCOMPLETE=zap,!annotate
\end{verbatim}
%.ed
@@ -2965,7 +2992,7 @@ extended commands. You can specify multiple bindings. Format is key
followed by the command, separated by a colon.
See the ``Changing Key Bindings`` section for more information.
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
@@ -2978,7 +3005,7 @@ Example:
Chooses at random one of the comma-separated parameters as an active
section name. Lines in other sections are ignored.
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
@@ -2991,23 +3018,39 @@ Example:
\end{verbatim}
%.ed
%.lp
\item[\bb{MSGTYPE}]
Change the way messages are shown in the top status line.
See the ``Configuring Message Types`` section.
%.lp
\item[\bb{MENUCOLOR}]
Highlight menu lines with different colors.
See the ``Configuring Menu Colors`` section.
%.lp
\item[\bb{MSGTYPE}]
Change the way messages are shown in the top status line.
See the ``Configuring Message Types`` section.
%.lp
\item[\bb{ROGUESYMBOLS}]
Custom symbols for for the rogue level's symbol set.
See {\it SYMBOLS} below.
%.lp
\item[\bb{SOUND}]
Define a sound mapping.
See the ``Configuring User Sounds'' section.
%.lp
\item[\bb{SOUNDDIR}]
Define the directory that contains the sound files.
See the ``Configuring User Sounds'' section.
%.lp
\item[\bb{SYMBOLS}]
Override one or more symbols in the symbols files.
Override one or more symbols in the symbol set used for all dungeon
levels except for the special rogue level.
See the ``Modifying {\it NetHack\/} Symbols'' section.
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
SYMBOLS=S_boulder:0
# replace small punctuation (tick marks) with digits
SYMBOLS=S_boulder:0,S_golem:7
\end{verbatim}
%.ed
@@ -3017,24 +3060,19 @@ Debug mode only: extra items to add to initial inventory.
Value is the name of a text file containing a list of item names,
one per line, up to a maximum of 128 lines.
Each line is processed by the function that handles wishing.
%.pg
%.lp ""
Example:
%.sd
\begin{verbatim}
WIZKIT=~/wizkit.txt
WIZKIT=~/wizkit.txt
\end{verbatim}
%.ed
%.lp
\item[\bb{SOUNDDIR}]
Define the directory that contains the sound files.
See the ``Configuring User Sounds'' section.
%.lp
\item[\bb{SOUND}]
Define a sound mapping. See the ``Configuring User Sounds'' section.
\elist
%.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.
@@ -3042,10 +3080,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
@@ -3487,7 +3528,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
@@ -3606,6 +3647,9 @@ a peaceful monster;
\item[{\tt wand-break}]
require ``{\tt yes}'' rather than `{\tt y}' to confirm breaking
a wand;
\item[{\tt eating}]
require ``{\tt yes}'' rather than `{\tt y}' to confirm whether to
continue eating;
\item[{\tt Were-change}]
require ``{\tt yes}'' rather than `{\tt y}' to confirm changing form
due to lycanthropy
@@ -3966,7 +4010,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
@@ -4078,7 +4122,7 @@ Number of lines for traditional below-the-map status display.
Acceptable values are 2 and 3 (default is 2).
Curses and tty interfaces only.
%.lp
\item[\ib{term\verb+_+cols}\ \ {\it and}]"
\item[\ib{term\verb+_+cols} {\normalfont and}]
%.lp
\item[\ib{term\verb+_+rows}]
Curses interface only.
@@ -4219,7 +4263,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}]
@@ -4289,13 +4334,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
@@ -4344,8 +4390,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}]
@@ -4353,157 +4400,157 @@ Below are the special commands you can rebind. Some of them can be bound to
same keys with no problems, others are in the same ``context'', and if bound
to same keys, only one of those commands will be available. Special command
can only be bound to a single key.
\elist
%.pg
\blist{}
\blist{\itemindent 10mm \labelwidth 15mm \rightmargin 15mm}
%.lp
\item{\bb{count}}
\item[{\bb{count}}]
Prefix key to start a count, to repeat a command this many times.
With {\it number\verb+_+pad\/} only. Default is `{\tt n}'.
With {\it number\verb+_+pad\/} only. Default is~`{\tt n}'.
%.lp
\item{\bb{doinv}}
Show inventory. With {\it number\verb+_+pad\/} only. Default is `{\tt 0}'.
\item[{\bb{doinv}}]
Show inventory. With {\it number\verb+_+pad\/} only. Default is~`{\tt 0}'.
%.lp
\item{\bb{fight}}
Prefix key to force fight a direction. Default is `{\tt F}'.
\item[{\bb{fight}}]
Prefix key to force fight a direction. Default is~`{\tt F}'.
%.lp
\item{\bb{fight.numpad}}
\item[{\bb{fight.numpad}}]
Prefix key to force fight a direction. With {\it number\verb+_+pad\/} only.
Default is `{\tt -}'.
Default is~`{\tt -}'.
%.lp
\item{\bb{getdir.help}}
When asked for a direction, the key to show the help. Default is `{\tt ?}'.
\item[{\bb{getdir.help}}]
When asked for a direction, the key to show the help. Default is~`{\tt ?}'.
%.lp
\item{\bb{getdir.self}}
When asked for a direction, the key to target yourself. Default is `{\tt .}'.
\item[{\bb{getdir.self}}]
When asked for a direction, the key to target yourself. Default is~`{\tt .}'.
%.lp
\item{\bb{getdir.self2}}
When asked for a direction, the key to target yourself. Default is `{\tt s}'.
\item[{\bb{getdir.self2}}]
When asked for a direction, the key to target yourself. Default is~`{\tt s}'.
%.lp
\item{\bb{getpos.autodescribe}}
\item[{\bb{getpos.autodescribe}}]
When asked for a location, the key to toggle {\it autodescribe\/}.
Default is `{\tt \#}'.
Default is~`{\tt \#}'.
%.lp
\item{\bb{getpos.all.next}}
\item[{\bb{getpos.all.next}}]
When asked for a location, the key to go to next closest interesting thing.
Default is `{\tt a}'.
Default is~`{\tt a}'.
%.lp
\item{\bb{getpos.all.prev}}
\item[{\bb{getpos.all.prev}}]
When asked for a location, the key to go to previous closest interesting thing.
Default is `{\tt A}'.
Default is~`{\tt A}'.
%.lp
\item{\bb{getpos.door.next}}
\item[{\bb{getpos.door.next}}]
When asked for a location, the key to go to next closest door or doorway.
Default is `{\tt d}'.
Default is~`{\tt d}'.
%.lp
\item{\bb{getpos.door.prev}}
\item[{\bb{getpos.door.prev}}]
When asked for a location, the key to go to previous closest door or doorway.
Default is `{\tt D}'.
Default is~`{\tt D}'.
%.lp
\item{\bb{getpos.help}}
When asked for a location, the key to show help. Default is `{\tt ?}'.
\item[{\bb{getpos.help}}]
When asked for a location, the key to show help. Default is~`{\tt ?}'.
%.lp
\item{\bb{getpos.mon.next}}
\item[{\bb{getpos.mon.next}}]
When asked for a location, the key to go to next closest monster.
Default is `{\tt m}'.
Default is~`{\tt m}'.
%.lp
\item{\bb{getpos.mon.prev}}
\item[{\bb{getpos.mon.prev}}]
When asked for a location, the key to go to previous closest monster.
Default is `{\tt M}'.
Default is~`{\tt M}'.
%.lp
\item{\bb{getpos.obj.next}}
\item[{\bb{getpos.obj.next}}]
When asked for a location, the key to go to next closest object.
Default is `{\tt o}'.
Default is~`{\tt o}'.
%.lp
\item{\bb{getpos.obj.prev}}
\item[{\bb{getpos.obj.prev}}]
When asked for a location, the key to go to previous closest object.
Default is `{\tt O}'.
Default is~`{\tt O}'.
%.lp
\item{\bb{getpos.menu}}
\item[{\bb{getpos.menu}}]
When asked for a location, and using one of the next or previous keys to
cycle through targets, toggle showing a menu instead. Default is `{\tt !}'.
cycle through targets, toggle showing a menu instead. Default is~`{\tt !}'.
%.lp
\item{\bb{getpos.moveskip}}
\item[{\bb{getpos.moveskip}}]
When asked for a location, and using the shifted movement keys or
meta-digit keys to fast-move around, move by skipping the same glyphs
instead of by 8 units.
Default is `{\tt *}'.
Default is~`{\tt *}'.
%.lp
\item{\bb{getpos.filter}}
\item[{\bb{getpos.filter}}]
When asked for a location, change the filtering mode when using one of
the next or previous keys to cycle through targets. Toggles between no
filtering, in view only, and in the same area only. Default is `{\tt "}'.
filtering, in view only, and in the same area only. Default is~`{\tt "}'.
%.lp
\item{\bb{getpos.pick}}
\item[{\bb{getpos.pick}}]
When asked for a location, the key to choose the location, and possibly
ask for more info. Default is `{\tt .}'.
ask for more info. Default is~`{\tt .}'.
%.lp
\item{\bb{getpos.pick.once}}
\item[{\bb{getpos.pick.once}}]
When asked for a location, the key to choose the location, and skip
asking for more info. Default is `{\tt ,}'.
asking for more info. Default is~`{\tt ,}'.
%.lp
\item{\bb{getpos.pick.quick}}
\item[{\bb{getpos.pick.quick}}]
When asked for a location, the key to choose the location, skip asking
for more info, and exit the location asking loop. Default is `{\tt ;}'.
for more info, and exit the location asking loop. Default is~`{\tt ;}'.
%.lp
\item{\bb{getpos.pick.verbose}}
\item[{\bb{getpos.pick.verbose}}]
When asked for a location, the key to choose the location, and show more
info without asking. Default is `{\tt :}'.
info without asking. Default is~`{\tt :}'.
%.lp
\item{\bb{getpos.self}}
\item[{\bb{getpos.self}}]
When asked for a location, the key to go to your location.
Default is `{\tt @}'.
Default is~`{\tt @}'.
%.lp
\item{\bb{getpos.unexplored.next}}
\item[{\bb{getpos.unexplored.next}}]
When asked for a location, the key to go to next closest unexplored location.
Default is `{\tt x}'.
Default is~`{\tt x}'.
%.lp
\item{\bb{getpos.unexplored.prev}}
\item[{\bb{getpos.unexplored.prev}}]
When asked for a location, the key to go to previous closest unexplored
location. Default is `{\tt X}'.
location. Default is~`{\tt X}'.
%.lp
\item{\bb{getpos.valid}}
\item[{\bb{getpos.valid}}]
When asked for a location, the key to go to show valid target locations.
Default is `{\tt \$}'.
Default is~`{\tt \$}'.
%.lp
\item{\bb{getpos.valid.next}}
\item[{\bb{getpos.valid.next}}]
When asked for a location, the key to go to next closest valid location.
Default is `{\tt z}'.
Default is~`{\tt z}'.
%.lp
\item{\bb{getpos.valid.prev}}
\item[{\bb{getpos.valid.prev}}]
When asked for a location, the key to go to previous closest valid location.
Default is `{\tt Z}'.
Default is~`{\tt Z}'.
%.lp
\item{\bb{nopickup}}
Prefix key to move without picking up items. Default is `{\tt m}'.
\item[{\bb{nopickup}}]
Prefix key to move without picking up items. Default is~`{\tt m}'.
%.lp
\item{\bb{redraw}}
Key to redraw the screen. Default is `{\tt \^{}R}'.
\item[{\bb{redraw}}]
Key to redraw the screen. Default is~`{\tt \^{}R}'.
%.lp
\item{\bb{redraw.numpad}}
\item[{\bb{redraw.numpad}}]
Key to redraw the screen. With {\it number\verb+_+pad\/} only.
Default is `{\tt \^{}L}'.
Default is~`{\tt \^{}L}'.
%.lp
\item{\bb{repeat}}
Key to repeat previous command. Default is `{\tt \^{}A}'.
\item[{\bb{repeat}}]
Key to repeat previous command. Default is~`{\tt \^{}A}'.
%.lp
\item{\bb{reqmenu}}
Prefix key to request menu from some commands. Default is `{\tt m}'.
\item[{\bb{reqmenu}}]
Prefix key to request menu from some commands. Default is~`{\tt m}'.
%.lp
\item{\bb{run}}
Prefix key to run towards a direction. Default is `{\tt G}'.
\item[{\bb{run}}]
Prefix key to run towards a direction. Default is~`{\tt G}'.
%.lp
\item{\bb{run.nopickup}}
\item[{\bb{run.nopickup}}]
Prefix key to run towards a direction without picking up items on the way.
Default is `{\tt M}'.
Default is~`{\tt M}'.
%.lp
\item{\bb{run.numpad}}
\item[{\bb{run.numpad}}]
Prefix key to run towards a direction. With {\it number\verb+_+pad\/} only.
Default is `{\tt 5}'.
Default is~`{\tt 5}'.
%.lp
\item{\bb{rush}}
Prefix key to rush towards a direction. Default is `{\tt g}'.
\elist
\item[{\bb{rush}}]
Prefix key to rush towards a direction. Default is~`{\tt g}'.
\elist
@@ -4515,7 +4562,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"
@@ -4553,7 +4600,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
@@ -4564,11 +4611,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
@@ -4620,8 +4668,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
@@ -4642,7 +4690,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{}
@@ -4708,6 +4756,8 @@ combination with any of the other attributes.
To specify both a color and an attribute, use `\&' to combine them.
To specify multiple attributes, use `+' to combine those.
%.lp ""
For example: {\tt magenta\&inverse+dim}.
Note that the display may substitute or ignore particular attributes
@@ -4760,23 +4810,19 @@ percentage or absolute number threshold, or text to match against.
\blist{}
%.lp "*"
\item{\bb{}}
``{\tt always}'' will set the default attributes for that field.
\item[{\tt always}] will set the default attributes for that field.
%.lp "*"
\item{\bb{}}
``{\tt up}'' and ``{\tt down}'' set the field attributes for when the field
value changes upwards or downwards. This attribute times out after
{\tt statushilites} turns.
\item[{\tt up}{\normalfont, }{\tt down}] set the field attributes
for when the field value changes upwards or downwards. This attribute
times out after {\tt statushilites} turns.
%.lp "*"
\item{\bb{}}
``{\tt changed}'' sets the field attribute for when the field value
\item[{\tt changed}] sets the field attribute for when the field value
changes. This attribute times out after {\tt statushilites} turns.
(If a field has both a ``changed'' rule and an ``up'' or ``down''
rule which matches a change in the field's value,
the ``up'' or ``down'' one takes precedence.)
%.lp "*"
\item{\bb{}}
percentage sets the field attribute when the field value
\item[{\tt percentage}] sets the field attribute when the field value
matches the percentage.
It is specified as a number between 0 and 100, followed by `{\tt \%}'
(percent sign).
@@ -4790,7 +4836,7 @@ Percentages for ``{\it hitpoints\/}'' and ``{\it power\/}'' are
straightforward; they're based on the corresponding maximum field.
Percentage highlight rules are also allowed for ``{\it experience level\/}''
and ``{\it experience points\/}'' (valid when the
(\it showexp\/}
{\it showexp\/}
option is enabled).
For those, the percentage is based on the progress from the start of
the current experience level to the start of the next level.
@@ -4804,8 +4850,7 @@ exactly 1 experience point short of the next level.
% percentage will remain at 0\% no matter have many additional experience
% points you earn.)
%.lp "*"
\item{\bb{}}
absolute value sets the attribute when the field value
\item[{\tt absolute}] value sets the attribute when the field value
matches that number.
The number must be 0 or higher, except for ``{\it armor-class\/} which
allows negative values, and may optionally be preceded by `{\tt =}'.
@@ -4814,8 +4859,7 @@ it also matches when value is below or above.
If the prefix is `{\tt <}' or `{\tt >}', only match when strictly
above or below.
%.lp "*"
\item{\bb{}}
text match sets the attribute when the field value matches the text.
\item[{\tt text}] match sets the attribute when the field value matches the text.
Text matches can only be used for ``{\it alignment\/}'',
``{\it carrying-capacity\/}'', ``{\it hunger\/}'', ``{\it dungeon-level\/}'',
and ``{\it title\/}''.
@@ -4825,7 +4869,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.
@@ -4866,11 +4910,14 @@ Set the name of the symbol set that you want to load for display
on the rogue level.
\elist
You can also override one or more symbols using the {\it SYMBOLS\/} config
file option. Symbols are specified as {\it name:value\/} pairs. Note that
{\it NetHack\/} escape-processes the {\it value\/} string in conventional C
fashion. This means that `\verb+\+' is a prefix to take the following
character literally. Thus `\verb+\+' needs to be represented as `\verb+\\+'.
You can also override one or more symbols using the {\it SYMBOLS\/} and
{\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.
This means that `\verb+\+' is a prefix to take the following character
literally.
Thus `\verb+\+' needs to be represented as `\verb+\\+'.
The special prefix
`\verb+\m+' switches on the meta bit in the symbol value, and the
`{\tt \^{}}' prefix causes the following character to be treated as a control
@@ -5008,7 +5055,8 @@ Default & Symbol Name & Description\\
\verb+@+ & S\verb+_+ss3 & (magic shield 3 of 4)\\
\verb@*@ & S\verb+_+ss4 & (magic shield 4 of 4)\\
\verb@^@ & S\verb+_+statue\verb+_+trap & (statue trap)\\
\verb@ @ & S\verb+_+stone & (dark part of a room)\\
\verb@ @ & S\verb+_+stone & (solid rock or unexplored terrain\\
& & \,or dark part of a room)\\
\verb@]@ & S\verb+_+strange\verb+_+obj & (strange object)\\
\verb@-@ & S\verb+_+sw\verb+_+bc & (swallow bottom center)\\
\verb@\@ & S\verb+_+sw\verb+_+bl & (swallow bottom left)\\
@@ -5023,7 +5071,7 @@ Default & Symbol Name & Description\\
\verb@\@ & S\verb+_+throne & (opulent throne)\\
\verb@-@ & S\verb+_+tlcorn & (top left corner)\\
\verb@|@ & S\verb+_+tlwall & (wall)\\
\verb@(@ & S\verb+_+tool & (useful item (pick-axe\, key\, lamp...))\\
\verb@(@ & S\verb+_+tool & (useful item (pick-axe, key, lamp...))\\
\verb@^@ & S\verb+_+trap\verb+_+door & (trap door)\\
\verb@t@ & S\verb+_+trapper & (trapper or lurker above)\\
\verb@-@ & S\verb+_+trcorn & (top right corner)\\
@@ -5052,14 +5100,33 @@ Default & Symbol Name & Description\\
\verb@w@ & S\verb+_+worm & (worm)\\
\verb@~@ & S\verb+_+worm\verb+_+tail & (long worm tail)\\
\verb@W@ & S\verb+_+wraith & (wraith)\\
\verb@x@ & S\verb+_+xan & (xan or other mythical/fantastic insect)\\
\verb@x@ & S\verb+_+xan & (xan or other extraordinary insect)\\
\verb@X@ & S\verb+_+xorn & (xorn)\\
\verb@Y@ & S\verb+_+yeti & (apelike creature)\\
\verb@Z@ & S\verb+_+zombie & (zombie)\\
\verb@z@ & S\verb+_+zruty & (zruty)
\verb@z@ & S\verb+_+zruty & (zruty)\\
\verb@ @ & S\verb+_+pet\verb+_+override & (any pet if ACCESSIBILITY=1 is set)\\
\verb@ @ & S\verb+_+hero\verb+_+override & (hero if ACCESSIBILITY=1 is set)
\end{longtable}%
}
\hyphenation{sysconf} %no syllable breaks => don't hyphenate file name
%.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+_+hero\verb+_+override which don't have any default value
and can only be used if enabled in the ``sysconf'' file.
%.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.
So S\verb+_+rock is only used for boulders and not used at all if
overridden by the more specific S\verb+_+boulder.
%.pg
%.hn 2
\subsection*{Configuring {\it NetHack\/} for Play by the Blind}
@@ -5101,8 +5168,15 @@ is a symset called {\it NHAccess\/}. Selecting that symset in your
configuration file will cause the game to run in a manner accessible
to the blind. After you have gained some experience with the game
and with editing files, you may want to alter settings via {\it SYMBOLS=\/}
and {\it ROGUESYMBOLS=\/}
in your configuration file to better suit your preferences.
The most crucial settings to make the game accessible are:
See the previous section for the special symbols S\verb+_+pet\verb+_+override
to force a consistent symbol for all pets and S\verb+_+hero\verb+_+override
to force a unique symbol for the player character if {\it accessibility\/}
is enabled in the {\it sysconf\/} file.
%.pg
The most crucial settings to make the game more accessible are:
%.pg
\blist{}
%.lp
@@ -5235,6 +5309,16 @@ Minimum number of points to get an entry in the score file.
0 or 1 to use user names or numeric userids, respectively, to identify
unique people for the score file
%.lp
\item[\ib{ACCESSIBILITY}]
0 or 1 to disable or enable, respectively, the ability for players
to set S\verb+_+pet\verb+_+override and S\verb+_+hero\verb+_+override
symbols in their configuration file.
%.lp
\item[\ib{PORTABLE\verb+_+DEVICE\verb+_+PATHS}]
0 or 1 Windows OS only, the game will look for all of its external
files, and write to all of its output files in one place
rather than at the standard locations.
%.lp
\item[\ib{DUMPLOGFILE}]
A filename where the end-of-game dumplog is saved.
Not defining this will prevent dumplog from being created. Only available
@@ -5242,7 +5326,7 @@ if your game is compiled with DUMPLOG. Allows the following placeholders:
%.sd
%.si
{\tt \%\%} --- literal `{\tt \%}'\\
{\tt \%v} --- version (eg. ``{\tt 3.6.2-0}'')\\
{\tt \%v} --- version (eg. ``{\tt 3.6.3-0}'')\\
{\tt \%u} --- game UID\\
{\tt \%t} --- game start time, UNIX timestamp format\\
{\tt \%T} --- current time, UNIX timestamp format\\
@@ -5434,7 +5518,7 @@ with help from {\it Ross Brown}, {\it Mike Engber}, {\it David Hairston},
{\it Michael Hamel}, {\it Jonathan Handler}, {\it Johnny Lee},
{\it Tim Lennan}, {\it Rob Menke}, and {\it Andy Swanson},
developed {\it NetHack\/} 3.1 for the Macintosh, porting it for MPW.
Building on their development, {\it Barton House} added a Think C port.
Building on their development, {\it Bart House} added a Think C port.
%.pg
\medskip
@@ -5647,7 +5731,7 @@ maintained the port of {\it NetHack\/} 3.6 for Mac OSX.
%.pg
\medskip
{\it Michael Allison}, {\it David Cohrs}, {\it Barton House},
{\it Michael Allison}, {\it David Cohrs}, {\it Bart House},
{\it Pasi Kallinen}, {\it Alex Kompel}, {\it Dion Nicolaas},
{\it Derek S. Ray} and {\it Yitzhak Sapir}
maintained the port of {\it NetHack\/} 3.6 for Microsoft Windows.
@@ -5678,15 +5762,30 @@ 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
\medskip
{\it Bart House}, who had contributed to the game as a porting team participant
for decades, joined the {\it NetHack Development Team} in late May 2019.
%.pg
\medskip
NetHack 3.6.3 was released on December 5, 2019 containing over 190 bug
fixes to NetHack 3.6.2.
%.pg
\medskip
NetHack 3.6.4 was released on December 18, 2019 containing a security fix and
a few bug fixes.
%.pg
\medskip
\nd The official {\it NetHack\/} web site is maintained by {\it Ken Lorber} at
{\catcode`\#=11
\special{html:<a href="http://www.nethack.org/">}}
http:{\tt /}{\tt /}www.nethack.org{\tt /}.
\special{html:<a href="https://www.nethack.org/">}}
https:{\tt /}{\tt /}www.nethack.org{\tt /}.
{\catcode`\#=11
\special{html:</a>}}
@@ -5699,7 +5798,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
@@ -5708,54 +5807,55 @@ 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
\begin{center}
\begin{tabular}{llll}
%TABLE_START
Adam Aronow & Janet Walz & Nathan Eady\\
Alex Kompel & Janne Salmij\"{a}rvi & Norm Meluch\\
Alex Smith & Jean-Christophe Collet & Olaf Seibert\\
Andreas Dorn & Jeff Bailey & Pasi Kallinen\\
Andy Church & Jochen Erwied & Pat Rankin\\
Andy Swanson & John Kallen & Patric Mueller\\
Adam Aronow & J. Ali Harlow & Mikko Juola\\
Alex Kompel & Janet Walz & Nathan Eady\\
Alex Smith & Janne Salmij\"{a}rvi & Norm Meluch\\
Andreas Dorn & Jean-Christophe Collet & Olaf Seibert\\
Andy Church & Jeff Bailey & Pasi Kallinen\\
Andy Swanson & Jochen Erwied & Pat Rankin\\
Andy Thomson & John Kallen & Patric Mueller\\
Ari Huttunen & John Rupley & Paul Winner\\
Barton House & John S. Bien & Pierre Martineau\\
Bart House & John S. Bien & Pierre Martineau\\
Benson I. Margulies & Johnny Lee & Ralf Brown\\
Bill Dyer & Jon W\{tte & Ray Chason\\
Boudewijn Waijers & Jonathan Handler & Richard Addison\\
Bruce Cox & Joshua Delahunty & Richard Beigel\\
Bruce Holloway & Karl Garrison & Richard P. Hughey\\
Bruce Mewborne & Keizo Yamamoto & Rob Menke\\
Carl Schelin & Ken Arnold & Robin Bandy\\
Chris Russo & Ken Arromdee & Robin Johnson\\
David Cohrs & Ken Lorber & Roderick Schertler\\
David Damerell & Ken Washikita & Roland McGrath\\
David Gentzel & Kevin Darcy & Ron Van Iwaarden\\
David Hairston & Kevin Hugo & Ronnen Miller\\
Dean Luick & Kevin Sitze & Ross Brown\\
Del Lamb & Kevin Smolkowski & Sascha Wostmann\\
Derek S. Ray & Kevin Sweet & Scott Bigham\\
Deron Meranda & Lars Huttar & Scott R. Turner\\
Dion Nicolaas & Leon Arnott & Sean Hunt\\
Dylan O'Donnell & M. Drew Streib & Stephen Spackman\\
Eric Backus & Malcolm Ryan & Stefan Thielscher\\
Eric Hendrickson & Mark Gooderum & Stephen White\\
Eric R. Smith & Mark Modrall & Steve Creps\\
Eric S. Raymond & Marvin Bressler & Steve Linhart\\
Erik Andersen & Matthew Day & Steve VanDevender\\
Frederick Roeber & Merlyn LeRoy & Teemu Suikki\\
Gil Neiger & Michael Allison & Tim Lennan\\
Greg Laskin & Michael Feir & Timo Hakulinen\\
Greg Olson & Michael Hamel & Tom Almy\\
Gregg Wonderly & Michael Sokolov & Tom West\\
Hao-yang Wang & Mike Engber & Warren Cheung\\
Helge Hafting & Mike Gallop & Warwick Allison\\
Irina Rempt-Drijfhout & Mike Passaretti & Yitzhak Sapir\\
Izchak Miller & Mike Stephenson\\
J. Ali Harlow & Mikko Juola
Carl Schelin & Keith Simpson & Robin Bandy\\
Chris Russo & Ken Arnold & Robin Johnson\\
David Cohrs & Ken Arromdee & Roderick Schertler\\
David Damerell & Ken Lorber & Roland McGrath\\
David Gentzel & Ken Washikita & Ron Van Iwaarden\\
David Hairston & Kevin Darcy & Ronnen Miller\\
Dean Luick & Kevin Hugo & Ross Brown\\
Del Lamb & Kevin Sitze & Sascha Wostmann\\
Derek S. Ray & Kevin Smolkowski & Scott Bigham\\
Deron Meranda & Kevin Sweet & Scott R. Turner\\
Dion Nicolaas & Lars Huttar & Sean Hunt\\
Dylan O'Donnell & Leon Arnott & Stephen Spackman\\
Eric Backus & M. Drew Streib & Stefan Thielscher\\
Eric Hendrickson & Malcolm Ryan & Stephen White\\
Eric R. Smith & Mark Gooderum & Steve Creps\\
Eric S. Raymond & Mark Modrall & Steve Linhart\\
Erik Andersen & Marvin Bressler & Steve VanDevender\\
Fredrik Ljungdahl & Matthew Day & Teemu Suikki\\
Frederick Roeber & Merlyn LeRoy & Tim Lennan\\
Gil Neiger & Michael Allison & Timo Hakulinen\\
Greg Laskin & Michael Feir & Tom Almy\\
Greg Olson & Michael Hamel & Tom West\\
Gregg Wonderly & Michael Sokolov & Warren Cheung\\
Hao-yang Wang & Mike Engber & Warwick Allison\\
Helge Hafting & Mike Gallop & Yitzhak Sapir\\
Irina Rempt-Drijfhout & Mike Passaretti\\
Izchak Miller & Mike Stephenson
%TABLE_END Do not delete this line.
\end{tabular}
\end{center}
@@ -5776,7 +5876,3 @@ J. Ali Harlow & Mikko Juola
%\end{flushleft}
\end{document}

File diff suppressed because it is too large Load Diff

View File

@@ -347,7 +347,8 @@
# How the map window is shown? Windows GUI only.
# possible map_mode options include: tiles, ascii4x6,
# ascii6x8, ascii8x8, ascii16x8, ascii7x12, ascii8x12, ascii16x12,
# ascii12x16, ascii10x18, fit_to_screen
# ascii12x16, ascii10x18, fit_to_screen, ascii_fit_to_screen,
# tiles_fit_to_screen
#OPTIONS=map_mode:tiles
# Define alternative file for the files, and the tile size

View File

@@ -1,419 +0,0 @@
.TH DGN_COMP 6 "25 May 2015" NETHACK
.de ND
.ds Nd \\$3
..
.de NB
.ds Nb \\$2
..
.de NR
.ds Nr \\$2
..
.ND $NHDT-Date: 1524689548 2018/04/25 20:52:28 $
.NB $NHDT-Branch: NetHack-3.6.0 $
.NR $NHDT-Revision: 1.6 $
.ds Na Kenneth Lorber
.SH NAME
dgn_comp \- NetHack dungeon compiler
.SH SYNOPSIS
.B dgn_comp
[
.I file
]
.PP
If no arguments are given, it reads standard input.
.SH DESCRIPTION
.PP
.I Dgn_comp
is a dungeon compiler for NetHack version 3.2 and higher. It
takes a description file as an argument and produces a dungeon "script"
that is to be loaded by NetHack at runtime.
.PP
The purpose of this tool is to provide NetHack administrators and
implementors with a convenient way to create a custom dungeon for the
game, without having to recompile the entire world.
.SH GRAMMAR
.PP
DUNGEON:
.B name
.B bonesmarker
(
.B base
,
.B rand
) [
.B %age
]
.PP
where
.B name
is the dungeon name,
.B bonesmarker
is a letter for marking bones files, (
.B base
,
.B rand
) is the number of levels, and
.B %age
is its percentage chance of being generated (if absent, 100% chance).
DESCRIPTION:
.B tag
.PP
where
.B tag
is currently one of
.BR HELLISH ,
.BR MAZELIKE ,
or
.BR ROGUELIKE .
ALIGNMENT | LEVALIGN: [
.B lawful
|
.B neutral
|
.B chaotic
|
.B unaligned
]
.PP
gives the alignment of the dungeon/level (default is unaligned).
ENTRY:
.B level
.PP
the dungeon entry point. The dungeon connection attaches at this
level of the given dungeon.
If the value of
.B level
is negative, the entry level is calculated from the bottom of the
dungeon, with -1 being the last level.
If this line is not present in a dungeon description, the entry level
defaults to 1.
PROTOFILE:
.B name
.PP
the prototypical name for dungeon level files in this dungeon.
For example, the PROTOFILE name for the dungeon
.I Vlad's Tower
is
.IR tower .
LEVEL:
.B name
.B bonesmarker
@ (
.B base
,
.B rand
) [
.B %age
]
.PP
where
.B name
is the level name,
.B bonesmarker
is a letter for marking bones files, (
.B base
,
.B rand
) is the location and
.B %age
is the generation percentage, as above.
RNDLEVEL:
.B name
.B bonesmarker
@ (
.B base
,
.B rand
)
[
.B %age
]
.B rndlevs
.PP
where
.B name
is the level name,
.B bonesmarker
is a letter for marking bones files, (
.B base
,
.B rand
) is the location,
.B %age
is the generation percentage, as above, and
.B rndlevs
is the number of similar levels available to choose from.
CHAINLEVEL:
.B name
.B bonesmarker
.B prev_name
+ (
.B base
,
.B rand
) [
.B %age
]
.PP
where
.B name
is the level name,
.B bonesmarker
is a letter for marking bones files,
.B prev_name
is the name of a level defined previously, (
.B base
,
.B rand
) is the
.I offset
from the level being chained from, and
.B %age
is the generation percentage.
RNDCHAINLEVEL:
.B name
.B bonesmarker
.B prev_name
+ (
.B base
,
.B rand
) [
.B %age
]
.B rndlevs
.PP
where
.B name
is the level name,
.B bonesmarker
is a letter for marking bones files,
.B prev_name
is the name of a level defined previously, (
.B base
,
.B rand
) is the
.I offset
from the level being chained from,
.B %age
is the generation percentage, and
.B rndlevs
is the number of similar levels available to choose from.
LEVELDESC:
.B type
.PP
where
.B type
is the level type, (see DESCRIPTION, above). The
.B type
is used to override any pre-set value used to describe the entire dungeon,
for this level only.
BRANCH:
.B name
@ (
.B base
,
.B rand
) [
.B stair
|
.B no_up
|
.B no_down
|
.B portal
] [
.B up
|
.B down
]
.PP
where
.B name
is the name of the dungeon to branch to, and (
.B base
,
.B rand
) is the location of the branch.
The last two optional arguments are
the branch type and branch direction.
The type of a branch can be a two-way stair connection,
a one-way stair connection, or a magic portal.
A one-way stair is described by the types
.B no_up
and
.B no_down
which specify which stair direction is missing.
The default branch type is
.BR stair .
The direction for a stair can be either up or down; direction is not
applicable to portals. The default direction is
.BR down .
CHAINBRANCH:
.B name
.B prev_name
+ (
.B base
,
.B rand
) [
.B stair
|
.B no_up
|
.B no_down
|
.B portal
] [
.B up
|
.B down
]
.PP
where
.B name
is the name of the dungeon to branch to,
.B prev_name
is the name of a previously defined
.B level
and (
.B base
,
.B rand
) is the
.I offset
from the level being chained from.
The optional branch type and direction are the same as described above.
.SH GENERIC RULES
.PP
Each dungeon must have a unique
.B bonesmarker ,
and each special level must have a
.B bonesmarker
unique within its dungeon (letters may be reused in different dungeons).
If the
.B bonesmarker
has the special value "none", no bones files will be created for that
level or dungeon.
.PP
The value
.B base
may be in the range of 1 to
.B MAXLEVEL
(as defined in
.I global.h
).
.PP
The value
.B rand
may be in the range of -1 to
.BR MAXLEVEL .
.PP
If
.B rand
is -1 it will be replaced with the value (num_dunlevs(dungeon) - base)
during the load process (ie. from here to the end of the dungeon).
.PP
If
.B rand
is 0 the level is located absolutely at
.BR base .
.PP
Branches don't have a probability. Dungeons do. If a dungeon fails
to be generated during load, all its levels and branches are skipped.
.PP
No level or branch may be chained from a level with a percentage generation
probability. This is to prevent non-resolution during the load.
In addition, no branch may be made from a dungeon with a percentage
generation probability for the same reason.
.PP
As a general rule using the dungeon compiler:
.PP
If a dungeon has a
.B protofile
name associated with it
.RI ( eg.
.BR tower )
that file will be used.
.PP
If a special level is present, it will override the above rule and
the appropriate file will be loaded.
.PP
If neither of the above are present, the standard generator will
take over and make a "normal" level.
.PP
A level alignment, if present, will override
the alignment of the dungeon that it exists within.
.SH EXAMPLE
.PP
Here is the current syntax of the dungeon compiler's "language":
.LP
.nf
.ta +8n +8n +8n
#
# The dungeon description file for the "standard" original
# 3.0 NetHack.
#
DUNGEON: "The Dungeons of Doom" "D" (25, 5)
LEVEL: "rogue" "none" @ (15, 4)
LEVEL: "oracle" "none" @ (5, 7)
LEVEL: "bigroom" "B" @ (12, 3) 15
LEVEL: "medusa" "none" @ (20, 5)
CHAINLEVEL: "castle" "medusa" + (1, 4)
CHAINBRANCH: "Hell" "castle" + (0, 0) no_down
BRANCH: "The Astral Plane" @ (1, 0) no_down up
DUNGEON: "Hell" "H" (25, 5)
DESCRIPTION: mazelike
DESCRIPTION: hellish
BRANCH: "Vlad's Tower" @ (13, 5) up
LEVEL: "wizard" "none" @ (15, 10)
LEVEL: "fakewiz" "A" @ (5, 5)
LEVEL: "fakewiz" "B" @ (10, 5)
LEVEL: "fakewiz" "C" @ (15, 5)
LEVEL: "fakewiz" "D" @ (20, 5)
LEVEL: "fakewiz" "E" @ (25, 5)
DUNGEON: "Vlad's Tower" "T" (3, 0)
PROTOFILE: "tower"
DESCRIPTION: mazelike
ENTRY: -1
DUNGEON: "The Astral Plane" "A" (1, 0)
DESCRIPTION: mazelike
PROTOFILE: "endgame"
.fi
.PP
.I NOTES:
.br
Lines beginning with '#' are considered comments.
.br
A special level must be explicitly aligned. The alignment of the dungeon
it is in only applies to non-special levels within that dungeon.
.SH AUTHOR
.PP
M. Stephenson (from the level compiler by Jean-Christophe Collet).
.SH "SEE ALSO"
.PP
lev_comp(6), nethack(6)
.SH BUGS
.PP
Probably infinite.
.SH COPYRIGHT
This file is Copyright (C) \*(Na and was last modified \*(Nd (version
\*(Nb:\*(Nr).
NetHack may be freely redistributed. See license for details.

View File

@@ -1,330 +0,0 @@
DGN_COMP(6) 1995 DGN_COMP(6)
NAME
dgn_comp - NetHack dungeon compiler
SYNOPSIS
dgn_comp [ file ]
If no arguments are given, it reads standard input.
DESCRIPTION
Dgn_comp is a dungeon compiler for NetHack version 3.2 and
higher. It takes a description file as an argument and pro-
duces a dungeon "script" that is to be loaded by NetHack at
runtime.
The purpose of this tool is to provide NetHack administra-
tors and implementors with a convenient way to create a cus-
tom dungeon for the game, without having to recompile the
entire world.
GRAMMAR
DUNGEON: name bonesmarker ( base , rand ) [ %age ]
where name is the dungeon name, bonesmarker is a letter for
marking bones files, ( base , rand ) is the number of lev-
els, and %age is its percentage chance of being generated
(if absent, 100% chance).
DESCRIPTION: tag
where tag is currently one of HELLISH, MAZELIKE, or ROGUE-
LIKE.
ALIGNMENT | LEVALIGN: [ lawful | neutral | chaotic |
unaligned ]
gives the alignment of the dungeon/level (default is
unaligned).
ENTRY: level
the dungeon entry point. The dungeon connection attaches at
this level of the given dungeon. If the value of level is
negative, the entry level is calculated from the bottom of
the dungeon, with -1 being the last level. If this line is
not present in a dungeon description, the entry level
defaults to 1.
PROTOFILE: name
the prototypical name for dungeon level files in this
dungeon. For example, the PROTOFILE name for the dungeon
Vlad's Tower is tower.
Dec Last change: 12 1
DGN_COMP(6) 1995 DGN_COMP(6)
LEVEL: name bonesmarker @ ( base , rand ) [ %age ]
where name is the level name, bonesmarker is a letter for
marking bones files, ( base , rand ) is the location and
%age is the generation percentage, as above.
RNDLEVEL: name bonesmarker @ ( base , rand ) [ %age ]
rndlevs
where name is the level name, bonesmarker is a letter for
marking bones files, ( base , rand ) is the location, %age
is the generation percentage, as above, and rndlevs is the
number of similar levels available to choose from.
CHAINLEVEL: name bonesmarker prev_name + ( base , rand ) [
%age ]
where name is the level name, bonesmarker is a letter for
marking bones files, prev_name is the name of a level
defined previously, ( base , rand ) is the offset from the
level being chained from, and %age is the generation percen-
tage.
RNDCHAINLEVEL: name bonesmarker prev_name + ( base , rand )
[ %age ] rndlevs
where name is the level name, bonesmarker is a letter for
marking bones files, prev_name is the name of a level
defined previously, ( base , rand ) is the offset from the
level being chained from, %age is the generation percentage,
and rndlevs is the number of similar levels available to
choose from.
LEVELDESC: type
where type is the level type, (see DESCRIPTION, above). The
type is used to override any pre-set value used to describe
the entire dungeon, for this level only.
BRANCH: name @ ( base , rand ) [ stair | no_up | no_down |
portal ] [ up | down ]
where name is the name of the dungeon to branch to, and (
base , rand ) is the location of the branch. The last two
optional arguments are the branch type and branch direction.
The type of a branch can be a two-way stair connection, a
one-way stair connection, or a magic portal. A one-way
stair is described by the types no_up and no_down which
specify which stair direction is missing. The default
branch type is stair. The direction for a stair can be
either up or down; direction is not applicable to portals.
The default direction is down.
Dec Last change: 12 2
DGN_COMP(6) 1995 DGN_COMP(6)
CHAINBRANCH: name prev_name + ( base , rand ) [ stair |
no_up | no_down | portal ] [ up | down ]
where name is the name of the dungeon to branch to,
prev_name is the name of a previously defined level and (
base , rand ) is the offset from the level being chained
from. The optional branch type and direction are the same
as described above.
GENERIC RULES
Each dungeon must have a unique bonesmarker , and each spe-
cial level must have a bonesmarker unique within its dungeon
(letters may be reused in different dungeons). If the
bonesmarker has the special value "none", no bones files
will be created for that level or dungeon.
The value base may be in the range of 1 to MAXLEVEL (as
defined in global.h ).
The value rand may be in the range of -1 to MAXLEVEL.
If rand is -1 it will be replaced with the value
(num_dunlevs(dungeon) - base) during the load process (ie.
from here to the end of the dungeon).
If rand is 0 the level is located absolutely at base.
Branches don't have a probability. Dungeons do. If a
dungeon fails to be generated during load, all its levels
and branches are skipped.
No level or branch may be chained from a level with a per-
centage generation probability. This is to prevent non-
resolution during the load. In addition, no branch may be
made from a dungeon with a percentage generation probability
for the same reason.
As a general rule using the dungeon compiler:
If a dungeon has a protofile name associated with it (eg.
tower) that file will be used.
If a special level is present, it will override the above
rule and the appropriate file will be loaded.
If neither of the above are present, the standard generator
will take over and make a "normal" level.
A level alignment, if present, will override the alignment
of the dungeon that it exists within.
Dec Last change: 12 3
DGN_COMP(6) 1995 DGN_COMP(6)
EXAMPLE
Here is the current syntax of the dungeon compiler's
"language":
#
# The dungeon description file for the "standard" original
# 3.0 NetHack.
#
DUNGEON: "The Dungeons of Doom" "D" (25, 5)
LEVEL: "rogue" "none" @ (15, 4)
LEVEL: "oracle" "none" @ (5, 7)
LEVEL: "bigroom" "B" @ (12, 3) 15
LEVEL: "medusa" "none" @ (20, 5)
CHAINLEVEL: "castle" "medusa" + (1, 4)
CHAINBRANCH: "Hell" "castle" + (0, 0) no_down
BRANCH: "The Astral Plane" @ (1, 0) no_down up
DUNGEON: "Hell" "H" (25, 5)
DESCRIPTION: mazelike
DESCRIPTION: hellish
BRANCH: "Vlad's Tower" @ (13, 5) up
LEVEL: "wizard" "none" @ (15, 10)
LEVEL: "fakewiz" "A" @ (5, 5)
LEVEL: "fakewiz" "B" @ (10, 5)
LEVEL: "fakewiz" "C" @ (15, 5)
LEVEL: "fakewiz" "D" @ (20, 5)
LEVEL: "fakewiz" "E" @ (25, 5)
DUNGEON: "Vlad's Tower" "T" (3, 0)
PROTOFILE: "tower"
DESCRIPTION: mazelike
ENTRY: -1
DUNGEON: "The Astral Plane" "A" (1, 0)
DESCRIPTION: mazelike
PROTOFILE: "endgame"
NOTES:
Lines beginning with '#' are considered comments.
A special level must be explicitly aligned. The alignment
of the dungeon it is in only applies to non-special levels
within that dungeon.
AUTHOR
M. Stephenson (from the level compiler by Jean-Christophe
Collet).
SEE ALSO
lev_comp(6), nethack(6)
Dec Last change: 12 4
DGN_COMP(6) 1995 DGN_COMP(6)
BUGS
Probably infinite.
Dec Last change: 12 5

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.116 $ $NHDT-Date: 1569276988 2019/09/23 22:16:28 $
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.197 $ $NHDT-Date: 1575173931 2019/12/01 04:18:51 $
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,
@@ -115,7 +115,11 @@ for multi-shot shooting by monsters, a typo checked hero's weapon for
when a boulder was teleported, if it landed in a pit or trap door or hole its
former location wasn't updated to show that it wasn't there anymore
(noticed in Sokoban but not limited to there)
Terry Pratchett tribute, fix typo in passage #4 for Mort ("the" -> "they")
Terry Pratchett tribute, fix typo in passage #4 for Mort ("the" -> "they");
also passage #7 for Soul Music ("genious" -> "genius");
and passage #11 for The Light Fantastic ("to" -> "do");
passage #3 for Eric ("short" -> "sort");
passage #10 for Witches Abroad ("was" -> "what")
fix typo in end_of_input() present since 3.6.0 that would prevent compilation
for NOSAVEONHANGUP+INSURANCE configuration
when a status condition becomes fatal, keep it listed as an active condition
@@ -152,11 +156,91 @@ 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
a temporary window around, which in turn might eventually lead to a
panic due to lack of window slots [probably moot for unmodified 3.6.x;
the query one couldn't happen unless there is a coding error for
object classes somewhere and the help one couldn't happen unless the
installed data files left 'keyhelp' missing]
ball and chain could end up too far from punished hero (triggering b&c warning
for wizard mode with sanity checking active) when crawling out of
water failed because dropping stuff left hero overly encumbered and
hero was life saved--or player declined to die--if the hero got
teleported one step further from ball and chain's current location
avoid 'object lost' panic when polymorph causes loss of levitation boots or
water walking boots which dumps hero into water where emergency
disrobing/dropping in order to crawl out chooses to drop those boots
'sortloot's attempt to group musical instruments separately from other tools
didn't work as intended due to missing 'break' in sortloot_classify()
<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; 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
fix temple priests or shopkeepers moving over other monsters
fix hero still hiding under a statue shattered by a land mine
fix helping a monster out of a pit addressing a deleted trap
fix launched rolling boulder code accessing deleted trap
fix monster stepping on a land mine code accessing deleted trap
revise 'O' to show symbol sets in the same order they appear in the symbols
file and order the sets in dat/symbols to yield a sensible symset menu
yellow dragons had green breath
partly eaten food in a bones level shop would show a non-zero sale price
while on the floor but not be placed on shop bill if picked up;
sale price should have been "no charge"
when non-empty container is dropped in shop and hero is asked whether to sell,
counting the subset of contents owned by hero vs those owned by shk
could obtain wrong answer because the container had been placed on
the floor but the 'unpaid' and 'no_charge' flags of its contents
hadn't been updated yet, they were still set for when it was carried
in a shop which doesn't care about tools: You drop a <box> containing 1 item.
<Shk> offers you <gold> for your items in your <box>. Sell them?
[plural 'items' and 'them' were including the box along with the one
item in it even though shk was only offering to buy its contents]
grammar correction for "That walking shoes is really a small mimic" when
applying a stethoscope
mimic immitating a slime mold would change fruit type when player assigned new
named fruit
parsing for the argument to 'scores' option was sloppy; "3a/o" (slash) and
"3a 1o" (space and digit one, not lowercase L) both worked but "3a o"
(just space) was supposed to but didn't
wizmakemap could leave genocided monsters on map
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
when a monster reads a scroll of fire to cure sliming, don't access that
scroll's memory after it has been used up (bcsign)
monster vs monster attacks didn't handle shades or silver weapon feedback
successful alchemy would show new potion's description (color) even when blind
dipping some types of objects into oil would yield "<object> gleams with an
oily sheen" even when blind
dipping into an undiscovered potion would offer chance to give a name to the
potion even when its description wasn't known (picked up while blind)
dipping lichen corpse into acid when not blind and acid was undicovered would
not offer a chance to give a name to the potion after lichen feedback
pluralization improvement for words ending in a k-sound like "biotech"
check for whether a monster was entering a region (gas cloud) erroneously
depended upon whether or not the hero was inside the same region
all Is_*_level tests during early startup would test as true until
dungeon_topology was initialized in a new game or restored from
a save file
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
@@ -164,7 +248,7 @@ Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
elemental_clog() loop needed to guard against obliteration of the monster
that was trying to be placed
using ^G to create "hidden mimic" shouldn't have marked it as undetected since
mimics 'hide' be appearing to be something else; honor "hidden" for
mimics 'hide' by appearing to be something else; honor "hidden" for
'hides_under' creatures if/when created at location with object(s),
also for eels and other fish if/when created at water location
for wizard mode 'wizweight' option, glob weight wasn't shown unless glob had
@@ -177,6 +261,17 @@ monster throwing from stack of missiles (darts, daggers, spears) would cause
crash if it wasn't wielding a weapon (bug in multi-shot shooting fix)
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
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
monster vs shade attack inflicted damage despite "passes harmlessly through"
fix for feedback from musical instruments played while deaf ignored whistles
special map display symbol S_player_override renamed to S_hero_override
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
@@ -191,6 +286,50 @@ tty: revert the attempt to fix "message line anomaly: if autodecribe feedback
prompts that spanned more than one line, a more significant issue
Fixes post-beta1
------------------------------------------------------------------
fix several tribute typos
pluralization correction for unlikely epoch and loch
ensure that --showpaths displays the personal configuration file last
don't strip leading slash from hallucinatory monster name "/b/tard"
quaffing unknown potion of see invisible resulted in asking what to call the
potion while updated monster display was buffered so not yet shown,
hence potentially noticeable effect was concealed from player
when Riders use their bargethrough capability, don't let them swap places with
something located at a spot where corpses can't be created (their
door opening ability was letting them exchange places with something
co-located with a closed door without opening it; if killed there,
there'd be no corpse so no auto-revive)
putting on levitation boots while on sink would crash when attempting to set
the enchantment known flag on Null 'uarmf' pointer
look-at of mimics mimicking altars got an arbitary alignment from misuse of
underlying terrain
polymorph_sink creating an altar passed a call to rn2() as an argument to a
macro which evaluates its parameter more than once
if a monster (presumably sensed but not seen) was displayed at a location
showing "remembered, unseen monster", remove that since hero now knows
something else is there (3.6.1 had similar fix for warned-of monsters)
clairvoyance showed all monsters in range, then after player viewed the map,
replaced them with "remembered, unseen monster" glyph and finally
did a normal monster refresh; the 'I' glyph step clobbers remembered
object at same spot, so skip it for locations where monster refresh
is going to immediately redisplay a monster
take holes that you avoided into consideration when you're on the brink
update window port spec to include a color-availability table that the window
port can set; merge all has_color() implementations into one central
function in src/windows.c which uses a few data checks only and
elminates multiple string function calls for each map cell update
that were being done in some cases previously
taking off a fedora or dented pot (no-delay helmets) left the helmet stuck
and took off hero's suit
unix: fix double DLB definition in linux hints file
windows: fix --showpaths output for the data file which relies on being
constructed programmatically to incorporate the version suffix
windows+tty: add code to make keypad support for swap_yz behave (currently
commented out in include/ntconf.h)
windows: fix self-recover user prompting (tty, curses, mswin)
Platform- and/or Interface-Specific Fixes or Features
-----------------------------------------------------
EDIT_GETLIN: wizard mode 'monpolycontrol' was using the getlin() answer buffer
@@ -201,6 +340,9 @@ EDIT_GETLIN: when naming an object or a monster use the existing name, if
EDIT_GETLIN: using 'O' to set message types or menu colors was overloading the
answer buffer with other stuff, resulting in bogus default response
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
@@ -215,10 +357,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
@@ -229,10 +371,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
@@ -246,7 +388,14 @@ 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
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)
curses: force 'O' command's menus for 'symset' and 'roguesymset' options to
be wider so that fewer entries with set descriptions will wrap
curses: stop restricting menu width to half the display width
curses+'perm_invent': entries were wrapping without any control; usually not
noticeable because next entry overwrote, but visible for final entry
when whole inventory fit within the available height; looked ok with
@@ -270,6 +419,13 @@ curses+EDIT_GETLIN: the preceding fix handled an answer which spanned more
than one line but didn't remove the answer properly if the prompt
portion of prompt+answer spanned more than one line
msdos: code fixes to allow a build with curses and PDCurses
msdos: added Makefile1.cross (host portion) and Makefile2.cross (target
platform portion) to assist in moving this port toward a cross-compiled
build hosted on linux/OSX/Windows with recent C dialect support; that
will also pave the way for CI automation and testing of the msdos port
build in future should the port remain on the radar; currently only
useful for testing the msdos port compile as it cannot yet build a
complete game
tty: re-do one optimization used when status conditions have all been removed
and remove another that tried to check whether condition text to be
displayed next was the same as the existing value; sometimes new
@@ -279,7 +435,15 @@ tty: take two, if/when autodecribe feedback wraps past top line, clear
['exposed by git' section has an entry for reversal of 'take one']
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 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: significant changes to default directory choices; see documentation
for details
General New Features
@@ -303,23 +467,37 @@ status highlighting using percentage rules now supported for experience level
the start of the current Xp level to the start of the next Xp level;
100% isn't possible so used as special case for next_Xp_lvl - 1 Exp_pt
wizard-mode: display effect to show where an unseen wished-for monster landed
for 'O's symset and roguesymset menus, mark current symbol set as preselected
curses: enable latent mouse support
curses: give menus and text windows a minimum size of 5x25 since tiny ones can
sometimes be overlooked when shown over old messages rather than map
curses+'perm_invent': since persistent inventory is narrow, strip off "a",
"an", or "the" prefix on inventory entries shown there so that a tiny
bit more of the interesting portion is visible
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
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
FIQ's curses (PDCurses) number pad changes in pull request #247
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

38
doc/fixes36.4 Normal file
View File

@@ -0,0 +1,38 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.12 $ $NHDT-Date: 1576638499 2019/12/18 03:08:19 $
fixes36.4 contains a terse summary of changes made to 3.6.3 in order to
produce 3.6.4.
General Fixes and Modified Features
-----------------------------------
GDBPATH and GREPPATH from sysconf or -D... on compilation command line were
being processed even if PANICTRACE was disabled but only being freed
at end of game when that was enabled
fix the article used in the message when your steed encounters a polymorph trap
allow teleporting onto the vibrating square
message "your knapsack can't accomodate any more items" when picking stuff up
or removing such from container was inaccurate if there was some gold
pending; vary the message rather than add more convoluted pickup code
dozen-ish assorted spelling/typo fixes in messages and source comments
fix potential buffer overflow when parsing run-time configuration file
wizard mode wishing for terrain would leave it unmapped if done while blind
wizard mode terrain wish could leave hero in water (severe vision limits) or
in lava (trapped, sinking) which wasn't there any more
flying hero can go down (via '>') holes or trap doors instead of escaping trap
polymorphed hero hiding on the ceiling can now use '>' to unhide instead of
being told "you can't go down here"
Platform- and/or Interface-Specific Fixes or Features
-----------------------------------------------------
fix compilation on platforms that split the ncurses and tinfo libraries
Windows: allow all game files to be on a portable device via the sysconf
option 'portable_device_paths'
General New Features
--------------------
none

30
doc/fixes36.5 Normal file
View File

@@ -0,0 +1,30 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.0 $ $NHDT-Date: 1576705788 2019/12/18 21:49:48 $
This fixes36.5 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.4 in December 2019. Please note, however,
that another 3.6.x release is not anticipated, and most developer
focus will shift to the next major release.
General Fixes and Modified Features
-----------------------------------
Fixes to Post-3.6.4 Problems that Were Exposed Via git Repository
------------------------------------------------------------------
Platform- and/or Interface-Specific Fixes or Features
-----------------------------------------------------
General New Features
--------------------
NetHack Community Patches (or Variation) Included
-------------------------------------------------
Code Cleanup and Reorganization
-------------------------------

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.8 $ $NHDT-Date: 1557663358 2019/05/12 12:15:58 $
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.22 $ $NHDT-Date: 1576288434 2019/12/14 01:53:54 $
General Fixes and Modified Features
-----------------------------------
@@ -7,6 +7,11 @@ hero polymorphed into a vampire can use #monster to shape-shift rather than
just do a one-shot polymorph into bat/cloud/wolf and shifted vampire
hero can use #monster again to take on another form (randomly chosen
among the shiftable shapes and true vampire form)
adjust bones filename buffer sizes to accommodate suffix
fix internal self-recover to work with recent fields added to checkpoint file
improvements to pronoun usage when hallucinating
function calls made from mapglyph based on dungeon level are now called once
per level
Fixes to Pre-3.7.0 Problems that Were Exposed Via git Repository
@@ -24,6 +29,17 @@ if a killer bee encounters a lump of royal jelly and there is no queen bee on
automatic annotation "gateway to Moloch's Sanctum" for vibrating square level
once that square's location becomes known (found or magic mapped);
goes away once sanctum temple is found (entered or high altar mapped)
savefile: add support to deconstruct internal data structures down into their
individual fields and save those fields instead of the entire struct
savefile: use little-endian format for fields where that makes a difference
replace build-time level compiler and dungeon compiler with run-time loading of
the dungeon and level descriptions and interpreting them via LUA
split off some of the functionality that was in makedefs (compiled-in options
build date/time, etc) so that it can be built by a cross-compiler
and accessed on the target platform
replace quest.txt and associated conversion to quest.dat via makedefs with
lua quest texts loaded at runtime
some altars are displayed in different colors (for tty and curses at least)
Platform- and/or Interface-Specific New Features
@@ -40,4 +56,7 @@ Code Cleanup and Reorganization
move majority of global variables into instance_globals struct g
move zeroobj, zeromonst, zeroany into const_globals struct cg
remove STATIC_DCL, STATIC_OVL, STATIC_VAR, STATIC_PTR
old Qt moved from win/Qt to win/Qt3
more current Qt for Qt version 4 and 5 moved from win/Qt4 to win/Qt; qt4
moniker changed to qt_

View File

@@ -1,588 +0,0 @@
.TH LEV_COMP 6 "25 May 2015" NETHACK
.de ND
.ds Nd \\$3
..
.de NB
.ds Nb \\$2
..
.de NR
.ds Nr \\$2
..
.ND $NHDT-Date: 1524689549 2018/04/25 20:52:29 $
.NB $NHDT-Branch: NetHack-3.6.0 $
.NR $NHDT-Revision: 1.7 $
.ds Na Kenneth Lorber
.SH NAME
lev_comp \- NetHack special levels compiler
.SH SYNOPSIS
.B lev_comp
[
.B \-w
]
[
.I files
]
.PP
If no arguments are given, it reads standard input.
.SH DESCRIPTION
.PP
.I Lev_comp
is a special level compiler for NetHack version 3.2 and higher. It
takes description files as arguments and produces level files that can
be loaded by NetHack at runtime.
.PP
The purpose of this tool is to provide NetHack administrators and
implementors with a convenient way for adding special levels to the
game, or modifying existing ones, without having to recompile the
entire world.
.PP
The
.B \-w
option causes
.I lev_comp
to perform extra checks on the level and display extra warnings, however
these warnings are sometimes superfluous, so they are not normally displayed.
.SH GRAMMAR
.PP
.LP
.nf
.ta +8n +8n +8n +8n
file : /* nothing */
| levels
;
levels : level
| level levels
;
level : maze_level
| room_level
;
maze_level : maze_def flags lev_init messages regions
;
room_level : level_def flags lev_init messages rreg_init rooms corridors_def
;
level_def : LEVEL_ID ':' string
;
lev_init : /* nothing */
| LEV_INIT_ID ':' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled
;
walled : BOOLEAN
| RANDOM_TYPE
;
flags : /* nothing */
| FLAGS_ID ':' flag_list
;
flag_list : FLAG_TYPE ',' flag_list
| FLAG_TYPE
;
messages : /* nothing */
| message messages
;
message : MESSAGE_ID ':' STRING
;
rreg_init : /* nothing */
| rreg_init init_rreg
;
init_rreg : RANDOM_OBJECTS_ID ':' object_list
| RANDOM_MONSTERS_ID ':' monster_list
;
rooms : /* Nothing - dummy room for use with INIT_MAP */
| roomlist
;
roomlist : aroom
| aroom roomlist
;
corridors_def : random_corridors
| corridors
;
random_corridors: RAND_CORRIDOR_ID
;
corridors : /* nothing */
| corridors corridor
;
corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec
| CORRIDOR_ID ':' corr_spec ',' INTEGER
;
corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')'
;
aroom : room_def room_details
| subroom_def room_details
;
subroom_def : SUBROOM_ID ':' room_type ',' light_state ',' subroom_pos ',' room_size ',' string roomfill
;
room_def : ROOM_ID ':' room_type ',' light_state ',' room_pos ',' room_align ',' room_size roomfill
;
roomfill : /* nothing */
| ',' BOOLEAN
;
room_pos : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
subroom_pos : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
room_align : '(' h_justif ',' v_justif ')'
| RANDOM_TYPE
;
room_size : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
room_details : /* nothing */
| room_details room_detail
;
room_detail : room_name
| room_chance
| room_door
| monster_detail
| object_detail
| trap_detail
| altar_detail
| fountain_detail
| sink_detail
| pool_detail
| gold_detail
| engraving_detail
| stair_detail
;
room_name : NAME_ID ':' string
;
room_chance : CHANCE_ID ':' INTEGER
;
room_door : DOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos
;
secret : BOOLEAN
| RANDOM_TYPE
;
door_wall : DIRECTION
| RANDOM_TYPE
;
door_pos : INTEGER
| RANDOM_TYPE
;
maze_def : MAZE_ID ':' string ',' filling
;
filling : CHAR
| RANDOM_TYPE
;
regions : aregion
| aregion regions
;
aregion : map_definition reg_init map_details
;
map_definition : NOMAP_ID
| map_geometry MAP_ID
;
map_geometry : GEOMETRY_ID ':' h_justif ',' v_justif
;
h_justif : LEFT_OR_RIGHT
| CENTER
;
v_justif : TOP_OR_BOT
| CENTER
;
reg_init : /* nothing */
| reg_init init_reg
;
init_reg : RANDOM_OBJECTS_ID ':' object_list
| RANDOM_PLACES_ID ':' place_list
| RANDOM_MONSTERS_ID ':' monster_list
;
object_list : object
| object ',' object_list
;
monster_list : monster
| monster ',' monster_list
;
place_list : place
| place ',' place_list
;
map_details : /* nothing */
| map_details map_detail
;
map_detail : monster_detail
| object_detail
| door_detail
| trap_detail
| drawbridge_detail
| region_detail
| stair_region
| portal_region
| teleprt_region
| branch_region
| altar_detail
| fountain_detail
| mazewalk_detail
| wallify_detail
| ladder_detail
| stair_detail
| gold_detail
| engraving_detail
| diggable_detail
| passwall_detail
;
monster_detail : MONSTER_ID chance ':' monster_c ',' m_name ',' coordinate
monster_infos
;
monster_infos : /* nothing */
| monster_infos monster_info
;
monster_info : ',' string
| ',' MON_ATTITUDE
| ',' MON_ALERTNESS
| ',' alignment
| ',' MON_APPEARANCE string
;
object_detail : OBJECT_ID object_desc
| COBJECT_ID object_desc
;
object_desc : chance ':' object_c ',' o_name ',' object_where object_infos
;
object_where : coordinate
| CONTAINED
;
object_infos : /* nothing */
| ',' curse_state ',' monster_id ',' enchantment optional_name
| ',' curse_state ',' enchantment optional_name
| ',' monster_id ',' enchantment optional_name
;
curse_state : RANDOM_TYPE
| CURSE_TYPE
;
monster_id : STRING
;
enchantment : RANDOM_TYPE
| INTEGER
;
optional_name : /* nothing */
| ',' NONE
| ',' STRING
;
door_detail : DOOR_ID ':' door_state ',' coordinate
;
trap_detail : TRAP_ID chance ':' trap_name ',' coordinate
;
drawbridge_detail: DRAWBRIDGE_ID ':' coordinate ',' DIRECTION ',' door_state
;
mazewalk_detail : MAZEWALK_ID ':' coordinate ',' DIRECTION
;
wallify_detail : WALLIFY_ID
;
ladder_detail : LADDER_ID ':' coordinate ',' UP_OR_DOWN
;
stair_detail : STAIR_ID ':' coordinate ',' UP_OR_DOWN
;
stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN
;
portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' string
;
teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail
;
branch_region : BRANCH_ID ':' lev_region ',' lev_region
;
teleprt_detail : /* empty */
| ',' UP_OR_DOWN
;
lev_region : region
| LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
;
fountain_detail : FOUNTAIN_ID ':' coordinate
;
sink_detail : SINK_ID ':' coordinate
;
pool_detail : POOL_ID ':' coordinate
;
diggable_detail : NON_DIGGABLE_ID ':' region
;
passwall_detail : NON_PASSWALL_ID ':' region
;
region_detail : REGION_ID ':' region ',' light_state ',' room_type prefilled
;
altar_detail : ALTAR_ID ':' coordinate ',' alignment ',' altar_type
;
gold_detail : GOLD_ID ':' amount ',' coordinate
;
engraving_detail: ENGRAVING_ID ':' coordinate ',' engraving_type ',' string
;
monster_c : monster
| RANDOM_TYPE
| m_register
;
object_c : object
| RANDOM_TYPE
| o_register
;
m_name : string
| RANDOM_TYPE
;
o_name : string
| RANDOM_TYPE
;
trap_name : string
| RANDOM_TYPE
;
room_type : string
| RANDOM_TYPE
;
prefilled : /* empty */
| ',' FILLING
| ',' FILLING ',' BOOLEAN
;
coordinate : coord
| p_register
| RANDOM_TYPE
;
door_state : DOOR_STATE
| RANDOM_TYPE
;
light_state : LIGHT_STATE
| RANDOM_TYPE
;
alignment : ALIGNMENT
| a_register
| RANDOM_TYPE
;
altar_type : ALTAR_TYPE
| RANDOM_TYPE
;
p_register : P_REGISTER '[' INTEGER ']'
;
o_register : O_REGISTER '[' INTEGER ']'
;
m_register : M_REGISTER '[' INTEGER ']'
;
a_register : A_REGISTER '[' INTEGER ']'
;
place : coord
;
monster : CHAR
;
object : CHAR
;
string : STRING
;
amount : INTEGER
| RANDOM_TYPE
;
chance : /* empty */
| PERCENT
;
engraving_type : ENGRAVING_TYPE
| RANDOM_TYPE
;
coord : '(' INTEGER ',' INTEGER ')'
;
region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
;
.fi
.PP
.I NOTE:
.br
Lines beginning with '#' are considered comments.
.PP
The contents of a "MAP" description of a maze is a rectangle showing the exact
level map that should be used for the given part of a maze.
Each character in the map corresponds to a location on the screen.
Different location types are denoted using different ASCII characters.
The following characters are recognized.
To give an idea of how these are used, see the EXAMPLE, below.
The maximum size of a map is normally 76 columns by 21 rows.
.LP
.nf
.ta +8n +8n +8n
\&'-' horizontal wall
\&'|' vertical wall
\&'+' a doorway (state is specified in a DOOR declaration)
\&'A' open air
\&'B' boundary room location (for bounding unwalled irregular regions)
\&'C' cloudy air
\&'I' ice
\&'S' a secret door
\&'H' a secret corridor
\&'{' a fountain
\&'\\' a throne
\&'K' a sink
\&'}' a part of a moat or other deep water
\&'P' a pool
\&'L' lava
\&'W' water (yes, different from a pool)
\&'T' a tree
\&'F' iron bars
\&'#' a corridor
\&'.' a normal room location (unlit unless lit in a REGION declaration)
\&' ' stone
.fi
.SH EXAMPLE
.PP
Here is an example of a description file (a very simple one):
.LP
.nf
.ta +8n +8n +8n
MAZE : "fortress", random
GEOMETRY : center , center
MAP
}}}}}}}}}
}}}|-|}}}
}}|-.-|}}
}|-...-|}
}|.....|}
}|-...-|}
}}|-.-|}}
}}}|-|}}}
}}}}}}}}}
ENDMAP
MONSTER: '@', "Wizard of Yendor", (4,4)
OBJECT: '"', "Amulet of Yendor", (4,4)
# a hell hound flanking the Wiz on a random side
RANDOM_PLACES: (4,3), (4,5), (3,4), (5,4)
MONSTER: 'd', "hell hound", place[0]
# a chest on another random side
OBJECT: '(', "chest", place[1]
# a sack on a random side, with a diamond and maybe a ruby in it
CONTAINER: '(', "sack", place[2]
OBJECT: '*', "diamond", contained
OBJECT[50%]: '*', "ruby", contained
# a random dragon somewhere
MONSTER: 'D', random, random
# 3 out of 4 chance for a random trap in the EAST end
TRAP[75%]: random, (6,4)
# an electric eel below the SOUTH end
MONSTER: ';', "electric eel", (4,8)
# make the walls non-diggable
NON_DIGGABLE: (0,0,8,8)
TELEPORT_REGION: levregion(0,0,79,20), (0,0,8,8)
.fi
.PP
This example will produce a file named "fortress" that can be integrated into
one of the numerous mazes of the game.
.PP
Note especially the final, TELEPORT_REGION specification. This says
that level teleports or other non-stairway arrivals on this level can
land anywhere on the level except the area of the map. This shows the
use of the ``levregion'' prefix allowed in certain region specifications.
Normally, regions apply only to the most recent MAP specification, but
when prefixed with ``levregion'', one can refer to any area of the
level, regardless of the placement of the current MAP in the level.
.SH AUTHOR
.PP
Jean-Christophe Collet, David Cohrs.
.SH "SEE ALSO"
.PP
dgn_comp(6), nethack(6)
.SH BUGS
.PP
Probably infinite.
Most importantly, still needs additional bounds checking.
.SH COPYRIGHT
This file is Copyright (C) \*(Na and was last modified \*(Nd (version
\*(Nb:\*(Nr).
NetHack may be freely redistributed. See license for details.

View File

@@ -1,726 +0,0 @@
LEV_COMP(6) 1996 LEV_COMP(6)
NAME
lev_comp - NetHack special levels compiler
SYNOPSIS
lev_comp [ -w ] [ files ]
If no arguments are given, it reads standard input.
DESCRIPTION
Lev_comp is a special level compiler for NetHack version 3.2
and higher. It takes description files as arguments and
produces level files that can be loaded by NetHack at run-
time.
The purpose of this tool is to provide NetHack administra-
tors and implementors with a convenient way for adding spe-
cial levels to the game, or modifying existing ones, without
having to recompile the entire world.
The -w option causes lev_comp to perform extra checks on the
level and display extra warnings, however these warnings are
sometimes superfluous, so they are not normally displayed.
GRAMMAR
file : /* nothing */
| levels
;
levels : level
| level levels
;
level : maze_level
| room_level
;
maze_level : maze_def flags lev_init messages regions
;
room_level : level_def flags lev_init messages rreg_init rooms corridors_def
;
level_def : LEVEL_ID ':' string
;
lev_init : /* nothing */
| LEV_INIT_ID ':' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled
;
walled : BOOLEAN
| RANDOM_TYPE
May Last change: 16 1
LEV_COMP(6) 1996 LEV_COMP(6)
;
flags : /* nothing */
| FLAGS_ID ':' flag_list
;
flag_list : FLAG_TYPE ',' flag_list
| FLAG_TYPE
;
messages : /* nothing */
| message messages
;
message : MESSAGE_ID ':' STRING
;
rreg_init : /* nothing */
| rreg_init init_rreg
;
init_rreg : RANDOM_OBJECTS_ID ':' object_list
| RANDOM_MONSTERS_ID ':' monster_list
;
rooms : /* Nothing - dummy room for use with INIT_MAP */
| roomlist
;
roomlist : aroom
| aroom roomlist
;
corridors_def : random_corridors
| corridors
;
random_corridors: RAND_CORRIDOR_ID
;
corridors : /* nothing */
| corridors corridor
;
corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec
| CORRIDOR_ID ':' corr_spec ',' INTEGER
;
corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')'
;
aroom : room_def room_details
May Last change: 16 2
LEV_COMP(6) 1996 LEV_COMP(6)
| subroom_def room_details
;
subroom_def : SUBROOM_ID ':' room_type ',' light_state ',' subroom_pos ',' room_size ',' string roomfill
;
room_def : ROOM_ID ':' room_type ',' light_state ',' room_pos ',' room_align ',' room_size roomfill
;
roomfill : /* nothing */
| ',' BOOLEAN
;
room_pos : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
subroom_pos : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
room_align : '(' h_justif ',' v_justif ')'
| RANDOM_TYPE
;
room_size : '(' INTEGER ',' INTEGER ')'
| RANDOM_TYPE
;
room_details : /* nothing */
| room_details room_detail
;
room_detail : room_name
| room_chance
| room_door
| monster_detail
| object_detail
| trap_detail
| altar_detail
| fountain_detail
| sink_detail
| pool_detail
| gold_detail
| engraving_detail
| stair_detail
;
room_name : NAME_ID ':' string
;
room_chance : CHANCE_ID ':' INTEGER
May Last change: 16 3
LEV_COMP(6) 1996 LEV_COMP(6)
;
room_door : DOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos
;
secret : BOOLEAN
| RANDOM_TYPE
;
door_wall : DIRECTION
| RANDOM_TYPE
;
door_pos : INTEGER
| RANDOM_TYPE
;
maze_def : MAZE_ID ':' string ',' filling
;
filling : CHAR
| RANDOM_TYPE
;
regions : aregion
| aregion regions
;
aregion : map_definition reg_init map_details
;
map_definition : NOMAP_ID
| map_geometry MAP_ID
;
map_geometry : GEOMETRY_ID ':' h_justif ',' v_justif
;
h_justif : LEFT_OR_RIGHT
| CENTER
;
v_justif : TOP_OR_BOT
| CENTER
;
reg_init : /* nothing */
| reg_init init_reg
;
init_reg : RANDOM_OBJECTS_ID ':' object_list
| RANDOM_PLACES_ID ':' place_list
May Last change: 16 4
LEV_COMP(6) 1996 LEV_COMP(6)
| RANDOM_MONSTERS_ID ':' monster_list
;
object_list : object
| object ',' object_list
;
monster_list : monster
| monster ',' monster_list
;
place_list : place
| place ',' place_list
;
map_details : /* nothing */
| map_details map_detail
;
map_detail : monster_detail
| object_detail
| door_detail
| trap_detail
| drawbridge_detail
| region_detail
| stair_region
| portal_region
| teleprt_region
| branch_region
| altar_detail
| fountain_detail
| mazewalk_detail
| wallify_detail
| ladder_detail
| stair_detail
| gold_detail
| engraving_detail
| diggable_detail
| passwall_detail
;
monster_detail : MONSTER_ID chance ':' monster_c ',' m_name ',' coordinate
monster_infos
;
monster_infos : /* nothing */
| monster_infos monster_info
;
monster_info : ',' string
| ',' MON_ATTITUDE
| ',' MON_ALERTNESS
May Last change: 16 5
LEV_COMP(6) 1996 LEV_COMP(6)
| ',' alignment
| ',' MON_APPEARANCE string
;
object_detail : OBJECT_ID object_desc
| COBJECT_ID object_desc
;
object_desc : chance ':' object_c ',' o_name ',' object_where object_infos
;
object_where : coordinate
| CONTAINED
;
object_infos : /* nothing */
| ',' curse_state ',' monster_id ',' enchantment optional_name
| ',' curse_state ',' enchantment optional_name
| ',' monster_id ',' enchantment optional_name
;
curse_state : RANDOM_TYPE
| CURSE_TYPE
;
monster_id : STRING
;
enchantment : RANDOM_TYPE
| INTEGER
;
optional_name : /* nothing */
| ',' NONE
| ',' STRING
;
door_detail : DOOR_ID ':' door_state ',' coordinate
;
trap_detail : TRAP_ID chance ':' trap_name ',' coordinate
;
drawbridge_detail: DRAWBRIDGE_ID ':' coordinate ',' DIRECTION ',' door_state
;
mazewalk_detail : MAZEWALK_ID ':' coordinate ',' DIRECTION
;
wallify_detail : WALLIFY_ID
;
May Last change: 16 6
LEV_COMP(6) 1996 LEV_COMP(6)
ladder_detail : LADDER_ID ':' coordinate ',' UP_OR_DOWN
;
stair_detail : STAIR_ID ':' coordinate ',' UP_OR_DOWN
;
stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN
;
portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' string
;
teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail
;
branch_region : BRANCH_ID ':' lev_region ',' lev_region
;
teleprt_detail : /* empty */
| ',' UP_OR_DOWN
;
lev_region : region
| LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
;
fountain_detail : FOUNTAIN_ID ':' coordinate
;
sink_detail : SINK_ID ':' coordinate
;
pool_detail : POOL_ID ':' coordinate
;
diggable_detail : NON_DIGGABLE_ID ':' region
;
passwall_detail : NON_PASSWALL_ID ':' region
;
region_detail : REGION_ID ':' region ',' light_state ',' room_type prefilled
;
altar_detail : ALTAR_ID ':' coordinate ',' alignment ',' altar_type
;
gold_detail : GOLD_ID ':' amount ',' coordinate
;
engraving_detail: ENGRAVING_ID ':' coordinate ',' engraving_type ',' string
;
May Last change: 16 7
LEV_COMP(6) 1996 LEV_COMP(6)
monster_c : monster
| RANDOM_TYPE
| m_register
;
object_c : object
| RANDOM_TYPE
| o_register
;
m_name : string
| RANDOM_TYPE
;
o_name : string
| RANDOM_TYPE
;
trap_name : string
| RANDOM_TYPE
;
room_type : string
| RANDOM_TYPE
;
prefilled : /* empty */
| ',' FILLING
| ',' FILLING ',' BOOLEAN
;
coordinate : coord
| p_register
| RANDOM_TYPE
;
door_state : DOOR_STATE
| RANDOM_TYPE
;
light_state : LIGHT_STATE
| RANDOM_TYPE
;
alignment : ALIGNMENT
| a_register
| RANDOM_TYPE
;
altar_type : ALTAR_TYPE
| RANDOM_TYPE
;
May Last change: 16 8
LEV_COMP(6) 1996 LEV_COMP(6)
p_register : P_REGISTER '[' INTEGER ']'
;
o_register : O_REGISTER '[' INTEGER ']'
;
m_register : M_REGISTER '[' INTEGER ']'
;
a_register : A_REGISTER '[' INTEGER ']'
;
place : coord
;
monster : CHAR
;
object : CHAR
;
string : STRING
;
amount : INTEGER
| RANDOM_TYPE
;
chance : /* empty */
| PERCENT
;
engraving_type : ENGRAVING_TYPE
| RANDOM_TYPE
;
coord : '(' INTEGER ',' INTEGER ')'
;
region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
;
NOTE:
Lines beginning with '#' are considered comments.
The contents of a "MAP" description of a maze is a rectangle
showing the exact level map that should be used for the
given part of a maze. Each character in the map corresponds
to a location on the screen. Different location types are
denoted using different ASCII characters. The following
characters are recognized. To give an idea of how these are
used, see the EXAMPLE, below. The maximum size of a map is
May Last change: 16 9
LEV_COMP(6) 1996 LEV_COMP(6)
normally 76 columns by 21 rows.
'-' horizontal wall
'|' vertical wall
'+' a doorway (state is specified in a DOOR declaration)
'A' open air
'B' boundary room location (for bounding unwalled irregular regions)
'C' cloudy air
'I' ice
'S' a secret door
'H' a secret corridor
'{' a fountain
'\' a throne
'K' a sink (if SINKS is defined, else a room location)
'}' a part of a moat or other deep water
'P' a pool
'L' lava
'W' water (yes, different from a pool)
'T' a tree
'F' iron bars
'#' a corridor
'.' a normal room location (unlit unless lit in a REGION declaration)
' ' stone
EXAMPLE
Here is an example of a description file (a very simple
one):
MAZE : "fortress", random
GEOMETRY : center , center
MAP
}}}}}}}}}
}}}|-|}}}
}}|-.-|}}
}|-...-|}
}|.....|}
}|-...-|}
}}|-.-|}}
}}}|-|}}}
}}}}}}}}}
ENDMAP
MONSTER: '@', "Wizard of Yendor", (4,4)
OBJECT: '"', "Amulet of Yendor", (4,4)
# a hell hound flanking the Wiz on a random side
RANDOM_PLACES: (4,3), (4,5), (3,4), (5,4)
MONSTER: 'd', "hell hound", place[0]
# a chest on another random side
OBJECT: '(', "chest", place[1]
# a sack on a random side, with a diamond and maybe a ruby in it
CONTAINER: '(', "sack", place[2]
OBJECT: '*', "diamond", contained
OBJECT[50%]: '*', "ruby", contained
May Last change: 16 10
LEV_COMP(6) 1996 LEV_COMP(6)
# a random dragon somewhere
MONSTER: 'D', random, random
# 3 out of 4 chance for a random trap in the EAST end
TRAP[75%]: random, (6,4)
# an electric eel below the SOUTH end
MONSTER: ';', "electric eel", (4,8)
# make the walls non-diggable
NON_DIGGABLE: (0,0,8,8)
TELEPORT_REGION: levregion(0,0,79,20), (0,0,8,8)
This example will produce a file named "fortress" that can
be integrated into one of the numerous mazes of the game.
Note especially the final, TELEPORT_REGION specification.
This says that level teleports or other non-stairway
arrivals on this level can land anywhere on the level except
the area of the map. This shows the use of the ``levre-
gion'' prefix allowed in certain region specifications.
Normally, regions apply only to the most recent MAP specifi-
cation, but when prefixed with ``levregion'', one can refer
to any area of the level, regardless of the placement of the
current MAP in the level.
AUTHOR
Jean-Christophe Collet, David Cohrs.
SEE ALSO
dgn_comp(6), nethack(6)
BUGS
Probably infinite. Most importantly, still needs additional
bounds checking.
May Last change: 16 11

View File

@@ -47,6 +47,9 @@ nethack \- Exploring The Mazes of Menace
.B \-ibm
]
[
.BR \-\-showpaths
]
[
.BR \-\-version [ :paste ]
]
.PP
@@ -223,6 +226,10 @@ the list of top scorers, and a subdirectory
.I save
where games are saved.
.PP
.B \-\-showpaths
can be used to cause NetHack to show where it is expecting
to find various configuration files.
.PP
.B \-\-version
can be used to cause NetHack to show the version information it
was compiled with, then exit. That will include the
@@ -270,7 +277,7 @@ nethack The program itself.
.br
data, oracles, rumors Data files used by NetHack.
.br
quest.dat, bogusmon More data files.
bogusmon another data file.
.br
engrave, epitaph, tribute Still more data files.
.br
@@ -287,9 +294,8 @@ help, hh Help data files.
.br
cmdhelp, opthelp, wizhelp More help data files.
.br
*.lev Predefined special levels.
.br
dungeon Control file for special levels.
*.lua Predefined special levels, dungeon control for
special levels, quest texts
.br
history A short history of NetHack.
.br
@@ -386,7 +392,7 @@ SHOPTYPE and SPLEVTYPE can be used in debugging (wizard) mode.
DEBUGFILES can be used if the program was built with 'DEBUG' enabled.
.SH "SEE ALSO"
.PP
dgn_comp(6), lev_comp(6), recover(6)
recover(6)
.SH BUGS
.PP
Probably infinite.

View File

@@ -117,10 +117,10 @@
.\" .BR - hard line break with vertical padding inserted
.\" $1 - repeat count for amount of padding (optional; default is 1)
.de BR
.nr bR (\\$1-0)
.if \\n(bR<1 .nr bR 1
.nr bR \\n(bR*\\n(pd
.sn \\n(bRu
.ie \\.$==0 .nr bR 1v
.el .nr bR (\\$1-0)v
\0
.sp \\n(bR
.br
..
.\" .UR url

View File

@@ -663,6 +663,10 @@ port can access the fields directly.
Your window port identifies what options it will react to and support
by setting bits in the window_procs wincap mask and/or wincap2 mask.
Your window port can also fill in the color-availability table for
the window port, has_color[CLR_MAX] to flag the colors it supports
1 it does, or 0 it doesn't. [CLR_MAX is 16 as of 3.6.3.]
See section IX for details of where the wincap masks reside.
Two things control whether any preference setting appears in the
@@ -926,7 +930,8 @@ These are not part of the interface. They may be called by your
window port routines to perform the desired task, instead of duplicating
the necessary code in each window port.
int mapglyph(int glyph, int *ochar, int *ocolor, unsigned *special, int x, int y)
int mapglyph(int glyph, int *ochar, int *ocolor, unsigned *special,
int x, int y, unsigned mgflags)
-- Maps glyph at x,y to NetHack ascii character and color.
The return value is an index into the showsyms[] array, in
case a port wants to index into its own alternative