Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

v10i045: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch9

3 views
Skip to first unread message

Bill Randle

unread,
Jun 28, 1990, 7:18:04 PM6/28/90
to
Submitted-by: Izchak Miller <izc...@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 45
Archive-name: NetHack3/Patch9
Patch-To: NetHack3: Volume 7, Issue 56-93

[Unpack in the top level NetHack source directory and apply
the patchfile using "patch -p <patches09". -br]

[from the development team...]
[[Patchlevel 9 is in fact an amendment patch to Patchlevel 8. It
contains fixes to some deadly bugs discovered thus far in the Pl8
code.

Among the bugs fixed are a 0 dereference bug in the Amiga code, a
bug in the tins code, a bug in the inventory weight code, a level
files bug in the Mac code, an ST display bug, a bug in the maze's
bones level, a bug with chest traps, a bug in the restoring code, a
vault guard bug, a PC collapsing dungeon bug, and other more minor
bugs.]]

#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: UPDATE9 patches09
# Wrapped by billr@saab on Thu Jun 28 16:13:19 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'UPDATE9' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'UPDATE9'\"
else
echo shar: Extracting \"'UPDATE9'\" \(480 characters\)
sed "s/^X//" >'UPDATE9' <<'END_OF_FILE'
XPatchlevel 9 is in fact an amendment patch to Patchlevel 8. It
Xcontains fixes to some deadly bugs discovered thus far in the Pl8
Xcode.
X
XAmong the bugs fixed are a 0 dereference bug in the Amiga code, a
Xbug in the tins code, a bug in the inventory weight code, a level
Xfiles bug in the Mac code, an ST display bug, a bug in the maze's
Xbones level, a bug with chest traps, a bug in the restoring code, a
Xvault guard bug, a PC collapsing dungeon bug, and other more minor
Xbugs.
X
END_OF_FILE
if test 480 -ne `wc -c <'UPDATE9'`; then
echo shar: \"'UPDATE9'\" unpacked with wrong size!
fi
# end of 'UPDATE9'
fi
if test -f 'patches09' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'patches09'\"
else
echo shar: Extracting \"'patches09'\" \(43223 characters\)
sed "s/^X//" >'patches09' <<'END_OF_FILE'
X*** Install.ami.orig Fri Jun 1 07:48:38 1990
X--- Install.ami Tue Jun 26 09:36:23 1990
X***************
X*** 222,230 ****
X wish to utilize it.
X
X Due to a problem with versions 5.04 and 5.05, you must make one change:
X! edit the file Others:lev_lex.c. At (or near) line 1002 is the definition
X for the function yyunput. Delete the word "register" from this line.
X! Note that if you neglect to do this, you will get an Error 72 at line 318
X of file lev_comp.l (this is the correct message - lev_lex.c is flex output).
X Save the changed file. Later compiler versions may or may not need this
X fix.
X--- 222,230 ----
X wish to utilize it.
X
X Due to a problem with versions 5.04 and 5.05, you must make one change:
X! edit the file Others:lev_lex.c. At (or near) line 1003 is the definition
X for the function yyunput. Delete the word "register" from this line.
X! Note that if you neglect to do this, you will get an Error 72 at line 319
X of file lev_comp.l (this is the correct message - lev_lex.c is flex output).
X Save the changed file. Later compiler versions may or may not need this
X fix.
X*** Install.mac.orig Sat Jun 2 00:09:20 1990
X--- Install.mac Tue Jun 26 09:36:52 1990
X***************
X*** 157,163 ****
X int yymorfg; int yymorfg;
X extern char *yysptr, yysbuf[]; extern char *yysptr, *yysbuf;
X int yytchar; int yytchar;
X! File *yyin ={stdin}, *yyout ={stdout}; File *yyin =stdin, *yyout =stdout;
X {... near the end ...}
X {... If you're using LSC or THINKC4 comment out: ...}
X {... #define NLSTATE yyprevious=YYNEWLINE ...}
X--- 157,163 ----
X int yymorfg; int yymorfg;
X extern char *yysptr, yysbuf[]; extern char *yysptr, *yysbuf;
X int yytchar; int yytchar;
X! FILE *yyin ={stdin}, *yyout ={stdout}; FILE *yyin =stdin, *yyout =stdout;
X {... near the end ...}
X {... If you're using LSC or THINKC4 comment out: ...}
X {... #define NLSTATE yyprevious=YYNEWLINE ...}
X*** amiga.old/amiwbench.c Tue Jun 26 09:30:59 1990
X--- amiga/amiwbench.c Tue Jun 26 09:36:24 1990
X***************
X*** 117,123 ****
X strcat(origicon,".info");
X
X argline[0]='\0';
X! for(x=0;p=dobj->do_ToolTypes[x];x++){
X lp=index(p,'=');
X if(!lp++){
X if((strncmp(p,"SCORES",6)==0) ||
X--- 117,123 ----
X strcat(origicon,".info");
X
X argline[0]='\0';
X! if(dobj->do_ToolTypes)for(x=0;p=dobj->do_ToolTypes[x];x++){
X lp=index(p,'=');
X if(!lp++){
X if((strncmp(p,"SCORES",6)==0) ||
X*** auxil.old/Guidebook.mn Tue Jun 26 09:31:07 1990
X--- auxil/Guidebook.mn Tue Jun 26 09:36:45 1990
X***************
X*** 1026,1032 ****
X .op IBMgraphics
X options use predefined selections of graphics symbols, so you need not
X go to the trouble of setting up a full graphics string for these common
X! cases.
X
X Note that this option string is now escape-processed in conventional C
X fashion. This means that `\\' is a prefix to take the following
X--- 1026,1034 ----
X .op IBMgraphics
X options use predefined selections of graphics symbols, so you need not
X go to the trouble of setting up a full graphics string for these common
X! cases. These two options also set up proper handling of graphics
X! characters for such terminals, so you should specify them as appropriate
X! even if you override the selections with your own graphics string.
X
X Note that this option string is now escape-processed in conventional C
X fashion. This means that `\\' is a prefix to take the following
X*** auxil.old/Guidebook.mss Tue Jun 26 09:31:06 1990
X--- auxil/Guidebook.mss Tue Jun 26 09:36:44 1990
X***************
X*** 431,437 ****
X
X ^P Repeat previous message (subsequent ^P's repeat earlier messages).
X
X! q uaff (drink) a potion.
X
X Q Quit the game.
X
X--- 431,437 ----
X
X ^P Repeat previous message (subsequent ^P's repeat earlier messages).
X
X! q Quaff (drink) a potion.
X
X Q Quit the game.
X
X***************
X*** 986,992 ****
X
X The DECgraphics and IBMgraphics options use predefined selections of
X graphics symbols, so you need not go to the trouble of setting up a
X! full graphics string for these common cases.
X
X Note that this option string is now escape-processed in conventional
X C fashion. This means that `\' is a prefix to take the following
X--- 986,995 ----
X
X The DECgraphics and IBMgraphics options use predefined selections of
X graphics symbols, so you need not go to the trouble of setting up a
X! full graphics string for these common cases. These two options also
X! set up proper handling of graphics characters for such terminals, so
X! you should specify them as appropriate even if you override the
X! selections with your own graphics string.
X
X Note that this option string is now escape-processed in conventional
X C fashion. This means that `\' is a prefix to take the following
X*** auxil.old/Guidebook.tex Tue Jun 26 09:31:07 1990
X--- auxil/Guidebook.tex Tue Jun 26 09:36:46 1990
X***************
X*** 1105,1111 ****
X The command to read a scroll is `{\tt r}'.
X
X %.hn 2
X! \subsection{Potions (`{\tt !}')}
X
X %.pg
X Potions are distinguished by the color of the liquid inside the flask.
X--- 1105,1111 ----
X The command to read a scroll is `{\tt r}'.
X
X %.hn 2
X! \subsection*{Potions (`{\tt !}')}
X
X %.pg
X Potions are distinguished by the color of the liquid inside the flask.
X***************
X*** 1283,1288 ****
X--- 1283,1289 ----
X setenv NETHACKOPTIONS "female,!pickup,name:Blue Meanie,fruit:papaya"
X \end{verbatim}
X %.ed
X+
X \nd in {\it csh}, or
X %.sd
X \begin{verbatim}
X***************
X*** 1290,1295 ****
X--- 1291,1297 ----
X export NETHACKOPTIONS
X \end{verbatim}
X %.ed
X+
X \nd in {\it sh\/} or {\it ksh}.
X
X %.hn 2
X***************
X*** 1360,1366 ****
X {\it IBMgraphics}
X options use predefined selections of graphics symbols, so you need not
X go to the trouble of setting up a full graphics string for these common
X! cases.
X
X Note that this option string is now escape-processed in conventional C
X fashion. This means that `\verb+\+' is a prefix to take the following
X--- 1362,1370 ----
X {\it IBMgraphics}
X options use predefined selections of graphics symbols, so you need not
X go to the trouble of setting up a full graphics string for these common
X! cases. These two options also set up proper handling of graphics
X! characters for such terminals, so you should specify them as appropriate
X! even if you override the selections with your own graphics string.
X
X Note that this option string is now escape-processed in conventional C
X fashion. This means that `\verb+\+' is a prefix to take the following
X*** include.old/extern.h Tue Jun 26 09:31:17 1990
X--- include/extern.h Tue Jun 26 09:36:38 1990
X***************
X*** 1325,1331 ****
X E void FDECL(drain_en, (int));
X #endif
X E int NDECL(dountrap);
X! E void FDECL(chest_trap, (struct obj *,int));
X E void NDECL(wake_nearby);
X E void FDECL(deltrap, (struct trap *));
X E struct trap *FDECL(t_at, (int,int));
X--- 1325,1331 ----
X E void FDECL(drain_en, (int));
X #endif
X E int NDECL(dountrap);
X! E boolean FDECL(chest_trap, (struct obj *,int));
X E void NDECL(wake_nearby);
X E void FDECL(deltrap, (struct trap *));
X E struct trap *FDECL(t_at, (int,int));
X*** include.old/patchlevel.h Tue Jun 26 09:31:19 1990
X--- include/patchlevel.h Tue Jun 26 10:00:25 1990
X***************
X*** 97,100 ****
X * and a number of simple fixes and consistency extensions
X */
X
X! #define PATCHLEVEL 8
X--- 97,107 ----
X * and a number of simple fixes and consistency extensions
X */
X
X! /*
X! * Patch 9, June 26, 1990
X! * clear up some confusing documentation
X! * smooth some more rough edges in various ports
X! * and fix a couple more bugs
X! */
X!
X! #define PATCHLEVEL 9
X*** include.old/system.h Tue Jun 26 09:31:19 1990
X--- include/system.h Tue Jun 26 09:36:49 1990
X***************
X*** 254,260 ****
X # define Vsprintf (void) vsprintf
X #endif
X
X! #ifdef TOS
X E int FDECL(tgetent, (const char *,const char *));
X E int FDECL(tgetnum, (const char *));
X E int FDECL(tgetflag, (const char *));
X--- 254,260 ----
X # define Vsprintf (void) vsprintf
X #endif
X
X! #ifdef MSDOS
X E int FDECL(tgetent, (const char *,const char *));
X E int FDECL(tgetnum, (const char *));
X E int FDECL(tgetflag, (const char *));
X*** include.old/vault.h Tue Jun 26 09:31:20 1990
X--- include/vault.h Tue Jun 26 09:36:49 1990
X***************
X*** 16,21 ****
X--- 16,22 ----
X xchar ogx, ogy; /* guard's last position */
X xchar gdlevel; /* level guard was created on */
X xchar warncnt; /* number of warnings to follow */
X+ int vroom; /* room number of the vault */
X unsigned gddone:1;
X struct fakecorridor fakecorr[FCSIZ];
X };
X*** mac.old/mac.c Tue Jun 26 09:31:29 1990
X--- mac/mac.c Tue Jun 26 09:36:47 1990
X***************
X*** 1116,1122 ****
X #define MORE_INFO_BUTTON 2
X
X DialogPtr theDialog;
X- DialogRecord space;
X Rect rect;
X Handle theControl;
X short type,itemHit;
X--- 1116,1121 ----
X***************
X*** 1131,1137 ****
X }
X
X GetPort(&oldPort);
X! theDialog = GetNewDialog(129, &space,(WindowPtr)-1);
X if (!prompt) {
X HideDItem(theDialog, OK_BUTTON);
X HideDItem(theDialog, MORE_INFO_BUTTON);
X--- 1130,1136 ----
X }
X
X GetPort(&oldPort);
X! theDialog = GetNewDialog(129, (Ptr)NULL,(WindowPtr)-1);
X if (!prompt) {
X HideDItem(theDialog, OK_BUTTON);
X HideDItem(theDialog, MORE_INFO_BUTTON);
X*** others.old/Makefile.ovl Tue Jun 26 09:31:37 1990
X--- others/Makefile.ovl Tue Jun 26 09:36:50 1990
X***************
X*** 61,68 ****
X #
X ###############################################################################
X # Use the first line if you are using EXESMURF or the second for EXEMOD.
X! EXEFLAGS = /max3000 /min3000
X! # EXEFLAGS = /max BB8 /min BB8
X ###############################################################################
X #
X # *****************************************************************************
X--- 61,68 ----
X #
X ###############################################################################
X # Use the first line if you are using EXESMURF or the second for EXEMOD.
X! EXEFLAGS = /max4500 /min4500
X! # EXEFLAGS = /max 1194 /min 1194
X ###############################################################################
X #
X # *****************************************************************************
X*** others.old/NetHack.cnf Tue Jun 26 09:31:37 1990
X--- others/NetHack.cnf Tue Jun 26 09:36:46 1990
X***************
X*** 70,76 ****
X #
X # If you merely set the IBMgraphics option as above, NetHack will use IBM
X # extended ASCII for dungeon characters. If you don't like the selections,
X! # you can make up your own via the graphics option (and not set IBMgraphics).
X #
X # An example using the IBM graphics character set:
X # ' ' | - . . ` ' - - - - - | - \ / . - | + . # < > ^ " } { # \ _ < > # #
X--- 70,78 ----
X #
X # If you merely set the IBMgraphics option as above, NetHack will use IBM
X # extended ASCII for dungeon characters. If you don't like the selections,
X! # you can make up your own via the graphics option, but you should still set
X! # IBMgraphics if you are using IBM graphics characters to get the correct
X! # processing.
X #
X # An example using the IBM graphics character set:
X # ' ' | - . . ` ' - - - - - | - \ / . - | + . # < > ^ " } { # \ _ < > # #
X***************
X*** 86,91 ****
X # (aka ANSI ruling character set '0') for dungeon characters. If you don't
X # like the selections, you can make up your own via the graphics option,
X # adding 128 to the value of any line-drawing character you want to use.
X! # (In such a case, do not set DECgraphics.)
X #
X #GRAPHICS= 032 248 241 236 235 237 234 238 246 247 245 244 248 241 092 047 254 241 248 043 254 225
X--- 88,93 ----
X # (aka ANSI ruling character set '0') for dungeon characters. If you don't
X # like the selections, you can make up your own via the graphics option,
X # adding 128 to the value of any line-drawing character you want to use.
X! # (But you should still set DECgraphics to get the correct processing.)
X #
X #GRAPHICS= 032 248 241 236 235 237 234 238 246 247 245 244 248 241 092 047 254 241 248 043 254 225
X*** others.old/msdos.c Tue Jun 26 09:31:37 1990
X--- others/msdos.c Tue Jun 26 09:36:32 1990
X***************
X*** 1411,1416 ****
X--- 1411,1418 ----
X char *s;
X static char newhe[] = "\033q\033b\017\033c0";
X
X+ if (!flags.IBMBIOS)
X+ return;
X init_aline();
X numcolors = 1 << (((unsigned char *) _a_line)[1]);
X if (numcolors == 2) { /* mono */
X*** src.old/apply.c Tue Jun 26 09:31:43 1990
X--- src/apply.c Tue Jun 26 09:36:26 1990
X***************
X*** 1182,1187 ****
X--- 1182,1189 ----
X return;
X }
X if(can = mksobj(TIN,FALSE)) {
X+ int savequan;
X+
X can->corpsenm = corpse->corpsenm;
X can->quan = 1; /*Defeat the occasional creation of pairs of tins */
X can->owt = weight(can);
X***************
X*** 1190,1199 ****
X can->cursed = obj->cursed;
X can->blessed = obj->blessed;
X can = addinv(can);
X! You("now have %s.", doname(can));
X if (carried(corpse)) useup(corpse);
X else useupf(corpse);
X! } else pline("Tinning failed.");
X }
X
X int
X--- 1192,1211 ----
X can->cursed = obj->cursed;
X can->blessed = obj->blessed;
X can = addinv(can);
X! savequan = can->quan;
X! can->quan = 1;
X! if (inv_cnt() <= 52) {
X! prinv(can);
X! can->quan = savequan;
X! } else {
X! pline("You make, but cannot pick up, %s.", doname(can));
X! /* can->quan = savequan; */
X! /* unnecessary since savequan = quan = 1 here */
X! dropx(can);
X! }
X if (carried(corpse)) useup(corpse);
X else useupf(corpse);
X! } else impossible("Tinning failed.");
X }
X
X int
X*** src.old/dokick.c Tue Jun 26 09:31:44 1990
X--- src/dokick.c Tue Jun 26 09:36:40 1990
X***************
X*** 374,386 ****
X if (!kickobj->olocked && (!rn2(3) ||
X (martial() && !rn2(2)))) {
X pline("The lid slams open, then falls shut.");
X! if(otrp) chest_trap(kickobj, LEG);
X return(1);
X } else if (kickobj->olocked &&
X (!rn2(5) || (martial() && !rn2(2)))) {
X You("break open the lock!");
X kickobj->olocked = 0;
X! if(otrp) chest_trap(kickobj, LEG);
X return(1);
X }
X /* let it fall through to the next cases... */
X--- 374,386 ----
X if (!kickobj->olocked && (!rn2(3) ||
X (martial() && !rn2(2)))) {
X pline("The lid slams open, then falls shut.");
X! if(otrp) (void) chest_trap(kickobj, LEG);
X return(1);
X } else if (kickobj->olocked &&
X (!rn2(5) || (martial() && !rn2(2)))) {
X You("break open the lock!");
X kickobj->olocked = 0;
X! if(otrp) (void) chest_trap(kickobj, LEG);
X return(1);
X }
X /* let it fall through to the next cases... */
X*** src.old/end.c Tue Jun 26 09:31:45 1990
X--- src/end.c Tue Jun 26 09:36:31 1990
X***************
X*** 194,200 ****
X (void) puts(" Suddenly, the dungeon collapses.");
X #if defined(WIZARD) && !defined(MSDOS)
X if(!wizard) {
X! pline("Report error to %s and it may be possible to rebuild.",WIZARD);
X more();
X }
X #ifdef VMS
X--- 194,205 ----
X (void) puts(" Suddenly, the dungeon collapses.");
X #if defined(WIZARD) && !defined(MSDOS)
X if(!wizard) {
X! pline("Report error to %s and it may be possible to rebuild.",
X! # ifdef WIZARD_NAME /*(KR1ED)*/
X! WIZARD_NAME);
X! # else
X! WIZARD);
X! # endif
X more();
X }
X #ifdef VMS
X***************
X*** 641,650 ****
X--- 646,668 ----
X # if defined(UNIX) || defined(VMS)
X (void) signal(SIGHUP,SIG_IGN);
X # endif
X+ # ifdef MACOS
X+ Str255 fileName;
X+ int oldVolume;
X+ struct term_info *t;
X+ extern WindowPtr HackWindow;
X+
X+ t = (term_info *)GetWRefCon(HackWindow);
X+ (void)GetVol(&fileName, &oldVolume);
X+ (void)SetVol(0L, t->system.sysVRefNum);
X+ # endif
X for(x = maxdlevel; x >= 0; x--) {
X glo(x);
X (void) unlink(lock); /* not all levels need be present */
X }
X+ # ifdef MACOS
X+ (void)SetVol(0L, oldVolume);
X+ # endif
X # endif
X #endif
X }
X*** src.old/hack.c Tue Jun 26 09:31:45 1990
X--- src/hack.c Tue Jun 26 09:36:33 1990
X***************
X*** 1122,1128 ****
X if (u.usym==S_NYMPH) carrcap = MAX_CARR_CAP;
X else if (!uasmon->cwt)
X carrcap = (carrcap * uasmon->mlevel * 6)/45;
X! else carrcap = (carrcap * uasmon->cwt / 45);
X }
X #endif
X if(Levitation) /* pugh@cornell */
X--- 1122,1130 ----
X if (u.usym==S_NYMPH) carrcap = MAX_CARR_CAP;
X else if (!uasmon->cwt)
X carrcap = (carrcap * uasmon->mlevel * 6)/45;
X! else if (!strongmonst(uasmon)
X! || (strongmonst(uasmon) && (uasmon->cwt > 45)))
X! carrcap = (carrcap * uasmon->cwt / 45);
X }
X #endif
X if(Levitation) /* pugh@cornell */
X*** src.old/lock.c Tue Jun 26 09:31:46 1990
X--- src/lock.c Tue Jun 26 09:36:41 1990
X***************
X*** 76,82 ****
X (!xlock.box->olocked) ? "lock" :
X (xlock.picktyp == LOCK_PICK) ? "pick" : "open" );
X xlock.box->olocked = !xlock.box->olocked;
X! if(xlock.box->otrapped) chest_trap(xlock.box, FINGER);
X }
X return((xlock.usedtime = 0));
X }
X--- 76,83 ----
X (!xlock.box->olocked) ? "lock" :
X (xlock.picktyp == LOCK_PICK) ? "pick" : "open" );
X xlock.box->olocked = !xlock.box->olocked;
X! if(xlock.box->otrapped)
X! (void) chest_trap(xlock.box, FINGER);
X }
X return((xlock.usedtime = 0));
X }
X*** src.old/mail.c Tue Jun 26 09:31:47 1990
X--- src/mail.c Tue Jun 26 09:36:28 1990
X***************
X*** 227,236 ****
X
X static void
X newmail() {
X /* deliver a scroll of mail */
X register boolean invload =
X ((inv_weight() + (int)objects[SCR_MAIL].oc_weight) > 0 ||
X! inv_cnt() >= 52 || Fumbling);
X register struct monst *md = makemon(&mons[PM_MAIL_DAEMON], u.ux, u.uy);
X
X if(!md) return;
X--- 227,237 ----
X
X static void
X newmail() {
X+ struct obj *obj;
X /* deliver a scroll of mail */
X register boolean invload =
X ((inv_weight() + (int)objects[SCR_MAIL].oc_weight) > 0 ||
X! Fumbling);
X register struct monst *md = makemon(&mons[PM_MAIL_DAEMON], u.ux, u.uy);
X
X if(!md) return;
X***************
X*** 251,265 ****
X if(dist(md->mx,md->my) > 2)
X verbalize("Catch!");
X more();
X! if(invload) {
X! struct obj *obj = mksobj_at(SCR_MAIL,u.ux,u.uy);
X! obj->known = obj->dknown = TRUE;
X! makeknown(SCR_MAIL);
X stackobj(fobj);
X verbalize("Oops!");
X } else {
X! /* set known and do prinv() */
X! (void) identify(addinv(mksobj(SCR_MAIL,FALSE)));
X }
X # endif /* NO_MAILREADER */
X
X--- 252,271 ----
X if(dist(md->mx,md->my) > 2)
X verbalize("Catch!");
X more();
X! obj = mksobj(SCR_MAIL, FALSE);
X! obj->known = obj->dknown = TRUE;
X! makeknown(SCR_MAIL);
X! if (!invload) obj = addinv(obj);
X! if(invload || inv_cnt() > 52) {
X! if (invload) dropy(obj);
X! else dropx(obj);
X stackobj(fobj);
X verbalize("Oops!");
X } else {
X! int savequan = obj->quan;
X! obj->quan = 1;
X! prinv(obj);
X! obj->quan = savequan;
X }
X # endif /* NO_MAILREADER */
X
X*** src.old/makemon.c Tue Jun 26 09:31:47 1990
X--- src/makemon.c Tue Jun 26 09:36:22 1990
X***************
X*** 201,209 ****
X (void)mongets(mtmp, IRON_SHOES);
X if (rn2(4) == 0) {
X (void)mongets(mtmp, SHORT_SWORD);
X! (void)mongets(mtmp,
X! (rn2(3) == 0) ? AXE : TWO_HANDED_SWORD);
X! (void)mongets(mtmp, LARGE_SHIELD);
X if (rn2(3) == 0)
X (void)mongets(mtmp, DWARVISH_MITHRIL_COAT);
X } else {
X--- 201,211 ----
X (void)mongets(mtmp, IRON_SHOES);
X if (rn2(4) == 0) {
X (void)mongets(mtmp, SHORT_SWORD);
X! if (rn2(2)) (void)mongets(mtmp, TWO_HANDED_SWORD);
X! else {
X! (void)mongets(mtmp, AXE);
X! (void)mongets(mtmp, LARGE_SHIELD);
X! }
X if (rn2(3) == 0)
X (void)mongets(mtmp, DWARVISH_MITHRIL_COAT);
X } else {
X***************
X*** 716,722 ****
X if (x == u.ux && y == u.uy) return 0;
X if (mdat) {
X if (IS_POOL(levl[x][y].typ))
X! if (mdat == &playermon && HLevitation) return 1;
X else return (is_flyer(mdat) || is_swimmer(mdat));
X if (passes_walls(mdat)) return 1;
X }
X--- 718,725 ----
X if (x == u.ux && y == u.uy) return 0;
X if (mdat) {
X if (IS_POOL(levl[x][y].typ))
X! if (mdat == &playermon && (HLevitation || Wwalking))
X! return 1;
X else return (is_flyer(mdat) || is_swimmer(mdat));
X if (passes_walls(mdat)) return 1;
X }
X*** src.old/mhitu.c Tue Jun 26 09:31:47 1990
X--- src/mhitu.c Tue Jun 26 09:36:27 1990
X***************
X*** 1127,1133 ****
X kludge("%s engulfs you!", Monnam(mtmp));
X stop_occupation();
X if (u.utrap) {
X! You("are released from the trap!");
X u.utrap = 0;
X }
X #ifdef WALKIES
X--- 1127,1134 ----
X kludge("%s engulfs you!", Monnam(mtmp));
X stop_occupation();
X if (u.utrap) {
X! You("are released from the %s!",
X! u.utraptype==TT_WEB ? "web" : "trap");
X u.utrap = 0;
X }
X #ifdef WALKIES
X*** src.old/mon.c Tue Jun 26 09:31:49 1990
X--- src/mon.c Tue Jun 26 09:36:35 1990
X***************
X*** 499,506 ****
X * and human weights (weight of a human=45). Limits for corpseless
X * monsters are arbitrary.
X */
X! maxload = (mtmp->data->cwt ? mtmp->data->cwt : mtmp->data->mlevel*6)
X! * MAX_CARR_CAP / 45;
X if (!strongmonst(mtmp->data)) maxload /= 2;
X
X return maxload;
X--- 499,511 ----
X * and human weights (weight of a human=45). Limits for corpseless
X * monsters are arbitrary.
X */
X! if (!mtmp->data->cwt)
X! maxload = MAX_CARR_CAP * (mtmp->data->mlevel * 6) / 45;
X! else if (!strongmonst(mtmp->data)
X! || (strongmonst(mtmp->data) && (mtmp->data->cwt > 45)))
X! maxload = MAX_CARR_CAP * mtmp->data->cwt / 45;
X! else maxload = MAX_CARR_CAP; /* strong monsters w/ cwt <= 45 */
X!
X if (!strongmonst(mtmp->data)) maxload /= 2;
X
X return maxload;
X*** src.old/monst.c Tue Jun 26 09:31:48 1990
X--- src/monst.c Tue Jun 26 09:36:37 1990
X***************
X*** 869,887 ****
X #ifdef KOPS
X { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) },
X { "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
X { "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(CYAN) },
X { "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
X #endif
X /* Liches */
X--- 869,887 ----
X #ifdef KOPS
X { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) },
X { "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
X { "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(CYAN) },
X { "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN),
X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X! 45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
X #endif
X /* Liches */
X*** src.old/options.c Tue Jun 26 09:31:49 1990
X--- src/options.c Tue Jun 26 09:36:48 1990
X***************
X*** 687,693 ****
X unsigned num;
X char *op;
X char tmp_name[256];
X- DialogRecord dlgR;
X DialogPtr optionDlg;
X DialogTHndl th, centreDlgBox();
X boolean done = FALSE;
X--- 687,692 ----
X***************
X*** 713,719 ****
X
X th = centreDlgBox(130, FALSE);
X
X! optionDlg = GetNewDialog(130, (Ptr)&dlgR, (WindowPtr)-1);
X /* set initial values of text items */
X ITEMTEXT(PLAYER_NAME,plname);
X if(*dogname) ITEMTEXT(DOG_NAME,dogname);
X--- 712,718 ----
X
X th = centreDlgBox(130, FALSE);
X
X! optionDlg = GetNewDialog(130, (Ptr)NULL, (WindowPtr)-1);
X /* set initial values of text items */
X ITEMTEXT(PLAYER_NAME,plname);
X if(*dogname) ITEMTEXT(DOG_NAME,dogname);
X*** src.old/pickup.c Tue Jun 26 09:31:50 1990
X--- src/pickup.c Tue Jun 26 09:36:42 1990
X***************
X*** 325,331 ****
X int
X doloot() { /* loot a container on the floor. */
X
X! register struct obj *cobj;
X register int c;
X
X if (Levitation) {
X--- 325,331 ----
X int
X doloot() { /* loot a container on the floor. */
X
X! register struct obj *cobj, *nobj;
X register int c;
X
X if (Levitation) {
X***************
X*** 332,338 ****
X You("cannot reach the floor.");
X return(0);
X }
X! for(cobj = level.objects[u.ux][u.uy]; cobj; cobj = cobj->nexthere) {
X if(Is_container(cobj)) {
X
X pline("There is %s here, loot it? ", doname(cobj));
X--- 332,340 ----
X You("cannot reach the floor.");
X return(0);
X }
X! for(cobj = level.objects[u.ux][u.uy]; cobj; cobj = nobj) {
X! nobj = cobj->nexthere;
X!
X if(Is_container(cobj)) {
X
X pline("There is %s here, loot it? ", doname(cobj));
X***************
X*** 355,361 ****
X }
X
X You("carefully open the %s...", xname(cobj));
X! if(cobj->otrapped) chest_trap(cobj, FINGER);
X if(multi < 0) return 0; /* a paralysis trap */
X
X use_container(cobj, 0);
X--- 357,364 ----
X }
X
X You("carefully open the %s...", xname(cobj));
X! if(cobj->otrapped && chest_trap(cobj, FINGER)) /* don't use obj if obj dies */
X! continue;
X if(multi < 0) return 0; /* a paralysis trap */
X
X use_container(cobj, 0);
X*** src.old/restore.c Tue Jun 26 09:31:52 1990
X--- src/restore.c Tue Jun 26 09:36:47 1990
X***************
X*** 269,274 ****
X--- 269,277 ----
X #ifdef TEXTCOLOR
X flags.use_color = oldflags.use_color;
X #endif
X+ /* these come from the current environment; ignore saved values */
X+ flags.echo = oldflags.echo;
X+ flags.cbreak = oldflags.cbreak;
X
X mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
X mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
X***************
X*** 882,887 ****
X--- 885,899 ----
X }
X }
X #endif
X+ if(ghostly && lev > medusa_level && lev < stronghold_level &&
X+ xdnstair == 0) {
X+ coord cc;
X+
X+ mazexy(&cc);
X+ xdnstair = cc.x;
X+ ydnstair = cc.y;
X+ levl[cc.x][cc.y].typ = STAIRS;
X+ }
X }
X
X #ifdef ZEROCOMP
X*** src.old/termcap.c Tue Jun 26 09:31:53 1990
X--- src/termcap.c Tue Jun 26 09:36:32 1990
X***************
X*** 196,202 ****
X /* strictly, SE should be 2, and UE should be 24,
X but we can't trust all ANSI emulators to be
X that complete. -3. */
X! # if !defined(MSDOS) || defined(TERMLIB)
X AS = "\016";
X AE = "\017";
X # endif
X--- 196,202 ----
X /* strictly, SE should be 2, and UE should be 24,
X but we can't trust all ANSI emulators to be
X that complete. -3. */
X! # if !defined(MSDOS) || (defined(TERMLIB) && defined(AMIGA))
X AS = "\016";
X AE = "\017";
X # endif
X***************
X*** 336,341 ****
X--- 336,345 ----
X free((genericptr_t)tptr);
X # ifdef TEXTCOLOR
X init_hilite();
X+ # if defined(TOS) && defined(__GNUC__)
X+ if (!strcmp(term, "builtin"))
X+ HE="\033q\033b3\033c0"; /* to turn off colors, too */
X+ # endif
X # endif
X #endif /* TERMLIB */
X }
X***************
X*** 769,775 ****
X {
X # ifdef TOS
X int c;
X- static char unhilite[] = "\033q\033b3\033c0";
X # else
X int backg = BLACK, foreg = WHITE, len;
X register int c, color;
X--- 773,778 ----
X***************
X*** 789,795 ****
X hilites[ORANGE_COLORED] = "\033b3\033c1";
X hilites[YELLOW] = "\033b1\033c3";
X hilites[WHITE] = "\033b0\033c3";
X- HE = unhilite; /* to turn off the color stuff too */
X # else /* TOS */
X /* find the background color, HI[len] == 'm' */
X len = strlen(HI) - 1;
X--- 792,797 ----
X*** src.old/trap.c Tue Jun 26 09:31:54 1990
X--- src/trap.c Tue Jun 26 09:36:40 1990
X***************
X*** 1586,1592 ****
X : u.ulevel;
X if(confused || Fumbling || rnd(75+dlevel/2) > ch) {
X You("set it off!");
X! chest_trap(otmp, FINGER);
X } else {
X You("disarm it!");
X otmp->otrapped = 0;
X--- 1586,1592 ----
X : u.ulevel;
X if(confused || Fumbling || rnd(75+dlevel/2) > ch) {
X You("set it off!");
X! (void) chest_trap(otmp, FINGER);
X } else {
X You("disarm it!");
X otmp->otrapped = 0;
X***************
X*** 1649,1655 ****
X }
X
X /* only called when the player is doing something to the chest directly */
X! void
X chest_trap(obj, bodypart)
X register struct obj *obj;
X register int bodypart;
X--- 1649,1655 ----
X }
X
X /* only called when the player is doing something to the chest directly */
X! boolean
X chest_trap(obj, bodypart)
X register struct obj *obj;
X register int bodypart;
X***************
X*** 1657,1663 ****
X register struct obj *otmp,*otmp2;
X char buf[80];
X
X! if(Luck > -13 && rn2(13+Luck) > 7) return;
X
X otmp = obj;
X switch(rn2(20) ? ((Luck >= 13) ? 0 : rn2(13-Luck)) : rn2(26)) {
X--- 1657,1663 ----
X register struct obj *otmp,*otmp2;
X char buf[80];
X
X! if(Luck > -13 && rn2(13+Luck) > 7) return FALSE;
X
X otmp = obj;
X switch(rn2(20) ? ((Luck >= 13) ? 0 : rn2(13-Luck)) : rn2(26)) {
X***************
X*** 1678,1684 ****
X
X losehp(d(6,6), buf, KILLED_BY_AN);
X wake_nearby();
X! return;
X case 20:
X case 19:
X case 18:
X--- 1678,1684 ----
X
X losehp(d(6,6), buf, KILLED_BY_AN);
X wake_nearby();
X! return TRUE;
X case 20:
X case 19:
X case 18:
X***************
X*** 1746,1751 ****
X--- 1746,1753 ----
X }
X bot(); /* to get immediate botl re-display */
X otmp->otrapped = 0; /* these traps are one-shot things */
X+
X+ return FALSE;
X }
X
X #endif /* OVLB */
X*** src.old/uhitm.c Tue Jun 26 09:31:54 1990
X--- src/uhitm.c Tue Jun 26 09:36:27 1990
X***************
X*** 748,754 ****
X case AD_SITM:
X if(mdef->minvent) {
X struct obj *otmp, *addinv(), *stealoid;
X- int isize = inv_cnt();
X
X stealoid = (struct obj *)0;
X if(is_mercenary(pd) && could_seduce(&youmonst,mdef,mattk)){
X--- 748,753 ----
X***************
X*** 764,786 ****
X while(mdef->minvent) {
X otmp = mdef->minvent;
X mdef->minvent = otmp->nobj;
X if (!stolen && otmp==stealoid) {
X! if(isize < 52) {
X! otmp = addinv(otmp);
X! /* might not increase isize */
X! isize = inv_cnt();
X! } else dropy(otmp);
X stealoid = otmp;
X stolen = TRUE;
X } else {
X! if(isize < 52) {
X! otmp = addinv(otmp);
X! isize = inv_cnt();
X You("steal: ");
X prinv(otmp);
X- } else {
X- dropy(otmp);
X- You("steal %s.", doname(otmp));
X }
X }
X }
X--- 763,784 ----
X while(mdef->minvent) {
X otmp = mdef->minvent;
X mdef->minvent = otmp->nobj;
X+ /* set dknown to insure proper merge */
X+ if (!Blind) otmp->dknown = 1;
X if (!stolen && otmp==stealoid) {
X! otmp = addinv(otmp);
X! if(inv_cnt() > 52)
X! dropx(otmp);
X stealoid = otmp;
X stolen = TRUE;
X } else {
X! otmp = addinv(otmp);
X! if(inv_cnt() > 52) {
X! dropx(otmp);
X! You("steal %s.", doname(otmp));
X! } else {
X You("steal: ");
X prinv(otmp);
X }
X }
X }
X***************
X*** 795,810 ****
X # endif
X }
X } else {
X! otmp = mdef->minvent;
X! mdef->minvent = otmp->nobj;
X! if(isize < 52) {
X! otmp = addinv(otmp);
X You("steal: ");
X prinv(otmp);
X! } else {
X! dropy(otmp);
X! You("steal %s.", doname(otmp));
X! }
X }
X }
X tmp = 0;
X--- 793,809 ----
X # endif
X }
X } else {
X! otmp = mdef->minvent;
X! mdef->minvent = otmp->nobj;
X! if (!Blind) otmp->dknown = 1;
X! otmp = addinv(otmp);
X! if(inv_cnt() > 52) {
X! dropx(otmp);
X! You("steal %s.", doname(otmp));
X! } else {
X You("steal: ");
X prinv(otmp);
X! }
X }
X }
X tmp = 0;
X*** src.old/vault.c Tue Jun 26 09:31:55 1990
X--- src/vault.c Tue Jun 26 09:36:50 1990
X***************
X*** 168,173 ****
X--- 168,174 ----
X EGD(guard)->ogx = x;
X EGD(guard)->ogy = y;
X EGD(guard)->gdlevel = dlevel;
X+ EGD(guard)->vroom = inroom(x, y);
X EGD(guard)->warncnt = 0;
X
X if(!cansee(guard->mx, guard->my)) {
X***************
X*** 466,478 ****
X void
X paygd() {
X
X! struct monst *guard;
X! register int i;
X int gx,gy;
X char buf[BUFSZ];
X
X! guard = findgd();
X! if (!u.ugold || !guard) return;
X
X if (u.uinvault) {
X Your("%ld zorkmid%s goes into the Magic Memory Vault.",
X--- 467,477 ----
X void
X paygd() {
X
X! register struct monst *grd = findgd();
X int gx,gy;
X char buf[BUFSZ];
X
X! if (!u.ugold || !grd) return;
X
X if (u.uinvault) {
X Your("%ld zorkmid%s goes into the Magic Memory Vault.",
X***************
X*** 480,500 ****
X mkgold(u.ugold, u.ux, u.uy);
X u.ugold = 0L;
X } else {
X! if(guard->mpeaceful) { /* he has no "right" to your gold */
X! mongone(guard);
X return;
X }
X! mnexto(guard);
X! pmon(guard);
X! pline("%s remits your gold to the vault.", Monnam(guard));
X! for(i=0; i<=nroom; i++)
X! if (rooms[i].rtype==VAULT) break;
X! if (i > nroom) {
X! impossible("no vault?");
X! return;
X! }
X! gx = rooms[i].lx + rn2(2);
X! gy = rooms[i].ly + rn2(2);
X mkgold(u.ugold, gx, gy);
X u.ugold = 0L;
X Sprintf(buf,
X--- 479,493 ----
X mkgold(u.ugold, u.ux, u.uy);
X u.ugold = 0L;
X } else {
X! if(grd->mpeaceful) { /* he has no "right" to your gold */
X! mongone(grd);
X return;
X }
X! mnexto(grd);
X! pmon(grd);
X! pline("%s remits your gold to the vault.", Monnam(grd));
X! gx = rooms[EGD(grd)->vroom].lx + rn2(2);
X! gy = rooms[EGD(grd)->vroom].ly + rn2(2);
X mkgold(u.ugold, gx, gy);
X u.ugold = 0L;
X Sprintf(buf,
X***************
X*** 502,508 ****
X player_mon()->mname, plname);
X make_engr_at(gx, gy, buf);
X }
X! mongone(guard);
X }
X
X #ifdef SOUNDS
X--- 495,501 ----
X player_mon()->mname, plname);
X make_engr_at(gx, gy, buf);
X }
X! mongone(grd);
X }
X
X #ifdef SOUNDS
X*** src.old/zap.c Tue Jun 26 09:31:56 1990
X--- src/zap.c Tue Jun 26 09:36:30 1990
X***************
X*** 1730,1736 ****
X destroy_item(POTION_SYM, AD_COLD);
X break;
X case 4: /* death */
X! if(type == -24) { /* disintegration */
X if (Disint_resistance) {
X You("are not disintegrated.");
X break;
X--- 1730,1740 ----
X destroy_item(POTION_SYM, AD_COLD);
X break;
X case 4: /* death */
X! if(type == -24
X! #ifdef POLYSELF
X! || type == 24
X! #endif
X! ) { /* disintegration */
X if (Disint_resistance) {
X You("are not disintegrated.");
X break;
X***************
X*** 2169,2175 ****
X char buf[BUFSZ];
X register struct obj *otmp;
X unsigned wishquan, mergquan;
X- register boolean dropit = (inv_cnt() >= 52);
X int tries = 0;
X
X retry:
X--- 2173,2178 ----
X***************
X*** 2188,2199 ****
X return; /* for safety; should never happen */
X }
X if (otmp != &zeroobj) {
X! if(dropit) {
X pline("Oops! The %s to the floor!", aobjnam(otmp, "drop"));
X! dropy(otmp);
X } else {
X- wishquan = otmp->quan;
X- otmp = addinv(otmp);
X mergquan = otmp->quan;
X otmp->quan = wishquan; /* to fool prinv() */
X prinv(otmp);
X--- 2191,2203 ----
X return; /* for safety; should never happen */
X }
X if (otmp != &zeroobj) {
X! if (!Blind) otmp->dknown = 1; /* needed for merge to work */
X! wishquan = otmp->quan;
X! otmp = addinv(otmp);
X! if(inv_cnt() > 52) {
X pline("Oops! The %s to the floor!", aobjnam(otmp, "drop"));
X! dropx(otmp);
X } else {
X mergquan = otmp->quan;
X otmp->quan = wishquan; /* to fool prinv() */
X prinv(otmp);
X*** vms.old/lev_lex.h Tue Jun 26 09:32:01 1990
X--- vms/lev_lex.h Tue Jun 26 09:36:51 1990
X***************
X*** 5,11 ****
X * src/lev_main.c, where stdin & stdout are still correctly defined.
X */
X #ifdef VAXC
X! # module lev_lex "3.0.8"
X #endif
X
X #include <stdio.h>
X--- 5,11 ----
X * src/lev_main.c, where stdin & stdout are still correctly defined.
X */
X #ifdef VAXC
X! # module lev_lex "3.0.9"
X #endif
X
X #include <stdio.h>
X*** vms.old/vmsbuild.com Tue Jun 26 09:32:01 1990
X--- vms/vmsbuild.com Tue Jun 26 09:36:51 1990
X***************
X*** 1,4 ****
X! $ ! vms/vmsbuild.com -- compile and link NetHack 3.0 patchlevel 8 [pr]
X $ !
X $ ! usage:
X $ ! $ set default [.src] !or [-.src] if starting from [.vms]
X--- 1,4 ----
X! $ ! vms/vmsbuild.com -- compile and link NetHack 3.0 patchlevel 9 [pr]
X $ !
X $ ! usage:
X $ ! $ set default [.src] !or [-.src] if starting from [.vms]
X***************
X*** 121,127 ****
X $ cc makedefs.c
X $ link makedefs.obj,monst.obj,objects.obj,vmsmisc.obj,-
X 'vaxcrtl''gnulib',sys$input:/Opt
X! identification="makedefs 3.0.8"
X $ milestone "makedefs"
X $! create some build-time files
X $ makedefs -p !pm.h
X--- 121,127 ----
X $ cc makedefs.c
X $ link makedefs.obj,monst.obj,objects.obj,vmsmisc.obj,-
X 'vaxcrtl''gnulib',sys$input:/Opt
X! identification="makedefs 3.0.9"
X $ milestone "makedefs"
X $! create some build-time files
X $ makedefs -p !pm.h
X***************
X*** 172,178 ****
X $ link/Exe=nethack 'nethacklib'/Lib/Incl=(vmsmain,allmain,vmsunix,vmstty,decl),-
X sys$disk:[]monst.obj,objects.obj,- !(data-only modules, like decl)
X sys$input:/Opt,'vaxcrtl''gnulib'
X! identification="NetHack 3.0.8"
X $ milestone "NetHack"
X $ if c_opt.eq.10 then goto done !"LINK" only
X $special:
X--- 172,178 ----
X $ link/Exe=nethack 'nethacklib'/Lib/Incl=(vmsmain,allmain,vmsunix,vmstty,decl),-
X sys$disk:[]monst.obj,objects.obj,- !(data-only modules, like decl)
X sys$input:/Opt,'vaxcrtl''gnulib'
X! identification="NetHack 3.0.9"
X $ milestone "NetHack"
X $ if c_opt.eq.10 then goto done !"LINK" only
X $special:
X***************
X*** 188,194 ****
X $ link lev_comp.obj,lev_lex.obj,lev_main.obj,-
X monst.obj,objects.obj,alloc.obj,panic.obj,vmsmisc.obj,-
X 'vaxcrtl''gnulib',sys$input:/Opt
X! identification="lev_comp 3.0.8"
X $ milestone "lev_comp"
X $!
X $done:
X--- 188,194 ----
X $ link lev_comp.obj,lev_lex.obj,lev_main.obj,-
X monst.obj,objects.obj,alloc.obj,panic.obj,vmsmisc.obj,-
X 'vaxcrtl''gnulib',sys$input:/Opt
X! identification="lev_comp 3.0.9"
X $ milestone "lev_comp"
X $!
X $done:
X*** vms.old/vmsmain.c Tue Jun 26 09:32:01 1990
X--- vms/vmsmain.c Tue Jun 26 09:33:01 1990
X***************
X*** 14,21 ****
X int hackpid = 0; /* current pid */
X int locknum = 0; /* max num of players */
X
X! static void whoami();
X! static void byebye();
X
X int
X main(argc,argv)
X--- 14,25 ----
X int hackpid = 0; /* current pid */
X int locknum = 0; /* max num of players */
X
X! static void NDECL(whoami);
X! static void NDECL(byebye);
X! #ifndef SAVE_ON_FATAL_ERROR
X! static long FDECL(vms_handler,(long [],long []));
X! #include <ssdef.h> /* system service status codes */
X! #endif
X
X int
X main(argc,argv)
X***************
X*** 99,104 ****
X--- 103,112 ----
X cls();
X u.uhp = 1; /* prevent RIP on early quits */
X u.ux = FAR; /* prevent nscr() */
X+ #ifndef SAVE_ON_FATAL_ERROR
X+ /* used to clear hangup stuff while still giving standard traceback */
X+ VAXC$ESTABLISH(vms_handler);
X+ #endif
X (void) signal(SIGHUP, (SIG_RET_TYPE) hangup);
X
X /*
X***************
X*** 403,405 ****
X--- 411,435 ----
X (void) chdir(getenv("PATH"));
X #endif
X }
X+
X+ #ifndef SAVE_ON_FATAL_ERROR
X+ /* Condition handler to prevent byebye's hangup simulation
X+ from saving the game after a fatal error has occurred. */
X+ static long
X+ vms_handler(sigargs, mechargs)
X+ long sigargs[], mechargs[]; /* [0] is argc, [1..argc] are the real args */
X+ {
X+ extern boolean hu; /* src/save.c */
X+ long condition = sigargs[1];
X+
X+ if (condition == SS$_ACCVIO /* access violation */
X+ || condition >= SS$_ASTFLT && condition <= SS$_TBIT
X+ || condition >= SS$_ARTRES && condition <= SS$_INHCHME) {
X+ if (wizard)
X+ abort(); /* enter the debugger */
X+ else
X+ hu = TRUE; /* pretend that hangup has already been attempted */
X+ }
X+ return SS$_RESIGNAL;
X+ }
X+ #endif
X*** vms.old/vmstty.c Thu May 24 20:20:31 1990
X--- vms/vmstty.c Tue Jun 26 22:46:12 1990
X***************
X*** 21,27
X
X extern short ospeed;
X char erase_char, intr_char, kill_char;
X! static boolean settty_needed = FALSE;
X #ifndef MAIL
X static /* else global ('extern' in mail.c) */
X #endif
X
X--- 21,27 -----
X
X extern short ospeed;
X char erase_char, intr_char, kill_char;
X! static boolean settty_needed = FALSE, bombing = FALSE;
X #ifndef MAIL
X static /* else global ('extern' in mail.c) */
X #endif
X***************
X*** 109,115
X
X static void
X resettty(){ /* atexit() routine */
X! if (settty_needed)
X settty((char *)NULL);
X (void) SYS$DASSGN(tt_chan), tt_chan = 0;
X }
X
X--- 109,116 -----
X
X static void
X resettty(){ /* atexit() routine */
X! if (settty_needed) {
X! bombing = TRUE; /* don't clear screen; preserve traceback info */
X settty((char *)NULL);
X }
X (void) SYS$DASSGN(tt_chan), tt_chan = 0;
X***************
X*** 111,116
X resettty(){ /* atexit() routine */
X if (settty_needed)
X settty((char *)NULL);
X (void) SYS$DASSGN(tt_chan), tt_chan = 0;
X }
X
X
X--- 112,118 -----
X if (settty_needed) {
X bombing = TRUE; /* don't clear screen; preserve traceback info */
X settty((char *)NULL);
X+ }
X (void) SYS$DASSGN(tt_chan), tt_chan = 0;
X }
X
X***************
X*** 167,176
X settty(s)
X char *s;
X {
X! clear_screen();
X! end_screen();
X! if(s) Printf(s);
X! (void) fflush(stdout);
X #ifdef MAIL /* this is essential, or lib$spawn & lib$attach will fail */
X SMG$DISABLE_BROADCAST_TRAPPING(&pasteboard_id);
X #endif
X
X--- 169,179 -----
X settty(s)
X char *s;
X {
X! if (!bombing) {
X! end_screen();
X! if(s) Printf(s);
X! (void) fflush(stdout);
X! }
X #ifdef MAIL /* this is essential, or lib$spawn & lib$attach will fail */
X SMG$DISABLE_BROADCAST_TRAPPING(&pasteboard_id);
X #endif
END_OF_FILE
if test 43223 -ne `wc -c <'patches09'`; then
echo shar: \"'patches09'\" unpacked with wrong size!
fi
# end of 'patches09'
fi
echo shar: End of shell archive.
exit 0

0 new messages