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
+3 -4
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, 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. 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 Near the end of the development of 3.6.0, one of the significant inspirations
of the development of 3.6.0, one of the significant inspirations for many for many of the humorous and fun features found in the game, author
of the humorous and fun features found in the game, author Terry Pratchett, Terry Pratchett, passed away. NetHack 3.6.0 introduced a tribute to him.
passed away. The 3.6 versions of the game include a tribute to him.
3.6.0 was released in December 2015, and merged work done by the development 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. team since the release of 3.4.3 with some of the beloved community patches.
+1 -1
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 # Sir Terence David John "Terry" Pratchett
# April 28, 1948 - March 12, 2015 # April 28, 1948 - March 12, 2015
+123 -65
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. .\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines. .\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -21,7 +21,7 @@
.ds vr "NetHack 3.6 .ds vr "NetHack 3.6
.ds f0 "\*(vr .ds f0 "\*(vr
.ds f1 .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 .\" labeled paragraph start (should be part of tmac.n, but I don't want to
.\" make changes to that file) .\" 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... .\" finally, start the actual Guidebook...
. .
.mt .mt
@@ -410,7 +418,7 @@ The message line (top)
.pg .pg
The top line of the screen is reserved for messages that describe The top line of the screen is reserved for messages that describe
things that are impossible to represent visually. If you see a 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 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, that you've read the one that is there first. To read the next message,
just press the space bar. 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; 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 otherwise, the game will use default symbols. Here is a list of what the
default symbols mean: default symbols mean:
.lp "- and | " .lp "\\- and | "
The walls of a room, or an open door. Or a grave (|). The walls of a room, or an open door. Or a grave (|).
.lp . .lp .
The floor of a room, ice, or a doorless doorway. 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. Your character or a human.
.lp $ .lp $
A pile of gold. A pile of gold.
.lp ^ .lp \(ha \" ^
A trap (once you have detected it). A trap (once you have detected it).
.lp ) .lp )
A weapon. A weapon.
@@ -507,8 +515,8 @@ you are presented with will depend chiefly on how you have set the
option. option.
.pg .pg
For example, a common question, in the form ``What do you want to 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. 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. 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 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 `*' 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 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 Toggle the
.op autopickup .op autopickup
option on and off. option on and off.
.lp ^ .lp \(ha \" ^
Ask for the type of a trap you found earlier. Ask for the type of an adjacent trap you found earlier.
.lp ) .lp )
Tell what weapon you are wielding. Tell what weapon you are wielding.
.lp [ .lp [
@@ -1203,7 +1211,8 @@ List and reorder known spells. Default key is '+'.
.lp #seetools .lp #seetools
Show the tools currently in use. Default key is '('. Show the tools currently in use. Default key is '('.
.lp #seetrap .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 .lp #seeweapon
Show the weapon currently wielded. Default key is ')'. Show the weapon currently wielded. Default key is ')'.
.lp #shell .lp #shell
@@ -1438,7 +1447,7 @@ doors).
Secret doors are hidden. You can find them with the `s' (search) Secret doors are hidden. You can find them with the `s' (search)
command. Once found they are in all ways equivalent to normal doors. command. Once found they are in all ways equivalent to normal doors.
.hn 2 .hn 2
Traps (`^') Traps (`\(ha')
.pg .pg
There are traps throughout the dungeon to snare the unwary delver. 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 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 former player; it is probably still lurking around, gloating over its
last victory. 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 .hn 1
Objects Objects
.pg .pg
@@ -2180,6 +2207,30 @@ There are a number
of monsters in the dungeon that may be influenced by the amount of gold of monsters in the dungeon that may be influenced by the amount of gold
you are carrying (shopkeepers aside). 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 .hn 1
Conduct Conduct
.pg .pg
@@ -2431,7 +2482,7 @@ by the function that handles wishing.
.pg .pg
Example: Example:
.sd .sd
\fBWIZKIT=~/wizkit.txt\fP \fBWIZKIT=\(ti/wizkit.txt\fP \" \(ti == '~'
.ed .ed
.lp SOUNDDIR .lp SOUNDDIR
Define the directory that contains the sound files. Define the directory that contains the sound files.
@@ -2741,11 +2792,11 @@ Default '-'.
.lp menu_deselect_page .lp menu_deselect_page
Menu character accelerator to deselect all items on this page of a menu. Menu character accelerator to deselect all items on this page of a menu.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default '\e'. Default '\\'.
.lp menu_first_page .lp menu_first_page
Menu character accelerator to jump to the first page in a menu. Menu character accelerator to jump to the first page in a menu.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default '^'. Default '\(ha'.
.lp menu_headings .lp menu_headings
Controls how the headings in a menu are highlighted. Controls how the headings in a menu are highlighted.
Values are 'none', 'bold', 'dim', 'underline', 'blink', or 'inverse'. Values are 'none', 'bold', 'dim', 'underline', 'blink', or 'inverse'.
@@ -2757,7 +2808,7 @@ Default '@'.
.lp menu_invert_page .lp menu_invert_page
Menu character accelerator to invert all items on this page of a menu. Menu character accelerator to invert all items on this page of a menu.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default '~'. Default '\(ti'. \" ~
.lp menu_last_page .lp menu_last_page
Menu character accelerator to jump to the last page in a menu. Menu character accelerator to jump to the last page in a menu.
Implemented by the Amiga, Gem and tty ports. 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 name (defaults to your user name). You can also
set your character's role by appending a dash and one or more letters of set your character's role by appending a dash and one or more letters of
the role (that is, by suffixing one 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 If
.op "-@" .op "\-@"
is used for the role, then a random one will be automatically chosen. is used for the role, then a random one will be automatically chosen.
Cannot be set with the `O' command. Cannot be set with the `O' command.
.lp "news " .lp "news "
@@ -3033,7 +3084,7 @@ Persistent.
Display a sparkly effect when a monster (including yourself) is hit by an Display a sparkly effect when a monster (including yourself) is hit by an
attack to which it is resistant (default on). Persistent. attack to which it is resistant (default on). Persistent.
.lp standout .lp standout
Boldface monsters and ``\fB--More--\fP'' (default off). Persistent. Boldface monsters and ``\fB\-\-More\-\-\fP'' (default off). Persistent.
.lp statushilites .lp statushilites
Controls how many turns status hilite behaviors highlight Controls how many turns status hilite behaviors highlight
the field. If negated or set to zero, disables status hiliting. 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. on the rogue level.
.pg .pg
You can also override one or more symbols using the SYMBOLS config 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. NetHack escape-processes the value string in conventional C fashion.
This means that \e is a prefix to take the following character literally. Thus This means that \\ is a prefix to take the following character literally.
\e needs to be represented as \e\e. Thus \\ needs to be represented as \\\\.
The special escape form The special prefix form \\m switches on the meta bit in the symbol value,
\em switches on the meta bit in the symbol value, and the \e^ prefix causes the and the \(ha prefix causes the following character to be treated as a
following character to be treated as a control control character.
character.
.pg .pg
.TS S .TS S
center; center;
@@ -3810,30 +3861,30 @@ Default Symbol Name Description
\(dq S_amulet (amulet) \(dq S_amulet (amulet)
A S_angel (angelic being) A S_angel (angelic being)
a S_ant (ant or other insect) 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_armor (suit or piece of armor)
[ S_armour (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) 0 S_ball (iron ball)
# S_bars (iron bars) # S_bars (iron bars)
B S_bat (bat or bird) B S_bat (bat or bird)
^ S_bear_trap (bear trap) \(ha S_bear_trap (bear trap)
- S_blcorn (bottom left corner) \- S_blcorn (bottom left corner)
b S_blob (blob) b S_blob (blob)
+ S_book (spellbook) + S_book (spellbook)
) S_boomleft (boomerang open left) ) S_boomleft (boomerang open left)
( S_boomright (boomerang open right) ( S_boomright (boomerang open right)
\` S_boulder (boulder) \` S_boulder (boulder)
- S_brcorn (bottom right corner) \- S_brcorn (bottom right corner)
C S_centaur (centaur) C S_centaur (centaur)
\&_ S_chain (iron chain) \&_ S_chain (iron chain)
# S_cloud (cloud) # S_cloud (cloud)
c S_cockatrice (cockatrice) c S_cockatrice (cockatrice)
$ S_coin (pile of coins) $ S_coin (pile of coins)
# S_corr (corridor) # S_corr (corridor)
- S_crwall (wall) \- S_crwall (wall)
# S_darkroom (dark room) # S_darkroom (dark room)
^ S_dart_trap (dart trap) \(ha S_dart_trap (dart trap)
& S_demon (major demon) & S_demon (major demon)
* S_digbeam (dig beam) * S_digbeam (dig beam)
> S_dnladder (ladder down) > S_dnladder (ladder down)
@@ -3843,18 +3894,18 @@ D S_dragon (dragon)
; S_eel (sea monster) ; S_eel (sea monster)
E S_elemental (elemental) E S_elemental (elemental)
/ S_explode1 (explosion top left) / S_explode1 (explosion top left)
- S_explode2 (explosion top center) \- S_explode2 (explosion top center)
\\ S_explode3 (explosion top right) \\ S_explode3 (explosion top right)
| S_explode4 (explosion middle left) | S_explode4 (explosion middle left)
\ S_explode5 (explosion middle center) \ S_explode5 (explosion middle center)
| S_explode6 (explosion middle right) | S_explode6 (explosion middle right)
\\ S_explode7 (explosion bottom left) \\ S_explode7 (explosion bottom left)
- S_explode8 (explosion bottom center) \- S_explode8 (explosion bottom center)
/ S_explode9 (explosion bottom right) / S_explode9 (explosion bottom right)
e S_eye (eye or sphere) 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) f S_feline (cat or other feline)
^ S_fire_trap (fire trap) \(ha S_fire_trap (fire trap)
! S_flashbeam (flash beam) ! S_flashbeam (flash beam)
% S_food (piece of food) % S_food (piece of food)
{ S_fountain (fountain) { S_fountain (fountain)
@@ -3866,15 +3917,15 @@ G S_gnome (gnome)
' S_golem (golem) ' S_golem (golem)
| S_grave (grave) | S_grave (grave)
g S_gremlin (gremlin) g S_gremlin (gremlin)
- S_hbeam (horizontal beam [zap animation]) \- S_hbeam (horizontal beam [zap animation])
# S_hcdbridge (horizontal raised drawbridge) # S_hcdbridge (horizontal raised drawbridge)
+ S_hcdoor (closed door in horizontal wall) + S_hcdoor (closed door in horizontal wall)
\. S_hodbridge (horizontal lowered drawbridge) \. S_hodbridge (horizontal lowered drawbridge)
| S_hodoor (open door in horizontal wall) | S_hodoor (open door in horizontal wall)
^ S_hole (hole) \(ha S_hole (hole)
@ S_human (human or elf) @ S_human (human or elf)
h S_humanoid (humanoid) h S_humanoid (humanoid)
- S_hwall (horizontal wall) \- S_hwall (horizontal wall)
\. S_ice (ice) \. S_ice (ice)
i S_imp (imp or minor demon) i S_imp (imp or minor demon)
I S_invisible (invisible monster) I S_invisible (invisible monster)
@@ -3882,17 +3933,17 @@ J S_jabberwock (jabberwock)
j S_jelly (jelly) j S_jelly (jelly)
k S_kobold (kobold) k S_kobold (kobold)
K S_kop (Keystone Kop) K S_kop (Keystone Kop)
^ S_land_mine (land mine) \(ha S_land_mine (land mine)
} S_lava (molten lava) } S_lava (molten lava)
l S_leprechaun (leprechaun) l S_leprechaun (leprechaun)
^ S_level_teleporter (level teleporter) \(ha S_level_teleporter (level teleporter)
L S_lich (lich) L S_lich (lich)
y S_light (light) y S_light (light)
# S_litcorr (lit corridor) # S_litcorr (lit corridor)
: S_lizard (lizard) : S_lizard (lizard)
\\ S_lslant (diagonal beam [zap animation]) \\ S_lslant (diagonal beam [zap animation])
^ S_magic_portal (magic portal) \(ha S_magic_portal (magic portal)
^ S_magic_trap (magic trap) \(ha S_magic_trap (magic trap)
m S_mimic (mimic) m S_mimic (mimic)
] S_mimic_def (mimic) ] S_mimic_def (mimic)
M S_mummy (mummy) M S_mummy (mummy)
@@ -3902,9 +3953,9 @@ n S_nymph (nymph)
O S_ogre (ogre) O S_ogre (ogre)
o S_orc (orc) o S_orc (orc)
p S_piercer (piercer) p S_piercer (piercer)
^ S_pit (pit) \(ha S_pit (pit)
# S_poisoncloud (poison cloud) # S_poisoncloud (poison cloud)
^ S_polymorph_trap (polymorph trap) \(ha S_polymorph_trap (polymorph trap)
} S_pool (water) } S_pool (water)
! S_potion (potion) ! S_potion (potion)
P S_pudding (pudding or ooze) P S_pudding (pudding or ooze)
@@ -3913,46 +3964,46 @@ Q S_quantmech (quantum mechanic)
\&= S_ring (ring) \&= S_ring (ring)
\` S_rock (boulder or statue) \` S_rock (boulder or statue)
r S_rodent (rodent) 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_room (floor of a room)
/ S_rslant (diagonal beam [zap animation]) / S_rslant (diagonal beam [zap animation])
^ S_rust_trap (rust trap) \(ha S_rust_trap (rust trap)
R S_rustmonst (rust monster or disenchanter) R S_rustmonst (rust monster or disenchanter)
? S_scroll (scroll) ? S_scroll (scroll)
# S_sink (sink) # S_sink (sink)
^ S_sleeping_gas_trap (sleeping gas trap) \(ha S_sleeping_gas_trap (sleeping gas trap)
S S_snake (snake) S S_snake (snake)
s S_spider (arachnid or centipede) s S_spider (arachnid or centipede)
^ S_spiked_pit (spiked pit) \(ha S_spiked_pit (spiked pit)
^ S_squeaky_board (squeaky board) \(ha S_squeaky_board (squeaky board)
0 S_ss1 (magic shield 1 of 4) 0 S_ss1 (magic shield 1 of 4)
# S_ss2 (magic shield 2 of 4) # S_ss2 (magic shield 2 of 4)
@ S_ss3 (magic shield 3 of 4) @ S_ss3 (magic shield 3 of 4)
* S_ss4 (magic shield 4 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_stone (dark part of a room)
] S_strange_obj (strange object) ] 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_bl (swallow bottom left)
/ S_sw_br (swallow bottom right) / S_sw_br (swallow bottom right)
| S_sw_ml (swallow middle left) | S_sw_ml (swallow middle left)
| S_sw_mr (swallow middle right) | 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_tl (swallow top left)
\\ S_sw_tr (swallow top right) \\ S_sw_tr (swallow top right)
- S_tdwall (wall) \- S_tdwall (wall)
^ S_teleportation_trap (teleportation trap) \(ha S_teleportation_trap (teleportation trap)
\\ S_throne (opulent throne) \\ S_throne (opulent throne)
- S_tlcorn (top left corner) \- S_tlcorn (top left corner)
| S_tlwall (wall) | S_tlwall (wall)
( S_tool (useful item (pick-axe\, key\, lamp...)) ( 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) t S_trapper (trapper or lurker above)
- S_trcorn (top right corner) \- S_trcorn (top right corner)
# S_tree (tree) # S_tree (tree)
T S_troll (troll) T S_troll (troll)
| S_trwall (wall) | S_trwall (wall)
- S_tuwall (wall) \- S_tuwall (wall)
U S_umber (umber hulk) U S_umber (umber hulk)
u S_unicorn (unicorn or horse) u S_unicorn (unicorn or horse)
< S_upladder (ladder up) < S_upladder (ladder up)
@@ -3962,9 +4013,9 @@ V S_vampire (vampire)
# S_vcdbridge (vertical raised drawbridge) # S_vcdbridge (vertical raised drawbridge)
+ S_vcdoor (closed door in vertical wall) + S_vcdoor (closed door in vertical wall)
\. S_venom (splash of venom) \. S_venom (splash of venom)
^ S_vibrating_square (vibrating square) \(ha S_vibrating_square (vibrating square)
\. S_vodbridge (vertical lowered drawbridge) \. S_vodbridge (vertical lowered drawbridge)
- S_vodoor (open door in vertical wall) \- S_vodoor (open door in vertical wall)
v S_vortex (vortex) v S_vortex (vortex)
| S_vwall (vertical wall) | S_vwall (vertical wall)
/ S_wand (wand) / S_wand (wand)
@@ -3972,7 +4023,7 @@ v S_vortex (vortex)
) S_weapon (weapon) ) S_weapon (weapon)
\(dq S_web (web) \(dq S_web (web)
w S_worm (worm) w S_worm (worm)
~ S_worm_tail (long worm tail) \(ti S_worm_tail (long worm tail)
W S_wraith (wraith) W S_wraith (wraith)
x S_xan (xan or other mythical/fantastic insect) x S_xan (xan or other mythical/fantastic insect)
X S_xorn (xorn) X S_xorn (xorn)
@@ -3982,6 +4033,13 @@ z S_zruty (zruty)
.\"TABLE_END Do not delete this line. .\"TABLE_END Do not delete this line.
.TE .TE
.pg .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 .hn 2
Configuring NetHack for Play by the Blind Configuring NetHack for Play by the Blind
.pg .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. all your gold, but if you swing and live, you might find more.
.pg .pg
If you just want to see what the current top players/games list is, you 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 .hn 1
Explore mode Explore mode
@@ -4175,7 +4233,7 @@ paltry cost of not getting on the high score list.
.pg .pg
There are two ways of enabling explore mode. One is to start the game There are two ways of enabling explore mode. One is to start the game
with the with the
.op -X .op \-X
command-line switch or with the command-line switch or with the
.op playmode:explore .op playmode:explore
option. The other is to issue the ``#exploremode'' extended command while 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 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 players who attempt debugging are expected to figure out how to use it
themselves. It is initiated by starting the game with the themselves. It is initiated by starting the game with the
.op -D .op \-D
command-line switch or with the command-line switch or with the
.op playmode:debug .op playmode:debug
option. option.
+62 -5
View File
@@ -45,7 +45,7 @@
%.au %.au
\author{Original version - Eric S. Raymond\\ \author{Original version - Eric S. Raymond\\
(Edited and expanded for 3.6 by Mike Stephenson and others)} (Edited and expanded for 3.6 by Mike Stephenson and others)}
\date{April 19, 2018} \date{April 23, 2018}
\maketitle \maketitle
@@ -1028,7 +1028,7 @@ May be preceded by `{\tt m}' to force a selection menu.
Toggle the {\it autopickup\/} option on and off. Toggle the {\it autopickup\/} option on and off.
%.lp %.lp
\item[\tb{\^{}}] \item[\tb{\^{}}]
Ask for the type of a trap you found earlier. Ask for the type of an adjacent trap you found earlier.
%.lp %.lp
\item[\tb{)}] \item[\tb{)}]
Tell what weapon you are wielding. 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 (}'. Show the tools currently in use. Default key is '{\tt (}'.
%.lp %.lp
\item[\tb{\#seetrap}] \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 %.lp
\item[\tb{\#seeweapon}] \item[\tb{\#seeweapon}]
Show the weapon currently wielded. Default key is '{\tt )}'. 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 former player; it is probably still lurking around, gloating over its
last victory. 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 %.hn 1
\section{Objects} \section{Objects}
@@ -2545,6 +2565,32 @@ There are a number
of monsters in the dungeon that may be influenced by the amount of gold of monsters in the dungeon that may be influenced by the amount of gold
you are carrying (shopkeepers aside). 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 %.hn 1
\section{Conduct} \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 {\it NetHack\/} escape-processes the {\it value\/} string in conventional C
fashion. This means that `\verb+\+' is a prefix to take the following fashion. This means that `\verb+\+' is a prefix to take the following
character literally. Thus `\verb+\+' needs to be represented as `\verb+\\+'. 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 `\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 `{\tt \^{}}' prefix causes the following character to be treated as a control
character. character.
@@ -4632,7 +4678,18 @@ Default & Symbol Name & Description\\
\end{longtable}% \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 %.hn 2
\subsection*{Configuring {\it NetHack\/} for Play by the Blind} \subsection*{Configuring {\it NetHack\/} for Play by the Blind}
+2931 -1777
View File
File diff suppressed because it is too large Load Diff
+2
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> at the prompt for entering a level annotation, responding with <return>
erroneously removed old annotation; use <space><return> to do that erroneously removed old annotation; use <space><return> to do that
reorder the #droptype menu and add some separator lines 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 Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
+2 -2
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 */ /* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -351,7 +351,7 @@ typedef struct {
typedef struct { typedef struct {
packed_coord coord; packed_coord coord;
xchar x, y, type; xchar x, y, type;
} trap; } spltrap;
typedef struct { typedef struct {
Str_or_Len name, appear_as; Str_or_Len name, appear_as;
+1 -1
View File
@@ -738,7 +738,7 @@ STATIC_DCL void
interrupt_multi(msg) interrupt_multi(msg)
const char *msg; const char *msg;
{ {
if (multi > 0 && !context.travel) { if (multi > 0 && !context.travel && !context.run) {
nomul(0); nomul(0);
if (flags.verbose && msg) if (flags.verbose && msg)
Norep("%s", msg); Norep("%s", msg);
+1
View File
@@ -1278,6 +1278,7 @@ wiz_intrinsic(VOID_ARGS)
} }
if (n >= 1) if (n >= 1)
free((genericptr_t) pick_list); free((genericptr_t) pick_list);
doredraw();
} else } else
pline("Unavailable command '%s'.", pline("Unavailable command '%s'.",
visctrl((int) cmd_from_func(wiz_intrinsic))); visctrl((int) cmd_from_func(wiz_intrinsic)));
+25 -1
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. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -3469,6 +3469,30 @@ const char *dir UNUSED_if_not_OS2_CODEVIEW;
Strcpy(tmp, RECORD); Strcpy(tmp, RECORD);
fq_record = fqname(RECORD, SCOREPREFIX, 0); fq_record = fqname(RECORD, SCOREPREFIX, 0);
#endif #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) { if ((fd = open(fq_record, O_RDWR)) < 0) {
/* try to create empty 'record' */ /* try to create empty 'record' */
+4 -1
View File
@@ -857,8 +857,11 @@ int mode;
if (sobj_at(BOULDER, x, y) && (Sokoban || !Passes_walls)) { if (sobj_at(BOULDER, x, y) && (Sokoban || !Passes_walls)) {
if (!(Blind || Hallucination) && (context.run >= 2) 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; return FALSE;
}
if (mode == DO_MOVE) { if (mode == DO_MOVE) {
/* tunneling monsters will chew before pushing */ /* tunneling monsters will chew before pushing */
if (tunnels(youmonst.data) && !needspick(youmonst.data) if (tunnels(youmonst.data) && !needspick(youmonst.data)
+4 -4
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 */ /* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */ /* 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, STATIC_DCL boolean FDECL(create_subroom, (struct mkroom *, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, 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_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 int FDECL(noncoalignment, (ALIGNTYP_P));
STATIC_DCL boolean FDECL(m_bad_boulder_spot, (int, int)); STATIC_DCL boolean FDECL(m_bad_boulder_spot, (int, int));
STATIC_DCL int FDECL(pm_to_humidity, (struct permonst *)); 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 STATIC_OVL void
create_trap(t, croom) create_trap(t, croom)
trap *t; spltrap *t;
struct mkroom *croom; struct mkroom *croom;
{ {
schar x = -1, y = -1; schar x = -1, y = -1;
@@ -3580,7 +3580,7 @@ struct sp_coder *coder;
static const char nhFunc[] = "spo_trap"; static const char nhFunc[] = "spo_trap";
struct opvar *type; struct opvar *type;
struct opvar *tcoord; struct opvar *tcoord;
trap tmptrap; spltrap tmptrap;
if (!OV_pop_i(type) || !OV_pop_c(tcoord)) if (!OV_pop_i(type) || !OV_pop_c(tcoord))
return; return;
+38 -12
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. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* 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 *)); STATIC_DCL void FDECL(join_adjacent_pits, (struct trap *));
#endif #endif
STATIC_DCL void FDECL(clear_conjoined_pits, (struct trap *)); 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 int FDECL(steedintrap, (struct trap *, struct obj *));
STATIC_DCL boolean FDECL(keep_saddle_with_steedcorpse, (unsigned, STATIC_DCL boolean FDECL(keep_saddle_with_steedcorpse, (unsigned,
struct obj *, struct obj *,
@@ -851,7 +853,8 @@ unsigned trflags;
forcebungle = (trflags & FORCEBUNGLE) != 0, forcebungle = (trflags & FORCEBUNGLE) != 0,
plunged = (trflags & TOOKPLUNGE) != 0, plunged = (trflags & TOOKPLUNGE) != 0,
viasitting = (trflags & VIASITTING) != 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 oldumort;
int steed_article = ARTICLE_THE; int steed_article = ARTICLE_THE;
@@ -879,7 +882,8 @@ unsigned trflags;
return; return;
} }
if (!Fumbling && ttype != MAGIC_PORTAL && ttype != VIBRATING_SQUARE 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) && (!rn2(5) || ((ttype == PIT || ttype == SPIKED_PIT)
&& is_clinger(youmonst.data)))) { && is_clinger(youmonst.data)))) {
You("escape %s %s.", (ttype == ARROW_TRAP && !trap->madeby_u) You("escape %s %s.", (ttype == ARROW_TRAP && !trap->madeby_u)
@@ -1154,8 +1158,11 @@ unsigned trflags;
Sprintf(verbbuf, "lead %s", Sprintf(verbbuf, "lead %s",
x_monnam(u.usteed, steed_article, "poor", x_monnam(u.usteed, steed_article, "poor",
SUPPRESS_SADDLE, FALSE)); SUPPRESS_SADDLE, FALSE));
} else if (adj_pit) { } else if (conj_pit) {
You("move into an adjacent pit."); You("move into an adjacent pit.");
} else if (adj_pit) {
You("stumble over debris%s.",
!rn2(5) ? " between the pits" : "");
} else { } else {
Strcpy(verbbuf, Strcpy(verbbuf,
!plunged ? "fall" : (Flying ? "dive" : "plunge")); !plunged ? "fall" : (Flying ? "dive" : "plunge"));
@@ -1177,33 +1184,34 @@ unsigned trflags;
pline("%s %s %s!", pline("%s %s %s!",
upstart(x_monnam(u.usteed, steed_article, "poor", upstart(x_monnam(u.usteed, steed_article, "poor",
SUPPRESS_SADDLE, FALSE)), SUPPRESS_SADDLE, FALSE)),
adj_pit ? "steps" : "lands", predicament); conj_pit ? "steps" : "lands", predicament);
} else } else
You("%s %s!", adj_pit ? "step" : "land", predicament); You("%s %s!", conj_pit ? "step" : "land", predicament);
} }
u.utrap = rn1(6, 2); u.utrap = rn1(6, 2);
u.utraptype = TT_PIT; u.utraptype = TT_PIT;
if (!steedintrap(trap, (struct obj *) 0)) { if (!steedintrap(trap, (struct obj *) 0)) {
if (ttype == SPIKED_PIT) { if (ttype == SPIKED_PIT) {
oldumort = u.umortality; 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 plunged
? "deliberately plunged into a pit of iron spikes" ? "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", : "fell into a pit of iron spikes",
NO_KILLER_PREFIX); NO_KILLER_PREFIX);
if (!rn2(6)) if (!rn2(6))
poisoned("spikes", A_STR, poisoned("spikes", A_STR,
adj_pit ? "stepping on poison spikes" (conj_pit || adj_pit) ? "stepping on poison spikes"
: "fall onto poison spikes", : "fall onto poison spikes",
/* if damage triggered life-saving, /* if damage triggered life-saving,
poison is limited to attrib loss */ poison is limited to attrib loss */
(u.umortality > oldumort) ? 0 : 8, FALSE); (u.umortality > oldumort) ? 0 : 8, FALSE);
} else { } else {
/* plunging flyers take spike damage but not pit damage */ /* plunging flyers take spike damage but not pit damage */
if (!adj_pit if (!conj_pit
&& !(plunged && (Flying || is_clinger(youmonst.data)))) && !(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" plunged ? "deliberately plunged into a pit"
: "fell into a pit", : "fell into a pit",
NO_KILLER_PREFIX); NO_KILLER_PREFIX);
@@ -1213,7 +1221,7 @@ unsigned trflags;
ballfall(); ballfall();
placebc(); placebc();
} }
if (!adj_pit) if (!conj_pit)
selftouch("Falling, you"); selftouch("Falling, you");
vision_full_recalc = 1; /* vision limits change */ vision_full_recalc = 1; /* vision limits change */
exercise(A_STR, FALSE); 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 #if 0
/* /*
* Mark all neighboring pits as conjoined pits. * Mark all neighboring pits as conjoined pits.
+2 -2
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. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -4180,7 +4180,7 @@ const char *msg;
if (!msg) if (!msg)
msg = "The ice crackles and melts."; 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 */ lev->drawbridgemask &= ~DB_ICE; /* revert to DB_MOAT */
} else { /* lev->typ == ICE */ } else { /* lev->typ == ICE */
#ifdef STUPID #ifdef STUPID
+2 -1
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. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -307,6 +307,7 @@ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);*/
save_getreturn_status = getreturn_enabled; save_getreturn_status = getreturn_enabled;
raw_clear_screen(); raw_clear_screen();
getreturn_enabled = TRUE; getreturn_enabled = TRUE;
check_recordfile((char *) 0);
#endif #endif
initoptions(); initoptions();
+3 -2
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. home directory you might perform these steps.
% su % su
# cd / # 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, 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 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 If you are installing from the RPM, there is no need to save the old record
and logfile; they are automatically preserved. and logfile; they are automatically preserved.
+3 -2
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 on a VMS (aka OpenVMS) system
========================================= =========================================
@@ -137,7 +137,8 @@ Notes:
0. Version 3.5.x was never publicly released. 0. Version 3.5.x was never publicly released.
1. Save files and bones files from 3.4.x and earlier versions 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. 3.4.x or 3.3.x will work.
2. To specify user-preference options in your environment, define the 2. To specify user-preference options in your environment, define the
+6 -6
View File
@@ -284,8 +284,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,5,0,0 FILEVERSION 3,6,1,0
PRODUCTVERSION 3,5,0,0 PRODUCTVERSION 3,6,1,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x9L FILEFLAGS 0x9L
@@ -300,17 +300,17 @@ BEGIN
BEGIN BEGIN
BLOCK "040904b0" BLOCK "040904b0"
BEGIN 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 "CompanyName", " \0"
VALUE "FileDescription", "nethackm\0" VALUE "FileDescription", "nethackm\0"
VALUE "FileVersion", "3, 5, 0, 0\0" VALUE "FileVersion", "3, 6, 1, 0\0"
VALUE "InternalName", "nethackm\0" VALUE "InternalName", "nethackm\0"
VALUE "LegalCopyright", "Copyright © 1985-2009\0" VALUE "LegalCopyright", "Copyright © 1985-2018\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "nethackm.exe\0" VALUE "OriginalFilename", "nethackm.exe\0"
VALUE "PrivateBuild", "090914\0" VALUE "PrivateBuild", "090914\0"
VALUE "ProductName", "NetHack\0" VALUE "ProductName", "NetHack\0"
VALUE "ProductVersion", "3, 5, 0, 0\0" VALUE "ProductVersion", "3, 6, 1, 0\0"
VALUE "SpecialBuild", "\0" VALUE "SpecialBuild", "\0"
END END
END END
+6 -6
View File
@@ -260,8 +260,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,5,0,0 FILEVERSION 3,6,1,0
PRODUCTVERSION 3,5,0,0 PRODUCTVERSION 3,6,1,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x9L FILEFLAGS 0x9L
@@ -276,17 +276,17 @@ BEGIN
BEGIN BEGIN
BLOCK "040904b0" BLOCK "040904b0"
BEGIN 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 "CompanyName", " \0"
VALUE "FileDescription", "nethackm\0" VALUE "FileDescription", "nethackm\0"
VALUE "FileVersion", "3, 5, 0, 0\0" VALUE "FileVersion", "3, 6, 1, 0\0"
VALUE "InternalName", "nethackm\0" VALUE "InternalName", "nethackm\0"
VALUE "LegalCopyright", "Copyright © 1985-2010\0" VALUE "LegalCopyright", "Copyright © 1985-2018\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "nethackm.exe\0" VALUE "OriginalFilename", "nethackm.exe\0"
VALUE "PrivateBuild", "090914\0" VALUE "PrivateBuild", "090914\0"
VALUE "ProductName", "NetHack For Smartphone\0" VALUE "ProductName", "NetHack For Smartphone\0"
VALUE "ProductVersion", "3, 5, 0, 0\0" VALUE "ProductVersion", "3, 6, 1, 0\0"
VALUE "SpecialBuild", "\0" VALUE "SpecialBuild", "\0"
END END
END END
+16 -9
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. NetHack may be freely redistributed. See license for details.
============================================================== ==============================================================
Instructions for compiling and installing Instructions for compiling and installing
NetHack 3.6 on a Windows system NetHack 3.6 on a Windows system
(Windows 7/8.x/10 or later only. XP may work but is untested) (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 Credit for the porting of NetHack to the Win32 Console Subsystem goes to
the NT Porting Team started by Michael Allison. 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: So the steps are:
1. Launch the IDE. 1. Launch the IDE.
2. Open the appropriate solution file. 2. Open the appropriate solution file.
3. Select the build configuration you wish to use. 3. If you have a newer version of Visual Studio than what was used to build
4. From build menu, select build solution. the solution and project files distributed with the NetHack sources, you
5. Type F5 to start debugging. 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 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. using a "build.bat" batch file found in the same directory as the solution.
@@ -66,7 +70,10 @@ 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, Change to the appropriate directory (i.e. win\win32\vs2015 for VS2015 builds,
win\win32\vs2017 for VS2017 builds) and run "build.bat". 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 -----------------------------------
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 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 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: error MSB8036, you will simply need to change the expected SDK version as follows:
@@ -203,9 +210,9 @@ Setting Up
| | | | | |
share winnt win32 share winnt win32
Check the file "Files" in your top level directory for an exact Check the file "Files" in your top level directory for a more
listing of what file is in which directory. In order for the complete listing of what file is in which directory. In order for
Makefiles to work, all the source files must be in the proper the Makefiles to work, all the source files must be in the proper
locations. locations.
If you downloaded or ftp'd the sources from a UNIX system, the lines If you downloaded or ftp'd the sources from a UNIX system, the lines
+3 -4
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 */ /* Copyright (c) NetHack PC Development Team 1993, 1994 */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -329,14 +329,13 @@ char *buf;
*/ */
char *tmp = buf; char *tmp = buf;
HWND hwndConsole = GetConsoleHandle();
HGLOBAL hglbCopy; HGLOBAL hglbCopy;
WCHAR *w, w2[2]; WCHAR *w, w2[2];
int cc, rc, abytes; int cc, rc, abytes;
LPWSTR lpwstrCopy; LPWSTR lpwstrCopy;
HANDLE hresult; HANDLE hresult;
if (!buf || (hwndConsole == NULL)) if (!buf)
return; return;
cc = strlen(buf); cc = strlen(buf);
@@ -353,7 +352,7 @@ char *buf;
free(w); free(w);
return; return;
} }
if (!OpenClipboard(hwndConsole)) { if (!OpenClipboard(NULL)) {
free(w); free(w);
return; return;
} }