<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>slashem/doc/fr/slashem.6</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,5 @@
 #	SCCS Id: @(#)data.base	3.4	2003/07/23
-#	    $Id: data.base,v 1.14 2003/12/11 09:49:05 j_ali Exp $
+#	    $Id: data.base,v 1.14.2.2 2006/04/17 11:14:04 prousu Exp $
 #   Copyright (c) 1994, 1995, 1996 by the NetHack Development Team
 #   Copyright (c) 1994 by Boudewijn Wayers
 #   Copyright (c) 2002 by the Slash'EM Development Team
@@ -455,8 +455,9 @@ barbarian
 barbed devil
 	Barbed devils lack any real special abilities, though they
 	are quite difficult to kill.
-+~mongbat
-+~vampire bat
+~mongbat
+~vampire bat
+~wombat
 *bat
 	A bat, flitting in the darkness outside, took the wrong turn
 	as it made its nightly rounds and came in through the window
@@ -2851,7 +2852,8 @@ lord surt*
 	and harry, and overcome all the gods, and burn all the
 	world with fire.
 			[ The Prose Edda, by Snorri Sturluson ]
-lug*
+lug
+lugh
 	Lugh, or Lug, was the sun god of the Irish Celts.  One of his
 	weapons was a rod-sling which worshippers sometimes saw in
 	the sky as a rainbow.  As a tribal god, he was particularly</diff>
      <filename>slashem/dat/data.base</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,32 @@
 | Section 1: Yesterday's News |
 +-----------------------------+
 
+ver 0.0.7E7F2 [December 4/2005] [Released by Ali]
+-fixed bug 1232707: engraving with lightsabers
+-fixed bug 1237780: gtk window port fails to build with gcc-4.0
+-fixed bug 1239041: engrave dialog doesn't show lightsabers
+-fixed bug 1231766: Food shown in Medical Kits
+-fixed bug 1238060: grammatical error when burning through a door 
+		    (Benjamin Schieder)
+-fixed bug 1104713: Pet and Frozen food stores can charge
+-fixed bug 988827: Monster wearing CoI left invisible corpse
+-fixed bug 934078: Mold &quot;wiggle&quot; out of bag
+-fixed bug 933587: One-Eyed Sam referred to as &quot;it&quot;
+-fixed bug 1240794: Pets don't grow up properly
+-fixed bug 1240799: Steed ridden onto poly trap polymorphs permanently
+-fixed bug 1243904: chameleon as statue trap
+-fixed bug 1223226: Some creatures are missing horns
+-fixed bug 1223222: Female Bulls??
+-fixed bug 1244470: shopkeeper don't have shotgun
+-fixed bug 215062: no black color
+		   Extends videocolors option, see Guidebook for details.
+-fixed bug 1244468: different spitting venom when polymorph
+-fixed bug 1179557: Found egg marked (laid by you)
+-fixed bug 1206099: Torches are not extinguished with rust traps
+-fixed bug 1294907: 'Raise Zombies' technique cannot raise dwarf zombies! (Xeno)
+-fixed bug 1355972: Monsters Don't gain Drain resistance due to worn items!
+		    (Xeno)
+
 ver 0.0.7E7F1 [July 2/2005] [Released by Ali]
 -fixed bug 1155634: charm spell or command undead spell invoke genocide
 -fixed incorrect #ifdef resulting in compilation failure on ANSI only DOS builds</diff>
      <filename>slashem/history.txt</filename>
    </modified>
    <modified>
      <diff>@@ -153,7 +153,7 @@ A(&quot;Luckblade&quot;,                  SHORT_SWORD,
 	PHYS(5,5),      NO_DFNS,        NO_CARY,        0, A_NEUTRAL, NON_PM, PM_GNOME, 1000L ),
 
 A(&quot;Sword of Balance&quot;,           SILVER_SHORT_SWORD,
-	SPFX_DALIGN, 0, 0,
+	(SPFX_RESTR|SPFX_DALIGN), 0, 0,
 	PHYS(2,5),      NO_DFNS,        NO_CARY,        0, A_NEUTRAL, NON_PM, NON_PM, 5000L ),
 
 A(&quot;Frost Brand&quot;,                LONG_SWORD,</diff>
      <filename>slashem/include/artilist.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,12 +5,6 @@
 #ifndef COLOR_H
 #define COLOR_H
 
-#ifdef MENU_COLOR
-# ifdef USE_REGEX_MATCH
-#  include &lt;regex.h&gt;
-# endif  
-#endif
-
 /*
  * The color scheme used is tailored for an IBM PC.  It consists of the
  * standard 8 colors, folowed by their bright counterparts.  There are</diff>
      <filename>slashem/include/color.h</filename>
    </modified>
    <modified>
      <diff>@@ -177,10 +177,6 @@
 # define POSITIONBAR
 #endif
 
-#ifndef DEFAULT_WINDOW_SYS
-# define DEFAULT_WINDOW_SYS &quot;tty&quot;
-#endif
-
 #ifdef X11_GRAPHICS
 /*
  * There are two ways that X11 tiles may be defined.  (1) using a custom
@@ -195,6 +191,13 @@
 # ifdef USE_XPM
 #  define GRAPHIC_TOMBSTONE	/* Use graphical tombstone (rip.xpm) */
 # endif
+# ifndef DEFAULT_WINDOW_SYS
+#  define DEFAULT_WINDOW_SYS &quot;X11&quot;
+# endif
+#endif
+
+#ifndef DEFAULT_WINDOW_SYS
+# define DEFAULT_WINDOW_SYS &quot;tty&quot;
 #endif
 
 /*</diff>
      <filename>slashem/include/config.h</filename>
    </modified>
    <modified>
      <diff>@@ -2125,6 +2125,7 @@ E void NDECL(run_timers);
 E void FDECL(obj_move_timers, (struct obj *, struct obj *));
 E void FDECL(obj_split_timers, (struct obj *, struct obj *));
 E void FDECL(obj_stop_timers, (struct obj *));
+E void FDECL(mon_stop_timers, (struct monst *));
 E boolean FDECL(obj_is_local, (struct obj *));
 E void FDECL(save_timers, (int,int,int));
 E void FDECL(restore_timers, (int,int,BOOLEAN_P,long));</diff>
      <filename>slashem/include/extern.h</filename>
    </modified>
    <modified>
      <diff>@@ -176,7 +176,8 @@
 				 ((ptr) == &amp;mons[PM_FIRE_ELEMENTAL]) ? 2 : \
 				 ((ptr) == &amp;mons[PM_FIRE_VAMPIRE])? 2 : \
 				 ((ptr) == &amp;mons[PM_FLAMING_SPHERE]) ? 1 : \
-				 ((ptr) == &amp;mons[PM_SHOCKING_SPHERE]) ? 1 : 0)
+				 ((ptr) == &amp;mons[PM_SHOCKING_SPHERE]) ? 1 : \
+				 ((ptr) == &amp;mons[PM_WAX_GOLEM]) ? 1 : 0)
 /*	[note: the light ranges above were reduced to 1 for performance...] */
 /*  WAC increased to 3 and 2?*/
 #define likes_lava(ptr)		(ptr == &amp;mons[PM_FIRE_ELEMENTAL] || \</diff>
      <filename>slashem/include/mondata.h</filename>
    </modified>
    <modified>
      <diff>@@ -16,10 +16,10 @@
  */
 #define PATCHLEVEL      7
 #define EDITLEVEL	7
-#define FIXLEVEL        2
+#define FIXLEVEL        3
 
 #define COPYRIGHT_BANNER_A \
-&quot;This is SuperLotsoAddedStuffHack-Extended Magic 1997-2005&quot;
+&quot;This is SuperLotsoAddedStuffHack-Extended Magic 1997-2006&quot;
 
 #define COPYRIGHT_BANNER_B \
 &quot;NetHack, Copyright 1985-2003 Stichting Mathematisch Centrum, M. Stephenson.&quot;</diff>
      <filename>slashem/include/patchlevel.h</filename>
    </modified>
    <modified>
      <diff>@@ -423,8 +423,9 @@
 #endif	/* LINUX */
 #endif	/* GNOME_GRAPHICS */
 
-#if defined(USE_REGEX_MATCH)
-# if defined(__FreeBSD__) || defined(__OpenBSD__)
+#if defined(MENU_COLOR) &amp;&amp; defined(USE_REGEX_MATCH)
+# include &lt;regex.h&gt;
+# ifndef RE_NO_GNU_OPS
 #  define POSIX_REGEX
 # else
 #  define GNU_REGEX</diff>
      <filename>slashem/include/unixconf.h</filename>
    </modified>
    <modified>
      <diff>@@ -67,31 +67,46 @@ http://www.slashem.org/
 1.2 Changes
 -----------
 
-ver 0.0.7E7F2 [December 4/2005] [Released by Ali]
--fixed bug 1232707: engraving with lightsabers
--fixed bug 1237780: gtk window port fails to build with gcc-4.0
--fixed bug 1239041: engrave dialog doesn't show lightsabers
--fixed bug 1231766: Food shown in Medical Kits
--fixed bug 1238060: grammatical error when burning through a door 
-		    (Benjamin Schieder)
--fixed bug 1104713: Pet and Frozen food stores can charge
--fixed bug 988827: Monster wearing CoI left invisible corpse
--fixed bug 934078: Mold &quot;wiggle&quot; out of bag
--fixed bug 933587: One-Eyed Sam referred to as &quot;it&quot;
--fixed bug 1240794: Pets don't grow up properly
--fixed bug 1240799: Steed ridden onto poly trap polymorphs permanently
--fixed bug 1243904: chameleon as statue trap
--fixed bug 1223226: Some creatures are missing horns
--fixed bug 1223222: Female Bulls??
--fixed bug 1244470: shopkeeper don't have shotgun
--fixed bug 215062: no black color
-		   Extends videocolors option, see Guidebook for details.
--fixed bug 1244468: different spitting venom when polymorph
--fixed bug 1179557: Found egg marked (laid by you)
--fixed bug 1206099: Torches are not extinguished with rust traps
--fixed bug 1294907: 'Raise Zombies' technique cannot raise dwarf zombies! (Xeno)
--fixed bug 1355972: Monsters Don't gain Drain resistance due to worn items!
-		    (Xeno)
+ver 0.0.7E7F3 [December 30/2006] [Released by Ali]
+-inserted missing #ifdef resulting in compilation of pure ansi tty version for DOS failure.
+-fixed bug 1461660: Misaligned door
+-fixed bug 1449238: #youpoly takes a turn when denied
+-fixed bug 1432473: help for Luggage shows help for Lug/Lugh
+-fixed bug 1428520: Poisoned ID'd weapon gives description as well as ID
+-fixed bug 1375292: help for wombat shows text for bat
+-fixed bug 1375286: pummel strikes nothing, inside ochre jelly
+-fixed bug 1355891: Cannot wish for multiple potions of vampire blood
+-fixed bug 1314114: Shopkeepers cant see Shirts through invisible armour
+-fixed bug 1304954: You can Name the Sword of Balance
+-fixed bug 1223533: Typo error in the Install.X11 file
+-fixed bug 1407275: Wrong weight of medical kits
+-fixed bug 1213658: Death message missing with gas spore explosion when blind
+-fixed bug 1291161: #force command doesn't work on locked box
+-fixed bug 1223632: #force on shop doors
+-fixed bug 879247: gender &amp; alignment select dont focus on &quot;random&quot; button
+-fixed bug 943553: Eating off floor while levitating
+-fixed bug 1432411: Knew the colour of a potion thrown on me, when blind
+-fixed bug 1449159: DEFAULT_WINDOW_SYS wrong if only X11 enabled
+-fixed bug 1400802: wax golems don't emit light
+-fixed bug 1586216: USE_REGEX_MATCH fails on Solaris 10
+-fixed bug 1583978: Grammer error in broken celibacy message
+-fixed bug 1549137: Technique cutthroat is effective to no-head monster
+		    (Michael DiPietro)
+-fixed bug 1288590: Potion of hallucination cannot be identified by drinking
+-fixed bug 1482524: alchemy with gain level asymmetric (Michael DiPietro)
+-fixed bug 1546379: Fedora &amp; charisma (Michael DiPietro)
+-Actioned feature request 1504905: Add french translation of manual page
+		    (R&#195;&#169;mi Delrue)
+-fixed bug 1624174: koala bugs steed
+-fixed bug 1539448: rotten wraith corpses GPF
+-fixed bug 1521400: Dungeon collapsed returning to full level
+-fixed bug 1211513: Upgraded objects retain names, even artifact names
+-fixed bug 1554633: lichen, grown on a dead pet corpse, inherits pet's name
+-fixed bug 1521471: Medical kit contents can leak
+-fixed bug 1609542: Reaper + eyes of overworld
+-fixed bug 1503394: Conduct= is not always written to logfile
+-fixed bug 1558274: Light source weapons not working properly
+-fixed bug 1602002: dmonsfree when using travel command &amp; burdened
 
 See history.txt for changes made in previous versions.
 
@@ -228,7 +243,7 @@ Thanks to Kevin Hugo (hugo@cae.wisc.edu), the previous Macintosh
 maintainer and the author of many changes, who has had to move on to
 other projects.
 
-Thanks to Dirk Sch&#246;nberger (shoenberger@signsoft.com), who worked on
+Thanks to Dirk Sch&#195;&#182;nberger (shoenberger@signsoft.com), who worked on
 the Qt and Linux ports.
 
 Thanks to Ben Olmstead for mirroring the homepage.</diff>
      <filename>slashem/readme.txt</filename>
    </modified>
    <modified>
      <diff>@@ -2747,177 +2747,23 @@ struct obj *obj;
 }
 
 
-/* KMH, balance patch -- Distance attacks by pole-weapons */
-/* WAC -- Range limited by skill */
-static int
-use_pole(obj)
-	struct obj *obj;
-{
-	int res = 0, max_range = 8, min_range;
-	coord cc;
-	struct monst *mtmp;
-	struct obj *otmp;
-	boolean fishing;
-
-
-	/* Are you allowed to use the pole? */
-	if (u.uswallow) {
-		pline(&quot;There's not enough room here to use that.&quot;);
-		return (0);
-	}
-	if (obj != uwep) {
-	    if (!wield_tool(obj, &quot;swing&quot;)) return(0);
-	    else res = 1;
-	}
-
-	/* Prompt for a location */
-	pline(&quot;Where do you want to hit?&quot;);
-	cc.x = u.ux;
-	cc.y = u.uy;
-	getpos(&amp;cc, TRUE, &quot;the spot to hit&quot;);
-	if (cc.x == -10) return (0); /* user pressed esc */
-
-#ifdef WEAPON_SKILLS
-	/* WAC -- range depends on skill.  Default is 8 */
-	if (weapon_type(obj) == P_NONE) max_range = 4;
-	else if (P_SKILL(weapon_type(obj)) &lt;= P_BASIC) max_range = 4;
-	else if (P_SKILL(weapon_type(obj)) &lt;= P_SKILLED) max_range = 5;
-#endif
-	
-	min_range = ((obj-&gt;otyp == FISHING_POLE) ? 1 : 4);
-
-	if (distu(cc.x, cc.y) &gt; max_range) {
-		pline(&quot;Too far!&quot;);
-		return (res);
-	} else if (distu(cc.x, cc.y) &lt; min_range) {
-		pline(&quot;Too close!&quot;);
-		return (res);
-	} else if (!cansee(cc.x, cc.y)) {
-		You(&quot;won't hit anything if you can't see that spot.&quot;);
-		return (res);
-	}
-
-	/* What is there? */
-	mtmp = m_at(cc.x, cc.y);
-	fishing = (obj-&gt;otyp == FISHING_POLE) &amp;&amp; is_pool(cc.x, cc.y);
-
-	/* Try a random effect */
-	switch (rnd(6))
-	{
-		case 1:
-			/* Snag yourself */
-			if (obj-&gt;otyp == FISHING_POLE) {
-				You(&quot;hook yourself!&quot;);
-				losehp(rn1(10,10), &quot;a fishing hook&quot;, KILLED_BY);
-				return (1);
-			}
-			break;
-		case 2:
-			/* Reel in a fish */
-			if (fishing &amp;&amp; mtmp) {
-				if ((bigmonst(mtmp-&gt;data) || strongmonst(mtmp-&gt;data))
-						&amp;&amp; !rn2(2)) {
-					You(&quot;are yanked toward the %s&quot;,
-							surface(cc.x, cc.y));
-					hurtle(sgn(cc.x-u.ux), sgn(cc.y-u.uy), 1, TRUE);
-					return (1);
-				} else if (enexto(&amp;cc, u.ux, u.uy, 0)) {
-					You(&quot;reel in %s!&quot;, mon_nam(mtmp));
-					mtmp-&gt;mundetected = 0;
-					rloc_to(mtmp, cc.x, cc.y);
-					return (1);
-				}
-			}
-			break;
-		case 3:
-			/* Snag an existing object */
-			if (obj-&gt;otyp == FISHING_POLE &amp;&amp;
-					(otmp = level.objects[cc.x][cc.y]) !=
-					(struct obj *)0) {
-				You(&quot;snag an object from the %s!&quot;, surface(cc.x, cc.y));
-				pickup_object(otmp, 1, FALSE);
-				/* If pickup fails, leave it alone */
-				newsym(cc.x, cc.y);
-				return (1);
-			}
-			break;
-		case 4:
-			/* Snag some garbage */
-			if (fishing &amp;&amp; flags.boot_count &lt; 1 &amp;&amp;
-					(otmp = mksobj(LOW_BOOTS, TRUE, FALSE)) !=
-					(struct obj *)0) {
-				flags.boot_count++;
-				You(&quot;snag some garbage from the %s!&quot;,
-						surface(cc.x, cc.y));
-				if (pickup_object(otmp, 1, FALSE) &lt;= 0) {
-					obj_extract_self(otmp);
-					place_object(otmp, u.ux, u.uy);
-					newsym(u.ux, u.uy);
-				}
-				return (1);
-			}
-#ifdef SINKS
-			/* Or a rat in the sink/toilet */
-			if (obj-&gt;otyp == FISHING_POLE &amp;&amp;
-					!(mvitals[PM_SEWER_RAT].mvflags &amp; G_GONE) &amp;&amp;
-					(IS_SINK(levl[cc.x][cc.y].typ) ||
-					IS_TOILET(levl[cc.x][cc.y].typ))) {
-				mtmp = makemon(&amp;mons[PM_SEWER_RAT],
-						cc.x, cc.y, NO_MM_FLAGS);
-				pline(&quot;Eek!  There's %s there!&quot;,
-					Blind ? &quot;something squirmy&quot; :
-					a_monnam(mtmp));
-				return (1);
-			}
-#endif
-			break;
-		case 5:
-			/* Catch your dinner */
-			if (fishing &amp;&amp;
-					(otmp = mksobj(CRAM_RATION, TRUE, FALSE)) !=
-					(struct obj *)0) {
-				You(&quot;catch tonight's dinner!&quot;);
-				if (pickup_object(otmp, 1, FALSE) &lt;= 0) {
-					obj_extract_self(otmp);
-					place_object(otmp, u.ux, u.uy);
-					newsym(u.ux, u.uy);
-				}
-				return (1);
-			}
-			break;
-		default:
-		case 6:
-			/* Untrap */
-			/* FIXME -- needs to deal with non-adjacent traps */
-			break;
-	}
-
-	/* The effect didn't apply.  Attack whatever is there. */
-	if (mtmp) {
-		(void) thitmonst(mtmp, uwep, 1);
-		return (1);
-	}
-
-	pline(nothing_happens);
-	return (1);
-}
-
-
 static const char
 	not_enough_room[] = &quot;There's not enough room here to use that.&quot;,
 	where_to_hit[] = &quot;Where do you want to hit?&quot;,
 	cant_see_spot[] = &quot;won't hit anything if you can't see that spot.&quot;,
 	cant_reach[] = &quot;can't reach that spot from here.&quot;;
 
-#if 0
 /* Distance attacks by pole-weapons */
 STATIC_OVL int
 use_pole (obj)
 	struct obj *obj;
 {
-	int res = 0, typ, max_range = 4, min_range = 4;
+	int res = 0, typ, max_range;
+	int min_range = obj-&gt;otyp == FISHING_POLE ? 1 : 4;
 	coord cc;
 	struct monst *mtmp;
+	struct obj *otmp;
+	boolean fishing;
 
 
 	/* Are you allowed to use the pole? */
@@ -2929,7 +2775,6 @@ use_pole (obj)
 	    if (!wield_tool(obj, &quot;swing&quot;)) return(0);
 	    else res = 1;
 	}
-     /* assert(obj == uwep); */
 
 	/* Prompt for a location */
 	pline(where_to_hit);
@@ -2938,11 +2783,16 @@ use_pole (obj)
 	if (getpos(&amp;cc, TRUE, &quot;the spot to hit&quot;) &lt; 0)
 	    return 0;	/* user pressed ESC */
 
+#ifdef WEAPON_SKILLS
 	/* Calculate range */
-	typ = uwep_skill_type();
+	typ = weapon_type(obj);
 	if (typ == P_NONE || P_SKILL(typ) &lt;= P_BASIC) max_range = 4;
-	else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
+	else if (P_SKILL(typ) &lt;= P_SKILLED) max_range = 5;
 	else max_range = 8;
+#else
+	max_range = 8;
+#endif
+
 	if (distu(cc.x, cc.y) &gt; max_range) {
 	    pline(&quot;Too far!&quot;);
 	    return (res);
@@ -2957,13 +2807,98 @@ use_pole (obj)
 	} else if (!couldsee(cc.x, cc.y)) { /* Eyes of the Overworld */
 	    You(cant_reach);
 	    return res;
-	} else if (!couldsee(cc.x, cc.y)) { /* Eyes of the Overworld */
-	    You(cant_reach);
-	    return res;
 	}
 
-	/* Attack the monster there */
-	if ((mtmp = m_at(cc.x, cc.y)) != (struct monst *)0) {
+	/* What is there? */
+	mtmp = m_at(cc.x, cc.y);
+
+	if (obj-&gt;otyp == FISHING_POLE) {
+	    fishing = is_pool(cc.x, cc.y);
+	    /* Try a random effect */
+	    switch (rnd(6))
+	    {
+		case 1:
+		    /* Snag yourself */
+		    You(&quot;hook yourself!&quot;);
+		    losehp(rn1(10,10), &quot;a fishing hook&quot;, KILLED_BY);
+		    return 1;
+		case 2:
+		    /* Reel in a fish */
+		    if (mtmp) {
+			if ((bigmonst(mtmp-&gt;data) || strongmonst(mtmp-&gt;data))
+				&amp;&amp; !rn2(2)) {
+			    You(&quot;are yanked toward the %s&quot;, surface(cc.x,cc.y));
+			    hurtle(sgn(cc.x-u.ux), sgn(cc.y-u.uy), 1, TRUE);
+			    return 1;
+			} else if (enexto(&amp;cc, u.ux, u.uy, 0)) {
+			    You(&quot;reel in %s!&quot;, mon_nam(mtmp));
+			    mtmp-&gt;mundetected = 0;
+			    rloc_to(mtmp, cc.x, cc.y);
+			    return 1;
+			}
+		    }
+		    break;
+		case 3:
+		    /* Snag an existing object */
+		    if ((otmp = level.objects[cc.x][cc.y]) != (struct obj *)0) {
+			You(&quot;snag an object from the %s!&quot;, surface(cc.x, cc.y));
+			pickup_object(otmp, 1, FALSE);
+			/* If pickup fails, leave it alone */
+			newsym(cc.x, cc.y);
+			return 1;
+		    }
+		    break;
+		case 4:
+		    /* Snag some garbage */
+		    if (fishing &amp;&amp; flags.boot_count &lt; 1 &amp;&amp;
+			    (otmp = mksobj(LOW_BOOTS, TRUE, FALSE)) !=
+			    (struct obj *)0) {
+			flags.boot_count++;
+			You(&quot;snag some garbage from the %s!&quot;,
+				surface(cc.x, cc.y));
+			if (pickup_object(otmp, 1, FALSE) &lt;= 0) {
+			    obj_extract_self(otmp);
+			    place_object(otmp, u.ux, u.uy);
+			    newsym(u.ux, u.uy);
+			}
+			return 1;
+		    }
+#ifdef SINKS
+		    /* Or a rat in the sink/toilet */
+		    if (!(mvitals[PM_SEWER_RAT].mvflags &amp; G_GONE) &amp;&amp;
+			    (IS_SINK(levl[cc.x][cc.y].typ) ||
+			    IS_TOILET(levl[cc.x][cc.y].typ))) {
+			mtmp = makemon(&amp;mons[PM_SEWER_RAT], cc.x, cc.y,
+				NO_MM_FLAGS);
+			pline(&quot;Eek!  There's %s there!&quot;,
+				Blind ? &quot;something squirmy&quot; : a_monnam(mtmp));
+			return 1;
+		    }
+#endif
+		    break;
+		case 5:
+		    /* Catch your dinner */
+		    if (fishing &amp;&amp; (otmp = mksobj(CRAM_RATION, TRUE, FALSE)) !=
+			    (struct obj *)0) {
+			You(&quot;catch tonight's dinner!&quot;);
+			if (pickup_object(otmp, 1, FALSE) &lt;= 0) {
+			    obj_extract_self(otmp);
+			    place_object(otmp, u.ux, u.uy);
+			    newsym(u.ux, u.uy);
+			}
+			return 1;
+		    }
+		    break;
+		default:
+		case 6:
+		    /* Untrap */
+		    /* FIXME -- needs to deal with non-adjacent traps */
+		    break;
+	    }
+	}
+
+	/* The effect didn't apply.  Attack the monster there. */
+	if (mtmp) {
 	    int oldhp = mtmp-&gt;mhp;
 
 	    bhitpos = cc;
@@ -2980,7 +2915,6 @@ use_pole (obj)
 	    pline(nothing_happens);
 	return (1);
 }
-#endif
 
 STATIC_OVL int
 use_cream_pie(obj)
@@ -3679,9 +3613,10 @@ doapply()
 			  yname(obj));
 		    else {
 			check_unpaid(obj);
-			if (otmp-&gt;quan &gt; 1L)
+			if (otmp-&gt;quan &gt; 1L) {
 			    otmp-&gt;quan--;
-			else {
+			    obj-&gt;owt = weight(obj);
+			} else {
 			    obj_extract_self(otmp);
 			    obfree(otmp, (struct obj *)0);
 			}</diff>
      <filename>slashem/src/apply.c</filename>
    </modified>
    <modified>
      <diff>@@ -322,17 +322,14 @@ register boolean mod;
 	    for (a = artilist+1; a-&gt;otyp; a++)
 		if (a-&gt;otyp == otmp-&gt;otyp &amp;&amp; !strcmp(a-&gt;name, name)) {
 		    register int m = a - artilist;
-/*WAC add code to automatically light up Sunsword/holy spear of light on
-        creation*/
-		    /* For the check so artifact_light recognizes it */
-		    otmp-&gt;oartifact = m;
-		    if (!artiexist[m] &amp;&amp; mod &amp;&amp; (artifact_light(otmp) ||
-						 otmp-&gt;otyp == MAGIC_CANDLE)) {
-			begin_burn(otmp, FALSE);
-			/* WAC light source deletion handled in obfree */
-		    }
 		    otmp-&gt;oartifact = (char)(mod ? m : 0);
 		    if (mod) {
+			/* Light up Candle of Eternal Flame and
+			 * Holy Spear of Light on creation.
+			 */
+			if (!artiexist[m] &amp;&amp; artifact_light(otmp) &amp;&amp;
+			  otmp-&gt;oartifact != ART_SUNSWORD)
+			    begin_burn(otmp, FALSE);
 			otmp-&gt;quan = 1; /* guarantee only one of this artifact */
 #ifdef UNPOLYPILE	/* Artifacts are immune to unpolypile --ALI */
 			if (is_hazy(otmp)) {
@@ -1561,107 +1558,102 @@ arti_invoke(obj)
 	case LEV_TELE:
 	    level_tele();
 	    break;
-	/* STEPHEN WHITE'S NEW CODE */       
 	case LIGHT_AREA:
 	    if (!Blind)
-			pline(&quot;%s shines brightly for an instant!&quot;, The(xname(obj)));
+		pline(&quot;%s shines brightly for an instant!&quot;, The(xname(obj)));
 	    else
-			pline(&quot;%s grows warm for a second!&quot;, The(xname(obj)));
-
-	    litroom(TRUE, obj); /* Light up the room */
-
-	    vision_recalc(0); /*clean up vision*/
-
-		/* WAC - added effect to self, damage is now range dependant */
-		if(is_undead(youmonst.data)) {
-			You(&quot;burn in the radiance!&quot;);
-			
-			/* This is ground zero.  Not good news ... */
-			u.uhp /= 100;
-
-			if (u.uhp &lt; 1) {
-				u.uhp = 0;
-				killer_format = KILLED_BY;
-				killer = &quot;the Holy Spear of Light&quot;;
-				done(DIED);
-			}
+		pline(&quot;%s grows warm for a second!&quot;, The(xname(obj)));
+	    litroom(TRUE, obj);
+	    vision_recalc(0);
+	    if (is_undead(youmonst.data)) {
+		You(&quot;burn in the radiance!&quot;);
+		/* This is ground zero.  Not good news ... */
+		u.uhp /= 100;
+		if (u.uhp &lt; 1) {
+		    u.uhp = 0;
+		    killer_format = KILLED_BY;
+		    killer = &quot;the Holy Spear of Light&quot;;
+		    done(DIED);
 		}
-
+	    }
 	    /* Undead and Demonics can't stand the light */
 	    unseen = 0;
 	    for (mtmp = fmon; mtmp; mtmp = mtmp-&gt;nmon) {
-			if (DEADMONSTER(mtmp)) continue;
-	    	
-			/* Range is 9 paces */
-	    	if (distu(mtmp-&gt;mx,mtmp-&gt;my) &gt; 81) continue;
-
-			if (couldsee(mtmp-&gt;mx, mtmp-&gt;my) &amp;&amp;
-				(is_undead(mtmp-&gt;data) || is_demon(mtmp-&gt;data)) &amp;&amp;
-				!resist(mtmp, '\0', 0, TELL)) {
-					if (canseemon(mtmp))
-						pline(&quot;%s burns in the radiance!&quot;, Monnam(mtmp));
-					else
-						unseen++;
-					/* damage now depends on distance, divisor ranges from 10 to 2 */
-					mtmp-&gt;mhp /= (10 - (distu(mtmp-&gt;mx,mtmp-&gt;my)/10));
-					if (mtmp-&gt;mhp &lt; 1) mtmp-&gt;mhp = 1;
-			}
+		if (DEADMONSTER(mtmp)) continue;
+	    	if (distu(mtmp-&gt;mx, mtmp-&gt;my) &gt; 9*9) continue;
+		if (couldsee(mtmp-&gt;mx, mtmp-&gt;my) &amp;&amp;
+			(is_undead(mtmp-&gt;data) || is_demon(mtmp-&gt;data)) &amp;&amp;
+			!resist(mtmp, '\0', 0, TELL)) {
+		    if (canseemon(mtmp))
+			pline(&quot;%s burns in the radiance!&quot;, Monnam(mtmp));
+		    else
+			unseen++;
+		    /* damage depends on distance, divisor ranges from 10 to 2 */
+		    mtmp-&gt;mhp /= (10 - (distu(mtmp-&gt;mx, mtmp-&gt;my) / 10));
+		    if (mtmp-&gt;mhp &lt; 1) mtmp-&gt;mhp = 1;
+		}
 	    }
 	    if (unseen)
-			You(&quot;hear %s of intense pain!&quot;, unseen &gt; 1 ? &quot;cries&quot; : &quot;a cry&quot;);
+		You_hear(&quot;%s of intense pain!&quot;, unseen &gt; 1 ? &quot;cries&quot; : &quot;a cry&quot;);
 	    break;
 	case DEATH_GAZE:
-	    if (u.uluck &lt; -9) { /* uh oh... */
-			pline(&quot;The Eye turns on you!&quot;);
-			u.uhp = 0;
-			killer_format = KILLED_BY;
-			killer = &quot;the Eye of the Beholder&quot;;
-			done(DIED);
+	    if (u.uluck &lt; -9) {
+		pline_The(&quot;Eye turns on you!&quot;);
+		u.uhp = 0;
+		killer_format = KILLED_BY;
+		killer = &quot;the Eye of the Beholder&quot;;
+		done(DIED);
 	    }
-	    pline(&quot;The Eye looks around with its icy gaze!&quot;);
-		for (mtmp = fmon; mtmp; mtmp = mtmp2) {
-			mtmp2 = mtmp-&gt;nmon;
-			/* The eye is never blind ... */
-			if (couldsee(mtmp-&gt;mx, mtmp-&gt;my) &amp;&amp; !is_undead(mtmp-&gt;data)) {
-				pline(&quot;%s screams in agony!&quot;,Monnam(mtmp));
-				mtmp-&gt;mhp /= 3;
-				if (mtmp-&gt;mhp &lt; 1) mtmp-&gt;mhp = 1;
-			}
+	    pline_The(&quot;Eye looks around with its icy gaze!&quot;);
+	    for (mtmp = fmon; mtmp; mtmp = mtmp-&gt;nmon) {
+		if (DEADMONSTER(mtmp)) continue;
+		/* The eye is never blind ... */
+		if (couldsee(mtmp-&gt;mx, mtmp-&gt;my) &amp;&amp; !is_undead(mtmp-&gt;data)) {
+		    pline(&quot;%s screams in agony!&quot;, Monnam(mtmp));
+		    mtmp-&gt;mhp /= 3;
+		    if (mtmp-&gt;mhp &lt; 1) mtmp-&gt;mhp = 1;
 		}
+	    }
 	    /* Tsk,tsk.. */
 	    adjalign(-3);
 	    u.uluck -= 3;
 	    break;
 	case SUMMON_UNDEAD:
-	    if (u.uluck &lt; -9) { /* uh oh... */
-		u.uhp -= (rn2(20)+5);
-		pline(&quot;The Hand claws you with its icy nails!&quot;);
+	    if (u.uluck &lt; -9) {
+		u.uhp -= rn2(20) + 5;
+		pline_The(&quot;Hand claws you with its icy nails!&quot;);
 		if (u.uhp &lt;= 0) {
-		  killer_format = KILLED_BY;
-		  killer=&quot;the Hand of Vecna&quot;;
-		  done(DIED);
+		    killer_format = KILLED_BY;
+		    killer=&quot;the Hand of Vecna&quot;;
+		    done(DIED);
 		}
 	    }
 	    summon_loop = rn2(4) + 4;
 	    pline(&quot;Creatures from the grave surround you!&quot;);
 	    do {
-	      switch (rn2(6)+1) {
-		case 1: mtmp = makemon(mkclass(S_VAMPIRE,0), u.ux, u.uy, NO_MM_FLAGS);
-		   break;
-		case 2:
-		case 3: mtmp = makemon(mkclass(S_ZOMBIE,0), u.ux, u.uy, NO_MM_FLAGS);
-		   break;
-		case 4: mtmp = makemon(mkclass(S_MUMMY,0), u.ux, u.uy, NO_MM_FLAGS);
-		   break;
-		case 5: mtmp = makemon(mkclass(S_GHOST,0), u.ux, u.uy, NO_MM_FLAGS);
-		   break;
-               default: mtmp = makemon(mkclass(S_WRAITH,0), u.ux, u.uy, NO_MM_FLAGS);
-		   break;
-	      }
-	      if ((mtmp2 = tamedog(mtmp, (struct obj *)0)) != 0)
-			mtmp = mtmp2;
-	      mtmp-&gt;mtame = 30;
-	      summon_loop--;
+		switch (rn2(6) + 1) {
+		    case 1:
+			pm = mkclass(S_VAMPIRE, 0);
+			break;
+		    case 2:
+		    case 3:
+			pm = mkclass(S_ZOMBIE, 0);
+			break;
+		    case 4:
+			pm = mkclass(S_MUMMY, 0);
+			break;
+		    case 5:
+			pm = mkclass(S_GHOST, 0);
+			break;
+		    default:
+			pm = mkclass(S_WRAITH, 0);
+			break;
+		}
+		mtmp = makemon(pm, u.ux, u.uy, NO_MM_FLAGS);
+	        if ((mtmp2 = tamedog(mtmp, (struct obj *)0)) != 0)
+		    mtmp = mtmp2;
+		mtmp-&gt;mtame = 30;
+		summon_loop--;
 	    } while (summon_loop);
 	    /* Tsk,tsk.. */
 	    adjalign(-3);
@@ -1882,8 +1874,9 @@ boolean
 artifact_light(obj)
     struct obj *obj;
 {
-    return get_artifact(obj) &amp;&amp; (get_artifact(obj)-&gt;inv_prop == LIGHT_AREA
-        || obj-&gt;oartifact == ART_CANDLE_OF_ETERNAL_FLAME);
+    return get_artifact(obj) &amp;&amp; (obj-&gt;oartifact == ART_SUNSWORD ||
+	    obj-&gt;oartifact == ART_HOLY_SPEAR_OF_LIGHT ||
+	    obj-&gt;oartifact == ART_CANDLE_OF_ETERNAL_FLAME);
 }
 
 /* KMH -- Talking artifacts are finally implemented */</diff>
      <filename>slashem/src/artifact.c</filename>
    </modified>
    <modified>
      <diff>@@ -2044,12 +2044,12 @@ int final;
 
 
 	if (!u.uconduct.celibacy)
-		you_have_X(&quot;remained celibate&quot;);
+	    you_have_X(&quot;remained celibate&quot;);
 #ifdef WIZARD
 	else if (wizard) {
-		Sprintf(buf, &quot;broken your vow of celibacy %ld time%s.&quot;,
-			u.uconduct.celibacy, u.uconduct.celibacy &gt; 1 ? &quot;s&quot; : &quot;&quot;);
-		you_have_X(buf);
+	    Sprintf(buf, &quot;your vow of celibacy %ld time%s&quot;,
+		    u.uconduct.celibacy, plur(u.uconduct.celibacy));
+	    enl_msg(You_, &quot;have broken &quot;, &quot;broke &quot;, buf);
 	}
 #endif
 </diff>
      <filename>slashem/src/cmd.c</filename>
    </modified>
    <modified>
      <diff>@@ -1670,11 +1670,12 @@ moldy_corpse(arg, timeout)
 genericptr_t arg;
 long timeout;
 {
-    int pmtype, oldtyp, oldquan;
+    int pmtype, oldtyp, oldquan, oldnamelth;
     struct obj *body = (struct obj *) arg;
 
     /* Turn the corpse into a mold corpse if molds are available */
     oldtyp = body-&gt;corpsenm;
+    oldnamelth = body-&gt;onamelth;
 
     /* Weight towards non-motile fungi.
      */
@@ -1697,6 +1698,7 @@ long timeout;
 	    pmtype = -1; /* cantcreate might have changed it so change it back */
     	else {
 	    	body-&gt;corpsenm = pmtype;
+		body-&gt;onamelth = 0;	/* Molds shouldn't be named */
 
 		/* oeaten isn't used for hp calc here, and zeroing it 
 		 * prevents eaten_stat() from worrying when you've eaten more
@@ -1733,6 +1735,7 @@ long timeout;
      */
     if (body) {
     	body-&gt;corpsenm = oldtyp; /* Fixup corpse after (attempted) revival */
+	body-&gt;onamelth = oldnamelth;
 	body-&gt;owt = weight(body);
 	(void) start_timer(250L - (monstermoves-peek_at_iced_corpse_age(body)),
 					TIMER_OBJECT, ROT_CORPSE, arg);</diff>
      <filename>slashem/src/do.c</filename>
    </modified>
    <modified>
      <diff>@@ -308,6 +308,7 @@ Helmet_on()
     switch(uarmh-&gt;otyp) {
 	case FEDORA:
 		set_moreluck();
+		flags.botl = 1;
 		break;
 	case HELMET:
 	case DENTED_POT:
@@ -372,6 +373,7 @@ Helmet_off()
 	case FEDORA:
 	    setworn((struct obj *)0, W_ARMH);
 	    set_moreluck();
+	    flags.botl = 1;
 	    return 0;
 	case HELMET:
 	case DENTED_POT:</diff>
      <filename>slashem/src/do_wear.c</filename>
    </modified>
    <modified>
      <diff>@@ -1612,7 +1612,7 @@ eatcorpse(otmp)		/* called when a corpse is selected as food */
 	    }
 		    
 	    if (!retcode) consume_oeaten(otmp, 2);	/* oeaten &gt;&gt;= 2 */
-	    if (otmp-&gt;odrained &amp;&amp; otmp-&gt;oeaten &lt; drainlevel(otmp))
+	    if (retcode&lt;2 &amp;&amp; otmp-&gt;odrained &amp;&amp; otmp-&gt;oeaten &lt; drainlevel(otmp))
 	        otmp-&gt;oeaten = drainlevel(otmp);
 	} else if (!is_vampire(youmonst.data)) {
 	    pline(&quot;%s%s %s!&quot;,</diff>
      <filename>slashem/src/eat.c</filename>
    </modified>
    <modified>
      <diff>@@ -1203,7 +1203,10 @@ register const char *let,*word;
 			pline(silly_thing_to, word);
 			return(struct obj *)0;
 		    } else if (!allowfloor) {
-			pline(&quot;There's nothing here to %s.&quot;, word);
+			if ((Levitation || Flying))
+				You(&quot;cannot reach the floor to %s while %sing.&quot;, word, Levitation ? &quot;float&quot; : &quot;fly&quot;);
+			else
+				pline(&quot;There's nothing here to %s.&quot;, word);
 			return(struct obj *)0;
 		    }
 		    Sprintf(qbuf, &quot;%s what?&quot;, word);</diff>
      <filename>slashem/src/invent.c</filename>
    </modified>
    <modified>
      <diff>@@ -514,9 +514,7 @@ obj_sheds_light(obj)
     struct obj *obj;
 {
     /* so far, only burning objects shed light */
-    /* WAC - Some artifacts now shed light */
-
-    return (obj_is_burning(obj) || obj_permanent_light(obj));
+    return obj_is_burning(obj);
 }
 
 /* Return TRUE if sheds light AND will be snuffed by end_burn(). */
@@ -534,17 +532,6 @@ obj_is_burning(obj)
 		|| artifact_light(obj)));
 }
 
-/* WAC Return TRUE if object always lights up
- * Currently only artifacts have this property
- */
-boolean
-obj_permanent_light(obj)
-    struct obj *obj;
-{
-    return ((obj-&gt;lamplit) &amp;&amp;
-        (artifact_light(obj)));
-}
-
 /* copy the light source(s) attachted to src, and attach it/them to dest */
 void
 obj_split_light_source(src, dest)</diff>
      <filename>slashem/src/light.c</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@ boolean
 picking_lock(x, y)
 	int *x, *y;
 {
-	if (occupation == picklock) {
+	if (occupation == picklock || occupation == forcedoor) {
 	    *x = u.ux + u.dx;
 	    *y = u.uy + u.dy;
 	    return TRUE;
@@ -259,9 +259,33 @@ forcedoor()      /* try to break/pry open a door */
 	    xlock.door-&gt;doormask = D_BROKEN;
 	else xlock.door-&gt;doormask = D_NODOOR;
 	unblock_point(u.ux+u.dx, u.uy+u.dy);
-	if (*in_rooms(u.ux+u.dx, u.uy+u.dy, SHOPBASE))
-	    add_damage(u.ux+u.dx, u.uy+u.dy, 0L);
-	newsym(u.ux+u.dx, u.uy+u.dy);
+	if (*in_rooms(u.ux+u.dx, u.uy+u.dy, SHOPBASE)) {
+	    add_damage(u.ux+u.dx, u.uy+u.dy, 400L);
+	    pay_for_damage(&quot;break&quot;, FALSE);
+
+	    if (in_town(u.ux+u.dx, u.uy+u.dy)) {
+		struct monst *mtmp;
+		for(mtmp = fmon; mtmp; mtmp = mtmp-&gt;nmon) {
+		    if (DEADMONSTER(mtmp)) continue;
+		    if((mtmp-&gt;data == &amp;mons[PM_WATCHMAN] ||
+			mtmp-&gt;data == &amp;mons[PM_WATCH_CAPTAIN]) &amp;&amp;
+			couldsee(mtmp-&gt;mx, mtmp-&gt;my) &amp;&amp;
+			mtmp-&gt;mpeaceful) {
+			if (canspotmon(mtmp))
+			    pline(&quot;%s yells:&quot;, Amonnam(mtmp));
+			else
+			    You_hear(&quot;someone yell:&quot;);
+			verbalize(&quot;Halt, thief!  You're under arrest!&quot;);
+			(void) angry_guards(FALSE);
+			break;
+		    }
+		}
+	    }
+	}
+	if (Blind)
+	    feel_location(u.ux+u.dx, u.uy+u.dy);    /* we know we broke it */
+	else
+	    newsym(u.ux+u.dx, u.uy+u.dy);
 	
 	exercise(A_STR, TRUE);
 	return((xlock.usedtime = 0));
@@ -598,9 +622,13 @@ doforce()		/* try to force a chest with your weapon */
 	picktyp = is_blade(uwep) ? 1 : 0;
 	if(xlock.usedtime &amp;&amp; picktyp == xlock.picktyp) {
 	    if (xlock.box) {
-	    You(&quot;resume your attempt to force the lock.&quot;);
-	    set_occupation(forcelock, &quot;forcing the lock&quot;, 0);
-	    return(1);
+		if (!can_reach_floor()) {
+		    pline(&quot;Unfortunately, you can no longer reach the lock.&quot;);
+		    return 0;
+		}
+		You(&quot;resume your attempt to force the lock.&quot;);
+		set_occupation(forcelock, &quot;forcing the lock&quot;, 0);
+		return(1);
 	    } else if (xlock.door) {
 		You(&quot;resume your attempt to force the door.&quot;);
 		set_occupation(forcedoor, &quot;forcing the door&quot;, 0);
@@ -615,9 +643,27 @@ doforce()		/* try to force a chest with your weapon */
 
 	x = u.ux + u.dx;
 	y = u.uy + u.dy;
-	if (x == u.ux &amp;&amp; y == u.uy &amp;&amp; !u.dz) {
-	for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp-&gt;nexthere)
-	    if(Is_box(otmp)) {
+	if (x == u.ux &amp;&amp; y == u.uy) {
+	    if (u.dz &lt; 0) {
+		There(&quot;isn't any sort of lock up %s.&quot;,
+		      Levitation ? &quot;here&quot; : &quot;there&quot;);
+		return 0;
+	    } else if (is_lava(u.ux, u.uy)) {
+		pline(&quot;Doing that would probably melt your %s.&quot;,
+		      xname(uwep));
+		return 0;
+	    } else if (is_pool(u.ux, u.uy) &amp;&amp; !Underwater) {
+		pline_The(&quot;water has no lock.&quot;);
+		return 0;
+	    }
+
+	    for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp-&gt;nexthere)
+		if(Is_box(otmp)) {
+		    if (!can_reach_floor()) {
+			You_cant(&quot;reach %s from up here.&quot;, the(xname(otmp)));
+		    return 0;
+		    }
+
 		if (otmp-&gt;obroken || !otmp-&gt;olocked) {
 		    There(&quot;is %s here, but its lock is already %s.&quot;,
 			  doname(otmp), otmp-&gt;obroken ? &quot;broken&quot; : &quot;unlocked&quot;);</diff>
      <filename>slashem/src/lock.c</filename>
    </modified>
    <modified>
      <diff>@@ -1772,6 +1772,8 @@ physical:
 			!(mdef-&gt;data-&gt;geno &amp; G_UNIQ) &amp;&amp;
 			(magr-&gt;mtame || mdef-&gt;mtame)) {
 		    if (vis) pline(&quot;%s looks calmer.&quot;, Monnam(mdef));
+		    if (mdef == u.usteed)
+			dismount_steed(DISMOUNT_THROWN);
 		    mdef-&gt;mpeaceful = 1;
 		    mdef-&gt;mtame = 0;
 		    tmp = 0;</diff>
      <filename>slashem/src/mhitm.c</filename>
    </modified>
    <modified>
      <diff>@@ -1168,7 +1168,7 @@ hitmu(mtmp, mattk)
 			}
 
 			if (otmp-&gt;opoisoned) {
-			    poisoned(obj_typename(otmp-&gt;otyp), A_STR,
+			    poisoned(simple_typename(otmp-&gt;otyp), A_STR,
 				    killer_xname(otmp), 10);
 			    if (nopoison &lt; 2) nopoison = 2;
 			    if (!rn2(nopoison)) {</diff>
      <filename>slashem/src/mhitu.c</filename>
    </modified>
    <modified>
      <diff>@@ -913,6 +913,8 @@ meatobj(mtmp)		/* for gelatinous cubes */
 		    mtmp-&gt;mhp += objects[otmp-&gt;otyp].oc_weight;
 		    if (mtmp-&gt;mhp &gt; mtmp-&gt;mhpmax) mtmp-&gt;mhp = mtmp-&gt;mhpmax;
 		}
+		if (otmp-&gt;otyp == MEDICAL_KIT)
+		    delete_contents(otmp);
 		if (Has_contents(otmp)) {
 		    register struct obj *otmp3;
 		    /* contents of eaten containers become engulfed; this
@@ -1504,6 +1506,7 @@ m_detach(mtmp, mptr)
 struct monst *mtmp;
 struct permonst *mptr;	/* reflects mtmp-&gt;data _prior_ to mtmp's death */
 {
+	mon_stop_timers(mtmp);
 	if (mtmp-&gt;mleashed) m_unleash(mtmp, FALSE);
 	    /* to prevent an infinite relobj-flooreffects-hmon-killed loop */
 	mtmp-&gt;mtrapped = 0;
@@ -1728,8 +1731,6 @@ boolean was_swallowed;			/* digestion */
 	/* Gas spores always explode upon death */
 	for(i = 0; i &lt; NATTK; i++) {
 	    if (mdat-&gt;mattk[i].aatyp == AT_BOOM) {
-	    	char buf[BUFSZ];
-
 	    	if (mdat-&gt;mattk[i].damn)
 	    	    tmp = d((int)mdat-&gt;mattk[i].damn,
 	    	    		(int)mdat-&gt;mattk[i].damd);
@@ -1759,8 +1760,8 @@ boolean was_swallowed;			/* digestion */
 		    return FALSE;
 		}
 
-	    	Sprintf(buf, &quot;%s explosion&quot;, s_suffix(mdat-&gt;mname));
-	    	killer = buf;
+	    	Sprintf(killer_buf, &quot;%s explosion&quot;, s_suffix(mdat-&gt;mname));
+	    	killer = killer_buf;
 	    	killer_format = KILLED_BY_AN;
 	    	explode(mon-&gt;mx, mon-&gt;my, -1, tmp, MON_EXPLODE, EXPL_NOXIOUS); 
 	    	return (FALSE);</diff>
      <filename>slashem/src/mon.c</filename>
    </modified>
    <modified>
      <diff>@@ -100,7 +100,7 @@ struct monst *mon;
 	return FALSE;
 }
 
-/* TRUE iff monster is resistant to light-induced blindness */
+/* TRUE if monster is resistant to light-induced blindness */
 boolean
 resists_blnd(mon)
 struct monst *mon;</diff>
      <filename>slashem/src/mondata.c</filename>
    </modified>
    <modified>
      <diff>@@ -3492,7 +3492,7 @@ struct permonst _mons2[] = {
 	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
 	SIZ(400, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0,
 	M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID,
-	M2_HOSTILE|M2_NEUTER, 0, CLR_GRAY),
+	M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_GRAY),
     MON(&quot;plastic golem&quot;, S_GOLEM,
 	LVL(4, 12, 9, 0, 0), (G_NOCORPSE|1),
 	A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3),</diff>
      <filename>slashem/src/monst.c</filename>
    </modified>
    <modified>
      <diff>@@ -2259,6 +2259,7 @@ boolean from_user;
          &amp;&amp; !strstri(bp, &quot;medallion &quot;)
          &amp;&amp; !strstri(bp, &quot;stake &quot;)
          &amp;&amp; !strstri(bp, &quot;potion &quot;)
+         &amp;&amp; !strstri(bp, &quot;potions &quot;)
 	 &amp;&amp; !strstri(bp, &quot;finger &quot;)) {
 	    if ((p = strstri(bp, &quot; of &quot;)) != 0
 		&amp;&amp; (mntmp = name_to_mon(p+4)) &gt;= LOW_PM)
@@ -2997,7 +2998,9 @@ typfnd:
 		    nname[n] = (nname[n] == c1) ? c2 : highc(c2);  /* keep same case */
 		}
 # endif
+		place_object(otmp, u.ux, u.uy);/* make it viable light source */
 		otmp = oname(otmp, nname);
+		obj_extract_self(otmp);	 /* now release it for caller's use */
 		if (otmp-&gt;oartifact) {
 			otmp-&gt;quan = 1L;
 			u.uconduct.wisharti++;	/* KMH, conduct */
@@ -3054,7 +3057,7 @@ typfnd:
 		/* (do this adjustment before setting up object's weight) */
 		consume_oeaten(otmp, 1);
 	}
-	if (isdrained &amp;&amp; otmp-&gt;otyp == CORPSE) {
+	if (isdrained &amp;&amp; otmp-&gt;otyp == CORPSE &amp;&amp; mons[otmp-&gt;corpsenm].cnutrit) {
 		int amt;
 		otmp-&gt;odrained = 1;
 		amt = mons[otmp-&gt;corpsenm].cnutrit - drainlevel(otmp);</diff>
      <filename>slashem/src/objnam.c</filename>
    </modified>
    <modified>
      <diff>@@ -1647,9 +1647,6 @@ polyatwill()      /* Polymorph under conscious control (#youpoly) */
 			  (uarm &amp;&amp; uarm-&gt;otyp == WHITE_DRAGON_SCALE_MAIL 
 				&amp;&amp; Role_if(PM_ICE_MAGE)));
 
-	/* Set to TRUE when you can polyatwill but choose not to */
-	boolean can_polyatwill = FALSE; 
-	
 	/* KMH, balance patch -- new intrinsic */
 	if (Unchanging) {
 	    pline(&quot;You cannot change your form.&quot;);
@@ -1705,7 +1702,7 @@ polyatwill()      /* Polymorph under conscious control (#youpoly) */
 	     * is unaffected by blindness, confusion, stun etc. 
 	     */
 	    if (yn(&quot;Transform into your draconic form?&quot;) == 'n') 
-		can_polyatwill = TRUE;
+		return 0;
 	    else if (!scales &amp;&amp; !scale_mail &amp;&amp; u.uen &lt;= EN_BABY_DRAGON) {
 		You(&quot;don't have the energy to polymorph.&quot;);
 		return 0;		
@@ -1742,7 +1739,7 @@ polyatwill()      /* Polymorph under conscious control (#youpoly) */
 	}
 	if (Race_if(PM_DOPPELGANGER)) {
 	    if (yn(&quot;Polymorph at will?&quot;) == 'n')	    
-	    	can_polyatwill = TRUE;
+		return 0;
 	    else if (u.uen &lt; EN_DOPP) {
 		You(&quot;don't have the energy to polymorph!&quot;);
 		return 0;
@@ -1765,7 +1762,7 @@ polyatwill()      /* Polymorph under conscious control (#youpoly) */
 	} else if (Race_if(PM_HUMAN_WEREWOLF) &amp;&amp;
 		(!Upolyd || u.umonnum == u.ulycn)) {
 	    if (yn(&quot;Change form?&quot;) == 'n')
-	    	can_polyatwill = TRUE;
+		return 0;
 	    else if (u.ulycn == NON_PM) {
 	    	/* Very serious */
 	    	You(&quot;are no longer a lycanthrope!&quot;);
@@ -1784,13 +1781,12 @@ polyatwill()      /* Polymorph under conscious control (#youpoly) */
 			else nomul(0);
 		    }
 		    you_were();
-		    return 1;
 		} else {
 		    rehumanize();
-		    return 1;
 		}
+		return 1;
 	    }
-	} else if (!can_polyatwill) {
+	} else {
 	    pline(&quot;You can't polymorph at will%s.&quot;, 
 		    ((Role_if(PM_FLAME_MAGE) || Role_if(PM_ICE_MAGE) || 
 		      Race_if(PM_HUMAN_WEREWOLF) || Race_if(PM_DOPPELGANGER)) ?</diff>
      <filename>slashem/src/polyself.c</filename>
    </modified>
    <modified>
      <diff>@@ -479,6 +479,7 @@ peffects(otmp)
 		break;
 	case POT_HALLUCINATION:
 		if (Hallucination || Halluc_resistance) nothing++;
+		else makeknown(otmp-&gt;otyp);
 		(void) make_hallucinated(itimeout_incr(HHallucination,
 					   rn1(200, 600 - 300 * bcsign(otmp))),
 				  TRUE, 0L);
@@ -1663,7 +1664,7 @@ register struct obj *obj;
 	    if (kn)
 		makeknown(obj-&gt;otyp);
 	    else if (!objects[obj-&gt;otyp].oc_name_known &amp;&amp;
-						!objects[obj-&gt;otyp].oc_uname)
+						!objects[obj-&gt;otyp].oc_uname &amp;&amp; !Blind)
 		docall(obj);
 	}
 }
@@ -2181,6 +2182,7 @@ register struct obj *obj;
 	long owornmask;
 	struct obj *otmp;
 	boolean explodes;
+	char buf[BUFSZ];
 
 	/* Check to see if object is valid */
 	if (!obj)
@@ -2512,6 +2514,19 @@ register struct obj *obj;
 			return 0;
 	}
 
+	if (artifact_name(ONAME(obj), &amp;otyp2) &amp;&amp; otyp2 == obj-&gt;otyp) {
+	    int n;
+	    char c1, c2;
+
+	    Strcpy(buf, ONAME(obj));
+	    n = rn2((int)strlen(buf));
+	    c1 = lowc(buf[n]);
+	    do c2 = 'a' + rn2('z'-'a'); while (c1 == c2);
+	    buf[n] = (buf[n] == c1) ? c2 : highc(c2);  /* keep same case */
+	    if (oname(obj, buf) != obj)
+		panic(&quot;upgrade_obj: unhandled realloc&quot;);
+	}
+
 	if ((!carried(obj) || obj-&gt;unpaid) &amp;&amp;
 #ifdef UNPOLYPILE
 		!is_hazy(obj) &amp;&amp;
@@ -2750,27 +2765,7 @@ dodip()
 	/* WAC - Finn Theoderson - make polymorph and gain level msgs similar
 	 * 	 Give out name of new object and allow user to name the potion
 	 */
-	/* KMH, balance patch -- idea by Dylan O'Donnell &lt;dylanw@demon.net&gt; */
-	else if (potion-&gt;otyp == POT_GAIN_LEVEL) {
-	    res = upgrade_obj(obj);
-
-	    if (res != 0) {
-
-		if (res == 1) { 
-		     /* The object was upgraded */
-		     pline(&quot;Hmm!  You don't recall dipping that into the potion.&quot;);
-		     prinv((char *)0, obj, 0L);
-		} /* else potion exploded */
-		if (!objects[potion-&gt;otyp].oc_name_known &amp;&amp;
-			!objects[potion-&gt;otyp].oc_uname)
-		    docall(potion);
-		useup(potion);
-		update_inventory();
-		exercise(A_WIS, TRUE);
-		return(1);
-	    }
-	    /* no return here, go for Interesting... message */
-	} else if (obj-&gt;otyp == POT_POLYMORPH ||
+	else if (obj-&gt;otyp == POT_POLYMORPH ||
 		potion-&gt;otyp == POT_POLYMORPH) {
 	    /* some objects can't be polymorphed */
 	    if (obj-&gt;otyp == potion-&gt;otyp ||	/* both POT_POLY */
@@ -2985,6 +2980,23 @@ dodip()
 	    makeknown(potion-&gt;otyp);
 	    useup(potion);
 	    return 1;
+	} else if (potion-&gt;otyp == POT_GAIN_LEVEL) {
+	    res = upgrade_obj(obj);
+	    if (res != 0) {
+		if (res == 1) {
+		    /* The object was upgraded */
+		    pline(&quot;Hmm!  You don't recall dipping that into the potion.&quot;);
+		    prinv((char *)0, obj, 0L);
+		} /* else potion exploded */
+		if (!objects[potion-&gt;otyp].oc_name_known &amp;&amp;
+			!objects[potion-&gt;otyp].oc_uname)
+		    docall(potion);
+		useup(potion);
+		update_inventory();
+		exercise(A_WIS, TRUE);
+		return 1;
+	    }
+	    /* no return here, go for Interesting... message */
 	}
 
 	/* KMH, balance patch -- acid affects damage(proofing) */</diff>
      <filename>slashem/src/potion.c</filename>
    </modified>
    <modified>
      <diff>@@ -2328,11 +2328,12 @@ register struct monst *shkp;	/* if angry, impose a surcharge */
 	}
 #ifdef TOURIST
 	if ((Role_if(PM_TOURIST) &amp;&amp; u.ulevel &lt; (MAXULEV/2))
-	    || (uarmu &amp;&amp; !uarm &amp;&amp; !uarmc))	/* touristy shirt visible */
+	    || ((uarmu &amp;&amp; !uarmu-&gt;oinvis) &amp;&amp; (!uarm || uarm-&gt;oinvis) 
+	    &amp;&amp; (!uarmc || uarmc-&gt;oinvis)))	/* touristy shirt visible */
 		tmp += tmp / 3L;
 	else
 #endif
-	if (uarmh &amp;&amp; uarmh-&gt;otyp == DUNCE_CAP)
+	if (uarmh &amp;&amp; !uarmh-&gt;oinvis &amp;&amp; uarmh-&gt;otyp == DUNCE_CAP)
 		tmp += tmp / 3L;
 
 	if (ACURR(A_CHA) &gt; 18)		tmp /= 2L;
@@ -2482,11 +2483,12 @@ register struct monst *shkp;
 
 #ifdef TOURIST
 	if ((Role_if(PM_TOURIST) &amp;&amp; u.ulevel &lt; (MAXULEV/2))
-	    || (uarmu &amp;&amp; !uarm &amp;&amp; !uarmc))	/* touristy shirt visible */
+	    || ((uarmu &amp;&amp; !uarmu-&gt;oinvis) &amp;&amp; (!uarm || uarm-&gt;oinvis) 
+	    &amp;&amp; (!uarmc || uarmc-&gt;oinvis)))	/* touristy shirt visible */
 		tmp /= 3L;
 	else
 #endif
-	if (uarmh &amp;&amp; uarmh-&gt;otyp == DUNCE_CAP)
+	if (uarmh &amp;&amp; !uarmh-&gt;oinvis &amp;&amp; uarmh-&gt;otyp == DUNCE_CAP)
 		tmp /= 3L;
 	else
 		tmp /= 2L;</diff>
      <filename>slashem/src/shk.c</filename>
    </modified>
    <modified>
      <diff>@@ -2508,13 +2508,19 @@ dlb *fd;
 		typ = tmpdoor.mask == -1 ? rnddoor() : tmpdoor.mask;
 
 		if (get_location(&amp;x, &amp;y, DRY)) {
-		if(levl[x][y].typ != SDOOR)
+		    if(levl[x][y].typ != SDOOR)
 			levl[x][y].typ = DOOR;
-		else {
+		    else {
 			if(typ &lt; D_CLOSED)
 			    typ = D_CLOSED; /* force it to be closed */
-		}
-		levl[x][y].doormask = typ;
+		    }
+		    levl[x][y].doormask = typ;
+
+		    /* Fix random door alignment */
+
+		    if (y &gt; 0 &amp;&amp; (IS_WALL(levl[x][y-1].typ) ||
+				levl[x][y-1].horizontal))
+			levl[x][y].horizontal = 0;
 		}
 
 		/* Now the complicated part, list it with each subroom */</diff>
      <filename>slashem/src/sp_lev.c</filename>
    </modified>
    <modified>
      <diff>@@ -703,9 +703,10 @@ int tech_no;
 			    &quot;dress your wounds with&quot;);
 		    if (otmp) {
 			check_unpaid(otmp);
-			if (otmp-&gt;quan &gt; 1L)
+			if (otmp-&gt;quan &gt; 1L) {
 			    otmp-&gt;quan--;
-			else {
+			    otmp-&gt;ocontainer-&gt;owt = weight(otmp-&gt;ocontainer);
+			} else {
 			    obj_extract_self(otmp);
 			    obfree(otmp, (struct obj *)0);
 			}
@@ -804,39 +805,41 @@ int tech_no;
 		break;
 	    case T_CUTTHROAT:
 		if (!is_blade(uwep)) {
-			You(&quot;need a blade to perform cutthroat!&quot;);
-			return (0);
+		    You(&quot;need a blade to perform cutthroat!&quot;);
+		    return 0;
 		}
-	    	if (!getdir((char *)0)) return(0);
+	    	if (!getdir((char *)0)) return 0;
 		if (!u.dx &amp;&amp; !u.dy) {
-			/* Hopefully a mistake ;B */
-			pline(&quot;Things may be going badly,  but that's extreme.&quot;);
-			return(0);
+		    /* Hopefully a mistake ;B */
+		    pline(&quot;Things may be going badly, but that's extreme.&quot;);
+		    return 0;
 		}
 		mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 		if (!mtmp) {
-			You(&quot;attack...nothing!&quot;);
-			return (0);
+		    You(&quot;attack...nothing!&quot;);
+		    return 0;
 		} else {
-			int oldhp = mtmp-&gt;mhp;
-			
-			if (!attack(mtmp)) return(0);
-			if (!DEADMONSTER(mtmp) &amp;&amp; mtmp-&gt;mhp &lt; oldhp) {
-				int tmp = 0;
-				if (!has_head(mtmp-&gt;data) || u.uswallow) {
-					You(&quot;can't perform cutthroat on %s!&quot;,mon_nam(mtmp));
-				}
-				if (rn2(5) &lt; (techlev(tech_no)/10 + 1)) {
-					You(&quot;sever %s head!&quot;, s_suffix(mon_nam(mtmp)));
-					tmp = mtmp-&gt;mhp;
-				} else {
-					You(&quot;hurt %s badly!&quot;, s_suffix(mon_nam(mtmp)));
-					tmp = mtmp-&gt;mhp / 2;
-				}
-				tmp += techlev(tech_no);
-				t_timeout = rn1(1000,500);
-				hurtmon(mtmp, tmp);
+		    int oldhp = mtmp-&gt;mhp;
+
+		    if (!attack(mtmp)) return 0;
+		    if (!DEADMONSTER(mtmp) &amp;&amp; mtmp-&gt;mhp &lt; oldhp) {
+			if (!has_head(mtmp-&gt;data) || u.uswallow)
+			    You_cant(&quot;perform cutthroat on %s!&quot;, mon_nam(mtmp));
+			else {
+			    int tmp = 0;
+
+			    if (rn2(5) &lt; (techlev(tech_no)/10 + 1)) {
+				You(&quot;sever %s head!&quot;, s_suffix(mon_nam(mtmp)));
+				tmp = mtmp-&gt;mhp;
+			    } else {
+				You(&quot;hurt %s badly!&quot;, s_suffix(mon_nam(mtmp)));
+				tmp = mtmp-&gt;mhp / 2;
+			    }
+			    tmp += techlev(tech_no);
+			    t_timeout = rn1(1000,500);
+			    hurtmon(mtmp, tmp);
 			}
+		    }
 		}
 		break;
 	    case T_BLESSING:
@@ -2064,7 +2067,11 @@ blitz_pummel()
 
 	You(&quot;let loose a barrage of blows!&quot;);
 
-	mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
+	if (u.uswallow)
+	    mtmp = u.ustuck;
+	else
+	    mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
+
 	if (!mtmp) {
 		You(&quot;strike nothing.&quot;);
 		return (0);
@@ -2075,7 +2082,12 @@ blitz_pummel()
 	 */
 	for (i = 0; (i &lt; 4); i++) {
 	    if (rn2(70) &gt; (techlev(tech_no) + 30)) break;
-	    mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
+
+	    if (u.uswallow)
+		mtmp = u.ustuck;
+	    else
+		mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
+
 	    if (!mtmp) return (1);
 	    if (!attack(mtmp)) return (1);
 	} </diff>
      <filename>slashem/src/tech.c</filename>
    </modified>
    <modified>
      <diff>@@ -1648,10 +1648,10 @@ begin_burn(obj, already_lit)
 	if (obj-&gt;lamplit &amp;&amp; !already_lit) {
 	    xchar x, y;
 
-	    /* [ALI] Support floating light sources (eg., wished for artifacts)
-	     */
-	    (void)get_obj_location(obj, &amp;x, &amp;y, CONTAINED_TOO|BURIED_TOO);
+	    if (get_obj_location(obj, &amp;x, &amp;y, CONTAINED_TOO|BURIED_TOO))
 		new_light_source(x, y, radius, LS_OBJECT, (genericptr_t) obj);
+	    else
+		impossible(&quot;begin_burn: can't get obj position&quot;);
 	}
 }
 
@@ -1828,6 +1828,10 @@ do_storms()
  *
  *	void obj_stop_timers(struct obj *obj)
  *		Stop all timers attached to obj.
+ *
+ * Monster Specific:
+ *	void mon_stop_timers(struct monst *mon)
+ *		Stop all timers attached to mon.
  */
 
 #ifdef WIZARD
@@ -2121,6 +2125,34 @@ obj_stop_timers(obj)
 }
 
 
+/*
+ * Stop all timers attached to this monster.  We can get away with this because
+ * all monster pointers are unique.
+ */
+void
+mon_stop_timers(mon)
+    struct monst *mon;
+{
+    timer_element *curr, *prev, *next_timer=0;
+
+    for (prev = 0, curr = timer_base; curr; curr = next_timer) {
+	next_timer = curr-&gt;next;
+	if (curr-&gt;kind == TIMER_MONSTER &amp;&amp; curr-&gt;arg == (genericptr_t)mon) {
+	    if (prev)
+		prev-&gt;next = curr-&gt;next;
+	    else
+		timer_base = curr-&gt;next;
+	    if (timeout_funcs[curr-&gt;func_index].cleanup)
+		(*timeout_funcs[curr-&gt;func_index].cleanup)(curr-&gt;arg,
+			curr-&gt;timeout);
+	    free((genericptr_t) curr);
+	} else {
+	    prev = curr;
+	}
+    }
+}
+
+
 /* Insert timer into the global queue */
 STATIC_OVL void
 insert_timer(gnu)</diff>
      <filename>slashem/src/timeout.c</filename>
    </modified>
    <modified>
      <diff>@@ -256,14 +256,11 @@ writeentry(rfile,tt)
 FILE *rfile;
 struct toptenentry *tt;
 {
-	char *cp = NULL;
-
 #ifdef RECORD_CONDUCT
+	char *cp = eos(tt-&gt;death);
+
 	/* Add a trailing &quot; Conduct=%d&quot; to tt-&gt;death */
-	if(tt-&gt;conduct != 4095) {
-		cp = tt-&gt;death + strlen(tt-&gt;death);
-		Sprintf(cp, &quot; Conduct=%d&quot;, tt-&gt;conduct);
-	}
+	Sprintf(cp, &quot; Conduct=%d&quot;, tt-&gt;conduct);
 #endif
 
 #ifdef NO_SCAN_BRACK
@@ -302,8 +299,7 @@ struct toptenentry *tt;
 
 #ifdef RECORD_CONDUCT
 	/* Return the tt-&gt;death line to the original form */
-	if(cp)
-		*cp = '\0';
+	*cp = '\0';
 #endif
 }
 </diff>
      <filename>slashem/src/topten.c</filename>
    </modified>
    <modified>
      <diff>@@ -95,7 +95,8 @@ boolean put_away;
 	 * *whenever* Sunsword is unwielded, from whatever cause.
 	 */
 	setworn(obj, W_WEP);
-	if (uwep == obj &amp;&amp; artifact_light(olduwep) &amp;&amp; olduwep-&gt;lamplit) {
+	if (uwep == obj &amp;&amp; olduwep &amp;&amp; olduwep-&gt;oartifact == ART_SUNSWORD &amp;&amp;
+		olduwep-&gt;lamplit) {
 	    end_burn(olduwep, FALSE);
 	    if (!Blind) pline(&quot;%s glowing.&quot;, Tobjnam(olduwep, &quot;stop&quot;));
 	}
@@ -189,7 +190,7 @@ boolean put_away;
 	    /* KMH -- Talking artifacts are finally implemented */
 	    arti_speak(wep);
 
-	    if (artifact_light(wep) &amp;&amp; !wep-&gt;lamplit) {
+	    if (wep-&gt;oartifact == ART_SUNSWORD &amp;&amp; !wep-&gt;lamplit) {
 		begin_burn(wep, FALSE);
 		if (!Blind)
 		    pline(&quot;%s to glow brilliantly!&quot;, Tobjnam(wep, &quot;begin&quot;));</diff>
      <filename>slashem/src/wield.c</filename>
    </modified>
    <modified>
      <diff>@@ -53,9 +53,9 @@ Guidebook.dvi:	Guidebook.tex
 #	tbl tmac.n Guidebook.mn | groff -Wall -Tdvi &gt; Guidebook.dvi
 
 GAME    = slashem-noegnud
-#GAME    = nethack
-MANDIR	= /games/slash/doc
-MANEXT	= 1n
+MANDIR	= /usr/man/man6
+MANEXT	= 6
+FRMANDIR= $(MANDIR:man6=fr/man6)
 
 # manual installation for most BSD-style systems
 GAMEMANCREATE = cp $(GAME).6
@@ -63,6 +63,7 @@ LEVMANCREATE = cp lev_comp.6
 DGNMANCREATE = cp dgn_comp.6
 RCVRMANCREATE = cp recover.6
 DLBMANCREATE = cp dlb.6
+FRGAMEMANCREATE = cp fr/$(GAME).6
 # manual installation for most SYSV-style systems
 # and for man files readable in less (eg dos DJGPP+GNU)
 # GAMEMANCREATE = groff -Wall -mtty-char -Tascii -man $(GAME).6 &gt;
@@ -70,6 +71,7 @@ DLBMANCREATE = cp dlb.6
 # DGNMANCREATE = groff -Wall -mtty-char -Tascii -man dgn_comp.6 &gt;
 # RCVRMANCREATE = groff -Wall -mtty-char -Tascii -man recover.6 &gt;
 # DLBMANCREATE = groff -Wall -mtty-char -Tascii -man dlb.6 &gt;
+# FRGAMEMANCREATE = groff -Wall -mtty-char -Tutf8 -man fr/$(GAME).6 &gt;
 
 manpages:
 	-$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT)
@@ -77,6 +79,7 @@ manpages:
 	-$(DGNMANCREATE) $(MANDIR)/dgn_comp.$(MANEXT)
 	-$(RCVRMANCREATE) $(MANDIR)/recover.$(MANEXT)
 	-$(DLBMANCREATE) $(MANDIR)/dlb.$(MANEXT)
+	-$(FRGAMEMANCREATE) $(FRMANDIR)/$(GAME).$(MANEXT)
 
 # manual creation for distribution
 DISTRIB = Guidebook.txt $(GAME).txt lev_comp.txt dgn_comp.txt recover.txt dlb.txt</diff>
      <filename>slashem/sys/unix/Makefile.doc</filename>
    </modified>
    <modified>
      <diff>@@ -37,7 +37,7 @@ an executable supporting both X11 and tty windowing.
 
 If you want to use the optional tiles (multicolored pictures instead of a
 replacement font), you will need to have the win/share files and change
-the CF_SHARE_DATND setting in the top Makefile to contain the tile files before
+the CNF_SHARE_DATND setting in the top Makefile to contain the tile files before
 you do your 'make all'. Include x11tiles for the 16x16 tile set and x11bigtiles
 for the 32x32 set. The available tile sets should be defined in the
 configuration file. The tiles option can then be used to select the initial
@@ -65,7 +65,7 @@ in src/Makefile.
 If you define USE_XPM in config.h, you may also define GRAPHIC_TOMBSTONE
 which causes the closing tombstone to be displayed from the image file
 specified by the &quot;tombstone&quot; X resource (rip.xpm by default).  In this
-case, make sure the top Makefile CF_SHARE_X11ND also contains rip.xpm.
+case, make sure the top Makefile CNF_SHARE_X11ND also contains rip.xpm.
 
 
 Whether or not you install tile support, you can provide support for</diff>
      <filename>slashem/win/X11/Install.X11</filename>
    </modified>
    <modified>
      <diff>@@ -132,6 +132,30 @@ SlashEM*race_selection*Command.foreground:	red
 SlashEM*race_selection*quit.accelerators: #override\n\
 				&lt;Key&gt;Escape:	set() notify() unset()
 
+SlashEM*gender_selection*random.borderColor: blue
+SlashEM*gender_selection*random.borderWidth: 2
+SlashEM*gender_selection*random.foreground:  blue
+SlashEM*gender_selection*random.accelerators: #override\n\
+				&lt;Key&gt;Return:	set() notify() unset()
+SlashEM*gender_selection*quit.borderColor: blue
+SlashEM*gender_selection*quit.foreground:  blue
+SlashEM*gender_selection*Command.borderColor:  red
+SlashEM*gender_selection*Command.foreground: red
+SlashEM*gender_selection*quit.accelerators: #override\n\
+				&lt;Key&gt;Return:	set() notify() unset()
+
+SlashEM*alignment_selection*random.borderColor:  blue
+SlashEM*alignment_selection*random.borderWidth:  2
+SlashEM*alignment_selection*random.foreground: blue
+SlashEM*alignment_selection*random.accelerators: #override\n\
+				&lt;Key&gt;Return:	set() notify() unset()
+SlashEM*alignment_selection*quit.borderColor:  blue
+SlashEM*alignment_selection*quit.foreground: blue
+SlashEM*alignment_selection*Command.borderColor: red
+SlashEM*alignment_selection*Command.foreground:  red
+SlashEM*alignment_selection*quit.accelerators: #override\n\
+				&lt;Key&gt;Return:	set() notify() unset()
+
 SlashEM*extended_commands*dismiss.borderColor:	blue
 SlashEM*extended_commands*dismiss.foreground:	blue
 SlashEM*extended_commands*help.borderColor:	blue</diff>
      <filename>slashem/win/X11/SlashEM.ad</filename>
    </modified>
    <modified>
      <diff>@@ -211,7 +211,9 @@ int *wid, *hgt;
 #endif
 
 #ifdef TEXTCOLOR
+# ifndef MSDOS
 	init_ttycolor();
+# endif
 #endif
 
 #ifdef TERMLIB</diff>
      <filename>slashem/win/tty/termcap.c</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>16d16dbac9c49cc472fec4402691462f38c38fef</id>
    </parent>
  </parents>
  <author>
    <name>Clive Crous</name>
    <email>clive@crous.co.za</email>
  </author>
  <url>http://github.com/clivecrous/noegnud/commit/4456dfb2758734e65bb686c1dc21b238d96644c5</url>
  <id>4456dfb2758734e65bb686c1dc21b238d96644c5</id>
  <committed-date>2007-01-25T23:29:35-08:00</committed-date>
  <authored-date>2007-01-25T23:29:35-08:00</authored-date>
  <message>Update to SlashEM-0.0.7E7F3</message>
  <tree>54c47eb517d72b5b279fd2374d46191739d4f01a</tree>
  <committer>
    <name>Clive Crous</name>
    <email>clive@crous.co.za</email>
  </committer>
</commit>
