diff --git a/fifa17-recon/docs/CARD_SYSTEM.md b/fifa17-recon/docs/CARD_SYSTEM.md index 0341863..3bbdaa5 100644 --- a/fifa17-recon/docs/CARD_SYSTEM.md +++ b/fifa17-recon/docs/CARD_SYSTEM.md @@ -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.