Path: utzoo!mnetor!uunet!lll-winken!lll-lcc!ames!ucbcad!pasteur!cory.Berkeley.EDU!iverson From: iverson@cory.Berkeley.EDU (Tim Iverson) Newsgroups: comp.bugs.misc Subject: Fixes for nethack on MS-DOS using MSC4.0 Message-ID: <35@pasteur.Berkeley.Edu> Date: 30 Dec 87 04:51:32 GMT Sender: news@pasteur.Berkeley.Edu Reply-To: iverson@cory.Berkeley.EDU.UUCP (Tim Iverson) Organization: University of California, Berkeley Lines: 2028 Run this through patch (on the original distribution) to get nethack running on MS-DOS. These are context diffs, so if you've changed your version a little, it might still work. There's only one bug left that I know of - occasionaly, the game hangs if you keep your dog around. Since I dispose of my dog right away, this is no problem for me. Anyway, nethack has finally become more trouble than it's worth, so this is probably the last time I do something with it. Despite this, I'll still help you if you have problems with the patches. :-) - Tim Iverson iverson@cory.Berkeley.EDU ucbvax!cory!iverson ------------------------------------------------------------------------- Only in old: Fixes.2.2 Only in old: Guidebook Only in old: Guidebook.mn Only in old: MANIFEST diff -sct old/Make.ini ./Make.ini *** old/Make.ini Sat Dec 5 11:39:44 1987 --- ./Make.ini Mon Dec 28 16:28:43 1987 *************** *** 1,42 **** ! # SCCS Id: @(#)Make.ini 1.4 87/08/08 ! # This is a sample `make.ini' file for NDMAKE v3.7. You will probably want ! # to customize it for your system. - - # The order to search for rules and files is specified by .SUFFIXES ! .SUFFIXES : .exe .obj .c .for .asm ! # A few macros. ! CFLAGS = -A$(MODEL) ! MODEL = S ! SETARGV = $(LIB)\$(MODEL)SETARGV ! LIBS = ! BIN = ! LFLAGS = - # A universally useful target. - clean: - +-erase *.bak - +-erase *.map - - # .BEFORE and .AFTER can be used to turn DPATH off and on. - .BEFORE:; @+echo For help with ndmake, use the command `make -h' - .AFTER:; @+echo All done. - - # DEFAULT RULES ! # To produce a `.obj' file from a `.asm' file using MASM. ! .asm.obj:; masm $*.asm; ! # To produce a `.obj' file from a `.c' file using Microsoft C. ! .c.obj:; msc $(CFLAGS) -I\c $*.c - # To produce a `.obj' file from a `.for' file using Microsoft Fortran. - .for.obj: - for1 $*.for; - pas2 - # To produce a `.exe' file from an `.obj' file. Note that there is a # problem because LIBS may be different for linking `.obj' files # produced by different compilers (C, FORTRAN, PASCAL, etc). To avoid --- 1,33 ---- ! # Print the `make -h' message ! #.HELP # The order to search for rules and files is specified by .SUFFIXES ! .SUFFIXES : .com .exe .obj .c .asm ! # macros for microsoft C ! CC = cl ! MEM = S ! CPU = 2 ! WARN = 3 ! CSIGN = -J ! OPTIONS = -Ot ! LOPTS = /noi ! FP = -FPa ! LIBS = ! CFLAGS = ! SARGV = c:\msc\obj\$(MEM)setargv.obj ! C_ALWAYS= -nologo -A$(MEM) -Zp -G$(CPU) -W$(WARN) $(CSIGN) $(FP) -DLINT_ARGS ! COPTS = ${C_ALWAYS} ${OPTIONS} ${CFLAGS} # DEFAULT RULES ! # To produce a `.obj' file from a `.asm' file. ! .asm.obj:; ! masm $*.asm; ! # To produce a `.obj' file from a `.c' file. ! # .c.obj:; cl $(COPTS) -c $*.c ! .c.obj :; $(CC) $(COPTS) -Fo$@ -c $< # To produce a `.exe' file from an `.obj' file. Note that there is a # problem because LIBS may be different for linking `.obj' files # produced by different compilers (C, FORTRAN, PASCAL, etc). To avoid *************** *** 44,67 **** # the FORTRAN compiler produce `.fbj' files, etc. Then you could write # specific rules for `.cbj.exe' and `.fbj.exe' which would use the correct # libraries. ! .obj.exe: ! link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS); # To produce a `.exe' file from a `.asm' file. ! .asm.exe: masm $*.asm; ! link $*.obj, $@,, $(LIBS) erase $*.obj ! # To produce a `.exe' file from a `.c' file. ! .c.exe: ! msc $(CFLAGS) -I\c $*.c ! link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS) erase $*.obj ! # To produce a `.exe' file from a `.for' file. ! .for.exe: ! for1 $*.for; ! pas2 ! link $*.obj, $@,, $(LIB)\FORTRAN.LIB ! erase $*.obj --- 35,65 ---- # the FORTRAN compiler produce `.fbj' files, etc. Then you could write # specific rules for `.cbj.exe' and `.fbj.exe' which would use the correct # libraries. ! .obj.exe :; link $* $(SARGV), $@, nul, ${LIBS} ${LOPTS}; # To produce a `.exe' file from a `.asm' file. ! .asm.exe : masm $*.asm; ! link $*.obj, $@ $(LOPTS); erase $*.obj ! # To produce a `.com' file from a `.asm' file. ! .asm.com : ! masm $*.asm; ! link $*.obj, $* $(LOPTS); ! exe2bin $*.exe $*.com ! erase $*.exe erase $*.obj ! # To produce a `.exe' file from a `.c' file. ! .c.exe : ! $(CC) $(COPTS) -Fo$*.obj -c $< ! link $* $(SARGV), $@, nul, $(LIBS) $(LOPTS); ! del $*.obj ! ! # To produce a `.com' file from a `.c' file. ! .c.com : ! $(CC) $(COPTS) -Fo$*.obj -c $< ! link $* $(SARGV), $@,nul, $(LIBS) $(LOPTS); ! exe2bin $*.exe $*.com ! del $*.exe Only in old: Makefile.att diff -sct old/Makefile.pc ./Makefile.pc *** old/Makefile.pc Sat Dec 5 11:38:28 1987 --- ./Makefile.pc Mon Dec 28 19:05:27 1987 *************** *** 1,27 **** ! # SCCS Id: @(#)Makefile.pc 2.2 87/11/11 ! # Makefile for NetHack (PC) version 1.0 written using ! # Microsoft(tm) "C" v3.0 or better. # # Large memory model, register bug, remove stack probes: ! WIZARD= ! V = 35 ! CFLAGS = -A$(MODEL) -DREGBUG -DLINT_ARGS -DVER=$V $(WIZARD) -Ot -Gs -Gt100 ! LIBS = ! LFLAGS = ! MODEL = L ! SETARGV = $(LIB)\$(MODEL)SETARGV ! .SUFFIXES: .exe .obj .c ! .c.obj:; cl $(CFLAGS) -c $*.c ! .c.exe:; ! cl $(CFLAGS) -c $*.c ! link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS); # The game name ! GAME = hack.exe # The game directory ! GAMEDIR = \h # All object modules OBJS = decl.obj apply.obj bones.obj cmd.obj do.obj dothrow.obj\ --- 1,24 ---- ! # Makefile for compiling nethack using MSC 4.0 and ndmake43 # # Large memory model, register bug, remove stack probes: ! V = 22 ! WARN = 1 ! CSIGN = ! CFLAGS = -DREGBUG -DVER=$V -Ot -Gt32 -I/tmp ! # this is the termcap library - you'll need to make this yourself ! LIBS = ${MEM}termcap ! MEM = L + #this turns on file glob'ing - useless for hack + # it also uses lots of space in the run file. + #SARGV = $(LIB)\$(MODEL)SETARGV + # The game name ! GAME = nhack.exe # The game directory ! GAMEDIR = \usr\games\nh # All object modules OBJS = decl.obj apply.obj bones.obj cmd.obj do.obj dothrow.obj\ *************** *** 38,48 **** wizard.obj worm.obj worn.obj write.obj zap.obj \ version.obj rnd.obj alloc.obj msdos.obj ! # The main target - you may want to try both of these alternatives. # $(GAME) : $(OBJS) ! # link $(OBJS), $(GAME) /NOIG /STACK:4000 /CP:1; ! # link $(OBJS), $(GAME) /NOIG /STACK:0xa00 /CP:1; # variable auxilary files. --- 35,44 ---- wizard.obj worm.obj worn.obj write.obj zap.obj \ version.obj rnd.obj alloc.obj msdos.obj ! # The main target # $(GAME) : $(OBJS) ! link $(OBJS), $(GAME), nul, $(LIBS) /noi /stack:0xf00 /seg:1024; # variable auxilary files. *************** *** 50,79 **** VARAUX = data rumors install : $(GAME) $(VARAUX) ! - exepack $(GAME) $(GAMEDIR)\$(GAME) ! - exemod $(GAMEDIR)\$(GAME) /max 1 clean : ! erase $(GAME) ! ! spotless: clean erase *.obj ! erase main.c ! erase tty.c ! erase unix.c ! srcs : ! copy makefile \tmp ! copy *.c \tmp ! copy *.h \tmp ! copy \local\make\make.doc \tmp ! copy \local\make\make.ini \tmp ! copy \bin\make.exe \tmp ! cd \tmp ! time ! touch *.* ! arc m hack$Vs * *.* ! cd $(CWD) # Other dependencies --- 46,68 ---- VARAUX = data rumors install : $(GAME) $(VARAUX) ! exemod $(GAME) /min 1 /max 1 ! mv $(GAME) $(GAMEDIR)/$(GAME) ! # game is too big to run exepack (even with 640k!) ! # exepack $(GAME) $(GAMEDIR)\$(GAME) clean : ! erase *.bat ! erase *.bak ! erase *.exe erase *.obj ! erase tags ! # this must be done in a subshell (otherwise 'cd' is meaningless) ! # this is a feature of ndmake - probably will choke other pc MAKEs, but ! # will work fine on unix MAKEs ! zoo : clean ! ( cd /tmp ; zoo aP: nhack$(V) $(CWD)/* ; mv nhack$(V).zoo $(CWD) ) # Other dependencies *************** *** 80,88 **** # RUMORFILES= rumors.bas rumors.kaa rumors.mrx ! makedefs.exe: makedefs.c alloc.obj config.h ! cl -AL makedefs.c alloc.obj rumors : config.h $(RUMORFILES) makedefs.exe makedefs.exe -r --- 69,78 ---- # RUMORFILES= rumors.bas rumors.kaa rumors.mrx ! makedefs.obj: config.h + makedefs.exe: makedefs.obj alloc.obj + link makedefs.obj alloc.obj, makedefs $(LOPTS); rumors : config.h $(RUMORFILES) makedefs.exe makedefs.exe -r *************** *** 103,115 **** makedefs.exe -t main.obj : pcmain.c hack.h ! $(CC) $(CFLAGS) -Fo$@ -c pcmain.c tty.obj : pctty.c hack.h msdos.h ! $(CC) $(CFLAGS) -Fo$@ -c pctty.c unix.obj : pcunix.c hack.h mkroom.h ! $(CC) $(CFLAGS) -Fo$@ -c pcunix.c decl.obj : hack.h mkroom.h apply.obj : hack.h edog.h mkroom.h --- 93,105 ---- makedefs.exe -t main.obj : pcmain.c hack.h ! $(CC) $(COPTS) -Fo$@ -c pcmain.c tty.obj : pctty.c hack.h msdos.h ! $(CC) $(COPTS) -Fo$@ -c pctty.c unix.obj : pcunix.c hack.h mkroom.h ! $(CC) $(COPTS) -Fo$@ -c pcunix.c decl.obj : hack.h mkroom.h apply.obj : hack.h edog.h mkroom.h Only in old: Makefile.tcc Only in old: Makefile.unix Only in old: Makefile.xenix Only in old: Maketcc.ini Only in old: NetHack.cnf Files old/README and ./README are identical Files old/README.OLD and ./README.OLD are identical Files old/README.ORIG and ./README.ORIG are identical diff -sct old/alloc.c ./alloc.c *** old/alloc.c Sat Dec 5 11:39:04 1987 --- ./alloc.c Mon Dec 28 19:05:28 1987 *************** *** 26,34 **** alloc(lth) register unsigned lth; { register char *ptr; ! if(!(ptr = malloc(lth))) panic("Cannot get %d bytes", lth); return((long *) ptr); } --- 26,35 ---- alloc(lth) register unsigned lth; { + extern char *calloc(int, int); register char *ptr; ! if (!(ptr = calloc(1, lth))) panic("Cannot get %d bytes", lth); return((long *) ptr); } diff -sct old/apply.c ./apply.c *** old/apply.c Wed Dec 2 21:55:58 1987 --- ./apply.c Mon Dec 28 19:05:29 1987 *************** *** 82,93 **** #endif case BLINDFOLD: if (Blindfolded) { ! Blindfolded = 0; ! if (!Blinded) Blinded = 1; /* see on next move */ ! else pline("You still cannot see."); } else { ! Blindfolded = 1; ! seeoff(0); } break; default: --- 82,95 ---- #endif case BLINDFOLD: if (Blindfolded) { ! Blindfolded = 0; /* not blindfolded anymore */ ! if (!Blinded) ! Blinded = 1; /* see on next move */ ! else ! pline("You still cannot see."); } else { ! Blindfolded = ~TIMEOUT; /* blindfolds stay on until */ ! seeoff(0); /* taken off - no timeout */ } break; default: Files old/bones.c and ./bones.c are identical Files old/cmd.c and ./cmd.c are identical diff -sct old/config.h ./config.h *** old/config.h Sat Dec 5 11:37:30 1987 --- ./config.h Mon Dec 28 19:05:30 1987 *************** *** 18,32 **** * Also, the code for suspend and various ioctls is only given for BSD4.2 */ /* #define MSDOS /* define for MS-DOS (actually defined by compiler) */ ! #define UNIX /* delete if no fork(), exec() available */ /* #define GENIX /* Yet Another Unix Clone */ ! #define BSD /* defind for 4.n BSD */ /* #define SYSV /* define for System V */ /* #define BETA /* if a beta-test copy [MRS] */ #define VERSION "2.2a" /* version number. */ ! #define PYRAMID_BUG /* avoid a bug on the Pyramid */ /* #define APOLLO /* same for the Apollo */ /* #define STUPID /* avoid some complicated expressions if your C compiler chokes on them */ --- 18,32 ---- * Also, the code for suspend and various ioctls is only given for BSD4.2 */ /* #define MSDOS /* define for MS-DOS (actually defined by compiler) */ ! /* #define UNIX /* delete if no fork(), exec() available */ /* #define GENIX /* Yet Another Unix Clone */ ! /* #define BSD /* defind for 4.n BSD */ /* #define SYSV /* define for System V */ /* #define BETA /* if a beta-test copy [MRS] */ #define VERSION "2.2a" /* version number. */ ! /* #define PYRAMID_BUG /* avoid a bug on the Pyramid */ /* #define APOLLO /* same for the Apollo */ /* #define STUPID /* avoid some complicated expressions if your C compiler chokes on them */ *************** *** 37,43 **** #define signal ssignal #endif ! #define WIZARD "mike" /* the person allowed to use the -D option */ #define RECORD "record"/* the file containing the list of topscorers */ #define NEWS "news" /* the file containing the latest hack news */ #define HELP "help" /* the file containing a description of the commands */ --- 37,43 ---- #define signal ssignal #endif ! /*#define WIZARD "Zardoz"/* the person allowed to use the -D option */ #define RECORD "record"/* the file containing the list of topscorers */ #define NEWS "news" /* the file containing the latest hack news */ #define HELP "help" /* the file containing a description of the commands */ *************** *** 93,99 **** * If you define HACKDIR, then this will be the default playground; * otherwise it will be the current directory. */ ! #define HACKDIR "/usr/games/lib/nethackdir" /* * Some system administrators are stupid enough to make Hack suid root --- 93,99 ---- * If you define HACKDIR, then this will be the default playground; * otherwise it will be the current directory. */ ! #define HACKDIR "/usr/games/nh/nhdir" /* * Some system administrators are stupid enough to make Hack suid root *************** *** 113,119 **** /* size of terminal screen is (at least) (ROWNO+2) by COLNO */ #define COLNO 80 ! #define ROWNO 22 #ifdef BSD #include /* declarations for strcat etc. */ --- 113,119 ---- /* size of terminal screen is (at least) (ROWNO+2) by COLNO */ #define COLNO 80 ! #define ROWNO 23 #ifdef BSD #include /* declarations for strcat etc. */ *************** *** 221,227 **** #define SAC /* Soldiers, barracks by Steve Creps */ #if defined(MSDOS) && defined(GRAPHICS) ! #define MSDOSCOLOR #endif /* --- 221,227 ---- #define SAC /* Soldiers, barracks by Steve Creps */ #if defined(MSDOS) && defined(GRAPHICS) ! /* #define MSDOSCOLOR /* colors are extremely repulsive */ #endif /* Only in .: core Only in .: data.bas Only in old: data.base diff -sct old/date.h ./date.h *** old/date.h Wed Dec 2 22:14:00 1987 --- ./date.h Mon Dec 28 19:05:30 1987 *************** *** 1,3 **** /* SCCS Id: @(#)date.h 1.4 87/08/08 */ ! char datestring[] = "Mon Nov 30 01:25:12 1987"; --- 1,3 ---- /* SCCS Id: @(#)date.h 1.4 87/08/08 */ ! char datestring[] = "Thu Dec 24 00:34:16 1987"; Files old/decl.c and ./decl.c are identical Files old/do.c and ./do.c are identical Files old/do_name.c and ./do_name.c are identical Files old/do_wear.c and ./do_wear.c are identical diff -sct old/dog.c ./dog.c *** old/dog.c Sat Dec 5 11:38:34 1987 --- ./dog.c Mon Dec 28 19:05:32 1987 *************** *** 8,14 **** #include "mkroom.h" #ifdef DOGNAME ! char dogname[63]; #endif /* DOGNAME */ struct permonst li_dog = --- 8,14 ---- #include "mkroom.h" #ifdef DOGNAME ! char dogname[63] = ""; #endif /* DOGNAME */ struct permonst li_dog = *************** *** 21,27 **** struct monst * makedog(){ register struct monst *mtmp = makemon(&li_dog,u.ux,u.uy); ! if(!mtmp) return((struct monst *) 0); /* dogs were genocided */ #ifdef DOGNAME if (dogname[0]) { register struct monst *mtmp2; --- 21,28 ---- struct monst * makedog(){ register struct monst *mtmp = makemon(&li_dog,u.ux,u.uy); ! if(!mtmp) return((struct monst *) 0); /* dogs were genocided */ ! *NAME(mtmp) = '\0'; /* make sure unamed dogs have no name */ #ifdef DOGNAME if (dogname[0]) { register struct monst *mtmp2; Files old/dogmove.c and ./dogmove.c are identical Files old/dothrow.c and ./dothrow.c are identical Files old/eat.c and ./eat.c are identical Files old/edog.h and ./edog.h are identical Files old/end.c and ./end.c are identical Files old/engrave.c and ./engrave.c are identical Files old/eshk.h and ./eshk.h are identical Files old/extern.h and ./extern.h are identical diff -sct old/fight.c ./fight.c *** old/fight.c Wed Dec 2 21:57:08 1987 --- ./fight.c Mon Dec 28 19:05:35 1987 *************** *** 27,33 **** schar tmp; boolean vis; if(!magr || !mdef) return(0); /* mike@genat */ ! if(index("Eauy", pa->mlet)) return(0); if(magr->mfroz) return(0); /* riv05!a3 */ tmp = pd->ac + pa->mlevel; if(mdef->mconf || mdef->mfroz || mdef->msleep){ --- 27,36 ---- schar tmp; boolean vis; if(!magr || !mdef) return(0); /* mike@genat */ ! ! /* was "Eauy" - this lets unicorns fight like they used to */ ! if(index("Eay", pa->mlet)) return(0); ! if(magr->mfroz) return(0); /* riv05!a3 */ tmp = pd->ac + pa->mlevel; if(mdef->mconf || mdef->mfroz || mdef->msleep){ *************** *** 316,322 **** else #endif if(obj->otyp == KATANA ! && !strcmp(ONAME(obj), "Snickersnee")) tmp += rnd(5); else if(mon->data->mlet == 'O' && obj->otyp == TWO_HANDED_SWORD && !strcmp(ONAME(obj), "Orcrist")) tmp += rnd(10); --- 319,325 ---- else #endif if(obj->otyp == KATANA ! && !strcmp(ONAME(obj), "Narsil")) tmp += rnd(5); else if(mon->data->mlet == 'O' && obj->otyp == TWO_HANDED_SWORD && !strcmp(ONAME(obj), "Orcrist")) tmp += rnd(10); *************** *** 461,477 **** * invisible. */ /* changes by wwp 5/16/85 */ if (!Blind && !Confusion && !Hallucination && mdat->mlet == 'd' && mtmp->mtame) { ! char *dname; /* added by Janet Walz (walz@mimsy) */ mtmp->mflee = 1; mtmp->mfleetim = rnd(6); ! if (dname = NAME(mtmp)) ! pline("You stop to avoid hitting %s.",dname); else pline("You stop to avoid hitting your dog."); return(TRUE); } if (flags.confirm && (mtmp->mpeaceful || mtmp->mtame) && ! Confusion && !Hallucination && !Invisible) --- 464,485 ---- * invisible. */ /* changes by wwp 5/16/85 */ + #ifdef DOG_LOVER + /* this prevents your dog from ever being hit by you - real stupid, + * I *like* killing my dog! + */ if (!Blind && !Confusion && !Hallucination && mdat->mlet == 'd' && mtmp->mtame) { ! char *dogname = NAME(mtmp); mtmp->mflee = 1; mtmp->mfleetim = rnd(6); ! if (*dogname) ! pline("You stop to avoid hitting %s.", dogname); else pline("You stop to avoid hitting your dog."); return(TRUE); } + #endif /* DOG_LOVER */ if (flags.confirm && (mtmp->mpeaceful || mtmp->mtame) && ! Confusion && !Hallucination && !Invisible) *************** *** 517,523 **** tmp = u.uluck + (u.mtimedone ? mons[u.umonnum].mlevel : u.ulevel) + mdat->ac + abon(); if (u.usym=='y' || u.usym=='F') tmp=100; ! if (index("uEa",u.usym)) return(TRUE); #else tmp = u.uluck + u.ulevel + mdat->ac + abon(); #endif --- 525,534 ---- tmp = u.uluck + (u.mtimedone ? mons[u.umonnum].mlevel : u.ulevel) + mdat->ac + abon(); if (u.usym=='y' || u.usym=='F') tmp=100; ! /* was "uEa" - stupid. Why can't unicorns hit monsters? ! * Now, if you are polymorphed into a unicorn, you can still fight. ! */ ! if (index("Ea", u.usym)) return(TRUE); #else tmp = u.uluck + u.ulevel + mdat->ac + abon(); #endif Only in .: fixes_2.2 Files old/flag.h and ./flag.h are identical diff -sct old/fountain.c ./fountain.c *** old/fountain.c Sat Dec 5 11:37:38 1987 --- ./fountain.c Mon Dec 28 19:05:36 1987 *************** *** 55,61 **** pline("You have unleashed a water demon!"); /* Give those on low levels a (slightly) better chance of survival */ ! if ( rnd(100) > (80 + dlevel)) { pline("Grateful for his release, he grants you a wish!"); makewish(); mondied(mtmp); --- 55,61 ---- pline("You have unleashed a water demon!"); /* Give those on low levels a (slightly) better chance of survival */ ! if ( rnd(100) > (80 + u.ulevel - u.uluck)) { pline("Grateful for his release, he grants you a wish!"); makewish(); mondied(mtmp); *************** *** 95,101 **** pline("Water gushes forth from the overflowing fountain!"); else pline("Your thirst is quenched."); ! return; } mx = somex(); my = somey(); --- 95,101 ---- pline("Water gushes forth from the overflowing fountain!"); else pline("Your thirst is quenched."); ! return(0); } mx = somex(); my = somey(); *************** *** 123,129 **** if (!rn2(3) && (levl[u.ux][u.uy].typ == FOUNTAIN)) { pline("The fountain dries up!"); levl[u.ux][u.uy].typ = ROOM; ! if(Invis) newsym(u.ux, u.uy); } } --- 123,129 ---- if (!rn2(3) && (levl[u.ux][u.uy].typ == FOUNTAIN)) { pline("The fountain dries up!"); levl[u.ux][u.uy].typ = ROOM; ! if(Invisible) newsym(u.ux, u.uy); } } *************** *** 259,264 **** --- 259,273 ---- /* Be *REAL* nice to him */ pline("A murky hand from the depths reaches up to bless the sword."); pline("As the hand retreats, the fountain disappears!"); + + /* gotta do this stuff first cause oname free()'s + * the pointer that is passed to it - ugly. + */ + #ifdef KAA + obj->dknown = 1; /* blessed */ + #endif + obj->cursed = 0; + obj->rustfree = 1; #ifndef RPH if(obj->spe < 5) obj->spe = 5; #else *************** *** 265,277 **** /* otherwise +rnd(10) / +5 "Super"sword */ oname(obj, "Excalibur"); #endif - #ifdef KAA - obj->dknown = 1; /* blessed */ - #endif - obj->cursed = 0; - obj->rustfree = 1; levl[u.ux][u.uy].typ = ROOM; ! if(Invis) newsym(u.ux, u.uy); return(0); } else pline ("Well, it looks wet now."); else { --- 274,281 ---- /* otherwise +rnd(10) / +5 "Super"sword */ oname(obj, "Excalibur"); #endif levl[u.ux][u.uy].typ = ROOM; ! if(Invisible) newsym(u.ux, u.uy); return(0); } else pline ("Well, it looks wet now."); else { Files old/func_tab.h and ./func_tab.h are identical Files old/gen.h and ./gen.h are identical Files old/gold.h and ./gold.h are identical diff -sct old/hack.c ./hack.c *** old/hack.c Wed Dec 2 15:55:02 1987 --- ./hack.c Mon Dec 28 19:05:37 1987 *************** *** 524,530 **** flags.botl = 1; freegold(gold); if(flags.run) nomul(0); ! if(Invis) newsym(u.ux,u.uy); } --- 524,530 ---- flags.botl = 1; freegold(gold); if(flags.run) nomul(0); ! if(Invisible) newsym(u.ux,u.uy); } diff -sct old/hack.h ./hack.h *** old/hack.h Sat Dec 5 11:39:52 1987 --- ./hack.h Mon Dec 28 19:05:37 1987 *************** *** 69,75 **** #else #define MAX_CARR_CAP 500 #endif ! #ifdef RPH #define MAXLEVEL 60 #else #define MAXLEVEL 40 --- 69,75 ---- #else #define MAX_CARR_CAP 500 #endif ! #if defined(RPH) && !defined(MSDOS) /* 60 is too big for floppies */ #define MAXLEVEL 60 #else #define MAXLEVEL 40 Only in old: help Only in old: hh Files old/invent.c and ./invent.c are identical Files old/ioctl.c and ./ioctl.c are identical diff -sct old/lev.c ./lev.c *** old/lev.c Wed Dec 2 22:03:22 1987 --- ./lev.c Mon Dec 28 19:05:38 1987 *************** *** 174,180 **** int monsindex; extern struct permonst li_dog, dog, la_dog; #ifdef KAA - int mi; extern struct permonst hell_hound; # ifdef HARD extern struct permonst d_lord, d_prince; --- 174,179 ---- *************** *** 191,220 **** /* store an index where the pointer used to be */ permonstp = mtmp->data; if (permonstp == &li_dog) ! monsindex = mi = -1; /* fake index */ else if (permonstp == &dog) ! monsindex = --mi; /* fake index */ else if (permonstp == &la_dog) ! monsindex = --mi; /* fake index */ #ifdef KAA else if (permonstp == &hell_hound) ! monsindex = --mi; /* fake index */ # ifdef HARD else if (permonstp == &d_lord) ! monsindex = --mi; /* fake index */ else if (permonstp == &d_prince) ! monsindex = --mi; /* fake index */ # endif # ifdef KJSMODS else if (permonstp == &pm_guard) ! monsindex = -mi; /* fake index */ else if (permonstp == &pm_ghost) ! monsindex = -mi; /* fake index */ else if (permonstp == &pm_eel) ! monsindex = -mi; /* fake index */ # endif #endif else --- 190,219 ---- /* store an index where the pointer used to be */ permonstp = mtmp->data; if (permonstp == &li_dog) ! monsindex = -1; /* fake index */ else if (permonstp == &dog) ! monsindex = -2; /* fake index */ else if (permonstp == &la_dog) ! monsindex = -3; /* fake index */ #ifdef KAA else if (permonstp == &hell_hound) ! monsindex = -4; /* fake index */ # ifdef HARD else if (permonstp == &d_lord) ! monsindex = -5; /* fake index */ else if (permonstp == &d_prince) ! monsindex = -6; /* fake index */ # endif # ifdef KJSMODS else if (permonstp == &pm_guard) ! monsindex = -7; /* fake index */ else if (permonstp == &pm_ghost) ! monsindex = -8; /* fake index */ else if (permonstp == &pm_eel) ! monsindex = -9; /* fake index */ # endif #endif else Only in old: make.exe Files old/makedefs.c and ./makedefs.c are identical diff -sct old/makemon.c ./makemon.c *** old/makemon.c Sat Dec 5 11:37:12 1987 --- ./makemon.c Mon Dec 28 19:05:39 1987 *************** *** 40,46 **** boolean anything = (!ptr); int zlevel = dlevel; #ifdef BVH ! if(has_amulet()) zlevel = 40; #endif /* if a monster already exists at the position, return */ if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0); --- 40,46 ---- boolean anything = (!ptr); int zlevel = dlevel; #ifdef BVH ! if(has_amulet()) zlevel = MAXLEVEL; #endif /* if a monster already exists at the position, return */ if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0); *************** *** 54,60 **** if(index(fut_geno, 'm')) nleft++; /* only 1 minotaur */ if(index(fut_geno, '@')) nleft++; if(nleft <= 0) ! return((struct monst *) 0); /* no more monsters! */ /* determine the strongest monster to make. */ #ifdef ROCKMOLE --- 54,64 ---- if(index(fut_geno, 'm')) nleft++; /* only 1 minotaur */ if(index(fut_geno, '@')) nleft++; if(nleft <= 0) ! #ifdef HARD ! goto gen2many; /* make a demon! */ ! #else ! return (struct monst *) 0; ! #endif /* HARD */ /* determine the strongest monster to make. */ #ifdef ROCKMOLE *************** *** 77,93 **** /* since this is a random monster, make a Kobold instead of a Kop. */ ptr = &kobold; - # else - deep--; # endif continue; } #endif /* KOPS /**/ if(deep-- <= 0) goto gotmon; } ! /* this can happen if you are deep in the dungeon and ! mostly weak monsters have been genocided. */ ! return((struct monst *) 0); } gotmon: #if defined(KJSMODS) && defined(ROCKMOLE) --- 81,114 ---- /* since this is a random monster, make a Kobold instead of a Kop. */ ptr = &kobold; # endif + deep--; continue; } #endif /* KOPS /**/ if(deep-- <= 0) goto gotmon; } ! ! #ifdef HARD ! /* fool adventurer genocided too many monsters, now ! * he gets to fight various hellspawn ... ! * (70% demons, 20% lords, 10% princes) ! */ ! gen2many: switch (rn2(10)) ! { ! default: ! ptr = PM_DEMON; ! break; ! case 3: case 8: ! ptr = &d_lord; ! break; ! case 5: ! ptr = &d_prince; ! break; ! } ! #else ! return (struct monst *) 0; ! #endif /* HARD */ } gotmon: #if defined(KJSMODS) && defined(ROCKMOLE) *************** *** 137,149 **** mtmp->cham = 0; else { mtmp->cham = 1; (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); } #else mtmp->cham = 1; (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); ! #endif } if(ptr->mlet == 'I' || ptr->mlet == ';') mtmp->minvis = 1; --- 158,178 ---- mtmp->cham = 0; else { mtmp->cham = 1; + #ifndef RPH (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); + #else + (void) newcham(mtmp, (struct permonst *) 0); + #endif /* RPH */ } #else mtmp->cham = 1; + #ifndef RPH (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]); ! #else ! (void) newcham(mtmp, (struct permonst *) 0); ! #endif /* RPH */ ! #endif /* DGKMOD */ } if(ptr->mlet == 'I' || ptr->mlet == ';') mtmp->minvis = 1; Files old/mfndpos.h and ./mfndpos.h are identical Files old/mhitu.c and ./mhitu.c are identical Files old/mklev.c and ./mklev.c are identical diff -sct old/mkmaze.c ./mkmaze.c *** old/mkmaze.c Sat Dec 5 11:38:42 1987 --- ./mkmaze.c Mon Dec 28 19:05:41 1987 *************** *** 71,81 **** (void) mkobj_at(ROCK_SYM, zx, zy); /* put a rock on top of it */ } for(x = 2; x < COLNO-1; x++) for(y = 2; y < ROWNO-1; y++) { switch(levl[x][y].typ) { case HWALL: ! levl[x][y].scrsym = HWALL_SYM; break; case ROOM: levl[x][y].scrsym = ROOM_SYM; --- 71,92 ---- (void) mkobj_at(ROCK_SYM, zx, zy); /* put a rock on top of it */ } + /* cosmetic changes - change some of the HWALLs to VWALLs so + * that vertical corridors are enclosed by vertical walls, not + * horizontal ones. This is much much easier on the eyes. + */ + #define LSYM levl[x-1][y].typ + #define RSYM levl[x+1][y].typ for(x = 2; x < COLNO-1; x++) for(y = 2; y < ROWNO-1; y++) { switch(levl[x][y].typ) { case HWALL: ! if (LSYM != HWALL && RSYM != HWALL) { ! levl[x][y].scrsym = VWALL_SYM; ! levl[x][y].typ = VWALL; ! } ! else ! levl[x][y].scrsym = HWALL_SYM; break; case ROOM: levl[x][y].scrsym = ROOM_SYM; *************** *** 82,87 **** --- 93,112 ---- break; } } + + /* more cosmetics for the maze - get rid of horizontal intrusions */ + for(x = 2; x < COLNO-1; x++) + { + for(y = 3; y < ROWNO-2; y++) if (levl[x][y].typ == HWALL + && levl[x][y-1].typ == VWALL + && levl[x][y+1].typ == VWALL) + { + levl[x][y].typ = VWALL; + levl[x][y].scrsym = VWALL_SYM; + } + } + #undef LSYM + #undef RSYM for(x = rn1(8,11); x; x--) { mazexy(&mm); (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y); Files old/mkobj.c and ./mkobj.c are identical Files old/mkroom.h and ./mkroom.h are identical Files old/mkshop.c and ./mkshop.c are identical diff -sct old/mon.c ./mon.c *** old/mon.c Wed Dec 2 15:55:54 1987 --- ./mon.c Mon Dec 28 19:05:42 1987 *************** *** 485,491 **** HTelepat = 0; u.uluck -= 2; } ! if(mtmp->mpeaceful || mtmp->mtame) u.uluck--; if(mdat->mlet == 'u') u.uluck -= 5; if((int)u.uluck < LUCKMIN) u.uluck = LUCKMIN; --- 485,501 ---- HTelepat = 0; u.uluck -= 2; } ! if(mtmp->mpeaceful || mtmp->mtame) ! { ! /* number of sadistic acts that are good luck, "sadist = 1" ! * means that the 1st act increases luck, the second does ! * nothing, the rest decrease luck ! */ ! static int sadist = 1; ! ! if (sadist-- > 0) ++u.uluck; ! else if (sadist < 0) --u.uluck; ! } if(mdat->mlet == 'u') u.uluck -= 5; if((int)u.uluck < LUCKMIN) u.uluck = LUCKMIN; *************** *** 686,691 **** --- 696,712 ---- { register mhp, hpn, hpd; + #ifdef RPH + /* mdat = 0 -> caller wants a random monster shape */ + if (mdat == 0) { + int spread = 21 - u.ulevel + u.uluck / 2; + /* ie. min monster is mons[CMNUM - 1 - 20 - u.uluck], max is + * mons[CMNUM - 1]. spread gets smaller as adventurer gains + * experience, get bigger as adv. gains luck. + */ + mdat = &mons[CMNUM - spread + rn2(spread)]; + } + #endif if(mdat == mtmp->data) return(0); /* still the same monster */ #ifndef NOWORM if(mtmp->wormno) wormdead(mtmp); /* throw tail away */ diff -sct old/monmove.c ./monmove.c *** old/monmove.c Wed Dec 2 22:08:10 1987 --- ./monmove.c Mon Dec 28 19:05:43 1987 *************** *** 31,37 **** --- 31,41 ---- register tmp, nearby, scared, onscary; if(mtmp->cham && !rn2(6)) + #ifndef RPH (void) newcham(mtmp, &mons[dlevel+14+rn2(CMNUM-14-dlevel)]); + #else + (void) newcham(mtmp, (struct permonst *) 0); + #endif /* RPH */ mdat = mtmp->data; if(mdat->mlevel < 0) panic("bad monster %c (%d)",mdat->mlet,mdat->mlevel); *************** *** 420,430 **** --- 424,452 ---- && IS_ROCK(levl[mtmp->mx][mtmp->my].typ) && levl[mtmp->mx][mtmp->my].typ != POOL){ register int pile = rnd(25); + /* Just ate something. */ + #ifdef MOLE_DOORS + /* old style rockmoles can leave doors behind; real + * stupid hack - do they carry around a bunch of + * doors and install them after they eat the rock + * or what? If you like this, #define MOLE_DOORS + */ if(levl[mtmp->mx][mtmp->my].typ == 0) levl[mtmp->mx][mtmp->my].typ = CORR; else if(IS_WALL(levl[mtmp->mx][mtmp->my].typ)) levl[mtmp->mx][mtmp->my].typ = DOOR; + #else + /* if this is a maze, use room symbols otherwise, use + * corridor symbols. More "realistic" (ha!) and also makes + * rockmoles a little harder to track - no trail of doors. + */ + if (!xdnstair || IS_WALL(levl[mtmp->mx][mtmp->my].typ)) + levl[mtmp->mx][mtmp->my].typ = ROOM; + else + levl[mtmp->mx][mtmp->my].typ = CORR; + #endif /* MOLE_DOORS */ + mnewsym(mtmp->mx,mtmp->my); /* Left behind a pile? */ if(pile < 5) { Files old/monst.c and ./monst.c are identical Files old/monst.h and ./monst.h are identical diff -sct old/msdos.c ./msdos.c *** old/msdos.c Wed Dec 2 22:00:44 1987 --- ./msdos.c Mon Dec 28 19:05:44 1987 *************** *** 517,544 **** } (void) strncpy(SAVEF, bufp, PATHLEN); append_slash(SAVEF); #ifdef GRAPHICS ! } else if (!strncmp(buf, "GRAPHICS", 4)) { ! char translate[17]; ! short i; ! if ((i = sscanf(bufp, "%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u", ! &translate[0], &translate[1], &translate[2], ! &translate[3], &translate[4], &translate[5], ! &translate[6], &translate[7], &translate[8], ! &translate[9], &translate[10], &translate[11], ! &translate[12], &translate[13], &translate[14], ! &translate[15], &translate[16])) < 0) { ! msmsg ("Syntax error in GRAPHICS\n"); ! getreturn("to continue"); } ! translate[i] = '\0'; #endif /* GRAPHICS /**/ /* * You could have problems here if you configure FOUNTAINS, SPIDERS or NEWCLASS * in or out and forget to change the tail entries in your graphics string. */ - #define SETPCHAR(f, n) showsyms.f = (strlen(translate) > n) ? translate[n] : defsyms.f SETPCHAR(stone, 0); SETPCHAR(vwall, 1); SETPCHAR(hwall, 2); --- 517,554 ---- } (void) strncpy(SAVEF, bufp, PATHLEN); append_slash(SAVEF); + } #ifdef GRAPHICS ! else if (!strncmp(buf, "GRAPHICS", 4)) { ! unsigned int gvals[17]; ! int num_gvals; ! /* set gvals array to zero */ ! memset((char *) gvals, 0, sizeof gvals); ! ! /* get the values from the file into gvals */ ! if (sscanf(bufp, "%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u", ! &gvals[0], &gvals[1], &gvals[2], ! &gvals[3], &gvals[4], &gvals[5], ! &gvals[6], &gvals[7], &gvals[8], ! &gvals[9], &gvals[10], &gvals[11], ! &gvals[12], &gvals[13], &gvals[14], ! &gvals[15], &gvals[16]) < 0) ! { ! msmsg ("Syntax error in GRAPHICS\n"); ! getreturn("to continue"); } ! #define SETPCHAR(f, n) showsyms.f = gvals[n] ? gvals[n] : defsyms.f ! ! #else /* no GRAPHICS */ ! ! #define SETPCHAR(f, n) showsyms.f = defsyms.f ! #endif /* GRAPHICS /**/ /* * You could have problems here if you configure FOUNTAINS, SPIDERS or NEWCLASS * in or out and forget to change the tail entries in your graphics string. */ SETPCHAR(stone, 0); SETPCHAR(vwall, 1); SETPCHAR(hwall, 2); Files old/msdos.h and ./msdos.h are identical Only in old: nansi.sys Only in old: nethack.6 diff -sct old/nethack.cnf ./nethack.cnf *** old/nethack.cnf Sat Dec 5 11:40:02 1987 --- ./nethack.cnf Mon Dec 28 19:05:44 1987 *************** *** 1,8 **** ! HACKDIR=c:\games\nethack ! SAVE=c:\games\nethack\save ! LEVELS=c:\games\nethack\save ! OPTIONS=male,rawio,IBMBIOS,no rest_on_space,time,packorder:"/!?=)[%(*0 ! OPTIONS=silent,endgame:10t/0a # The 9 GRAPHICS characters are: # vertical wall, horizontal wall, top left corner, top right corner # bottom left corner, bottom right corner, door, floor, corridor --- 1,83 ---- ! # A '#' at the beginning of a line means the rest of the line is a comment. ! ! # This configuration file is set up for three cases, a person with a hard ! # disk as drive C:, 1 person with two floppy disks, and several people ! # with two floppy disks. The default configuration is the second one. ! # To change configuration, comment out the unwanted configurations, and ! # remove the comment from the configuration you want. ! ! # I use OPTIONS=name:NickD-W, silent, rawio, IBMBIOS ! ! # A hard disk configuration. ! # ! HACKDIR=c:\usr\games\nh\nhdir ! SAVE=save;n ! #RAMDISK=c:\tmp\ ! LEVELS=c:\tmp ! OPTIONS=name:Baalgor-W, nopickup, silent, rawio, IBMBIOS ! ! # A 2-floppy configuration. ! # ! # HACKDIR=a:\ ! # LEVELS=b:\ ! # SAVE=b:\ ! # OPTIONS=name:YourName-W ! # RAMDISK=c: ! ! # The 17 default GRAPHICS characters (in order) are: ! # stone ' ' ! # vertical wall '|' ! # horizontal wall '-' ! # top left corner '-' ! # top right corner '-' ! # bottom left corner '-' ! # bottom right corner '-' ! # door '+' ! # room floor '.' ! # corridor floor '#' ! # up stairs '>' ! # down stairs '<' ! # trap '^' ! # pool '}' ! # fountain '{' ! # throne '\' ! # web '"' ! ! # An example using the IBM graphics character set. ! # These change the defaults to something more pleasant on the IBM PC ! # A zero will act as a place holder & will cause the default to be used. ! GRAPHICS = 0 179 196 218 191 192 217 206 250 176 ! ! ! # Special section for DEC Rainbow owners. ! # ! # You *must* include the option `DECRainbow' in the OPTIONS line ! # if you want to use line-drawing charcters. Also, you must *not* ! # use the option `rawio' or your system will hang! ! # ! # You can select the "Rainbow line-drawing character set" ! # for drawing the dungeon. For *graphics* characters, ! # 128 has been added to the decimal value of the character. ! # Adding 128 lets PC HACK know you want it to use the line-drawing ! # character set. Non-graphical characters are indicated by ! # their decimal value. You can mix both types of characters in ! # the GRAPHICS line. ! # ! # A recommended configuration for the Rainbow using the ! # line-drawing character set, two floppies and no ramdisk is: ! # SAVE=b:\ ! # LEVELS=b:\ ! # OPTIONS=name:YourName,DECRainbow ! # GRAPHICS = 248 241 236 235 237 234 238 254 225 ! ! ! # this is the start of the screwed up hack.cnf that came with nethack 2.2 ! ! #HACKDIR=c:\usr\games\nh ! #SAVE=c:\usr\games\nh\save ! #LEVELS=c:\tmp ! #OPTIONS=male,rawio,IBMBIOS,no rest_on_space,no time,packorder:"/!?=)[%(*0 ! #OPTIONS=silent,endgame:10t/0a # The 9 GRAPHICS characters are: # vertical wall, horizontal wall, top left corner, top right corner # bottom left corner, bottom right corner, door, floor, corridor *************** *** 9,12 **** # An example using the IBM graphics character set. # from hack.35: GRAPHICS = 186 205 201 187 200 188 206 249 177 # from hack.36: GRAPHICS = 179 196 218 191 192 217 206 250 176 ! GRAPHICS = 186 205 201 187 200 188 206 249 177 --- 84,87 ---- # An example using the IBM graphics character set. # from hack.35: GRAPHICS = 186 205 201 187 200 188 206 249 177 # from hack.36: GRAPHICS = 179 196 218 191 192 217 206 250 176 ! #GRAPHICS = 186 205 201 187 200 188 206 249 177 Only in old: nethack.sh Only in old: netquest.sh Only in .: nhack.diff Only in old: nhack22.zoo Files old/o_init.c and ./o_init.c are identical Files old/obj.h and ./obj.h are identical Files old/objclass.h and ./objclass.h are identical Files old/objects.h and ./objects.h are identical Files old/objnam.c and ./objnam.c are identical Only in .: old Files old/onames.h and ./onames.h are identical diff -sct old/options.c ./options.c *** old/options.c Wed Dec 2 22:05:58 1987 --- ./options.c Mon Dec 28 19:05:47 1987 *************** *** 313,319 **** option_help(); return; } ! pline("Bad option: %s. Type `O help' for help.", opts); return; } #ifdef DGK --- 313,319 ---- option_help(); return; } ! pline("Bad option: %s. Type 'O help' for help.", opts); return; } #ifdef DGK *************** *** 435,475 **** (void) sprintf(buf, "To set options use OPTIONS= in %s", configfile); Page_line(buf); #else ! Page_line("To set options use `HACKOPTIONS=\"\"' in your environment"); #endif ! Page_line("or give the command \"O\" followed by the line while playing."); Page_line("Here is a list of options separated by commas."); Page_line(""); #ifdef DGK ! Page_line("Boolean options are confirm, pickup, rawio, silent, sortpack, time, IBMBIOS,") ! Page_line("and DECRainbow. These can be negated by prefixing them with '!' or \"no\"."); #else Page_line("Boolean options are rest_on_space, news, time, null tombstone, and (fe)male,"); ! Page_line("These can be negated by prefixing them with '!' or \"no\"."); #endif Page_line(""); ! Page_line("The compound options are `name', (eg. name:Merlin-W,),"); #ifdef DOGNAME ! Page_line("`dogname', the name of your (first) dog (eg. dogname:Fang,),"); #endif #ifdef SORTING ! Page_line("`packorder'; the order that items should appear in your pack"); (void)sprintf(buf, "(the default is: packorder:%s ), ", packorder); Page_line(buf); #endif #ifdef GRAPHICS ! Page_line("`endgame', and `graphics'."); #else ! Page_line("and `endgame'."); #endif Page_line(""); ! Page_line("The `endgame' option is followed by a description of which parts of"); Page_line("the scorelist you wish to see. You might for example say:"); Page_line(""); Page_line("\"endgame:own scores/5 top scores/4 around my score\"."); --- 435,475 ---- (void) sprintf(buf, "To set options use OPTIONS= in %s", configfile); Page_line(buf); #else ! Page_line("To set options use 'HACKOPTIONS=\"\"' in your environment"); #endif ! Page_line("or give the command 'O' followed by the line while playing."); Page_line("Here is a list of options separated by commas."); Page_line(""); #ifdef DGK ! Page_line("Boolean options are confirm, pickup, rawio, silent, sortpack, time, IBMBIOS,"); ! Page_line("and DECRainbow. These can be negated by prefixing them with '!' or 'no'."); #else Page_line("Boolean options are rest_on_space, news, time, null tombstone, and (fe)male,"); ! Page_line("These can be negated by prefixing them with '!' or 'no'."); #endif Page_line(""); ! Page_line("The compound options are 'name', (eg. name:Merlin-W,),"); #ifdef DOGNAME ! Page_line("'dogname', the name of your (first) dog (eg. dogname:Fang,),"); #endif #ifdef SORTING ! Page_line("'packorder'; the order that items should appear in your pack"); (void)sprintf(buf, "(the default is: packorder:%s ), ", packorder); Page_line(buf); #endif #ifdef GRAPHICS ! Page_line("'endgame', and 'graphics'."); #else ! Page_line("and 'endgame'."); #endif Page_line(""); ! Page_line("The 'endgame' option is followed by a description of which parts of"); Page_line("the scorelist you wish to see. You might for example say:"); Page_line(""); Page_line("\"endgame:own scores/5 top scores/4 around my score\"."); diff -sct old/pager.c ./pager.c *** old/pager.c Wed Dec 2 22:19:38 1987 --- ./pager.c Mon Dec 28 19:05:47 1987 *************** *** 238,244 **** if(!*s) return(0); /* suppress blank lines at top */ putchar('\n'); ! cury++; cmore("q\033"); if(morc) { morc = 0; --- 238,244 ---- if(!*s) return(0); /* suppress blank lines at top */ putchar('\n'); ! cury++; curx = 1; cmore("q\033"); if(morc) { morc = 0; *************** *** 252,258 **** } } xputs(s); xputc('\n'); ! cury++; return(0); } --- 252,258 ---- } } xputs(s); xputc('\n'); ! cury++; curx = 1; return(0); } *************** *** 344,350 **** } else { /* feed to pager */ set_pager(0); for (tl = texthead; tl; tl = tl->next_line) { ! if (page_line (tl->line_text)) { set_pager(2); goto cleanup; } --- 344,350 ---- } else { /* feed to pager */ set_pager(0); for (tl = texthead; tl; tl = tl->next_line) { ! if (page_line(tl->line_text)) { set_pager(2); goto cleanup; } diff -sct old/pcmain.c ./pcmain.c *** old/pcmain.c Wed Dec 2 22:10:42 1987 --- ./pcmain.c Mon Dec 28 19:05:48 1987 *************** *** 131,138 **** clearlocks(); exit(0); } break; ! #endif case 'u': if(argv[0][2]) (void) strncpy(plname, argv[0]+2, sizeof(plname)-1); --- 131,139 ---- clearlocks(); exit(0); } + # endif /* MSDOS */ break; ! #endif /* WIZARD */ case 'u': if(argv[0][2]) (void) strncpy(plname, argv[0]+2, sizeof(plname)-1); *************** *** 149,155 **** case 'R': ramdisk = FALSE; break; ! #endif default: /* allow -T for Tourist, etc. */ (void) strncpy(pl_character, argv[0]+1, --- 150,156 ---- case 'R': ramdisk = FALSE; break; ! #endif /* DGK */ default: /* allow -T for Tourist, etc. */ (void) strncpy(pl_character, argv[0]+1, diff -sct old/pctty.c ./pctty.c *** old/pctty.c Sat Dec 5 11:38:52 1987 --- ./pctty.c Mon Dec 28 19:05:48 1987 *************** *** 145,151 **** register foo; flags.move = 1; ! if(!Invisible) curs_on_u(); else home(); multi = 0; #ifdef DGK while((foo = readchar()) >= '0' && foo <= '9') { --- 145,151 ---- register foo; flags.move = 1; ! curs_on_u(); /* always put cursor on you */ multi = 0; #ifdef DGK while((foo = readchar()) >= '0' && foo <= '9') { *************** *** 288,291 **** } } ! #endif COM_COMPL --- 288,291 ---- } } ! #endif /* COM_COMPL */ Files old/pcunix.c and ./pcunix.c are identical Files old/permonst.h and ./permonst.h are identical Files old/polyself.c and ./polyself.c are identical Files old/potion.c and ./potion.c are identical Files old/pray.c and ./pray.c are identical diff -sct old/pri.c ./pri.c *** old/pri.c Wed Dec 2 22:11:12 1987 --- ./pri.c Mon Dec 28 19:05:50 1987 *************** *** 377,384 **** (void) sprintf(newbot, #ifdef GOLD_ON_BOTL # ifdef SPELLS ! "Lev %-2d Gp %-5lu Hp %3d(%d) Ep %3d(%d) Ac %-2d ", ! dlevel, u.ugold, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uen, u.uenmax, u.uac); --- 377,384 ---- (void) sprintf(newbot, #ifdef GOLD_ON_BOTL # ifdef SPELLS ! "%d Lev %-2d Gp %-5lu Hp %3d(%d) Ep %3d(%d) Ac %-2d ", ! u.uluck, dlevel, u.ugold, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uen, u.uenmax, u.uac); *************** *** 386,393 **** u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif # else ! "Level %-2d Gold %-5lu Hp %3d(%d) Ac %-2d ", ! dlevel, u.ugold, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uac); --- 386,393 ---- u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif # else ! "%d Level %-2d Gold %-5lu Hp %3d(%d) Ac %-2d ", ! u.uluck, dlevel, u.ugold, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uac); *************** *** 397,404 **** # endif #else # ifdef SPELLS ! "Level %-2d Hp %3d(%d) Energy %3d(%d) Ac %-2d ", ! dlevel, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uen, u.uenmax, u.uac); --- 397,404 ---- # endif #else # ifdef SPELLS ! "%d Level %-2d Hp %3d(%d) Energy %3d(%d) Ac %-2d ", ! u.uluck, dlevel, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uen, u.uenmax, u.uac); *************** *** 406,413 **** u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif # else ! "Level %-2d Hp %3d(%d) Ac %-2d ", ! dlevel, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uac); --- 406,413 ---- u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif # else ! "%d Level %-2d Hp %3d(%d) Ac %-2d ", ! u.uluck, dlevel, # ifdef KAA u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uac); diff -sct old/prisym.c ./prisym.c *** old/prisym.c Sat Dec 5 11:37:42 1987 --- ./prisym.c Mon Dec 28 19:05:51 1987 *************** *** 101,108 **** } } ! curs_on_u(){ ! curs(u.ux, u.uy+2); } pru() --- 101,109 ---- } } ! curs_on_u() ! { ! curs(u.ux, u.uy + 2); } pru() diff -sct old/read.c ./read.c *** old/read.c Wed Dec 2 21:58:08 1987 --- ./read.c Mon Dec 28 19:05:51 1987 *************** *** 43,49 **** pline("As you read the scroll, it disappears."); if(confused) { if (Hallucination) ! pline("Being so trippy, you screw up ... "); else pline("Being confused, you mispronounce the magic words ... "); } --- 43,49 ---- pline("As you read the scroll, it disappears."); if(confused) { if (Hallucination) ! pline("Being tripped out, you screw up ... "); else pline("Being confused, you mispronounce the magic words ... "); } Files old/rip.c and ./rip.c are identical Files old/rm.h and ./rm.h are identical Files old/rnd.c and ./rnd.c are identical Only in .: rumors.bas Only in old: rumors.base Files old/rumors.c and ./rumors.c are identical Files old/rumors.kaa and ./rumors.kaa are identical Files old/rumors.mrx and ./rumors.mrx are identical diff -sct old/save.c ./save.c *** old/save.c Wed Dec 2 22:14:32 1987 --- ./save.c Mon Dec 28 19:05:52 1987 *************** *** 369,398 **** if(!mtmp->m_id) mtmp->m_id = flags.ident++; monsindex = *((int *)&mtmp->data); ! if (monsindex == (mi = -1)) /* Special fake index */ mtmp->data = &li_dog; ! else if (monsindex == --mi) /* Special fake index */ mtmp->data = &dog; ! else if (monsindex == --mi) /* Special fake index */ mtmp->data = &la_dog; #ifdef KAA ! else if (monsindex == --mi) mtmp->data = &hell_hound; # ifdef HARD ! else if (monsindex == --mi) mtmp->data = &d_lord; ! else if (monsindex == --mi) mtmp->data = &d_prince; # endif # ifdef KJSMODS ! else if (monsindex == --mi) mtmp->data = &pm_guard; ! else if (monsindex == --mi) mtmp->data = &pm_ghost; ! else if (monsindex == --mi) mtmp->data = &pm_eel; # endif #endif --- 369,398 ---- if(!mtmp->m_id) mtmp->m_id = flags.ident++; monsindex = *((int *)&mtmp->data); ! if (monsindex == -1) /* Special fake index */ mtmp->data = &li_dog; ! else if (monsindex == -2) /* Special fake index */ mtmp->data = &dog; ! else if (monsindex == -3) /* Special fake index */ mtmp->data = &la_dog; #ifdef KAA ! else if (monsindex == -4) mtmp->data = &hell_hound; # ifdef HARD ! else if (monsindex == -5) mtmp->data = &d_lord; ! else if (monsindex == -6) mtmp->data = &d_prince; # endif # ifdef KJSMODS ! else if (monsindex == -7) mtmp->data = &pm_guard; ! else if (monsindex == -8) mtmp->data = &pm_ghost; ! else if (monsindex == -9) mtmp->data = &pm_eel; # endif #endif Files old/search.c and ./search.c are identical diff -sct old/shk.c ./shk.c *** old/shk.c Wed Dec 2 15:53:26 1987 --- ./shk.c Mon Dec 28 19:05:54 1987 *************** *** 547,552 **** --- 547,553 ---- addtobill(obj) register struct obj *obj; { register struct bill_x *bp; char buf[40]; + extern char *typename(int); if(!inshop() || (u.ux == ESHK(shopkeeper)->shk.x && u.uy == ESHK(shopkeeper)->shk.y) || (u.ux == ESHK(shopkeeper)->shd.x && u.uy == ESHK(shopkeeper)->shd.y) || Files old/shknam.c and ./shknam.c are identical diff -sct old/sit.c ./sit.c *** old/sit.c Sat Dec 5 11:39:30 1987 --- ./sit.c Mon Dec 28 19:05:54 1987 *************** *** 133,139 **** if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) { pline("The throne vanishes in a puff of logic."); ! /* levl[u.ux][u.uy].scrsym = ROOM_SYM; */ levl[u.ux][u.uy].typ = ROOM; } --- 133,139 ---- if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) { pline("The throne vanishes in a puff of logic."); ! levl[u.ux][u.uy].scrsym = ROOM_SYM; levl[u.ux][u.uy].typ = ROOM; } diff -sct old/spell.c ./spell.c *** old/spell.c Wed Dec 2 22:14:46 1987 --- ./spell.c Mon Dec 28 19:05:55 1987 *************** *** 29,35 **** return(0); } booktype = book->otyp; ! oops = !rn2(u.ulevel - objects[booktype].spl_lev + 7); switch(booktype) { /* level 1 spells */ --- 29,35 ---- return(0); } booktype = book->otyp; ! oops = !rn2(u.ulevel + u.uluck + 7 - objects[booktype].spl_lev); switch(booktype) { /* level 1 spells */ *************** *** 305,311 **** --- 305,315 ---- mtmp = makedog(); if(mtmp) { /* make it into something else */ + #ifndef RPH (void) newcham(mtmp, &mons[dlevel+14+rn2(CMNUM-14-dlevel)]); + #else + (void) newcham(mtmp, (struct permonst *) 0); + #endif /* RPH */ if(confused) mtmp->mtame = mtmp->mpeaceful = 0; } Files old/spell.h and ./spell.h are identical Files old/steal.c and ./steal.c are identical Only in .: termcap Only in old: termcap.arc diff -sct old/termcap.c ./termcap.c *** old/termcap.c Sat Dec 5 11:37:46 1987 --- ./termcap.c Mon Dec 28 19:05:55 1987 *************** *** 3,14 **** #include #include /* for isdigit() */ #include "hack.h" /* for ROWNO, COLNO, *HI, *HE */ #ifdef GENIX #define void int /* jhn - mod to prevent compiler from bombing */ #endif ! extern char *tgetstr(), *tgoto(), *getenv(); extern long *alloc(); #ifndef TERMINFO --- 3,17 ---- #include #include /* for isdigit() */ + #ifdef MSDOS + #include + #endif #include "hack.h" /* for ROWNO, COLNO, *HI, *HE */ #ifdef GENIX #define void int /* jhn - mod to prevent compiler from bombing */ #endif ! extern char *getenv(); extern long *alloc(); #ifndef TERMINFO *************** *** 25,31 **** char *CD; /* tested in pri.c: docorner() */ int CO, LI; /* used in pri.c and whatis.c */ ! #ifdef MSDOS static char tgotobuf[20]; #define tgoto(fmt, x, y) (sprintf(tgotobuf, fmt, y+1, x+1), tgotobuf) #endif /* MSDOS /**/ --- 28,34 ---- char *CD; /* tested in pri.c: docorner() */ int CO, LI; /* used in pri.c and whatis.c */ ! #if defined(MSDOS) && defined(UNDEF) static char tgotobuf[20]; #define tgoto(fmt, x, y) (sprintf(tgotobuf, fmt, y+1, x+1), tgotobuf) #endif /* MSDOS /**/ *************** *** 32,38 **** startup() { ! #ifdef MSDOS HO = "\033[H"; CL = "\033[2J"; CE = "\033[K"; --- 35,41 ---- startup() { ! #if defined(MSDOS) && defined(UNDEF) HO = "\033[H"; CL = "\033[2J"; CE = "\033[K"; *************** *** 175,180 **** --- 178,187 ---- if (y == cury && x == curx) return; + #ifdef MSDOS + cmov(x, y); + return; + #endif /* MSDOS */ if(!ND && (curx != x || x <= 3)) { /* Extremely primitive */ cmov(x, y); /* bunker!wtm */ return; Only in old: termcap.cnf Files old/timeout.c and ./timeout.c are identical Files old/topl.c and ./topl.c are identical Files old/topten.c and ./topten.c are identical Files old/track.c and ./track.c are identical Files old/trap.c and ./trap.c are identical Files old/trap.h and ./trap.h are identical Files old/u_init.c and ./u_init.c are identical Only in old: unixmain.c Only in old: unixtty.c Only in old: unixunix.c Files old/vault.c and ./vault.c are identical Files old/version.c and ./version.c are identical Files old/wield.c and ./wield.c are identical Files old/wizard.c and ./wizard.c are identical Files old/worm.c and ./worm.c are identical Files old/worn.c and ./worn.c are identical Files old/write.c and ./write.c are identical Files old/wseg.h and ./wseg.h are identical diff -sct old/you.h ./you.h *** old/you.h Sat Dec 5 11:39:38 1987 --- ./you.h Mon Dec 28 19:06:00 1987 *************** *** 79,85 **** #define Blindfolded u.uprops[BLINDFOLDED].p_flgs #define Blind (Blinded || Blindfolded) #define PROP(x) (x-RIN_ADORNMENT) /* convert ring to index in uprops */ ! struct prop uprops[LAST_RING+11]; unsigned umconf; char *usick_cause; --- 79,85 ---- #define Blindfolded u.uprops[BLINDFOLDED].p_flgs #define Blind (Blinded || Blindfolded) #define PROP(x) (x-RIN_ADORNMENT) /* convert ring to index in uprops */ ! struct prop uprops[LAST_RING+12]; unsigned umconf; char *usick_cause; Files old/zap.c and ./zap.c are identical