Fix an artefact amulet equip crash (Skunz)
authorgammafunk <gammafunk@gmail.com>
Mon, 19 Apr 2021 22:32:21 +0000 (17:32 -0500)
committergammafunk <gammafunk@gmail.com>
Tue, 20 Apr 2021 00:14:50 +0000 (19:14 -0500)
Now that Regen+ can appear on amulets as of bf8bb431, the artefact
equipment code needs an update to not assume an artefact with the regen
artp must be armour, which results in a crash.

This code is to prevent double messaging in cases of e.g. moon troll
leather armour that also has a regen property. This currently can only
happen for unrands, since the regen artp doesn't allow multiple levels
for randarts. While there currently is no unrand regen amulet with
regen++, this commit adds the relevant check for amulets in order to
future-proof things.

crawl-ref/source/player-equip.cc

index d9c652a..3ad1ba0 100644 (file)
@@ -256,9 +256,12 @@ static void _equip_artefact_effect(item_def &item, bool *show_msgs, bool unmeld,
                                                   : MSG_MANA_DECREASE);
     }
 
-    if (proprt[ARTP_REGENERATION] && !unmeld
-        // If regen is an intrinsic property too, don't double print messages
-        && !armour_type_prop(item.sub_type, ARMF_REGENERATION))
+    if (proprt[ARTP_REGENERATION]
+        && !unmeld
+        // If regen is an intrinsic property too, don't double print messages.
+        && !item.is_type(OBJ_JEWELLERY, AMU_REGENERATION)
+        && (item.base_type != OBJ_ARMOUR
+            || !armour_type_prop(item.sub_type, ARMF_REGENERATION)))
     {
         _equip_regeneration_item(item);
     }