03 — Pawn composition
Intent
Section titled “Intent”What lives on the character, controller, player state, and match state — and which GFP owns each class.
Anchors
Section titled “Anchors”- FS §2.2 Core classes
- Architecture Map “player-facing core”
- Plugin ownership MASTER: 02b-plugin-dependencies.md
GameState / PlayerState ownership (locked)
Section titled “GameState / PlayerState ownership (locked)”One GameState class and one PlayerState class. Sibling GFPs write fields / components onto them — they do not ship alternate AGameState / APlayerState subclasses.
| Class | Owning GFP (shell) | Who writes what |
|---|---|---|
ATFAGameMode |
TFACore | Experience / ruleset pick; spawns ATFAGameState |
ATFAGameState |
TFACore | Match phase, difficulty, session clock, shared world rules. TFAOnline (Online only): Ladder / RAID / Vault scoreboard snapshot hooks, Match Results freeze payload pointers — extends the same GS, no fork |
ATFAPlayerState |
TFACore | PUID / realm pool ID shell. TFAProgression: level, XP, unspent points, trees, Customizable. TFACombat: loadout / stance mirror tags (authoritative combat still on pawn ASC). TFAEconomy: Credits / BTUCOIN / LUMENAR ledgers account-scoped (Credits shared across characters on the PUID / Solo profile); I-bar chips read those ledgers via PS. TFAOnline: EOS identity link, LastMatchRecap |
Demo: until TFACore GFPs land, Lyra ALyraGameState / ALyraPlayerState remain host stand-ins — TF fields go on TF subclasses as soon as TFACore ships; do not scatter GameState logic into ADDON.
Target composition
Section titled “Target composition”| Class | Typical GFP | Job |
|---|---|---|
ATFAGameMode / ATFAGameState |
TFACore (+ Online writers) | Ruleset · match phase · difficulty |
ATFACharacter / ATerraFirmaCharacter |
TFACore / ADDON glue | Movement, stance, FPP/TPP dual components (same skeletal mesh · OwnerNoSee · TrueFPP bone-hide — FS-CAM-002), GAS avatar |
ATFAPlayerController |
TFACore | Enhanced Input, camera requests, UI router |
ATFAPlayerState |
TFACore (+ Progression / Combat / Economy / Online writers) | Level, XP, stats, trees, loadout, realm pool |
UTFAAbilitySystemComponent |
TFACombat spine + Progression grants | Shared ASC host; Melee/Singularity/Weapons GAs live in sibling Plugify GFPs |
UTFALoadoutComponent |
TFACombat | 15 slots + stance machine |
UTFAVitalityComponent |
TFACombat | Shield / Armor / Health + Energy |
UTFACameraDirector |
TFACombat | Stance-owned perspective |
UTFAFirehandBus |
TFAWeapons | Gunfeel / modular gun runtime |
UTFAInventoryComponent |
TFACharacterI | Bags / inspect |
UTFAVisionComponent |
TFAVision | Seven modes |
ATerraFirmaCharacter:ALyraCharactertype in ADDON- Content hero assets authored:
BP_Hero_TerraFirma+ pawn/input/ability DAs + parkourGA_Hero_* - GameState / PlayerState ownership matrix (above)
- Empty C++ character body
- Lyra pawn pipeline still authoritative for most combat (
DefaultPawnData_EmptyPawn) - AbilitySet / parkour GAs authored — not the live default pawn grant path
- Lyra GameState / PlayerState stand-ins on host
- Flesh character with TFA components (owned by correct GFPs, not all in ADDON)
- Ship
ATFAGameState/ATFAPlayerStateunder TFACore; wire Online / Progression writers - Wire experience / Asset Manager DefaultPawnData to TFA hero consistently
- See 02b-plugin-dependencies.md for deps, hierarchy, conflicts (MASTER)