22 — Demo (multiplayer Ladder vertical slice)
Single engineering authority for the Demo. GDD owns product prose; this chapter owns locks and the demo5.8 build order. Do not maintain a second full Demo plan in the host repo — host Docs/ stubs point here.
Design authority (product): GDD Demo — Multiplayer Ladder Vertical Slice (demo-multiplayer-ladder in tfa_gdd_html).
Host: E:\Dev\Local copies\5.8_terra_demo (Lyra 5.8 + ADDON).
How to program: 26-howto-program-demo.md · Full game sibling 25-howto-program-full-game.md.
This is not Full-game Year-1 (campaign, trees, monetary, modular Refit) — see 20-critical-path.md.
How Ladder GDD + this plan + kanban combine (read this first)
Section titled “How Ladder GDD + this plan + kanban combine (read this first)”They are one Demo, three layers — not three competing plans:
| Layer | Where | Owns | Does not own |
|---|---|---|---|
| 1. Product (what / why) | GDD demo-multiplayer-ladder |
Fantasy, slice loop, HUD/armory/Mod/abilities/combat intent, exit gates in design language | C++ paths, plugin enablement, phase order on demo5.8 |
| 2. Engineering (how / when) | This chapter (22) | Locks copied for builders, host inventory, hybrid camera/net, build order A→K, Have/Need | Full GDD catalogs / stills |
| 3. Tracking (status) | Kanban project Demo (Demo board) | Cards / checklists / blocked [art] etc. |
New product rules (edit GDD or ch. 22 instead) |
flowchart LR GDD["GDD Demo Ladder<br/>demo-multiplayer-ladder"] -->|"product locks"| PB["Bible ch. 22<br/>this plan"] PB -->|"phases A→K"| Host["demo5.8 build"] PB -->|"same exit"| KB["Kanban Demo board"] GDD -->|"scope text on cards"| KB
Same Ladder loop in all three: Boot → Online → loadout → Ladder match → fight → Match Results freeze → ladder update → requeue. Ch. 22 phases A–J build the fight/HUD/loadout spine that makes that loop real; phase K closes the online Ladder exit. GDD demo-exit = ch. 22 Ladder exit gate = kanban Demo exit cards.
GDD section → this chapter → build phase → kanban
Section titled “GDD section → this chapter → build phase → kanban”| GDD id / title | Covered in ch. 22 | Build phase | Kanban (Demo project) |
|---|---|---|---|
demo-what · What Demo is |
§ Intent + product locks | — | demo-ladder scope tasks |
demo-cut · What Demo is not |
§ Explicit non-goals · out-of-scope diagram | — | cuts on cards (trees/money/campaign) |
demo-loop · Vertical slice loop |
Product lock Pure Ladder · § Ladder exit gate | K (session + Results); A–J feed the fight | demo-ladder A Scaffold / session · Ladder hooks |
demo-hud-gui · HUD and Demo GUIs |
§ HUD / OmniVisor placeholders · Mod UI | G OV shell · I Demo Mod | Demo HUD / loadout cards |
demo-armory · Fixed armory set |
Fixed one-weapon lock · weapons/art marking | H | Weapons / armory cards |
demo-modkit · Demo Mod kit |
§ Demo Mod UI · gate OFF external | I | Demo Mod cards |
demo-abilities · Hard-coded specials |
§ Hard-coded special abilities | H | Specials / kits cards |
demo-combat · Combat bar |
Asymmetric Flow · second meter · full Burst Storm · Melee Drive · hybrid cam · AA · Phys Shield · guns | B–F, Eg, Fb · D Flow | Combat / camera / weapons cards |
demo-kanban · Demo kanban |
Points here + 21-module-kanban.md | — | This board |
demo-sandboxes-tba · Sandboxes B/C |
Product lock TBA — do not gate exit | after K | stretch / TBA cards |
demo-exit · Exit gates |
§ Ladder exit gate table | K | Exit / green cards |
Today’s additions (inventory audit, look-vs-body, OV placeholders, Phys Shield naming, AimAssist/SKG/Carbon on-disk truth) live in layer 2 so builders know what is on demo5.8 — they do not replace the GDD Ladder chapter; they implement it.
Share without full GDD: send ch. 22 + Demo kanban (see share note in Anchors). Product prose stays optional; the combination table above is the join.
Intent
Section titled “Intent”Demo = pre-art systems sandbox + multiplayer Ladder launch slice. Devs ship combat / HUD / loadout / match loop before final artwork. Fixed complete one-weapon kits (placeholders OK). OmniVisor is the in-match HUD shell you see everything through (Flow, ammo, loadout cues, Case plates, Demo Mod when gate ON). Demo Mod is the optional team tuner under that shell — switchable OFF (bDemoModEnabled / CVar / package strip) for external playtests. Not Solo campaign, not final skill trees, not economy, not mesh Refit.
Product locks
Section titled “Product locks”| Lock | Meaning |
|---|---|
| Pre-art sandbox | Systems / Firehand / HUD / loadout work with placeholder meshes — art swaps later without forking Demo |
| Pure Ladder | Boot → Online → loadout → Ladder match → fight → Match Results freeze → ladder update → requeue |
| OmniVisor HUD | Presentation shell for combat + Mod plates; stays for external playtest. Art incomplete — Demo ships placeholders (blocks / temp chrome / labeled slots); do not block Phase G or Ladder exit on final OV stills / Fire Shiv stamps. Swap real assets later without forking the shell |
| Fixed armory (one-weapon) | Capped Demo pool of complete melee + ranged weapons (DT_TFA_DemoArmory) authored as Receiver × Frame data kits (Adaptive / Aggressive / … · Frame-band MagSize) — not mesh Refit / part Installs |
| Demo Mod (OFF by default external) | Team-only: equipped-doll specs / affixes / gunfeel / Fake Mag / Lab. Hotkey O only when gate ON |
| Mod sections | Weapons · Armor · Jewelry/ES · Specials ×4 · Ordnance ×4 · Tentacles ×4 (TBA placeholders — not Final trees) |
| Loadout hotkeys | Stance / seat keys (FS-LOD-004) work with Mod OFF |
| Hard-coded specials | Fixed kits per Demo archetype — 4 specials · 4 ordnance · 4 tentacles; names TBA |
| Kinetic Flow · Singularity (Demo full) | In Demo (not deferred): Asymmetric Flow fuel · second meter (= Kinetic Flow) · full Burst Storm art. Melee Drive + Precision Fire feed Singularity per Spec fuel table; Ultimate stays separate (FS-CMB-006). Approach A = Ult/Energy streak only (FS-CMB-007) — not Flow. Do not treat equal-+1 / placeholder Burst as the Demo ceiling. Spec: 2026-10-26-singularity-one-flow-two-verbs-design.md · FS-CMB-002…006 · pack gaps 2026-11-05-pack-design-gaps.md |
| Melee Drive build | Studio foundation on host now (TFAMelee Plugify GFP; camera/stance on TFACombat spine) — phases below. Self-contained Bible implementer path (GAS / Plugify; deferred until foundation): tutorials/melee-drive-guns-singularity.md |
| Air Melee Drive | In Demo: Jump / double-jump air → Square legal; reuse ground directional slash montages; no root motion / Motion Warp in air. Downward slash when art exists — not Demo exit. Spec: 2026-11-02-air-melee-drive-design.md · FS-CMB-002. Singularity stays grounded (FS-CMB-005) |
| Dedicated melee | No gun-butt bash in Demo spine |
| Hybrid camera | Gun/ADS = True FPP (same skeletal mesh; local bone-hide head/torso/legs/feet — arms+gun only); melee / Singularity / Strike-from-gun = Wide TPP (FS-CAM-001…005 · FS-CAM-002) |
| Look vs body | Camera = mouse/RS only; move = keys/LS; mesh anims (e.g. jump flip) never drive camera — see § Look vs move vs body anim |
| Net / anim | Local FPP never kills TPP for remotes — OwnerNoSee + same-mesh bone-hide only; montages on TPP AnimInstance (FS-ARCH-013 · FS-CAM-002). ADS: local = TrueFPP FOV + optic / sight aim; remotes see TPP ADS pose (FS-GUN-013) |
| Guns path (current) | ShooterCore / Lyra until Firehand; SKG off until Firehand designed (or explicit unlock). Dual fire stacks forbidden |
| Aim assist | Product AA = AimAssistSystem (Plugins/ProAimAs71c3b70340fcV10/) — Enabled in .uproject. Precision Fire only — not melee magnet. Distinct from ShooterCore’s stock Lyra AA |
| Phys Shield | Hand-held board (LOAD OUT) — not Energy Shield / Barrier. Upstream: TangoAlphaDev/BallisticShield. Absorb into TFACombat. No ADS while in-hand. Bash / block = the fire button on the shield’s hand side (default shield left → LT/RMB: tap bash · hold block) — FS-LOD-009. Inactive board = no bash/block. Energy Shield = always-on vital + ES doll seat |
| Wrist + Phys Shield | Never in-hand together (FS-LOD-004/006). Key 1 = Wrist alone; Phys Shield pairs only with 1H gun (Hold 2) or 1H melee from W-slots (Hold 4). Both seats may be equipped on the doll; only one active pair at a time |
| Flow dump (TBD-056) | Locked: Health-only dump (Shield/Armor chips forgiven). Do not reintroduce any-damage defaults in Demo C++ |
| Parkour | Carbon Motion Warp after combat spine. Upstream: ParkourSystem/Character — absorb needed code into TFACombat / ADDON (not a ParkourSystem plugin). WILL NOT USE: Tic-Tac and all Carbon Vault* / mantle. Space = contextual Wall Run / Jump / wall jump-off / air double jump; opposite double-tap = wall-to-wall dash (see § Wall Run · opposite dash) |
No LyraGame fork |
GFP / ADDON only (FS-ARCH-010) |
| Kanban | Project Demo on tracker board |
| Sandboxes B/C (TBA) | Per-player item design · Fireteam vs AI — do not gate Ladder exit |
Regular / casual MP is stretch after Ladder exit.
Equipped vs active (in-hand) vs inactive — define “holstered”
Section titled “Equipped vs active (in-hand) vs inactive — define “holstered””TFA has no hip-holster fantasy. The BallisticShield QuickBar reference may say holstered; product language is below. Aligns with FS-LOD-006 (“equipped but not in-hand”).
| Term | Meaning | Player-facing |
|---|---|---|
| Equipped | Item occupies a doll / LOAD OUT seat (W1–W4, Wrist, Phys Shield, armor, ES, jewelry, …) | Shows on paper doll / OV36 / loadout |
| Active / in-hand | Current stance pair — the piece(s) you can fire, strike, block, or bash with right now | Visible in hands (TPP body; TrueFPP shows arms+gun via same-mesh bone-hide) |
| Inactive (code may say holstered / stowed) | Equipped but not in the active pair — no fire / strike / block / bash from that piece until you stance into it | May hide in-hand mesh or use a stowed attach; not a required hip holster socket |
Rule: Every combat piece you fight with is first equipped. Stance keys (FS-LOD-004) only change which equipped pieces are active. Unequip = leave the seat empty (bag / clear), not “holster.”
How they combine
Section titled “How they combine”| Seat / piece | Equipped | Active | Inactive |
|---|---|---|---|
| W1–W4 gun or 1H/2H melee | On a W seat | In current stance (solo, dual, hybrid, or shield pair) | Other W pieces stay equipped; no attack from them |
| Wrist | Wrist seat filled | Key 1 only — solo Wrist stance | Equipped but idle whenever stance ≠ Wrist |
| Phys Shield | Phys Shield seat filled | Only in Gun + Phys Shield (Hold 2) or Melee + Phys Shield (Hold 4) with a legal 1H partner | Equipped, not in-hand → no block/bash (FS-LOD-006) |
| Energy Shield | ES seat (Barrier / Aegis) | Always contributing vital — not an in-hand weapon | N/A as “inactive weapon”; not toggled by stance the way Phys Shield is |
| 2H in a W seat | Equipped | If that 2H is the active draw → locks duals / hybrids / Phys Shield pair | Stowed 2H in another slot does not lock 1H draws (FS-LOD-006) |
Stance examples
Section titled “Stance examples”| Input | Active | Inactive (still equipped) |
|---|---|---|
| Tap 2 (solo gun) | That 1H gun | Other W pieces; Phys Shield if equipped; Wrist if equipped |
| Hold 2 → Gun + Phys Shield | 1H gun + Phys Shield in-hand | Other W / Wrist; no ADS |
| Tap 4 (solo 1H melee) | That melee | Phys Shield equipped but not in-hand |
| Hold 4 → Melee + Phys Shield | 1H melee (W-slot, not Wrist) + Phys Shield | Wrist must not be the melee partner |
| Key 1 | Wrist razors only | Phys Shield cannot be in-hand (hard lock) |
| Tap 6 hybrid | Named gun + melee | Phys Shield not in that pair |
Implementation note (BallisticShield / QuickBar)
Section titled “Implementation note (BallisticShield / QuickBar)”Upstream repo: TangoAlphaDev/BallisticShield (LyraQuickBarComponent for ballistic / Phys Shield). Map reference bSpecialHolstered / “holstered item” APIs to bPhysShieldInactive / not in-hand`. Replicate active vs inactive; keep Phys Shield equipped on the seat the whole time unless the player clears the seat. Same idea for guns: unequipped from hands ≠ removed from W1–W4.
Upstream origins (Carbon · BallisticShield)
Section titled “Upstream origins (Carbon · BallisticShield)”| System | Upstream (canonical) | What we use | Local mirror (when restored) |
|---|---|---|---|
| Carbon parkour | github.com/TangoAlphaDev/ParkourSystem · Character/ |
Pattern + selected sources — cut Tic-Tac (§ Carbon port cuts) | _compare/ParkourSystem-main/ (+ Content/ParkourAnimations/ for anim feed) |
| Phys Shield | github.com/TangoAlphaDev/BallisticShield | QuickBar / inactive-seat pattern | Docs/Reference/BallisticShield/ |
Absorb rule (MASTER): Upstream repos are reference only. Ship by copying / adapting needed code into our TF GFPs (TFA* · ADDON as temporary glue). Do not install ParkourSystem or BallisticShield as Plugins/ · do not keep a live UBT dependency on those repos · do not overwrite LyraGame QuickBar. Rename into TFA types (UTFA*, GA_Hero_*, etc.) as you port.
| Upstream | Target GFP (lasting home) | Scratch host OK? |
|---|---|---|
| Carbon WallRun* / MotionWarp path (Vault* WILL NOT USE) | TFACombat (movement verbs) — parkour content may start under ADDON then move | ADDON until Phase J absorb |
| BallisticShield QuickBar / Phys Shield draw-stow | TFACombat (loadout / stance / Phys Shield seat) | Thin ADDON glue only if needed for early Fb |
Disk truth (2026-10-30): Both demo5.8 and 5.8_terra_demo are missing the local mirrors above. Re-clone into _compare / Docs/Reference for reading before Phase Fb / J — then absorb into TF plugins, do not leave as a third-party plugin. Prefer 5.8_terra_demo.
Anchors
Section titled “Anchors”- How they combine: § How Ladder GDD + this plan + kanban combine (top of this chapter) — one Demo, three layers
- GDD (product master):
tfa_gdd_html→#demo-multiplayer-ladder(What / Cut / Loop / HUD / Armory / Mod / Abilities / Combat / Kanban / Exit). Optional for share packs - Kanban Demo: Demo board · 21-module-kanban.md
- Flow / Singularity: 2026-10-26-singularity-one-flow-two-verbs-design.md
- Melee Drive tutorial (detail): tutorials/melee-drive-guns-singularity.md
- Weapons / Firehand: 11-weapons-firehand-bus.md · inventory/content-placeholders.md
- Demo Mod specs: inventory/demo-mod-item-specs.md · Field Specs inventory/demo-mod-field-specs.md · Shiv Specs inventory/demo-mod-shiv-specs.md · Mag/Frame inventory/demo-fake-modular-optics-mags.md · mock
tfa_gdd_html/figures/demo_mod_mock.html - Online: 16-online-social-trust-match.md
- Upstream refs: ParkourSystem/Character · BallisticShield · § Upstream origins
- Keymapping (Press/Hold/Release MASTER): 08-camera-input-movement.md · FS-INP-004
- Host stubs / refs (when restored):
5.8_terra_demo/Docs/Reference/(+ AimAssist README)
flowchart TB
subgraph demo [Demo product]
Ladder[Ladder vertical slice]
OV[OmniVisor HUD shell]
Armory[Fixed one-weapon armory]
Kits[Hard-coded special kits]
Flow[Kinetic Flow Singularity]
Melee[Melee Drive]
Guns[Precision Fire]
end
subgraph mod [Team only]
Tuner[Demo Mod O-key]
end
subgraph host [5.8_terra_demo Plugify]
ADDON[ADDON TerraFirma]
Core[TFACore]
Combat[TFACombat spine]
MeleeGFP[TFAMelee]
SingGFP[TFASingularity]
Weap[TFAWeapons]
SC[ShooterCore until Firehand]
AA[AimAssistSystem enabled]
end
subgraph outScope [Not in Demo]
Campaign[Solo campaign]
Trees[Final skill trees]
Money[Monetary]
Modular[Modular parts]
SKGoff[SKG until Firehand]
end
OV --> Ladder
Armory --> Ladder
Kits --> Ladder
Flow --> Ladder
Melee --> Flow
Guns --> Flow
Tuner --> OV
ADDON --> Core
Core --> Combat
Combat --> MeleeGFP
Combat --> SingGFP
Combat --> Weap
MeleeGFP --> Melee
SingGFP --> Flow
Weap --> Guns
Combat --> OV
SC --> Guns
AA --> Guns
SKGoff -.->|shelved| Guns
In Demo vs out of Demo
Section titled “In Demo vs out of Demo”| In Demo | Out of Demo |
|---|---|
| Ladder vertical slice (required exit) | Solo campaign / Part 1 / Earth hub |
| OmniVisor HUD + Demo loadout GUI | Full Character I economy / Forge / trees |
| Fixed one-weapon armory (melee + ranged) as Receiver × Frame data kits | Mesh Refit / part Installs / live Forge of Receiver×Frame on an existing drop |
| Demo Mod (team, O) — off for external | Demo Mod visible to outside playtesters |
| Hard-coded special ability kits | TFAProgression tree spend |
| Melee Drive + Precision Fire · Singularity climax | Merging Ultimate into Flow (FS-CMB-006) |
| Asymmetric Flow · second meter (= Flow) · full Burst Storm art | Ult/Energy Approach A–only / placeholder Burst Storm as Demo exit |
| Melee Drive foundation on host (build phases) | Treating Melee Drive tutorial as blocking Demo exit |
| Carbon WallRun* (Phase J) | WILL NOT USE: Tic-Tac · all Vault* / VaultHigh* / mantle (TicTacTrace · vault classifiers — never port) |
| AimAssistSystem for Precision Fire | Ambient melee magnet |
| Match Results + ladder hooks | Monetary / Crafting / campaign |
| Host: Docker DS + EOS stack | Trust P9b / full Career as Demo exit |
| SKG on disk, not enabled | Enabling SKG without Firehand / dual fire stacks |
Do not start for Demo: MonetaryPlatform, TFAEconomy, TFAProgression trees, TFACrafting, TFAWorld campaign, modular gun/melee parts — 20-critical-path.md.
Weapons lock — no mesh modularity in Demo
Section titled “Weapons lock — no mesh modularity in Demo”- One weapon = one complete kit. No socketed parts / Refit mesh swaps for Demo loadouts.
- Fake-modular lab: Demo Mod may override Mag / Optic / Range / Zoom data — mesh fixed (FS-GUN-012). inventory/demo-fake-modular-optics-mags.md.
- Placeholders OK if marked; must still fire / swing.
HUD, armory, Demo Mod
Section titled “HUD, armory, Demo Mod”- OmniVisor: HUD shell — Flow, ammo, vitals, Counter cues, Mod plates when gate ON. Systems compose under it; Mod is not a disconnected app.
- Stay for external: OmniVisor + loadout GUI + fixed armory. Mod gate OFF / stripped.
- Demo Mod (
W_TFA_DemoMod): team tuner.bDemoModEnableddefault false external.
OmniVisor assets (placeholders — locked)
Section titled “OmniVisor assets (placeholders — locked)”Final OmniVisor art is not complete. Demo Phase G and Ladder exit use placeholders only. Do not wait on OV lock PNGs, Fire Shiv stamps, or Case plate polish.
| Rule | Meaning |
|---|---|
| Placeholder OK | Solid/simple UMG panels, temp fonts, labeled slots (Flow / AMMO / vitals / Counter / Mod). Mark [placeholder] in widget names or comments |
| Wire data first | Bind real Flow, ammo, vitals, Counter, loadout cues — chrome can look unfinished |
| No invented final art | Do not GenerateImage / invent Fire Shiv marks as “final.” When real stamps land, swap textures/materials under the same widget tree |
| GDD stills | ov1.jpg, OV36–38, etc. remain target reference, not a Demo blocking dependency |
| Exit bar | “OmniVisor HUD readable” = data readable on placeholders, not art-complete |
Demo Mod UI (lock)
Section titled “Demo Mod UI (lock)”Stills: OV36 ov36_demo_mod.jpg · OV37 ov37_demo_mod_edit.jpg · OV38 ov38_demo_hud_ammo.jpg. Interactive: tfa_gdd_html/figures/demo_mod_mock.html. Specs: inventory/demo-mod-item-specs.md.
| Piece | Spec |
|---|---|
| Gate | bDemoModEnabled. OFF = tuner unreachable; play + loadout keys still work |
| Open | O only when gate ON |
| OV36 | Seats: W1–W4 · Wrist · Phys Shield · Helm · Chest · Gloves · Belt · Boots · Energy Shield · Ring1 · Ring2 · Amulet + Lab (lists filled + empty). Per-seat equip ON/OFF (fillOverrides; empty = unequipped, not mute) · Isolate / Restore kit. Kit catalogs: separate ranged / melee buckets; ranged = Receiver × Frame kits (auto_adaptive, hc_aggressive, …); W1–W4 ranged-only until DEMO_ALLOW_MELEE_ON_W. No Gear bag |
| OV37 | Stats · Affixes · Sockets · Gunfeel (guns). Equipped kit picker Ranged / Melee optgroups (Frame kits). Field Spec slots on guns + melee (FS-ITM-014: Rare 1 · Legendary 2 · Unique 3 · Apex 4). Shiv Spec on Unique/Apex guns + melee (FS-ITM-015: 1 socket · per-name TBD). MagSize/reserve Frame-band per Frame + Field Spec deltas (guns). Name / Quality rules per item-specs. No mesh |
| Lab | Combat economy · Flow · Singularity (Asymmetric Flow · second meter · Burst Storm) · Attributes · Encounter/PowerΔ · Affix totals (FS-DMG-001 channels) |
| 1080p | Fixed chrome; tab body = UMG ScrollBox — Lab Flow uses subtabs asymmetric · second · burst · singularity |
| HUD ammo | Mag OK → OmniVisor AMMO / MagFamily (OV38) |
| Authority | Server owns truth; client requests only |
| Promote | Export tfa-demo-mod/v1 → demo-mod-export.md · promote_demo_mod.py |
Hard-coded special abilities
Section titled “Hard-coded special abilities”Fixed kits per archetype (Ultimate + specials / tentacles / ordnance). Server grants on sandbox enter — no tree UI.
Additional Demo sandboxes (TBA)
Section titled “Additional Demo sandboxes (TBA)”| Sandbox | Intent |
|---|---|
| A (current) | Shared Demo Mod / Lab |
| B (TBA) | Per-player item design |
| C (TBA) | Fireteam vs AI (Logic Driver Pro / TFAAI) |
B/C do not gate Ladder exit.
Not a Demo sandbox: Cinematic Benchmark is a separate Year-1 product (entitled UE showcase + Motion Matching + Benchmark score submit). See 28-cinematic-benchmark.md. It does not gate Ladder exit and is not sandbox A/B/C.
Ladder exit gate (Demo done)
Section titled “Ladder exit gate (Demo done)”| Prove | Notes |
|---|---|
| Session boot into Ladder | EOS / Lyra online |
| OmniVisor HUD readable | Stays external — placeholders OK (art incomplete) |
| Loadout from fixed one-weapon armory | Not modular / not loot |
| Melee + ranged kits playable | Placeholders OK if marked |
| Hard-coded specials fire | No tree UI |
| Flow / Singularity combat bar | Asymmetric Flow + second meter (= Flow) wired; melee + gun path to Singularity |
| Melee Drive; Singularity auto TPP | Full Burst Storm art (not placeholder-as-exit) |
| Hybrid FPP/TPP + remotes see TPP body | AC-CAM / AC-NET |
| Demo Mod O when ON; unreachable external | Hide/strip |
| Match Results + ladder update | Career chrome can wait |
Exit: 2+ players Ladder green with HUD + armory + Flow/Singularity + hybrid camera + Mod-off external → Demo done.
Demo weapons + art marking
Section titled “Demo weapons + art marking”| Status | Rule |
|---|---|
| Placeholder OK | Stand-in mesh; swap later without code fork |
| Art marked (FPS-15) | Still in Demo pool; kanban [art] |
Host architecture (demo5.8)
Section titled “Host architecture (demo5.8)”| GFP / module | Owns (Plugify target — remake on 5.8_terra_demo) |
|---|---|
| ADDON | ATerraFirmaCharacter, experience, MotionWarp, Carbon later — glue only |
| TFACore | Tags / messages / interfaces (Boot Active with ADDON) |
| TFACombat (spine) | Camera director, stance, vitality, shared ASC host, hit-auth spine |
| TFAMelee | MeleeDrive / MeleeStrike / Counter / ANS / melee DAs (Plugify) |
| TFASingularity | Kinetic Flow + Singularity climax (Plugify; message-driven) |
| TFAWeapons | Gun data / Firehand / Demo Mod; depends ShooterCore + AimAssistSystem (Plugify) |
| TFAOmniVisor | In-game HUD (replaces legacy TFAAwakening name for product HUD) |
| ShooterCore | Live fire / kills until Firehand |
| AimAssistSystem | Enabled — Precision Fire AA |
| SKGShooterFramework | On disk — not in .uproject until Firehand / unlock |
| Phys Shield | BallisticShield QuickBar pattern → ADDON/TFA port |
| TFAOnline (later) | Ladder session |
Dependency: Sibling GFPs do not #include each other — Core messages only. ADDON does not own Melee/Flow/guns. See 02-gfp-cookbook.md Plugify lock.
Host inventory (demo5.8) — enumerated audit
Section titled “Host inventory (demo5.8) — enumerated audit”Project file: E:\Dev\projects\demo5.8\Lyra_5p8.uproject
Audit date lock: treat this table as the Demo plan truth for “what’s on disk vs what’s wired.” Re-check paths before claiming a Phase gate.
1. Marketplace / product plugins (Plugins/)
Section titled “1. Marketplace / product plugins (Plugins/)”| # | Name | Path | In .uproject? |
Enabled? | Demo role | Phase |
|---|---|---|---|---|---|---|
| 1 | AimAssistSystem | Plugins/ProAimAs71c3b70340fcV10/ (AimAssistSystem.uplugin) |
Yes | True | Product Precision Fire AA (not ShooterCore’s stock Lyra AA) | Eg (wire); listed Enabled from A |
| 2 | SKGShooterFramework | Plugins/FPSFirstc0c0ff9d1ea1V12/ (SKGShooterFramework.uplugin) |
No | Off (locked) | Future FPS runtime under Firehand — do not enable | After Firehand / explicit unlock |
| 3 | AnimationWarping | Engine / project plugin | Yes | True | Warping support for melee + parkour MotionWarp | C, J |
| 4 | AnimationLocomotionLibrary | Engine / project plugin | Yes | True | Locomotion helper with warping | C, J |
2. Game Feature plugins (Plugins/GameFeatures/)
Section titled “2. Game Feature plugins (Plugins/GameFeatures/)”| # | Name | Path | In .uproject Plugins list? |
.uplugin EnabledByDefault |
Demo role | Phase |
|---|---|---|---|---|---|---|
| 5 | ADDON | Plugins/GameFeatures/ADDON/ |
No (discovered under GameFeatures) | True | Character / experience / MotionWarp glue — not combat dump | A → J |
| 6 | TFACore | Plugins/GameFeatures/TFACore/ |
No | REMAKE | Contracts only — Boot Active with ADDON | C |
| 7 | TFACombat (spine) | Plugins/GameFeatures/TFACombat/ |
No | REMAKE | Camera / stance / vitality / ASC host | B → D |
| 8 | TFAMelee | Plugins/GameFeatures/TFAMelee/ |
No | REMAKE | Melee Drive (Plugify) | E |
| 9 | TFASingularity | Plugins/GameFeatures/TFASingularity/ |
No | REMAKE | Flow + Singularity (Plugify) | E |
| 10 | TFAWeapons | Plugins/GameFeatures/TFAWeapons/ |
No | REMAKE | Gun data / Firehand / Demo Mod (Plugify) | F / H |
| 11 | TFAOmniVisor | Plugins/GameFeatures/TFAOmniVisor/ |
No | MISSING | In-game HUD placeholders (product name; not legacy TFAAwakening) | G–I |
| 12 | ShooterCore | Plugins/GameFeatures/ShooterCore/ |
Yes | False (forced on via uproject) | Live fire / kill credit until Firehand | E (gun→Flow); current guns |
| 13 | ShooterMaps / ShooterExplorer / ShooterTests | Plugins/GameFeatures/… |
Yes (Maps/Explorer/Tests) | per plugin | Lyra shooter support / tests — keep; not TFA product | — |
Note: Prior demo5.8 may still show a fat TFACombat / TFAAwakening tree — do not port; remake Plugify GFPs on 5.8_terra_demo (gfp-status.md). Experience must activate Demo GFPs — folder present ≠ match loads them.
3. Reference packs (Docs/Reference/) — pattern sources, not live plugins
Section titled “3. Reference packs (Docs/Reference/) — pattern sources, not live plugins”| # | Pack | On disk | Contents | Not present | Demo role | Phase |
|---|---|---|---|---|---|---|
| 11 | BallisticShield (= TFA Phys Shield) | Need restore — was Docs/Reference/BallisticShield/ |
Upstream: TangoAlphaDev/BallisticShield. Local mirror = QuickBar .cpp/.h + zip + README. Not a marketplace / Fab plugin |
No Plugins/ install expected — reference code only, not a shippable Phys Shield GFP |
Re-vendor from GitHub → port into ADDON/TFA — never overwrite LyraGame QuickBar; code “holstered” = inactive |
Fb |
| 12 | AimAssistSystem notes | Check host | Pointer to live plugin path + product vs ShooterCore AA | No zip (plugin is installed at #1) | Docs only | Eg |
4. Compare / scratch (not installed)
Section titled “4. Compare / scratch (not installed)”| # | Drop | Path | On disk? | Demo role | Phase |
|---|---|---|---|---|---|
| 13 | Carbon / ParkourSystem | _compare/ParkourSystem-main/ |
Need restore (missing on demo5.8 + 5.8_terra_demo 2026-10-30) |
Upstream: ParkourSystem — we took Character/ (CarbonParkourComponent, parkour GA/DA/types, notifies). Not a Plugins/ plugin; compare/scratch only. Phase J port onto ADDON / TerraFirma; cut Tic-Tac. Re-clone before J |
J (later) |
| 14 | Engine MotionWarping | Engine plugin (not vendored under host Plugins/) |
Use with AnimationWarping (#3) | Host for vault / wall-run / strike warp | C, J |
5. Content on disk (not plugins)
Section titled “5. Content on disk (not plugins)”| # | Content | Path | On disk? | Demo role | Phase |
|---|---|---|---|---|---|
| 15 | ParkourAnimations | Content/ParkourAnimations/ |
Yes (~600+ assets) | Anim feed for Phase J Carbon port | J |
| 16 | RollDodgeDash source zip | Content/RollDodgeDashSet/SourceFiles.zip |
Yes | Ancillary motion set — not Demo spine gate | optional |
| 17 | OmniVisor final art | GDD stills (ov1, OV36–38, Fire Shiv stamps) |
Target refs only | Incomplete — Demo uses placeholders (ch. 22 § OmniVisor assets) | G |
6. Explicitly missing / not yet ported (plan debt)
Section titled “6. Explicitly missing / not yet ported (plan debt)”| # | Expected | Status | Action |
|---|---|---|---|
| 18 | N/A — none exists / none expected. Upstream is the GitHub QuickBar repo (#11) | Do not hunt Fab. Re-vendor from BallisticShield then port into ADDON/TFA (Fb) | |
| 18b | Local BallisticShield + Carbon mirrors | Missing on live hosts | Clone into 5.8_terra_demo/Docs/Reference/BallisticShield/ and _compare/ParkourSystem-main/ (Character sources) before Fb / J |
| 19 | SKG in .uproject |
Intentionally absent | Keep off until Firehand |
| 20 | TFAOnline / Ladder session GFP | Need (later) | Phase K |
| 21 | Final OmniVisor chrome | Incomplete | Placeholders through G–K |
Not plan debt (still planning): Do not add “install CarbonParkour under Plugins/” or “vendor a Carbon zip under Docs/Reference/” as missing work now. Inventory for parkour is #13 (_compare slice) + #15 (anims) + cut notes README. Phase J decides the port — no plugin install expected during planning.
7. Quick “where is the zip?” map
Section titled “7. Quick “where is the zip?” map”| Doc mention | Actual location | Size / note |
|---|---|---|
| BallisticShield | github.com/TangoAlphaDev/BallisticShield → vendor Docs/Reference/BallisticShield/ |
QuickBar sources only (not marketplace) |
| AimAssist “zip” | None — live plugin #1 | README in Docs/Reference/AimAssistSystem/ when present |
| Parkour / Carbon | ParkourSystem/Character → _compare/ParkourSystem-main/ |
Anims: Content/ParkourAnimations/ · cut notes: Docs/Reference/CarbonParkour/README.md |
| SKG | Plugin folder #2, not a Docs zip | Off |
Carbon port cuts (Phase J) — WILL NOT USE (Tic-Tac + Vault*)
Section titled “Carbon port cuts (Phase J) — WILL NOT USE (Tic-Tac + Vault*)”Sample enum in _compare/.../CarbonParkourTypes.h. TFA (Full + Demo) does not ship Tic-Tac or parkour Vault / Mantle. When porting, delete or never register these paths — do not leave dead TicTacTrace / vault classifiers ticking. Cite FS-MOV-003.
| Keep (absorb) | WILL NOT USE (never port) |
|---|---|
WallRunLeft · WallRunRight · WallRunOver · WallRunOn |
All Vault* · VaultXShort/Short/Medium/Long/On · VaultHigh* |
| Wall Run GA + MotionWarp continuous wall stick (FS-MOV-004) | VaultTicTacLeft · VaultTicTacRight · TicTacLeft/Right/On |
TicTacTrace / CachedTicTac* / WarpTargetTicTac / bTicTacOffset / VaultSolution vault branches |
|
Any Content anims authored only for Vault or Tic-Tac · GA_Hero_Vault · MOVE_TFA_Vault · TFA.World.Vaultable |
Port rule: Side-hit / height classification must fall through to WallRun* or plain Jump — never Vault* or Tic-Tac. Do not spend art budget on vault / Tic-Tac montages.
Wall Run · opposite dash · wall jump-off (Demo / GDD lock)
Section titled “Wall Run · opposite dash · wall jump-off (Demo / GDD lock)”Shared Space (Jump / parkour): One key — Space (pad Cross / A). Context picks the verb. Does not give Space ownership of Dodge / Slide / Crouch / Vault (FS-INP-001 · FS-MOV-003 WILL NOT USE).
| Context | Space does |
|---|---|
| Near a low ledge / former “vaultable” prop | Jump only — WILL NOT USE Vault (FS-MOV-003) |
Near / contact TFA.World.WallRunnable (or WallWalkable tag — same family) at sprint / legal enter |
Enter Wall Run on that side |
| Already Wall Running | Wall jump-off — leave the wall with exit momentum (FS-MOV-004) |
| Air, after wall jump-off (air-jump charge available) | Double jump along the wall-exit direction (not a free midair redirect). Mesh flip OK; Look unchanged |
| No wall / post-exit context | Normal Jump (incl. double-jump flip mesh-only — look rule unchanged) |
Wall Run persistence: Once entered, Wall Run continues while valid wall contact (not a hold-to-stick Wall Walk). Release Space does not cancel. Ends on: leave surface / fail / WallRunMaxDuration timeout / wall jump-off / auto peel (lookahead miss or turn gate). Opposite-wall dash jump keeps Wall Run alive on the new wall (see below). Spec: docs/superpowers/specs/2026-11-02-wall-run-curve-end-design.md.
Lookahead / curve / turn gate: While attached, probe ahead along the wall tangent (WallRunLookaheadDistance lab default 2.0 m · WallRunLookaheadSamples 4). No tagged wall ahead → auto peel (same exit as wall jump-off) before walking off the lip. If wall-normal delta > MaxWallTurnDegrees (lab default 45°) → auto peel. Under the gate → curve follow (re-stick normal; no timer reset). Turn / lookahead dials are not DEX-scaled. Demo Mod Lab › Parkour exposes them for playtest.
Wall Run timer: Counts down while attached. Lab / Demo default WallRunMaxDuration = 3.0 s (parkour DA + Demo Mod Lab › Parkour dial). Fresh enter = full. Successful opposite-wall dash jump resets the timer to full. Failed / out-of-range dash does not reset. DEX (and parkour affixes) scale effective duration — Mod exposes %/pt dials.
Wall jump-off + directional double jump:
| Rule | Lock |
|---|---|
| Wall → air | While Wall Running, Space = jump off the wall (ends Wall Run; keeps exit momentum) |
| Air → double jump | Press Space again → one double jump in the same direction as the wall jump-off |
| Not | Free midair redirect onto look/stick alone · parkour Vault (WILL NOT USE) · opposite-wall dash jump (that stays double-tap opposite) |
| Camera | Double-jump flip is mesh only — see § Look vs move vs body anim |
Opposite-wall dash jump (wall-to-wall):
| Rule | Lock |
|---|---|
| Input | Double-tap move toward the opposite side of the current Wall Run (same double-tap family as Dodge FS-MOV-001, contextual while wall-running) — not Space |
| Feel | Dash jump across the gap (short airborne transfer), then stick Wall Run on the far wall |
| Example | Wall Run Left → double-tap Right → dash-jump to a Right wall |
| Range | Opposite wall must be within MaxWallDashDistance — lab / Demo default 6.0 m (parkour DA + Demo Mod Lab › Parkour). DEX / parkour affixes scale effective distance |
| Success | Attach to far wall → continue Wall Run on that side → reset Wall Run timer to full |
| Fail | No opposite wall in range → no transfer (no free mid-air teleport); timer unchanged. Default = stay on current run or natural fall if contact lost |
| Same-side double-tap | Does not wall-to-wall (not “dash deeper into” the wall you are on) |
| Ground | Double-tap remains Dodge — only wall-run context remaps opposite double-tap to dash jump |
Not Tic-Tac / Vault: Controlled distance-gated dash jump between two walls — not Carbon Tic-Tac or Vault* montages (WILL NOT USE).
FS cite: FS-MOV-004 (Space enter Wall Run; continuous; timer + dash-jump reset; wall jump-off; directional post-exit double jump) · FS-MOV-003 WILL NOT USE · double-tap axis FS-MOV-001 · verb non-overlap FS-INP-001.
Hybrid camera + dual-component net (hard)
Section titled “Hybrid camera + dual-component net (hard)”One authored character skeletal mesh — no separate arms-only asset (FS-CAM-002). Dual components + OwnerNoSee, not dual art meshes.
| Mode | Local | Remote |
|---|---|---|
| TrueFPP | Eye cam ~105° on control rotation. FPP view component: same skeletal asset; bone-hide head, torso/body, pelvis, legs, feet so only arms + gun stay visible. TPP component: full body, bOwnerNoSee = true (optional Cast Hidden Shadow proxy if self-shadow breaks). Prefer bone / section hide — not material alpha as the primary hide. ADS: TrueFPP weapon FOV + Sight / Scope aim (FS-GUN-013) — look-through allowed for ScopeShort / ScopeLong |
Full TPP body + gun montages; ADS: remotes see TPP ADS / cheek-weld pose (local ADS FOV / optic view is not shared) |
| WideTPP | Spring-arm / Lyra TPP; show full TPP; stop bone-hide / hide or idle the FPP view component | Same TPP body |
| Shift-Out | Blend to TrueFPP in 0.2 s; blocked if ADS-locked | — |
Forbidden: SetHiddenInGame on TPP for perspective (hides body for everyone). Networked montages + equipment stay on TPP AnimInstance / sockets. FPP-biased upper overlays (later) stay on the same skeleton.
Look vs move vs body anim (no camera flip)
Section titled “Look vs move vs body anim (no camera flip)”Lock (FS-CAM-006): Camera orientation is always mouse / right-stick look (FS-INP Look) in both TrueFPP and WideTPP. Locomotion is always move keys / left-stick. The body may rotate, flip, twist, or somersault for any reason — double-jump flip, melee / gun attack montages, dodge/roll, Wall Run re-stick, root motion — and that motion is mesh-only. It must never:
- Rotate, pitch, roll, or re-aim the gameplay camera
- Steal or freeze mouse / RS look
- Copy mesh orientation into control rotation
During the flip / attack, the camera keeps facing the aim it had (and any new mouse deltas the player adds). Player look input remains live for the whole animation unless a later explicit CC / ability camera mode says otherwise (Singularity may grant a temporary ability camera — it must restore free look after).
| Channel | Owner | Must not |
|---|---|---|
| Look / camera | Mouse or RS → control rotation (pitch + yaw the player aims) — always | Follow mesh root, flip somersault, melee/gun attack twist, jump montage, dodge/roll, or Wall Run mesh / curve re-stick |
| Move (ground / air) | WASD / LS — relative to camera yaw (not pitch) | Steal look; ignore move input while flipping unless a separate CC rule says so |
| Move (Wall Run) | WASD / LS — wall-locked along tangent / wall plane (FS-MOV-004) | Follow camera yaw; peel from look alone |
| Body (local + remotes) | AnimInstance / montage on TPP mesh (and local FPP view component / bone-hide when TrueFPP) | Write camera FOV, blend, or control rotation |
TrueFPP: View is eye / control rotation. If the body (or visible arms) flips during a jump or attack, the camera does not roll or pitch with the spine — aim stays where the mouse left it; mouse still steers.
WideTPP: Spring-arm follows the capsule / pawn, not flipping mesh bones. Remotes still see the flip / attack on your TPP body; their screen is their own mouse look on their pawn.
Remotes never use your camera. They only need replicated movement + TPP anim. Your flip / attack is visible on your mesh; it does not “send” a tumbling camera.
Examples
| Situation | Camera | Body |
|---|---|---|
| Walk + mouse look | Tracks mouse | Locomotion facing per move / aim rules (camera-yaw relative) |
| Double jump, 2nd jump = flip | Stays on mouse aim — no flip follow; mouse still live | Mesh plays flip; remotes see it |
| Any attack montage that twists / spins the mesh (FPP or TPP) | Stays on pre-attack aim + live mouse / RS | Attack anim on mesh only |
| Wall Run + free look | Stance owns FPP/TPP (FS-CAM-001); mouse free; no soft follow toward wall | Runs along wall tangent (W wall-locked); look does not steer path |
| Melee strike montage | Stance camera (WideTPP) still mouse-look yaw/pitch | Attack anim on TPP; no auto magnet |
| Singularity / takedown | May use ability camera mode if granted | Separate from jump-flip rule; ability stack still must not leave look stuck after |
Wall Run camera/move: docs/superpowers/specs/2026-11-02-wall-run-camera-move-design.md.
Implementation cue: Do not parent the gameplay camera to animated bones for jump / flip / attack. Keep bUseControllerRotationYaw / look on the controller (or equivalent); play body rotation as mesh-only (or root motion that does not copy into camera rotation). Same rule in FPP and TPP.
Build order (demo5.8) — follow in sequence
Section titled “Build order (demo5.8) — follow in sequence”Each phase ends in a gate before the next.
| Phase | Goal | Gate |
|---|---|---|
| A Host / GFP | ADDON + TFACore Boot Active; AimAssist Enabled; do not enable SKG; register Plugify GFP slots | Editor boots sandbox; Core links |
| B Camera + dual-component + movement foundation | TFACombat spine: UTFACameraDirector TrueFPP/WideTPP; same skeletal mesh; OwnerNoSee TPP; local bone-hide head/torso/legs/feet in TrueFPP (arms+gun only); look vs body; baseline locomotion + Space verb map — see § Vault · Wall Run · opposite dash · wall jump-off |
Local hybrid feel; remotes see TPP; Space≠Dodge/Slide; look never follows mesh flip |
| C Melee Drive | TFAMelee Plugify: MeleeDrive, Strike, ANS, MotionWarp (ground only), cone on Attack, air = same slash set / no warp, 1H/2H/Wrist stubs | Cone AC; air AC; server GE; 2-client damage |
| D Flow + Singularity | TFASingularity Plugify: Asymmetric Flow + second meter (= Flow); Overclocked; auto Singularity; full Burst Storm art; subscribe TFA.Combat.KillConfirmed |
Mix path → Singularity with full bursts; Flow ring readable on HUD |
| E Counter + gun→Flow | Counter in TFAMelee; gun kill credit → Flow messages; ShooterCore until Firehand | Counter / gun Flow fuels |
| Eg AimAssistSystem | Wire AA for TrueFPP guns only | AA on guns; no melee Tick magnet |
| F Loadout / stance | FS-LOD keys 1/4/5/Hold4/2/3/6/7; 2H locks | Stance flips camera; Strike gated |
| Fb Phys Shield | Read BallisticShield → absorb QuickBar pattern into TFACombat Phys Shield seat; TPP mesh; active vs inactive — no BallisticShield .uplugin |
Draw/stow replicates; ADS locked Gun+Phys Shield; ES vital unchanged |
| G OmniVisor shell | Flow/ammo/vitals through OV (placeholder chrome OK — art incomplete) | Readable without Mod; no final OV art required |
| H Armory + specials | DT_TFA_DemoArmory + hard-coded kits |
Pick kits; specials fire |
| I Demo Mod | W_TFA_DemoMod OV36→37; Lab; export; gate |
OFF safe; ON edits session; server auth |
| J Carbon parkour port | Read ParkourSystem/Character → absorb WallRun* only into TFACombat (+ WallRun anims; ADDON scratch OK first); Phase B verb map; WILL NOT USE Tic-Tac and Vault*; no ParkourSystem .uplugin |
Tunable distance; remotes see body; does not replace doing camera+movement in Phase B |
| K Ladder exit | Online + Results + Mod-off external | Demo done |
A → B (camera + movement) → C → D → E → Eg → F → Fb → G → H → I → J (Carbon port) → KKanban order: after host/ADDON, do demo-hybrid-camera then demo-movement-input before combat/Flow/Mod cards. demo-carbon-parkour stays Phase J (port/polish), not a gate that delays B.
Detail types (GA names, DA paths) live in host implementation; this table is the program order.
Buildability audit (demo5.8) — can make vs cannot
Section titled “Buildability audit (demo5.8) — can make vs cannot”Audit date: 2026-10-27 · Sources: this chapter · Demo kanban · FS · on-disk host scan.
Rule: Design lock ≠ shippable. If content, GFP, or studio foundation is missing, mark cannot even when GDD/FS describe the fantasy.
Can make now (enough on disk + design)
Section titled “Can make now (enough on disk + design)”| Slice | Why | Kanban / phase |
|---|---|---|
| Host / ADDON boot, experience wiring | ADDON hero, L_TestMap, GFP trees present |
A · demo-host / demo-addon |
| Hybrid camera wiring | UTFACameraDirector on TFACombat spine (remake on live host; still FPS-first playable until wired) |
B · demo-hybrid-camera |
| Baseline Roll / Slide / WallRun | ADDON GAs on disk (GA_Hero_Roll / Slide / WallRun) + parkour anim pack |
B (partial) · demo-movement-input |
| Live gun fire / kills | ShooterCore Enabled — Demo gun path until Firehand | E (gun half) · armory placeholders |
| AimAssist plugin | AimAssistSystem Enabled in .uproject — needs wire for Precision Fire only |
Eg · demo-aimassist-wire |
| Phys Shield port | BallisticShield → Docs/Reference/BallisticShield/ (not marketplace) |
Fb · demo-phys-shield |
| OmniVisor placeholder shell | Prior demo5.8 had UTFAOmniVisorWidget under legacy TFAAwakening — remake under TFAOmniVisor Plugify GFP on 5.8_terra_demo. Final art not required. |
G · demo-hud-gui |
| Demo Mod UMG from HTML mock | Mock + export/promote docs exist | I · demo-modkit |
| Docs / verb locks | FS-INP/MOV/CAM · GDD · Firehand stack note | Planning complete |
Can make only as stubs / half-systems
Section titled “Can make only as stubs / half-systems”| Slice | Limit |
|---|---|
| Gun → Flow credit | Can hook ShooterCore kills into a Flow counter without melee |
| Space Vault | WILL NOT USE (FS-MOV-003) — do not add GA_Hero_Vault / Vaultable tags |
| Wall jump-off / opposite dash / continuous Wall Run | Spec locked; WallRun GA exists but not full FS-MOV-004 behavior |
| Firehand Bus | Design + CSV/scaffold intent; no runtime Bus — stay on ShooterCore |
| Loadout 1–7 | Spec locked; needs stance machine on pawn (after camera) |
Cannot make yet (blocked — missing foundation / content / GFP)
Section titled “Cannot make yet (blocked — missing foundation / content / GFP)”| Slice | Blocker | What is missing |
|---|---|---|
| Melee Drive (playable Melee Drive) | No Melee Drive foundation delivered | Melee Drive = header only (TFAMeleeDriveCombatComponent.h, no .cpp). Melee Drive tutorial DEFERRED until own foundation ships. Almost no TFA melee montages/ANS (ShooterCore has tiny GA_Melee only). Family DAs / strike GAs not built. Do not pretend Phase C is buildable from design prose alone. |
| Flow → Singularity (Demo exit bar) | Depends on melee verb + Burst Storm | Melee half blocked (above). Full Burst Storm art is a Demo lock (DA_TFA_SingularityBursts) — without authored burst content, Singularity exit fails even if Flow counter stubs. |
| Counter | Needs Melee Drive + AI window | Phase E after C |
| TFACore shared tags/messages | GFP missing under Plugins/GameFeatures/ |
Needed for Plugify Combat / Melee / Singularity / Weapons messaging |
| SKG gun runtime | Locked off until Firehand | Plugin on disk; not in Demo fire path |
| Carbon as installed plugin | Never — absorb into TF GFPs | Compare #13 + anims #15; Phase J copies code into TFACombat/ADDON |
| Ladder Online / Results | TFAOnline / session GFP later | Phase K |
| Final OmniVisor / family SKs / modular Refit / trees / economy | Out of Demo or [art] blocked |
Explicit non-goals |
Implication for board order
Section titled “Implication for board order”- Do B first (camera + movement you can advance).
- Do not start C–D as if melee were ready — unblock Melee Drive with a real foundation (strike montages + Melee Drive
.cpp+ family DA + MotionWarp on Attack) before Singularity Demo exit. - Guns/AA/Phys Shield/OV placeholders/Mod can proceed on the non-melee spine once B is green.
- Carbon / SKG / Ladder stay later.
Done / Have / Need
Section titled “Done / Have / Need”- GDD Demo chapter + kanban Demo project
- Flow / Singularity: Demo includes Asymmetric Flow · second meter · full Burst Storm art (was Out-of-Demo; flipped into Demo)
- Demo Mod HTML mock + item-specs / export docs
- Host analysis notes; unified build order this chapter
- AimAssistSystem enabled in
.uproject; SKG shelved by lock - Upstream origins locked: ParkourSystem/Character · BallisticShield
- Host inventory enumerated (§1–7): plugins, GFPs, zips, Carbon compare, missing debt, phase map
- Demo kanban seed synced: build order A→K, host inventory, Phys Shield, AimAssist wire, Carbon J, Lab Flow, OV placeholders, look-vs-body, full Burst Storm exit
- Live host
5.8_terra_demoLyra 5.8 + Docker DS + ADDON hero /L_TestMap(legacydemo5.8pointer may be missing) - Live fire = ShooterCore (no SKG in
.uproject) - Target GFP trees: ADDON · TFACore · TFACombat spine · TFAMelee · TFASingularity · TFAWeapons · TFAOmniVisor (Plugify — remake + experience activation)
- AimAssistSystem plugin Enabled (§1 #1); SKG on disk Off (#2)
- OmniVisor placeholder policy locked; Placeholder mesh policy + FPS-15 flags
- ParkourAnimations content may still exist on host (
Content/ParkourAnimations/) — verify before J
- Re-vendor BallisticShield + ParkourSystem/Character from GitHub onto
5.8_terra_demo(local mirrors currently missing) — #18b - Hybrid FPP/TPP director + dual-component (same mesh) net + movement foundation (Phase B — before combat); Carbon port remains Phase J
- TFACombat spine + TFAMelee (Drive/Counter) + TFASingularity (Flow→climax) — Plugify remake (C–E)
- AimAssistSystem wired for Precision Fire (Eg)
- Loadout / Phys Shield: absorb BallisticShield into TFACombat (F–Fb)
- OmniVisor placeholder shell + Demo armory + hard-coded kits + Demo Mod UMG (G–I); final OV art later (#23)
- Demo Mod Lab › Parkour dials:
WallRunMaxDuration3.0 s ·MaxWallDashDistance6.0 m (+ DEX %/pt) ·MaxWallTurnDegrees45 ·WallRunLookaheadDistance2.0 m ·WallRunLookaheadSamples4 — playtest then promote ATFAGameState/ATFAPlayerStateunder TFACore (ownership: 03-pawn-composition.md)- Carbon: absorb ParkourSystem/Character into TFACombat/ADDON (Phase J) — never a Carbon
Plugins/entry - Ladder / TFAOnline + Mod-off external (K) (#22)
- Firehand Bus before any SKG enable (#21)
- Keep Full game ch. 20 for Solo / trees / monetary / modular weapons
- Full enumerated inventory: § Host inventory above
Explicit non-goals (Demo exit)
Section titled “Explicit non-goals (Demo exit)”Forking LyraGame · enabling SKG pre-Firehand · dual ShooterCore+SKG fire · modular mesh Refit · final trees / monetary · ambient melee pull · Mod ON for external · second bible/host Demo plan narrative · treating Cinematic Benchmark as this Ladder exit · full-body Pose Search that wipes Lyra upper/lower Linked Layers. (TBD-056 Health-only is locked — do not invent alternate dump math in C++.)
In Demo (extra card): Motion Matching / Pose Search lower-body loco with Lyra upper/lower split — kanban demo-motion-matching · full tutorial docs/tutorials/motion-matching-demo-and-full.md (Demo + Full) · design docs/superpowers/specs/2026-11-02-motion-matching-full-design.md. Wall Run MM: L/R cycle while stuck; Pose Search only at enter/exit into ground loco — 2026-11-07-wall-run-motion-matching-design.md.