fix: always announce xom chaos branding
authoradvil <rawlins@gmail.com>
Tue, 27 Apr 2021 14:20:07 +0000 (10:20 -0400)
committeradvil <rawlins@gmail.com>
Tue, 27 Apr 2021 14:25:08 +0000 (10:25 -0400)
The message ordering when Xom granted an item and "upgraded" it to chaos
was confusing, because the item was announced before the brand took
effect. (I suspect this changed at some point.) Rather than try to work
out how to fix the message ordering, this commit leans into this effect
and just announces the change after the item generates (still letting
the player know what they would have gotten). It's still not very
explicit about removing the old brand, but hopefully this will be clear
enough.

Also:
 * Standardize Xom's chaos upgrade using the same message as in regular
   branding. Possibly more boring, but also more predictable.
 * Clean up some code for Xom upgrading ally weapons.

Resolves #1865

crawl-ref/source/xom.cc

index d8d86b2..e8015b8 100644 (file)
@@ -629,6 +629,9 @@ static void _try_brand_switch(const int item_index)
     if (get_weapon_brand(item) == SPWPN_NORMAL)
         return;
 
+    // TODO: shared code with _do_chaos_upgrade
+    mprf("%s erupts in a glittering mayhem of colour.",
+                            item.name(DESC_THE, false, false, false).c_str());
     if (is_random_artefact(item))
         artefact_set_property(item, ARTP_BRAND, SPWPN_CHAOS);
     else
@@ -872,18 +875,11 @@ static void _do_chaos_upgrade(item_def &item, const monster* mon)
     {
         seen = true;
 
-        description_level_type desc = mon->friendly() ? DESC_YOUR :
-                                                        DESC_THE;
-        string msg = apostrophise(mon->name(desc));
-
-        msg += " ";
-
-        msg += item.name(DESC_PLAIN, false, false, false);
-
-        msg += " is briefly surrounded by a scintillating aura of "
-               "random colours.";
-
-        mpr(msg);
+        const description_level_type desc = mon->friendly() ? DESC_YOUR
+                                                            : DESC_THE;
+        mprf("%s %s erupts in a glittering mayhem of colour.",
+            apostrophise(mon->name(desc)).c_str(),
+            item.name(DESC_PLAIN, false, false, false).c_str());
     }
 
     const int brand = (item.base_type == OBJ_WEAPONS) ? (int) SPWPN_CHAOS