iverson@cory.Berkeley.EDU (Tim Iverson) (12/30/87)
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 <strings.h> /* 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 <strings.h> /* 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<cr>' for help.", opts);
return;
}
#ifdef DGK
--- 313,319 ----
option_help();
return;
}
! pline("Bad option: %s. Type 'O help<cr>' for help.", opts);
return;
}
#ifdef DGK
***************
*** 435,475 ****
(void) sprintf(buf, "To set options use OPTIONS=<options> in %s", configfile);
Page_line(buf);
#else
! Page_line("To set options use `HACKOPTIONS=\"<options>\"' in your environment");
#endif
! Page_line("or give the command \"O\" followed by the line <options> while playing.");
Page_line("Here <options> 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=<options> in %s", configfile);
Page_line(buf);
#else
! Page_line("To set options use 'HACKOPTIONS=\"<options>\"' in your environment");
#endif
! Page_line("or give the command 'O' followed by the line <options> while playing.");
Page_line("Here <options> 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 <stdio.h>
#include <ctype.h> /* 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 <stdio.h>
#include <ctype.h> /* for isdigit() */
+ #ifdef MSDOS
+ #include <termcap.h>
+ #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