[comp.sources.games.bugs] NetHack 2.3 Update Pt. 06 of 12

mike@genpyr.UUCP (Mike Stephenson) (04/12/88)

-------------------------------cut here---------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	Update.2.3.b
# This archive created: Mon Apr  4 08:52:30 1988
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Update.2.3.b'" '(38558 characters)'
if test -f 'Update.2.3.b'
then
	echo shar: will not over-write existing file "'Update.2.3.b'"
else
cat << \SHAR_EOF > 'Update.2.3.b'
*** ./dothrow.c.orig	Mon Feb 22 08:40:02 1988
--- ./dothrow.c	Tue Feb  2 08:28:47 1988
***************
*** 1,4
! /*	SCCS Id: @(#)dothrow.c	2.1	87/11/01
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  /* dothrow.c - version 1.0 */
  

--- 1,4 -----
! /*	SCCS Id: @(#)dothrow.c	2.3	88/02/02
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* Contains code for 't' (throw) */
***************
*** 1,6
  /*	SCCS Id: @(#)dothrow.c	2.1	87/11/01
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
- /* dothrow.c - version 1.0 */
  
  /* Contains code for 't' (throw) */
  

--- 1,5 -----
  /*	SCCS Id: @(#)dothrow.c	2.3	88/02/02
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  /* Contains code for 't' (throw) */
  
***************
*** 158,165
  	} else	if(obj->otyp == MIRROR) {
  	    	pline ("The mirror shatters.  That's seven years bad luck!");
  		obfree(obj, Null(obj));
! 		u.uluck -= 2;
! 		if ((int)u.uluck < LUCKMIN) u.uluck = LUCKMIN;
  #endif	
  	} else	if(obj->otyp == EGG) {
  		pline("\"Splash!\"");

--- 157,163 -----
  	} else	if(obj->otyp == MIRROR) {
  	    	pline ("The mirror shatters.  That's seven years bad luck!");
  		obfree(obj, Null(obj));
! 		change_luck(-2);
  #endif	
  	} else	if(obj->otyp == EGG) {
  		pline("\"Splash!\"");
***************
*** 254,260
  			if(obj->dknown &&
  			   objects[obj->otyp].oc_name_known)  {
  				if(objects[obj->otyp].g_val > 0)  {
! 					u.uluck += 5;
  					strcat(buf,addluck);
  				}  else
  					strcat(buf,nogood);

--- 252,258 -----
  			if(obj->dknown &&
  			   objects[obj->otyp].oc_name_known)  {
  				if(objects[obj->otyp].g_val > 0)  {
! 					change_luck(5);
  					strcat(buf,addluck);
  				}  else
  					strcat(buf,nogood);
***************
*** 259,265
  				}  else
  					strcat(buf,nogood);
  			}  else  {  /* value unknown to @ */
! 				u.uluck++;
  				strcat(buf,addluck);
  			}
  			if(u.uluck > LUCKMAX)   /* dan@ut-ngp */

--- 257,263 -----
  				}  else
  					strcat(buf,nogood);
  			}  else  {  /* value unknown to @ */
! 				change_luck(1);
  				strcat(buf,addluck);
  			}
  			pline(buf);
***************
*** 262,269
  				u.uluck++;
  				strcat(buf,addluck);
  			}
- 			if(u.uluck > LUCKMAX)   /* dan@ut-ngp */
- 				u.uluck = LUCKMAX;
  			pline(buf);
  			mpickobj(mon, obj);
  			rloc(mon);

--- 260,265 -----
  				change_luck(1);
  				strcat(buf,addluck);
  			}
  			pline(buf);
  			mpickobj(mon, obj);
  			rloc(mon);
*** ./eat.c.orig	Mon Feb 22 08:40:02 1988
--- ./eat.c	Wed Dec 16 12:33:42 1987
***************
*** 1,4
! /*	SCCS Id: @(#)eat.c	2.2	87/11/29
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)eat.c	2.3	87/12/16
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"
***************
*** 448,453
  	else if (otmp->otyp == DEAD_GIANT) let='9';
  	else let = CORPSE_I_TO_C(otmp->otyp);
  #endif
  	if(let != 'a' && moves > otmp->age + 50 + rn2(100)) {
  		tp++;
  		pline("Ulch -- that meat was tainted!");

--- 448,456 -----
  	else if (otmp->otyp == DEAD_GIANT) let='9';
  	else let = CORPSE_I_TO_C(otmp->otyp);
  #endif
+ #ifdef SAC
+ 	if(otmp->otyp == DEAD_SOLDIER) let='3';
+ #endif /* SAC */
  	if(let != 'a' && moves > otmp->age + 50 + rn2(100)) {
  		tp++;
  		pline("Ulch -- that meat was tainted!");
*** ./end.c.orig	Mon Feb 22 08:40:03 1988
--- ./end.c	Thu Mar 31 11:37:29 1988
***************
*** 1,4
! /*	SCCS Id: @(#)end.c	2.1	87/10/07
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include <stdio.h>

--- 1,4 -----
! /*	SCCS Id: @(#)end.c	2.3	87/12/16
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include <stdio.h>
***************
*** 55,62
  done_in_by(mtmp)
  register struct monst *mtmp;
  {
! 	char *hallmon();
! 	static char buf[BUFSZ], *prefix;
  	extern char *eos(), *shkname();
  	pline("You die ...");
  	if (Hallucination) { 

--- 55,61 -----
  done_in_by(mtmp)
  register struct monst *mtmp;
  {
! 	static char buf[BUFSZ];
  	extern char *eos(), *shkname();
  
  	pline("You die ...");
***************
*** 58,63
  	char *hallmon();
  	static char buf[BUFSZ], *prefix;
  	extern char *eos(), *shkname();
  	pline("You die ...");
  	if (Hallucination) { 
  		Sprintf(buf, "hallucinated %s (actually ", hallmon()); 

--- 57,63 -----
  {
  	static char buf[BUFSZ];
  	extern char *eos(), *shkname();
+ 
  	pline("You die ...");
  	Sprintf(buf, "");
  	if (mtmp->minvis)
***************
*** 59,68
  	static char buf[BUFSZ], *prefix;
  	extern char *eos(), *shkname();
  	pline("You die ...");
! 	if (Hallucination) { 
! 		Sprintf(buf, "hallucinated %s (actually ", hallmon()); 
! 		prefix = (index("aeiou",*mtmp->data->mname) ? "an" : "a");
! 	}
  	if(mtmp->data->mlet == ' ') {
  		if (Hallucination) Sprintf(eos(buf), "the ghost of %s)",
  					   (char *) mtmp->mextra);

--- 59,70 -----
  	extern char *eos(), *shkname();
  
  	pline("You die ...");
! 	Sprintf(buf, "");
! 	if (mtmp->minvis)
! 		Sprintf(eos(buf), "invisible ");
! 	if (Hallucination)
! 		Sprintf(eos(buf), "hallucinogen-distorted ");
! 
  	if(mtmp->data->mlet == ' ') {
  		register char *gn = (char *) mtmp->mextra;
  		if (!Hallucination && !mtmp->minvis && *gn)
***************
*** 64,82
  		prefix = (index("aeiou",*mtmp->data->mname) ? "an" : "a");
  	}
  	if(mtmp->data->mlet == ' ') {
! 		if (Hallucination) Sprintf(eos(buf), "the ghost of %s)",
! 					   (char *) mtmp->mextra);
! 		else Sprintf(buf, "the ghost of %s", (char *) mtmp->mextra);
! 	} else if(mtmp->mnamelth) {
! 		if (Hallucination) Sprintf(eos(buf), "%s %s called %s)",
! 					   prefix, mtmp->data->mname,
! 					   NAME(mtmp));
! 		else Sprintf(buf, "%s called %s",
! 			     mtmp->data->mname, NAME(mtmp));
! 	} else if(mtmp->minvis) {
! 		if (Hallucination) Sprintf(eos(buf), "an invisible %s)",
! 					   mtmp->data->mname);
! 		else Sprintf(buf, "invisible %s", mtmp->data->mname);
  	} else if(mtmp->isshk) {
  		if (Hallucination) Sprintf(eos(buf), "%s %s the shopkeeper)",
  					   rn2(2) ? "Mr." : "Ms.",

--- 66,75 -----
  		Sprintf(eos(buf), "hallucinogen-distorted ");
  
  	if(mtmp->data->mlet == ' ') {
! 		register char *gn = (char *) mtmp->mextra;
! 		if (!Hallucination && !mtmp->minvis && *gn)
! 			Sprintf(eos(buf), "the ");
! 		Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn);
  	} else if(mtmp->isshk) {
  		Sprintf(eos(buf), "%s %s, the shopkeeper)",
  			(rn2(2) ? "Mr." : "Ms."), shkname(mtmp));
***************
*** 78,93
  					   mtmp->data->mname);
  		else Sprintf(buf, "invisible %s", mtmp->data->mname);
  	} else if(mtmp->isshk) {
! 		if (Hallucination) Sprintf(eos(buf), "%s %s the shopkeeper)",
! 					   rn2(2) ? "Mr." : "Ms.",
! 					   shkname(mtmp));
! 		else Sprintf(buf, "%s %s, the shopkeeper!",
! 			     rn2(2) ? "Mr." : "Ms.", shkname(mtmp));
! 	} else {
! 		if (Hallucination) Sprintf(eos(buf), "%s %s)",
! 					   prefix, mtmp->data->mname);
! 		else Sprintf(buf, "%s", mtmp->data->mname);
! 	}
  	killer = buf;
  	done("died");
  }

--- 71,80 -----
  			Sprintf(eos(buf), "the ");
  		Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn);
  	} else if(mtmp->isshk) {
! 		Sprintf(eos(buf), "%s %s, the shopkeeper)",
! 			(rn2(2) ? "Mr." : "Ms."), shkname(mtmp));
! 	} else Sprintf(eos(buf), "%s", mtmp->data->mname);
! 	if (mtmp->mnamelth) Sprintf(eos(buf), " called %s", NAME(mtmp));
  	killer = buf;
  	done("died");
  }
***************
*** 202,208
  #endif 
  	settty((char *) 0);	/* does a clear_screen() */
  	if(!done_stopprint)
! 		printf("Goodbye %s %s...\n\n", pl_character, plname);
  	{ long int tmp;
  	  tmp = u.ugold - u.ugold0;
  	  if(tmp < 0)

--- 189,195 -----
  #endif 
  	settty((char *) 0);	/* does a clear_screen() */
  	if(!done_stopprint)
! 	    printf("Goodbye %s %s...\n\n", (Badged) ? "Officer" : pl_character, plname);
  	{ long int tmp;
  	  tmp = u.ugold - u.ugold0;
  	  if(tmp < 0)
***************
*** 306,311
  		getret();	/* all those pieces of coloured glass ... */
  		cls();
  	}
  #ifdef WIZARD
  	if(!wizard)
  #endif

--- 293,301 -----
  		getret();	/* all those pieces of coloured glass ... */
  		cls();
  	}
+ #ifdef MSDOSCOLOR
+ 	end_screen();
+ #endif
  #ifdef WIZARD
  	if(!wizard)
  #endif
***************
*** 314,323
  #ifdef APOLLO
  	getret();
  #endif
- #ifdef MSDOSCOLOR
- 	getret();
- 	end_screen();
- #endif
  	exit(0);
  }
  clearlocks(){

--- 304,309 -----
  #ifdef APOLLO
  	getret();
  #endif
  	exit(0);
  }
  clearlocks(){
***************
*** 351,372
  	while(*s) s++;
  	*s++ = c;
  	*s = 0;
- }
- 
- char *
- hallmon()
- {
- 	register char let;
- 	register int ct;
- 	register struct permonst *ptr;
- 
- 	let = rndmonsym();
- 	for(ct = 0; ct < CMNUM+1 ; ct++) {
- 		ptr = &mons[ct];
- 		if(ptr->mlet == let) return(ptr->mname);
- 			
- 	}
- 	return("giant eel");
  }
  
  #ifdef KJSMODS

--- 337,342 -----
  	while(*s) s++;
  	*s++ = c;
  	*s = 0;
  }
  
  #ifdef KJSMODS
*** ./engrave.c.orig	Mon Feb 22 08:40:03 1988
--- ./engrave.c	Thu Feb 18 13:26:05 1988
***************
*** 1,4
! /*	SCCS Id: @(#)engrave.c	2.0	87/09/14
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"

--- 1,4 -----
! /*	SCCS Id: @(#)engrave.c	2.3	88/02/11
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	"hack.h"
***************
*** 244,249
  			type = DUST;
  		}  else  {
  			switch(otmp->otyp)  {
  			case WAN_FIRE:
  				if(!objects[otmp->otyp].oc_name_known) {
  					pline("The %s is a wand of fire!",

--- 244,258 -----
  			type = DUST;
  		}  else  {
  			switch(otmp->otyp)  {
+ 			case WAN_LIGHTNING:
+ 				if(!objects[otmp->otyp].oc_name_known) {
+ 					pline("The %s is a wand of lightning!",
+ 						xname(otmp));
+ 					objects[otmp->otyp].oc_name_known = 1;
+ 					more_experienced(0,10);
+ 				}
+ 				type = BURN;
+ 				break;
  			case WAN_FIRE:
  				if(!objects[otmp->otyp].oc_name_known) {
  					pline("The %s is a wand of fire!",
***************
*** 390,400
  	len = strlen(sp);
  	if(!len || *buf == '\033') {
  		/* changed by GAN 11/01/86 to not recharge wand */
- 		if(type == BURN)
- 			pline("A few sparks fly from the wand of fire.");
- 		else
- 			if(otmp->otyp == WAN_DIGGING)
- 				pline("Gravel flies up from the floor.");
  		return(1);
  	}
  	        /* kludge by stewr 870708 */

--- 399,404 -----
  	len = strlen(sp);
  	if(!len || *buf == '\033') {
  		/* changed by GAN 11/01/86 to not recharge wand */
  		return(1);
  	}
  	if(otmp->otyp == WAN_FIRE) {
***************
*** 397,402
  				pline("Gravel flies up from the floor.");
  		return(1);
  	}
  	        /* kludge by stewr 870708 */
  	for (sptmp = sp, tmp=0; !(tmp == len); sptmp++,tmp++) {
  	        if (((type == DUST) && !rn2(25))

--- 401,420 -----
  		/* changed by GAN 11/01/86 to not recharge wand */
  		return(1);
  	}
+ 	if(otmp->otyp == WAN_FIRE) {
+ 		if (!Blind) pline("Flames fly from the wand.");
+ 		else pline("You feel the wand heat up.");
+ 	} else if(otmp->otyp == WAN_LIGHTNING) {
+ 		if (!Blind) {
+ 			pline("Sparks fly from the wand.");
+ 			pline("You are blinded by the flashing!");
+ 			Blinded += rnd(50);
+ 			seeoff(0);
+ 		} else pline("You hear crackling!");
+ 	} else if(otmp->otyp == WAN_DIGGING) {
+ 		if (!Blind) pline("Gravel flies up from the floor.");
+ 		else pline("You hear drilling!");
+   	}
  	        /* kludge by stewr 870708 */
  	for (sptmp = sp, tmp=0; !(tmp == len); sptmp++,tmp++) {
  	        if (((type == DUST) && !rn2(25))
*** ./fight.c.orig	Mon Feb 22 08:40:04 1988
--- ./fight.c	Thu Mar 31 09:08:55 1988
***************
*** 1,4
! /*	SCCS Id: @(#)fight.c	2.1	87/10/17
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	<stdio.h>

--- 1,4 -----
! /*	SCCS Id: @(#)fight.c	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	<stdio.h>
***************
*** 14,20
  extern struct monst *mkmon_at();
  #endif
  #ifdef RPH
! extern struct obj *mk_named_obj();
  #endif
  
  static boolean far_noise;

--- 14,20 -----
  extern struct monst *mkmon_at();
  #endif
  #ifdef RPH
! extern struct obj *mk_named_obj_at();
  #endif
  
  static boolean far_noise;
***************
*** 20,25
  static boolean far_noise;
  static long noisetime;
  
  /* hitmm returns 0 (miss), 1 (hit), or 2 (kill) */
  hitmm(magr,mdef) register struct monst *magr,*mdef; {
  register struct permonst *pa = magr->data, *pd = mdef->data;

--- 20,64 -----
  static boolean far_noise;
  static long noisetime;
  
+ #ifdef STOOGES
+ char random_joke[][30] = {"Why I ought a ...",
+ 			"You'll get what's comming!",
+ 			"I'll murder you!",
+ 			"I get no respect!",
+ 			"Right in the kisser!",
+ 			"Wait a minute!",
+ 			"Take it easy!",
+ 			"Alright already!",
+ 			"That's more like it!",
+ 			"Well excuse me!",
+ 			"Take that!",
+ 			"I'll fix you!",
+ 			"I'm sorry!",
+ 			"Your mama!",
+ 			"Shut up!",
+ 			"Listen you!",
+ 			"Pardon me!",
+ 			"Not that!",
+ 			"Quiet!",
+ 			"Relax!",
+ 			"Certainly!",
+ 			"Ouch!",
+ 			"What happened?",
+ 			"What was that for?",
+ 			"What's the matter with you?",
+ 			"Oh Yea?",
+ 			"Wise guy eh?",
+ 			"How about a knuckle sandwich?",
+ 			"You coward!",
+ 			"You rat you!",
+ 			"You chuckelhead!",
+ 			"You bonehead!",
+ 			"You numbskull!",
+ 			"Nyak Nyak Nyak ...",
+ 			"Woop Woop Woop Woop ..."};
+ #define RAND_JOKE	35
+ #endif
+ 
  /* hitmm returns 0 (miss), 1 (hit), or 2 (kill) */
  hitmm(magr,mdef) register struct monst *magr,*mdef; {
  register struct permonst *pa = magr->data, *pd = mdef->data;
***************
*** 53,58
  				farq ? " in the distance" : "");
  		}
  	}
  	if(hit){
  		if(magr->data->mlet == 'c' && !magr->cham) {
  			magr->mhpmax += 3;

--- 92,136 -----
  				farq ? " in the distance" : "");
  		}
  	}
+ #ifdef STOOGES
+ 	if (hit && magr->isstooge) {
+ 		if (!rn2(6) && !index("afgvyF",mdef->data->mlet)) {
+ 			if(vis)
+ 				pline("%s is poked in the eye!", Monnam(mdef));
+ 			mdef->mcansee = 0;
+ 			mdef->mblinded += rnd(10);
+ 			if (mdef->mblinded <= 0) mdef->mblinded = 127;
+ 		} else if (vis && mdef->isstooge)
+ 			switch (rn2(100)) {
+ 			case 0 : pline("%s is shoved!", Monnam(mdef)); 
+ 				break;
+ 			case 1 : pline("%s is kicked!", Monnam(mdef));
+ 				break;
+ 			case 2 : pline("%s is slapped!", Monnam(mdef));
+ 				break;
+ 			case 3 : pline("%s is slugged!", Monnam(mdef));
+ 				break;
+ 			case 4 : pline("%s is punched!", Monnam(mdef));
+ 				break;
+ 			case 5 : pline("%s is pinched!", Monnam(mdef));
+ 				break;
+ 			case 6 : pline("But %s dodges!", monnam(mdef));
+ 				break;
+ 			case 7 : pline("But %s ducks!", monnam(mdef));
+ 				break;
+ 			case 8 : pline("%s gets a black eye!", Monnam(mdef));
+ 				break;
+ 			case 9 : pline("%s gets a bloody nose!", Monnam(mdef));
+ 				break;
+ 			case 10: pline("%s gets a broken tooth!", Monnam(mdef));
+ 				break;
+ 			}
+ 		if (!rn2(2))
+ 			stoogejoke();
+ 	}
+ 	if (magr->isstooge && mdef->isstooge)
+ 		return(hit);	/* stooges don't damage each other */
+ #endif
  	if(hit){
  		if(magr->data->mlet == 'c' && !magr->cham) {
  			magr->mhpmax += 3;
***************
*** 99,104
  	     * corpse (like Keystone Kops above). */
  	    if(!(pd->mlet == 'r' && dlevel < 4))
  #endif
  		if(letter(pd->mlet) && rn2(3)) {
  		    if (pd->mlet == '1') panic("mondied: making obj '1'");
  #ifndef RPH

--- 177,184 -----
  	     * corpse (like Keystone Kops above). */
  	    if(!(pd->mlet == 'r' && dlevel < 4))
  #endif
+ 	    if(!(pd->mlet == '&' && mdef->isdjinni))  /* no djinni corpse */
+ 	    if(!(pd->mlet == 'G' && mdef->isgremlin)) /* no gremlin corpse */
  		if(letter(pd->mlet) && rn2(3)) {
  		    if (pd->mlet == '1') panic("mondied: making obj '1'");
  #ifndef RPH
***************
*** 321,326
  	    else if(mon->data->mlet == 'O' && obj->otyp == TWO_HANDED_SWORD
  		    && !strcmp(ONAME(obj), "Orcrist"))	tmp += rnd(10);
  
  	} else	switch(obj->otyp) {
  		case HEAVY_IRON_BALL:
  			tmp = rnd(25); break;

--- 401,409 -----
  	    else if(mon->data->mlet == 'O' && obj->otyp == TWO_HANDED_SWORD
  		    && !strcmp(ONAME(obj), "Orcrist"))	tmp += rnd(10);
  
+ 	    else if((obj->otyp == SHORT_SWORD || obj->otyp == DAGGER)
+ 		   && !strcmp(ONAME(obj), "Sting")) tmp += rnd(5);
+ 
  	} else	switch(obj->otyp) {
  		case HEAVY_IRON_BALL:
  			tmp = rnd(25); break;
***************
*** 329,336
  #ifdef RPH
  		case MIRROR:
  			pline("You break your mirror.  That's bad luck!");
! 		        u.uluck -= 2;
! 		        if ((int)u.uluck < LUCKMIN) u.uluck = LUCKMIN;
  			freeinv(obj);
  			if(obj->owornmask)
  				setworn((struct obj *) 0, obj->owornmask);

--- 412,418 -----
  #ifdef RPH
  		case MIRROR:
  			pline("You break your mirror.  That's bad luck!");
! 		        change_luck(-2);
  			freeinv(obj);
  			if(obj->owornmask)
  				setworn((struct obj *) 0, obj->owornmask);
***************
*** 466,472
  		char *dname;		/* added by Janet Walz (walz@mimsy) */
  		mtmp->mflee = 1;
  		mtmp->mfleetim = rnd(6);
! 		if (dname = NAME(mtmp))
  		    pline("You stop to avoid hitting %s.",dname);
  		else
  		    pline("You stop to avoid hitting your dog.");

--- 548,554 -----
  		char *dname;		/* added by Janet Walz (walz@mimsy) */
  		mtmp->mflee = 1;
  		mtmp->mfleetim = rnd(6);
! 		if(*(dname = NAME(mtmp)))
  		    pline("You stop to avoid hitting %s.",dname);
  		else
  		    pline("You stop to avoid hitting your dog.");
***************
*** 606,612
  	      nomul((u.ulevel > 6 || rn2(4)) ? rn1(20,-21) : -200);
  	    } else {
  	      pline("%s cannot defend itself.", Amonnam(mtmp,"blinded"));
! 	      if(!rn2(500)) if((int)u.uluck > LUCKMIN) u.uluck--;
  	    }
  	}
  	return(TRUE);

--- 688,694 -----
  	      nomul((u.ulevel > 6 || rn2(4)) ? rn1(20,-21) : -200);
  	    } else {
  	      pline("%s cannot defend itself.", Amonnam(mtmp,"blinded"));
! 	      if(!rn2(500)) change_luck(-1);
  	    }
  	}
  	return(TRUE);
***************
*** 611,613
  	}
  	return(TRUE);
  }

--- 693,701 -----
  	}
  	return(TRUE);
  }
+ 
+ #ifdef STOOGES
+ stoogejoke() {		/* have the stooges say something funny */
+ 	pline("'%s'", random_joke[rn2(RAND_JOKE)]);
+ }
+ #endif
*** ./fountain.c.orig	Mon Feb 22 08:40:04 1988
--- ./fountain.c	Thu Feb 11 13:39:11 1988
***************
*** 1,5
! /*	SCCS Id: @(#)fountain.c	2.1	87/10/19
! /* fountain.c  v 1.4.3 */
  
  /*
   * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson

--- 1,5 -----
! /*	SCCS Id: @(#)fountain.c	2.3	88/01/21
! /* fountain.c  v 1.4.4 */
  
  /*
   * Revision 1.4.4  88/02/11  08:31:00  M. Stephenson
***************
*** 2,7
  /* fountain.c  v 1.4.3 */
  
  /*
   * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson
   * Implemented levitation bug fixes.
   *

--- 2,11 -----
  /* fountain.c  v 1.4.4 */
  
  /*
+  * Revision 1.4.4  88/02/11  08:31:00  M. Stephenson
+  * Implemented "coins" fixes by woodbury@bme.unc.edu
+  * Fixed minor bugs.
+  *
   * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson
   * Implemented levitation bug fixes.
   *
***************
*** 5,10
   * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson
   * Implemented levitation bug fixes.
   *
   * Revision 1.4.2  87/10/19  11:48:00  M. Stephenson
   * Implementation of KJS bug fixes.
   *

--- 9,17 -----
   * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson
   * Implemented levitation bug fixes.
   *
+  * Revision 1.4.3  87/11/25  19:16:00  M. Stephenson
+  * Implemented levitation bug fixes.
+  *
   * Revision 1.4.2  87/10/19  11:48:00  M. Stephenson
   * Implementation of KJS bug fixes.
   *
***************
*** 35,42
  extern char genocided[];
  
  #ifdef FOUNTAINS
! #define somex() ((rand()%(croom->hx-croom->lx+1))+croom->lx)
! #define somey() ((rand()%(croom->hy-croom->ly+1))+croom->ly)
  
  dowatersnakes() /* Fountain of snakes! */ {
  	register int num = rnd(6);

--- 42,49 -----
  extern char genocided[];
  
  #ifdef FOUNTAINS
! #define somex() ((int)(rand()%(croom->hx-croom->lx+1))+croom->lx)
! #define somey() ((int)(rand()%(croom->hy-croom->ly+1))+croom->ly)
  
  dowatersnakes() /* Fountain of snakes! */ {
  	register int num = rnd(6);
***************
*** 313,319
  			pline("You feel a sudden chill.");
  			break;
  		case 28: /* Strange feeling */
! 		pline("An urge to take a bath nearly overwhelms you.");
  			break;
  		case 29: /* You see coins */
  		pline("Far below you, you see coins glistening in the water.");

--- 320,330 -----
  			pline("You feel a sudden chill.");
  			break;
  		case 28: /* Strange feeling */
! 		pline("An urge to take a bath overwhelms you.");
! 			if (u.ugold > 10) {
! 			     	u.ugold -= somegold()/10;
! 			  pline("You lost some of your gold in the fountain!");
! 	 		}
  			break;
  		case 29: /* You see coins */
  
***************
*** 316,321
  		pline("An urge to take a bath nearly overwhelms you.");
  			break;
  		case 29: /* You see coins */
  		pline("Far below you, you see coins glistening in the water.");
  			break;
  		default:

--- 327,338 -----
  	 		}
  			break;
  		case 29: /* You see coins */
+ 
+ 		/* We make fountains have more coins the closer you are to the
+ 		 * surface.  After all, there will have been more people going
+ 		 * by.  Just like a shopping mall!  Chris Woodbury  */
+ 
+ 			mkgold((long)(rnd((MAXLEVEL-dlevel)*2)+5),u.ux,u.uy);
  		pline("Far below you, you see coins glistening in the water.");
  			break;
  		default:
*** ./hack.c.orig	Mon Feb 22 08:40:04 1988
--- ./hack.c	Tue Mar 29 08:36:16 1988
***************
*** 3,9
  #include <stdio.h>
  #include "hack.h"
  #ifdef UNIX
! static	char	SCCS_Id[] = "@(#)hack.c	2.2\t87/12/01";
  #endif
  extern char news0();
  extern char *nomovemsg;

--- 3,9 -----
  #include <stdio.h>
  #include "hack.h"
  #ifdef UNIX
! static	char	SCCS_Id[] = "@(#)hack.c	2.3\t88/02/18";
  #endif
  extern char news0();
  extern char *nomovemsg;
***************
*** 244,250
  			u.utrap--;
  #endif
  		} else {
! 			pline("You are caught in a beartrap.");
  			if((u.dx && u.dy) || !rn2(5)) u.utrap--;
  		}
  		return;

--- 244,250 -----
  			u.utrap--;
  #endif
  		} else {
! 			pline("You are caught in a bear trap.");
  			if((u.dx && u.dy) || !rn2(5)) u.utrap--;
  		}
  		return;
***************
*** 304,309
  #ifdef NEWCLASS
  		|| IS_THRONE(levl[u.ux][u.uy].typ)
  #endif
  		)
  			nomul(0);
  	}

--- 304,312 -----
  #ifdef NEWCLASS
  		|| IS_THRONE(levl[u.ux][u.uy].typ)
  #endif
+ #ifdef SINKS
+ 		|| IS_SINK(levl[u.ux][u.uy].typ)
+ #endif
  		)
  			nomul(0);
  	}
***************
*** 308,313
  			nomul(0);
  	}
  
  	if(tmpr->typ == POOL && !Levitation)
  		drown();	/* not necessarily fatal */
  

--- 311,320 -----
  			nomul(0);
  	}
  
+ #ifdef SINKS
+ 	if(IS_SINK(levl[u.ux][u.uy].typ) && Levitation)
+ 		dosinkfall();
+ #endif
  	if(tmpr->typ == POOL && !Levitation)
  		drown();	/* not necessarily fatal */
  
***************
*** 1044,1046
  {
  	return(10*(1L << (u.ulevel-1)));
  }

--- 1051,1087 -----
  {
  	return(10*(1L << (u.ulevel-1)));
  }
+ 
+ change_luck(n)
+ 	register schar n;
+ {
+ 	u.uluck += n;
+ 	if (u.uluck < 0 && u.uluck < LUCKMIN)	u.uluck = LUCKMIN;
+ 	if (u.uluck > 0 && u.uluck > LUCKMAX)	u.uluck = LUCKMAX;
+ }
+ 
+ #ifdef SINKS
+ dosinkfall() {
+ register struct obj *obj;
+ 	pline("You crash to the floor!");
+ 	losehp(rn2(15) + 3*u.ulevel,"fall onto a sink");
+ 	for(obj=fobj; obj; obj=obj->nobj)
+ 	    if(obj->ox == u.ux && obj->oy == u.uy && obj->olet == WEAPON_SYM) {
+ 		pline("You fell on %s.",doname(obj));
+ 		losehp(rn2(3),"fall onto a sink");
+ 	    }
+ 
+ 	Levitation += 1;
+ 	if(uleft && uleft->otyp == RIN_LEVITATION) {
+ 	    obj = uleft;
+ 	    ringoff(obj);
+ 	    off_msg(obj);
+ 	}
+ 	if(uright && uright->otyp == RIN_LEVITATION) {
+ 	    obj = uright;
+ 	    ringoff(obj);
+ 	    off_msg(obj);
+ 	}
+ 	Levitation = 0;
+ }
+ #endif
*** ./hack.h.orig	Mon Feb 22 08:40:04 1988
--- ./hack.h	Thu Mar 31 11:41:28 1988
***************
*** 1,4
! /*	SCCS Id: @(#)hack.h	2.1	87/10/18
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #ifndef HACK_H

--- 1,4 -----
! /*	SCCS Id: @(#)hack.h	2.3	87/12/12
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #ifndef HACK_H
***************
*** 4,11
  #ifndef HACK_H
  #define HACK_H
  
- #include "extern.h"
- 
  #ifdef __TURBOC__
  /* work around the case-insensitivity of the DOS linker */
  #define Amonnam Amonnam_

--- 4,9 -----
  #ifndef HACK_H
  #define HACK_H
  
  #ifdef __TURBOC__
  /* work around the case-insensitivity of the DOS linker */
  #define Amonnam Amonnam_
***************
*** 19,24
  #define itoa itoa_
  #endif
  
  
  #define	Null(type)	((struct type *) 0)
  

--- 17,23 -----
  #define itoa itoa_
  #endif
  
+ #include "extern.h"
  
  #define	Null(type)	((struct type *) 0)
  
*** ./hh.orig	Thu Mar 31 13:20:17 1988
--- ./hh	Thu Mar 31 13:20:32 1988
***************
*** 41,47
  x	spells	print a list of know spells
  X	Xcribe	transcribe (learn) a spell
  z	zap	zap a wand
! X	cast	cast a spell
  C	name	name an individual monster (e.g., baptize your dog)
  D	Drop	drop several things
  E	Engrave write a message in the dust on the floor  (E-  use fingers)

--- 41,47 -----
  x	spells	print a list of know spells
  X	Xcribe	transcribe (learn) a spell
  z	zap	zap a wand
! Z	cast	cast a spell
  C	name	name an individual monster (e.g., baptize your dog)
  D	Drop	drop several things
  E	Engrave write a message in the dust on the floor  (E-  use fingers)
*** ./invent.c.orig	Mon Feb 22 08:40:05 1988
--- ./invent.c	Thu Mar 31 09:08:51 1988
***************
*** 1,4
! /*	SCCS Id: @(#)invent.c	2.1	87/10/19
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	<stdio.h>

--- 1,4 -----
! /*	SCCS Id: @(#)invent.c	2.3	88/01/21
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include	<stdio.h>
***************
*** 5,10
  #include	"hack.h"
  extern struct obj *splitobj();
  extern struct obj zeroobj;
  extern char morc;
  extern char quitchars[];
  static char *xprname();

--- 5,11 -----
  #include	"hack.h"
  extern struct obj *splitobj();
  extern struct obj zeroobj;
+ extern void savech();
  extern char morc;
  extern char quitchars[];
  static char *xprname();
***************
*** 811,816
  	pline("There is an opulent throne here.");
      }    
  #endif
      if(u.ux == xupstair && u.uy == yupstair)  {
  	fd++;
  	pline("There is a stairway up here.");

--- 812,823 -----
  	pline("There is an opulent throne here.");
      }    
  #endif
+ #ifdef SINKS
+     if(IS_SINK(levl[u.ux][u.uy].typ))  {
+ 	fd++;
+ 	pline("There is a kitchen sink here.");
+     }
+ #endif
      if(u.ux == xupstair && u.uy == yupstair)  {
  	fd++;
  	pline("There is a stairway up here.");
***************
*** 941,946
  }
  
  doprarm(){
  	if(!uarm && !uarmg && !uarms && !uarmh)
  		pline("You are not wearing any armor.");
  	else {

--- 948,956 -----
  }
  
  doprarm(){
+ #ifdef SHIRT
+ 	if(!uarm && !uarmg && !uarms && !uarmh && !uarmu)
+ #else
  	if(!uarm && !uarmg && !uarms && !uarmh)
  #endif
  		pline("You are not wearing any armor.");
***************
*** 942,947
  
  doprarm(){
  	if(!uarm && !uarmg && !uarms && !uarmh)
  		pline("You are not wearing any armor.");
  	else {
  		char lets[6];

--- 952,958 -----
  	if(!uarm && !uarmg && !uarms && !uarmh && !uarmu)
  #else
  	if(!uarm && !uarmg && !uarms && !uarmh)
+ #endif
  		pline("You are not wearing any armor.");
  	else {
  #ifdef SHIRT
***************
*** 944,949
  	if(!uarm && !uarmg && !uarms && !uarmh)
  		pline("You are not wearing any armor.");
  	else {
  		char lets[6];
  		register int ct = 0;
  

--- 955,963 -----
  #endif
  		pline("You are not wearing any armor.");
  	else {
+ #ifdef SHIRT
+ 		char lets[7];
+ #else
  		char lets[6];
  #endif
  		register int ct = 0;
***************
*** 945,950
  		pline("You are not wearing any armor.");
  	else {
  		char lets[6];
  		register int ct = 0;
  
  		if(uarm) lets[ct++] = obj_to_let(uarm);

--- 959,965 -----
  		char lets[7];
  #else
  		char lets[6];
+ #endif
  		register int ct = 0;
  
  #ifdef SHIRT
***************
*** 947,952
  		char lets[6];
  		register int ct = 0;
  
  		if(uarm) lets[ct++] = obj_to_let(uarm);
  		if(uarm2) lets[ct++] = obj_to_let(uarm2);
  		if(uarmh) lets[ct++] = obj_to_let(uarmh);

--- 962,970 -----
  #endif
  		register int ct = 0;
  
+ #ifdef SHIRT
+ 		if(uarmu) lets[ct++] = obj_to_let(uarmu);
+ #endif
  		if(uarm) lets[ct++] = obj_to_let(uarm);
  		if(uarm2) lets[ct++] = obj_to_let(uarm2);
  		if(uarmh) lets[ct++] = obj_to_let(uarmh);
***************
*** 1020,1026
  	static char *buf = NULL;
  
  	if (buf == NULL)
! 	    buf = (char *) alloc (strlen(HI) + strlen(HE) + 15 + 1);
  
  	if (pos == NULL) pos = obj_symbols;
  	if (HI && HE)

--- 1038,1044 -----
  	static char *buf = NULL;
  
  	if (buf == NULL)
! 	    buf = (char *) alloc ((unsigned)(strlen(HI)+strlen(HE)+15+1));
  
  	if (pos == NULL) pos = obj_symbols;
  	if (HI && HE)
*** ./lev.c.orig	Mon Feb 22 08:40:05 1988
--- ./lev.c	Sun Jan 24 18:30:56 1988
***************
*** 1,4
! /*	SCCS Id: @(#)lev.c	2.1	87/10/19
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include <stdio.h>

--- 1,4 -----
! /*	SCCS Id: @(#)lev.c	2.3	88/01/24
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  
  #include <stdio.h>
***************
*** 84,90
  	savetrapchn(fd, ftrap);
  	saveobjchn(fd, fobj);
  	saveobjchn(fd, billobjs);
- 	billobjs = 0;
  	save_engravings(fd);
  #ifndef QUEST
  	bwrite(fd,(char *) rooms,sizeof(rooms));

--- 84,89 -----
  	savetrapchn(fd, ftrap);
  	saveobjchn(fd, fobj);
  	saveobjchn(fd, billobjs);
  	save_engravings(fd);
  #ifndef QUEST
  	bwrite(fd,(char *) rooms,sizeof(rooms));
***************
*** 90,104
  	bwrite(fd,(char *) rooms,sizeof(rooms));
  	bwrite(fd,(char *) doors,sizeof(doors));
  #endif
- #ifdef DGK
- 	if (!count_only)
- #endif
- 	{
- 		fgold = 0;
- 		ftrap = 0;
- 		fmon = 0;
- 		fobj = 0;
- 	}
  #ifndef NOWORM
  	bwrite(fd,(char *) wsegs,sizeof(wsegs));
  	for(tmp=1; tmp<32; tmp++){

--- 89,94 -----
  	bwrite(fd,(char *) rooms,sizeof(rooms));
  	bwrite(fd,(char *) doors,sizeof(doors));
  #endif
  #ifndef NOWORM
  	bwrite(fd,(char *) wsegs,sizeof(wsegs));
  	for(tmp=1; tmp<32; tmp++){
***************
*** 159,168
  	bwrite(fd, (char *) &minusone, sizeof(int));
  }
  
- #ifdef MSDOS
- /* We don't want to save any pointers in any files, so convert
-  * the pointers to indices before writing the monsters to disk -dgk
-  */
  savemonchn(fd,mtmp)
  register fd;
  register struct monst *mtmp;

--- 149,154 -----
  	bwrite(fd, (char *) &minusone, sizeof(int));
  }
  
  savemonchn(fd,mtmp)
  register fd;
  register struct monst *mtmp;
***************
*** 170,245
  	register struct monst *mtmp2;
  	unsigned xl;
  	int minusone = -1;
- 	struct permonst *permonstp;
- 	int monsindex;
- 	extern struct permonst li_dog, dog, la_dog;
- #ifdef KAA
- 	int mi;
- 	extern struct permonst hell_hound;
- # ifdef HARD
- 	extern struct permonst d_lord, d_prince;
- # endif
- # ifdef KJSMODS
- 	extern struct permonst pm_guard, pm_ghost, pm_eel;
- # endif
- #endif /* KAA /**/
- 
- 	while(mtmp) {
- 		mtmp2 = mtmp->nmon;
- 		xl = mtmp->mxlth + mtmp->mnamelth;
- 		bwrite(fd, (char *) &xl, sizeof(int));
- 		/* store an index where the pointer used to be */
- 		permonstp = mtmp->data;
- 		if (permonstp == &li_dog)
- 			monsindex = mi = -1;	/* fake index */
- 		else if (permonstp == &dog)
- 			monsindex = --mi;	/* fake index */
- 		else if (permonstp == &la_dog)
- 			monsindex = --mi;	/* fake index */
- #ifdef KAA
- 		else if (permonstp == &hell_hound)
- 			monsindex = --mi;	/* fake index */
- # ifdef HARD
- 		else if (permonstp == &d_lord)
- 			monsindex = --mi;	/* fake index */
- 
- 		else if (permonstp == &d_prince)
- 			monsindex = --mi;	/* fake index */
- # endif
- # ifdef KJSMODS
- 		else if (permonstp == &pm_guard)
- 			monsindex = -mi;	/* fake index */
- 
- 		else if (permonstp == &pm_ghost)
- 			monsindex = -mi;	/* fake index */
- 
- 		else if (permonstp == &pm_eel)
- 			monsindex = -mi;	/* fake index */
- # endif
- #endif
- 		else			
- 			monsindex = permonstp - &mons[0];
- 		*((int *)&mtmp->data) = monsindex;
- 		bwrite(fd, (char *) mtmp, xl + sizeof(struct monst));
- 		mtmp->data = permonstp;		/* restore the pointer */
- 		if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
- #ifdef DGK
- 		if (!count_only)
- #endif
- 			free((char *) mtmp);
- 		mtmp = mtmp2;
- 	}
- 	bwrite(fd, (char *) &minusone, sizeof(int));
- }
- #else
- 
- savemonchn(fd,mtmp)
- register fd;
- register struct monst *mtmp;
- {
- 	register struct monst *mtmp2;
- 	unsigned xl;
- 	int minusone = -1;
  	struct permonst *monbegin = &mons[0];
  
  	bwrite(fd, (char *) &monbegin, sizeof(monbegin));

--- 156,161 -----
  	register struct monst *mtmp2;
  	unsigned xl;
  	int minusone = -1;
  	struct permonst *monbegin = &mons[0];
  
  	bwrite(fd, (char *) &monbegin, sizeof(monbegin));
***************
*** 255,261
  	}
  	bwrite(fd, (char *) &minusone, sizeof(int));
  }
- #endif
  
  savegoldchn(fd,gold)
  register fd;

--- 171,176 -----
  	}
  	bwrite(fd, (char *) &minusone, sizeof(int));
  }
  
  savegoldchn(fd,gold)
  register fd;
***************
*** 323,330
  		done("tricked");
  	}
  
- 	fgold = 0;
- 	ftrap = 0;
  	mread(fd, (char *) levl, sizeof(levl));
  #ifdef GRAPHICS
  	/* Corners are poorly implemented.  They only exist in the

--- 238,243 -----
  		done("tricked");
  	}
  
  	mread(fd, (char *) levl, sizeof(levl));
  #ifdef GRAPHICS
  	/* Corners are poorly implemented.  They only exist in the
***************
*** 445,453
  	}
  
  	setgd();
! 	gold = newgold();
! 	mread(fd, (char *)gold, sizeof(struct gold));
! 	while(gold->gx) {
  		gold->ngold = fgold;
  		fgold = gold;
  		gold = newgold();

--- 358,367 -----
  	}
  
  	setgd();
! 	fgold = 0;
! 	while(gold = newgold(),
! 	      mread(fd, (char *)gold, sizeof(struct gold)),
!               gold->gx) {
  		gold->ngold = fgold;
  		fgold = gold;
  	}
***************
*** 450,457
  	while(gold->gx) {
  		gold->ngold = fgold;
  		fgold = gold;
- 		gold = newgold();
- 		mread(fd, (char *)gold, sizeof(struct gold));
  	}
  	free((char *) gold);
  	trap = newtrap();

--- 364,369 -----
                gold->gx) {
  		gold->ngold = fgold;
  		fgold = gold;
  	}
  	free((char *) gold);
  	ftrap = 0;
***************
*** 454,462
  		mread(fd, (char *)gold, sizeof(struct gold));
  	}
  	free((char *) gold);
! 	trap = newtrap();
! 	mread(fd, (char *)trap, sizeof(struct trap));
! 	while(trap->tx) {
  		trap->ntrap = ftrap;
  		ftrap = trap;
  		trap = newtrap();

--- 366,375 -----
  		fgold = gold;
  	}
  	free((char *) gold);
! 	ftrap = 0;
! 	while (trap = newtrap(),
! 	       mread(fd, (char *)trap, sizeof(struct trap)),
! 	       trap->tx) {
  		trap->ntrap = ftrap;
  		ftrap = trap;
  	}
***************
*** 459,466
  	while(trap->tx) {
  		trap->ntrap = ftrap;
  		ftrap = trap;
- 		trap = newtrap();
- 		mread(fd, (char *)trap, sizeof(struct trap));
  	}
  	free((char *) trap);
  	fobj = restobjchn(fd);

--- 372,377 -----
  	       trap->tx) {
  		trap->ntrap = ftrap;
  		ftrap = trap;
  	}
  	free((char *) trap);
  	fobj = restobjchn(fd);
*** ./makedefs.c.orig	Mon Feb 22 08:40:05 1988
--- ./makedefs.c	Tue Mar 29 08:37:58 1988
***************
*** 1,5
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
! /* makedefs.c - NetHack version 2.2 */
  
  static	char	SCCS_Id[] = "@(#)makedefs.c	2.2\t87/11/29";
  

--- 1,5 -----
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
! /* makedefs.c - NetHack version 2.3 */
  
  static	char	SCCS_Id[] = "@(#)makedefs.c	2.3\t88/02/18";
  
***************
*** 1,7
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  /* makedefs.c - NetHack version 2.2 */
  
! static	char	SCCS_Id[] = "@(#)makedefs.c	2.2\t87/11/29";
  
  #include	<stdio.h>
  #include	"config.h"

--- 1,7 -----
  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  /* makedefs.c - NetHack version 2.3 */
  
! static	char	SCCS_Id[] = "@(#)makedefs.c	2.3\t88/02/18";
  
  #include	<stdio.h>
  #include	"config.h"
***************
*** 105,110
  	printf("#define\tPOLY_TRAP\t%d\n", ntrap++);
  # endif
  #endif
  	printf("\n#define\tTRAPNUM\t%d\n", ntrap);
  	fclose(stdin);
  	fclose(stdout);

--- 105,113 -----
  	printf("#define\tPOLY_TRAP\t%d\n", ntrap++);
  # endif
  #endif
+ #ifdef SAC
+ 	printf("#define\tLANDMINE\t%d\n", ntrap++);
+ #endif /* SAC */
  	printf("\n#define\tTRAPNUM\t%d\n", ntrap);
  	fclose(stdin);
  	fclose(stdout);
***************
*** 236,241
  		printf("\"\tan amulet (or a web)\n");
  	    else
  #endif
  #ifdef	SPELLS
  	    if (!strcmp(inline, "+	a door"))
  		printf("+\ta door (or a spell book)\n");

--- 239,249 -----
  		printf("\"\tan amulet (or a web)\n");
  	    else
  #endif
+ #ifdef  SINKS
+ 	    if (!strcmp(inline, "#	a corridor"))
+ 		printf("#\ta corridor (or a kitchen sink)\n");
+ 	    else
+ #endif
  #ifdef	SPELLS
  	    if (!strcmp(inline, "+	a door"))
  		printf("+\ta door (or a spell book)\n");
***************
*** 256,262
  		puts(inline);
  	}
  #ifdef SAC
! 	printf("3\ta soldier\n");
  #endif
  #ifdef RPH
  	printf("8\tthe medusa;\n");

--- 264,278 -----
  		puts(inline);
  	}
  #ifdef SAC
! 	printf("3\ta soldier;\n");
! 	printf("\tThe soldiers  of Yendor are  well-trained in the art of war,\n");
! 	printf("\tmany  trained by  the wizard himself.  Some say the soldiers\n");
! 	printf("\tare explorers  who were  unfortunate enough  to be captured,\n");
! 	printf("\tand  put under the wizard's spell.  Those who have  survived\n");
! 	printf("\tencounters  with  soldiers   say  they  travel  together  in\n");
! 	printf("\tplatoons,  and are fierce fighters.  Because of the  load of\n");
! 	printf("\ttheir  combat gear,  however,  one can usually run away from\n");
! 	printf("\tthem, and doing so is considered a wise thing.\n");
  #endif
  #ifdef RPH
  	printf("8\tthe medusa;\n");
***************
*** 398,403
  			"Poison_resistance", "abcghikqsuvxyADFQSVWXZ&",
  			"Fire_resistance", "gD&",
  			"Cold_resistance", "gFY",
  			"Teleportation", "LNt",
  			"Teleport_control", "t",
  			"", "" };

--- 414,420 -----
  			"Poison_resistance", "abcghikqsuvxyADFQSVWXZ&",
  			"Fire_resistance", "gD&",
  			"Cold_resistance", "gFY",
+ 			"Shock_resistance", "g;",
  			"Teleportation", "LNt",
  			"Teleport_control", "t",
  			"", "" };
SHAR_EOF
if test 38558 -ne "`wc -c < 'Update.2.3.b'`"
then
	echo shar: error transmitting "'Update.2.3.b'" '(should have been 38558 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
-- 
						Mike Stephenson

Mail:	Genamation Inc.		Phone:	(416) 475-9434
	351 Steelcase Rd. W
	Markham, Ontario.	UUCP:	uunet!{mnetor,utzoo}!genat!genpyr!mike
	Canada   L3R 3W1		uunet!{mnetor,utzoo}!genat!mike