011571498e
The macro icon list and its verbs differed from 1.12.1. - The list is built on first use per in-game interface (`GetNumMacroIcons`, and `CreateMacro`/`EditMacro` past their gates), never at VM creation; `GetMacroIconInfo` never builds and answers `""` off the list or for an empty entry (`0x4f1ac5`, `0x4f1a88`). - Its sources are 1.12.1's three (`0x4f0090`): the listfiles of the patches, speech2 and interface.MPQ only, then the two loose `Interface\Icons\` scans (`0x4f0350`, `0x4f04f0`), sorted case-blind and deduplicated. - `EditMacro`/`CreateMacro` read the icon as a number (a numeric string counts) and keep the old icon on a miss (`0x4f1945`, `0x4f12f0`). - `GetMacroIconInfo` with a non-number raises its usage line. The listing takes about 7 ms on the stock chain, down from 150. Tests pin each fact; a byte audit re-derived every address. Fixes #1512 Fixes #1833 Fixes #1874 Fixes #1875 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>