billr@saab.CNA.TEK.COM (Bill Randle) (06/06/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 24
Archive-name: NetHack3/Patch8f
Patch-To: NetHack3: Volume 7, Issue 56-93
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 6 (of 24)."
# Contents: patch8.07
# Wrapped by billr@saab on Mon Jun 4 15:27:16 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch8.07' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'patch8.07'\"
else
echo shar: Extracting \"'patch8.07'\" \(52827 characters\)
sed "s/^X//" >'patch8.07' <<'END_OF_FILE'
X*** src/Old/prisym.c Sun Jun 3 14:06:29 1990
X--- src/prisym.c Sun May 27 11:54:49 1990
X***************
X*** 8,14 ****
X #include "wseg.h"
X #include "lev.h"
X
X! OSTATIC void FDECL(pwseg, (struct wseg *));
X #endif
X
X #ifdef OVL0
X--- 8,14 ----
X #include "wseg.h"
X #include "lev.h"
X
X! STATIC_DCL void FDECL(pwseg, (struct wseg *));
X #endif
X
X #ifdef OVL0
X***************
X*** 66,74 ****
X uchar let;
X uchar col;
X #else
X! static schar prevx, prevy;
X! static uchar let;
X! static uchar col;
X #endif
X
X switch ((int)x) {
X--- 66,74 ----
X uchar let;
X uchar col;
X #else
X! static schar NEARDATA prevx, NEARDATA prevy;
X! static uchar NEARDATA let;
X! static uchar NEARDATA col;
X #endif
X
X switch ((int)x) {
X***************
X*** 115,125 ****
X uchar col;
X # endif
X #else
X! static uchar let;
X! static xchar cnt;
X! static coord tc[COLNO]; /* but watch reflecting beams! */
X # ifdef TEXTCOLOR
X! static uchar col;
X # endif
X #endif
X register int xx,yy;
X--- 115,125 ----
X uchar col;
X # endif
X #else
X! static uchar NEARDATA let;
X! static xchar NEARDATA cnt;
X! static coord NEARDATA tc[COLNO]; /* but watch reflecting beams! */
X # ifdef TEXTCOLOR
X! static uchar NEARDATA col;
X # endif
X #endif
X register int xx,yy;
X***************
X*** 573,579 ****
X }
X
X #ifdef WORM
X! XSTATIC void
X pwseg(wtmp)
X register struct wseg *wtmp;
X {
X--- 573,579 ----
X }
X
X #ifdef WORM
X! STATIC_OVL void
X pwseg(wtmp)
X register struct wseg *wtmp;
X {
X*** src/Old/read.c Sun Jun 3 14:06:55 1990
X--- src/read.c Thu May 31 22:13:33 1990
X***************
X*** 8,21 ****
X
X boolean known;
X
X! static const char readable[] = { '#', SCROLL_SYM,
X #ifdef SPELLS
X SPBOOK_SYM,
X #endif
X 0 };
X
X- #endif /* OVLB */
X-
X static void FDECL(explode, (struct obj *));
X static void NDECL(do_class_genocide);
X static void FDECL(stripspe,(struct obj *));
X--- 8,19 ----
X
X boolean known;
X
X! static const char NEARDATA readable[] = { '#', SCROLL_SYM,
X #ifdef SPELLS
X SPBOOK_SYM,
X #endif
X 0 };
X
X static void FDECL(explode, (struct obj *));
X static void NDECL(do_class_genocide);
X static void FDECL(stripspe,(struct obj *));
X***************
X*** 23,29 ****
X static void FDECL(p_glow2,(struct obj *,const char *));
X static void FDECL(recharge,(struct obj *,int));
X static void FDECL(forget,(BOOLEAN_P));
X! OSTATIC void FDECL(show_map_spot,(int,int));
X
X #ifdef OVLB
X
X--- 21,30 ----
X static void FDECL(p_glow2,(struct obj *,const char *));
X static void FDECL(recharge,(struct obj *,int));
X static void FDECL(forget,(BOOLEAN_P));
X!
X! #endif /* OVLB */
X!
X! STATIC_DCL void FDECL(show_map_spot,(int,int));
X
X #ifdef OVLB
X
X***************
X*** 571,577 ****
X register struct monst *mtmp;
X
X for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
X! if(MON_AT(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
X if(sobj->cursed) {
X if(!mtmp->mtame) mtmp->mpeaceful = 0;
X } else {
X--- 572,578 ----
X register struct monst *mtmp;
X
X for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
X! if(isok(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
X if(sobj->cursed) {
X if(!mtmp->mtame) mtmp->mpeaceful = 0;
X } else {
X***************
X*** 656,661 ****
X--- 657,669 ----
X case SCR_CHARGING:
X if (confused) {
X You("feel charged up!");
X+ #ifdef SPELLS
X+ if (u.uen < u.uenmax)
X+ u.uen = u.uenmax;
X+ else
X+ u.uen = u.uenmax + d(5,4);
X+ flags.botl = 1;
X+ #endif
X break;
X }
X known = TRUE;
X***************
X*** 908,914 ****
X if(mtmp->data == &mons[i])
X mondead(mtmp);
X }
X! } else if (mons[i].geno & G_GENOD)
X pline("All %s are already nonexistent.", n);
X else
X You("aren't permitted to genocide %s%s.",
X--- 916,923 ----
X if(mtmp->data == &mons[i])
X mondead(mtmp);
X }
X! } else if ((mons[i].geno & G_GENOD) &&
X! !(mons[i].geno & G_UNIQ))
X pline("All %s are already nonexistent.", n);
X else
X You("aren't permitted to genocide %s%s.",
X***************
X*** 1016,1023 ****
X } else {
X pline("Sent in some %s.", makeplural(buf));
X j = rnd(3) + 3;
X! for(i=1; i<=j; i++)
X! (void) makemon(ptr, u.ux, u.uy);
X }
X }
X
X--- 1025,1039 ----
X } else {
X pline("Sent in some %s.", makeplural(buf));
X j = rnd(3) + 3;
X! for(i=1; i<=j; i++) {
X! struct monst *mmon = makemon(ptr, u.ux, u.uy);
X! struct obj *otmp;
X!
X! while(otmp = (mmon->minvent)) {
X! mmon->minvent = otmp->nobj;
X! free((genericptr_t)otmp);
X! }
X! }
X }
X }
X
X***************
X*** 1024,1030 ****
X #endif /* OVLB */
X #ifdef OVL0
X
X! XSTATIC void
X show_map_spot(x, y)
X register int x, y;
X {
X--- 1040,1046 ----
X #endif /* OVLB */
X #ifdef OVL0
X
X! STATIC_OVL void
X show_map_spot(x, y)
X register int x, y;
X {
X***************
X*** 1161,1168 ****
X uball->owt += 15 * (1 + sobj->cursed);
X return;
X }
X! setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy), W_CHAIN);
X! setworn(mkobj_at(BALL_SYM, u.ux, u.uy), W_BALL);
X uball->spe = 1; /* special ball (see save) */
X }
X
X--- 1177,1184 ----
X uball->owt += 15 * (1 + sobj->cursed);
X return;
X }
X! setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy, TRUE), W_CHAIN);
X! setworn(mkobj_at(BALL_SYM, u.ux, u.uy, TRUE), W_BALL);
X uball->spe = 1; /* special ball (see save) */
X }
X
X*** src/Old/restore.c Sun Jun 3 14:07:40 1990
X--- src/restore.c Wed May 23 17:55:45 1990
X***************
X*** 9,19 ****
X #include "wseg.h"
X #endif
X
X boolean restoring = FALSE;
X #ifdef TUTTI_FRUTTI
X! static struct fruit *oldfruit;
X #endif
X! static long omoves;
X
X /*
X * "stuff" objects back into containers (relink the fcobj list).
X--- 9,28 ----
X #include "wseg.h"
X #endif
X
X+ static void FDECL(stuff_objs, (struct obj *));
X+ static void NDECL(find_lev_obj);
X+ #ifndef NO_SIGNAL
X+ static void NDECL(inven_inuse);
X+ #endif
X+ static struct obj * FDECL(restobjchn, (int,BOOLEAN_P));
X+ static struct monst * FDECL(restmonchn, (int,BOOLEAN_P));
X+ static void FDECL(restgenoinfo, (int));
X+
X boolean restoring = FALSE;
X #ifdef TUTTI_FRUTTI
X! static struct fruit NEARDATA *oldfruit;
X #endif
X! static long NEARDATA omoves;
X
X /*
X * "stuff" objects back into containers (relink the fcobj list).
X***************
X*** 148,154 ****
X off_t differ;
X
X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
X differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
X #else
X differ = (long)(&mons[0]) - (long)(monbegin);
X--- 157,163 ----
X off_t differ;
X
X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX) && !defined(VAXC)
X differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
X #else
X differ = (long)(&mons[0]) - (long)(monbegin);
X***************
X*** 167,173 ****
X mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
X if(!mtmp->m_id)
X mtmp->m_id = flags.ident++;
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
X /* ANSI type for differ is ptrdiff_t --
X * long may be wrong for segmented architecture --
X * may be better to cast pointers to (struct permonst *)
X--- 176,182 ----
X mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
X if(!mtmp->m_id)
X mtmp->m_id = flags.ident++;
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX) && !defined(VAXC)
X /* ANSI type for differ is ptrdiff_t --
X * long may be wrong for segmented architecture --
X * may be better to cast pointers to (struct permonst *)
X***************
X*** 218,228 ****
X #ifdef TUTTI_FRUTTI
X struct fruit *fruit;
X #endif
X- #ifdef MSDOS
X struct flag oldflags;
X
X! oldflags = flags; /* Save flags set in the config file */
X! #endif
X #ifdef ZEROCOMP
X minit();
X #endif
X--- 227,236 ----
X #ifdef TUTTI_FRUTTI
X struct fruit *fruit;
X #endif
X struct flag oldflags;
X
X! oldflags = flags;
X!
X #ifdef ZEROCOMP
X minit();
X #endif
X***************
X*** 249,268 ****
X return(0);
X }
X mread(fd, (genericptr_t) &flags, sizeof(struct flag));
X! /* Some config file OPTIONS take precedence over those in save file.
X */
X! #ifdef MSDOS
X! #ifdef DGK
X flags.rawio = oldflags.rawio;
X- #ifdef DECRAINBOW
X- flags.DECRainbow = oldflags.DECRainbow;
X- #endif /* DECRAINBOW */
X flags.IBMBIOS = oldflags.IBMBIOS;
X #endif
X #ifdef TEXTCOLOR
X flags.use_color = oldflags.use_color;
X #endif
X! #endif /* MSDOS */
X mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
X mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
X mread(fd, (genericptr_t) &moves, sizeof moves);
X--- 257,275 ----
X return(0);
X }
X mread(fd, (genericptr_t) &flags, sizeof(struct flag));
X! /* Some config file and command line OPTIONS take precedence over
X! * those in save file.
X */
X! flags.DECgraphics = oldflags.DECgraphics;
X! flags.IBMgraphics = oldflags.IBMgraphics;
X! #if defined(MSDOS) && defined(DGK)
X flags.rawio = oldflags.rawio;
X flags.IBMBIOS = oldflags.IBMBIOS;
X #endif
X #ifdef TEXTCOLOR
X flags.use_color = oldflags.use_color;
X #endif
X!
X mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
X mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
X mread(fd, (genericptr_t) &moves, sizeof moves);
X***************
X*** 758,771 ****
X for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X
X mtmp2 = mtmp->nmon;
X! if(mtmp->data->geno & G_GENOD) {
X! #ifdef KOPS
X! allow_kops = FALSE;
X! #endif
X! mondead(mtmp);
X! #ifdef KOPS
X! allow_kops = TRUE;
X! #endif
X continue;
X }
X
X--- 765,784 ----
X for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X
X mtmp2 = mtmp->nmon;
X! if((mtmp->data->geno&G_GENOD) && !(mtmp->data->geno&G_UNIQ)) {
X! /* mondead() would try to link the monster's objects
X! * into fobj and the appropriate nexthere chain.
X! * unfortunately, such things will not have sane
X! * values until after find_lev_obj() well below
X! * here, so we'd go chasing random pointers if we
X! * tried that. we could save the monster's objects
X! * in another chain and insert them in the level
X! * later, but that's a lot of work for very little
X! * gain. hence, just throw the objects away via
X! * mongone() and pretend the monster wandered off
X! * somewhere private before the genocide.
X! */
X! mongone(mtmp);
X continue;
X }
X
X***************
X*** 874,884 ****
X #ifdef ZEROCOMP
X #define RLESC '\0' /* Leading character for run of RLESC's */
X
X! static unsigned char inbuf[BUFSZ];
X! static unsigned short inbufp = 0;
X! static unsigned short inbufsz = 0;
X! static short inrunlength = -1;
X! static int mreadfd;
X
X static int
X mgetc()
X--- 887,898 ----
X #ifdef ZEROCOMP
X #define RLESC '\0' /* Leading character for run of RLESC's */
X
X! static unsigned char NEARDATA inbuf[BUFSZ];
X! static unsigned short NEARDATA inbufp = 0;
X! static unsigned short NEARDATA inbufsz = 0;
X! static short NEARDATA inrunlength = -1;
X! static int NEARDATA mreadfd;
X! static int NDECL(mgetc);
X
X static int
X mgetc()
X*** src/Old/rip.c Sun Jun 3 14:08:20 1990
X--- src/rip.c Wed Mar 21 19:41:27 1990
X***************
X*** 3,9 ****
X /* NetHack may be freely redistributed. See license for details. */
X
X #include "hack.h"
X- #include <ctype.h>
X
X static void FDECL(center,(int,char *));
X
X--- 3,8 ----
X*** src/Old/rumors.c Sun Jun 3 14:08:43 1990
X--- src/rumors.c Fri Mar 30 20:55:17 1990
X***************
X*** 23,29 ****
X--- 23,31 ----
X * (but not terminated) by "-----" lines.
X */
X static void NDECL(init_rumors);
X+ #ifdef ORACLE
X static void NDECL(outoracle);
X+ #endif
X long first_rumor = sizeof(long);
X long true_rumor_size, false_rumor_size, end_rumor_file;
X #ifdef ORACLE
X*** src/Old/save.c Sun Jun 3 14:08:59 1990
X--- src/save.c Sat May 26 13:21:15 1990
X***************
X*** 14,26 ****
X #ifndef NO_SIGNAL
X #include <signal.h>
X #endif /* !NO_SIGNAL */
X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_RDONLY) && !defined(AZTEC_C)
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
X
X boolean hu; /* set during hang-up */
X
X! #if defined(DGK)
X struct finfo fileinfo[MAXLEVEL+1];
X long bytes_counted;
X int count_only;
X--- 14,26 ----
X #ifndef NO_SIGNAL
X #include <signal.h>
X #endif /* !NO_SIGNAL */
X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_WRONLY) && !defined(AZTEC_C)
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
X
X boolean hu; /* set during hang-up */
X
X! #ifdef DGK
X struct finfo fileinfo[MAXLEVEL+1];
X long bytes_counted;
X int count_only;
X***************
X*** 28,46 ****
X boolean level_exists[MAXLEVEL+1];
X #endif
X
X! #if defined(DGK)
X! static void savelev0();
X #endif /* DGK */
X! static void saveobjchn();
X! static void savemonchn();
X! static void savegoldchn();
X! static void savetrapchn();
X! static void savegenoinfo();
X! #if defined(DGK)
X! static boolean swapout_oldest();
X! static void copyfile();
X! #endif /* defined(DGK) */
X! static void spill_objs();
X #ifdef __GNULINT__
X static long nulls[10];
X #else
X--- 28,47 ----
X boolean level_exists[MAXLEVEL+1];
X #endif
X
X! #ifdef ZEROCOMP
X! static void FDECL(bputc, (UCHAR_P));
X! #endif
X! static void FDECL(saveobjchn, (int,struct obj *));
X! static void FDECL(savemonchn, (int,struct monst *));
X! static void FDECL(savegoldchn, (int,struct gold *));
X! static void FDECL(savetrapchn, (int,struct trap *));
X! static void FDECL(savegenoinfo, (int));
X! #ifdef DGK
X! static void FDECL(savelev0, (int,XCHAR_P));
X! static boolean NDECL(swapout_oldest);
X! static void FDECL(copyfile, (char *,char *));
X #endif /* DGK */
X! static void FDECL(spill_objs, (struct obj *));
X #ifdef __GNULINT__
X static long nulls[10];
X #else
X***************
X*** 93,99 ****
X register int fd, ofd;
X int tmp; /* not register ! */
X xchar ltmp;
X! #if defined(DGK)
X long fds, needed;
X int mode;
X #endif
X--- 94,100 ----
X register int fd, ofd;
X int tmp; /* not register ! */
X xchar ltmp;
X! #ifdef DGK
X long fds, needed;
X int mode;
X #endif
X***************
X*** 158,189 ****
X {
X Str255 fileName;
X OSErr er;
X! OSType fileType;
X! Point where;
X! SFReply reply;
X! char *prompt;
X
X! savenum = 0;
X! (void)GetVol(&fileName, &tmp);
X Strcpy((char *)&fileName[1], SAVEF);
X fileName[0] = strlen(SAVEF);
X! where.h = where.v =
X! (SCREEN_BITS.bounds.bottom - SCREEN_BITS.bounds.top) / 4;
X! prompt = "\022Save character in:";
X! SFPutFile(where, prompt, fileName, 0L, &reply);
X! if (reply.good) {
X! SetVol(0L, savenum = reply.vRefNum);
X! strncpy(SAVEF, (char *)&reply.fName[1],
X! (short)reply.fName[0]);
X! SAVEF[(short)reply.fName[0]] = '\0';
X! Strcpy((char *)fileName, (char *)reply.fName);
X! }
X!
X! fileType = (discover == TRUE) ? EXPLORE_TYPE : SAVE_TYPE;
X! if (er = Create(&fileName, 0, CREATOR, fileType))
X SysBeep(1);
X }
X- fd = open(SAVEF, O_WRONLY | O_BINARY);
X # else
X fd = creat(SAVEF, FCMASK);
X # endif /* MACOS */
X--- 159,178 ----
X {
X Str255 fileName;
X OSErr er;
X! struct term_info *t;
X! extern WindowPtr HackWindow;
X
X! t = (term_info *)GetWRefCon(HackWindow);
X! (void)GetVol(&fileName,&tmp); /* tmp is old volume */
X! (void)SetVol(0L, savenum = t->recordVRefNum); /* savenum is used below */
X Strcpy((char *)&fileName[1], SAVEF);
X fileName[0] = strlen(SAVEF);
X!
X! if (er = Create(&fileName, 0, CREATOR, discover ? EXPLORE_TYPE : SAVE_TYPE))
X SysBeep(1);
X+ fd = open(SAVEF, O_WRONLY | O_BINARY);
X+ (void)SetVol(0L, t->system.sysVRefNum);
X }
X # else
X fd = creat(SAVEF, FCMASK);
X # endif /* MACOS */
X***************
X*** 193,209 ****
X #ifdef AMIGA_WBENCH
X ami_wbench_unlink(SAVEF);
X #endif
X (void) unlink(SAVEF); /* ab@unido */
X- return(0);
X- }
X #ifdef MACOS
X! (void)SetVol(0L,tmp);
X #endif
X if(flags.moonphase == FULL_MOON) /* ut-sally!fletcher */
X change_luck(-1); /* and unido!ab */
X home();
X cl_end();
X! #if defined(DGK)
X if(!hu) msmsg("Saving: ");
X mode = COUNT;
X again:
X--- 182,201 ----
X #ifdef AMIGA_WBENCH
X ami_wbench_unlink(SAVEF);
X #endif
X+ #ifdef MACOS
X+ (void)SetVol(0L, savenum);
X+ #endif
X (void) unlink(SAVEF); /* ab@unido */
X #ifdef MACOS
X! (void)SetVol(0L, tmp);
X #endif
X+ return(0);
X+ }
X if(flags.moonphase == FULL_MOON) /* ut-sally!fletcher */
X change_luck(-1); /* and unido!ab */
X home();
X cl_end();
X! #ifdef DGK
X if(!hu) msmsg("Saving: ");
X mode = COUNT;
X again:
X***************
X*** 261,267 ****
X savefruitchn(fd);
X #endif
X savenames(fd);
X! #if defined(DGK)
X if (mode == COUNT) {
X # ifdef ZEROCOMP
X bflush(fd);
X--- 253,259 ----
X savefruitchn(fd);
X #endif
X savenames(fd);
X! #ifdef DGK
X if (mode == COUNT) {
X # ifdef ZEROCOMP
X bflush(fd);
X***************
X*** 294,300 ****
X }
X #endif
X for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
X! #if defined(DGK)
X if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
X if (fileinfo[ltmp].where != ACTIVE)
X swapin_file(ltmp);
X--- 286,292 ----
X }
X #endif
X for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
X! #ifdef DGK
X if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
X if (fileinfo[ltmp].where != ACTIVE)
X swapin_file(ltmp);
X***************
X*** 315,320 ****
X--- 307,315 ----
X (void)SetVol(0L, savenum);
X #endif
X (void) unlink(SAVEF);
X+ #ifdef MACOS
X+ (void)SetVol(0L, tmp);
X+ #endif
X #ifdef AMIGA_WBENCH
X ami_wbench_unlink(SAVEF);
X #endif
X***************
X*** 327,333 ****
X getlev(ofd, hackpid, ltmp, FALSE);
X (void) close(ofd);
X bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number */
X! #if defined(DGK)
X savelev(fd, ltmp, WRITE); /* actual level */
X #else
X savelev(fd, ltmp); /* actual level */
X--- 322,328 ----
X getlev(ofd, hackpid, ltmp, FALSE);
X (void) close(ofd);
X bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number */
X! #ifdef DGK
X savelev(fd, ltmp, WRITE); /* actual level */
X #else
X savelev(fd, ltmp); /* actual level */
X***************
X*** 355,364 ****
X #ifdef AMIGA_WBENCH
X ami_wbench_iconwrite(SAVEF);
X #endif
X return(1);
X }
X
X! #if defined(DGK)
X boolean
X savelev(fd, lev, mode)
X int fd;
X--- 350,362 ----
X #ifdef AMIGA_WBENCH
X ami_wbench_iconwrite(SAVEF);
X #endif
X+ #ifdef MACOS
X+ (void)SetVol(0L, tmp);
X+ #endif
X return(1);
X }
X
X! #ifdef DGK
X boolean
X savelev(fd, lev, mode)
X int fd;
X***************
X*** 404,410 ****
X xchar lev;
X {
X #ifdef WORM
X! register struct wseg *wtmp;
X register int tmp;
X #endif
X #ifdef TOS
X--- 402,408 ----
X xchar lev;
X {
X #ifdef WORM
X! register struct wseg *wtmp, *wtmp2;
X register int tmp;
X #endif
X #ifdef TOS
X***************
X*** 412,418 ****
X #endif
X
X if(fd < 0) panic("Save on bad file!"); /* impossible */
X! #if !defined(DGK)
X if(lev >= 0 && lev <= MAXLEVEL)
X level_exists[lev] = TRUE;
X #endif
X--- 410,416 ----
X #endif
X
X if(fd < 0) panic("Save on bad file!"); /* impossible */
X! #ifndef DGK
X if(lev >= 0 && lev <= MAXLEVEL)
X level_exists[lev] = TRUE;
X #endif
X***************
X*** 490,499 ****
X #ifdef WORM
X bwrite(fd,(genericptr_t) wsegs,sizeof(wsegs));
X for(tmp=1; tmp<32; tmp++){
X! for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg){
X bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
X }
X! #if defined(DGK)
X if (!count_only)
X #endif
X wsegs[tmp] = 0;
X--- 488,502 ----
X #ifdef WORM
X bwrite(fd,(genericptr_t) wsegs,sizeof(wsegs));
X for(tmp=1; tmp<32; tmp++){
X! for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2){
X! wtmp2 = wtmp->nseg;
X bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
X+ #ifdef DGK
X+ if (!count_only)
X+ #endif
X+ free((genericptr_t) wtmp);
X }
X! #ifdef DGK
X if (!count_only)
X #endif
X wsegs[tmp] = 0;
X***************
X*** 500,506 ****
X }
X bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
X #endif /* WORM /**/
X! #if defined(DGK)
X if (count_only) return;
X #endif
X billobjs = 0;
X--- 503,509 ----
X }
X bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
X #endif /* WORM /**/
X! #ifdef DGK
X if (count_only) return;
X #endif
X billobjs = 0;
X***************
X*** 515,524 ****
X #define RLESC '\0' /* Leading character for run of LRESC's */
X #define flushoutrun(ln) bputc(RLESC); bputc(ln); ln = -1;
X
X! static unsigned char outbuf[BUFSZ];
X! static unsigned short outbufp = 0;
X! static short outrunlength = -1;
X! static int bwritefd;
X
X /*dbg()
X {
X--- 518,527 ----
X #define RLESC '\0' /* Leading character for run of LRESC's */
X #define flushoutrun(ln) bputc(RLESC); bputc(ln); ln = -1;
X
X! static unsigned char NEARDATA outbuf[BUFSZ];
X! static unsigned short NEARDATA outbufp = 0;
X! static short NEARDATA outrunlength = -1;
X! static int NEARDATA bwritefd;
X
X /*dbg()
X {
X***************
X*** 549,555 ****
X flushoutrun(outrunlength);
X }
X if (outbufp) {
X! #if defined(DGK)
X if (!count_only) /* flush buffer */
X #endif
X (void) write(fd, outbuf, outbufp);
X--- 552,558 ----
X flushoutrun(outrunlength);
X }
X if (outbufp) {
X! #ifdef DGK
X if (!count_only) /* flush buffer */
X #endif
X (void) write(fd, outbuf, outbufp);
X***************
X*** 587,593 ****
X register genericptr_t loc;
X register unsigned num;
X {
X! #if defined(DGK)
X bytes_counted += num;
X if (!count_only)
X #endif
X--- 590,596 ----
X register genericptr_t loc;
X register unsigned num;
X {
X! #ifdef DGK
X bytes_counted += num;
X if (!count_only)
X #endif
X***************
X*** 620,626 ****
X xl = otmp->onamelth;
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) otmp);
X--- 623,629 ----
X xl = otmp->onamelth;
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
X! #ifdef DGK
X if (!count_only)
X #endif
X free((genericptr_t) otmp);
X***************
X*** 647,653 ****
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
X if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) mtmp);
X--- 650,656 ----
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
X if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
X! #ifdef DGK
X if (!count_only)
X #endif
X free((genericptr_t) mtmp);
X***************
X*** 665,671 ****
X while(gold) {
X gold2 = gold->ngold;
X bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) gold);
X--- 668,674 ----
X while(gold) {
X gold2 = gold->ngold;
X bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
X! #ifdef DGK
X if (!count_only)
X #endif
X free((genericptr_t) gold);
X***************
X*** 683,689 ****
X while(trap) {
X trap2 = trap->ntrap;
X bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) trap);
X--- 686,692 ----
X while(trap) {
X trap2 = trap->ntrap;
X bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
X! #ifdef DGK
X if (!count_only)
X #endif
X free((genericptr_t) trap);
X***************
X*** 710,716 ****
X if (f1->fid >= 0) {
X bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
X }
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) f1);
X--- 713,719 ----
X if (f1->fid >= 0) {
X bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
X }
X! #ifdef DGK
X if (!count_only)
X #endif
X free((genericptr_t) f1);
X***************
X*** 730,736 ****
X bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
X }
X
X! #if defined(DGK)
X boolean
X swapin_file(lev)
X int lev;
X--- 733,739 ----
X bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
X }
X
X! #ifdef DGK
X boolean
X swapin_file(lev)
X int lev;
X***************
X*** 744,755 ****
X while (fileinfo[lev].size > freediskspace(to))
X if (!swapout_oldest())
X return FALSE;
X! #ifdef WIZARD
X if (wizard) {
X pline("Swapping in `%s'", from);
X (void) fflush(stdout);
X }
X! #endif
X copyfile(from, to);
X (void) unlink(from);
X fileinfo[lev].where = ACTIVE;
X--- 747,758 ----
X while (fileinfo[lev].size > freediskspace(to))
X if (!swapout_oldest())
X return FALSE;
X! # ifdef WIZARD
X if (wizard) {
X pline("Swapping in `%s'", from);
X (void) fflush(stdout);
X }
X! # endif
X copyfile(from, to);
X (void) unlink(from);
X fileinfo[lev].where = ACTIVE;
X***************
X*** 776,787 ****
X Sprintf(to, "%s%s", permbones, alllevels);
X name_file(from, oldest);
X name_file(to, oldest);
X! #ifdef WIZARD
X if (wizard) {
X pline("Swapping out `%s'.", from);
X (void) fflush(stdout);
X }
X! #endif
X copyfile(from, to);
X (void) unlink(from);
X fileinfo[oldest].where = SWAPPED;
X--- 779,790 ----
X Sprintf(to, "%s%s", permbones, alllevels);
X name_file(from, oldest);
X name_file(to, oldest);
X! # ifdef WIZARD
X if (wizard) {
X pline("Swapping out `%s'.", from);
X (void) fflush(stdout);
X }
X! # endif
X copyfile(from, to);
X (void) unlink(from);
X fileinfo[oldest].where = SWAPPED;
X***************
X*** 793,803 ****
X copyfile(from, to)
X char *from, *to;
X {
X! #ifdef TOS
X
X if (_copyfile(from, to))
X panic("Can't copy %s to %s\n", from, to);
X! #else
X char buf[BUFSIZ];
X int nfrom, nto, fdfrom, fdto;
X
X--- 796,806 ----
X copyfile(from, to)
X char *from, *to;
X {
X! # ifdef TOS
X
X if (_copyfile(from, to))
X panic("Can't copy %s to %s\n", from, to);
X! # else
X char buf[BUFSIZ];
X int nfrom, nto, fdfrom, fdto;
X
X***************
X*** 813,819 ****
X } while (nfrom == BUFSIZ);
X (void) close(fdfrom);
X (void) close(fdto);
X! #endif /* TOS */
X }
X #endif
X
X--- 816,822 ----
X } while (nfrom == BUFSIZ);
X (void) close(fdfrom);
X (void) close(fdto);
X! # endif /* TOS */
X }
X #endif
X
X*** src/Old/search.c Sun Jun 3 14:09:33 1990
X--- src/search.c Thu May 31 22:13:35 1990
X***************
X*** 7,15 ****
X # include "artifact.h"
X #endif
X
X- static void FDECL(findone,(XCHAR_P,XCHAR_P,int *));
X-
X #ifdef OVLB
X
X static void
X findone(zx,zy,num)
X--- 7,15 ----
X # include "artifact.h"
X #endif
X
X #ifdef OVLB
X+
X+ static void FDECL(findone,(XCHAR_P,XCHAR_P,int *));
X
X static void
X findone(zx,zy,num)
X*** src/Old/shk.c Sun Jun 3 14:09:51 1990
X--- src/shk.c Sat Jun 2 19:44:59 1990
X***************
X*** 8,16 ****
X
X #include "eshk.h"
X
X! #ifdef KOPS
X! static int FDECL(makekops, (coord *));
X static void NDECL(kops_gone);
X #endif /* KOPS */
X
X #define NOTANGRY(mon) mon->mpeaceful
X--- 8,19 ----
X
X #include "eshk.h"
X
X!
X! # ifdef KOPS
X! STATIC_DCL int FDECL(makekops, (coord *));
X! # ifdef OVLB
X static void NDECL(kops_gone);
X+ # endif /* OVLB */
X #endif /* KOPS */
X
X #define NOTANGRY(mon) mon->mpeaceful
X***************
X*** 18,37 ****
X
X /* Descriptor of current shopkeeper. Note that the bill need not be
X per-shopkeeper, since it is valid only when in a shop. */
X! VSTATIC struct monst *shopkeeper;
X! VSTATIC struct bill_x *bill;
X! VSTATIC int shlevel; /* level of this shopkeeper */
X /* struct obj *billobjs; /* objects on bill with bp->useup */
X /* only accessed here and by save & restore */
X! VSTATIC long int total; /* filled by addupbill() */
X! VSTATIC long int followmsg; /* last time of follow message */
X
X! static void setpaid(), FDECL(findshk, (int));
X! static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *));
X! static struct obj *FDECL(bp_to_obj, (struct bill_x *));
X
X #ifdef OVLB
X
X /*
X invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
X obj->quan <= bp->bquan
X--- 21,49 ----
X
X /* Descriptor of current shopkeeper. Note that the bill need not be
X per-shopkeeper, since it is valid only when in a shop. */
X! STATIC_VAR struct monst NEARDATA *shopkeeper;
X! STATIC_VAR struct bill_x NEARDATA *bill;
X! STATIC_VAR int NEARDATA shlevel; /* level of this shopkeeper */
X /* struct obj *billobjs; /* objects on bill with bp->useup */
X /* only accessed here and by save & restore */
X! STATIC_VAR long int NEARDATA total; /* filled by addupbill() */
X! STATIC_VAR long int NEARDATA followmsg; /* last time of follow message */
X
X! STATIC_DCL void NDECL(setpaid);
X! STATIC_DCL void NDECL(addupbill);
X! STATIC_DCL boolean FDECL(monstinroom, (struct permonst *,int));
X! STATIC_DCL void FDECL(findshk, (int));
X
X #ifdef OVLB
X
X+ static struct bill_x * FDECL(onbill, (struct obj *));
X+ static long FDECL(check_credit, (long,struct monst *));
X+ static void FDECL(pay, (long,struct monst *));
X+ static unsigned FDECL(get_cost, (struct obj *));
X+ static unsigned FDECL(cost_per_charge, (struct obj *));
X+ static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *));
X+ static struct obj *FDECL(bp_to_obj, (struct bill_x *));
X+
X /*
X invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
X obj->quan <= bp->bquan
X***************
X*** 69,75 ****
X }
X }
X
X! static void
X setpaid(){ /* caller has checked that shopkeeper exists */
X /* either we paid or left the shop or he just died */
X register struct obj *obj;
X--- 81,87 ----
X }
X }
X
X! STATIC_OVL void
X setpaid(){ /* caller has checked that shopkeeper exists */
X /* either we paid or left the shop or he just died */
X register struct obj *obj;
X***************
X*** 97,103 ****
X }
X }
X
X! static void
X addupbill(){ /* delivers result in total */
X /* caller has checked that shopkeeper exists */
X register int ct = ESHK(shopkeeper)->billct;
X--- 109,115 ----
X }
X }
X
X! STATIC_OVL void
X addupbill(){ /* delivers result in total */
X /* caller has checked that shopkeeper exists */
X register int ct = ESHK(shopkeeper)->billct;
X***************
X*** 109,116 ****
X }
X }
X
X #endif /* OVLB */
X! #ifdef OVL2
X
X int
X inshop() {
X--- 121,141 ----
X }
X }
X
X+ STATIC_OVL boolean
X+ monstinroom(mdat,roomno)
X+ struct permonst *mdat;
X+ int roomno;
X+ {
X+ register struct monst *mtmp;
X+
X+ for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X+ if(mtmp->data == mdat && inroom(mtmp->mx,mtmp->my) == roomno)
X+ return(TRUE);
X+ return(FALSE);
X+ }
X+
X #endif /* OVLB */
X! #ifdef OVL1
X
X int
X inshop() {
X***************
X*** 205,214 ****
X break;
X #ifdef ARMY
X case BARRACKS:
X! if(!((mons[PM_SOLDIER].geno & G_GENOD) &&
X! (mons[PM_SERGEANT].geno & G_GENOD) &&
X! (mons[PM_LIEUTENANT].geno & G_GENOD) &&
X! (mons[PM_CAPTAIN].geno & G_GENOD)))
X You("enter a military barracks!");
X else You("enter an abandoned barracks.");
X break;
X--- 230,239 ----
X break;
X #ifdef ARMY
X case BARRACKS:
X! if(monstinroom(&mons[PM_SOLDIER], roomno) ||
X! monstinroom(&mons[PM_SERGEANT], roomno) ||
X! monstinroom(&mons[PM_LIEUTENANT], roomno) ||
X! monstinroom(&mons[PM_CAPTAIN], roomno))
X You("enter a military barracks!");
X else You("enter an abandoned barracks.");
X break;
X***************
X*** 215,222 ****
X #endif
X #ifdef ORACLE
X case DELPHI:
X! if(!(mons[PM_ORACLE].geno & G_GENOD))
X! pline("\"Hello, %s, welcome to Delphi!\"", plname);
X break;
X #endif
X default:
X--- 240,247 ----
X #endif
X #ifdef ORACLE
X case DELPHI:
X! if(monstinroom(&mons[PM_ORACLE], roomno))
X! pline("\"Hello, %s, welcome to Delphi!\"", plname);
X break;
X #endif
X default:
X***************
X*** 294,300 ****
X return (int)u.uinshop;
X }
X
X! #endif /* OVL2 */
X #ifdef OVLB
X
X int
X--- 319,325 ----
X return (int)u.uinshop;
X }
X
X! #endif /* OVL1 */
X #ifdef OVLB
X
X int
X***************
X*** 305,310 ****
X--- 330,336 ----
X ESHK(mtmp)->shoplevel == dlevel));
X }
X
X+ #ifdef SOUNDS
X boolean
X tended_shop(sroom)
X struct mkroom *sroom;
X***************
X*** 316,323 ****
X && inhishop(mtmp)) return(TRUE);
X return(FALSE);
X }
X
X! static void
X findshk(roomno)
X register int roomno;
X {
X--- 342,350 ----
X && inhishop(mtmp)) return(TRUE);
X return(FALSE);
X }
X+ #endif
X
X! STATIC_OVL void
X findshk(roomno)
X register int roomno;
X {
X***************
X*** 671,677 ****
X /* routine called after dying (or quitting) with nonempty bill or upset shk */
X boolean
X paybill(){
X! register struct monst *mtmp;
X register long loss = 0L;
X register struct obj *otmp;
X register xchar ox, oy;
X--- 698,704 ----
X /* routine called after dying (or quitting) with nonempty bill or upset shk */
X boolean
X paybill(){
X! register struct monst *mtmp, *mtmp2;
X register long loss = 0L;
X register struct obj *otmp;
X register xchar ox, oy;
X***************
X*** 678,691 ****
X register boolean take = FALSE;
X register boolean taken = FALSE;
X
X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->isshk) {
X /* for bones: we don't want a shopless shk around */
X if(ESHK(mtmp)->shoplevel != dlevel) mongone(mtmp);
X else shopkeeper = mtmp;
X }
X
X! if(!shopkeeper) return(FALSE);
X
X /* get one case out of the way: you die in the shop, the */
X /* shopkeeper is peaceful, nothing stolen, nothing owed. */
X--- 705,720 ----
X register boolean take = FALSE;
X register boolean taken = FALSE;
X
X! for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X! mtmp2 = mtmp->nmon;
X if(mtmp->isshk) {
X /* for bones: we don't want a shopless shk around */
X if(ESHK(mtmp)->shoplevel != dlevel) mongone(mtmp);
X else shopkeeper = mtmp;
X }
X+ }
X
X! if(!shopkeeper) goto clear;
X
X /* get one case out of the way: you die in the shop, the */
X /* shopkeeper is peaceful, nothing stolen, nothing owed. */
X***************
X*** 709,716 ****
X
X if(ESHK(shopkeeper)->following || ANGRY(shopkeeper) || take) {
X if((loss > u.ugold) || !loss) {
X! pline("%s comes and takes all your possessions.",
X! Monnam(shopkeeper));
X taken = TRUE;
X shopkeeper->mgold += u.ugold;
X u.ugold = 0L;
X--- 738,747 ----
X
X if(ESHK(shopkeeper)->following || ANGRY(shopkeeper) || take) {
X if((loss > u.ugold) || !loss) {
X! pline("%s %sand takes all your possessions.",
X! Monnam(shopkeeper),
X! (shopkeeper->msleep || shopkeeper->mfrozen) ?
X! "wakes up " : "comes ");
X taken = TRUE;
X shopkeeper->mgold += u.ugold;
X u.ugold = 0L;
X***************
X*** 745,752 ****
X } else {
X u.ugold -= loss;
X shopkeeper->mgold += loss;
X! pline("%s comes and takes %ld zorkmid%s %sowed %s.",
X Monnam(shopkeeper),
X loss,
X plur(loss),
X strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ) ? "" : "you ",
X--- 776,785 ----
X } else {
X u.ugold -= loss;
X shopkeeper->mgold += loss;
X! pline("%s %sand takes %ld zorkmid%s %sowed %s.",
X Monnam(shopkeeper),
X+ (shopkeeper->msleep || shopkeeper->mfrozen) ?
X+ "wakes up " : "comes ",
X loss,
X plur(loss),
X strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ) ? "" : "you ",
X***************
X*** 786,799 ****
X return(obj);
X }
X
X! static long
X get_cost(obj)
X register struct obj *obj;
X {
X! register long tmp;
X
X! tmp = (long) getprice(obj);
X! if (!tmp) tmp = 5L;
X if (ANGRY(shopkeeper) ||
X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2))
X #ifdef SHIRT
X--- 819,832 ----
X return(obj);
X }
X
X! static unsigned
X get_cost(obj)
X register struct obj *obj;
X {
X! register unsigned tmp;
X
X! tmp = getprice(obj);
X! if (!tmp) tmp = 5;
X if (ANGRY(shopkeeper) ||
X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2))
X #ifdef SHIRT
X***************
X*** 800,812 ****
X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */
X #endif
X )
X! tmp += tmp/3L;
X! if (ACURR(A_CHA) > 18) tmp /= 2L;
X! else if (ACURR(A_CHA) > 17) tmp = (tmp * 2L)/3L;
X! else if (ACURR(A_CHA) > 15) tmp = (tmp * 3L)/4L;
X! else if (ACURR(A_CHA) < 6) tmp *= 2L;
X! else if (ACURR(A_CHA) < 8) tmp = (tmp * 3L)/2L;
X! else if (ACURR(A_CHA) < 11) tmp = (tmp * 4L)/3L;
X if (!tmp) return 1;
X return(tmp);
X }
X--- 833,845 ----
X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */
X #endif
X )
X! tmp += tmp/3;
X! if (ACURR(A_CHA) > 18) tmp /= 2;
X! else if (ACURR(A_CHA) > 17) tmp = (tmp * 2)/3;
X! else if (ACURR(A_CHA) > 15) tmp = (tmp * 3)/4;
X! else if (ACURR(A_CHA) < 6) tmp *= 2;
X! else if (ACURR(A_CHA) < 8) tmp = (tmp * 3)/2;
X! else if (ACURR(A_CHA) < 11) tmp = (tmp * 4)/3;
X if (!tmp) return 1;
X return(tmp);
X }
X***************
X*** 840,849 ****
X bp->bquan = obj->quan;
X bp->useup = 0;
X bp->price = get_cost(obj);
X! Strcpy(buf, "\"For you, ");
X! if (ANGRY(shopkeeper)) Strcat(buf, "scum ");
X! else {
X! switch(rnd(4)
X #ifdef HARD
X + u.udemigod
X #endif
X--- 873,883 ----
X bp->bquan = obj->quan;
X bp->useup = 0;
X bp->price = get_cost(obj);
X! if(!shopkeeper->msleep && !shopkeeper->mfrozen) {
X! Strcpy(buf, "\"For you, ");
X! if (ANGRY(shopkeeper)) Strcat(buf, "scum ");
X! else {
X! switch(rnd(4)
X #ifdef HARD
X + u.udemigod
X #endif
X***************
X*** 859,878 ****
X case 5: if (u.ualigntyp == U_CHAOTIC) Strcat(buf, "un");
X Strcat(buf, "holy");
X break;
X! }
X #ifdef POLYSELF
X! if(!is_human(uasmon)) Strcat(buf, " creature");
X! else
X #endif
X! Strcat(buf, (flags.female) ? " lady" : " sir");
X! }
X! obj->dknown = 1; /* after all, the shk is telling you what it is */
X! if(ininv) {
X obj->quan = 1; /* fool xname() into giving singular */
X pline("%s; only %d %s %s.\"", buf, bp->price,
X (bp->bquan > 1) ? "per" : "for this", xname(obj));
X obj->quan = bp->bquan;
X! } else pline("The %s will cost you %d zorkmid%s%s.",
X xname(obj), bp->price, plur((long)bp->price),
X (bp->bquan > 1) ? " each" : "");
X ESHK(shopkeeper)->billct++;
X--- 893,915 ----
X case 5: if (u.ualigntyp == U_CHAOTIC) Strcat(buf, "un");
X Strcat(buf, "holy");
X break;
X! }
X #ifdef POLYSELF
X! if(!is_human(uasmon)) Strcat(buf, " creature");
X! else
X #endif
X! Strcat(buf, (flags.female) ? " lady" : " sir");
X! }
X! obj->dknown = 1; /* after all, the shk is telling you what it is */
X! if(ininv) {
X obj->quan = 1; /* fool xname() into giving singular */
X pline("%s; only %d %s %s.\"", buf, bp->price,
X (bp->bquan > 1) ? "per" : "for this", xname(obj));
X obj->quan = bp->bquan;
X! } else pline("The %s will cost you %d zorkmid%s%s.",
X! xname(obj), bp->price, plur((long)bp->price),
X! (bp->bquan > 1) ? " each" : "");
X! } else pline("The list price of %s is %d zorkmid%s%s.",
X xname(obj), bp->price, plur((long)bp->price),
X (bp->bquan > 1) ? " each" : "");
X ESHK(shopkeeper)->billct++;
X***************
X*** 911,922 ****
X }
X }
X
X! static void
X subfrombill(obj)
X register struct obj *obj;
X {
X register struct bill_x *bp;
X
X if((bp = onbill(obj)) != 0) {
X register struct obj *otmp;
X
X--- 948,961 ----
X }
X }
X
X! void
X subfrombill(obj)
X register struct obj *obj;
X {
X register struct bill_x *bp;
X
X+ if(!shopkeeper) return;
X+
X if((bp = onbill(obj)) != 0) {
X register struct obj *otmp;
X
X***************
X*** 1034,1040 ****
X goto quit;
X }
X if(bp->useup || bp->bquan > obj->quan) {
X! register int cnt, oquan, uquan;
X
X oquan = obj->quan;
X uquan = (bp->useup ? bp->bquan : bp->bquan - oquan);
X--- 1073,1080 ----
X goto quit;
X }
X if(bp->useup || bp->bquan > obj->quan) {
X! register int cnt;
X! register unsigned oquan, uquan;
X
X oquan = obj->quan;
X uquan = (bp->useup ? bp->bquan : bp->bquan - oquan);
X***************
X*** 1308,1314 ****
X }
X
X #ifdef KOPS
X! static int
X makekops(mm) /* returns the number of (all types of) Kops made */
X coord *mm;
X {
X--- 1348,1354 ----
X }
X
X #ifdef KOPS
X! STATIC_OVL int
X makekops(mm) /* returns the number of (all types of) Kops made */
X coord *mm;
X {
X***************
X*** 1318,1337 ****
X register int kcnt = (cnt / 9); /* and maybe a kaptain */
X
X while(cnt--) {
X! enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]);
X! (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y);
X }
X while(scnt--) {
X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_SERGEANT]);
X! (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y);
X }
X while(lcnt--) {
X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_LIEUTENANT]);
X! (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y);
X }
X while(kcnt--) {
X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]);
X! (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
X }
X return(cnt + scnt + lcnt + kcnt);
X }
X--- 1358,1377 ----
X register int kcnt = (cnt / 9); /* and maybe a kaptain */
X
X while(cnt--) {
X! if (enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]))
X! (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y);
X }
X while(scnt--) {
X! if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_SERGEANT]))
X! (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y);
X }
X while(lcnt--) {
X! if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_LIEUTENANT]))
X! (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y);
X }
X while(kcnt--) {
X! if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]))
X! (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
X }
X return(cnt + scnt + lcnt + kcnt);
X }
X***************
X*** 1395,1401 ****
X if(um_dist(shopkeeper->mx, shopkeeper->my, 1)) goto gethim;
X } else {
X /* if a !shopkeeper shows up at the door, move him */
X! if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) {
X if(flags.soundok) {
X You("hear an angry voice:");
X verbalize("Out of my way, scum!");
X--- 1435,1441 ----
X if(um_dist(shopkeeper->mx, shopkeeper->my, 1)) goto gethim;
X } else {
X /* if a !shopkeeper shows up at the door, move him */
X! if((mtmp = m_at(x, y)) && mtmp != shopkeeper) {
X if(flags.soundok) {
X You("hear an angry voice:");
X verbalize("Out of my way, scum!");
X***************
X*** 1490,1514 ****
X }
X #endif
X
X! static long
X cost_per_charge(otmp)
X register struct obj *otmp;
X {
X! register long tmp = get_cost(otmp);
X
X /* The idea is to make the exhaustive use of */
X /* an unpaid item more expensive than buying */
X /* outright. */
X if(otmp->otyp == MAGIC_LAMP) { /* 1 */
X! tmp += (tmp/3L);
X } else if(otmp->otyp == MAGIC_MARKER) { /* 70 - 100 */
X /* no way to determine in advance */
X /* how many charges will be wasted. */
X /* so, arbitrarily, one half of the */
X /* price per use. */
X! tmp = (tmp/2L);
X } else if(otmp->otyp == BAG_OF_TRICKS) { /* 1 - 20 */
X! tmp = (tmp/5L);
X } else if(otmp->otyp == CRYSTAL_BALL || /* 1 - 5 */
X otmp->otyp == LAMP || /* 1-10 */
X #ifdef MUSIC
X--- 1530,1554 ----
X }
X #endif
X
X! static unsigned
X cost_per_charge(otmp)
X register struct obj *otmp;
X {
X! register unsigned tmp = get_cost(otmp);
X
X /* The idea is to make the exhaustive use of */
X /* an unpaid item more expensive than buying */
X /* outright. */
X if(otmp->otyp == MAGIC_LAMP) { /* 1 */
X! tmp += (tmp/3);
X } else if(otmp->otyp == MAGIC_MARKER) { /* 70 - 100 */
X /* no way to determine in advance */
X /* how many charges will be wasted. */
X /* so, arbitrarily, one half of the */
X /* price per use. */
X! tmp = (tmp/2);
X } else if(otmp->otyp == BAG_OF_TRICKS) { /* 1 - 20 */
X! tmp = (tmp/5);
X } else if(otmp->otyp == CRYSTAL_BALL || /* 1 - 5 */
X otmp->otyp == LAMP || /* 1-10 */
X #ifdef MUSIC
X***************
X*** 1516,1524 ****
X otmp->otyp <= DRUM_OF_EARTHQUAKE) || /* 5 - 9 */
X #endif
X otmp->olet == WAND_SYM) { /* 3 - 11 */
X! if(otmp->spe > 1) tmp = (tmp/4L);
X }
X! else return(0L);
X return(tmp);
X }
X
X--- 1556,1564 ----
X otmp->otyp <= DRUM_OF_EARTHQUAKE) || /* 5 - 9 */
X #endif
X otmp->olet == WAND_SYM) { /* 3 - 11 */
X! if(otmp->spe > 1) tmp = (tmp/4);
X }
X! else return(0);
X return(tmp);
X }
X
X*** src/Old/shknam.c Sun Jun 3 14:10:52 1990
X--- src/shknam.c Thu May 31 22:13:42 1990
X***************
X*** 9,14 ****
X--- 9,18 ----
X
X #ifdef OVLB
X
X+ static void FDECL(mkshobj_at, (const struct shclass *,int,int));
X+ static void FDECL(findname, (char *,const char **));
X+ static int FDECL(shkinit, (const struct shclass *,struct mkroom *));
X+
X static const char *shkliquors[] = {
X /* Ukraine */
X "Njezjin", "Tsjernigof", "Gomel", "Ossipewsk", "Gorlowka",
X***************
X*** 102,108 ****
X "Sperc", "Noskcirdneh", "Yawolloh", "Hyeghu", "Niskal", "Trahnil",
X "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
X "Yelpur", "Nosnehpets", "Stewe", "Renrut", "Zlaw", "Nosalnef",
X! "Rewuorb", "Rellenk",
X ""
X };
X
X--- 106,125 ----
X "Sperc", "Noskcirdneh", "Yawolloh", "Hyeghu", "Niskal", "Trahnil",
X "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
X "Yelpur", "Nosnehpets", "Stewe", "Renrut", "Zlaw", "Nosalnef",
X! "Rewuorb", "Rellenk", "Yad", "Cire Htims", "Y-crad", "Nenilukah",
X! #ifdef OVERLAY
X! "Erreip", "Nehpets", "Mron", "Snivek",
X! #endif
X! #ifdef MAC
X! "Nhoj-lee", "Evad\'kh", "Ettaw-noj", "Tsew-mot", "Ydna-s",
X! #endif
X! #ifdef AMIGA
X! "Falo", "Nosid-da\'r", "Ekim-p", "Rebrol-nek", "Noslo", "Yl-rednow",
X! "Mured-oog",
X! #endif
X! #ifdef VMS
X! "Lez-tneg", "Ytnu-haled", "Niknar",
X! #endif
X ""
X };
X
X***************
X*** 183,189 ****
X static void
X mkshobj_at(shp, sx, sy)
X /* make an object of the appropriate type for a shop square */
X! struct shclass *shp;
X int sx, sy;
X {
X register struct monst *mtmp;
X--- 200,206 ----
X static void
X mkshobj_at(shp, sx, sy)
X /* make an object of the appropriate type for a shop square */
X! const struct shclass *shp;
X int sx, sy;
X {
X register struct monst *mtmp;
X***************
X*** 200,206 ****
X }
X } else if ((atype = get_shop_item(shp - shtypes)) < 0)
X (void) mksobj_at(-atype, sx, sy);
X! else (void) mkobj_at(atype, sx, sy);
X }
X
X static void
X--- 217,223 ----
X }
X } else if ((atype = get_shop_item(shp - shtypes)) < 0)
X (void) mksobj_at(-atype, sx, sy);
X! else (void) mkobj_at(atype, sx, sy, TRUE);
X }
X
X static void
X***************
X*** 207,213 ****
X findname(nampt, nlp)
X /* extract a shopkeeper name for the given shop type */
X char *nampt;
X! char *nlp[];
X {
X register int i;
X
X--- 224,230 ----
X findname(nampt, nlp)
X /* extract a shopkeeper name for the given shop type */
X char *nampt;
X! const char *nlp[];
X {
X register int i;
X
X***************
X*** 214,220 ****
X for(i = 0; i < dlevel; i++)
X if (strlen(nlp[i]) == 0) {
X /* Not enough names, try general name */
X! if (nlp != (char **)shkgeneral)
X findname(nampt, shkgeneral);
X else
X Strcpy(nampt, "Dirk");
X--- 231,237 ----
X for(i = 0; i < dlevel; i++)
X if (strlen(nlp[i]) == 0) {
X /* Not enough names, try general name */
X! if (nlp != shkgeneral)
X findname(nampt, shkgeneral);
X else
X Strcpy(nampt, "Dirk");
X***************
X*** 226,232 ****
X
X static int
X shkinit(shp, sroom) /* create a new shopkeeper in the given room */
X! struct shclass *shp;
X struct mkroom *sroom;
X {
X register int sh, sx, sy;
X--- 243,249 ----
X
X static int
X shkinit(shp, sroom) /* create a new shopkeeper in the given room */
X! const struct shclass *shp;
X struct mkroom *sroom;
X {
X register int sh, sx, sy;
X***************
X*** 285,291 ****
X ESHK(shk)->billct = 0;
X shk->mgold = 1000L + 30L*(long)rnd(100); /* initial capital */
X if (shp->shknms == (char **)shktools) {
X! static int who;
X who = rn2(sizeof(shktools)/sizeof(char *) - 1);
X if (who==21) ESHK(shk)->ismale = FALSE;
X else ESHK(shk)->ismale = TRUE;
X--- 302,308 ----
X ESHK(shk)->billct = 0;
X shk->mgold = 1000L + 30L*(long)rnd(100); /* initial capital */
X if (shp->shknms == (char **)shktools) {
X! static int NEARDATA who;
X who = rn2(sizeof(shktools)/sizeof(char *) - 1);
X if (who==21) ESHK(shk)->ismale = FALSE;
X else ESHK(shk)->ismale = TRUE;
X***************
X*** 293,299 ****
X ESHK(shk)->shknam[PL_NSIZ-1] = 0;
X } else {
X ESHK(shk)->ismale = dlevel%2;
X! findname(ESHK(shk)->shknam, shp->shknms);
X }
X
X return(sh);
X--- 310,316 ----
X ESHK(shk)->shknam[PL_NSIZ-1] = 0;
X } else {
X ESHK(shk)->ismale = dlevel%2;
X! findname(ESHK(shk)->shknam, (const char **)shp->shknms);
X }
X
X return(sh);
X***************
X*** 325,330 ****
X--- 342,351 ----
X
X if(levl[sx][sy].doormask == D_NODOOR) {
X levl[sx][sy].doormask = D_ISOPEN;
X+ mnewsym(sx,sy);
X+ }
X+ if(levl[sx][sy].typ == SDOOR) {
X+ levl[sx][sy].typ = DOOR;
X mnewsym(sx,sy);
X }
X if(levl[sx][sy].doormask & D_TRAPPED) {
X*** src/Old/sit.c Sun Jun 3 14:11:17 1990
X--- src/sit.c Fri Apr 13 17:52:16 1990
X***************
X*** 161,168 ****
X }
X
X for (otmp = invent; otmp; otmp = otmp->nobj) nobj++;
X- if (nobj) for (cnt = rnd(6/((!!Antimagic) + 1)); cnt > 0; cnt--) {
X
X onum = rn2(nobj);
X for(otmp = invent; onum != 0; onum--)
X otmp = otmp->nobj;
X--- 161,169 ----
X }
X
X for (otmp = invent; otmp; otmp = otmp->nobj) nobj++;
X
X+ if (nobj)
X+ for (cnt = rnd(6/((!!Antimagic) + 1)); cnt > 0; cnt--) {
X onum = rn2(nobj);
X for(otmp = invent; onum != 0; onum--)
X otmp = otmp->nobj;
X*** src/Old/sounds.c Sun Jun 3 14:11:33 1990
X--- src/sounds.c Thu May 31 22:13:45 1990
X***************
X*** 8,17 ****
X #include "hack.h"
X #include "edog.h"
X
X- static int FDECL(domonnoise,(struct monst *));
X-
X #ifdef OVLB
X
X void
X verbalize(str)
X register const char *str;
X--- 8,17 ----
X #include "hack.h"
X #include "edog.h"
X
X #ifdef OVLB
X
X+ static int FDECL(domonnoise,(struct monst *));
X+
X void
X verbalize(str)
X register const char *str;
X***************
X*** 107,113 ****
X You("hear the tones of courtly conversation.");
X break;
X case 1:
X! You("hear a sceptre being pounded in judgement.");
X break;
X case 2:
X pline("Someone just shouted \"Off with %s head!\"",
X--- 107,113 ----
X You("hear the tones of courtly conversation.");
X break;
X case 1:
X! You("hear a sceptre being pounded in judgment.");
X break;
X case 2:
X pline("Someone just shouted \"Off with %s head!\"",
X*** src/Old/sp_lev.c Sun Jun 3 14:11:57 1990
X--- src/sp_lev.c Sat May 12 16:07:17 1990
X***************
X*** 26,32 ****
X #define TOP 1
X #define BOTTOM 3
X
X! static walk walklist[50];
X extern int x_maze_max, y_maze_max;
X
X #ifdef MACOS
X--- 26,32 ----
X #define TOP 1
X #define BOTTOM 3
X
X! static walk NEARDATA walklist[50];
X extern int x_maze_max, y_maze_max;
X
X #ifdef MACOS
X***************
X*** 36,43 ****
X #endif
X static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10],
X ralign[3] = { A_CHAOS, A_NEUTRAL, A_LAW };
X! static xchar xstart, ystart, xsize, ysize;
X
X /*
X * Make walls of the area (x1, y1, x2, y2) non diggable
X */
X--- 36,53 ----
X #endif
X static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10],
X ralign[3] = { A_CHAOS, A_NEUTRAL, A_LAW };
X! static xchar NEARDATA xstart, NEARDATA ystart, NEARDATA xsize, NEARDATA ysize;
X
X+ static void FDECL(make_walls_nondiggable, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P));
X+ static int NDECL(rnddoor);
X+ static int NDECL(rndtrap);
X+ static void FDECL(get_location, (schar *,schar *));
X+ static void FDECL(shuffle, (char *,XCHAR_P));
X+ static void FDECL(shuffle2, (char *,char *,XCHAR_P));
X+ static boolean FDECL(load_rooms, (FILE *));
X+ static void FDECL(maze1xy, (coord *));
X+ static boolean FDECL(load_maze, (FILE *));
X+
X /*
X * Make walls of the area (x1, y1, x2, y2) non diggable
X */
X***************
X*** 406,416 ****
X c = 0;
X
X if (!c)
X! (void) mkobj_at(0, x, y);
X else if (tmpobj.id != -1)
X (void) mksobj_at(tmpobj.id, x, y);
X else
X! (void) mkobj_at(c, x, y);
X }
X
X n = fgetc(fd); /* Number of drawbridges */
X--- 416,426 ----
X c = 0;
X
X if (!c)
X! (void) mkobj_at(0, x, y, TRUE);
X else if (tmpobj.id != -1)
X (void) mksobj_at(tmpobj.id, x, y);
X else
X! (void) mkobj_at(c, x, y, TRUE);
X }
X
X n = fgetc(fd); /* Number of drawbridges */
X***************
X*** 540,546 ****
X mapfact = (int) ((mapcount * 100L) / mapcountmax);
X for(x = rnd((int) (20 * mapfact) / 100); x; x--) {
X maze1xy(&mm);
X! (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y);
X }
X for(x = rnd((int) (12 * mapfact) / 100); x; x--) {
X maze1xy(&mm);
X--- 550,556 ----
X mapfact = (int) ((mapcount * 100L) / mapcountmax);
X for(x = rnd((int) (20 * mapfact) / 100); x; x--) {
X maze1xy(&mm);
X! (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y, TRUE);
X }
X for(x = rnd((int) (12 * mapfact) / 100); x; x--) {
X maze1xy(&mm);
X
END_OF_FILE
if test 52827 -ne `wc -c <'patch8.07'`; then
echo shar: \"'patch8.07'\" unpacked with wrong size!
fi
# end of 'patch8.07'
fi
echo shar: End of archive 6 \(of 24\).
cp /dev/null ark6isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 24 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0