Thread View: comp.bugs.misc
1 messages
1 total messages
Started by Tim Iverson
Wed, 30 Dec 1987 04:51
Fixes for nethack on MS-DOS using MSC4.0
Author: Tim Iverson
Date: Wed, 30 Dec 1987 04:51
Date: Wed, 30 Dec 1987 04:51
2029 lines
71995 bytes
71995 bytes
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads