grom photographed "The Tower of Azora" (quest 41747) offering Scroll of Stamina, Scroll
of Spirit, and a third button with no icon and no name — an empty bordered box.
A reward row's two halves come from independent sources: the name from the item template
(`Items::template`, which queries the server on a cache miss) and the icon from
`ItemDisplayInfo.dbc` through the wire's own `display_id`. A merely late template still
paints an icon, and the feed rebuilds its snapshot every frame the panel is open, so a
template arriving a second later would repaint. **Neither half answering** means the
triple itself carries nothing this client can resolve.
Ruled out from here, so the next person does not re-run them: the decode is a
count-prefixed run of triples (vmangos' own layout), so a mis-stride would have broken
rows 1 and 2 as well; `ItemDisplayCatalog` is a `HashMap<u32, _>` keyed by row id, so the
realm's custom 68xxx display range is not an indexing trap (its `ItemDisplayInfo.dbc` has
45,254 rows and a max id of 69,176, and 68793/68797 are both present); and the two scrolls
that *did* paint carry vanilla display ids (1093, 2616) while the plausible third choices
carry custom ones, which is suggestive but not evidence.
This lands as an instrument rather than a fix because **the reference does not filter
these either**. Its DETAILS publisher `0x500ef0` zeroes the six choice slots at `0xbdf028`,
copies exactly `count` entries in with no test on the item id (`500f41`-`500f58`), then
zero-fills the rest — so a server padding its reward list makes the reference draw the
same empty button. A padded wire and a template we failed to fetch look identical from the
painted frame and want opposite fixes, so guessing between them is how this becomes a
fourth wrong verdict.
`warn_unresolved_reward_once` prints the item id, count and displayId once per distinct
pair (the snapshot rebuilds per frame, so unguarded it would print at frame rate) and says
which of the two it is: an `item_id` of 0 is a padded wire and not ours, a real id is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn