Merge branch 'NetHack-3.6.0'

This commit is contained in:
nhmall
2018-04-23 21:41:06 -04:00
21 changed files with 5683 additions and 4350 deletions

View File

@@ -178,10 +178,9 @@ Dean Luick, Pat Rankin, Mike Stephenson, Janet Walz, and Paul Winner.
Leading up to the release of 3.6.0 in early 2015, new members Sean Hunt,
Pasi Kallinen, and Derek S. Ray joined the NetHack development team.
The 3.6 versions of the game are special in a particular way. Near the end
of the development of 3.6.0, one of the significant inspirations for many
of the humorous and fun features found in the game, author Terry Pratchett,
passed away. The 3.6 versions of the game include a tribute to him.
Near the end of the development of 3.6.0, one of the significant inspirations
for many of the humorous and fun features found in the game, author
Terry Pratchett, passed away. NetHack 3.6.0 introduced a tribute to him.
3.6.0 was released in December 2015, and merged work done by the development
team since the release of 3.4.3 with some of the beloved community patches.

View File

@@ -1,4 +1,4 @@
# NetHack 3.6.0 tribute to:
# A tribute introduced in NetHack 3.6.0 to:
#
# Sir Terence David John "Terry" Pratchett
# April 28, 1948 - March 12, 2015

View File

@@ -1,4 +1,4 @@
.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.258 $ $NHDT-Date: 1524190235 2018/04/20 02:10:35 $
.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.262 $ $NHDT-Date: 1524524932 2018/04/23 23:08:52 $
.\"
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -21,7 +21,7 @@
.ds vr "NetHack 3.6
.ds f0 "\*(vr
.ds f1
.ds f2 "April 19, 2018
.ds f2 "April 23, 2018
.
.\" labeled paragraph start (should be part of tmac.n, but I don't want to
.\" make changes to that file)
@@ -84,6 +84,14 @@
.\}
..
.
.\" A note on some special characters:
.\" \(dq = double quote character
.\" - = hyphen \- = minus sign
.\" \(em = M-sized dash
.\" ^ = small circumflex punctuation \(ha = larger circumflex character
.\" ~ = small tilde punctuation \(ti = larger tilde character
.
.
.\" finally, start the actual Guidebook...
.
.mt
@@ -410,7 +418,7 @@ The message line (top)
.pg
The top line of the screen is reserved for messages that describe
things that are impossible to represent visually. If you see a
``\fB--More--\fP'' on the top line, this means that NetHack has
``\fB\-\-More\-\-\fP'' on the top line, this means that NetHack has
another message to display on the screen, but it wants to make certain
that you've read the one that is there first. To read the next message,
just press the space bar.
@@ -427,7 +435,7 @@ so far. Each symbol on the screen represents something. You can set
various graphics options to change some of the symbols the game uses;
otherwise, the game will use default symbols. Here is a list of what the
default symbols mean:
.lp "- and | "
.lp "\\- and | "
The walls of a room, or an open door. Or a grave (|).
.lp .
The floor of a room, ice, or a doorless doorway.
@@ -444,7 +452,7 @@ A closed door, or a spellbook containing a spell you may be able to learn.
Your character or a human.
.lp $
A pile of gold.
.lp ^
.lp \(ha \" ^
A trap (once you have detected it).
.lp )
A weapon.
@@ -507,8 +515,8 @@ you are presented with will depend chiefly on how you have set the
option.
.pg
For example, a common question, in the form ``What do you want to
use?\ [a-zA-Z\ ?*]'', asks you to choose an object you are carrying.
Here, ``a-zA-Z'' are the inventory letters of your possible choices.
use?\ [a\-zA\-Z\ ?*]'', asks you to choose an object you are carrying.
Here, ``a\-zA\-Z'' are the inventory letters of your possible choices.
Typing `?' gives you an inventory list of these items, so you can see
what each letter refers to. In this example, there is also a `*'
indicating that you may choose an object not on the list, if you
@@ -927,8 +935,8 @@ May be preceded by `m' to force a selection menu.
Toggle the
.op autopickup
option on and off.
.lp ^
Ask for the type of a trap you found earlier.
.lp \(ha \" ^
Ask for the type of an adjacent trap you found earlier.
.lp )
Tell what weapon you are wielding.
.lp [
@@ -1203,7 +1211,8 @@ List and reorder known spells. Default key is '+'.
.lp #seetools
Show the tools currently in use. Default key is '('.
.lp #seetrap
Show the type of a trap near you. Default key is '^'.
Show the type of an adjacent trap.
Default key is '\(ha'.
.lp #seeweapon
Show the weapon currently wielded. Default key is ')'.
.lp #shell
@@ -1438,7 +1447,7 @@ doors).
Secret doors are hidden. You can find them with the `s' (search)
command. Once found they are in all ways equivalent to normal doors.
.hn 2
Traps (`^')
Traps (`\(ha')
.pg
There are traps throughout the dungeon to snare the unwary delver.
For example, you may suddenly fall into a pit and be stuck for a few
@@ -1635,6 +1644,24 @@ however, they are likely to be cursed. Beware of whatever killed the
former player; it is probably still lurking around, gloating over its
last victory.
.
.hn 2
Persistence of Monsters
.pg
Monsters (a generic reference which also includes humans and pets) are only
shown while they can be seen or otherwise sensed.
Moving to a location where you can't see or sense a monster any more
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 \(em
perhaps it is invisible and has just tapped you on the noggin \(em
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
moves to another location or you move to a spot where the marker's
location ordinarily wouldn't be seen any more.
.
.hn 1
Objects
.pg
@@ -2180,6 +2207,30 @@ There are a number
of monsters in the dungeon that may be influenced by the amount of gold
you are carrying (shopkeepers aside).
.
.hn 2
Persistence of Objects
.pg
Normally, if you have seen an object at a particular map location and
move to another location which 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 \(em
perhaps a monster has picked it up or it has rotted away \(em
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 and that marker is later removed
after you've verified that no monster is there, you will forget that
there was any object there regardless of whether the unseen monster
actually took the object.
If the object is still there, then once you see or feel that location
again you will re-discover the object and resume remembering it.
.pg
The situation is the same for a pile of objects, except that only the
top item of the pile is displayed.
The
.op hilite_pile
option can be enabled in order to show an item differently when is
the top one of a pile.
.
.hn 1
Conduct
.pg
@@ -2431,7 +2482,7 @@ by the function that handles wishing.
.pg
Example:
.sd
\fBWIZKIT=~/wizkit.txt\fP
\fBWIZKIT=\(ti/wizkit.txt\fP \" \(ti == '~'
.ed
.lp SOUNDDIR
Define the directory that contains the sound files.
@@ -2741,11 +2792,11 @@ Default '-'.
.lp menu_deselect_page
Menu character accelerator to deselect all items on this page of a menu.
Implemented by the Amiga, Gem and tty ports.
Default '\e'.
Default '\\'.
.lp menu_first_page
Menu character accelerator to jump to the first page in a menu.
Implemented by the Amiga, Gem and tty ports.
Default '^'.
Default '\(ha'.
.lp menu_headings
Controls how the headings in a menu are highlighted.
Values are 'none', 'bold', 'dim', 'underline', 'blink', or 'inverse'.
@@ -2757,7 +2808,7 @@ Default '@'.
.lp menu_invert_page
Menu character accelerator to invert all items on this page of a menu.
Implemented by the Amiga, Gem and tty ports.
Default '~'.
Default '\(ti'. \" ~
.lp menu_last_page
Menu character accelerator to jump to the last page in a menu.
Implemented by the Amiga, Gem and tty ports.
@@ -2810,9 +2861,9 @@ defaults to `full'), or it can be negated (which defaults to `single').
Set your character's name (defaults to your user name). You can also
set your character's role by appending a dash and one or more letters of
the role (that is, by suffixing one of
.op "-A -B -C -H -K -M -P -Ra -Ro -S -T -V -W" ).
.op "\-A \-B \-C \-H \-K \-M \-P \-Ra \-Ro \-S \-T \-V \-W" ).
If
.op "-@"
.op "\-@"
is used for the role, then a random one will be automatically chosen.
Cannot be set with the `O' command.
.lp "news "
@@ -3033,7 +3084,7 @@ Persistent.
Display a sparkly effect when a monster (including yourself) is hit by an
attack to which it is resistant (default on). Persistent.
.lp standout
Boldface monsters and ``\fB--More--\fP'' (default off). Persistent.
Boldface monsters and ``\fB\-\-More\-\-\fP'' (default off). Persistent.
.lp statushilites
Controls how many turns status hilite behaviors highlight
the field. If negated or set to zero, disables status hiliting.
@@ -3785,14 +3836,14 @@ 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. Note that
file option. Symbols are specified as name:value pairs.
Note that
NetHack escape-processes the value string in conventional C fashion.
This means that \e is a prefix to take the following character literally. Thus
\e needs to be represented as \e\e.
The special escape form
\em switches on the meta bit in the symbol value, and the \e^ prefix causes the
following character to be treated as a control
character.
This means that \\ is a prefix to take the following character literally.
Thus \\ needs to be represented as \\\\.
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
.TS S
center;
@@ -3810,30 +3861,30 @@ Default Symbol Name Description
\(dq S_amulet (amulet)
A S_angel (angelic being)
a S_ant (ant or other insect)
^ S_anti_magic_trap (anti-magic field)
\(ha S_anti_magic_trap (anti-magic field)
[ S_armor (suit or piece of armor)
[ S_armour (suit or piece of armor)
^ S_arrow_trap (arrow trap)
\(ha S_arrow_trap (arrow trap)
0 S_ball (iron ball)
# S_bars (iron bars)
B S_bat (bat or bird)
^ S_bear_trap (bear trap)
- S_blcorn (bottom left corner)
\(ha S_bear_trap (bear trap)
\- S_blcorn (bottom left corner)
b S_blob (blob)
+ S_book (spellbook)
) S_boomleft (boomerang open left)
( S_boomright (boomerang open right)
\` S_boulder (boulder)
- S_brcorn (bottom right corner)
\- S_brcorn (bottom right corner)
C S_centaur (centaur)
\&_ S_chain (iron chain)
# S_cloud (cloud)
c S_cockatrice (cockatrice)
$ S_coin (pile of coins)
# S_corr (corridor)
- S_crwall (wall)
\- S_crwall (wall)
# S_darkroom (dark room)
^ S_dart_trap (dart trap)
\(ha S_dart_trap (dart trap)
& S_demon (major demon)
* S_digbeam (dig beam)
> S_dnladder (ladder down)
@@ -3843,18 +3894,18 @@ D S_dragon (dragon)
; S_eel (sea monster)
E S_elemental (elemental)
/ S_explode1 (explosion top left)
- S_explode2 (explosion top center)
\- S_explode2 (explosion top center)
\\ S_explode3 (explosion top right)
| S_explode4 (explosion middle left)
\ S_explode5 (explosion middle center)
| S_explode6 (explosion middle right)
\\ S_explode7 (explosion bottom left)
- S_explode8 (explosion bottom center)
\- S_explode8 (explosion bottom center)
/ S_explode9 (explosion bottom right)
e S_eye (eye or sphere)
^ S_falling_rock_trap (falling rock trap)
\(ha S_falling_rock_trap (falling rock trap)
f S_feline (cat or other feline)
^ S_fire_trap (fire trap)
\(ha S_fire_trap (fire trap)
! S_flashbeam (flash beam)
% S_food (piece of food)
{ S_fountain (fountain)
@@ -3866,15 +3917,15 @@ G S_gnome (gnome)
' S_golem (golem)
| S_grave (grave)
g S_gremlin (gremlin)
- S_hbeam (horizontal beam [zap animation])
\- S_hbeam (horizontal beam [zap animation])
# S_hcdbridge (horizontal raised drawbridge)
+ S_hcdoor (closed door in horizontal wall)
\. S_hodbridge (horizontal lowered drawbridge)
| S_hodoor (open door in horizontal wall)
^ S_hole (hole)
\(ha S_hole (hole)
@ S_human (human or elf)
h S_humanoid (humanoid)
- S_hwall (horizontal wall)
\- S_hwall (horizontal wall)
\. S_ice (ice)
i S_imp (imp or minor demon)
I S_invisible (invisible monster)
@@ -3882,17 +3933,17 @@ J S_jabberwock (jabberwock)
j S_jelly (jelly)
k S_kobold (kobold)
K S_kop (Keystone Kop)
^ S_land_mine (land mine)
\(ha S_land_mine (land mine)
} S_lava (molten lava)
l S_leprechaun (leprechaun)
^ S_level_teleporter (level teleporter)
\(ha S_level_teleporter (level teleporter)
L S_lich (lich)
y S_light (light)
# S_litcorr (lit corridor)
: S_lizard (lizard)
\\ S_lslant (diagonal beam [zap animation])
^ S_magic_portal (magic portal)
^ S_magic_trap (magic trap)
\(ha S_magic_portal (magic portal)
\(ha S_magic_trap (magic trap)
m S_mimic (mimic)
] S_mimic_def (mimic)
M S_mummy (mummy)
@@ -3902,9 +3953,9 @@ n S_nymph (nymph)
O S_ogre (ogre)
o S_orc (orc)
p S_piercer (piercer)
^ S_pit (pit)
\(ha S_pit (pit)
# S_poisoncloud (poison cloud)
^ S_polymorph_trap (polymorph trap)
\(ha S_polymorph_trap (polymorph trap)
} S_pool (water)
! S_potion (potion)
P S_pudding (pudding or ooze)
@@ -3913,46 +3964,46 @@ Q S_quantmech (quantum mechanic)
\&= S_ring (ring)
\` S_rock (boulder or statue)
r S_rodent (rodent)
^ S_rolling_boulder_trap (rolling boulder trap)
\(ha S_rolling_boulder_trap (rolling boulder trap)
\. S_room (floor of a room)
/ S_rslant (diagonal beam [zap animation])
^ S_rust_trap (rust trap)
\(ha S_rust_trap (rust trap)
R S_rustmonst (rust monster or disenchanter)
? S_scroll (scroll)
# S_sink (sink)
^ S_sleeping_gas_trap (sleeping gas trap)
\(ha S_sleeping_gas_trap (sleeping gas trap)
S S_snake (snake)
s S_spider (arachnid or centipede)
^ S_spiked_pit (spiked pit)
^ S_squeaky_board (squeaky board)
\(ha S_spiked_pit (spiked pit)
\(ha S_squeaky_board (squeaky board)
0 S_ss1 (magic shield 1 of 4)
# S_ss2 (magic shield 2 of 4)
@ S_ss3 (magic shield 3 of 4)
* S_ss4 (magic shield 4 of 4)
^ S_statue_trap (statue trap)
\(ha S_statue_trap (statue trap)
\ S_stone (dark part of a room)
] S_strange_obj (strange object)
- S_sw_bc (swallow bottom center)
\- S_sw_bc (swallow bottom center)
\\ S_sw_bl (swallow bottom left)
/ S_sw_br (swallow bottom right)
| S_sw_ml (swallow middle left)
| S_sw_mr (swallow middle right)
- S_sw_tc (swallow top center)
\- S_sw_tc (swallow top center)
/ S_sw_tl (swallow top left)
\\ S_sw_tr (swallow top right)
- S_tdwall (wall)
^ S_teleportation_trap (teleportation trap)
\- S_tdwall (wall)
\(ha S_teleportation_trap (teleportation trap)
\\ S_throne (opulent throne)
- S_tlcorn (top left corner)
\- S_tlcorn (top left corner)
| S_tlwall (wall)
( S_tool (useful item (pick-axe\, key\, lamp...))
^ S_trap_door (trap door)
\(ha S_trap_door (trap door)
t S_trapper (trapper or lurker above)
- S_trcorn (top right corner)
\- S_trcorn (top right corner)
# S_tree (tree)
T S_troll (troll)
| S_trwall (wall)
- S_tuwall (wall)
\- S_tuwall (wall)
U S_umber (umber hulk)
u S_unicorn (unicorn or horse)
< S_upladder (ladder up)
@@ -3962,9 +4013,9 @@ V S_vampire (vampire)
# S_vcdbridge (vertical raised drawbridge)
+ S_vcdoor (closed door in vertical wall)
\. S_venom (splash of venom)
^ S_vibrating_square (vibrating square)
\(ha S_vibrating_square (vibrating square)
\. S_vodbridge (vertical lowered drawbridge)
- S_vodoor (open door in vertical wall)
\- S_vodoor (open door in vertical wall)
v S_vortex (vortex)
| S_vwall (vertical wall)
/ S_wand (wand)
@@ -3972,7 +4023,7 @@ v S_vortex (vortex)
) S_weapon (weapon)
\(dq S_web (web)
w S_worm (worm)
~ S_worm_tail (long worm tail)
\(ti S_worm_tail (long worm tail)
W S_wraith (wraith)
x S_xan (xan or other mythical/fantastic insect)
X S_xorn (xorn)
@@ -3982,6 +4033,13 @@ z S_zruty (zruty)
.\"TABLE_END Do not delete this line.
.TE
.pg
There is one additional class of object, described as ``strange object'',
which will occasionally be the shape taken on by mimics and shown as `]'
for maps displayed as text characters.
Although the displayed character is the same as the default value for
`S_mimic_def', it is a different symbol and there is no corresponding
`S_strange_object' symbol nor any way to assign an alternate value for it.
.pg
.hn 2
Configuring NetHack for Play by the Blind
.pg
@@ -4162,7 +4220,7 @@ live, or quit and stop with whatever you have. If you quit, you keep
all your gold, but if you swing and live, you might find more.
.pg
If you just want to see what the current top players/games list is, you
can type \fBnethack -s all\fP on most versions.
can type \fBnethack \-s all\fP on most versions.
.
.hn 1
Explore mode
@@ -4175,7 +4233,7 @@ paltry cost of not getting on the high score list.
.pg
There are two ways of enabling explore mode. One is to start the game
with the
.op -X
.op \-X
command-line switch or with the
.op playmode:explore
option. The other is to issue the ``#exploremode'' extended command while
@@ -4192,7 +4250,7 @@ brief description. It is intended for tracking down problems within the
program rather than to provide god-like powers to your character, and
players who attempt debugging are expected to figure out how to use it
themselves. It is initiated by starting the game with the
.op -D
.op \-D
command-line switch or with the
.op playmode:debug
option.

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{April 19, 2018}
\date{April 23, 2018}
\maketitle
@@ -1028,7 +1028,7 @@ May be preceded by `{\tt m}' to force a selection menu.
Toggle the {\it autopickup\/} option on and off.
%.lp
\item[\tb{\^{}}]
Ask for the type of a trap you found earlier.
Ask for the type of an adjacent trap you found earlier.
%.lp
\item[\tb{)}]
Tell what weapon you are wielding.
@@ -1364,7 +1364,7 @@ List and reorder known spells. Default key is '{\tt +}'.
Show the tools currently in use. Default key is '{\tt (}'.
%.lp
\item[\tb{\#seetrap}]
Show the type of a trap near you. Default key is '{\tt \^{}}'.
Show the type of an adjacent trap. Default key is '{\tt \^{}}'.
%.lp
\item[\tb{\#seeweapon}]
Show the weapon currently wielded. Default key is '{\tt )}'.
@@ -1915,6 +1915,26 @@ however, they are likely to be cursed. Beware of whatever killed the
former player; it is probably still lurking around, gloating over its
last victory.
%.hn 2
\subsection*{Persistence of Monsters}
%.pg
Monsters (a generic reference which also includes humans and pets) are only
shown while they can be seen or otherwise sensed.
Moving to a location where you can't see or sense a monster any more
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
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
moves to another location or you move to a spot where the marker's
location ordinarily wouldn't be seen any more.
%.hn 1
\section{Objects}
@@ -2545,6 +2565,32 @@ There are a number
of monsters in the dungeon that may be influenced by the amount of gold
you are carrying (shopkeepers aside).
%.hn 2
\subsection*{Persistence of Objects}
%.pg
Normally, if you have seen an object at a particular map location and
move to another location which 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.
One notable exception is that if the object gets covered by the
``remembered, unseen monster'' marker and that marker is later removed
after you've verified that no monster is there, you will forget that
there was any object there regardless of whether the unseen monster
actually took the object.
If the object is still there, then once you see or feel that location
again you will re-discover the object and resume remembering it.
%.pg
The situation is the same for a pile of objects, except that only the
top item of the pile is displayed.
The
{\it hilite\verb+_+pile\/}
option can be enabled in order to show an item differently when is
the top one of a pile.
%.hn 1
\section{Conduct}
@@ -4443,7 +4489,7 @@ 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+\\+'.
The special escape form
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
character.
@@ -4632,7 +4678,18 @@ Default & Symbol Name & Description\\
\end{longtable}%
}
%.lp
%.pg
There is one additional class of object, described as ``strange object'',
which will occasionally be the shape taken on by mimics and shown as
`{\tt \verb+]+}'
for maps displayed as text characters.
Although the displayed character is the same as the default value for
`S\verb+_+mimic\verb+_+def', it is a different symbol and there is no
corresponding
`S\verb+_+strange\verb+_+object' symbol nor any way to assign an
alternate value for it.
%.pg
%.hn 2
\subsection*{Configuring {\it NetHack\/} for Play by the Blind}

File diff suppressed because it is too large Load Diff

View File

@@ -540,6 +540,8 @@ wizard mode 'sanity_check' gave spurious "mon not on map" warnings when mounted
at the prompt for entering a level annotation, responding with <return>
erroneously removed old annotation; use <space><return> to do that
reorder the #droptype menu and add some separator lines
moving from a pit to an adjacent pit with uncleared debris shouldn't be a fall
open drawbridge spanning ice would vanish if the ice melted
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 sp_lev.h $NHDT-Date: 1501803105 2017/08/03 23:31:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
/* NetHack 3.6 sp_lev.h $NHDT-Date: 1524287214 2018/04/21 05:06:54 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.23 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
@@ -351,7 +351,7 @@ typedef struct {
typedef struct {
packed_coord coord;
xchar x, y, type;
} trap;
} spltrap;
typedef struct {
Str_or_Len name, appear_as;

View File

@@ -738,7 +738,7 @@ STATIC_DCL void
interrupt_multi(msg)
const char *msg;
{
if (multi > 0 && !context.travel) {
if (multi > 0 && !context.travel && !context.run) {
nomul(0);
if (flags.verbose && msg)
Norep("%s", msg);

View File

@@ -1278,6 +1278,7 @@ wiz_intrinsic(VOID_ARGS)
}
if (n >= 1)
free((genericptr_t) pick_list);
doredraw();
} else
pline("Unavailable command '%s'.",
visctrl((int) cmd_from_func(wiz_intrinsic)));

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 files.c $NHDT-Date: 1503309020 2017/08/21 09:50:20 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.215 $ */
/* NetHack 3.6 files.c $NHDT-Date: 1524413723 2018/04/22 16:15:23 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.235 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -3469,6 +3469,30 @@ const char *dir UNUSED_if_not_OS2_CODEVIEW;
Strcpy(tmp, RECORD);
fq_record = fqname(RECORD, SCOREPREFIX, 0);
#endif
#ifdef WIN32
/* If dir is NULL it indicates create but
only if it doesn't already exist */
if (!dir) {
char buf[BUFSZ];
buf[0] = '\0';
fd = open(fq_record, O_RDWR);
if (!(fd == -1 && errno == ENOENT)) {
if (fd >= 0) {
(void) nhclose(fd);
} else {
/* explanation for failure other than missing file */
Sprintf(buf, "error \"%s\", (errno %d).",
fq_record, errno);
paniclog("scorefile", buf);
}
return;
}
Sprintf(buf, "missing \"%s\", creating new scorefile.",
fq_record);
paniclog("scorefile", buf);
}
#endif
if ((fd = open(fq_record, O_RDWR)) < 0) {
/* try to create empty 'record' */

View File

@@ -857,8 +857,11 @@ int mode;
if (sobj_at(BOULDER, x, y) && (Sokoban || !Passes_walls)) {
if (!(Blind || Hallucination) && (context.run >= 2)
&& mode != TEST_TRAV)
&& mode != TEST_TRAV) {
if (mode == DO_MOVE && iflags.mention_walls)
pline("A boulder blocks your path.");
return FALSE;
}
if (mode == DO_MOVE) {
/* tunneling monsters will chew before pushing */
if (tunnels(youmonst.data) && !needspick(youmonst.data)

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 sp_lev.c $NHDT-Date: 1522701334 2018/04/02 20:35:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.97 $ */
/* NetHack 3.6 sp_lev.c $NHDT-Date: 1524287226 2018/04/21 05:07:06 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.98 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
@@ -69,7 +69,7 @@ STATIC_DCL void FDECL(get_free_room_loc, (schar *, schar *,
STATIC_DCL boolean FDECL(create_subroom, (struct mkroom *, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P));
STATIC_DCL void FDECL(create_door, (room_door *, struct mkroom *));
STATIC_DCL void FDECL(create_trap, (trap *, struct mkroom *));
STATIC_DCL void FDECL(create_trap, (spltrap *, struct mkroom *));
STATIC_DCL int FDECL(noncoalignment, (ALIGNTYP_P));
STATIC_DCL boolean FDECL(m_bad_boulder_spot, (int, int));
STATIC_DCL int FDECL(pm_to_humidity, (struct permonst *));
@@ -1486,7 +1486,7 @@ xchar walls; /* any of W_NORTH | W_SOUTH | W_EAST | W_WEST (or W_ANY) */
*/
STATIC_OVL void
create_trap(t, croom)
trap *t;
spltrap *t;
struct mkroom *croom;
{
schar x = -1, y = -1;
@@ -3580,7 +3580,7 @@ struct sp_coder *coder;
static const char nhFunc[] = "spo_trap";
struct opvar *type;
struct opvar *tcoord;
trap tmptrap;
spltrap tmptrap;
if (!OV_pop_i(type) || !OV_pop_c(tcoord))
return;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 trap.c $NHDT-Date: 1514855666 2018/01/02 01:14:26 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.284 $ */
/* NetHack 3.6 trap.c $NHDT-Date: 1524312044 2018/04/21 12:00:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.290 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -31,6 +31,8 @@ STATIC_DCL char *FDECL(trapnote, (struct trap *, BOOLEAN_P));
STATIC_DCL void FDECL(join_adjacent_pits, (struct trap *));
#endif
STATIC_DCL void FDECL(clear_conjoined_pits, (struct trap *));
STATIC_DCL boolean FDECL(adj_nonconjoined_pit, (struct trap *));
STATIC_DCL int FDECL(steedintrap, (struct trap *, struct obj *));
STATIC_DCL boolean FDECL(keep_saddle_with_steedcorpse, (unsigned,
struct obj *,
@@ -851,7 +853,8 @@ unsigned trflags;
forcebungle = (trflags & FORCEBUNGLE) != 0,
plunged = (trflags & TOOKPLUNGE) != 0,
viasitting = (trflags & VIASITTING) != 0,
adj_pit = conjoined_pits(trap, t_at(u.ux0, u.uy0), TRUE);
conj_pit = conjoined_pits(trap, t_at(u.ux0, u.uy0), TRUE),
adj_pit = adj_nonconjoined_pit(trap);
int oldumort;
int steed_article = ARTICLE_THE;
@@ -879,10 +882,11 @@ unsigned trflags;
return;
}
if (!Fumbling && ttype != MAGIC_PORTAL && ttype != VIBRATING_SQUARE
&& ttype != ANTI_MAGIC && !forcebungle && !plunged && !adj_pit
&& ttype != ANTI_MAGIC && !forcebungle && !plunged
&& !conj_pit && !adj_pit
&& (!rn2(5) || ((ttype == PIT || ttype == SPIKED_PIT)
&& is_clinger(youmonst.data)))) {
You("escape %s %s.", (ttype == ARROW_TRAP && !trap->madeby_u)
You("escape %s %s.", (ttype == ARROW_TRAP && !trap->madeby_u)
? "an"
: a_your[trap->madeby_u],
defsyms[trap_to_defsym(ttype)].explanation);
@@ -1154,8 +1158,11 @@ unsigned trflags;
Sprintf(verbbuf, "lead %s",
x_monnam(u.usteed, steed_article, "poor",
SUPPRESS_SADDLE, FALSE));
} else if (adj_pit) {
} else if (conj_pit) {
You("move into an adjacent pit.");
} else if (adj_pit) {
You("stumble over debris%s.",
!rn2(5) ? " between the pits" : "");
} else {
Strcpy(verbbuf,
!plunged ? "fall" : (Flying ? "dive" : "plunge"));
@@ -1177,33 +1184,34 @@ unsigned trflags;
pline("%s %s %s!",
upstart(x_monnam(u.usteed, steed_article, "poor",
SUPPRESS_SADDLE, FALSE)),
adj_pit ? "steps" : "lands", predicament);
conj_pit ? "steps" : "lands", predicament);
} else
You("%s %s!", adj_pit ? "step" : "land", predicament);
You("%s %s!", conj_pit ? "step" : "land", predicament);
}
u.utrap = rn1(6, 2);
u.utraptype = TT_PIT;
if (!steedintrap(trap, (struct obj *) 0)) {
if (ttype == SPIKED_PIT) {
oldumort = u.umortality;
losehp(Maybe_Half_Phys(rnd(adj_pit ? 6 : 10)),
losehp(Maybe_Half_Phys(rnd(conj_pit ? 4 : adj_pit ? 6 : 10)),
plunged
? "deliberately plunged into a pit of iron spikes"
: adj_pit ? "stepped into a pit of iron spikes"
: conj_pit ? "stepped into a pit of iron spikes"
: adj_pit ? "stumbled into a pit of iron spikes"
: "fell into a pit of iron spikes",
NO_KILLER_PREFIX);
if (!rn2(6))
poisoned("spikes", A_STR,
adj_pit ? "stepping on poison spikes"
(conj_pit || adj_pit) ? "stepping on poison spikes"
: "fall onto poison spikes",
/* if damage triggered life-saving,
poison is limited to attrib loss */
(u.umortality > oldumort) ? 0 : 8, FALSE);
} else {
/* plunging flyers take spike damage but not pit damage */
if (!adj_pit
if (!conj_pit
&& !(plunged && (Flying || is_clinger(youmonst.data))))
losehp(Maybe_Half_Phys(rnd(6)),
losehp(Maybe_Half_Phys(rnd(adj_pit ? 3 : 6)),
plunged ? "deliberately plunged into a pit"
: "fell into a pit",
NO_KILLER_PREFIX);
@@ -1213,7 +1221,7 @@ unsigned trflags;
ballfall();
placebc();
}
if (!adj_pit)
if (!conj_pit)
selftouch("Falling, you");
vision_full_recalc = 1; /* vision limits change */
exercise(A_STR, FALSE);
@@ -4909,6 +4917,24 @@ struct trap *trap;
}
}
boolean
adj_nonconjoined_pit(adjtrap)
struct trap *adjtrap;
{
struct trap *trap_with_u = t_at(u.ux0, u.uy0);
if (trap_with_u && adjtrap && u.utrap && u.utraptype == TT_PIT &&
(trap_with_u->ttyp == PIT || trap_with_u->ttyp == SPIKED_PIT) &&
(adjtrap->ttyp == PIT || adjtrap->ttyp == SPIKED_PIT)) {
int idx;
for (idx = 0; idx < 8; idx++) {
if (xdir[idx] == u.dx && ydir[idx] == u.dy)
return TRUE;
}
}
return FALSE;
}
#if 0
/*
* Mark all neighboring pits as conjoined pits.

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 zap.c $NHDT-Date: 1520705645 2018/03/10 18:14:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.271 $ */
/* NetHack 3.6 zap.c $NHDT-Date: 1524470244 2018/04/23 07:57:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.275 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -4180,7 +4180,7 @@ const char *msg;
if (!msg)
msg = "The ice crackles and melts.";
if (lev->typ == DRAWBRIDGE_UP) {
if (lev->typ == DRAWBRIDGE_UP || lev->typ == DRAWBRIDGE_DOWN) {
lev->drawbridgemask &= ~DB_ICE; /* revert to DB_MOAT */
} else { /* lev->typ == ICE */
#ifdef STUPID

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 pcmain.c $NHDT-Date: 1457207045 2016/03/05 19:44:05 $ $NHDT-Branch: chasonr $:$NHDT-Revision: 1.69 $ */
/* NetHack 3.6 pcmain.c $NHDT-Date: 1524413707 2018/04/22 16:15:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.74 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -307,6 +307,7 @@ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);*/
save_getreturn_status = getreturn_enabled;
raw_clear_screen();
getreturn_enabled = TRUE;
check_recordfile((char *) 0);
#endif
initoptions();

View File

@@ -22,11 +22,12 @@ preserving permissions to put the NetHack files in /usr/games/nethack and
home directory you might perform these steps.
% su
# cd /
# tar xpvzf ~yourlogin/nethack-360-linux-X11.tgz
# tar xpvzf ~yourlogin/nethack-361-linux-X11.tgz
If you have old record and logfile entries from a previous NetHack version,
you might want to save copies before they get overwritten by the new empty
files; old saved games and bones files from 3.4.x will not work with 3.6.0.
files; old saved games and bones files from 3.6.0 should work with 3.6.1
but even older saved games and bones files from 3.4.3 will not.
If you are installing from the RPM, there is no need to save the old record
and logfile; they are automatically preserved.

View File

@@ -1,4 +1,4 @@
Instructions for Building and Installing NetHack 3.6.0
Instructions for Building and Installing NetHack 3.6.1
on a VMS (aka OpenVMS) system
=========================================
@@ -137,7 +137,8 @@ Notes:
0. Version 3.5.x was never publicly released.
1. Save files and bones files from 3.4.x and earlier versions
will not work with 3.6.0. The scoreboard file (RECORD) from
will not work with 3.6.1, but save files and bones file from 3.6.0
should work. The scoreboard file (RECORD) from 3.6.0 or
3.4.x or 3.3.x will work.
2. To specify user-preference options in your environment, define the

View File

@@ -284,8 +284,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,5,0,0
PRODUCTVERSION 3,5,0,0
FILEVERSION 3,6,1,0
PRODUCTVERSION 3,6,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
@@ -300,17 +300,17 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "NetHack 3.6.0 for Windows CE\0"
VALUE "Comments", "NetHack 3.6.1 for Windows CE\0"
VALUE "CompanyName", " \0"
VALUE "FileDescription", "nethackm\0"
VALUE "FileVersion", "3, 5, 0, 0\0"
VALUE "FileVersion", "3, 6, 1, 0\0"
VALUE "InternalName", "nethackm\0"
VALUE "LegalCopyright", "Copyright © 1985-2009\0"
VALUE "LegalCopyright", "Copyright © 1985-2018\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "nethackm.exe\0"
VALUE "PrivateBuild", "090914\0"
VALUE "ProductName", "NetHack\0"
VALUE "ProductVersion", "3, 5, 0, 0\0"
VALUE "ProductVersion", "3, 6, 1, 0\0"
VALUE "SpecialBuild", "\0"
END
END

View File

@@ -260,8 +260,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,5,0,0
PRODUCTVERSION 3,5,0,0
FILEVERSION 3,6,1,0
PRODUCTVERSION 3,6,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
@@ -276,17 +276,17 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "NetHack 3.6.0 for Smartphone 2002\0"
VALUE "Comments", "NetHack 3.6.1 for Smartphone 2002\0"
VALUE "CompanyName", " \0"
VALUE "FileDescription", "nethackm\0"
VALUE "FileVersion", "3, 5, 0, 0\0"
VALUE "FileVersion", "3, 6, 1, 0\0"
VALUE "InternalName", "nethackm\0"
VALUE "LegalCopyright", "Copyright © 1985-2010\0"
VALUE "LegalCopyright", "Copyright © 1985-2018\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "nethackm.exe\0"
VALUE "PrivateBuild", "090914\0"
VALUE "ProductName", "NetHack For Smartphone\0"
VALUE "ProductVersion", "3, 5, 0, 0\0"
VALUE "ProductVersion", "3, 6, 1, 0\0"
VALUE "SpecialBuild", "\0"
END
END

View File

@@ -1,11 +1,11 @@
Copyright (c) NetHack Development Team 1990-2017
Copyright (c) NetHack Development Team 1990-2018
NetHack may be freely redistributed. See license for details.
==============================================================
Instructions for compiling and installing
NetHack 3.6 on a Windows system
(Windows 7/8.x/10 or later only. XP may work but is untested)
==============================================================
Last revision: $NHDT-Date: 1450306349 2015/12/16 22:52:29 $
Last revision: $NHDT-Date: 1524317622 2018/04/21 13:33:42 $
Credit for the porting of NetHack to the Win32 Console Subsystem goes to
the NT Porting Team started by Michael Allison.
@@ -56,9 +56,13 @@ The Visual Studio 2017 NetHack solution file can be found here:
So the steps are:
1. Launch the IDE.
2. Open the appropriate solution file.
3. Select the build configuration you wish to use.
4. From build menu, select build solution.
5. Type F5 to start debugging.
3. If you have a newer version of Visual Studio than what was used to build
the solution and project files distributed with the NetHack sources, you
can easily retarget the solution before the next step. Refer to the
"Note about the Windows SDK version" a couple of paragraphs below.
4. Select the build configuration you wish to use (Release, Debug, etc.).
5. From the build menu, select build solution.
6. Type F5 to start debugging.
You can also build all the projects for all platforms and configurations
using a "build.bat" batch file found in the same directory as the solution.
@@ -66,10 +70,13 @@ using a "build.bat" batch file found in the same directory as the solution.
Change to the appropriate directory (i.e. win\win32\vs2015 for VS2015 builds,
win\win32\vs2017 for VS2017 builds) and run "build.bat".
Note: The Visual Studio project files distributed for NetHack 3.6.1 are configured for the
Windows SDK version 10.0.15063.0. At the time of writing, the Windows SDK version that
is distributed with VS2017 Community Edition is a newer 10.0.16299.0. If you have a build
error MSB8036, you will simply need to change the expected SDK version as follows:
-----------------------------------
Note about the WINDOWS SDK Version:
-----------------------------------
The Visual Studio project files distributed for NetHack 3.6.1 are configured for the
Windows SDK version 10.0.15063.0. At the time of writing, the Windows SDK version that
is distributed with VS2017 Community Edition is a newer 10.0.16299.0. If you have a build
error MSB8036, you will simply need to change the expected SDK version as follows:
o Open the solution in the IDE and in the project property pages, right-click the
solution and select "Retarget solution".
@@ -203,9 +210,9 @@ Setting Up
| | |
share winnt win32
Check the file "Files" in your top level directory for an exact
listing of what file is in which directory. In order for the
Makefiles to work, all the source files must be in the proper
Check the file "Files" in your top level directory for a more
complete listing of what file is in which directory. In order for
the Makefiles to work, all the source files must be in the proper
locations.
If you downloaded or ftp'd the sources from a UNIX system, the lines

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 winnt.c $NHDT-Date: 1431737068 2015/05/16 00:44:28 $ $NHDT-Branch: master $:$NHDT-Revision: 1.26 $ */
/* NetHack 3.6 winnt.c $NHDT-Date: 1524321419 2018/04/21 14:36:59 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.30 $ */
/* Copyright (c) NetHack PC Development Team 1993, 1994 */
/* NetHack may be freely redistributed. See license for details. */
@@ -329,14 +329,13 @@ char *buf;
*/
char *tmp = buf;
HWND hwndConsole = GetConsoleHandle();
HGLOBAL hglbCopy;
WCHAR *w, w2[2];
int cc, rc, abytes;
LPWSTR lpwstrCopy;
HANDLE hresult;
if (!buf || (hwndConsole == NULL))
if (!buf)
return;
cc = strlen(buf);
@@ -353,7 +352,7 @@ char *buf;
free(w);
return;
}
if (!OpenClipboard(hwndConsole)) {
if (!OpenClipboard(NULL)) {
free(w);
return;
}