Invoking the Tsurugi of Muramasa when it has enchantment less than 0 (or -1 if cursed, or 1 if blessed) changes its enchantment to 0 (or -1 if cursed, or 1 if blessed). diff -Nurb nethack-3.4.3-original/dat/Samurai.des nethack-3.4.3-copy/dat/Samurai.des --- nethack-3.4.3-original/dat/Samurai.des Mon Dec 8 09:39:12 2003 +++ nethack-3.4.3-copy/dat/Samurai.des Tue Oct 25 22:57:41 2005 @@ -277,7 +277,7 @@ # Non diggable walls NON_DIGGABLE:(00,00,44,19) # Objects -OBJECT:')',"tsurugi",(22,10),blessed,0,"The Tsurugi of Muramasa" +OBJECT:')',"tsurugi",(22,10),blessed,1,"The Tsurugi of Muramasa" OBJECT:random,random,random OBJECT:random,random,random OBJECT:random,random,random diff -Nurb nethack-3.4.3-original/include/artifact.h nethack-3.4.3-copy/include/artifact.h --- nethack-3.4.3-original/include/artifact.h Mon Dec 8 09:39:13 2003 +++ nethack-3.4.3-copy/include/artifact.h Fri Oct 7 13:48:47 2005 @@ -60,5 +60,6 @@ #define CREATE_PORTAL (LAST_PROP+7) #define ENLIGHTENING (LAST_PROP+8) #define CREATE_AMMO (LAST_PROP+9) +#define SHARPEN (LAST_PROP+10) #endif /* ARTIFACT_H */ diff -Nurb nethack-3.4.3-original/include/artilist.h nethack-3.4.3-copy/include/artilist.h --- nethack-3.4.3-original/include/artilist.h Mon Dec 8 09:39:13 2003 +++ nethack-3.4.3-copy/include/artilist.h Fri Oct 7 13:47:09 2005 @@ -210,7 +210,7 @@ A("The Tsurugi of Muramasa", TSURUGI, (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_BEHEAD|SPFX_LUCK), 0, 0, PHYS(0,8), NO_DFNS, NO_CARY, - 0, A_LAWFUL, PM_SAMURAI, NON_PM, 4500L ), + SHARPEN, A_LAWFUL, PM_SAMURAI, NON_PM, 4500L ), #ifdef TOURIST A("The Platinum Yendorian Express Card", CREDIT_CARD, diff -Nurb nethack-3.4.3-original/src/artifact.c nethack-3.4.3-copy/src/artifact.c --- nethack-3.4.3-original/src/artifact.c Mon Dec 8 09:39:13 2003 +++ nethack-3.4.3-copy/src/artifact.c Fri Oct 7 14:36:29 2005 @@ -1349,6 +1349,20 @@ aobjnam(otmp, "fall"), (const char *)0); break; } + case SHARPEN: { + int sharpnum = (obj->cursed ? -1 : (obj->blessed ? 1 : 0)); + + if (obj->spe >= sharpnum) { + pline("%s is %ssharp enough already.", The(xname(obj)), + (obj->spe > -1 ? (obj->spe > 0 ? "more than " : ""): "almost ")); + obj->age = 0; + return 0; + } + obj->spe = sharpnum; + pline("%s is restored to %sits original keenness!", The(xname(obj)), + (obj->spe > -1 ? (obj->spe > 0 ? "better than " : ""): "slightly less than ")); + break; + } } } else { long eprop = (u.uprops[oart->inv_prop].extrinsic ^= W_ARTI),