diff --git a/doc/fixes35.0 b/doc/fixes35.0 index be0dd0521..8ca9c4fc4 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -475,6 +475,8 @@ can now use ESC to cancel out of prompts for playing musical instruments being crowned gives an additional benefit: one extra skill slot/credit chatting to a gecko or shopkeeper while hallucinating gives alternate message mimic posing as door might steal hero's key when [un]locking is attempted +polymorphing into a dragon while wearing dragon scale mail will cause that + mail to revert to dragon scales Platform- and/or Interface-Specific New Features diff --git a/src/polyself.c b/src/polyself.c index c7010ff40..5e96f01aa 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -388,11 +388,36 @@ int psflags; mntmp = armor_to_dragon(uarm->otyp); if (!(mvitals[mntmp].mvflags & G_GENOD)) { /* allow G_EXTINCT */ - You("merge with your scaly armor."); + if (Is_dragon_scales(uarm)) { + /* dragon scales remain intact as uskin */ + You("merge with your scaly armor."); + } else { /* dragon scale mail */ + /* d.scale mail first reverts to scales */ + char *p, *dsmail; + + /* similar to noarmor(invent.c), + shorten to " scale mail" */ + dsmail = strcpy(buf, simpleonames(uarm)); + if ((p = strstri(dsmail, " dragon ")) != 0) + while ((p[1] = p[8]) != '\0') ++p; + /* tricky phrasing; dragon scale mail + is singular, dragon scales are plural */ + Your( + "%s reverts to scales as you merge with them.", + dsmail); + /* uarm->spe enchantment remains unchanged; + re-converting scales to mail poses risk + of evaporation due to over enchanting */ + uarm->otyp += GRAY_DRAGON_SCALES + - GRAY_DRAGON_SCALE_MAIL; + uarm->dknown = 1; + context.botl = 1; /* AC is changing */ + } uskin = uarm; uarm = (struct obj *)0; /* save/restore hack */ uskin->owornmask |= I_SPECIAL; + update_inventory(); } } else if (iswere) { do_shift: diff --git a/src/read.c b/src/read.c index eedcc6908..b139e8266 100644 --- a/src/read.c +++ b/src/read.c @@ -810,29 +810,20 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ (Blind || same_color) ? nul : hcolor(scursed ? NH_BLACK : NH_SILVER), otense(otmp, "evaporate")); - if(is_cloak(otmp)) (void) Cloak_off(); - if(is_boots(otmp)) (void) Boots_off(); - if(is_helmet(otmp)) (void) Helmet_off(); - if(is_gloves(otmp)) (void) Gloves_off(); - if(is_shield(otmp)) (void) Shield_off(); - if(otmp == uarm) (void) Armor_gone(); -#ifdef TOURIST - if (is_shirt(otmp)) (void) Shirt_off(); -#endif + remove_worn_item(otmp, FALSE); useup(otmp); break; } s = scursed ? -1 : otmp->spe >= 9 ? (rn2(otmp->spe) == 0) : sblessed ? rnd(3 - otmp->spe / 3) : 1; - if (s >= 0 && otmp->otyp >= GRAY_DRAGON_SCALES && - otmp->otyp <= YELLOW_DRAGON_SCALES) { + if (s >= 0 && Is_dragon_scales(otmp)) { /* dragon scales get turned into dragon scale mail */ pline("%s merges and hardens!", Yname2(otmp)); setworn((struct obj *)0, W_ARM); /* assumes same order */ - otmp->otyp = GRAY_DRAGON_SCALE_MAIL + - otmp->otyp - GRAY_DRAGON_SCALES; + otmp->otyp += GRAY_DRAGON_SCALE_MAIL + - GRAY_DRAGON_SCALES; if (sblessed) { otmp->spe++; if (!otmp->blessed) bless(otmp);