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