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
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 "<color> 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:
(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);