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

billr@saab.CNA.TEK.COM (Bill Randle) (11/23/89)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 8, Issue 61
Archive-name: NetHack3/Patch6h
Patch-To: NetHack3: Volume 7, Issue 56-93



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 8 (of 15)."
# Contents:  patches06e
# Wrapped by billr@saab on Wed Nov 22 10:50:14 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches06e' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches06e'\"
else
echo shar: Extracting \"'patches06e'\" \(53756 characters\)
sed "s/^X//" >'patches06e' <<'END_OF_FILE'
X*** src/Old/Makefile.src	Sun Nov 19 12:30:37 1989
X--- src/Makefile.src	Thu Nov  9 18:09:45 1989
X***************
X*** 47,58 ****
X  CFLAGS = -O -I../include
X  LFLAGS =
X  
X- # object files for makedefs
X- MAKEOBJS = makedefs.o monst.o objects.o panic.o
X- 
X- # object files for special levels compiler
X- SPLEVOBJS = lev_comp.o lev_lex.o lev_main.o alloc.o monst.o objects.o panic.o
X- 
X  # on some systems the termcap library is in -ltermcap or -lcurses
X  # on 386 Xenix, the -ltermlib tputs() seems not to work; use -lcurses instead
X  # Sysatt uses shared library in lieu of this option
X--- 47,52 ----
X***************
X*** 105,115 ****
X  
X  HACKINCL = amiconf.h artifact.h attrib.h color.h config.h coord.h decl.h\
X  	   def_os2.h edog.h epri.h eshk.h extern.h flag.h func_tab.h global.h\
X! 	   gold.h hack.h lev.h mfndpos.h mkroom.h monattk.h mondata.h monflag.h\
X! 	   monst.h monsym.h msdos.h obj.h objclass.h patchlevel.h pcconf.h\
X! 	   permonst.h prop.h rm.h sp_lev.h spell.h system.h tosconf.h\
X! 	   tradstdc.h trapname.h unixconf.h vault.h vmsconf.h wseg.h you.h\
X! 	   youprop.h
X  
X  # all .h files except date.h, onames.h, pm.h & trap.h which would cause
X  # dependency loops if run through "make depend".
X--- 99,109 ----
X  
X  HACKINCL = amiconf.h artifact.h attrib.h color.h config.h coord.h decl.h\
X  	   def_os2.h edog.h epri.h eshk.h extern.h flag.h func_tab.h global.h\
X! 	   gold.h hack.h lev.h macconf.h mfndpos.h mkroom.h monattk.h mondata.h\
X! 	   monflag.h monst.h monsym.h msdos.h obj.h objclass.h patchlevel.h\
X! 	   pcconf.h permonst.h prop.h rm.h sp_lev.h spell.h system.h termcap.h\
X! 	   tosconf.h tradstdc.h trapname.h unixconf.h vault.h vmsconf.h wseg.h\
X! 	   you.h youprop.h
X  
X  # all .h files except date.h, onames.h, pm.h & trap.h which would cause
X  # dependency loops if run through "make depend".
X***************
X*** 119,124 ****
X--- 113,124 ----
X  
X  SOURCES = $(CSOURCES) $(HSOURCES)
X  
X+ # object files for makedefs
X+ MAKEOBJS = makedefs.o monst.o objects.o panic.o
X+ 
X+ # object files for special levels compiler
X+ SPLEVOBJS = lev_comp.o lev_lex.o lev_main.o alloc.o monst.o objects.o panic.o
X+ 
X  HOBJ = allmain.o alloc.o apply.o artifact.o attrib.o bones.o cmd.o dbridge.o\
X  	decl.o demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o\
X  	dothrow.o eat.o end.o engrave.o exper.o extralev.o fountain.o getline.o\
X***************
X*** 387,393 ****
X  polyself.o:  ../include/hack.h
X  potion.o:  ../include/hack.h
X  pray.o:  ../include/hack.h
X! pri.o:  ../include/hack.h ../include/epri.h
X  priest.o:  ../include/hack.h ../include/mfndpos.h ../include/eshk.h ../include/epri.h
X  prisym.o:  ../include/hack.h ../include/wseg.h ../include/lev.h
X  read.o:  ../include/hack.h
X--- 387,393 ----
X  polyself.o:  ../include/hack.h
X  potion.o:  ../include/hack.h
X  pray.o:  ../include/hack.h
X! pri.o:  ../include/hack.h ../include/epri.h ../include/termcap.h
X  priest.o:  ../include/hack.h ../include/mfndpos.h ../include/eshk.h ../include/epri.h
X  prisym.o:  ../include/hack.h ../include/wseg.h ../include/lev.h
X  read.o:  ../include/hack.h
X***************
X*** 404,410 ****
X  sp_lev.o:  ../include/hack.h ../include/sp_lev.h
X  spell.o:  ../include/hack.h
X  steal.o:  ../include/hack.h
X! termcap.o:  ../include/hack.h
X  timeout.o:  ../include/hack.h
X  topl.o:  ../include/hack.h
X  topten.o:  ../include/hack.h
X--- 404,410 ----
X  sp_lev.o:  ../include/hack.h ../include/sp_lev.h
X  spell.o:  ../include/hack.h
X  steal.o:  ../include/hack.h
X! termcap.o:  ../include/hack.h ../include/termcap.h
X  timeout.o:  ../include/hack.h
X  topl.o:  ../include/hack.h
X  topten.o:  ../include/hack.h
X***************
X*** 428,437 ****
X  			touch ../include/config.h
X  ../include/decl.h:  ../include/spell.h ../include/color.h ../include/obj.h ../include/you.h ../include/onames.h ../include/pm.h
X  			touch ../include/decl.h
X! ../include/global.h:  ../include/coord.h ../include/vmsconf.h ../include/unixconf.h ../include/pcconf.h ../include/tosconf.h ../include/amiconf.h
X  			touch ../include/global.h
X  ../include/hack.h:  ../include/config.h ../include/decl.h ../include/monsym.h ../include/mkroom.h ../include/objclass.h ../include/gold.h ../include/trap.h ../include/flag.h ../include/rm.h 
X  			touch ../include/hack.h
X  ../include/pcconf.h:  ../include/msdos.h ../include/system.h
X  			touch ../include/pcconf.h
X  ../include/permonst.h:  ../include/monattk.h ../include/monflag.h
X--- 428,439 ----
X  			touch ../include/config.h
X  ../include/decl.h:  ../include/spell.h ../include/color.h ../include/obj.h ../include/you.h ../include/onames.h ../include/pm.h
X  			touch ../include/decl.h
X! ../include/global.h:  ../include/coord.h ../include/vmsconf.h ../include/unixconf.h ../include/pcconf.h ../include/tosconf.h ../include/amiconf.h ../include/macconf.h
X  			touch ../include/global.h
X  ../include/hack.h:  ../include/config.h ../include/decl.h ../include/monsym.h ../include/mkroom.h ../include/objclass.h ../include/gold.h ../include/trap.h ../include/flag.h ../include/rm.h 
X  			touch ../include/hack.h
X+ ../include/macconf.h:  ../include/msdos.h ../include/system.h 
X+ 			touch ../include/macconf.h
X  ../include/pcconf.h:  ../include/msdos.h ../include/system.h
X  			touch ../include/pcconf.h
X  ../include/permonst.h:  ../include/monattk.h ../include/monflag.h
X*** src/Old/allmain.c	Sun Nov 19 12:31:13 1989
X--- src/allmain.c	Sat Nov  4 13:40:17 1989
X***************
X*** 42,47 ****
X--- 42,50 ----
X  		UnloadSeg(savebones);
X  	}
X  #endif
X+ #ifdef CLIPPING
X+ 		cliparound(u.ux, u.uy);
X+ #endif
X  		if(flags.move) {	/* actual time passed */
X  
X  #ifdef SOUNDS
X***************
X*** 262,267 ****
X--- 265,273 ----
X  	 */
X  	if(MON_AT(u.ux, u.uy)) mnexto(m_at(u.ux, u.uy));
X  
X+ #ifdef CLIPPING
X+ 	cliparound(u.ux, u.uy);
X+ #endif
X  	(void) makedog();
X  	seemons();
X  #ifdef NEWS
X*** src/Old/alloc.c	Sun Nov 19 12:31:27 1989
X--- src/alloc.c	Fri Nov 17 19:31:23 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)alloc.c	3.0	88/07/21
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X--- 1,4 ----
X! /*	SCCS Id: @(#)alloc.c	3.0	89/11/15
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 23,29 ****
X  
X  #else
X  #ifndef __TURBOC__
X! extern void panic P((char *,...));
X  
X  long *
X  alloc(lth)
X--- 23,29 ----
X  
X  #else
X  #ifndef __TURBOC__
X! extern void VDECL(panic, (char *,...));
X  
X  long *
X  alloc(lth)
X*** src/Old/apply.c	Sun Nov 19 12:31:42 1989
X--- src/apply.c	Sat Nov 18 21:17:21 1989
X***************
X*** 95,102 ****
X  				mtmp->mflee = 1;
X  				if(rn2(4)) mtmp->mfleetim = rnd(100);
X  			}
X! 			if(tmp < 3) mtmp->mcansee  = mtmp->mblinded = 0;
X! 			else {
X  				tmp2 = mtmp->mblinded;
X  				tmp2 += rnd(1 + 50/tmp);
X  				if(tmp2 > 127) tmp2 = 127;
X--- 95,104 ----
X  				mtmp->mflee = 1;
X  				if(rn2(4)) mtmp->mfleetim = rnd(100);
X  			}
X! 			if(tmp < 3) {
X! 				mtmp->mcansee  = 0;
X! 				mtmp->mblinded = 0;
X! 			} else {
X  				tmp2 = mtmp->mblinded;
X  				tmp2 += rnd(1 + 50/tmp);
X  				if(tmp2 > 127) tmp2 = 127;
X***************
X*** 415,422 ****
X  }
X  #endif /* WALKIES */
X  
X! 
X! static int
X  dig() {
X  	register struct rm *lev;
X  	register int dpx = dig_pos.x, dpy = dig_pos.y;
X--- 417,426 ----
X  }
X  #endif /* WALKIES */
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  dig() {
X  	register struct rm *lev;
X  	register int dpx = dig_pos.x, dpy = dig_pos.y;
X***************
X*** 524,529 ****
X--- 528,535 ----
X  		if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) {
X  			b_trapped("door");
X  			lev->doormask = D_NODOOR;
X+ 			mnewsym(dpx, dpy);
X+ 			prl(dpx, dpy);
X  		}
X  		dig_level = -1;
X  		return(0);
X***************
X*** 642,648 ****
X  struct obj *obj;
X  {
X  	char dirsyms[12];
X! 	register char *dsp = dirsyms, *sdp = flags.num_pad ? ndir : sdir;
X  	register struct rm *lev;
X  	register int rx, ry, res = 0;
X  	register boolean isclosedoor = FALSE;
X--- 648,655 ----
X  struct obj *obj;
X  {
X  	char dirsyms[12];
X! 	register char *dsp = dirsyms;
X! 	register const char *sdp = flags.num_pad ? ndir : sdir;
X  	register struct rm *lev;
X  	register int rx, ry, res = 0;
X  	register boolean isclosedoor = FALSE;
X***************
X*** 779,795 ****
X  #endif
X  			   if (Hallucination) You("look %s.", hcolor());
X  		    else if (Sick)
X! 			You("look peakish.");
X  		    else if (u.uhs >= WEAK)
X  			You("look undernourished.");
X  #ifdef POLYSELF
X  		    else if (u.usym == S_NYMPH
X! #ifdef HARD
X  			     || u.umonnum==PM_SUCCUBUS
X  #endif
X  			     )
X  			You("look beautiful in the mirror.");
X! #ifdef HARD
X  		    else if (u.umonnum == PM_INCUBUS)
X  			You("look handsome in the mirror.");
X  #endif
X--- 786,802 ----
X  #endif
X  			   if (Hallucination) You("look %s.", hcolor());
X  		    else if (Sick)
X! 			You("look peaked.");
X  		    else if (u.uhs >= WEAK)
X  			You("look undernourished.");
X  #ifdef POLYSELF
X  		    else if (u.usym == S_NYMPH
X! #ifdef INFERNO
X  			     || u.umonnum==PM_SUCCUBUS
X  #endif
X  			     )
X  			You("look beautiful in the mirror.");
X! #ifdef INFERNO
X  		    else if (u.umonnum == PM_INCUBUS)
X  			You("look handsome in the mirror.");
X  #endif
X***************
X*** 883,889 ****
X  			pline ("%s has confused itself!", Monnam(mtmp));
X  	    	mtmp->mconf = 1;
X  	} else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
X! #ifdef HARD
X  			  || mtmp->data==&mons[PM_SUCCUBUS]
X  #endif
X  			  )) {
X--- 890,896 ----
X  			pline ("%s has confused itself!", Monnam(mtmp));
X  	    	mtmp->mconf = 1;
X  	} else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
X! #ifdef INFERNO
X  			  || mtmp->data==&mons[PM_SUCCUBUS]
X  #endif
X  			  )) {
X***************
X*** 1135,1141 ****
X  	can->blessed = obj->blessed;
X  	can = addinv(can);
X  	You("now have %s.", doname(can));
X! 	useup(corpse);
X  }
X  
X  int
X--- 1142,1223 ----
X  	can->blessed = obj->blessed;
X  	can = addinv(can);
X  	You("now have %s.", doname(can));
X! 	if (carried(corpse)) useup(corpse);
X! 	else useupf(corpse);
X! }
X! 
X! int
X! use_unicorn_horn(obj)
X! struct obj *obj;
X! {
X! 	boolean cursed = (obj && obj->cursed);
X! 	boolean blessed = (obj && obj->blessed);
X! 	boolean did_something = FALSE;
X! 
X! 	if (cursed) {
X! 		switch (rn2(6)) {
X! 		    static char buf[BUFSZ];
X! 		    case 0: make_sick(Sick ? 1L : (long)(20 + rn2(20)), TRUE);
X! 			    Strcpy(buf, xname(obj));
X! 			    u.usick_cause = buf;
X! 			    break;
X! 		    case 1: make_blinded(Blinded + (long) rnd(100), TRUE);
X! 			    break;
X! 		    case 2: if (!Confusion)
X! 				You("suddenly feel %s.",
X! 					Hallucination ? "trippy" : "confused");
X! 			    make_confused(HConfusion + (long) rnd(100), TRUE);
X! 			    break;
X! 		    case 3: make_stunned(HStun + (long) rnd(100), TRUE);
X! 			    break;
X! 		    case 4: adjattrib(rn2(6), -1, FALSE);
X! 			    break;
X! 		    case 5: make_hallucinated(Hallucination + (long) rnd(100),
X! 				TRUE);
X! 			    break;
X! 		}
X! 		return 1;
X! 	}
X! 		
X! 	if (Sick) {
X! 		make_sick(0L, TRUE);
X! 		did_something++;
X! 	}
X! 	if (Blinded && (!did_something || blessed)) {
X! 		make_blinded(0L, TRUE);
X! 		did_something++;
X! 	}
X! 	if (Hallucination && (!did_something || blessed)) {
X! 		make_hallucinated(0L, TRUE);
X! 		did_something++;
X! 	}
X! 	if (HConfusion && (!did_something || blessed)) {
X! 		make_confused(0L, TRUE);
X! 		did_something++;
X! 	}
X! 	if (HStun && (!did_something || blessed)) {
X! 		make_stunned(0L, TRUE);
X! 		did_something++;
X! 	}
X! 	if (!did_something || blessed) {
X! 		register int j;
X! 		int did_stat = 0;
X! 		int i = rn2(A_MAX);
X! 		for(j=0; j<A_MAX; j++) {
X! 			if ((blessed || j==i) && ABASE(i) < AMAX(i)) {
X! 				did_something++;
X! 				/* They may have to use it several times... */
X! 				if (!did_stat) {
X! 					did_stat++;
X! 					pline("This makes you feel good!");
X! 				}
X! 				ABASE(i)++;
X! 				flags.botl = 1;
X! 			}
X! 		}
X! 	}
X! 	if (!did_something) pline(nothing_happens);
X! 	return !!did_something;
X  }
X  
X  int
X***************
X*** 1244,1249 ****
X--- 1326,1334 ----
X  		} 
X  		else if (!ublindf) Blindf_on(obj);
X  		else You("are already wearing a blindfold!");
X+ 		break;
X+ 	case UNICORN_HORN:
X+ 		res = use_unicorn_horn(obj);
X  		break;
X  	default:
X  		pline("Sorry, I don't know how to use that.");
X*** src/Old/artifact.c	Sun Nov 19 12:32:35 1989
X--- src/artifact.c	Sun Oct 22 11:45:42 1989
X***************
X*** 101,107 ****
X  mkartifact(otmp1)
X  struct obj **otmp1;
X  {
X! 	register struct artifact *artif;
X  	register struct obj *otmp = *otmp1;
X  	register int n = 0;
X  
X--- 101,107 ----
X  mkartifact(otmp1)
X  struct obj **otmp1;
X  {
X! 	register const struct artifact *artif;
X  	register struct obj *otmp = *otmp1;
X  	register int n = 0;
X  
X***************
X*** 123,135 ****
X  get_artifact(otmp)
X  struct obj *otmp;
X  {
X! 	register struct artifact *artif;
X  
X  	if(otmp)
X  	    if(strlen(ONAME(otmp)))
X  		for(artif = artilist; artif->otyp; artif++)
X  		    if(artif->otyp == otmp->otyp &&
X! 		       !strcmp(ONAME(otmp), artif->name)) return(artif);
X  	return((struct artifact *)0);
X  }
X  
X--- 123,136 ----
X  get_artifact(otmp)
X  struct obj *otmp;
X  {
X! 	register const struct artifact *artif;
X  
X  	if(otmp)
X  	    if(strlen(ONAME(otmp)))
X  		for(artif = artilist; artif->otyp; artif++)
X  		    if(artif->otyp == otmp->otyp &&
X! 		       !strcmp(ONAME(otmp), artif->name))
X! 			    return((struct artifact *)artif);
X  	return((struct artifact *)0);
X  }
X  
X***************
X*** 155,161 ****
X  register struct obj *otmp;
X  register char	*name;
X  {
X! 	register struct artifact *artif;
X  
X  	if(!strlen(name)) return(0);
X  
X--- 156,162 ----
X  register struct obj *otmp;
X  register char	*name;
X  {
X! 	register const struct artifact *artif;
X  
X  	if(!strlen(name)) return(0);
X  
X***************
X*** 172,178 ****
X  mk_aligned_artifact(align)
X  unsigned align;
X  {
X! 	register struct artifact *artif;
X  	register struct obj *otmp;
X  	register int n = 0;
X  
X--- 173,179 ----
X  mk_aligned_artifact(align)
X  unsigned align;
X  {
X! 	register const struct artifact *artif;
X  	register struct obj *otmp;
X  	register int n = 0;
X  
X*** src/Old/attrib.c	Sun Nov 19 12:32:55 1989
X--- src/attrib.c	Wed Nov  8 21:19:20 1989
X***************
X*** 95,110 ****
X   * a minimum strength of 6 since without one you can't teleport or cast
X   * spells. --KAA
X   */
X! 	struct	innate *abil;
X! }	a_attr = { {	 6,  9,  9,  6,  6,  6 },  /* Archeologist */
X  		   {	20, 20, 20, 10, 20, 10 },
X  		    10,  1, 13, 10, 14,  2, a_abil },
X  
X! 	b_attr = { {	15,  6,  6, 14, 15,  5 },  /* Barbarian */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		    10, -1, 16, 12, 10,  3, b_abil },
X  
X! 	c_attr = { {	 9,  6,  6,  6,  7,  5 },  /* Caveman (fighter) */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		     0,  1, 16, 10, 10,  3, c_abil },
X  
X--- 95,110 ----
X   * a minimum strength of 6 since without one you can't teleport or cast
X   * spells. --KAA
X   */
X! 	const struct	innate *abil;
X! }	a_attr = { {	 7, 10, 10,  7,  7,  7 },  /* Archeologist */
X  		   {	20, 20, 20, 10, 20, 10 },
X  		    10,  1, 13, 10, 14,  2, a_abil },
X  
X! 	b_attr = { {	16,  7,  7, 15, 16,  6 },  /* Barbarian */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		    10, -1, 16, 12, 10,  3, b_abil },
X  
X! 	c_attr = { {	10,  7,  7,  7,  8,  6 },  /* Caveman (fighter) */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		     0,  1, 16, 10, 10,  3, c_abil },
X  
X***************
X*** 111,149 ****
X  /*
X  	e_attr = { {	13, 13, 14,  6, 14,  6 },
X   */
X! 	e_attr = { {	12, 12, 12,  8, 12,  6 },  /* Elf (ranger) */
X  		   {	30, 10, 10, 20, 20, 10 },
X  		    10,  1, 15, 10, 11,  2, e_abil },
X  
X! 	h_attr = { {	 6,  6, 12,  6, 10, 15 },  /* Healer (druid) */
X  		   {	15, 20, 20, 15, 25, 10 },
X  		    10,  1, 13, 10, 20,  2, h_abil },
X  
X! 	k_attr = { {	12,  6, 13,  6,  9, 17 },  /* Knight (paladin) */
X  		   {	20, 15, 15, 10, 20, 10 },
X  		    10,  1, 16, 10, 10,  3, k_abil },
X  
X! 	p_attr = { {	 6,  6,  9,  6,  6,  6 },  /* Priest (cleric) */
X  		   {	15, 10, 30, 15, 20, 10 },
X  		     0,  0, 14, 10, 10,  2, p_abil },
X  
X! 	r_attr = { {	 6,  6,  6,  9,  6,  5 },  /* Rogue (thief) */
X  		   {	20, 10, 10, 30, 20, 10 },
X  		    10, -1, 12, 10, 11,  2, r_abil },
X  
X! 	s_attr = { {	 9,  6,  6,  9, 17,  5 },  /* Samurai (fighter/thief) */
X  		   {	30, 10, 10, 30, 14, 10 },
X  		    10,  1, 15, 10, 11,  2, s_abil },
X  
X! 	t_attr = { {	 6,  9,  5,  6,  6,  9 },  /* Tourist */
X  		   {	15, 10, 10, 15, 30, 20 },
X  		     0,  0, 10, 10, 14,  1, t_abil },
X  
X! 	v_attr = { {	 9,  6,  6,  6,  9,  6 },  /* Valkyrie (fighter) */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		     0, -1, 16, 10, 10,  3, v_abil },
X  
X! 	w_attr = { {	 6,  9,  6,  6,  6,  6 },  /* Wizard (magic-user) */
X  		   {	10, 30, 10, 20, 20, 10 },
X  		     0,  0, 12, 10, 12,  1, w_abil },
X  
X--- 111,149 ----
X  /*
X  	e_attr = { {	13, 13, 14,  6, 14,  6 },
X   */
X! 	e_attr = { {	13, 13, 13,  9, 13,  7 },  /* Elf (ranger) */
X  		   {	30, 10, 10, 20, 20, 10 },
X  		    10,  1, 15, 10, 11,  2, e_abil },
X  
X! 	h_attr = { {	 7,  7, 13,  7, 11, 16 },  /* Healer (druid) */
X  		   {	15, 20, 20, 15, 25, 10 },
X  		    10,  1, 13, 10, 20,  2, h_abil },
X  
X! 	k_attr = { {	13,  7, 14,  8, 10, 17 },  /* Knight (paladin) */
X  		   {	20, 15, 15, 10, 20, 10 },
X  		    10,  1, 16, 10, 10,  3, k_abil },
X  
X! 	p_attr = { {	 7,  7, 10,  7,  7,  7 },  /* Priest (cleric) */
X  		   {	15, 10, 30, 15, 20, 10 },
X  		     0,  0, 14, 10, 10,  2, p_abil },
X  
X! 	r_attr = { {	 7,  7,  7, 10,  7,  6 },  /* Rogue (thief) */
X  		   {	20, 10, 10, 30, 20, 10 },
X  		    10, -1, 12, 10, 11,  2, r_abil },
X  
X! 	s_attr = { {	10,  8,  7, 10, 17,  6 },  /* Samurai (fighter/thief) */
X  		   {	30, 10, 10, 30, 14, 10 },
X  		    10,  1, 15, 10, 11,  2, s_abil },
X  
X! 	t_attr = { {	 7, 10,  6,  7,  7, 10 },  /* Tourist */
X  		   {	15, 10, 10, 15, 30, 20 },
X  		     0,  0, 10, 10, 14,  1, t_abil },
X  
X! 	v_attr = { {	10,  7,  7,  7, 10,  7 },  /* Valkyrie (fighter) */
X  		   {	30,  6,  7, 20, 30,  7 },
X  		     0, -1, 16, 10, 10,  3, v_abil },
X  
X! 	w_attr = { {	 7, 10,  7,  7,  7,  7 },  /* Wizard (magic-user) */
X  		   {	10, 30, 10, 20, 20, 10 },
X  		     0,  0, 12, 10, 12,  1, w_abil },
X  
X***************
X*** 277,286 ****
X  	}
X  }
X  
X! static struct	clattr *
X  clx()  {
X  
X! 	register struct	clattr	*attr;
X  
X  	switch	(pl_character[0]) {
X  
X--- 277,286 ----
X  	}
X  }
X  
X! static const struct	clattr *
X  clx()  {
X  
X! 	register const struct	clattr	*attr;
X  
X  	switch	(pl_character[0]) {
X  
X***************
X*** 318,324 ****
X  static void
X  init_align() {	/* called from newhp if u.ulevel is 0 */
X  
X! 	register struct	clattr	*attr = clx();
X  
X  	u.ualign = (int)attr->align;
X  	u.ualigntyp = attr->aligntyp;
X--- 318,324 ----
X  static void
X  init_align() {	/* called from newhp if u.ulevel is 0 */
X  
X! 	register const struct	clattr	*attr = clx();
X  
X  	u.ualign = (int)attr->align;
X  	u.ualigntyp = attr->aligntyp;
X***************
X*** 329,335 ****
X  	register int	np;
X  {
X  	register int	i, x, tryct;
X! 	register struct	clattr	*attr = clx();
X  
X  	for(i = 0; i < A_MAX; i++) {
X  
X--- 329,335 ----
X  	register int	np;
X  {
X  	register int	i, x, tryct;
X! 	register const struct	clattr	*attr = clx();
X  
X  	for(i = 0; i < A_MAX; i++) {
X  
X***************
X*** 398,405 ****
X  
X  	int	flag;		/* +ve/-ve  = gain/lose */
X  {
X! 	register struct	clattr	*attr = clx();
X! 	register struct innate	*abil = attr->abil;
X  
X  	if(abil) {
X  
X--- 398,405 ----
X  
X  	int	flag;		/* +ve/-ve  = gain/lose */
X  {
X! 	register const struct clattr	*attr = clx();
X! 	register const struct innate	*abil = attr->abil;
X  
X  	if(abil) {
X  
X***************
X*** 428,434 ****
X  
X  int
X  newhp() {
X! 	register struct	clattr	*attr = clx();
X  	int	hp, conplus;
X  
X  	if(u.ulevel == 0) {
X--- 428,434 ----
X  
X  int
X  newhp() {
X! 	register const struct clattr	*attr = clx();
X  	int	hp, conplus;
X  
X  	if(u.ulevel == 0) {
X*** src/Old/bones.c	Sun Nov 19 12:33:21 1989
X--- src/bones.c	Tue Oct 31 11:04:23 1989
X***************
X*** 71,76 ****
X--- 71,112 ----
X  }
X  #endif
X  
X+ void
X+ resetobjs(ochain)
X+ struct obj *ochain;
X+ {
X+ 	struct obj *otmp;
X+ 
X+ 	for (otmp = ochain; otmp; otmp = otmp->nobj) {
X+ 		otmp->o_id = 0;
X+ 		if (((otmp->otyp != CORPSE && otmp->otyp != STATUE)
X+        			|| otmp->corpsenm < PM_ARCHEOLOGIST)
X+ #ifdef NAMED_ITEMS
X+ 			&& !is_artifact(otmp)
X+ #endif
X+ 		)
X+ 		otmp->onamelth = 0;
X+ 		if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
X+ #ifdef TUTTI_FRUTTI
X+ 		if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
X+ #endif
X+ 		otmp->dknown = otmp->bknown = 0;
X+ 		otmp->invlet = 0;
X+ #ifdef MAIL
X+ 		if (otmp->otyp == SCR_MAIL)
X+ 			otmp->spe = 1;
X+ #endif
X+ #ifdef POLYSELF
X+ 		if (otmp->otyp == EGG)
X+ 			otmp->spe = 0;
X+ #endif
X+ 		if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
X+ 			otmp->spe = -1;      /* no longer the actual amulet */
X+ 			curse(otmp);
X+ 		}
X+ 	}			
X+ }
X+ 
X  /* save bones and possessions of a deceased adventurer */
X  void
X  savebones(){
X***************
X*** 166,174 ****
X  		Strcpy(NAME(mtmp), plname);
X  		mtmp->mnamelth = strlen(plname);
X  		atl(u.ux, u.uy, mtmp->data->mlet);
X! 		Your("body rises from the dead as a%s %s...",
X! 			index(vowels, *(mons[u.ugrave_arise].mname)) ? "n" : "",
X! 			mons[u.ugrave_arise].mname);
X  	}
X  	mtmp->m_lev = (u.ulevel ? u.ulevel : 1);
X  	mtmp->mhp = mtmp->mhpmax = u.uhpmax;
X--- 202,209 ----
X  		Strcpy(NAME(mtmp), plname);
X  		mtmp->mnamelth = strlen(plname);
X  		atl(u.ux, u.uy, mtmp->data->mlet);
X! 		Your("body rises from the dead as %s...",
X! 			an(mons[u.ugrave_arise].mname));
X  	}
X  	mtmp->m_lev = (u.ulevel ? u.ulevel : 1);
X  	mtmp->mhp = mtmp->mhpmax = u.uhpmax;
X***************
X*** 175,191 ****
X  	mtmp->msleep = 1;
X  	if(u.ugold) mkgold(u.ugold, u.ux, u.uy);
X  	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
X! 		for(otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
X! 		    otmp->dknown = otmp->bknown = 0;
X! #ifdef TUTTI_FRUTTI
X! 		    if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
X! #endif
X! 		    if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
X! 		    if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
X! 			otmp->spe = -1;  /* no longer the actual amulet */
X! 			curse(otmp);
X! 		    }
X! 		}
X  		mtmp->m_id = 0;
X  		mtmp->mlstmv = 0L;
X  		if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0;
X--- 210,216 ----
X  	mtmp->msleep = 1;
X  	if(u.ugold) mkgold(u.ugold, u.ux, u.uy);
X  	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
X! 		resetobjs(mtmp->minvent);
X  		mtmp->m_id = 0;
X  		mtmp->mlstmv = 0L;
X  		if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0;
X***************
X*** 194,228 ****
X  	for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
X  		ttmp->tseen = 0;
X  
X! 	for(otmp = fobj; otmp; otmp = otmp->nobj)  {
X! 
X! 		otmp->o_id = 0;
X! 		if (((otmp->otyp != CORPSE && otmp->otyp != STATUE)
X! 				|| otmp->corpsenm < PM_ARCHEOLOGIST)
X! #ifdef NAMED_ITEMS
X! 				&& !is_artifact(otmp)
X! #endif
X! 		   )
X! 			otmp->onamelth = 0;
X! 		if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
X! #ifdef TUTTI_FRUTTI
X! 		if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
X! #endif
X! 		otmp->dknown = otmp->bknown = 0;
X! 		otmp->invlet = 0;
X! #ifdef MAIL
X! 		if (otmp->otyp == SCR_MAIL)
X! 			otmp->spe = 1;
X! #endif
X! #ifdef POLYSELF
X! 		if (otmp->otyp == EGG)
X! 			otmp->spe = 0;
X! #endif
X! 		if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
X! 			otmp->spe = -1;      /* no longer the actual amulet */
X! 			curse(otmp);
X! 		}
X! 	}
X  
X  	for(x=0; x<COLNO; x++) for(y=0; y<ROWNO; y++)
X  		levl[x][y].seen = levl[x][y].new = levl[x][y].scrsym = 0;
X--- 219,226 ----
X  	for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
X  		ttmp->tseen = 0;
X  
X! 	resetobjs(fobj);
X! 	resetobjs(fcobj);   /* let's (not) forget about these - KCD, 10/21/89 */
X  
X  	for(x=0; x<COLNO; x++) for(y=0; y<ROWNO; y++)
X  		levl[x][y].seen = levl[x][y].new = levl[x][y].scrsym = 0;
X***************
X*** 242,248 ****
X  		(void)GetVol(&fileName,&oldvolume);
X  		(void)SetVol(0L, t->system.sysVRefNum);
X  		fileName[0] = (uchar)strlen(bones);
X! 		(void)strcpy((char *)&fileName[1],bones);
X  		
X  		if (er = Create(&fileName,0,CREATOR,BONES_TYPE))
X  			SysBeep(1);
X--- 240,246 ----
X  		(void)GetVol(&fileName,&oldvolume);
X  		(void)SetVol(0L, t->system.sysVRefNum);
X  		fileName[0] = (uchar)strlen(bones);
X! 		Strcpy((char *)&fileName[1],bones);
X  		
X  		if (er = Create(&fileName,0,CREATOR,BONES_TYPE))
X  			SysBeep(1);
X*** src/Old/cmd.c	Sun Nov 19 12:33:50 1989
X--- src/cmd.c	Fri Nov 17 19:31:26 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)cmd.c	3.0	88/10/24
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X--- 1,4 ----
X! /*	SCCS Id: @(#)cmd.c	3.0	89/11/15
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 61,67 ****
X  extern int dosave(); /**/
X  extern int dosave0(); /**/
X  extern int dosearch(); /**/
X! extern int dosearch0 P((int)); /**/
X  extern int doidtrap(); /**/
X  extern int dopay(); /**/
X  extern int dosit(); /**/
X--- 61,67 ----
X  extern int dosave(); /**/
X  extern int dosave0(); /**/
X  extern int dosearch(); /**/
X! extern int FDECL(dosearch0, (int)); /**/
X  extern int doidtrap(); /**/
X  extern int dopay(); /**/
X  extern int dosit(); /**/
X***************
X*** 76,88 ****
X  extern int dozap(); /**/
X  #endif /* DUMB */
X  
X! static int (*timed_occ_fn)();
X  #ifdef POLYSELF
X! static int domonability();
X  #endif
X  
X  /* Count down by decrementing multi */
X! static int
X  timed_occupation() {
X  	(*timed_occ_fn)();
X  	if (multi > 0)
X--- 76,97 ----
X  extern int dozap(); /**/
X  #endif /* DUMB */
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int (*timed_occ_fn)();
X  #ifdef POLYSELF
X! #ifndef OVERLAY
X! static 
X! #endif
X! int domonability();
X  #endif
X  
X  /* Count down by decrementing multi */
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  timed_occupation() {
X  	(*timed_occ_fn)();
X  	if (multi > 0)
X***************
X*** 173,179 ****
X  	return;
X  }
X  
X! /* A ch == 0 resets the saveq.  Only save keystrokes when not
X   * replaying a previous command.
X   */
X  void
X--- 182,188 ----
X  	return;
X  }
X  
X! /* A ch == 0 resets the saveq.	Only save keystrokes when not
X   * replaying a previous command.
X   */
X  void
X***************
X*** 190,200 ****
X  }
X  #endif /* REDO */
X  
X! static int
X  doextcmd()	/* here after # - now read a full-word command */
X  {
X  	char buf[BUFSZ];
X! 	register struct ext_func_tab *efp = extcmdlist;
X  again:
X  	pline("# ");
X  #ifdef COM_COMPL
X--- 199,212 ----
X  }
X  #endif /* REDO */
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  doextcmd()	/* here after # - now read a full-word command */
X  {
X  	char buf[BUFSZ];
X! 	register const struct ext_func_tab *efp = extcmdlist;
X  again:
X  	pline("# ");
X  #ifdef COM_COMPL
X***************
X*** 221,228 ****
X  int
X  doextlist()	/* here after #? - now list all full-word commands */
X  {
X! 	register struct ext_func_tab *efp = extcmdlist;
X! 	char     buf[BUFSZ];
X  
X  	set_pager(0);
X  	if(page_line("") ||
X--- 233,240 ----
X  int
X  doextlist()	/* here after #? - now list all full-word commands */
X  {
X! 	register const struct ext_func_tab *efp = extcmdlist;
X! 	char	 buf[BUFSZ];
X  
X  	set_pager(0);
X  	if(page_line("") ||
X***************
X*** 229,235 ****
X  	   page_line("            Extended Commands List") ||
X  	   page_line("") ||
X  	   page_line("    Press '#', then type (first letter only):") ||
X! 	   page_line(""))					 goto quit;
X  
X  	while(efp->ef_txt) {
X  
X--- 241,247 ----
X  	   page_line("            Extended Commands List") ||
X  	   page_line("") ||
X  	   page_line("    Press '#', then type (first letter only):") ||
X! 	   page_line(""))                                        goto quit;
X  
X  	while(efp->ef_txt) {
X  
X***************
X*** 245,251 ****
X  }
X  
X  #ifdef POLYSELF
X! static int
X  domonability()
X  {
X  	if (can_breathe(uasmon)) return dobreathe();
X--- 257,266 ----
X  }
X  
X  #ifdef POLYSELF
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  domonability()
X  {
X  	if (can_breathe(uasmon)) return dobreathe();
X***************
X*** 255,260 ****
X--- 270,276 ----
X  	else if (is_were(uasmon)) return dosummon();
X  	else if (webmaker(uasmon)) return dospinweb();
X  	else if (is_hider(uasmon)) return dohide();
X+ 	else if (u.usym == S_UNICORN) return use_unicorn_horn((struct obj *)0);
X  	else if (u.umonnum >= 0)
X  		pline("Any special ability you may have is purely reflexive.");
X  	else You("don't have a special ability!");
X***************
X*** 263,269 ****
X  #endif
X  
X  #ifdef WIZARD
X! static int
X  wiz_wish()	/* Unlimited wishes for wizard mode by Paul Polderman */
X  {
X  	if (wizard)	makewish();
X--- 279,288 ----
X  #endif
X  
X  #ifdef WIZARD
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_wish()	/* Unlimited wishes for wizard mode by Paul Polderman */
X  {
X  	if (wizard)	makewish();
X***************
X*** 271,277 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_identify()
X  {
X  	struct obj *obj;
X--- 290,299 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_identify()
X  {
X  	struct obj *obj;
X***************
X*** 287,293 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_map()
X  {
X  	if (wizard)	do_mapping();
X--- 309,318 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_map()
X  {
X  	if (wizard)	do_mapping();
X***************
X*** 295,301 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_genesis()
X  {
X  	if (wizard)	(void) create_particular();
X--- 320,329 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_genesis()
X  {
X  	if (wizard)	(void) create_particular();
X***************
X*** 303,309 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_where()
X  {
X  	if (wizard) {
X--- 331,340 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_where()
X  {
X  	if (wizard) {
X***************
X*** 310,316 ****
X  		pline("Medusa:%d  Wiz:%d  Big:%d", medusa_level, wiz_level, bigroom_level);
X  #ifdef STRONGHOLD
X  #  ifdef MUSIC
X! 		pline("Castle:%d (tune %s)  Tower:%d-%d", 
X  		      stronghold_level, tune, tower_level, tower_level+2);
X  #  else
X  		pline("Castle:%d  Tower:%d-%d",
X--- 341,347 ----
X  		pline("Medusa:%d  Wiz:%d  Big:%d", medusa_level, wiz_level, bigroom_level);
X  #ifdef STRONGHOLD
X  #  ifdef MUSIC
X! 		pline("Castle:%d (tune %s)  Tower:%d-%d",
X  		      stronghold_level, tune, tower_level, tower_level+2);
X  #  else
X  		pline("Castle:%d  Tower:%d-%d",
X***************
X*** 328,334 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_detect()
X  {
X  	if(wizard)  (void) findit();
X--- 359,368 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_detect()
X  {
X  	if(wizard)  (void) findit();
X***************
X*** 336,342 ****
X  	return 0;
X  }
X  
X! static int
X  wiz_level_tele()
X  {
X  	if (wizard)	level_tele();
X--- 370,379 ----
X  	return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_level_tele()
X  {
X  	if (wizard)	level_tele();
X***************
X*** 435,441 ****
X  }
X  
X  #if defined(WIZARD) || defined(EXPLORE_MODE)
X! static int
X  wiz_attributes()
X  {
X  	if (wizard || discover)
X--- 472,481 ----
X  }
X  
X  #if defined(WIZARD) || defined(EXPLORE_MODE)
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  wiz_attributes()
X  {
X  	if (wizard || discover)
X***************
X*** 446,453 ****
X--- 486,497 ----
X  }
X  #endif /* WIZARD || EXPLORE_MODE */
X  
X+ #ifndef M
X  #define M(c)		(0x80 | (c))
X+ #endif
X+ #ifndef C
X  #define C(c)		(0x1f & (c))
X+ #endif
X  const struct func_tab cmdlist[]={
X  	{C('d'), dokick},	/* "D" is for door!...? */
X  #ifdef WIZARD
X***************
X*** 616,622 ****
X  rhack(cmd)
X  register char *cmd;
X  {
X! 	register struct func_tab *tlist = cmdlist;
X  	boolean firsttime = FALSE;
X  	register int res;
X  
X--- 660,666 ----
X  rhack(cmd)
X  register char *cmd;
X  {
X! 	register const struct func_tab *tlist = cmdlist;
X  	boolean firsttime = FALSE;
X  	register int res;
X  
X***************
X*** 766,772 ****
X  movecmd(sym)	/* also sets u.dz, but returns false for <> */
X  char sym;
X  {
X! 	register char *dp, *sdp = flags.num_pad ? ndir : sdir;
X  
X  	u.dz = 0;
X  	if(!(dp = index(sdp, sym))) return 0;
X--- 810,817 ----
X  movecmd(sym)	/* also sets u.dz, but returns false for <> */
X  char sym;
X  {
X! 	register char *dp;
X! 	register const char *sdp = flags.num_pad ? ndir : sdir;
X  
X  	u.dz = 0;
X  	if(!(dp = index(sdp, sym))) return 0;
X***************
X*** 773,778 ****
X--- 818,829 ----
X  	u.dx = xdir[dp-sdp];
X  	u.dy = ydir[dp-sdp];
X  	u.dz = zdir[dp-sdp];
X+ #ifdef POLYSELF
X+ 	if (u.dx && u.dy && u.umonnum == PM_GRID_BUG) {
X+ 		u.dx = u.dy = 0;
X+ 		return 0;
X+ 	}
X+ #endif
X  	return !u.dz;
X  }
X  
X***************
X*** 804,810 ****
X  void
X  confdir()
X  {
X! 	register int x = rn2(8);
X  	u.dx = xdir[x];
X  	u.dy = ydir[x];
X  	return;
X--- 855,865 ----
X  void
X  confdir()
X  {
X! 	register int x = 
X! #ifdef POLYSELF
X! 		(u.umonnum == PM_GRID_BUG) ? 2*rn2(4) :
X! #endif
X! 							rn2(8);
X  	u.dx = xdir[x];
X  	u.dy = ydir[x];
X  	return;
X*** src/Old/decl.c	Sun Nov 19 12:35:05 1989
X--- src/decl.c	Sat Nov  4 13:40:18 1989
X***************
X*** 81,86 ****
X--- 81,91 ----
X  #endif
X  int CO = 0, LI = 0;	/* set up in termcap.c: usually COLNO and ROWNO+3 */
X  
X+ #ifdef CLIPPING
X+ boolean clipping;	/* clipping on? */
X+ int clipx, clipy, clipxmax, clipymax;
X+ #endif
X+ 
X  #ifdef TEXTCOLOR
X  char *hilites[MAXCOLORS];	/* terminal escapes for the various colors */
X  #endif
X***************
X*** 155,161 ****
X  	*uarmc = 0, *uarmh = 0, *uarms = 0, *uarmg = 0, *uarmf = 0, *uamul = 0,
X  	*uright = 0, *uleft = 0, *ublindf = 0, *uchain = 0, *uball = 0;
X  
X! const struct symbols defsyms = {
X      ' ', /* stone */
X      '|', /* vwall */
X      '-', /* hwall */
X--- 160,166 ----
X  	*uarmc = 0, *uarmh = 0, *uarms = 0, *uarmg = 0, *uarmf = 0, *uamul = 0,
X  	*uright = 0, *uleft = 0, *ublindf = 0, *uchain = 0, *uball = 0;
X  
X! symbol_array defsyms = {
X      ' ', /* stone */
X      '|', /* vwall */
X      '-', /* hwall */
X***************
X*** 172,178 ****
X      '-', /* hbeam */
X      '\\', /* lslant */
X      '/', /* rslant */
X!     '+', /* door */
X      '.', /* room */
X      '#', /* corr */
X      '<', /* upstair */
X--- 177,186 ----
X      '-', /* hbeam */
X      '\\', /* lslant */
X      '/', /* rslant */
X!     '.', /* ndoor */
X!     '-', /* vodoor */
X!     '|', /* hodoor */
X!     '+', /* cdoor */
X      '.', /* room */
X      '#', /* corr */
X      '<', /* upstair */
X***************
X*** 189,198 ****
X      '#', /* dbvwall */	/* used ifdef STRONGHOLD */
X      '#', /* dbhwall */	/* used ifdef STRONGHOLD */
X  };
X! struct symbols showsyms = DUMMY; /* will contain the symbols actually used */
X  #ifdef REINCARNATION
X! struct symbols savesyms = DUMMY;
X  #endif
X  
X  #ifdef SPELLS
X  struct spell spl_book[MAXSPELL + 1] = DUMMY;
X--- 197,243 ----
X      '#', /* dbvwall */	/* used ifdef STRONGHOLD */
X      '#', /* dbhwall */	/* used ifdef STRONGHOLD */
X  };
X! symbol_array showsyms = DUMMY; /* will contain the symbols actually used */
X  #ifdef REINCARNATION
X! symbol_array savesyms = DUMMY;
X! #endif
X! 
X! char *explainsyms[MAXPCHARS] = {
X! 	"a dark part of a room", "a wall", "a wall",
X! 	"a wall", "a wall", "a wall",
X! 	"a wall", "a wall", "a wall",
X! 	"a wall", "a wall", "a wall",
X! 	"a wall", "a wall", "a wall",
X! 	"a wall", "a doorway", "an open door",
X! 	"an open door", "a closed door", "the floor of a room",
X! 	"a corridor", "a staircase up", "a staircase down",
X! 	"a trap", "a web", "a water filled area",
X! #ifdef FOUNTAINS
X! 	"a fountain",
X! #else
X! 	"",
X! #endif
X! #ifdef SINKS
X! 	"a sink",
X! #else
X! 	"",
X! #endif
X! #ifdef THRONES
X! 	"an opulent throne",
X! #else
X! 	"",
X! #endif
X! #ifdef ALTARS
X! 	"an altar",
X! #else
X! 	"",
X! #endif
X! #ifdef STRONGHOLD
X! 	"a ladder up", "a ladder down", "a drawbridge", "a drawbridge"
X! #else
X! 	"", "", "", ""
X  #endif
X+ };
X  
X  #ifdef SPELLS
X  struct spell spl_book[MAXSPELL + 1] = DUMMY;
X*** src/Old/demon.c	Sun Nov 19 12:35:29 1989
X--- src/demon.c	Tue Oct 31 19:26:49 1989
X***************
X*** 8,16 ****
X  dsummon(ptr)		/* summon demon */
X  	register struct permonst *ptr;
X  {
X  	register int dtype, cnt = 0;
X  
X- #ifdef HARD
X  	if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) {
X  
X  	    dtype = (!rn2(20)) ? dprince() : (!rn2(4)) ? dlord() : ndemon();
X--- 8,16 ----
X  dsummon(ptr)		/* summon demon */
X  	register struct permonst *ptr;
X  {
X+ #ifdef INFERNO
X  	register int dtype, cnt = 0;
X  
X  	if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) {
X  
X  	    dtype = (!rn2(20)) ? dprince() : (!rn2(4)) ? dlord() : ndemon();
X***************
X*** 23,37 ****
X  
X  	} else if(is_ndemon(ptr)) {
X  
X! 	    dtype = (!rn2(20)) ? dlord() : ndemon();
X  	    cnt = 1;
X  	}
X  
X  	if(!dtype) return;
X- #else
X- 	dtype = PM_DEMON;
X- 	cnt = 1;
X- #endif
X  
X  	while(cnt > 0) {
X  
X--- 23,33 ----
X  
X  	} else if(is_ndemon(ptr)) {
X  
X! 	    dtype = (!rn2(20)) ? dlord() : (!rn2(6)) ? ndemon() : monsndx(ptr);
X  	    cnt = 1;
X  	}
X  
X  	if(!dtype) return;
X  
X  	while(cnt > 0) {
X  
X***************
X*** 38,47 ****
X  	    (void)makemon(&mons[dtype], u.ux, u.uy);
X  	    cnt--;
X  	}
X  	return;
X  }
X  
X! #ifdef HARD
X  #define	Athome	(Inhell && !mtmp->cham)
X  
X  int
X--- 34,46 ----
X  	    (void)makemon(&mons[dtype], u.ux, u.uy);
X  	    cnt--;
X  	}
X+ #else
X+ 	(void)makemon(&mons[PM_DEMON], u.ux, u.uy);
X+ #endif
X  	return;
X  }
X  
X! #ifdef INFERNO
X  #define	Athome	(Inhell && !mtmp->cham)
X  
X  int
X***************
X*** 105,111 ****
X  }
X  #endif
X  
X! #if defined(HARD) || (defined(ALTARS) && defined(THEOLOGY))
X  long
X  bribe(mtmp)
X  struct monst *mtmp;
X--- 104,110 ----
X  }
X  #endif
X  
X! #if defined(INFERNO) || (defined(ALTARS) && defined(THEOLOGY))
X  long
X  bribe(mtmp)
X  struct monst *mtmp;
X***************
X*** 137,143 ****
X  
X  int
X  dprince() {
X! #ifdef HARD
X  	int	tryct, pm;
X  
X  	for(tryct = 0; tryct < 20; tryct++) {
X--- 136,142 ----
X  
X  int
X  dprince() {
X! #ifdef INFERNO
X  	int	tryct, pm;
X  
X  	for(tryct = 0; tryct < 20; tryct++) {
X***************
X*** 153,159 ****
X  
X  int
X  dlord() {
X! #ifdef HARD
X  	int	tryct, pm;
X  
X  	for(tryct = 0; tryct < 20; tryct++) {
X--- 152,158 ----
X  
X  int
X  dlord() {
X! #ifdef INFERNO
X  	int	tryct, pm;
X  
X  	for(tryct = 0; tryct < 20; tryct++) {
X***************
X*** 169,175 ****
X  
X  int
X  ndemon() {
X! #ifdef HARD
X  	int	tryct;
X  	struct	permonst *ptr;
X  
X--- 168,174 ----
X  
X  int
X  ndemon() {
X! #ifdef INFERNO
X  	int	tryct;
X  	struct	permonst *ptr;
X  
X*** src/Old/do.c	Sun Nov 19 12:35:45 1989
X--- src/do.c	Fri Nov 17 19:31:29 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)do.c	3.0	89/06/12
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X--- 1,4 ----
X! /*	SCCS Id: @(#)do.c	3.0	89/11/15
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 12,18 ****
X  extern boolean level_exists[];
X  #endif
X  
X! static int drop P((struct obj *));
X  
X  static const char drop_types[] = { '0', GOLD_SYM, '#', 0 };
X  
X--- 12,20 ----
X  extern boolean level_exists[];
X  #endif
X  
X! #ifndef OVERLAY
X! static int FDECL(drop, (struct obj *));
X! #endif
X  
X  static const char drop_types[] = { '0', GOLD_SYM, '#', 0 };
X  
X***************
X*** 31,37 ****
X  int x,y;
X  {
X  	struct trap *t = t_at(x,y);
X! 	boolean pool = IS_POOL(levl[x][y].typ);
X  
X  	if(obj->otyp == BOULDER && (pool ||
X  	  (t && (t->ttyp==PIT || t->ttyp==SPIKED_PIT || t->ttyp==TRAPDOOR)))) {
X--- 33,39 ----
X  int x,y;
X  {
X  	struct trap *t = t_at(x,y);
X! 	boolean pool = is_pool(x,y);
X  
X  	if(obj->otyp == BOULDER && (pool ||
X  	  (t && (t->ttyp==PIT || t->ttyp==SPIKED_PIT || t->ttyp==TRAPDOOR)))) {
X***************
X*** 86,97 ****
X  {
X  	if (Blind) return;
X  	if (obj->blessed || obj->cursed) {
X! 		register const char *fcolor = Hallucination ? hcolor() :
X! 					obj->blessed ? amber : black;
X! 
X! 		pline("There is %s %s flash as %s hit%s the altar.",
X! 		      index(vowels, *fcolor) ? "an" : "a",
X! 		      fcolor,
X  		      doname(obj),
X  		      (obj->quan==1) ? "s" : "");
X  		if (!Hallucination) obj->bknown = 1;
X--- 88,96 ----
X  {
X  	if (Blind) return;
X  	if (obj->blessed || obj->cursed) {
X! 		pline("There is %s flash as %s hit%s the altar.",
X! 		      an(Hallucination ? hcolor() :
X! 			 obj->blessed ? amber : black),
X  		      doname(obj),
X  		      (obj->quan==1) ? "s" : "");
X  		if (!Hallucination) obj->bknown = 1;
X***************
X*** 125,131 ****
X  	You("drop %s down the drain.", doname(obj));
X  	switch(obj->otyp) {	/* effects that can be noticed without eyes */
X  	    case RIN_SEARCHING:
X! 	You("thought your %s got lost in the sink, but there it is!",
X  			xname(obj));
X  		dropx(obj);
X  		trycall(obj);
X--- 124,130 ----
X  	You("drop %s down the drain.", doname(obj));
X  	switch(obj->otyp) {	/* effects that can be noticed without eyes */
X  	    case RIN_SEARCHING:
X! 		You("thought your %s got lost in the sink, but there it is!",
X  			xname(obj));
X  		dropx(obj);
X  		trycall(obj);
X***************
X*** 181,192 ****
X  		    break;
X  		case RIN_HUNGER:
X  		    ideed = FALSE;
X! 		    for(otmp=fobj; otmp; otmp=otmp2) {
X! 			otmp2 = otmp->nobj;
X! 			if(otmp->ox == u.ux && otmp->oy == u.uy)
X! 			    if(otmp != uball && otmp != uchain) {
X! 				pline("Suddenly, %s vanishes from the sink!",
X! 							    doname(otmp));
X  			    delobj(otmp);
X  			    ideed = TRUE;
X  			}
X--- 180,190 ----
X  		    break;
X  		case RIN_HUNGER:
X  		    ideed = FALSE;
X! 		    for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp2) {
X! 			otmp2 = otmp->nexthere;
X! 			if(otmp != uball && otmp != uchain) {
X! 			    pline("Suddenly, %s vanishes from the sink!",
X! 							doname(otmp));
X  			    delobj(otmp);
X  			    ideed = TRUE;
X  			}
X***************
X*** 269,275 ****
X  	return(TRUE);
X  }
X  
X! static int
X  drop(obj) register struct obj *obj; {
X  	if(!obj) return(0);
X  	if(obj->olet == GOLD_SYM) {		/* pseudo object */
X--- 267,276 ----
X  	return(TRUE);
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  drop(obj) register struct obj *obj; {
X  	if(!obj) return(0);
X  	if(obj->olet == GOLD_SYM) {		/* pseudo object */
X***************
X*** 501,508 ****
X  			if (otmp == uwep)
X  				setuwep((struct obj *)0);
X  			if ((otmp != uwep) && (canletgo(otmp, ""))) {
X! 				Your("%s left behind on the stairs.",
X! 				     aobjnam(otmp, "get"));
X  				dropx(otmp);
X  			}
X  		}
X--- 502,509 ----
X  			if (otmp == uwep)
X  				setuwep((struct obj *)0);
X  			if ((otmp != uwep) && (canletgo(otmp, ""))) {
X! 				Your("%s you down the stairs.",
X! 				     aobjnam(otmp, "follow"));
X  				dropx(otmp);
X  			}
X  		}
X***************
X*** 561,569 ****
X  {
X  	register int fd;
X  	register boolean up = (newlevel < dlevel);
X- 	boolean stair_fall = (at_stairs && !up && ((inv_weight() + 5 > 0) || 
X- 						  Punished || Fumbling));
X- 	boolean stair_drag = FALSE;
X  
X  #ifdef ENDGAME
X  	if(dlevel == ENDLEVEL) return;	/* To be on the safe side.. */
X--- 562,567 ----
X***************
X*** 689,702 ****
X  	}
X  #endif
X  	if(Punished) unplacebc();
X- 	if (stair_fall) {
X- #ifdef STRONGHOLD
X- 			You("fall down the %s.",
X- 			    !at_ladder ? "stairs" : "ladder");
X- #else
X- 		You("fall down the stairs.");
X- #endif
X- 	}
X  	u.utrap = 0;				/* needed in level_tele */
X  	u.ustuck = 0;				/* idem */
X  	keepdogs();
X--- 687,692 ----
X***************
X*** 723,733 ****
X  	if (newlevel == rogue_level || dlevel == rogue_level) {
X  		/* No graphics characters on Rogue levels */
X  		if (dlevel != rogue_level) {
X! 			savesyms = showsyms;
X! 			showsyms = defsyms;
X  		}
X  		if (newlevel != rogue_level)
X! 			showsyms = savesyms;
X  	}
X  #endif
X  	dlevel = newlevel;
X--- 713,728 ----
X  	if (newlevel == rogue_level || dlevel == rogue_level) {
X  		/* No graphics characters on Rogue levels */
X  		if (dlevel != rogue_level) {
X! 			(void) memcpy((genericptr_t)savesyms,
X! 				      (genericptr_t)showsyms, sizeof savesyms);
X! 			(void) memcpy((genericptr_t)showsyms,
X! 				      (genericptr_t)defsyms, sizeof showsyms);
X! 			showsyms[S_vodoor] = showsyms[S_hodoor] = 
X! 			    showsyms[S_ndoor] = '+';
X  		}
X  		if (newlevel != rogue_level)
X! 			(void) memcpy((genericptr_t)showsyms,
X! 				      (genericptr_t)savesyms, sizeof showsyms);
X  	}
X  #endif
X  	dlevel = newlevel;
X***************
X*** 806,814 ****
X  		    u.uy = yupladder;
X  		}
X  #endif
X! 		if(stair_fall) {
X  			if (Punished) {
X! 				if (stair_drag)
X  					litter();
X  				if (carried(uball)) {
X  					if (uwep == uball)
X--- 801,816 ----
X  		    u.uy = yupladder;
X  		}
X  #endif
X! 		if(at_stairs && !up && ((inv_weight() + 5 > 0) || 
X! 					Punished || Fumbling)) {
X! #ifdef STRONGHOLD
X! 			You("fall down the %s.",
X! 			    !at_ladder ? "stairs" : "ladder");
X! #else
X! 			You("fall down the stairs.");
X! #endif
X  			if (Punished) {
X! 				if (drag_down())
X  					litter();
X  				if (carried(uball)) {
X  					if (uwep == uball)
X***************
X*** 904,910 ****
X--- 906,914 ----
X  	return(1);	/* Do nothing, but let other things happen */
X  }
X  
X+ #ifndef OVERLAY
X  static
X+ #endif
X  int
X  wipeoff() {
X  	if(u.ucreamed < 4)	u.ucreamed = 0;
X*** src/Old/do_name.c	Sun Nov 19 12:36:26 1989
X--- src/do_name.c	Wed Nov  8 22:56:28 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)do_name.c	3.0	88/11/24
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X--- 1,4 ----
X! /*	SCCS Id: @(#)do_name.c	3.0	89/11/08
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 32,42 ****
X  int force; char *goal;
X  {
X  	register int cx, cy, i, c;
X! 	char *sdp = flags.num_pad ? ndir : sdir;
X  	if(flags.verbose) pline("(For instructions type a ?)");
X  	cx = cc->x;
X  	cy = cc->y;
X  	curs(cx,cy+2);
X  	while((c = readchar()) != '.'){
X  		for(i=0; i<8; i++) if(sdp[i] == c){
X  			if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO)
X--- 32,47 ----
X  int force; char *goal;
X  {
X  	register int cx, cy, i, c;
X! 	const char *sdp = flags.num_pad ? ndir : sdir;
X  	if(flags.verbose) pline("(For instructions type a ?)");
X  	cx = cc->x;
X  	cy = cc->y;
X+ #ifdef CLIPPING
X+ 	cliparound(cx, cy);
X+ 	(void) win_curs(cx, cy);
X+ #else
X  	curs(cx,cy+2);
X+ #endif
X  	while((c = readchar()) != '.'){
X  		for(i=0; i<8; i++) if(sdp[i] == c){
X  			if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO)
X***************
X*** 63,69 ****
X--- 68,79 ----
X  			return;
X  		}
X  	nxtc:	;
X+ #ifdef CLIPPING
X+ 		cliparound(cx, cy);
X+ 		(void) win_curs(cx, cy);
X+ #else
X  		curs(cx,cy+2);
X+ #endif
X  	}
X  	cc->x = cx;
X  	cc->y = cy;
X***************
X*** 112,118 ****
X   	    if(!mtmp->mtame) {
X   		pline("%s gets %sangry!", Monnam(mtmp),
X   		      mtmp->mpeaceful ? "" : "very ");
X!  		mtmp->mpeaceful = mtmp->msleep = 0;
X   	    }
X   	    return(0);
X   	}
X--- 122,129 ----
X   	    if(!mtmp->mtame) {
X   		pline("%s gets %sangry!", Monnam(mtmp),
X   		      mtmp->mpeaceful ? "" : "very ");
X!  		mtmp->mpeaceful = 0;
X! 		mtmp->msleep = 0;
X   	    }
X   	    return(0);
X   	}
X***************
X*** 132,140 ****
X  }
X  
X  /*
X!  * This routine changes the address of  obj . Be careful not to call it
X   * when there might be pointers around in unknown places. For now: only
X!  * when  obj  is in the inventory.
X   */
X  static
X  void
X--- 143,151 ----
X  }
X  
X  /*
X!  * This routine changes the address of obj. Be careful not to call it
X   * when there might be pointers around in unknown places. For now: only
X!  * when obj is in the inventory.
X   */
X  static
X  void
X***************
X*** 168,174 ****
X  char	*buf;
X  register int ininv;
X  {
X! 	register struct obj *otmp, *otmp2;
X  	register int	lth;
X  
X  	lth = *buf ? strlen(buf)+1 : 0;
X--- 179,185 ----
X  char	*buf;
X  register int ininv;
X  {
X! 	register struct obj *otmp, *otmp2, *contents;
X  	register int	lth;
X  
X  	lth = *buf ? strlen(buf)+1 : 0;
X***************
X*** 210,215 ****
X--- 221,230 ----
X  			}
X  		}
X  	}
X+ 	if (Is_container(obj)) {
X+ 		for(contents=fcobj; contents; contents=contents->nobj)
X+ 			if(contents->cobj==obj) contents->cobj = otmp2;
X+ 	}
X  	/* obfree(obj, otmp2);	/* now unnecessary: no pointers on bill */
X  	free((genericptr_t) obj);	/* let us hope nobody else saved a pointer */
X  	return otmp2;
X***************
X*** 272,281 ****
X  	if (otemp.corpsenm) { /* kludge, meaning it's sink water */
X  		pline("Call a stream of %s fluid: ",
X  				objects[otemp.otyp].oc_descr);
X! 	} else {
X! 		str = xname(&otemp);
X! 		pline("Call %s %s: ", index(vowels,*str) ? "an" : "a", str);
X! 	}
X  	getlin(buf);
X  	clrlin();
X  	if(!*buf || *buf == '\033')
X--- 287,294 ----
X  	if (otemp.corpsenm) { /* kludge, meaning it's sink water */
X  		pline("Call a stream of %s fluid: ",
X  				objects[otemp.otyp].oc_descr);
X! 	} else
X! 		pline("Call %s: ", an(xname(&otemp)));
X  	getlin(buf);
X  	clrlin();
X  	if(!*buf || *buf == '\033')
X***************
X*** 345,356 ****
X  
X  	switch(mtmp->data->mlet) {
X  	    case S_GHOST:
X! 		{ register char *gn = (char *) mtmp->mextra;
X  		  if(!*gn) {		/* might also look in scorefile */
X  		    gn = ghostnames[rn2(SIZE(ghostnames))];
X  			Strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn);
X  		  }
X! 		  Sprintf(buf, "%s's ghost", gn);
X  		}
X  		break;
X  	    default:
X--- 358,369 ----
X  
X  	switch(mtmp->data->mlet) {
X  	    case S_GHOST:
X! 		{ register const char *gn = (const char *) mtmp->mextra;
X  		  if(!*gn) {		/* might also look in scorefile */
X  		    gn = ghostnames[rn2(SIZE(ghostnames))];
X  			Strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn);
X  		  }
X! 		  Sprintf(buf, "%s's ghost", (char *) mtmp->mextra);
X  		}
X  		break;
X  	    default:
X***************
X*** 472,479 ****
X  	int name;
X  
X  	do {
X! 		name = rn2(PM_CHAMELEON);
X! 		/* chameleon: last monster before player classes */
X  	} while(type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN));
X  	return(mons[name].mname);
X  }
X--- 485,492 ----
X  	int name;
X  
X  	do {
X! 		name = rn2(PM_ARCHEOLOGIST);
X! 		/* archeologist: first player class */
X  	} while(type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN));
X  	return(mons[name].mname);
X  }
X*** src/Old/do_wear.c	Sun Nov 19 12:36:52 1989
X--- src/do_wear.c	Sat Nov 11 17:29:31 1989
X***************
X*** 24,35 ****
X  /* for items that involve no delay */
X  static void
X  on_msg(otmp) register struct obj *otmp; {
X- 	register char *bp = xname(otmp);
X- 	char buf[BUFSZ];
X- 
X- 	setan(bp, buf);
X  	if(flags.verbose)
X! 	    You("are now wearing %s.", buf);
X  }
X  
X  boolean
X--- 24,31 ----
X  /* for items that involve no delay */
X  static void
X  on_msg(otmp) register struct obj *otmp; {
X  	if(flags.verbose)
X! 	    You("are now wearing %s.", an(xname(otmp)));
X  }
X  
X  boolean
X***************
X*** 72,78 ****
X   * The Type_off() functions call setworn() themselves.
X   */
X  
X! static int
X  Boots_on() {
X      long oldprop =
X  		u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
X--- 68,77 ----
X   * The Type_off() functions call setworn() themselves.
X   */
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  Boots_on() {
X      long oldprop =
X  		u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
X***************
X*** 220,226 ****
X      return 0;
X  }
X  
X! static int
X  Helmet_on() {
X      switch(uarmh->otyp) {
X  	case FEDORA:
X--- 219,228 ----
X      return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  Helmet_on() {
X      switch(uarmh->otyp) {
X  	case FEDORA:
X***************
X*** 288,294 ****
X      return 0;
X  }
X  
X! static int
X  Gloves_on() {
X      long oldprop =
X  	u.uprops[objects[uarmg->otyp].oc_oprop].p_flgs & ~(WORN_GLOVES | TIMEOUT);
X--- 290,299 ----
X      return 0;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  Gloves_on() {
X      long oldprop =
X  	u.uprops[objects[uarmg->otyp].oc_oprop].p_flgs & ~(WORN_GLOVES | TIMEOUT);
X***************
X*** 338,343 ****
X--- 343,356 ----
X  	default: impossible("Unknown type of gloves (%d)", uarmg->otyp);
X      }
X      setworn((struct obj *)0, W_ARMG);
X+     if (uwep && uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE) {
X+ 	/* Prevent wielding cockatrice when not wearing gloves */
X+ 	You("wield the cockatrice corpse in your bare %s.",
X+ 	    makeplural(body_part(HAND)));
X+ 	You("turn to stone...");
X+ 	killer = "cockatrice corpse";
X+ 	done(STONING);
X+     }
X      return 0;
X  }
X  
X***************
X*** 385,391 ****
X  /* This must be done in worn.c, because one of the possible intrinsics conferred
X   * is fire resistance, and we have to immediately set HFire_resistance in worn.c
X   * since worn.c will check it before returning.
X! static int
X  Armor_on()
X  {
X      return 0;
X--- 398,407 ----
X  /* This must be done in worn.c, because one of the possible intrinsics conferred
X   * is fire resistance, and we have to immediately set HFire_resistance in worn.c
X   * since worn.c will check it before returning.
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  Armor_on()
X  {
X      return 0;
X***************
X*** 691,696 ****
X--- 707,722 ----
X  /*	if (uarms) (void) Shield_on(); */
X  }
X  
X+ boolean
X+ donning(otmp)
X+ register struct obj *otmp;
X+ {
X+     return (otmp == uarmf && afternmv == Boots_on)
X+ 	|| (otmp == uarmh && afternmv == Helmet_on)
X+ 	|| (otmp == uarmg && afternmv == Gloves_on)
X+ /*	|| (otmp == uarm && afternmv == Armor_on)*/;
X+ }
X+ 
X  static const char clothes[] = {ARMOR_SYM, 0};
X  static const char accessories[] = {RING_SYM, AMULET_SYM, TOOL_SYM, 0};
X  
X***************
X*** 1118,1123 ****
X--- 1144,1151 ----
X  	return(1);
X  }
X  
X+ #define ARM_BONUS(obj)	((10 - objects[obj->otyp].a_ac) + obj->spe)
X+ 
X  void
X  find_ac() {
X  	register int uac = 10;
X***************
X*** 1227,1233 ****
X  	}
X  }
X  
X! static int
X  select_off(otmp)
X  register struct obj *otmp;
X  {
X--- 1255,1264 ----
X  	}
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  select_off(otmp)
X  register struct obj *otmp;
X  {
X***************
X*** 1332,1338 ****
X  	return(otmp);
X  }
X  
X! static int
X  take_off() {
X  
X  	register int i;
X--- 1363,1372 ----
X  	return(otmp);
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  take_off() {
X  
X  	register int i;
END_OF_FILE
if test 53756 -ne `wc -c <'patches06e'`; then
    echo shar: \"'patches06e'\" unpacked with wrong size!
fi
# end of 'patches06e'
fi
echo shar: End of archive 8 \(of 15\).
cp /dev/null ark8isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 15 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0