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

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

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 8, Issue 64
Archive-name: NetHack3/Patch6k
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 11 (of 15)."
# Contents:  patches06k
# Wrapped by billr@saab on Wed Nov 22 10:50:19 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches06k' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches06k'\"
else
echo shar: Extracting \"'patches06k'\" \(53197 characters\)
sed "s/^X//" >'patches06k' <<'END_OF_FILE'
X*** src/Old/read.c	Sun Nov 19 13:09:00 1989
X--- src/read.c	Fri Nov 17 19:32:14 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)read.c	3.0	88/04/13
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: @(#)read.c	3.0	89/11/15
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 12,18 ****
X  #endif
X  	0 };
X  
X! static void explode P((struct obj *));
X  static void do_class_genocide();
X  
X  int
X--- 12,18 ----
X  #endif
X  	0 };
X  
X! static void FDECL(explode, (struct obj *));
X  static void do_class_genocide();
X  
X  int
X***************
X*** 52,58 ****
X--- 52,60 ----
X  		pline("Being blind, you cannot read the formula on the scroll.");
X  		return(0);
X  	    }
X+ #ifndef NO_SIGNAL
X  	scroll->in_use = TRUE;		/* now being read */
X+ #endif
X  #ifdef SPELLS
X  	if(scroll->olet == SPBOOK_SYM) {
X  	    if(confused) {
X***************
X*** 85,90 ****
X--- 87,95 ----
X  		}
X  		if(!(scroll->otyp == SCR_BLANK_PAPER) || confused)
X  			useup(scroll);
X+ #ifndef NO_SIGNAL
X+ 		else scroll->in_use = FALSE;
X+ #endif
X  	}
X  	return(1);
X  }
X***************
X*** 121,126 ****
X--- 126,297 ----
X  		Blind ? "" : Hallucination ? hcolor() : color);
X  }
X  
X+ /*
X+  * recharge an object; curse_bless is -1 if the recharging implement
X+  * was cursed, +1 if blessed, 0 otherwise.
X+  */
X+ static
X+ void
X+ recharge(obj, curse_bless)
X+ struct obj *obj;
X+ int curse_bless;
X+ {
X+ 	register int n;
X+ 	boolean cursed, blessed;
X+ 
X+ 	cursed = curse_bless < 0;
X+ 	blessed = curse_bless > 0;
X+ 
X+ 	if (obj->olet != WAND_SYM) {
X+ 	    switch(obj->otyp) {
X+ 	    case MAGIC_MARKER:
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    n = obj->spe;
X+ 		    if (n < 50) obj->spe = 50;
X+ 		    if (n >= 50 && n < 75) obj->spe = 75;
X+ 		    if (n >= 75) obj->spe += 10;
X+ 		    p_glow2(obj,blue);
X+ 		} else {
X+ 		    if (obj->spe < 50) obj->spe = 50;
X+ 		    else obj->spe++;
X+ 		    p_glow2(obj,white);
X+ 		}
X+ 		break;
X+ 	    case LAMP:
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    n = rn2(11);
X+ 		    if (obj->spe < n) obj->spe = n;
X+ 		    else obj->spe += rnd(3);
X+ 		    p_glow2(obj,blue);
X+ 		} else {
X+ 		    obj->spe++;
X+ 		    p_glow1(obj);
X+ 		}
X+ 		break;
X+ 	    case MAGIC_LAMP:
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed > 0) {
X+ 		    if (obj->spe == 1 || obj->recharged)
X+ 			pline(nothing_happens);
X+ 		    else {
X+ 			obj->spe = 1;
X+ 			obj->recharged = 1;
X+ 			p_glow1(obj);
X+ 		    }
X+ 		} else {
X+ 		    if (obj->spe == 1 || obj->recharged)
X+ 			pline(nothing_happens);
X+ 		    else {
X+ 			n = rn2(2);
X+ 			if (!n) {
X+ 			    obj->spe = 1;
X+ 			    obj->recharged = 1;
X+ 			    p_glow1(obj);
X+ 			} else pline(nothing_happens);
X+ 		    }
X+ 		}
X+ 		break;
X+ 	    case CRYSTAL_BALL:
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    obj->spe = 6;
X+ 		    p_glow2(obj,blue);
X+ 		} else {
X+ 		    if (obj->spe < 5) {
X+ 			obj->spe++;
X+ 			p_glow1(obj);
X+ 		    } else pline(nothing_happens);
X+ 		}
X+ 		break;
X+ 	    case BAG_OF_TRICKS:
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    if (obj->spe <= 10)
X+ 			obj->spe += (5 + rnd(10));
X+ 		    else obj->spe += (5 + rnd(5));
X+ 		    p_glow2(obj,blue);
X+ 		} else {
X+ 		    obj->spe += rnd(5);
X+ 		    p_glow1(obj);
X+ 		}
X+ 		break;
X+ 	    default:
X+ 		You("have a feeling of loss.");
X+ 		return;
X+ 	    } /* switch */
X+ 	}
X+ 	else {
X+ 	    if (obj->otyp == WAN_WISHING) {
X+ 		if (obj->recharged) { /* recharged once already? */
X+ 		    explode(obj);
X+ 		    return;
X+ 		}
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    if (obj->spe != 3) {
X+ 			obj->spe = 3;
X+ 			p_glow2(obj,blue);
X+ 		    } else {
X+ 			explode(obj);
X+ 			return;
X+ 		    }
X+ 		} else {
X+ 		    if (obj->spe < 3) {
X+ 			obj->spe++;
X+ 			p_glow2(obj,blue);
X+ 		    } else pline(nothing_happens);
X+ 		}
X+ 		obj->recharged = 1; /* another recharging disallowed */
X+ 	    }
X+ 	    else {
X+ 		if (cursed) stripspe(obj);
X+ 		else if (blessed) {
X+ 		    if (objects[obj->otyp].bits & NODIR) {
X+ 			n = rn1(5,11);
X+ 			if (obj->spe < n) obj->spe = n;
X+ 			else obj->spe++;
X+ 		    }
X+ 		    else {
X+ 			n = rn1(5,4);
X+ 			if (obj->spe < n) obj->spe = n;
X+ 			else obj->spe++;
X+ 		    }
X+ 		    p_glow2(obj,blue);
X+ 		} else {
X+ 		    obj->spe++;
X+ 		    p_glow1(obj);
X+ 		}
X+ 	    }
X+ 	}
X+ }
X+ 
X+ /*
X+  * forget some things (e.g. after reading a scroll of amnesia). abs(howmuch)
X+  * controls the level of forgetfulness; 0 == part of the map, 1 == all of
X+  * of map,  2 == part of map + spells, 3 == all of map + spells.
X+  */
X+ 
X+ static
X+ void
X+ forget(howmuch)
X+ boolean howmuch;
X+ {
X+ 	register int zx, zy;
X+ 
X+ 	known = TRUE;
X+ 	for(zx = 0; zx < COLNO; zx++) for(zy = 0; zy < ROWNO; zy++)
X+ 	    if(howmuch & 1 || rn2(7))
X+ 		if(!cansee(zx,zy))
X+ 		    levl[zx][zy].seen = levl[zx][zy].new =
X+ 			levl[zx][zy].scrsym = 0;
X+ 	docrt();
X+ #ifdef SPELLS
X+ 	if(howmuch & 2) losespells();
X+ #endif
X+ }
X+ 
X  int
X  seffects(sobj)
X  register struct obj	*sobj;
X***************
X*** 127,132 ****
X--- 298,304 ----
X  {
X  	register int cval = 0;
X  	register boolean confused = (Confusion != 0);
X+ 	register struct obj *otmp;
X  
X  	switch(sobj->otyp) {
X  #ifdef MAIL
X***************
X*** 142,149 ****
X  #endif
X  	case SCR_ENCHANT_ARMOR:
X  	    {
X- 		register struct obj *otmp = some_armor();
X  		register schar s = 0;
X  		if(!otmp) {
X  			strange_feeling(sobj,
X  					!Blind ? "Your skin glows then fades." :
X--- 314,321 ----
X  #endif
X  	case SCR_ENCHANT_ARMOR:
X  	    {
X  		register schar s = 0;
X+ 		otmp = some_armor();
X  		if(!otmp) {
X  			strange_feeling(sobj,
X  					!Blind ? "Your skin glows then fades." :
X***************
X*** 162,169 ****
X  				  sobj->cursed ? black : "gold",
X  				sobj->cursed ? "glow" :
X  				  (is_shield(otmp) ? "layer" : "shield"));
X! 			if(!(otmp->rustfree))
X! 				otmp->rustfree = !(sobj->cursed);
X  			break;
X  		}
X  #ifdef TOLKIEN
X--- 334,341 ----
X  				  sobj->cursed ? black : "gold",
X  				sobj->cursed ? "glow" :
X  				  (is_shield(otmp) ? "layer" : "shield"));
X! 			if(!(sobj->cursed))
X! 				otmp->rustfree = TRUE;
X  			break;
X  		}
X  #ifdef TOLKIEN
X***************
X*** 200,214 ****
X  		break;
X  	    }
X  	case SCR_DESTROY_ARMOR:
X! 	    {   register struct obj *otmp = some_armor();
X! 
X  		if(confused) {
X  			if(!otmp) {
X  				strange_feeling(sobj,"Your bones itch.");
X  				return(1);
X  			}
X- 			p_glow2(otmp,purple);
X  			otmp->rustfree = sobj->cursed;
X  			break;
X  		}
X  		if(!sobj->cursed || (sobj->cursed && (!otmp || !otmp->cursed))) {
X--- 372,386 ----
X  		break;
X  	    }
X  	case SCR_DESTROY_ARMOR:
X! 	    {
X! 		otmp = some_armor();
X  		if(confused) {
X  			if(!otmp) {
X  				strange_feeling(sobj,"Your bones itch.");
X  				return(1);
X  			}
X  			otmp->rustfree = sobj->cursed;
X+ 			p_glow2(otmp,purple);
X  			break;
X  		}
X  		if(!sobj->cursed || (sobj->cursed && (!otmp || !otmp->cursed))) {
X***************
X*** 343,348 ****
X--- 515,521 ----
X  		if(uwep && (uwep->olet == WEAPON_SYM || uwep->otyp == PICK_AXE)
X  							&& confused) {
X  		/* olet check added 10/25/86 GAN */
X+                         uwep->rustfree = !(sobj->cursed);
X  			if(Blind)
X  			    Your("weapon feels warm for a moment.");
X  			else
X***************
X*** 352,358 ****
X  				Hallucination ? hcolor() :
X  				  sobj->cursed ? purple : "gold",
X  				sobj->cursed ? "glow" : "shield");
X- 			uwep->rustfree = !(sobj->cursed);
X  		} else return !chwepon(sobj, bcsign(sobj)*2+1);
X  		break;
X  	case SCR_TAMING:
X--- 525,530 ----
X***************
X*** 436,443 ****
X  		    while(invent && !ggetobj("identify", identify, cval));
X  		return(1);
X  	case SCR_CHARGING:
X- 	    {	register struct obj *obj;
X- 		register int n;
X  		if (confused) {
X  		    You("feel charged up!");
X  		    break;
X--- 608,613 ----
X***************
X*** 444,578 ****
X  		}
X  		known = TRUE;
X  		pline("This is a charging scroll.");
X! 		obj = getobj("0#", "charge");
X! 		if (!obj) break;
X! 		if (obj->olet != WAND_SYM) {
X! 		    switch(obj->otyp) {
X! 		    case MAGIC_MARKER:
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    n = obj->spe;
X! 			    if (n < 50) obj->spe = 50;
X! 			    if (n >= 50 && n < 75) obj->spe = 75;
X! 			    if (n >= 75) obj->spe += 10;
X! 			    p_glow2(obj,blue);
X! 			} else {
X! 			    if (obj->spe < 50) obj->spe = 50;
X! 			    else obj->spe++;
X! 			    p_glow2(obj,white);
X! 			}
X! 			break;
X! 		    case LAMP:
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    n = rn2(11);
X! 			    if (obj->spe < n) obj->spe = n;
X! 			    else obj->spe += rnd(3);
X! 			    p_glow2(obj,blue);
X! 			} else {
X! 			    obj->spe++;
X! 			    p_glow1(obj);
X! 			}
X! 			break;
X! 		    case MAGIC_LAMP:
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    if (obj->spe == 1 || obj->recharged)
X! 				pline(nothing_happens);
X! 			    else {
X! 				obj->spe = 1;
X! 				obj->recharged = 1;
X! 				p_glow1(obj);
X! 			    }
X! 			} else {
X! 			    if (obj->spe == 1 || obj->recharged)
X! 				pline(nothing_happens);
X! 			    else {
X! 				n = rn2(2);
X! 				if (!n) {
X! 				    obj->spe = 1;
X! 				    obj->recharged = 1;
X! 				    p_glow1(obj);
X! 				} else pline(nothing_happens);
X! 			    }
X! 			}
X! 			break;
X! 		    case CRYSTAL_BALL:
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    obj->spe = 6;
X! 			    p_glow2(obj,blue);
X! 			} else {
X! 			    if (obj->spe < 5) {
X! 				obj->spe++;
X! 				p_glow1(obj);
X! 			    } else pline(nothing_happens);
X! 			}
X! 			break;
X! 		    case BAG_OF_TRICKS:
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    if (obj->spe <= 10)
X! 				obj->spe += (5 + rnd(10));
X! 			    else obj->spe += (5 + rnd(5));
X! 			    p_glow2(obj,blue);
X! 			} else {
X! 			    obj->spe += rnd(5);
X! 			    p_glow1(obj);
X! 			}
X! 			break;
X! 		    default:
X! 			pline("The scroll %s%s, and disintegrates.",
X! 				Blind ? "vibrates violently" : "glows ",
X! 				Blind ? "" : Hallucination ? hcolor() : "dark red");
X! 		    } /* switch */
X! 		    break;
X! 		}
X! 		else {
X! 		    if (obj->otyp == WAN_WISHING) {
X! 			if (obj->recharged) { /* recharged once already? */
X! 			    explode(obj);
X! 			    break;
X! 			}
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    if (obj->spe != 3) {
X! 				obj->spe = 3;
X! 				p_glow2(obj,blue);
X! 			    } else {
X! 				explode(obj);
X! 				break;
X! 			    }
X! 			} else {
X! 			    if (obj->spe < 3) {
X! 				obj->spe++;
X! 				p_glow2(obj,blue);
X! 			    } else pline(nothing_happens);
X! 			}
X! 			obj->recharged = 1; /* another recharging disallowed */
X! 		    }
X! 		    else {
X! 			if (sobj->cursed) stripspe(obj);
X! 			else if (sobj->blessed) {
X! 			    if (objects[obj->otyp].bits & NODIR) {
X! 				n = rn1(5,11);
X! 				if (obj->spe < n) obj->spe = n;
X! 				else obj->spe++;
X! 			    }
X! 			    else {
X! 				n = rn1(5,4);
X! 				if (obj->spe < n) obj->spe = n;
X! 				else obj->spe++;
X! 			    }
X! 			    p_glow2(obj,blue);
X! 			} else {
X! 			    obj->spe++;
X! 			    p_glow1(obj);
X! 			}
X! 			break;
X! 		    }
X! 		}
X! 	    }
X  		break;
X  	case SCR_MAGIC_MAPPING:
X  		known = TRUE;
X--- 614,622 ----
X  		}
X  		known = TRUE;
X  		pline("This is a charging scroll.");
X! 		otmp = getobj("0#", "charge");
X! 		if (!otmp) break;
X! 		recharge(otmp, sobj->cursed ? -1 : (sobj->blessed ? 1 : 0));
X  		break;
X  	case SCR_MAGIC_MAPPING:
X  		known = TRUE;
X***************
X*** 589,603 ****
X  		}
X  		break;
X  	case SCR_AMNESIA:
X- 	    {	register int zx, zy;
X- 
X  		known = TRUE;
X! 		for(zx = 0; zx < COLNO; zx++) for(zy = 0; zy < ROWNO; zy++)
X! 		    if(!confused || sobj->cursed || rn2(7))
X! 			if(!cansee(zx,zy))
X! 			    levl[zx][zy].seen = levl[zx][zy].new =
X! 				levl[zx][zy].scrsym = 0;
X! 		docrt();
X  		if (Hallucination) /* Ommmmmm! */
X  			Your("mind releases itself from mundane concerns.");
X  		else if (!strncmp(plname, "Maud", 4))
X--- 633,640 ----
X  		}
X  		break;
X  	case SCR_AMNESIA:
X  		known = TRUE;
X! 		forget( ((!sobj->blessed) << 1) | (!confused || sobj->cursed) );
X  		if (Hallucination) /* Ommmmmm! */
X  			Your("mind releases itself from mundane concerns.");
X  		else if (!strncmp(plname, "Maud", 4))
X***************
X*** 606,616 ****
X  			pline("Who was that Maud person anyway?");
X  		else
X  			pline("Thinking of Maud you forget everything else.");
X- #ifdef SPELLS
X- 		if(!sobj->blessed) losespells();
X- #endif
X  		break;
X- 	    }
X  	case SCR_FIRE:
X  	    {	register int num;
X  		register struct monst *mtmp;
X--- 643,649 ----
X***************
X*** 762,769 ****
X  			pline(thats_enough_tries);
X  			return;
X  		}
X-     pline("What class of monsters do you wish to genocide? [type a letter] ");
X  		do {
X  			getlin(buf);
X  		} while (buf[0]=='\033' || strlen(buf) != 1);
X  		immunecnt = gonecnt = goodcnt = 0;
X--- 795,802 ----
X  			pline(thats_enough_tries);
X  			return;
X  		}
X  		do {
X+     pline("What class of monsters do you wish to genocide? [type a letter] ");
X  			getlin(buf);
X  		} while (buf[0]=='\033' || strlen(buf) != 1);
X  		immunecnt = gonecnt = goodcnt = 0;
X*** src/Old/restore.c	Sun Nov 19 13:09:44 1989
X--- src/restore.c	Sun Nov 19 11:00:40 1989
X***************
X*** 67,72 ****
X--- 67,93 ----
X  	}
X  }
X  
X+ #ifndef NO_SIGNAL
X+ static void
X+ inven_inuse()
X+ /* Things that were marked "in_use" when the game was saved (ex. via the
X+  * infamous "HUP" cheat) get used up here.
X+  */
X+ {
X+ 	register struct obj *otmp, *otmp2;
X+ 
X+ 	for(otmp = invent; otmp; otmp = otmp2) {
X+ 		otmp2 = otmp->nobj;
X+ 		if(otmp->olet != ARMOR_SYM && otmp->olet != WEAPON_SYM
X+ 			&& otmp->otyp != PICK_AXE && otmp->otyp != UNICORN_HORN
X+ 			&& otmp->in_use) {
X+ 			pline("Finishing off %s...", xname(otmp));
X+ 			useup(otmp);
X+ 		}
X+ 	}
X+ }
X+ #endif
X+ 
X  static struct obj *
X  restobjchn(fd, ghostly)
X  register int fd;
X***************
X*** 90,100 ****
X  		else otmp2->nobj = otmp;
X  		mread(fd, (genericptr_t) otmp, (unsigned) xl + sizeof(struct obj));
X  		if(!otmp->o_id) otmp->o_id = flags.ident++;
X- 	/* Things that were marked "in_use" when the game was saved (eg. via
X- 	 * the infamous "HUP" cheat get used up here.
X- 	 */
X- 		if(otmp->olet != ARMOR_SYM && otmp->olet != WEAPON_SYM
X- 			&& otmp->otyp != PICK_AXE && otmp->in_use) useup(otmp);
X  #ifdef TUTTI_FRUTTI
X  		if(ghostly && otmp->otyp == SLIME_MOLD) {
X  			for(oldf=oldfruit; oldf; oldf=oldf->nextf)
X--- 111,116 ----
X***************
X*** 240,246 ****
X--- 256,265 ----
X  #endif /* DECRAINBOW */
X  	flags.IBMBIOS = oldflags.IBMBIOS;
X  #endif
X+ #ifdef TEXTCOLOR
X+ 	flags.use_color = oldflags.use_color;
X  #endif
X+ #endif /* MSDOS */
X  	mread(fd, (genericptr_t) &dlevel, sizeof dlevel);
X  	mread(fd, (genericptr_t) &maxdlevel, sizeof maxdlevel);
X  	mread(fd, (genericptr_t) &moves, sizeof moves);
X***************
X*** 254,260 ****
X  #ifdef REINCARNATION
X  	mread(fd, (genericptr_t) &rogue_level, sizeof rogue_level);
X  	if (dlevel==rogue_level)
X! 		savesyms = showsyms;
X  #endif
X  #ifdef STRONGHOLD
X  	mread(fd, (genericptr_t) &stronghold_level, sizeof stronghold_level);
X--- 273,280 ----
X  #ifdef REINCARNATION
X  	mread(fd, (genericptr_t) &rogue_level, sizeof rogue_level);
X  	if (dlevel==rogue_level)
X! 		(void) memcpy((genericptr_t)savesyms,
X! 			      (genericptr_t)showsyms, sizeof savesyms);
X  #endif
X  #ifdef STRONGHOLD
X  	mread(fd, (genericptr_t) &stronghold_level, sizeof stronghold_level);
X***************
X*** 406,413 ****
X  #ifdef REINCARNATION
X  	/* this can't be done earlier because we need to check the initial
X  	 * showsyms against the one saved in each of the non-rogue levels */
X! 	if (dlevel==rogue_level)
X! 		showsyms = defsyms;
X  #endif
X  	if(u.ustuck) {
X  		register struct monst *mtmp;
X--- 426,437 ----
X  #ifdef REINCARNATION
X  	/* this can't be done earlier because we need to check the initial
X  	 * showsyms against the one saved in each of the non-rogue levels */
X! 	if (dlevel==rogue_level) {
X! 		(void) memcpy((genericptr_t)showsyms,
X! 			      (genericptr_t)defsyms, sizeof showsyms);
X! 		showsyms[S_ndoor] = showsyms[S_vodoor] =
X! 		    showsyms[S_hodoor] = '+';
X! 	}
X  #endif
X  	if(u.ustuck) {
X  		register struct monst *mtmp;
X***************
X*** 430,435 ****
X--- 454,466 ----
X  	for(otmp = fobj; otmp; otmp = otmp->nobj)
X  		if(otmp->owornmask)
X  			setworn(otmp, otmp->owornmask);
X+ #ifndef NO_SIGNAL
X+ 	/* in_use processing must be after:
X+ 	 *  inven has been read so fcobj has been built and freeinv() works
X+ 	 *  current level has been restored so billing information is available
X+ 	 */
X+ 	inven_inuse();
X+ #endif
X  	docrt();
X  	restoring = FALSE;
X  	return(1);
X***************
X*** 451,457 ****
X  	long nhp;
X  	int hpid;
X  	xchar dlvl;
X! 	struct symbols osymbol;
X  	int x, y;
X  	uchar osym, nsym;
X  #ifdef TOS
X--- 482,488 ----
X  	long nhp;
X  	int hpid;
X  	xchar dlvl;
X! 	symbol_array osymbol;
X  	int x, y;
X  	uchar osym, nsym;
X  #ifdef TOS
X***************
X*** 526,534 ****
X  #else
X  	mread(fd, (genericptr_t) levl, sizeof(levl));
X  #endif
X! 	mread(fd, (genericptr_t) &osymbol, sizeof(osymbol));
X! 	if (memcmp((genericptr_t) &osymbol,
X! 		   (genericptr_t) &showsyms, sizeof (struct symbols))
X  #ifdef REINCARNATION
X  		&& dlvl != rogue_level
X  		/* rogue level always uses default syms, and showsyms will still
X--- 557,565 ----
X  #else
X  	mread(fd, (genericptr_t) levl, sizeof(levl));
X  #endif
X! 	mread(fd, (genericptr_t) osymbol, sizeof(osymbol));
X! 	if (memcmp((genericptr_t) osymbol,
X! 		   (genericptr_t) showsyms, sizeof (showsyms))
X  #ifdef REINCARNATION
X  		&& dlvl != rogue_level
X  		/* rogue level always uses default syms, and showsyms will still
X***************
X*** 543,636 ****
X  				switch (levl[x][y].typ) {
X  				case STONE:
X  				case SCORR:
X! 					if (osym == osymbol.stone)
X! 						nsym = showsyms.stone;
X  					break;
X  				case ROOM:
X  #ifdef STRONGHOLD
X  				case DRAWBRIDGE_DOWN:
X  #endif /* STRONGHOLD /**/
X! 					if (osym == osymbol.room)
X! 						nsym = showsyms.room;
X  					break;
X  				case DOOR:
X! 					if (osym == osymbol.door)
X! 						nsym = showsyms.door;
X  					break;
X  				case CORR:
X! 					if (osym == osymbol.corr)
X! 						nsym = showsyms.corr;
X  					break;
X  				case VWALL:
X! 					if (osym == osymbol.vwall)
X! 						nsym = showsyms.vwall;
X  #ifdef STRONGHOLD
X! 					else if (osym == osymbol.dbvwall)
X! 						nsym = showsyms.dbvwall;
X  #endif
X  					break;
X  				case HWALL:
X! 					if (osym == osymbol.hwall)
X! 						nsym = showsyms.hwall;
X  #ifdef STRONGHOLD
X! 					else if (osym == osymbol.dbhwall)
X! 						nsym = showsyms.dbhwall;
X  #endif
X  					break;
X  				case TLCORNER:
X! 					if (osym == osymbol.tlcorn)
X! 						nsym = showsyms.tlcorn;
X  					break;
X  				case TRCORNER:
X! 					if (osym == osymbol.trcorn)
X! 						nsym = showsyms.trcorn;
X  					break;
X  				case BLCORNER:
X! 					if (osym == osymbol.blcorn)
X! 						nsym = showsyms.blcorn;
X  					break;
X  				case BRCORNER:
X! 					if (osym == osymbol.brcorn)
X! 						nsym = showsyms.brcorn;
X  					break;
X  				case SDOOR:
X! 					if (osym == osymbol.vwall)
X! 						nsym = showsyms.vwall;
X! 					else if (osym == osymbol.hwall)
X! 						nsym = showsyms.hwall;
X  					break;
X  				case CROSSWALL:
X! 					if (osym == osymbol.crwall)
X! 						nsym = showsyms.crwall;
X  					break;
X  				case TUWALL:
X! 					if (osym == osymbol.tuwall)
X! 						nsym = showsyms.tuwall;
X  					break;
X  				case TDWALL:
X! 					if (osym == osymbol.tdwall)
X! 						nsym = showsyms.tdwall;
X  					break;
X  				case TLWALL:
X! 					if (osym == osymbol.tlwall)
X! 						nsym = showsyms.tlwall;
X  					break;
X  				case TRWALL:
X! 					if (osym == osymbol.trwall)
X! 						nsym = showsyms.trwall;
X  					break;
X  				case STAIRS:
X! 					if (osym == osymbol.upstair)
X! 						nsym = showsyms.upstair;
X! 					else if (osym == osymbol.dnstair)
X! 						nsym = showsyms.dnstair;
X  					break;
X  #ifdef STRONGHOLD
X  				case LADDER:
X! 					if (osym == osymbol.upladder)
X! 						nsym = showsyms.upladder;
X! 					else if (osym == osymbol.dnladder)
X! 						nsym = showsyms.dnladder;
X  					break;
X  #endif /* STRONGHOLD /**/
X  				case POOL:
X--- 574,673 ----
X  				switch (levl[x][y].typ) {
X  				case STONE:
X  				case SCORR:
X! 					if (osym == osymbol[S_stone])
X! 						nsym = showsyms[S_stone];
X  					break;
X  				case ROOM:
X  #ifdef STRONGHOLD
X  				case DRAWBRIDGE_DOWN:
X  #endif /* STRONGHOLD /**/
X! 					if (osym == osymbol[S_room])
X! 						nsym = showsyms[S_room];
X  					break;
X  				case DOOR:
X! 					if (osym == osymbol[S_ndoor])
X! 						nsym = showsyms[S_ndoor];
X! 					else if (osym == osymbol[S_vodoor])
X! 						nsym = showsyms[S_vodoor];
X! 					else if (osym == osymbol[S_hodoor])
X! 						nsym = showsyms[S_hodoor];
X! 					else if (osym == osymbol[S_cdoor])
X! 						nsym = showsyms[S_cdoor];
X  					break;
X  				case CORR:
X! 					if (osym == osymbol[S_corr])
X! 						nsym = showsyms[S_corr];
X  					break;
X  				case VWALL:
X! 					if (osym == osymbol[S_vwall])
X! 						nsym = showsyms[S_vwall];
X  #ifdef STRONGHOLD
X! 					else if (osym == osymbol[S_dbvwall])
X! 						nsym = showsyms[S_dbvwall];
X  #endif
X  					break;
X  				case HWALL:
X! 					if (osym == osymbol[S_hwall])
X! 						nsym = showsyms[S_hwall];
X  #ifdef STRONGHOLD
X! 					else if (osym == osymbol[S_dbhwall])
X! 						nsym = showsyms[S_dbhwall];
X  #endif
X  					break;
X  				case TLCORNER:
X! 					if (osym == osymbol[S_tlcorn])
X! 						nsym = showsyms[S_tlcorn];
X  					break;
X  				case TRCORNER:
X! 					if (osym == osymbol[S_trcorn])
X! 						nsym = showsyms[S_trcorn];
X  					break;
X  				case BLCORNER:
X! 					if (osym == osymbol[S_blcorn])
X! 						nsym = showsyms[S_blcorn];
X  					break;
X  				case BRCORNER:
X! 					if (osym == osymbol[S_brcorn])
X! 						nsym = showsyms[S_brcorn];
X  					break;
X  				case SDOOR:
X! 					if (osym == osymbol[S_vwall])
X! 						nsym = showsyms[S_vwall];
X! 					else if (osym == osymbol[S_hwall])
X! 						nsym = showsyms[S_hwall];
X  					break;
X  				case CROSSWALL:
X! 					if (osym == osymbol[S_crwall])
X! 						nsym = showsyms[S_crwall];
X  					break;
X  				case TUWALL:
X! 					if (osym == osymbol[S_tuwall])
X! 						nsym = showsyms[S_tuwall];
X  					break;
X  				case TDWALL:
X! 					if (osym == osymbol[S_tdwall])
X! 						nsym = showsyms[S_tdwall];
X  					break;
X  				case TLWALL:
X! 					if (osym == osymbol[S_tlwall])
X! 						nsym = showsyms[S_tlwall];
X  					break;
X  				case TRWALL:
X! 					if (osym == osymbol[S_trwall])
X! 						nsym = showsyms[S_trwall];
X  					break;
X  				case STAIRS:
X! 					if (osym == osymbol[S_upstair])
X! 						nsym = showsyms[S_upstair];
X! 					else if (osym == osymbol[S_dnstair])
X! 						nsym = showsyms[S_dnstair];
X  					break;
X  #ifdef STRONGHOLD
X  				case LADDER:
X! 					if (osym == osymbol[S_upladder])
X! 						nsym = showsyms[S_upladder];
X! 					else if (osym == osymbol[S_dnladder])
X! 						nsym = showsyms[S_dnladder];
X  					break;
X  #endif /* STRONGHOLD /**/
X  				case POOL:
X***************
X*** 638,668 ****
X  #ifdef STRONGHOLD
X  				case DRAWBRIDGE_UP:
X  #endif /* STRONGHOLD /**/
X! 					if (osym == osymbol.pool)
X! 						nsym = showsyms.pool;
X  					break;
X  #ifdef FOUNTAINS
X  				case FOUNTAIN:
X! 					if (osym == osymbol.fountain)
X! 						nsym = showsyms.fountain;
X  					break;
X  #endif /* FOUNTAINS /**/
X  #ifdef THRONES
X  				case THRONE:
X! 					if (osym == osymbol.throne)
X! 						nsym = showsyms.throne;
X  					break;
X  #endif /* THRONES /**/
X  #ifdef SINKS
X  				case SINK:
X! 					if (osym == osymbol.sink)
X! 						nsym = showsyms.sink;
X  					break;
X  #endif /* SINKS /**/
X  #ifdef ALTARS
X  				case ALTAR:
X! 					if (osym == osymbol.altar)
X! 						nsym = showsyms.altar;
X  					break;
X  #endif /* ALTARS /**/
X  				default:
X--- 675,705 ----
X  #ifdef STRONGHOLD
X  				case DRAWBRIDGE_UP:
X  #endif /* STRONGHOLD /**/
X! 					if (osym == osymbol[S_pool])
X! 						nsym = showsyms[S_pool];
X  					break;
X  #ifdef FOUNTAINS
X  				case FOUNTAIN:
X! 					if (osym == osymbol[S_fountain])
X! 						nsym = showsyms[S_fountain];
X  					break;
X  #endif /* FOUNTAINS /**/
X  #ifdef THRONES
X  				case THRONE:
X! 					if (osym == osymbol[S_throne])
X! 						nsym = showsyms[S_throne];
X  					break;
X  #endif /* THRONES /**/
X  #ifdef SINKS
X  				case SINK:
X! 					if (osym == osymbol[S_sink])
X! 						nsym = showsyms[S_sink];
X  					break;
X  #endif /* SINKS /**/
X  #ifdef ALTARS
X  				case ALTAR:
X! 					if (osym == osymbol[S_altar])
X! 						nsym = showsyms[S_altar];
X  					break;
X  #endif /* ALTARS /**/
X  				default:
X***************
X*** 689,695 ****
X  	fmon = restmonchn(fd, ghostly);
X  
X  	/* regenerate animals while on another level */
X! 	{ long tmoves = (moves > omoves) ? moves-omoves : 0;
X  	  register struct monst *mtmp2;
X  
X  	  for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X--- 726,732 ----
X  	fmon = restmonchn(fd, ghostly);
X  
X  	/* regenerate animals while on another level */
X! 	{ long tmoves = (monstermoves > omoves) ? monstermoves-omoves : 0;
X  	  register struct monst *mtmp2;
X  
X  	  for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X*** src/Old/rip.c	Sun Nov 19 13:10:20 1989
X--- src/rip.c	Tue Oct 31 19:27:05 1989
X***************
X*** 3,8 ****
X--- 3,9 ----
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X  #include "hack.h"
X+ #include <ctype.h>
X  
X  static char *rip[] = {
X  "                       ----------",
X***************
X*** 41,58 ****
X  	register int x, y;
X  
X  	cls();
X! 	Sprintf(buf,"%s", plname);
X  	buf[16] = 0;
X  	center(6, buf);
X! 	Sprintf(buf, "%ld AU", u.ugold);
X  	center(7, buf);
X! 	Sprintf(buf, "killed by%s",
X! 		!strncmp(killer, "the ", 4) ? "" :
X! 		(!strcmp(eos(killer)-4, "tion") && *(eos(killer)-5)!='o') ? "" :
X! 		!strcmp(killer, "contaminated water") ? "" :
X! 		!strncmp(killer, "Mr.", 3) ? "" :
X! 		!strncmp(killer, "Ms.", 3) ? "" :
X! 		index(vowels, *killer) ? " an" : " a");
X  	center(8, buf);
X  	Strcpy(buf, killer);
X  	if(strlen(buf) > 16) {
X--- 42,57 ----
X  	register int x, y;
X  
X  	cls();
X! 	Sprintf(buf, "%s", plname);
X  	buf[16] = 0;
X  	center(6, buf);
X! 	Sprintf(buf, "%ld Au", u.ugold);
X  	center(7, buf);
X! 	Strcpy(buf, "killed by");
X! 	if (islower(*killer) && strncmp(killer, "the ", 4) &&
X! 	    (strcmp(eos(killer)-4, "tion") || *(eos(killer)-5) == 'o') &&
X! 	    strcmp(killer, "contaminated water"))
X! 		Strcat(buf, index(vowels, *killer) ? " an" : " a");
X  	center(8, buf);
X  	Strcpy(buf, killer);
X  	if(strlen(buf) > 16) {
X*** src/Old/rumors.c	Sun Nov 19 13:10:43 1989
X--- src/rumors.c	Tue Nov 14 20:31:55 1989
X***************
X*** 113,119 ****
X  #else
X  # ifdef MACOS
X  	if(rumors = fopen(RUMORFILE, "r"))
X! 		rumors = openFile(RUMORFILE);
X  	if (rumors) {
X  # else
X  	if(rumors = fopen(RUMORFILE, "r")) {
X--- 113,119 ----
X  #else
X  # ifdef MACOS
X  	if(rumors = fopen(RUMORFILE, "r"))
X! 		rumors = openFile(RUMORFILE, "r");
X  	if (rumors) {
X  # else
X  	if(rumors = fopen(RUMORFILE, "r")) {
X***************
X*** 177,183 ****
X  #else
X  # ifdef MACOS
X  	if(oracles = fopen(ORACLEFILE, "r"))
X! 		oracles = openFile(ORACLEFILE);
X  	if (oracles) {
X  # else
X  	if(oracles = fopen(ORACLEFILE, "r")) {
X--- 177,183 ----
X  #else
X  # ifdef MACOS
X  	if(oracles = fopen(ORACLEFILE, "r"))
X! 		oracles = openFile(ORACLEFILE, "r");
X  	if (oracles) {
X  # else
X  	if(oracles = fopen(ORACLEFILE, "r")) {
X*** src/Old/save.c	Sun Nov 19 13:10:59 1989
X--- src/save.c	Sun Nov 19 10:59:38 1989
X***************
X*** 433,443 ****
X  		/* if a game is saved off the rogue level, the usual showsyms
X  		 * will be written out for the rogue level too, but they will
X  		 * be ignored on restore so it doesn't matter */
X! 		bwrite(fd, (genericptr_t) &savesyms, sizeof(struct symbols));
X  	else
X  #endif
X! 		bwrite(fd, (genericptr_t) &showsyms, sizeof(struct symbols));
X! 	bwrite(fd,(genericptr_t) &monstermoves,sizeof(long));
X  	bwrite(fd,(genericptr_t) &xupstair,sizeof(xupstair));
X  	bwrite(fd,(genericptr_t) &yupstair,sizeof(yupstair));
X  	bwrite(fd,(genericptr_t) &xdnstair,sizeof(xdnstair));
X--- 433,443 ----
X  		/* if a game is saved off the rogue level, the usual showsyms
X  		 * will be written out for the rogue level too, but they will
X  		 * be ignored on restore so it doesn't matter */
X! 		bwrite(fd, (genericptr_t) savesyms, sizeof savesyms);
X  	else
X  #endif
X! 		bwrite(fd, (genericptr_t) showsyms, sizeof showsyms);
X! 	bwrite(fd,(genericptr_t) &monstermoves,sizeof(monstermoves));
X  	bwrite(fd,(genericptr_t) &xupstair,sizeof(xupstair));
X  	bwrite(fd,(genericptr_t) &yupstair,sizeof(yupstair));
X  	bwrite(fd,(genericptr_t) &xdnstair,sizeof(xdnstair));
X*** src/Old/shk.c	Sun Nov 19 13:11:37 1989
X--- src/shk.c	Fri Nov 17 19:32:17 1989
X***************
X*** 1,4 ****
X! /*	SCCS Id: @(#)shk.c	3.0	89/02/10
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: @(#)shk.c	3.0	89/11/15
X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X  /* NetHack may be freely redistributed.  See license for details. */
X  
X***************
X*** 9,15 ****
X  #include "eshk.h"
X  
X  #ifdef KOPS
X! static int makekops P((coord *));
X  static void kops_gone();
X  #endif /* KOPS */
X  
X--- 9,15 ----
X  #include "eshk.h"
X  
X  #ifdef KOPS
X! static int FDECL(makekops, (coord *));
X  static void kops_gone();
X  #endif /* KOPS */
X  
X***************
X*** 25,33 ****
X  				/* only accessed here and by save & restore */
X  static long int total;		/* filled by addupbill() */
X  static long int followmsg;	/* last time of follow message */
X! static void setpaid(), findshk P((int));
X! static int dopayobj P((struct bill_x *)), getprice P((struct obj *));
X! static struct obj *bp_to_obj P((struct bill_x *));
X  
X  /*
X  	invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
X--- 25,33 ----
X  				/* only accessed here and by save & restore */
X  static long int total;		/* filled by addupbill() */
X  static long int followmsg;	/* last time of follow message */
X! static void setpaid(), FDECL(findshk, (int));
X! static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *));
X! static struct obj *FDECL(bp_to_obj, (struct bill_x *));
X  
X  /*
X  	invariants: obj->unpaid iff onbill(obj) [unless bp->useup]
X***************
X*** 292,304 ****
X  }
X  
X  boolean
X! tended_shop(roomno)
X! register int roomno;
X  {
X  	register struct monst *mtmp;
X  
X  	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X! 	    if(mtmp->isshk && ESHK(mtmp)->shoproom == roomno
X  		&& inhishop(mtmp)) return(TRUE);
X  	return(FALSE);
X  }
X--- 292,304 ----
X  }
X  
X  boolean
X! tended_shop(sroom)
X! struct mkroom *sroom;
X  {
X  	register struct monst *mtmp;
X  
X  	for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X! 	    if(mtmp->isshk && &rooms[ESHK(mtmp)->shoproom] == sroom
X  		&& inhishop(mtmp)) return(TRUE);
X  	return(FALSE);
X  }
X***************
X*** 945,951 ****
X  	ltmp = (long) getprice(obj) * (long) obj->quan;
X  	if(ESHK(shopkeeper)->billct == BILLSZ
X  	   || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj)
X! 	   || obj->olet == BALL_SYM || ltmp == 0L) {
X  		pline("%s seems not interested.", Monnam(shopkeeper));
X  		obj->no_charge = 1;
X  		return;
X--- 945,952 ----
X  	ltmp = (long) getprice(obj) * (long) obj->quan;
X  	if(ESHK(shopkeeper)->billct == BILLSZ
X  	   || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj)
X! 	   || obj->olet == BALL_SYM || ltmp == 0L
X! 	   || (obj->olet == FOOD_SYM && obj->oeaten)) {
X  		pline("%s seems not interested.", Monnam(shopkeeper));
X  		obj->no_charge = 1;
X  		return;
X***************
X*** 1114,1120 ****
X  	omx = shkp->mx;
X  	omy = shkp->my;
X  
X! 	if((udist = dist(omx,omy)) < 3) {
X  		if(ANGRY(shkp)) {
X  			if(Displaced)
X  			  Your("displaced image doesn't fool %s!",
X--- 1115,1122 ----
X  	omx = shkp->mx;
X  	omy = shkp->my;
X  
X! 	if((udist = dist(omx,omy)) < 3 &&
X! 	   (shkp->data != &mons[PM_GRID_BUG] || (omx==u.ux || omy==u.uy))) {
X  		if(ANGRY(shkp)) {
X  			if(Displaced)
X  			  Your("displaced image doesn't fool %s!",
X***************
X*** 1247,1253 ****
X  	    pline("\"%s, do not damage the floor here!\"",
X  			flags.female ? "Madam" : "Sir");
X  	if (pl_character[0] == 'K') adjalign(-sgn(u.ualigntyp));
X!     } else if(!um_dist(shopkeeper->mx, shopkeeper->my, 5)) {
X  	register struct obj *obj, *obj2;
X  
X  	if(dist(shopkeeper->mx, shopkeeper->my) > 2) {
X--- 1249,1256 ----
X  	    pline("\"%s, do not damage the floor here!\"",
X  			flags.female ? "Madam" : "Sir");
X  	if (pl_character[0] == 'K') adjalign(-sgn(u.ualigntyp));
X!     } else if(!um_dist(shopkeeper->mx, shopkeeper->my, 5) &&
X! 	      !shopkeeper->msleep && !shopkeeper->mfroz) {
X  	register struct obj *obj, *obj2;
X  
X  	if(dist(shopkeeper->mx, shopkeeper->my) > 2) {
X***************
X*** 1346,1353 ****
X  	/* if he's not in his shop.. */
X  	if(!in_shop(shopkeeper->mx ,shopkeeper->my)) return;
X  
X! 	/* if a !shopkeeper shows up at the door, move him */
X! 	if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) {
X  		if(flags.soundok) {
X  		    You("hear an angry voice: \"Out of my way, scum!\"");
X  		    (void) fflush(stdout);
X--- 1349,1358 ----
X  	/* if he's not in his shop.. */
X  	if(!in_shop(shopkeeper->mx ,shopkeeper->my)) return;
X  
X! 	if(in_shop(u.ux, u.uy)) mnexto(shopkeeper);
X! 	else {
X! 	    /* if a !shopkeeper shows up at the door, move him */
X! 	    if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) {
X  		if(flags.soundok) {
X  		    You("hear an angry voice: \"Out of my way, scum!\"");
X  		    (void) fflush(stdout);
X***************
X*** 1359,1372 ****
X  #endif
X  		}
X  		mnearto(mtmp, x, y, FALSE);
X! 	}
X  
X! 	/* make shk show up at the door */
X! 	remove_monster(shopkeeper->mx, shopkeeper->my);
X! 	place_monster(shopkeeper, x, y);
X! 	pmon(shopkeeper);
X  
X! 	damage = (ACURR(A_STR) > 18) ? 400 : 20 * ACURR(A_STR);
X  
X  	if(um_dist(x, y, 1) || u.ugold < (long) damage || !rn2(50)) {
X  		if(um_dist(x, y, 1))
X--- 1364,1379 ----
X  #endif
X  		}
X  		mnearto(mtmp, x, y, FALSE);
X! 	    }
X  
X! 	    /* make shk show up at the door */
X! 	    remove_monster(shopkeeper->mx, shopkeeper->my);
X! 	    place_monster(shopkeeper, x, y);
X! 	    pmon(shopkeeper);
X! 	}
X  
X! 	if(!strcmp(dmgstr, "destroy")) damage = 400;
X! 	else damage = (ACURR(A_STR) > 18) ? 400 : 20 * ACURR(A_STR);
X  
X  	if(um_dist(x, y, 1) || u.ugold < (long) damage || !rn2(50)) {
X  		if(um_dist(x, y, 1))
X*** src/Old/shknam.c	Sun Nov 19 13:12:29 1989
X--- src/shknam.c	Wed Nov  8 22:57:41 1989
X***************
X*** 185,193 ****
X  {
X  	register struct monst *mtmp;
X  	int atype;
X  
X! 	if (rn2(100) < dlevel && !MON_AT(sx, sy) &&
X! 				(mtmp=makemon(mkclass(S_MIMIC),sx,sy))) {
X  		mtmp->mimic = 1;
X  		/* note: makemon will set the mimic symbol to a shop item */
X  		if (rn2(10) >= dlevel) mtmp->mappearance = S_MIMIC_DEF;
X--- 185,194 ----
X  {
X  	register struct monst *mtmp;
X  	int atype;
X+ 	struct permonst *ptr;
X  
X! 	if (rn2(100) < dlevel && !MON_AT(sx, sy) && (ptr = mkclass(S_MIMIC)) &&
X! 				(mtmp=makemon(ptr,sx,sy))) {
X  		mtmp->mimic = 1;
X  		/* note: makemon will set the mimic symbol to a shop item */
X  		if (rn2(10) >= dlevel) mtmp->mappearance = S_MIMIC_DEF;
X***************
X*** 314,321 ****
X      for(sx = sroom->lx - 1; sx <= sroom->hx + 1; sx++)
X  	for(sy = sroom->ly - 1; sy <= sroom->hy + 1; sy++) {
X  	    if(IS_DOOR(levl[sx][sy].typ))
X! 		if (levl[sx][sy].doormask == D_NODOOR)
X! 		    levl[sx][sy].doormask = D_ISOPEN;
X      }
X  
X      for(sx = sroom->lx; sx <= sroom->hx; sx++)
X--- 315,324 ----
X      for(sx = sroom->lx - 1; sx <= sroom->hx + 1; sx++)
X  	for(sy = sroom->ly - 1; sy <= sroom->hy + 1; sy++) {
X  	    if(IS_DOOR(levl[sx][sy].typ))
X! 		if (levl[sx][sy].doormask == D_NODOOR) {
X! 		  levl[sx][sy].doormask = D_ISOPEN;
X! 		  mnewsym(sx,sy);
X! 		}
X      }
X  
X      for(sx = sroom->lx; sx <= sroom->hx; sx++)
X*** src/Old/sounds.c	Sun Nov 19 13:12:59 1989
X--- src/sounds.c	Sun Nov  5 16:16:26 1989
X***************
X*** 56,62 ****
X  		You("seem to hear dishes being washed!");
X  		break;
X  	}
X!     if (!rn2(300)) {
X  	roomtype = OROOM;
X  	for (sroom = &rooms[0]; ; sroom++) {	/* find any special room */
X  	    if (sroom->hx < 0) break;		/* no more rooms */
X--- 56,62 ----
X  		You("seem to hear dishes being washed!");
X  		break;
X  	}
X!     if (!rn2(200)) {
X  	roomtype = OROOM;
X  	for (sroom = &rooms[0]; ; sroom++) {	/* find any special room */
X  	    if (sroom->hx < 0) break;		/* no more rooms */
X***************
X*** 179,185 ****
X  		}
X  		break;
X  	    case SHOPBASE:
X! 		if(tended_shop(croomno))
X  		  switch (rn2(2)+hallu) {
X  		    case 0:
X  			You("hear the chime of a cash register.");
X--- 179,185 ----
X  		}
X  		break;
X  	    case SHOPBASE:
X! 		if(tended_shop(sroom))
X  		  switch (rn2(2)+hallu) {
X  		    case 0:
X  			You("hear the chime of a cash register.");
X***************
X*** 364,369 ****
X--- 364,372 ----
X  	case MS_GURGLE:
X  	    kludge("%s gurgles.", Monnam(mtmp));
X  	    break;
X+ 	case MS_BURBLE:
X+ 	    kludge("%s burbles.", Monnam(mtmp));
X+ 	    break;
X  	case MS_SHRIEK:
X  	    kludge("%s shrieks.", Monnam(mtmp));
X  	    aggravate();
X***************
X*** 472,478 ****
X  		    kludge("%s laughs.", Monnam(mtmp));
X  	    }
X  	    break;
X! # ifdef HARD
X  	case MS_BRIBE:
X  	    if (mtmp->mpeaceful && !mtmp->mtame) {
X  		(void) demon_talk(mtmp);
X--- 475,481 ----
X  		    kludge("%s laughs.", Monnam(mtmp));
X  	    }
X  	    break;
X! # ifdef INFERNO
X  	case MS_BRIBE:
X  	    if (mtmp->mpeaceful && !mtmp->mtame) {
X  		(void) demon_talk(mtmp);
X*** src/Old/sp_lev.c	Sun Nov 19 13:13:23 1989
X--- src/sp_lev.c	Tue Nov 14 20:33:14 1989
X***************
X*** 14,20 ****
X  #ifdef STRONGHOLD
X  #include "sp_lev.h"
X  
X! #if defined(MSDOS) && !defined(AMIGA)
X  # define RDMODE "rb"
X  #else
X  # define RDMODE "r"
X--- 14,20 ----
X  #ifdef STRONGHOLD
X  #include "sp_lev.h"
X  
X! #if defined(MSDOS) || defined(MACOS) && !defined(AMIGA)
X  # define RDMODE "rb"
X  #else
X  # define RDMODE "r"
X***************
X*** 29,35 ****
X--- 29,39 ----
X  static walk walklist[50];
X  extern int x_maze_max, y_maze_max;
X  
X+ #ifdef MACOS
X+ char **Map;
X+ #else
X  static char Map[COLNO][ROWNO];
X+ #endif
X  static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10],
X  	ralign[3] = { A_CHAOS, A_NEUTRAL, A_LAW };
X  static xchar xstart, ystart, xsize, ysize;
X***************
X*** 215,221 ****
X      object  tmpobj;
X      drawbridge tmpdb;
X      walk    tmpwalk;
X!     dig     tmpdig;
X      lad     tmplad;
X  #ifdef ALTARS
X      altar   tmpaltar;
X--- 219,225 ----
X      object  tmpobj;
X      drawbridge tmpdb;
X      walk    tmpwalk;
X!     digpos  tmpdig;
X      lad     tmplad;
X  #ifdef ALTARS
X      altar   tmpaltar;
X***************
X*** 327,332 ****
X--- 331,337 ----
X  
X  		get_location(&x, &y);
X  		levl[x][y].doormask = typ;
X+ 		mnewsym(x,y);
X  
X  		/* Now the complicated part, list it with each subroom */
X  		/* The dog move and mail daemon routines use this */
X***************
X*** 581,586 ****
X--- 586,595 ----
X  	fd = fopen(tmp, RDMODE);
X  #else
X  	fd = fopen(name, RDMODE);
X+ # ifdef MACOS
X+ 	if (!fd)
X+ 		fd = openFile(name, RDMODE);
X+ # endif
X  #endif
X  #ifdef OS2_CODEVIEW
X  	}
X*** src/Old/spell.c	Sun Nov 19 13:13:46 1989
X--- src/spell.c	Fri Nov 17 19:33:22 1989
X***************
X*** 77,83 ****
X  	return;
X  }
X  
X! static int
X  learn()
X  {
X  	register int	i;
X--- 77,86 ----
X  	return;
X  }
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  learn()
X  {
X  	register int	i;
X***************
X*** 382,388 ****
X  		healup(0, 0, 0, 1);
X  		break;
X  	case SPE_CURE_SICKNESS:
X! 		You("are no longer ill.");
X  		healup(0, 0, 1, 0);
X  		break;
X  	case SPE_EXTRA_HEALING:
X--- 385,391 ----
X  		healup(0, 0, 0, 1);
X  		break;
X  	case SPE_CURE_SICKNESS:
X! 		if (Sick) You("are no longer ill.");
X  		healup(0, 0, 1, 0);
X  		break;
X  	case SPE_EXTRA_HEALING:
X*** src/Old/steal.c	Sun Nov 19 13:14:07 1989
X--- src/steal.c	Sun Nov 12 12:02:10 1989
X***************
X*** 61,67 ****
X  unsigned int stealoid;		/* object to be stolen */
X  unsigned int stealmid;		/* monster doing the stealing */
X  
X! static int
X  stealarm(){
X  	register struct monst *mtmp;
X  	register struct obj *otmp;
X--- 61,70 ----
X  unsigned int stealoid;		/* object to be stolen */
X  unsigned int stealmid;		/* monster doing the stealing */
X  
X! #ifndef OVERLAY
X! static 
X! #endif
X! int
X  stealarm(){
X  	register struct monst *mtmp;
X  	register struct obj *otmp;
X***************
X*** 83,88 ****
X--- 86,92 ----
X  }
X  
X  /* Returns 1 when something was stolen (or at least, when N should flee now)
X+  * Returns -1 if the monster died in the attempt
X   * Avoid stealing the object stealoid
X   */
X  int
X***************
X*** 94,100 ****
X  	register int named = 0;
X  
X  	/* the following is true if successful on first of two attacks. */
X! 	if(dist(mtmp->mx, mtmp->my) > 3) return(0);
X  
X  	if(!invent){
X  	    /* Not even a thousand men in armor can strip a naked man. */
X--- 98,104 ----
X  	register int named = 0;
X  
X  	/* the following is true if successful on first of two attacks. */
X! 	if(!monnear(mtmp, u.ux, u.uy)) return(0);
X  
X  	if(!invent){
X  	    /* Not even a thousand men in armor can strip a naked man. */
X***************
X*** 125,132 ****
X  		impossible("Steal fails!");
X  		return(0);
X  	}
X  	/* can't steal armor while wearing cloak - so steal the cloak. */
X! 	if(otmp == uarm && uarmc) otmp = uarmc;
X  #ifdef SHIRT
X  	else if(otmp == uarmu && uarmc) otmp = uarmc;
X  	else if(otmp == uarmu && uarm) otmp = uarm;
X--- 129,139 ----
X  		impossible("Steal fails!");
X  		return(0);
X  	}
X+ 	/* can't steal gloves while wielding - so steal the wielded item. */
X+ 	if (otmp == uarmg && uwep)
X+ 	    otmp = uwep;
X  	/* can't steal armor while wearing cloak - so steal the cloak. */
X! 	else if(otmp == uarm && uarmc) otmp = uarmc;
X  #ifdef SHIRT
X  	else if(otmp == uarmu && uarmc) otmp = uarmc;
X  	else if(otmp == uarmu && uarm) otmp = uarm;
X***************
X*** 150,155 ****
X--- 157,165 ----
X  			Ring_gone(otmp);
X  			break;
X  		case ARMOR_SYM:
X+ 			/* Stop putting on armor which has been stolen. */
X+ 			if (donning(otmp))
X+ 			    afternmv = 0;
X  			if(multi < 0 || otmp == uarms){
X  			  if (otmp == uarm)  (void) Armor_off();
X  			  else if (otmp == uarmc) (void) Cloak_off();
X***************
X*** 209,214 ****
X--- 219,231 ----
X  	freeinv(otmp);
X  	pline("%s stole %s.", named ? "She" : Monnam(mtmp), doname(otmp));
X  	mpickobj(mtmp,otmp);
X+ 	if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE
X+ 	    && !resists_ston(mtmp->data)) {
X+ 	    pline("%s turns to stone.", Monnam(mtmp));
X+ 	    stoned = TRUE;
X+ 	    xkilled(mtmp, 0);
X+ 	    return -1;
X+ 	}
X  	return((multi < 0) ? 0 : 1);
X  }
X  
X*** src/Old/termcap.c	Sun Nov 19 13:14:24 1989
X--- src/termcap.c	Fri Nov 17 19:30:12 1989
X***************
X*** 8,18 ****
X  
X  #include <ctype.h>	/* for isdigit() */
X  
X! #ifndef MSDOS
X! # ifndef MACOS
X! # define TERMLIB	/* include termcap code */
X! # endif
X! #endif
X  
X  #if !defined(SYSV) || defined(TOS) || defined(UNIXPC)
X  # ifndef LINT
X--- 8,14 ----
X  
X  #include <ctype.h>	/* for isdigit() */
X  
X! #include "termcap.h"
X  
X  #if !defined(SYSV) || defined(TOS) || defined(UNIXPC)
X  # ifndef LINT
X***************
X*** 23,28 ****
X--- 19,29 ----
X  short	ospeed = 0;	/* gets around "not defined" error message */
X  #endif
X  
X+ #ifdef ASCIIGRAPH
X+   boolean IBMgraphics = FALSE;
X+ #endif
X+ 
X+ 
X  #ifdef MICROPORT_286_BUG
X  #define Tgetstr(key) (tgetstr(key,tbuf))
X  #else
X***************
X*** 81,96 ****
X  	term = getenv("TERM");
X  #endif
X  	/* Set the default map symbols */
X! 	(void) memcpy((genericptr_t) &showsyms, 
X! 		(genericptr_t) &defsyms, sizeof(struct symbols));
X! 
X! #if !defined(AMIGA) && !defined(TOS) && !defined(MACOS)
X! # if defined(TERMLIB) || !(defined(DECRAINBOW) || defined(OS2))
X! #  define IBMXASCII
X! # endif
X! #endif
X  
X! #ifdef IBMXASCII
X  	/*
X  	 * If we're on an IBM box, default to the nice IBM Extended ASCII
X  	 * line-drawing characters (codepage 437).
X--- 82,91 ----
X  	term = getenv("TERM");
X  #endif
X  	/* Set the default map symbols */
X! 	(void) memcpy((genericptr_t) showsyms, 
X! 		(genericptr_t) defsyms, sizeof showsyms);
X  
X! #ifdef ASCIIGRAPH
X  	/*
X  	 * If we're on an IBM box, default to the nice IBM Extended ASCII
X  	 * line-drawing characters (codepage 437).
X***************
X*** 103,135 ****
X  	 * characters.
X  	 */
X  # if !defined(MSDOS) || defined(DECRAINBOW) || defined(OS2)
X  	if (strncmp("AT", term, 2) == 0)
X  # endif
X  	{
X! 	    showsyms.vwall = 0xb3;	/* meta-3, vertical rule */
X! 	    showsyms.hwall = 0xc4;	/* meta-D, horizontal rule */
X! 	    showsyms.tlcorn = 0xda;	/* meta-Z, top left corner */
X! 	    showsyms.trcorn = 0xbf;	/* meta-?, top right corner */
X! 	    showsyms.blcorn = 0xc0;	/* meta-@, bottom left */
X! 	    showsyms.brcorn = 0xd9;	/* meta-Y, bottom right */
X! 	    showsyms.crwall = 0xc5;	/* meta-E, cross */
X! 	    showsyms.tuwall = 0xc1;	/* meta-A, T up */
X! 	    showsyms.tdwall = 0xc2;	/* meta-B, T down */
X! 	    showsyms.tlwall = 0xb4;	/* meta-4, T left */
X! 	    showsyms.trwall = 0xc3;	/* meta-C, T right */
X! 	    showsyms.vbeam = 0xb3;	/* meta-3, vertical rule */
X! 	    showsyms.hbeam = 0xc4;	/* meta-D, horizontal rule */
X! 	    showsyms.room = 0xfa;	/* meta-z, centered dot */
X! 	    showsyms.pool = 0xf7;	/* meta-w, approx. equals */
X  	}
X! #endif /* IBMXASCII */
X! #undef IBMXASCII
X  
X  #ifdef TERMLIB
X  	if(!term)
X  #endif
X  #if defined(TOS) && defined(__GNUC__) && defined(TERMLIB)
X! 		term = "st52";		/* library has a default */
X  #else
X  # ifdef MACOS
X  	/* dummy termcap for the Mac */
X--- 98,135 ----
X  	 * characters.
X  	 */
X  # if !defined(MSDOS) || defined(DECRAINBOW) || defined(OS2)
X+ #  ifdef TERMLIB
X  	if (strncmp("AT", term, 2) == 0)
X+ #  endif
X  # endif
X  	{
X! 	    IBMgraphics = TRUE;
X! 	    showsyms[S_vwall] = 0xb3;	/* meta-3, vertical rule */
X! 	    showsyms[S_hodoor] = 0xb3;
X! 	    showsyms[S_hwall] = 0xc4;	/* meta-D, horizontal rule */
X! 	    showsyms[S_vodoor] = 0xc4;
X! 	    showsyms[S_tlcorn] = 0xda;	/* meta-Z, top left corner */
X! 	    showsyms[S_trcorn] = 0xbf;	/* meta-?, top right corner */
X! 	    showsyms[S_blcorn] = 0xc0;	/* meta-@, bottom left */
X! 	    showsyms[S_brcorn] = 0xd9;	/* meta-Y, bottom right */
X! 	    showsyms[S_crwall] = 0xc5;	/* meta-E, cross */
X! 	    showsyms[S_tuwall] = 0xc1;	/* meta-A, T up */
X! 	    showsyms[S_tdwall] = 0xc2;	/* meta-B, T down */
X! 	    showsyms[S_tlwall] = 0xb4;	/* meta-4, T left */
X! 	    showsyms[S_trwall] = 0xc3;	/* meta-C, T right */
X! 	    showsyms[S_vbeam] = 0xb3;	/* meta-3, vertical rule */
X! 	    showsyms[S_hbeam] = 0xc4;	/* meta-D, horizontal rule */
X! 	    showsyms[S_room] = 0xfa;	/* meta-z, centered dot */
X! 	    showsyms[S_ndoor] = 0xfa;
X! 	    showsyms[S_pool] = 0xf7;	/* meta-w, approx. equals */
X  	}
X! #endif /* ASCIIGRAPH */
X  
X  #ifdef TERMLIB
X  	if(!term)
X  #endif
X  #if defined(TOS) && defined(__GNUC__) && defined(TERMLIB)
X! 		term = "builtin";		/* library has a default */
X  #else
X  # ifdef MACOS
X  	/* dummy termcap for the Mac */
X***************
X*** 155,161 ****
X  		unsigned char   *sym;
X  		short   i;
X  
X! 		sym = &showsyms.stone;
X  		theRes = GetResource(HACK_DATA,102);
X  		HLock(theRes);
X  		strncpy((char *)sym,(char *)(*theRes),32);
X--- 155,161 ----
X  		unsigned char   *sym;
X  		short   i;
X  
X! 		sym = &showsyms[S_stone];
X  		theRes = GetResource(HACK_DATA,102);
X  		HLock(theRes);
X  		strncpy((char *)sym,(char *)(*theRes),32);
X***************
X*** 173,178 ****
X--- 173,180 ----
X  # ifdef ANSI_DEFAULT
X  #  ifdef TOS
X  	{
X+ 		CO = 80; LI = 25;
X+ 		TI = VS = VE = TE = "";
X  		HO = "\033H";
X  		CL = "\033E";		/* the VT52 termcap */
X  		CE = "\033K";
X***************
X*** 184,194 ****
X  		SO = "\033p";
X  		SE = "\033q";
X  		HI = "\033p";
X! 		HE = "\033q\033b\020";
X  		for (i = 0; i < SIZE(hilites); i++) {
X  			hilites[i] = (char *) alloc(sizeof("Eb1"));
X! 			Sprintf(hilites[i], (i%4)?"\033b%c","\033p", i);
X  		}
X  	}
X  #  else /* TOS */
X  	{
X--- 186,200 ----
X  		SO = "\033p";
X  		SE = "\033q";
X  		HI = "\033p";
X! #ifdef TEXTCOLOR
X! 		HE = "\033q\033b\017";
X  		for (i = 0; i < SIZE(hilites); i++) {
X  			hilites[i] = (char *) alloc(sizeof("Eb1"));
X! 			Sprintf(hilites[i], (i%4)?"\033b%c" : "\033p", i);
X  		}
X+ #else
X+ 		HE = "\033q";
X+ #endif
X  	}
X  #  else /* TOS */
X  	{
X***************
X*** 230,236 ****
X--- 236,246 ----
X  		for (i = 0; i < MAXCOLORS / 2; i++) {
X  			hilites[i] = (char *) alloc(sizeof("\033[0;3%dm"));
X  			hilites[i+BRIGHT] = (char *) alloc(sizeof("\033[1;3%dm"));
X+ #    ifdef MSDOS
X+ 			Sprintf(hilites[i], (i == BLUE ? "\033[1;3%dm" : "\033[0;3%dm"), i);
X+ #    else
X  			Sprintf(hilites[i], "\033[0;3%dm", i);
X+ #    endif
X  			Sprintf(hilites[i+BRIGHT], "\033[1;3%dm", i);
X  		}
X  #   endif
X***************
X*** 241,247 ****
X  		error("Can't get TERM.");
X  # endif /* ANSI_DEFAULT */
X  # endif /* MACOS */
X! #endif /* __GNUC__ */
X  #ifdef TERMLIB
X  	tptr = (char *) alloc(1024);
X  
X--- 251,257 ----
X  		error("Can't get TERM.");
X  # endif /* ANSI_DEFAULT */
X  # endif /* MACOS */
X! #endif /* __GNUC__ && TOS && TERMCAP */
X  #ifdef TERMLIB
X  	tptr = (char *) alloc(1024);
X  
X***************
X*** 279,288 ****
X--- 289,306 ----
X  	if (!CO) CO = tgetnum("co");
X  	if (!LI) LI = tgetnum("li");
X  # else
X+ #  if defined(TOS) && defined(__GNUC__)
X+ 	if (!strcmp(term, "builtin"))
X+ 		get_scr_size();
X+ 	else {
X+ #  endif
X  	CO = tgetnum("co");
X  	LI = tgetnum("li");
X  	if (!LI || !CO)			/* if we don't override it */
X  		get_scr_size();
X+ #  if defined(TOS) && defined(__GNUC__)
X+ 	}
X+ #  endif
X  # endif
X  	if(CO < COLNO || LI < ROWNO+3)
X  		setclipped();
X***************
X*** 314,319 ****
X--- 332,340 ----
X  	TI = Tgetstr("ti");
X  	TE = Tgetstr("te");
X  	VS = VE = "";
X+ # ifdef TERMINFO
X+ 	VS = Tgetstr("enacs");	/* graphics start */
X+ # endif
X  # if 0
X  	MB = Tgetstr("mb");	/* blink */
X  	MD = Tgetstr("md");	/* boldface */
X***************
X*** 378,383 ****
X--- 399,419 ----
X  
X  /* Cursor movements */
X  
X+ #ifdef CLIPPING
X+ /* if (x,y) is currently viewable, move the cursor there and return TRUE */
X+ boolean
X+ win_curs(x, y)
X+ int x, y;
X+ {
X+ 	if (clipping && (x<=clipx || x>=clipxmax || y<=clipy || y>=clipymax))
X+ 		return FALSE;
X+ 	y -= clipy;
X+ 	x -= clipx;
X+ 	curs(x, y+2);
X+ 	return TRUE;
X+ }
X+ #endif
X+ 
X  void
X  curs(x, y)
X  register int x, y;	/* not xchar: perhaps xchar is unsigned and
X***************
X*** 500,506 ****
X  		   but is better than nothing */
X  		register int cx = curx, cy = cury;
X  
X! 		while(curx < COLNO) {
X  			xputc(' ');
X  			curx++;
X  		}
X--- 536,542 ----
X  		   but is better than nothing */
X  		register int cx = curx, cy = cury;
X  
X! 		while(curx < CO) {
X  			xputc(' ');
X  			curx++;
X  		}
X***************
X*** 585,591 ****
X  	(void) fflush(stdout);
X  }
X  
X! #if defined(TERMLIB) || defined(DECRAINBOW)
X  void
X  graph_on() {
X  	if (AS) xputs(AS);
X--- 621,627 ----
X  	(void) fflush(stdout);
X  }
X  
X! #ifdef ASCIIGRAPH
X  void
X  graph_on() {
X  	if (AS) xputs(AS);
X***************
X*** 632,641 ****
X  		tputs("$<50>", 1, xputc);
X  #  endif
X  # else
X! 		tputs("50", 1, xputs);
X  # endif
X  
X! 	else if(ospeed > 0 || ospeed < SIZE(tmspc10)) if(CM) {
X  		/* delay by sending cm(here) an appropriate number of times */
X  		register int cmlen = strlen(tgoto(CM, curx-1, cury-1));
X  		register int i = 500 + tmspc10[ospeed]/2;
X--- 668,677 ----
X  		tputs("$<50>", 1, xputc);
X  #  endif
X  # else
X! 		tputs("50", 1, xputc);
X  # endif
X  
X! 	else if(ospeed > 0 && ospeed < SIZE(tmspc10)) if(CM) {
X  		/* delay by sending cm(here) an appropriate number of times */
X  		register int cmlen = strlen(tgoto(CM, curx-1, cury-1));
X  		register int i = 500 + tmspc10[ospeed]/2;
X***************
X*** 769,774 ****
X--- 805,815 ----
X  	    if (foreg != c && backg != c) {
X  		hilites[c] = (char *) alloc(sizeof("\033[0;3%d;4%dm"));
X  		hilites[c+BRIGHT] = (char *) alloc(sizeof("\033[1;3%d;4%dm"));
X+ #ifdef MSDOS    /* brighten low-visibility colors */
X+ 		if (c == BLUE)
X+ 		    Sprintf(hilites[c], "\033[1;3%d;4%dm", c, backg);
X+ 		else
X+ #endif
X  		Sprintf(hilites[c], "\033[0;3%d;4%dm", c, backg);
X  		Sprintf(hilites[c+BRIGHT], "\033[1;3%d;4%dm", c, backg);
X  	    }
X*** src/Old/timeout.c	Sun Nov 19 13:14:54 1989
X--- src/timeout.c	Sun Nov  5 16:16:14 1989
X***************
X*** 112,118 ****
X  			make_vomiting(0L, TRUE);
X  			break;
X  		case SICK:
X! 			You("die from food poisoning.");
X  			killer = u.usick_cause;
X  			done(POISONING);
X  			break;
X--- 112,118 ----
X  			make_vomiting(0L, TRUE);
X  			break;
X  		case SICK:
X! 			You("die from your illness.");
X  			killer = u.usick_cause;
X  			done(POISONING);
X  			break;
X***************
X*** 216,228 ****
X  		if(Blind)
X  		    You("feel something %s from your pack!",
X  			  (index(slithy, mtmp->data->mlet)) ?
X! 			  "slither" : "drop");
X  		else
X! 		    pline("A%s %s just %s out of your pack!",
X! 			  (index(vowels, *(mtmp->data->mname))) ? "n" : "",
X! 			  mtmp->data->mname,
X  			  (index(slithy, mtmp->data->mlet)) ?
X! 			  "slithered" : "dropped");
X  
X  #ifdef POLYSELF
X  		if (yours) {
X--- 216,227 ----
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***************
X*** 229,234 ****
X--- 228,234 ----
X  		    pline("Its cries sound like \"%s.\"",
X  			flags.female ? "mommy" : "daddy");
X  		    (void) tamedog(mtmp, (struct obj *)0);
X+ 		    mtmp->mtame = 20;
X  		    return;
X  		}
X  #endif
END_OF_FILE
if test 53197 -ne `wc -c <'patches06k'`; then
    echo shar: \"'patches06k'\" unpacked with wrong size!
fi
# end of 'patches06k'
fi
echo shar: End of archive 11 \(of 15\).
cp /dev/null ark11isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 15 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0