Files
OpenFUT-Core/README.md
T
OpenFUT Agent f70cf4415c wip(core): preserve local broad Core refactor + inventory service
Divergent development line off origin/main (11a811d): a broad refactor across
routes/services/models/app + a large integration_test expansion (+1000), plus an
untracked game-independent inventory query service and Docker files. Preserved
verbatim before moving the canonical Core checkout to the committed migration
trunk (66c88fb). Reconciling this refactor with the migration trunk is a separate
user decision; nothing here is lost.
2026-08-13 18:34:00 +00:00

140 lines
3.7 KiB
Markdown

# OpenFUT Core
**Offline Ultimate Team backend — game-independent.**
OpenFUT Core is the heart of the OpenFUT project: a fully offline, single-player FUT-style backend
written in Rust. It is deliberately decoupled from any specific game; it is designed to power the
offline FUT economy behind the project's FIFA 17 emulation layer (and, eventually, a FIFA 23 port).
The emulation layer and Core are **not yet wired together** — see the OpenFUT Vault
(`../OpenFUT-Vault/`) for canonical project state.
---
## What it does
- Creates and manages local player profiles and clubs
- Manages coins, XP, and progression
- Generates packs from weighted JSON definitions
- Tracks your full card collection
- Squad builder with formations and chemistry (chemistry calculations: WIP)
- Objectives engine (daily, weekly, lifetime, milestone)
- SBC (Squad Building Challenge) engine with JSON-defined challenges
- Match result processing with coin and XP rewards
- NPC transfer market with daily refreshes
- Statistics tracking
- Fully moddable via JSON data files
---
## Tech Stack
- **Rust** + **Axum** (HTTP framework)
- **Tokio** (async runtime)
- **SQLite** + **SQLx** (database + migrations)
- **Serde** (JSON data layer)
- **tower-http** (middleware: CORS, tracing)
---
## Quick Start
```bash
# Build
cargo build --release
# Run (creates openfut.db in current directory)
./target/release/openfut-core
# Or with custom config
DATABASE_URL=sqlite://./myclub.db LISTEN_ADDR=127.0.0.1:8080 ./target/release/openfut-core
```
### Environment Variables
| Variable | Default | Description |
|---|---|---|
| `LISTEN_ADDR` | `127.0.0.1:8080` | Address to listen on |
| `DATABASE_URL` | `sqlite://openfut.db` | SQLite database path |
| `DATA_DIR` | `data` | Path to JSON data files |
---
## API Routes
| Method | Path | Description |
|---|---|---|
| `GET` | `/health` | Health check |
| `POST` | `/auth/local` | Create first-run profile + club |
| `GET` | `/profile` | Get active profile |
| `GET` | `/club` | Get active club with coins |
| `GET` | `/cards` | Browse all card definitions |
| `GET` | `/collection` | Get owned cards |
| `GET` | `/packs` | List unopened packs |
| `POST` | `/packs/open/:pack_id` | Open a pack |
| `GET` | `/squad` | Get active squad |
| `POST` | `/squad` | Save squad |
| `GET` | `/objectives` | List objectives with progress |
| `POST` | `/matches/result` | Submit match result + receive rewards |
| `GET` | `/sbc` | List SBC definitions |
| `POST` | `/sbc/submit` | Submit SBC solution |
| `GET` | `/market` | Browse NPC transfer market |
| `POST` | `/market/buy` | Buy listing |
| `POST` | `/market/sell` | Quick-sell card |
| `POST` | `/market/refresh` | Refresh NPC listings |
| `GET` | `/statistics` | Get match/pack/SBC stats |
---
## First Run
```bash
# Create your profile
curl -X POST http://localhost:8080/auth/local \
-H 'Content-Type: application/json' \
-d '{"username": "Player 1"}'
# Check your club (5000 coins + a gold pack waiting)
curl http://localhost:8080/club
# Open your starter pack
curl -X POST http://localhost:8080/packs/open/<pack_id>
# Submit a match win
curl -X POST http://localhost:8080/matches/result \
-H 'Content-Type: application/json' \
-d '{"squad_id":"any","opponent_name":"Beginner AI","goals_for":3,"goals_against":0,"mode":"squad_battles"}'
```
---
## Modding
All game content lives in `data/`. Drop JSON files into the appropriate folder and restart.
```
data/
cards/ ← CardDefinition[]
packs/ ← PackDefinition[]
objectives/ ← ObjectiveDefinition[]
sbcs/ ← SbcDefinition[]
events/ ← (future)
```
See `docs/modding.md` for schema reference.
---
## Development
```bash
cargo fmt
cargo clippy -- -D warnings
cargo test
```
---
## License
MIT — see LICENSE