Merge branch 'master' into nhmall-booktribute
Conflicts: doc/fixes35.0 include/extern.h src/mkobj.c src/mon.c src/objnam.c win/share/objects.txt
This commit is contained in:
@@ -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)
|
||||||
@@ -265,8 +266,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.
|
||||||
|
|||||||
+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.
|
||||||
|
|
||||||
|
|||||||
+19
-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
|
||||||
@@ -3007,6 +3007,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 +3284,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 +3292,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,
|
||||||
|
|||||||
+24
-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
|
||||||
|
|
||||||
@@ -3597,6 +3597,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 +3955,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 +3979,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
|
||||||
|
|||||||
+5
-1
@@ -894,6 +894,9 @@ 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
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
@@ -1112,6 +1115,7 @@ 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
|
tribute to Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
@@ -1153,7 +1157,7 @@ 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
|
||||||
|
|
||||||
|
|
||||||
Code Cleanup and Reorganization
|
Code Cleanup and Reorganization
|
||||||
|
|||||||
@@ -437,8 +437,12 @@ typedef unsigned char uchar;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Menucolors */
|
/* Menucolors */
|
||||||
|
/* HACK: this is being added to fix the builds temporarily.
|
||||||
|
* Remove it whenever we finally get a real regex for Win32 */
|
||||||
|
#ifdef UNIX
|
||||||
# define MENU_COLOR_REGEX /* use GNU regex */
|
# define MENU_COLOR_REGEX /* use GNU regex */
|
||||||
/*# define MENU_COLOR_REGEX_POSIX*/ /* use POSIX regex */
|
/*# define MENU_COLOR_REGEX_POSIX*/ /* use POSIX regex */
|
||||||
|
#endif
|
||||||
/* if neither is defined, uses pmatch()
|
/* if neither is defined, uses pmatch()
|
||||||
* pmatch() provides basic globbing: '*' and '?' wildcards.
|
* pmatch() provides basic globbing: '*' and '?' wildcards.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+8
-2
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.5 extern.h $NHDT-Date: 1428196810 2015/04/05 01:20:10 $ $NHDT-Branch: nhmall-booktribute $:$NHDT-Revision: 1.451 $ */
|
/* 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 $ */
|
/* 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. */
|
||||||
@@ -836,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
|
||||||
@@ -1230,6 +1232,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 ### */
|
||||||
|
|
||||||
@@ -2663,7 +2669,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));
|
||||||
|
|||||||
+6
-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 */
|
||||||
@@ -233,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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
+1868
-1866
File diff suppressed because it is too large
Load Diff
+1918
-1918
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
+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:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
+1268
-1134
File diff suppressed because it is too large
Load Diff
+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),
|
||||||
|
|||||||
+10
-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),
|
||||||
|
|||||||
+2498
-2471
File diff suppressed because it is too large
Load Diff
+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 */
|
||||||
|
|||||||
+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.");
|
||||||
|
|||||||
+11
-2
@@ -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 *));
|
||||||
@@ -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");
|
||||||
@@ -5222,4 +5227,8 @@ const char *name;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*sp_lev.c*/
|
/*sp_lev.c*/
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -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);
|
||||||
|
|||||||
+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;
|
||||||
|
|||||||
@@ -2112,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:
|
||||||
@@ -3329,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:
|
||||||
@@ -3473,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:
|
||||||
@@ -3569,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;
|
||||||
@@ -3585,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;
|
||||||
@@ -4255,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");
|
||||||
@@ -4365,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
|
||||||
@@ -4546,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;
|
||||||
|
|||||||
+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
@@ -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!
|
||||||
|
|||||||
+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
|
||||||
}
|
}
|
||||||
|
|||||||
+262
-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;
|
||||||
|
|||||||
Reference in New Issue
Block a user