[net.sources.bugs] Rog-O-Matic XIV bugs fixes #2

mlm@cmu-cs-cad.ARPA (Michael Mauldin) (02/17/85)

#!/bin/sh
#
# This is a shell archive.  Use the "unshar" command to unpack it, or
# remove the mail header and pipe the body of the message through "sh".
# 
# Seems like more bugs have cropped up.  Thanks to everyone who sent them
# in.  This version has been better tested against 3.6 and 5.2 (cheat
# mode still works, in 10 games against 3.6 it got another total winner).
# 
# This message contains three files:
# 
# 	Bugreport		A new Bugreport file
# 	mod.1.sh		a diff -e script (Feb 5 mods, already posted)
# 	mod.2.sh		another diff -e script (Feb 16 mods)
# 
# If you have your original distribution and haven't changed anything
# except install.h, then just make a copy the original directory and type
# 
# 	% sh mod.1.sh
# 	% sh mod.2.sh
# 	% make
# 
# If you have already installed the first mods, then type 
# 
# 	% sh mod.2.sh
# 	% make
# 
# If you have changed any files, then you should obtain the file
# "mod.2.context" (posted in another message) and make the changes 
# manually.
# 
# Changes:
# 
# mod.1	fixed the armor bug
# 	fixed the ancilliary commands (rplot and histplot)
# 	documented the ancilliary commands (rplot, histplot, gene)
# 
# mod.2	fixed another armor handling bug
# 	fixed plunge mode when coming back up
# 	fixed replay command to include version number
# 	fixed invisible stalker fighting code
# 	numerous tactics changed
# 	(see Bugreport for gory details)
# 
# Share and Enjoy!
# 
# Michael Mauldin (Fuzzy)			Department of Computer Science
# (412) 578-3065				Carnegie-Mellon University
# mauldin@cmu-cs-a.arpa			Pittsburgh, PA  15213
#
echo 'Start of Rgm XIV mods 02/16/85 - ed scripts:'
echo 'x - Bugreport'
sed 's/^X//' > Bugreport << '/'
X/*
X * Bugreport: Rog-O-Matic XIV (CMU) Sat Feb 16 22:53:04 1985 - mlm
X * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X */
X
X1. fails to wear any armor below level 7.
X
X	things.c:willrust()		changed itemis(PROTECTED)
X	tactics.c:handlearmor()		dont worry about cursed armor
X
X
X2. histplot and rplot are flaky (reported by AEB (play@turing)).
X
X	rplot				removed file name
X	gene.c				fixed "Usage" message
X	histplot.c			fixed bugs
X	README				documented ancilliary functions
X
X3. utility.c uses "getpw (getuid (), name)", which according to
X   Rick Adams @ Seismo is obsolete.  no fix made here.  Caveat Emptor!
X
X4. Armor handling again.  Fails to track current armor under Rogue 3.6
X   and Rogue 5.2 (bug reported by Dennis Ritchie).
X
X	things.c:wear(),takeoff()	added usesynch=0 (ie: get new invent)
X	tactics.c:handlearmor()		new strategy, includes 3rd best
X
X5. Failed to handle "cursed armor" message in Rogue 3.6 / 5.2.  Fixed.
X
X	mess.c:terpmes()		modified cursed mesage pattern
X
X6. Drops good, known items rather than quaffing/reading them
X
X	things.c:drop()			read/quaff some things
X
X7. Too often throws good armor away to keep mediocre scrolls.
X
X	worth.c:worth()			values armor more highly.
X
X8. Peter Wan reports problems with screen handling on terminals with
X   no tabs.  Problem unknown.
X
X9. Fixed reply command to understand version messages at start of
X   log files. Modifiekd to send version command when starting a
X   log in the middle of the game.
X
X	io.c:getrogver()		look for version string in log
X	io.c:toggleecho()		send version command
X	mess.c:terpmes()		ignore version commands
X
X10. Fails to fight invisible stalkers properly
X
X	strategy.c:fightinvisible()	fixed old conversion bug
X	search.c:followmap()		don't call fmove when beingstalked
X
X11. Doesn't recognize scrolls/wands of light in corridors
X
X	mess.c:terpmes()		added message about "corridor glows"
X
X12. Added debugging command about rustproof armor
X
X	arms.c:havearmor()		new flag 'rustproof'
X	main.c:main()			new command ']'
X
X13. Fails to properly print message about genocided monsters.
X
X	io.c:statusline()		added missing %s to printf format
X
X14. Updated version message to take replaying into account
X
X	main.c:main()			new message
X
X15. Makefile does not include several dependencies on install.h
X
X	makefile			io, ltm, tactics, utility
X
X16. Sometimes gives extra message when doing an inventory.  Modified
X    inventory to return true if it printed a message because an item
X    listed has a remembered value substituted by the database routine.
X
X	pack.c:inventory()		now returns true is msg printed
X	mess.c:terpmes()		uses value returned
X
X17. Reduced time groping when blind
X
X	strategy.c:stragize()		cut from 100 turns to 50
X
X18. Modified scroll handling, now reads scrolls even when in plunge
X    mode.  Also fixed a bug with the 'aggravate monsters' check.
X
X	tactics.c:readscroll()		added missing s to "aggravate monster"
X
X19. If it finds a trap door when on the way back up between 26 and 18,
X    it runs DOWN the trap door (stupid, stupid!).
X
X	tactics.c:plunge()		dont if have(amulet)
X
X20. Modified sanity check for identify scrolls.  Don't have to plan
X    ahead in Rogue 5.3, so sanity check doesn't apply.
X
X	mess.c:readident()		change 'version <= RV53A' to '<'
X
X21. Remember that leather armor rusts in Rogue 3.6.
X
X	things.c:willrust()		check for Rogue 3.6
X
/
echo 'x - mod.1.sh'
sed 's/^X//' > mod.1.sh << '/'
Xed - README << '-*-END-*-'
X124a
X
X4.1 SCOREFILES
X
XFor each version of Rogue the systems has played, their are 2 score
Xfiles: $RGMDIR/rgmdelta<version> and $RGMDIR/rgmscore<version>.  As
Xeach game is played, the score is appended to the DELTA file.  Whenever
Xthe -s option is given, a check is made for the DELTA file.  If new
Xscores exist, they are sorted and a new SCORE file is created. Then
Xthe score file is printed on stdout.
X
X4.2 READING THE SOURCE
X.
X123a
X    Options:	-i	Initial a new gene pool
X		-f	Full listing, shows gene values and scores
X		-mNN	Max gene pool size (limit of 100, learn.c:MAXM)
X		-s	Random number seed for new gene pool (-i option)
X		-v	Version to list/initial (one of 361,362,521,522,531)
X
X.
X122c
X    "gene" summarizes and initializes the current gene pool.
X    
X    Usage:	gene [ -f ] [ -v<value> ]	Read gene pool
X	or	gene -i [ -msv<value> ]		Create new gene pool
X.
X119a
X    Usage:	rogomatic -s [ version ] | histplot [ -acl ]
X
X    Options:	-aNNNN	Include only scores above NNNN
X		-c	Include cheating games ( 3.6 only )
X		-l	Plot level instead of score
X
X.
X113a
X    Usage:	rogomatic -s [ version ] | rplot [ -ac ] [ minimum ]
X
X    Options:	-a	Include rolling average
X		-c	Include scores obtained by cheating ( 3.6 only )
X		[ min ]	Include only scores above min.
X	
X.
X107a
X    Usage:	rogomatic [-ceuw]			Play a game
X	of	rogomatic -f game_file			Play against game_file
X	or	rogomatic -r [ rogue_save_file ]	Start saved game
X	or	rogomatic -p [ game_log ]		Replay game log
X    	or	rogomatic -s [ version ]		Show scores
X
X	-c	Cheat (look for magic arrows, version 3.6 only)
X	-e	Echo, log the game into a file
X	-u	Start up in user (transparent mode)
X	-w	Watched (Rog-O-Matic can ask user for help when stuck -- rare)
X	-f	next argument is the location of the Rogue game, eg:
X			rogomatic -f /usr/games/rogue
X	-r	Start a saved game, if next argument is given, it is the
X		location of the Rogue save file.
X	-p	Replay a Rog-O-Matic log file (created using the -e
X		option).  If next argument is given it is the name of
X		the log file. The default is "roguelog". Eg:
X			rogomatic -p drag.24.7361
X	-s	List Rog-O_Matic's scorefile.  Version must be one
X		of (3.6, 5.2, 5.3).  Defaults to install.h:DEFVER.
X
X.
X2c
X* README: Rog-O-Matic XIV (CMU) Tue Feb  5 14:04:02 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - gene.c << '-*-END-*-'
X34c
X	otherwise:	quit (1, "Usage: gene [-if] [-msv<value>]\n");
X.
X2c
X * gene.c: Rog-O-Matic XIV (CMU) Tue Feb  5 14:10:05 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - histplot.c << '-*-END-*-'
X165,166c
X        !stlmatch ("saved", killer) &&
X        (*score > 2000 || !stlmatch ("user", killer)))
X.
X161c
X            mmstr, &dd, &yy, player, score, &cheated, killer);
X.
X69,82c
X    if (stlmatch ("arrow", killer))			killnum = 1;
X    else if (stlmatch ("black unicorn", killer))	killnum = 'u'-'a'+2;
X    else if (stlmatch ("bolt", killer))			killnum = 1;
X    else if (stlmatch ("dart", killer))			killnum = 1;
X    else if (stlmatch ("fatal error trap", killer))	killnum = 0;
X    else if (stlmatch ("floating eye", killer))		killnum = 'e'-'a'+2;
X    else if (stlmatch ("gave", killer))			killnum = 0;
X    else if (stlmatch ("giant ant", killer))		killnum = 'a'-'a'+2;
X    else if (stlmatch ("hypothermia", killer))		killnum = 'i'-'a'+2;
X    else if (stlmatch ("quit", killer))			killnum = 28;
X    else if (stlmatch ("starvation", killer))		killnum = 'e'-'a'+2;
X    else if (stlmatch ("user", killer))			killnum = 0;
X    else if (stlmatch ("venus flytrap", killer))	killnum = 'f'-'a'+2;
X    else if (stlmatch ("violet fungi", killer))		killnum = 'f'-'a'+2;
X.
X45c
X        default:  printf ("Usage: histplot [-cl] [-aNNNN]\n");
X.
X6a
X *
X * HISTORY
X * 05-Feb-85  Michael Mauldin (mlm) at Carnegie-Mellon University
X *	Added bugs fixes found by AEB (play@turing).
X.
X2c
X * histplot.c: Rog-O-Matic XIV (CMU) Tue Feb  5 13:55:16 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - main.c << '-*-END-*-'
X607a
X
X        case ']': clear (); havearmor (1, DOPRINT, RUSTPROOF);
X		  pauserogue (); break;
X.
X2c
X * main.c: Rog-O-Matic XIV (CMU) Sun Feb  3 17:00:25 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - rgmplot.c << '-*-END-*-'
X105,106c
X  printf ("\t\t|----+----|----+----|----+----|----+----|----+----|\n");
X  printf ("\t\t0      2000      4000      6000      8000     10000\n");
X.
X101c
X      lastday = dd; lastmon = mm; lastyy = yy;
X.
X84c
X      printf ("%3s %2d %4d\t%s\n", month[lastmon-1], lastday, lastyy, plot);
X.
X61c
X    if ((dd != lastday || mm != lastmon || yy != lastyy) && lastday > 0)
X.
X49,51c
X    printf ("\t\t              Scores greater than %d\n\n", min);
X  printf ("\t\t0      2000      4000      6000      8000     10000\n");
X  printf ("\t\t|----+----|----+----|----+----|----+----|----+----|\n");
X.
X47c
X  printf ("\t\t   Scatter Plot of Rog-O-Matic Scores versus time\n\n");
X.
X24c
X{ int mm, dd, yy, score = 0, lastday = -1, lastmon = -1, lastyy = -1, h;
X.
X2c
X * rgmplot.c: Rog-O-Matic XIV (CMU) Tue Feb  5 15:00:59 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - rplot << '-*-END-*-'
X1c
X#!/bin/sh
X#
X# rplot: Rog-O-Matic XIV (CMU) Tue Feb  5 13:52:48 1985 - mlm
X# Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X#
Xcolrm 48 | datesub | sort -u +2n +0n +1n +4n +5 | rgmplot $*
X.
Xw
Xq
X-*-END-*-
Xed - tactics.c << '-*-END-*-'
X55,59c
X  if (obj != NONE && armorclass (obj) > 9) 
X.
X2c
X * tactics.c: Rog-O-Matic XIV (CMU) Sat Feb  2 13:01:25 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - things.c << '-*-END-*-'
X484c
X{ return (! (protected ||
X	     armorclass (obj) > 8 || armorclass (obj) < -5 ||
X.
X2c
X * things.c: Rog-O-Matic XIV (CMU) Sat Feb  2 13:02:28 1985 - mlm
X.
Xw
Xq
X-*-END-*-
/
echo 'x - mod.2.sh'
sed 's/^X//' > mod.2.sh << '/'
Xed - arms.c << '-*-END-*-'
X61d
X56,59d
X52c
X  { mvprintw (1,0, "Current %sArmor Rankings", rustproof ? "Rustproof " : "");
X.
X41,50d
X2c
X * arms.c: Rog-O-Matic XIV (CMU) Sat Feb 16 09:47:34 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - io.c << '-*-END-*-'
X1121c
X  if (*genocided) sprintf (s, "%sgenocided '%s', ", s, genocided);
X.
X871a
X      if (*versionstr) command (T_OTHER, "v");
X.
X801,802c
X    rewind (logfile);			/* Put log file back to start */
X  }
X.
X799c
X{ register char *vstr = versionstr, *m = VERMSG;
X  register int cnt = 2000, ch;
X 
X  if (replaying)			/* Look for version string in log */
X  { while (cnt-- > 0 && *m)
X    { if (fgetc (logfile) == *m) m++; else m = VERMSG;}
X  
X    if (*m == '\0')			/* Found VERMSG, get version string */
X    { while ((ch = fgetc (logfile)) != ' ') *(vstr++) = ch;
X      *--vstr = '\0';
X    }
X    else				/* Use default version */
X    { sprintf (versionstr, DEFVER); }
X.
X797a
X# define VERMSG	"ersion "
X
X.
X795a
X *
X * Get version from first 2000 chars of a log file	Feb 9, 1985 - mlm
X.
X759,760c
X  "Wizard: [=weapstat, ]=rustproof armor, r=resetinv, &=object count    [?]",
X  "Wizard: *=toggle blind, C=toggle cosmic, M=mazedoor, A=attempt, {=flags",
X.
X757c
X  "Wizard: ~=version, ^=bowrank, %%=armorrank, $=weaponrank, ==ringrank  [?]",
X.
X754a
X  "Rgm commands: m=long term memory display, G=display gene settings    [?]",
X.
X2c
X * io.c: Rog-O-Matic XIV (CMU) Sat Feb 16 23:03:48 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - main.c << '-*-END-*-'
X555,557c
X        case '~': if (replaying)
X		    saynow ("Replaying log file %s, version %s.", 
X			    logfilename, versionstr);
X		  else
X		    saynow (" %s: version %s, genotype %d, quit at %d.",
X			    roguename, versionstr, geneid, quitat);
X.
X404,405c
X  if (replaying)
X    sprintf (msg, " Replaying log file %s, version %s.", 
X	     logfilename, versionstr);
X  else
X    sprintf (msg, " %s: version %s, genotype %d, quit at %d.",
X	     roguename, versionstr, geneid, quitat);
X.
X354c
X    strcpy (logfilename, argv[4]);
X.
X339a
X  sprintf (versionstr, "");
X.
X113c
Xchar  logfilename[100];		/* Name of log file */
X.
X2c
X * main.c: Rog-O-Matic XIV (CMU) Fri Feb 15 18:27:27 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - makefile << '-*-END-*-'
X107c
Xutility.o: install.h
X.
X97c
Xtactics.o: types.h globals.h install.h
X.
X61c
Xltm.o: types.h globals.h install.h
X.
X55c
Xio.o: types.h globals.h install.h termtokens.h
X.
X5,6c
XBINDIR=     /usr/mlm/bin/
XPUBDIR=     /usr/mlm/rgm/src14a
X.
X1c
X# makefile: Rog-O-Matic XIV (CMU) Wed Feb  6 18:34:24 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - mess.c << '-*-END-*-'
X523c
X    usesynch = 0; justreadid=1;		/* Must reset inventory */
X.
X479c
X  if (!replaying && version < RV53A &&
X.
X417a
X      else if (MATCH("(mctesq was here)")) echoit=0;
X.
X369,370c
X      { infer ("remove curse");
X	if (cursedarmor)  {forget (currentarmor, CURSED);  cursedarmor=0;}
X	if (cursedweapon) {forget (currentweapon, CURSED); cursedweapon=0;}
X        newarmor = newweapon = 1; }
X.
X349c
X      else if (MATCH("your nose tingles*")) infer ("food detection");
X.
X343a
X      else if (MATCH("you feel a wrenching sensation in your gut")) ;
X.
X338a
X      else if (MATCH("you begin to feel greedy*")) infer ("gold detection");
X.
X337c
X      else if (MATCH("you*cursed*")) {echoit=0; curseditem ();}
X.
X312c
X      else if (MATCH("wait*that's a *")) ;
X.
X302c
X      if (MATCH("version *")) echoit=0;
X      else unknown++;
X.
X274a
X      else if (MATCH("the corridor glows*")) { infer ("light"); }
X.
X247a
X      else if (MATCH("rogue version *")) echoit=0;
X.
X90c
X  { echoit = !inventory (mess, mend); identifying = justreadid = 0; }
X.
X64c
X	 s<t && (version < RV53A || *s != '.' || s[1] != ' ');
X.
X2c
X * mess.c: Rog-O-Matic XIV (CMU) Sat Feb 16 15:41:44 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - pack.c << '-*-END-*-'
X454a
X  
X  return (printed);
X.
X408,421d
X379,380d
X377a
X	printed++;
X.
X232c
X  int  n, ipos, xknow = 0, newitem = 0, inuse = 0, printed = 0;
X.
X2c
X * pack.c: Rog-O-Matic XIV (CMU) Sat Feb 16 08:58:04 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - search.c << '-*-END-*-'
X108c
X      onrc (HALL,r,c) &&
X      !beingstalked)			/* Feb 10, 1985 - mlm */
X.
X2c
X * search.c: Rog-O-Matic XIV (CMU) Fri Feb 15 15:08:44 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - strategy.c << '-*-END-*-'
X1061,1065c
X  if (dir > 7)	command (T_FIGHTING, "hjlk");
X  else		command (T_FIGHTING, "%c%c%c", keydir[dir],
X			 keydir[dir], keydir[(dir+4)&7]);
X.
X1055,1059c
X  for (dir=0; dir<8; dir += 2)
X    if ((onrc(CANGO, atdrow(dir), atdcol(dir))) &&
X	(onrc(CANGO, atrow+2*deltr[dir], atcol+2*deltc[dir])))
X      break;
X.
X1048c
X  { command (T_FIGHTING, "%c%c", keydir[lastdir], keydir[(lastdir+4)&7]);
X    return (1);
X  }
X.
X987,990d
X508d
X501c
X  if (beingstalked > INVPRES) { turns = 0; danger += INVDAM; }
X.
X183c
X  return (grope (10));
X.
X132c
X  if (findroom ())		/* Look for another room */
X.
X96c
X  if (blinded && grope (50))	/* Who turned out the lights */
X.
X2c
X * strategy.c: Rog-O-Matic XIV (CMU) Sat Feb 16 10:03:16 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - survival.c << '-*-END-*-'
X122,124c
X    return (goupstairs (RUNNING) || godownstairs (RUNNING));
X.
X2c
X * survival.c: Rog-O-Matic XIV (CMU) Sun Feb 10 21:09:58 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - tactics.c << '-*-END-*-'
X828c
X  if ((obj = unknown (wand)) == NONE)
X.
X796c
X  if ((obj = havemissile ()) == NONE) return (0);
X.
X629,630c
X        ((obj = havearrow ()) != NONE || (obj = haveminus ()) != NONE) &&
X	throw (obj, 0))
X    { return (1); }
X.
X620c
X  if (stairrow == NONE || have(amulet) == NONE ||
X.
X545a
X  if (have (amulet) != NONE) return (0);
X
X.
X544c
X  if (stairrow == NONE && !foundtrapdoor) return (0);
X.
X364c
X  if ((obj = havenamed (ring, name)) == NONE ||
X.
X280c
X    if (version <= RV36B && !know ("create monster") && gotocorner ())
X.
X275c
X       (exploredlevel || Level > 18 || know ("aggravate monsters")) &&
X.
X189c
X    else if (wearing ("sustain strength") == NONE &&
X.
X93,95c
X  if (obj == currentweapon)	{ newweapon = 0; return (0); }
X  else if (obj != NONE)		{ return (wield (obj)); }
X  else				{ newweapon = 0; return (0); }
X.
X90c
X  if ((obj = haveweapon (1, NOPRINT)) == NONE) return (0);
X.
X55c
X  if (obj != NONE && armorclass (obj) > 9 && itemis (obj, KNOWN))
X.
X48,51c
X  { obj = NONE;
X    if (Level<13)		obj = havearmor (1, NOPRINT, RUSTPROOF);
X    if (Level<13 && obj==NONE)	obj = havearmor (3, NOPRINT, ANY);
X    if (obj==NONE)		obj = havearmor (2, NOPRINT, ANY);
X.
X44c
X  if (Level > (version < RV52A ? 8 : 7) && Level < 19 && 
X.
X2c
X * tactics.c: Rog-O-Matic XIV (CMU) Sat Feb 16 23:27:48 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - things.c << '-*-END-*-'
X487c
X	     stlmatch (inven[obj].str, "leather") && version > RV36B));
X.
X270a
X  return (nextid >= 'a' && afterid >= 'a');
X.
X88,90d
X84,86c
X  /* quaff unknown potions or good potions rather than dropping them */
X  if (inven[obj].type == potion &&
X      (!itemis (obj, KNOWN) ||
X       stlmatch (inven[obj].str, "extra healing") ||
X       stlmatch (inven[obj].str, "gain strength") ||
X       stlmatch (inven[obj].str, "haste self") && !hasted ||
X       stlmatch (inven[obj].str, "healing") ||
X       stlmatch (inven[obj].str, "magic detection") ||
X       stlmatch (inven[obj].str, "monster detection") ||
X       stlmatch (inven[obj].str, "raise level") ||
X       stlmatch (inven[obj].str, "restore strength")) &&
X      quaff (obj))
X  { return (1); }
X.
X78,82c
X  /* read unknown scrolls or good scrolls rather than dropping them */
X  if (inven[obj].type == scroll &&
X      (!itemis (obj, KNOWN) ||
X       stlmatch (inven[obj].str, "identify") &&
X	   prepareident (pickident (), obj) ||
X       stlmatch (inven[obj].str, "enchant") ||
X       stlmatch (inven[obj].str, "genocide") ||
X       stlmatch (inven[obj].str, "gold detection") ||
X       stlmatch (inven[obj].str, "hold monster") ||
X       stlmatch (inven[obj].str, "light") ||
X       stlmatch (inven[obj].str, "magic mapping") ||
X       stlmatch (inven[obj].str, "monster confusion") ||
X       stlmatch (inven[obj].str, "remove curse")) &&
X      reads (obj))
X  { return (1); }
X.
X75,76c
X  /* Cant if not there, in use, or on something else */
X  if (inven[obj].count < 1 ||
X      itemis (obj, INUSE) ||
X      on (STUFF | TRAP | STAIRS | DOOR))
X    return (0);
X.
X44a
X  usesynch = 0;
X.
X27c
X  command (T_HANDLING, "W%c", LETTER (obj));
X  usesynch = 0;
X.
X2c
X * things.c: Rog-O-Matic XIV (CMU) Sat Feb 16 12:16:57 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - types.h << '-*-END-*-'
X44a
X# define INVPRES	(INVHIT-100)
X# define INVLURK	(INVPRES-200)
X.
X43a
X# define INVDAM		(16)
X.
X2c
X * types.h: Rog-O-Matic XIV (CMU) Sat Feb 16 09:44:54 1985 - mlm
X.
Xw
Xq
X-*-END-*-
Xed - worth.c << '-*-END-*-'
X109a
X  else if (stlmatch (inven[obj].str, "extra healing")) value = 900;
X  else if (stlmatch (inven[obj].str, "healing")) value = 750;
X  else if (stlmatch (inven[obj].str, "protect") && !protected) value = 1000;
X.
X106a
X  else if (stlmatch (inven[obj].str, "gain strength")) value = 700;
X.
X80,81c
X    if (obj == haveweapon (1, NOPRINT)) value += 2500;
X    else if (obj == haveweapon (2, NOPRINT)) value += 1500;
X.
X72,73c
X    if (obj == havebow (1, NOPRINT)) value += 1500;
X    else if (obj == havebow (2, NOPRINT)) value += 300;
X.
X70c
X  { value = (bowclass (obj));
X.
X61c
X    if (stlmatch (inven[obj].str, "leather"))		value += 300;
X.
X59a
X    else if (obj == havearmor (3, NOPRINT, ANY))	value += 800;
X.
X56c
X  { value = (11 - armorclass (obj)) * 120;
X.
X51,52c
X   * Armor values are based on armor class, bonus for best, second
X   * best, third best, or leather armor (leather doesnt rust)
X.
X2c
X * worth.c: Rog-O-Matic XIV (CMU) Sun Feb 10 23:16:40 1985 - mlm
X.
Xw
Xq
X-*-END-*-
/
echo 'Rgm XIV mods 02/16/85 - ed scripts complete.'
exit

mlm@cmu-cs-cad.ARPA (Michael Mauldin) (02/17/85)

#!/bin/sh
#
# This is a shell archive.  Use the "unshar" command to unpack it, or
# remove the mail header and pipe the body of the message through "sh".
# 
# Seems like more bugs have cropped up.  Thanks to everyone who sent them
# in.  This version has been better tested against 3.6 and 5.2 (cheat
# mode still works, in 10 games against 3.6 it got another total winner).
# 
# This message contains two files:
# 
# 	Bugreport		A new Bugreport file
# 	mod.2.context		a diff -c script (both first and second mods)
# 
# Changes:
# 
# mod.1	fixed the armor bug
# 	fixed the ancilliary commands (rplot and histplot)
# 	documented the ancilliary commands (rplot, histplot, gene)
# 
# mod.2	fixed another armor handling bug
# 	fixed plunge mode when coming back up
# 	fixed replay command to include version number
# 	fixed invisible stalker fighting code
# 	numerous tactics changed
# 	(see Bugreport for gory details)
# 
# Share and Enjoy!
# 
# Michael Mauldin (Fuzzy)			Department of Computer Science
# (412) 578-3065				Carnegie-Mellon University
# mauldin@cmu-cs-a.arpa			Pittsburgh, PA  15213
#
echo 'Start of Rgm XIV mods 02/16/85 - context diffs:'
echo 'x - Bugreport'
sed 's/^X//' > Bugreport << '/'
X/*
X * Bugreport: Rog-O-Matic XIV (CMU) Sat Feb 16 22:53:04 1985 - mlm
X * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X */
X
X1. fails to wear any armor below level 7.
X
X	things.c:willrust()		changed itemis(PROTECTED)
X	tactics.c:handlearmor()		dont worry about cursed armor
X
X
X2. histplot and rplot are flaky (reported by AEB (play@turing)).
X
X	rplot				removed file name
X	gene.c				fixed "Usage" message
X	histplot.c			fixed bugs
X	README				documented ancilliary functions
X
X3. utility.c uses "getpw (getuid (), name)", which according to
X   Rick Adams @ Seismo is obsolete.  no fix made here.  Caveat Emptor!
X
X4. Armor handling again.  Fails to track current armor under Rogue 3.6
X   and Rogue 5.2 (bug reported by Dennis Ritchie).
X
X	things.c:wear(),takeoff()	added usesynch=0 (ie: get new invent)
X	tactics.c:handlearmor()		new strategy, includes 3rd best
X
X5. Failed to handle "cursed armor" message in Rogue 3.6 / 5.2.  Fixed.
X
X	mess.c:terpmes()		modified cursed mesage pattern
X
X6. Drops good, known items rather than quaffing/reading them
X
X	things.c:drop()			read/quaff some things
X
X7. Too often throws good armor away to keep mediocre scrolls.
X
X	worth.c:worth()			values armor more highly.
X
X8. Peter Wan reports problems with screen handling on terminals with
X   no tabs.  Problem unknown.
X
X9. Fixed reply command to understand version messages at start of
X   log files. Modifiekd to send version command when starting a
X   log in the middle of the game.
X
X	io.c:getrogver()		look for version string in log
X	io.c:toggleecho()		send version command
X	mess.c:terpmes()		ignore version commands
X
X10. Fails to fight invisible stalkers properly
X
X	strategy.c:fightinvisible()	fixed old conversion bug
X	search.c:followmap()		don't call fmove when beingstalked
X
X11. Doesn't recognize scrolls/wands of light in corridors
X
X	mess.c:terpmes()		added message about "corridor glows"
X
X12. Added debugging command about rustproof armor
X
X	arms.c:havearmor()		new flag 'rustproof'
X	main.c:main()			new command ']'
X
X13. Fails to properly print message about genocided monsters.
X
X	io.c:statusline()		added missing %s to printf format
X
X14. Updated version message to take replaying into account
X
X	main.c:main()			new message
X
X15. Makefile does not include several dependencies on install.h
X
X	makefile			io, ltm, tactics, utility
X
X16. Sometimes gives extra message when doing an inventory.  Modified
X    inventory to return true if it printed a message because an item
X    listed has a remembered value substituted by the database routine.
X
X	pack.c:inventory()		now returns true is msg printed
X	mess.c:terpmes()		uses value returned
X
X17. Reduced time groping when blind
X
X	strategy.c:stragize()		cut from 100 turns to 50
X
X18. Modified scroll handling, now reads scrolls even when in plunge
X    mode.  Also fixed a bug with the 'aggravate monsters' check.
X
X	tactics.c:readscroll()		added missing s to "aggravate monster"
X
X19. If it finds a trap door when on the way back up between 26 and 18,
X    it runs DOWN the trap door (stupid, stupid!).
X
X	tactics.c:plunge()		dont if have(amulet)
X
X20. Modified sanity check for identify scrolls.  Don't have to plan
X    ahead in Rogue 5.3, so sanity check doesn't apply.
X
X	mess.c:readident()		change 'version <= RV53A' to '<'
X
X21. Remember that leather armor rusts in Rogue 3.6.
X
X	things.c:willrust()		check for Rogue 3.6
X
/
echo 'x - mod.2.context'
sed 's/^X//' > mod.2.context << '/'
Xdiff -c1 packold/arms.c packnew/arms.c
X*** packold/arms.c	Mon Feb 11 11:27:10 1985
X--- packnew/arms.c	Sat Feb 16 23:46:50 1985
X***************
X*** 1,3
X  /*
X!  * arms.c: Rog-O-Matic XIV (CMU) Thu Jan 31 15:46:02 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * arms.c: Rog-O-Matic XIV (CMU) Sat Feb 16 09:47:34 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 40,51
X  
X-   /* Put protected sets of armor with equal ACs first.  DR UTexas 19 Jan 84 */
X-   for (j = n-1; j > 0; j--)
X-   { if (armval[j] == armval[j-1])
X-     { i = armind[j];
X-       w = armind[j-1];
X-       if (!itemis (w, PROTECTED) && itemis (i, PROTECTED))
X-         swap (armind[j], armind[j-1]);
X-     }
X-   }
X- 
X    if (print)
X
X--- 40,41 -----
X  
X    if (print)
X***************
X*** 51,53
X    if (print)
X!   { mvaddstr (1, 0, "Current Armor Rankings");
X      for (i = 0; i<n; i++)
X
X--- 41,43 -----
X    if (print)
X!   { mvprintw (1,0, "Current %sArmor Rankings", rustproof ? "Rustproof " : "");
X      for (i = 0; i<n; i++)
X***************
X*** 55,60
X    }
X- 
X-   /* Any uncursed, useful armor at or beyond position k? */
X-   for (i=k; i <= n; i++)
X-     if (!itemis ((j = armind[i-1]), CURSED) && armval[j] < 10) return (j);
X    
X
X--- 45,46 -----
X    }
X    
X***************
X*** 60,62
X    
X-   /* Return the kth best, even though it is cursed or useless */
X    return ((k <= n) ? armind[k-1] : NONE);
X
X--- 46,47 -----
X    
X    return ((k <= n) ? armind[k-1] : NONE);
Xdiff -c1 packold/io.c packnew/io.c
X*** packold/io.c	Mon Feb 11 11:27:17 1985
X--- packnew/io.c	Sat Feb 16 23:46:59 1985
X***************
X*** 1,3
X  /*
X!  * io.c: Rog-O-Matic XIV (CMU) Thu Jan 31 18:19:29 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * io.c: Rog-O-Matic XIV (CMU) Sat Feb 16 23:03:48 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 754,755
X    "Rgm commands: <ret>=singlestep, `=summary, /=snapshot, R=replay      [?]",
X    "Rogue cmds: S=Save, Q=Quit, h j k l H J K L b n u y N B U Y f s < >  [?]",
X
X--- 754,756 -----
X    "Rgm commands: <ret>=singlestep, `=summary, /=snapshot, R=replay      [?]",
X+   "Rgm commands: m=long term memory display, G=display gene settings    [?]",
X    "Rogue cmds: S=Save, Q=Quit, h j k l H J K L b n u y N B U Y f s < >  [?]",
X***************
X*** 756,758
X    "Wizard: d=debug, !=show items, @=show monsters, #=show level flags   [?]",
X!   "Wizard: ~=version, ^=bowrank, %%=armorrank, $=weaponrank, ==ringrank [?]",
X    "Wizard: (=database, )=cycles, +=possible secret doors, :=chicken     [?]",
X
X--- 757,759 -----
X    "Wizard: d=debug, !=show items, @=show monsters, #=show level flags   [?]",
X!   "Wizard: ~=version, ^=bowrank, %%=armorrank, $=weaponrank, ==ringrank  [?]",
X    "Wizard: (=database, )=cycles, +=possible secret doors, :=chicken     [?]",
X***************
X*** 758,761
X    "Wizard: (=database, )=cycles, +=possible secret doors, :=chicken     [?]",
X!   "Wizard: [=weapstat, r=resetinv, &=object count, *=toggle blind       [?]",
X!   "Wizard: C=toggle cosmic, M=mazedoor, m=monster, A=attempt, {=flags",
X    NULL
X
X--- 759,762 -----
X    "Wizard: (=database, )=cycles, +=possible secret doors, :=chicken     [?]",
X!   "Wizard: [=weapstat, ]=rustproof armor, r=resetinv, &=object count    [?]",
X!   "Wizard: *=toggle blind, C=toggle cosmic, M=mazedoor, A=attempt, {=flags",
X    NULL
X***************
X*** 795,796
X   *            wands.
X   */
X
X--- 796,799 -----
X   *            wands.
X+  *
X+  * Get version from first 2000 chars of a log file	Feb 9, 1985 - mlm
X   */
X***************
X*** 797,798
X  
X  getrogver ()
X
X--- 800,803 -----
X  
X+ # define VERMSG	"ersion "
X+ 
X  getrogver ()
X***************
X*** 798,800
X  getrogver ()
X! { char *vstr = versionstr, ch;
X  
X
X--- 803,817 -----
X  getrogver ()
X! { register char *vstr = versionstr, *m = VERMSG;
X!   register int cnt = 2000, ch;
X!  
X!   if (replaying)			/* Look for version string in log */
X!   { while (cnt-- > 0 && *m)
X!     { if (fgetc (logfile) == *m) m++; else m = VERMSG;}
X!   
X!     if (*m == '\0')			/* Found VERMSG, get version string */
X!     { while ((ch = fgetc (logfile)) != ' ') *(vstr++) = ch;
X!       *--vstr = '\0';
X!     }
X!     else				/* Use default version */
X!     { sprintf (versionstr, DEFVER); }
X  
X***************
X*** 800,803
X  
X!   if (replaying)			/* Use default version */
X!   { sprintf (versionstr, DEFVER); }
X  
X
X--- 817,820 -----
X  
X!     rewind (logfile);			/* Put log file back to start */
X!   }
X  
X***************
X*** 871,872
X        cecho = 1;
X      }
X
X--- 888,890 -----
X        cecho = 1;
X+       if (*versionstr) command (T_OTHER, "v");
X      }
X***************
X*** 1120,1122
X  
X!   if (*genocided) sprintf (s, "genocided '%s', ", s, genocided);
X  
X
X--- 1138,1140 -----
X  
X!   if (*genocided) sprintf (s, "%sgenocided '%s', ", s, genocided);
X  
Xdiff -c1 packold/main.c packnew/main.c
X*** packold/main.c	Mon Feb 11 11:28:10 1985
X--- packnew/main.c	Sat Feb 16 23:47:06 1985
X***************
X*** 1,3
X  /*
X!  * main.c: Rog-O-Matic XIV (CMU) Sun Feb  3 17:00:25 1985 - mlm
X   */
X
X--- 1,3 -----
X  /*
X!  * main.c: Rog-O-Matic XIV (CMU) Fri Feb 15 18:27:27 1985 - mlm
X   */
X***************
X*** 112,114
X  /* Characters */
X! char  *logfilename = "";	/* Name of log file */
X  char  afterid = '\0';           /* Letter of obj after identify */
X
X--- 112,114 -----
X  /* Characters */
X! char  logfilename[100];		/* Name of log file */
X  char  afterid = '\0';           /* Letter of obj after identify */
X***************
X*** 339,340
X    sprintf (sumline, "");
X    for (i = 80 * 24; i--; ) screen[0][i] = ' ';
X
X--- 339,341 -----
X    sprintf (sumline, "");
X+   sprintf (versionstr, "");
X    for (i = 80 * 24; i--; ) screen[0][i] = ' ';
X***************
X*** 353,355
X      termination = "finis";
X!     logfilename = argv[4];
X      startreplay (&logfile, logfilename);
X
X--- 354,356 -----
X      termination = "finis";
X!     strcpy (logfilename, argv[4]);
X      startreplay (&logfile, logfilename);
X***************
X*** 403,406
X  
X!   sprintf (msg, " %s: version %s, genotype %d, quit at %d.",
X!            roguename, versionstr, geneid, quitat);
X    
X
X--- 404,411 -----
X  
X!   if (replaying)
X!     sprintf (msg, " Replaying log file %s, version %s.", 
X! 	     logfilename, versionstr);
X!   else
X!     sprintf (msg, " %s: version %s, genotype %d, quit at %d.",
X! 	     roguename, versionstr, geneid, quitat);
X    
X***************
X*** 554,558
X  
X!         case '~': saynow
X!                   ("Rogomatic version %s, Rogue version %s (%d), quit at %d",
X!                      RGMVER, versionstr, version, quitat);
X                    break;
X
X--- 559,566 -----
X  
X!         case '~': if (replaying)
X! 		    saynow ("Replaying log file %s, version %s.", 
X! 			    logfilename, versionstr);
X! 		  else
X! 		    saynow (" %s: version %s, genotype %d, quit at %d.",
X! 			    roguename, versionstr, geneid, quitat);
X                    break;
Xdiff -c1 packold/makefile packnew/makefile
X*** packold/makefile	Mon Feb 11 11:27:21 1985
X--- packnew/makefile	Sat Feb 16 23:47:06 1985
X***************
X*** 1,2
X! # makefile: Rog-O-Matic XIV (CMU) Thu Jan 31 18:23:25 1985 - mlm
X  # Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,2 -----
X! # makefile: Rog-O-Matic XIV (CMU) Wed Feb  6 18:34:24 1985 - mlm
X  # Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 4,7
X  BINARIES=   rogomatic player rgmplot datesub histplot gene
X! BINDIR=     /usr/mlm/bin/test
X! PUBDIR=     /usr/mlm/rgm/src14
X  CCFLAGS=    -g
X
X--- 4,7 -----
X  BINARIES=   rogomatic player rgmplot datesub histplot gene
X! BINDIR=     /usr/mlm/bin/
X! PUBDIR=     /usr/mlm/rgm/src14a
X  CCFLAGS=    -g
X***************
X*** 54,56
X  	cc -c histplot.c
X! io.o: types.h globals.h termtokens.h
X  	cc -c $(CCFLAGS) io.c
X
X--- 54,56 -----
X  	cc -c histplot.c
X! io.o: types.h globals.h install.h termtokens.h
X  	cc -c $(CCFLAGS) io.c
X***************
X*** 60,62
X  	cc -c $(CCFLAGS) learn.c
X! ltm.o: types.h globals.h
X  	cc -c $(CCFLAGS) ltm.c
X
X--- 60,62 -----
X  	cc -c $(CCFLAGS) learn.c
X! ltm.o: types.h globals.h install.h
X  	cc -c $(CCFLAGS) ltm.c
X***************
X*** 96,98
X  	cc -c $(CCFLAGS) survival.c
X! tactics.o: types.h globals.h
X  	cc -c $(CCFLAGS) tactics.c
X
X--- 96,98 -----
X  	cc -c $(CCFLAGS) survival.c
X! tactics.o: types.h globals.h install.h
X  	cc -c $(CCFLAGS) tactics.c
X***************
X*** 106,108
X  	cc -c titler.c
X! utility.o:
X  	cc -c $(CCFLAGS) utility.c
X
X--- 106,108 -----
X  	cc -c titler.c
X! utility.o: install.h
X  	cc -c $(CCFLAGS) utility.c
Xdiff -c1 packold/mess.c packnew/mess.c
X*** packold/mess.c	Mon Feb 11 11:27:23 1985
X--- packnew/mess.c	Sat Feb 16 23:47:08 1985
X***************
X*** 1,3
X  /*
X!  * mess.c: Rog-O-Matic XIV (CMU) Thu Jan 31 15:33:12 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * mess.c: Rog-O-Matic XIV (CMU) Sat Feb 16 15:41:44 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 63,65
X      for (m = mess;				/* Copy text */
X! 	 s<t && (version < RV53A || *s != '.');
X  	 s++)	
X
X--- 63,65 -----
X      for (m = mess;				/* Copy text */
X! 	 s<t && (version < RV53A || *s != '.' || s[1] != ' ');
X  	 s++)	
X***************
X*** 89,91
X    else if (mend[-1]==')' && mend[-3]=='(')
X!   { inventory (mess, mend); identifying = justreadid = 0; }
X  
X
X--- 89,91 -----
X    else if (mend[-1]==')' && mend[-3]=='(')
X!   { echoit = !inventory (mess, mend); identifying = justreadid = 0; }
X  
X***************
X*** 247,248
X        else if (MATCH("read what*")) echoit=0;
X        else unknown++;
X
X--- 247,249 -----
X        else if (MATCH("read what*")) echoit=0;
X+       else if (MATCH("rogue version *")) echoit=0;
X        else unknown++;
X***************
X*** 274,275
X        else if (MATCH("the room is lit")) { setnewgoal (); infer ("light"); }
X        else if (MATCH("the * has confused you")) confused = 1;
X
X--- 275,277 -----
X        else if (MATCH("the room is lit")) { setnewgoal (); infer ("light"); }
X+       else if (MATCH("the corridor glows*")) { infer ("light"); }
X        else if (MATCH("the * has confused you")) confused = 1;
X***************
X*** 301,303
X      case 'v':
X!       unknown++;
X        break;
X
X--- 303,306 -----
X      case 'v':
X!       if (MATCH("version *")) echoit=0;
X!       else unknown++;
X        break;
X***************
X*** 311,313
X        else if (MATCH("wait, what's going*")) {infer("confusion"); confused=1;}
X!       else if (MATCH("wait!  that's a *")) ;
X        else if (MATCH("what a*feeling*")) { infer("confusion"); confused=1; }
X
X--- 314,316 -----
X        else if (MATCH("wait, what's going*")) {infer("confusion"); confused=1;}
X!       else if (MATCH("wait*that's a *")) ;
X        else if (MATCH("what a*feeling*")) { infer("confusion"); confused=1; }
X***************
X*** 336,338
X        { echoit=0; set (STUFF); maxobj=objcount; }
X!       else if (MATCH("you can't *")) {echoit=0; curseditem ();}
X        else if (MATCH("you can't")) echoit=0;
X
X--- 339,341 -----
X        { echoit=0; set (STUFF); maxobj=objcount; }
X!       else if (MATCH("you*cursed*")) {echoit=0; curseditem ();}
X        else if (MATCH("you can't")) echoit=0;
X***************
X*** 338,339
X        else if (MATCH("you can't")) echoit=0;
X        else if (MATCH("you begin to feel better")) infer ("healing");
X
X--- 341,343 -----
X        else if (MATCH("you can't")) echoit=0;
X+       else if (MATCH("you begin to feel greedy*")) infer ("gold detection");
X        else if (MATCH("you begin to feel better")) infer ("healing");
X***************
X*** 343,344
X        else if (MATCH("you feel a strange sense of loss")) ;
X        else if (MATCH("you feel stronger, now*")) infer ("gain strength");
X
X--- 347,349 -----
X        else if (MATCH("you feel a strange sense of loss")) ;
X+       else if (MATCH("you feel a wrenching sensation in your gut")) ;
X        else if (MATCH("you feel stronger, now*")) infer ("gain strength");
X***************
X*** 348,350
X        { infer("raise level"); }
X!       else if (MATCH("your nose tingles")) infer ("food detection");
X        else if (MATCH("you start to float in the air"))
X
X--- 353,355 -----
X        { infer("raise level"); }
X!       else if (MATCH("your nose tingles*")) infer ("food detection");
X        else if (MATCH("you start to float in the air"))
X***************
X*** 368,371
X                 MATCH("you feel in touch with the universal onenes")) 
X!       { infer ("remove curse"); cursedarmor = cursedweapon = 0; 
X!         newarmor = newweapon = 1;}
X        else if (MATCH("your armor weakens"))
X
X--- 373,378 -----
X                 MATCH("you feel in touch with the universal onenes")) 
X!       { infer ("remove curse");
X! 	if (cursedarmor)  {forget (currentarmor, CURSED);  cursedarmor=0;}
X! 	if (cursedweapon) {forget (currentweapon, CURSED); cursedweapon=0;}
X!         newarmor = newweapon = 1; }
X        else if (MATCH("your armor weakens"))
X***************
X*** 417,418
X        if (MATCH( "* gold pieces")) { echoit=0; countgold (res1); }
X        else if (MATCH("'*'*: *")) { echoit=0; mapcharacter (*res1, res3); }
X
X--- 424,426 -----
X        if (MATCH( "* gold pieces")) { echoit=0; countgold (res1); }
X+       else if (MATCH("(mctesq was here)")) echoit=0;
X        else if (MATCH("'*'*: *")) { echoit=0; mapcharacter (*res1, res3); }
X***************
X*** 478,480
X  
X!   if (!replaying && version <= RV53A &&
X        (nextid < LETTER (0) || nextid > LETTER (invcount))) 
X
X--- 486,488 -----
X  
X!   if (!replaying && version < RV53A &&
X        (nextid < LETTER (0) || nextid > LETTER (invcount))) 
X***************
X*** 522,524
X      sendnow (" %c;", id);		/* Pick an object to identify */
X!     usesynch = 0; justreadid=1;		/* Must resest inventory */
X    }
X
X--- 530,532 -----
X      sendnow (" %c;", id);		/* Pick an object to identify */
X!     usesynch = 0; justreadid=1;		/* Must reset inventory */
X    }
Xdiff -c1 packold/pack.c packnew/pack.c
X*** packold/pack.c	Mon Feb 11 11:27:24 1985
X--- packnew/pack.c	Sat Feb 16 23:47:10 1985
X***************
X*** 1,3
X  /*
X!  * pack.c: Rog-O-Matic XIV (CMU) Thu Jan 31 15:04:23 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * pack.c: Rog-O-Matic XIV (CMU) Sat Feb 16 08:58:04 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 231,233
X    char objname[100], *realname();
X!   int  n, ipos, xknow = 0, newitem = 0, inuse = 0;
X    int  plushit = UNKNOWN, plusdam = UNKNOWN, charges = UNKNOWN;
X
X--- 231,233 -----
X    char objname[100], *realname();
X!   int  n, ipos, xknow = 0, newitem = 0, inuse = 0, printed = 0;
X    int  plushit = UNKNOWN, plusdam = UNKNOWN, charges = UNKNOWN;
X***************
X*** 377,378
X          refresh ();
X        }
X
X--- 377,379 -----
X          refresh ();
X+ 	printed++;
X        }
X***************
X*** 378,381
X        }
X-       else
X-         say (msgstart);
X      }
X
X--- 379,380 -----
X        }
X      }
X***************
X*** 407,422
X  
X-     /*
X-      * Use retained info to determine cursed attributes when identifying
X-      * or protected status for armor.  DR UTexas 01/05/84
X-      */
X- 
X-     if (inven[ipos].type == what && stlmatch (objname, inven[ipos].str))
X-     { if (xknow != itemis (ipos, KNOWN) &&
X- 	  !itemis (ipos, (UNCURSED | ENCHANTED)) &&
X- 	  ((plushit != UNKNOWN && plushit < 0) ||
X- 	   (plusdam != UNKNOWN && plusdam < 0)))
X-         remember (ipos, CURSED);
X-       if (newitem || what != armor ) forget (ipos, PROTECTED);
X-     }
X- 
X      inven[ipos].type = what;
X
X--- 406,407 -----
X  
X      inven[ipos].type = what;
X***************
X*** 454,455
X    checkrange = 1;
X  }
X
X--- 439,442 -----
X    checkrange = 1;
X+   
X+   return (printed);
X  }
Xdiff -c1 packold/search.c packnew/search.c
X*** packold/search.c	Mon Feb 11 11:27:31 1985
X--- packnew/search.c	Sat Feb 16 23:47:15 1985
X***************
X*** 1,3
X  /*
X!  * search.c: Rog-O-Matic XIV (CMU) Mon Jan 28 18:28:07 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * search.c: Rog-O-Matic XIV (CMU) Fri Feb 15 15:08:44 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 107,109
X        onrc (HALL|BEEN, targetrow, targetcol) != HALL|BEEN &&
X!       onrc (HALL,r,c))
X    { fmove (dir); return (1); }
X
X--- 107,110 -----
X        onrc (HALL|BEEN, targetrow, targetcol) != HALL|BEEN &&
X!       onrc (HALL,r,c) &&
X!       !beingstalked)			/* Feb 10, 1985 - mlm */
X    { fmove (dir); return (1); }
Xdiff -c1 packold/strategy.c packnew/strategy.c
X*** packold/strategy.c	Mon Feb 11 11:27:34 1985
X--- packnew/strategy.c	Sat Feb 16 23:47:18 1985
X***************
X*** 1,3
X  /*
X!  * strategy.c: Rog-O-Matic XIV (CMU) Thu Jan 31 20:51:06 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * strategy.c: Rog-O-Matic XIV (CMU) Sat Feb 16 10:03:16 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 95,97
X  
X!   if (blinded && grope (100))	/* Who turned out the lights */
X    { display ("Blinded, groping..."); return (1); }
X
X--- 95,97 -----
X  
X!   if (blinded && grope (50))	/* Who turned out the lights */
X    { display ("Blinded, groping..."); return (1); }
X***************
X*** 131,133
X  
X!   if (findroom ())	/* Look for another room */
X      return (1);
X
X--- 131,133 -----
X  
X!   if (findroom ())		/* Look for another room */
X      return (1);
X***************
X*** 182,184
X    display ("I would give up, but I am too stubborn, starting over...");
X!   return (grope (100));
X  }
X
X--- 182,184 -----
X    display ("I would give up, but I am too stubborn, starting over...");
X!   return (grope (10));
X  }
X***************
X*** 500,502
X  
X!   if (beingstalked > 1000) { turns = 0; danger += 16; }
X  
X
X--- 500,502 -----
X  
X!   if (beingstalked > INVPRES) { turns = 0; danger += INVDAM; }
X  
X***************
X*** 507,509
X  
X- 
X    /* 
X
X--- 507,508 -----
X  
X    /* 
X***************
X*** 986,991
X  
X- # define INVDAM		(16)
X- # define INVPRES	(INVHIT-100)
X- # define INVLURK	(INVPRES-200)
X- 
X  fightinvisible ()
X
X--- 985,986 -----
X  
X  fightinvisible ()
X***************
X*** 1047,1049
X    if (liberties == 1 || liberties == 2)
X!     sprintf (cmd, "%c%c", keydir[lastdir], keydir[(lastdir+4)&7]);
X  
X
X--- 1042,1046 -----
X    if (liberties == 1 || liberties == 2)
X!   { command (T_FIGHTING, "%c%c", keydir[lastdir], keydir[(lastdir+4)&7]);
X!     return (1);
X!   }
X  
X***************
X*** 1054,1060
X    /* not work, run in a circle (will hit one out of 4)      */
X!   else
X!   { for (dir=0; dir<8; dir += 2)
X!       if ((onrc(CANGO, atdrow(dir), atdcol(dir))) &&
X!           (onrc(CANGO, atrow+2*deltr[dir], atcol+2*deltc[dir])))
X!         break;
X  
X
X--- 1051,1056 -----
X    /* not work, run in a circle (will hit one out of 4)      */
X!   for (dir=0; dir<8; dir += 2)
X!     if ((onrc(CANGO, atdrow(dir), atdcol(dir))) &&
X! 	(onrc(CANGO, atrow+2*deltr[dir], atcol+2*deltc[dir])))
X!       break;
X  
X***************
X*** 1060,1066
X  
X!     if (dir > 7)	command (T_FIGHTING, "hjlk");
X!     else		command (T_FIGHTING, "%c%c%c", keydir[dir],
X! 			         keydir[dir], keydir[(dir+4)&7]);
X!   }
X! 
X    return (1);
X
X--- 1056,1060 -----
X  
X!   if (dir > 7)	command (T_FIGHTING, "hjlk");
X!   else		command (T_FIGHTING, "%c%c%c", keydir[dir],
X! 			 keydir[dir], keydir[(dir+4)&7]);
X    return (1);
Xdiff -c1 packold/survival.c packnew/survival.c
X*** packold/survival.c	Mon Feb 11 11:27:35 1985
X--- packnew/survival.c	Sat Feb 16 23:47:18 1985
X***************
X*** 1,3
X  /*
X!  * survival.c: Rog-O-Matic XIV (CMU) Mon Jan  7 15:22:23 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * survival.c: Rog-O-Matic XIV (CMU) Sun Feb 10 21:09:58 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 121,125
X    if (on (STAIRS) && !floating)		/* Go up or down */
X!   { if (!goupstairs (RUNNING)) godownstairs (RUNNING); 
X!     return (1);
X!   }
X  
X
X--- 121,123 -----
X    if (on (STAIRS) && !floating)		/* Go up or down */
X!     return (goupstairs (RUNNING) || godownstairs (RUNNING));
X  
Xdiff -c1 packold/tactics.c packnew/tactics.c
X*** packold/tactics.c	Mon Feb 11 11:28:16 1985
X--- packnew/tactics.c	Sat Feb 16 23:47:20 1985
X***************
X*** 1,3
X  /*
X!  * tactics.c: Rog-O-Matic XIV (CMU) Sat Feb  2 13:01:25 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * tactics.c: Rog-O-Matic XIV (CMU) Sat Feb 16 23:27:48 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 43,45
X  
X!   if (Level > 7 && Level < 19 && 
X        wearing ("maintain armor") == NONE &&
X
X--- 43,45 -----
X  
X!   if (Level > (version < RV52A ? 8 : 7) && Level < 19 && 
X        wearing ("maintain armor") == NONE &&
X***************
X*** 47,52
X        itemis (obj, KNOWN))
X!   { if (Level < 13)
X!       obj = havearmor (1, NOPRINT, RUSTPROOF);
X!     if (Level >= 13 || obj == NONE)
X!       obj = havearmor (2, NOPRINT, ANY);
X    }
X
X--- 47,52 -----
X        itemis (obj, KNOWN))
X!   { obj = NONE;
X!     if (Level<13)		obj = havearmor (1, NOPRINT, RUSTPROOF);
X!     if (Level<13 && obj==NONE)	obj = havearmor (3, NOPRINT, ANY);
X!     if (obj==NONE)		obj = havearmor (2, NOPRINT, ANY);
X    }
X***************
X*** 54,56
X    /* If  the new armor is really bad, then don't bother wearing any */
X!   if (obj != NONE && armorclass (obj) > 9) 
X    { obj = NONE; }
X
X--- 54,56 -----
X    /* If  the new armor is really bad, then don't bother wearing any */
X!   if (obj != NONE && armorclass (obj) > 9 && itemis (obj, KNOWN))
X    { obj = NONE; }
X***************
X*** 89,91
X    /* haveweapon (1) returns the index of the best weapon in the pack */
X!   if ((obj = haveweapon (1, NOPRINT)) < 0) return (0);
X    
X
X--- 89,91 -----
X    /* haveweapon (1) returns the index of the best weapon in the pack */
X!   if ((obj = haveweapon (1, NOPRINT)) == NONE) return (0);
X    
X***************
X*** 92,96
X    /* If we are not wielding our best weapon, do so */
X!   if (obj == currentweapon) { newweapon = 0; return (0); }
X!   else if (obj != NONE)        { return (wield (obj)); }
X!   else                      { newweapon = 0; return (0); }
X  }
X
X--- 92,96 -----
X    /* If we are not wielding our best weapon, do so */
X!   if (obj == currentweapon)	{ newweapon = 0; return (0); }
X!   else if (obj != NONE)		{ return (wield (obj)); }
X!   else				{ newweapon = 0; return (0); }
X  }
X***************
X*** 188,190
X        return (1);
X!     else if (wearing ("sustain strength") < 0 &&
X               (obj2 = havenamed (ring, "sustain strength")) != NONE &&
X
X--- 188,190 -----
X        return (1);
X!     else if (wearing ("sustain strength") == NONE &&
X               (obj2 = havenamed (ring, "sustain strength")) != NONE &&
X***************
X*** 274,276
X          cursedarmor || cursedweapon) &&
X!        (exploredlevel || know ("aggravate monster")) &&
X         (obj = unknown (scroll)) != NONE))
X
X--- 274,276 -----
X          cursedarmor || cursedweapon) &&
X!        (exploredlevel || Level > 18 || know ("aggravate monsters")) &&
X         (obj = unknown (scroll)) != NONE))
X***************
X*** 279,281
X      /* Go to a corner to read the scroll */
X!     if (version <= RV36B && know ("create monster") == '\0' && gotocorner ())
X        return (1);
X
X--- 279,281 -----
X      /* Go to a corner to read the scroll */
X!     if (version <= RV36B && !know ("create monster") && gotocorner ())
X        return (1);
X***************
X*** 363,365
X  
X!   if ((obj = havenamed (ring, name)) < 0 ||
X        wearing (name) != NONE)
X
X--- 363,365 -----
X  
X!   if ((obj = havenamed (ring, name)) == NONE ||
X        wearing (name) != NONE)
X***************
X*** 543,545
X    /* Check for applicability of this rule */
X!   if (stairrow < 0 && !foundtrapdoor) return (0);
X  
X
X--- 543,545 -----
X    /* Check for applicability of this rule */
X!   if (stairrow == NONE && !foundtrapdoor) return (0);
X  
X***************
X*** 545,546
X  
X    if (teleported > (larder+1)*5 && godownstairs (NOTRUNNING))
X
X--- 545,548 -----
X  
X+   if (have (amulet) != NONE) return (0);
X+ 
X    if (teleported > (larder+1)*5 && godownstairs (NOTRUNNING))
X***************
X*** 619,621
X    /* Check for applicability of this rule */
X!   if (stairrow < 0 || have(amulet) < 0 ||
X        (!running && quitat < BOGUS && Gold <= quitat))
X
X--- 621,623 -----
X    /* Check for applicability of this rule */
X!   if (stairrow == NONE || have(amulet) == NONE ||
X        (!running && quitat < BOGUS && Gold <= quitat))
X***************
X*** 628,631
X      if (Level == 1 && 
X!         ((obj = havearrow ()) != NONE || (obj = haveminus ()) != NONE))
X!     { throw (obj, 0); return (1); }
X  
X
X--- 630,634 -----
X      if (Level == 1 && 
X!         ((obj = havearrow ()) != NONE || (obj = haveminus ()) != NONE) &&
X! 	throw (obj, 0))
X!     { return (1); }
X  
X***************
X*** 795,797
X    /* Fail if we have run out of arrows */
X!   if ((obj = havemissile ()) < 0) return (0);
X  
X
X--- 798,800 -----
X    /* Fail if we have run out of arrows */
X!   if ((obj = havemissile ()) == NONE) return (0);
X  
X***************
X*** 827,829
X    /* Have we a wand to identify? */
X!   if ((obj = unknown (wand)) < 0)
X      return (0);
X
X--- 830,832 -----
X    /* Have we a wand to identify? */
X!   if ((obj = unknown (wand)) == NONE)
X      return (0);
Xdiff -c1 packold/things.c packnew/things.c
X*** packold/things.c	Mon Feb 11 11:28:18 1985
X--- packnew/things.c	Sat Feb 16 23:47:21 1985
X***************
X*** 1,3
X  /*
X!  * things.c: Rog-O-Matic XIV (CMU) Sat Feb  2 13:02:28 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * things.c: Rog-O-Matic XIV (CMU) Sat Feb 16 12:16:57 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 26,28
X  
X!   command (T_HANDLING, "W%cI%c", LETTER (obj), LETTER (obj));
X    return (1);
X
X--- 26,29 -----
X  
X!   command (T_HANDLING, "W%c", LETTER (obj));
X!   usesynch = 0;
X    return (1);
X***************
X*** 44,45
X    command (T_HANDLING, "T");
X    return (1);
X
X--- 45,47 -----
X    command (T_HANDLING, "T");
X+   usesynch = 0;
X    return (1);
X***************
X*** 74,77
X  {
X!   /* Cant if there is not something there */
X!   if (inven[obj].count < 1) return (0);
X  
X
X--- 76,82 -----
X  {
X!   /* Cant if not there, in use, or on something else */
X!   if (inven[obj].count < 1 ||
X!       itemis (obj, INUSE) ||
X!       on (STUFF | TRAP | STAIRS | DOOR))
X!     return (0);
X  
X***************
X*** 77,83
X  
X!   /* read unknown scrolls rather than dropping them */
X!   if (inven[obj].type == scroll && !itemis (obj, KNOWN) && reads (obj))
X!   { prepareident (pickident (), obj);
X!     return (1);
X!   }
X    
X
X--- 82,98 -----
X  
X!   /* read unknown scrolls or good scrolls rather than dropping them */
X!   if (inven[obj].type == scroll &&
X!       (!itemis (obj, KNOWN) ||
X!        stlmatch (inven[obj].str, "identify") &&
X! 	   prepareident (pickident (), obj) ||
X!        stlmatch (inven[obj].str, "enchant") ||
X!        stlmatch (inven[obj].str, "genocide") ||
X!        stlmatch (inven[obj].str, "gold detection") ||
X!        stlmatch (inven[obj].str, "hold monster") ||
X!        stlmatch (inven[obj].str, "light") ||
X!        stlmatch (inven[obj].str, "magic mapping") ||
X!        stlmatch (inven[obj].str, "monster confusion") ||
X!        stlmatch (inven[obj].str, "remove curse")) &&
X!       reads (obj))
X!   { return (1); }
X    
X***************
X*** 83,87
X    
X!   /* quaff unknown potions rather than dropping them */
X!   if (inven[obj].type == potion && !itemis (obj, KNOWN) && quaff (obj))
X!     return (1);
X  
X
X--- 98,112 -----
X    
X!   /* quaff unknown potions or good potions rather than dropping them */
X!   if (inven[obj].type == potion &&
X!       (!itemis (obj, KNOWN) ||
X!        stlmatch (inven[obj].str, "extra healing") ||
X!        stlmatch (inven[obj].str, "gain strength") ||
X!        stlmatch (inven[obj].str, "haste self") && !hasted ||
X!        stlmatch (inven[obj].str, "healing") ||
X!        stlmatch (inven[obj].str, "magic detection") ||
X!        stlmatch (inven[obj].str, "monster detection") ||
X!        stlmatch (inven[obj].str, "raise level") ||
X!        stlmatch (inven[obj].str, "restore strength")) &&
X!       quaff (obj))
X!   { return (1); }
X  
X***************
X*** 87,91
X  
X-   if (itemis (obj, INUSE) || on (STUFF | TRAP | STAIRS | DOOR))
X-     return (0);
X- 
X    command (T_HANDLING, "d%c", LETTER (obj));
X
X--- 112,113 -----
X  
X    command (T_HANDLING, "d%c", LETTER (obj));
X***************
X*** 270,271
X    afterid = (iscroll > obj || inven[iscroll].count > 1) ? nextid : nextid-1;
X  }
X
X--- 292,294 -----
X    afterid = (iscroll > obj || inven[iscroll].count > 1) ? nextid : nextid-1;
X+   return (nextid >= 'a' && afterid >= 'a');
X  }
X***************
X*** 486,488
X  	     itemis (obj, PROTECTED) ||
X! 	     stlmatch (inven[obj].str, "leather")));
X  }
X
X--- 509,511 -----
X  	     itemis (obj, PROTECTED) ||
X! 	     stlmatch (inven[obj].str, "leather") && version > RV36B));
X  }
Xdiff -c1 packold/types.h packnew/types.h
X*** packold/types.h	Mon Feb 11 11:27:38 1985
X--- packnew/types.h	Sat Feb 16 23:47:22 1985
X***************
X*** 1,3
X  /*
X!  * types.h: Rog-O-Matic XIV (CMU) Wed Jan 30 14:57:17 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * types.h: Rog-O-Matic XIV (CMU) Sat Feb 16 09:44:54 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 43,44
X  
X  # define INVHIT		(1000)
X
X--- 43,45 -----
X  
X+ # define INVDAM		(16)
X  # define INVHIT		(1000)
X***************
X*** 44,45
X  # define INVHIT		(1000)
X  
X
X--- 45,48 -----
X  # define INVHIT		(1000)
X+ # define INVPRES	(INVHIT-100)
X+ # define INVLURK	(INVPRES-200)
X  
Xdiff -c1 packold/worth.c packnew/worth.c
X*** packold/worth.c	Mon Feb 11 11:27:39 1985
X--- packnew/worth.c	Sat Feb 16 23:47:23 1985
X***************
X*** 1,3
X  /*
X!  * worth.c: Rog-O-Matic XIV (CMU) Thu Jan 31 15:54:56 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X
X--- 1,3 -----
X  /*
X!  * worth.c: Rog-O-Matic XIV (CMU) Sun Feb 10 23:16:40 1985 - mlm
X   * Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
X***************
X*** 50,53
X    /* 
X!    * Armor values are based on armor class, bonus for best,
X!    * second best, or leather armor (leather doesnt rust)
X     */
X
X--- 50,53 -----
X    /* 
X!    * Armor values are based on armor class, bonus for best, second
X!    * best, third best, or leather armor (leather doesnt rust)
X     */
X***************
X*** 55,57
X    if (inven[obj].type == armor)
X!   { value = (10 - armorclass (obj)) * 90;
X      
X
X--- 55,57 -----
X    if (inven[obj].type == armor)
X!   { value = (11 - armorclass (obj)) * 120;
X      
X***************
X*** 59,60
X      else if (obj == havearmor (2, NOPRINT, ANY))	value += 1500;
X  
X
X--- 59,61 -----
X      else if (obj == havearmor (2, NOPRINT, ANY))	value += 1500;
X+     else if (obj == havearmor (3, NOPRINT, ANY))	value += 800;
X  
X***************
X*** 60,62
X  
X!     if (!willrust (obj))				value += 150;
X    }
X
X--- 61,63 -----
X  
X!     if (stlmatch (inven[obj].str, "leather"))		value += 300;
X    }
X***************
X*** 69,71
X    else if (inven[obj].type == thrower)
X!   { value = (bowclass (obj)) * 5;
X      
X
X--- 70,72 -----
X    else if (inven[obj].type == thrower)
X!   { value = (bowclass (obj));
X      
X***************
X*** 71,74
X      
X!     if (obj == havebow (1, NOPRINT)) value += 1000;
X!     else if (obj == havebow (2, NOPRINT)) value += 500;
X    }
X
X--- 72,75 -----
X      
X!     if (obj == havebow (1, NOPRINT)) value += 1500;
X!     else if (obj == havebow (2, NOPRINT)) value += 300;
X    }
X***************
X*** 79,82
X      
X!     if (obj == haveweapon (1, NOPRINT)) value += 1500;
X!     else if (obj == haveweapon (2, NOPRINT)) value += 1000;
X    }
X
X--- 80,83 -----
X      
X!     if (obj == haveweapon (1, NOPRINT)) value += 2500;
X!     else if (obj == haveweapon (2, NOPRINT)) value += 1500;
X    }
X***************
X*** 106,107
X    else if (stlmatch (inven[obj].str, "restore strength")) value = 800;
X    else if (stlmatch (inven[obj].str, "scare monster")) value = 1400;
X
X--- 107,109 -----
X    else if (stlmatch (inven[obj].str, "restore strength")) value = 800;
X+   else if (stlmatch (inven[obj].str, "gain strength")) value = 700;
X    else if (stlmatch (inven[obj].str, "scare monster")) value = 1400;
X***************
X*** 109,110
X    else if (stlmatch (inven[obj].str, "enchant")) value = 800;
X  
X
X--- 111,115 -----
X    else if (stlmatch (inven[obj].str, "enchant")) value = 800;
X+   else if (stlmatch (inven[obj].str, "extra healing")) value = 900;
X+   else if (stlmatch (inven[obj].str, "healing")) value = 750;
X+   else if (stlmatch (inven[obj].str, "protect") && !protected) value = 1000;
X  
/
echo 'Rgm XIV mods 02/16/85 - context diffs complete.'
exit