funman300 80a8bc4520 feat(adapter): FIFA17 squad extension v1 + full-replacement PUT builder
Add fut::squad_ext::Fifa17SquadExtensionV1 — the versioned, adapter-owned
payload Core stores opaquely alongside the canonical squad. Carries the
FIFA-only wire state that is not Core-canonical:
  - custom[]        opaque 33-int string, round-tripped verbatim
  - squad_type      observed FIFA token
  - kit_numbers     keyed by owned_card_id (kit follows the PLAYER, proven
                    by the swap/formation captures), never by slot/definition
  - manager         opaque item ref (not a squad player; not shaped)
  - kicktakers      opaque role refs; relationship to captain UNKNOWN, so
                    preserved verbatim and never normalized to the captain
  - client_reported chemistry/rating/starRating shadow, never authoritative
from_payload enforces the payload schema version first (distinct from Core's
DB schema); an unknown version is rejected, never coerced.

build_squad_write turns a parsed PUT + host wire->owned resolver into a
canonical ProposedSquad + extension, refusing on unresolved ids or a
duplicate owned item. Identity resolution is explicitly NOT authorization.

Refactor the 550a59d parser scaffold: ProposedSquad is now pure canonical
(FIFA-only + shadow fields moved to the extension); the canonical formation
is the FIFA wire token verbatim (drop the lossy f442->"4-4-2" map that
could not even represent f433) so formation and index round-trip exactly
with no derivation. Bench split is the fixed 23-slot array convention.
2026-08-12 02:19:22 +00:00

OpenFUT

Offline Ultimate Team — like SPT, but for FIFA 23.

OpenFUT replaces EA's retired FUT servers with a fully offline, single-player backend. You own FIFA 23 legitimately. You just want to keep playing after EA shut down the servers.


Repositories

Repo Purpose
openfut-core Game-independent offline FUT backend
openfut-bridge FIFA 23 integration layer + reverse-engineering proxy

Architecture

FIFA 23 client
      │
      ▼
┌─────────────────┐
│  openfut-bridge │  ← intercepts FUT traffic, maps routes, logs unknown
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  openfut-core   │  ← offline FUT backend: profiles, packs, squads, SBCs
└─────────────────┘
         │
         ▼
   SQLite database

Core is game-independent. It speaks a clean REST API and knows nothing about FIFA 23 internals.

Bridge is FIFA-specific. It speaks FIFA 23's wire protocol and translates it into Core API calls. Bridge is where all reverse engineering work happens.


Current Status

Feature Status
Local profiles + clubs Working
Coin system Working
Pack generator Working
Card collection Working
Squad builder Working
Objectives engine Working
SBC engine Working
Match rewards Working
NPC transfer market Working
Statistics Working
FIFA 23 integration 🔴 Reverse engineering in progress
Chemistry calculation 🟡 In progress
Full Draft mode 🟡 In progress
Squad Battles AI generator 🟡 In progress
Objectives claim flow 🟡 In progress

Running

# Start the offline backend
cd openfut-core
cargo run

# Start the proxy (for traffic capture / FIFA integration)
cd openfut-bridge
cargo run

Core listens on http://127.0.0.1:8080 by default. Bridge listens on http://127.0.0.1:8443 by default.


Design Principles

  • Offline-first. No EA account required. No internet connection needed.
  • Single-player only. This is not a multiplayer server emulator.
  • Data-driven. All cards, packs, SBCs, and objectives are JSON files. Everything is moddable.
  • Clean architecture. Core has zero knowledge of FIFA 23. Bridge has zero game logic.
  • No copyrighted assets. No real player images, no EA trademarks in data files.

Disclaimer

This project is not affiliated with EA Sports. You must own FIFA 23 legitimately to use this software. This project does not bypass any ownership verification and is intended only to restore offline playability of a game whose online services have been retired.

S
Description
No description provided
Readme 25 MiB
Languages
Python 54.8%
Rust 41.2%
Shell 3.3%
Lua 0.3%
PowerShell 0.2%
Other 0.1%