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

billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 9, Issue 8
Archive-name: NetHack3/Patch7h
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 30)."
# Contents:  patch7.04
# Wrapped by billr@saab on Wed Feb 21 10:04:29 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch7.04' -a "${1}" != "-c" ; then 
  echo shar: Renaming existing file \"'patch7.04'\" to \"'patch7.04.orig'\"
  mv -f 'patch7.04' 'patch7.04.orig'
fi
echo shar: Extracting \"'patch7.04'\" \(56054 characters\)
sed "s/^X//" >'patch7.04' <<'END_OF_FILE'
X*** src/Old/end.c	Mon Feb 19 18:02:33 1990
X--- src/end.c	Mon Feb 19 13:40:25 1990
X***************
X*** 2,10 ****
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  /* block some unused #defines to avoid overloading some cpp's */
X- #define MONATTK_H
X- #define NEED_VARARGS
X  
X  #include "hack.h"
X  #ifndef NO_SIGNAL
X--- 2,10 ----
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X+ #define MONATTK_H	/* comment line for pre-compiled headers */
X+ #define NEED_VARARGS	/* comment line for pre-compiled headers */
X  /* block some unused #defines to avoid overloading some cpp's */
X  
X  #include "hack.h"
X  #ifndef NO_SIGNAL
X***************
X*** 13,19 ****
X  
X  #include "eshk.h"
X  
X! void end_box_display();
X  
X  static const char *deaths[] = {		/* the array of death */
X  	"died", "choked", "poisoned", "starvation", "drowning",
X--- 13,20 ----
X  
X  #include "eshk.h"
X  
X! void NDECL(end_box_display);
X! static int NDECL(done_intr);
X  
X  static const char *deaths[] = {		/* the array of death */
X  	"died", "choked", "poisoned", "starvation", "drowning",
X***************
X*** 49,56 ****
X--- 50,62 ----
X  int
X  done2()
X  {
X+ #ifdef MACOS
X+ 	if(!flags.silent) SysBeep(1);
X+ 	if(UseMacAlert(128) != 1) {
X+ #else
X  	pline("Really quit? ");
X  	if(yn() == 'n') {
X+ #endif
X  #ifndef NO_SIGNAL
X  		(void) signal(SIGINT, (SIG_RET_TYPE) done1);
X  #endif
X***************
X*** 61,80 ****
X  		multi = 0;
X  		return 0;
X  	}
X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS))
X  	if(wizard) {
X! #ifdef VMS
X  	    pline("Enter debugger? ");
X! #else
X  	    pline("Dump core? ");
X! #endif
X  	    if(yn() == 'y') {
X  		(void) signal(SIGINT, (SIG_RET_TYPE) done1);
X  		settty(NULL);
X! #ifdef SYSV
X  		(void)
X! #endif
X  		    abort();
X  	    }
X  	}
X  #endif
X--- 67,95 ----
X  		multi = 0;
X  		return 0;
X  	}
X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS) || defined(LATTICE))
X  	if(wizard) {
X! # ifdef VMS
X  	    pline("Enter debugger? ");
X! # else
X! #  ifdef LATTICE
X! 	    pline("Create SnapShot? ");
X! #  else
X  	    pline("Dump core? ");
X! #  endif
X! # endif
X! /* KL - do I need to change the next 3 lines? */
X  	    if(yn() == 'y') {
X  		(void) signal(SIGINT, (SIG_RET_TYPE) done1);
X  		settty(NULL);
X! #ifdef AMIGA
X! 		Abort(0);
X! #else
X! # ifdef SYSV
X  		(void)
X! # endif
X  		    abort();
X+ #endif
X  	    }
X  	}
X  #endif
X***************
X*** 90,99 ****
X  	done_stopprint++;
X  #ifndef NO_SIGNAL
X  	(void) signal(SIGINT, SIG_IGN);
X! #if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGQUIT, SIG_IGN);
X! #endif
X! #endif /* TOS /* */
X  	return 0;
X  }
X  
X--- 105,114 ----
X  	done_stopprint++;
X  #ifndef NO_SIGNAL
X  	(void) signal(SIGINT, SIG_IGN);
X! # if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGQUIT, SIG_IGN);
X! # endif
X! #endif /* NO_SIGNAL /* */
X  	return 0;
X  }
X  
X***************
X*** 116,123 ****
X  
X  	You("die...");
X  	buf[0] = '\0';
X! 	if (mtmp->iswiz)
X  		Strcat(buf, "the ");
X  	if (mtmp->minvis)
X  		Strcat(buf, "invisible ");
X  	if (Hallucination)
X--- 131,140 ----
X  
X  	You("die...");
X  	buf[0] = '\0';
X! 	if (mtmp->iswiz) {
X  		Strcat(buf, "the ");
X+ 		killer_format = KILLED_BY;
X+ 	}
X  	if (mtmp->minvis)
X  		Strcat(buf, "invisible ");
X  	if (Hallucination)
X***************
X*** 125,136 ****
X  
X  	if(mtmp->data->mlet == S_GHOST) {
X  		register char *gn = (char *) mtmp->mextra;
X! 		if (!Hallucination && !mtmp->minvis && *gn)
X  			Strcat(buf, "the ");
X  		Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn);
X  	} else if(mtmp->isshk) {
X  		Sprintf(eos(buf), "%s %s, the shopkeeper",
X  			(ESHK(mtmp)->ismale ? "Mr." : "Ms."), shkname(mtmp));
X  	} else Strcat(buf, mtmp->data->mname);
X  	if (mtmp->mnamelth) Sprintf(eos(buf), " called %s", NAME(mtmp));
X  	killer = buf;
X--- 142,156 ----
X  
X  	if(mtmp->data->mlet == S_GHOST) {
X  		register char *gn = (char *) mtmp->mextra;
X! 		if (!Hallucination && !mtmp->minvis && *gn) {
X  			Strcat(buf, "the ");
X+ 			killer_format = KILLED_BY;
X+ 		}
X  		Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn);
X  	} else if(mtmp->isshk) {
X  		Sprintf(eos(buf), "%s %s, the shopkeeper",
X  			(ESHK(mtmp)->ismale ? "Mr." : "Ms."), shkname(mtmp));
X+ 		killer_format = KILLED_BY;
X  	} else Strcat(buf, mtmp->data->mname);
X  	if (mtmp->mnamelth) Sprintf(eos(buf), " called %s", NAME(mtmp));
X  	killer = buf;
X***************
X*** 155,174 ****
X  extern boolean hu;	/* from save.c */
X  
X  void
X! panic VA_DECL(char *, str)
X  	VA_START(str);
X  	VA_INIT(str, char *);
X- #ifdef MACOS
X- 	puts(str);
X- 	more();
X- #endif
X  
X  	if(panicking++)
X! #ifdef SYSV
X  	    (void)
X! #endif
X  		abort();    /* avoid loops - this should never happen*/
X  				    /* was exit(1) */
X  	home(); cls();
X  	(void) puts(" Suddenly, the dungeon collapses.");
X  #if defined(WIZARD) && !defined(MSDOS)
X--- 175,194 ----
X  extern boolean hu;	/* from save.c */
X  
X  void
X! panic VA_DECL(const char *, str)
X  	VA_START(str);
X  	VA_INIT(str, char *);
X  
X  	if(panicking++)
X! #ifdef AMIGA
X! 	    Abort(0);
X! #else
X! # ifdef SYSV
X  	    (void)
X! # endif
X  		abort();    /* avoid loops - this should never happen*/
X  				    /* was exit(1) */
X+ #endif
X  	home(); cls();
X  	(void) puts(" Suddenly, the dungeon collapses.");
X  #if defined(WIZARD) && !defined(MSDOS)
X***************
X*** 195,208 ****
X  #else
X  	(void) fputs(" ERROR:  ", stdout);
X  #endif
X  	Vprintf(str,VA_ARGS);
X  	more();				/* contains a fflush() */
X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS))
X  	if (wizard)
X! # ifdef SYSV
X  		(void)
X! # endif
X  		    abort();	/* generate core dump */
X  #endif
X  	VA_END();
X  	done(PANICKED);
X--- 215,240 ----
X  #else
X  	(void) fputs(" ERROR:  ", stdout);
X  #endif
X+ #ifdef LATTICE
X+ 	{
X+ 	char pbuf[100];
X+ 	vsprintf(pbuf,str,VA_ARGS);
X+ 	(void)puts(pbuf);
X+ 	}
X+ #else
X  	Vprintf(str,VA_ARGS);
X+ #endif
X  	more();				/* contains a fflush() */
X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS) || defined(LATTICE))
X  	if (wizard)
X! # ifdef AMIGA
X! 		Abort(0);
X! # else
X! #  ifdef SYSV
X  		(void)
X! #  endif
X  		    abort();	/* generate core dump */
X+ # endif
X  #endif
X  	VA_END();
X  	done(PANICKED);
X***************
X*** 213,231 ****
X  done(how)
X  int how;
X  {
X  	struct permonst *upmon;
X! 	char buf[BUFSZ], buf2[BUFSZ], buf3[BUFSZ];
X! 	/* buf: used if killer gets changed
X  	 * buf2: same as player name, except it is capitalized
X- 	 * buf3: used to copy killer in case it comes from something like
X- 		xname(), which would otherwise get overwritten when we call
X- 		xname() when listing possessions
X  	 */
X  	char	c;
X  	boolean taken;
X! 
X! 	Strcpy(buf3, (!killer || how >= PANICKED ? deaths[how] : killer));
X! 	killer = buf3;
X  #ifdef WIZARD
X  	if (wizard && how == TRICKED) {
X  		You("are a very tricky wizard, it seems.");
X--- 245,272 ----
X  done(how)
X  int how;
X  {
X+ #ifdef MACOS
X+ 	int see_c;
X+ 	char mac_buf[80];
X+ #endif
X  	struct permonst *upmon;
X! 	char kilbuf[BUFSZ], buf2[BUFSZ];
X! 	/* kilbuf: used to copy killer in case it comes from something like
X! 	 *	xname(), which would otherwise get overwritten when we call
X! 	 *	xname() when listing possessions
X  	 * buf2: same as player name, except it is capitalized
X  	 */
X  	char	c;
X  	boolean taken;
X! #ifdef ENDGAME
X! 	if (how == ASCENDED)
X! 		killer_format = NO_KILLER_PREFIX;
X! #endif
X! 	/* Avoid killed by "a" burning or "a" starvation */
X! 	if (!killer && (how == STARVING || how == BURNING))
X! 		killer_format = KILLED_BY;
X! 	Strcpy(kilbuf, (!killer || how >= PANICKED ? deaths[how] : killer));
X! 	killer = kilbuf;
X  #ifdef WIZARD
X  	if (wizard && how == TRICKED) {
X  		You("are a very tricky wizard, it seems.");
X***************
X*** 280,289 ****
X  die:
X  #ifndef NO_SIGNAL
X  	(void) signal(SIGINT, (SIG_RET_TYPE) done_intr);
X! #if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr);
X  	(void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup);
X! #endif
X  #endif /* NO_SIGNAL /* */
X  	upmon = player_mon();
X  	if(u.ugrave_arise > -1) /* create no corpse */ ;
X--- 321,330 ----
X  die:
X  #ifndef NO_SIGNAL
X  	(void) signal(SIGINT, (SIG_RET_TYPE) done_intr);
X! # if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr);
X  	(void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup);
X! # endif
X  #endif /* NO_SIGNAL /* */
X  	upmon = player_mon();
X  	if(u.ugrave_arise > -1) /* create no corpse */ ;
X***************
X*** 297,307 ****
X  		(void) mk_named_object(CORPSE, upmon, u.ux, u.uy, plname,
X  							strlen(plname));
X  
X! 	if(how == QUIT && u.uhp < 1) {
X! 		how = DIED;
X! 		Strcpy(buf, "quit while already on Charon's boat");
X! 		killer = buf;
X  	}
X  	taken = paybill();
X  	paygd();
X  	clearlocks();
X--- 338,352 ----
X  		(void) mk_named_object(CORPSE, upmon, u.ux, u.uy, plname,
X  							strlen(plname));
X  
X! 	if (how == QUIT) {
X! 		killer_format = NO_KILLER_PREFIX;
X! 		if (u.uhp < 1) {
X! 			how = DIED;
X! /* note that killer is pointing at kilbuf */
X! 			Strcpy(kilbuf, "quit while already on Charon's boat");
X! 		}
X  	}
X+ 	if (how == ESCAPED) killer_format = NO_KILLER_PREFIX;
X  	taken = paybill();
X  	paygd();
X  	clearlocks();
X***************
X*** 308,320 ****
X  	if(flags.toplin == 1) more();
X  
X  	if(invent) {
X  	    if(taken)
X  		pline("Do you want to see what you had when you %s? ",
X  			(how == QUIT) ? "quit" : "died");
X  	    else
X  		pline("Do you want your possessions identified? ");
X- 	    /* New dump format by maartenj@cs.vu.nl */
X  	    if ((c = yn_function(ynqchars,'y')) == 'y') {
X  		struct obj *obj;
X  
X  		for(obj = invent; obj && !done_stopprint; obj = obj->nobj) {
X--- 353,381 ----
X  	if(flags.toplin == 1) more();
X  
X  	if(invent) {
X+ #ifndef MACOS
X  	    if(taken)
X  		pline("Do you want to see what you had when you %s? ",
X  			(how == QUIT) ? "quit" : "died");
X  	    else
X  		pline("Do you want your possessions identified? ");
X  	    if ((c = yn_function(ynqchars,'y')) == 'y') {
X+ #else
X+ 		{
X+ 			extern short macflags;
X+ 		
X+ 			/* stop user from using menus, etc. */
X+ 			macflags &= ~(fDoNonKeyEvt | fDoUpdate);
X+ 		}
X+ 	    if(taken)
X+ 		sprintf(mac_buf, "Do you want to see what you had when you %s? ",
X+ 			(how == QUIT) ? "quit" : "died");
X+ 	    else
X+ 		sprintf(mac_buf, "Do you want your possessions identified? ");
X+ 		if(!flags.silent) SysBeep(1);
X+ 	    if ((c = "qqynq"[UseMacAlertText(129,mac_buf)+1]) == 'y') {
X+ #endif
X+ 	    /* New dump format by maartenj@cs.vu.nl */
X  		struct obj *obj;
X  
X  		for(obj = invent; obj && !done_stopprint; obj = obj->nobj) {
X***************
X*** 339,361 ****
X  	    }
X  	}
X  
X  	if(how < GENOCIDED) {
X  #ifdef WIZARD
X  	    if(wizard) {
X  		pline("Save bones? ");
X  		if(yn() == 'y') savebones();
X  	    }  else
X  #endif
X! 		savebones();
X  	    if(!flags.notombstone) outrip();
X  	}
X! 	if(how == STONING) {
X! 		Strcpy(buf, "turned to stone by ");
X! 		Strcat(buf, killer);
X! 		/* No a or an; topten.c will do that. */
X! 		killer = buf;
X! 	}
X! 	if(u.uhave_amulet) Strcat(killer, " (with the Amulet)");
X  	settty(NULL);	/* does a clear_screen() */
X  	Strcpy(buf2, plname);
X  	if('a' <= buf2[0] && buf2[0] <= 'z') buf2[0] += 'A'-'a';
X--- 400,437 ----
X  	    }
X  	}
X  
X+ 	if (!done_stopprint) {
X+ #ifdef MACOS
X+ 		c = "qqynq"[UseMacAlertText(129, "Do you want to see your instrinsics ?")+1];
X+ #else
X+ 	    pline("Do you want to see your intrinsics? ");
X+ 	    c = yn_function(ynqchars, 'y');
X+ #endif
X+ 	    if (c == 'y') enlightenment();
X+ 	    if (c == 'q') done_stopprint++;
X+ 	}
X+ 
X  	if(how < GENOCIDED) {
X  #ifdef WIZARD
X  	    if(wizard) {
X+ #ifdef MACOS
X+ 		if(!flags.silent) SysBeep(20);
X+ 		if(UseMacAlertText(128, "Save bones ?") == 1) savebones();
X+ #else
X  		pline("Save bones? ");
X  		if(yn() == 'y') savebones();
X+ #endif
X  	    }  else
X  #endif
X! 		if (how != PANICKED && how !=TRICKED)
X! 			savebones();
X  	    if(!flags.notombstone) outrip();
X  	}
X! 
X! /* changing kilbuf really changes killer. we do it this way because
X!    killer is declared a (const char *)
X! */
X! 	if(u.uhave_amulet) Strcat(kilbuf, " (with the Amulet)");
X  	settty(NULL);	/* does a clear_screen() */
X  	Strcpy(buf2, plname);
X  	if('a' <= buf2[0] && buf2[0] <= 'z') buf2[0] += 'A'-'a';
X***************
X*** 362,369 ****
X  	if(!done_stopprint)
X  	    Printf("Goodbye %s the %s...\n\n", buf2,
X  #ifdef ENDGAME
X! 		   how != ASCENDED ? pl_character :
X! 		   flags.female ? "Demigoddess" : "Demigod");
X  #else
X  		   pl_character);
X  #endif
X--- 438,446 ----
X  	if(!done_stopprint)
X  	    Printf("Goodbye %s the %s...\n\n", buf2,
X  #ifdef ENDGAME
X! 		   how != ASCENDED ? (const char *)pl_character :
X! 		   flags.female ? (const char *)"Demigoddess" : 
X! 			(const char *)"Demigod");
X  #else
X  		   pl_character);
X  #endif
X***************
X*** 467,484 ****
X  	if(!done_stopprint)
X    Printf("You were level %u with a maximum of %d hit points when you %s.\n",
X  	    u.ulevel, u.uhpmax, ends[how]);
X! 	if(how == ESCAPED && !done_stopprint){
X! 		getret();	/* all those pieces of colored glass ... */
X! 		cls();
X! 	}
X! #if (defined(WIZARD) || defined(EXPLORE_MODE)) && !defined(LOGFILE)
X  	if(wizard || discover)
X  		Printf("\nSince you were in %s mode, the score list \
X  will not be checked.\n", wizard ? "wizard" : "discover");
X  	else
X  #endif
X! 		topten();
X  /* "So when I die, the first thing I will see in Heaven is a score list?" */
X  	if(done_stopprint) Printf("\n\n");
X  #if defined(APOLLO) || defined(MACOS)
X  	getret();
X--- 544,565 ----
X  	if(!done_stopprint)
X    Printf("You were level %u with a maximum of %d hit points when you %s.\n",
X  	    u.ulevel, u.uhpmax, ends[how]);
X! #if (defined(WIZARD) || defined(EXPLORE_MODE))
X! # ifndef LOGFILE
X  	if(wizard || discover)
X  		Printf("\nSince you were in %s mode, the score list \
X  will not be checked.\n", wizard ? "wizard" : "discover");
X  	else
X+ # endif
X  #endif
X! 	{
X! 		if (!done_stopprint) {
X! 			getret();
X! 			cls();
X! 		}
X  /* "So when I die, the first thing I will see in Heaven is a score list?" */
X+ 		topten(how);
X+ 	}
X  	if(done_stopprint) Printf("\n\n");
X  #if defined(APOLLO) || defined(MACOS)
X  	getret();
X***************
X*** 488,499 ****
X  
X  void
X  clearlocks(){
X! #if defined(DGK) && !defined(OLD_TOS)
X  	eraseall(levels, alllevels);
X  	if (ramdisk)
X  		eraseall(permbones, alllevels);
X  #else
X! # if defined(UNIX) || (defined(MSDOS) && !defined(OLD_TOS)) || defined(VMS) || defined(MACOS)
X  	register int x;
X  #  if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGHUP,SIG_IGN);
X--- 569,580 ----
X  
X  void
X  clearlocks(){
X! #if defined(DGK)
X  	eraseall(levels, alllevels);
X  	if (ramdisk)
X  		eraseall(permbones, alllevels);
X  #else
X! # if defined(UNIX) || defined(MSDOS) || defined(VMS) || defined(MACOS)
X  	register int x;
X  #  if defined(UNIX) || defined(VMS)
X  	(void) signal(SIGHUP,SIG_IGN);
X*** src/Old/engrave.c	Mon Feb 19 18:03:09 1990
X--- src/engrave.c	Wed Feb 14 18:38:01 1990
X***************
X*** 4,10 ****
X  
X  #include	"hack.h"
X  
X! struct engr {
X  	struct engr *nxt_engr;
X  	char *engr_txt;
X  	xchar engr_x, engr_y;
X--- 4,10 ----
X  
X  #include	"hack.h"
X  
X! VSTATIC struct engr {
X  	struct engr *nxt_engr;
X  	char *engr_txt;
X  	xchar engr_x, engr_y;
X***************
X*** 18,25 ****
X  #define POLY	5	/* temporary type - for polymorphing engraving */
X  } *head_engr;
X  
X! static void FDECL(del_engr, (struct engr *));
X  
X  /* random engravings */
X  const char *random_engr[] =
X  			 {"Elbereth", "ad ae?ar um",
X--- 18,27 ----
X  #define POLY	5	/* temporary type - for polymorphing engraving */
X  } *head_engr;
X  
X! OSTATIC void FDECL(del_engr, (struct engr *));
X! OSTATIC struct engr * FDECL(engr_at,(XCHAR_P,XCHAR_P));
X  
X+ #ifdef OVLB
X  /* random engravings */
X  const char *random_engr[] =
X  			 {"Elbereth", "ad ae?ar um",
X***************
X*** 32,38 ****
X  			 "Y?u won?t get i? up ?he ste?s",
X  			 "A.S. ->"};
X  
X! static struct engr *
X  engr_at(x,y) register xchar x,y; {
X  register struct engr *ep = head_engr;
X  	while(ep) {
X--- 34,43 ----
X  			 "Y?u won?t get i? up ?he ste?s",
X  			 "A.S. ->"};
X  
X! #endif /* OVLB */
X! #ifdef OVL0
X! 
X! XSTATIC struct engr *
X  engr_at(x,y) register xchar x,y; {
X  register struct engr *ep = head_engr;
X  	while(ep) {
X***************
X*** 46,52 ****
X  #ifdef ELBERETH
X  int
X  sengr_at(s,x,y)
X! 	register char *s;
X  	register xchar x,y;
X  {
X  	register struct engr *ep = engr_at(x,y);
X--- 51,57 ----
X  #ifdef ELBERETH
X  int
X  sengr_at(s,x,y)
X! 	register const char *s;
X  	register xchar x,y;
X  {
X  	register struct engr *ep = engr_at(x,y);
X***************
X*** 68,73 ****
X--- 73,81 ----
X  }
X  #endif
X  
X+ #endif /* OVL0 */
X+ #ifdef OVL2
X+ 
X  void
X  u_wipe_engr(cnt)
X  register int cnt;
X***************
X*** 76,81 ****
X--- 84,92 ----
X  		wipe_engr_at(u.ux, u.uy, cnt);
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVL1
X+ 
X  void
X  wipe_engr_at(x,y,cnt) register xchar x,y,cnt; {
X  register struct engr *ep = engr_at(x,y);
X***************
X*** 104,109 ****
X--- 115,123 ----
X  	}
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVL2
X+ 
X  void
X  read_engr_at(x,y) register int x,y; {
X  register struct engr *ep = engr_at(x,y);
X***************
X*** 136,145 ****
X  	}
X  }
X  
X  void
X  make_engr_at(x,y,s)
X  register int x,y;
X! register char *s;
X  {
X  	register struct engr *ep;
X  
X--- 150,162 ----
X  	}
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+ 
X  void
X  make_engr_at(x,y,s)
X  register int x,y;
X! register const char *s;
X  {
X  	register struct engr *ep;
X  
X***************
X*** 163,169 ****
X   */
X  int
X  freehand(){
X- 
X  	return(!uwep ||
X  	   !uwep->cursed ||
X  	   (!bimanual(uwep) && (!uarms || !uarms->cursed)));
X--- 180,185 ----
X***************
X*** 188,193 ****
X--- 204,210 ----
X  register char *sp, *sptmp;
X  register struct engr *ep, *oep = engr_at(u.ux,u.uy);
X  char buf[BUFSZ];
X+ boolean jello = FALSE;
X  xchar type, polytype = 0;
X  int spct;		/* number of leading spaces */
X  register struct obj *otmp;
X***************
X*** 194,201 ****
X  	multi = 0;
X  
X  	if(u.uswallow) {
X! 		pline("What would you write?  \"Jonah was here\"?");
X! 		return(0);
X  	}
X  
X  	/* one may write with finger, weapon or wand */
X--- 211,225 ----
X  	multi = 0;
X  
X  	if(u.uswallow) {
X! 		if (is_animal(u.ustuck->data)) {
X! 			pline("What would you write?  \"Jonah was here\"?");
X! 			return(0);
X! 		} else
X! 			if (is_whirly(u.ustuck->data)) {
X! 				You("can't reach the ground.");
X! 				return(0);
X! 			} else 
X! 				jello = TRUE;
X  	}
X  
X  	/* one may write with finger, weapon or wand */
X***************
X*** 225,230 ****
X--- 249,262 ----
X  	if(otmp != &zeroobj && index(too_large,otmp->olet)) {
X  		You("can't engrave with such a large object!");
X  		return(1);
X+        }
X+ 
X+ 	if (jello) {
X+ 		You("tickle %s with your %s.", mon_nam(u.ustuck), 
X+ 		    (otmp == &zeroobj) ? makeplural(body_part(FINGER)) :
X+ 			xname(otmp));
X+ 		Your("message dissolves...");
X+ 		return(0);
X  	}
X  
X  	if(otmp != &zeroobj && index(paper,otmp->olet)) {
X***************
X*** 452,458 ****
X  			nomovemsg = "You finish writing.";
X  			if(type != MARK)
X  			nomovemsg = "You finish engraving.";
X! 			if(otmp->olet != WAND_SYM && otmp->otyp != ATHAME)  {
X  				if(otmp->olet == WEAPON_SYM)
X  					Your("%s dull.",
X  					       aobjnam(otmp, "get"));
X--- 484,491 ----
X  			nomovemsg = "You finish writing.";
X  			if(type != MARK)
X  			nomovemsg = "You finish engraving.";
X! 			if(otmp->olet != WAND_SYM && (otmp->otyp != ATHAME
X! 					|| otmp->cursed))  {
X  				if(otmp->olet == WEAPON_SYM)
X  					Your("%s dull.",
X  					       aobjnam(otmp, "get"));
X***************
X*** 535,540 ****
X--- 568,576 ----
X  save_engravings(fd) int fd; {
X  register struct engr *ep = head_engr;
X  register struct engr *ep2;
X+ #ifdef __GNULINT__
X+ static long nulls[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
X+ #endif
X  	while(ep) {
X  	    ep2 = ep->nxt_engr;
X  	    if(ep->engr_lth && ep->engr_txt[0]){
X***************
X*** 541,554 ****
X  		bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth));
X  		bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth);
X  	    }
X! #if defined(DGK) && !defined(OLD_TOS)
X  	    if (!count_only)
X  #endif
X  		free((genericptr_t) ep);
X  	    ep = ep2;
X  	}
X  	bwrite(fd, (genericptr_t)nul, sizeof(unsigned));
X! #if defined(DGK) && !defined(OLD_TOS)
X  	if (!count_only)
X  #endif
X  		head_engr = 0;
X--- 577,596 ----
X  		bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth));
X  		bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth);
X  	    }
X! #if defined(DGK)
X  	    if (!count_only)
X  #endif
X  		free((genericptr_t) ep);
X  	    ep = ep2;
X  	}
X+ 
X+ #ifdef __GNULINT__
X+ 	bwrite(fd, (genericptr_t)nulls, sizeof(unsigned));
X+ #else
X  	bwrite(fd, (genericptr_t)nul, sizeof(unsigned));
X! #endif
X! 
X! #if defined(DGK)
X  	if (!count_only)
X  #endif
X  		head_engr = 0;
X***************
X*** 570,576 ****
X  	}
X  }
X  
X! static void
X  del_engr(ep) register struct engr *ep; {
X  register struct engr *ept;
X  	if(ep == head_engr)
X--- 612,618 ----
X  	}
X  }
X  
X! XSTATIC void
X  del_engr(ep) register struct engr *ep; {
X  register struct engr *ept;
X  	if(ep == head_engr)
X***************
X*** 588,590 ****
X--- 630,634 ----
X  	}
X  	free((genericptr_t) ep);
X  }
X+ 
X+ #endif /* OVLB */
X*** src/Old/exper.c	Mon Feb 19 18:03:38 1990
X--- src/exper.c	Wed Nov 29 19:29:16 1989
X***************
X*** 117,123 ****
X  
X  	if(u.ulevel > 1) {
X  		pline("Goodbye level %u.", u.ulevel--);
X! 		adjabil(-1);	/* remove intrinsic abilities */
X  	} else
X  		u.uhp = -1;
X  	num = newhp();
X--- 117,124 ----
X  
X  	if(u.ulevel > 1) {
X  		pline("Goodbye level %u.", u.ulevel--);
X! 		/* remove intrinsic abilities */
X! 		adjabil((int)u.ulevel+1, (int)u.ulevel);
X  	} else
X  		u.uhp = -1;
X  	num = newhp();
X***************
X*** 151,157 ****
X  		if (u.uexp >= newuexp(u.ulevel)) u.uexp = newuexp(u.ulevel) - 1;
X  		pline("Welcome to experience level %u.", u.ulevel);
X  		set_uasmon();	/* set up for the new level. */
X! 		adjabil(1);	/* give new intrinsic abilities */
X  		tmp = newhp();
X  		u.uhpmax += tmp;
X  		u.uhp += tmp;
X--- 152,159 ----
X  		if (u.uexp >= newuexp(u.ulevel)) u.uexp = newuexp(u.ulevel) - 1;
X  		pline("Welcome to experience level %u.", u.ulevel);
X  		set_uasmon();	/* set up for the new level. */
X! 		/* give new intrinsics */
X! 		adjabil((int)u.ulevel-1, (int)u.ulevel);
X  		tmp = newhp();
X  		u.uhpmax += tmp;
X  		u.uhp += tmp;
X***************
X*** 180,186 ****
X  	if(u.ulevel < MAXULEV) {
X  		u.uexp = newuexp(u.ulevel);
X  		pline("Welcome to experience level %u.", ++u.ulevel);
X! 		adjabil(1);
X  	}
X  	flags.botl = 1;
X  }
X--- 182,188 ----
X  	if(u.ulevel < MAXULEV) {
X  		u.uexp = newuexp(u.ulevel);
X  		pline("Welcome to experience level %u.", ++u.ulevel);
X! 		adjabil((int)u.ulevel-1, (int)u.ulevel);
X  	}
X  	flags.botl = 1;
X  }
X*** src/Old/extralev.c	Mon Feb 19 18:03:58 1990
X--- src/extralev.c	Thu Jan 25 22:04:06 1990
X***************
X*** 2,9 ****
X  /*	Copyright 1988, 1989 by Ken Arromdee				*/
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  /* block some unused #defines to avoid overloading some cpp's */
X- #define MONATTK_H
X  #include "hack.h"
X  
X  #ifdef REINCARNATION
X--- 2,9 ----
X  /*	Copyright 1988, 1989 by Ken Arromdee				*/
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X+ #define MONATTK_H	/* comment line for pre-compiled headers */
X  /* block some unused #defines to avoid overloading some cpp's */
X  #include "hack.h"
X  
X  #ifdef REINCARNATION
X***************
X*** 21,26 ****
X--- 21,29 ----
X  #define RIGHT 8
X  
X  static struct rogueroom r[3][3];
X+ static void FDECL(roguejoin,(int,int,int,int,int));
X+ static void FDECL(roguecorr,(int,int,int));
X+ static void FDECL(miniwalk,(int,int));
X  
X  static
X  void
X*** src/Old/fountain.c	Mon Feb 19 18:04:25 1990
X--- src/fountain.c	Wed Feb  7 18:37:42 1990
X***************
X*** 6,11 ****
X--- 6,16 ----
X  #include "hack.h"
X  
X  #ifdef FOUNTAINS
X+ static void NDECL(dowatersnakes);
X+ static void NDECL(dowaterdemon);
X+ static void NDECL(dowaternymph);
X+ static void FDECL(dogushforth,(int));	
X+ static void NDECL(dofindgem);
X  
X  static
X  void
X***************
X*** 12,18 ****
X  dowatersnakes() /* Fountain of snakes! */ {
X  	register int num = rnd(6);
X  	if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) {
X! 		pline("An endless stream of snakes pours forth!");
X  		while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy);
X  	} else
X  		pline("The fountain bubbles furiously for a moment, then calms.");
X--- 17,26 ----
X  dowatersnakes() /* Fountain of snakes! */ {
X  	register int num = rnd(6);
X  	if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) {
X! 		if (!Blind)
X! 			pline("An endless stream of snakes pours forth!");
X! 		else
X! 			You("hear something hissing!");
X  		while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy);
X  	} else
X  		pline("The fountain bubbles furiously for a moment, then calms.");
X***************
X*** 24,34 ****
X  register struct monst *mtmp;
X  
X  	if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) {
X! 	    You("have unleashed %s!", defmonnam(mtmp));
X  
X  	/* Give those on low levels a (slightly) better chance of survival */
X  	    if ( rnd(100) > (80 + dlevel)) {
X! 		pline("Grateful for his release, he grants you a wish!");
X  		makewish();
X  		mongone(mtmp);
X  	    }
X--- 32,46 ----
X  register struct monst *mtmp;
X  
X  	if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) {
X! 	    if (!Blind)
X! 	    	You("have unleashed %s!", defmonnam(mtmp));
X! 	    else
X! 		You("feel the presence of evil.");
X  
X  	/* Give those on low levels a (slightly) better chance of survival */
X  	    if ( rnd(100) > (80 + dlevel)) {
X! 		pline("Grateful for %s release, %s grants you a wish!",
X! 			Blind ? "its" : "his", Blind ? "it" : "he" );
X  		makewish();
X  		mongone(mtmp);
X  	    }
X***************
X*** 40,50 ****
X  dowaternymph() /* Water Nymph */ {
X  	register struct monst *mtmp;
X  	if((mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy))) {
X! 
X! 		You("have attracted %s!", defmonnam(mtmp));
X  		mtmp->msleep = 0;
X  	} else
X! 		pline("A large bubble rises to the surface and pops.");
X  }
X  
X  
X--- 52,67 ----
X  dowaternymph() /* Water Nymph */ {
X  	register struct monst *mtmp;
X  	if((mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy))) {
X! 		if (!Blind)
X! 		   You("have attracted %s!", defmonnam(mtmp));
X! 		else
X! 		   You("hear a seductive voice.");
X  		mtmp->msleep = 0;
X  	} else
X! 		if (!Blind)
X! 		   pline("A large bubble rises to the surface and pops.");
X! 		else
X! 		   You("hear a loud pop.");
X  }
X  
X  
X***************
X*** 106,112 ****
X  void
X  dryup(){
X  	if (!rn2(3) && IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
X! 		pline("The fountain dries up!");
X  		levl[u.ux][u.uy].typ = ROOM;
X  		levl[u.ux][u.uy].looted = 0;
X  		if(Invisible) newsym(u.ux, u.uy);
X--- 123,129 ----
X  void
X  dryup(){
X  	if (!rn2(3) && IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
X! 		if (!Blind) pline("The fountain dries up!");
X  		levl[u.ux][u.uy].typ = ROOM;
X  		levl[u.ux][u.uy].looted = 0;
X  		if(Invisible) newsym(u.ux, u.uy);
X***************
X*** 154,164 ****
X  #else
X  	   pline("Perhaps it is runoff from the nearby orange farm.");
X  #endif
X! 			   losehp(rnd(4),"unrefrigerated sip of juice");
X  			   break;
X  			}
X  			losestr(rn1(4,3));
X! 			losehp(rnd(10),"contaminated water");
X  			break;
X  	
X  		case 22: /* Fountain of snakes! */
X--- 171,182 ----
X  #else
X  	   pline("Perhaps it is runoff from the nearby orange farm.");
X  #endif
X! 			   losehp(rnd(4),"unrefrigerated sip of juice",
X! 				KILLED_BY_AN);
X  			   break;
X  			}
X  			losestr(rn1(4,3));
X! 			losehp(rnd(10),"contaminated water", KILLED_BY);
X  			break;
X  	
X  		case 22: /* Fountain of snakes! */
X***************
X*** 237,243 ****
X  	}
X  
X  	if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6)
X! #ifndef NAMED_ITEMS
X  	    && !strcmp(ONAME(obj), "Excalibur")
X  #endif
X  	   ) {
X--- 255,263 ----
X  	}
X  
X  	if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6)
X! #ifdef NAMED_ITEMS
X! 	    && !is_artifact(obj) && !exist_artifact(obj, "Excalibur")
X! #else
X  	    && !strcmp(ONAME(obj), "Excalibur")
X  #endif
X  	   ) {
X***************
X*** 314,319 ****
X--- 334,340 ----
X  		 * by.	Just like a shopping mall!  Chris Woodbury  */
X  
X  			mkgold((long)(rnd((MAXLEVEL-dlevel)*2)+5), u.ux, u.uy);
X+ 			if (!Blind)
X  		pline("Far below you, you see coins glistening in the water.");
X  			break;
X  	}
X***************
X*** 339,345 ****
X  		case 2: You("take a sip of scalding hot water.");
X  			if (Fire_resistance)
X  				pline("It seems quite tasty.");
X! 			else losehp(rnd(6), "sip of boiling water");
X  			break;
X  		case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD)
X  				pline("The sink seems quite dirty.");
X--- 360,366 ----
X  		case 2: You("take a sip of scalding hot water.");
X  			if (Fire_resistance)
X  				pline("It seems quite tasty.");
X! 			else losehp(rnd(6), "sipping boiling water", KILLED_BY);
X  			break;
X  		case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD)
X  				pline("The sink seems quite dirty.");
X*** src/Old/hack.c	Mon Feb 19 18:05:17 1990
X--- src/hack.c	Fri Feb 16 22:10:43 1990
X***************
X*** 4,12 ****
X  #include "hack.h"
X  
X  #if defined(UNIX) && !defined(LINT)
X! static	const char	SCCS_Id[] = "@(#)hack.c	3.0\t89/11/03";
X  #endif
X  
X  /* called on movement:
X  	1. when throwing ball+chain far away
X  	2. when teleporting
X--- 4,21 ----
X  #include "hack.h"
X  
X  #if defined(UNIX) && !defined(LINT)
X! static	const char	SCCS_Id[] = "@(#)hack.c	3.0\t89/11/20";
X  #endif
X  
X+ OSTATIC int NDECL(moverock);
X+ #ifdef SINKS
X+ OSTATIC void NDECL(dosinkfall);
X+ #endif
X+ static boolean FDECL(is_edge,(XCHAR_P,XCHAR_P));
X+ static boolean FDECL(bad_rock,(XCHAR_P,XCHAR_P));
X+ 
X+ #ifdef OVLB
X+ 
X  /* called on movement:
X  	1. when throwing ball+chain far away
X  	2. when teleporting
X***************
X*** 24,30 ****
X  	    for(y = u.uy-1; y < u.uy+2; y++) {
X  		if(!isok(x, y)) continue;
X  		lev = &levl[x][y];
X! 		if(!lev->lit && IS_FLOOR(lev->typ)){
X  			lev->scrsym = STONE_SYM;
X  			lev->new = 1;
X  			on_scr(x,y);
X--- 33,39 ----
X  	    for(y = u.uy-1; y < u.uy+2; y++) {
X  		if(!isok(x, y)) continue;
X  		lev = &levl[x][y];
X! 		if(!lev->lit && lev->scrsym == ROOM_SYM) {
X  			lev->scrsym = STONE_SYM;
X  			lev->new = 1;
X  			on_scr(x,y);
X***************
X*** 42,49 ****
X  	in mhitu.c:  seeoff(1)	- swallowed
X  	in mthrow.c: seeoff(0)	- hit by a cream pie.
X  	in potion.c: seeoff(0)	- quaffing or sniffing a potion of blindness
X! 	in spell.c:  seeoff(0)	- due to a cursed spellbook
X! 	in trap.c:   seeoff(1)	- fall through trapdoor
X   */
X  void
X  seeoff(mode)
X--- 51,58 ----
X  	in mhitu.c:  seeoff(1)	- swallowed
X  	in mthrow.c: seeoff(0)	- hit by a cream pie.
X  	in potion.c: seeoff(0)	- quaffing or sniffing a potion of blindness
X! 	in spell.c:  seeoff(0)	- due to a cursed spell book
X! 	in trap.c:   seeoff(1)	- fall through trap door
X   */
X  void
X  seeoff(mode)
X***************
X*** 67,73 ****
X  			lev = &levl[x][y];
X  			if(MON_AT(x, y))
X  			    unpmon(m_at(x,y));
X! 			if(!lev->lit && IS_FLOOR(lev->typ)) {
X  			    lev->seen = 0;
X  			    atl(x, y, (char)STONE_SYM);
X  			}
X--- 76,82 ----
X  			lev = &levl[x][y];
X  			if(MON_AT(x, y))
X  			    unpmon(m_at(x,y));
X! 			if(!lev->lit && lev->scrsym == ROOM_SYM) {
X  			    lev->seen = 0;
X  			    atl(x, y, (char)STONE_SYM);
X  			}
X***************
X*** 75,81 ****
X  	    }
X  }
X  
X! static int
X  moverock() {
X  	register xchar rx, ry;
X  	register struct obj *otmp;
X--- 84,93 ----
X  	    }
X  }
X  
X! #endif /* OVLB */
X! #ifdef OVL2
X! 
X! XSTATIC int
X  moverock() {
X  	register xchar rx, ry;
X  	register struct obj *otmp;
X***************
X*** 143,150 ****
X  				rloco(otmp);
X  				continue;
X  			    }
X! 			if(levl[rx][ry].typ == DOOR &&
X! 				(levl[rx][ry].doormask & (D_LOCKED | D_CLOSED)))
X  				goto nopushmsg;
X  			if(is_pool(rx,ry)) {
X  #ifdef STRONGHOLD
X--- 155,161 ----
X  				rloco(otmp);
X  				continue;
X  			    }
X! 			if(closed_door(rx, ry))
X  				goto nopushmsg;
X  			if(is_pool(rx,ry)) {
X  #ifdef STRONGHOLD
X***************
X*** 209,229 ****
X  	return (0);
X  }
X  
X  void
X  movobj(obj, ox, oy)
X  register struct obj *obj;
X  register xchar ox, oy;
X  {
X! 	/* Some dirty programming to get display right */
X! 	freeobj(obj);
X! 	unpobj(obj);
X! 	obj->nobj = fobj;
X! 	fobj = obj;
X! 	move_object(obj, ox, oy);
X  }
X  
X  #ifdef SINKS
X! static
X  void
X  dosinkfall() {
X  	register struct obj *obj;
X--- 220,241 ----
X  	return (0);
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+ 
X  void
X  movobj(obj, ox, oy)
X  register struct obj *obj;
X  register xchar ox, oy;
X  {
X! 	remove_object(obj);
X! 	newsym(obj->ox, obj->oy);
X! 	place_object(obj, ox, oy);
X! 	newsym(ox, oy);
X  }
X  
X  #ifdef SINKS
X! XSTATIC
X  void
X  dosinkfall() {
X  	register struct obj *obj;
X***************
X*** 234,244 ****
X  	} else {
X  # endif
X  		You("crash to the floor!");
X! 		losehp((rn1(10, 20 - (int)ACURR(A_CON))),"fall onto a sink");
X  		for(obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere)
X  		    if(obj->olet == WEAPON_SYM) {
X  			You("fell on %s.",doname(obj));
X! 			losehp(rn2(3),"fall onto a sink");
X  		    }
X  # ifdef POLYSELF
X  	}
X--- 246,257 ----
X  	} else {
X  # endif
X  		You("crash to the floor!");
X! 		losehp((rn1(10, 20 - (int)ACURR(A_CON))),
X! 			"fell onto a sink", NO_KILLER_PREFIX);
X  		for(obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere)
X  		    if(obj->olet == WEAPON_SYM) {
X  			You("fell on %s.",doname(obj));
X! 			losehp(rn2(3),"fell onto a sink", NO_KILLER_PREFIX);
X  		    }
X  # ifdef POLYSELF
X  	}
X***************
X*** 264,269 ****
X--- 277,285 ----
X  }
X  #endif
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  static boolean
X  is_edge(x,y)
X  register xchar x,y;
X***************
X*** 279,284 ****
X--- 295,303 ----
X  	       (y == rooms[roomno].ly - 1) || (y == rooms[roomno].hy + 1));
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  boolean
X  may_dig(x,y)
X  register xchar x,y;
X***************
X*** 287,292 ****
X--- 306,314 ----
X  return (!(IS_STWALL(levl[x][y].typ) && (levl[x][y].diggable & W_NONDIGGABLE)));
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  static boolean
X  bad_rock(x,y)
X  register xchar x,y;
X***************
X*** 348,354 ****
X  		if(u.ustuck && (x != u.ustuck->mx ||
X  				y != u.ustuck->my)) {
X  			if(dist(u.ustuck->mx, u.ustuck->my) > 2) {
X! 				/* perhaps it fled (or was teleported or ... ) */
X  				u.ustuck = 0;
X  			} else {
X  #ifdef POLYSELF
X--- 370,376 ----
X  		if(u.ustuck && (x != u.ustuck->mx ||
X  				y != u.ustuck->my)) {
X  			if(dist(u.ustuck->mx, u.ustuck->my) > 2) {
X! 			/* perhaps it fled (or was teleported or ... ) */
X  				u.ustuck = 0;
X  			} else {
X  #ifdef POLYSELF
X***************
X*** 376,382 ****
X  			/* Don't attack if you're running */
X  			if (flags.run && !mtmp->mimic &&
X  				    (Blind ? Telepat :
X! 					    (!mtmp->minvis || See_invisible))) {
X  				nomul(0);
X  				flags.move = 0;
X  				return;
X--- 398,404 ----
X  			/* Don't attack if you're running */
X  			if (flags.run && !mtmp->mimic &&
X  				    (Blind ? Telepat :
X! 					 (!mtmp->minvis || See_invisible))) {
X  				nomul(0);
X  				flags.move = 0;
X  				return;
X***************
X*** 434,471 ****
X  		    return;
X  	    }
X  #endif
X! 	    if(IS_DOOR(tmpr->typ) && (tmpr->doormask & (D_LOCKED | D_CLOSED))
X  #ifdef POLYSELF
X! 	       && !amorphous(uasmon)
X  #endif
X- 	      ){
X  		    flags.move = 0;
X  		    if(x == u.ux || y == u.uy) {
X  		        if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling)
X  			    pline("Ouch!  You bump into a door.");
X! 		        else pline("That door is closed.");
X  		    }
X  		    nomul(0);
X  		    return;
X  	    }
X  #ifdef POLYSELF
X  	}
X  #endif
X  	ust = &levl[u.ux][u.uy];
X  	if(bad_rock(x,y) ||
X  	   (u.dx && u.dy
X  #ifdef POLYSELF
X! 		    && !passes_walls(uasmon)
X  #endif
X  #ifdef REINCARNATION
X! 		    && (((IS_DOOR(tmpr->typ) && ((tmpr->doormask & ~D_BROKEN)
X! 				|| dlevel == rogue_level)) ||
X! 		        ((IS_DOOR(ust->typ) && ((ust->doormask & ~D_BROKEN)
X! 				|| dlevel == rogue_level))))))) {
X  #else
X! 		    && (((IS_DOOR(tmpr->typ) && (tmpr->doormask & ~D_BROKEN)) ||
X! 		      ((IS_DOOR(ust->typ) && (ust->doormask & ~D_BROKEN))))))){
X  #endif
X  		flags.move = 0;
X  		nomul(0);
X  		return;
X--- 456,505 ----
X  		    return;
X  	    }
X  #endif
X! 	    if(closed_door(x, y)) {
X  #ifdef POLYSELF
X! 		if(amorphous(uasmon))
X! 		    You("ooze under the door.");
X! 		else {
X  #endif
X  		    flags.move = 0;
X  		    if(x == u.ux || y == u.uy) {
X  		        if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling)
X  			    pline("Ouch!  You bump into a door.");
X! 		         else pline("That door is closed.");
X  		    }
X  		    nomul(0);
X  		    return;
X+ #ifdef POLYSELF
X+ 		}
X+ #endif
X  	    }
X  #ifdef POLYSELF
X  	}
X  #endif
X  	ust = &levl[u.ux][u.uy];
X+ 
X  	if(bad_rock(x,y) ||
X  	   (u.dx && u.dy
X  #ifdef POLYSELF
X! 		 && !passes_walls(uasmon)
X  #endif
X+ 		 && ( (IS_DOOR(ust->typ) && block_entry(x, y)) ||
X  #ifdef REINCARNATION
X! 			(IS_DOOR(tmpr->typ) &&
X! 			 ((tmpr->doormask & ~D_BROKEN) 
X! 			   || dlevel == rogue_level || block_door(x, y))
X!                         )  
X! 		     || (IS_DOOR(ust->typ) &&
X! 			 ((ust->doormask & ~D_BROKEN) || dlevel == rogue_level)
X!                         )
X  #else
X! 			(IS_DOOR(tmpr->typ) &&
X! 			 ((tmpr->doormask & ~D_BROKEN) || block_door(x, y))) ||
X! 			(IS_DOOR(ust->typ) && (ust->doormask & ~D_BROKEN))
X  #endif
X+ 		    )
X+ 	   )) {
X  		flags.move = 0;
X  		nomul(0);
X  		return;
X***************
X*** 507,514 ****
X  		}
X  
X  		movobj(uball, uchain->ox, uchain->oy);
X! 		unpobj(uball);		/* BAH %% */
X! 		move_object(uchain, u.ux, u.uy);
X  		nomul(-2);
X  		nomovemsg = "";
X  	nodrag:	;
X--- 541,547 ----
X  		}
X  
X  		movobj(uball, uchain->ox, uchain->oy);
X! 		movobj(uchain, u.ux, u.uy);
X  		nomul(-2);
X  		nomovemsg = "";
X  	nodrag:	;
X***************
X*** 515,521 ****
X  	}
X  #ifdef POLYSELF
X  	if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) {
X! 		static char *digtxt;
X  
X  		if(dig_pos.x != x || dig_pos.y != y
X  		    || dig_level != dlevel || dig_down) {
X--- 548,554 ----
X  	}
X  #ifdef POLYSELF
X  	if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) {
X! 		static const char *digtxt;
X  
X  		if(dig_pos.x != x || dig_pos.y != y
X  		    || dig_level != dlevel || dig_down) {
X***************
X*** 649,654 ****
X--- 682,690 ----
X  	spoteffects();
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVL2
X+ 
X  void
X  spoteffects()
X  {
X***************
X*** 676,681 ****
X--- 712,720 ----
X  
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+ 
X  int
X  dopickup() {
X  	/* uswallow case added by GAN 01/29/87 */
X***************
X*** 684,690 ****
X  		    You("pick up %s's tongue.", mon_nam(u.ustuck));
X  		    pline("But it's kind of slimy, so you drop it.");
X  		} else
X! 		    pline("You don't %s anything in here to pick up.",
X  			  Blind ? "feel" : "see");
X  		return(1);
X  	}
X--- 723,729 ----
X  		    You("pick up %s's tongue.", mon_nam(u.ustuck));
X  		    pline("But it's kind of slimy, so you drop it.");
X  		} else
X! 		    You("don't %s anything in here to pick up.",
X  			  Blind ? "feel" : "see");
X  		return(1);
X  	}
X***************
X*** 700,705 ****
X--- 739,747 ----
X  	return(1);
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL2
X+ 
X  /* stop running if we see something interesting */
X  /* turn around a corner if that is the only way we can proceed */
X  /* do not turn left or right twice */
X***************
X*** 707,715 ****
X  lookaround() {
X  	register int x, y, i, x0, y0, m0, i0 = 9, corrct = 0, noturn = 0;
X  	register struct monst *mtmp;
X! #ifdef LINT
X  	/* suppress "used before set" message */
X! 	x0 = y0 = 0;
X  #endif
X  	if(Blind || flags.run == 0) return;
X  	for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) {
X--- 749,757 ----
X  lookaround() {
X  	register int x, y, i, x0, y0, m0, i0 = 9, corrct = 0, noturn = 0;
X  	register struct monst *mtmp;
X! #if defined(LINT) || defined(__GNULINT__)
X  	/* suppress "used before set" message */
X! 	x0 = y0 = m0 = 0;
X  #endif
X  	if(Blind || flags.run == 0) return;
X  	for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) {
X***************
X*** 823,829 ****
X  		if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic &&
X  		   !mtmp->mtame && !mtmp->mpeaceful &&
X  		   !noattacks(mtmp->data) &&
X! 		   !mtmp->mfroz && !mtmp->msleep &&  /* aplvax!jcn */
X  		   (!mtmp->minvis || See_invisible) &&
X  		   !onscary(u.ux, u.uy, mtmp))
X  			return(1);
X--- 865,871 ----
X  		if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic &&
X  		   !mtmp->mtame && !mtmp->mpeaceful &&
X  		   !noattacks(mtmp->data) &&
X! 		   mtmp->mcanmove && !mtmp->msleep &&  /* aplvax!jcn */
X  		   (!mtmp->minvis || See_invisible) &&
X  		   !onscary(u.ux, u.uy, mtmp))
X  			return(1);
X***************
X*** 831,836 ****
X--- 873,881 ----
X  	return(0);
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVL0
X+ 
X  int
X  cansee(x,y)
X  xchar x,y;
X***************
X*** 847,852 ****
X--- 892,900 ----
X  	return(0);
X  }
X  
X+ #endif /* OVL0 */
X+ #ifdef OVL1
X+ 
X  int
X  sgn(a)
X  	register int a;
X***************
X*** 854,859 ****
X--- 902,910 ----
X  	return((a > 0) ? 1 : (a == 0) ? 0 : -1);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVL2
X+ 
X  void
X  getcorners(lx1,hx1,ly1,hy1,lx2,hx2,ly2,hy2)
X  xchar *lx1,*hx1,*ly1,*hy1,*lx2,*hx2,*ly2,*hy2;
X***************
X*** 901,906 ****
X--- 952,960 ----
X  	}
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVL1
X+ 
X  void
X  setsee() {
X  	register int x, y;
X***************
X*** 937,942 ****
X--- 991,999 ----
X  	}
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVL2
X+ 
X  void
X  nomul(nval)
X  	register int nval;
X***************
X*** 946,955 ****
X  	flags.mv = flags.run = 0;
X  }
X  
X  void
X! losehp(n, knam)
X! 	register int n;
X! 	register const char *knam;
X  {
X  #ifdef POLYSELF
X  	if (u.mtimedone) {
X--- 1003,1016 ----
X  	flags.mv = flags.run = 0;
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVL1
X+ 
X  void
X! losehp(n, knam, k_format)
X! register int n;
X! register const char *knam;
X! boolean k_format;
X  {
X  #ifdef POLYSELF
X  	if (u.mtimedone) {
X***************
X*** 965,971 ****
X  		u.uhpmax = u.uhp;	/* perhaps n was negative */
X  	flags.botl = 1;
X  	if(u.uhp < 1) {
X! 		killer = (char *)knam;	/* the thing that killed you */
X  		You("die...");
X  		done(DIED);
X  	} else if(u.uhp*10 < u.uhpmax && moves-wailmsg > 50 && n > 0){
X--- 1026,1033 ----
X  		u.uhpmax = u.uhp;	/* perhaps n was negative */
X  	flags.botl = 1;
X  	if(u.uhp < 1) {
X! 		killer_format = k_format;
X! 		killer = knam;		/* the thing that killed you */
X  		You("die...");
X  		done(DIED);
X  	} else if(u.uhp*10 < u.uhpmax && moves-wailmsg > 50 && n > 0){
X***************
X*** 1052,1057 ****
X--- 1114,1122 ----
X  	return(wt - weight_cap());
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  int
X  inv_cnt() {
X  	register struct obj *otmp = invent;
X***************
X*** 1115,1117 ****
X--- 1180,1184 ----
X  	objects[x].oc_name_known = 1;
X  }
X  #endif /* STUPID_CPP */
X+ 
X+ #endif /* OVLB */
X*** src/Old/invent.c	Mon Feb 19 18:06:12 1990
X--- src/invent.c	Mon Feb 19 10:18:41 1990
X***************
X*** 11,20 ****
X  
X  #define	NOINVSYM	'#'
X  
X! static boolean mergable();
X  
X  int lastinvnr = 51;	/* 0 ... 51 */
X- static char *xprname();
X  
X  char inv_order[] = {
X  	AMULET_SYM, WEAPON_SYM, ARMOR_SYM, FOOD_SYM, SCROLL_SYM,
X--- 11,34 ----
X  
X  #define	NOINVSYM	'#'
X  
X! static boolean FDECL(mergable,(struct obj *,struct obj *));
X! OSTATIC void FDECL(assigninvlet,(struct obj *));
X! static int FDECL(merged,(struct obj *,struct obj *,int));
X! OSTATIC struct obj *FDECL(mkgoldobj,(long));
X! #ifndef OVERLAY
X! static int FDECL(ckunpaid,(struct obj *));
X! #else
X! int FDECL(ckunpaid,(struct obj *));
X! #endif
X! static boolean NDECL(wearing_armor);
X! static boolean FDECL(is_worn,(struct obj *));
X! static char FDECL(obj_to_let,(struct obj *));
X! 
X! OSTATIC char *FDECL(xprname,(struct obj *,CHAR_P,BOOLEAN_P));
X  
X+ #ifdef OVLB
X+ 
X  int lastinvnr = 51;	/* 0 ... 51 */
X  
X  char inv_order[] = {
X  	AMULET_SYM, WEAPON_SYM, ARMOR_SYM, FOOD_SYM, SCROLL_SYM,
X***************
X*** 24,30 ****
X  	POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM,
X  	ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 };
X  
X! static void
X  assigninvlet(otmp)
X  register struct obj *otmp;
X  {
X--- 38,44 ----
X  	POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM,
X  	ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 };
X  
X! XSTATIC void
X  assigninvlet(otmp)
X  register struct obj *otmp;
X  {
X***************
X*** 51,56 ****
X--- 65,73 ----
X  	lastinvnr = i;
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  /* merge obj with otmp and delete obj if types agree */
X  static int
X  merged(otmp, obj, lose)
X***************
X*** 67,72 ****
X--- 84,91 ----
X  			/ (otmp->quan + obj->quan);
X  		otmp->quan += obj->quan;
X  		otmp->owt += obj->owt;
X+ 		if(!otmp->onamelth && obj->onamelth)
X+ 			(void)oname(otmp, ONAME(obj), 1);
X  		if(lose) freeobj(obj);
X  		obfree(obj,otmp);	/* free(obj), bill->otmp */
X  		return(1);
X***************
X*** 130,140 ****
X  		 * for correct calculation */
X  		if (stone_luck(TRUE) >= 0) u.moreluck = LUCKADD;
X  		else u.moreluck = -LUCKADD;
X- 		flags.botl = 1;
X  	}
X  	return(obj);
X  }
X  
X  void
X  useup(obj)
X  register struct obj *obj;
X--- 149,161 ----
X  		 * for correct calculation */
X  		if (stone_luck(TRUE) >= 0) u.moreluck = LUCKADD;
X  		else u.moreluck = -LUCKADD;
X  	}
X  	return(obj);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  void
X  useup(obj)
X  register struct obj *obj;
X***************
X*** 146,151 ****
X--- 167,173 ----
X  		obj->quan--;
X  		obj->owt = weight(obj);
X  	} else {
X+ 		if(obj->otyp == CORPSE) food_disappears(obj);
X  		setnotworn(obj);
X  		freeinv(obj);
X  		delete_contents(obj);
X***************
X*** 188,193 ****
X--- 210,217 ----
X  #ifdef WALKIES
X  	if(obj->otyp == LEASH && obj->leashmon != 0) o_unleash(obj);
X  #endif
X+ 	if(obj->otyp == CORPSE) food_disappears(obj);
X+ 
X  	freeobj(obj);
X  	unpobj(obj);
X  
X***************
X*** 248,253 ****
X--- 272,280 ----
X  #endif
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL0
X+ 
X  struct obj *
X  sobj_at(n,x,y)
X  register int n, x, y;
X***************
X*** 260,265 ****
X--- 287,295 ----
X  	return((struct obj *)0);
X  }
X  
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+ 
X  int
X  carried(obj)
X  register struct obj *obj;
X***************
X*** 331,337 ****
X  }
X  
X  /* make dummy object structure containing gold - for temporary use only */
X! static
X  struct obj *
X  mkgoldobj(q)
X  register long q;
X--- 361,367 ----
X  }
X  
X  /* make dummy object structure containing gold - for temporary use only */
X! XSTATIC
X  struct obj *
X  mkgoldobj(q)
X  register long q;
X***************
X*** 341,346 ****
X--- 371,379 ----
X  	otmp = newobj(0);
X  	/* should set o_id etc. but otmp will be freed soon */
X  	otmp->olet = GOLD_SYM;
X+ #ifdef POLYSELF
X+ 	otmp->ox = 0; /* necessary for eating gold */
X+ #endif
X  	u.ugold -= q;
X  	OGOLD(otmp) = q;
X  	flags.botl = 1;
X***************
X*** 347,352 ****
X--- 380,388 ----
X  	return(otmp);
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  /*
X   * getobj returns:
X   *	struct obj *xxx:	object to do something with.
X***************
X*** 378,383 ****
X--- 414,424 ----
X  	if(*let == '0') let++, allowcnt = 1;
X  	if(*let == GOLD_SYM) let++,
X  		usegold = TRUE, allowgold = (u.ugold ? TRUE : FALSE);
X+ #ifdef POLYSELF
X+ 	/* Equivalent of an "ugly check" for gold */
X+ 	if (usegold && !strcmp(word, "eat") && !metallivorous(uasmon))
X+ 		usegold = allowgold = FALSE;
X+ #endif
X  	if(*let == '#') let++, allowall = TRUE;
X  	if(*let == '-') let++, allownone = TRUE;
X  	if(allownone) *bp++ = '-';
X***************
X*** 410,417 ****
X  		/* Second ugly check; unlike the first it won't trigger an
X  		 * "else" in "you don't have anything else to ___".
X  		 */
X! 		if ((!strcmp(word, "wear") &&
X  		    (otmp->olet == TOOL_SYM && otmp->otyp != BLINDFOLD))
X  		|| (!strcmp(word, "can") &&
X  		    (otmp->otyp != CORPSE))
X  		|| (!strcmp(word, "write with") &&
X--- 451,461 ----
X  		/* Second ugly check; unlike the first it won't trigger an
X  		 * "else" in "you don't have anything else to ___".
X  		 */
X! 		else if ((!strcmp(word, "wear") &&
X  		    (otmp->olet == TOOL_SYM && otmp->otyp != BLINDFOLD))
X+ #ifdef POLYSELF
X+ 		|| (!strcmp(word, "eat") && !is_edible(otmp))
X+ #endif
X  		|| (!strcmp(word, "can") &&
X  		    (otmp->otyp != CORPSE))
X  		|| (!strcmp(word, "write with") &&
X***************
X*** 508,514 ****
X  			allowcnt = 1;
X  			if(cnt == 0 && prezero) return((struct obj *)0);
X  			if(cnt > 1) {
X! 			    pline("You can only throw one item at a time.");
X  			    continue;
X  			}
X  		}
X--- 552,558 ----
X  			allowcnt = 1;
X  			if(cnt == 0 && prezero) return((struct obj *)0);
X  			if(cnt > 1) {
X! 			    You("can only throw one item at a time.");
X  			    continue;
X  			}
X  		}
X***************
X*** 552,557 ****
X--- 596,602 ----
X  		if(cnt == 0) return (struct obj *)0;
X  		if(cnt != otmp->quan) {
X  			register struct obj *obj;
X+ 			
X  #ifdef LINT	/*splitobj for (long )cnt > 30000 && sizeof(int) == 2*/
X  			obj = (struct obj *)0;
X  #else
X***************
X*** 561,566 ****
X--- 606,620 ----
X  			else
X  				obj = splitobj(otmp, (int) cnt);
X  #endif
X+ 		/* Very ugly kludge necessary to prevent someone from trying
X+ 		 * to drop one of several loadstones and having the loadstone
X+ 		 * now be separate.  If putting items in containers is ever
X+ 		 * changed to allow putting in counts of individual items, a
X+ 		 * similar kludge will be needed.
X+ 		 */
X+ 			if (!strcmp(word, "drop") && obj->otyp == LOADSTONE
X+ 					&& obj->cursed)
X+ 				otmp->corpsenm = obj->invlet;
X  			if(otmp == uwep) setuwep(obj);
X  		}
X  	}
X***************
X*** 567,572 ****
X--- 621,629 ----
X  	return(otmp);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  #ifndef OVERLAY
X  static 
X  #endif
X***************
X*** 600,607 ****
X  /* Takeoff (A). Return the number of times fn was called successfully */
X  int
X  ggetobj(word, fn, mx)
X! register char *word;
X! register int (*fn)(), mx;
X  {
X  	char buf[BUFSZ];
X  	register char *ip;
X--- 657,664 ----
X  /* Takeoff (A). Return the number of times fn was called successfully */
X  int
X  ggetobj(word, fn, mx)
X! register const char *word;
X! register int FDECL((*fn),(struct obj *)), mx;
X  {
X  	char buf[BUFSZ];
X  	register char *ip;
X***************
X*** 609,615 ****
X  	register int oletct = 0, iletct = 0;
X  	register boolean allflag = FALSE;
X  	char olets[20], ilets[20];
X! 	int (*ckfn)() = (int (*)()) 0;
X  	xchar allowgold = (u.ugold && !strcmp(word, "drop")) ? 1 : 0; /* BAH */
X  	register boolean takeoff = !strcmp(word, "take off");
X  
X--- 666,672 ----
X  	register int oletct = 0, iletct = 0;
X  	register boolean allflag = FALSE;
X  	char olets[20], ilets[20];
X! 	int FDECL((*ckfn),(struct obj *)) = (int (*)()) 0;
X  	xchar allowgold = (u.ugold && !strcmp(word, "drop")) ? 1 : 0; /* BAH */
X  	register boolean takeoff = !strcmp(word, "take off");
X  
X***************
X*** 708,715 ****
X  askchain(objchn, ininv, olets, allflag, fn, ckfn, mx, word)
X  register struct obj *objchn;
X  register int ininv, allflag, mx;
X! register char *olets, *word;
X! register int (*fn)(), (*ckfn)();
X  {
X  	register struct obj *otmp, *otmp2;
X  	register char sym, ilet;
X--- 765,772 ----
X  askchain(objchn, ininv, olets, allflag, fn, ckfn, mx, word)
X  register struct obj *objchn;
X  register int ininv, allflag, mx;
X! register const char *olets, *word;
X! register int FDECL((*fn),(struct obj *)), FDECL((*ckfn),(struct obj *));
X  {
X  	register struct obj *otmp, *otmp2;
X  	register char sym, ilet;
X***************
X*** 732,742 ****
X  		if(takeoff && !is_worn(otmp)) continue;
X  		if(ckfn && !(*ckfn)(otmp)) continue;
X  		if(!allflag) {
X! 			if(ininv) {
X! 			    if (nodot)
X! 				 pline(xprname(otmp, ilet, FALSE));
X! 			    else pline(xprname(otmp, ilet, TRUE));
X! 			}
X  			else
X  			    pline(doname(otmp));
X  			addtopl("? ");
X--- 789,797 ----
X  		if(takeoff && !is_worn(otmp)) continue;
X  		if(ckfn && !(*ckfn)(otmp)) continue;
X  		if(!allflag) {
X! 			if(ininv)
X! 			    pline("%s", xprname(otmp, ilet,
X! 							nodot ? FALSE : TRUE));
X  			else
X  			    pline(doname(otmp));
X  			addtopl("? ");
X***************
X*** 788,794 ****
X  	pline(xprname(obj, obj_to_let(obj), TRUE));
X  }
X  
X! static char *
X  xprname(obj,let,dot)
X  register struct obj *obj;
X  register char let;
X--- 843,852 ----
X  	pline(xprname(obj, obj_to_let(obj), TRUE));
X  }
X  
X! #endif /* OVLB */
X! #ifdef OVL1
X! 
X! XSTATIC char *
X  xprname(obj,let,dot)
X  register struct obj *obj;
X  register char let;
X***************
X*** 807,812 ****
X--- 865,873 ----
X  	return(li);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  int
X  ddoinv()
X  {
X***************
X*** 814,824 ****
X  	return 0;
X  }
X  
X  /* called with 0 or "": all objects in inventory */
X  /* otherwise: all objects with (serial) letter in lets */
X  void
X  doinv(lets)
X! register char *lets;
X  {
X  	register struct obj *otmp;
X  	register char ilet;
X--- 875,888 ----
X  	return 0;
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  /* called with 0 or "": all objects in inventory */
X  /* otherwise: all objects with (serial) letter in lets */
X  void
X  doinv(lets)
X! register const char *lets;
X  {
X  	register struct obj *otmp;
X  	register char ilet;
X***************
X*** 879,884 ****
X--- 943,951 ----
X  	cornline(2, any);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  int
X  dotypeinv()				/* free after Robert Viduya */
X  /* Changed to one type only, so he doesn't have to type cr */
X***************
X*** 965,971 ****
X  dolook() {
X      	register struct obj *otmp, *otmp0;
X      	register struct gold *gold;
X!     	char *verb = Blind ? "feel" : "see";
X      	int ct = 0;
X      	int fd = 0;
X  
X--- 1032,1038 ----
X  dolook() {
X      	register struct obj *otmp, *otmp0;
X      	register struct gold *gold;
X!     	const char *verb = Blind ? "feel" : "see";
X      	int ct = 0;
X      	int fd = 0;
X  
X***************
X*** 1012,1018 ****
X  #endif
X  #ifdef ALTARS
X      	if(IS_ALTAR(levl[u.ux][u.uy].typ))  {
X! 		char *al;
X  
X  		fd++;
X  		switch (levl[u.ux][u.uy].altarmask & ~A_SHRINE) {
X--- 1079,1085 ----
X  #endif
X  #ifdef ALTARS
X      	if(IS_ALTAR(levl[u.ux][u.uy].typ))  {
X! 		const char *al;
X  
X  		fd++;
X  		switch (levl[u.ux][u.uy].altarmask & ~A_SHRINE) {
X***************
X*** 1073,1078 ****
X--- 1140,1146 ----
X  		    (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE)) {
X  			pline("Touching the dead cockatrice is a fatal mistake...");
X  			You("turn to stone...");
X+ 			killer_format = KILLED_BY_AN;
X  			killer = "cockatrice corpse";
X  			done(STONING);
X  		}
X***************
X*** 1098,1103 ****
X--- 1166,1174 ----
X      	return(!!Blind);
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  void
X  stackobj(obj)
X  register struct obj *obj;
X***************
X*** 1122,1144 ****
X  	   obj->otrapped != otmp->otrapped)
X  	    return(FALSE);
X  
X! 	else if((obj->olet==WEAPON_SYM || obj->olet==ARMOR_SYM) &&
X  		obj->rustfree != otmp->rustfree) return FALSE;
X  
X! 	else if(obj->olet == FOOD_SYM && (obj->oeaten != otmp->oeaten ||
X  		obj->orotten != otmp->orotten))
X  		return(FALSE);
X  
X! 	else if(obj->otyp == CORPSE || obj->otyp == EGG || obj->otyp == TIN)
X! 		return( (obj->corpsenm == otmp->corpsenm) &&
X! 			(!ONAME(obj) || !strcmp(ONAME(obj), ONAME(otmp))) );
X  
X! 	else if(obj->known == otmp->known || 
X  		!objects[otmp->otyp].oc_uses_known) {
X  		return(objects[obj->otyp].oc_merge);
X  	} else return(FALSE);
X  }
X  
X  int
X  doprgold(){
X  	if(!u.ugold)
X--- 1193,1232 ----
X  	   obj->otrapped != otmp->otrapped)
X  	    return(FALSE);
X  
X! 	if((obj->olet==WEAPON_SYM || obj->olet==ARMOR_SYM) &&
X  		obj->rustfree != otmp->rustfree) return FALSE;
X  
X! 	if(obj->olet == FOOD_SYM && (obj->oeaten != otmp->oeaten ||
X  		obj->orotten != otmp->orotten))
X  		return(FALSE);
X  
X! 	if(obj->otyp == CORPSE || obj->otyp == EGG || obj->otyp == TIN) {
X! 		if((obj->corpsenm != otmp->corpsenm) ||
X! 			(ONAME(obj) && strcmp(ONAME(obj), ONAME(otmp))))
X! 				return FALSE;
X! 	}
X! 
X! /* if they have names, make sure they're the same */
X! 	if ( (obj->onamelth != otmp->onamelth &&
X! 		((obj->onamelth && otmp->onamelth) || obj->otyp == CORPSE)
X! 	     ) ||
X! 	    (obj->onamelth && 
X! 		    strncmp(ONAME(obj), ONAME(otmp), (int)obj->onamelth)))
X! 		return FALSE;
X! 
X! #ifdef NAMED_ITEMS
X! 	if(is_artifact(obj) != is_artifact(otmp)) return FALSE;
X! #endif
X  
X! 	if(obj->known == otmp->known || 
X  		!objects[otmp->otyp].oc_uses_known) {
X  		return(objects[obj->otyp].oc_merge);
X  	} else return(FALSE);
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  int
X  doprgold(){
X  	if(!u.ugold)
X***************
X*** 1305,1307 ****
X--- 1393,1397 ----
X  		obj->invlet = (i < 26) ? ('a'+i) : ('A'+i-26);
X  	lastinvnr = i;
X  }
X+ 
X+ #endif /* OVLB */
X
END_OF_FILE
if test 56054 -ne `wc -c <'patch7.04'`; then
    echo shar: \"'patch7.04'\" unpacked with wrong size!
fi
# end of 'patch7.04'
echo shar: End of archive 8 \(of 30\).
cp /dev/null ark8isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 30 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