diff -u3 old/birth.c blood/birth.c
--- old/birth.c	Mon Nov  5 14:44:26 2001
+++ blood/birth.c	Sun Dec  2 22:29:18 2001
@@ -578,6 +578,9 @@
 
 	/* None of the spells have been learned yet */
 	for (i = 0; i < PY_MAX_SPELLS; i++) p_ptr->spell_order[i] = 99;
+
+        /* Player is not bloody cursed */
+        p_ptr->bloody_counter = -1;
 }
 
 
diff -u3 old/cmd3.c blood/cmd3.c
--- old/cmd3.c	Wed Nov  7 18:49:16 2001
+++ blood/cmd3.c	Sun Dec  2 23:46:40 2001
@@ -138,6 +138,8 @@
 
 	char o_name[80];
 
+        u32b f1, f2, f3;
+
 
 	/* Restrict the choices */
 	item_tester_hook = item_tester_hook_wear;
@@ -163,6 +165,21 @@
 	/* Check the slot */
 	slot = wield_slot(o_ptr);
 
+        /* Prevent wielding weapon if already wielding
+          a thirsty bloody cursed weapon */
+        if (slot==INVEN_WIELD && p_ptr->bloody_counter>0)
+        {
+		/* Describe it */
+		object_desc(o_name, &inventory[slot], FALSE, 0);
+
+		/* Message */
+                msg_format("The %s you are %s needs more blood.",
+		           o_name, describe_use(slot));
+
+		/* Cancel the command */
+		return;
+        }
+
 	/* Prevent wielding into a cursed slot */
 	if (cursed_p(&inventory[slot]))
 	{
@@ -263,7 +280,30 @@
 		o_ptr->ident |= (IDENT_SENSE);
 	}
 
-	/* Recalculate bonuses */
+        if (slot==INVEN_WIELD)
+        {
+                object_flags(&inventory[slot], &f1, &f2, &f3);
+                /* Bloody cursed! */
+                if (f3 & TR3_BLOODY_CURSE)
+                {
+                        /* Warn the player */
+                        msg_print("Oops! You feel an urge to kill and destroy!");
+
+                        /* Set bloody_counter */
+                        p_ptr->bloody_counter = inventory[slot].pval*500;
+                        if (p_ptr->bloody_counter<0)
+                                p_ptr->bloody_counter = -p_ptr->bloody_counter;
+                        else if (p_ptr->bloody_counter==0)
+                                p_ptr->bloody_counter = 500;
+                }
+                /* Not bloody cursed */
+                else
+                {
+                        p_ptr->bloody_counter = -1;
+                }
+       }
+
+        /* Recalculate bonuses */
 	p_ptr->update |= (PU_BONUS);
 
 	/* Recalculate torch */
@@ -318,6 +358,15 @@
 		return;
 	}
 
+        /* Item is bloody cursed */
+        if (item==INVEN_WIELD && p_ptr->bloody_counter>0)
+        {
+		/* Oops */
+                msg_print("You must kill and destroy more before taking off.");
+
+		/* Nope */
+		return;
+        }
 
 	/* Take a partial turn */
 	p_ptr->energy_use = 50;
diff -u3 old/defines.h blood/defines.h
--- old/defines.h	Fri Nov 23 03:49:08 2001
+++ blood/defines.h	Sun Dec  2 22:31:44 2001
@@ -1983,7 +1983,7 @@
 #define TR3_HOLD_LIFE       0x00000080L /* Hold life */
 #define TR3_XXX1            0x00000100L
 #define TR3_XXX2            0x00000200L
-#define TR3_XXX3            0x00000400L
+#define TR3_BLOODY_CURSE    0x00000400L /* Bloody curse */
 #define TR3_XXX4            0x00000800L
 #define TR3_IMPACT          0x00001000L /* Earthquake blows */
 #define TR3_TELEPORT        0x00002000L /* Random teleportation */
diff -u3 old/init1.c blood/init1.c
--- old/init1.c	Fri Nov 23 03:46:36 2001
+++ blood/init1.c	Sun Dec  2 22:33:20 2001
@@ -450,7 +450,7 @@
 	"HOLD_LIFE",
 	"XXX1",
 	"XXX2",
-	"XXX3",
+        "BLOODY_CURSE",
 	"XXX4",
 	"IMPACT",
 	"TELEPORT",
diff -u3 old/l-object.pkg blood/l-object.pkg
--- old/l-object.pkg	Sun Nov 11 22:54:12 2001
+++ blood/l-object.pkg	Sun Dec  2 22:30:52 2001
@@ -813,7 +813,7 @@
 #define TR3_HOLD_LIFE       0x00000080L /* Hold life */
 #define TR3_XXX1            0x00000100L
 #define TR3_XXX2            0x00000200L
-#define TR3_XXX3            0x00000400L
+#define TR3_BLOODY_CURSE    0x00000400L /* Bloody curse */
 #define TR3_XXX4            0x00000800L
 #define TR3_IMPACT          0x00001000L /* Earthquake blows */
 #define TR3_TELEPORT        0x00002000L /* Random teleportation */
diff -u3 old/load.c blood/load.c
--- old/load.c	Sun Nov 18 16:31:34 2001
+++ blood/load.c	Sun Dec  2 22:34:18 2001
@@ -912,6 +912,7 @@
 	rd_s16b(&p_ptr->shield);
 	rd_s16b(&p_ptr->blessed);
 	rd_s16b(&p_ptr->tim_invis);
+        rd_s16b(&p_ptr->bloody_counter);
 	rd_s16b(&p_ptr->word_recall);
 	rd_s16b(&p_ptr->see_infra);
 	rd_s16b(&p_ptr->tim_infra);
Common subdirectories: old/lua and blood/lua
diff -u3 old/object1.c blood/object1.c
--- old/object1.c	Fri Nov 23 03:46:36 2001
+++ blood/object1.c	Sun Dec  2 23:39:28 2001
@@ -2169,6 +2169,12 @@
 		known = TRUE;
 	}
 
+        if (f3 & (TR3_BLOODY_CURSE))
+        {
+                text_out("It induces the need to kill and destroy.\n");
+                known = TRUE;
+        }
+
 	if (f3 & (TR3_IMPACT))
 	{
 		text_out("It induces earthquakes.\n");
diff -u3 old/save.c blood/save.c
--- old/save.c	Sun Nov 18 16:31:34 2001
+++ blood/save.c	Sun Dec  2 22:34:46 2001
@@ -1086,6 +1086,7 @@
 	wr_s16b(p_ptr->shield);
 	wr_s16b(p_ptr->blessed);
 	wr_s16b(p_ptr->tim_invis);
+        wr_s16b(p_ptr->bloody_counter);
 	wr_s16b(p_ptr->word_recall);
 	wr_s16b(p_ptr->see_infra);
 	wr_s16b(p_ptr->tim_infra);
diff -u3 old/spells2.c blood/spells2.c
--- old/spells2.c	Wed Nov  7 14:22:46 2001
+++ blood/spells2.c	Sun Dec  2 23:43:28 2001
@@ -464,6 +464,10 @@
 	{
 		info[i++] = "You aggravate monsters.";
 	}
+        if (p_ptr->bloody_counter>0)
+        {
+                info[i++] = "You feel the need to kill and destroy.";
+        }
 	if (p_ptr->teleport)
 	{
 		info[i++] = "Your position is very uncertain.";
diff -u3 old/types.h blood/types.h
--- old/types.h	Thu Nov  8 13:56:42 2001
+++ blood/types.h	Sun Dec  2 22:34:10 2001
@@ -898,6 +898,12 @@
 	s16b oppose_cold;	/* Timed -- oppose cold */
 	s16b oppose_pois;	/* Timed -- oppose poison */
 
+        s16b bloody_counter;    /* Amount of creatures to kill before
+                                  you can unwield a weapon with
+                                  BLOODY_CURSE
+                                  negative means you are not bloody cursed
+                                  0 means you can unwield it */
+
 	s16b word_recall;	/* Word of recall counter */
 
 	s16b energy;		/* Current energy */
diff -u3 old/xtra2.c blood/xtra2.c
--- old/xtra2.c	Sun Nov 11 22:54:14 2001
+++ blood/xtra2.c	Sun Dec  2 23:00:36 2001
@@ -2117,6 +2117,10 @@
 	{
 		char m_name[80];
 
+                /* Reduce the bloody weapon counter */
+                if (p_ptr->bloody_counter>0)
+                        p_ptr->bloody_counter--;
+
 		/* Extract monster name */
 		monster_desc(m_name, m_ptr, 0);
 
