fifa17-recon: consumable artwork CONFIRMED FIXED, and the two wrong guesses recorded

Real card art, tier colours and the GK glove icon all draw once cardassetid carries
the art id. Records both refuted hypotheses with the evidence that killed them, since
each was plausible and someone will reach for them again.

The generalisable trap: an fcc_ row has BOTH carddbid and cardassetid, they are not
interchangeable, and _item copies resourceId into cardassetid -- right for players,
wrong for every other family. Club items will hit it next: balls 37, kits 35,
stadium 36, badges 39, league logos 40.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VUT92pz6RWKih9dSr8ZpxW
This commit is contained in:
funman300
2026-08-05 11:47:05 -07:00
parent 214be11202
commit cef1e8d1f4
+27
View File
@@ -370,3 +370,30 @@ empty. The diagnostic that worked every time was reading the CardsDb map: if the
client ingested nothing, the shape is wrong; if it ingested records that do not draw,
the failure is downstream. Guessing between those two costs a human a menu trip each
time; the probe costs 0.03 seconds.
## The green box, and why two guesses missed it
CONFIRMED FIXED 2026-08-05. Consumable cards draw real artwork once cardassetid
carries the ART id from the fcc_ tables (training 3, contract 7, healing 10, misc 45)
instead of a copy of the resourceId. The placeholder was
external/ion_fut/artAssets/.../notfound.swf, the client's stand-in for art it cannot
resolve.
The two wrong guesses are recorded because the reasoning behind each was plausible:
1. "It is the untradeable badge." The deserializer really does set a UI flag from
(untradeableCount < count) and UNTRADEABLE_COUNT really is a state key. Changing
it flipped the flag in the live record (+0x49 went to 1) and the tag did not
move. Refuted by measurement, not by argument.
2. "It is an untranslated loc key." Also wrong: the string NOT FOUND does not exist
anywhere in cardsdll.dll, in any casing.
What settled it was reading the badge TEXT off an unobstructed screenshot. "NOT FOUND"
is not a status, it is a missing-asset placeholder, and that turned a UI question into
an id question. The lesson is the cheap one: get the exact on-screen string before
theorising about what produces it.
THE TRAP GENERALISES. An fcc_ row carries BOTH carddbid and cardassetid and they are
not interchangeable. fut_store._item copies resourceId into cardassetid, which is
correct for players and wrong for every other family. The club-item family will need
the same mapping: balls 37, kits 35, stadium 36, badges 39, league logos 40.