billr@saab.CNA.TEK.COM (Bill Randle) (08/03/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 7, Issue 96 Archive-name: NetHack3/Patch1c 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 3 (of 6)." # Contents: src1.diff # Wrapped by billr@saab on Thu Aug 3 09:57:11 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'src1.diff' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src1.diff'\" else echo shar: Extracting \"'src1.diff'\" \(54643 characters\) sed "s/^X//" >'src1.diff' <<'END_OF_FILE' XSource patches, part 1 X X------------------------------------Cut------------------------------------ X*** src/Old/Makefile.src Mon Jul 31 13:42:55 1989 X--- src/Makefile.src Mon Jul 31 12:40:38 1989 X*************** X*** 26,31 **** X--- 26,40 ---- X # Systos wants 'pc'; everything else normally wants 'unix' X TARG = unix X X+ # if you are using gcc as your compiler: X+ # add -fwritable-strings to your other CFLAGS X+ # uncomment the CC definition below if it's not in your environment X+ # ignore warnings about initializing non-const *s from const *s X+ # if you get setcgtty() warnings during execution, you are feeding gcc X+ # a non-ANSI <sys/ioctl.h> -- either run fixincludes on it or use X+ # -traditional in CFLAGS X+ # CC = gcc X+ X # flags may have to be changed as required X # flags for 286 Xenix: X # CFLAGS = -O -Gt24 -LARGE -Ml -I../include X*************** X*** 60,67 **** X # if, instead of yacc/lex you have bison/flex, comment/uncomment the following. X YACC = yacc X LEX = lex X! #YACC = bison X! #LEX = flex X X # make NetHack X GAME = nethack X--- 69,76 ---- X # if, instead of yacc/lex you have bison/flex, comment/uncomment the following. X YACC = yacc X LEX = lex X! # YACC = bison -y X! # LEX = flex X X # make NetHack X GAME = nethack X*************** X*** 85,96 **** X mthrowu.c music.c o_init.c objects.c objnam.c options.c pager.c\ X pickup.c polyself.c potion.c pray.c pri.c priest.c prisym.c read.c\ X restore.c rip.c rnd.c rumors.c save.c search.c shk.c shknam.c sit.c\ X! sounds.c sp_lev.c spell.c steal.c termcap.c timeout.c topl.c topten.c\ X! track.c trap.c u_init.c uhitm.c vault.c version.c weapon.c were.c\ X! wield.c wizard.c worm.c worn.c write.c zap.c X X! # all .c files but msdos.c, tos.c, *main.c, *tty.c, *unix.c, (system specific) X! # and makedefs.c, lev_comp.c, panic.c (not part of any nethack) X X CSOURCES = $(HACKCSRC) $(TARG)main.c $(TARG)main.c $(TARG)main.c makedefs.c panic.c X X--- 94,104 ---- X mthrowu.c music.c o_init.c objects.c objnam.c options.c pager.c\ X pickup.c polyself.c potion.c pray.c pri.c priest.c prisym.c read.c\ X restore.c rip.c rnd.c rumors.c save.c search.c shk.c shknam.c sit.c\ X! sounds.c sp_lev.c spell.c steal.c termcap.c timeout.c topl.c\ X! topten.c track.c trap.c u_init.c uhitm.c vault.c version.c weapon.c\ X! were.c wield.c wizard.c worm.c worn.c write.c zap.c X X! # all .c that are part of the main NetHack program and are not system specific X X CSOURCES = $(HACKCSRC) $(TARG)main.c $(TARG)main.c $(TARG)main.c makedefs.c panic.c X X*************** X*** 144,152 **** X @$(LD) $(LFLAGS) /lib/crt0s.o /lib/shlib.ifile -o $(GAME) $(HOBJ) X @touch Sysatt X X! Systos: $(HOBJ) tos.o Makefile X @echo "Loading ..." X! @$(CC) $(LFLAGS) -o $(GAME) $(HOBJ) tos.o $(TERMLIB) X @touch Systos X X SysV-AT: DUMB.Setup $(HOBJ) Makefile X--- 152,160 ---- X @$(LD) $(LFLAGS) /lib/crt0s.o /lib/shlib.ifile -o $(GAME) $(HOBJ) X @touch Sysatt X X! Systos: $(HOBJ) oldtos.o Makefile X @echo "Loading ..." X! @$(CC) $(LFLAGS) -o $(GAME) $(HOBJ) oldtos.o $(TERMLIB) X @touch Systos X X SysV-AT: DUMB.Setup $(HOBJ) Makefile X*************** X*** 351,357 **** X @rm -f Makefile.bak X X # PC dependency for Systos that won't be made on a UNIX system X! tos.o: ../include/hack.h ../include/osbind.h X X # DO NOT DELETE THIS LINE X X--- 359,365 ---- X @rm -f Makefile.bak X X # PC dependency for Systos that won't be made on a UNIX system X! oldtos.o: ../include/hack.h X X # DO NOT DELETE THIS LINE X X*** src/Old/apply.c Mon Jul 31 13:44:15 1989 X--- src/apply.c Sat Jul 29 12:04:03 1989 X*************** X*** 158,163 **** X--- 158,167 ---- X if(lev->mmask) { X mtmp = m_at(rx,ry); X mstatusline(mtmp); X+ if (mtmp->mundetected) { X+ mtmp->mundetected = 0; X+ if (cansee(rx,ry)) pmon(mtmp); X+ } X return; X } X if(lev->typ == SDOOR) { X*************** X*** 491,497 **** X--- 495,508 ---- X lev->typ = CORR; X digtxt = "You succeeded in cutting away some rock."; X } else if(IS_WALL(lev->typ)) { X+ #ifdef STUPID X+ if (is_maze_lev) X+ lev->typ = ROOM; X+ else X+ lev->typ = DOOR; X+ #else X lev->typ = is_maze_lev ? ROOM : DOOR; X+ #endif X digtxt = "You just made an opening in the wall."; X } else if(lev->typ == SDOOR) { X lev->typ = DOOR; X*************** X*** 1006,1011 **** X--- 1017,1023 ---- X if (uwep->spe > 0 && !rn2(3)) { X uwep->spe = 0; X djinni_from_bottle(uwep); X+ makeknown(MAGIC_LAMP); X } else if (rn2(2) && !Blind) X You("see a puff of smoke."); X else pline(nothing_happens); X*** src/Old/artifact.c Mon Jul 31 13:45:11 1989 X--- src/artifact.c Tue Jul 25 14:39:11 1989 X*************** X*** 11,17 **** X /* the artifacts (currently weapons only) */ X static const struct artifact artilist[] = { X X! #define NO_ATTK 0, 0, 0, 0 X X { LONG_SWORD, "Excalibur", (SPFX_NOGEN | SPFX_SEEK | SPFX_DEFN | X SPFX_SEARCH), 0, X--- 11,17 ---- X /* the artifacts (currently weapons only) */ X static const struct artifact artilist[] = { X X! #define NO_ATTK { 0, 0, 0, 0 } X X { LONG_SWORD, "Excalibur", (SPFX_NOGEN | SPFX_SEEK | SPFX_DEFN | X SPFX_SEARCH), 0, X*** src/Old/bones.c Mon Jul 31 13:46:09 1989 X--- src/bones.c Fri Jul 28 17:53:10 1989 X*************** X*** 4,10 **** X X #include "hack.h" X X! #ifdef TOS X #define OMASK 0x8000 X #else X #define OMASK 0 X--- 4,10 ---- X X #include "hack.h" X X! #ifdef OLD_TOS X #define OMASK 0x8000 X #else X #define OMASK 0 X*************** X*** 12,17 **** X--- 12,20 ---- X X #ifdef DGK X char bones[FILENAME]; X+ #ifndef OLD_TOS X+ extern long bytes_counted; X+ #endif X #else X char bones[] = "bones.xx"; X #endif X*************** X*** 49,54 **** X--- 52,58 ---- X ); X } X X+ #ifdef TUTTI_FRUTTI X static void X goodfruit(id) X int id; X*************** X*** 62,67 **** X--- 66,72 ---- X } X } X } X+ #endif X X /* save bones and possessions of a deceased adventurer */ X void X*************** X*** 70,76 **** X--- 75,83 ---- X register struct obj *otmp; X register struct trap *ttmp; X register struct monst *mtmp, *mtmp2; X+ #ifdef TUTTI_FRUTTI X struct fruit *f; X+ #endif X X if(dlevel <= 0 || dlevel > MAXLEVEL) return; X if(no_bones_level(dlevel)) return; /* no bones for specific levels */ X*************** X*** 113,122 **** X--- 120,131 ---- X if(mtmp->data == &mons[PM_MEDUSA]) mongone(mtmp); X #endif X } X+ #ifdef TUTTI_FRUTTI X /* mark all fruits as nonexistent; when we come to them we'll mark X * them as existing (using goodfruit()) X */ X for(f=ffruit; f; f=f->nextf) f->fid = -f->fid; X+ #endif X X /* drop everything; the corpse's possessions are usually cursed */ X otmp = invent; X*************** X*** 124,130 **** X--- 133,141 ---- X otmp->ox = u.ux; X otmp->oy = u.uy; X otmp->owornmask = 0; X+ #ifdef TUTTI_FRUTTI X if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe); X+ #endif X if(rn2(5)) curse(otmp); X if(!otmp->nobj){ X otmp->nobj = fobj; X*************** X*** 160,166 **** X--- 171,179 ---- X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){ X for(otmp = mtmp->minvent; otmp; otmp = otmp->nobj) { X otmp->dknown = otmp->bknown = 0; X+ #ifdef TUTTI_FRUTTI X if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe); X+ #endif X if(uses_known(otmp)) otmp->known = 0; X if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) { X otmp->spe = -1; /* no longer the actual amulet */ X*************** X*** 186,192 **** X--- 199,207 ---- X ) X otmp->onamelth = 0; X if(uses_known(otmp)) otmp->known = 0; X+ #ifdef TUTTI_FRUTTI X if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe); X+ #endif X otmp->dknown = otmp->bknown = 0; X otmp->invlet = 0; X #ifdef MAIL X*************** X*** 218,226 **** X #endif X return; X } X savefruitchn(fd); X! #ifdef DGK X! savelev(fd,dlevel, COUNT | WRITE); X #else X savelev(fd,dlevel); X #endif X--- 233,262 ---- X #endif X return; X } X+ X+ #if defined(DGK) && !defined(OLD_TOS) /* check whether there is room */ X+ count_only = TRUE; X+ #ifdef TUTTI_FRUTTI X savefruitchn(fd); X! #endif X! savelev(fd, dlevel, COUNT); X! bflush(fd); X! if (bytes_counted > freediskspace(bones)) { /* not enough room */ X! #ifdef WIZARD X! if (wizard) X! pline("Insufficient space to create bones file."); X! #endif X! unlink(bones); X! return; X! } X! count_only = FALSE; X! #endif /* DGK */ X! X! #ifdef TUTTI_FRUTTI X! savefruitchn(fd); X! #endif X! #if defined(DGK) && !defined(OLD_TOS) X! savelev(fd, dlevel, WRITE); X #else X savelev(fd,dlevel); X #endif X*** src/Old/cmd.c Mon Jul 31 13:46:45 1989 X--- src/cmd.c Thu Jul 27 11:22:54 1989 X*************** X*** 50,56 **** X extern int dowhatdoes(); /**/ X extern int dohelp(); /**/ X extern int dohistory(); /**/ X- extern int dosh(); /**/ X extern int doloot(); /**/ X extern int dodrink(); /**/ X extern int dodip(); /**/ X--- 50,55 ---- X*** src/Old/dbridge.c Mon Jul 31 13:47:32 1989 X--- src/dbridge.c Mon Jul 24 18:19:07 1989 X*************** X*** 256,262 **** X /* So, you didn't die */ X pline("A %s force teleports you away...", X Hallucination ? "normal" : "strange"); X! enexto(&xy, x2, y2); X teleds(xy.x, xy.y); X } X redosym(x,y); X--- 256,262 ---- X /* So, you didn't die */ X pline("A %s force teleports you away...", X Hallucination ? "normal" : "strange"); X! enexto(&xy, x2, y2, &playermon); X teleds(xy.x, xy.y); X } X redosym(x,y); X*************** X*** 358,364 **** X /* So, you didn't die */ X pline("A %s force teleports you away...", X Hallucination ? "normal" : "strange"); X! enexto(&xy, x2, y2); X teleds(xy.x, xy.y); X } X redosym(x,y); X--- 358,364 ---- X /* So, you didn't die */ X pline("A %s force teleports you away...", X Hallucination ? "normal" : "strange"); X! enexto(&xy, x2, y2, &playermon); X teleds(xy.x, xy.y); X } X redosym(x,y); X*** src/Old/decl.c Mon Jul 31 13:48:08 1989 X--- src/decl.c Sun Jul 30 11:30:32 1989 X*************** X*** 46,54 **** X--- 46,58 ---- X const char nul[40] = DUMMY; /* contains zeros */ X char plname[PL_NSIZ] = DUMMY; /* player name */ X char pl_character[PL_CSIZ] = DUMMY; X+ X+ #ifdef TUTTI_FRUTTI X char pl_fruit[PL_FSIZ] = DUMMY; X int current_fruit = 0; X struct fruit *ffruit = 0; X+ #endif X+ X #ifdef STRONGHOLD X char tune[6] = DUMMY; X # ifdef MUSIC X*************** X*** 55,60 **** X--- 59,65 ---- X schar music_heard = 0; X # endif X #endif X+ X char *occtxt = DUMMY; X const char quitchars[] = " \r\n\033"; X const char vowels[] = "aeiouAEIOU"; X*************** X*** 75,80 **** X--- 80,86 ---- X const char *configfile = "NetHack.cnf"; /* read by read_config_file() */ X char levels[PATHLEN]; /* where levels are */ X #endif /* MSDOS */ X+ X #ifdef DGK X char lock[FILENAME]; /* pathname of level files */ X char permbones[PATHLEN]; /* where permanent copy of bones go */ X*************** X*** 109,114 **** X--- 115,122 ---- X boolean in_mklev = FALSE; X boolean stoned = FALSE; /* done to monsters hit by 'c' */ X boolean unweapon = FALSE; X+ boolean mrg_to_wielded = FALSE; /* weapon picked is merged with wielded one */ X+ X #ifdef KOPS X boolean allow_kops = TRUE; X #endif X*** src/Old/do.c Mon Jul 31 13:49:10 1989 X--- src/do.c Fri Jul 28 17:53:13 1989 X*************** X*** 6,12 **** X X #include "hack.h" X X! #if defined(DGK) && !defined(TOS) X extern struct finfo fileinfo[]; X #else X extern boolean level_exists[]; X--- 6,12 ---- X X #include "hack.h" X X! #if defined(DGK) && !defined(OLD_TOS) X extern struct finfo fileinfo[]; X #else X extern boolean level_exists[]; X*************** X*** 106,112 **** X--- 106,116 ---- X pline("The sink quivers upward for a moment."); X break; X case RIN_POISON_RESISTANCE: X+ #ifdef TUTTI_FRUTTI X You("smell rotten %s.", makeplural(pl_fruit)); X+ #else X+ You("smell rotten fruit."); X+ #endif X break; X case RIN_AGGRAVATE_MONSTER: X pline("Several flies buzz angrily around the sink."); X*************** X*** 591,597 **** X # ifdef ENDGAME X dlevel == ENDLEVEL || X # endif X! #if defined(DGK) && !defined(TOS) X /* If the level has no .where yet, it hasn't been made */ X !fileinfo[dlevel].where) X #else X--- 595,601 ---- X # ifdef ENDGAME X dlevel == ENDLEVEL || X # endif X! #if defined(DGK) && !defined(OLD_TOS) X /* If the level has no .where yet, it hasn't been made */ X !fileinfo[dlevel].where) X #else X*************** X*** 599,605 **** X #endif X mklev(); X else { X! #if defined(DGK) && !defined(TOS) X /* If not currently accessible, swap it in. */ X if (fileinfo[dlevel].where != ACTIVE) X swapin_file(dlevel); X--- 603,609 ---- X #endif X mklev(); X else { X! #if defined(DGK) && !defined(OLD_TOS) X /* If not currently accessible, swap it in. */ X if (fileinfo[dlevel].where != ACTIVE) X swapin_file(dlevel); X*** src/Old/do_wear.c Mon Jul 31 13:50:44 1989 X--- src/do_wear.c Sun Jul 30 21:04:15 1989 X*************** X*** 861,866 **** X--- 861,867 ---- X else setworn((struct obj *)0, otmp->owornmask & W_ARMOR); X off_msg(otmp); X } X+ takeoff_mask = taking_off = 0L; X return(1); X } X X*************** X*** 986,991 **** X--- 987,993 ---- X /* if(is_shield(otmp)) (void) Shield_on(); */ X on_msg(otmp); X } X+ takeoff_mask = taking_off = 0L; X return(1); X } X X*************** X*** 1132,1141 **** X } X X void X! glibr(){ X! register struct obj *otmp; X! int xfl = 0; X! if(!uarmg) if(uleft || uright) X #ifdef POLYSELF X if(!nolimbs(uasmon)) X #endif X--- 1134,1154 ---- X } X X void X! glibr() X! { X! register struct obj *otmp; X! int xfl = 0; X! #ifdef HARD X! boolean leftfall, rightfall; X! X! leftfall = (uleft && !uleft->cursed && (!uwep || !uwep->cursed)); X! rightfall = (uright && !uright->cursed && (!uwep || !uwep->cursed X! || !bimanual(uwep))); X! #else X! #define leftfall uleft X! #define rightfall uright X! #endif X! if(!uarmg) if(leftfall || rightfall) X #ifdef POLYSELF X if(!nolimbs(uasmon)) X #endif X*************** X*** 1143,1160 **** X /* Note: at present also cursed rings fall off */ X /* changed 10/30/86 by GAN */ X Your("%s off your %s.", X! #ifdef HARD X! ((uleft && !uleft->cursed) && (uright && !uright->cursed)) ? "rings slip" : "ring slips", X! #else X! (uleft && uright) ? "rings slip" : "ring slips", X! #endif X makeplural(body_part(FINGER))); X xfl++; X! if((otmp = uleft) != (struct obj *)0){ X Ring_off(uleft); X dropx(otmp); X } X! if((otmp = uright) != (struct obj *)0){ X Ring_off(uright); X dropx(otmp); X } X--- 1156,1171 ---- X /* Note: at present also cursed rings fall off */ X /* changed 10/30/86 by GAN */ X Your("%s off your %s.", X! (leftfall && rightfall) ? "rings slip" : "ring slips", X makeplural(body_part(FINGER))); X xfl++; X! if(leftfall) { X! otmp = uleft; X Ring_off(uleft); X dropx(otmp); X } X! if(rightfall) { X! otmp = uright; X Ring_off(uright); X dropx(otmp); X } X*** src/Old/dog.c Mon Jul 31 13:51:44 1989 X--- src/dog.c Tue Jul 25 14:37:41 1989 X*************** X*** 229,239 **** X switch (obj->otyp) { X case TRIPE_RATION: X return (carn ? DOGFOOD : MANFOOD); X- case CORPSE: X case EGG: X! if ((obj->age + 50 <= moves && mon->data->mlet != S_FUNGUS) || X! (poisonous(&mons[obj->corpsenm]) && !resists_poison(mon->data)) || X! (obj->corpsenm == PM_COCKATRICE && !resists_ston(mon->data))) X return POISON; X else return (carn ? CADAVER : MANFOOD); X case DEAD_LIZARD: X--- 229,243 ---- X switch (obj->otyp) { X case TRIPE_RATION: X return (carn ? DOGFOOD : MANFOOD); X case EGG: X! if (obj->corpsenm == PM_COCKATRICE && X! !resists_ston(mon->data)) X! return POISON; X! return (carn ? CADAVER : MANFOOD); X! case CORPSE: X! if ((obj->age+50 <= moves && mon->data->mlet != S_FUNGUS) || X! (poisonous(&mons[obj->corpsenm]) && X! !resists_poison(mon->data))) X return POISON; X else return (carn ? CADAVER : MANFOOD); X case DEAD_LIZARD: X*** src/Old/dogmove.c Mon Jul 31 13:52:17 1989 X--- src/dogmove.c Tue Jul 25 21:33:11 1989 X*************** X*** 335,352 **** X X nx = sgn(omx - u.ux); X ny = sgn(omy - u.uy); X! if(goodpos((cc.x = u.ux+nx), (cc.y = u.uy+ny))) goto dognext; X X i = xytod(nx, ny); X for(j = (i + 7)%8; j < (i + 1)%8; j++) { X! X! dtoxy(&cc, j); X! if(goodpos(cc.x, cc.y)) goto dognext; X } X for(j = (i + 6)%8; j < (i + 2)%8; j++) { X! X! dtoxy(&cc, j); X! if(goodpos(cc.x, cc.y)) goto dognext; X } X cc.x = mtmp->mx; X cc.y = mtmp->my; X--- 335,351 ---- X X nx = sgn(omx - u.ux); X ny = sgn(omy - u.uy); X! if(goodpos((cc.x = u.ux+nx), (cc.y = u.uy+ny), mtmp->data)) X! goto dognext; X X i = xytod(nx, ny); X for(j = (i + 7)%8; j < (i + 1)%8; j++) { X! dtoxy(&cc, j); X! if(goodpos(cc.x, cc.y, mtmp->data)) goto dognext; X } X for(j = (i + 6)%8; j < (i + 2)%8; j++) { X! dtoxy(&cc, j); X! if(goodpos(cc.x, cc.y, mtmp->data)) goto dognext; X } X cc.x = mtmp->mx; X cc.y = mtmp->my; X*** src/Old/dokick.c Mon Jul 31 13:53:05 1989 X--- src/dokick.c Mon Jul 31 09:37:37 1989 X*************** X*** 46,53 **** X # endif X } X X! mon->mhp -= (!martial() ? rnd(dmg) : rnd(dmg)+rnd(ACURR(A_DEX)/2)); X if(mon->mhp < 1) { X killed(mon); X return; X } X--- 46,56 ---- X # endif X } X X! if (dmg) X! mon->mhp -= (!martial() ? rnd(dmg) : X! rnd(dmg)+rnd(ACURR(A_DEX)/2)); X if(mon->mhp < 1) { X+ (void) passive(mon, TRUE, 0); X killed(mon); X return; X } X*************** X*** 55,62 **** X /* see if the monster has a place to move into */ X mdx = mon->mx + u.dx; X mdy = mon->my + u.dy; X! if(goodpos(mdx, mdy)) { X! pline("%s reels from the blow.", Monnam(mon)); X levl[mon->mx][mon->my].mmask = 0; X levl[mdx][mdy].mmask = 1; X mon->mx = mdx; X--- 58,65 ---- X /* see if the monster has a place to move into */ X mdx = mon->mx + u.dx; X mdy = mon->my + u.dy; X! if(goodpos(mdx, mdy, mon->data)) { X! kludge("%s reels from the blow.", Monnam(mon)); X levl[mon->mx][mon->my].mmask = 0; X levl[mdx][mdy].mmask = 1; X mon->mx = mdx; X*************** X*** 65,70 **** X--- 68,74 ---- X set_apparxy(mon); X } X } X+ (void) passive(mon, FALSE, 1); X X /* it is unchivalrous to attack the defenseless or from behind */ X if (pl_character[0] == 'K' && u.ualigntyp == U_LAWFUL && X*************** X*** 92,100 **** X X setmangry(mon); X X! if(Levitation && !rn2(3) && verysmall(mon->data) && X! !is_floater(mon->data) && !is_flyer(mon->data)) { X! You("are floating in the air, and miss wildly!"); X return; X } X X--- 96,105 ---- X X setmangry(mon); X X! if(Levitation && !rn2(3) && verysmall(mon->data) && X! !is_flyer(mon->data)) { X! pline("Floating in the air, you miss wildly!"); X! (void) passive(mon, FALSE, 1); X return; X } X X*************** X*** 105,110 **** X--- 110,116 ---- X if(!rn2((i < j/10) ? 2 : (i < j/5) ? 3 : 4)) { X if(martial() && !rn2(2)) goto doit; X Your("clumsy kick does no damage."); X+ (void) passive(mon, FALSE, 1); X return; X } X if(i < j/10) clumsy = TRUE; X*************** X*** 118,132 **** X doit: X kludge("You kick %s.", mon_nam(mon)); X if(!rn2(clumsy ? 3 : 4) && (clumsy || !bigmonst(mon->data)) && X! mon->mcansee && !thick_skinned(mon->data) && X! !mon->mfroz && !mon->mstun && !mon->mconf) { X! mnexto(mon); X! if(mon->mx != x || mon->my != y) { X! kludge("%s jumps, %s evading your %skick.", Monnam(mon), X! clumsy ? "easily" : "nimbly", X clumsy ? "clumsy " : ""); X return; X! } /* else fall to the next case */ X } X kickdmg(mon, clumsy); X } X--- 124,153 ---- X doit: X kludge("You kick %s.", mon_nam(mon)); X if(!rn2(clumsy ? 3 : 4) && (clumsy || !bigmonst(mon->data)) && X! mon->mcansee && !mon->mtrapped && !thick_skinned(mon->data) && X! mon->data->mlet != S_EEL && haseyes(mon->data) && !mon->mfroz && X! !mon->mstun && !mon->mconf && mon->data->mmove >= 12) { X! if(!nohands(mon->data) && !rn2(martial() ? 5 : 3)) { X! kludge("%s blocks your %skick.", Monnam(mon), X clumsy ? "clumsy " : ""); X+ (void) passive(mon, FALSE, 1); X return; X! } else { X! mnexto(mon); X! if(mon->mx != x || mon->my != y) { X! pline("%s %s, %s evading your %skick.", X! Blind ? "It" : Monnam(mon), X! (can_teleport(mon->data) ? "teleports" : X! is_flyer(mon->data) ? "flutters" : X! is_floater(mon->data) ? "floats" : X! nolimbs(mon->data) ? "slides" : X! "jumps"), X! clumsy ? "easily" : "nimbly", X! clumsy ? "clumsy " : ""); X! (void) passive(mon, FALSE, 1); X! return; X! } X! } X } X kickdmg(mon, clumsy); X } X*************** X*** 150,156 **** X if(!rn2(4)) setmangry(mtmp); /* not always pleasing */ X X /* greedy monsters catch gold */ X! pline("%s catches the gold.", Monnam(mtmp)); X mtmp->mgold += amount; X if (mtmp->isshk) { X long robbed = ESHK(mtmp)->robbed; X--- 171,177 ---- X if(!rn2(4)) setmangry(mtmp); /* not always pleasing */ X X /* greedy monsters catch gold */ X! kludge("%s catches the gold.", Monnam(mtmp)); X mtmp->mgold += amount; X if (mtmp->isshk) { X long robbed = ESHK(mtmp)->robbed; X*************** X*** 245,255 **** X /* if a pile, the "top" object gets kicked */ X for (otmp = fobj; otmp; otmp = otmp->nobj) X if(otmp->ox == x && otmp->oy == y) X! if(!otmp->cobj) X! if (otmp != uchain) { X cnt++; X if(cnt == 1) obj = otmp; X! } X X /* range < 2 means the object will not move. */ X /* maybe dexterity should also figure here. */ X--- 266,275 ---- X /* if a pile, the "top" object gets kicked */ X for (otmp = fobj; otmp; otmp = otmp->nobj) X if(otmp->ox == x && otmp->oy == y) X! if(!otmp->cobj) { X cnt++; X if(cnt == 1) obj = otmp; X! } X X /* range < 2 means the object will not move. */ X /* maybe dexterity should also figure here. */ X*************** X*** 291,297 **** X return(1); X } X X! if(obj->otyp == BOULDER || obj == uball) X return(0); X X /* a box gets a chance of breaking open here */ X--- 311,317 ---- X return(1); X } X X! if(obj->otyp == BOULDER || obj == uball || obj == uchain) X return(0); X X /* a box gets a chance of breaking open here */ X*************** X*** 375,380 **** X--- 395,401 ---- X obj->oy = bhitpos.y; X levl[obj->ox][obj->oy].omask = 1; X stackobj(obj); X+ if(!levl[obj->ox][obj->oy].mmask) newsym(obj->ox, obj->oy); X return(1); X } X #endif /* KICK */ X*************** X*** 583,589 **** X #ifdef KICK X dumb: X #endif X! if (martial() || ACURR(A_DEX) >= 16) { X You("kick at empty space."); X } else { X pline("Dumb move! You strain a muscle."); X--- 604,610 ---- X #ifdef KICK X dumb: X #endif X! if (martial() || ACURR(A_DEX) >= 16 || rn2(3)) { X You("kick at empty space."); X } else { X pline("Dumb move! You strain a muscle."); X*** src/Old/eat.c Mon Jul 31 13:54:35 1989 X--- src/eat.c Wed Jul 26 19:33:43 1989 X*************** X*** 557,568 **** X /* Fall through otherwise */ X #endif X default: X! if (otmp->otyp==SLIME_MOLD && !otmp->cursed && X! otmp->spe == current_fruit) X pline(!Hallucination ? X "Mmm! Your favorite!" : X "Yum! Your fave fruit!"); X! else { X int oldquan = otmp->quan; X otmp->quan = 1; X pline("That %s was %s!", xname(otmp), X--- 557,572 ---- X /* Fall through otherwise */ X #endif X default: X! #ifdef TUTTI_FRUTTI X! if (otmp->otyp==SLIME_MOLD && !otmp->cursed X! && otmp->spe == current_fruit X! ) X pline(!Hallucination ? X "Mmm! Your favorite!" : X "Yum! Your fave fruit!"); X! else X! #endif X! { X int oldquan = otmp->quan; X otmp->quan = 1; X pline("That %s was %s!", xname(otmp), X*** src/Old/end.c Mon Jul 31 13:55:29 1989 X--- src/end.c Sun Jul 30 12:12:38 1989 X*************** X*** 2,14 **** X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X- #ifndef TOS X- #include <signal.h> X- #endif X- X /* block some unused #defines to avoid overloading some cpp's */ X #define MONATTK_H X #include "hack.h" X X #include "eshk.h" X X--- 2,13 ---- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X /* block some unused #defines to avoid overloading some cpp's */ X #define MONATTK_H X #include "hack.h" X+ #ifndef NO_SIGNAL X+ #include <signal.h> X+ #endif X X #include "eshk.h" X X*************** X*** 17,27 **** X int X done1() X { X! #ifndef TOS X (void) signal(SIGINT,SIG_IGN); X #endif X if(flags.ignintr) { X! #ifndef TOS X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X #endif X clrlin(); X--- 16,26 ---- X int X done1() X { X! #ifndef NO_SIGNAL X (void) signal(SIGINT,SIG_IGN); X #endif X if(flags.ignintr) { X! #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X #endif X clrlin(); X*************** X*** 38,44 **** X { X pline("Really quit? "); X if(yn() == 'n') { X! #ifndef TOS X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X #endif X clrlin(); X--- 37,43 ---- X { X pline("Really quit? "); X if(yn() == 'n') { X! #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X #endif X clrlin(); X*************** X*** 70,76 **** X int X done_intr(){ X done_stopprint++; X! #ifndef TOS X (void) signal(SIGINT, SIG_IGN); X #ifdef UNIX X (void) signal(SIGQUIT, SIG_IGN); X--- 69,75 ---- X int X done_intr(){ X done_stopprint++; X! #ifndef NO_SIGNAL X (void) signal(SIGINT, SIG_IGN); X #ifdef UNIX X (void) signal(SIGQUIT, SIG_IGN); X*************** X*** 182,190 **** X register char *st1; X { X struct permonst *upmon; X! char buf[BUFSZ], buf1[BUFSZ], buf2[BUFSZ]; X char c; X boolean taken; X #ifdef WIZARD X if (wizard && *st1=='t') { X You("are a very tricky wizard, it seems."); X--- 181,199 ---- X register char *st1; X { X struct permonst *upmon; X! char buf[BUFSZ], buf1[BUFSZ], buf2[BUFSZ], buf3[BUFSZ]; X! /* buf: used if killer gets changed X! * buf1: used if st1 gets changed X! * buf2: same as player name, except it is capitalized X! * buf3: used to copy killer in case it comes from something like X! xname(), which would otherwise get overwritten when we call X! xname() when listing possessions X! */ X char c; X boolean taken; X+ X+ Strcpy(buf3, killer); X+ killer = buf3; X #ifdef WIZARD X if (wizard && *st1=='t') { X You("are a very tricky wizard, it seems."); X*************** X*** 236,248 **** X } X #endif /* WIZARD || EXPLORE_MODE */ X die: X! #ifndef TOS X (void) signal(SIGINT, (SIG_RET_TYPE) done_intr); X #ifdef UNIX X (void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr); X (void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup); X #endif X! #endif /* TOS /* */ X upmon = player_mon(); X if(u.ugrave_arise > -1) /* create no corpse */ ; X else if(*st1 == 's' && st1[2] == 'o') X--- 245,257 ---- X } X #endif /* WIZARD || EXPLORE_MODE */ X die: X! #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done_intr); X #ifdef UNIX X (void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr); X (void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup); X #endif X! #endif /* NO_SIGNAL /* */ X upmon = player_mon(); X if(u.ugrave_arise > -1) /* create no corpse */ ; X else if(*st1 == 's' && st1[2] == 'o') X*************** X*** 435,446 **** X X void X clearlocks(){ X! #if defined(DGK) && !defined(TOS) X eraseall(levels, alllevels); X if (ramdisk) X eraseall(permbones, alllevels); X #else X! #if defined(UNIX) || (defined(MSDOS) && !defined(TOS)) X register int x; X #ifdef UNIX X (void) signal(SIGHUP,SIG_IGN); X--- 444,455 ---- X X void X clearlocks(){ X! #if defined(DGK) && !defined(OLD_TOS) X eraseall(levels, alllevels); X if (ramdisk) X eraseall(permbones, alllevels); X #else X! #if defined(UNIX) || (defined(MSDOS) && !defined(OLD_TOS)) X register int x; X #ifdef UNIX X (void) signal(SIGHUP,SIG_IGN); X*** src/Old/engrave.c Mon Jul 31 13:56:16 1989 X--- src/engrave.c Sun Jul 30 18:57:51 1989 X*************** X*** 208,214 **** X /* There's no reason you should be able to write with a wand X * while both your hands are tied up. X */ X! if (!freehand() && otmp != uwep) { X You("have no free %s to write with!", body_part(HAND)); X return(0); X } X--- 208,214 ---- X /* There's no reason you should be able to write with a wand X * while both your hands are tied up. X */ X! if (!freehand() && otmp != uwep && !otmp->owornmask) { X You("have no free %s to write with!", body_part(HAND)); X return(0); X } X*************** X*** 218,223 **** X--- 218,227 ---- X return(0); X } X #endif X+ if(otmp == ublindf) { X+ pline("That is a bit difficult to engrave with, don't you think?"); X+ return(1); X+ } X if(otmp != &zeroobj && index(too_large,otmp->olet)) { X You("can't engrave with such a large object!"); X return(1); X*************** X*** 238,246 **** X makeplural(body_part(FINGER))); X type = DUST; X } else if(otmp->olet == WAND_SYM && zappable(otmp)) { X! /* changed so any wand gets zapped out, but fire X! * wands become known. X! */ X if((objects[otmp->otyp].bits & NODIR)) { X zapnodir(otmp); X type = DUST; X--- 242,248 ---- X makeplural(body_part(FINGER))); X type = DUST; X } else if(otmp->olet == WAND_SYM && zappable(otmp)) { X! /* changed so any wand gets zapped out */ X if((objects[otmp->otyp].bits & NODIR)) { X zapnodir(otmp); X type = DUST; X*************** X*** 307,313 **** X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty)); X oep->engr_x = tx; X oep->engr_y = ty; X pline("The engraving on the floor vanishes!"); X--- 309,315 ---- X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty,(struct permonst *)0)); X oep->engr_x = tx; X oep->engr_y = ty; X pline("The engraving on the floor vanishes!"); X*************** X*** 323,334 **** X doname(otmp)); X X } else { X! if(otmp->otyp == DAGGER || X #ifdef WORM X otmp->otyp == CRYSKNIFE || X #endif X! is_sword(otmp) || otmp->otyp == AXE) { X type = ENGRAVE; X if((int)otmp->spe <= -3) { X Your("%s too dull for engraving.", X aobjnam(otmp, "are")); X--- 325,337 ---- X doname(otmp)); X X } else { X! if((otmp->otyp >= DAGGER && otmp->otyp <= AXE) || X #ifdef WORM X otmp->otyp == CRYSKNIFE || X #endif X! is_sword(otmp)) { X type = ENGRAVE; X+ X if((int)otmp->spe <= -3) { X Your("%s too dull for engraving.", X aobjnam(otmp, "are")); X*************** X*** 529,535 **** X bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth)); X bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth); X } X! #if defined(DGK) && !defined(TOS) X if (!count_only) X #endif X free((genericptr_t) ep); X--- 532,538 ---- X bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth)); X bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth); X } X! #if defined(DGK) && !defined(OLD_TOS) X if (!count_only) X #endif X free((genericptr_t) ep); X*************** X*** 536,542 **** X ep = ep2; X } X bwrite(fd, (genericptr_t)nul, sizeof(unsigned)); X! #if defined(DGK) && !defined(TOS) X if (!count_only) X #endif X head_engr = 0; X--- 539,545 ---- X ep = ep2; X } X bwrite(fd, (genericptr_t)nul, sizeof(unsigned)); X! #if defined(DGK) && !defined(OLD_TOS) X if (!count_only) X #endif X head_engr = 0; X*** src/Old/fountain.c Mon Jul 31 13:57:44 1989 X--- src/fountain.c Sat Jul 29 12:04:24 1989 X*************** X*** 125,131 **** X } X else if (fate < 10) { X pline("The cool draught refreshes you."); X! lesshungry(rnd(10)); X } else { X switch (fate) { X X--- 125,131 ---- X } X else if (fate < 10) { X pline("The cool draught refreshes you."); X! u.uhunger += rnd(10); /* don't choke on water */ X } else { X switch (fate) { X X*************** X*** 148,154 **** X--- 148,158 ---- X X pline("The water is contaminated!"); X if (Poison_resistance) { X+ #ifdef TUTTI_FRUTTI X pline("Perhaps it is runoff from the nearby %s farm.", pl_fruit); X+ #else X+ pline("Perhaps it is runoff from the nearby orange farm."); X+ #endif X losehp(rnd(4),"unrefrigerated sip of juice"); X break; X } X*** src/Old/hack.c Mon Jul 31 13:59:24 1989 X--- src/hack.c Sat Jul 29 12:04:28 1989 X*************** X*** 688,694 **** X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X if(x == u.ux && y == u.uy) continue; X if(levl[x][y].mmask && (mtmp = m_at(x,y)) && !mtmp->mimic && X! (!mtmp->minvis || See_invisible)) { X if((flags.run != 1 && !mtmp->mtame) || (x == u.ux+u.dx && y == u.uy+u.dy)) X goto stop; X } else mtmp = 0; X--- 688,694 ---- X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X if(x == u.ux && y == u.uy) continue; X if(levl[x][y].mmask && (mtmp = m_at(x,y)) && !mtmp->mimic && X! (!mtmp->minvis || See_invisible) && !mtmp->mundetected) { X if((flags.run != 1 && !mtmp->mtame) || (x == u.ux+u.dx && y == u.uy+u.dy)) X goto stop; X } else mtmp = 0; X*************** X*** 803,809 **** X cansee(x,y) X xchar x,y; X { X! if(Blind || u.uswallow) return(0); X if(dist(x,y) < 3) return(1); X if(IS_ROCK(levl[x][y].typ) && levl[u.ux][u.uy].typ == CORR && X !levl[u.ux][u.uy].lit) X--- 803,809 ---- X cansee(x,y) X xchar x,y; X { X! if(Blind || (u.uswallow && (x != u.ux || y != u.uy))) return(0); X if(dist(x,y) < 3) return(1); X if(IS_ROCK(levl[x][y].typ) && levl[u.ux][u.uy].typ == CORR && X !levl[u.ux][u.uy].lit) X*************** X*** 950,955 **** X--- 950,956 ---- X (!!(HSleep_resistance & INTRINSIC)) + X (!!(HDisint_resistance & INTRINSIC)) + X (!!(HTeleport_control & INTRINSIC)) + X+ (!!(Stealth & INTRINSIC)) + X (!!(Fast & INTRINSIC)) + X (!!(HInvis & INTRINSIC))) X pline("%s, all your powers will be lost...", X*** src/Old/invent.c Mon Jul 31 14:00:38 1989 X--- src/invent.c Sat Jul 29 21:59:04 1989 X*************** X*** 145,150 **** X--- 145,151 ---- X } else { X setnotworn(obj); X freeinv(obj); X+ delete_contents(obj); X obfree(obj, (struct obj *) 0); X } X } X*************** X*** 187,194 **** X freeobj(obj); X unpobj(obj); X X! /* if contained in something else, decrease the container weight */ X! if(obj->cobj) dec_cwt(obj->cobj, obj); X X obfree(obj, (struct obj *) 0); X } X--- 188,195 ---- X freeobj(obj); X unpobj(obj); X X! /* if a container, get rid of the contents */ X! delete_contents(obj); X X obfree(obj, (struct obj *) 0); X } X*** src/Old/lock.c Mon Jul 31 14:05:39 1989 X--- src/lock.c Mon Jul 24 15:20:37 1989 X*************** X*** 166,172 **** X X #ifdef POLYSELF X if(nohands(uasmon)) { X! You("can't hold a %s - you have no hands!"); X return(0); X } X #endif X--- 166,172 ---- X X #ifdef POLYSELF X if(nohands(uasmon)) { X! You("can't hold a %s - you have no hands!", xname(pick)); X return(0); X } X #endif X*** src/Old/mail.c Mon Jul 31 14:06:16 1989 X--- src/mail.c Thu Jul 27 11:37:31 1989 X*************** X*** 47,53 **** X * - It may also do this with adjoining castle rooms. X */ X X! # ifdef AMIGA X int mustgetmail = -1; X # endif X X--- 47,53 ---- X * - It may also do this with adjoining castle rooms. X */ X X! # ifndef UNIX X int mustgetmail = -1; X # endif X X*************** X*** 180,186 **** X nscr(); X } X X! # ifdef AMIGA X void X ckmailstatus() { X if (mustgetmail < 0) X--- 180,186 ---- X nscr(); X } X X! # ifndef UNIX X void X ckmailstatus() { X if (mustgetmail < 0) X*************** X*** 194,204 **** X void X readmail() X { X! pline("It says: \"How nice to get a letter down here!\""); X } X- # endif /* AMIGA */ X X! # ifdef UNIX X void X ckmailstatus() { X if(!mailbox X--- 194,204 ---- X void X readmail() X { X! pline("It says: \"Please disregard previous letter.\""); X } X X! # else /* UNIX */ X! X void X ckmailstatus() { X if(!mailbox X*** src/Old/makedefs.c Mon Jul 31 14:06:47 1989 X--- src/makedefs.c Fri Jul 28 17:53:20 1989 X*************** X*** 18,24 **** X--- 18,26 ---- X #endif X X #ifdef MSDOS X+ #ifndef TOS X # define freopen _freopen X+ #endif X # undef exit X extern void exit P((int)); X # define RDMODE "r" X*************** X*** 416,422 **** X #endif X X #ifdef MSDOS X! # ifndef AMIGA X /* Get around bug in freopen when opening for writing */ X /* Supplied by Nathan Glasser (nathan@mit-eddie) */ X #undef freopen X--- 418,424 ---- X #endif X X #ifdef MSDOS X! # if !defined(AMIGA) && !defined(TOS) X /* Get around bug in freopen when opening for writing */ X /* Supplied by Nathan Glasser (nathan@mit-eddie) */ X #undef freopen X*************** X*** 439,445 **** X else X return freopen(fname,fmode,fp); X } X! # endif /* AMIGA */ X X # if defined(__TURBOC__) || defined(AMIGA) X int X--- 441,447 ---- X else X return freopen(fname,fmode,fp); X } X! # endif /* !AMIGA && !TOS */ X X # if defined(__TURBOC__) || defined(AMIGA) X int X*** src/Old/makemon.c Mon Jul 31 14:07:38 1989 X--- src/makemon.c Tue Jul 25 14:39:14 1989 X*************** X*** 32,38 **** X * are peaceful and some are not, the result will just be a X * smaller group. X */ X! enexto(&mm, mm.x, mm.y); X mon = makemon(mtmp->data, mm.x, mm.y); X mon->mpeaceful = 0; X set_malign(mon); X--- 32,38 ---- X * are peaceful and some are not, the result will just be a X * smaller group. X */ X! enexto(&mm, mm.x, mm.y, mtmp->data); X mon = makemon(mtmp->data, mm.x, mm.y); X mon->mpeaceful = 0; X set_malign(mon); X*************** X*** 421,427 **** X do { X x = rn1(COLNO-3,2); X y = rn2(ROWNO); X! } while(!goodpos(x, y)); X } X X /* if a monster already exists at the position, return */ X--- 421,427 ---- X do { X x = rn1(COLNO-3,2); X y = rn2(ROWNO); X! } while(!goodpos(x, y, ptr)); X } X X /* if a monster already exists at the position, return */ X*************** X*** 575,583 **** X } X X void X! enexto(cc, xx,yy) X coord *cc; X register xchar xx, yy; X { X register xchar x,y; X coord foo[15], *tfoo; X--- 575,584 ---- X } X X void X! enexto(cc, xx, yy, mdat) X coord *cc; X register xchar xx, yy; X+ struct permonst *mdat; X { X register xchar x,y; X coord foo[15], *tfoo; X*************** X*** 587,611 **** X range = 1; X do { /* full kludge action. */ X for(x = xx-range; x <= xx+range; x++) X! if(goodpos(x, yy-range)) { X tfoo->x = x; X (tfoo++)->y = yy-range; X if(tfoo == &foo[15]) goto foofull; X } X for(x = xx-range; x <= xx+range; x++) X! if(goodpos(x,yy+range)) { X tfoo->x = x; X (tfoo++)->y = yy+range; X if(tfoo == &foo[15]) goto foofull; X } X for(y = yy+1-range; y < yy+range; y++) X! if(goodpos(xx-range,y)) { X tfoo->x = xx-range; X (tfoo++)->y = y; X if(tfoo == &foo[15]) goto foofull; X } X for(y = yy+1-range; y < yy+range; y++) X! if(goodpos(xx+range,y)) { X tfoo->x = xx+range; X (tfoo++)->y = y; X if(tfoo == &foo[15]) goto foofull; X--- 588,612 ---- X range = 1; X do { /* full kludge action. */ X for(x = xx-range; x <= xx+range; x++) X! if(goodpos(x, yy-range, mdat)) { X tfoo->x = x; X (tfoo++)->y = yy-range; X if(tfoo == &foo[15]) goto foofull; X } X for(x = xx-range; x <= xx+range; x++) X! if(goodpos(x, yy+range, mdat)) { X tfoo->x = x; X (tfoo++)->y = yy+range; X if(tfoo == &foo[15]) goto foofull; X } X for(y = yy+1-range; y < yy+range; y++) X! if(goodpos(xx-range, y, mdat)) { X tfoo->x = xx-range; X (tfoo++)->y = y; X if(tfoo == &foo[15]) goto foofull; X } X for(y = yy+1-range; y < yy+range; y++) X! if(goodpos(xx+range, y, mdat)) { X tfoo->x = xx+range; X (tfoo++)->y = y; X if(tfoo == &foo[15]) goto foofull; X*************** X*** 620,645 **** X } X X int X! goodpos(x, y) X { X! #ifdef STUPID X! if (x < 1 || x > COLNO-2 || y < 1 || y > ROWNO-2 || X! levl[x][y].mmask || !ACCESSIBLE(levl[x][y].typ)) X! return 0; X if (IS_DOOR(levl[x][y].typ) && X! (levl[x][y].doormask & (D_LOCKED | D_CLOSED))) X! return 0; X! return !((x == u.ux && y == u.uy) || sobj_at(BOULDER, x, y)); X! #else X! return X! ! (x < 1 || x > COLNO-2 || y < 1 || y > ROWNO-2 || X! levl[x][y].mmask || !ACCESSIBLE(levl[x][y].typ) || X! (IS_DOOR(levl[x][y].typ) && X! (levl[x][y].doormask & (D_LOCKED | D_CLOSED)) ) X! || (x == u.ux && y == u.uy) X! || sobj_at(BOULDER, x, y) X! ); X! #endif /* STUPID */ X } X X void X--- 621,647 ---- X } X X int X! goodpos(x, y, mdat) X! int x,y; X! struct permonst *mdat; X { X! if (x < 1 || x > COLNO-2 || y < 1 || y > ROWNO-2 || levl[x][y].mmask) X! return 0; X! if (x == u.ux && y == u.uy) return 0; X! if (mdat) { X! if (IS_POOL(levl[x][y].typ)) X! if (mdat == &playermon && HLevitation) return 1; X! else return (is_flyer(mdat) || is_swimmer(mdat)); X! if (passes_walls(mdat)) return 1; X! } X! if (!ACCESSIBLE(levl[x][y].typ)) return 0; X if (IS_DOOR(levl[x][y].typ) && X! (levl[x][y].doormask & (D_LOCKED | D_CLOSED)) && X! (!mdat || !amorphous(mdat))) X! return 0; X! if (sobj_at(BOULDER, x, y) && (!mdat || !throws_rocks(mdat))) X! return 0; X! return 1; X } X X void X*************** X*** 653,663 **** X #endif X /* if the wiz teleports away to heal, try the up staircase, X to block the player's escaping before he's healed */ X! if(!mtmp->iswiz || !goodpos(tx = xupstair, ty = yupstair)) X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty)); X if(mtmp->mx != 0 && mtmp->my != 0) X levl[mtmp->mx][mtmp->my].mmask = 0; X mtmp->mx = tx; X--- 655,665 ---- X #endif X /* if the wiz teleports away to heal, try the up staircase, X to block the player's escaping before he's healed */ X! if(!mtmp->iswiz || !goodpos(tx = xupstair, ty = yupstair, mtmp->data)) X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty,mtmp->data)); X if(mtmp->mx != 0 && mtmp->my != 0) X levl[mtmp->mx][mtmp->my].mmask = 0; X mtmp->mx = tx; X*************** X*** 1096,1102 **** X int s_sym = get_shop_item(rt - SHOPBASE); X X if (s_sym < 0) sym = objects[-sym].oc_olet; X! else if (sym == RANDOM_SYM) X sym = syms[rn2(sizeof(syms)-2) + 2]; X else sym = s_sym; X } else sym = syms[rn2(sizeof syms)]; X--- 1098,1104 ---- X int s_sym = get_shop_item(rt - SHOPBASE); X X if (s_sym < 0) sym = objects[-sym].oc_olet; X! else if (s_sym == RANDOM_SYM) X sym = syms[rn2(sizeof(syms)-2) + 2]; X else sym = s_sym; X } else sym = syms[rn2(sizeof syms)]; X*** src/Old/mhitm.c Mon Jul 31 14:09:22 1989 X--- src/mhitm.c Sun Jul 30 18:57:41 1989 X*************** X*** 281,288 **** X--- 281,291 ---- X if(cansee(magr->mx, magr->my)) pmon(magr); X if((tmp = mdamagem(magr, mdef, mattk)) == 2) { X levl[mx][my].mmask = 0; X+ levl[magr->mx][magr->my].mmask = 1; X return(2); /* defender died */ X } else { /* defender survived */ X+ if(cansee(mdef->mx, mdef->my)) X+ pline("%s is regurgitated!", Monnam(mdef)); X if(cansee(magr->mx, magr->my)) unpmon(magr); X magr->mx = mx; X magr->my = my; X*************** X*** 289,294 **** X--- 292,298 ---- X /* move off of defender */ X if(cansee(magr->mx, magr->my)) pmon(magr); X if(cansee(mdef->mx, mdef->my)) pmon(mdef); X+ nscr(); X return(tmp); X } X } X*************** X*** 458,464 **** X tmp = 0; /* no damage if this fails */ X break; X case AD_TLPT: X! if(!magr->mcan && tmp >= mdef->mhp) { X rloc(mdef); X if(vis && !cansee(mdef->mx, mdef->my)) X pline("%s suddenly disappears!", Monnam(mdef)); X--- 462,468 ---- X tmp = 0; /* no damage if this fails */ X break; X case AD_TLPT: X! if(!magr->mcan && tmp < mdef->mhp) { X rloc(mdef); X if(vis && !cansee(mdef->mx, mdef->my)) X pline("%s suddenly disappears!", Monnam(mdef)); X*** src/Old/mhitu.c Mon Jul 31 14:10:51 1989 X--- src/mhitu.c Sat Jul 29 12:04:33 1989 X*************** X*** 58,64 **** X { X /* Note: if opposite gender, "seductively" */ X /* If same gender, "engagingly" for nymph, normal msg for others */ X! if(sp_melee(mtmp) && !mtmp->mcan) { X if(!is_nymph(mtmp) && incompatible(mtmp)) goto strike; X kludge("%s %s you %s.", Monnam(mtmp), X Blind ? "talks to" : "smiles at", X--- 58,64 ---- X { X /* Note: if opposite gender, "seductively" */ X /* If same gender, "engagingly" for nymph, normal msg for others */ X! if(sp_melee(mtmp) && !mtmp->mcan && !mtmp->mspec_used) { X if(!is_nymph(mtmp) && incompatible(mtmp)) goto strike; X kludge("%s %s you %s.", Monnam(mtmp), X Blind ? "talks to" : "smiles at", X*************** X*** 248,258 **** X mtmp->mx = u.ux; mtmp->my = u.uy; X levl[mtmp->mx][mtmp->my].mmask = 1; X pmon(mtmp); X! enexto(&cc, u.ux, u.uy); X! /* Luckily piercers cannot walk through walls, so this X! * will work. If they can (i.e., if someone adds a potion X! * of phasing), we gotta change this... X! */ X teleds(cc.x, cc.y); X You("fall from the ceiling!"); X if (is_mercenary(mtmp->data) && m_carrying(mtmp,HELMET)) { X--- 248,254 ---- X mtmp->mx = u.ux; mtmp->my = u.uy; X levl[mtmp->mx][mtmp->my].mmask = 1; X pmon(mtmp); X! enexto(&cc, u.ux, u.uy, &playermon); X teleds(cc.x, cc.y); X You("fall from the ceiling!"); X if (is_mercenary(mtmp->data) && m_carrying(mtmp,HELMET)) { X*************** X*** 839,845 **** X * is, no matter what covers it. X */ X getbronze = (mdat == &mons[PM_BLACK_PUDDING] && X! uarm->otyp == BRONZE_PLATE_MAIL); X while (1) { X switch(rn2(5)) { X case 0: X--- 835,841 ---- X * is, no matter what covers it. X */ X getbronze = (mdat == &mons[PM_BLACK_PUDDING] && X! uarm && uarm->otyp == BRONZE_PLATE_MAIL); X while (1) { X switch(rn2(5)) { X case 0: X*************** X*** 1240,1245 **** X--- 1236,1242 ---- X register struct attack *mattk; X { X switch(mattk->adtyp) { X+ #ifdef MEDUSA X case AD_STON: X if (mtmp->mcan) { X You("notice that %s isn't all that ugly.",mon_nam(mtmp)); X*************** X*** 1258,1263 **** X--- 1255,1261 ---- X done("stoned"); X } X break; X+ #endif X case AD_CONF: X if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee && X !mtmp->mspec_used && rn2(5)) { X*** src/Old/mklev.c Thu Jul 20 14:11:02 1989 X--- src/mklev.c Mon Jul 31 15:23:45 1989 X*************** X*** 788,794 X mtmp->msleep = 1; X for (tryct = rn1(1,3); tryct; tryct--) { X x = somex(croom); y = somey(croom); X! if (goodpos(x,y)) X (void) mk_tt_statue(x, y); X } X } X X--- 788,794 ----- X mtmp->msleep = 1; X for (tryct = rn1(1,3); tryct; tryct--) { X x = somex(croom); y = somey(croom); X! if (goodpos(x,y,(struct permonst *)0)) X (void) mk_tt_statue(x, y); X } X } X*************** X*** 815,821 X #ifdef REINCARNATION X if (dlevel == rogue_level) { X You("feel as though you were here in a previous lifetime."); X! return; X } X #endif X makecorridors(); X X--- 815,821 ----- X #ifdef REINCARNATION X if (dlevel == rogue_level) { X You("feel as though you were here in a previous lifetime."); X! goto skip0; X } X #endif X makecorridors(); X*************** X*** 871,877 X #endif X if(dlevel > 18 && !rn2(6)) mkroom(SWAMP); X X! X /* for each room: put things inside */ X for(croom = rooms; croom->hx > 0; croom++) { X register boolean boxinlev = FALSE; X X--- 871,879 ----- X #endif X if(dlevel > 18 && !rn2(6)) mkroom(SWAMP); X X! #ifdef REINCARNATION X! skip0: X! #endif X /* for each room: put things inside */ X for(croom = rooms; croom->hx > 0; croom++) { X register boolean boxinlev = FALSE; X*** src/Old/mkobj.c Mon Jul 31 14:13:59 1989 X--- src/mkobj.c Sat Jul 29 12:04:35 1989 X*************** X*** 138,144 **** X X static void X mkbox_cnts(box) X! /* Note: does not check to see if it overloaded the box weight; usually X * possible only with corpses in ice boxes. X */ X struct obj *box; X--- 138,144 ---- X X static void X mkbox_cnts(box) X! /* Note: does not check to see if it overloaded the box capacity; usually X * possible only with corpses in ice boxes. X */ X struct obj *box; X*************** X*** 160,166 **** X for(n = rn2(n+1); n > 0; n--) { X if (box->otyp == ICE_BOX) { X otmp = mksobj(CORPSE, TRUE); X! otmp->age = moves; X } else { X register int tprob; X struct icp *iprobs = boxiprobs; X--- 160,169 ---- X for(n = rn2(n+1); n > 0; n--) { X if (box->otyp == ICE_BOX) { X otmp = mksobj(CORPSE, TRUE); X! /* Note: setting age to 0 is correct. Age has a different X! * from usual meaning for objects stored in ice boxes. -KAA X! */ X! otmp->age = 0; X } else { X register int tprob; X struct icp *iprobs = boxiprobs; X*************** X*** 174,180 **** X otmp->cobj = box; X otmp->nobj = fcobj; X fcobj = otmp; X! inc_cwt(box, otmp); X } X } X return; X--- 177,183 ---- X otmp->cobj = box; X otmp->nobj = fcobj; X fcobj = otmp; X! /* inc_cwt(box, otmp); --done by weight() */ X } X } X return; X*************** X*** 264,271 **** X otmp->corpsenm = rndmonnum(); X } while (mons[otmp->corpsenm].geno & G_NOCORPSE); X blessorcurse(otmp, 10); X! } else if (otmp->otyp == SLIME_MOLD) X otmp->spe = current_fruit; X /* fall into next case */ X case GEM_SYM: X if (otmp->otyp == LOADSTONE) curse(otmp); X--- 267,277 ---- X otmp->corpsenm = rndmonnum(); X } while (mons[otmp->corpsenm].geno & G_NOCORPSE); X blessorcurse(otmp, 10); X! } X! #ifdef TUTTI_FRUTTI X! else if (otmp->otyp == SLIME_MOLD) X otmp->spe = current_fruit; X+ #endif X /* fall into next case */ X case GEM_SYM: X if (otmp->otyp == LOADSTONE) curse(otmp); X*************** X*** 279,284 **** X--- 285,291 ---- X blessorcurse(otmp, 5); X break; X case MAGIC_LAMP: otmp->spe = 1; X+ otmp->recharged = 0; X blessorcurse(otmp, 2); X break; X case KEY: /* key # index */ X*************** X*** 452,457 **** X--- 459,465 ---- X X if (Is_container(obj)) { X struct obj *contents; X+ obj->owt = wt; X for(contents=fcobj; contents; contents=contents->nobj) { X if (contents->cobj == obj) X inc_cwt(obj, contents); X*** src/Old/mkroom.c Mon Jul 31 14:14:45 1989 X--- src/mkroom.c Wed Jul 26 19:32:59 1989 X*************** X*** 253,260 **** X levl[tx][ty].typ = THRONE; X levl[tx][ty].scrsym = THRONE_SYM; X X! tx = somex(sroom); X! ty = somey(sroom); X mkgold((long) rn1(50 * dlevel,10), sx, sy); X (void) mksobj_at(CHEST, sx, sy); /* the royal coffers */ X } X--- 253,260 ---- X levl[tx][ty].typ = THRONE; X levl[tx][ty].scrsym = THRONE_SYM; X X! sx = somex(sroom); X! sy = somey(sroom); X mkgold((long) rn1(50 * dlevel,10), sx, sy); X (void) mksobj_at(CHEST, sx, sy); /* the royal coffers */ X } X*************** X*** 439,448 **** X squadmon() { /* return soldier types. */ X X register struct permonst *ptr; X! register int i, cpro, sel = rnd(80+dlevel); X X for(cpro = i = 0; i < NSTYPES; i++) X! if((cpro += squadprob[i].prob) > sel) { X X ptr = &mons[squadprob[i].pm]; X goto gotone; X--- 439,448 ---- X squadmon() { /* return soldier types. */ X X register struct permonst *ptr; X! register int i, cpro, sel_prob = rnd(80+dlevel); X X for(cpro = i = 0; i < NSTYPES; i++) X! if((cpro += squadprob[i].prob) > sel_prob) { X X ptr = &mons[squadprob[i].pm]; X goto gotone; X*** src/Old/mon.c Mon Jul 31 14:15:45 1989 X--- src/mon.c Mon Jul 31 12:58:38 1989 X*************** X*** 292,297 **** X--- 292,299 ---- X mtmp->mhp += objects[otmp->otyp].oc_weight; X if (mtmp->mhp > mtmp->mhpmax) mtmp->mhp = mtmp->mhpmax; X } X+ if((uball && otmp == uball) || X+ (uchain && otmp == uchain)) unpunish(); X freeobj(otmp); X /* Left behind a pile? */ X if(rnd(25) < 3) (void) mksobj_at(ROCK, mtmp->mx, mtmp->my); X*************** X*** 312,318 **** X for (otmp = fobj; otmp; otmp = otmp2) { X otmp2 = otmp->nobj; X if (otmp->ox == mtmp->mx && otmp->oy == mtmp->my) { X! if(!objects[otmp->otyp].oc_material <= WOOD) { X if (cansee(mtmp->mx,mtmp->my) && flags.verbose) X pline("%s eats %s!", Monnam(mtmp), X distant_name(otmp, doname)); X--- 314,320 ---- X for (otmp = fobj; otmp; otmp = otmp2) { X otmp2 = otmp->nobj; X if (otmp->ox == mtmp->mx && otmp->oy == mtmp->my) { X! if(objects[otmp->otyp].oc_material <= WOOD) { X if (cansee(mtmp->mx,mtmp->my) && flags.verbose) X pline("%s eats %s!", Monnam(mtmp), X distant_name(otmp, doname)); X*************** X*** 423,428 **** X--- 425,433 ---- X { X register int newload = weight(otmp); X X+ if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE X+ && !resists_ston(mtmp->data)) X+ return(FALSE); X if (mtmp->isshk) return(TRUE); /* no limit */ X if (mtmp->mpeaceful && !mtmp->mtame) return(FALSE); X /* otherwise players might find themselves obligated to violate X*************** X*** 1061,1067 **** X struct monst *mtmp; X { X coord mm; X! enexto(&mm, u.ux, u.uy); X levl[mtmp->mx][mtmp->my].mmask = 0; X levl[mm.x][mm.y].mmask = 1; X mtmp->mx = mm.x; X--- 1066,1072 ---- X struct monst *mtmp; X { X coord mm; X! enexto(&mm, u.ux, u.uy, mtmp->data); X levl[mtmp->mx][mtmp->my].mmask = 0; X levl[mm.x][mm.y].mmask = 1; X mtmp->mx = mm.x; X*************** X*** 1077,1084 **** X boolean gz; X { X coord mm; X! if(!gz || !goodpos(x,y)) { X! enexto(&mm, x, y); X x = mm.x; y = mm.y; X } X if(x == mtmp->mx && y == mtmp->my) /* that was easy */ X--- 1082,1089 ---- X boolean gz; X { X coord mm; X! if(!gz || !goodpos(x,y,mtmp->data)) { X! enexto(&mm, x, y, mtmp->data); X x = mm.x; y = mm.y; X } X if(x == mtmp->mx && y == mtmp->my) /* that was easy */ X*** src/Old/monmove.c Mon Jul 31 14:17:24 1989 X--- src/monmove.c Wed Jul 26 12:01:12 1989 X*************** X*** 204,210 **** X--- 204,217 ---- X #endif X unstuck(mtmp); /* monster lets go when fleeing */ X mtmp->mflee = 1; X+ #ifdef STUPID X+ if (rn2(7)) X+ mtmp->mfleetim = rnd(10); X+ else X+ mtmp->mfleetim = rnd(100); X+ #else X mtmp->mfleetim = (rn2(7) ? rnd(10) : rnd(100)); X+ #endif X } X X #ifdef HARD /* Demonic Blackmail!!! */ X*************** X*** 262,268 **** X--- 269,282 ---- X (BOLT_LIM * BOLT_LIM)); X if(scared && !mtmp->mflee) { X mtmp->mflee = 1; X+ #ifdef STUPID X+ if (rn2(7)) X+ mtmp->mfleetim = rnd(10); X+ else X+ mtmp->mfleetim = rnd(100); X+ #else X mtmp->mfleetim = (rn2(7) ? rnd(10) : rnd(100)); X+ #endif X } X } X END_OF_FILE if test 54643 -ne `wc -c <'src1.diff'`; then echo shar: \"'src1.diff'\" unpacked with wrong size! fi # end of 'src1.diff' fi echo shar: End of archive 3 \(of 6\). cp /dev/null ark3isdone MISSING="" for I in 1 2 3 4 5 6 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 6 archives. echo "now type ./do_patch.sh" rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0