--- nethack-3.4.2/src/zap.c 2003-08-30 10:07:44.000000000 +1000 +++ nethack-cancel/src/zap.c 2003-10-16 10:52:32.000000000 +1000 @@ -854,6 +854,40 @@ break; /* case RIN_PROTECTION: not needed */ } + + + /* MRKR: Cancelled *DSM reverts to scales. */ + /* Suggested by Daniel Morris in RGRN */ + + if (obj->otyp >= GRAY_DRAGON_SCALE_MAIL && + obj->otyp <= YELLOW_DRAGON_SCALE_MAIL) { + /* dragon scale mail reverts to dragon scales */ + + boolean worn = (obj == uarm); + + if (!Blind) { + char buf[BUFSZ]; + pline("%s %s reverts to natural form!", + Shk_Your(buf, obj), xname(obj)); + } + else if (worn) { + Your("armor feels looser."); + } + costly_cancel(obj); + + if (worn) { + setworn((struct obj *)0, W_ARM); + } + + /* assumes same order */ + obj->otyp = GRAY_DRAGON_SCALES + + obj->otyp - GRAY_DRAGON_SCALE_MAIL; + + if (worn) { + setworn(obj, W_ARM); + } + } + if (objects[obj->otyp].oc_magic || (obj->spe && (obj->oclass == ARMOR_CLASS || obj->oclass == WEAPON_CLASS || is_weptool(obj)))