[comp.sources.games] v09i016: 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 16
Archive-name: NetHack3/Patch7p
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 16 (of 30)."
# Contents:  patch7.21
# Wrapped by billr@saab on Wed Feb 21 10:04:37 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch7.21' -a "${1}" != "-c" ; then 
  echo shar: Renaming existing file \"'patch7.21'\" to \"'patch7.21.orig'\"
  mv -f 'patch7.21' 'patch7.21.orig'
fi
echo shar: Extracting \"'patch7.21'\" \(53640 characters\)
sed "s/^X//" >'patch7.21' <<'END_OF_FILE'
X*** src/Old/timeout.c	Mon Feb 19 19:02:27 1990
X--- src/timeout.c	Thu Jan 25 22:14:40 1990
X***************
X*** 1,9 ****
X! /*	SCCS Id: @(#)timeout.c	3.0	87/07/06
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  #include	"hack.h"
X  
X  /* He is being petrified - dialogue by inmet!tower */
X  static const char *stoned_texts[] = {
X  	"You are slowing down.",		/* 5 */
X--- 1,16 ----
X! /*	SCCS Id: @(#)timeout.c	3.0	89/11/20
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  #include	"hack.h"
X  
X+ #ifdef OVERLAY
X+ extern void NDECL(stoned_dialog), NDECL(vomiting_dialog), NDECL(choke_dialog);
X+ extern void FDECL(hatch_it, (struct obj*));
X+ #endif
X+ 
X+ #ifdef OVLB
X+ 
X  /* He is being petrified - dialogue by inmet!tower */
X  static const char *stoned_texts[] = {
X  	"You are slowing down.",		/* 5 */
X***************
X*** 13,19 ****
X  	"You are a statue."			/* 1 */
X  };
X  
X! static void
X  stoned_dialogue() {
X  	register long i = (Stoned & TIMEOUT);
X  
X--- 20,26 ----
X  	"You are a statue."			/* 1 */
X  };
X  
X! XSTATIC void
X  stoned_dialogue() {
X  	register long i = (Stoned & TIMEOUT);
X  
X***************
X*** 34,40 ****
X  	"You suddenly vomit!"			/* 0 */
X  };
X  
X! static void
X  vomiting_dialogue() {
X  	register long i = (Vomiting & TIMEOUT) / 3L;
X  
X--- 41,47 ----
X  	"You suddenly vomit!"			/* 0 */
X  };
X  
X! XSTATIC void
X  vomiting_dialogue() {
X  	register long i = (Vomiting & TIMEOUT) / 3L;
X  
X***************
X*** 42,48 ****
X  	   i >= 0 && i < SIZE(vomiting_texts))
X  		pline(vomiting_texts[SIZE(vomiting_texts) - i]);
X  
X! 	switch(i) {
X  
X  	    case 0:	vomit(); morehungry(20); break;
X  	    case 2:	make_confused(HConfusion + d(2,4), FALSE);
X--- 49,55 ----
X  	   i >= 0 && i < SIZE(vomiting_texts))
X  		pline(vomiting_texts[SIZE(vomiting_texts) - i]);
X  
X! 	switch((int)i) {
X  
X  	    case 0:	vomit(); morehungry(20); break;
X  	    case 2:	make_confused(HConfusion + d(2,4), FALSE);
X***************
X*** 59,65 ****
X  	"You suffocate."
X  };
X  
X! static void
X  choke_dialogue()
X  {
X  	register long i = (Strangled & TIMEOUT);
X--- 66,72 ----
X  	"You suffocate."
X  };
X  
X! XSTATIC void
X  choke_dialogue()
X  {
X  	register long i = (Strangled & TIMEOUT);
X***************
X*** 69,74 ****
X--- 76,84 ----
X  			hcolor() : blue);
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL0
X+ 
X  void
X  timeout()
X  {
X***************
X*** 105,112 ****
X  		if(upp->p_tofn) (*upp->p_tofn)();
X  		else switch(upp - u.uprops){
X  		case STONED:
X! 			if (!killer) killer = "cockatrice";
X! 			done(STONING);
X  			break;
X  		case VOMITING:
X  			make_vomiting(0L, TRUE);
X--- 115,124 ----
X  		if(upp->p_tofn) (*upp->p_tofn)();
X  		else switch(upp - u.uprops){
X  		case STONED:
X! 			if (!killer) {
X! 				killer_format = KILLED_BY_AN;
X! 				killer = "cockatrice";
X! 			} done(STONING);
X  			break;
X  		case VOMITING:
X  			make_vomiting(0L, TRUE);
X***************
X*** 113,118 ****
X--- 125,131 ----
X  			break;
X  		case SICK:
X  			You("die from your illness.");
X+ 			killer_format = KILLED_BY_AN;
X  			killer = u.usick_cause;
X  			done(POISONING);
X  			break;
X***************
X*** 155,160 ****
X--- 168,174 ----
X  			}
X  			break;
X  		case STRANGLED:
X+ 			killer_format = KILLED_BY;
X  			killer = "strangulation";
X  			done(DIED);
X  			break;
X***************
X*** 191,199 ****
X  	}
X  }
X  
X! static const char slithy[] = { S_SNAKE, S_NAGA, S_WORM, 0 };
X  
X! static void
X  hatch_it(otmp)		/* hatch the egg "otmp" if possible */
X  register struct obj *otmp;
X  {
X--- 205,214 ----
X  	}
X  }
X  
X! #endif /* OVL0 */
X! #ifdef OVLB
X  
X! XSTATIC void
X  hatch_it(otmp)		/* hatch the egg "otmp" if possible */
X  register struct obj *otmp;
X  {
X***************
X*** 215,227 ****
X  
X  		if(Blind)
X  		    You("feel something %s from your pack!",
X! 			  (index(slithy, mtmp->data->mlet)) ?
X! 			      "slither" : "drop");
X  		else
X! 		    pline("%s just %s out of your pack!",
X! 			  An(mtmp->data->mname),
X! 			  (index(slithy, mtmp->data->mlet)) ?
X! 			      "slithered" : "dropped");
X  
X  #ifdef POLYSELF
X  		if (yours) {
X--- 230,240 ----
X  
X  		if(Blind)
X  		    You("feel something %s from your pack!",
X! 			locomotion(mtmp->data, "drop"));
X  		else
X! 		    You("see %s %s out of your pack!",
X! 			an(mtmp->data->mname),
X! 			locomotion(mtmp->data, "drop"));
X  
X  #ifdef POLYSELF
X  		if (yours) {
X***************
X*** 240,245 ****
X--- 253,261 ----
X  	}
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  void
X  hatch_eggs()	    /* hatch any eggs that have been too long in pack */
X  {
X***************
X*** 264,266 ****
X--- 280,284 ----
X  	}
X  */
X  }
X+ 
X+ #endif /* OVL1 */
X*** src/Old/topl.c	Mon Feb 19 19:02:45 1990
X--- src/topl.c	Mon Feb 19 10:18:54 1990
X***************
X*** 2,21 ****
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X! #define NEED_VARARGS
X  #include "hack.h"
X  
X! char toplines[BUFSIZ];
X  xchar tlx, tly;			/* set by pline; used by addtopl */
X! static boolean no_repeat = FALSE;
X  
X! struct topl {
X  	struct topl *next_topl;
X  	char *topl_text;
X  } *old_toplines, *last_redone_topl;
X  #define	OTLMAX	20		/* max nr of old toplines remembered */
X  
X! static void
X  redotoplin() {
X  	home();
X  	if(index(toplines, '\n')) cl_end();
X--- 2,35 ----
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X! #define NEED_VARARGS /* Uses ... */	/* comment line for pre-compiled headers */
X  #include "hack.h"
X  
X! VSTATIC char toplines[BUFSIZ];
X! 
X! #ifndef OVLB
X! OSTATIC boolean no_repeat;
X! #else /* OVLB */
X! XSTATIC boolean no_repeat = FALSE;
X! #endif /* OVLB */
X! 
X! extern xchar tlx, tly;
X! #ifdef OVLB
X  xchar tlx, tly;			/* set by pline; used by addtopl */
X! #endif /* OVLB */
X  
X! OSTATIC void NDECL(redotoplin);
X! OSTATIC void FDECL(xmore,(const char *));
X! VSTATIC struct topl {
X  	struct topl *next_topl;
X  	char *topl_text;
X  } *old_toplines, *last_redone_topl;
X+ 
X  #define	OTLMAX	20		/* max nr of old toplines remembered */
X  
X! #ifdef OVL1
X! 
X! XSTATIC void
X  redotoplin() {
X  	home();
X  	if(index(toplines, '\n')) cl_end();
X***************
X*** 35,40 ****
X--- 49,57 ----
X  		more();
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  int
X  doredotopl(){
X  	if(last_redone_topl)
X***************
X*** 48,53 ****
X--- 65,73 ----
X  	return 0;
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  void
X  remember_topl() {
X  	register struct topl *tl;
X***************
X*** 74,80 ****
X  }
X  
X  void
X! addtopl(s) char *s; {
X  	curs(tlx,tly);
X  	if(tlx + strlen(s) > CO) putsym('\n');
X  	putstr(s);
X--- 94,102 ----
X  }
X  
X  void
X! addtopl(s)
X! const char *s;
X! {
X  	curs(tlx,tly);
X  	if(tlx + strlen(s) > CO) putsym('\n');
X  	putstr(s);
X***************
X*** 83,91 ****
X  	flags.toplin = 1;
X  }
X  
X! static void
X  xmore(s)
X! char *s;	/* allowed chars besides space/return */
X  {
X  	if(flags.toplin) {
X  		curs(tlx, tly);
X--- 105,116 ----
X  	flags.toplin = 1;
X  }
X  
X! #endif /* OVL1 */
X! #ifdef OVL2
X! 
X! XSTATIC void
X  xmore(s)
X! const char *s;	/* allowed chars besides space/return */
X  {
X  	if(flags.toplin) {
X  		curs(tlx, tly);
X***************
X*** 104,109 ****
X--- 129,135 ----
X  		cl_end();
X  		docorner(1, tly-1);
X  		tlx = tly = 1;
X+ 		curs(tlx, tly);
X  	}
X  	flags.toplin = 0;
X  }
X***************
X*** 113,125 ****
X  	xmore("");
X  }
X  
X  void
X  cmore(s)
X! register char *s;
X  {
X  	xmore(s);
X  }
X  
X  void
X  clrlin(){
X  	if(flags.toplin) {
X--- 139,157 ----
X  	xmore("");
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+ 
X  void
X  cmore(s)
X! register const char *s;
X  {
X  	xmore(s);
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  void
X  clrlin(){
X  	if(flags.toplin) {
X***************
X*** 134,143 ****
X  	flags.toplin = 0;
X  }
X  
X! /*VARARGS1*/
X! /* Note the modified mstatusline has 9 arguments KAA */
X  
X! /* Also note that these declarations rely on knowledge of the internals
X   * of the variable argument handling stuff in "tradstdc.h"
X   */
X  
X--- 166,176 ----
X  	flags.toplin = 0;
X  }
X  
X! #endif /* OVL1 */
X! #ifdef OVLB
X  
X! /*VARARGS1*/
X! /* Note that these declarations rely on knowledge of the internals
X   * of the variable argument handling stuff in "tradstdc.h"
X   */
X  
X***************
X*** 272,284 ****
X  /*ARGSUSED*/
X  /*VARARGS2*/
X  void
X! kludge  VA_DECL2(char *, str, char *, arg)
X  #ifdef VA_NEXT
X  	char *other1, *other2, *other3;
X  #endif
X  	VA_START(arg);
X! 	VA_INIT(str, char *);
X! 	VA_INIT(arg, char *);
X  #ifdef VA_NEXT
X  	VA_NEXT(other1, char *);
X  	VA_NEXT(other2, char *);
X--- 305,317 ----
X  /*ARGSUSED*/
X  /*VARARGS2*/
X  void
X! kludge  VA_DECL2(const char *, str, const char *, arg)
X  #ifdef VA_NEXT
X  	char *other1, *other2, *other3;
X  #endif
X  	VA_START(arg);
X! 	VA_INIT(str, const char *);
X! 	VA_INIT(arg, const char *);
X  #ifdef VA_NEXT
X  	VA_NEXT(other1, char *);
X  	VA_NEXT(other2, char *);
X***************
X*** 294,299 ****
X--- 327,335 ----
X  	VA_END();
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL0
X+ 
X  void
X  putsym(c)
X  char c;
X***************
X*** 325,330 ****
X--- 361,369 ----
X  	while(*s) putsym(*s++);
X  }
X  
X+ #endif /* OVL0 */
X+ #ifdef OVL2
X+ 
X  char
X  yn_function(resp, def)
X  const char *resp;
X***************
X*** 356,367 ****
X  	return q;
X  }
X  
X  /*VARARGS1*/
X  void
X! impossible VA_DECL(char *, s)
X  	VA_START(s);
X! 	VA_INIT(s, char *);
X  	vpline(s,VA_ARGS);
X  	pline("Program in disorder - perhaps you'd better Quit.");
X  	VA_END();
X  }
X--- 395,411 ----
X  	return q;
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVLB
X+ 
X  /*VARARGS1*/
X  void
X! impossible VA_DECL(const char *, s)
X  	VA_START(s);
X! 	VA_INIT(s, const char *);
X  	vpline(s,VA_ARGS);
X  	pline("Program in disorder - perhaps you'd better Quit.");
X  	VA_END();
X  }
X+ 
X+ #endif /* OVLB */
X*** src/Old/trap.c	Mon Feb 19 19:03:58 1990
X--- src/trap.c	Mon Feb 19 10:17:41 1990
X***************
X*** 1,14 ****
X! /*	SCCS Id: @(#)trap.c	3.0	89/11/10
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  #include	"hack.h"
X  #include	"edog.h"
X- #include	"trapname.h"
X  
X! void domagictrap();
X! static boolean thitm();
X  
X  /* Generic rust-armor function.  Returns TRUE if a message was printed;
X   * "print", if set, means to print a message (and thus to return TRUE) even
X   * if the item could not be rusted; otherwise a message is printed and TRUE is
X--- 1,45 ----
X! /*	SCCS Id: @(#)trap.c	3.0	89/11/20
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  #include	"hack.h"
X  #include	"edog.h"
X  
X! #ifdef OVLB
X  
X+ const char *traps[] = {
X+ 	"",
X+ 	" monster trap",
X+ 	" statue trap",
X+ 	" bear trap",
X+ 	"n arrow trap",
X+ 	" dart trap",
X+ 	" trapdoor",
X+ 	" teleportation trap",
X+ 	" pit",
X+ 	" sleeping gas trap"
X+ 	," magic trap"
X+ 	," squeaky board"
X+ 	," web"
X+ 	," spiked pit"
X+ 	," level teleporter"
X+ #ifdef SPELLS
X+ 	,"n anti-magic field" 
X+ #endif
X+ 	," rust trap"
X+ #ifdef POLYSELF
X+ 	," polymorph trap"
X+ #endif
X+ 	," land mine"
X+ };
X+ 
X+ #endif /* OVLB */
X+ 
X+ void NDECL(domagictrap);
X+ OSTATIC boolean FDECL(thitm, (int, struct monst *, struct obj *, int));
X+ 
X+ #ifdef OVLB
X+ 
X  /* Generic rust-armor function.  Returns TRUE if a message was printed;
X   * "print", if set, means to print a message (and thus to return TRUE) even
X   * if the item could not be rusted; otherwise a message is printed and TRUE is
X***************
X*** 17,28 ****
X  boolean
X  rust_dmg(otmp, ostr, type, print)
X  register struct obj *otmp;
X! register char *ostr;
X  int type;
X  boolean print;
X  {
X  	static const char *gook[] = { "slag", "rust", "rot", "corrosion" };
X  	static const char *action[] = { "smolder", "rust", "rot", "corrode" };
X  	boolean vulnerable = FALSE;
X  	boolean plural;
X  
X--- 48,60 ----
X  boolean
X  rust_dmg(otmp, ostr, type, print)
X  register struct obj *otmp;
X! register const char *ostr;
X  int type;
X  boolean print;
X  {
X  	static const char *gook[] = { "slag", "rust", "rot", "corrosion" };
X  	static const char *action[] = { "smolder", "rust", "rot", "corrode" };
X+ 	static const char *msg[] =  { "burnt", "rusted", "rotten", "corroded" };
X  	boolean vulnerable = FALSE;
X  	boolean plural;
X  
X***************
X*** 54,60 ****
X  			otmp->spe--;
X  			adj_abon(otmp, -1);
X  		}
X! 	} else Your("%s look%s quite rusted.", ostr, plural ? "" : "s");
X  	return(TRUE);
X  }
X  
X--- 86,93 ----
X  			otmp->spe--;
X  			adj_abon(otmp, -1);
X  		}
X! 	} else Your("%s %s%s quite %s.", ostr, Blind ? "feel" : "look",
X! 					     plural ? "" : "s", msg[type]);
X  	return(TRUE);
X  }
X  
X***************
X*** 65,70 ****
X--- 98,112 ----
X  	register struct trap *ttmp;
X  	register struct permonst *ptr;
X  
X+ 	if (ttmp = t_at(x,y)) {
X+ 		if (u.utrap &&
X+ 		  ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) ||
X+ 		  (u.utraptype == TT_WEB && typ != WEB) ||
X+ 		  (u.utraptype == TT_PIT && typ != PIT && typ != SPIKED_PIT)))
X+ 			u.utrap = 0;
X+ 		ttmp->ttyp = typ;
X+ 		return ttmp;
X+ 	}
X  	ttmp = newtrap();
X  	ttmp->ttyp = typ;
X  	ttmp->tx = x;
X***************
X*** 71,81 ****
X  	ttmp->ty = y;
X  	switch(typ) {
X  	    case MONST_TRAP:	    /* create a monster in "hiding" */
X  		if(rn2(5) && (ptr = mkclass(S_PIERCER)))
X  			ttmp->pm = monsndx(ptr);
X! 		else
X  			ttmp->pm = rndmonnum();
X  		break;
X  	    case STATUE_TRAP:	    /* create a "living" statue */
X  		ttmp->pm = rndmonnum();
X  		(void) mkcorpstat(STATUE, &mons[ttmp->pm], x, y);
X--- 113,131 ----
X  	ttmp->ty = y;
X  	switch(typ) {
X  	    case MONST_TRAP:	    /* create a monster in "hiding" */
X+ 	    {	int tryct = 0;
X  		if(rn2(5) && (ptr = mkclass(S_PIERCER)))
X  			ttmp->pm = monsndx(ptr);
X! 		else do {
X  			ttmp->pm = rndmonnum();
X+ 		} while ((noattacks(&mons[ttmp->pm]) ||
X+ 			!mons[ttmp->pm].mmove) && ++tryct < 100);
X+ 		if (tryct == 100) {
X+ 			free((genericptr_t)ttmp);
X+ 			return(struct trap *)0;
X+ 		}
X  		break;
X+ 	    }
X  	    case STATUE_TRAP:	    /* create a "living" statue */
X  		ttmp->pm = rndmonnum();
X  		(void) mkcorpstat(STATUE, &mons[ttmp->pm], x, y);
X***************
X*** 111,119 ****
X  #ifdef POLYSELF
X  		 || is_flyer(uasmon)
X  #endif
X! 		)) &&
X! 	       !(IS_DOOR(levl[x][y].typ) &&
X! 		     (levl[x][y].doormask & (D_LOCKED | D_CLOSED)));
X  	return(tmp1 && tmp2 && tmp3);
X  #else
X  	return( isok(x,y) &&
X--- 161,167 ----
X  #ifdef POLYSELF
X  		 || is_flyer(uasmon)
X  #endif
X! 		)) && !closed_door(x,y);
X  	return(tmp1 && tmp2 && tmp3);
X  #else
X  	return( isok(x,y) &&
X***************
X*** 129,138 ****
X  #ifdef POLYSELF
X  		  || is_flyer(uasmon)
X  #endif
X! 		  )) &&
X! 		!(IS_DOOR(levl[x][y].typ) &&
X! 		     (levl[x][y].doormask & (D_LOCKED | D_CLOSED)))
X! 	);
X  #endif
X  	/* Note: gold is permitted (because of vaults) */
X  }
X--- 177,183 ----
X  #ifdef POLYSELF
X  		  || is_flyer(uasmon)
X  #endif
X! 		  )) && !closed_door(x,y));
X  #endif
X  	/* Note: gold is permitted (because of vaults) */
X  }
X***************
X*** 189,199 ****
X  		case BEAR_TRAP:
X  		    if(Levitation
X  #ifdef POLYSELF
X! 			|| is_flyer(uasmon)
X! #endif
X! 			) {
X  			You("%s over a bear trap.",
X  			      Levitation ? "float" : "fly");
X  			break;
X  		    }
X  #ifdef POLYSELF
X--- 234,246 ----
X  		case BEAR_TRAP:
X  		    if(Levitation
X  #ifdef POLYSELF
X! 				|| is_flyer(uasmon)) {
X  			You("%s over a bear trap.",
X  			      Levitation ? "float" : "fly");
X+ #else
X+ 				) {
X+ 			You("float over a bear trap.");
X+ #endif
X  			break;
X  		    }
X  #ifdef POLYSELF
X***************
X*** 253,266 ****
X  		case TRAPDOOR:
X  		    if(is_maze_lev
X  #ifdef STRONGHOLD
X! 		 	 && (dlevel > stronghold_level)
X! #endif /* STRONGHOLD /**/
X  		      ) {
X  	pline("A trap door in the ceiling opens and a rock falls on your %s!",
X  				body_part(HEAD));
X  			if(uarmh)
X  			    pline("Fortunately, you are wearing a helmet!");
X! 			losehp(uarmh ? 2 : d(2,10),"falling rock");
X  			(void) mksobj_at(ROCK, u.ux, u.uy);
X  			fobj->quan = 1;
X  			fobj->owt = weight(fobj);
X--- 300,313 ----
X  		case TRAPDOOR:
X  		    if(is_maze_lev
X  #ifdef STRONGHOLD
X! 			 && (dlevel > stronghold_level)
X! #endif
X  		      ) {
X  	pline("A trap door in the ceiling opens and a rock falls on your %s!",
X  				body_part(HEAD));
X  			if(uarmh)
X  			    pline("Fortunately, you are wearing a helmet!");
X! 			losehp(uarmh ? 2 : d(2,10),"falling rock", KILLED_BY_AN);
X  			(void) mksobj_at(ROCK, u.ux, u.uy);
X  			fobj->quan = 1;
X  			fobj->owt = weight(fobj);
X***************
X*** 276,285 ****
X  			pline("A trap door opens up under you!");
X  			if(Levitation || u.ustuck || dlevel == MAXLEVEL
X  #ifdef POLYSELF
X! 					|| is_flyer(uasmon)
X  #endif
X  #ifdef ENDGAME
X! 					|| dlevel == ENDLEVEL
X  #endif
X  							) {
X  			    You("don't fall in.");
X--- 323,332 ----
X  			pline("A trap door opens up under you!");
X  			if(Levitation || u.ustuck || dlevel == MAXLEVEL
X  #ifdef POLYSELF
X! 				|| is_flyer(uasmon) || u.umonnum == PM_WUMPUS
X  #endif
X  #ifdef ENDGAME
X! 				|| dlevel == ENDLEVEL
X  #endif
X  							) {
X  			    You("don't fall in.");
X***************
X*** 290,295 ****
X--- 337,343 ----
X  			    You("are jerked back by your pet!");
X  			else {
X  #endif
X+ 			    if(in_shop(u.ux, u.uy)) shopdig(1);
X  			    unsee();
X  			    (void) fflush(stdout);
X  			    goto_level(newlevel, FALSE, TRUE);
X***************
X*** 301,307 ****
X  		case DART_TRAP:
X  		    pline("A little dart shoots out at you!");
X  		    if(thitu(7,rnd(3),(struct obj *)0,"little dart")) {
X! 			if(!rn2(6)) poisoned("dart",A_CON,"poison dart");
X  		    } else {
X  			(void) mksobj_at(DART, u.ux, u.uy);
X  			fobj->quan = 1;
X--- 349,355 ----
X  		case DART_TRAP:
X  		    pline("A little dart shoots out at you!");
X  		    if(thitu(7,rnd(3),(struct obj *)0,"little dart")) {
X! 			if(!rn2(6)) poisoned("dart",A_CON,"poison dart",10);
X  		    } else {
X  			(void) mksobj_at(DART, u.ux, u.uy);
X  			fobj->quan = 1;
X***************
X*** 343,349 ****
X  		    break;
X  		case RUST_TRAP:
X  #ifdef POLYSELF
X! #ifdef GOLEMS
X  		    if (u.umonnum == PM_IRON_GOLEM) {
X  			pline("A gush of water hits you!");
X  			You("are covered with rust!");
X--- 391,397 ----
X  		    break;
X  		case RUST_TRAP:
X  #ifdef POLYSELF
X! # ifdef GOLEMS
X  		    if (u.umonnum == PM_IRON_GOLEM) {
X  			pline("A gush of water hits you!");
X  			You("are covered with rust!");
X***************
X*** 350,356 ****
X  			rehumanize();
X  			break;
X  		    } else
X! #endif /* GOLEMS */
X  		    if (u.umonnum == PM_GREMLIN && rn2(3)) {
X  			pline("A gush of water hits you!");
X  			if(mtmp = cloneu()) {
X--- 398,404 ----
X  			rehumanize();
X  			break;
X  		    } else
X! # endif /* GOLEMS */
X  		    if (u.umonnum == PM_GREMLIN && rn2(3)) {
X  			pline("A gush of water hits you!");
X  			if(mtmp = cloneu()) {
X***************
X*** 415,421 ****
X  #endif
X  			u.utrap = rn1(6,2);
X  		    u.utraptype = TT_PIT;
X! 		    losehp(rnd(6),"fall into a pit");
X  		    selftouch("Falling, you");
X  		    break;
X  		case SPIKED_PIT:
X--- 463,469 ----
X  #endif
X  			u.utrap = rn1(6,2);
X  		    u.utraptype = TT_PIT;
X! 		    losehp(rnd(6),"fell into a pit", NO_KILLER_PREFIX);
X  		    selftouch("Falling, you");
X  		    break;
X  		case SPIKED_PIT:
X***************
X*** 435,453 ****
X  #endif
X  			u.utrap = rn1(6,2);
X  		    u.utraptype = TT_PIT;
X! 		    losehp(rnd(10),"fall onto iron spikes");
X! 		    if(!rn2(6)) poisoned("spikes",A_STR,"poison spikes");
X  		    selftouch("Falling, you");
X  		    break;
X  		case LEVEL_TELEP:
X! 		{   int oldl = dlevel;
X  
X! 		    pline("You have %s onto a level teleport trap!",
X  #ifdef POLYSELF
X! 			is_flyer(uasmon) ? "flown" :
X! 			(Levitation || nolimbs(uasmon)) ? "moved" : "stepped");
X  #else
X! 			Levitation ? "moved" : "stepped");
X  #endif
X  		    if(Antimagic) {
X  			pru();
X--- 483,503 ----
X  #endif
X  			u.utrap = rn1(6,2);
X  		    u.utraptype = TT_PIT;
X! 		    losehp(rnd(10),"fell into a pit of iron spikes",
X! 			NO_KILLER_PREFIX);
X! 		    if(!rn2(6)) poisoned("spikes",A_STR,"fall onto poison spikes",8);
X  		    selftouch("Falling, you");
X  		    break;
X  		case LEVEL_TELEP:
X! 
X! 		    {	int oldl = dlevel;
X  
X! 		    You("%s onto a level teleport trap!",
X! 			  Levitation ? "float" :
X  #ifdef POLYSELF
X! 			  locomotion(uasmon, "step"));
X  #else
X! 			  "step");
X  #endif
X  		    if(Antimagic) {
X  			pru();
X***************
X*** 502,508 ****
X  		case MGTRP:	    /* A magic trap. */
X  		    if (!rn2(30)) {
X  			You("are caught in a magical explosion!");
X! 			losehp(rnd(10), "magical explosion");
X  #ifdef SPELLS
X  			Your("body absorbs some of the magical energy!");
X  			u.uen = (u.uenmax += 2);
X--- 552,558 ----
X  		case MGTRP:	    /* A magic trap. */
X  		    if (!rn2(30)) {
X  			You("are caught in a magical explosion!");
X! 			losehp(rnd(10), "magical explosion", KILLED_BY_AN);
X  #ifdef SPELLS
X  			Your("body absorbs some of the magical energy!");
X  			u.uen = (u.uenmax += 2);
X***************
X*** 515,521 ****
X  						) newsym(u.ux,u.uy);
X  		    } else domagictrap();
X  		    break;
X! 		case SQBRD:	    /* Stepped on a squeaky board. */
X  		    if (Levitation
X  #ifdef POLYSELF
X  			|| is_flyer(uasmon)
X--- 565,571 ----
X  						) newsym(u.ux,u.uy);
X  		    } else domagictrap();
X  		    break;
X! 		case SQBRD:	    /* stepped on a squeaky board */
X  		    if (Levitation
X  #ifdef POLYSELF
X  			|| is_flyer(uasmon)
X***************
X*** 524,541 ****
X  			if (Hallucination) You("notice a crease in the linoleum.");
X  			else You("notice a loose board below you.");
X  		    } else {
X! 			pline("A board underfoot gives off a loud squeak!");
X  			wake_nearby();
X  		    }
X  		    break;
X  		case WEB: /* Our luckless player has stumbled into a web. */
X  
X! 		    pline("You've %s into a spider web!",
X! 			  Levitation ? "floated" :
X  #ifdef POLYSELF
X! 			  is_flyer(uasmon) ? "flown" :
X  #endif
X- 			  "stumbled");
X  		    u.utraptype = TT_WEB;
X  
X  		    /* Time stuck in the web depends on your strength. */
X--- 574,592 ----
X  			if (Hallucination) You("notice a crease in the linoleum.");
X  			else You("notice a loose board below you.");
X  		    } else {
X! 			pline("A board beneath you squeaks loudly.");
X  			wake_nearby();
X  		    }
X  		    break;
X  		case WEB: /* Our luckless player has stumbled into a web. */
X  
X! 		    You("%s into a spider web!",
X! 			  Levitation ? "float" :
X  #ifdef POLYSELF
X! 			  locomotion(uasmon, "stumble"));
X! #else
X! 			  "stumble");
X  #endif
X  		    u.utraptype = TT_WEB;
X  
X  		    /* Time stuck in the web depends on your strength. */
X***************
X*** 556,584 ****
X  		    break;
X  
X  		case LANDMINE: {
X! #		ifndef LINT
X  		    register struct monst *mtmp = fmon;
X! #		endif /* LINT */
X  
X  		    if (Levitation
X  #ifdef POLYSELF
X! 						|| is_flyer(uasmon)
X  #endif
X  								) {
X! 			You("see a trigger in a pile of soil below you!");
X  			if (rn2(3)) break;
X  			pline("KAABLAMM!!!  The air currents set it off!");
X  		    } else {
X! #ifdef POLYSELF
X! 			pline("KAABLAMM!!!  You %s a land mine!",
X! 				nolimbs(uasmon) ? "encountered" : "stepped on");
X! #else
X! 			pline("KAABLAMM!!!  You stepped on a land mine!");
X! #endif
X  			set_wounded_legs(LEFT_SIDE, 40 + rnd(35));
X  			set_wounded_legs(RIGHT_SIDE, 40 + rnd(35));
X  		    }
X! 		    losehp(rnd(16), "land mine");
X  		    /* wake everything on the level */
X  		    while(mtmp) {
X  			if(mtmp->msleep) mtmp->msleep = 0;
X--- 607,630 ----
X  		    break;
X  
X  		case LANDMINE: {
X! #ifndef LINT
X  		    register struct monst *mtmp = fmon;
X! #endif
X  
X  		    if (Levitation
X  #ifdef POLYSELF
X! 					|| is_flyer(uasmon)
X  #endif
X  								) {
X! 			You("see a trigger in a pile of soil below you.");
X  			if (rn2(3)) break;
X  			pline("KAABLAMM!!!  The air currents set it off!");
X  		    } else {
X! 			pline("KAABLAMM!!!  You triggered a land mine!");
X  			set_wounded_legs(LEFT_SIDE, 40 + rnd(35));
X  			set_wounded_legs(RIGHT_SIDE, 40 + rnd(35));
X  		    }
X! 		    losehp(rnd(16), "land mine", KILLED_BY_AN);
X  		    /* wake everything on the level */
X  		    while(mtmp) {
X  			if(mtmp->msleep) mtmp->msleep = 0;
X***************
X*** 594,601 ****
X  	}
X  }
X  
X  #ifdef WALKIES
X! static boolean
X  teleport_pet(mtmp)
X  register struct monst *mtmp;
X  {
X--- 640,654 ----
X  	}
X  }
X  
X+ #endif /* OVLB */
X+ 
X  #ifdef WALKIES
X! 
X! OSTATIC boolean FDECL(teleport_pet, (struct monst *));
X! 
X! #ifdef OVLB
X! 
X! XSTATIC boolean
X  teleport_pet(mtmp)
X  register struct monst *mtmp;
X  {
X***************
X*** 618,625 ****
X--- 671,698 ----
X  	}
X  	return TRUE;
X  }
X+ 
X+ #endif /* OVLB */
X+ 
X  #endif
X  
X+ #ifdef OVLB
X+ 
X+ XSTATIC void
X+ seetrap(trap)
X+ 
X+ 	register struct trap *trap;
X+ {
X+ 	if(!trap->tseen) {
X+ 
X+ 	    trap->tseen = 1;
X+ 	    newsym(trap->tx, trap->ty);
X+ 	}
X+ }
X+ 
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+ 
X  int
X  mintrap(mtmp)
X  register struct monst *mtmp;
X***************
X*** 651,660 ****
X  			if(mtmp->data->msize > MZ_SMALL &&
X  			   !amorphous(mtmp->data)) {
X  				mtmp->mtrapped = 1;
X! 				if(in_sight)
X  				  pline("%s is caught in a bear trap!",
X  					Monnam(mtmp));
X! 				else
X  				    if((mtmp->data == &mons[PM_OWLBEAR]
X  					|| mtmp->data == &mons[PM_BUGBEAR])
X  					&& flags.soundok)
X--- 724,734 ----
X  			if(mtmp->data->msize > MZ_SMALL &&
X  			   !amorphous(mtmp->data)) {
X  				mtmp->mtrapped = 1;
X! 				if(in_sight) {
X  				  pline("%s is caught in a bear trap!",
X  					Monnam(mtmp));
X! 				  seetrap(trap);
X! 				} else
X  				    if((mtmp->data == &mons[PM_OWLBEAR]
X  					|| mtmp->data == &mons[PM_BUGBEAR])
X  					&& flags.soundok)
X***************
X*** 663,681 ****
X  			break;
X  #ifdef POLYSELF
X  		case POLY_TRAP:
X! 		    if(!resist(mtmp, WAND_SYM, 0, NOTELL))
X  			(void) newcham(mtmp, (struct permonst *)0);
X  		    break;
X  #endif
X  		case RUST_TRAP:
X  			if(in_sight)
X! 				pline("A gush of water hits %s!", mon_nam(mtmp));
X  #ifdef GOLEMS
X  			if (mtmp->data == &mons[PM_IRON_GOLEM]) {
X! 				if (in_sight) pline("%s falls to pieces!",
X! 								Monnam(mtmp));
X  				else if(mtmp->mtame)
X! 				     pline("May %s rust in peace.",
X  								mon_nam(mtmp));
X  				mondied(mtmp);
X  				trapkilled = TRUE;
X--- 737,759 ----
X  			break;
X  #ifdef POLYSELF
X  		case POLY_TRAP:
X! 		    if(!resist(mtmp, WAND_SYM, 0, NOTELL)) {
X  			(void) newcham(mtmp, (struct permonst *)0);
X+ 			seetrap(trap);
X+ 		    }
X  		    break;
X  #endif
X  		case RUST_TRAP:
X  			if(in_sight)
X! 			    pline("A gush of water hits %s!", mon_nam(mtmp));
X! 			if(cansee(mtmp->mx,mtmp->my))
X! 			    seetrap(trap);
X  #ifdef GOLEMS
X  			if (mtmp->data == &mons[PM_IRON_GOLEM]) {
X! 				if (in_sight)
X! 				    pline("%s falls to pieces!", Monnam(mtmp));
X  				else if(mtmp->mtame)
X! 				    pline("May %s rust in peace.",
X  								mon_nam(mtmp));
X  				mondied(mtmp);
X  				trapkilled = TRUE;
X***************
X*** 693,717 ****
X  			break;
X  		case PIT:
X  		case SPIKED_PIT:
X! 			/* there should be a mtmp/data -> floating */
X! 			if(!is_flyer(mtmp->data) /* ab */
X! 			   && mtmp->data != &mons[PM_WUMPUS] /* 3. */) {
X  				if (!passes_walls(mtmp->data))
X! 				  mtmp->mtrapped = 1;
X! 				if(in_sight)
X! 				  pline("%s falls into a pit!", Monnam(mtmp));
X  				if(thitm(0, mtmp, (struct obj *)0,
X! 				  rnd((tt==PIT) ? 6 : 10)))
X! 				  trapkilled = TRUE;
X  			}
X  			break;
X  		case SLP_GAS_TRAP:
X  			if(!resists_sleep(mtmp->data) &&
X! 			   !mtmp->msleep && !mtmp->mfroz) {
X! 				mtmp->msleep = 1;
X  				if(in_sight)
X  				  pline("%s suddenly falls asleep!",
X  					Monnam(mtmp));
X  			}
X  			break;
X  		case TELEP_TRAP:
X--- 771,800 ----
X  			break;
X  		case PIT:
X  		case SPIKED_PIT:
X! 			/* TO DO: there should be a mtmp/data -> floating */
X! 			if(!is_flyer(mtmp->data) &&
X! 			   mtmp->data != &mons[PM_WUMPUS]) {
X  				if (!passes_walls(mtmp->data))
X! 				    mtmp->mtrapped = 1;
X! 				if(in_sight) {
X! 				    pline("%s falls into a pit!", Monnam(mtmp));
X! 				    seetrap(trap);
X! 				}
X  				if(thitm(0, mtmp, (struct obj *)0,
X! 					 rnd((tt==PIT) ? 6 : 10)))
X! 				    trapkilled = TRUE;
X  			}
X  			break;
X  		case SLP_GAS_TRAP:
X  			if(!resists_sleep(mtmp->data) &&
X! 			   !mtmp->msleep && mtmp->mcanmove) {
X! 				mtmp->mcanmove = 0;
X! 				mtmp->mfrozen = rnd(25);
X  				if(in_sight)
X  				  pline("%s suddenly falls asleep!",
X  					Monnam(mtmp));
X+ 				if(cansee(mtmp->mx,mtmp->my))
X+ 				    seetrap(trap);
X  			}
X  			break;
X  		case TELEP_TRAP:
X***************
X*** 724,732 ****
X  			     */
X  			    if (trap->once) vloc(mtmp);
X  			    else rloc(mtmp);
X! 			    if(in_sight && !cansee(mtmp->mx,mtmp->my))
X  				pline("%s suddenly disappears!",
X  					Monnam(mtmp));
X  #ifdef WALKIES
X  			}
X  #endif
X--- 807,817 ----
X  			     */
X  			    if (trap->once) vloc(mtmp);
X  			    else rloc(mtmp);
X! 			    if(in_sight && !cansee(mtmp->mx,mtmp->my)) {
X  				pline("%s suddenly disappears!",
X  					Monnam(mtmp));
X+ 				seetrap(trap);
X+ 			    }
X  #ifdef WALKIES
X  			}
X  #endif
X***************
X*** 735,740 ****
X--- 820,826 ----
X  			otmp = mksobj(ARROW, FALSE);
X  			otmp->quan = 1;
X  			otmp->owt = weight(otmp);
X+ 			if(in_sight) seetrap(trap);
X  			if(thitm(8, mtmp, otmp, 0)) trapkilled = TRUE;
X  			break;
X  		case DART_TRAP:
X***************
X*** 742,747 ****
X--- 828,834 ----
X  			otmp->quan = 1;
X  			if (!rn2(6)) otmp->opoisoned = 1;
X  			otmp->owt = weight(otmp);
X+ 			if(in_sight) seetrap(trap);
X  			if(thitm(7, mtmp, otmp, 0)) trapkilled = TRUE;
X  			break;
X  		case TRAPDOOR:
X***************
X*** 753,762 ****
X--- 840,851 ----
X  				otmp = mksobj(ROCK, FALSE);
X  				otmp->quan = 1;
X  				otmp->owt = weight(otmp);
X+ 				if(in_sight) seetrap(trap);
X  				if(thitm(0, mtmp, otmp, d(2, 10)))
X  					trapkilled = TRUE;
X  				break;
X  			}
X+ 			if (mtmp->data == &mons[PM_WUMPUS]) break;
X  			tdoor = TRUE;
X  			/* Fall through */
X  		case LEVEL_TELEP:
X***************
X*** 765,771 ****
X  				&& !mtmp->wormno
X  			    /* long worms with tails mustn't change levels */
X  #endif
X! 			    ){
X  #ifdef WALKIES
X  			    if(teleport_pet(mtmp)) {
X  #endif
X--- 854,860 ----
X  				&& !mtmp->wormno
X  			    /* long worms with tails mustn't change levels */
X  #endif
X! 			    ) {
X  #ifdef WALKIES
X  			    if(teleport_pet(mtmp)) {
X  #endif
X***************
X*** 786,793 ****
X  				    }
X  				    fall_down(mtmp, newlev);
X  				}
X! 				if(in_sight)
X  		pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp));
X  				return(2);	/* no longer on this level */
X  #ifdef WALKIES
X  			    }
X--- 875,884 ----
X  				    }
X  				    fall_down(mtmp, newlev);
X  				}
X! 				if(in_sight) {
X  		pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp));
X+ 				    seetrap(trap);
X+ 				}
X  				return(2);	/* no longer on this level */
X  #ifdef WALKIES
X  			    }
X***************
X*** 804,834 ****
X  			register struct monst *ztmp = fmon;
X  
X  			if(is_flyer(mtmp->data)) break;
X! 			/* Stepped on a squeaky board. */
X! 			if (in_sight)
X! 			   pline("%s steps on a squeaky board.", Monnam(mtmp));
X! 			else
X  			   You("hear a distant squeak.");
X! 			/* Wake up nearby monsters. */
X! 		       while(ztmp) {
X! 			 if(dist2(mtmp->mx,mtmp->my,ztmp->mx,ztmp->my) < 40)
X! 			       if(ztmp->msleep) ztmp->msleep = 0;
X! 			 ztmp = ztmp->nmon;
X! 		       }
X  			break;
X  		}
X  	       case WEB:
X! 		       /* Monster in a web. */
X! 			/* in_sight check and confused bear by Eric Backus */
X! 		       if(mtmp->data->mlet != S_SPIDER) {
X! 			 if(in_sight)
X! 				pline("%s is caught in a web!", Monnam(mtmp));
X! 			  else
X! 			    if(mtmp->data == &mons[PM_OWLBEAR])
X! 			      You("hear the roaring of a confused bear!");
X! 			 mtmp->mtrapped = 1;
X! 		       }
X! 		      break;
X  #ifdef SPELLS
X  		case ANTI_MAGIC:	break;
X  #endif
X--- 895,926 ----
X  			register struct monst *ztmp = fmon;
X  
X  			if(is_flyer(mtmp->data)) break;
X! 			/* stepped on a squeaky board */
X! 			if (in_sight) {
X! 			    pline("A board beneath %s squeaks loudly.", mon_nam(mtmp));
X! 			    seetrap(trap);
X! 			} else
X  			   You("hear a distant squeak.");
X! 			/* wake up nearby monsters */
X! 			while(ztmp) {
X! 			    if(dist2(mtmp->mx,mtmp->my,ztmp->mx,ztmp->my) < 40)
X! 				if(ztmp->msleep) ztmp->msleep = 0;
X! 			    ztmp = ztmp->nmon;
X! 			}
X  			break;
X  		}
X  	       case WEB:
X! 			/* Monster in a web. */
X! 			if(mtmp->data->mlet != S_SPIDER) {
X! 			    if(in_sight)
X! 				pline("%s is caught in a web.", Monnam(mtmp));
X! 			    else /* Eric Backus */
X! 				if(mtmp->data == &mons[PM_OWLBEAR] ||
X! 					mtmp->data == &mons[PM_BUGBEAR])
X! 				    You("hear the roaring of a confused bear!");
X! 			    mtmp->mtrapped = 1;
X! 			}
X! 			break;
X  #ifdef SPELLS
X  		case ANTI_MAGIC:	break;
X  #endif
X***************
X*** 838,845 ****
X  			if(rn2(3))
X  				break; /* monsters usually don't set it off */
X  			if(in_sight)
X! 				pline("KAABLAMM!!!  %s steps on a land mine!",
X! 				      Monnam(mtmp));
X  			else if (flags.soundok)
X  				pline("Kaablamm!  You hear an explosion in the distance!");
X  			deltrap(t_at(mtmp->mx, mtmp->my));
X--- 930,937 ----
X  			if(rn2(3))
X  				break; /* monsters usually don't set it off */
X  			if(in_sight)
X! 			    pline("KAABLAMM!!!  %s triggers a land mine!",
X! 				  Monnam(mtmp));
X  			else if (flags.soundok)
X  				pline("Kaablamm!  You hear an explosion in the distance!");
X  			deltrap(t_at(mtmp->mx, mtmp->my));
X***************
X*** 854,860 ****
X  			break;
X  		}
X  		default:
X! 			impossible("Some monster encountered a strange trap of type %d.",tt);
X  	    }
X  	}
X  	if(trapkilled) return 2;
X--- 946,952 ----
X  			break;
X  		}
X  		default:
X! 			impossible("Some monster encountered a strange trap of type %d.", tt);
X  	    }
X  	}
X  	if(trapkilled) return 2;
X***************
X*** 861,869 ****
X  	else return mtmp->mtrapped;
X  }
X  
X  void
X  selftouch(arg)
X! char *arg;
X  {
X  	if(uwep && (uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE)
X  #ifdef POLYSELF
X--- 953,964 ----
X  	else return mtmp->mtrapped;
X  }
X  
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+ 
X  void
X  selftouch(arg)
X! const char *arg;
X  {
X  	if(uwep && (uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE)
X  #ifdef POLYSELF
X***************
X*** 872,878 ****
X  	){
X  		pline("%s touch the cockatrice corpse.", arg);
X  		You("turn to stone...");
X! 		killer = "cockatrice corpse accident";
X  		done(STONING);
X  	}
X  }
X--- 967,974 ----
X  	){
X  		pline("%s touch the cockatrice corpse.", arg);
X  		You("turn to stone...");
X! 		killer_format = KILLED_BY;
X! 		killer = "touching a cockatrice corpse";
X  		done(STONING);
X  	}
X  }
X***************
X*** 988,993 ****
X--- 1084,1091 ----
X  	unsee();
X  	u.utrap = 0;
X  	u.ustuck = 0;
X+ 	u.ux0 = u.ux;
X+ 	u.uy0 = u.uy;
X  	u.ux = nux;
X  	u.uy = nuy;
X  #ifdef POLYSELF
X***************
X*** 1013,1019 ****
X--- 1111,1121 ----
X  	struct trap *trap;
X  #ifdef SPELLS
X  	boolean castit = FALSE;
X+ # ifdef __GNULINT__
X+ 	register int sp_no = 0;
X+ # else
X  	register int sp_no;
X+ # endif
X  #endif
X  
X  	trap = t_at(u.ux, u.uy);
X***************
X*** 1034,1040 ****
X  		if (trap)
X  #ifdef POLYSELF
X  			You("%s onto the teleportation trap.",
X! 			    nolimbs(uasmon) ? "slither" : "jump");
X  #else
X  			You("jump onto the teleportation trap.");
X  #endif
X--- 1136,1142 ----
X  		if (trap)
X  #ifdef POLYSELF
X  			You("%s onto the teleportation trap.",
X! 			    locomotion(uasmon, "jump"));
X  #else
X  			You("jump onto the teleportation trap.");
X  #endif
X***************
X*** 1188,1195 ****
X  #endif
X  		if(newlevel <= -10) {
X  			You("arrive in heaven.");
X! 			pline("\"You are here a bit early, but we'll let you in.\"");
X! 			killer = "visit to heaven";
X  			done(DIED);
X  		} else	if (newlevel == -9) {
X  			You("feel deliriously happy. ");
X--- 1290,1298 ----
X  #endif
X  		if(newlevel <= -10) {
X  			You("arrive in heaven.");
X! 			verbalize("Thou art early, but we'll admit thee.");
X! 			killer_format = NO_KILLER_PREFIX;
X! 			killer = "went to heaven prematurely";
X  			done(DIED);
X  		} else	if (newlevel == -9) {
X  			You("feel deliriously happy. ");
X***************
X*** 1219,1225 ****
X  		pline("Unfortunately, you don't know how to fly.");
X  		You("plummet a few thousand feet to your death.");
X  		dlevel = 0;
X! 		killer = "long fall";
X  		done(DIED);
X  #ifdef WIZARD
X  		return;  
X--- 1322,1330 ----
X  		pline("Unfortunately, you don't know how to fly.");
X  		You("plummet a few thousand feet to your death.");
X  		dlevel = 0;
X! 		killer_format = NO_KILLER_PREFIX;
X! 		killer =
X!     self_pronoun("teleported out of the dungeon and fell to %s death","his");
X  		done(DIED);
X  #ifdef WIZARD
X  		return;  
X***************
X*** 1284,1303 ****
X  			} else {
X  				num = rnd(6);
X  				u.uhpmax -= num;
X! 				losehp(num,"burst of flame");
X  				break;
X  			}
X  		      }
X  
X  	     /* odd feelings */
X! 	     case 13:   pline("A shiver runs up and down your spine!");
X!              /* TO DO: What if you're polymorphed into something spineless? */
X  			break;
X  	     case 14:	You(Hallucination ?
X  				"hear the moon howling at you." :
X  				"hear distant howling.");
X  			break;
X! 	     case 15:   You("suddenly yearn for your distant homeland.");
X  			break;
X  	     case 16:   Your("pack shakes violently!");
X  			break;
X--- 1389,1410 ----
X  			} else {
X  				num = rnd(6);
X  				u.uhpmax -= num;
X! 				losehp(num,"burst of flame", KILLED_BY_AN);
X  				break;
X  			}
X  		      }
X  
X  	     /* odd feelings */
X! 	     case 13:	pline("A shiver runs up and down your %s!",
X! 			      body_part(SPINE));
X  			break;
X  	     case 14:	You(Hallucination ?
X  				"hear the moon howling at you." :
X  				"hear distant howling.");
X  			break;
X! 	     case 15:	You("suddenly yearn for %s.",
X! 				Hallucination ? "Cleveland" :
X! 						"your distant homeland");
X  			break;
X  	     case 16:   Your("pack shakes violently!");
X  			break;
X***************
X*** 1344,1356 ****
X  
X  	/* Scrolls and potions get affected by the water */
X  	for(obj = invent; obj; obj = obj->nobj) {
X! 		if(obj->olet == SCROLL_SYM && rn2(12) > u.uluck
X  #ifdef MAIL
X  			&& obj->otyp != SCR_MAIL
X  #endif
X  								)
X  			obj->otyp = SCR_BLANK_PAPER;
X! 		if(obj->olet == POTION_SYM && rn2(12) > u.uluck) {
X  			if (obj->spe == -1) {
X  				obj->otyp = POT_WATER;
X  				obj->blessed = obj->cursed = 0;
X--- 1451,1463 ----
X  
X  	/* Scrolls and potions get affected by the water */
X  	for(obj = invent; obj; obj = obj->nobj) {
X! 		if(obj->olet == SCROLL_SYM && rn2(12) > Luck
X  #ifdef MAIL
X  			&& obj->otyp != SCR_MAIL
X  #endif
X  								)
X  			obj->otyp = SCR_BLANK_PAPER;
X! 		if(obj->olet == POTION_SYM && rn2(12) > Luck) {
X  			if (obj->spe == -1) {
X  				obj->otyp = POT_WATER;
X  				obj->blessed = obj->cursed = 0;
X***************
X*** 1378,1389 ****
X  #ifdef WIZARD
X  	wizard ||
X  #endif
X! 	rn2(3) < u.uluck+2) {
X  		You("attempt a teleport spell.");	/* utcsri!carroll */
X  		(void) dotele();
X  		if(!is_pool(u.ux,u.uy)) return;
X  	}
X  	You("drown.");
X  	killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat";
X  	done(DROWNING);
X  }
X--- 1485,1497 ----
X  #ifdef WIZARD
X  	wizard ||
X  #endif
X! 	rn2(3) < Luck+2) {
X  		You("attempt a teleport spell.");	/* utcsri!carroll */
X  		(void) dotele();
X  		if(!is_pool(u.ux,u.uy)) return;
X  	}
X  	You("drown.");
X+ 	killer_format = KILLED_BY_AN;
X  	killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat";
X  	done(DROWNING);
X  }
X***************
X*** 1519,1528 ****
X  	register struct obj *otmp,*otmp2;
X  	char	buf[80];
X  
X! 	if(rn2(13+u.uluck) > 7) return;
X  
X  	otmp = obj;
X! 	switch(rn2(13-u.uluck)) {	/* which trap? */
X  		case 23:
X  		case 22:
X  		case 21:
X--- 1627,1638 ----
X  	register struct obj *otmp,*otmp2;
X  	char	buf[80];
X  
X! 	if(Luck > -13 && rn2(13+Luck) > 7) return;
X  
X  	otmp = obj;
X! 	switch(rn2(20) ? ((Luck >= 13) ? 0 : rn2(13-Luck)) : rn2(26)) {
X! 		case 25:
X! 		case 24:
X  		case 23:
X  		case 22:
X  		case 21:
X***************
X*** 1536,1542 ****
X  			    delobj(otmp);
X  			}
X  
X! 			losehp(d(6,6), buf);
X  			wake_nearby();
X  			return;
X  		case 20:
X--- 1646,1652 ----
X  			    delobj(otmp);
X  			}
X  
X! 			losehp(d(6,6), buf, KILLED_BY_AN);
X  			wake_nearby();
X  			return;
X  		case 20:
X***************
X*** 1545,1562 ****
X  		case 17:
X  			pline("A cloud of noxious gas billows from the %s.",
X  			      xname(obj));
X! 			poisoned("gas cloud", A_STR, "cloud of poison gas");
X  			break;
X  		case 16:
X  		case 15:
X  		case 14:
X  		case 13:
X  			pline("A tower of flame erupts from the %s",
X  			      xname(obj));
X  			if(Fire_resistance) {
X  			    shieldeff(u.ux, u.uy);
X  			    You("don't seem to be affected.");
X! 			} else	losehp(d(4, 6), "tower of flame");
X  			destroy_item(SCROLL_SYM, AD_FIRE);
X  #ifdef SPELLS
X  			destroy_item(SPBOOK_SYM, AD_FIRE);
X--- 1655,1679 ----
X  		case 17:
X  			pline("A cloud of noxious gas billows from the %s.",
X  			      xname(obj));
X! 			poisoned("gas cloud", A_STR, "cloud of poison gas",15);
X  			break;
X  		case 16:
X  		case 15:
X  		case 14:
X  		case 13:
X+ 			You("feel a needle prick your %s.",body_part(bodypart));
X+ 			poisoned("needle", A_CON, "poison needle",10);
X+ 			break;
X+ 		case 12:
X+ 		case 11:
X+ 		case 10:
X+ 		case 9:
X  			pline("A tower of flame erupts from the %s",
X  			      xname(obj));
X  			if(Fire_resistance) {
X  			    shieldeff(u.ux, u.uy);
X  			    You("don't seem to be affected.");
X! 			} else	losehp(d(4, 6), "tower of flame", KILLED_BY_AN);
X  			destroy_item(SCROLL_SYM, AD_FIRE);
X  #ifdef SPELLS
X  			destroy_item(SPBOOK_SYM, AD_FIRE);
X***************
X*** 1563,1589 ****
X  #endif
X  			destroy_item(POTION_SYM, AD_FIRE);
X  			break;
X! 		case 12:
X! 		case 10:
X! 		case 9:
X  			You("are jolted by a surge of electricity!");
X  			if(Shock_resistance)  {
X  			    shieldeff(u.ux, u.uy);
X  			    You("don't seem to be affected.");
X! 			} else	losehp(d(4, 4), "electric shock");
X  			destroy_item(RING_SYM, AD_ELEC);
X  			destroy_item(WAND_SYM, AD_ELEC);
X  			break;
X! 		case 8:
X! 		case 7:
X! 		case 6:
X  			pline("Suddenly you are frozen in place!");
X  			nomovemsg = "You can move again.";
X  			multi = -d(5, 6);
X  			break;
X! 		case 5:
X! 		case 4:
X! 		case 3:
X  			pline("A cloud of %s gas billows from the %s",
X  			      hcolor(), xname(obj));
X  			if(!Stunned)
X--- 1680,1706 ----
X  #endif
X  			destroy_item(POTION_SYM, AD_FIRE);
X  			break;
X! 		case 8:
X! 		case 7:
X! 		case 6:
X  			You("are jolted by a surge of electricity!");
X  			if(Shock_resistance)  {
X  			    shieldeff(u.ux, u.uy);
X  			    You("don't seem to be affected.");
X! 			} else	losehp(d(4, 4), "electric shock", KILLED_BY_AN);
X  			destroy_item(RING_SYM, AD_ELEC);
X  			destroy_item(WAND_SYM, AD_ELEC);
X  			break;
X! 		case 5:
X! 		case 4:
X! 		case 3:
X  			pline("Suddenly you are frozen in place!");
X  			nomovemsg = "You can move again.";
X  			multi = -d(5, 6);
X  			break;
X! 		case 2:
X! 		case 1:
X! 		case 0:
X  			pline("A cloud of %s gas billows from the %s",
X  			      hcolor(), xname(obj));
X  			if(!Stunned)
X***************
X*** 1594,1607 ****
X  			make_stunned(HStun + rn1(7, 16),FALSE);
X  			make_hallucinated(Hallucination + rn1(5, 16),FALSE);
X  			break;
X! 		default:
X! 			You("feel a needle prick your %s.",body_part(bodypart));
X! 			poisoned("needle", A_CON, "a poisoned needle");
X  			break;
X  	}
X  	otmp->otrapped = 0;		/* these traps are one-shot things */
X  }
X  
X  void
X  wake_nearby() {			/* Wake up nearby monsters. */
X  	register struct monst *mtmp;
X--- 1711,1726 ----
X  			make_stunned(HStun + rn1(7, 16),FALSE);
X  			make_hallucinated(Hallucination + rn1(5, 16),FALSE);
X  			break;
X! 		default: impossible("bad chest trap");
X  			break;
X  	}
X+ 	bot(); 			/* to get immediate botl re-display */
X  	otmp->otrapped = 0;		/* these traps are one-shot things */
X  }
X  
X+ #endif /* OVLB */
X+ #ifdef OVL2
X+ 
X  void
X  wake_nearby() {			/* Wake up nearby monsters. */
X  	register struct monst *mtmp;
X***************
X*** 1614,1619 ****
X--- 1733,1741 ----
X  	}
X  }
X  
X+ #endif /* OVL2 */
X+ #ifdef OVL0
X+ 
X  struct trap *
X  t_at(x,y)
X  register int x, y;
X***************
X*** 1626,1631 ****
X--- 1748,1756 ----
X  	return((struct trap *)0);
X  }
X  
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+ 
X  void
X  deltrap(trap)
X  register struct trap *trap;
X***************
X*** 1643,1662 ****
X  
X  void
X  b_trapped(item)		/* used for doors. can be used */
X! register char *item;    /* for anything else that opens */
X  {
X  	register int dmg = rnd(5+(dlevel < 5 ? dlevel : 2+dlevel/2));
X  
X  	pline("KABOOM!!  The %s was booby-trapped!", item);
X! 	if(u.ulevel < 4 && dlevel < 3 && !rn2(3)) 
X  		You("are shaken, but luckily unhurt.");		
X! 	else losehp(dmg, "explosion");
X  	make_stunned(HStun + dmg, TRUE);
X  }
X  
X  /* Monster is hit by trap. */
X  /* Note: doesn't work if both obj and d_override are null */
X! static boolean
X  thitm(tlev, mon, obj, d_override)
X  register int tlev;
X  register struct monst *mon;
X--- 1768,1787 ----
X  
X  void
X  b_trapped(item)		/* used for doors. can be used */
X! register const char *item;    /* for anything else that opens */
X  {
X  	register int dmg = rnd(5+(dlevel < 5 ? dlevel : 2+dlevel/2));
X  
X  	pline("KABOOM!!  The %s was booby-trapped!", item);
X! 	if(u.ulevel < 4 && dlevel < 3 && !rnl(3))
X  		You("are shaken, but luckily unhurt.");		
X! 	else losehp(dmg, "explosion", KILLED_BY_AN);
X  	make_stunned(HStun + dmg, TRUE);
X  }
X  
X  /* Monster is hit by trap. */
X  /* Note: doesn't work if both obj and d_override are null */
X! XSTATIC boolean
X  thitm(tlev, mon, obj, d_override)
X  register int tlev;
X  register struct monst *mon;
X***************
X*** 1719,1721 ****
X--- 1844,1848 ----
X  		!strncmp(nomovemsg,"You regain con", 15) ||
X  		!strncmp(nomovemsg,"You are consci", 15)));
X  }
X+ 
X+ #endif /* OVLB */
X*** others/Old/pcunix.c	Mon Feb 19 23:35:44 1990
X--- others/pcunix.c	Mon Feb  5 18:45:43 1990
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)pcunix.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: @(#)pcunix.c	3.0	89/12/29
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 14,26 ****
X   */
X  
X  #include "hack.h"	/* mainly for index() which depends on BSD */
X- #ifdef TOS
X- #ifndef OLD_TOS
X- #include <errno.h>
X- #else
X- #include <error.h>
X- #endif /* OLD_TOS */
X- #endif
X  
X  #ifndef MACOS
X  #include	<sys/types.h>
X--- 14,19 ----
X***************
X*** 27,36 ****
X  #include	<sys/stat.h>
X  #endif
X  
X! #ifndef OLD_TOS
X! # ifndef MACOS
X! static struct stat buf, hbuf;
X  # endif
X  
X  void
X  setrandom()
X--- 20,33 ----
X  #include	<sys/stat.h>
X  #endif
X  
X! #ifdef OVLB
X! 
X! #ifndef MACOS
X! static struct stat buf;
X! # ifdef WANT_GETHDATE
X! static struct stat hbuf;
X  # endif
X+ #endif
X  
X  void
X  setrandom()
X***************
X*** 96,107 ****
X  	return(getlt()->tm_hour == 0);
X  }
X  
X! # ifndef MACOS
X  void
X  gethdate(name)
X  char *name;
X  {
X! #  if defined(TOS) && !defined(__GNUC__)
X  /* old version - for people short of space */
X  /*
X  /* register char *np;
X--- 93,104 ----
X  	return(getlt()->tm_hour == 0);
X  }
X  
X! #ifndef MACOS
X  void
X  gethdate(name)
X  char *name;
X  {
X! # ifdef WANT_GETHDATE
X  /* old version - for people short of space */
X  /*
X  /* register char *np;
X***************
X*** 141,152 ****
X  	path = np + 1;
X      }
X      error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name);
X! #  endif /* TOS && __GNUC__ */
X  }
X  
X  int
X! uptodate(fd) {
X! #  if defined(TOS) && !defined(__GNUC__) /* no fstat yet */
X      if(fstat(fd, &buf)) {
X  	pline("Cannot get status of saved level? ");
X  	return(0);
X--- 138,151 ----
X  	path = np + 1;
X      }
X      error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name);
X! # endif /* WANT_GETHDATE */
X  }
X  
X  int
X! uptodate(fd)
X! int fd;
X! {
X! # ifdef WANT_GETHDATE
X      if(fstat(fd, &buf)) {
X  	pline("Cannot get status of saved level? ");
X  	return(0);
X***************
X*** 155,177 ****
X  	pline("Saved level is out of date. ");
X  	return(0);
X      }
X! #  endif
X      return(1);
X  }
X! # endif	/* MACOS /* */
X! #endif /* OLD_TOS /* */
X  
X  void
X  regularize(s)
X! 	/* normalize file name - we don't like .'s, /'s, :'s [Mac], or spaces */
X  register char *s;
X  {
X  	register char *lp;
X  
X  	while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' '))
X! #ifdef MACOS
X! 			|| (lp=index(s, ':'))
X  #endif
X- 								)
X- 		*lp = '_';
X  }
X--- 154,203 ----
X  	pline("Saved level is out of date. ");
X  	return(0);
X      }
X! # else
X! #  if defined(MSDOS) && !defined(NO_FSTAT)
X!     if(fstat(fd, &buf)) {
X! 	if(moves > 1) pline("Cannot get status of saved level? ");
X! 	else pline("Cannot get status of saved game");
X! 	return(0);
X!     } 
X!     if(comp_times(buf.st_mtime)) { 
X! 	if(moves > 1) pline("Saved level is out of date");
X! 	else pline("Saved game is out of date. ");
X! 	return(0);
X!     }
X! #  endif  /* MSDOS /* */
X! # endif /* WANT_GETHDATE */
X      return(1);
X  }
X! #endif	/* MACOS /* */
X  
X  void
X  regularize(s)
X! /*
X!  * normalize file name - we don't like .'s, /'s, :'s [Mac], or spaces,
X!  * and in msdos / OS/2 we really get picky
X!  */
X  register char *s;
X  {
X  	register char *lp;
X  
X+ #ifdef MSDOS
X+ 	for (lp = s; *lp; lp++)
X+ 		if (*lp <= ' ' || *lp == '"' || (*lp >= '*' && *lp <= ',') ||
X+ 		    *lp == '.' || *lp == '/' || (*lp >= ':' && *lp <= '?') ||
X+ # ifdef OS2
X+ 		    *lp == '&' || *lp == '(' || *lp == ')' ||
X+ # endif
X+ 		    *lp == '|' || *lp >= 127 || (*lp >= '[' && *lp <= ']'))
X+                         *lp = '_';
X+ #else
X  	while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' '))
X! # ifdef MACOS
X! 	   || (lp=index(s, ':'))
X! # endif
X! 		) *lp = '_';
X  #endif
X  }
X+ 
X+ #endif /* OVLB */
X*** others/Old/random.c	Mon Feb 19 23:35:59 1990
X--- others/random.c	Fri Feb 16 23:01:50 1990
X***************
X*** 15,22 ****
X   * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X   */
X  
X! #if defined(LIBC_SCCS) && !defined(lint)
X  static char sccsid[] = "@(#)random.c	5.5 (Berkeley) 7/6/88";
X  #endif /* LIBC_SCCS and not lint */
X  
X  #include <stdio.h>
X--- 15,34 ----
X   * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X   */
X  
X! /* Several minor changes were made for the NetHack distribution to satisfy
X!  * non-BSD compilers (by definition BSD compilers do not need to compile
X!  * this file for NetHack).  These changes consisted of:
X!  *	- changing the sccsid conditions to nested ifdefs from defined()s
X!  *	to accommodate stupid preprocessors
X!  *	- giving srandom() type void instead of allowing it to default to int
X!  *	- making the first return in initstate() return a value consistent
X!  *	with its type (instead of no value)
X!  */
X! 
X! #ifdef LIBC_SCCS
X! # ifndef lint
X  static char sccsid[] = "@(#)random.c	5.5 (Berkeley) 7/6/88";
X+ # endif
X  #endif /* LIBC_SCCS and not lint */
X  
X  #include <stdio.h>
X***************
X*** 182,187 ****
X--- 194,200 ----
X   * values produced by this routine.
X   */
X  
X+ void
X  srandom( x )
X  
X      unsigned		x;
X***************
X*** 236,242 ****
X  	if(  n  <  BREAK_1  )  {
X  	    if(  n  <  BREAK_0  )  {
X  		fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n );
X! 		return;
X  	    }
X  	    rand_type = TYPE_0;
X  	    rand_deg = DEG_0;
X--- 249,255 ----
X  	if(  n  <  BREAK_1  )  {
X  	    if(  n  <  BREAK_0  )  {
X  		fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n );
X! 		return (char *)0;
X  	    }
X  	    rand_type = TYPE_0;
X  	    rand_deg = DEG_0;
X*** others/Old/trampoli.c	Mon Feb 19 23:37:13 1990
X--- others/trampoli.c	Wed Feb  7 18:39:42 1990
X***************
X*** 39,44 ****
X--- 39,50 ----
X  #undef domonability
X  #endif /* POLYSELF */
X  
X+ #ifdef EXPLORE_MODE
X+ #undef enter_explore_mode
X+ 
X+ int enter_explore_mode() { return enter_explore_mode_(); }
X+ #endif
X+ 
X  #undef timed_occupation
X  
X  #if defined(WIZARD) || defined(EXPLORE_MODE)
X***************
X*** 131,137 ****
X  int Boots_off()   { return Boots_off_();   }
X  int Gloves_off()  { return Gloves_off_();  }
X  int Helmet_off()  { return Helmet_off_();  }
X! /* int Armor_on()    { return Armor_on_();    } */
X  int Boots_on()    { return Boots_on_();    }
X  int Gloves_on()   { return Gloves_on_();   }
X  int Helmet_on()   { return Helmet_on_();   }
X--- 137,143 ----
X  int Boots_off()   { return Boots_off_();   }
X  int Gloves_off()  { return Gloves_off_();  }
X  int Helmet_off()  { return Helmet_off_();  }
X! int Armor_on()    { return Armor_on_();    }
X  int Boots_on()    { return Boots_on_();    }
X  int Gloves_on()   { return Gloves_on_();   }
X  int Helmet_on()   { return Helmet_on_();   }
X***************
X*** 173,180 ****
X--- 179,188 ----
X  
X  
X  /* ### end.c ### */
X+ #undef done1
X  #undef done2
X  
X+ int done1() { return done1_(); }
X  int done2() { return done2_(); }
X  
X  
X***************
X*** 241,246 ****
X--- 249,259 ----
X  int forcelock() { return forcelock_(); }
X  int picklock()  { return picklock_();  }
X  
X+ /* ### mondata.c ### */
X+ #undef canseemon
X+ 
X+ boolean canseemon(x) struct monst *x; { return canseemon_(x); }
X+ 
X  
X  /* ### o_init.c ### */
X  #undef dodiscovered
X***************
X*** 290,296 ****
X  #undef in_container
X  #undef out_container
X  
X! int ck_bag()  { return ck_bag_();  }
X  int ck_container(obj)  struct obj *obj; { return ck_container_(obj); }
X  int doloot() { return doloot_(); }
X  int in_container(obj)  struct obj *obj; { return in_container_(obj); }
X--- 303,309 ----
X  #undef in_container
X  #undef out_container
X  
X! int ck_bag(obj) struct obj *obj; { return ck_bag_(obj);  }
X  int ck_container(obj)  struct obj *obj; { return ck_container_(obj); }
X  int doloot() { return doloot_(); }
X  int in_container(obj)  struct obj *obj; { return in_container_(obj); }
X***************
X*** 398,405 ****
X--- 411,420 ----
X  
X  /* ### version.c ### */
X  #undef doversion
X+ #undef doextversion
X  
X  int doversion() { return doversion_(); }
X+ int doextversion() { return doextversion_(); }
X  
X  
X  /* ### wield.c ### */
X
END_OF_FILE
if test 53640 -ne `wc -c <'patch7.21'`; then
    echo shar: \"'patch7.21'\" unpacked with wrong size!
fi
# end of 'patch7.21'
echo shar: End of archive 16 \(of 30\).
cp /dev/null ark16isdone
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