Adds the app-centric FLE bridge direction (direction.md) replacing the Blaze-backend route as primary plan, plus a corrected foundational test procedure and snapshot/diff/apply tooling for reverse-engineering FLE's Freeze Lineup write mechanism. Also picks up prior untracked research docs (status-review, fut-integration-options, fifa23-startup-flow, track-c) and existing capture/export tooling that hadn't been committed yet.
3.8 KiB
Track C — FUT DB table viability test
Status: PENDING — test has not yet been run.
What this test settles
Track C ("FLE Lua bridge") would inject OpenFUT club data directly into FIFA 23's in-memory Frostbite DB tables at runtime, bypassing the entire backend/Blaze stack. It is only viable for FUT (not just career mode) if FUT-specific tables — card inventory, squad composition with FUT fields, coins — are accessible in memory when the game is in the FUT area.
FUT data in online mode is fetched server-side from fut.ea.com. It is not known
whether FIFA 23 mirrors any of this into the Frostbite in-memory DB that FLE
can read/write. This test settles that question directly.
Test procedure
Prerequisites:
- FIFA 23 launched normally via umu-run/Steam
- FLE (FIFA Live Editor) injected and active (normal launch path)
- EAAC in offline/neutralized state
- Game navigated as deep into FUT as possible (FUT hub if reachable; otherwise the furthest FUT screen before the gate blocks it)
Run the exporter:
- In FLE's Lua Engine, open and run
tools/squad-exporter/export_squad.lua(full path on the Windows side:C:\<game>\openfut_squad_export.json) - Wait for the MessageBox "Done! N players, M teams." or "ERROR writing..."
- Retrieve the output file from the Wine prefix:
~/Games/umu/fifa23-tools/drive_c/FIFA 23 Live Editor/openfut_squad_export.json(or whereverC:\FIFA 23 Live Editor\maps in the active prefix)
What to inspect in the output:
all_db_tablesarray — the complete list of table names visible to FLE right nowfut_tablesobject — any table whose name containsfut,club,pack,item, ormarket(the script auto-extracts these)is_career_mode— confirms whether FUT or career mode was active
Classification criteria
"FUT tables present"
fut_tables is non-empty AND contains FUT-specific fields beyond base player stats:
- e.g.,
fut_itemswith card-type / rating / chemistry fields - e.g., a squad table with FUT formation / chemistry / loan-flag fields
- e.g., a coins or points balance field
Verdict: Track C is viable for FUT. Fastest path to user-visible results.
"only base player tables"
fut_tables is empty (no fut_* / club_* / item_* / market_* table names found
in all_db_tables), OR those tables exist but contain only base player attributes
(OVR, potential, position, pace, …) — the same fields visible in career mode.
Verdict: Track C cannot produce FUT. It could at most provide a custom Kick-Off or career-mode match with players sourced from OpenFUT Core. FUT items and coins exist only on EA's servers (not in the in-memory DB in offline mode).
"FUT area unreachable to test"
The connection gate blocked entering FUT deeply enough for FUT tables to be populated. Record which tables were visible and at what screen the test was run.
Verdict: Retest after M2 is unblocked, OR test with TLS_ENABLED=false bridge
handling the entry check stub.
Results
(To be filled in after the test is run.)
| Field | Value |
|---|---|
| Date run | — |
| FIFA screen at test time | — |
is_career_mode |
— |
Total tables in all_db_tables |
— |
| FUT-specific table names found | — |
| Key FUT fields present | — |
| Classification | PENDING |
Honest prior
fut-integration-options.md rates this as the recommended path and lists fut_clubs,
fut_items, fut_squads as "expected" tables. However those expectations are based on
analogy with career mode (which does store club/squad in the DB). FUT's data model is
architecturally different — it is account-bound server-side. The expectation may be
wrong. This test is the oracle.
The export_squad.lua script checks GetDBTablesNames() exhaustively (not just
assumed names), so it will surface any FUT tables that actually exist, regardless of
what name they use.