Skip to content

02 — GFP cookbook

Where to put new C++, dependency direction, and ADDON boundaries.

  1. Logical names (TFACombat, …) pack into Game Feature Plugins — do not fork LyraGame into UBT modules named TFACombat.
  2. Dependencies point downward only (TFACore at root).
  3. UI GFPs talk to gameplay via Gameplay Message Router + TFACore interfaces — not by including Combat headers.
  4. FS-ARCH-011: Do not rip vendor/host. SKG glue stays in ADDON; new systems get their own GFP.
  5. Boot Active: ADDON + TFACore. Everything else Experience-enabled. 5b. Absorb reference systems into TF GFPs: Carbon (ParkourSystem/Character) and Phys Shield (BallisticShield) are pattern sources — copy needed code into TFACombat (ADDON only as temporary glue). Never ship them as their own .uplugin / never depend on those repos at cook time.
  6. Monetary platform is separate: Credits / BTUCOIN / LUMENAR live in a portable MonetaryPlatform plugin. TFAEconomy is only the TFA adapter GFP. Other games integrate the platform without any TFA* GFP. See 14-economy-ledgers.md and inventory/monetary-platform.md.
  7. Plugify (MASTER): Every major product surface is its own GFP so it can be disabled, replaced, or shipped alone — same idea as Lyra enabling ShooterCore vs TopDownArena per Experience. See § Plugify lock below.

Plugify lock — swappable systems (Lyra-style)

Section titled “Plugify lock — swappable systems (Lyra-style)”

Intent: Every major product surface is its own plug — pull / replace / omit without rewriting the host or siblings. This table is the complete catalog (no “etc.” left implied).

# Surface Plugin / GFP Kind Replace / omit by…
0 Lyra host (Experience, CommonUI shell, EOS hooks) LyraGame Host (not a TFA GFP) Do not fork — Experiences compose plugs
1 SKG / AimAssist / temporary parkour host glue ADDON Boot Active GFP Keep thin; Carbon/Phys Shield absorb into TFACombat — never dump whole systems here
2 Shared tags · messages · interfaces TFACore Boot Active GFP Replace only with same contracts — everything depends on it
3 Credits · BTUCOIN · LUMENAR · Marketplace Wallet · AntiCheat case store · CF EntitlementFlags MonetaryPlatform Portable .uplugin (not a GFP) Ship / swap the whole money product; other games can use it without TFA*
4 Boot / menus / Command Deck chrome TFAFrontend GFP · Plugify New Frontend GFP + Experience widgets
5 In-game HUD / OmniVisor TFAOmniVisor GFP · Plugify New HUD GFP; same message contracts
6 Camera · stance · vitality · shared combat ASC host TFACombat (thin spine) GFP · Plugify New spine GFP; same Core interfaces
7 Melee Drive TFAMelee GFP · Plugify New melee GFP; publishes hit/kill messages
8 Kinetic Flow + Singularity climax TFASingularity GFP · Plugify New climax GFP; subscribes to kill/Flow messages
9 Guns / Firehand / Demo Mod host TFAWeapons GFP · Plugify New weapons GFP
10 Mag / optic / parts dials (Refit product) TFAModular GFP · Plugify (optional) Split from Weapons when modular is a product; Demo may keep dials under Weapons
11 Character I · bags · Inspect · Invoke TFACharacterI GFP · Plugify New I GFP
12 XP · trees · 4×4 · tentacles · ordnance grants TFAProgression GFP · Plugify New progression GFP
13 Crafting / Forge recipes TFACrafting GFP · Plugify New crafting GFP
14 TFA money adapter (grants, I chips, marketplace routes, CF apply) TFAEconomy GFP · Plugify New adapter; never forks ledgers — enables MonetaryPlatform
15 Report / Trust overlay / ghost chrome TFATrust GFP · Plugify New Trust UI; cases live in MonetaryPlatform AntiCheat
16 Seven vision modes TFAVision GFP · Plugify New vision GFP
17 Objectives · missions · map drawers · encounters TFAWorld GFP · Plugify New world GFP
18 AI substrate (Logic Driver Squad/Agent · difficulty profiles) TFAAI GFP · Plugify New AI GFP; no second damage pipeline
19 EOS Connect · Discord · fireteam / clan / invites · Match Results / Ladder social TFAOnline GFP · Plugify New Online GFP
20 Content-only experiences / maps (ShooterMaps pattern) TFAMaps GFP · Plugify (content) New maps GFP; Experiences list GameFeaturesToEnable
21 All TF input mapping: IMC_TFA_* contexts, input config, and the game feature action that attaches them additively TFAInput GFP · Plugify New input GFP; keep additive — never edit Lyra’s IMCs

Built so far (2026-11-14): TFACore (contracts only: the FS 2.3 TFA.* tag taxonomy and the ITFAStanceInput interface), TFACombat (first slice: UTFALoadoutComponent and the stance rules), TFAInput (IMC_TFA_Default, input config, hold / double-tap dials) and ADDON (movement, camera and stance-key abilities). TFAInput’s _UI / _Map / _Chat contexts are not built. Cross-plugin calls go through TFACore contracts, for example the stance-key ability in ADDON finds ITFAStanceInput on the pawn and never includes TFACombat.

Not a separate GFP: Demo Mod UI lives under TFAWeapons + CommonUI. Ultimate (Shiv meter) stays Progression/Combat ASC grants — separate from Singularity (FS-CMB-006).

Hard rules

  1. No sibling #include. TFAMelee does not include TFAWeapons headers. Cross-talk = Gameplay Message Router + TFACore interfaces / tags only (Lyra pattern).
  2. Experience is the composition root. GameFeaturesToEnable lists which plugs are in this build (Demo can omit Frontend polish / Crafting / Vision / Monetary; a lab can omit Singularity).
  3. Kill / Flow credit is a message, not a hard call. Melee and guns emit TFA.Combat.KillConfirmed (name TBD in tags); TFASingularity (and HUD) subscribe. Swapping melee does not recompile Singularity.
  4. ADDON stays glue — never the place you dump a whole system “temporarily.”
  5. Monetary ledgers stay in MonetaryPlatform — TFAEconomy adapts only; Combat/Weapons never own money.
  6. Replace test: if removing the GFP (or MonetaryPlatform) from the Experience/enable set leaves the rest playable (degraded but compiling), the boundary is correct.
  7. Tick off by default (Lyra 5.8). Match ALyraCharacter: bCanEverTick = false. Prefer timers / events / GAS / messages. Gameplay mutations require HasAuthority() (or server validate). Never put damage / Flow / economy on client Tick. See FS-ARCH-014.
Plugins/MonetaryPlatform ← portable money + AntiCheat (not a GFP)
TFACore ← Boot Active · contracts only
├─ TFACombat (spine) ← camera · stance · vitality · ASC host
│ ├─ TFAMelee ← Melee Drive
│ └─ TFASingularity ← Flow + Singularity climax
├─ TFAWeapons ← guns / Firehand / Demo Mod
│ └─ TFAModular (optional) ← mag/optic/parts
├─ TFAOmniVisor ← in-game GUI
├─ TFAFrontend ← boot / Deck GUI
│ └─ TFAOnline → TFATrust
├─ TFAVision
├─ TFACharacterI → TFAEconomy → MonetaryPlatform
├─ TFAProgression → TFACrafting
└─ TFAWorld → TFAMaps · TFAAI
ADDON = SKG glue only (Boot Active)

Demo enable example: ADDON + TFACore + TFACombat + TFAMelee + TFASingularity + TFAWeapons + TFAOmniVisor — omit Frontend polish / Crafting / Vision / Monetary / Progression / World.
“New HUD” example: disable TFAOmniVisor, enable TFAOmniVisor_Lab that implements the same Core HUD message contracts.
“New money” example: swap or omit MonetaryPlatform + TFAEconomy — rest of game still boots (no I-wallet chips / marketplace).

Same as Plugify lock diagram above (authoritative).

  • ADDON GFP created on live Demo host (Active, ExplicitlyLoaded in uplugin; still need .uproject persist)
  • Doc lock: monetary stack = separate portable platform (ch. 14)
  • Stock ShooterCore / ShooterMaps / ShooterExplorer / TopDownArena
  • ADDON folder on 5.8_terra_demo
  • Remake TFACore · TFACombat spine · TFAMelee · TFASingularity · TFAWeapons · TFAOmniVisor on this host (see inventory/gfp-status.md)
  • Create remaining Plugify GFPs as phases hit them: Frontend · CharacterI · Progression · Crafting · Economy · Trust · Vision · World · AI · Online · Maps · optional Modular
  • Scaffold MonetaryPlatform portable plugin + TFAEconomy adapter GFP
  • Register ADDON / remade TFA* / SKG / MonetaryPlatform in uproject
  • TFACore first (tags, message structs, interfaces)
  • AC-ARCH-001..003 — GFP ownership / vendor boundary / threads (see FS)