Merge branch 'master' of https://rodney.nethack.org:20040/git/NHsource
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@ TAGS
|
|||||||
.make.state
|
.make.state
|
||||||
.nse_depinfo
|
.nse_depinfo
|
||||||
*~
|
*~
|
||||||
#*
|
\#*
|
||||||
.#*
|
.#*
|
||||||
,*
|
,*
|
||||||
_$*
|
_$*
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ rationale, etc.
|
|||||||
==============================================
|
==============================================
|
||||||
FEATURE_NOTICE Alerts for a Release
|
FEATURE_NOTICE Alerts for a Release
|
||||||
|
|
||||||
There is a code mechanism for alterting players to a change in behavior
|
There is a code mechanism for alerting players to a change in behavior
|
||||||
over prior versions of the game.
|
over prior versions of the game.
|
||||||
|
|
||||||
Here's how to do it:
|
Here's how to do it:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
This is a listing of all files in a full NetHack 3.5 distribution, organized
|
This is a listing of all files in a full NetHack 3.6 distribution, organized
|
||||||
in their standard manner on a UNIX system. It indicates which files are
|
in their standard manner on a UNIX system. It indicates which files are
|
||||||
necessary for which versions, so that you can tell which files may be deleted
|
necessary for which versions, so that you can tell which files may be deleted
|
||||||
from or not transferred to your system if you wish.
|
from or not transferred to your system if you wish.
|
||||||
@@ -17,7 +17,8 @@ cmdhelp data.base dungeon.def endgame.des gehennom.des
|
|||||||
help hh history knox.des license
|
help hh history knox.des license
|
||||||
medusa.des mines.des opthelp oracle.des oracles.txt
|
medusa.des mines.des opthelp oracle.des oracles.txt
|
||||||
quest.txt rumors.fal rumors.tru sokoban.des symbols
|
quest.txt rumors.fal rumors.tru sokoban.des symbols
|
||||||
tower.des wizhelp yendor.des
|
tower.des wizhelp yendor.des tribute bogusmon.txt
|
||||||
|
engrave.txt epitaph.txt
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
(files for all versions)
|
(files for all versions)
|
||||||
@@ -85,7 +86,7 @@ windows.c wizard.c worm.c worn.c write.c
|
|||||||
zap.c
|
zap.c
|
||||||
|
|
||||||
sys/amiga:
|
sys/amiga:
|
||||||
(files for Amiga versions)
|
(files for Amiga versions - untested for 3.6.0)
|
||||||
Build.ami Install.ami Makefile.agc Makefile.ami NetHack.cnf
|
Build.ami Install.ami Makefile.agc Makefile.ami NetHack.cnf
|
||||||
amidos.c amidos.p amifont.uu amifont8.uu amigst.c
|
amidos.c amidos.p amifont.uu amifont8.uu amigst.c
|
||||||
amii.hlp amimenu.c amirip.c amisnd.c amistack.c
|
amii.hlp amimenu.c amirip.c amisnd.c amistack.c
|
||||||
@@ -96,12 +97,12 @@ winfuncs.c winkey.c winmenu.c winproto.h winreq.c
|
|||||||
winstr.c xpm2iff.c
|
winstr.c xpm2iff.c
|
||||||
|
|
||||||
sys/atari:
|
sys/atari:
|
||||||
(files for Atari version)
|
(files for Atari version - untested for 3.6.0)
|
||||||
Install.tos atarifnt.uue nethack.mnu setup.g tos.c
|
Install.tos atarifnt.uue nethack.mnu setup.g tos.c
|
||||||
unx2atar.sed
|
unx2atar.sed
|
||||||
|
|
||||||
sys/be:
|
sys/be:
|
||||||
(files for BeOS version)
|
(files for BeOS version - untested for 3.6.0)
|
||||||
README bemain.c
|
README bemain.c
|
||||||
|
|
||||||
sys/mac:
|
sys/mac:
|
||||||
@@ -114,7 +115,7 @@ macwin.c mgetline.c mmodal.c mrecover.c mrecover.hqx
|
|||||||
mttymain.c
|
mttymain.c
|
||||||
|
|
||||||
sys/msdos:
|
sys/msdos:
|
||||||
(files for MSDOS version)
|
(files for MSDOS version - untested for 3.6.0)
|
||||||
Install.dos Makefile.BC Makefile.GCC Makefile.MSC moveinit.pat
|
Install.dos Makefile.BC Makefile.GCC Makefile.MSC moveinit.pat
|
||||||
msdos.c msdoshlp.txt ovlinit.c pckeys.c pctiles.c
|
msdos.c msdoshlp.txt ovlinit.c pckeys.c pctiles.c
|
||||||
pctiles.h pcvideo.h portio.h schema1.BC schema2.BC
|
pctiles.h pcvideo.h portio.h schema1.BC schema2.BC
|
||||||
@@ -124,7 +125,7 @@ vidtxt.c vidvga.c
|
|||||||
nhico.uu nhpif.uu
|
nhico.uu nhpif.uu
|
||||||
|
|
||||||
sys/os2:
|
sys/os2:
|
||||||
(files for OS/2 version)
|
(files for OS/2 version - untested for 3.6.0)
|
||||||
Install.os2 Makefile.os2 nhpmico.uu os2.c
|
Install.os2 Makefile.os2 nhpmico.uu os2.c
|
||||||
|
|
||||||
sys/share:
|
sys/share:
|
||||||
@@ -151,6 +152,10 @@ termcap
|
|||||||
(lex/yacc output for special level and dungeon compilers)
|
(lex/yacc output for special level and dungeon compilers)
|
||||||
dgn_comp.h dgn_lex.c dgn_yacc.c lev_comp.h lev_lex.c
|
dgn_comp.h dgn_lex.c dgn_yacc.c lev_comp.h lev_lex.c
|
||||||
lev_yacc.c
|
lev_yacc.c
|
||||||
|
(posix regex for versions that include regex in their C library)
|
||||||
|
posixregex.c
|
||||||
|
(c++ regex code for versions that can build a C++ module and link it in)
|
||||||
|
cppregex.cpp
|
||||||
|
|
||||||
sys/share/sounds:
|
sys/share/sounds:
|
||||||
(files for Amiga and Macintosh versions)
|
(files for Amiga and Macintosh versions)
|
||||||
@@ -173,14 +178,14 @@ sys/unix/hints:
|
|||||||
linux linux-x11 macosx macos-x11 unix
|
linux linux-x11 macosx macos-x11 unix
|
||||||
|
|
||||||
sys/vms:
|
sys/vms:
|
||||||
(files for VMS version)
|
(files for VMS version - untested for 3.6.0)
|
||||||
Install.vms Makefile.dat Makefile.doc Makefile.src Makefile.top
|
Install.vms Makefile.dat Makefile.doc Makefile.src Makefile.top
|
||||||
Makefile.utl install.com lev_lex.h nethack.com oldcrtl.c
|
Makefile.utl install.com lev_lex.h nethack.com oldcrtl.c
|
||||||
spec_lev.com vmsbuild.com vmsfiles.c vmsmail.c vmsmain.c
|
spec_lev.com vmsbuild.com vmsfiles.c vmsmail.c vmsmain.c
|
||||||
vmsmisc.c vmstty.c vmsunix.c
|
vmsmisc.c vmstty.c vmsunix.c
|
||||||
|
|
||||||
sys/wince:
|
sys/wince:
|
||||||
(files for Windows CE and PocketPC)
|
(files for Windows CE and PocketPC - untested for 3.6.0)
|
||||||
Install.ce bootstrp.mak celib.c cesetup.bat cesound.c
|
Install.ce bootstrp.mak celib.c cesetup.bat cesound.c
|
||||||
defaults.nh keypad.uu menubar.uu mhaskyn.c mhaskyn.h
|
defaults.nh keypad.uu menubar.uu mhaskyn.c mhaskyn.h
|
||||||
mhcmd.c mhcmd.h mhcolor.c mhcolor.h mhdlg.c
|
mhcmd.c mhcmd.h mhcolor.c mhcolor.h mhdlg.c
|
||||||
@@ -265,8 +270,8 @@ petmark.uu resource.h rip.uu splash.uu tiles.mak
|
|||||||
winMS.h winhack.c winhack.rc
|
winMS.h winhack.c winhack.rc
|
||||||
(files for Visual Studio 2010 Express Edition builds)
|
(files for Visual Studio 2010 Express Edition builds)
|
||||||
dgncomp.vcxproj dgnstuff.vcxproj dgnstuff.mak dlb_main.vcxproj levcomp.vcxproj
|
dgncomp.vcxproj dgnstuff.vcxproj dgnstuff.mak dlb_main.vcxproj levcomp.vcxproj
|
||||||
levstuff.vcxproj levstuff.mak makedefs.vcxproj nethack.sln uudecode.vcxproj
|
levstuff.vcxproj levstuff.mak makedefs.vcxproj NetHack.sln uudecode.vcxproj
|
||||||
nethackw.vcxproj tile2bmp.vcxproj recover.vcxproj tilemap.vcxproj tiles.vcxproj
|
NetHackW.vcxproj tile2bmp.vcxproj recover.vcxproj tilemap.vcxproj tiles.vcxproj
|
||||||
|
|
||||||
This is a list of files produced by auxiliary programs. They can all be
|
This is a list of files produced by auxiliary programs. They can all be
|
||||||
regenerated from the files in the distribution.
|
regenerated from the files in the distribution.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ bogusmon
|
|||||||
engrave
|
engrave
|
||||||
epitaph
|
epitaph
|
||||||
x11tiles
|
x11tiles
|
||||||
|
nhtiles.bmp
|
||||||
*.lev
|
*.lev
|
||||||
spec_levs
|
spec_levs
|
||||||
quest_levs
|
quest_levs
|
||||||
|
|||||||
+11
-11
@@ -112,18 +112,18 @@ FLAGS: hardfloor
|
|||||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
...PPP.........PPPP..............PPPP...
|
xxxxxxxxx......xxxx...........xxxxxxxxxx
|
||||||
.PPPP...........PP................PPPP..
|
xxxxxxx.........xxx.............xxxxxxxx
|
||||||
PP.................................PPP..
|
xxxx..............................xxxxxx
|
||||||
....................................PPP.
|
xx.................................xxxxx
|
||||||
.....................................PP.
|
....................................xxxx
|
||||||
.......................................P
|
.......................................x
|
||||||
........................................
|
........................................
|
||||||
PP...................................PPP
|
xx...................................xxx
|
||||||
.PPP...............................PPP..
|
xxxx..............................xxxxxx
|
||||||
..PP.............................PPPP...
|
xxxxxx..........................xxxxxxxx
|
||||||
..PPP...........................PPPPPP..
|
xxxxxxxx.........xx..........xxxxxxxxxxx
|
||||||
....PPPP.........PPP.........PPPP..PP...
|
xxxxxxxxx.......xxxxxx.....xxxxxxxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Dungeon Description
|
# Dungeon Description
|
||||||
# The Isle of Glass is a Tor rising out of the swamps surrounding it.
|
# The Isle of Glass is a Tor rising out of the swamps surrounding it.
|
||||||
|
|||||||
+11
-11
@@ -203,17 +203,17 @@ MAZE: "Mon-goal", ' '
|
|||||||
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
.L......L.LLL.......LL....
|
xxxxxx..xxxxxx...xxxxxxxxx
|
||||||
.LLL.......L......LL......
|
xxxx......xx......xxxxxxxx
|
||||||
LL.LL.............L.LL....
|
xx.xx.............xxxxxxxx
|
||||||
..........................
|
x....................xxxxx
|
||||||
......................LL..
|
......................xxxx
|
||||||
......................LLL.
|
......................xxxx
|
||||||
LL........................
|
xx........................
|
||||||
.LL.......................
|
xxx......................x
|
||||||
.LL................LL.L...
|
xxx................xxxxxxx
|
||||||
..LL.....L.LL.......LLL...
|
xxxx.....x.xx.......xxxxxx
|
||||||
.........LLL.........L....
|
xxxxx...xxxxxx....xxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Dungeon Description
|
# Dungeon Description
|
||||||
$place = { (14,04),(13,07) }
|
$place = { (14,04),(13,07) }
|
||||||
|
|||||||
+11
-11
@@ -186,17 +186,17 @@ MAZE: "Pri-goal", ' '
|
|||||||
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
.L......L.LLL.......LL....
|
xxxxxx..xxxxxx...xxxxxxxxx
|
||||||
.LLL.......L......LL......
|
xxxx......xx......xxxxxxxx
|
||||||
LL.LL.............L.LL....
|
xx.xx.............xxxxxxxx
|
||||||
..........................
|
x....................xxxxx
|
||||||
......................LL..
|
......................xxxx
|
||||||
......................LLL.
|
......................xxxx
|
||||||
LL........................
|
xx........................
|
||||||
.LL.......................
|
xxx......................x
|
||||||
.LL................LL.L...
|
xxx................xxxxxxx
|
||||||
..LL.....L.LL.......LLL...
|
xxxx.....x.xx.......xxxxxx
|
||||||
.........LLL.........L....
|
xxxxx...xxxxxx....xxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Dungeon Description
|
# Dungeon Description
|
||||||
$place = { (14,04),(13,07) }
|
$place = { (14,04),(13,07) }
|
||||||
|
|||||||
+24
-24
@@ -94,19 +94,19 @@ FLAGS: hardfloor,icedpools
|
|||||||
INIT_MAP: mines, '.', 'I', true, true, lit, false
|
INIT_MAP: mines, '.', 'I', true, true, lit, false
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
PPPP.... ....PPPPP.
|
PPPPxxxx xxxxPPPPPx
|
||||||
PLP... .PPLLLPP
|
PLPxxx xPPLLLPP
|
||||||
PPP ....................... PPPLLP
|
PPP ....................... PPPLLP
|
||||||
.. ............................ PPPP
|
xx ............................ PPPP
|
||||||
. ............................... ....
|
x ............................... xxxx
|
||||||
................................. ..
|
................................. xx
|
||||||
.................................... .
|
.................................... x
|
||||||
...................................
|
...................................
|
||||||
. .................................. .
|
x .................................. x
|
||||||
.. .............................. PP
|
xx .............................. PP
|
||||||
.PPP .......................... PLP
|
xPPP .......................... PLP
|
||||||
.PLLP ..PLLP
|
xPLLP xxPLLP
|
||||||
.PPPP.. ....PPPP
|
xPPPPxx xxxxPPPP
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Dungeon Description
|
# Dungeon Description
|
||||||
REGION:(00,00,39,12),lit,"ordinary"
|
REGION:(00,00,39,12),lit,"ordinary"
|
||||||
@@ -180,23 +180,23 @@ FLAGS: icedpools
|
|||||||
INIT_MAP: mines, '.', 'L', true, true, lit, false
|
INIT_MAP: mines, '.', 'L', true, true, lit, false
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
.L............................LLLLL
|
xxxxxx.....................xxxxxxxx
|
||||||
LLL.........LLLLL.LLLLL.........LLL
|
xxxxx.......LLLLL.LLLLL......xxxxxx
|
||||||
.LLL......LLLLLLLLLLLLLLL.......LL.
|
xxxx......LLLLLLLLLLLLLLL......xxxx
|
||||||
.LLL.....LLL|---------|LLL.....L...
|
xxxx.....LLL|---------|LLL.....xxxx
|
||||||
..LL....LL|--.........--|LL.....LLL
|
xxxx....LL|--.........--|LL.....xxx
|
||||||
.......LL|-...LLLLLLL...-|LL.....L.
|
x......LL|-...LLLLLLL...-|LL.....xx
|
||||||
.......LL|...LL.....LL...|LL.......
|
.......LL|...LL.....LL...|LL......x
|
||||||
......LL|-..LL.......LL..-|LL......
|
......LL|-..LL.......LL..-|LL......
|
||||||
......LL|.................|LL......
|
......LL|.................|LL......
|
||||||
......LL|-..LL.......LL..-|LL......
|
......LL|-..LL.......LL..-|LL......
|
||||||
.......LL|...LL.....LL...|LL.......
|
.......LL|...LL.....LL...|LL.......
|
||||||
.......LL|-...LLLLLLL...-|LL.......
|
xx.....LL|-...LLLLLLL...-|LL......x
|
||||||
..L.....LL|--.........--|LL.....LL.
|
xxx.....LL|--.........--|LL.....xxx
|
||||||
..LL.....LLL|---------|LLL....LLLL.
|
xxxx.....LLL|---------|LLL...xxxxxx
|
||||||
..LLL.....LLLLLLLLLLLLLLL...LLLLL..
|
xxxxx.....LLLLLLLLLLLLLLL...xxxxxxx
|
||||||
.LLLL.......LLLLL.LLLLL.....LLLL...
|
xxxxxx......LLLLL.LLLLL.....xxxxxxx
|
||||||
..LL...............................
|
xxxxxxxxx..................xxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Dungeon Description
|
# Dungeon Description
|
||||||
REGION:(00,00,34,16),lit,"ordinary"
|
REGION:(00,00,34,16),lit,"ordinary"
|
||||||
|
|||||||
+26
-22
@@ -163,43 +163,43 @@ INIT_MAP:mines,'.','}',true,true,unlit,false
|
|||||||
# guarantee at least one open spot to ensure successful stair placement
|
# guarantee at least one open spot to ensure successful stair placement
|
||||||
GEOMETRY:left,bottom
|
GEOMETRY:left,bottom
|
||||||
MAP
|
MAP
|
||||||
}}}}}}}}
|
xxxxxxxx
|
||||||
}}...}}}
|
xx...xxx
|
||||||
}}}...}}
|
xxx...xx
|
||||||
}}}}.}}}
|
xxxx.xxx
|
||||||
}}}}}}}}
|
xxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
OBJECT:('`',"boulder"),random
|
OBJECT:('`',"boulder"),random
|
||||||
GEOMETRY:right,top
|
GEOMETRY:right,top
|
||||||
MAP
|
MAP
|
||||||
}}}}}}}}
|
xxxxxxxx
|
||||||
}}}}.}}}
|
xxxx.xxx
|
||||||
}}}...}}
|
xxx...xx
|
||||||
}}...}}}
|
xx...xxx
|
||||||
}}}}}}}}
|
xxxxxxxx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
OBJECT:('`',"boulder"),random
|
OBJECT:('`',"boulder"),random
|
||||||
# lair
|
# lair
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}..
|
xx}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}xx
|
||||||
.}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}.
|
x}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}x
|
||||||
}}}...}}..}}.}.}}.}}.}}}...}}}.}}}..}}}..}}}}...}}}
|
}}}...}}..}}.}.}}.}}.}}}...}}}.}}}..}}}..}}}}...}}}
|
||||||
.}}}.}}.}}}.}}.}}.}}...}}.}}.....}}.....}....}.}}}.
|
x}}}.}}.}}}.}}.}}.}}...}}.}}.....}}.....}....}.}}}x
|
||||||
..}}}..}}}.}}.}}.}}..}}.....}}.}}}.}}.}}}}}}}}}}}..
|
xx}}}..}}}.}}.}}.}}..}}.....}}.}}}.}}.}}}}}}}}}}}xx
|
||||||
.}}}..}}}}}.}}.}}.}}...}}}}}.....}}.}}}}}}.....}}}.
|
x}}}..}}}}}.}}.}}.}}...}}}}}.....}}.}}}}}}.....}}}x
|
||||||
}}}..}}...}}..}}.}}}.}}}...}}}.}}}.}.}}}}..P.P..}}}
|
}}}..}}...}}..}}.}}}.}}}...}}}.}}}.}.}}}}..P.P..}}}
|
||||||
}}.}}}}...}}}}}.}...}}}..P..}}}.}.}}}.}}}}.....}}}}
|
}}.}}}}...}}}}}.}...}}}..P..}}}.}.}}}.}}}}.....}}}}
|
||||||
}.}}}}.}}.}..}.}}}}}}}..P.P..}}}.}}}.}}..}}...}}}}.
|
}.}}}}.}}.}..}.}}}}}}}..P.P..}}}.}}}.}}..}}...}}}}x
|
||||||
.}}}}.}}}}....}}}}}.}}}..P..}}}.}}}}.}}..}}...}}}.}
|
x}}}}.}}}}....}}}}}.}}}..P..}}}.}}}}.}}..}}...}}}.}
|
||||||
}}}}..}}.}}..}}}}...}}}}...}}}.}}}}}.}}}}.}}}}}}.}}
|
}}}}..}}.}}..}}}}...}}}}...}}}.}}}}}.}}}}.}}}}}}.}}
|
||||||
}}}...}}...}}}..}}}}}}}}}}}}.....}}}}.}}...}..}.}}}
|
}}}...}}...}}}..}}}}}}}}}}}}.....}}}}.}}...}..}.}}}
|
||||||
.}}}..}}.}}}}....}}..}}}..}}.....}}}}.}}}.}....}}}.
|
x}}}..}}.}}}}....}}..}}}..}}.....}}}}.}}}.}....}}}x
|
||||||
..}}}.}}}}..}}..}}..}}..}}..}}.}}}..}.}..}}}..}}}..
|
xx}}}.}}}}..}}..}}..}}..}}..}}.}}}..}.}..}}}..}}}xx
|
||||||
.}}}.}}}}....}}}}..}}....}}}}}}}...}}}....}}}}.}}}.
|
x}}}.}}}}....}}}}..}}....}}}}}}}...}}}....}}}}.}}}x
|
||||||
}}}...}}}....}}}..}}}....}}}..}}...}}}....}}}...}}}
|
}}}...}}}....}}}..}}}....}}}..}}...}}}....}}}...}}}
|
||||||
.}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}.
|
x}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}x
|
||||||
..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}..
|
xx}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}xx
|
||||||
ENDMAP
|
ENDMAP
|
||||||
# Random registers
|
# Random registers
|
||||||
$monster = monster: { 'j','b','P','F' }
|
$monster = monster: { 'j','b','P','F' }
|
||||||
@@ -561,6 +561,10 @@ MONSTER:'V',random
|
|||||||
#
|
#
|
||||||
MAZE:"sanctum", ' '
|
MAZE:"sanctum", ' '
|
||||||
FLAGS: noteleport,hardfloor,nommap
|
FLAGS: noteleport,hardfloor,nommap
|
||||||
|
# This is outside the main map, below, so we must do it before adding
|
||||||
|
# that map and anchoring coordinates to it. This extends the invisible
|
||||||
|
# barrier up to the top row, which falls outside the drawn map.
|
||||||
|
NON_PASSWALL:(39,00,41,00)
|
||||||
GEOMETRY:center,center
|
GEOMETRY:center,center
|
||||||
MAP
|
MAP
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|||||||
+2
-2
@@ -186,8 +186,8 @@ as well as maintaining the X11 interface.
|
|||||||
Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port
|
Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port
|
||||||
of NetHack 3.6.0 for Mac.
|
of NetHack 3.6.0 for Mac.
|
||||||
|
|
||||||
Michael Allison, Derek S. Ray, Yitzhak Sapir, Alex Kompel, and David Cohrs
|
Michael Allison, Derek S. Ray, Yitzhak Sapir, Alex Kompel, Dion Nicolaas,
|
||||||
maintained the port of NetHack 3.6.0 for Microsoft Windows.
|
and David Cohrs maintained the port of NetHack 3.6.0 for Microsoft Windows.
|
||||||
|
|
||||||
Jeff Bailey created and maintained a port of NetHack 3.6.0 for Chrome.
|
Jeff Bailey created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ Boolean options not under specific compile flags (with default values in []):
|
|||||||
option setting, which is reached via the 'O' cmd.)
|
option setting, which is reached via the 'O' cmd.)
|
||||||
|
|
||||||
autodig dig if moving and wielding digging tool [FALSE]
|
autodig dig if moving and wielding digging tool [FALSE]
|
||||||
|
autoopen walking into a door attempts to open it [TRUE]
|
||||||
autopickup automatically pick up objects you move over [TRUE]
|
autopickup automatically pick up objects you move over [TRUE]
|
||||||
autoquiver when firing with an empty quiver, select some
|
autoquiver when firing with an empty quiver, select some
|
||||||
suitable inventory weapon to fill the quiver [FALSE]
|
suitable inventory weapon to fill the quiver [FALSE]
|
||||||
|
|||||||
+596
@@ -0,0 +1,596 @@
|
|||||||
|
# NetHack 3.6.0 tribute to:
|
||||||
|
#
|
||||||
|
# Sir Terence David John "Terry" Pratchett
|
||||||
|
# April 28, 1948 - March 12, 2015
|
||||||
|
# ("or until the ripples he caused in the world die away...")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%section books
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Colour of Magic (2)
|
||||||
|
%passage 1
|
||||||
|
The Colour of Magic, by Terry Pratchett
|
||||||
|
|
||||||
|
It has been remarked before that those who are sensitive to radiation in the
|
||||||
|
far octarine - the eighth colour, the pigment of the Imagination - can see
|
||||||
|
things that others cannot.
|
||||||
|
|
||||||
|
Thus it was that Rincewind, hurrying through the crowded, flare-lit, evening
|
||||||
|
bazarrs of Morpork with the Luggage trundling behind him, jostled a tall
|
||||||
|
figure, turned to deliver a few suitable curses, and beheld Death.
|
||||||
|
|
||||||
|
It had to be Death. No-one else went around with empty eye sockets and, of
|
||||||
|
course, the scythe over one shoulder was another clue.
|
||||||
|
%e passage 1
|
||||||
|
%passage 2
|
||||||
|
The Colour of Magic, by Terry Pratchett
|
||||||
|
|
||||||
|
As he was drawn towards the Eye the terror-struck Rincewind raised the box
|
||||||
|
protectively, and at the same time heard the picture imp say, 'They're about
|
||||||
|
ripe now, can't hold them any longer. Every-one smile, please.'
|
||||||
|
|
||||||
|
There was a -
|
||||||
|
- flash of light so white and so bright -
|
||||||
|
- it didn't seem like light at all.
|
||||||
|
|
||||||
|
Bel-Shamharoth screamed, a sound that started in the far ultrasonic and
|
||||||
|
finished somewhere in Rincewind's bowels. The tentacles went momentarily as
|
||||||
|
stiff as rods, hurling their various cargos around the room, before bunching
|
||||||
|
up protectively in front of the abused Eye. The whole mass dropped into the
|
||||||
|
pit and a moment later the big slab was snatched up by several dozen tentacles
|
||||||
|
and slammed into place, leaving a number of thrashing limbs trapped around the
|
||||||
|
edge.
|
||||||
|
%e passage 2
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Light Fantastic (2)
|
||||||
|
%passage 1
|
||||||
|
The Light Fantastic, by Terry Pratchett
|
||||||
|
|
||||||
|
'Cohen is my name, boy' Belthan's hands stopped moving.
|
||||||
|
'Cohen?' she said, 'Cohen the Barbarian?'
|
||||||
|
'The very shame.'
|
||||||
|
'Hang on, hang on,' said Rincewind, 'Cohen's a great big chap, neck like a bull,
|
||||||
|
got chest muscles like a sack of footballs. I mean, he's the Disc's greatest
|
||||||
|
warrior, a legend in his own lifetime. I remember my grandad telling me he saw
|
||||||
|
him ... my grandad telling me he ... my grandad ...'
|
||||||
|
He faltered under the gimlit gaze.
|
||||||
|
'Oh,' he said, 'Oh. Of course, Sorry.'
|
||||||
|
'Yesh,' said Cohen, and sighed, 'Thatsh right boy, I'm a lifetime in my own
|
||||||
|
legend.'
|
||||||
|
%e passage 1
|
||||||
|
%passage 2
|
||||||
|
The Light Fantastic, by Terry Pratchett
|
||||||
|
|
||||||
|
Death sat at one side of a black baize table in the entre of the room, arguing
|
||||||
|
with Famine, War and Pestilence. Twoflower was the only one to look up and
|
||||||
|
notice Rincewind.
|
||||||
|
'Hey, how did you get here?' he said.
|
||||||
|
'Well, some say that the creator took a handful - oh, I see, well, it's hard to
|
||||||
|
explain but I -'
|
||||||
|
'Have you got the Luggage?'
|
||||||
|
The wooden box pushed past Rincewind and settled down in front of its owner,
|
||||||
|
who opened its lid and rummaged around inside until he came up with a small,
|
||||||
|
leatherbound book which he handed to War, who was hammering the table with a
|
||||||
|
mailed fist.
|
||||||
|
'It's "Nosehinger on the Laws of Contract",' he said. 'It's quite good, there's
|
||||||
|
a lot in it about double finessing and how to -'
|
||||||
|
Death snatched the book with a bony hand anflipped through the pages, quite
|
||||||
|
oblivious to the presence of the two men.
|
||||||
|
'RIGHT,' he said, 'PESTILENCE, OPEN ANOTHER PACK OF CARDS. I'M GOING TO GET TO
|
||||||
|
THE GOTTOM OF THIS IF IT KILLS ME. FIGURATIVELY SPEAKING OF COURSE.'
|
||||||
|
%e passage 2
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Equal Rites (1)
|
||||||
|
%passage 1
|
||||||
|
Equal Rites, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Mort (1)
|
||||||
|
%passage 1
|
||||||
|
Ankh-Morpork had dallied with many forms of government and hand ended up with that form of democracy known as One Man, One Vote. The Patrician was the Man; he had the Vote.
|
||||||
|
|
||||||
|
[Mort, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Sourcery (1)
|
||||||
|
%passage 1
|
||||||
|
Sourcery, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Wyrd Sisters (1)
|
||||||
|
%passage 1
|
||||||
|
Wyrd Sisters, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Pyramids (1)
|
||||||
|
%passage 1
|
||||||
|
Pyramids, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Guards! Guards! (1)
|
||||||
|
%passage 1
|
||||||
|
Guards! Guards!, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Eric (2)
|
||||||
|
%passage 1
|
||||||
|
No enemies had ever taken Ankh-Morpork. Well, /technically/ they had, quite often; the city welcomed free-spending barbarian invaders, but somehow the puzzled raiders always found, after a few days, that they didn't own their own horses any more, and within a couple of months they were just another minority group with its own graffiti and food shops.
|
||||||
|
[Terry Pratchett, Eric]
|
||||||
|
%e passage
|
||||||
|
%passage 2
|
||||||
|
Rincewind looked down at the broad steps they were climbing. They were something of a novelty; each one was built out of large stone letters. The one he was just stepping on to, for example, read: I Meant It For The Best.
|
||||||
|
The next one was: I Thought You'd Like It.
|
||||||
|
Eric was standing on: For The Sake Of The Children.
|
||||||
|
'Weird, isn't it?' he said. 'Why do it like this?'
|
||||||
|
'I think they're meant to be good intentions,' said Rincewind. This was a road to hell, and demons were, after all, traditionalists.
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Moving Pictures (4)
|
||||||
|
%passage 1
|
||||||
|
This is space. It's sometimes called the final frontier.
|
||||||
|
(Except that of course you can't have a /final/ frontier, because there'd be nothing for it to be a frontier /to/, but as frontiers go, it's pretty penultimate...)
|
||||||
|
[Terry Pratchett, Moving Pictures]
|
||||||
|
%e passage
|
||||||
|
%passage 2
|
||||||
|
By and large, the only skill the alchemists of Ankh-Morpork had discovered so far was the ability to turn gold into less gold.
|
||||||
|
[Terry Pratchett, Moving Pictures]
|
||||||
|
%e passage
|
||||||
|
%passage 3
|
||||||
|
There was a dog sitting by his feet.
|
||||||
|
It was small, bow-legged and wiry, and basically grey but with patches of brown, white, and black in outlying areas...
|
||||||
|
It looked up slowly, and said 'Woof?'
|
||||||
|
Victor poked an exploratory finger in his ear. It must have been a trick of an echo, or something. It wasn't that the dog had gone 'woof!', although that was practically unique in itself; most dogs in the universe /never/ went 'woof!', they had complicated barks like 'whuuugh!' and 'hwhoouf!'. No, it was that it hadn't in fact /barked/ at all. It had /said/ 'woof'.
|
||||||
|
'Could have bin worse, mister. I could have said "miaow".'
|
||||||
|
%e passage
|
||||||
|
%passage 4
|
||||||
|
''Twas beauty killed the beast,' said the Dean, who liked to say things like that.
|
||||||
|
'No it wasn't,' said the Chair. 'It was it splatting into the ground like that.'
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Reaper Man (1)
|
||||||
|
%passage 1
|
||||||
|
Reaper Man, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Witches Abroad (1)
|
||||||
|
%passage 1
|
||||||
|
Witches Abroad, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Small Gods (1)
|
||||||
|
%passage 1
|
||||||
|
Small Gods, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Lords and Ladies (1)
|
||||||
|
%passage 1
|
||||||
|
Lords and Ladies, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Men at Arms (1)
|
||||||
|
%passage 1
|
||||||
|
Men at Arms, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Soul Music (1)
|
||||||
|
%passage 1
|
||||||
|
Soul Music, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Interesting Times (1)
|
||||||
|
%passage 1
|
||||||
|
Interesting Times, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Maskerade (4)
|
||||||
|
%passage 1
|
||||||
|
'Maybe you could... help us?'
|
||||||
|
'What's wrong?'
|
||||||
|
'It's my boy...'
|
||||||
|
Granny opened the door further and saw the womand standing behind Mr. Slot. One look at her face was enough. There was a bundle in her arms.
|
||||||
|
Granny stepped back. 'Bring him in and let me have a look at him.'
|
||||||
|
She took the baby from the woman, sat down on the room's one chair, and pulled back the blanket.
|
||||||
|
'Hmm,' said Granny, after a while.
|
||||||
|
'There's a curse on this house, that's what it is,' said Slot. 'My best cow's been taken mortally sick, too.'
|
||||||
|
'Oh? You have a cowshed?' siad Granny. 'Very good place for a sick-room, a cowshed. It's the warmth. You better show me were it is.'
|
||||||
|
'You want to take the boy down there?'
|
||||||
|
'Right now.'
|
||||||
|
[...]
|
||||||
|
'How many have you come for?'
|
||||||
|
ONE.
|
||||||
|
'The cow?'
|
||||||
|
Death shook his head.
|
||||||
|
'It could be the cow.'
|
||||||
|
NO. THAT WOULD BE CHANGING HISTORY.
|
||||||
|
'History is about things changing.'
|
||||||
|
NO.
|
||||||
|
Granny sat back.
|
||||||
|
'Then I challenge you to a game. That's traditional. That's /allowed/.'
|
||||||
|
Death was silent for a moment.
|
||||||
|
THIS IS TRUE.
|
||||||
|
'Good.'
|
||||||
|
HOWEVER... YOU UNDERSTAND THAT TO WIN ALL YOU MUST GAMBLE ALL?
|
||||||
|
'Double or quits? Yes, I know.'
|
||||||
|
BUT NOT CHESS.
|
||||||
|
'Can't abide chess.'
|
||||||
|
OR CRIPPLE MR ONION. I'VE NEVER BEEN ABLE TO UNDERSTAND THE RULES.
|
||||||
|
'Very well. How about one hand of poker? Five cards each, no draws? Sudden death, as they say.'
|
||||||
|
Death thought about this, too.
|
||||||
|
YOU KNOW THIS FAMILY?
|
||||||
|
'No.'
|
||||||
|
THEN WHY?
|
||||||
|
'Are we talking or are we playing?'
|
||||||
|
OH, VERY WELL.
|
||||||
|
Granny looked at her cards, and threw them down.
|
||||||
|
FOUR QUEENS. HMM. THAT /IS/ VERY HIGH.
|
||||||
|
Death looked down at his cards, and then up into Granny's steady, blue-eyed gaze.
|
||||||
|
Neither moved for some time.
|
||||||
|
Then Death laid the hand on the table.
|
||||||
|
I LOSE. ALL I HAVE IS FOUR ONES.
|
||||||
|
|
||||||
|
[Maskerade, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%passage 2
|
||||||
|
Ahahahahaha!
|
||||||
|
Ahahahaha!
|
||||||
|
Aahahaha!
|
||||||
|
BEWARE!!!!!
|
||||||
|
Yrs sincerely,
|
||||||
|
The Opera Ghost
|
||||||
|
'What sort of person,' said Salzella, 'sits down and /writes/ a maniacal laugh? And all those exclamation marks, you notice? Five? A sure sign of someone who wears his underpants on his head. Opera can do that to a man.'
|
||||||
|
|
||||||
|
[Maskerade, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%passage 3
|
||||||
|
Agnes had woken up one morning with the horrible realization that she'd been saddled with a lovely personality. It was the lack of choice that rankled. No one had asked her, before she was born, whether she wanted a lovely personality or whether she'd prefer, say, a miserable personality but a body that could take size 9 in dresses. Instead, people would take pains to tell her that beauty was only skin-deep, as if a man ever fell for an attractive pair of kidneys.
|
||||||
|
|
||||||
|
[Maskerade, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%passage 4
|
||||||
|
'And what can I get you, officers?' she said.
|
||||||
|
'Officers? Us? What makes you think we're watchment?'
|
||||||
|
'He's got a helmet on,' Nanny pointed out.
|
||||||
|
'Milit'ry chic,' Nobby said. 'It's just a fashion accessory. Actually, we are gentlemen of means and have nothing to do with the City Watch whatsoever.'
|
||||||
|
'Well, /gentlemen/, would you like some wine?'
|
||||||
|
'Not while we on duty, t'anks', said the troll.
|
||||||
|
|
||||||
|
[Maskerade, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Feet of Clay (1)
|
||||||
|
%passage 1
|
||||||
|
Feet of Clay, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Hogfather (1)
|
||||||
|
%passage 1
|
||||||
|
Hogfather, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Jingo (1)
|
||||||
|
%passage 1
|
||||||
|
Jingo, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Last Continent (1)
|
||||||
|
%passage 1
|
||||||
|
The Last Continent, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Carpe Jugulum (1)
|
||||||
|
%passage 1
|
||||||
|
Carpe Jugulum, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Fifth Elephant (1)
|
||||||
|
%passage 1
|
||||||
|
The Fifth Elephant, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Truth (1)
|
||||||
|
%passage 1
|
||||||
|
The Truth, by Terry Pratchett
|
||||||
|
|
||||||
|
There are, it has been said, two types of people in the world. There are those
|
||||||
|
who, when presented with a glass that is exactly half full, say: this glass is
|
||||||
|
half full. And then there are those who say: this glass is half empty.
|
||||||
|
|
||||||
|
The world belongs, however, to those who can look at the glass and say: What's
|
||||||
|
up with this glass? Excuse me? Excuse me? This is may glass? I don't think
|
||||||
|
so. My glass was full! And it was a bigger glass! Who's been pinching my beer?
|
||||||
|
%e passage 1
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Thief of Time (1)
|
||||||
|
%passage 1
|
||||||
|
Thief of Time, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Last Hero (1)
|
||||||
|
%passage 1
|
||||||
|
The Last Hero, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Amazing Maurice and his Educated Rodents (1)
|
||||||
|
%passage 1
|
||||||
|
The Amazing Maurice and his Educated Rodents, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Night Watch (1)
|
||||||
|
%passage 1
|
||||||
|
Night Watch, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title The Wee Free Men (1)
|
||||||
|
%passage 1
|
||||||
|
The Wee Free Men, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Monstrous Regiment (1)
|
||||||
|
%passage 1
|
||||||
|
Monstrous Regiment, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title A Hat Full of Sky (1)
|
||||||
|
%passage 1
|
||||||
|
A Hat Full of Sky, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Going Postal (1)
|
||||||
|
%passage 1
|
||||||
|
Going Postal, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Thud! (1)
|
||||||
|
%passage 1
|
||||||
|
Thud!, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Wintersmith (1)
|
||||||
|
%passage 1
|
||||||
|
Wintersmith, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Making Money (3)
|
||||||
|
%passage 1
|
||||||
|
Making Money, by Terry Pratchett
|
||||||
|
'I'm an Igor, thur. We don't athk quethtionth.'
|
||||||
|
'Really? Why not?'
|
||||||
|
'I don't know, thur. I didn't athk.'
|
||||||
|
|
||||||
|
[Making Money, by Terry Pratchett]
|
||||||
|
%e pasasge
|
||||||
|
%passage 2
|
||||||
|
The Watch armour fitted like a glove. He'd have preferred it to fit like a helmet and breastplate. It was common knowledge that the Watch's approach to uniforms was one-size-doesn't-exactly-fit-anybody, and that Commander Vimes disapproved of armour that didn't have that kicked-by-trolls look. He liked it to make it clear that it had been doing its job.
|
||||||
|
|
||||||
|
[Making Money, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%passage 3
|
||||||
|
'The world is full of things worth more than gold. But we dig the damn stuff up and then bury it in a different hole. Where's the sense in that? What are we, magpies? Good heavens, /potatoes/ are worth more than gold!'
|
||||||
|
'Surely not!'
|
||||||
|
'If you were shipwrecked on a desert island, what would you prefer, a bag of potatoes or a bag of gold?'
|
||||||
|
'Yes, but a desert island isn't Ankh-Morpork!'
|
||||||
|
'And that proves gold is only valuable because we agree it is, right? It's just a dream. But a potato is always worth a potato, anywhere. A knob of butter and a pinch of salt and you've got a meal, /anywhere/. Bury gold in the ground and you'll be worrying about thieves for ever. Bury a potato and in due season you could be looking at a dividend of a thousand per cent.'
|
||||||
|
[Making Money, by Terry Pratchett]
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Unseen Academicals (1)
|
||||||
|
%passage 1
|
||||||
|
Unseen Academicals, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title I Shall Wear Midnight (1)
|
||||||
|
%passage 1
|
||||||
|
I Shall Wear Midnight, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Snuff (1)
|
||||||
|
%passage 1
|
||||||
|
Snuff, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%title Raising Steam (1)
|
||||||
|
%passage 1
|
||||||
|
Raising Steam, by Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
%e section
|
||||||
|
#-----------------------------------------------------
|
||||||
|
# Currently this section is not used. It is added
|
||||||
|
# to illustrate how these could be added and adapted
|
||||||
|
# should they be useful for something
|
||||||
|
#
|
||||||
|
%section Death
|
||||||
|
%title Death Quotes (2)
|
||||||
|
%passage 1
|
||||||
|
WHERE THE FIRST PRIMAL CELL WAS, THERE WAS I ALSO. WHERE MAN IS, THERE AM I.
|
||||||
|
WHEN THE LAST LIFE CRAWLS UNDER FREEZING STARS, THERE WILL I BE.
|
||||||
|
%e passage
|
||||||
|
%passage 2
|
||||||
|
I AM DEATH, NOT TAXES. *I* TURN UP ONLY ONCE.
|
||||||
|
%e passage
|
||||||
|
%e title
|
||||||
|
%e section
|
||||||
|
|
||||||
+21
-17
@@ -6,7 +6,7 @@
|
|||||||
.ds vr "NetHack 3.6
|
.ds vr "NetHack 3.6
|
||||||
.ds f0 "\*(vr
|
.ds f0 "\*(vr
|
||||||
.ds f1
|
.ds f1
|
||||||
.ds f2 "March 27, 2015
|
.ds f2 "April 12, 2015
|
||||||
.\" 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)
|
||||||
.\" .PS word
|
.\" .PS word
|
||||||
@@ -1905,6 +1905,8 @@ Cannot be set with the `O' command.
|
|||||||
.lp autodig
|
.lp autodig
|
||||||
Automatically dig if you are wielding a digging tool and moving into a place
|
Automatically dig if you are wielding a digging tool and moving into a place
|
||||||
that can be dug (default false).
|
that can be dug (default false).
|
||||||
|
.lp autoopen
|
||||||
|
Walking into a door attempts to open it (default true).
|
||||||
.lp "autopickup "
|
.lp "autopickup "
|
||||||
Automatically pick up things onto which you move (default on).
|
Automatically pick up things onto which you move (default on).
|
||||||
See
|
See
|
||||||
@@ -3007,6 +3009,9 @@ A string explaining how to recover a game on this system (no default value).
|
|||||||
SEDUCE
|
SEDUCE
|
||||||
0 or 1 to disable or enable, respectively, the SEDUCE option (see the source
|
0 or 1 to disable or enable, respectively, the SEDUCE option (see the source
|
||||||
for details on this function).
|
for details on this function).
|
||||||
|
.lp
|
||||||
|
CHECK_SAVE_UID
|
||||||
|
0 or 1 to disable or enable, respectively, the UID checking for savefiles.
|
||||||
.pg
|
.pg
|
||||||
The following options affect the score file:
|
The following options affect the score file:
|
||||||
.pg
|
.pg
|
||||||
@@ -3281,16 +3286,6 @@ successors originally by \fBDaniel Thaler\fP and then by \fBAlex Smith\fP,
|
|||||||
and Dynahack by \fBTung Nguyen\fP. Some of those variants continue to be
|
and Dynahack by \fBTung Nguyen\fP. Some of those variants continue to be
|
||||||
developed, maintained, and enjoyed by the community to this day.
|
developed, maintained, and enjoyed by the community to this day.
|
||||||
.pg
|
.pg
|
||||||
In September 2014, an interim snapshot of the code under development was
|
|
||||||
released publicly by other parties. Since that code was a work-in-progress
|
|
||||||
and had not gone through a period of debugging, it was decided that the
|
|
||||||
version numbers present on that code snapshot would be retired and never
|
|
||||||
used in an official NetHack release. An announcement was posted on the
|
|
||||||
devteam's official nethack.org website to that effect, stating that there
|
|
||||||
would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
|
||||||
.pg
|
|
||||||
In January 2015, preparation began for the release of NetHack 3.6
|
|
||||||
.pg
|
|
||||||
At the beginning of development for what would eventually get released
|
At the beginning of development for what would eventually get released
|
||||||
as 3.6.0, the development team consisted of \fBWarwick Allison\fP,
|
as 3.6.0, the development team consisted of \fBWarwick Allison\fP,
|
||||||
\fBMichael Allison\fP, \fBKen Arromdee\fP,
|
\fBMichael Allison\fP, \fBKen Arromdee\fP,
|
||||||
@@ -3299,25 +3294,34 @@ as 3.6.0, the development team consisted of \fBWarwick Allison\fP,
|
|||||||
\fBMike Stephenson\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP.
|
\fBMike Stephenson\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP.
|
||||||
Leading up to the release of 3.6.0 in early 2015, new members
|
Leading up to the release of 3.6.0 in early 2015, new members
|
||||||
\fBSean Hunt\fP, \fBPasi Kallinen\fP, and \fBDerek S. Ray\fP
|
\fBSean Hunt\fP, \fBPasi Kallinen\fP, and \fBDerek S. Ray\fP
|
||||||
joined the NetHack development team,
|
joined the NetHack development team.
|
||||||
.pg
|
.pg
|
||||||
\fB3.6.0 TODO insert apprpriate description of 3.6.0 here
|
In September 2014, an interim snapshot of the code under development was
|
||||||
|
released publicly by other parties. Since that code was a work-in-progress
|
||||||
|
and had not gone through a period of debugging, it was decided that the
|
||||||
|
version numbers present on that code snapshot would be retired and never
|
||||||
|
used in an official NetHack release. An announcement was posted on the
|
||||||
|
devteam's official nethack.org website to that effect, stating that there
|
||||||
|
would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
||||||
|
.pg
|
||||||
|
In January 2015, preparation began for the release of NetHack 3.6. The 3.6
|
||||||
|
version merges work done by the development team since the previous release with
|
||||||
|
some of the beloved community patches. Many bugs were fixed and some code was
|
||||||
|
restructured.
|
||||||
.pg
|
.pg
|
||||||
\fBThe development team, as well as \fBSteve VanDevender\fP and
|
\fBThe development team, as well as \fBSteve VanDevender\fP and
|
||||||
\fBKevin Smolkowski\fP ensured that NetHack 3.6.0 continued to operate on
|
\fBKevin Smolkowski\fP ensured that NetHack 3.6.0 continued to operate on
|
||||||
various Unix flavors as well as maintaining the X11 interface.
|
various Unix flavors and maintained the X11 interface.
|
||||||
.pg
|
.pg
|
||||||
\fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP
|
\fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP
|
||||||
maintained the port of NetHack 3.6.0 for Mac.
|
maintained the port of NetHack 3.6.0 for Mac.
|
||||||
.pg
|
.pg
|
||||||
\fBMichael Allison\fP, \fBDerek S. Ray\fP, \fBYitzhak Sapir\fP,
|
\fBMichael Allison\fP, \fBDerek S. Ray\fP, \fBYitzhak Sapir\fP,
|
||||||
\fBAlex Kompel\fP, and \fBDavid Cohrs\fP maintained the port of
|
\fBAlex Kompel\fP, and \fBDion Nicolaas\fP maintained the port of
|
||||||
NetHack 3.6.0 for Microsoft Windows.
|
NetHack 3.6.0 for Microsoft Windows.
|
||||||
.pg
|
.pg
|
||||||
\fBJeff Bailey\fP created and maintained a port of NetHack 3.6.0 for Chrome.
|
\fBJeff Bailey\fP created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||||
.pg
|
.pg
|
||||||
TODO \fBAlex Kompel\fP maintained a port of NetHack 3.6.0 to Windows Phone.
|
|
||||||
.pg
|
|
||||||
\fBThis version of the game is special in a particular way. Near the end of
|
\fBThis version of the game is special in a particular way. Near the end of
|
||||||
the development of 3.6, one of the significant inspirations for many of the
|
the development of 3.6, one of the significant inspirations for many of the
|
||||||
humorous and fun features found in the game, author \fBTerry Pratchett\fP,
|
humorous and fun features found in the game, author \fBTerry Pratchett\fP,
|
||||||
|
|||||||
+27
-25
@@ -33,7 +33,7 @@
|
|||||||
\begin{document}
|
\begin{document}
|
||||||
%
|
%
|
||||||
% input file: guidebook.mn
|
% input file: guidebook.mn
|
||||||
% $Revision: 1.122 $ $Date: 2015/03/27 06:00:00 $
|
% $Revision: 1.122 $ $Date: 2015/04/12 06:00:00 $
|
||||||
%
|
%
|
||||||
%.ds h0 "
|
%.ds h0 "
|
||||||
%.ds h1 %.ds h2 \%
|
%.ds h1 %.ds h2 \%
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
%.au
|
%.au
|
||||||
\author{Eric S. Raymond\\
|
\author{Eric S. Raymond\\
|
||||||
(Edited and expanded for 3.6)}
|
(Edited and expanded for 3.6)}
|
||||||
\date{March 27, 2015}
|
\date{April 12, 2015}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
|
|
||||||
@@ -2306,6 +2306,9 @@ Cannot be set with the `{\tt O}' command.
|
|||||||
Automatically dig if you are wielding a digging tool and moving into a place
|
Automatically dig if you are wielding a digging tool and moving into a place
|
||||||
that can be dug (default false).
|
that can be dug (default false).
|
||||||
%.lp
|
%.lp
|
||||||
|
\item[\ib{autoopen}]
|
||||||
|
Walking into a door attempts to open it (default true).
|
||||||
|
%.lp
|
||||||
\item[\ib{autopickup}]
|
\item[\ib{autopickup}]
|
||||||
Automatically pick up things onto which you move (default on).
|
Automatically pick up things onto which you move (default on).
|
||||||
See ``{\it pickup\_types\/}'' to refine the behavior.
|
See ``{\it pickup\_types\/}'' to refine the behavior.
|
||||||
@@ -3597,6 +3600,9 @@ A string explaining how to recover a game on this system (no default value).
|
|||||||
\item[\ib{SEDUCE}]
|
\item[\ib{SEDUCE}]
|
||||||
0 or 1 to disable or enable, respectively, the SEDUCE option (see the source)
|
0 or 1 to disable or enable, respectively, the SEDUCE option (see the source)
|
||||||
for details on this function.
|
for details on this function.
|
||||||
|
%.lp
|
||||||
|
\item[\ib{CHECK\_SAVE\_UID}]
|
||||||
|
0 or 1 to disable or enable, respectively, the UID checking for savefiles.
|
||||||
\elist
|
\elist
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
@@ -3952,6 +3958,18 @@ originally by Daniel Thaler and then by Alex Smith, and
|
|||||||
Dynahack by Tung Nguyen. Some of those variants continue to be developed,
|
Dynahack by Tung Nguyen. Some of those variants continue to be developed,
|
||||||
maintained, and enjoyed by the community to this day.
|
maintained, and enjoyed by the community to this day.
|
||||||
|
|
||||||
|
%.pg
|
||||||
|
\medskip
|
||||||
|
At the beginning of development for what would eventually get released
|
||||||
|
as 3.6.0, the development team consisted of {\it Warwick Allison},
|
||||||
|
{\it Michael Allison}, {\it Ken Arromdee},
|
||||||
|
{\it David Cohrs}, {\it Jessie Collet},
|
||||||
|
{\it Ken Lorber}, {\it Dean Luick}, {\it Pat Rankin},
|
||||||
|
{\it Mike Stephenson}, {\it Janet Walz}, and {\it Paul Winner}.
|
||||||
|
Leading up to the release of 3.6.0 in early 2015, new members
|
||||||
|
{\it Sean Hunt}, {\it Pasi Kallinen}, and {\it Derek S. Ray}
|
||||||
|
joined the NetHack development team.
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
In September 2014, an interim snapshot of the code under development was
|
In September 2014, an interim snapshot of the code under development was
|
||||||
@@ -3964,47 +3982,31 @@ would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
|||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
In January 2015, preparation began for the release of NetHack 3.6
|
In January 2015, preparation began for the release of NetHack 3.6.
|
||||||
|
The 3.6 version merges work done by the development team since the previous
|
||||||
%.pg
|
release with some of the beloved community patches. Many bugs were fixed
|
||||||
\medskip
|
and some code was restructured.
|
||||||
At the beginning of development for what would eventually get released
|
|
||||||
as 3.6.0, the development team consisted of {\it Warwick Allison},
|
|
||||||
{\it Michael Allison}, {\it Ken Arromdee},
|
|
||||||
{\it David Cohrs}, {\it Jessie Collet},
|
|
||||||
{\it Ken Lorber}, {\it Dean Luick}, {\it Pat Rankin},
|
|
||||||
{\it Mike Stephenson}, {\it Janet Walz}, and {\it Paul Winner}.
|
|
||||||
Leading up to the release of 3.6.0 in early 2015, new members
|
|
||||||
{\it Sean Hunt}, {\it Pasi Kallinen}, and {\it Derek S. Ray}
|
|
||||||
joined the NetHack development team,
|
|
||||||
|
|
||||||
%.pg
|
|
||||||
\medskip
|
|
||||||
3.6.0 TODO insert apprpriate description of 3.6.0 here
|
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
The development team, as well as {\it Steve VanDevender} and
|
The development team, as well as {\it Steve VanDevender} and
|
||||||
{\it Kevin Smolkowski} ensured that NetHack 3.6.0 continued to operate on
|
{\it Kevin Smolkowski} ensured that NetHack 3.6.0 continued to operate on
|
||||||
various Unix flavors as well as maintaining the X11 interface.
|
various Unix flavors and maintained the X11 interface.
|
||||||
|
|
||||||
|
%.pg
|
||||||
{\it Ken Lorber}, {\it Haoyang Wang}, {\it Pat Rankin}, and {\it Dean Luick}
|
{\it Ken Lorber}, {\it Haoyang Wang}, {\it Pat Rankin}, and {\it Dean Luick}
|
||||||
maintained the port of NetHack 3.6.0 for Mac.
|
maintained the port of NetHack 3.6.0 for Mac.
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
{\it Michael Allison}, {\it Derek S. Ray}, {\it Yitzhak Sapir},
|
{\it Michael Allison}, {\it Derek S. Ray}, {\it Yitzhak Sapir},
|
||||||
{\it Alex Kompel}, and {\it David Cohrs} maintained the port of
|
{\it Alex Kompel}, and {\it Dion Nicolaas} maintained the port of
|
||||||
NetHack 3.6.0 for Microsoft Windows.
|
NetHack 3.6.0 for Microsoft Windows.
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
{\it Jeff Bailey} created and maintained a port of NetHack 3.6.0 for Chrome.
|
{\it Jeff Bailey} created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||||
|
|
||||||
%.pg
|
|
||||||
\medskip
|
|
||||||
{\it Alex Kompel} maintained a port of NetHack 3.6.0 to Windows Phone. <FIXME>?
|
|
||||||
|
|
||||||
%.pg
|
%.pg
|
||||||
\medskip
|
\medskip
|
||||||
This version of the game is special in a particular way. Near the end of
|
This version of the game is special in a particular way. Near the end of
|
||||||
|
|||||||
+14
-1
@@ -894,6 +894,13 @@ non-pet rust monsters would eat rust-proofed non-digestibles but ignore
|
|||||||
kicking a grave may topple the gravestone
|
kicking a grave may topple the gravestone
|
||||||
allow showing legal positions for stinking cloud, jumping and polearms
|
allow showing legal positions for stinking cloud, jumping and polearms
|
||||||
when asked for a location
|
when asked for a location
|
||||||
|
cloned creatures (of any type) don't deathdrop items
|
||||||
|
pudding corpses behave somewhat differently than before
|
||||||
|
mithril armor should have silver color
|
||||||
|
lichen corpse is an acid indicator
|
||||||
|
camera may contain a picture-painting demon
|
||||||
|
some monsters can eat through iron bars
|
||||||
|
inaccessible niches occasionally have iron bars in front
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
@@ -1112,6 +1119,11 @@ show more explicit reason why player was helpless at death
|
|||||||
added new hallucinatory-only gods
|
added new hallucinatory-only gods
|
||||||
options to create the character blind or nudist
|
options to create the character blind or nudist
|
||||||
moving clouds on the plane of air
|
moving clouds on the plane of air
|
||||||
|
disclose extinct species alongside genocided ones
|
||||||
|
tribute to Terry Pratchett
|
||||||
|
Some levels in Gehennom now use the old corridor-style maze instead of
|
||||||
|
the new room-style. Beelzebub's level always does this and the
|
||||||
|
"beetle legs" are restored.
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific New Features
|
Platform- and/or Interface-Specific New Features
|
||||||
@@ -1152,7 +1164,8 @@ adopt/adapt/improve Dungeon Overview
|
|||||||
Aardvark Joe's Extended Logfile
|
Aardvark Joe's Extended Logfile
|
||||||
Michael Deutschmann's use_darkgray
|
Michael Deutschmann's use_darkgray
|
||||||
Clive Crous' dark_room
|
Clive Crous' dark_room
|
||||||
Jukka Lahtinen's sortloot
|
sortloot by Jeroen Demeyer and Jukka Lahtinen
|
||||||
|
Auto open doors by Stefano Busti
|
||||||
|
|
||||||
|
|
||||||
Code Cleanup and Reorganization
|
Code Cleanup and Reorganization
|
||||||
|
|||||||
+2
-14
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 color.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
/* NetHack 3.5 color.h $NHDT-Date: 1428088106 2015/04/03 19:08:26 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.8 $ */
|
||||||
/* NetHack 3.5 color.h $Date: 2009/05/06 10:44:34 $ $Revision: 1.5 $ */
|
/* NetHack 3.5 color.h $Date: 2009/05/06 10:44:34 $ $Revision: 1.5 $ */
|
||||||
/* SCCS Id: @(#)color.h 3.5 1992/02/02 */
|
/* SCCS Id: @(#)color.h 3.5 1992/02/02 */
|
||||||
/* Copyright (c) Steve Linhart, Eric Raymond, 1989. */
|
/* Copyright (c) Steve Linhart, Eric Raymond, 1989. */
|
||||||
@@ -7,10 +7,6 @@
|
|||||||
#ifndef COLOR_H
|
#ifndef COLOR_H
|
||||||
#define COLOR_H
|
#define COLOR_H
|
||||||
|
|
||||||
#ifdef MENU_COLOR_REGEX
|
|
||||||
#include <regex.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The color scheme used is tailored for an IBM PC. It consists of the
|
* The color scheme used is tailored for an IBM PC. It consists of the
|
||||||
* standard 8 colors, folowed by their bright counterparts. There are
|
* standard 8 colors, folowed by their bright counterparts. There are
|
||||||
@@ -56,15 +52,7 @@
|
|||||||
#define HI_ZAP CLR_BRIGHT_BLUE
|
#define HI_ZAP CLR_BRIGHT_BLUE
|
||||||
|
|
||||||
struct menucoloring {
|
struct menucoloring {
|
||||||
# ifdef MENU_COLOR_REGEX
|
struct nhregex *match;
|
||||||
# ifdef MENU_COLOR_REGEX_POSIX
|
|
||||||
regex_t match;
|
|
||||||
# else
|
|
||||||
struct re_pattern_buffer match;
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
char *match;
|
|
||||||
# endif
|
|
||||||
int color, attr;
|
int color, attr;
|
||||||
struct menucoloring *next;
|
struct menucoloring *next;
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-9
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 config.h $NHDT-Date: 1425083082 2015/02/28 00:24:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.51 $ */
|
/* NetHack 3.5 config.h $NHDT-Date: 1428084467 2015/04/03 18:07:47 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.76 $ */
|
||||||
/* NetHack 3.5 config.h $Date: 2012/01/27 20:15:26 $ $Revision: 1.37 $ */
|
/* NetHack 3.5 config.h $Date: 2012/01/27 20:15:26 $ $Revision: 1.37 $ */
|
||||||
/* 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. */
|
||||||
@@ -436,14 +436,6 @@ typedef unsigned char uchar;
|
|||||||
* bugs left here.
|
* bugs left here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Menucolors */
|
|
||||||
# define MENU_COLOR_REGEX /* use GNU regex */
|
|
||||||
/*# define MENU_COLOR_REGEX_POSIX*/ /* use POSIX regex */
|
|
||||||
/* if neither is defined, uses pmatch()
|
|
||||||
* pmatch() provides basic globbing: '*' and '?' wildcards.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define STATUS_VIA_WINDOWPORT /* re-work of the status line updating process */
|
#define STATUS_VIA_WINDOWPORT /* re-work of the status line updating process */
|
||||||
#define STATUS_HILITES /* support hilites of status fields */
|
#define STATUS_HILITES /* support hilites of status fields */
|
||||||
/* #define WINCHAIN*/ /* stacked window systems */
|
/* #define WINCHAIN*/ /* stacked window systems */
|
||||||
|
|||||||
@@ -78,6 +78,14 @@ struct polearm_info {
|
|||||||
unsigned m_id; /* monster id of hitmon, in save file */
|
unsigned m_id; /* monster id of hitmon, in save file */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct tribute_info {
|
||||||
|
size_t tributesz; /* make it possible to skip this in future */
|
||||||
|
boolean enabled; /* Do we have tributes turned on? */
|
||||||
|
Bitfield(bookstock,1); /* Have we stocked the book? */
|
||||||
|
/* Markers for other tributes can go here */
|
||||||
|
/* 31 free bits */
|
||||||
|
};
|
||||||
|
|
||||||
struct context_info {
|
struct context_info {
|
||||||
unsigned ident; /* social security number for each monster */
|
unsigned ident; /* social security number for each monster */
|
||||||
unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
|
unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
|
||||||
@@ -102,6 +110,7 @@ struct context_info {
|
|||||||
boolean bypasses; /* bypass flag is set on at least one fobj */
|
boolean bypasses; /* bypass flag is set on at least one fobj */
|
||||||
boolean botl; /* partially redo status line */
|
boolean botl; /* partially redo status line */
|
||||||
boolean botlx; /* print an entirely new bottom line */
|
boolean botlx; /* print an entirely new bottom line */
|
||||||
|
boolean door_opened; /* set to true if door was opened during test_move */
|
||||||
struct dig_info digging;
|
struct dig_info digging;
|
||||||
struct victual_info victual;
|
struct victual_info victual;
|
||||||
struct tin_info tin;
|
struct tin_info tin;
|
||||||
@@ -109,6 +118,7 @@ struct context_info {
|
|||||||
struct takeoff_info takeoff;
|
struct takeoff_info takeoff;
|
||||||
struct warntype_info warntype;
|
struct warntype_info warntype;
|
||||||
struct polearm_info polearm;
|
struct polearm_info polearm;
|
||||||
|
struct tribute_info tribute;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NEARDATA struct context_info context;
|
extern NEARDATA struct context_info context;
|
||||||
|
|||||||
+2
-1
@@ -266,7 +266,7 @@ E NEARDATA struct c_color_names {
|
|||||||
const char *const c_black, *const c_amber, *const c_golden,
|
const char *const c_black, *const c_amber, *const c_golden,
|
||||||
*const c_light_blue,*const c_red, *const c_green,
|
*const c_light_blue,*const c_red, *const c_green,
|
||||||
*const c_silver, *const c_blue, *const c_purple,
|
*const c_silver, *const c_blue, *const c_purple,
|
||||||
*const c_white;
|
*const c_white, *const c_orange;
|
||||||
} c_color_names;
|
} c_color_names;
|
||||||
#define NH_BLACK c_color_names.c_black
|
#define NH_BLACK c_color_names.c_black
|
||||||
#define NH_AMBER c_color_names.c_amber
|
#define NH_AMBER c_color_names.c_amber
|
||||||
@@ -278,6 +278,7 @@ E NEARDATA struct c_color_names {
|
|||||||
#define NH_BLUE c_color_names.c_blue
|
#define NH_BLUE c_color_names.c_blue
|
||||||
#define NH_PURPLE c_color_names.c_purple
|
#define NH_PURPLE c_color_names.c_purple
|
||||||
#define NH_WHITE c_color_names.c_white
|
#define NH_WHITE c_color_names.c_white
|
||||||
|
#define NH_ORANGE c_color_names.c_orange
|
||||||
|
|
||||||
/* The names of the colors used for gems, etc. */
|
/* The names of the colors used for gems, etc. */
|
||||||
E const char *c_obj_colors[];
|
E const char *c_obj_colors[];
|
||||||
|
|||||||
+21
-3
@@ -1,5 +1,4 @@
|
|||||||
/* NetHack 3.5 extern.h $NHDT-Date: 1426966688 2015/03/21 19:38:08 $ $NHDT-Branch: master $:$NHDT-Revision: 1.411 $ */
|
/* NetHack 3.5 extern.h $NHDT-Date: 1428806395 2015/04/12 02:39:55 $ $NHDT-Branch: master $:$NHDT-Revision: 1.455 $ */
|
||||||
/* NetHack 3.5 extern.h $Date: 2013/11/05 00:57:53 $ $Revision: 1.380 $ */
|
|
||||||
/* Copyright (c) Steve Creps, 1988. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -395,6 +394,8 @@ E const char *NDECL(roguename);
|
|||||||
E struct obj *FDECL(realloc_obj,
|
E struct obj *FDECL(realloc_obj,
|
||||||
(struct obj *, int, genericptr_t, int, const char *));
|
(struct obj *, int, genericptr_t, int, const char *));
|
||||||
E char *FDECL(coyotename, (struct monst *,char *));
|
E char *FDECL(coyotename, (struct monst *,char *));
|
||||||
|
E const char *FDECL(noveltitle, (int *));
|
||||||
|
E const char *FDECL(lookup_novel, (const char *, int *));
|
||||||
|
|
||||||
/* ### do_wear.c ### */
|
/* ### do_wear.c ### */
|
||||||
|
|
||||||
@@ -496,6 +497,7 @@ E int FDECL(omon_adj, (struct monst *,struct obj *,BOOLEAN_P));
|
|||||||
E int FDECL(thitmonst, (struct monst *,struct obj *));
|
E int FDECL(thitmonst, (struct monst *,struct obj *));
|
||||||
E int FDECL(hero_breaks, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P));
|
E int FDECL(hero_breaks, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P));
|
||||||
E int FDECL(breaks, (struct obj *,XCHAR_P,XCHAR_P));
|
E int FDECL(breaks, (struct obj *,XCHAR_P,XCHAR_P));
|
||||||
|
E void FDECL(release_camera_demon, (struct obj *, XCHAR_P,XCHAR_P));
|
||||||
E void FDECL(breakobj, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P,BOOLEAN_P));
|
E void FDECL(breakobj, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P,BOOLEAN_P));
|
||||||
E boolean FDECL(breaktest, (struct obj *));
|
E boolean FDECL(breaktest, (struct obj *));
|
||||||
E boolean FDECL(walk_path, (coord *, coord *, boolean (*)(genericptr_t,int,int), genericptr_t));
|
E boolean FDECL(walk_path, (coord *, coord *, boolean (*)(genericptr_t,int,int), genericptr_t));
|
||||||
@@ -750,6 +752,7 @@ E void NDECL(really_close);
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
E boolean FDECL(showdebug, (const char *));
|
E boolean FDECL(showdebug, (const char *));
|
||||||
#endif
|
#endif
|
||||||
|
E void FDECL(read_tribute, (const char *,const char *,int));
|
||||||
|
|
||||||
/* ### fountain.c ### */
|
/* ### fountain.c ### */
|
||||||
|
|
||||||
@@ -833,6 +836,8 @@ E int FDECL(isqrt, (int));
|
|||||||
E int FDECL(distmin, (int,int,int,int));
|
E int FDECL(distmin, (int,int,int,int));
|
||||||
E boolean FDECL(online2, (int,int,int,int));
|
E boolean FDECL(online2, (int,int,int,int));
|
||||||
E boolean FDECL(pmatch, (const char *,const char *));
|
E boolean FDECL(pmatch, (const char *,const char *));
|
||||||
|
E boolean FDECL(pmatchi, (const char *,const char *));
|
||||||
|
E boolean FDECL(pmatchz, (const char *,const char *));
|
||||||
#ifndef STRNCMPI
|
#ifndef STRNCMPI
|
||||||
E int FDECL(strncmpi, (const char *,const char *,int));
|
E int FDECL(strncmpi, (const char *,const char *,int));
|
||||||
#endif
|
#endif
|
||||||
@@ -975,6 +980,7 @@ E int NDECL(doforce);
|
|||||||
E boolean FDECL(boxlock, (struct obj *,struct obj *));
|
E boolean FDECL(boxlock, (struct obj *,struct obj *));
|
||||||
E boolean FDECL(doorlock, (struct obj *,int,int));
|
E boolean FDECL(doorlock, (struct obj *,int,int));
|
||||||
E int NDECL(doopen);
|
E int NDECL(doopen);
|
||||||
|
E int FDECL(doopen_indir, (int,int));
|
||||||
E int NDECL(doclose);
|
E int NDECL(doclose);
|
||||||
|
|
||||||
#ifdef MAC
|
#ifdef MAC
|
||||||
@@ -1227,6 +1233,10 @@ E void FDECL(obj_ice_effects, (int, int, BOOLEAN_P));
|
|||||||
E long FDECL(peek_at_iced_corpse_age, (struct obj *));
|
E long FDECL(peek_at_iced_corpse_age, (struct obj *));
|
||||||
E int FDECL(hornoplenty, (struct obj *,BOOLEAN_P));
|
E int FDECL(hornoplenty, (struct obj *,BOOLEAN_P));
|
||||||
E void NDECL(obj_sanity_check);
|
E void NDECL(obj_sanity_check);
|
||||||
|
E struct obj* FDECL(obj_nexto, (struct obj*));
|
||||||
|
E struct obj* FDECL(obj_nexto_xy, (int, int, int, unsigned));
|
||||||
|
E struct obj* FDECL(obj_absorb, (struct obj**, struct obj**));
|
||||||
|
E struct obj* FDECL(obj_meld, (struct obj**, struct obj**));
|
||||||
|
|
||||||
/* ### mkroom.c ### */
|
/* ### mkroom.c ### */
|
||||||
|
|
||||||
@@ -1358,6 +1368,7 @@ E boolean FDECL(onscary, (int,int,struct monst *));
|
|||||||
E void FDECL(monflee, (struct monst *, int, BOOLEAN_P, BOOLEAN_P));
|
E void FDECL(monflee, (struct monst *, int, BOOLEAN_P, BOOLEAN_P));
|
||||||
E int FDECL(dochug, (struct monst *));
|
E int FDECL(dochug, (struct monst *));
|
||||||
E int FDECL(m_move, (struct monst *,int));
|
E int FDECL(m_move, (struct monst *,int));
|
||||||
|
E void FDECL(dissolve_bars, (int,int));
|
||||||
E boolean FDECL(closed_door, (int,int));
|
E boolean FDECL(closed_door, (int,int));
|
||||||
E boolean FDECL(accessible, (int,int));
|
E boolean FDECL(accessible, (int,int));
|
||||||
E void FDECL(set_apparxy, (struct monst *));
|
E void FDECL(set_apparxy, (struct monst *));
|
||||||
@@ -1479,6 +1490,13 @@ E void NDECL(init_lan_features);
|
|||||||
E char *NDECL(lan_username);
|
E char *NDECL(lan_username);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ### nhregex.c ### */
|
||||||
|
E struct nhregex * NDECL(regex_init);
|
||||||
|
E boolean FDECL(regex_compile, (const char *, struct nhregex *));
|
||||||
|
E const char *FDECL(regex_error_desc, (struct nhregex *));
|
||||||
|
E boolean FDECL(regex_match, (const char *, struct nhregex*));
|
||||||
|
E void FDECL(regex_free, (struct nhregex *));
|
||||||
|
|
||||||
/* ### nttty.c ### */
|
/* ### nttty.c ### */
|
||||||
|
|
||||||
#ifdef WIN32CON
|
#ifdef WIN32CON
|
||||||
@@ -2660,7 +2678,7 @@ E struct monst *FDECL(bhit, (int,int,int,int,int (*)(MONST_P,OBJ_P),
|
|||||||
int (*)(OBJ_P,OBJ_P),struct obj **));
|
int (*)(OBJ_P,OBJ_P),struct obj **));
|
||||||
E struct monst *FDECL(boomhit, (struct obj *,int,int));
|
E struct monst *FDECL(boomhit, (struct obj *,int,int));
|
||||||
E int FDECL(zhitm, (struct monst *,int,int,struct obj **));
|
E int FDECL(zhitm, (struct monst *,int,int,struct obj **));
|
||||||
E int FDECL(burn_floor_paper, (int,int,BOOLEAN_P,BOOLEAN_P));
|
E int FDECL(burn_floor_objects, (int,int,BOOLEAN_P,BOOLEAN_P));
|
||||||
E void FDECL(buzz, (int,int,XCHAR_P,XCHAR_P,int,int));
|
E void FDECL(buzz, (int,int,XCHAR_P,XCHAR_P,int,int));
|
||||||
E void FDECL(melt_ice, (XCHAR_P,XCHAR_P,const char *));
|
E void FDECL(melt_ice, (XCHAR_P,XCHAR_P,const char *));
|
||||||
E void FDECL(start_melt_ice_timeout, (XCHAR_P,XCHAR_P,long));
|
E void FDECL(start_melt_ice_timeout, (XCHAR_P,XCHAR_P,long));
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ struct flag {
|
|||||||
boolean acoustics; /* allow dungeon sound messages */
|
boolean acoustics; /* allow dungeon sound messages */
|
||||||
boolean autodig; /* MRKR: Automatically dig */
|
boolean autodig; /* MRKR: Automatically dig */
|
||||||
boolean autoquiver; /* Automatically fill quiver */
|
boolean autoquiver; /* Automatically fill quiver */
|
||||||
|
boolean autoopen; /* open doors by walking into them */
|
||||||
boolean beginner;
|
boolean beginner;
|
||||||
boolean biff; /* enable checking for mail */
|
boolean biff; /* enable checking for mail */
|
||||||
boolean bones; /* allow saving/loading bones */
|
boolean bones; /* allow saving/loading bones */
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#define EPITAPHFILE "epitaph" /* random epitaphs on graves */
|
#define EPITAPHFILE "epitaph" /* random epitaphs on graves */
|
||||||
#define ENGRAVEFILE "engrave" /* random engravings on the floor */
|
#define ENGRAVEFILE "engrave" /* random engravings on the floor */
|
||||||
#define BOGUSMONFILE "bogusmon" /* hallucinatory monsters */
|
#define BOGUSMONFILE "bogusmon" /* hallucinatory monsters */
|
||||||
|
#define TRIBUTEFILE "tribute" /* 3.6 tribute to Terry Pratchett */
|
||||||
#define LEV_EXT ".lev" /* extension for special level files */
|
#define LEV_EXT ".lev" /* extension for special level files */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -94,7 +94,7 @@ struct obj {
|
|||||||
Bitfield(recharged,3); /* number of times it's been recharged */
|
Bitfield(recharged,3); /* number of times it's been recharged */
|
||||||
#define on_ice recharged /* corpse on ice */
|
#define on_ice recharged /* corpse on ice */
|
||||||
Bitfield(lamplit,1); /* a light-source -- can be lit */
|
Bitfield(lamplit,1); /* a light-source -- can be lit */
|
||||||
Bitfield(oreserved1,1); /* was the placeholder for invisible objects, free for use */
|
Bitfield(globby,1); /* globby; will combine with like types on adjacent squares */
|
||||||
Bitfield(greased,1); /* covered with grease */
|
Bitfield(greased,1); /* covered with grease */
|
||||||
Bitfield(nomerge,1); /* set temporarily to prevent merging */
|
Bitfield(nomerge,1); /* set temporarily to prevent merging */
|
||||||
Bitfield(was_thrown,1); /* thrown by hero since last picked up */
|
Bitfield(was_thrown,1); /* thrown by hero since last picked up */
|
||||||
@@ -108,6 +108,7 @@ struct obj {
|
|||||||
int corpsenm; /* type of corpse is mons[corpsenm] */
|
int corpsenm; /* type of corpse is mons[corpsenm] */
|
||||||
#define leashmon corpsenm /* gets m_id of attached pet */
|
#define leashmon corpsenm /* gets m_id of attached pet */
|
||||||
#define fromsink corpsenm /* a potion from a sink */
|
#define fromsink corpsenm /* a potion from a sink */
|
||||||
|
#define novelidx corpsenm /* 3.6.0 tribute - the index of the novel title */
|
||||||
#define record_achieve_special corpsenm
|
#define record_achieve_special corpsenm
|
||||||
int usecount; /* overloaded for various things that tally */
|
int usecount; /* overloaded for various things that tally */
|
||||||
#define spestudied usecount /* # of times a spellbook has been studied */
|
#define spestudied usecount /* # of times a spellbook has been studied */
|
||||||
@@ -232,6 +233,11 @@ struct obj {
|
|||||||
#define polyfodder(obj) (ofood(obj) && pm_to_cham((obj)->corpsenm) != NON_PM)
|
#define polyfodder(obj) (ofood(obj) && pm_to_cham((obj)->corpsenm) != NON_PM)
|
||||||
#define mlevelgain(obj) (ofood(obj) && (obj)->corpsenm == PM_WRAITH)
|
#define mlevelgain(obj) (ofood(obj) && (obj)->corpsenm == PM_WRAITH)
|
||||||
#define mhealup(obj) (ofood(obj) && (obj)->corpsenm == PM_NURSE)
|
#define mhealup(obj) (ofood(obj) && (obj)->corpsenm == PM_NURSE)
|
||||||
|
#define Is_pudding(o) (o->otyp == GLOB_OF_GRAY_OOZE \
|
||||||
|
|| o->otyp == GLOB_OF_BROWN_PUDDING \
|
||||||
|
|| o->otyp == GLOB_OF_GREEN_SLIME \
|
||||||
|
|| o->otyp == GLOB_OF_BLACK_PUDDING)
|
||||||
|
|
||||||
|
|
||||||
/* Containers */
|
/* Containers */
|
||||||
#define carried(o) ((o)->where == OBJ_INVENT)
|
#define carried(o) ((o)->where == OBJ_INVENT)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||||
* and save files.
|
* and save files.
|
||||||
*/
|
*/
|
||||||
#define EDITLEVEL 60
|
#define EDITLEVEL 61
|
||||||
|
|
||||||
#define COPYRIGHT_BANNER_A \
|
#define COPYRIGHT_BANNER_A \
|
||||||
"NetHack, Copyright 1985-2015"
|
"NetHack, Copyright 1985-2015"
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ struct sysopt {
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
int seduce;
|
int seduce;
|
||||||
|
int check_save_uid; /* restoring savefile checks UID? */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct sysopt sysopt;
|
extern struct sysopt sysopt;
|
||||||
|
|||||||
@@ -489,6 +489,8 @@ newgame()
|
|||||||
context.stethoscope_move = -1L;
|
context.stethoscope_move = -1L;
|
||||||
context.warnlevel = 1;
|
context.warnlevel = 1;
|
||||||
context.next_attrib_check = 600L; /* arbitrary first setting */
|
context.next_attrib_check = 600L; /* arbitrary first setting */
|
||||||
|
context.tribute.enabled = TRUE; /* turn on 3.6 tributes */
|
||||||
|
context.tribute.tributesz = sizeof(struct tribute_info);
|
||||||
|
|
||||||
for (i = 0; i < NUMMONS; i++)
|
for (i = 0; i < NUMMONS; i++)
|
||||||
mvitals[i].mvflags = mons[i].geno & G_NOCORPSE;
|
mvitals[i].mvflags = mons[i].geno & G_NOCORPSE;
|
||||||
|
|||||||
@@ -1244,7 +1244,7 @@ char resultbuf[]; /* should be at least [7] to hold "18/100\0" */
|
|||||||
void
|
void
|
||||||
enlightenment(mode, final)
|
enlightenment(mode, final)
|
||||||
int mode; /* BASICENLIGHTENMENT | MAGICENLIGHTENMENT (| both) */
|
int mode; /* BASICENLIGHTENMENT | MAGICENLIGHTENMENT (| both) */
|
||||||
int final; /* ENL_GAMEINPROGRESS:0, ENL_GAVEOVERALIVE, ENL_GAMEOVERDEAD */
|
int final; /* ENL_GAMEINPROGRESS:0, ENL_GAMEOVERALIVE, ENL_GAMEOVERDEAD */
|
||||||
{
|
{
|
||||||
char buf[BUFSZ], tmpbuf[BUFSZ];
|
char buf[BUFSZ], tmpbuf[BUFSZ];
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -216,7 +216,7 @@ NEARDATA struct c_color_names c_color_names = {
|
|||||||
"black", "amber", "golden",
|
"black", "amber", "golden",
|
||||||
"light blue", "red", "green",
|
"light blue", "red", "green",
|
||||||
"silver", "blue", "purple",
|
"silver", "blue", "purple",
|
||||||
"white"
|
"white", "orange"
|
||||||
};
|
};
|
||||||
|
|
||||||
struct menucoloring *menu_colorings = NULL;
|
struct menucoloring *menu_colorings = NULL;
|
||||||
|
|||||||
+1
-1
@@ -160,7 +160,7 @@ magic_map_background(x, y, show)
|
|||||||
if (!cansee(x,y) && !lev->waslit) {
|
if (!cansee(x,y) && !lev->waslit) {
|
||||||
/* Floor spaces are dark if unlit. Corridors are dark if unlit. */
|
/* Floor spaces are dark if unlit. Corridors are dark if unlit. */
|
||||||
if (lev->typ == ROOM && glyph == cmap_to_glyph(S_room))
|
if (lev->typ == ROOM && glyph == cmap_to_glyph(S_room))
|
||||||
glyph = cmap_to_glyph(S_stone);
|
glyph = cmap_to_glyph((flags.dark_room && iflags.use_color) ? (DARKROOMSYM) : S_stone);
|
||||||
else if (lev->typ == CORR && glyph == cmap_to_glyph(S_litcorr))
|
else if (lev->typ == CORR && glyph == cmap_to_glyph(S_litcorr))
|
||||||
glyph = cmap_to_glyph(S_corr);
|
glyph = cmap_to_glyph(S_corr);
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-1
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 do_name.c $NHDT-Date: 1426558927 2015/03/17 02:22:07 $ $NHDT-Branch: master $:$NHDT-Revision: 1.53 $ */
|
/* NetHack 3.5 do_name.c $NHDT-Date: 1428196077 2015/04/05 01:07:57 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.64 $ */
|
||||||
/* NetHack 3.5 do_name.c $Date: 2012/01/29 03:00:17 $ $Revision: 1.49 $ */
|
/* NetHack 3.5 do_name.c $Date: 2012/01/29 03:00:17 $ $Revision: 1.49 $ */
|
||||||
/* 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. */
|
||||||
@@ -475,6 +475,12 @@ register struct obj *obj;
|
|||||||
const char *aname;
|
const char *aname;
|
||||||
short objtyp;
|
short objtyp;
|
||||||
|
|
||||||
|
/* Do this now because there's no point in even asking for a name */
|
||||||
|
if (obj->otyp == SPE_NOVEL) {
|
||||||
|
pline("%s already has a published name.", Ysimple_name2(obj));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Sprintf(qbuf, "What do you want to name %s ",
|
Sprintf(qbuf, "What do you want to name %s ",
|
||||||
is_plural(obj) ? "these" : "this");
|
is_plural(obj) ? "these" : "this");
|
||||||
(void)safe_qbuf(qbuf, qbuf, "?", obj, xname, simpleonames, "item");
|
(void)safe_qbuf(qbuf, qbuf, "?", obj, xname, simpleonames, "item");
|
||||||
@@ -1153,4 +1159,55 @@ char *buf;
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* make sure "The Colour of Magic" remains the first entry in here */
|
||||||
|
static const char * const sir_Terry_novels[] = {
|
||||||
|
"The Colour of Magic", "The Light Fantastic", "Equal Rites",
|
||||||
|
"Mort", "Sourcery", "Wyrd Sisters", "Pyramids", "Guards! Guards!",
|
||||||
|
"Eric", "Moving Pictures", "Reaper Man", "Witches Abroad",
|
||||||
|
"Small Gods", "Lords and Ladies", "Men at Arms", "Soul Music",
|
||||||
|
"Interesting Times", "Maskerade", "Feet of Clay", "Hogfather",
|
||||||
|
"Jingo", "The Last Continent", "Carpe Jugulum", "The Fifth Elephant",
|
||||||
|
"The Truth", "Thief of Time", "The Last Hero",
|
||||||
|
"The Amazing Maurice and his Educated Rodents", "Night Watch",
|
||||||
|
"The Wee Free Men", "Monstrous Regiment", "A Hat Full of Sky",
|
||||||
|
"Going Postal", "Thud!", "Wintersmith", "Making Money",
|
||||||
|
"Unseen Academicals", "I Shall Wear Midnight", "Snuff",
|
||||||
|
"Raising Steam", "The Shepherd's Crown"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
noveltitle(novidx)
|
||||||
|
int *novidx;
|
||||||
|
{
|
||||||
|
int j, k = SIZE(sir_Terry_novels)-1;
|
||||||
|
|
||||||
|
j = rn2(k);
|
||||||
|
if (novidx) {
|
||||||
|
if (*novidx == -1) *novidx = j;
|
||||||
|
else if ((*novidx >= 0) && (*novidx <= k)) j = *novidx;
|
||||||
|
}
|
||||||
|
return sir_Terry_novels[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
lookup_novel(lookname, idx)
|
||||||
|
const char *lookname;
|
||||||
|
int *idx;
|
||||||
|
{
|
||||||
|
int k;
|
||||||
|
|
||||||
|
/* Take American or U.K. spelling of this one */
|
||||||
|
if (strcmpi(lookname, "The Color of Magic") == 0)
|
||||||
|
lookname = sir_Terry_novels[0];
|
||||||
|
|
||||||
|
for (k = 0; k < SIZE(sir_Terry_novels); ++k) {
|
||||||
|
if (strcmpi(lookname, sir_Terry_novels[k]) == 0) {
|
||||||
|
if (idx) *idx = k;
|
||||||
|
return sir_Terry_novels[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (const char *)0;
|
||||||
|
}
|
||||||
|
|
||||||
/*do_name.c*/
|
/*do_name.c*/
|
||||||
|
|||||||
@@ -1665,6 +1665,21 @@ xchar x, y; /* object location (ox, oy may not be right) */
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
release_camera_demon(obj, x,y)
|
||||||
|
struct obj *obj;
|
||||||
|
xchar x,y;
|
||||||
|
{
|
||||||
|
struct monst *mtmp;
|
||||||
|
if (!rn2(3) && (mtmp = makemon(&mons[rn2(3) ? PM_HOMUNCULUS : PM_IMP],x,y, NO_MM_FLAGS)) != 0) {
|
||||||
|
if (canspotmon(mtmp))
|
||||||
|
pline("%s is released!", Hallucination ?
|
||||||
|
An(rndmonnam(NULL)) : "The picture-painting demon");
|
||||||
|
mtmp->mpeaceful = !obj->cursed;
|
||||||
|
set_malign(mtmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unconditionally break an object. Assumes all resistance checks
|
* Unconditionally break an object. Assumes all resistance checks
|
||||||
* and break messages have been delivered prior to getting here.
|
* and break messages have been delivered prior to getting here.
|
||||||
@@ -1707,6 +1722,9 @@ boolean from_invent;
|
|||||||
}
|
}
|
||||||
/* monster breathing isn't handled... [yet?] */
|
/* monster breathing isn't handled... [yet?] */
|
||||||
break;
|
break;
|
||||||
|
case EXPENSIVE_CAMERA:
|
||||||
|
release_camera_demon(obj, x,y);
|
||||||
|
break;
|
||||||
case EGG:
|
case EGG:
|
||||||
/* breaking your own eggs is bad luck */
|
/* breaking your own eggs is bad luck */
|
||||||
if (hero_caused && obj->spe && obj->corpsenm >= LOW_PM)
|
if (hero_caused && obj->spe && obj->corpsenm >= LOW_PM)
|
||||||
|
|||||||
@@ -1612,7 +1612,7 @@ start_eating(otmp) /* called as you start to eat */
|
|||||||
context.victual.fullwarn = context.victual.doreset = FALSE;
|
context.victual.fullwarn = context.victual.doreset = FALSE;
|
||||||
context.victual.eating = TRUE;
|
context.victual.eating = TRUE;
|
||||||
|
|
||||||
if (otmp->otyp == CORPSE) {
|
if (otmp->otyp == CORPSE || otmp->globby) {
|
||||||
cprefx(context.victual.piece->corpsenm);
|
cprefx(context.victual.piece->corpsenm);
|
||||||
if (!context.victual.piece || !context.victual.eating) {
|
if (!context.victual.piece || !context.victual.eating) {
|
||||||
/* rider revived, or died and lifesaved */
|
/* rider revived, or died and lifesaved */
|
||||||
@@ -2127,7 +2127,7 @@ struct obj *otmp;
|
|||||||
!Stone_resistance &&
|
!Stone_resistance &&
|
||||||
!poly_when_stoned(youmonst.data));
|
!poly_when_stoned(youmonst.data));
|
||||||
|
|
||||||
if (mnum == PM_GREEN_SLIME)
|
if (mnum == PM_GREEN_SLIME || otmp->otyp == GLOB_OF_GREEN_SLIME)
|
||||||
stoneorslime = (!Unchanging && !slimeproof(youmonst.data));
|
stoneorslime = (!Unchanging && !slimeproof(youmonst.data));
|
||||||
|
|
||||||
if (cadaver && !nonrotting_corpse(mnum)) {
|
if (cadaver && !nonrotting_corpse(mnum)) {
|
||||||
@@ -2397,7 +2397,7 @@ doeat() /* generic "eat" command funtion (see cmd.c) */
|
|||||||
* for normal vs. rotten food. The reqtime and nutrit values are
|
* for normal vs. rotten food. The reqtime and nutrit values are
|
||||||
* then adjusted in accordance with the amount of food left.
|
* then adjusted in accordance with the amount of food left.
|
||||||
*/
|
*/
|
||||||
if(otmp->otyp == CORPSE) {
|
if(otmp->otyp == CORPSE || otmp->globby) {
|
||||||
int tmp = eatcorpse(otmp);
|
int tmp = eatcorpse(otmp);
|
||||||
if (tmp == 2) {
|
if (tmp == 2) {
|
||||||
/* used up */
|
/* used up */
|
||||||
|
|||||||
@@ -1238,7 +1238,7 @@ boolean identified, all_containers, reportempty;
|
|||||||
{
|
{
|
||||||
register struct obj *box, *obj;
|
register struct obj *box, *obj;
|
||||||
struct obj **oarray;
|
struct obj **oarray;
|
||||||
int i,j,n;
|
int i,n;
|
||||||
char *invlet;
|
char *invlet;
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
boolean cat, deadcat;
|
boolean cat, deadcat;
|
||||||
@@ -1437,43 +1437,72 @@ num_genocides()
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
num_extinct()
|
||||||
|
{
|
||||||
|
int i, n = 0;
|
||||||
|
|
||||||
|
for (i = LOW_PM; i < NUMMONS; ++i)
|
||||||
|
if (!(mvitals[i].mvflags & G_GENOD) &&
|
||||||
|
(mvitals[i].mvflags & G_GONE) &&
|
||||||
|
!(mons[i].geno & G_UNIQ)) ++n;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
list_genocided(defquery, ask)
|
list_genocided(defquery, ask)
|
||||||
char defquery;
|
char defquery;
|
||||||
boolean ask;
|
boolean ask;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
int ngenocided;
|
int ngenocided, nextinct;
|
||||||
char c;
|
char c;
|
||||||
winid klwin;
|
winid klwin;
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
|
|
||||||
ngenocided = num_genocides();
|
ngenocided = num_genocides();
|
||||||
|
nextinct = num_extinct();
|
||||||
|
|
||||||
/* genocided species list */
|
/* genocided or extinct species list */
|
||||||
if (ngenocided != 0) {
|
if (ngenocided != 0 || nextinct != 0) {
|
||||||
c = ask ? yn_function("Do you want a list of species genocided?",
|
Sprintf(buf, "Do you want a list of %sspecies%s%s?",
|
||||||
ynqchars, defquery) : defquery;
|
(nextinct && !ngenocided) ? "extinct " : "",
|
||||||
|
(ngenocided) ? " genocided" : "",
|
||||||
|
(nextinct && ngenocided) ? " and extinct" : "");
|
||||||
|
c = ask ? yn_function(buf, ynqchars, defquery) : defquery;
|
||||||
if (c == 'q') done_stopprint++;
|
if (c == 'q') done_stopprint++;
|
||||||
if (c == 'y') {
|
if (c == 'y') {
|
||||||
klwin = create_nhwindow(NHW_MENU);
|
klwin = create_nhwindow(NHW_MENU);
|
||||||
putstr(klwin, 0, "Genocided species:");
|
Sprintf(buf, "%s%s species:",
|
||||||
|
(ngenocided) ? "Genocided" : "Extinct",
|
||||||
|
(nextinct && ngenocided) ? " or extinct" : "");
|
||||||
|
putstr(klwin, 0, buf);
|
||||||
putstr(klwin, 0, "");
|
putstr(klwin, 0, "");
|
||||||
|
|
||||||
for (i = LOW_PM; i < NUMMONS; i++)
|
for (i = LOW_PM; i < NUMMONS; i++)
|
||||||
if (mvitals[i].mvflags & G_GENOD) {
|
if (mvitals[i].mvflags & G_GONE && !(mons[i].geno & G_UNIQ)) {
|
||||||
if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST)
|
if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST)
|
||||||
Sprintf(buf, "%s%s",
|
Sprintf(buf, "%s%s",
|
||||||
!type_is_pname(&mons[i]) ? "" : "the ",
|
!type_is_pname(&mons[i]) ? "" : "the ",
|
||||||
mons[i].mname);
|
mons[i].mname);
|
||||||
else
|
else
|
||||||
Strcpy(buf, makeplural(mons[i].mname));
|
Strcpy(buf, makeplural(mons[i].mname));
|
||||||
|
if (!(mvitals[i].mvflags & G_GENOD))
|
||||||
|
Strcat(buf, " (extinct)");
|
||||||
putstr(klwin, 0, buf);
|
putstr(klwin, 0, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
putstr(klwin, 0, "");
|
putstr(klwin, 0, "");
|
||||||
Sprintf(buf, "%d species genocided.", ngenocided);
|
if (ngenocided > 0) {
|
||||||
putstr(klwin, 0, buf);
|
Sprintf(buf, "%d species genocided.", ngenocided);
|
||||||
|
putstr(klwin, 0, buf);
|
||||||
|
}
|
||||||
|
if (nextinct > 0) {
|
||||||
|
Sprintf(buf, "%d species extinct.", nextinct);
|
||||||
|
putstr(klwin, 0, buf);
|
||||||
|
}
|
||||||
|
|
||||||
display_nhwindow(klwin, TRUE);
|
display_nhwindow(klwin, TRUE);
|
||||||
destroy_nhwindow(klwin);
|
destroy_nhwindow(klwin);
|
||||||
|
|||||||
+2019
-1869
File diff suppressed because it is too large
Load Diff
+1929
-1914
File diff suppressed because it is too large
Load Diff
+58
-14
@@ -1,15 +1,15 @@
|
|||||||
/* NetHack 3.5 hacklib.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
/* NetHack 3.5 hacklib.c $NHDT-Date: 1428806394 2015/04/12 02:39:54 $ $NHDT-Branch: master $:$NHDT-Revision: 1.34 $ */
|
||||||
/* NetHack 3.5 hacklib.c $Date: 2009/05/06 10:46:32 $ $Revision: 1.23 $ */
|
/* NetHack 3.5 hacklib.c $Date: 2009/05/06 10:46:32 $ $Revision: 1.23 $ */
|
||||||
/* SCCS Id: @(#)hacklib.c 3.5 2007/04/30 */
|
/* SCCS Id: @(#)hacklib.c 3.5 2007/04/30 */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* Copyright (c) Robert Patrick Rankin, 1991 */
|
/* Copyright (c) Robert Patrick Rankin, 1991 */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
/* We could include only config.h, except for the overlay definitions... */
|
#include "hack.h" /* for config.h+extern.h */
|
||||||
#include "hack.h"
|
|
||||||
/*=
|
/*=
|
||||||
Assorted 'small' utility routines. They're virtually independent of
|
Assorted 'small' utility routines. They're virtually independent of
|
||||||
NetHack, except that rounddiv may call panic().
|
NetHack, except that rounddiv may call panic(). setrandom calls one of
|
||||||
|
srandom(), srand48(), or srand() depending upon configuration.
|
||||||
|
|
||||||
return type routine name argument type(s)
|
return type routine name argument type(s)
|
||||||
boolean digit (char)
|
boolean digit (char)
|
||||||
@@ -40,9 +40,12 @@ NetHack, except that rounddiv may call panic().
|
|||||||
int dist2 (int, int, int, int)
|
int dist2 (int, int, int, int)
|
||||||
boolean online2 (int, int)
|
boolean online2 (int, int)
|
||||||
boolean pmatch (const char *, const char *)
|
boolean pmatch (const char *, const char *)
|
||||||
|
boolean pmatchi (const char *, const char *)
|
||||||
|
boolean pmatchz (const char *, const char *)
|
||||||
int strncmpi (const char *, const char *, int)
|
int strncmpi (const char *, const char *, int)
|
||||||
char * strstri (const char *, const char *)
|
char * strstri (const char *, const char *)
|
||||||
boolean fuzzymatch (const char *,const char *,const char *,boolean)
|
boolean fuzzymatch (const char *,const char *,
|
||||||
|
const char *,boolean)
|
||||||
void setrandom (void)
|
void setrandom (void)
|
||||||
time_t getnow (void)
|
time_t getnow (void)
|
||||||
int getyear (void)
|
int getyear (void)
|
||||||
@@ -62,6 +65,9 @@ NetHack, except that rounddiv may call panic().
|
|||||||
# define Static static
|
# define Static static
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static boolean FDECL(pmatch_internal, (const char *,const char *,
|
||||||
|
BOOLEAN_P,const char *));
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
digit(c) /* is 'c' a digit? */
|
digit(c) /* is 'c' a digit? */
|
||||||
char c;
|
char c;
|
||||||
@@ -465,9 +471,12 @@ online2(x0, y0, x1, y1) /* are two points lined up (on a straight line)? */
|
|||||||
return((boolean)(!dy || !dx || (dy == dx) || (dy + dx == 0))); /* (dy == -dx) */
|
return((boolean)(!dy || !dx || (dy == dx) || (dy + dx == 0))); /* (dy == -dx) */
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean
|
/* guts of pmatch(), pmatchi(), and pmatchz() */
|
||||||
pmatch(patrn, strng) /* match a string against a pattern */
|
static boolean
|
||||||
|
pmatch_internal(patrn, strng, ci, sk) /* match a string against a pattern */
|
||||||
const char *patrn, *strng;
|
const char *patrn, *strng;
|
||||||
|
boolean ci; /* True => case-insensitive, False => case-sensitive */
|
||||||
|
const char *sk; /* set of characters to skip */
|
||||||
{
|
{
|
||||||
char s, p;
|
char s, p;
|
||||||
/*
|
/*
|
||||||
@@ -475,18 +484,53 @@ pmatch(patrn, strng) /* match a string against a pattern */
|
|||||||
: any single character. Returns TRUE if 'strng' matches 'patrn'.
|
: any single character. Returns TRUE if 'strng' matches 'patrn'.
|
||||||
*/
|
*/
|
||||||
pmatch_top:
|
pmatch_top:
|
||||||
s = *strng++; p = *patrn++; /* get next chars and pre-advance */
|
if (!sk) {
|
||||||
|
s = *strng++; p = *patrn++; /* get next chars and pre-advance */
|
||||||
|
} else {
|
||||||
|
/* fuzzy match variant of pmatch; particular characters are ignored */
|
||||||
|
do { s = *strng++; } while (index(sk, s));
|
||||||
|
do { p = *patrn++; } while (index(sk, p));
|
||||||
|
}
|
||||||
if (!p) /* end of pattern */
|
if (!p) /* end of pattern */
|
||||||
return((boolean)(s == '\0')); /* matches iff end of string too */
|
return (boolean)(s == '\0'); /* matches iff end of string too */
|
||||||
else if (p == '*') /* wildcard reached */
|
else if (p == '*') /* wildcard reached */
|
||||||
return((boolean)((!*patrn || pmatch(patrn, strng-1)) ? TRUE :
|
return (boolean)
|
||||||
s ? pmatch(patrn-1, strng) : FALSE));
|
((!*patrn || pmatch_internal(patrn, strng-1, ci, sk)) ? TRUE :
|
||||||
else if (p != s && (p != '?' || !s)) /* check single character */
|
s ? pmatch_internal(patrn-1, strng, ci, sk) : FALSE);
|
||||||
|
else if ((ci ? lowc(p) != lowc(s) : p != s) /* check single character */
|
||||||
|
&& (p != '?' || !s)) /* & single-char wildcard */
|
||||||
return FALSE; /* doesn't match */
|
return FALSE; /* doesn't match */
|
||||||
else /* return pmatch(patrn, strng); */
|
else /* return pmatch_internal(patrn, strng, ci, sk); */
|
||||||
goto pmatch_top; /* optimize tail recursion */
|
goto pmatch_top; /* optimize tail recursion */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* case-sensitive wildcard match */
|
||||||
|
boolean
|
||||||
|
pmatch(patrn, strng)
|
||||||
|
const char *patrn, *strng;
|
||||||
|
{
|
||||||
|
return pmatch_internal(patrn, strng, FALSE, (const char *)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* case-insensitive wildcard match */
|
||||||
|
boolean
|
||||||
|
pmatchi(patrn, strng)
|
||||||
|
const char *patrn, *strng;
|
||||||
|
{
|
||||||
|
return pmatch_internal(patrn, strng, TRUE, (const char *)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* case-insensitive wildcard fuzzymatch */
|
||||||
|
boolean
|
||||||
|
pmatchz(patrn, strng)
|
||||||
|
const char *patrn, *strng;
|
||||||
|
{
|
||||||
|
/* ignore spaces, tabs (just in case), dashes, and underscores */
|
||||||
|
static const char fuzzychars[] = " \t-_";
|
||||||
|
|
||||||
|
return pmatch_internal(patrn, strng, TRUE, fuzzychars);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef STRNCMPI
|
#ifndef STRNCMPI
|
||||||
int
|
int
|
||||||
strncmpi(s1, s2, n) /* case insensitive counted string comparison */
|
strncmpi(s1, s2, n) /* case insensitive counted string comparison */
|
||||||
@@ -603,7 +647,7 @@ STATIC_DCL struct tm *NDECL(getlt);
|
|||||||
void
|
void
|
||||||
setrandom()
|
setrandom()
|
||||||
{
|
{
|
||||||
unsigned long seed = getnow(); /* time((TIME_type) 0) */
|
unsigned long seed = (unsigned long)getnow(); /* time((TIME_type) 0) */
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
/* Quick dirty band-aid to prevent PRNG prediction */
|
/* Quick dirty band-aid to prevent PRNG prediction */
|
||||||
seed *= getpid();
|
seed *= getpid();
|
||||||
|
|||||||
+2022
-2014
File diff suppressed because it is too large
Load Diff
+12
-1
@@ -523,6 +523,14 @@ doforce() /* try to force a chest with your weapon */
|
|||||||
int
|
int
|
||||||
doopen() /* try to open a door */
|
doopen() /* try to open a door */
|
||||||
{
|
{
|
||||||
|
return doopen_indir(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
doopen_indir(x, y) /* try to open a door in direction u.dx/u.dy */
|
||||||
|
int x, y;
|
||||||
|
{
|
||||||
|
|
||||||
coord cc;
|
coord cc;
|
||||||
register struct rm *door;
|
register struct rm *door;
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
@@ -539,7 +547,10 @@ doopen() /* try to open a door */
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!get_adjacent_loc((char *)0, (char *)0, u.ux, u.uy, &cc)) return(0);
|
if (x > 0 && y > 0) {
|
||||||
|
cc.x = x;
|
||||||
|
cc.y = y;
|
||||||
|
} else if(!get_adjacent_loc((char *)0, (char *)0, u.ux, u.uy, &cc)) return(0);
|
||||||
|
|
||||||
if((cc.x == u.ux) && (cc.y == u.uy)) return(0);
|
if((cc.x == u.ux) && (cc.y == u.uy)) return(0);
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -519,7 +519,7 @@ int spellnum;
|
|||||||
destroy_item(SCROLL_CLASS, AD_FIRE);
|
destroy_item(SCROLL_CLASS, AD_FIRE);
|
||||||
destroy_item(POTION_CLASS, AD_FIRE);
|
destroy_item(POTION_CLASS, AD_FIRE);
|
||||||
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
||||||
(void) burn_floor_paper(u.ux, u.uy, TRUE, FALSE);
|
(void) burn_floor_objects(u.ux, u.uy, TRUE, FALSE);
|
||||||
break;
|
break;
|
||||||
case CLC_LIGHTNING:
|
case CLC_LIGHTNING:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -493,6 +493,15 @@ int trap_type;
|
|||||||
if(rn2(7))
|
if(rn2(7))
|
||||||
dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR);
|
dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR);
|
||||||
else {
|
else {
|
||||||
|
/* inaccessible niches occasionally have iron bars */
|
||||||
|
if (!rn2(5) && IS_WALL(levl[xx][yy].typ)) {
|
||||||
|
levl[xx][yy].typ = IRONBARS;
|
||||||
|
if (rn2(3))
|
||||||
|
(void) mkcorpstat(CORPSE,
|
||||||
|
(struct monst *)0,
|
||||||
|
mkclass(S_HUMAN, 0),
|
||||||
|
xx, yy+dy, TRUE);
|
||||||
|
}
|
||||||
if (!level.flags.noteleport)
|
if (!level.flags.noteleport)
|
||||||
(void) mksobj_at(SCR_TELEPORTATION,
|
(void) mksobj_at(SCR_TELEPORTATION,
|
||||||
xx, yy+dy, TRUE, FALSE);
|
xx, yy+dy, TRUE, FALSE);
|
||||||
|
|||||||
@@ -879,7 +879,6 @@ fumaroles()
|
|||||||
for (n = rn2(3)+2; n; n--) {
|
for (n = rn2(3)+2; n; n--) {
|
||||||
xchar x = rn1(COLNO-4,3);
|
xchar x = rn1(COLNO-4,3);
|
||||||
xchar y = rn1(ROWNO-4,3);
|
xchar y = rn1(ROWNO-4,3);
|
||||||
struct trap *ttmp = t_at(x,y);
|
|
||||||
if (levl[x][y].typ == LAVAPOOL) {
|
if (levl[x][y].typ == LAVAPOOL) {
|
||||||
NhRegion *r = create_gas_cloud(x,y, 4+rn2(5), rn1(10,5));
|
NhRegion *r = create_gas_cloud(x,y, 4+rn2(5), rn1(10,5));
|
||||||
clear_heros_fault(r);
|
clear_heros_fault(r);
|
||||||
|
|||||||
+1276
-1135
File diff suppressed because it is too large
Load Diff
@@ -285,6 +285,7 @@ struct permonst *mptr;
|
|||||||
{
|
{
|
||||||
return (boolean) (passes_walls(mptr) || amorphous(mptr) ||
|
return (boolean) (passes_walls(mptr) || amorphous(mptr) ||
|
||||||
unsolid(mptr) || is_whirly(mptr) || verysmall(mptr) ||
|
unsolid(mptr) || is_whirly(mptr) || verysmall(mptr) ||
|
||||||
|
dmgtype(mptr, AD_CORR) || dmgtype(mptr, AD_RUST) ||
|
||||||
(slithy(mptr) && !bigmonst(mptr)));
|
(slithy(mptr) && !bigmonst(mptr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-1
@@ -1180,7 +1180,14 @@ postmov:
|
|||||||
add_damage(mtmp->mx, mtmp->my, 0L);
|
add_damage(mtmp->mx, mtmp->my, 0L);
|
||||||
}
|
}
|
||||||
} else if (levl[mtmp->mx][mtmp->my].typ == IRONBARS) {
|
} else if (levl[mtmp->mx][mtmp->my].typ == IRONBARS) {
|
||||||
if (flags.verbose && canseemon(mtmp))
|
if (may_dig(mtmp->mx,mtmp->my) &&
|
||||||
|
(dmgtype(ptr, AD_RUST) || dmgtype(ptr, AD_CORR))) {
|
||||||
|
if (canseemon(mtmp))
|
||||||
|
pline("%s eats through the iron bars.",
|
||||||
|
Monnam(mtmp));
|
||||||
|
dissolve_bars(mtmp->mx, mtmp->my);
|
||||||
|
return(3);
|
||||||
|
} else if (flags.verbose && canseemon(mtmp))
|
||||||
Norep("%s %s %s the iron bars.", Monnam(mtmp),
|
Norep("%s %s %s the iron bars.", Monnam(mtmp),
|
||||||
/* pluralization fakes verb conjugation */
|
/* pluralization fakes verb conjugation */
|
||||||
makeplural(locomotion(ptr, "pass")),
|
makeplural(locomotion(ptr, "pass")),
|
||||||
@@ -1266,6 +1273,14 @@ postmov:
|
|||||||
return(mmoved);
|
return(mmoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dissolve_bars(x, y)
|
||||||
|
register int x, y;
|
||||||
|
{
|
||||||
|
levl[x][y].typ = (Is_special(&u.uz) || *in_rooms(x,y,0)) ? ROOM : CORR;
|
||||||
|
newsym(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
closed_door(x, y)
|
closed_door(x, y)
|
||||||
register int x, y;
|
register int x, y;
|
||||||
|
|||||||
+4
-4
@@ -1820,7 +1820,7 @@ struct permonst _mons2[] = {
|
|||||||
* Puddings
|
* Puddings
|
||||||
*/
|
*/
|
||||||
MON("gray ooze", S_PUDDING,
|
MON("gray ooze", S_PUDDING,
|
||||||
LVL(3, 1, 8, 0, 0), (G_GENO|2),
|
LVL(3, 1, 8, 0, 0), (G_GENO|G_NOCORPSE|2),
|
||||||
A(ATTK(AT_BITE, AD_RUST, 2, 8),
|
A(ATTK(AT_BITE, AD_RUST, 2, 8),
|
||||||
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
||||||
SIZ(500, 250, MS_SILENT, MZ_MEDIUM),
|
SIZ(500, 250, MS_SILENT, MZ_MEDIUM),
|
||||||
@@ -1829,7 +1829,7 @@ struct permonst _mons2[] = {
|
|||||||
M1_MINDLESS|M1_OMNIVORE|M1_ACID,
|
M1_MINDLESS|M1_OMNIVORE|M1_ACID,
|
||||||
M2_HOSTILE|M2_NEUTER, 0, CLR_GRAY),
|
M2_HOSTILE|M2_NEUTER, 0, CLR_GRAY),
|
||||||
MON("brown pudding", S_PUDDING,
|
MON("brown pudding", S_PUDDING,
|
||||||
LVL(5, 3, 8, 0, 0), (G_GENO|1),
|
LVL(5, 3, 8, 0, 0), (G_GENO|G_NOCORPSE|1),
|
||||||
A(ATTK(AT_BITE, AD_DCAY, 0, 0),
|
A(ATTK(AT_BITE, AD_DCAY, 0, 0),
|
||||||
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
||||||
SIZ(500, 250, MS_SILENT, MZ_MEDIUM),
|
SIZ(500, 250, MS_SILENT, MZ_MEDIUM),
|
||||||
@@ -1838,7 +1838,7 @@ struct permonst _mons2[] = {
|
|||||||
M1_MINDLESS|M1_OMNIVORE|M1_ACID,
|
M1_MINDLESS|M1_OMNIVORE|M1_ACID,
|
||||||
M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN),
|
M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN),
|
||||||
MON("green slime", S_PUDDING,
|
MON("green slime", S_PUDDING,
|
||||||
LVL(6, 6, 6, 0, 0), (G_HELL|G_GENO|1),
|
LVL(6, 6, 6, 0, 0), (G_HELL|G_GENO|G_NOCORPSE|1),
|
||||||
A(ATTK(AT_TUCH, AD_SLIM, 1, 4), ATTK(AT_NONE, AD_SLIM, 0, 0),
|
A(ATTK(AT_TUCH, AD_SLIM, 1, 4), ATTK(AT_NONE, AD_SLIM, 0, 0),
|
||||||
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
||||||
SIZ(400, 150, MS_SILENT, MZ_LARGE),
|
SIZ(400, 150, MS_SILENT, MZ_LARGE),
|
||||||
@@ -1847,7 +1847,7 @@ struct permonst _mons2[] = {
|
|||||||
M1_MINDLESS|M1_OMNIVORE|M1_ACID|M1_POIS,
|
M1_MINDLESS|M1_OMNIVORE|M1_ACID|M1_POIS,
|
||||||
M2_HOSTILE|M2_NEUTER, 0, CLR_GREEN),
|
M2_HOSTILE|M2_NEUTER, 0, CLR_GREEN),
|
||||||
MON("black pudding", S_PUDDING,
|
MON("black pudding", S_PUDDING,
|
||||||
LVL(10, 6, 6, 0, 0), (G_GENO|1),
|
LVL(10, 6, 6, 0, 0), (G_GENO|G_NOCORPSE|1),
|
||||||
A(ATTK(AT_BITE, AD_CORR, 3, 8), ATTK(AT_NONE, AD_CORR, 0, 0),
|
A(ATTK(AT_BITE, AD_CORR, 3, 8), ATTK(AT_NONE, AD_CORR, 0, 0),
|
||||||
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
||||||
SIZ(900, 250, MS_SILENT, MZ_LARGE),
|
SIZ(900, 250, MS_SILENT, MZ_LARGE),
|
||||||
|
|||||||
+13
-4
@@ -1,5 +1,4 @@
|
|||||||
/* NetHack 3.5 objects.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
/* NetHack 3.5 objects.c $NHDT-Date: 1428802519 2015/04/12 01:35:19 $ $NHDT-Branch: master $:$NHDT-Revision: 1.34 $ */
|
||||||
/* NetHack 3.5 objects.c $Date: 2011/07/28 04:00:20 $ $Revision: 1.23 $ */
|
|
||||||
/* Copyright (c) Mike Threepoint, 1989. */
|
/* Copyright (c) Mike Threepoint, 1989. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -374,9 +373,9 @@ ARMOR("splint mail", (char *)0,
|
|||||||
ARMOR("banded mail", (char *)0,
|
ARMOR("banded mail", (char *)0,
|
||||||
1, 0, 1, 0, 72, 5, 350, 90, 4, 1, ARM_SUIT, IRON, HI_METAL),
|
1, 0, 1, 0, 72, 5, 350, 90, 4, 1, ARM_SUIT, IRON, HI_METAL),
|
||||||
ARMOR("dwarvish mithril-coat", (char *)0,
|
ARMOR("dwarvish mithril-coat", (char *)0,
|
||||||
1, 0, 0, 0, 10, 1, 150, 240, 4, 2, ARM_SUIT, MITHRIL, HI_METAL),
|
1, 0, 0, 0, 10, 1, 150, 240, 4, 2, ARM_SUIT, MITHRIL, HI_SILVER),
|
||||||
ARMOR("elven mithril-coat", (char *)0,
|
ARMOR("elven mithril-coat", (char *)0,
|
||||||
1, 0, 0, 0, 15, 1, 150, 240, 5, 2, ARM_SUIT, MITHRIL, HI_METAL),
|
1, 0, 0, 0, 15, 1, 150, 240, 5, 2, ARM_SUIT, MITHRIL, HI_SILVER),
|
||||||
ARMOR("chain mail", (char *)0,
|
ARMOR("chain mail", (char *)0,
|
||||||
1, 0, 0, 0, 72, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL),
|
1, 0, 0, 0, 72, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL),
|
||||||
ARMOR("orcish chain mail", "crude chain mail",
|
ARMOR("orcish chain mail", "crude chain mail",
|
||||||
@@ -670,11 +669,18 @@ FOOD("egg", 85, 1, 1, 1, FLESH, 80, CLR_WHITE),
|
|||||||
FOOD("meatball", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
|
FOOD("meatball", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
|
||||||
FOOD("meat stick", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
|
FOOD("meat stick", 0, 1, 1, 0, FLESH, 5, CLR_BROWN),
|
||||||
FOOD("huge chunk of meat", 0,20,400, 0, FLESH,2000, CLR_BROWN),
|
FOOD("huge chunk of meat", 0,20,400, 0, FLESH,2000, CLR_BROWN),
|
||||||
|
|
||||||
/* special case because it's not mergable */
|
/* special case because it's not mergable */
|
||||||
OBJECT(OBJ("meat ring", (char *)0),
|
OBJECT(OBJ("meat ring", (char *)0),
|
||||||
BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
|
BITS(1,0,0,0,0,0,0,0,0,0,0,0,FLESH),
|
||||||
0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
|
0, FOOD_CLASS, 0, 1, 5, 1, 0, 0, 0, 0, 5, CLR_BROWN),
|
||||||
|
|
||||||
|
/* pudding 'corpses' will turn into these and combine */
|
||||||
|
FOOD("glob of gray ooze", 0, 2, 20, 0, FLESH, 20, CLR_GRAY),
|
||||||
|
FOOD("glob of brown pudding", 0, 2, 20, 0, FLESH, 20, CLR_BROWN),
|
||||||
|
FOOD("glob of green slime", 0, 2, 20, 0, FLESH, 20, CLR_GREEN),
|
||||||
|
FOOD("glob of black pudding", 0, 2, 20, 0, FLESH, 20, CLR_BLACK),
|
||||||
|
|
||||||
/* fruits & veggies */
|
/* fruits & veggies */
|
||||||
FOOD("kelp frond", 0, 1, 1, 0, VEGGY, 30, CLR_GREEN),
|
FOOD("kelp frond", 0, 1, 1, 0, VEGGY, 30, CLR_GREEN),
|
||||||
FOOD("eucalyptus leaf", 3, 1, 1, 0, VEGGY, 30, CLR_GREEN),
|
FOOD("eucalyptus leaf", 3, 1, 1, 0, VEGGY, 30, CLR_GREEN),
|
||||||
@@ -821,6 +827,9 @@ SPELL("freeze sphere", "hardcover", P_MATTER_SPELL, 20, 2, 1, 1, NODIR, CLR
|
|||||||
#endif
|
#endif
|
||||||
/* blank spellbook must come last because it retains its description */
|
/* blank spellbook must come last because it retains its description */
|
||||||
SPELL("blank paper", "plain", P_NONE, 18, 0, 0, 0, 0, HI_PAPER),
|
SPELL("blank paper", "plain", P_NONE, 18, 0, 0, 0, 0, HI_PAPER),
|
||||||
|
/* tribute book for 3.6 */
|
||||||
|
OBJECT(OBJ("novel", "paperback"), BITS(0,0,1,0,0,0,0,1,0,0,0,P_NONE,HI_PAPER), 0,
|
||||||
|
SPBOOK_CLASS, 0, 0, 0, 1, 0, 0, 0, 1, 20, CLR_BRIGHT_BLUE),
|
||||||
/* a special, one of a kind, spellbook */
|
/* a special, one of a kind, spellbook */
|
||||||
OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,
|
OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0,
|
||||||
SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),
|
SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER),
|
||||||
|
|||||||
+2505
-2445
File diff suppressed because it is too large
Load Diff
+7
-42
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 options.c $NHDT-Date: 1427073746 2015/03/23 01:22:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.164 $ */
|
/* NetHack 3.5 options.c $NHDT-Date: 1428088105 2015/04/03 19:08:25 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.182 $ */
|
||||||
/* NetHack 3.5 options.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.153 $ */
|
/* NetHack 3.5 options.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.153 $ */
|
||||||
/* 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. */
|
||||||
@@ -78,6 +78,7 @@ static struct Bool_Opt
|
|||||||
{"asksavedisk", (boolean *)0, FALSE, SET_IN_FILE},
|
{"asksavedisk", (boolean *)0, FALSE, SET_IN_FILE},
|
||||||
#endif
|
#endif
|
||||||
{"autodig", &flags.autodig, FALSE, SET_IN_GAME},
|
{"autodig", &flags.autodig, FALSE, SET_IN_GAME},
|
||||||
|
{"autoopen", &flags.autoopen, TRUE, SET_IN_GAME},
|
||||||
{"autopickup", &flags.pickup, TRUE, SET_IN_GAME},
|
{"autopickup", &flags.pickup, TRUE, SET_IN_GAME},
|
||||||
{"autoquiver", &flags.autoquiver, FALSE, SET_IN_GAME},
|
{"autoquiver", &flags.autoquiver, FALSE, SET_IN_GAME},
|
||||||
#if defined(MICRO) && !defined(AMIGA)
|
#if defined(MICRO) && !defined(AMIGA)
|
||||||
@@ -1170,11 +1171,6 @@ char *str;
|
|||||||
int i, c = NO_COLOR, a = ATR_NONE;
|
int i, c = NO_COLOR, a = ATR_NONE;
|
||||||
struct menucoloring *tmp;
|
struct menucoloring *tmp;
|
||||||
char *tmps, *cs = strchr(str, '=');
|
char *tmps, *cs = strchr(str, '=');
|
||||||
#ifdef MENU_COLOR_REGEX_POSIX
|
|
||||||
int errnum;
|
|
||||||
char errbuf[80];
|
|
||||||
#endif
|
|
||||||
const char *err = (char *)0;
|
|
||||||
|
|
||||||
if (!cs || !str) return FALSE;
|
if (!cs || !str) return FALSE;
|
||||||
|
|
||||||
@@ -1217,28 +1213,9 @@ char *str;
|
|||||||
}
|
}
|
||||||
|
|
||||||
tmp = (struct menucoloring *)alloc(sizeof(struct menucoloring));
|
tmp = (struct menucoloring *)alloc(sizeof(struct menucoloring));
|
||||||
#ifdef MENU_COLOR_REGEX
|
tmp->match = regex_init();
|
||||||
#ifdef MENU_COLOR_REGEX_POSIX
|
if (!regex_compile(tmps, tmp->match)) {
|
||||||
errnum = regcomp(&tmp->match, tmps, REG_EXTENDED | REG_NOSUB);
|
raw_printf("\nMenucolor regex error: %s\n", regex_error_desc(tmp->match));
|
||||||
if (errnum != 0)
|
|
||||||
{
|
|
||||||
regerror(errnum, &tmp->match, errbuf, sizeof(errbuf));
|
|
||||||
err = errbuf;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
tmp->match.translate = 0;
|
|
||||||
tmp->match.fastmap = 0;
|
|
||||||
tmp->match.buffer = 0;
|
|
||||||
tmp->match.allocated = 0;
|
|
||||||
tmp->match.regs_allocated = REGS_FIXED;
|
|
||||||
err = re_compile_pattern(tmps, strlen(tmps), &tmp->match);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
tmp->match = (char *)alloc(strlen(tmps)+1);
|
|
||||||
(void) memcpy((genericptr_t)tmp->match, (genericptr_t)tmps, strlen(tmps)+1);
|
|
||||||
#endif
|
|
||||||
if (err) {
|
|
||||||
raw_printf("\nMenucolor regex error: %s\n", err);
|
|
||||||
wait_synch();
|
wait_synch();
|
||||||
free(tmp);
|
free(tmp);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1259,15 +1236,7 @@ int *color, *attr;
|
|||||||
struct menucoloring *tmpmc;
|
struct menucoloring *tmpmc;
|
||||||
if (iflags.use_menu_color)
|
if (iflags.use_menu_color)
|
||||||
for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next)
|
for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next)
|
||||||
#ifdef MENU_COLOR_REGEX
|
if (regex_match(str, tmpmc->match)) {
|
||||||
# ifdef MENU_COLOR_REGEX_POSIX
|
|
||||||
if (regexec(&tmpmc->match, str, 0, NULL, 0) == 0) {
|
|
||||||
# else
|
|
||||||
if (re_search(&tmpmc->match, str, strlen(str), 0, 9999, 0) >= 0) {
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
if (pmatch(tmpmc->match, str)) {
|
|
||||||
#endif
|
|
||||||
*color = tmpmc->color;
|
*color = tmpmc->color;
|
||||||
*attr = tmpmc->attr;
|
*attr = tmpmc->attr;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -1282,11 +1251,7 @@ free_menu_coloring()
|
|||||||
|
|
||||||
while (tmp) {
|
while (tmp) {
|
||||||
struct menucoloring *tmp2 = tmp->next;
|
struct menucoloring *tmp2 = tmp->next;
|
||||||
#ifdef MENU_COLOR_REGEX
|
regex_free(tmp->match);
|
||||||
(void) regfree(&tmp->match);
|
|
||||||
#else
|
|
||||||
free(tmp->match);
|
|
||||||
#endif
|
|
||||||
free(tmp);
|
free(tmp);
|
||||||
tmp = tmp2;
|
tmp = tmp2;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -708,7 +708,7 @@ menu_item **pick_list; /* return list of items picked */
|
|||||||
int how; /* type of query */
|
int how; /* type of query */
|
||||||
boolean FDECL((*allow), (OBJ_P));/* allow function */
|
boolean FDECL((*allow), (OBJ_P));/* allow function */
|
||||||
{
|
{
|
||||||
int i, j, n;
|
int i, n;
|
||||||
winid win;
|
winid win;
|
||||||
struct obj *curr, *last, fake_hero_object;
|
struct obj *curr, *last, fake_hero_object;
|
||||||
struct obj **oarray;
|
struct obj **oarray;
|
||||||
@@ -823,7 +823,7 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */
|
|||||||
|
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
menu_item *mi;
|
menu_item *mi;
|
||||||
int i, k;
|
int k;
|
||||||
|
|
||||||
/* fix up counts: -1 means no count used => pick all;
|
/* fix up counts: -1 means no count used => pick all;
|
||||||
if fake_hero_object was picked, discard that choice */
|
if fake_hero_object was picked, discard that choice */
|
||||||
|
|||||||
@@ -1819,6 +1819,15 @@ dodip()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(potion->otyp == POT_ACID && obj->otyp == CORPSE &&
|
||||||
|
obj->corpsenm == PM_LICHEN & !Blind) {
|
||||||
|
pline("%s %s %s around the edges.", The(cxname(obj)),
|
||||||
|
otense(obj, "turn"), potion->odiluted ?
|
||||||
|
hcolor(NH_ORANGE) : hcolor(NH_RED));
|
||||||
|
potion->in_use = FALSE; /* didn't go poof */
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
if(is_poisonable(obj)) {
|
if(is_poisonable(obj)) {
|
||||||
if(potion->otyp == POT_SICKNESS && !obj->opoisoned) {
|
if(potion->otyp == POT_SICKNESS && !obj->opoisoned) {
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
|
|||||||
+1
-1
@@ -1370,7 +1370,7 @@ dosacrifice()
|
|||||||
a_gname(), u_gname());
|
a_gname(), u_gname());
|
||||||
pline("%s is enraged...", u_gname());
|
pline("%s is enraged...", u_gname());
|
||||||
pline("Fortunately, %s permits you to live...", a_gname());
|
pline("Fortunately, %s permits you to live...", a_gname());
|
||||||
pline(cloud_of_smoke, hcolor("orange"));
|
pline(cloud_of_smoke, hcolor(NH_ORANGE));
|
||||||
done(ESCAPED);
|
done(ESCAPED);
|
||||||
} else { /* super big win */
|
} else { /* super big win */
|
||||||
adjalign(10);
|
adjalign(10);
|
||||||
|
|||||||
+3
-1
@@ -320,9 +320,11 @@ doread()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Actions required to win the game aren't counted towards conduct */
|
/* Actions required to win the game aren't counted towards conduct */
|
||||||
|
/* Novel conduct is handled in read_tribute so exclude it too*/
|
||||||
if (scroll->otyp != SPE_BOOK_OF_THE_DEAD &&
|
if (scroll->otyp != SPE_BOOK_OF_THE_DEAD &&
|
||||||
scroll->otyp != SPE_BLANK_PAPER &&
|
scroll->otyp != SPE_BLANK_PAPER &&
|
||||||
scroll->otyp != SCR_BLANK_PAPER)
|
scroll->otyp != SCR_BLANK_PAPER &&
|
||||||
|
scroll->otyp != SPE_NOVEL)
|
||||||
u.uconduct.literate++;
|
u.uconduct.literate++;
|
||||||
|
|
||||||
if(scroll->oclass == SPBOOK_CLASS) {
|
if(scroll->oclass == SPBOOK_CLASS) {
|
||||||
|
|||||||
+8
-1
@@ -502,6 +502,13 @@ register struct obj *otmp;
|
|||||||
else otmp->spe = fruitadd(oldf->fname, (struct fruit *)0);
|
else otmp->spe = fruitadd(oldf->fname, (struct fruit *)0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SYSCF
|
||||||
|
#define SYSOPT_CHECK_SAVE_UID sysopt.check_save_uid
|
||||||
|
#else
|
||||||
|
#define SYSOPT_CHECK_SAVE_UID TRUE
|
||||||
|
#endif
|
||||||
|
|
||||||
STATIC_OVL
|
STATIC_OVL
|
||||||
boolean
|
boolean
|
||||||
restgamestate(fd, stuckid, steedid)
|
restgamestate(fd, stuckid, steedid)
|
||||||
@@ -517,7 +524,7 @@ unsigned int *stuckid, *steedid;
|
|||||||
unsigned long uid;
|
unsigned long uid;
|
||||||
|
|
||||||
mread(fd, (genericptr_t) &uid, sizeof uid);
|
mread(fd, (genericptr_t) &uid, sizeof uid);
|
||||||
if (uid != (unsigned long)getuid()) { /* strange ... */
|
if (SYSOPT_CHECK_SAVE_UID && uid != (unsigned long)getuid()) { /* strange ... */
|
||||||
/* for wizard mode, issue a reminder; for others, treat it
|
/* for wizard mode, issue a reminder; for others, treat it
|
||||||
as an attempt to cheat and refuse to restore this file */
|
as an attempt to cheat and refuse to restore this file */
|
||||||
pline("Saved game was not yours.");
|
pline("Saved game was not yours.");
|
||||||
|
|||||||
+39
-5
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 shknam.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
/* NetHack 3.5 shknam.c $NHDT-Date: 1428207608 2015/04/05 04:20:08 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.32 $ */
|
||||||
/* NetHack 3.5 shknam.c $Date: 2011/04/15 01:55:42 $ $Revision: 1.24 $ */
|
/* NetHack 3.5 shknam.c $Date: 2011/04/15 01:55:42 $ $Revision: 1.24 $ */
|
||||||
/* 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. */
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
STATIC_DCL boolean FDECL(veggy_item, (struct obj *obj,int));
|
STATIC_DCL boolean FDECL(veggy_item, (struct obj *obj,int));
|
||||||
STATIC_DCL int NDECL(shkveg);
|
STATIC_DCL int NDECL(shkveg);
|
||||||
STATIC_DCL void FDECL(mkveggy_at, (int,int));
|
STATIC_DCL void FDECL(mkveggy_at, (int,int));
|
||||||
STATIC_DCL void FDECL(mkshobj_at, (const struct shclass *,int,int));
|
STATIC_DCL void FDECL(mkshobj_at, (const struct shclass *,int,int,BOOLEAN_P));
|
||||||
STATIC_DCL void FDECL(nameshk, (struct monst *,const char * const *));
|
STATIC_DCL void FDECL(nameshk, (struct monst *,const char * const *));
|
||||||
STATIC_DCL int FDECL(shkinit, (const struct shclass *,struct mkroom *));
|
STATIC_DCL int FDECL(shkinit, (const struct shclass *,struct mkroom *));
|
||||||
|
|
||||||
@@ -357,15 +357,24 @@ int sx, sy;
|
|||||||
}
|
}
|
||||||
|
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
mkshobj_at(shp, sx, sy)
|
mkshobj_at(shp, sx, sy, mkspecl)
|
||||||
/* make an object of the appropriate type for a shop square */
|
/* make an object of the appropriate type for a shop square */
|
||||||
const struct shclass *shp;
|
const struct shclass *shp;
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
|
boolean mkspecl;
|
||||||
{
|
{
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
int atype;
|
int atype;
|
||||||
struct permonst *ptr;
|
struct permonst *ptr;
|
||||||
|
|
||||||
|
/* 3.6.0 tribute */
|
||||||
|
if (mkspecl && (!strcmp(shp->name, "rare books") ||
|
||||||
|
!strcmp(shp->name, "second-hand bookstore"))) {
|
||||||
|
struct obj *novel=mksobj_at(SPE_NOVEL, sx, sy, FALSE, FALSE);
|
||||||
|
if (novel) context.tribute.bookstock = TRUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (rn2(100) < depth(&u.uz) &&
|
if (rn2(100) < depth(&u.uz) &&
|
||||||
!MON_AT(sx, sy) && (ptr = mkclass(S_MIMIC,0)) &&
|
!MON_AT(sx, sy) && (ptr = mkclass(S_MIMIC,0)) &&
|
||||||
(mtmp = makemon(ptr,sx,sy,NO_MM_FLAGS)) != 0) {
|
(mtmp = makemon(ptr,sx,sy,NO_MM_FLAGS)) != 0) {
|
||||||
@@ -572,7 +581,8 @@ register struct mkroom *sroom;
|
|||||||
* shop-style placement (all squares except a row nearest the first
|
* shop-style placement (all squares except a row nearest the first
|
||||||
* door get objects).
|
* door get objects).
|
||||||
*/
|
*/
|
||||||
register int sx, sy, sh;
|
int sx, sy, sh;
|
||||||
|
int stockcount = 0, specialspot = 0;
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
int rmno = (int)((sroom - rooms) + ROOMOFFSET);
|
int rmno = (int)((sroom - rooms) + ROOMOFFSET);
|
||||||
const struct shclass *shp = &shtypes[shp_indx];
|
const struct shclass *shp = &shtypes[shp_indx];
|
||||||
@@ -608,6 +618,29 @@ register struct mkroom *sroom;
|
|||||||
make_engr_at(m, n, buf, 0L, DUST);
|
make_engr_at(m, n, buf, 0L, DUST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (context.tribute.enabled && !context.tribute.bookstock) {
|
||||||
|
/*
|
||||||
|
* Out of the number of spots where we're actually
|
||||||
|
* going to put stuff, randomly single out one in particular.
|
||||||
|
*/
|
||||||
|
for (sx = sroom->lx; sx <= sroom->hx; sx++)
|
||||||
|
for (sy = sroom->ly; sy <= sroom->hy; sy++) {
|
||||||
|
if (sroom->irregular) {
|
||||||
|
if (levl[sx][sy].edge || (int)levl[sx][sy].roomno != rmno ||
|
||||||
|
distmin(sx, sy, doors[sh].x, doors[sh].y) <= 1)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if ((sx == sroom->lx && doors[sh].x == sx - 1) ||
|
||||||
|
(sx == sroom->hx && doors[sh].x == sx + 1) ||
|
||||||
|
(sy == sroom->ly && doors[sh].y == sy - 1) ||
|
||||||
|
(sy == sroom->hy && doors[sh].y == sy + 1)) continue;
|
||||||
|
stockcount++;
|
||||||
|
}
|
||||||
|
specialspot = rnd(stockcount);
|
||||||
|
stockcount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for(sx = sroom->lx; sx <= sroom->hx; sx++)
|
for(sx = sroom->lx; sx <= sroom->hx; sx++)
|
||||||
for(sy = sroom->ly; sy <= sroom->hy; sy++) {
|
for(sy = sroom->ly; sy <= sroom->hy; sy++) {
|
||||||
if(sroom->irregular) {
|
if(sroom->irregular) {
|
||||||
@@ -618,7 +651,8 @@ register struct mkroom *sroom;
|
|||||||
(sx == sroom->hx && doors[sh].x == sx+1) ||
|
(sx == sroom->hx && doors[sh].x == sx+1) ||
|
||||||
(sy == sroom->ly && doors[sh].y == sy-1) ||
|
(sy == sroom->ly && doors[sh].y == sy-1) ||
|
||||||
(sy == sroom->hy && doors[sh].y == sy+1)) continue;
|
(sy == sroom->hy && doors[sh].y == sy+1)) continue;
|
||||||
mkshobj_at(shp, sx, sy);
|
stockcount++;
|
||||||
|
mkshobj_at(shp, sx, sy, ((stockcount) && (stockcount == specialspot)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+25
-9
@@ -15,6 +15,11 @@
|
|||||||
|
|
||||||
#include "sp_lev.h"
|
#include "sp_lev.h"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable:4244)
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef void (*select_iter_func)(int, int, genericptr_t);
|
typedef void (*select_iter_func)(int, int, genericptr_t);
|
||||||
|
|
||||||
extern void FDECL(mkmap, (lev_init *));
|
extern void FDECL(mkmap, (lev_init *));
|
||||||
@@ -403,7 +408,7 @@ opvar_clone(ov)
|
|||||||
case SPOVAR_VARIABLE:
|
case SPOVAR_VARIABLE:
|
||||||
case SPOVAR_STRING:
|
case SPOVAR_STRING:
|
||||||
case SPOVAR_SEL:
|
case SPOVAR_SEL:
|
||||||
tmpov->vardata.str = strdup(ov->vardata.str);
|
tmpov->vardata.str = dupstr(ov->vardata.str);
|
||||||
break;
|
break;
|
||||||
default: impossible("Unknown push value type (%i)!", ov->spovartyp);
|
default: impossible("Unknown push value type (%i)!", ov->spovartyp);
|
||||||
}
|
}
|
||||||
@@ -2673,7 +2678,7 @@ spo_monster(coder)
|
|||||||
case SP_M_V_NAME:
|
case SP_M_V_NAME:
|
||||||
if ((OV_typ(parm) == SPOVAR_STRING) &&
|
if ((OV_typ(parm) == SPOVAR_STRING) &&
|
||||||
!tmpmons.name.str)
|
!tmpmons.name.str)
|
||||||
tmpmons.name.str = strdup(OV_s(parm));
|
tmpmons.name.str = dupstr(OV_s(parm));
|
||||||
break;
|
break;
|
||||||
case SP_M_V_APPEAR:
|
case SP_M_V_APPEAR:
|
||||||
if ((OV_typ(parm) == SPOVAR_INT) &&
|
if ((OV_typ(parm) == SPOVAR_INT) &&
|
||||||
@@ -2681,7 +2686,7 @@ spo_monster(coder)
|
|||||||
tmpmons.appear = OV_i(parm);
|
tmpmons.appear = OV_i(parm);
|
||||||
opvar_free(parm);
|
opvar_free(parm);
|
||||||
OV_pop(parm);
|
OV_pop(parm);
|
||||||
tmpmons.appear_as.str = strdup(OV_s(parm));
|
tmpmons.appear_as.str = dupstr(OV_s(parm));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SP_M_V_ASLEEP:
|
case SP_M_V_ASLEEP:
|
||||||
@@ -2816,7 +2821,7 @@ spo_object(coder)
|
|||||||
case SP_O_V_NAME:
|
case SP_O_V_NAME:
|
||||||
if ((OV_typ(parm) == SPOVAR_STRING) &&
|
if ((OV_typ(parm) == SPOVAR_STRING) &&
|
||||||
!tmpobj.name.str)
|
!tmpobj.name.str)
|
||||||
tmpobj.name.str = strdup(OV_s(parm));
|
tmpobj.name.str = dupstr(OV_s(parm));
|
||||||
break;
|
break;
|
||||||
case SP_O_V_CORPSENM:
|
case SP_O_V_CORPSENM:
|
||||||
if (OV_typ(parm) == SPOVAR_MONST) {
|
if (OV_typ(parm) == SPOVAR_MONST) {
|
||||||
@@ -3921,7 +3926,7 @@ spo_levregion(coder)
|
|||||||
tmplregion->del_islev = OV_i(del_islev);
|
tmplregion->del_islev = OV_i(del_islev);
|
||||||
tmplregion->rtype = OV_i(rtype);
|
tmplregion->rtype = OV_i(rtype);
|
||||||
tmplregion->padding = OV_i(padding);
|
tmplregion->padding = OV_i(padding);
|
||||||
tmplregion->rname.str = strdup(OV_s(rname));
|
tmplregion->rname.str = dupstr(OV_s(rname));
|
||||||
|
|
||||||
if(!tmplregion->in_islev) {
|
if(!tmplregion->in_islev) {
|
||||||
get_location(&tmplregion->inarea.x1, &tmplregion->inarea.y1,
|
get_location(&tmplregion->inarea.x1, &tmplregion->inarea.y1,
|
||||||
@@ -4490,7 +4495,7 @@ spo_var_init(coder)
|
|||||||
tmpvar = (struct splev_var *)malloc(sizeof(struct splev_var));
|
tmpvar = (struct splev_var *)malloc(sizeof(struct splev_var));
|
||||||
if (!tmpvar) panic("newvar tmpvar alloc");
|
if (!tmpvar) panic("newvar tmpvar alloc");
|
||||||
tmpvar->next = coder->frame->variables;
|
tmpvar->next = coder->frame->variables;
|
||||||
tmpvar->name = strdup(OV_s(vname));
|
tmpvar->name = dupstr(OV_s(vname));
|
||||||
coder->frame->variables = tmpvar;
|
coder->frame->variables = tmpvar;
|
||||||
|
|
||||||
if (OV_i(arraylen) < 0) {
|
if (OV_i(arraylen) < 0) {
|
||||||
@@ -5032,7 +5037,7 @@ sp_lev *lvl;
|
|||||||
break;
|
break;
|
||||||
case SPO_SEL_LINE:
|
case SPO_SEL_LINE:
|
||||||
{
|
{
|
||||||
struct opvar *tmp, *tmp2, *pt = selection_opvar(NULL);
|
struct opvar *tmp = NULL, *tmp2 = NULL, *pt = selection_opvar(NULL);
|
||||||
schar x1,y1,x2,y2;
|
schar x1,y1,x2,y2;
|
||||||
if (!OV_pop_c(tmp)) panic("no ter sel linecoord1");
|
if (!OV_pop_c(tmp)) panic("no ter sel linecoord1");
|
||||||
if (!OV_pop_c(tmp2)) panic("no ter sel linecoord2");
|
if (!OV_pop_c(tmp2)) panic("no ter sel linecoord2");
|
||||||
@@ -5050,7 +5055,7 @@ sp_lev *lvl;
|
|||||||
break;
|
break;
|
||||||
case SPO_SEL_RNDLINE:
|
case SPO_SEL_RNDLINE:
|
||||||
{
|
{
|
||||||
struct opvar *tmp, *tmp2, *tmp3, *pt = selection_opvar(NULL);
|
struct opvar *tmp = NULL, *tmp2 = NULL, *tmp3, *pt = selection_opvar(NULL);
|
||||||
schar x1,y1,x2,y2;
|
schar x1,y1,x2,y2;
|
||||||
if (!OV_pop_i(tmp3)) panic("no ter sel randline1");
|
if (!OV_pop_i(tmp3)) panic("no ter sel randline1");
|
||||||
if (!OV_pop_c(tmp)) panic("no ter sel randline2");
|
if (!OV_pop_c(tmp)) panic("no ter sel randline2");
|
||||||
@@ -5163,7 +5168,14 @@ next_opcode:
|
|||||||
link_doors_rooms();
|
link_doors_rooms();
|
||||||
fill_rooms();
|
fill_rooms();
|
||||||
remove_boundary_syms();
|
remove_boundary_syms();
|
||||||
wallification(1, 0, COLNO-1, ROWNO-1);
|
/* FIXME: Ideally, we want this call to only cover areas of the map
|
||||||
|
* which were not inserted directly by the special level file (see
|
||||||
|
* the insect legs on Baalzebub's level, for instance). Since that
|
||||||
|
* is currently not possible, we overload the corrmaze flag for this
|
||||||
|
* purpose.
|
||||||
|
*/
|
||||||
|
if (!level.flags.corrmaze)
|
||||||
|
wallification(1, 0, COLNO-1, ROWNO-1);
|
||||||
|
|
||||||
count_features();
|
count_features();
|
||||||
|
|
||||||
@@ -5215,4 +5227,8 @@ const char *name;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*sp_lev.c*/
|
/*sp_lev.c*/
|
||||||
|
|||||||
+14
-3
@@ -411,8 +411,8 @@ int
|
|||||||
study_book(spellbook)
|
study_book(spellbook)
|
||||||
register struct obj *spellbook;
|
register struct obj *spellbook;
|
||||||
{
|
{
|
||||||
register int booktype = spellbook->otyp;
|
int booktype = spellbook->otyp;
|
||||||
register boolean confused = (Confusion != 0);
|
boolean confused = (Confusion != 0);
|
||||||
boolean too_hard = FALSE;
|
boolean too_hard = FALSE;
|
||||||
|
|
||||||
/* attempting to read dull book may make hero fall asleep */
|
/* attempting to read dull book may make hero fall asleep */
|
||||||
@@ -440,7 +440,8 @@ register struct obj *spellbook;
|
|||||||
/* handle the sequence: start reading, get interrupted,
|
/* handle the sequence: start reading, get interrupted,
|
||||||
have context.spbook.book become erased somehow, resume reading it */
|
have context.spbook.book become erased somehow, resume reading it */
|
||||||
booktype != SPE_BLANK_PAPER) {
|
booktype != SPE_BLANK_PAPER) {
|
||||||
You("continue your efforts to memorize the spell.");
|
You("continue your efforts to %s.", (booktype == SPE_NOVEL) ?
|
||||||
|
"read the novel" : "memorize the spell");
|
||||||
} else {
|
} else {
|
||||||
/* KMH -- Simplified this code */
|
/* KMH -- Simplified this code */
|
||||||
if (booktype == SPE_BLANK_PAPER) {
|
if (booktype == SPE_BLANK_PAPER) {
|
||||||
@@ -448,6 +449,16 @@ register struct obj *spellbook;
|
|||||||
makeknown(booktype);
|
makeknown(booktype);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 3.6.0 tribute */
|
||||||
|
if (booktype == SPE_NOVEL) {
|
||||||
|
/* Obtain current Terry Pratchett book
|
||||||
|
title for the current game. */
|
||||||
|
const char *tribtitle = noveltitle(&spellbook->novelidx);
|
||||||
|
read_tribute("books", tribtitle, 0);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
switch (objects[booktype].oc_level) {
|
switch (objects[booktype].oc_level) {
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ sys_early_init()
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
sysopt.check_save_uid = 1;
|
||||||
sysopt.seduce = 1; /* if it's compiled in, default to on */
|
sysopt.seduce = 1; /* if it's compiled in, default to on */
|
||||||
sysopt_seduce_set(sysopt.seduce);
|
sysopt_seduce_set(sysopt.seduce);
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 trap.c $NHDT-Date: 1427934551 2015/04/02 00:29:11 $ $NHDT-Branch: master $:$NHDT-Revision: 1.223 $ */
|
/* NetHack 3.5 trap.c $NHDT-Date: 1428207616 2015/04/05 04:20:16 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.224 $ */
|
||||||
/* NetHack 3.5 trap.c $Date: 2013/03/14 01:58:21 $ $Revision: 1.179 $ */
|
/* NetHack 3.5 trap.c $Date: 2013/03/14 01:58:21 $ $Revision: 1.179 $ */
|
||||||
/* 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. */
|
||||||
@@ -2215,7 +2215,7 @@ glovecheck: target = which_armor(mtmp, W_ARMG);
|
|||||||
(void) destroy_mitem(mtmp, SPBOOK_CLASS, AD_FIRE);
|
(void) destroy_mitem(mtmp, SPBOOK_CLASS, AD_FIRE);
|
||||||
(void) destroy_mitem(mtmp, POTION_CLASS, AD_FIRE);
|
(void) destroy_mitem(mtmp, POTION_CLASS, AD_FIRE);
|
||||||
}
|
}
|
||||||
if (burn_floor_paper(mtmp->mx, mtmp->my, see_it, FALSE) &&
|
if (burn_floor_objects(mtmp->mx, mtmp->my, see_it, FALSE) &&
|
||||||
!see_it && distu(mtmp->mx, mtmp->my) <= 3*3)
|
!see_it && distu(mtmp->mx, mtmp->my) <= 3*3)
|
||||||
You("smell smoke.");
|
You("smell smoke.");
|
||||||
if (is_ice(mtmp->mx,mtmp->my))
|
if (is_ice(mtmp->mx,mtmp->my))
|
||||||
@@ -2853,7 +2853,7 @@ struct obj *box; /* null for floor trap */
|
|||||||
boolean see_it = !Blind;
|
boolean see_it = !Blind;
|
||||||
int num, alt;
|
int num, alt;
|
||||||
|
|
||||||
/* Bug: for box case, the equivalent of burn_floor_paper() ought
|
/* Bug: for box case, the equivalent of burn_floor_objects() ought
|
||||||
* to be done upon its contents.
|
* to be done upon its contents.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -2898,7 +2898,7 @@ struct obj *box; /* null for floor trap */
|
|||||||
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
||||||
destroy_item(POTION_CLASS, AD_FIRE);
|
destroy_item(POTION_CLASS, AD_FIRE);
|
||||||
}
|
}
|
||||||
if (!box && burn_floor_paper(u.ux, u.uy, see_it, TRUE) && !see_it)
|
if (!box && burn_floor_objects(u.ux, u.uy, see_it, TRUE) && !see_it)
|
||||||
You("smell paper burning.");
|
You("smell paper burning.");
|
||||||
if (is_ice(u.ux, u.uy))
|
if (is_ice(u.ux, u.uy))
|
||||||
melt_ice(u.ux, u.uy, (char *)0);
|
melt_ice(u.ux, u.uy, (char *)0);
|
||||||
@@ -3206,6 +3206,10 @@ boolean force;
|
|||||||
pline("Steam rises from %s.", the(xname(obj)));
|
pline("Steam rises from %s.", the(xname(obj)));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (obj->otyp == SPE_NOVEL) {
|
||||||
|
obj->novelidx = 0;
|
||||||
|
free_oname(obj);
|
||||||
|
}
|
||||||
obj->otyp = SPE_BLANK_PAPER;
|
obj->otyp = SPE_BLANK_PAPER;
|
||||||
obj->dknown = 0;
|
obj->dknown = 0;
|
||||||
if (carried(obj))
|
if (carried(obj))
|
||||||
|
|||||||
@@ -741,6 +741,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
|||||||
case EXPENSIVE_CAMERA:
|
case EXPENSIVE_CAMERA:
|
||||||
You("succeed in destroying %s. Congratulations!",
|
You("succeed in destroying %s. Congratulations!",
|
||||||
ysimple_name(obj));
|
ysimple_name(obj));
|
||||||
|
release_camera_demon(obj, u.ux, u.uy);
|
||||||
useup(obj);
|
useup(obj);
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|||||||
+20
-32
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 vision.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
/* NetHack 3.5 vision.c $NHDT-Date: 1426449474 2015/03/15 19:57:54 $ $NHDT-Branch: derek-farming $:$NHDT-Revision: 1.14 $ */
|
||||||
/* NetHack 3.5 vision.c $Date: 2009/05/06 10:48:10 $ $Revision: 1.12 $ */
|
/* NetHack 3.5 vision.c $Date: 2009/05/06 10:48:10 $ $Revision: 1.12 $ */
|
||||||
/* SCCS Id: @(#)vision.c 3.5 2007/11/05 */
|
/* SCCS Id: @(#)vision.c 3.5 2007/11/05 */
|
||||||
/* Copyright (c) Dean Luick, with acknowledgements to Dave Cohrs, 1990. */
|
/* Copyright (c) Dean Luick, with acknowledgements to Dave Cohrs, 1990. */
|
||||||
@@ -499,7 +499,7 @@ vision_recalc(control)
|
|||||||
char *next_rmin; /* min pointer for the new array */
|
char *next_rmin; /* min pointer for the new array */
|
||||||
char *next_rmax; /* max pointer for the new array */
|
char *next_rmax; /* max pointer for the new array */
|
||||||
char *ranges; /* circle ranges -- used for xray & night vision */
|
char *ranges; /* circle ranges -- used for xray & night vision */
|
||||||
int row; /* row counter (outer loop) */
|
int row = 0; /* row counter (outer loop) */
|
||||||
int start, stop; /* inner loop starting/stopping index */
|
int start, stop; /* inner loop starting/stopping index */
|
||||||
int dx, dy; /* one step from a lit door or lit wall (see below) */
|
int dx, dy; /* one step from a lit door or lit wall (see below) */
|
||||||
register int col; /* inner loop counter */
|
register int col; /* inner loop counter */
|
||||||
@@ -513,10 +513,6 @@ vision_recalc(control)
|
|||||||
vision_full_recalc = 0; /* reset flag */
|
vision_full_recalc = 0; /* reset flag */
|
||||||
if (in_mklev || !iflags.vision_inited) return;
|
if (in_mklev || !iflags.vision_inited) return;
|
||||||
|
|
||||||
#ifdef GCC_WARN
|
|
||||||
row = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Either the light sources have been taken care of, or we must
|
* Either the light sources have been taken care of, or we must
|
||||||
* recalculate them here.
|
* recalculate them here.
|
||||||
@@ -1655,18 +1651,15 @@ right_side(row, cb_row, cb_col, fb_row, fb_col, left, right_mark, limits)
|
|||||||
char *limits; /* points at range limit for current row, or NULL */
|
char *limits; /* points at range limit for current row, or NULL */
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
register char *rowp;
|
register char *rowp = NULL;
|
||||||
int hit_stone = 0;
|
int hit_stone = 0;
|
||||||
int left_shadow, right_shadow, loc_right;
|
int left_shadow, right_shadow, loc_right;
|
||||||
int lblock_col; /* local block column (current row) */
|
int lblock_col; /* local block column (current row) */
|
||||||
int nrow, deeper;
|
int nrow, deeper;
|
||||||
char *row_min; /* left most */
|
char *row_min = NULL; /* left most */
|
||||||
char *row_max; /* right most */
|
char *row_max = NULL; /* right most */
|
||||||
int lim_max; /* right most limit of circle */
|
int lim_max; /* right most limit of circle */
|
||||||
|
|
||||||
#ifdef GCC_WARN
|
|
||||||
rowp = 0;
|
|
||||||
#endif
|
|
||||||
nrow = row + step;
|
nrow = row + step;
|
||||||
deeper = good_row(nrow) && (!limits || (*limits >= *(limits+1)));
|
deeper = good_row(nrow) && (!limits || (*limits >= *(limits+1)));
|
||||||
if(!vis_func) {
|
if(!vis_func) {
|
||||||
@@ -1910,18 +1903,15 @@ left_side(row, cb_row, cb_col, fb_row, fb_col, left_mark, right, limits)
|
|||||||
char *limits;
|
char *limits;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
register char *rowp;
|
register char *rowp = NULL;
|
||||||
int hit_stone = 0;
|
int hit_stone = 0;
|
||||||
int left_shadow, right_shadow, loc_left;
|
int left_shadow, right_shadow, loc_left;
|
||||||
int lblock_col; /* local block column (current row) */
|
int lblock_col; /* local block column (current row) */
|
||||||
int nrow, deeper;
|
int nrow, deeper;
|
||||||
char *row_min; /* left most */
|
char *row_min = NULL; /* left most */
|
||||||
char *row_max; /* right most */
|
char *row_max = NULL; /* right most */
|
||||||
int lim_min;
|
int lim_min;
|
||||||
|
|
||||||
#ifdef GCC_WARN
|
|
||||||
rowp = 0;
|
|
||||||
#endif
|
|
||||||
nrow = row + step;
|
nrow = row + step;
|
||||||
deeper = good_row(nrow) && (!limits || (*limits >= *(limits+1)));
|
deeper = good_row(nrow) && (!limits || (*limits >= *(limits+1)));
|
||||||
if(!vis_func) {
|
if(!vis_func) {
|
||||||
@@ -2192,20 +2182,17 @@ right_side(row, left, right_mark, limits)
|
|||||||
int right_mark; /* last (right side) visible spot on prev row */
|
int right_mark; /* last (right side) visible spot on prev row */
|
||||||
char *limits; /* points at range limit for current row, or NULL */
|
char *limits; /* points at range limit for current row, or NULL */
|
||||||
{
|
{
|
||||||
int right; /* right limit of "could see" */
|
int right; /* right limit of "could see" */
|
||||||
int right_edge; /* right edge of an opening */
|
int right_edge; /* right edge of an opening */
|
||||||
int nrow; /* new row (calculate once) */
|
int nrow; /* new row (calculate once) */
|
||||||
int deeper; /* if TRUE, call self as needed */
|
int deeper; /* if TRUE, call self as needed */
|
||||||
int result; /* set by q?_path() */
|
int result; /* set by q?_path() */
|
||||||
register int i; /* loop counter */
|
register int i; /* loop counter */
|
||||||
register char *rowp = NULL; /* row optimization */
|
register char *rowp = NULL; /* row optimization */
|
||||||
char *row_min = NULL; /* left most [used by macro set_min()] */
|
char *row_min = NULL; /* left most [used by macro set_min()] */
|
||||||
char *row_max = NULL; /* right most [used by macro set_max()] */
|
char *row_max = NULL; /* right most [used by macro set_max()] */
|
||||||
int lim_max; /* right most limit of circle */
|
int lim_max; /* right most limit of circle */
|
||||||
|
|
||||||
#ifdef GCC_WARN
|
|
||||||
rowp = row_min = row_max = 0;
|
|
||||||
#endif
|
|
||||||
nrow = row + step;
|
nrow = row + step;
|
||||||
/*
|
/*
|
||||||
* Can go deeper if the row is in bounds and the next row is within
|
* Can go deeper if the row is in bounds and the next row is within
|
||||||
@@ -2372,11 +2359,12 @@ left_side(row, left_mark, right, limits)
|
|||||||
int row, left_mark, right;
|
int row, left_mark, right;
|
||||||
char *limits;
|
char *limits;
|
||||||
{
|
{
|
||||||
int left, left_edge, nrow, deeper, result;
|
int left, left_edge, nrow, deeper, result;
|
||||||
register int i;
|
register int i;
|
||||||
register char *rowp = NULL;
|
register char *rowp = NULL;
|
||||||
char *row_min = NULL, *row_max = NULL;
|
char *row_min = NULL;
|
||||||
int lim_min;
|
char *row_max = NULL;
|
||||||
|
int lim_min;
|
||||||
|
|
||||||
#ifdef GCC_WARN
|
#ifdef GCC_WARN
|
||||||
rowp = row_min = row_max = 0;
|
rowp = row_min = row_max = 0;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 zap.c $NHDT-Date: 1427782839 2015/03/31 06:20:39 $ $NHDT-Branch: master $:$NHDT-Revision: 1.200 $ */
|
/* NetHack 3.5 zap.c $NHDT-Date: 1428207622 2015/04/05 04:20:22 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.215 $ */
|
||||||
/* NetHack 3.5 zap.c $Date: 2013/11/05 00:57:56 $ $Revision: 1.183 $ */
|
/* NetHack 3.5 zap.c $Date: 2013/11/05 00:57:56 $ $Revision: 1.183 $ */
|
||||||
/* 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. */
|
||||||
@@ -956,7 +956,9 @@ register struct obj *obj;
|
|||||||
obj->spe = 0;
|
obj->spe = 0;
|
||||||
break;
|
break;
|
||||||
case SPBOOK_CLASS:
|
case SPBOOK_CLASS:
|
||||||
if (otyp != SPE_CANCELLATION && otyp != SPE_BOOK_OF_THE_DEAD) {
|
if (otyp != SPE_CANCELLATION &&
|
||||||
|
otyp != SPE_NOVEL &&
|
||||||
|
otyp != SPE_BOOK_OF_THE_DEAD) {
|
||||||
costly_alteration(obj, COST_CANCEL);
|
costly_alteration(obj, COST_CANCEL);
|
||||||
obj->otyp = SPE_BLANK_PAPER;
|
obj->otyp = SPE_BLANK_PAPER;
|
||||||
}
|
}
|
||||||
@@ -2110,18 +2112,19 @@ boolean ordinary;
|
|||||||
case FIRE_HORN:
|
case FIRE_HORN:
|
||||||
learn_it = TRUE;
|
learn_it = TRUE;
|
||||||
if (Fire_resistance) {
|
if (Fire_resistance) {
|
||||||
shieldeff(u.ux, u.uy);
|
shieldeff(u.ux, u.uy);
|
||||||
You_feel("rather warm.");
|
You_feel("rather warm.");
|
||||||
ugolemeffects(AD_FIRE, d(12,6));
|
ugolemeffects(AD_FIRE, d(12,6));
|
||||||
} else {
|
} else {
|
||||||
pline("You've set yourself afire!");
|
pline("You've set yourself afire!");
|
||||||
damage = d(12,6);
|
damage = d(12,6);
|
||||||
}
|
}
|
||||||
burn_away_slime();
|
burn_away_slime();
|
||||||
(void) burnarmor(&youmonst);
|
(void) burnarmor(&youmonst);
|
||||||
destroy_item(SCROLL_CLASS, AD_FIRE);
|
destroy_item(SCROLL_CLASS, AD_FIRE);
|
||||||
destroy_item(POTION_CLASS, AD_FIRE);
|
destroy_item(POTION_CLASS, AD_FIRE);
|
||||||
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
||||||
|
destroy_item(FOOD_CLASS, AD_FIRE); /* only slime for now */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WAN_COLD:
|
case WAN_COLD:
|
||||||
@@ -3327,6 +3330,7 @@ struct obj **ootmp; /* to return worn armor for caller to disintegrate */
|
|||||||
if (!rn2(3)) (void)destroy_mitem(mon, POTION_CLASS, AD_FIRE);
|
if (!rn2(3)) (void)destroy_mitem(mon, POTION_CLASS, AD_FIRE);
|
||||||
if (!rn2(3)) (void)destroy_mitem(mon, SCROLL_CLASS, AD_FIRE);
|
if (!rn2(3)) (void)destroy_mitem(mon, SCROLL_CLASS, AD_FIRE);
|
||||||
if (!rn2(5)) (void)destroy_mitem(mon, SPBOOK_CLASS, AD_FIRE);
|
if (!rn2(5)) (void)destroy_mitem(mon, SPBOOK_CLASS, AD_FIRE);
|
||||||
|
destroy_mitem(mon, FOOD_CLASS, AD_FIRE); /* carried slime */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZT_COLD:
|
case ZT_COLD:
|
||||||
@@ -3471,6 +3475,7 @@ xchar sx, sy;
|
|||||||
if (!rn2(3)) destroy_item(POTION_CLASS, AD_FIRE);
|
if (!rn2(3)) destroy_item(POTION_CLASS, AD_FIRE);
|
||||||
if (!rn2(3)) destroy_item(SCROLL_CLASS, AD_FIRE);
|
if (!rn2(3)) destroy_item(SCROLL_CLASS, AD_FIRE);
|
||||||
if (!rn2(5)) destroy_item(SPBOOK_CLASS, AD_FIRE);
|
if (!rn2(5)) destroy_item(SPBOOK_CLASS, AD_FIRE);
|
||||||
|
destroy_item(FOOD_CLASS, AD_FIRE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZT_COLD:
|
case ZT_COLD:
|
||||||
@@ -3567,11 +3572,11 @@ xchar sx, sy;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* burn scrolls and spellbooks on floor at position x,y
|
* burn objects (such as scrolls and spellbooks) on floor
|
||||||
* return the number of scrolls and spellbooks burned
|
* at position x,y; return the number of objects burned
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
burn_floor_paper(x, y, give_feedback, u_caused)
|
burn_floor_objects(x, y, give_feedback, u_caused)
|
||||||
int x, y;
|
int x, y;
|
||||||
boolean give_feedback; /* caller needs to decide about visibility checks */
|
boolean give_feedback; /* caller needs to decide about visibility checks */
|
||||||
boolean u_caused;
|
boolean u_caused;
|
||||||
@@ -3583,37 +3588,39 @@ boolean u_caused;
|
|||||||
|
|
||||||
for (obj = level.objects[x][y]; obj; obj = obj2) {
|
for (obj = level.objects[x][y]; obj; obj = obj2) {
|
||||||
obj2 = obj->nexthere;
|
obj2 = obj->nexthere;
|
||||||
if (obj->oclass == SCROLL_CLASS || obj->oclass == SPBOOK_CLASS) {
|
if (obj->oclass == SCROLL_CLASS || obj->oclass == SPBOOK_CLASS
|
||||||
if (obj->otyp == SCR_FIRE || obj->otyp == SPE_FIREBALL ||
|
|| (obj->oclass == FOOD_CLASS
|
||||||
obj_resists(obj, 2, 100))
|
&& obj->otyp == GLOB_OF_GREEN_SLIME)) {
|
||||||
continue;
|
if (obj->otyp == SCR_FIRE || obj->otyp == SPE_FIREBALL ||
|
||||||
scrquan = obj->quan; /* number present */
|
obj_resists(obj, 2, 100))
|
||||||
delquan = 0L; /* number to destroy */
|
continue;
|
||||||
for (i = scrquan; i > 0L; i--)
|
scrquan = obj->quan; /* number present */
|
||||||
if (!rn2(3)) delquan++;
|
delquan = 0L; /* number to destroy */
|
||||||
if (delquan) {
|
for (i = scrquan; i > 0L; i--)
|
||||||
/* save name before potential delobj() */
|
if (!rn2(3)) delquan++;
|
||||||
if (give_feedback) {
|
if (delquan) {
|
||||||
obj->quan = 1L;
|
/* save name before potential delobj() */
|
||||||
Strcpy(buf1, (x == u.ux && y == u.uy) ?
|
if (give_feedback) {
|
||||||
xname(obj) : distant_name(obj, xname));
|
obj->quan = 1L;
|
||||||
obj->quan = 2L;
|
Strcpy(buf1, (x == u.ux && y == u.uy) ?
|
||||||
Strcpy(buf2, (x == u.ux && y == u.uy) ?
|
xname(obj) : distant_name(obj, xname));
|
||||||
xname(obj) : distant_name(obj, xname));
|
obj->quan = 2L;
|
||||||
obj->quan = scrquan;
|
Strcpy(buf2, (x == u.ux && y == u.uy) ?
|
||||||
}
|
xname(obj) : distant_name(obj, xname));
|
||||||
/* useupf(), which charges, only if hero caused damage */
|
obj->quan = scrquan;
|
||||||
if (u_caused) useupf(obj, delquan);
|
}
|
||||||
else if (delquan < scrquan) obj->quan -= delquan;
|
/* useupf(), which charges, only if hero caused damage */
|
||||||
else delobj(obj);
|
if (u_caused) useupf(obj, delquan);
|
||||||
cnt += delquan;
|
else if (delquan < scrquan) obj->quan -= delquan;
|
||||||
if (give_feedback) {
|
else delobj(obj);
|
||||||
if (delquan > 1L)
|
cnt += delquan;
|
||||||
pline("%ld %s burn.", delquan, buf2);
|
if (give_feedback) {
|
||||||
else
|
if (delquan > 1L)
|
||||||
pline("%s burns.", An(buf1));
|
pline("%ld %s burn.", delquan, buf2);
|
||||||
}
|
else
|
||||||
}
|
pline("%s burns.", An(buf1));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cnt;
|
return cnt;
|
||||||
@@ -4253,7 +4260,7 @@ short exploding_wand_typ;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(OBJ_AT(x, y) && abstype == ZT_FIRE)
|
if(OBJ_AT(x, y) && abstype == ZT_FIRE)
|
||||||
if (burn_floor_paper(x, y, FALSE, type > 0) && couldsee(x, y)) {
|
if (burn_floor_objects(x, y, FALSE, type > 0) && couldsee(x, y)) {
|
||||||
newsym(x,y);
|
newsym(x,y);
|
||||||
You("%s of smoke.",
|
You("%s of smoke.",
|
||||||
!Blind ? "see a puff" : "smell a whiff");
|
!Blind ? "see a puff" : "smell a whiff");
|
||||||
@@ -4363,129 +4370,137 @@ const char * const destroy_strings[][3] = { /* also used in trap.c */
|
|||||||
|
|
||||||
void
|
void
|
||||||
destroy_item(osym, dmgtyp)
|
destroy_item(osym, dmgtyp)
|
||||||
register int osym, dmgtyp;
|
register int osym, dmgtyp;
|
||||||
{
|
{
|
||||||
register struct obj *obj, *obj2;
|
register struct obj *obj, *obj2;
|
||||||
register int dmg, xresist, skip;
|
register int dmg, xresist, skip;
|
||||||
register long i, cnt, quan;
|
register long i, cnt, quan;
|
||||||
register int dindx;
|
register int dindx;
|
||||||
const char *mult;
|
const char *mult;
|
||||||
boolean physical_damage;
|
boolean physical_damage;
|
||||||
|
|
||||||
for(obj = invent; obj; obj = obj2) {
|
for(obj = invent; obj; obj = obj2) {
|
||||||
obj2 = obj->nobj;
|
obj2 = obj->nobj;
|
||||||
physical_damage = FALSE;
|
physical_damage = FALSE;
|
||||||
if(obj->oclass != osym) continue; /* test only objs of type osym */
|
if(obj->oclass != osym) continue; /* test only objs of type osym */
|
||||||
if(obj->oartifact) continue; /* don't destroy artifacts */
|
if(obj->oartifact) continue; /* don't destroy artifacts */
|
||||||
if(obj->in_use && obj->quan == 1L) continue; /* not available */
|
if(obj->in_use && obj->quan == 1L) continue; /* not available */
|
||||||
xresist = skip = 0;
|
xresist = skip = 0;
|
||||||
/* lint suppression */
|
/* lint suppression */
|
||||||
dmg = dindx = 0;
|
dmg = dindx = 0;
|
||||||
quan = 0L;
|
quan = 0L;
|
||||||
|
|
||||||
switch(dmgtyp) {
|
switch(dmgtyp) {
|
||||||
case AD_COLD:
|
case AD_COLD:
|
||||||
if(osym == POTION_CLASS && obj->otyp != POT_OIL) {
|
if(osym == POTION_CLASS && obj->otyp != POT_OIL) {
|
||||||
quan = obj->quan;
|
quan = obj->quan;
|
||||||
dindx = 0;
|
dindx = 0;
|
||||||
dmg = rnd(4);
|
dmg = rnd(4);
|
||||||
} else skip++;
|
} else skip++;
|
||||||
break;
|
break;
|
||||||
case AD_FIRE:
|
case AD_FIRE:
|
||||||
xresist = (Fire_resistance && obj->oclass != POTION_CLASS);
|
xresist = (Fire_resistance
|
||||||
|
&& obj->oclass != POTION_CLASS
|
||||||
|
&& obj->otyp != GLOB_OF_GREEN_SLIME);
|
||||||
|
|
||||||
if (obj->otyp == SCR_FIRE || obj->otyp == SPE_FIREBALL)
|
if (obj->otyp == SCR_FIRE || obj->otyp == SPE_FIREBALL)
|
||||||
skip++;
|
skip++;
|
||||||
if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
|
if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
|
||||||
skip++;
|
skip++;
|
||||||
if (!Blind)
|
if (!Blind)
|
||||||
pline("%s glows a strange %s, but remains intact.",
|
pline("%s glows a strange %s, but remains intact.",
|
||||||
The(xname(obj)), hcolor("dark red"));
|
The(xname(obj)), hcolor("dark red"));
|
||||||
}
|
}
|
||||||
quan = obj->quan;
|
quan = obj->quan;
|
||||||
switch(osym) {
|
switch(osym) {
|
||||||
case POTION_CLASS:
|
case POTION_CLASS:
|
||||||
dindx = (obj->otyp != POT_OIL) ? 1 : 2;
|
dindx = (obj->otyp != POT_OIL) ? 1 : 2;
|
||||||
dmg = rnd(6);
|
dmg = rnd(6);
|
||||||
break;
|
break;
|
||||||
case SCROLL_CLASS:
|
case SCROLL_CLASS:
|
||||||
dindx = 3;
|
dindx = 3;
|
||||||
dmg = 1;
|
dmg = 1;
|
||||||
break;
|
break;
|
||||||
case SPBOOK_CLASS:
|
case SPBOOK_CLASS:
|
||||||
dindx = 4;
|
dindx = 4;
|
||||||
dmg = 1;
|
dmg = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
case FOOD_CLASS:
|
||||||
skip++;
|
if (obj->otyp == GLOB_OF_GREEN_SLIME) {
|
||||||
break;
|
dindx = obj->owt / 20;
|
||||||
}
|
dmg = 1;
|
||||||
break;
|
} else { skip++; }
|
||||||
case AD_ELEC:
|
break;
|
||||||
xresist = (Shock_resistance && obj->oclass != RING_CLASS);
|
default:
|
||||||
quan = obj->quan;
|
skip++;
|
||||||
switch(osym) {
|
break;
|
||||||
case RING_CLASS:
|
}
|
||||||
if(obj->otyp == RIN_SHOCK_RESISTANCE)
|
break;
|
||||||
{ skip++; break; }
|
case AD_ELEC:
|
||||||
dindx = 5;
|
xresist = (Shock_resistance && obj->oclass != RING_CLASS);
|
||||||
dmg = 0;
|
quan = obj->quan;
|
||||||
break;
|
switch(osym) {
|
||||||
case WAND_CLASS:
|
case RING_CLASS:
|
||||||
if(obj->otyp == WAN_LIGHTNING) { skip++; break; }
|
if(obj->otyp == RIN_SHOCK_RESISTANCE)
|
||||||
|
{ skip++; break; }
|
||||||
|
dindx = 5;
|
||||||
|
dmg = 0;
|
||||||
|
break;
|
||||||
|
case WAND_CLASS:
|
||||||
|
if(obj->otyp == WAN_LIGHTNING) { skip++; break; }
|
||||||
#if 0
|
#if 0
|
||||||
if (obj == current_wand) { skip++; break; }
|
if (obj == current_wand) { skip++; break; }
|
||||||
#endif
|
#endif
|
||||||
dindx = 6;
|
dindx = 6;
|
||||||
dmg = rnd(10);
|
dmg = rnd(10);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip++;
|
skip++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip++;
|
skip++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!skip) {
|
if(!skip) {
|
||||||
if (obj->in_use) --quan; /* one will be used up elsewhere */
|
if (obj->in_use) --quan; /* one will be used up elsewhere */
|
||||||
for(i = cnt = 0L; i < quan; i++)
|
for(i = cnt = 0L; i < quan; i++)
|
||||||
if(!rn2(3)) cnt++;
|
if(!rn2(3)) cnt++;
|
||||||
|
|
||||||
if(!cnt) continue;
|
if(!cnt) continue;
|
||||||
mult = (cnt == quan) ? "Your" :
|
mult = (cnt == quan) ? (quan > 1) ? "All of your " : "Your" :
|
||||||
(cnt == 1L) ? "One of your" : "Some of your";
|
(cnt == 1L) ? "One of your" : "Some of your";
|
||||||
pline("%s %s %s!", mult, xname(obj),
|
pline("%s %s %s!", mult, xname(obj),
|
||||||
destroy_strings[dindx][(cnt > 1L)]);
|
destroy_strings[dindx][(cnt > 1L)]);
|
||||||
if(osym == POTION_CLASS && dmgtyp != AD_COLD) {
|
if(osym == POTION_CLASS && dmgtyp != AD_COLD) {
|
||||||
if (!breathless(youmonst.data) || haseyes(youmonst.data))
|
if (!breathless(youmonst.data) || haseyes(youmonst.data))
|
||||||
potionbreathe(obj);
|
potionbreathe(obj);
|
||||||
}
|
}
|
||||||
if (obj->owornmask) {
|
if (obj->owornmask) {
|
||||||
if (obj->owornmask & W_RING) /* ring being worn */
|
if (obj->owornmask & W_RING) /* ring being worn */
|
||||||
Ring_gone(obj);
|
Ring_gone(obj);
|
||||||
else
|
else
|
||||||
setnotworn(obj);
|
setnotworn(obj);
|
||||||
}
|
}
|
||||||
if (obj == current_wand) current_wand = 0; /* destroyed */
|
if (obj == current_wand) current_wand = 0; /* destroyed */
|
||||||
for (i = 0; i < cnt; i++)
|
for (i = 0; i < cnt; i++)
|
||||||
useup(obj);
|
useup(obj);
|
||||||
if(dmg) {
|
if(dmg) {
|
||||||
if(xresist) You("aren't hurt!");
|
if(xresist) You("aren't hurt!");
|
||||||
else {
|
else {
|
||||||
const char *how = destroy_strings[dindx][2];
|
const char *how = destroy_strings[dindx][2];
|
||||||
boolean one = (cnt == 1L);
|
boolean one = (cnt == 1L);
|
||||||
|
|
||||||
if (physical_damage) dmg = Maybe_Half_Phys(dmg);
|
if (physical_damage) dmg = Maybe_Half_Phys(dmg);
|
||||||
losehp(dmg, one ? how : (const char *)makeplural(how),
|
losehp(dmg, one ? how : (const char *)makeplural(how),
|
||||||
one ? KILLED_BY_AN : KILLED_BY);
|
one ? KILLED_BY_AN : KILLED_BY);
|
||||||
exercise(A_STR, FALSE);
|
exercise(A_STR, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -4544,6 +4559,12 @@ int osym, dmgtyp;
|
|||||||
dindx = 4;
|
dindx = 4;
|
||||||
tmp++;
|
tmp++;
|
||||||
break;
|
break;
|
||||||
|
case FOOD_CLASS:
|
||||||
|
if (obj->otyp == GLOB_OF_GREEN_SLIME) {
|
||||||
|
dindx = obj->owt / 20;
|
||||||
|
tmp++;
|
||||||
|
} else { skip++; }
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
skip++;
|
skip++;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/* NetHack 3.5 cppregex.cpp $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||||
|
/* Copyright (c) Sean Hunt 2015. */
|
||||||
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
/* nhregex interface documented in sys/share/posixregex.c */
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <hack.h>
|
||||||
|
|
||||||
|
struct nhregex {
|
||||||
|
std::unique_ptr<std::regex> re;
|
||||||
|
std::unique_ptr<std::regex_error> err;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct nhregex *regex_init(void) {
|
||||||
|
return new nhregex;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean regex_compile(const char *s, struct nhregex *re) {
|
||||||
|
if (!re)
|
||||||
|
return FALSE;
|
||||||
|
try {
|
||||||
|
re->re.reset(new std::regex(s, std::regex::extended | std::regex::nosubs | std::regex::optimize));
|
||||||
|
re->err.reset(nullptr);
|
||||||
|
return TRUE;
|
||||||
|
} catch (const std::regex_error& err) {
|
||||||
|
re->err.reset(new std::regex_error(err));
|
||||||
|
re->re.reset(nullptr);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *regex_error_desc(struct nhregex *re) {
|
||||||
|
if (re->err)
|
||||||
|
return re->err->what();
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean regex_match(const char *s, struct nhregex *re) {
|
||||||
|
if (!re->re)
|
||||||
|
return false;
|
||||||
|
try {
|
||||||
|
return regex_search(s, *re->re, std::regex_constants::match_any);
|
||||||
|
} catch (const std::regex_error& err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void regex_free(struct nhregex *re) {
|
||||||
|
delete re;
|
||||||
|
}
|
||||||
|
}
|
||||||
+806
-816
File diff suppressed because it is too large
Load Diff
+1228
-1126
File diff suppressed because it is too large
Load Diff
+441
-414
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,92 @@
|
|||||||
|
/* NetHack 3.5 posixregex.c $NHDT-Date: 1428590280 2015/04/09 14:38:00 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.0 $ */
|
||||||
|
/* Copyright (c) Sean Hunt 2015. */
|
||||||
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
|
#include <hack.h>
|
||||||
|
|
||||||
|
#include <regex.h>
|
||||||
|
|
||||||
|
/* The nhregex interface is implemented by several source files. The
|
||||||
|
* file to be used can be linked in by the build.
|
||||||
|
*
|
||||||
|
* The regex standard implemented should be POSIX extended regular
|
||||||
|
* expressions, see:
|
||||||
|
* http://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap09.html
|
||||||
|
* If an implementation uses an alternate expression format, this should
|
||||||
|
* be clearly noted; this will result in incompatibility of config files
|
||||||
|
* when NetHack is compiled with that implementation.
|
||||||
|
*
|
||||||
|
* struct nhregex
|
||||||
|
* The nhregex structure is an opaque structure type containing the
|
||||||
|
* information about a compiled regular expression.
|
||||||
|
*
|
||||||
|
* struct nhregex *regex_init(void)
|
||||||
|
* Used to create a new instance of the nhregex structure. It is
|
||||||
|
* uninitialized and can only safely be passed to regex_compile.
|
||||||
|
*
|
||||||
|
* boolean regex_compile(const char *s, struct nhregex *re)
|
||||||
|
* Used to compile s into a regex and store it in re. Returns TRUE if
|
||||||
|
* successful and FALSE otherwise. re is invalidated regardless of
|
||||||
|
* success.
|
||||||
|
*
|
||||||
|
* const char *regex_error_desc(struct nhregex *re)
|
||||||
|
* Used to retrieve an error description from an error created involving
|
||||||
|
* re. Returns NULL if no description can be retrieved. The returned
|
||||||
|
* string may be a static buffer and so is only valid until the next
|
||||||
|
* call to regex_error_desc.
|
||||||
|
*
|
||||||
|
* boolean regex_match(const char *s, struct nhregex *re)
|
||||||
|
* Used to determine if s (or any substring) matches the regex compiled
|
||||||
|
* into re. Only valid if the most recent call to regex_compile on re
|
||||||
|
* succeeded.
|
||||||
|
*
|
||||||
|
* void regex_free(struct nhregex *re)
|
||||||
|
* Deallocate a regex object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct nhregex {
|
||||||
|
regex_t re;
|
||||||
|
int err;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct nhregex *regex_init() {
|
||||||
|
return malloc (sizeof (struct nhregex));
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean regex_compile(const char *s, struct nhregex *re) {
|
||||||
|
if (!re)
|
||||||
|
return FALSE;
|
||||||
|
if ((re->err = regcomp(&re->re, s, REG_EXTENDED | REG_NOSUB)))
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *regex_error_desc(struct nhregex *re) {
|
||||||
|
static char buf[BUFSZ];
|
||||||
|
|
||||||
|
if (!re || !re->err)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* FIXME: Using a static buffer here is not ideal, but avoids memory
|
||||||
|
* leaks. Consider the allocation more carefully. */
|
||||||
|
regerror(re->err, &re->re, buf, BUFSZ);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean regex_match(const char *s, struct nhregex *re) {
|
||||||
|
if (!re)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
int result;
|
||||||
|
if ((result = regexec(&re->re, s, 0, NULL, 0))) {
|
||||||
|
if (result != REG_NOMATCH)
|
||||||
|
re->err = result;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void regex_free(struct nhregex *re) {
|
||||||
|
free(re);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# NetHack Makefile.
|
# NetHack Makefile.
|
||||||
# NetHack 3.5 Makefile.src $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
|
# NetHack 3.5 Makefile.src $NHDT-Date: 1428590253 2015/04/09 14:37:33 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.38 $
|
||||||
# NetHack 3.5 Makefile.src $Date: 2012/01/20 03:41:33 $ $Revision: 1.37 $
|
# NetHack 3.5 Makefile.src $Date: 2012/01/20 03:41:33 $ $Revision: 1.37 $
|
||||||
|
|
||||||
# Root of source tree:
|
# Root of source tree:
|
||||||
@@ -338,7 +338,7 @@ HACKCSRC = allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \
|
|||||||
|
|
||||||
# all operating-system-dependent .c (for dependencies and such)
|
# all operating-system-dependent .c (for dependencies and such)
|
||||||
SYSCSRC = ../sys/atari/tos.c ../sys/share/pcmain.c ../sys/share/pcsys.c \
|
SYSCSRC = ../sys/atari/tos.c ../sys/share/pcmain.c ../sys/share/pcsys.c \
|
||||||
../sys/share/pctty.c ../sys/share/pcunix.c ../sys/share/random.c \
|
../sys/share/pctty.c ../sys/share/pcunix.c ../sys/share/posixregex.c ../sys/share/random.c \
|
||||||
../sys/share/ioctl.c ../sys/share/unixtty.c ../sys/unix/unixmain.c \
|
../sys/share/ioctl.c ../sys/share/unixtty.c ../sys/unix/unixmain.c \
|
||||||
../sys/unix/unixunix.c ../sys/unix/unixres.c ../sys/be/bemain.c
|
../sys/unix/unixunix.c ../sys/unix/unixres.c ../sys/be/bemain.c
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ HOBJ = $(FIRSTOBJ) allmain.o alloc.o apply.o artifact.o attrib.o ball.o \
|
|||||||
minion.o mklev.o mkmap.o \
|
minion.o mklev.o mkmap.o \
|
||||||
mkmaze.o mkobj.o mkroom.o mon.o mondata.o monmove.o monstr.o \
|
mkmaze.o mkobj.o mkroom.o mon.o mondata.o monmove.o monstr.o \
|
||||||
mplayer.o mthrowu.o muse.o music.o o_init.o objnam.o options.o \
|
mplayer.o mthrowu.o muse.o music.o o_init.o objnam.o options.o \
|
||||||
pager.o pickup.o pline.o polyself.o potion.o pray.o priest.o \
|
pager.o pickup.o pline.o polyself.o posixregex.o potion.o pray.o priest.o \
|
||||||
quest.o questpgr.o read.o rect.o region.o restore.o rip.o rnd.o \
|
quest.o questpgr.o read.o rect.o region.o restore.o rip.o rnd.o \
|
||||||
role.o rumors.o save.o shk.o shknam.o sit.o sounds.o sp_lev.o spell.o \
|
role.o rumors.o save.o shk.o shknam.o sit.o sounds.o sp_lev.o spell.o \
|
||||||
sys.o \
|
sys.o \
|
||||||
@@ -603,6 +603,8 @@ random.o: ../sys/share/random.c $(HACK_H)
|
|||||||
$(CC) $(CFLAGS) -c ../sys/share/random.c
|
$(CC) $(CFLAGS) -c ../sys/share/random.c
|
||||||
ioctl.o: ../sys/share/ioctl.c $(HACK_H) ../include/tcap.h
|
ioctl.o: ../sys/share/ioctl.c $(HACK_H) ../include/tcap.h
|
||||||
$(CC) $(CFLAGS) -c ../sys/share/ioctl.c
|
$(CC) $(CFLAGS) -c ../sys/share/ioctl.c
|
||||||
|
posixregex.o: ../sys/share/posixregex.c $(HACK_H)
|
||||||
|
$(CC) $(CFLAGS) -c ../sys/share/posixregex.c
|
||||||
unixtty.o: ../sys/share/unixtty.c $(HACK_H)
|
unixtty.o: ../sys/share/unixtty.c $(HACK_H)
|
||||||
$(CC) $(CFLAGS) -c ../sys/share/unixtty.c
|
$(CC) $(CFLAGS) -c ../sys/share/unixtty.c
|
||||||
unixmain.o: ../sys/unix/unixmain.c $(HACK_H) ../include/dlb.h
|
unixmain.o: ../sys/unix/unixmain.c $(HACK_H) ../include/dlb.h
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# NetHack Makefile.
|
# NetHack Makefile.
|
||||||
# NetHack 3.5 Makefile.top $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
|
# NetHack 3.5 Makefile.top $NHDT-Date: 1428453876 2015/04/08 00:44:36 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.25 $
|
||||||
# NetHack 3.5 Makefile.top $Date: 2012/01/10 17:47:30 $ $Revision: 1.19 $
|
# NetHack 3.5 Makefile.top $Date: 2012/01/10 17:47:30 $ $Revision: 1.19 $
|
||||||
|
|
||||||
# Root of source tree:
|
# Root of source tree:
|
||||||
@@ -87,7 +87,7 @@ SPEC_LEVS = asmodeus.lev baalz.lev bigrm-*.lev castle.lev fakewiz?.lev \
|
|||||||
QUEST_LEVS = ???-goal.lev ???-fil?.lev ???-loca.lev ???-strt.lev
|
QUEST_LEVS = ???-goal.lev ???-fil?.lev ???-loca.lev ???-strt.lev
|
||||||
|
|
||||||
DATNODLB = $(VARDATND) license
|
DATNODLB = $(VARDATND) license
|
||||||
DATDLB = $(DATHELP) dungeon $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD)
|
DATDLB = $(DATHELP) dungeon tribute $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD)
|
||||||
DAT = $(DATNODLB) $(DATDLB)
|
DAT = $(DATNODLB) $(DATDLB)
|
||||||
|
|
||||||
$(GAME):
|
$(GAME):
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ MAXPLAYERS=10
|
|||||||
# Uncomment the next line to disable the SEDUCE option.
|
# Uncomment the next line to disable the SEDUCE option.
|
||||||
#SEDUCE=0
|
#SEDUCE=0
|
||||||
|
|
||||||
|
# Uncomment to disable savefile UID checking.
|
||||||
|
#CHECK_SAVE_UID=0
|
||||||
|
|
||||||
# Record (high score) file options.
|
# Record (high score) file options.
|
||||||
# CAUTION: changing these after people have started playing games can
|
# CAUTION: changing these after people have started playing games can
|
||||||
# lead to lost high scores!
|
# lead to lost high scores!
|
||||||
|
|||||||
+10
-4
@@ -1,4 +1,4 @@
|
|||||||
# NetHack 3.5 Makefile.msc $NHDT-Date: 1426967393 2015/03/21 19:49:53 $ $NHDT-Branch: master $:$NHDT-Revision: 1.72 $ */
|
# NetHack 3.5 Makefile.msc $NHDT-Date: 1428855415 2015/04/12 16:16:55 $ $NHDT-Branch: master $:$NHDT-Revision: 1.80 $ */
|
||||||
# Copyright (c) NetHack PC Development Team 1993-2015
|
# Copyright (c) NetHack PC Development Team 1993-2015
|
||||||
#
|
#
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
@@ -403,6 +403,9 @@ DLB =
|
|||||||
{$(SSYS)}.c{$(OBJ)}.o:
|
{$(SSYS)}.c{$(OBJ)}.o:
|
||||||
@$(CC) $(cflagsUtil) -Fo$@ $<
|
@$(CC) $(cflagsUtil) -Fo$@ $<
|
||||||
|
|
||||||
|
{$(SSYS)}.cpp{$(OBJ)}.o:
|
||||||
|
@$(CC) $(cflagsUtil) -Fo$@ $<
|
||||||
|
|
||||||
#==========================================
|
#==========================================
|
||||||
# Rules for files in sys\winnt
|
# Rules for files in sys\winnt
|
||||||
#==========================================
|
#==========================================
|
||||||
@@ -528,9 +531,10 @@ VOBJ24 = $(O)track.o $(O)trap.o $(O)u_init.o $(O)uhitm.o
|
|||||||
VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o
|
VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o
|
||||||
VOBJ26 = $(O)were.o $(O)wield.o $(O)windows.o $(O)wizard.o
|
VOBJ26 = $(O)were.o $(O)wield.o $(O)windows.o $(O)wizard.o
|
||||||
VOBJ27 = $(O)worm.o $(O)worn.o $(O)write.o $(O)zap.o
|
VOBJ27 = $(O)worm.o $(O)worn.o $(O)write.o $(O)zap.o
|
||||||
|
|
||||||
DLBOBJ = $(O)dlb.o
|
DLBOBJ = $(O)dlb.o
|
||||||
|
|
||||||
|
REGEX = $(O)cppregex.o
|
||||||
|
|
||||||
TTYOBJ = $(O)topl.o $(O)getline.o $(O)wintty.o
|
TTYOBJ = $(O)topl.o $(O)getline.o $(O)wintty.o
|
||||||
|
|
||||||
SOBJ = $(O)winnt.o $(O)pcsys.o $(O)pcunix.o \
|
SOBJ = $(O)winnt.o $(O)pcsys.o $(O)pcunix.o \
|
||||||
@@ -541,7 +545,7 @@ OBJS = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
|
|||||||
$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
|
$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
|
||||||
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
|
$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
|
||||||
$(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
|
$(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
|
||||||
$(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29)
|
$(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29) $(REGEX)
|
||||||
|
|
||||||
WINPOBJ = $(WINPORT)
|
WINPOBJ = $(WINPORT)
|
||||||
|
|
||||||
@@ -622,6 +626,7 @@ all : install
|
|||||||
install: envchk $(GAME) $(O)install.tag
|
install: envchk $(GAME) $(O)install.tag
|
||||||
@echo Done.
|
@echo Done.
|
||||||
|
|
||||||
|
|
||||||
$(O)install.tag: $(DAT)\data $(DAT)\rumors $(DAT)\dungeon \
|
$(O)install.tag: $(DAT)\data $(DAT)\rumors $(DAT)\dungeon \
|
||||||
$(DAT)\oracles $(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
|
$(DAT)\oracles $(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
|
||||||
! IF ("$(USE_DLB)"=="Y")
|
! IF ("$(USE_DLB)"=="Y")
|
||||||
@@ -1042,7 +1047,7 @@ $(DAT)\porthelp: $(MSWSYS)\porthelp
|
|||||||
nhdat: $(U)dlb_main.exe $(DAT)\data $(DAT)\oracles $(OPTIONS_FILE) \
|
nhdat: $(U)dlb_main.exe $(DAT)\data $(DAT)\oracles $(OPTIONS_FILE) \
|
||||||
$(DAT)\quest.dat $(DAT)\rumors $(DAT)\help $(DAT)\hh $(DAT)\cmdhelp \
|
$(DAT)\quest.dat $(DAT)\rumors $(DAT)\help $(DAT)\hh $(DAT)\cmdhelp \
|
||||||
$(DAT)\history $(DAT)\opthelp $(DAT)\wizhelp $(DAT)\dungeon $(DAT)\porthelp \
|
$(DAT)\history $(DAT)\opthelp $(DAT)\wizhelp $(DAT)\dungeon $(DAT)\porthelp \
|
||||||
$(DAT)\license $(DAT)\engrave $(DAT)\epitaph $(DAT)\bogusmon $(O)sp_lev.tag
|
$(DAT)\license $(DAT)\engrave $(DAT)\epitaph $(DAT)\bogusmon $(DAT)\tribute $(O)sp_lev.tag
|
||||||
cd $(DAT)
|
cd $(DAT)
|
||||||
echo data >dlb.lst
|
echo data >dlb.lst
|
||||||
echo oracles >>dlb.lst
|
echo oracles >>dlb.lst
|
||||||
@@ -1055,6 +1060,7 @@ nhdat: $(U)dlb_main.exe $(DAT)\data $(DAT)\oracles $(OPTIONS_FILE) \
|
|||||||
echo engrave >>dlb.lst
|
echo engrave >>dlb.lst
|
||||||
echo epitaph >>dlb.lst
|
echo epitaph >>dlb.lst
|
||||||
echo bogusmon >>dlb.lst
|
echo bogusmon >>dlb.lst
|
||||||
|
echo tribute >>dlb.lst
|
||||||
echo help >>dlb.lst
|
echo help >>dlb.lst
|
||||||
echo hh >>dlb.lst
|
echo hh >>dlb.lst
|
||||||
echo cmdhelp >>dlb.lst
|
echo cmdhelp >>dlb.lst
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ lev_yacc.c
|
|||||||
tile2x11
|
tile2x11
|
||||||
lev_comp
|
lev_comp
|
||||||
tileedit
|
tileedit
|
||||||
|
tile2bmp
|
||||||
dlb
|
dlb
|
||||||
recover
|
recover
|
||||||
|
|||||||
+1
-1
@@ -112,7 +112,7 @@ FILE *orig_yyin = NULL;
|
|||||||
map_cnt = 0;
|
map_cnt = 0;
|
||||||
return MAP_ID;
|
return MAP_ID;
|
||||||
}
|
}
|
||||||
<MAPC>[-|}{+xABCISHKMPLWTtFYU\\#. 0123456789]*\r?\n {
|
<MAPC>[-|}{+xABCISHKPLWTF\\#. 0123456789]*\r?\n {
|
||||||
int len = yyleng;
|
int len = yyleng;
|
||||||
savetoken(yytext);
|
savetoken(yytext);
|
||||||
/* convert \r\n to \n */
|
/* convert \r\n to \n */
|
||||||
|
|||||||
+4
-4
@@ -1186,15 +1186,15 @@ char c;
|
|||||||
case 'H' : return(SCORR);
|
case 'H' : return(SCORR);
|
||||||
case '{' : return(FOUNTAIN);
|
case '{' : return(FOUNTAIN);
|
||||||
case '\\' : return(THRONE);
|
case '\\' : return(THRONE);
|
||||||
case 'K' :
|
case 'K' : return(SINK);
|
||||||
return(SINK);
|
|
||||||
case '}' : return(MOAT);
|
case '}' : return(MOAT);
|
||||||
case 'P' : return(POOL);
|
case 'P' : return(POOL);
|
||||||
case 'L' : return(LAVAPOOL);
|
case 'L' : return(LAVAPOOL);
|
||||||
case 'I' : return(ICE);
|
case 'I' : return(ICE);
|
||||||
case 'W' : return(WATER);
|
case 'W' : return(WATER);
|
||||||
case 'T' : return (TREE);
|
case 'T' : return (TREE);
|
||||||
case 'F' : return (IRONBARS); /* Fe = iron */
|
case 'F' : return (IRONBARS); /* Fe = iron */
|
||||||
|
case 'x' : return(MAX_TYPE); /* "see-through" */
|
||||||
}
|
}
|
||||||
return(INVALID_TYPE);
|
return(INVALID_TYPE);
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-12
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 winmenu.c $NHDT-Date: 1427881480 2015/04/01 09:44:40 $ $NHDT-Branch: master $:$NHDT-Revision: 1.5 $ */
|
/* NetHack 3.5 winmenu.c $NHDT-Date: 1428828477 2015/04/12 08:47:57 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||||
/* NetHack 3.5 winmenu.c $Date: 2009/05/06 10:55:53 $ $Revision: 1.5 $ */
|
/* NetHack 3.5 winmenu.c $Date: 2009/05/06 10:55:53 $ $Revision: 1.5 $ */
|
||||||
/* SCCS Id: @(#)winmenu.c 3.5 1996/08/15 */
|
/* SCCS Id: @(#)winmenu.c 3.5 1996/08/15 */
|
||||||
/* Copyright (c) Dean Luick, 1992 */
|
/* Copyright (c) Dean Luick, 1992 */
|
||||||
@@ -249,9 +249,13 @@ menu_key(w, event, params, num_params)
|
|||||||
return;
|
return;
|
||||||
} else if (ch == MENU_SEARCH) { /* search */
|
} else if (ch == MENU_SEARCH) { /* search */
|
||||||
if (menu_info->how == PICK_ANY || menu_info->how == PICK_ONE) {
|
if (menu_info->how == PICK_ANY || menu_info->how == PICK_ONE) {
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ+2], tmpbuf[BUFSZ];
|
||||||
X11_getlin("Search for:", buf);
|
|
||||||
if (!*buf || *buf == '\033') return;
|
X11_getlin("Search for:", tmpbuf);
|
||||||
|
if (!*tmpbuf || *tmpbuf == '\033') return;
|
||||||
|
/* convert "string" into "*string*" for use with pmatch() */
|
||||||
|
Sprintf(buf, "*%s*", tmpbuf);
|
||||||
|
|
||||||
if (menu_info->how == PICK_ANY) {
|
if (menu_info->how == PICK_ANY) {
|
||||||
invert_match(wp, buf);
|
invert_match(wp, buf);
|
||||||
return;
|
return;
|
||||||
@@ -395,10 +399,12 @@ menu_search(w, client_data, call_data)
|
|||||||
{
|
{
|
||||||
struct xwindow *wp = (struct xwindow *) client_data;
|
struct xwindow *wp = (struct xwindow *) client_data;
|
||||||
struct menu_info_t *menu_info = wp->menu_information;
|
struct menu_info_t *menu_info = wp->menu_information;
|
||||||
|
char buf[BUFSZ+2], tmpbuf[BUFSZ];
|
||||||
|
|
||||||
char buf[BUFSZ];
|
X11_getlin("Search for:", tmpbuf);
|
||||||
X11_getlin("Search for:", buf);
|
if (!*tmpbuf || *tmpbuf == '\033') return;
|
||||||
if (!*buf || *buf == '\033') return;
|
/* convert "string" into "*string*" for use with pmatch() */
|
||||||
|
Sprintf(buf, "*%s*", tmpbuf);
|
||||||
|
|
||||||
if (menu_info->how == PICK_ANY)
|
if (menu_info->how == PICK_ANY)
|
||||||
invert_match(wp, buf);
|
invert_match(wp, buf);
|
||||||
@@ -479,7 +485,7 @@ invert_all(wp)
|
|||||||
static void
|
static void
|
||||||
invert_match(wp, match)
|
invert_match(wp, match)
|
||||||
struct xwindow *wp;
|
struct xwindow *wp;
|
||||||
char *match;
|
char *match; /* wildcard pattern for pmatch() */
|
||||||
{
|
{
|
||||||
x11_menu_item *curr;
|
x11_menu_item *curr;
|
||||||
int count;
|
int count;
|
||||||
@@ -488,7 +494,7 @@ invert_match(wp, match)
|
|||||||
reset_menu_count(wp->menu_information);
|
reset_menu_count(wp->menu_information);
|
||||||
for (count = 0, curr = wp->menu_information->curr_menu.base; curr;
|
for (count = 0, curr = wp->menu_information->curr_menu.base; curr;
|
||||||
curr = curr->next, count++)
|
curr = curr->next, count++)
|
||||||
if (curr->identifier.a_void != 0 && strstri(curr->str, match)) {
|
if (curr->identifier.a_void != 0 && pmatchi(match, curr->str)) {
|
||||||
invert_line(wp, curr, count, -1L);
|
invert_line(wp, curr, count, -1L);
|
||||||
changed = TRUE;
|
changed = TRUE;
|
||||||
}
|
}
|
||||||
@@ -503,7 +509,7 @@ invert_match(wp, match)
|
|||||||
static void
|
static void
|
||||||
select_match(wp, match)
|
select_match(wp, match)
|
||||||
struct xwindow *wp;
|
struct xwindow *wp;
|
||||||
char *match;
|
char *match; /* wildcard pattern for pmatch() */
|
||||||
{
|
{
|
||||||
x11_menu_item *curr;
|
x11_menu_item *curr;
|
||||||
int count;
|
int count;
|
||||||
@@ -511,11 +517,12 @@ select_match(wp, match)
|
|||||||
reset_menu_count(wp->menu_information);
|
reset_menu_count(wp->menu_information);
|
||||||
for (count = 0, curr = wp->menu_information->curr_menu.base; curr;
|
for (count = 0, curr = wp->menu_information->curr_menu.base; curr;
|
||||||
curr = curr->next, count++)
|
curr = curr->next, count++)
|
||||||
if (curr->identifier.a_void != 0 && strstri(curr->str, match)) {
|
if (curr->identifier.a_void != 0 && pmatchi(match, curr->str)) {
|
||||||
if (!curr->selected) {
|
if (!curr->selected) {
|
||||||
invert_line(wp, curr, count, -1L);
|
invert_line(wp, curr, count, -1L);
|
||||||
#ifndef USE_FWF
|
#ifndef USE_FWF
|
||||||
XawListChange(wp->w, wp->menu_information->curr_menu.list_pointer,
|
XawListChange(wp->w,
|
||||||
|
wp->menu_information->curr_menu.list_pointer,
|
||||||
0, 0, True);
|
0, 0, True);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
+282
-187
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,87 @@
|
|||||||
|
#!/bin/perl
|
||||||
|
#
|
||||||
|
# $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$
|
||||||
|
# $Date: 2002/01/05 21:06:02 $ $Revision: 1.1 $
|
||||||
|
#
|
||||||
|
|
||||||
|
sub bail($);
|
||||||
|
|
||||||
|
use Getopt::Std;
|
||||||
|
|
||||||
|
# TODO: switch to Getopt::Long so we can parse normal arguments too
|
||||||
|
$Getopt::Std::STANDARD_HELP_VERSION = TRUE;
|
||||||
|
$main::VERSION = 1.0;
|
||||||
|
|
||||||
|
my %commands = (
|
||||||
|
'd' => 'debug mode; parse objects.txt to stdout instead of updating',
|
||||||
|
);
|
||||||
|
|
||||||
|
getopts(join('', keys(%commands)));
|
||||||
|
|
||||||
|
my $debug = (defined($opt_d) && $opt_d == 1);
|
||||||
|
my $tilecount = 0;
|
||||||
|
my $outfile = $debug ? "-" : "objects.txt";
|
||||||
|
my $infile = $debug ? "objects.txt" : "objects.bak";
|
||||||
|
|
||||||
|
|
||||||
|
unless ($debug) {
|
||||||
|
if (-e "$infile") { die "something didn't clean up objects.bak from last time; stopping\n"; }
|
||||||
|
rename($outfile,$infile) or die "couldn't move objects.txt to objects.bak; stopping\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
open(INFILE, "<$infile") or bail("couldn't open $infile; bailing");
|
||||||
|
open(OUTFILE, ">$outfile") or bail("couldn't open $outfile; bailing");
|
||||||
|
|
||||||
|
while (my $line = <INFILE>)
|
||||||
|
{
|
||||||
|
if (my ($tiletext) = $line =~ /^# tile \d+ (.*)/)
|
||||||
|
{
|
||||||
|
$line = "# tile $tilecount $tiletext\n";
|
||||||
|
$tilecount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
print OUTFILE $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(INFILE);
|
||||||
|
close(OUTFILE);
|
||||||
|
|
||||||
|
unless ($debug) { unlink $infile; }
|
||||||
|
|
||||||
|
exit;
|
||||||
|
|
||||||
|
sub main::HELP_MESSAGE()
|
||||||
|
{
|
||||||
|
print <<"STARTHELP";
|
||||||
|
Usage: renumtiles.pl [OPTIONS] <textfile>
|
||||||
|
|
||||||
|
STARTHELP
|
||||||
|
foreach $cmd (keys(%commands)) {
|
||||||
|
printf("%10s %s\n", '-'.$cmd, $commands{$cmd});
|
||||||
|
}
|
||||||
|
print <<"ENDHELP";
|
||||||
|
|
||||||
|
\t--help display this help message and exit
|
||||||
|
\t--version display version and exit
|
||||||
|
ENDHELP
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub main::VERSION_MESSAGE()
|
||||||
|
{
|
||||||
|
my ($objglob, $optpackage, $ver, $switches) = @_;
|
||||||
|
print <<"STARTHELP";
|
||||||
|
renumtiles $ver -- tile-renumbering utility for NetHack
|
||||||
|
STARTHELP
|
||||||
|
}
|
||||||
|
|
||||||
|
sub bail($)
|
||||||
|
{
|
||||||
|
unless ($debug) {
|
||||||
|
unlink $outfile;
|
||||||
|
rename ($infile,$outfile);
|
||||||
|
}
|
||||||
|
shift;
|
||||||
|
die "$_\n";
|
||||||
|
}
|
||||||
|
|
||||||
+8
-4
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 wintty.c $NHDT-Date: 1428394244 2015/04/07 08:10:44 $ $NHDT-Branch: master $:$NHDT-Revision: 1.84 $ */
|
/* NetHack 3.5 wintty.c $NHDT-Date: 1428828474 2015/04/12 08:47:54 $ $NHDT-Branch: master $:$NHDT-Revision: 1.85 $ */
|
||||||
/* NetHack 3.5 wintty.c $Date: 2012/01/22 06:27:09 $ $Revision: 1.66 $ */
|
/* NetHack 3.5 wintty.c $Date: 2012/01/22 06:27:09 $ $Revision: 1.66 $ */
|
||||||
/* Copyright (c) David Cohrs, 1991 */
|
/* Copyright (c) David Cohrs, 1991 */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -1664,20 +1664,24 @@ struct WinDesc *cw;
|
|||||||
tty_nhbell();
|
tty_nhbell();
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
char searchbuf[BUFSZ], tmpbuf[BUFSZ];
|
char searchbuf[BUFSZ+2], tmpbuf[BUFSZ];
|
||||||
boolean on_curr_page = FALSE;
|
boolean on_curr_page = FALSE;
|
||||||
int lineno = 0;
|
int lineno = 0;
|
||||||
|
|
||||||
tty_getlin("Search for:", tmpbuf);
|
tty_getlin("Search for:", tmpbuf);
|
||||||
if (!tmpbuf[0] || tmpbuf[0] == '\033') break;
|
if (!tmpbuf[0] || tmpbuf[0] == '\033') break;
|
||||||
Sprintf(searchbuf, "*%s*", tmpbuf);
|
Sprintf(searchbuf, "*%s*", tmpbuf);
|
||||||
|
|
||||||
for (curr = cw->mlist; curr; curr = curr->next) {
|
for (curr = cw->mlist; curr; curr = curr->next) {
|
||||||
if (on_curr_page) lineno++;
|
if (on_curr_page) lineno++;
|
||||||
if (curr == page_start)
|
if (curr == page_start)
|
||||||
on_curr_page = TRUE;
|
on_curr_page = TRUE;
|
||||||
else if (curr == page_end)
|
else if (curr == page_end)
|
||||||
on_curr_page = FALSE;
|
on_curr_page = FALSE;
|
||||||
if (curr->identifier.a_void && pmatch(searchbuf, curr->str)) {
|
if (curr->identifier.a_void
|
||||||
toggle_menu_curr(window, curr, lineno, on_curr_page, counting, count);
|
&& pmatchi(searchbuf, curr->str)) {
|
||||||
|
toggle_menu_curr(window, curr, lineno,
|
||||||
|
on_curr_page, counting, count);
|
||||||
if (cw->how == PICK_ONE) {
|
if (cw->how == PICK_ONE) {
|
||||||
finished = TRUE;
|
finished = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -636,6 +636,16 @@ copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
|
|||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\sys\share\cppregex.cpp">
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\win\tty\getline.c">
|
<ClCompile Include="..\win\tty\getline.c">
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
@@ -1776,4 +1786,4 @@ copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user