Kelsidavis-WoWee/tools/editor/cli_random_property_catalog.hpp
Kelsi b6a88ff964 feat(pipeline): WIRC item random-property pool catalog (137th open format)
Novel replacement for the random-suffix enchant pool that
vanilla WoW carried in ItemRandomProperties.dbc +
ItemRandomSuffix.dbc (TBC+) + the per-item RandomProperty
rolls baked into the LootMgr. Each WIRC entry binds one
random-property pool to a name suffix ("of the Bear", "of the
Eagle"), a weighted enchant table (variable-length array of
{enchantId, weight}), and the equipment slots + class
restrictions where the suffix can roll.

At loot time, each green+ item rolls one pool based on its
slot, then picks one enchant from that pool weighted by
enchant.weight / totalWeight. The denormalized totalWeight
field is precomputed for the loot generator's hot-path roll.

Three presets covering the canonical vanilla suffix archetypes:
  --gen-irc-bear   STA-focused for plate slots (Helm/Chest/
                   Leg/Boot) with 4 weighted +Sta enchants
                   (3/5/7/10 — middle tier most common at
                   weight 50/100). Warrior+Paladin+DK class
                   mask
  --gen-irc-eagle  INT+STA caster pool for cloth slots with
                   5 weighted +Int+Sta enchants (3/5/7/10/12).
                   Mage+Priest+Warlock class mask
  --gen-irc-tiger  STR+AGI hybrid for leather slots with 5
                   weighted enchants. Rogue+Hunter+Druid class
                   mask

Validator catches: id+name required, allowedSlotsMask != 0
(else pool is unreachable — no slot would ever roll it),
non-empty enchant array, no zero-id enchants, no duplicate
enchantIds within same pool (should be merged with summed
weight). CRITICAL: totalWeight MUST equal sum of enchant
weights (else the loot generator's denormalized roll
mis-picks the distribution — players would see wrong rates of
each enchant tier). Warns on enchant weight=0 (never picked,
dead entry to remove or assign weight).

Format count 136 -> 137. CLI flag count 1427 -> 1434.
2026-05-10 05:01:16 -07:00

12 lines
243 B
C++

#pragma once
namespace wowee {
namespace editor {
namespace cli {
bool handleRandomPropertyCatalog(int& i, int argc, char** argv,
int& outRc);
} // namespace cli
} // namespace editor
} // namespace wowee