billr@saab.CNA.TEK.COM (Bill Randle) (06/06/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 26
Archive-name: NetHack3/Patch8h
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 8 (of 24)."
# Contents: patch8.04
# Wrapped by billr@saab on Tue Jun 5 09:07:10 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch8.04' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'patch8.04'\"
else
echo shar: Extracting \"'patch8.04'\" \(53751 characters\)
sed "s/^X//" >'patch8.04' <<'END_OF_FILE'
X*** src/Old/makemon.c Sun Jun 3 13:29:39 1990
X--- src/makemon.c Thu May 31 22:11:01 1990
X***************
X*** 7,21 ****
X # include <ctype.h>
X #endif
X
X! VSTATIC struct monst zeromonst;
X
X static int FDECL(uncommon, (struct permonst *));
X! OSTATIC void FDECL(m_initgrp,(struct monst *,int,int,int));
X! static void FDECL(m_initthrow,(struct monst *,int,int));
X! OSTATIC void FDECL(m_initweap,(struct monst *));
X static void FDECL(m_initinv,(struct monst *));
X- static void FDECL(rloc_to,(struct monst *,int,int));
X static int FDECL(mstrength,(struct permonst *));
X
X extern int monstr[];
X
X--- 7,26 ----
X # include <ctype.h>
X #endif
X
X! STATIC_VAR struct monst NEARDATA zeromonst;
X
X+ #ifdef OVL0
X+ static int NDECL(cmnum);
X static int FDECL(uncommon, (struct permonst *));
X! #endif /* OVL0 */
X! STATIC_DCL void FDECL(m_initgrp,(struct monst *,int,int,int));
X! STATIC_DCL void FDECL(m_initthrow,(struct monst *,int,int));
X! STATIC_DCL void FDECL(m_initweap,(struct monst *));
X! STATIC_DCL void FDECL(rloc_to,(struct monst *,int,int));
X! #ifdef OVL1
X static void FDECL(m_initinv,(struct monst *));
X static int FDECL(mstrength,(struct permonst *));
X+ #endif /* OVL1 */
X
X extern int monstr[];
X
X***************
X*** 32,38 ****
X
X #ifdef OVLB
X
X! XSTATIC void
X m_initgrp(mtmp, x, y, n) /* make a group just like mtmp */
X register struct monst *mtmp;
X register int x, y, n;
X--- 37,43 ----
X
X #ifdef OVLB
X
X! STATIC_OVL void
X m_initgrp(mtmp, x, y, n) /* make a group just like mtmp */
X register struct monst *mtmp;
X register int x, y, n;
X***************
X*** 57,75 ****
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! /* Undo the second peace_minded() check in makemon(); if the
X! * monster turned out to be peaceful the first time we didn't
X! * create it at all; we don't want a second check.
X! */
X }
X }
X
X!
X! static void
X m_initthrow(mtmp,otyp,oquan)
X struct monst *mtmp;
X int otyp,oquan;
X--- 62,81 ----
X * are peaceful and some are not, the result will just be a
X * smaller group.
X */
X! if (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! /* Undo the second peace_minded() check in makemon(); if the
X! * monster turned out to be peaceful the first time we
X! * didn't create it at all; we don't want a second check.
X! */
X! }
X }
X }
X
X! STATIC_OVL
X! void
X m_initthrow(mtmp,otyp,oquan)
X struct monst *mtmp;
X int otyp,oquan;
X***************
X*** 85,91 ****
X mpickobj(mtmp, otmp);
X }
X
X! XSTATIC void
X m_initweap(mtmp)
X register struct monst *mtmp;
X {
X--- 91,100 ----
X mpickobj(mtmp, otmp);
X }
X
X! #endif /* OVLB */
X! #ifdef OVL2
X!
X! STATIC_OVL void
X m_initweap(mtmp)
X register struct monst *mtmp;
X {
X***************
X*** 360,366 ****
X }
X }
X
X! #endif /* OVLB */
X #ifdef OVL1
X
X static void
X--- 369,375 ----
X }
X }
X
X! #endif /* OVL2 */
X #ifdef OVL1
X
X static void
X***************
X*** 460,466 ****
X /*
X * called with [x,y] = coordinates;
X * [0,0] means anyplace
X! * [u.ux,u.uy] means: call mnexto (if !in_mklev)
X *
X * In case we make a monster group, only return the one at [x,y].
X */
X--- 469,475 ----
X /*
X * called with [x,y] = coordinates;
X * [0,0] means anyplace
X! * [u.ux,u.uy] means: near player (if !in_mklev)
X *
X * In case we make a monster group, only return the one at [x,y].
X */
X***************
X*** 472,477 ****
X--- 481,487 ----
X register struct monst *mtmp;
X register int ct;
X boolean anything = (!ptr);
X+ boolean byyou = (x == u.ux && y == u.uy);
X
X /* if caller wants random location, do it here */
X if(x == 0 && y == 0) {
X***************
X*** 487,492 ****
X--- 497,510 ----
X y = rn2(ROWNO);
X } while(!goodpos(x, y, ptr) ||
X (!in_mklev && tryct++ < 50 && inroom(x, y) == uroom));
X+ } else if (byyou && !in_mklev) {
X+ coord bypos;
X+
X+ if(enexto(&bypos, u.ux, u.uy, ptr)) {
X+ x = bypos.x;
X+ y = bypos.y;
X+ } else
X+ return((struct monst *)0);
X }
X
X /* if a monster already exists at the position, return */
X***************
X*** 508,514 ****
X }
X }
X /* if it's unique, don't ever make it again */
X! if (ptr->geno & G_UNIQ) ptr->geno &= G_GENOD;
X /* gotmon: /* label not referenced */
X mtmp = newmonst(ptr->pxlth);
X *mtmp = zeromonst; /* clear all entries in structure */
X--- 526,532 ----
X }
X }
X /* if it's unique, don't ever make it again */
X! if (ptr->geno & G_UNIQ) ptr->geno |= G_GENOD;
X /* gotmon: /* label not referenced */
X mtmp = newmonst(ptr->pxlth);
X *mtmp = zeromonst; /* clear all entries in structure */
X***************
X*** 550,556 ****
X mtmp->mhide = 1;
X if(in_mklev)
X if(x && y)
X! (void) mkobj_at(0, x, y);
X if(OBJ_AT(x, y) || levl[x][y].gmask)
X mtmp->mundetected = 1;
X break;
X--- 568,574 ----
X mtmp->mhide = 1;
X if(in_mklev)
X if(x && y)
X! (void) mkobj_at(0, x, y, TRUE);
X if(OBJ_AT(x, y) || levl[x][y].gmask)
X mtmp->mundetected = 1;
X break;
X***************
X*** 600,612 ****
X (ptr == &mons[PM_GIANT_EEL])) && rn2(5))
X mtmp->msleep = 1;
X } else {
X! if(x == u.ux && y == u.uy) {
X! mnexto(mtmp);
X! if (ptr->mlet == S_MIMIC) {
X! set_mimic_sym(mtmp);
X! unpmon(mtmp);
X! pmon(mtmp);
X! }
X }
X }
X #ifdef INFERNO
X--- 618,626 ----
X (ptr == &mons[PM_GIANT_EEL])) && rn2(5))
X mtmp->msleep = 1;
X } else {
X! if(byyou) {
X! pmon(mtmp);
X! set_apparxy(mtmp);
X }
X }
X #ifdef INFERNO
X***************
X*** 639,645 ****
X return(mtmp);
X }
X
X! void
X enexto(cc, xx, yy, mdat)
X coord *cc;
X register xchar xx, yy;
X--- 653,659 ----
X return(mtmp);
X }
X
X! boolean
X enexto(cc, xx, yy, mdat)
X coord *cc;
X register xchar xx, yy;
X***************
X*** 648,688 ****
X register xchar x,y;
X coord foo[15], *tfoo;
X int range, i;
X
X tfoo = foo;
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 range++;
X } while(tfoo == foo);
X foofull:
X i = rn2((int)(tfoo - foo));
X cc->x = foo[i].x;
X cc->y = foo[i].y;
X! return;
X }
X
X int
X--- 662,709 ----
X register xchar x,y;
X coord foo[15], *tfoo;
X int range, i;
X+ int xmin, xmax, ymin, ymax;
X
X tfoo = foo;
X range = 1;
X do { /* full kludge action. */
X! xmin = max(0, xx-range);
X! xmax = min(COLNO, xx+range);
X! ymin = max(0, yy-range);
X! ymax = min(ROWNO, yy+range);
X!
X! for(x = xmin; x <= xmax; x++)
X! if(goodpos(x, ymin, mdat)) {
X tfoo->x = x;
X! (tfoo++)->y = ymin;
X if(tfoo == &foo[15]) goto foofull;
X }
X! for(x = xmin; x <= xmax; x++)
X! if(goodpos(x, ymax, mdat)) {
X tfoo->x = x;
X! (tfoo++)->y = ymax;
X if(tfoo == &foo[15]) goto foofull;
X }
X! for(y = ymin+1; y < ymax; y++)
X! if(goodpos(xmin, y, mdat)) {
X! tfoo->x = xmin;
X (tfoo++)->y = y;
X if(tfoo == &foo[15]) goto foofull;
X }
X! for(y = ymin+1; y < ymax; y++)
X! if(goodpos(xmax, y, mdat)) {
X! tfoo->x = xmax;
X (tfoo++)->y = y;
X if(tfoo == &foo[15]) goto foofull;
X }
X range++;
X+ if(range > ROWNO && range > COLNO) return FALSE;
X } while(tfoo == foo);
X foofull:
X i = rn2((int)(tfoo - foo));
X cc->x = foo[i].x;
X cc->y = foo[i].y;
X! return TRUE;
X }
X
X int
X***************
X*** 710,716 ****
X #endif /* OVL1 */
X #ifdef OVLB
X
X! static void
X rloc_to(mtmp, x, y)
X struct monst *mtmp;
X register int x,y;
X--- 731,738 ----
X #endif /* OVL1 */
X #ifdef OVLB
X
X! STATIC_OVL
X! void
X rloc_to(mtmp, x, y)
X struct monst *mtmp;
X register int x,y;
X***************
X*** 732,737 ****
X--- 754,762 ----
X set_apparxy(mtmp);
X }
X
X+ #endif /* OVLB */
X+ #ifdef OVL2
X+
X void
X rloc(mtmp)
X struct monst *mtmp;
X***************
X*** 748,753 ****
X--- 773,781 ----
X rloc_to(mtmp, x, y);
X }
X
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+
X void
X vloc(mtmp)
X struct monst *mtmp;
X***************
X*** 870,879 ****
X register struct permonst *ptr;
X register int i, ct;
X register int zlevel;
X! static int minmlev, maxmlev, accept;
X! static long oldmoves = 0L; /* != 1, starting value of moves */
X #ifdef REINCARNATION
X! static boolean upper;
X
X upper = (dlevel == rogue_level);
X #endif
X--- 898,907 ----
X register struct permonst *ptr;
X register int i, ct;
X register int zlevel;
X! static int NEARDATA minmlev, NEARDATA maxmlev, NEARDATA accept;
X! static long NEARDATA oldmoves = 0L; /* != 1, starting value of moves */
X #ifdef REINCARNATION
X! static boolean NEARDATA upper;
X
X upper = (dlevel == rogue_level);
X #endif
X***************
X*** 1019,1025 ****
X if (ptr->mlevel >= 50 || mtmp->mhpmax <= 8*mtmp->m_lev)
X return ptr;
X newtype = little_to_big(monsndx(ptr));
X! if (++mtmp->m_lev >= mons[newtype].mlevel) {
X if (mons[newtype].geno & G_GENOD) {
X pline("As %s grows up into %s, %s dies!",
X mon_nam(mtmp),
X--- 1047,1054 ----
X if (ptr->mlevel >= 50 || mtmp->mhpmax <= 8*mtmp->m_lev)
X return ptr;
X newtype = little_to_big(monsndx(ptr));
X! if (++mtmp->m_lev >= mons[newtype].mlevel
X! && newtype != monsndx(ptr)) {
X if (mons[newtype].geno & G_GENOD) {
X pline("As %s grows up into %s, %s dies!",
X mon_nam(mtmp),
X***************
X*** 1033,1038 ****
X--- 1062,1069 ----
X }
X if (mtmp->m_lev > 3*mtmp->data->mlevel / 2)
X mtmp->m_lev = 3*mtmp->data->mlevel / 2;
X+ if (mtmp->mhp > mtmp->m_lev * 8)
X+ mtmp->mhp = mtmp->m_lev * 8;
X return(mtmp->data);
X }
X
X***************
X*** 1145,1151 ****
X #endif /* OVL1 */
X #ifdef OVLB
X
X! static char syms[] = { 0, 1, RING_SYM, WAND_SYM, WEAPON_SYM, FOOD_SYM, GOLD_SYM,
X SCROLL_SYM, POTION_SYM, ARMOR_SYM, AMULET_SYM, TOOL_SYM, ROCK_SYM,
X GEM_SYM,
X #ifdef SPELLS
X--- 1176,1182 ----
X #endif /* OVL1 */
X #ifdef OVLB
X
X! static char NEARDATA syms[] = { 0, 1, RING_SYM, WAND_SYM, WEAPON_SYM, FOOD_SYM, GOLD_SYM,
X SCROLL_SYM, POTION_SYM, ARMOR_SYM, AMULET_SYM, TOOL_SYM, ROCK_SYM,
X GEM_SYM,
X #ifdef SPELLS
X*** src/Old/mhitm.c Sun Jun 3 13:30:42 1990
X--- src/mhitm.c Thu May 31 22:11:05 1990
X***************
X*** 9,20 ****
X
X #ifdef OVLB
X
X! static boolean vis, far_noise;
X! static long noisetime;
X! static struct obj *otmp;
X
X- #endif /* OVLB */
X-
X static void FDECL(mrustm, (struct monst *, struct monst *, struct obj *));
X static int FDECL(hitmm, (struct monst *,struct monst *,struct attack *));
X static int FDECL(gazemm, (struct monst *,struct monst *,struct attack *));
X--- 9,18 ----
X
X #ifdef OVLB
X
X! static boolean NEARDATA vis, NEARDATA far_noise;
X! static long NEARDATA noisetime;
X! static struct obj NEARDATA *otmp;
X
X static void FDECL(mrustm, (struct monst *, struct monst *, struct obj *));
X static int FDECL(hitmm, (struct monst *,struct monst *,struct attack *));
X static int FDECL(gazemm, (struct monst *,struct monst *,struct attack *));
X***************
X*** 25,32 ****
X static void FDECL(noises,(struct monst *,struct attack *));
X static void FDECL(missmm,(struct monst *,struct monst *,struct attack *));
X
X- #ifdef OVLB
X-
X static void
X noises(magr, mattk)
X register struct monst *magr;
X--- 23,28 ----
X***************
X*** 391,411 ****
X tmp = 0;
X break;
X }
X- #ifdef GOLEMS
X- golemeffects(mdef, AD_FIRE, tmp);
X- #endif /* GOLEMS */
X if(vis) pline("%s is on fire!", Monnam(mdef));
X if(resists_fire(pd)) {
X pline("The fire doesn't seem to burn %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X tmp = 0;
X- } else {
X- tmp += destroy_mitem(mdef, SCROLL_SYM, AD_FIRE);
X- tmp += destroy_mitem(mdef, POTION_SYM, AD_FIRE);
X- #ifdef SPELLS
X- tmp += destroy_mitem(mdef, SPBOOK_SYM, AD_FIRE);
X- #endif
X }
X break;
X case AD_COLD:
X if (magr->mcan) {
X--- 387,407 ----
X tmp = 0;
X break;
X }
X if(vis) pline("%s is on fire!", Monnam(mdef));
X+ tmp += destroy_mitem(mdef, SCROLL_SYM, AD_FIRE);
X+ #ifdef SPELLS
X+ tmp += destroy_mitem(mdef, SPBOOK_SYM, AD_FIRE);
X+ #endif
X if(resists_fire(pd)) {
X pline("The fire doesn't seem to burn %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X+ #ifdef GOLEMS
X+ golemeffects(mdef, AD_FIRE, tmp);
X+ #endif /* GOLEMS */
X tmp = 0;
X }
X+ /* only potions damage resistant players in destroy_item */
X+ tmp += destroy_mitem(mdef, POTION_SYM, AD_FIRE);
X break;
X case AD_COLD:
X if (magr->mcan) {
X***************
X*** 412,427 ****
X tmp = 0;
X break;
X }
X- #ifdef GOLEMS
X- golemeffects(mdef, AD_COLD, tmp);
X- #endif /* GOLEMS */
X if(vis) pline("%s is covered in frost!", Monnam(mdef));
X if(resists_cold(pd)) {
X pline("The frost doesn't seem to chill %s!",
X mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X tmp = 0;
X! } else tmp += destroy_mitem(mdef, POTION_SYM, AD_COLD);
X break;
X case AD_ELEC:
X if (magr->mcan) {
X--- 408,424 ----
X tmp = 0;
X break;
X }
X if(vis) pline("%s is covered in frost!", Monnam(mdef));
X if(resists_cold(pd)) {
X pline("The frost doesn't seem to chill %s!",
X mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X+ #ifdef GOLEMS
X+ golemeffects(mdef, AD_COLD, tmp);
X+ #endif /* GOLEMS */
X tmp = 0;
X! }
X! tmp += destroy_mitem(mdef, POTION_SYM, AD_COLD);
X break;
X case AD_ELEC:
X if (magr->mcan) {
X***************
X*** 428,442 ****
X tmp = 0;
X break;
X }
X- #ifdef GOLEMS
X- golemeffects(mdef, AD_ELEC, tmp);
X- #endif /* GOLEMS */
X if(vis) pline("%s gets zapped!", Monnam(mdef));
X if(resists_elec(pd)) {
X pline("The zap doesn't shock %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X tmp = 0;
X }
X break;
X case AD_ACID:
X if (magr->mcan) {
X--- 425,442 ----
X tmp = 0;
X break;
X }
X if(vis) pline("%s gets zapped!", Monnam(mdef));
X+ tmp += destroy_mitem(mdef, WAND_SYM, AD_ELEC);
X if(resists_elec(pd)) {
X pline("The zap doesn't shock %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X+ #ifdef GOLEMS
X+ golemeffects(mdef, AD_ELEC, tmp);
X+ #endif /* GOLEMS */
X tmp = 0;
X }
X+ /* only rings damage resistant players in destroy_item */
X+ tmp += destroy_mitem(mdef, RING_SYM, AD_ELEC);
X break;
X case AD_ACID:
X if (magr->mcan) {
X***************
X*** 459,465 ****
X else if(mdef->mtame)
X pline("May %s rust in peace.", mon_nam(mdef));
X mondied(mdef);
X! magr->mhpmax += 1 + rn2((int)mdef->m_lev+1);
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X--- 459,466 ----
X else if(mdef->mtame)
X pline("May %s rust in peace.", mon_nam(mdef));
X mondied(mdef);
X! magr->mhpmax = magr->mhpmax +
X! (1 + rn2((int)mdef->m_lev+1));
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X***************
X*** 475,481 ****
X else if(mdef->mtame)
X pline("May %s rot in peace.", mon_nam(mdef));
X mondied(mdef);
X! magr->mhpmax += 1 + rn2((int)mdef->m_lev+1);
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X--- 476,483 ----
X else if(mdef->mtame)
X pline("May %s rot in peace.", mon_nam(mdef));
X mondied(mdef);
X! magr->mhpmax = magr->mhpmax +
X! (1 + rn2((int)mdef->m_lev+1));
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X***************
X*** 485,491 ****
X break;
X case AD_STON:
X if(!resists_ston(pd)) {
X! magr->mhpmax += 1 + rn2((int)mdef->m_lev+1);
X if(vis) pline("%s turns to stone!", Monnam(mdef));
X else if(mdef->mtame) You(psf);
X monstone(mdef);
X--- 487,494 ----
X break;
X case AD_STON:
X if(!resists_ston(pd)) {
X! magr->mhpmax = magr->mhpmax +
X! (1 + rn2((int)mdef->m_lev+1));
X if(vis) pline("%s turns to stone!", Monnam(mdef));
X else if(mdef->mtame) You(psf);
X monstone(mdef);
X***************
X*** 571,577 ****
X else if (mdef->mtame)
X You("have a strangely sad feeling for a moment, then it passes.");
X mondied(mdef);
X! magr->mhpmax += 1 + rn2((int)mdef->m_lev+1);
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X--- 574,581 ----
X else if (mdef->mtame)
X You("have a strangely sad feeling for a moment, then it passes.");
X mondied(mdef);
X! magr->mhpmax = magr->mhpmax +
X! (1 + rn2((int)mdef->m_lev+1));
X ptr = grow_up(magr);
X if(!ptr) return(-1);
X return(2);
X***************
X*** 657,663 ****
X if(!tmp) return(1);
X
X if((mdef->mhp -= tmp) < 1) {
X! magr->mhpmax += 1 + rn2((int)mdef->m_lev+1);
X if(vis)
X pline("%s is %s!", Monnam(mdef),
X (is_demon(mdef->data) || is_undead(mdef->data)) ?
X--- 661,667 ----
X if(!tmp) return(1);
X
X if((mdef->mhp -= tmp) < 1) {
X! magr->mhpmax = magr->mhpmax + (1 + rn2((int)mdef->m_lev+1));
X if(vis)
X pline("%s is %s!", Monnam(mdef),
X (is_demon(mdef->data) || is_undead(mdef->data)) ?
X***************
X*** 669,677 ****
X if(!ptr) return(-1);
X return(2);
X }
X- /* fixes a bug where max monster hp could overflow. */
X- if(magr->mhpmax <= 0 || magr->mhpmax > MHPMAX) magr->mhpmax = MHPMAX;
X-
X return(1);
X }
X
X--- 673,678 ----
X*** src/Old/mhitu.c Sun Jun 3 13:31:19 1990
X--- src/mhitu.c Thu May 31 22:11:59 1990
X***************
X*** 7,34 ****
X # include "artifact.h"
X #endif
X
X! VSTATIC struct obj *otmp;
X
X #ifdef POLYSELF
X! OSTATIC void FDECL(urustm, (struct monst *, struct obj *));
X static int FDECL(passiveum, (struct permonst *,struct monst *,struct attack *));
X! #endif
X! #ifdef SEDUCE
X static void FDECL(mayberem, (struct obj *, const char *));
X! #endif
X! OSTATIC int FDECL(hitmu, (struct monst *,struct attack *));
X! OSTATIC int FDECL(gulpmu, (struct monst *,struct attack *));
X! OSTATIC int FDECL(explmu, (struct monst *,struct attack *));
X! OSTATIC int FDECL(gazemu, (struct monst *,struct attack *));
X! static void FDECL(hitmsg,(struct monst *,struct attack *));
X! OSTATIC void FDECL(missmu,(struct monst *,BOOLEAN_P,struct attack *));
X! OSTATIC void FDECL(mswings,(struct monst *,struct obj *));
X! OSTATIC void FDECL(wildmiss,(struct monst *));
X
X! OSTATIC void FDECL(hurtarmor,(struct permonst *,int));
X
X #ifdef OVL1
X
X static void
X hitmsg(mtmp, mattk)
X register struct monst *mtmp;
X--- 7,41 ----
X # include "artifact.h"
X #endif
X
X! STATIC_VAR struct obj NEARDATA *otmp;
X
X #ifdef POLYSELF
X! STATIC_DCL void FDECL(urustm, (struct monst *, struct obj *));
X! # ifdef OVL1
X static int FDECL(passiveum, (struct permonst *,struct monst *,struct attack *));
X! # endif /* OVL1 */
X! #endif /* POLYSELF */
X!
X! #ifdef OVLB
X! # ifdef SEDUCE
X static void FDECL(mayberem, (struct obj *, const char *));
X! # endif
X! #endif /* OVLB */
X
X! STATIC_DCL int FDECL(hitmu, (struct monst *,struct attack *));
X! STATIC_DCL int FDECL(gulpmu, (struct monst *,struct attack *));
X! STATIC_DCL int FDECL(explmu, (struct monst *,struct attack *));
X! STATIC_DCL int FDECL(gazemu, (struct monst *,struct attack *));
X! STATIC_DCL void FDECL(missmu,(struct monst *,BOOLEAN_P,struct attack *));
X! STATIC_DCL void FDECL(mswings,(struct monst *,struct obj *));
X! STATIC_DCL void FDECL(wildmiss,(struct monst *));
X
X+ STATIC_DCL void FDECL(hurtarmor,(struct permonst *,int));
X+
X #ifdef OVL1
X
X+ static void FDECL(hitmsg,(struct monst *,struct attack *));
X+
X static void
X hitmsg(mtmp, mattk)
X register struct monst *mtmp;
X***************
X*** 69,78 ****
X }
X }
X
X! #endif /* OVL1 */
X! #ifdef OVLB
X!
X! XSTATIC void
X missmu(mtmp, nearmiss, mattk) /* monster missed you */
X register struct monst *mtmp;
X register boolean nearmiss;
X--- 76,82 ----
X }
X }
X
X! STATIC_OVL void
X missmu(mtmp, nearmiss, mattk) /* monster missed you */
X register struct monst *mtmp;
X register boolean nearmiss;
X***************
X*** 88,94 ****
X }
X }
X
X! XSTATIC void
X mswings(mtmp, otemp) /* monster swings obj */
X register struct monst *mtmp;
X register struct obj *otemp;
X--- 92,98 ----
X }
X }
X
X! STATIC_OVL void
X mswings(mtmp, otemp) /* monster swings obj */
X register struct monst *mtmp;
X register struct obj *otemp;
X***************
X*** 105,111 ****
X xname(otemp));
X }
X
X! XSTATIC void
X wildmiss(mtmp) /* monster attacked your displaced image */
X register struct monst *mtmp;
X {
X--- 109,118 ----
X xname(otemp));
X }
X
X! #endif /* OVL1 */
X! #ifdef OVLB
X!
X! STATIC_OVL void
X wildmiss(mtmp) /* monster attacked your displaced image */
X register struct monst *mtmp;
X {
X***************
X*** 271,277 ****
X remove_monster(mtmp->mx, mtmp->my);
X place_monster(mtmp, u.ux, u.uy);
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--- 278,284 ----
X remove_monster(mtmp->mx, mtmp->my);
X place_monster(mtmp, u.ux, u.uy);
X pmon(mtmp);
X! (void) 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*** 507,513 ****
X * helper function for some compilers that have trouble with hitmu
X */
X
X! XSTATIC
X void
X hurtarmor(mdat, attk)
X struct permonst *mdat;
X--- 514,520 ----
X * helper function for some compilers that have trouble with hitmu
X */
X
X! STATIC_OVL
X void
X hurtarmor(mdat, attk)
X struct permonst *mdat;
X***************
X*** 580,586 ****
X * 3 if the monster lives but teleported/paralyzed, so it can't keep
X * attacking you
X */
X! XSTATIC
X int
X hitmu(mtmp, mattk)
X register struct monst *mtmp;
X--- 587,593 ----
X * 3 if the monster lives but teleported/paralyzed, so it can't keep
X * attacking you
X */
X! STATIC_OVL
X int
X hitmu(mtmp, mattk)
X register struct monst *mtmp;
X***************
X*** 588,593 ****
X--- 595,601 ----
X {
X register struct permonst *mdat = mtmp->data;
X register int dmg, ctmp, ptmp;
X+ int armpro;
X char buf[BUFSZ];
X #ifdef POLYSELF
X struct permonst *olduasmon = uasmon;
X***************
X*** 621,629 ****
X /* Use ctmp when the cancellation factor takes into account certain
X * armor's special magic protection. Otherwise just use !mtmp->mcan.
X */
X! ctmp = !mtmp->mcan &&
X! (!uarm || (rn2(3) >= objects[uarm->otyp].a_can) || !rn2(50))
X! && (!uarmc || (rn2(3) >= objects[uarmc->otyp].a_can) || !rn2(50));
X
X /* Now, adjust damages via resistances or specific attacks */
X switch(mattk->adtyp) {
X--- 629,640 ----
X /* Use ctmp when the cancellation factor takes into account certain
X * armor's special magic protection. Otherwise just use !mtmp->mcan.
X */
X! armpro = 0;
X! if (uarm && armpro < objects[uarm->otyp].a_can)
X! armpro = objects[uarm->otyp].a_can;
X! if (uarmc && armpro < objects[uarmc->otyp].a_can)
X! armpro = objects[uarmc->otyp].a_can;
X! ctmp = !mtmp->mcan && ((rn2(3) >= armpro) || !rn2(50));
X
X /* Now, adjust damages via resistances or specific attacks */
X switch(mattk->adtyp) {
X***************
X*** 1057,1063 ****
X case AD_CONF:
X hitmsg(mtmp, mattk);
X if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
X! mtmp->mspec_used += (dmg + rn2(6));
X if(Confusion)
X You("are getting even more confused.");
X else You("are getting confused.");
X--- 1068,1074 ----
X case AD_CONF:
X hitmsg(mtmp, mattk);
X if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
X! mtmp->mspec_used = mtmp->mspec_used + (dmg + rn2(6));
X if(Confusion)
X You("are getting even more confused.");
X else You("are getting confused.");
X***************
X*** 1093,1099 ****
X #endif /* OVL1 */
X #ifdef OVLB
X
X! XSTATIC
X int
X gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
X register struct monst *mtmp;
X--- 1104,1110 ----
X #endif /* OVL1 */
X #ifdef OVLB
X
X! STATIC_OVL
X int
X gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
X register struct monst *mtmp;
X***************
X*** 1254,1260 ****
X return(1);
X }
X
X! XSTATIC
X int
X explmu(mtmp, mattk) /* monster explodes in your face */
X register struct monst *mtmp;
X--- 1265,1271 ----
X return(1);
X }
X
X! STATIC_OVL
X int
X explmu(mtmp, mattk) /* monster explodes in your face */
X register struct monst *mtmp;
X***************
X*** 1302,1308 ****
X return(2); /* it dies */
X }
X
X! XSTATIC
X int
X gazemu(mtmp, mattk) /* monster gazes at you */
X register struct monst *mtmp;
X--- 1313,1319 ----
X return(2); /* it dies */
X }
X
X! STATIC_OVL
X int
X gazemu(mtmp, mattk) /* monster gazes at you */
X register struct monst *mtmp;
X***************
X*** 1335,1341 ****
X !mtmp->mspec_used && rn2(5)) {
X int conf = d(3,4);
X
X! mtmp->mspec_used += (conf + rn2(6));
X if(!Confusion)
X pline("%s's gaze confuses you!", Monnam(mtmp));
X else
X--- 1346,1352 ----
X !mtmp->mspec_used && rn2(5)) {
X int conf = d(3,4);
X
X! mtmp->mspec_used = mtmp->mspec_used + (conf + rn2(6));
X if(!Confusion)
X pline("%s's gaze confuses you!", Monnam(mtmp));
X else
X***************
X*** 1350,1356 ****
X int stun = d(2,6);
X
X pline("%s stares piercingly at you!", Monnam(mtmp));
X! mtmp->mspec_used += (stun + rn2(6));
X make_stunned(HStun + stun, TRUE);
X }
X break;
X--- 1361,1367 ----
X int stun = d(2,6);
X
X pline("%s stares piercingly at you!", Monnam(mtmp));
X! mtmp->mspec_used = mtmp->mspec_used + (stun + rn2(6));
X make_stunned(HStun + stun, TRUE);
X }
X break;
X***************
X*** 1387,1393 ****
X #ifdef OVLB
X
X #ifdef POLYSELF
X! XSTATIC void
X urustm(mon, obj)
X register struct monst *mon;
X register struct obj *obj;
X--- 1398,1404 ----
X #ifdef OVLB
X
X #ifdef POLYSELF
X! STATIC_OVL void
X urustm(mon, obj)
X register struct monst *mon;
X register struct obj *obj;
X***************
X*** 1561,1568 ****
X }
X }
X
X! pline("%s murmurs in your ear, while helping you undress.",
X! Blind ? (fem ? "She" : "He") : Monnam(mon));
X mayberem(uarmc, "cloak");
X if(!uarmc)
X mayberem(uarm, "suit");
X--- 1572,1587 ----
X }
X }
X
X! if (!uarmc && !uarmf && !uarmg && !uarms && !uarmh
X! #ifdef SHIRT
X! && !uarmu
X! #endif
X! )
X! pline("%s murmurs sweet nothings into your ear.",
X! Blind ? (fem ? "She" : "He") : Monnam(mon));
X! else
X! pline("%s murmurs in your ear, while helping you undress.",
X! Blind ? (fem ? "She" : "He") : Monnam(mon));
X mayberem(uarmc, "cloak");
X if(!uarmc)
X mayberem(uarm, "suit");
X***************
X*** 1674,1680 ****
X #endif
X else {
X long cost = (long)rnd(
X! (int)(u.ugold > 32767L ? 32767 : u.ugold) +10) + 500;
X
X if (mon->mpeaceful) {
X cost /= 5;
X--- 1693,1699 ----
X #endif
X else {
X long cost = (long)rnd(
X! (int)(u.ugold > 32757L ? 32757 : u.ugold) +10) + 500;
X
X if (mon->mpeaceful) {
X cost /= 5;
X*** src/Old/mklev.c Sun Jun 3 13:32:29 1990
X--- src/mklev.c Thu May 31 22:13:01 1990
X***************
X*** 25,31 ****
X static void NDECL(makebigroom);
X static void FDECL(addrsx,(int,int,int,int,BOOLEAN_P));
X static void FDECL(addrs,(int,int,int,int));
X! static int FDECL(comp,(genericptr_t,genericptr_t));
X static void FDECL(dosdoor,(int,int,struct mkroom *,int));
X static void NDECL(makecorridors);
X static void FDECL(join,(int,int));
X--- 25,31 ----
X static void NDECL(makebigroom);
X static void FDECL(addrsx,(int,int,int,int,BOOLEAN_P));
X static void FDECL(addrs,(int,int,int,int));
X! STATIC_PTR int FDECL(comp,(genericptr_t,genericptr_t));
X static void FDECL(dosdoor,(int,int,struct mkroom *,int));
X static void NDECL(makecorridors);
X static void FDECL(join,(int,int));
X***************
X*** 134,142 ****
X
X /* Args must be genericptr_t so that qsort will always be happy. */
X
X! static int
X comp(vx,vy)
X! genericptr_t vx, vy;
X {
X #ifdef LINT
X /* lint complains about possible pointer alignment problems, but we know
X--- 134,143 ----
X
X /* Args must be genericptr_t so that qsort will always be happy. */
X
X! STATIC_PTR int
X comp(vx,vy)
X! genericptr_t vx;
X! genericptr_t vy;
X {
X #ifdef LINT
X /* lint complains about possible pointer alignment problems, but we know
X***************
X*** 203,223 ****
X /* check area around room (and make room smaller if necessary) */
X for(x = lowx - xlim; x <= hix + xlim; x++) {
X for(y = lowy - ylim; y <= hiy + ylim; y++) {
X! if(levl[x][y].typ) {
X #ifdef WIZARD
X if(wizard && !secret)
X pline("Strange area [%d,%d] in maker().",x,y);
X #endif
X! if(!rn2(3)) return(0);
X! if(x < lowx)
X! lowx = x+xlim+1;
X! else
X! hix = x-xlim-1;
X! if(y < lowy)
X! lowy = y+ylim+1;
X! else
X! hiy = y-ylim-1;
X! goto chk;
X }
X }
X }
X--- 204,224 ----
X /* check area around room (and make room smaller if necessary) */
X for(x = lowx - xlim; x <= hix + xlim; x++) {
X for(y = lowy - ylim; y <= hiy + ylim; y++) {
X! if(isok(x,y) && levl[x][y].typ) {
X #ifdef WIZARD
X if(wizard && !secret)
X pline("Strange area [%d,%d] in maker().",x,y);
X #endif
X! if(!rn2(3)) return(0);
X! if(x < lowx)
X! lowx = x+xlim+1;
X! else
X! hix = x-xlim-1;
X! if(y < lowy)
X! lowy = y+ylim+1;
X! else
X! hiy = y-ylim-1;
X! goto chk;
X }
X }
X }
X***************
X*** 540,546 ****
X--- 541,554 ----
X if (levl[x][y].doormask != D_ISOPEN && !shdoor && !rn2(25))
X levl[x][y].doormask |= D_TRAPPED;
X } else
X+ #ifdef STUPID
X+ if (shdoor)
X+ levl[x][y].doormask = D_ISOPEN;
X+ else
X+ levl[x][y].doormask = D_NODOOR;
X+ #else
X levl[x][y].doormask = (shdoor ? D_ISOPEN : D_NODOOR);
X+ #endif
X levl[x][y].scrsym = news0(x,y);
X } else { /* SDOOR */
X if(shdoor || !rn2(5)) levl[x][y].doormask = D_LOCKED;
X***************
X*** 643,649 ****
X dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR);
X else {
X (void) mksobj_at(SCR_TELEPORTATION, xx, yy+dy);
X! if(!rn2(3)) (void) mkobj_at(0, xx, yy+dy);
X }
X }
X return;
X--- 651,657 ----
X dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR);
X else {
X (void) mksobj_at(SCR_TELEPORTATION, xx, yy+dy);
X! if(!rn2(3)) (void) mkobj_at(0, xx, yy+dy, TRUE);
X }
X }
X return;
X***************
X*** 696,702 ****
X }
X n = 6 + rn2(10);
X while (n--)
X! (void) mkobj_at(0,somex(croom),somey(croom));
X }
X
X static void
X--- 704,710 ----
X }
X n = 6 + rn2(10);
X while (n--)
X! (void) mkobj_at(0,somex(croom),somey(croom),TRUE);
X }
X
X static void
X***************
X*** 989,995 ****
X skip_nonrogue:
X #endif
X if(!rn2(3)) {
X! (void) mkobj_at(0, somex(croom), somey(croom));
X tryct = 0;
X while(!rn2(5)) {
X if(++tryct > 100){
X--- 997,1003 ----
X skip_nonrogue:
X #endif
X if(!rn2(3)) {
X! (void) mkobj_at(0, somex(croom), somey(croom), TRUE);
X tryct = 0;
X while(!rn2(5)) {
X if(++tryct > 100){
X***************
X*** 996,1002 ****
X Printf("tryct overflow4\n");
X break;
X }
X! (void) mkobj_at(0, somex(croom), somey(croom));
X }
X }
X }
X--- 1004,1011 ----
X Printf("tryct overflow4\n");
X break;
X }
X! (void) mkobj_at(0, somex(croom), somey(croom),
X! TRUE);
X }
X }
X }
X*** src/Old/mkmaze.c Sun Jun 3 13:33:13 1990
X--- src/mkmaze.c Sat May 12 16:06:58 1990
X***************
X*** 121,127 ****
X # undef tower
X #endif
X
X! static const uchar tower[] = {
X MOAT, MOAT, MOAT, MOAT, MOAT, MOAT, MOAT,
X MOAT, MOAT, TLCORNER, HWALL, TRCORNER, MOAT, MOAT,
X MOAT, TLCORNER, BRCORNER, ROOM, BLCORNER, TRCORNER, MOAT,
X--- 121,127 ----
X # undef tower
X #endif
X
X! static const uchar NEARDATA tower[] = {
X MOAT, MOAT, MOAT, MOAT, MOAT, MOAT, MOAT,
X MOAT, MOAT, TLCORNER, HWALL, TRCORNER, MOAT, MOAT,
X MOAT, TLCORNER, BRCORNER, ROOM, BLCORNER, TRCORNER, MOAT,
X***************
X*** 279,285 ****
X #endif
X for(x = rn1(8,11); x; x--) {
X mazexy(&mm);
X! (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y);
X }
X for(x = rn1(10,2); x; x--) {
X mazexy(&mm);
X--- 279,285 ----
X #endif
X for(x = rn1(8,11); x; x--) {
X mazexy(&mm);
X! (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y, TRUE);
X }
X for(x = rn1(10,2); x; x--) {
X mazexy(&mm);
X*** src/Old/mkobj.c Sun Jun 3 13:33:34 1990
X--- src/mkobj.c Sat Jun 2 19:44:49 1990
X***************
X*** 4,10 ****
X
X #include "hack.h"
X
X! static void FDECL(mkbox_cnts,(struct obj *));
X
X struct icp {
X int iprob; /* probability of an item type */
X--- 4,10 ----
X
X #include "hack.h"
X
X! STATIC_DCL void FDECL(mkbox_cnts,(struct obj *));
X
X struct icp {
X int iprob; /* probability of an item type */
X***************
X*** 11,17 ****
X char ilet; /* item class */
X };
X
X! #ifdef OVLB
X
X const struct icp mkobjprobs[] = {
X {10, WEAPON_SYM},
X--- 11,17 ----
X char ilet; /* item class */
X };
X
X! #ifdef OVL1
X
X const struct icp mkobjprobs[] = {
X {10, WEAPON_SYM},
X***************
X*** 70,81 ****
X { 8, RING_SYM},
X { 4, AMULET_SYM}};
X
X! static int mksx=0, mksy=0;
X
X struct obj *
X! mkobj_at(let,x,y)
X char let;
X int x,y;
X {
X register struct obj *otmp;
X
X--- 70,82 ----
X { 8, RING_SYM},
X { 4, AMULET_SYM}};
X
X! static int NEARDATA mksx=0, NEARDATA mksy=0;
X
X struct obj *
X! mkobj_at(let,x,y, artif)
X char let;
X int x,y;
X+ boolean artif;
X {
X register struct obj *otmp;
X
X***************
X*** 84,90 ****
X * to insure shop boxes are empty.
X * Yes, this is a horrible kludge...
X */
X! otmp = mkobj(let,TRUE);
X otmp->nobj = fobj;
X fobj = otmp;
X place_object(otmp, x, y);
X--- 85,91 ----
X * to insure shop boxes are empty.
X * Yes, this is a horrible kludge...
X */
X! otmp = mkobj(let,artif);
X otmp->nobj = fobj;
X fobj = otmp;
X place_object(otmp, x, y);
X***************
X*** 137,143 ****
X return(mksobj(i, artif));
X }
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--- 138,145 ----
X return(mksobj(i, artif));
X }
X
X! STATIC_OVL
X! 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*** 202,207 ****
X--- 204,211 ----
X return(i);
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X const char dknowns[] = { WAND_SYM, RING_SYM, POTION_SYM, SCROLL_SYM, GEM_SYM,
X #ifdef SPELLS
X SPBOOK_SYM,
X***************
X*** 437,442 ****
X--- 441,448 ----
X return;
X }
X
X+ #endif /* OVLB */
X+ #ifdef OVL1
X void
X blessorcurse(otmp, chance)
X register struct obj *otmp;
X***************
X*** 453,458 ****
X--- 459,466 ----
X return;
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X int
X bcsign(otmp)
X register struct obj *otmp;
X***************
X*** 519,524 ****
X--- 527,534 ----
X return;
X }
X
X+ #endif /* OVLB */
X+ #ifdef OVL1
X struct obj *
X mkcorpstat(objtype, ptr, x, y)
X int objtype; /* CORPSE or STATUE */
X***************
X*** 538,543 ****
X--- 548,555 ----
X return(otmp);
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X struct obj *
X mk_tt_object(objtype, x, y)
X int objtype; /* CORPSE or STATUE */
X***************
X*** 609,614 ****
X--- 621,628 ----
X }
X #endif
X
X+ #endif /* OVLB */
X+ #ifdef OVL1
X
X /*
X * These routines maintain the single-linked lists headed in level.objects[][]
X***************
X*** 629,634 ****
X--- 643,650 ----
X otmp->oy = y;
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X void
X remove_object(otmp)
X register struct obj *otmp;
X*** src/Old/mkroom.c Tue Jun 5 10:20:22 1990
X--- src/mkroom.c Tue Jun 5 10:17:54 1990
X***************
X*** 16,21
X /* block some unused #defines to avoid overloading some cpp's */
X #include "hack.h"
X
X static void NDECL(mkshop), FDECL(mkzoo,(int)), NDECL(mkswamp);
X #ifdef ORACLE
X static void NDECL(mkdelphi);
X
X--- 16,24 -----
X /* block some unused #defines to avoid overloading some cpp's */
X #include "hack.h"
X
X+ #ifdef OVLB
X+ static boolean FDECL(isbig, (struct mkroom *));
X+ static struct mkroom * FDECL(pick_room,(BOOLEAN_P));
X static void NDECL(mkshop), FDECL(mkzoo,(int)), NDECL(mkswamp);
X #ifdef ORACLE
X static void NDECL(mkdelphi);
X***************
X*** 28,33
X #ifdef ARMY
X static struct permonst * NDECL(squadmon);
X #endif
X
X #define sq(x) ((x)*(x))
X
X
X--- 31,37 -----
X #ifdef ARMY
X static struct permonst * NDECL(squadmon);
X #endif
X+ #endif /* OVLB */
X
X #define sq(x) ((x)*(x))
X
X***************
X*** 167,173
X }
X
X static struct mkroom *
X! pick_room()
X /* pick an unused room, preferably with only one door */
X {
X register struct mkroom *sroom;
X
X--- 171,178 -----
X }
X
X static struct mkroom *
X! pick_room(strict)
X! register boolean strict;
X /* pick an unused room, preferably with only one door */
X {
X register struct mkroom *sroom;
X***************
X*** 179,185
X if(sroom->hx < 0)
X return (struct mkroom *)0;
X if(sroom->rtype != OROOM) continue;
X! if(has_upstairs(sroom) || (has_dnstairs(sroom) && rn2(3)))
X continue;
X if(sroom->doorct == 1 || !rn2(5))
X return sroom;
X
X--- 184,191 -----
X if(sroom->hx < 0)
X return (struct mkroom *)0;
X if(sroom->rtype != OROOM) continue;
X! if(!strict) {
X! if(has_upstairs(sroom) || (has_dnstairs(sroom) && rn2(3)))
X continue;
X } else if(has_upstairs(sroom) || has_dnstairs(sroom))
X continue;
X***************
X*** 181,186
X if(sroom->rtype != OROOM) continue;
X if(has_upstairs(sroom) || (has_dnstairs(sroom) && rn2(3)))
X continue;
X if(sroom->doorct == 1 || !rn2(5))
X return sroom;
X }
X
X--- 187,194 -----
X if(!strict) {
X if(has_upstairs(sroom) || (has_dnstairs(sroom) && rn2(3)))
X continue;
X+ } else if(has_upstairs(sroom) || has_dnstairs(sroom))
X+ continue;
X if(sroom->doorct == 1 || !rn2(5))
X return sroom;
X }
X***************
X*** 196,202
X register int sx,sy,i;
X int sh, tx, ty, goldlim = 500 * dlevel;
X
X! if(!(sroom = pick_room())) return;
X
X sroom->rtype = type;
X sh = sroom->fdoor;
X
X--- 204,210 -----
X register int sx,sy,i;
X int sh, tx, ty, goldlim = 500 * dlevel;
X
X! if(!(sroom = pick_room(FALSE))) return;
X
X sroom->rtype = type;
X sh = sroom->fdoor;
X***************
X*** 332,338
X int dy,xx,yy;
X
X if(doorindex >= DOORMAX) return;
X! if(!(sroom = pick_room())) return;
X
X if(!place_oracle(sroom,&dy,&xx,&yy)) return;
X
X
X--- 340,346 -----
X int dy,xx,yy;
X
X if(doorindex >= DOORMAX) return;
X! if(!(sroom = pick_room(FALSE))) return;
X
X if(!place_oracle(sroom,&dy,&xx,&yy)) return;
X
X***************
X*** 373,379
X register struct mkroom *sroom;
X int sx,sy;
X
X! if(!(sroom = pick_room())) return;
X
X /* set up Priest and shrine */
X sroom->rtype = TEMPLE;
X
X--- 381,387 -----
X register struct mkroom *sroom;
X int sx,sy;
X
X! if(!(sroom = pick_room(TRUE))) return;
X
X /* set up Priest and shrine */
X sroom->rtype = TEMPLE;
X***************
X*** 396,402
X {
X register int dx, dy;
X register struct rm *lev;
X! for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++)
X if(IS_DOOR((lev = &levl[sx+dx][sy+dy])->typ) ||
X lev->typ == SDOOR)
X return(TRUE);
X
X--- 404,411 -----
X {
X register int dx, dy;
X register struct rm *lev;
X! for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++) {
X! if(!isok(sx+dx, sy+dy)) continue;
X if(IS_DOOR((lev = &levl[sx+dx][sy+dy])->typ) ||
X lev->typ == SDOOR)
X return(TRUE);
X***************
X*** 400,405
X if(IS_DOOR((lev = &levl[sx+dx][sy+dy])->typ) ||
X lev->typ == SDOOR)
X return(TRUE);
X return(FALSE);
X }
X
X
X--- 409,415 -----
X if(IS_DOOR((lev = &levl[sx+dx][sy+dy])->typ) ||
X lev->typ == SDOOR)
X return(TRUE);
X+ }
X return(FALSE);
X }
X
X*** src/Old/mon.c Sun Jun 3 13:34:26 1990
X--- src/mon.c Thu May 31 22:11:18 1990
X***************
X*** 2,13 ****
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X! /* Aztec C on amiga doesn't recognize defined() at this point! */
X #ifndef AZTEC_C
X #if defined(MICROPORT_BUG) || (!defined(LINT) && !defined(__STDC__))
X #define MKROOM_H
X #endif /* Avoid the microport bug */
X #endif
X
X #include "hack.h"
X #include "mfndpos.h"
X--- 2,17 ----
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X! /* Aztec C on amiga doesn't recognize defined() at this point!
X! Neither does the Mac Lightspeed C v.3 compiler. If you're using
X! precompiled headers, you don't want this either */
X #ifndef AZTEC_C
X+ #ifndef THINK_C
X #if defined(MICROPORT_BUG) || (!defined(LINT) && !defined(__STDC__))
X #define MKROOM_H
X #endif /* Avoid the microport bug */
X #endif
X+ #endif
X
X #include "hack.h"
X #include "mfndpos.h"
X***************
X*** 17,34 ****
X #endif
X
X #ifdef HARD
X! OSTATIC boolean FDECL(restrap,(struct monst *));
X #endif
X #ifdef INFERNO
X # include <ctype.h>
X #endif
X
X! static struct obj *FDECL(make_corpse,(struct monst *));
X! OSTATIC void NDECL(dmonsfree);
X! static void FDECL(m_detach,(struct monst *));
X
X #ifdef OVL1
X-
X long lastwarntime;
X int lastwarnlev;
X const char *warnings[] = {
X--- 21,35 ----
X #endif
X
X #ifdef HARD
X! STATIC_DCL boolean FDECL(restrap,(struct monst *));
X #endif
X #ifdef INFERNO
X # include <ctype.h>
X #endif
X
X! STATIC_DCL void NDECL(dmonsfree);
X
X #ifdef OVL1
X long lastwarntime;
X int lastwarnlev;
X const char *warnings[] = {
X***************
X*** 35,41 ****
X--- 36,45 ----
X "white", "pink", "red", "ruby", "purple", "black" };
X
X #endif /* OVL1 */
X+
X #ifdef OVLB
X+ static struct obj *FDECL(make_corpse,(struct monst *));
X+ static void FDECL(m_detach,(struct monst *));
X
X struct monst *fdmon; /* chain of dead monsters, need not be saved */
X /* otherwise used only in priest.c */
X***************
X*** 167,173 ****
X #endif /* OVLB */
X #ifdef OVL2
X
X! XSTATIC void
X dmonsfree(){
X register struct monst *mtmp;
X while(mtmp = fdmon){
X--- 171,177 ----
X #endif /* OVLB */
X #ifdef OVL2
X
X! STATIC_OVL void
X dmonsfree(){
X register struct monst *mtmp;
X while(mtmp = fdmon){
X***************
X*** 817,822 ****
X--- 821,829 ----
X }
X #endif
X if(mtmp->isshk) shkdead(mtmp);
X+ if(mtmp->isgd) {
X+ if(!grddead(mtmp)) return;
X+ }
X #ifdef WORM
X if(mtmp->wormno) wormdead(mtmp);
X #endif
X***************
X*** 1025,1031 ****
X ) {
X int typ;
X
X! otmp = mkobj_at(RANDOM_SYM, x, y);
X /* Don't create large objects from small monsters */
X typ = otmp->otyp;
X if (mdat->msize < MZ_HUMAN && typ != FOOD_RATION
X--- 1032,1038 ----
X ) {
X int typ;
X
X! otmp = mkobj_at(RANDOM_SYM, x, y, TRUE);
X /* Don't create large objects from small monsters */
X typ = otmp->otyp;
X if (mdat->msize < MZ_HUMAN && typ != FOOD_RATION
X***************
X*** 1071,1076 ****
X--- 1078,1089 ----
X }
X if(is_were(mtmp->data) && mtmp->data->mlet != S_HUMAN)
X (void) new_were(mtmp);
X+ if(mtmp->mimic && cansee(mtmp->mx, mtmp->my)) {
X+ seemimic(mtmp);
X+ /* we pretend that the mimic doesn't */
X+ /* know that it has been unmasked. */
X+ mtmp->msleep = 1;
X+ }
X }
X }
X
X***************
X*** 1080,1088 ****
X
X register struct monst *mtmp;
X
X! for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if (mtmp->data == &mons[PM_CHAMELEON])
X mtmp->cham = 1;
X }
X
X int
X--- 1093,1108 ----
X
X register struct monst *mtmp;
X
X! for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X if (mtmp->data == &mons[PM_CHAMELEON])
X mtmp->cham = 1;
X+ if(mtmp->data->mlet == S_MIMIC && mtmp->msleep &&
X+ cansee(mtmp->mx, mtmp->my)) {
X+ set_mimic_sym(mtmp);
X+ unpmon(mtmp);
X+ pmon(mtmp);
X+ }
X+ }
X }
X
X int
X***************
X*** 1099,1105 ****
X tryct = 0;
X if(mdat == 0) {
X while (++tryct < 100) {
X! static int num;
X mdat = &mons[num=rn2(NUMMONS)];
X if ((!is_human(mdat) || num == PM_NURSE)
X && !type_is_pname(mdat)
X--- 1119,1125 ----
X tryct = 0;
X if(mdat == 0) {
X while (++tryct < 100) {
X! static int NEARDATA num;
X mdat = &mons[num=rn2(NUMMONS)];
X if ((!is_human(mdat) || num == PM_NURSE)
X && !type_is_pname(mdat)
X***************
X*** 1187,1193 ****
X struct monst *mtmp;
X {
X coord mm;
X! enexto(&mm, u.ux, u.uy, mtmp->data);
X remove_monster(mtmp->mx, mtmp->my);
X place_monster(mtmp, mm.x, mm.y);
X pmon(mtmp);
X--- 1207,1213 ----
X struct monst *mtmp;
X {
X coord mm;
X! if(!enexto(&mm, u.ux, u.uy, mtmp->data)) return;
X remove_monster(mtmp->mx, mtmp->my);
X place_monster(mtmp, mm.x, mm.y);
X pmon(mtmp);
X***************
X*** 1202,1208 ****
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--- 1222,1228 ----
X {
X coord mm;
X if(!gz || !goodpos(x,y,mtmp->data)) {
X! if(!enexto(&mm, x, y, mtmp->data)) return;
X x = mm.x; y = mm.y;
X }
X if(x == mtmp->mx && y == mtmp->my) /* that was easy */
X***************
X*** 1262,1268 ****
X }
X
X #ifdef HARD
X! XSTATIC boolean
X restrap(mtmp)
X /* unwatched hiders may hide again,
X * if so, a 1 is returned.
X--- 1282,1288 ----
X }
X
X #ifdef HARD
X! STATIC_OVL boolean
X restrap(mtmp)
X /* unwatched hiders may hide again,
X * if so, a 1 is returned.
X*** src/Old/mondata.c Sun Jun 3 13:35:20 1990
X--- src/mondata.c Wed Apr 11 20:13:05 1990
X***************
X*** 348,358 ****
X--- 348,374 ----
X int little_to_big(montype)
X int montype;
X {
X+ #ifndef AIXPS2_BUG
X register int i;
X
X for(i=0; grownups[i][0] >= 0; i++)
X if(montype == grownups[i][0]) return grownups[i][1];
X return montype;
X+ #else
X+ /* AIX PS/2 C-compiler 1.1.1 optimizer does not like the above for loop,
X+ * and causes segmentation faults at runtime. (The problem does not
X+ * occur if -O is not used.)
X+ * lehtonen@cs.Helsinki.FI (Tapio Lehtonen) 28031990
X+ */
X+ int i;
X+ int monvalue;
X+
X+ monvalue = montype;
X+ for(i=0; grownups[i][0] >= 0; i++)
X+ if(montype == grownups[i][0]) monvalue = grownups[i][1];
X+
X+ return monvalue;
X+ #endif
X }
X
X int big_to_little(montype)
X*** src/Old/monmove.c Sun Jun 3 13:35:45 1990
X--- src/monmove.c Thu May 31 22:11:21 1990
X***************
X*** 2,13 ****
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X! #ifndef LINT
X! # ifndef __STDC__
X #define TRAP_H /* comment line for pre-compiled headers */
X /* block some unused #defines to avoid overloading some cpp's */
X! # endif
X! #endif
X
X #include "hack.h"
X #include "mfndpos.h"
X--- 2,13 ----
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X! #ifndef LINT /* comment line for pre-compiled headers */
X! # ifndef __STDC__ /* comment line for pre-compiled headers */
X #define TRAP_H /* comment line for pre-compiled headers */
X /* block some unused #defines to avoid overloading some cpp's */
X! # endif /* comment line for pre-compiled headers */
X! #endif /* comment line for pre-compiled headers */
X
X #include "hack.h"
X #include "mfndpos.h"
X***************
X*** 15,24 ****
X # include "artifact.h"
X #endif
X
X static void FDECL(distfleeck,(struct monst *,int *,int *,int *));
X! #ifdef POLYSELF
X static boolean FDECL(itsstuck,(struct monst *));
X! #endif
X
X #ifdef OVLB
X
X--- 15,29 ----
X # include "artifact.h"
X #endif
X
X+ #ifdef OVL1
X static void FDECL(distfleeck,(struct monst *,int *,int *,int *));
X! #endif /* OVL1 */
X!
X! #ifdef OVL0
X! # ifdef POLYSELF
X static boolean FDECL(itsstuck,(struct monst *));
X! # endif
X! #endif /* OVL0 */
X
X #ifdef OVLB
X
X***************
X*** 96,102 ****
X newsym(mtmp->mx,mtmp->my);
X else
X mnewsym(mtmp->mx,mtmp->my);
X! here->seen = FALSE;
X return(TRUE);
X }
X
X--- 101,108 ----
X newsym(mtmp->mx,mtmp->my);
X else
X mnewsym(mtmp->mx,mtmp->my);
X! if (!canseeit)
X! here->seen = FALSE;
X return(TRUE);
X }
X
X***************
X*** 340,353 ****
X return(tmp == 2);
X }
X
X! static const char practical[] = { WEAPON_SYM, GEM_SYM, FOOD_SYM, 0 };
X! static const char magical[] = {
X AMULET_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, RING_SYM,
X #ifdef SPELLS
X SPBOOK_SYM,
X #endif
X 0 };
X! static const char indigestion[] = { BALL_SYM, ROCK_SYM, 0 };
X
X #ifdef POLYSELF
X static boolean
X--- 346,362 ----
X return(tmp == 2);
X }
X
X! static const char NEARDATA practical[] = { WEAPON_SYM, GEM_SYM, FOOD_SYM, 0 };
X! static const char NEARDATA magical[] = {
X AMULET_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, RING_SYM,
X #ifdef SPELLS
X SPBOOK_SYM,
X #endif
X 0 };
X! static const char NEARDATA indigestion[] = { BALL_SYM, ROCK_SYM, 0 };
X!
X! #endif /* OVL1 */
X! #ifdef OVL0
X
X #ifdef POLYSELF
X static boolean
X***************
X*** 362,370 ****
X }
X #endif
X
X- #endif /* OVL1 */
X- #ifdef OVL0
X-
X int
X m_move(mtmp, after)
X register struct monst *mtmp;
X--- 371,376 ----
X***************
X*** 517,523 ****
X conceals = hides_under(ptr);
X }
X
X! #define SRCHRADIUS 25
X
X { xchar mind = SRCHRADIUS; /* not too far away */
X register int dd;
X--- 523,530 ----
X conceals = hides_under(ptr);
X }
X
X! #define SQSRCHRADIUS 5
X! #define SRCHRADIUS (SQSRCHRADIUS*SQSRCHRADIUS)
X
X { xchar mind = SRCHRADIUS; /* not too far away */
X register int dd;
X***************
X*** 539,564 ****
X if((likegems || likeobjs || likemagic || likerock || conceals)
X && (!in_shop(omx, omy) || (!rn2(25) && !mtmp->isshk))) {
X register struct obj *otmp;
X
X! for(otmp = fobj; otmp; otmp = otmp->nobj)
X! if((likeobjs && index(practical, otmp->olet)) ||
X! (likemagic && index(magical, otmp->olet)) ||
X! (likerock && otmp->otyp == BOULDER) ||
X! (likegems && otmp->olet == GEM_SYM &&
X! otmp->otyp < LAST_GEM + 6) ||
X! (conceals && !cansee(otmp->ox,otmp->oy)) ||
X! (ptr == &mons[PM_GELATINOUS_CUBE] &&
X! !index(indigestion, otmp->olet))
X! ) {
X! if(can_carry(mtmp,otmp))
X! if(ptr->mlet != S_UNICORN ||
X! objects[otmp->otyp].g_val != 0)
X! if((dd = dist2(omx,omy,otmp->ox,otmp->oy)) < mind){
X mind = dd;
X gx = otmp->ox;
X gy = otmp->oy;
X }
X }
X }
X if(mind < SRCHRADIUS && appr == -1) {
X if(dist2(omx,omy,mtmp->mux,mtmp->muy) < 10) {
X--- 546,578 ----
X if((likegems || likeobjs || likemagic || likerock || conceals)
X && (!in_shop(omx, omy) || (!rn2(25) && !mtmp->isshk))) {
X register struct obj *otmp;
X+ register int xx, yy;
X
X! for(xx = omx-SQSRCHRADIUS; xx <= omx+SQSRCHRADIUS; xx++) {
X! for(yy = omy-SQSRCHRADIUS; yy <= omy+SQSRCHRADIUS; yy++) {
X! if(!isok(xx, yy)) continue;
X! if((dd = dist2(omx,omy,xx, yy)) >= mind) continue;
X! for(otmp = level.objects[xx][yy]; otmp; otmp = otmp->nexthere)
X! if((likeobjs && index(practical, otmp->olet)) ||
X! (likemagic && index(magical, otmp->olet)) ||
X! (likerock && otmp->otyp == BOULDER) ||
X! (likegems && otmp->olet == GEM_SYM &&
X! otmp->otyp < LAST_GEM + 6) ||
X! (conceals && !cansee(otmp->ox,otmp->oy)) ||
X! (ptr == &mons[PM_GELATINOUS_CUBE] &&
X! !index(indigestion, otmp->olet))
X! ) {
X! if(can_carry(mtmp,otmp))
X! if(ptr->mlet != S_UNICORN ||
X! objects[otmp->otyp].g_val != 0){
X mind = dd;
X gx = otmp->ox;
X gy = otmp->oy;
X+ break;
X }
X+ }
X }
X+ }
X }
X if(mind < SRCHRADIUS && appr == -1) {
X if(dist2(omx,omy,mtmp->mux,mtmp->muy) < 10) {
X***************
X*** 576,582 ****
X if (ptr->mlet == S_UNICORN) flag |= NOTONL;
X if (passes_walls(ptr)) flag |= (ALLOW_WALL | ALLOW_ROCK);
X if (can_tunnel) flag |= ALLOW_DIG;
X! if (is_human(ptr)) flag |= ALLOW_SSM;
X if (is_undead(ptr)) flag |= NOGARLIC;
X if (throws_rocks(ptr)) flag |= ALLOW_ROCK;
X if (can_open) flag |= OPENDOOR;
X--- 590,596 ----
X if (ptr->mlet == S_UNICORN) flag |= NOTONL;
X if (passes_walls(ptr)) flag |= (ALLOW_WALL | ALLOW_ROCK);
X if (can_tunnel) flag |= ALLOW_DIG;
X! if (is_human(ptr) || ptr == &mons[PM_MINOTAUR]) flag |= ALLOW_SSM;
X if (is_undead(ptr)) flag |= NOGARLIC;
X if (throws_rocks(ptr)) flag |= ALLOW_ROCK;
X if (can_open) flag |= OPENDOOR;
X***************
X*** 624,631 ****
X if((info[chi] & ALLOW_M) ||
X (nix == mtmp->mux && niy == mtmp->muy)) {
X int stat;
X! mtmp2 =
X! (MON_AT(nix, niy) ? m_at(nix,niy) : (struct monst *)0);
X if((stat = mattackm(mtmp, mtmp2)) == 1 && rn2(4) &&
X mtmp2->mlstmv != moves && mattackm(mtmp2, mtmp) == 2)
X return(2);
X--- 638,644 ----
X if((info[chi] & ALLOW_M) ||
X (nix == mtmp->mux && niy == mtmp->muy)) {
X int stat;
X! mtmp2 = m_at(nix,niy);
X if((stat = mattackm(mtmp, mtmp2)) == 1 && rn2(4) &&
X mtmp2->mlstmv != moves && mattackm(mtmp2, mtmp) == 2)
X return(2);
X
END_OF_FILE
if test 53751 -ne `wc -c <'patch8.04'`; then
echo shar: \"'patch8.04'\" unpacked with wrong size!
fi
# end of 'patch8.04'
fi
echo shar: End of archive 8 \(of 24\).
cp /dev/null ark8isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 24 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0