[comp.sources.games] v08i012: NetHack3 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (08/18/89)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 8, Issue 12
Archive-name: NetHack3/Patch2g
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 7 (of 7)."
# Contents:  patch02g
# Wrapped by billr@saab on Fri Aug 18 08:44:43 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch02g' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patch02g'\"
else
echo shar: Extracting \"'patch02g'\" \(53958 characters\)
sed "s/^X//" >'patch02g' <<'END_OF_FILE'
X*** src/Old/priest.c	Wed Aug 16 12:38:50 1989
X--- src/priest.c	Mon Aug  7 23:38:33 1989
X***************
X*** 173,179 ****
X  	return(move_special(priest,temple,TRUE,FALSE,avoid,omx,omy,gx,gy));
X  }
X  
X! /* exclusevely for mktemple() */
X  void
X  priestini(lvl, sx, sy, align)
X  register int lvl, sx, sy, align;
X--- 173,179 ----
X  	return(move_special(priest,temple,TRUE,FALSE,avoid,omx,omy,gx,gy));
X  }
X  
X! /* exclusively for mktemple() */
X  void
X  priestini(lvl, sx, sy, align)
X  register int lvl, sx, sy, align;
X***************
X*** 183,190 ****
X  #ifdef SPELLS
X  	register int cnt;
X  #endif
X  
X! 	if (priest = makemon(&mons[!rn2(2) ? PM_TEMPLE_PRIEST : 
X  			PM_TEMPLE_PRIESTESS], sx+1, sy)) {
X  		EPRI(priest)->shroom = inroom(sx, sy);
X  		EPRI(priest)->shralign = align;
X--- 183,191 ----
X  #ifdef SPELLS
X  	register int cnt;
X  #endif
X+ 	if(levl[sx+1][sy].mmask) rloc(m_at(sx+1, sy)); /* insurance */
X  
X! 	if(priest = makemon(&mons[!rn2(2) ? PM_TEMPLE_PRIEST : 
X  			PM_TEMPLE_PRIESTESS], sx+1, sy)) {
X  		EPRI(priest)->shroom = inroom(sx, sy);
X  		EPRI(priest)->shralign = align;
X*** src/Old/prisym.c	Wed Aug 16 12:39:12 1989
X--- src/prisym.c	Tue Aug 15 22:58:34 1989
X***************
X*** 106,112 ****
X  uchar let;
X  xchar cnt;
X  coord tc[COLNO];	/* but watch reflecting beams! */
X! # ifdef MSDOSCOLOR
X  uchar col;
X  # endif
X  #else
X--- 106,112 ----
X  uchar let;
X  xchar cnt;
X  coord tc[COLNO];	/* but watch reflecting beams! */
X! # ifdef TEXTCOLOR
X  uchar col;
X  # endif
X  #else
X***************
X*** 113,119 ****
X  static uchar let;
X  static xchar cnt;
X  static coord tc[COLNO];	/* but watch reflecting beams! */
X! # ifdef MSDOSCOLOR
X  static uchar col;
X  # endif
X  #endif
X--- 113,119 ----
X  static uchar let;
X  static xchar cnt;
X  static coord tc[COLNO];	/* but watch reflecting beams! */
X! # ifdef TEXTCOLOR
X  static uchar col;
X  # endif
X  #endif
X***************
X*** 123,129 ****
X  		if(y > 0) {	/* open call */
X  			let = y;
X  			cnt = 0;
X! #ifdef MSDOSCOLOR
X  			col = AT_ZAP;
X  #endif
X  			return;
X--- 123,129 ----
X  		if(y > 0) {	/* open call */
X  			let = y;
X  			cnt = 0;
X! #ifdef TEXTCOLOR
X  			col = AT_ZAP;
X  #endif
X  			return;
X***************
X*** 140,146 ****
X  	    case -2:		/* change let call */
X  		let = y;
X  		return;
X! #ifdef MSDOSCOLOR
X  	    case -3:		/* set color call */
X  		col = y;
X  		return;
X--- 140,146 ----
X  	    case -2:		/* change let call */
X  		let = y;
X  		return;
X! #ifdef TEXTCOLOR
X  	    case -3:		/* set color call */
X  		col = y;
X  		return;
X***************
X*** 149,155 ****
X  	/* normal call */
X  	if(cansee(x,y)) {
X  		if(cnt) delay_output();
X! #ifdef MSDOSCOLOR
X  		at(x,y,let,col);
X  #else
X  		at(x,y,let,AT_ZAP);
X--- 149,155 ----
X  	/* normal call */
X  	if(cansee(x,y)) {
X  		if(cnt) delay_output();
X! #ifdef TEXTCOLOR
X  		at(x,y,let,col);
X  #else
X  		at(x,y,let,AT_ZAP);
X***************
X*** 218,224 ****
X  		return;
X  	if(room->mmask) mtmp = m_at(x,y);
X  	if(mtmp && !mtmp->mhide &&
X! 		(!mtmp->minvis || See_invisible)) {
X  #ifdef WORM
X  		if(m_atseg)
X  			pwseg(m_atseg);
X--- 218,224 ----
X  		return;
X  	if(room->mmask) mtmp = m_at(x,y);
X  	if(mtmp && !mtmp->mhide &&
X! 		(!mtmp->minvis || See_invisible || Telepat)) {
X  #ifdef WORM
X  		if(m_atseg)
X  			pwseg(m_atseg);
X***************
X*** 235,241 ****
X  	else if((!mtmp || mtmp->data == &mons[PM_GIANT_SPIDER]) &&
X  		  (ttmp = t_at(x,y)) && ttmp->ttyp == WEB)
X  		atl(x,y,(char)WEB_SYM);
X! 	else if(mtmp && (!mtmp->minvis || See_invisible)) {
X  		/* must be a hiding monster, but not hiding right now */
X  		/* assume for the moment that long worms do not hide */
X  		pmon(mtmp);
X--- 235,241 ----
X  	else if((!mtmp || mtmp->data == &mons[PM_GIANT_SPIDER]) &&
X  		  (ttmp = t_at(x,y)) && ttmp->ttyp == WEB)
X  		atl(x,y,(char)WEB_SYM);
X! 	else if(mtmp && (!mtmp->minvis || See_invisible || Telepat)) {
X  		/* must be a hiding monster, but not hiding right now */
X  		/* assume for the moment that long worms do not hide */
X  		pmon(mtmp);
X*** src/Old/read.c	Wed Aug 16 12:39:33 1989
X--- src/read.c	Wed Aug 16 10:15:57 1989
X***************
X*** 192,198 ****
X  			  sobj->cursed ? black : silver,
X  			  (s*s>1) ? "while" : "moment");
X  		otmp->cursed = sobj->cursed;
X! 		otmp->blessed = sobj->blessed;
X  		otmp->spe += s;
X  		adj_abon(otmp, s);
X  		break;
X--- 192,199 ----
X  			  sobj->cursed ? black : silver,
X  			  (s*s>1) ? "while" : "moment");
X  		otmp->cursed = sobj->cursed;
X! 		if (!otmp->blessed || sobj->cursed)
X! 			otmp->blessed = sobj->blessed;
X  		otmp->spe += s;
X  		adj_abon(otmp, s);
X  		break;
X***************
X*** 329,336 ****
X  		if(confused || sobj->cursed) cnt += 12;
X  		while(cnt--) {
X  #if defined(WIZARD) || defined(EXPLORE_MODE)
X! 		    if(wizard || discover)
X! 			if (!create_particular())
X  #endif /* WIZARD || EXPLORE_MODE */
X  		    (void) makemon (confused ? &mons[PM_ACID_BLOB] :
X  					(struct permonst *) 0, u.ux, u.uy);
X--- 330,336 ----
X  		if(confused || sobj->cursed) cnt += 12;
X  		while(cnt--) {
X  #if defined(WIZARD) || defined(EXPLORE_MODE)
X! 		    if((!wizard && !discover) || !create_particular())
X  #endif /* WIZARD || EXPLORE_MODE */
X  		    (void) makemon (confused ? &mons[PM_ACID_BLOB] :
X  					(struct permonst *) 0, u.ux, u.uy);
X***************
X*** 694,709 ****
X      useup(obj);
X  }
X  
X- int
X- identify(otmp)		/* also called by newmail() */
X- 	register struct obj *otmp;
X- {
X- 	makeknown(otmp->otyp);
X- 	otmp->known = otmp->dknown = otmp->bknown = 1;
X- 	prinv(otmp);
X- 	return(1);
X- }
X- 
X  void
X  litroom(on)
X  register boolean on;
X--- 694,699 ----
X***************
X*** 811,817 ****
X  				    You("feel dead inside.");
X  				else
X  #endif
X! 				    done("died");
X  			    }
X  			    /* for simplicity (and fairness) let's avoid
X  			     * alignment changes here...
X--- 801,807 ----
X  				    You("feel dead inside.");
X  				else
X  #endif
X! 				    done(GENOCIDED);
X  			    }
X  			    /* for simplicity (and fairness) let's avoid
X  			     * alignment changes here...
X***************
X*** 917,923 ****
X  		if(u.umonnum >= 0)	You("feel dead inside.");
X  		else
X  #endif
X! 			done("died");
X  		return;
X  	    }
X  #ifdef POLYSELF
X--- 907,913 ----
X  		if(u.umonnum >= 0)	You("feel dead inside.");
X  		else
X  #endif
X! 			done(GENOCIDED);
X  		return;
X  	    }
X  #ifdef POLYSELF
X***************
X*** 983,1029 ****
X  	    for(zx = (u.ux-9 < 0 ? 0 : u.ux-9); 
X  			zx < (u.ux+10 > COLNO ? COLNO : u.ux+10); zx++)
X  		show_map_spot(zx, zy);
X- }
X- 
X- int
X- destroy_arm(atmp)
X- register struct obj *atmp;
X- {
X- 	register struct obj *otmp;
X- 
X- 	if((otmp = uarmc) && (!atmp || atmp == uarmc)) {
X- 		Your("cloak crumbles and turns to dust!");
X- 		(void) Cloak_off();
X- 		useup(otmp);
X- 	} else if((otmp = uarm) && (!atmp || atmp == uarm)) {
X- 		Your("armor turns to dust and falls to the floor!");
X- 		(void) Armor_gone();
X- 		useup(otmp);
X- #ifdef SHIRT
X- 	} else if((otmp = uarmu) && (!atmp || atmp == uarmu)) {
X- 		Your("shirt crumbles into tiny threads and falls apart!");
X- 		useup(otmp);
X- #endif
X- 	} else if((otmp = uarmh) && (!atmp || atmp == uarmh)) {
X- 		Your("helmet turns to dust and is blown away!");
X- 		(void) Helmet_off();
X- 		useup(otmp);
X- 	} else if((otmp = uarmg) && (!atmp || atmp == uarmg)) {
X- 		Your("gloves vanish!");
X- 		(void) Gloves_off();
X- 		useup(otmp);
X- 		selftouch("You");
X- 	} else if((otmp = uarmf) && (!atmp || atmp == uarmf)) {
X- 		Your("boots disintegrate!");
X- 		(void) Boots_off();
X- 		useup(otmp);
X- 	} else if((otmp =uarms) && (!atmp || atmp == uarms)) {
X- 		Your("shield crumbles away!");
X- 		(void) Shield_off();
X- 		useup(otmp);
X- 	} else 	return(0);		/* could not destroy anything */
X- 
X- 	return(1);
X  }
X  
X  int
X--- 973,978 ----
X*** src/Old/restore.c	Fri Jul 28 01:59:18 1989
X--- src/restore.c	Thu Aug 17 00:20:55 1989
X***************
X*** 211,216
X  	mread(fd, (genericptr_t) &moves, sizeof moves);
X  	mread(fd, (genericptr_t) &wiz_level, sizeof wiz_level);
X  	mread(fd, (genericptr_t) &medusa_level, sizeof medusa_level);
X  #ifdef ORACLE
X  	mread(fd, (genericptr_t) &oracle_level, sizeof oracle_level);
X  #endif
X
X--- 211,217 -----
X  	mread(fd, (genericptr_t) &moves, sizeof moves);
X  	mread(fd, (genericptr_t) &wiz_level, sizeof wiz_level);
X  	mread(fd, (genericptr_t) &medusa_level, sizeof medusa_level);
X+ 	mread(fd, (genericptr_t) &bigroom_level, sizeof bigroom_level);
X  #ifdef ORACLE
X  	mread(fd, (genericptr_t) &oracle_level, sizeof oracle_level);
X  #endif
X***************
X*** 424,430
X  		pline("Strange, this map is not as I remember it.");
X  		pline("Somebody is trying some trickery here...");
X  		pline("This game is void.");
X! 		done("tricked");
X  	}
X  
X  	mread(fd, (genericptr_t) levl, sizeof(levl));
X
X--- 425,431 -----
X  		pline("Strange, this map is not as I remember it.");
X  		pline("Somebody is trying some trickery here...");
X  		pline("This game is void.");
X! 		done(TRICKED);
X  	}
X  
X  	mread(fd, (genericptr_t) levl, sizeof(levl));
X***************
X*** 598,603
X  
X  		mtmp2 = mtmp->nmon;
X  		if(mtmp->data->geno & G_GENOD) {
X  			mondead(mtmp);
X  			continue;
X  		}
X
X--- 599,607 -----
X  
X  		mtmp2 = mtmp->nmon;
X  		if(mtmp->data->geno & G_GENOD) {
X+ #ifdef KOPS
X+ 			allow_kops = FALSE;
X+ #endif
X  			mondead(mtmp);
X  #ifdef KOPS
X  			allow_kops = TRUE;
X***************
X*** 599,604
X  		mtmp2 = mtmp->nmon;
X  		if(mtmp->data->geno & G_GENOD) {
X  			mondead(mtmp);
X  			continue;
X  		}
X  
X
X--- 603,611 -----
X  			allow_kops = FALSE;
X  #endif
X  			mondead(mtmp);
X+ #ifdef KOPS
X+ 			allow_kops = TRUE;
X+ #endif
X  			continue;
X  		}
X  
X*** src/Old/rnd.c	Wed Aug 16 12:40:51 1989
X--- src/rnd.c	Wed Aug 16 10:32:27 1989
X***************
X*** 69,75 ****
X  {
X  	register int tmp = 1;
X  	while(!rn2(x)) tmp++;
X! 	return(tmp);
X  }
X  
X  #ifdef THEOLOGY
X--- 69,75 ----
X  {
X  	register int tmp = 1;
X  	while(!rn2(x)) tmp++;
X! 	return(min(tmp,(u.ulevel < 15) ? 5 : (int)u.ulevel/3));
X  }
X  
X  #ifdef THEOLOGY
X*** src/Old/rumors.c	Wed Aug 16 12:41:04 1989
X--- src/rumors.c	Tue Aug 15 21:57:08 1989
X***************
X*** 34,40 ****
X--- 34,50 ----
X  {
X  	register FILE *fp;
X  
X+ #ifdef OS2_CODEVIEW
X+ 	{
X+ 	char tmp[PATHLEN];
X+ 
X+ 	Strcpy(tmp,hackdir);
X+ 	append_slash(tmp);
X+ 	Strcat(tmp,RUMORFILE);
X+ 	if(fp = fopen(tmp, "r")) {
X+ #else
X  	if(fp = fopen(RUMORFILE, "r")) {
X+ #endif
X  	    (void) fread((genericptr_t)&true_rumor_size,sizeof(long),1,fp);
X  	    (void) fseek(fp, 0L, 2);
X  	    end_rumor_file = ftell(fp);
X***************
X*** 44,51 ****
X--- 54,74 ----
X  		pline("Can't open rumors file!");
X  		end_rumor_file = -1;	/* don't try to open it again */
X  	}
X+ #ifdef OS2_CODEVIEW
X+ 	}
X+ #endif
X  #ifdef ORACLE
X+ #ifdef OS2_CODEVIEW
X+ 	{
X+ 	char tmp[PATHLEN];
X+ 
X+ 	Strcpy(tmp,hackdir);
X+ 	append_slash(tmp);
X+ 	Strcat(tmp,ORACLEFILE);
X+ 	if(fp = fopen(tmp, "r")) {
X+ #else
X  	if(fp = fopen(ORACLEFILE, "r")) {
X+ #endif
X  	    (void) fseek(fp, 0L, 2);
X  	    oracle_size = ftell(fp);
X  	    (void) fclose(fp);
X***************
X*** 53,58 ****
X--- 76,84 ----
X  		pline("Can't open oracles file!");
X  		oracle_size = -1;	/* don't try to open it again */
X  	}
X+ #ifdef OS2_CODEVIEW
X+ 	}
X+ #endif
X  #endif
X  }
X  
X***************
X*** 76,82 ****
X--- 102,118 ----
X  	}
X  	if (end_rumor_file < 0) /* We couldn't open RUMORFILE */
X  		return;
X+ #ifdef OS2_CODEVIEW
X+ 	{
X+ 	char tmp[PATHLEN];
X+ 
X+ 	Strcpy(tmp,hackdir);
X+ 	append_slash(tmp);
X+ 	Strcat(tmp,RUMORFILE);
X+ 	if(rumors = fopen(tmp, "r")) {
X+ #else
X  	if(rumors = fopen(RUMORFILE, "r")) {
X+ #endif
X  		if (!end_rumor_file) {	/* if this is the first outrumor() */
X  			init_rumors();
X  		}
X***************
X*** 109,114 ****
X--- 145,153 ----
X  		pline("Can't open rumors file!");
X  		end_rumor_file = -1;	/* don't try to open it again */
X  	}
X+ #ifdef OS2_CODEVIEW
X+ 	}
X+ #endif
X  }
X  
X  #ifdef ORACLE
X***************
X*** 121,127 ****
X--- 160,176 ----
X  
X  	if (oracle_size < 0)	/* We couldn't open ORACLEFILE */
X  		return;
X+ #ifdef OS2_CODEVIEW
X+ 	{
X+     char tmp[PATHLEN];
X+ 
X+     Strcpy(tmp,hackdir);
X+     append_slash(tmp);
X+     Strcat(tmp,ORACLEFILE);
X+ 	if(oracles = fopen(tmp, "r")) {
X+ #else
X  	if(oracles = fopen(ORACLEFILE, "r")) {
X+ #endif
X  		if (!oracle_size) {	/* if this is the first outrumor() */
X  			init_rumors();
X  		}
X***************
X*** 148,153 ****
X--- 197,205 ----
X  		pline("Can't open oracles file!");
X  		oracle_size = -1;	/* don't try to open it again */
X  	}
X+ #ifdef OS2_CODEVIEW
X+ 	}
X+ #endif
X  }
X  
X  int
X*** src/Old/save.c	Wed Aug 16 12:41:20 1989
X--- src/save.c	Tue Aug 15 22:05:11 1989
X***************
X*** 52,58 ****
X--- 52,62 ----
X  		if(multi > 0) nomul(0);
X  	} else {
X  #ifdef EXPLORE_MODE
X+ # ifdef WIZARD
X+ 		if(!discover && !wizard) {
X+ # else
X  		if(!discover) {
X+ # endif
X  	pline("Do you want to create a non-scoring, restartable save file? ");
X  			if(yn() == 'y')  discover = TRUE;
X  		}
X***************
X*** 162,167 ****
X--- 166,172 ----
X  	bwrite(fd, (genericptr_t) &moves, sizeof moves);
X  	bwrite(fd, (genericptr_t) &wiz_level, sizeof wiz_level);
X  	bwrite(fd, (genericptr_t) &medusa_level, sizeof medusa_level);
X+ 	bwrite(fd, (genericptr_t) &bigroom_level, sizeof bigroom_level);
X  #ifdef ORACLE
X  	bwrite(fd, (genericptr_t) &oracle_level, sizeof oracle_level);
X  #endif
X***************
X*** 232,238 ****
X  		    if(!hu) pline("Error while saving: cannot read %s.", lock);
X  		    (void) close(fd);
X  		    (void) unlink(SAVEF);
X! 		    if(!hu) done("tricked");
X  		    return(0);
X  		}
X  #ifdef ZEROCOMP
X--- 237,243 ----
X  		    if(!hu) pline("Error while saving: cannot read %s.", lock);
X  		    (void) close(fd);
X  		    (void) unlink(SAVEF);
X! 		    if(!hu) done(TRICKED);
X  		    return(0);
X  		}
X  #ifdef ZEROCOMP
X*** src/Old/search.c	Wed Aug 16 12:41:46 1989
X--- src/search.c	Tue Aug 15 22:04:11 1989
X***************
X*** 201,208 ****
X  seemimic(mtmp)
X  register struct monst *mtmp;
X  {
X! 		mtmp->mimic = 0;
X! 		mtmp->mappearance = 0;
X! 		unpmon(mtmp);
X! 		pmon(mtmp);
X  }
X--- 201,208 ----
X  seemimic(mtmp)
X  register struct monst *mtmp;
X  {
X! 	mtmp->mimic = 0;
X! 	mtmp->mappearance = 0;
X! 	unpmon(mtmp);
X! 	pmon(mtmp);
X  }
X*** src/Old/shk.c	Wed Aug 16 12:42:05 1989
X--- src/shk.c	Wed Aug  2 20:48:09 1989
X***************
X*** 1302,1308 ****
X  register char *dmgstr;
X  {
X  	register struct monst *mtmp;
X- 	register int ox, oy;
X  	register int roomno = inroom(x, y);
X  	register int damage = (ACURR(A_STR) > 18) ? 400 : 20 * ACURR(A_STR);
X  
X--- 1302,1307 ----
X***************
X*** 1327,1337 ****
X  		return;
X  	}
X  
X- 	ox = shopkeeper->mx;
X- 	oy = shopkeeper->my;
X- 
X  	/* if he's not in his shop.. */
X! 	if(!in_shop(ox, oy)) return;
X  
X  	/* if a !shopkeeper shows up at the door, move him */
X  	if(levl[x][y].mmask && (mtmp = m_at(x, y)) != shopkeeper) {
X--- 1326,1333 ----
X  		return;
X  	}
X  
X  	/* if he's not in his shop.. */
X! 	if(!in_shop(shopkeeper->mx ,shopkeeper->my)) return;
X  
X  	/* if a !shopkeeper shows up at the door, move him */
X  	if(levl[x][y].mmask && (mtmp = m_at(x, y)) != shopkeeper) {
X***************
X*** 1376,1390 ****
X  		pline("Mollified, %s accepts your restitution.",
X  			shkname(shopkeeper));
X  
X! 		/* clear ox oy of another monster, if one got there somehow */
X! 		if(levl[ox][oy].mmask) mnearto(m_at(ox,oy),ox,oy,FALSE);
X! 
X! 		/* move shk back to his orig loc */
X! 		levl[shopkeeper->mx][shopkeeper->my].mmask = 0;
X! 		levl[ox][oy].mmask = 1;
X! 		shopkeeper->mx = ox;
X! 		shopkeeper->my = oy;
X! 		unpmon(shopkeeper);
X  		NOTANGRY(shopkeeper) = 1;
X  	}
X  	else {
X--- 1372,1379 ----
X  		pline("Mollified, %s accepts your restitution.",
X  			shkname(shopkeeper));
X  
X! 		/* move shk back to his home loc */
X! 		home_shk(shopkeeper);
X  		NOTANGRY(shopkeeper) = 1;
X  	}
X  	else {
X*** src/Old/shknam.c	Wed Aug 16 12:42:44 1989
X--- src/shknam.c	Fri Aug  4 11:38:47 1989
X***************
X*** 258,263 ****
X--- 258,265 ----
X  			return(-1);
X  		    }
X  
X+ 	if(levl[sx][sy].mmask) rloc(m_at(sx, sy)); /* insurance */
X+ 
X  	/* now initialize the shopkeeper monster structure */
X  	if(!(shk = makemon(&mons[PM_SHOPKEEPER], sx, sy))) return(-1);
X  	shk->isshk = shk->mpeaceful = 1;
X*** src/Old/sit.c	Wed Aug 16 12:43:02 1989
X--- src/sit.c	Tue Aug 15 20:35:12 1989
X***************
X*** 181,187 ****
X  			if (Inhell && !Fire_resistance) {
X  			    You("burn to a crisp.");
X  			    killer = "gremlin curse";
X! 			    done("died");
X  			} else You("feel warmer.");
X  			break;
X  		}
X--- 181,187 ----
X  			if (Inhell && !Fire_resistance) {
X  			    You("burn to a crisp.");
X  			    killer = "gremlin curse";
X! 			    done(BURNING);
X  			} else You("feel warmer.");
X  			break;
X  		}
X*** src/Old/sounds.c	Wed Aug 16 12:43:19 1989
X--- src/sounds.c	Mon Aug  7 23:10:57 1989
X***************
X*** 380,386 ****
X  	    break;
X  	case MS_HUMANOID:
X  	    /* Generic humanoid behaviour. */
X! 	    if (!mtmp->mpeaceful || !mtmp->mtame) break;
X  	    if (mtmp->mhp < 10)
X  		kludge("%s moans.", Monnam(mtmp));
X  	    else if (mtmp->mflee)
X--- 380,386 ----
X  	    break;
X  	case MS_HUMANOID:
X  	    /* Generic humanoid behaviour. */
X! 	    if (!mtmp->mpeaceful && !mtmp->mtame) break;
X  	    if (mtmp->mhp < 10)
X  		kludge("%s moans.", Monnam(mtmp));
X  	    else if (mtmp->mflee)
X***************
X*** 420,432 ****
X  	    break;
X  	case MS_SEDUCE:
X  # ifdef SEDUCE
X! 	    if ((mtmp->data==&mons[PM_SUCCUBUS] ||
X! 		mtmp->data==&mons[PM_INCUBUS])) {
X! 		doseduce(mtmp);
X! 		break;
X  	    }
X  # endif
X- 	    switch (poly_gender() == 0 ? rn2(3) : 0) {
X  		case 2:
X  			verbalize("Hello, sailor.");
X  			break;
X--- 420,434 ----
X  	    break;
X  	case MS_SEDUCE:
X  # ifdef SEDUCE
X! 	    if (mtmp->data->mlet != S_NYMPH &&
X! 		could_seduce(mtmp, &youmonst, (struct attack *)0) == 1) {
X! 			(void) doseduce(mtmp);
X! 			break;
X  	    }
X+ 	    switch ((poly_gender() != is_female(mtmp)) ? rn2(3) : 0) {
X+ # else
X+ 	    switch ((poly_gender() == 0) ? rn2(3) : 0) {
X  # endif
X  		case 2:
X  			verbalize("Hello, sailor.");
X  			break;
X*** src/Old/sp_lev.c	Wed Aug 16 12:43:41 1989
X--- src/sp_lev.c	Tue Aug 15 21:57:10 1989
X***************
X*** 571,577 ****
X--- 571,590 ----
X  	boolean result;
X  	schar c;
X  
X+ #ifdef OS2_CODEVIEW
X+ 	{
X+ 	char tmp[PATHLEN];
X+ 
X+ 	Strcpy(tmp,hackdir);
X+ 	append_slash(tmp);
X+ 	Strcat(tmp,name);
X+ 	fd = fopen(tmp, RDMODE);
X+ #else
X  	fd = fopen(name, RDMODE);
X+ #endif
X+ #ifdef OS2_CODEVIEW
X+ 	}
X+ #endif
X  	if (!fd) return FALSE;
X  
X  	if ((c = fgetc(fd)) == EOF) {
X*** src/Old/spell.c	Wed Aug 16 12:44:00 1989
X--- src/spell.c	Sat Aug  5 11:30:35 1989
X***************
X*** 1,6 ****
X  /*	SCCS Id: @(#)spell.c	3.0	88/09/18
X   *
X!  *	Copyright (c) M. Stepheneon 1988
X   */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X--- 1,6 ----
X  /*	SCCS Id: @(#)spell.c	3.0	88/09/18
X   *
X!  *	Copyright (c) M. Stephenson 1988
X   */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X*** src/Old/termcap.c	Wed Aug 16 12:44:34 1989
X--- src/termcap.c	Tue Aug 15 22:05:16 1989
X***************
X*** 8,13 ****
X--- 8,17 ----
X  #define MONATTK_H
X  #include "hack.h"	/* for ROWNO, COLNO, *HI, *HE, *AS, *AE */
X  
X+ #ifndef MSDOS
X+ # define TERMLIB	/* include termcap code */
X+ #endif
X+ 
X  #if !defined(SYSV) || defined(TOS) || defined(UNIXPC)
X  # ifndef LINT
X  extern			/* it is defined in libtermlib (libtermcap) */
X***************
X*** 24,34 ****
X  #endif /* MICROPORT_286_BUG **/
X  
X  static void nocmov();
X! #ifdef MSDOSCOLOR
X  static void init_hilite();
X! #endif /* MSDOSCOLOR */
X  
X- static char tbuf[512];
X  static char *HO, *CL, *CE, *UP, *CM, *ND, *XD, *BC, *SO, *SE, *TI, *TE;
X  static char *VS, *VE, *US, *UE;
X  static char *MR, *ME;
X--- 28,43 ----
X  #endif /* MICROPORT_286_BUG **/
X  
X  static void nocmov();
X! #ifdef TEXTCOLOR
X! # ifdef TERMLIB
X  static void init_hilite();
X! # endif
X! #define NONE		0
X! #define HIGH_INTENSITY	1
X! #define BLACK		0
X! #define HILITE_ATTRIB	HIGH_INTENSITY
X! #endif /* TEXTCOLOR */
X  
X  static char *HO, *CL, *CE, *UP, *CM, *ND, *XD, *BC, *SO, *SE, *TI, *TE;
X  static char *VS, *VE, *US, *UE;
X  static char *MR, *ME;
X***************
X*** 35,86 ****
X  #if 0
X  static char *MB, *MD, *MH;
X  #endif
X  static int SG;
X  static char PC = '\0';
X  
X! #if defined(MSDOS) && !defined(TERMLIB)
X  static char tgotobuf[20];
X! #ifdef TOS
X  #define tgoto(fmt, x, y)	(Sprintf(tgotobuf, fmt, y+' ', x+' '), tgotobuf)
X! #else
X  #define tgoto(fmt, x, y)	(Sprintf(tgotobuf, fmt, y+1, x+1), tgotobuf)
X! #endif
X! #endif /* MSDOS /**/
X  
X  void
X  startup()
X  {
X! #if defined(TOS) && !defined(TERMLIB)
X! 	HO = "\033H";
X! 	CL = "\033E";		/* the VT52 termcap */
X! 	CE = "\033K";
X! 	UP = "\033A";
X! 	CM = "\033Y%c%c";	/* used with function tgoto() */
X! 	ND = "\033C";
X! 	XD = "\033B";
X! 	BC = "\033D";
X! 	SO = "\033p";
X! 	SE = "\033q";
X! 	HI = "\033p";
X! 	HE = "\033q";
X! #else
X  	register char *term;
X  	register char *tptr;
X  	char *tbufptr, *pc;
X  	register int i;
X  
X  	if(!(term = getenv("TERM")))
X  # ifdef ANSI_DEFAULT
X  	{
X  		HO = "\033[H";
X  		CL = "\033[2J";		/* the ANSI termcap */
X  /*		CD = "\033[J"; */
X  		CE = "\033[K";
X  		CM = "\033[%i%d;%dH";
X  		UP = "\033[A";
X  		ND = "\033[C";
X  		XD = "\033[B";
X  		BC = "\033[D";
X  		HI = SO = "\033[1m";
X  		US = "\033[4m";
X  		MR = "\033[7m";
X--- 44,120 ----
X  #if 0
X  static char *MB, *MD, *MH;
X  #endif
X+ #ifdef TERMLIB
X  static int SG;
X  static char PC = '\0';
X+ static char tbuf[512];
X+ #endif
X  
X! #ifndef TERMLIB
X  static char tgotobuf[20];
X! # ifdef TOS
X  #define tgoto(fmt, x, y)	(Sprintf(tgotobuf, fmt, y+' ', x+' '), tgotobuf)
X! # else
X  #define tgoto(fmt, x, y)	(Sprintf(tgotobuf, fmt, y+1, x+1), tgotobuf)
X! # endif
X! #endif /* TERMLIB */
X  
X  void
X  startup()
X  {
X! #ifdef TERMLIB
X  	register char *term;
X  	register char *tptr;
X  	char *tbufptr, *pc;
X+ #endif
X  	register int i;
X  
X+ #ifdef TERMLIB
X  	if(!(term = getenv("TERM")))
X+ #endif
X+ #if defined(TOS) && defined(__GNUC__)	/* library has a default */
X+ 		term = "st52";
X+ #else
X  # ifdef ANSI_DEFAULT
X+ #  ifdef TOS
X+ 	{
X+ 		HO = "\033H";
X+ 		CL = "\033E";		/* the VT52 termcap */
X+ 		CE = "\033K";
X+ 		UP = "\033A";
X+ 		CM = "\033Y%c%c";	/* used with function tgoto() */
X+ 		ND = "\033C";
X+ 		XD = "\033B";
X+ 		BC = "\033D";
X+ 		SO = "\033p";
X+ 		SE = "\033q";
X+ 		HI = "\033p";
X+ 		HE = "\033q";
X+ 	}
X+ #  else /* TOS */
X  	{
X+ #   ifdef DGK
X+ 		get_scr_size();
X+ 		if(CO < COLNO || LI < ROWNO+3)
X+ 			setclipped();
X+ #   endif
X  		HO = "\033[H";
X  		CL = "\033[2J";		/* the ANSI termcap */
X  /*		CD = "\033[J"; */
X  		CE = "\033[K";
X+ #   ifndef TERMLIB
X+ 		CM = "\033[%d;%dH";
X+ #   else
X  		CM = "\033[%i%d;%dH";
X+ #   endif
X  		UP = "\033[A";
X  		ND = "\033[C";
X  		XD = "\033[B";
X+ #   ifdef MSDOS	/* backspaces are non-destructive */
X+ 		BC = "\b";
X+ #   else
X  		BC = "\033[D";
X+ #   endif
X  		HI = SO = "\033[1m";
X  		US = "\033[4m";
X  		MR = "\033[7m";
X***************
X*** 88,113 ****
X  		/* strictly, SE should be 2, and UE should be 24,
X  		   but we can't trust all ANSI emulators to be
X  		   that complete.  -3. */
X  		AS = "\016";
X  		AE = "\017";
X! 		VS = VE = "";
X! #  ifdef MSDOSCOLOR
X! 		HI_WHITE = HI;
X! 		HI_RED = "\033[1;31m";
X! 		HI_YELLOW = "\033[1;33m";
X! 		HI_GREEN = "\033[1;32m";
X! 		HI_BLUE = "\033[1;34m";
X! #  endif
X  		return;
X  	}
X  # else
X- #  if defined(TOS) && defined(__GNUC__)		/* library has a default */
X- 		term = "st52";
X- #  else
X  		error("Can't get TERM.");
X! #  endif
X! # endif
X! 
X  	tptr = (char *) alloc(1024);
X  
X  	tbufptr = tbuf;
X--- 122,147 ----
X  		/* strictly, SE should be 2, and UE should be 24,
X  		   but we can't trust all ANSI emulators to be
X  		   that complete.  -3. */
X+ #   if !defined(MSDOS) || defined(DECRAINBOW)
X  		AS = "\016";
X  		AE = "\017";
X! #   endif
X! 		TE = VS = VE = "";
X! #   ifdef TEXTCOLOR
X! 		for (i = 0; i < SIZE(HI_COLOR); i++) {
X! 			HI_COLOR[i] = (char *) alloc(sizeof("E[0;33;44m"));
X! 			Sprintf(HI_COLOR[i], "\033[%d;3%dm",
X! 				i == BLACK ? NONE : HILITE_ATTRIB, i);
X! 		}
X! #   endif
X  		return;
X  	}
X+ #  endif /* TOS */
X  # else
X  		error("Can't get TERM.");
X! # endif /* ANSI_DEFAULT */
X! #endif /* __GNUC__ */
X! #ifdef TERMLIB
X  	tptr = (char *) alloc(1024);
X  
X  	tbufptr = tbuf;
X***************
X*** 117,142 ****
X  		error("Unknown terminal type: %s.", term);
X  	if(pc = Tgetstr("pc"))
X  		PC = *pc;
X! #ifdef TERMINFO
X  	if(!(BC = Tgetstr("le"))) {	
X! #else
X  	if(!(BC = Tgetstr("bc"))) {	
X! #endif
X! #if !defined(MINIMAL_TERM) && !defined(HISX)
X  		if(!tgetflag("bs"))
X  			error("Terminal must backspace.");
X! #endif
X  		BC = tbufptr;
X  		tbufptr += 2;
X  		*BC = '\b';
X  	}
X! #ifdef MINIMAL_TERM
X  	HO = NULL;
X! #else
X  	HO = Tgetstr("ho");
X! #endif
X  	CO = tgetnum("co");
X  	LI = tgetnum("li");
X  	if(CO < COLNO || LI < ROWNO+3)
X  		setclipped();
X  	if(!(CL = Tgetstr("cl")))
X--- 151,188 ----
X  		error("Unknown terminal type: %s.", term);
X  	if(pc = Tgetstr("pc"))
X  		PC = *pc;
X! # ifdef TERMINFO
X  	if(!(BC = Tgetstr("le"))) {	
X! # else
X  	if(!(BC = Tgetstr("bc"))) {	
X! # endif
X! # if !defined(MINIMAL_TERM) && !defined(HISX)
X  		if(!tgetflag("bs"))
X  			error("Terminal must backspace.");
X! # endif
X  		BC = tbufptr;
X  		tbufptr += 2;
X  		*BC = '\b';
X  	}
X! # ifdef MINIMAL_TERM
X  	HO = NULL;
X! # else
X  	HO = Tgetstr("ho");
X! # endif
X! 	/*
X! 	 * LI and CO are set in ioctl.c via a TIOCGWINSZ if available.  If
X! 	 * the kernel has values for either we should use them rather than
X! 	 * the values from TERMCAP ...
X! 	 */
X! # ifndef DGK
X! 	if (!CO) CO = tgetnum("co");
X! 	if (!LI) LI = tgetnum("li");
X! # else
X  	CO = tgetnum("co");
X  	LI = tgetnum("li");
X+ 	if (!LI || !CO)			/* if we don't override it */
X+ 		get_scr_size();
X+ # endif
X  	if(CO < COLNO || LI < ROWNO+3)
X  		setclipped();
X  	if(!(CL = Tgetstr("cl")))
X***************
X*** 167,177 ****
X  	TI = Tgetstr("ti");
X  	TE = Tgetstr("te");
X  	VS = VE = "";
X! #if 0
X  	MB = Tgetstr("mb");	/* blink */
X  	MD = Tgetstr("md");	/* boldface */
X  	MH = Tgetstr("mh");	/* dim */
X! #endif
X  	MR = Tgetstr("mr");	/* reverse */
X  	ME = Tgetstr("me");
X  
X--- 213,223 ----
X  	TI = Tgetstr("ti");
X  	TE = Tgetstr("te");
X  	VS = VE = "";
X! # if 0
X  	MB = Tgetstr("mb");	/* blink */
X  	MD = Tgetstr("md");	/* boldface */
X  	MH = Tgetstr("mh");	/* dim */
X! # endif
X  	MR = Tgetstr("mr");	/* reverse */
X  	ME = Tgetstr("me");
X  
X***************
X*** 194,203 ****
X  	set_whole_screen();		/* uses LI and CD */
X  	if(tbufptr-tbuf > sizeof(tbuf)) error("TERMCAP entry too big...\n");
X  	free((genericptr_t)tptr);
X! # ifdef MSDOSCOLOR
X  	init_hilite();
X  # endif
X! #endif /* TOS /* */
X  }
X  
X  void
X--- 240,249 ----
X  	set_whole_screen();		/* uses LI and CD */
X  	if(tbufptr-tbuf > sizeof(tbuf)) error("TERMCAP entry too big...\n");
X  	free((genericptr_t)tptr);
X! # ifdef TEXTCOLOR
X  	init_hilite();
X  # endif
X! #endif /* TERMLIB */
X  }
X  
X  void
X***************
X*** 318,324 ****
X  xputs(s)
X  char *s;
X  {
X! #if defined(MSDOS) && !defined(TERMLIB)
X  	(void) fputs(s, stdout);
X  #else
X  # ifdef __STDC__
X--- 364,370 ----
X  xputs(s)
X  char *s;
X  {
X! #ifndef TERMLIB
X  	(void) fputs(s, stdout);
X  #else
X  # ifdef __STDC__
X***************
X*** 496,523 ****
X  	}
X  }
X  
X! #ifdef MSDOSCOLOR
X! /* Sets up highlighting, using ANSI escape sequences, for monsters,
X!  * objects, and gold (highlight code found in pri.c).
X!  * The termcap entry for HI (from SO) is scanned to find the background 
X!  * color. If everything is OK, monsters are displayed in the color
X!  * used to define HILITE_MONSTER, objects are displayed in the color
X!  * used to define HILITE_OBJECT, and gold is displayed in the color
X!  * used to define HILITE_GOLD. -3. */
X  
X! #define ESC		0x1b
X! #define NONE		0
X! #define HIGH_INTENSITY	1
X! #define BLACK		0
X! #define RED		1
X! #define GREEN		2
X! #define YELLOW		3
X! #define BLUE		4
X! #define MAGENTA		5
X! #define CYAN		6
X! #define WHITE		7
X  
X! #define HILITE_ATTRIB	HIGH_INTENSITY
X  
X  static void
X  init_hilite()
X--- 542,596 ----
X  	}
X  }
X  
X! #if defined(TEXTCOLOR) && defined(TERMLIB)
X! # ifdef UNIX
X! /*
X!  * Sets up color highlighting, using terminfo(4) escape sequences (highlight
X!  * code found in pri.c).  It is assumed that the background color is black.
X!  */
X! /* terminfo indexes for the basic colors it guarantees */
X! #define COLOR_BLACK   0
X! #define COLOR_BLUE    1
X! #define COLOR_GREEN   2
X! #define COLOR_CYAN    3
X! #define COLOR_RED     4
X! #define COLOR_MAGENTA 5
X! #define COLOR_YELLOW  6
X! #define COLOR_WHITE   7
X! 
X! /* map ANSI RGB to terminfo BGR */
X! const int ti_map[8] = {
X! 	COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW,
X! 	COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE };
X  
X! static void
X! init_hilite()
X! {
X! 	int erret;
X! 	char *setf, *scratch;
X! 	extern int setupterm();
X! 	extern char *tparm(), *tigetstr();
X  
X! 	for (c = 0; c < SIZE(HI_COLOR); c++)
X! 		HI_COLOR[c] = HI;
X! 
X! 	if (tgetnum("Co") < 8 || (setf = tgetstr("Sf", 0)) == (char *)NULL)
X! 		return;
X! 
X! 	for (c = 0; c < SIZE(HI_COLOR); c++) {
X! 		scratch = tparm(setf, ti_map[c]);
X! 		HI_COLOR[c] = (char *)alloc(strlen(scratch) + 1);
X! 		Strcpy(HI_COLOR[c], scratch);
X! 	}
X! }
X! 
X! # else /* UNIX */
X! 
X! /*
X!  * Sets up highlighting sequences, using ANSI escape sequences (highlight code
X!  * found in pri.c).  The termcap entry for HI (from SO) is scanned to find the
X!  * background color.
X!  */
X  
X  static void
X  init_hilite()
X***************
X*** 525,531 ****
X  	int backg = BLACK, foreg = WHITE, len;
X  	register int c, color;
X  
X! 	HI_RED = HI_YELLOW = HI_GREEN = HI_BLUE = HI_WHITE = HI;
X  
X  	/* find the background color, HI[len] == 'm' */
X  	len = strlen(HI) - 1;
X--- 598,605 ----
X  	int backg = BLACK, foreg = WHITE, len;
X  	register int c, color;
X  
X! 	for (c = 0; c < SIZE(HI_COLOR); c++)
X! 		HI_COLOR[c] = HI;
X  
X  	/* find the background color, HI[len] == 'm' */
X  	len = strlen(HI) - 1;
X***************
X*** 546,581 ****
X  	    c++;
X  	}
X  
X! 	/* avoid invisibility */
X! 	if (foreg != RED && backg != RED) {
X! 	    HI_RED = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 	    Sprintf(HI_RED, "%c[%d;3%d;4%dm", ESC, HILITE_ATTRIB,
X! 		    RED, backg);
X! 	}
X! 
X! 	if (foreg != YELLOW && backg != YELLOW) {
X! 	    HI_YELLOW = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 	    Sprintf(HI_YELLOW, "%c[%d;3%d;4%dm", ESC, HILITE_ATTRIB,
X! 		    YELLOW, backg);
X! 	}
X! 
X! 	if (foreg != GREEN && backg != GREEN) {
X! 	    HI_GREEN = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 	    Sprintf(HI_GREEN, "%c[%d;3%d;4%dm", ESC, HILITE_ATTRIB,
X! 		    GREEN, backg);
X! 	}
X! 
X! 	if (foreg != BLUE && backg != BLUE) {
X! 	    HI_BLUE = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 	    Sprintf(HI_BLUE, "%c[%d;3%d;4%dm", ESC, HILITE_ATTRIB,
X! 		    BLUE, backg);
X! 	}
X! 
X! 	if (foreg != WHITE && backg != WHITE) {
X! 	    HI_WHITE = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 	    Sprintf(HI_WHITE, "%c[%d;3%d;4%dm", ESC, HILITE_ATTRIB,
X! 		    WHITE, backg);
X! 	}
X  }
X! 
X! #endif
X--- 620,633 ----
X  	    c++;
X  	}
X  
X! 	for (c = 0; c < SIZE(HI_COLOR); c++)
X! 	    /* avoid invisibility */
X! 	    if (foreg != c && backg != c) {
X! 		HI_COLOR[c] = (char *) alloc(sizeof("E[0;33;44;54m"));
X! 		Sprintf(HI_COLOR[c], "\033[%d;3%d;4%dm",
X! 			c == BLACK ? NONE : HILITE_ATTRIB,
X! 			c, backg);
X! 	    }
X  }
X! # endif /* UNIX */
X! #endif /* TEXTCOLOR */
X*** src/Old/timeout.c	Wed Aug 16 12:44:59 1989
X--- src/timeout.c	Tue Aug 15 20:35:14 1989
X***************
X*** 78,89 ****
X  		else switch(upp - u.uprops){
X  		case STONED:
X  			killer = "cockatrice";
X! 			done("stoned");
X  			break;
X  		case SICK:
X  			You("die from food poisoning.");
X  			killer = u.usick_cause;
X! 			done("died");
X  			break;
X  		case FAST:
X  			You("feel yourself slowing down.");
X--- 78,89 ----
X  		else switch(upp - u.uprops){
X  		case STONED:
X  			killer = "cockatrice";
X! 			done(STONING);
X  			break;
X  		case SICK:
X  			You("die from food poisoning.");
X  			killer = u.usick_cause;
X! 			done(POISONING);
X  			break;
X  		case FAST:
X  			You("feel yourself slowing down.");
X***************
X*** 125,131 ****
X  			break;
X  		case STRANGLED:
X  			killer = "strangulation";
X! 			done("died");
X  			break;
X  		case FUMBLING:
X  			/* call this only when a move took place.  */
X--- 125,131 ----
X  			break;
X  		case STRANGLED:
X  			killer = "strangulation";
X! 			done(DIED);
X  			break;
X  		case FUMBLING:
X  			/* call this only when a move took place.  */
X*** src/Old/topl.c	Wed Aug 16 12:45:16 1989
X--- src/topl.c	Fri Aug 11 17:17:51 1989
X***************
X*** 6,11 ****
X--- 6,12 ----
X  
X  char toplines[BUFSIZ];
X  xchar tlx, tly;			/* set by pline; used by addtopl */
X+ static boolean no_repeat = FALSE;
X  
X  struct topl {
X  	struct topl *next_topl;
X***************
X*** 148,154 ****
X  	if(!line || !*line) return;
X  	if(!index(line, '%')) Strcpy(pbuf,line); else
X  	Sprintf(pbuf,line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
X! /*	if(flags.toplin == 1 && !strcmp(pbuf, toplines)) return;*/
X  	nscr();		/* %% */
X  
X  	/* If there is room on the line, print message on same line */
X--- 149,155 ----
X  	if(!line || !*line) return;
X  	if(!index(line, '%')) Strcpy(pbuf,line); else
X  	Sprintf(pbuf,line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
X! 	if(no_repeat && flags.toplin == 1 && !strcmp(pbuf, toplines)) return;
X  	nscr();		/* %% */
X  
X  	/* If there is room on the line, print message on same line */
X***************
X*** 201,206 ****
X--- 202,221 ----
X  		if(n0 && tl[0]) Strcat(tl, "\n");
X  	}
X  	redotoplin();
X+ }
X+ 
X+ /*VARARGS1*/
X+ void
X+ Norep(line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
X+ #ifndef TOS
X+ register
X+ #endif
X+ const char *line,*arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9;
X+ {
X+ 	no_repeat = TRUE;
X+ 	pline(line, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
X+ 	no_repeat = FALSE;
X+ 	return;
X  }
X  
X  /*VARARGS1*/
X*** src/Old/topten.c	Wed Aug 16 12:45:32 1989
X--- src/topten.c	Tue Aug 15 22:04:44 1989
X***************
X*** 48,55 ****
X  # ifdef NO_FILE_LINKS
X  	int lockfd ;
X  # endif
X  #endif /* UNIX */
X- 	int sleepct = 300;
X  	FILE *rfile;
X  	register int flg = 0;
X  #ifdef LOGFILE
X--- 48,55 ----
X  # ifdef NO_FILE_LINKS
X  	int lockfd ;
X  # endif
X+ 	int sleepct = 100;
X  #endif /* UNIX */
X  	FILE *rfile;
X  	register int flg = 0;
X  #ifdef LOGFILE
X***************
X*** 67,107 ****
X  #define	HUP	if(!done_hup)
X  #endif
X  
X- #ifdef UNIX
X- # ifdef NO_FILE_LINKS
X- 	reclock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(recfile)+7);
X- 	Strcpy(reclock,LOCKDIR) ;
X- 	Strcat(reclock,"/") ;
X- 	Strcat(reclock,recfile) ;
X- 	Strcat(reclock,"_lock") ;
X- 	while ((lockfd = open(reclock,O_RDWR|O_CREAT|O_EXCL,0666)) == -1) {
X- # else
X- 	while(link(recfile, reclock) == -1) {
X- # endif /* NO_FILE_LINKS */
X- 		HUP perror(reclock);
X- 		if(!sleepct--) {
X- 			HUP (void) puts("I give up.  Sorry.");
X- 			HUP (void) puts("Perhaps there is an old record_lock around?");
X- 			return;
X- 		}
X- 		HUP Printf("Waiting for access to record file. (%d)\n",
X- 			sleepct);
X- 		HUP (void) fflush(stdout);
X- # if defined(SYSV) || defined(ULTRIX)
X- 		(void)
X- # endif
X- 		    sleep(1);
X- 	}
X- #endif /* UNIX */
X- 	if(!(rfile = fopen(recfile,"r"))){
X- 		HUP (void) puts("Cannot open record file!");
X- 		goto unlock;
X- 	}
X- #ifdef NO_FILE_LINKS
X- 	(void) close(lockfd) ;
X- #endif
X- 	HUP (void) putchar('\n');
X- 
X  	/* create a new 'topten' entry */
X  	t0 = newttentry();
X  	t0->level = dlevel;
X--- 67,72 ----
X***************
X*** 118,125 ****
X  	(t0->death)[DTHSZ] = 0;
X  	Strcpy(t0->date, getdate());
X  
X- 	/* assure minimum number of points */
X- 	if(t0->points < POINTSMIN) t0->points = 0;
X  #ifdef LOGFILE		/* used for debugging (who dies of what, where) */
X  # ifdef UNIX
X  #  ifdef NO_FILE_LINKS
X--- 83,88 ----
X***************
X*** 168,175 ****
X--- 131,183 ----
X  # ifdef NO_FILE_LINKS
X  	(void) close(lockfd) ;
X  # endif
X+ # if defined(WIZARD) || defined(EXPLORE_MODE)
X+ 	if (wizard || discover) {
X+  Printf("\nSince you were in %s mode, the score list will not be checked.\n",
X+ 	wizard ? "wizard" : "discover");
X+ 		return;
X+ 	}
X+ # endif
X  #endif /* LOGFILE */
X  
X+ #ifdef UNIX
X+ # ifdef NO_FILE_LINKS
X+ 	reclock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(recfile)+7);
X+ 	Strcpy(reclock,LOCKDIR) ;
X+ 	Strcat(reclock,"/") ;
X+ 	Strcat(reclock,recfile) ;
X+ 	Strcat(reclock,"_lock") ;
X+ 	while ((lockfd = open(reclock,O_RDWR|O_CREAT|O_EXCL,0666)) == -1) {
X+ # else
X+ 	while(link(recfile, reclock) == -1) {
X+ # endif /* NO_FILE_LINKS */
X+ 		HUP perror(reclock);
X+ 		if(!sleepct--) {
X+ 			HUP (void) puts("I give up.  Sorry.");
X+ 			HUP (void) puts("Perhaps there is an old record_lock around?");
X+ 			return;
X+ 		}
X+ 		HUP Printf("Waiting for access to record file. (%d)\n",
X+ 			sleepct);
X+ 		HUP (void) fflush(stdout);
X+ # if defined(SYSV) || defined(ULTRIX)
X+ 		(void)
X+ # endif
X+ 		    sleep(1);
X+ 	}
X+ #endif /* UNIX */
X+ 	if(!(rfile = fopen(recfile,"r"))){
X+ 		HUP (void) puts("Cannot open record file!");
X+ 		goto unlock;
X+ 	}
X+ #ifdef NO_FILE_LINKS
X+ 	(void) close(lockfd) ;
X+ #endif
X+ 	HUP (void) putchar('\n');
X+ 
X+ 	/* assure minimum number of points */
X+ 	if(t0->points < POINTSMIN) t0->points = 0;
X+ 
X  	t1 = tt_head = newttentry();
X  	tprev = 0;
X  	/* rank0: -1 undefined, 0 not_on_list, n n_th on list */
X***************
X*** 320,358 ****
X  	char linebuf[BUFSZ];
X  	linebuf[0] = 0;
X  	if(rank) Sprintf(eos(linebuf), " %2d", rank);
X! 		else Sprintf(eos(linebuf), "   ");
X  	Sprintf(eos(linebuf), " %7ld  %.10s", t1->points, t1->name);
X  	Sprintf(eos(linebuf), "-%c ", t1->plchar);
X  	if(!strncmp("escaped", t1->death, 7)) {
X! 	  if(!strcmp(" (with amulet)", t1->death+7))
X! 	    Sprintf(eos(linebuf), "escaped the dungeon with amulet");
X  	  else
X  	    Sprintf(eos(linebuf), "escaped the dungeon [max level %d]",
X  	      t1->maxlvl);
X  #ifdef ENDGAME
X  	} else if(!strncmp("ascended", t1->death, 8)) {
X! 	   Sprintf(eos(linebuf), "ascended to demigod-hood");
X  #endif
X  	} else {
X  	  if(!strncmp(t1->death,"quit",4)) {
X  		quit = TRUE;
X! 		Sprintf(eos(linebuf), "quit");
X! 	  } else if(!strcmp(t1->death,"choked"))
X  		Sprintf(eos(linebuf), "choked on %s food",
X  			(t1->sex == 'F') ? "her" : "his");
X! 	  else if(!strncmp(t1->death,"starv",5)) {
X! 		Sprintf(eos(linebuf), "starved to death");
X  		starv = TRUE;
X  	  } else if(!strncmp(t1->death, "turned to stone by ",19)) {
X! 		Sprintf(eos(linebuf), "was petrified");
X  		isstoned = TRUE;
X  	  } else {
X! 		Sprintf(eos(linebuf), "was killed");
X  		iskilled = TRUE;
X  	  }
X  #ifdef ENDLEVEL
X  	  if (t1->level == ENDLEVEL)
X! 		Strcpy(eos(linebuf), " in the endgame");
X  	  else
X  #endif
X  	    Sprintf(eos(linebuf), " on%s level %d",
X--- 328,370 ----
X  	char linebuf[BUFSZ];
X  	linebuf[0] = 0;
X  	if(rank) Sprintf(eos(linebuf), " %2d", rank);
X! 		else Strcat(linebuf, "   ");
X  	Sprintf(eos(linebuf), " %7ld  %.10s", t1->points, t1->name);
X  	Sprintf(eos(linebuf), "-%c ", t1->plchar);
X  	if(!strncmp("escaped", t1->death, 7)) {
X! 	  if(!strcmp(" (with the Amulet)", t1->death+7))
X! 	    Strcat(linebuf, "escaped the dungeon with the Amulet");
X  	  else
X  	    Sprintf(eos(linebuf), "escaped the dungeon [max level %d]",
X  	      t1->maxlvl);
X  #ifdef ENDGAME
X  	} else if(!strncmp("ascended", t1->death, 8)) {
X! 	   Strcat(linebuf, "ascended to demigod-hood");
X  #endif
X  	} else {
X  	  if(!strncmp(t1->death,"quit",4)) {
X  		quit = TRUE;
X! 		Strcat(linebuf, "quit");
X! 	  } else if(!strcmp(t1->death,"choked")) {
X  		Sprintf(eos(linebuf), "choked on %s food",
X  			(t1->sex == 'F') ? "her" : "his");
X! 	  } else if(!strncmp(t1->death,"starv",5)) {
X! 		Strcat(linebuf, "starved to death");
X  		starv = TRUE;
X+ 	  } else if(!strcmp(t1->death,"poisoned")) {
X+ 		Strcat(linebuf, "was posioned");
X+ 	  } else if(!strcmp(t1->death,"crushed")) {
X+ 		Strcat(linebuf, "was crushed to death");
X  	  } else if(!strncmp(t1->death, "turned to stone by ",19)) {
X! 		Strcat(linebuf, "was petrified");
X  		isstoned = TRUE;
X  	  } else {
X! 		Strcat(linebuf, "was killed");
X  		iskilled = TRUE;
X  	  }
X  #ifdef ENDLEVEL
X  	  if (t1->level == ENDLEVEL)
X! 		Strcat(linebuf, " in the endgame");
X  	  else
X  #endif
X  	    Sprintf(eos(linebuf), " on%s level %d",
X***************
X*** 359,382 ****
X  	      (iskilled || isstoned || starv) ? "" : " dungeon", t1->level);
X  	  if(t1->maxlvl != t1->level)
X  	    Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
X! 	  if(quit && t1->death[4]) Sprintf(eos(linebuf), t1->death + 4);
X  	}
X  	if(iskilled) Sprintf(eos(linebuf), " by %s%s",
X  	  (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4)
X  	   || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4)
X! 	   || !strncmp(eos(t1->death)-4, "tion", 4)
X  	   ) ? "" :
X  	  index(vowels,*t1->death) ? "an " : "a ",
X  	  t1->death);
X  	if (isstoned) Sprintf(eos(linebuf), " by %s%s", index(vowels,
X  		*(t1->death + 19)) ? "an " : "a ", t1->death + 19);
X! 	Sprintf(eos(linebuf), ".");
X  	if(t1->maxhp) {
X  	  register char *bp = eos(linebuf);
X  	  char hpbuf[10];
X  	  int hppos;
X  	  int lngr = strlen(linebuf);
X! 	  Sprintf(hpbuf, (t1->hp > 0) ? itoa(t1->hp) : "-");
X  	  hppos = COLNO - 7 - strlen(hpbuf);
X  	  if (lngr >= hppos) hppos = (2*COLNO) - 7 - strlen(hpbuf);
X  	  if(bp <= linebuf + hppos) {
X--- 371,394 ----
X  	      (iskilled || isstoned || starv) ? "" : " dungeon", t1->level);
X  	  if(t1->maxlvl != t1->level)
X  	    Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
X! 	  if(quit && t1->death[4]) Strcat(linebuf, t1->death + 4);
X  	}
X  	if(iskilled) Sprintf(eos(linebuf), " by %s%s",
X  	  (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4)
X  	   || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4)
X! 	   || !strncmp(eos(t1->death)-5, "ation", 5)
X  	   ) ? "" :
X  	  index(vowels,*t1->death) ? "an " : "a ",
X  	  t1->death);
X  	if (isstoned) Sprintf(eos(linebuf), " by %s%s", index(vowels,
X  		*(t1->death + 19)) ? "an " : "a ", t1->death + 19);
X! 	Strcat(linebuf, ".");
X  	if(t1->maxhp) {
X  	  register char *bp = eos(linebuf);
X  	  char hpbuf[10];
X  	  int hppos;
X  	  int lngr = strlen(linebuf);
X! 	  Strcpy(hpbuf, (t1->hp > 0) ? itoa(t1->hp) : "-");
X  	  hppos = COLNO - 7 - strlen(hpbuf);
X  	  if (lngr >= hppos) hppos = (2*COLNO) - 7 - strlen(hpbuf);
X  	  if(bp <= linebuf + hppos) {
X*** src/Old/trap.c	Wed Aug 16 12:46:13 1989
X--- src/trap.c	Wed Aug 16 10:15:44 1989
X***************
X*** 259,265 ****
X  			fobj->quan = 1;
X  			fobj->owt = weight(fobj);
X  			stackobj(fobj);
X! 			if(Invisible) newsym(u.ux, u.uy);
X  		    } else {
X  			register int newlevel = dlevel + 1;
X  			while(!rn2(4) && newlevel < 29) newlevel++;
X--- 259,269 ----
X  			fobj->quan = 1;
X  			fobj->owt = weight(fobj);
X  			stackobj(fobj);
X! 			if(Invisible
X! #ifdef POLYSELF
X! 				|| u.uundetected
X! #endif
X! 						) newsym(u.ux, u.uy);
X  		    } else {
X  			register int newlevel = dlevel + 1;
X  			while(!rn2(4) && newlevel < 29) newlevel++;
X***************
X*** 422,427 ****
X--- 426,433 ----
X  		    selftouch("Falling, you");
X  		    break;
X  		case LEVEL_TELEP:
X+ 		{   int oldl = dlevel;
X+ 
X  		    pline("You have %s onto a level teleport trap!",
X  #ifdef POLYSELF
X  			is_flyer(uasmon) ? "flown" :
X***************
X*** 429,436 ****
X  #else
X  			Levitation ? "moved" : "stepped");
X  #endif
X! 		    if(Antimagic)
X  			shieldeff(u.ux, u.uy);
X  		    if(Antimagic
X  #ifdef ENDGAME
X  				|| dlevel == ENDLEVEL
X--- 435,444 ----
X  #else
X  			Levitation ? "moved" : "stepped");
X  #endif
X! 		    if(Antimagic) {
X! 			pru();
X  			shieldeff(u.ux, u.uy);
X+ 		    }
X  		    if(Antimagic
X  #ifdef ENDGAME
X  				|| dlevel == ENDLEVEL
X***************
X*** 446,451 ****
X--- 454,468 ----
X  		    deltrap(trap);
X  		    newsym(u.ux,u.uy);
X  		    level_tele();
X+ 		    if(oldl == dlevel && !Invisible
X+ #ifdef POLYSELF
X+ 						&& !u.uundetected
X+ #endif
X+ 								) {
X+ 			levl[u.ux][u.uy].seen = 0; /* force atl */
X+ 			atl(u.ux,u.uy,(char)u.usym);
X+ 		    }
X+ 		}
X  		    break;
X  #ifdef SPELLS
X  		case ANTI_MAGIC:
X***************
X*** 477,483 ****
X  			u.uen = (u.uenmax += 2);
X  #endif
X  			deltrap(trap);
X! 			if(Invisible) newsym(u.ux,u.uy);
X  		    } else domagictrap();
X  		    break;
X  		case SQBRD:	    /* Stepped on a squeaky board. */
X--- 494,504 ----
X  			u.uen = (u.uenmax += 2);
X  #endif
X  			deltrap(trap);
X! 			if(Invisible
X! #ifdef POLYSELF
X! 				&& !u.uundetected
X! #endif
X! 						) newsym(u.ux,u.uy);
X  		    } else domagictrap();
X  		    break;
X  		case SQBRD:	    /* Stepped on a squeaky board. */
X***************
X*** 604,610 ****
X  	/* A bug fix for dumb messages by ab@unido.
X  	 */
X  	    int in_sight = cansee(mtmp->mx,mtmp->my)
X! 			   && (!mtmp->minvis || See_invisible);
X  
X  	    if(mtmp->mtrapseen & (1 << tt)) {
X  		/* he has been in such a trap - perhaps he escapes */
X--- 625,631 ----
X  	/* A bug fix for dumb messages by ab@unido.
X  	 */
X  	    int in_sight = cansee(mtmp->mx,mtmp->my)
X! 			   && (!mtmp->minvis || See_invisible || Telepat);
X  
X  	    if(mtmp->mtrapseen & (1 << tt)) {
X  		/* he has been in such a trap - perhaps he escapes */
X***************
X*** 822,828 ****
X  		pline("%s touch the cockatrice corpse.", arg);
X  		You("turn to stone...");
X  		killer = "cockatrice corpse accident";
X! 		done("stoned");
X  	}
X  }
X  
X--- 843,849 ----
X  		pline("%s touch the cockatrice corpse.", arg);
X  		You("turn to stone...");
X  		killer = "cockatrice corpse accident";
X! 		done(STONING);
X  	}
X  }
X  
X***************
X*** 910,915 ****
X--- 931,938 ----
X  		pline("Being unconscious, you cannot control your teleport.");
X  	    else {
X  		    pline("To what position do you want to be teleported?");
X+ 		    cc.x = u.ux;
X+ 		    cc.y = u.uy;
X  		    getpos(&cc, 1, "the desired position"); /* 1: force valid */
X  		    /* possible extensions: introduce a small error if
X  		       magic power is low; allow transfer to solid rock */
X***************
X*** 1116,1122 ****
X  			You("arrive in heaven.");
X  			pline("\"You are here a bit early, but we'll let you in.\"");
X  			killer = "visit to heaven";
X! 			done("died");
X  		} else	if (newlevel == -9) {
X  			You("feel deliriously happy. ");
X  			pline("(In fact, you're on Cloud 9!) ");
X--- 1139,1145 ----
X  			You("arrive in heaven.");
X  			pline("\"You are here a bit early, but we'll let you in.\"");
X  			killer = "visit to heaven";
X! 			done(DIED);
X  		} else	if (newlevel == -9) {
X  			You("feel deliriously happy. ");
X  			pline("(In fact, you're on Cloud 9!) ");
X***************
X*** 1131,1137 ****
X  		if(Levitation) {
X  		    You("float gently down to earth.");
X  #ifndef STRONGHOLD
X! 		    done("escaped");
X  #endif
X  		}
X  #ifdef POLYSELF
X--- 1154,1160 ----
X  		if(Levitation) {
X  		    You("float gently down to earth.");
X  #ifndef STRONGHOLD
X! 		    done(ESCAPED);
X  #endif
X  		}
X  #ifdef POLYSELF
X***************
X*** 1138,1144 ****
X  		if(is_flyer(uasmon)) {
X  		    You("fly down to earth.");
X  # ifndef STRONGHOLD
X! 		    done("escaped");
X  # endif
X  		}
X  #endif
X--- 1161,1167 ----
X  		if(is_flyer(uasmon)) {
X  		    You("fly down to earth.");
X  # ifndef STRONGHOLD
X! 		    done(ESCAPED);
X  # endif
X  		}
X  #endif
X***************
X*** 1146,1152 ****
X  		You("plummet a few thousand feet to your death.");
X  		dlevel = 0;
X  		killer = "long fall";
X! 		done("died");
X  #ifdef WALKIES
X  	    } else {
X  		You("shudder for a moment...");
X--- 1169,1175 ----
X  		You("plummet a few thousand feet to your death.");
X  		dlevel = 0;
X  		killer = "long fall";
X! 		done(DIED);
X  #ifdef WALKIES
X  	    } else {
X  		You("shudder for a moment...");
X***************
X*** 1154,1160 ****
X  	    }
X  #endif
X  	}
X! 	/* calls done("escaped") if newlevel==0 */
X  #ifdef WALKIES
X  	if(!pet_by_u)
X  	    You("shudder for a moment...");
X--- 1177,1183 ----
X  	    }
X  #endif
X  	}
X! 	/* calls done(ESCAPED) if newlevel==0 */
X  #ifdef WALKIES
X  	if(!pet_by_u)
X  	    You("shudder for a moment...");
X***************
X*** 1313,1319 ****
X  	}
X  	You("drown.");
X  	killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat";
X! 	done("drowned");
X  }
X  
X  #ifdef SPELLS
X--- 1336,1342 ----
X  	}
X  	You("drown.");
X  	killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat";
X! 	done(DROWNING);
X  }
X  
X  #ifdef SPELLS
X***************
X*** 1364,1370 ****
X  				case 'n': continue;
X  			    }
X  
X! 			    if((otmp->otrapped && !confused && rn2(44-dlevel*2) < 10)
X  			       || confused && !rn2(3)) {
X  				You("find a trap on the %s!  Disarm it? ",
X  				       xname(otmp));
X--- 1387,1394 ----
X  				case 'n': continue;
X  			    }
X  
X! 			    if((otmp->otrapped && !confused 
X! 					&& rn2(MAXLEVEL+2-dlevel) < 10)
X  			       || confused && !rn2(3)) {
X  				You("find a trap on the %s!  Disarm it? ",
X  				       xname(otmp));
X***************
X*** 1383,1389 ****
X  					chest_trap(otmp, FINGER);
X  				    } else {
X  					You("disarm it!");
X! 					otmp->otrapped = 0;
X  				    }
X  				} else pline("That %s was not trapped.",
X  					     doname(otmp));
X--- 1407,1413 ----
X  					chest_trap(otmp, FINGER);
X  				    } else {
X  					You("disarm it!");
X! 				        otmp->otrapped = 0;
X  				    }
X  				} else pline("That %s was not trapped.",
X  					     doname(otmp));
X***************
X*** 1422,1428 ****
X  	}
X  
X  	if ((levl[x][y].doormask & D_TRAPPED && !confused &&
X! 	     rn2(44-dlevel*2) < 10)
X  	    || confused && !rn2(3)) {
X  		You("find a trap on the door!  Disarm it? ");
X  		if (ynq() != 'y') return(1);
X--- 1446,1452 ----
X  	}
X  
X  	if ((levl[x][y].doormask & D_TRAPPED && !confused &&
X! 	     rn2(MAXLEVEL+2-dlevel) < 10)
X  	    || confused && !rn2(3)) {
X  		You("find a trap on the door!  Disarm it? ");
X  		if (ynq() != 'y') return(1);
X***************
X*** 1433,1442 ****
X  		    if(confused || Fumbling || rnd(75+dlevel/2) > ch) {
X  			    You("set it off!");
X  			    b_trapped("door");
X! 		    } else {
X  			    You("disarm it!");
X! 			    levl[x][y].doormask &= ~D_TRAPPED;
X! 		    }
X  		} else pline("This door was not trapped.");
X  		return(1);
X  	} else {
X--- 1457,1465 ----
X  		    if(confused || Fumbling || rnd(75+dlevel/2) > ch) {
X  			    You("set it off!");
X  			    b_trapped("door");
X! 		    } else
X  			    You("disarm it!");
X! 		    levl[x][y].doormask &= ~D_TRAPPED;
X  		} else pline("This door was not trapped.");
X  		return(1);
X  	} else {
X***************
X*** 1581,1591 ****
X  b_trapped(item)		/* used for doors. can be used */
X  register char *item;    /* for anything else that opens */
X  {
X! 	register int dmg = rn2(15) + rnd((int)u.ulevel);
X  
X  	pline("KABOOM!!  The %s was booby-trapped!", item);
X  	make_stunned(HStun + dmg, TRUE);
X- 	losehp(dmg, "explosion");
X  }
X  
X  /* Monster is hit by trap. */
X--- 1604,1616 ----
X  b_trapped(item)		/* used for doors. can be used */
X  register char *item;    /* for anything else that opens */
X  {
X! 	register int dmg = rnd(5+(dlevel < 5 ? dlevel : 2+dlevel/2));
X  
X  	pline("KABOOM!!  The %s was booby-trapped!", item);
X+ 	if(u.ulevel < 4 && dlevel < 3 && !rn2(3)) 
X+ 		You("are shaken, but luckily unhurt.");		
X+ 	else losehp(dmg, "explosion");
X  	make_stunned(HStun + dmg, TRUE);
X  }
X  
X  /* Monster is hit by trap. */
X*** src/Old/u_init.c	Wed Aug 16 12:47:06 1989
X--- src/u_init.c	Tue Aug  8 21:44:38 1989
X***************
X*** 534,547 ****
X  		 * items: wand of wishing, ring of levitation, or the
X  		 * polymorph/polymorph control combination.  Specific objects,
X  		 * i.e. the discovery wishing, are still OK.
X  		 */
X  		if (undefined) {
X  #ifdef POLYSELF
X! 			static int nocreate = STRANGE_OBJECT;
X  #  ifdef SPELLS
X! 			static int nocreate2 = STRANGE_OBJECT;
X  #  endif
X  #endif
X  
X  			while(obj->otyp == WAN_WISHING
X  #ifdef POLYSELF
X--- 534,552 ----
X  		 * items: wand of wishing, ring of levitation, or the
X  		 * polymorph/polymorph control combination.  Specific objects,
X  		 * i.e. the discovery wishing, are still OK.
X+ 		 * Also, don't get a couple of really useless items.  (Note:
X+ 		 * punishment isn't "useless".  Some players who start out with
X+ 		 * one will immediately read it and use the iron ball as a
X+ 		 * weapon.)
X  		 */
X  		if (undefined) {
X  #ifdef POLYSELF
X! 			int nocreate = STRANGE_OBJECT;
X  #  ifdef SPELLS
X! 			int nocreate2 = STRANGE_OBJECT;
X  #  endif
X  #endif
X+ 			int nocreate3 = STRANGE_OBJECT;
X  
X  			while(obj->otyp == WAN_WISHING
X  #ifdef POLYSELF
X***************
X*** 550,558 ****
X--- 555,571 ----
X  				|| obj->otyp == nocreate2
X  #  endif
X  #endif
X+ 				|| obj->otyp == nocreate3
X  #ifdef ELBERETH
X  				|| obj->otyp == RIN_LEVITATION
X  #endif
X+ 				/* 'useless' items */
X+ 				|| obj->otyp == POT_HALLUCINATION
X+ 				|| obj->otyp == SCR_AMNESIA
X+ 				|| obj->otyp == SCR_FIRE
X+ 				|| obj->otyp == RIN_AGGRAVATE_MONSTER
X+ 				|| obj->otyp == RIN_HUNGER
X+ 				|| obj->otyp == WAN_NOTHING
X  							) {
X  				free((genericptr_t) obj);
X  				obj = mkobj(trop->trolet, FALSE);
X***************
X*** 565,578 ****
X  			/* Heavily relies on the fact that 1) we create wands
X  			 * before rings, 2) that we create rings before
X  			 * spellbooks, and that 3) not more than 1 object of a
X! 			 * particular symbol is to be prohibited.
X  			 */
X  #ifdef POLYSELF
X! 			if (obj->otyp == WAN_POLYMORPH)
X  				nocreate = RIN_POLYMORPH_CONTROL;
X! 			if (obj->otyp == RIN_POLYMORPH)
X! 				nocreate = RIN_POLYMORPH_CONTROL;
X! 			if (obj->otyp == RIN_POLYMORPH_CONTROL) {
X  				nocreate = RIN_POLYMORPH;
X  #  ifdef SPELLS
X  				nocreate2 = SPE_POLYMORPH;
X--- 578,593 ----
X  			/* Heavily relies on the fact that 1) we create wands
X  			 * before rings, 2) that we create rings before
X  			 * spellbooks, and that 3) not more than 1 object of a
X! 			 * particular symbol is to be prohibited.  (For more
X! 			 * objects, we need more nocreate variables...)
X  			 */
X  #ifdef POLYSELF
X! 			switch (obj->otyp) {
X! 			    case WAN_POLYMORPH:
X! 			    case RIN_POLYMORPH:
X  				nocreate = RIN_POLYMORPH_CONTROL;
X! 				break;
X! 			    case RIN_POLYMORPH_CONTROL:
X  				nocreate = RIN_POLYMORPH;
X  #  ifdef SPELLS
X  				nocreate2 = SPE_POLYMORPH;
X***************
X*** 579,584 ****
X--- 594,602 ----
X  #  endif /* SPELLS */
X  			}
X  #endif /* POLYSELF */
X+ 			/* Don't have 2 of the same ring */
X+ 			if (obj->olet == RING_SYM)
X+ 				nocreate3 = obj->otyp;
X  		}
X  
X  		obj->bknown = trop->trknown;
X***************
X*** 606,612 ****
X  				&& obj->otyp != SACK
X  				&& obj->otyp != CHEST
X  				&& obj->otyp != LARGE_BOX
X! 				&& obj->otyp != ICE_BOX)
X  		}
X  		*/
X  		if(trop->trspe != UNDEF_SPE)
X--- 624,630 ----
X  				&& obj->otyp != SACK
X  				&& obj->otyp != CHEST
X  				&& obj->otyp != LARGE_BOX
X! 				&& obj->otyp != ICE_BOX);
X  		}
X  		*/
X  		if(trop->trspe != UNDEF_SPE)
END_OF_FILE
if test 53958 -ne `wc -c <'patch02g'`; then
    echo shar: \"'patch02g'\" unpacked with wrong size!
fi
# end of 'patch02g'
fi
echo shar: End of archive 7 \(of 7\).
cp /dev/null ark7isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 7 archives.
    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