Fighting Game · Architecture

V2 — Architecture (Fighting Game, Unreal Engine 5)

The runtime, package, and integration architecture behind Fighting Game — an unreal engine 5 competitive fighter. How the systems fit together, communicate, and scale.

73sections93 minread27diagrams10tables

On this page

Status: V2 launch architecture and full-vision extension architecture
Source: derived from V2/V2_features.md (feature map) and V2/V2_TODOS.md (implementation backlog)
Audience: engineering, online services, build / release, security, and production leads
Date: 2026-05-12

This architecture reference has been decomposed into focused pages under architecture/. This file remains the canonical hub (every section heading is preserved, so existing arch§"…" anchors keep resolving); the in-depth, code-grounded companion pages live under architecture/. Start at the architecture page index. The product feature map is in V2_features.md.

Purpose#

This document describes the runtime, package, and integration architecture V2 must ship. It is grounded in the V2 feature map (V2_features.md) and the V2 backlog (V2_TODOS.md), and is anchored to the packages and modules that the V2 Unreal Engine project must contain. Where a section names a module or path, it names a target artifact unless the path already exists in the repo. The TODO that first references the artifact owns creating it with tests and validation. Companion docs: V2/V2_features.md, V2/V2_TODOS.md, and V2/V2_DEPENDENCIES.md.

V2 is one game, not a platform. The architecture mirrors that ambition: one shared roster, one shared creator suite, one shared online backbone, and swappable per-ruleset gameplay layers.

Cross-Reference Convention#

Throughout this document, bare §N and §N.M references resolve to V2_TODOS.md (the backlog has 138 numbered top-level sections and ~1000 numbered subsections; it is the only V2 doc with section numbering used as hyperlinks). Explicit doc-prefixed references appear where ambiguity matters:

  • §80V2_TODOS.md §80 (Compliance Deep) — the default convention.
  • §52.8V2_TODOS.md §52.8 (Live-service operations cadence).
  • deps§57V2_DEPENDENCIES.md §57 (Hardware Peripheral SDKs).
  • features§"V2 Product Promise"V2_features.md section by anchor (the features doc is not numbered).
  • arch§"Rollback Netcode" → this document, by section anchor.

V2_features.md and this document use named anchors, not numbers, to avoid duplicating the TODOs numbering scheme. The other three V2 docs follow the same convention.

Table of Contents#


V2 Product Promise#

V2 ships as one coherent fighting game that delivers per-ruleset feel matching each inspirational source on its own terms, held together by one shared roster, one shared creator suite, and one shared online backbone. V2 must deliver rollback netcode by default for 1v1 and 2v2 tag modes (multi-fighter rollback at 60 Hz for 2v2 active fighters per side; 3v3 tag and Royal Rumble / ≥ 30 in-ring modes use client-server with input prediction rather than full rollback), complete launch content across every advertised mode (no "coming soon" panels), and degrade safely under offline, partial-net, low-bandwidth, controller-loss, mid-match-disconnect, and provider-outage conditions. See V2_features.md § "V2 Product Promise" for the full list.

Subsystem Glossary#

The names below are fixed vocabulary for V2; module names, namespaces, and asset paths inherit from them.

Engine modules

Module Responsibility
V2Core Engine subsystems, save game, tags registry, dev cheats
V2Gameplay GAS abilities, attributes, gameplay effects, match-state machine
V2Combat Hitbox/hurtbox, frame data, collision authority, juggle/blockstring
V2Animation AnimBP, motion matching, Mover bindings, IK, retargets
V2Input Enhanced Input, motion parser, input buffer, deterministic replay
V2Netcode Rollback engine (1v1 + 2v2 tag), client-server replication (other modes)
V2Modes Game-mode registry, mode-load orchestration, mode-specific HUD
V2UI UMG / CommonUI front-end, in-match HUD, accessibility
V2Audio MetaSounds pipeline, dynamic music, voice barks, commentary
V2VFX Niagara hit sparks, gore decals, X-Ray render, weapon trails
V2Cinematics Sequencer presets, slow-mo, finisher cinematics, replays
V2Persistence Save, profile, currency ledger, offline replay store
V2OnlineServices Login, friends, parties, matchmaking, leaderboards
V2Telemetry Event schema, batched sender, balance dashboards feed
V2Editor Move authoring widget, stage editor, frame-data inspector
V2Tests Automation specs, gauntlet drivers, golden replay harness
V2Racing Race-mode glue, registry of V2RaceMode_* plugins, race HUD shell
V2Vehicles Vehicle chassis class, drivetrain, vehicle GAS attribute sets
V2RacePhysics Chaos vehicle solver, hovercraft / bike-lean / drift physics
V2RaceTracks Track data, checkpoint graph, racing line authoring
V2RaceModes Race mode-state machine, lap timing, position ranking
V2VehicleAudio Engine note, exhaust, tire, surface, racing-music ducking
V2VehicleVFX Smoke, sparks, debris, motion-blur, damage decals
V2Peripherals Force-feedback runtime, per-controller-class pool, calibration UI
V2Services Oshun event-bus + gRPC adapter layer; service observability bindings
V2AntiCheat Anti-cheat client driver, server-validation hooks, replay-hash emitter
V2AdaptiveAI Per-CPU adaptive AI, Director hint baking, style-matchup validation
V2AICommentary AI commentary bridge; routes Iris audio / subtitle output to V2Audio
V2DynamicMusic Vertical-stack dynamic music, DJ remix, commentary-ducking mix
V2FrameDataPublisher Public frame-data CSV export + per-patch diff visualizer feed

Game-feature plugins (modular, hot-swap)

The table below lists the launch-canonical plugin set; the per-celebrity guest plugin and per-venue racetrack plugin are templated and instantiated per license. This roster is the single source of truth — body sections name plugins from it.

Disk status (2026-06-12): V2/ue/Plugins/ currently contains four V2 plugins on diskV2AICommentary, V2AdaptiveAI, V2AssetLinter, and V2Editor — plus BellonaUnrealEditor (synced Bellona editor-consumer plugin). None of the V2Mode_*, V2Event_*, or V2RaceMode_* rows below exist as plugins yet; they are planned GameFeature plugin surfaces whose mode identity is currently represented only by the V2Modes registry module (V2/ue/Source/V2Modes/). The rows remain the canonical spec for what each plugin will own when created.

Plugin Owns
V2Mode_Arcade Arcade ladder mode
V2Mode_Story Cinematic story mode + branching narrative
V2Mode_Tower Klassic / Towers of Time / Endless / Survivor
V2Mode_Krypt 3D first-person Krypt explorable hub
V2Mode_BattleHub Avatar lobby world, Game Center cabinets
V2Mode_WorldTour Open-world avatar mode
V2Mode_TekkenForce Side-scrolling brawler mode
V2Mode_DevilWithin 3rd-person action-adventure mode
V2Mode_Konquest MK-style open-realm action-RPG campaign
V2Mode_Universe WWE-style weekly booker sim
V2Mode_MyCareer_WWE Wrestling career arc
V2Mode_GOATCareer_UFC MMA career arc
V2Mode_MyGM Promoter sim
V2Mode_MyFaction Card-collector faction battles
V2Mode_MyRise Story-driven Hero/Heel career
V2Mode_RoyalRumble 30-/50-entrant rumble
V2Mode_FightNight UFC Fight Night / PPV booking
V2Mode_Chronicles Soul Calibur tactical campaign
V2Mode_DefJamStory Street career with crew progression
V2Mode_Crew Crew/clique/stable/faction cross-mode
V2Mode_Training Programmable dummy, lab tools, replay-takeover
V2Mode_Mission Combat Trials + Mission curriculum
V2Mode_Replay Replay viewer, takeover, sharing
V2Mode_Spectator Network spectator + broadcast tools
V2Mode_TagTeam 2v2 / 3v3 / Trinity / Cross-Assault
V2Mode_QuestLog Cross-mode quest tracker / weekly objectives
V2Mode_StoryTheater Per-character side-story cinematic playback
V2Mode_SideStory Side-story per-fighter unlocked from arcade
V2Mode_TimeAttack Score-attack ladder against ghost data
V2Mode_ScoreAttack Score-only ladder variant
V2Mode_Wager Wager-match online lobby
V2Mode_Friendly Friendly lobby with custom rules
V2Mode_Handicap Asymmetric handicap lobby
V2Mode_FirstBlood First-hit-wins variant
V2Mode_Boss Solo boss-rush
V2Mode_BestOfN Best-of-N tournament lobby
V2Mode_LAN LAN UDP discovery + offline tournament
V2Mode_LocalVersus Couch versus + hot-seat
V2Mode_BattleRoyale 100-player BR (fighter / vehicle / hybrid)
V2Mode_Roguelike Hades-style roguelike adventure mode
V2Mode_Karaoke Karaoke + rhythm-combat fusion
V2Mode_WorldBoss Community-shared world boss instance
V2Mode_PersistentEcon Persistent-world economy + NPC schedule mode
V2Mode_VehicleSoccer Rocket-League-style sports-vehicle
V2Mode_VehicleStunt Tony-Hawk-style stunt-vehicle
V2Mode_VehicleCrash Burnout-style crash-junction
V2Mode_Trackmania Trackmania-style time-trial
V2Mode_BoxingSim Punch-Out boxing specialty ruleset
V2Mode_BushidoBlade One-hit-kill sword specialty ruleset
V2Mode_Pinball Pinball mini-game cabinet
V2Mode_AirHockey Air-hockey mini-game cabinet
V2Mode_MiniGolf Mini-golf mini-game
V2Mode_Darts Darts mini-game
V2Mode_Pool Pool mini-game
V2Mode_Cooking Cooking-simulator mini-game
V2Mode_Heist 4-player heist co-op
V2Mode_TruckChase Demolition-derby truck-chase
V2Mode_ConvoyRaid Convoy-raid demolition mode
V2Mode_DemolitionDerby Demolition-derby arena
V2Mode_CinematographyEditor Cinematography library editor (player)
V2Mode_CelebrityGuest_<id> Per-celebrity-guest one-off mode plugin
V2Mode_RhythmCombat Rhythm-combat fusion ruleset
V2Mode_TekkenBowl Tekken Bowl bowling mini-game
V2Mode_PhotoTournament Photo-Mode jury-vote competition
V2ArcadeCabinetAdHocPlugin Ad-hoc per-cabinet plugin for Battle Hub
V2Event_KingOfIronFist Tekken King-of-Iron-Fist signature event
V2Event_Marathon Marathon endurance event
V2Event_WrestleMania WWE PPV-style 8-match card event
V2Event_FightWeek UFC International Fight Week event
V2Event_MishimaCup Soul Calibur 16-fighter Weapon Master event
V2Event_EVO_Top8 EVO-style Top 8 broadcast event
V2Event_CrewWars Def Jam 4v4 crew elimination event
V2Event_Horde Boss-vs-crew asymmetric event
V2Event_SpeedrunRace 2-4 player Arcade race event
V2Event_DeathMatch Single-round sudden-death stipulation event
V2RaceMode_Circuit Closed-circuit lap racing
V2RaceMode_PolicePursuit NFS-style cop pursuit
V2RaceMode_Drift Drift score-attack
V2RaceMode_CanyonDuel NFS Carbon canyon duel
V2RaceMode_Drag Quarter-mile drag
V2RaceMode_OffRoad Off-road / dirt-track
V2RaceMode_Bikes Bike-only mode
V2RaceMode_PodRacer Futuristic pod-racer
V2RaceMode_Combat Combat-racing (weapons enabled)
V2RaceMode_PowerPlay Power-play combat-racing variant
V2RaceMode_Free Free-roam open-world
V2RaceMode_Time Time-trial
V2RaceTrack_<venue> Per-licensed-venue tie-in race-track plugin

Surfaces

Surface Path
Game client V2/ue/ (UE5.5 project)
Marketing / web shell tile apps/oshun/web/src/app/v2/
Standalone web surfaces apps/v2/web/
Esports / tournament toolkit apps/v2/esports-tools/ (@v2/esports-tools)
Online services backend apps/v2/
Balance authoring spreadsheets V2/balance/
Build & release tooling V2/ue/Build/, V2/tools/release/ (planned — not yet created)
Localization workspace V2/ue/Content/Localization/V2/ + V2/loc/ (planned — not yet created)

Web surfaces note. Two web homes exist and both are canonical for their own split: apps/oshun/web/src/app/v2/ is the in-shell product tile — the V2 entry inside the Oshun shell app (Next.js route with the product page, glossary, roadmap, and public wiki). apps/v2/web/ is the standalone marketing / community / dev-portal surface set — a Vite SPA (marketing homepage with roster, modes, news, store, Discord, esports, tournament, and press surfaces) plus static sub-sites (calendar/, community/, support/, esports/, dev-portal/, hub/, legal/, live-service/, balance/). Product/shell integration work belongs in apps/oshun/web/src/app/v2/; public marketing and companion surfaces belong in apps/v2/web/. Neither replaces the other.

High-Level Architecture#

flowchart TB subgraph CLIENTS["Platforms"] direction LR pc["PC (Win64/Linux/Mac)"] ps5["PlayStation 5"] xsx["Xbox Series X|S"] sw2["Switch 2"] cloud["Cloud Streaming"] pc ~~~ ps5 ~~~ xsx ~~~ sw2 ~~~ cloud end client["<b>V2 Game Client</b><br/><sub>UE5.5 · C++ gameplay · Blueprint glue · MetaSounds · Niagara</sub>"] subgraph MODES["Game Feature Plugins"] direction LR arcade[Arcade] story[Story] tower[Tower] krypt[Krypt] hub[BattleHub] worldtour[WorldTour] tforce[TekkenForce] dwithin[DevilWithin] universe[Universe] career[MyCareer / GOAT] gm[MyGM] faction[MyFaction] rise[MyRise] rumble[RoyalRumble] fnight[FightNight] chron[Chronicles] djs[DefJamStory] crew[Crew] end subgraph CORE["Engine Modules"] direction LR gas[GAS] combat[Combat] anim[Animation] input[Input] net[Netcode] ui[UI] audio[Audio] vfx[VFX] cine[Cinematics] save[Persistence] tele[Telemetry] end services["<b>V2 Online Services</b><br/><sub>Auth · Matchmaking · Leaderboards · Replays · Moderation</sub>"] ac["<b>Anti-Cheat</b><br/><sub>EAC / BattlEye / Platform-Native</sub>"] CLIENTS --> client client --> MODES client --> CORE client --> services client --> ac services --> ac

Project Layout#

text
V2/
├── V2_TODOS.md              Backlog / source of truth
├── V2_features.md           Product / feature scope
├── V2_ARCHITECTURE.md       This doc
├── V2_DEPENDENCIES.md       Dependency registry
├── ue/                      Unreal Engine project root
│   ├── V2.uproject
│   ├── Source/              C++ modules (see "Module Split")
│   │   ├── V2.Target.cs
│   │   ├── V2Editor.Target.cs
│   │   ├── V2Server.Target.cs
│   │   ├── V2Core/
│   │   ├── V2Gameplay/
│   │   ├── V2Combat/
│   │   ├── V2Animation/
│   │   ├── V2Input/
│   │   ├── V2Netcode/
│   │   ├── V2Modes/
│   │   ├── V2UI/
│   │   ├── V2Audio/
│   │   ├── V2VFX/
│   │   ├── V2Cinematics/
│   │   ├── V2Persistence/
│   │   ├── V2OnlineServices/
│   │   ├── V2Telemetry/
│   │   ├── V2Editor/
│   │   └── V2Tests/
│   ├── Plugins/             Game-feature plugins (per mode + tooling)
│   ├── Content/             Assets (LFS-tracked)
│   ├── Config/              Default*.ini, Custom config per platform
│   ├── Build/               BuildGraph, target rules, platform configs
│   └── Saved/, Intermediate/, DerivedDataCache/, Binaries/  (gitignored)
├── web/                     Marketing site
├── services/                Online services backend
├── tools/                   Build, release, esports, mocap, data tooling
├── balance/                 Spreadsheets driving DataTables (CSV ↔ DT)
├── loc/                     Localization workspace
└── docs/                    Architecture, runbooks, launch, content plans

Module Split#

Each module under Source/ carries *.Build.cs, Public/, Private/, and its module class. Dependencies are declared explicitly; no circular deps.

flowchart LR Core[V2Core] Gameplay[V2Gameplay] Combat[V2Combat] Animation[V2Animation] Input[V2Input] Netcode[V2Netcode] Modes[V2Modes] UI[V2UI] Audio[V2Audio] VFX[V2VFX] Cinematics[V2Cinematics] Persistence[V2Persistence] Online[V2OnlineServices] Telemetry[V2Telemetry] Editor[V2Editor] Tests[V2Tests] Core --> Gameplay Core --> Persistence Core --> Telemetry Core --> Input Gameplay --> Combat Combat --> Animation Animation --> Audio Animation --> VFX Combat --> Netcode Modes --> Gameplay Modes --> UI Modes --> Cinematics Modes --> Persistence UI --> Core Cinematics --> Animation Online --> Persistence Online --> Telemetry Editor --> Combat Editor --> Gameplay Tests --> Combat Tests --> Netcode Tests --> Gameplay

Rules

  • C++ is the primary gameplay language. Blueprint is for designers / data / state graphs / cinematic glue only. Frame-deterministic combat must live in C++.
  • No module reaches across more than one layer (e.g., V2UI does not depend on V2Netcode directly).
  • V2Editor is editor-only — never linked in cooked builds.
  • V2Tests is automation-only — never linked in shipping builds.

Gameplay Ability System (GAS) Layout#

V2 uses GAS as the spine of combat. Layers:

Tags#

  • Root tag families authored in Config/Tags/V2.GameplayTags.ini.
  • Subset domains: State.Stance.*, State.Status.*, Action.*, Cancel.*, Rules.Mode.*, Style.*, Weapon.*, Submission.*, Position.*, Stipulation.*, Stage.Hotspot.*.

Attribute Sets#

  • UV2_AttrSet_Vitals — Health, MaxHealth, RecoverableHealth, Stun, Stamina, Hype, Drive, Heat, Armor, Resolve, Block, Stunmeter.
  • UV2_AttrSet_Movement — WalkSpeed, DashSpeed, RunSpeed, JumpZ, AirControl, SideStepSpeed, BackdashFrames, WakeUpInvulnFrames.
  • UV2_AttrSet_Combat — MeleeDamageMul, BlockReductionMul, ThrowEscapeWindowFrames, CounterHitMul, JuggleScaling.
  • UV2_AttrSet_Wrestling — PinKickoutMeter, SubmissionMeter, LimbDamage, Momentum, SignatureCharge, FinisherCharge, Resilience.
  • UV2_AttrSet_MMA — per-limb stamina, takedown skill / defense, sub skill / defense, transition skill, G&P rating, clinch rating.
  • UV2_AttrSet_Weapon — WeaponDurability, GuardImpactWindow, SoulCharge, RingOutResistance.

Abilities#

  • Base UV2_GameplayAbility with input buffer hook, frame-data binding, cancel-window broadcast, ability-tag filter, network mode switch, replay-strip rules.
  • Subclasses: Strike, Throw, GroundedSpecial, AirSpecial, Projectile, Super (variants for Drive Impact, Rage Art, X-Ray, Critical Edge, Blazin'), Grapple Clinch, Grapple Takedown, Grapple Pin, Grapple Submission, Cinematic Finisher.

Gameplay Effects#

  • GE_Damage_Strike, GE_Damage_Throw, GE_Damage_Chip, GE_Stun_Delta, GE_Drive_Cost, GE_Heat_Gain, GE_Hype_Gain, GE_LimbDamage_<Limb>, GE_Stamina_Drain, GE_Status_<Status>, GE_RecoverableHealth_Regen (modern SF chip recovery).

Match-State Machine#

  • States: Intro → RoundStart → Live → RoundEnd → (RoundStart | MatchEnd | FinisherWindow | PostMatch).
  • Per-mode injectable state nodes: MK FinisherWindow, WWE Pin / Submission, UFC RoundEnd judges' interlude, SC RingOut termination, DJ environment-finisher prompt, SF KO replay, Tekken Rage lockout.

Animation Pipeline#

Skeleton & Retarget#

  • Canonical SK_V2_Fighter_Base (UE5 mannequin-compatible) plus archetype variants (Heavyweight, Welterweight, Female, Monster, Child).
  • IK Rig + IK Retargeter from base to each archetype, with round-trip automation test.

AnimBP#

ABP_V2_Fighter_Base layers (ordered):

  1. Locomotion state machine (idle / walk / run / dash / backdash / airborne / knockdown / wakeup).
  2. Upper-body action layer (GAS montage slots: FullBody, UpperBody, LowerBody, Hands).
  3. Hit-reaction layer (Chooser Tables keyed on hit-reaction tag × stance × damage-tier).
  4. Stance layer (Tekken stance switches, SC weapon stances).
  5. Foot IK + look-at IK + opponent-face IK (auto-rotates for 2D rulesets, no-op for free 3D rulesets).
  6. Additive emotes / breathing / damage tics.

Per-mode AnimBP overlay: SF locks pelvis-yaw to opponent; Tekken adds sidestep blend; WWE adds ragdoll blend and climb/turnbuckle layer; UFC adds full-body grapple and ground-position state machine; SC adds 8-way weapon layer; MK adds X-Ray cinematic insert; DJ adds environment-grab layer.

Motion Matching & Mover#

  • Motion matching db for World Tour, Tekken Force, Devil Within, DJ street, MyCAREER backstage, SC Chronicles overworld.
  • Mover 2.0 custom modes: Match2D, Match3DRing, Match3DCage, Match3DStreet, ExplorationFree.

Cloth, Hair, Facial#

  • Chaos Cloth presets per costume slot, LOD chain.
  • Hair groom for principals; card hair for crowd.
  • Chaos Flesh (limited) for MK X-Ray gore.
  • MetaHuman Animator for principals; Live Link Face for performance capture.

Input Pipeline#

  • Enhanced Input + IMC per platform (PS5 with DualSense haptics + adaptive triggers, XSX, Switch2, PC KB+M, PC gamepad, mobile touch).
  • Motion-input parser recognizing QCF / QCB / DP / RDP / HCF / HCB / 360 / 720 / charge-back / charge-down / negative-edge / double-tap / plink / just-frame.
  • Buffer window configurable per fighter / per move (default 6f, tight 3f, lenient 9f).
  • Special-cancel, super-cancel, X-Ray / Heat / Drive cancel buffers.
  • WWE / UFC contextual input (single button → context-aware grapple).
  • Deterministic byte-stream input encoder for replays.

Game Feel: Hitstop, Hitlag, Camera Shake#

V2's game-feel system is centralized so each ruleset hits like the source it's emulating.

  • HitConfirmed broadcast from UV2_HitboxComponent.OnHitConfirmed carries a struct (attacker, defender, damage, hit-reaction tag, counter-hit flag, hitstop attacker frames, hitstop defender frames, hitlag defender frames).
  • Hitstop curves authored per damage tier (small / medium / heavy / launcher / bone-shatter / finisher) and stored as UCurveFloat referenced from URV2_Ruleset.HitstopCurves — so MK / SF / Tekken / SC / UFC / WWE / DJ all feel distinct.
  • Camera shake library keyed on hit-reaction tag × per-ruleset intensity multiplier × per-fighter shake personality. Reduced-motion accessibility clamp.
  • Slow-mo / freeze-frame triggered by match-state events (KO, finisher window, Reversal-Edge clash, mid-combo emphasis).
  • Screen tint / vignette triggered by gameplay events (counter-hit, low-HP, comeback aura, state-aura).
  • Resimulation safety: hitstop frames don't count toward rollback budget (cross-ref Rollback Netcode); cosmetic-only effects suppressed during resim.
  • Tuning tool: editor utility widget loads any move and previews the feel curves; side-by-side replay harness compares ruleset profiles.

Combat Authority & Determinism#

Per-Frame Loop#

  • Fixed 60Hz sim step. Decouple render (interpolated) from sim (deterministic).
  • Per-tick sequence: (1) consume input → (2) tick abilities + state → (3) advance animation timers → (4) sweep hitboxes → (5) apply gameplay effects → (6) emit cosmetic events (deferred to render).

Determinism Rules#

  • No FApp::GetDeltaTime reads in gameplay; sim-clock only.
  • No FMath::RandRange in gameplay; use FRandomStream seeded from match seed.
  • No system wall-clock in gameplay graphs (Editor Validator enforces).
  • Strict-FP build flag; deterministic cook order.
  • Blueprint guard list: forbid nodes (Time, World Delta Seconds, Random, Now, GetSystemTime).

Hitbox Authority#

  • In rollback modes: shared deterministic simulator decides; no per-hit server arbitration.
  • In client-server modes: host authoritative; clients predict; server confirms within RTT/2 + 2 frames.

Rollback Netcode#

Architecture#

  • FV2_SimWorld (deterministic, 60Hz) separated from FV2_PresentWorld (interpolated, display refresh).
  • Snapshot/restore for FV2_SimWorld: ASC, attributes, ability state, anim timers, hitbox state, input buffer, RNG. Budget ≤ 8KB per fighter.
  • Input prediction = last-confirmed; correction triggers rewind + resimulation forward.
  • Rollback budget ≤ 8 frames; beyond that, "Recovering Connection…" overlay.
  • Cosmetic suppression during resimulation (audio mute, particle suppress).

Transport#

  • UDP with FEC, sequence numbers, ACK piggyback, DTLS encryption.
  • UE Iris for non-rollback channels (chat, presence); custom socket for rollback frame inputs.
  • Adaptive send: every-frame inputs + last-N replay piggyback.

Diagnostics#

  • Netgraph overlay (RTT, rollback frames last 5s, packet loss %, input delay, frame advantage).
  • Telemetry feeds every rollback for postmortem.

Client-Server Netcode#

  • Dedicated server target V2Server.Target.cs (Linux).
  • Replication graph: own pawn (priority 1.0), nearby fighters (0.8), distant (0.3), ambient props (0.1).
  • Multi-fighter: tag-team (2v2, 3v3), 4-player FFA, Royal Rumble (≥ 30 in-ring).
  • Open-world: co-op handshake (party ≤ 4); instance handoff at indoor zones / fight encounters / story beats; tolerant of 250ms RTT.
  • Hubs: shared social server (capacity 100) with auto-shard and friend-priority.

Network Quality & Fallback#

flowchart LR Match[1v1 Match Start] --> Handshake[Pre-Match Network Handshake] Handshake -- RTT/jitter/loss --> Decision{Quality OK?} Decision -- Yes --> Rollback[Rollback Netcode 60Hz] Decision -- Borderline --> Hybrid[Hybrid Rollback + Delay] Decision -- Poor --> Delay[Delay-Based Netcode N-frame buffer] Rollback -- rewinds > 8f sustained 30s --> Offer[One-Time Fallback Offer] Offer -- Accept --> Delay Offer -- Decline --> NoContest[Ranked No-Contest] Match -- LAN-mode --> LAN[LAN UDP Broadcast]
  • Rollback default for 1v1; delay-based fallback for RTT > 150ms or sustained rewind pressure; hybrid in-between.
  • LAN tournament mode: UDP broadcast peer discovery, no internet required; LAN-only ranking ledger; auto-on at tournament-venue WiFi SSIDs.
  • Dedicated server browser (PC primary; console where TRC permits) with public listings, host config (ruleset, stipulation, fighter restriction, password, AFK kick, rotating-map list), server moderation.
  • Custom Room / Private Lobbies: 1v1 / 2v2 / 4-corner / tournament / Battle Royal / Royal Rumble; ≤ 16 participants + 8 spectators; in-room queue (winners-stay-on, losers-rotate-out, randomized seating); in-lobby training space for spectators.
  • Pre-match handshake measures RTT, jitter, packet loss; results stamped in match record; player can decline poor-condition match.
  • Wi-Fi / mobile-hotspot / 4G/5G detection + warning in ranked queue (where platform API provides connection type).
  • Per-account network reliability score with ops dashboard.

Game Modes#

Each mode is a UGameFeaturePlugin registered with V2Modes. Plugin lifecycle:

sequenceDiagram participant Player participant V2Modes participant Plugin as V2Mode_X Plugin participant Gameplay as V2Gameplay participant UI as V2UI Player->>V2Modes: Select mode (e.g., Story) V2Modes->>Plugin: Activate Plugin->>Gameplay: Register ruleset + GAS abilities Plugin->>UI: Inject mode-specific HUD widget Plugin-->>V2Modes: Mode ready V2Modes-->>Player: Start mode Note over Player,Plugin: Mode plays... Player->>V2Modes: Exit mode V2Modes->>Plugin: Deactivate Plugin->>Gameplay: Unregister Plugin->>UI: Remove HUD

Per-Mode Architecture Notes#

Mode Net model Save model Notable
Arcade Local-only Per-fighter progress CPU ladder; mid+end-boss cutscenes
Story Local-only Branch state + chapter Sequencer cutscenes; QTE prompts
Tower Local-only Tower state Live modifier engine (server-pushed)
Krypt Local-only Vault unlock state 3D explorable hub
BattleHub Client-server (hub) + rollback (cab) Avatar profile 100-cap shards
WorldTour Client-server (zone) Quest state Master training pipeline
TekkenForce Local + co-op (CS) Score / progress Side-scroller brawler
DevilWithin Local-only Save points 3rd-person action
Universe Local-only Universe save Auto/manual booker sim
MyCareer (WWE) Local + online ranked Career save Branching narrative
GOATCareer (UFC) Local + online ranked Career save Camp / weight management
MyGM Local + multi-GM (CS) Promotion save Up to 4 GMs shared
MyFaction Local + online Faction save Card collector + faction PvP
MyRise Local-only Career save Voice-acted milestones
RoyalRumble Rollback (1v1) + CS (30-/50-) n/a Timed entries
FightNight Local + online ranked Event save PPV presentation
Chronicles Local-only Campaign save Turn-based hex grid
DefJamStory Local-only Career save Crew, rep, shop
Crew Online (CS) Crew save Cross-mode
Training Local-only + opt-in online lab Lab scenarios Programmable dummy, lab overlays
Mission Local-only Per-fighter mastery Trials + missions + tutorial
Replay / Spectator Local + online (read-cloud) Cloud replays Takeover from any frame
TagTeam Rollback (2v2/3v3) + CS (crews) Per-team profile Tag-cancel / DHC / assist / X-Factor

Training, Trials, Replay Pipeline#

flowchart LR Match[Live Match] -- captures --> Recorder[Input Stream Recorder] Recorder --> ReplayFile[(Replay File · header + inputs + seed + manifest)] ReplayFile --> CloudReplay[Cloud Replay Store] ReplayFile --> Viewer[Replay Viewer] Viewer --> Takeover[Replay Takeover] Takeover -- pause + take side --> Training[Training Mode Scenario] ReplayFile -- encode --> Ghost[Ghost Data Store] Ghost --> Tekken[Tekken Ghost Battle] Ghost --> Master[World Tour Master Training] Training -- Save as Lab Scenario --> ReplayFile Match -- pause SP --> Photo[Photo Mode]
  • Sim/Present split (cross-ref Rollback Netcode): training mode runs on the same deterministic FV2_SimWorld as live matches; lab tools attach to FV2_PresentWorld for overlays without affecting determinism.
  • Replay file format: header (build ID, content hash, ruleset ID, fighter IDs, stage ID, custom-cosmetic manifest, RNG seed, timestamp) + per-frame input stream both sides. Budget ≤ 1MB / 5-min match; gated in CI.
  • Replay determinism gate: every replay re-played in CI must produce bit-identical frame outcomes; replays that drift fail the build.
  • Replay Takeover: pause replay → snapshot sim state → load training scenario → swap input source for chosen side. Original replay preserved read-only.
  • Multiplayer training: uses client-server net (V2Server.Target.cs) not rollback — tooling-rich semantics over response time. Tolerates ≤ 250ms RTT.

Character Presentation Pipeline#

flowchart LR MatchSetup[Match Setup] --> IntroPicker[Intro Picker] IntroPicker -- fighter A + fighter B + stage + round + ruleset --> DialogueDB[Dialogue DB · CSV → DT] DialogueDB --> IntroSeq[Intro Sequencer] IntroSeq --> VOPlayer[VO Player] IntroSeq --> CameraRig[Cinematic Camera Rig] MatchEnd[Match End] --> WinQuotePicker[Win/Loss Quote Picker] WinQuotePicker --> DialogueDB DialogueDB --> OutroSeq[Outro Sequencer] Gameplay[Gameplay Events] --> BarkRouter[Bark Router] BarkRouter --> BarkLibrary[Per-Fighter Bark Library]
  • Dialogue DB: per-fighter CSV at V2/balance/dialogue/<fighter>.csv with columns (situation, opponent, ruleset, line ID, locale-x text, VO path, emotion, length-cap). CSV ↔ DataTable round-trip enforced.
  • Intro Picker selects from per-character / per-matchup / per-stage / per-round / mirror-match dialogue banks. Mirror matches use a uniquely-authored bank, never the cross-matchup pool.
  • Win Quote Picker selects context-aware win quotes per opponent / per finisher / per perfect-round / per comeback / per ring-out / per pinfall / per submission / per KO / per double-KO; per-matchup A-beats-B quotes override generic-bank quotes when authored.
  • Bark Router consumes gameplay events (counter-hit, throw, parry, low-HP, combo-of-N, finisher armed, finisher missed) with priority + cooldown; finisher / KO barks win all races.
  • Per-fighter Entrance: Sequencer preset library (WWE ramp, Tekken stage-arrival, MK pit-summon, SF6 hub-arrival, DJ club-strut) with per-fighter music slot.

Tag-Team Architecture#

flowchart LR P1Input[P1 Input] --> SimSide1[Sim - Side 1 Active Fighter] SimSide1 -- tag cancel / assist call --> SimSide1B[Sim - Side 1 Partner] P2Input[P2 Input] --> SimSide2[Sim - Side 2 Active Fighter] SimSide2 -- tag cancel / assist call --> SimSide2B[Sim - Side 2 Partner] SimSide1 -- HP --> HUD SimSide1B -- HP regen off-screen --> HUD SimSide2 -- HP --> HUD SimSide2B -- HP regen off-screen --> HUD
  • Rollback for 2v2 / 3v3: each side has 1-3 fighters; FV2_SimSnapshot budget per side ≤ 24KB (3 fighters × 8KB). Tagging is a deterministic state transition with frame-accurate animation handshake.
  • Tag-cancel matrix: per-fighter / per-partner allow-list in the move catalog spreadsheet; restrictions for licensed-IP partners.
  • Snapback / DHC / X-Factor / Cross Assault are abilities in V2Gameplay with their own GAS subclass; meter costs tracked in attribute set.
  • Crew battle queue (3v3 KOF single-elim): client-server because matches can rotate fighters mid-set; per-fighter HP carry-over rules.

Persistence & Profile#

  • UV2_SaveGame slots per platform / per user.
  • Schema: profile, per-mode career progress, unlocked content, loadouts, settings, photo-mode gallery, replays.
  • Cloud save via OnlineServices; conflict resolution UI on out-of-sync.
  • Currency ledger: Koins, Hearts, Soul Fragments, Krystals (premium), in-mode currencies (MyCareer XP, MyFaction tokens, DefJam cash). @maat/finance owns spend, refund, region-aware pricing, regulatory caps, and sync reconciliation; V2Persistence keeps the offline ledger cache.
  • Save migration framework: every save record carries a version + migrator; no destructive loads.

Online Services Backend#

flowchart TB Client[V2 Client] --> Gateway[API Gateway / EOS Online Services] Gateway --> Auth[Auth Service] Gateway --> Friends[Friends / Presence] Gateway --> Party[Party Service] Gateway --> MM[Matchmaking] Gateway --> Lobby[Lobby Service] Gateway --> Rank[Ranked / Leaderboards] Gateway --> Replay[Replay Cloud] Gateway --> Ghost[Ghost Data Store] Gateway --> Store[Cosmetic Store] Gateway --> Mod[Moderation Console] Gateway --> Tele[Telemetry Ingest] MM --> SkillRank[(Glicko2 / TrueSkill2)] Replay --> Storage[(Object Storage)] Ghost --> Storage Tele --> Warehouse[(Analytics Warehouse)] Mod --> Storage
  • OnlineServices abstraction (EOS baseline; Sony NP, MS Live, Switch SDK shims via platform-specific subsystems).
  • Friends, presence, parties (≤ 8), invites.
  • Per-mode matchmaking queues with Glicko2/TrueSkill2, region weighting, ping cap, expansion over wait time, role-pref balancing for tag/FFA.
  • Per-mode ranked ladder with seasonal reset, placement, promotion/ demotion thresholds.
  • Cloud replay storage with share-by-code, cloud library, local download.
  • Ghost-data store for Ghost Battle and master training.

Service contract

  • gRPC services: libs/proto/v2/online/auth.proto, friends.proto, party.proto, matchmaking.proto, lobby.proto, rank.proto, replay.proto, ghost.proto, store.proto, moderation.proto, telemetry.proto.
  • Key methods:
    • Auth.SignIn(platform_token) → session, Auth.Refresh(refresh_token) → session.
    • Friends.ListFriends(account_id) → list, Friends.Add(target_id) → ack, Friends.UpdatePresence(state) → ack.
    • Party.Create() → party_id, Party.Join(party_id, account_id) → ack, Party.Invite(target_id, party_id) → ack.
    • Matchmaking.SubmitTicket(mode, prefs) → ticket_id, Matchmaking.PollTicket(ticket_id) → status_or_match, Matchmaking.CancelTicket(ticket_id) → ack.
    • Rank.GetLadder(mode, region, page) → ladder, Rank.RecordMatch(match_result) → ack.
    • Replay.Upload(stream) → replay_id, Replay.Download(replay_id) → stream, Replay.Share(replay_id, visibility) → share_code.
    • Store.ListCatalog(region, currency) → catalog, Store.PurchaseEntitlement(item_id, platform_token) → entitlement.
  • Event-bus publishes: v2.player.session.started, v2.player.session.ended, v2.match.ended, v2.match.replay.hash, v2.player.reported, v2.cosmetic.purchased, v2.party.created, v2.party.disbanded, v2.matchmaking.ticket.completed.
  • Event-bus subscribes: kuanyin.action.taken, themis.appeal.resolved, maat.balance.recommendation, iris.commentary.generated.
  • SLOs: matchmaking ticket p50 ≤ 12 s, p99 ≤ 35 s under 5× expected launch concurrency; auth p99 ≤ 200 ms; replay upload p99 ≤ 8 s for a 10-MB replay; service availability ≥ 99.9% per region.
  • Owner: V2 online services team. Cost-tier: standard AWS / EOS bill; ceiling at V2/docs/cost/online-services.md.

Anti-Cheat#

V2 anti-cheat layers four lines of defense: kernel-level client drivers, server-side input + state validation, ML pattern classifiers, and a replay-based investigation pipeline. The anti-cheat client lives in V2/ue/Plugins/V2AntiCheat/ and is part of the sovereign-core surface (arch§"Sovereign V2 surfaces (never delegated)"); kernel-driver hot-patch is forbidden.

Client-side surface

  • PC: Easy Anti-Cheat (EAC) as primary; BattlEye as fallback for titles where EAC has integration friction. Kernel-level driver signed by Epic's EAC chain; init at process launch; teardown only via clean shutdown.
  • Consoles: Platform-native anti-cheat — Sony PSN ban-list integration + Sony platform anti-tamper; Microsoft TruePlay + Xbox Live ban list; Nintendo NEX integrity layer. No third-party kernel driver on console.
  • Steam Deck (PC mode): EAC Linux build via Proton; verified pre-launch.

Server-side validation contract

  • Input rate sanity (≤ 180 inputs / second per player; bursts > 240 trigger flag).
  • Attribute integrity: every gameplay-effect application checked against per-ability whitelist; mismatched application = match-invalidate + flag.
  • Replay drift detection: every match emits a golden-replay hash to v2.match.replay.hash event; server re-simulates 1% of matches end-to-end on a Linux validator pool; drift > 0 frames = flag + manual review.
  • Rate-limit: matchmaking submissions, friend requests, ranked queue dodges capped per minute per account.

ML cheat classifiers (@v2/nous-anti-cheat-classifiers over @nous/training + @nous/safety)

  • V2 publishes labeled fair-play examples on @oshun/event-bus topics for match completion, player skill profile updates, ranked point deltas, tournament completion, replay evidence, session starts, account geo changes, and region entitlement checks.
  • @nous/training owns the offline training loop for smurf, win-trading, coordinated-throw, and geographic-anomaly classifiers. The V2 bridge requires clean and positive labels for every classifier before a training plan is valid.
  • @nous/safety hosts V2/docs/ai/model-cards/anti-cheat-classifier-suite.md. The Model Card declares the suite limited-risk, review-only, appealable, and off-rollback.
  • The V2 bridge also publishes the review-only classifier suite event through @oshun/audit-platform; V2 publishes anti-cheat audit evidence while Oshun retains and exports the forensic record for investigations.
  • Classifier output can prioritize fair-play review queues; it cannot issue automatic discipline and cannot influence deterministic rollback frames.

Investigation + appeals

  • Replay-based investigation tool at V2/tools/cheat-investigation/ lets ops load any flagged match, scrub frame-by-frame, view raw input stream, attach notes. Tool emits v2.cheat.investigation.opened and v2.cheat.investigation.closed events.
  • Appeals flow via @v2/themis-dispute-resolution over @themis/dispute-resolution Statement-of-Reasons API (DSA-compliant). Appeal resolution SLA: 7 calendar days; failure to resolve triggers escalation to a senior reviewer.
  • False-positive rate target: ≤ 0.5% of total bans overturned on appeal; ≥ 0.5% triggers a model retrain.

Rage-quit penalty

  • First quit in a ranked session: 5-minute matchmaking cooldown.
  • Second within 24h: 30-minute cooldown + 50 rank points.
  • Third within 24h: 24-hour ban from ranked + 150 rank points.
  • Tournament context: any rage-quit forfeits the match per @uzume/broadcast rules.

Cert constraint: All four platforms require AC enabled at launch for cross-play; CI gate Tools/check-anti-cheat-cert.py asserts EAC + BattlEye manifests are present in PC build, platform-native AC bindings are present in console builds, and the appeal-flow Statement-of-Reasons API is reachable in staging.

Cross-Play & Cross-Progression#

Cross-play scope

  • Cross-play enabled by default for ranked 1v1 / 2v2 tag, custom lobbies, Battle Hub, and World Tour across PC, PS5, PS5 Pro, XSX, and Switch 2.
  • Per-platform opt-out: Sony / Microsoft / Nintendo each expose a system cross-play toggle; V2 reads the toggle on session start and reflects it in matchmaking ticket. Toggle changes mid-session do not affect the current match.
  • Steam Deck treats as PC for cross-play purposes; Steam Deck Verified rating is launch-blocking.
  • iOS / Android companion app is read-only out-of-game; not a play surface.
  • Input-method pairing: each ticket carries InputClass.{KBM, Gamepad, FightStick, FightPad, ArcadeStick, AdaptiveController}; cross-class matchmaking is opt-in per-mode. KBM ↔ Fight Stick is on by default in unranked; opt-in only in ranked. Adaptive controllers always opt-in for both sides.

Cross-progression scope

  • Account binding: @oshun/identity is the single account root; per-platform shadow accounts (PSN / Xbox Live / Nintendo Account / Steam) bind to one Oshun account. @v2/oshun-identity-binding composes the shared @oshun/identity contract for V2 services, and Unreal mirrors it with FV2OshunIdentityAccountBinding; re-binding requires a 30-day cool-off and a TOTP step.
  • Shared state: profile, currency ledger (Crowns + per-platform IAP credit), cosmetic inventory, fighter unlocks, ranked rank, Battle Pass progress, Krypt progress, MyCAREER save, MyFACTION roster, replay archive.
  • Per-platform-only state: platform achievement / trophy IDs, platform store entitlements that the platform forbids transferring (e.g. Sony bonus cosmetic from a PS5 disc bundle is PS5-only by Sony cert).
  • Conflict resolution: save-game version tracked per save; merge on account first-login per platform uses last-write-wins for non-cosmetic state and union-of-unlocks for cosmetic / fighter unlocks.
  • Entitlement-claim API: @oshun/identity exports the signed claim contract in v2-entitlement-claims.ts; @v2/cross-product-entitlement consumes the claims for V2 grants and documents the runtime contract at V2/docs/integration/cross-product-entitlement.md.

Cert-blocking edge cases

  • Voice chat: cross-platform voice routed through Iris voice; each platform family chat stays on platform-native channels per TRC.
  • Reporting: cross-platform report submission allowed; per-platform reporting duties (mandatory PSN report routing) preserved.
  • Banning: Oshun-side bans apply across all platforms; platform-side bans apply only on that platform.
  • Region-locked content (e.g. Korean variant of a fighter costume): cosmetic inventory entry is region-stamped; cross-region accounts see the cosmetic as locked rather than seeing the wrong variant.

CI gates: Tools/check-cross-play-cert.py validates input-class enumeration matches per-platform TRC; Tools/check-cross-progression.py validates the per-platform-only state list against each platform's lotcheck docs.

Audio Pipeline#

  • Native pipeline: MetaSounds + Audio Modulation as the baseline. Wwise as optional middleware if production needs exceed engine native (decision documented in V2_DEPENDENCIES.md).
  • Per-fighter footstep / cloth / weapon foley layer.
  • Per-fighter voice bank (idle, taunt, intro, victory, defeat, KO, finisher, staredown).
  • Per-mode commentary banks (WWE play-by-play + color; UFC commentary pair; SC narrator; SF announcer; MK announcer; DJ DJ).
  • Bark trigger system on gameplay events.
  • Dynamic music: vertical-stack per match (ambient → tension → climax → KO sting); DJ-style remix for DJ ruleset.
  • Custom soundtrack import: PC mp3/flac/ogg/wav; console where TRC allows; streaming where licensed.
  • Spatial audio: Atmos / Tempest3D / Dolby; binaural HRTF fallback.

VFX Pipeline#

  • Per-style hit-spark library (clean, dust, metal, electric, fire, ice, spirit, blood).
  • Blood decal pipeline (env projection + vertex paint), gore-tier toggle.
  • Limb severance / dismemberment (MK-only).
  • X-Ray render pass (translucent skin + bone stencil overlay + per-bone break states).
  • Stage hazard effects.
  • Weapon ribbon trails per weapon profile.
  • Aura effects: Devil-form, Soul Charge, Heat, Burnout.

Cinematic Pipeline#

Per-ruleset Cine Camera Rigs. Seven baseline rigs (MK / SF / Tekken / WWE / UFC / SC / DJ) plus the racing camera. Each rig is a UCineCameraComponent preset with target distance, FOV, DOF target, look-ahead, post-process override, and per-event lerp curves. Rigs are data-only assets at Content/Cameras/<Ruleset>/Rig_<Ruleset>.uasset; selection driven by gameplay-tag state.

Auto-cinematic triggers

  • KO last hit: time-dilation curve from Content/Curves/KO_<Ruleset>.uasset (0.10× for MK Fatal Blow → 0.35× for SF Drive Impact).
  • Finisher window: full Sequencer take-over (Content/Sequences/); player input dropped for the duration; replay re-enters live state at next RoundStart.
  • Round-clinching hit: half-second slow-mo + camera push-in.

Replay viewer + export

  • Replay container is the same deterministic input stream V2Netcode produces; the viewer re-simulates the match from inputs. Saved at ~/V2/Replays/<id>.v2replay (versioned).
  • Editable camera + timeline overlay on top of replay re-sim. Camera edits are non-destructive — they layer on top of the original input replay.
  • MP4 export via MoviePipeline + encoder priority (see deps§"Media encoding"): NVENC → AMF → VideoToolbox → Quick Sync → FFmpeg software. 1080p60 default; 4K60 + HDR opt-in. Per-export NIL / IP-rights check via @themis/likeness (forthcoming) and @v2/aphrodite-licensed-likeness-safety; export is blocked if the match contains a fighter whose NIL grant window has expired or whose licensed-fighter likeness safety gate has been revoked.

Photo Mode

  • Mid-match pause-side capture (offline only) and replay-side capture (always-on).
  • Rotation / DOF / filters / stickers / frames data-driven from Content/PhotoMode/.
  • NIL gate: every photo carries a LikenessRightsManifest.json that @themis/likeness validates before share. Photos with expired-rights fighters are saved locally but cannot be shared online.
  • C2PA provenance: every shared photo includes a C2PA manifest stamping origin (player, timestamp, fighter list, stage); cross-ref Yemaya living scenes provenance already shipped in V1.

Sequencer-preset library

  • Per-mode: walkout, ring entrance, octagon walkout, DJ club entry, stage transition, mid-fight cinematic, finisher, ending — all under Content/Sequences/<Mode>/<Beat>/.
  • Per-fighter signature stage entrance overrides at Content/Sequences/Fighter/<Fighter>/Entrance.uasset (see arch§"Per-Fighter Signature Library Architecture").

Performance + cert

  • Cinematic render budget: ≤ 16.6 ms / frame at 60 Hz on PS5; ≤ 8.3 ms at 120 Hz mode. Cinematic spikes deferred to next safe frame rather than dropping below target.
  • MP4 export cert: per-platform encoder pin verified in V2/ue/Config/<Platform>Engine.ini; PSN ShareStream / Xbox Game DVR integration verified pre-launch.

UI / HUD Architecture#

V2 UI is built on CommonUI 5.5 with the activation framework. Widgets are all UMG + MVVM (ModelViewViewModel) — no direct ASC access from widget code; widgets bind to UViewModel instances that mirror ASC attributes.

Layer architecture

  • Front-end (V2/ue/Content/UI/FrontEnd/): CommonUI activation tree. Root activations: MainMenu → (PlayMenu | OnlineMenu | CreatorSuite | Krypt | Settings | Codex | BattleHub).
  • In-match HUD (V2/ue/Content/UI/InMatch/): per-ruleset overlay assets composed from a shared W_HUD_Base. Per-ruleset overlays (MK / SF / Tekken / WWE / UFC / SC / DJ) inject their meter widgets via the IRulesetHUD interface; mode-plugin overlays (Royal Rumble entrants strip, UFC scorecard interlude, WWE booking shoutout) inject via IModeHUD.
  • Per-mode HUD injection contract: every GameFeaturePlugin that needs HUD surface declares HUDInjections in its .uplugin; on plugin activation, the V2UI subsystem loads the listed UCommonActivatableWidget classes into named slots (Slot.TopLeft, Slot.TopRight, Slot.Center, Slot.Bottom).
  • Notification center (W_NotificationCenter): toast queue + persistent drawer. Toast types: FriendOnline, PartyInvite, TournamentRoundPing, DailyChallengeComplete, BattlePassTier, RankUp, ModerationAction, SystemMaintenance. Rate-limited at 1 toast / 2s; queue overflow → drawer.
  • Settings panels (W_Settings_*): Video, Audio, Controls (rebind), Gameplay (per-ruleset assists, gore tier, tutorial reminders), Accessibility (cross-ref arch§"Accessibility"), Network, Account, Privacy (cross-ref arch§"Security, Privacy, Compliance"). Each panel binds to a single UViewModel; settings persist via @oshun/persistence.

MVVM contract

  • Every ASC attribute referenced by HUD has a corresponding FObservable property on UMatchViewModel; attribute change notifications flow through the viewmodel, never directly to widgets. This keeps widget code free of GAS includes and makes HUD testable without a live match.
  • Per-match viewmodel created on RoundStart, destroyed on MatchEnd.
  • ViewModels for non-match HUD (notification center, friend list) live on the UV2UISubsystem (LocalPlayer subsystem).

Accessibility hooks

  • HUD scale slider: 75–150% in 5% steps; per-widget min-readable-size constraint asserted at design time (warns if rescale would drop a label below 18 px on a 1080p target).
  • Reduced-motion variant: every animated widget has a Reduced static variant; the V2UISubsystem swaps at runtime when the accessibility toggle changes.
  • Colorblind palettes: 4 palettes (Protanope / Deuteranope / Tritanope / Monochromacy) applied via UColorPaletteSubsystem; every widget pulls semantic colors through the palette, never a raw hex.
  • Screen-reader bridge: NVDA / JAWS / VoiceOver / TalkBack via @v2/iris-accessibility over @iris/accessibility; in-match descriptions and real-time match captions use @v2/psyche-caption-streaming over @psyche/caption-streaming, menu trees use the platform-native screen-reader API, and every focusable widget carries an AccessibilityDescription text token.

Tutorial system

  • Per-ruleset interactive tutorials (8–12 lessons per ruleset) live as Sequencer-driven UMG overlays composed with a sandbox training-mode match.
  • Input-diagram overlay: shared W_InputDiagram shows controller / KBM / fight-stick / fight-pad bindings; pulls from the active IMC.
  • Frame-data overlay: W_FrameDataOverlay reads from DA_Move_* data assets via the Sophia frame-data RAG (cross-ref arch§"Per-Fighter Signature Library Architecture"). Every release-candidate cook runs @v2/sophia-release-candidate-ingestion over the frame-data spreadsheet and patch-notes corpus through @sophia/ingestion before cook artifacts are produced.
  • Hit-reaction trainer: a W_ReactionTimer widget under training mode shows hit-confirm windows in real time.

Performance budget

  • HUD render budget: ≤ 0.6 ms / frame at 60 Hz; ≤ 0.3 ms at 120 Hz.
  • Widget tree depth caps at 16 to keep the slate prepass under budget; designer-time linter Tools/check-widget-tree-depth.py fails the build on violations.

Telemetry & Analytics#

  • Event schema covering standard taxonomy events for session start/end, level load, death, achievement, purchase, UI interaction, error, plus match lifecycle, move usage, damage dealt/received per move, combo length, meter usage, finisher trigger rate, rage-quit, crash, frame budget exceedance.
  • V2Telemetry publishes canonical @oshun/event-bus topics under v2.match.*, v2.cosmetic.*, and v2.player.*; it does not publish to a V2-only telemetry ingest endpoint.
  • Backend ingest with PII strip at ingest.
  • Balance dashboards (pick rate, win-rate-on-hit, win-rate-on-block, frame-data drift, hot/cold heatmaps).
  • A/B framework for balance changes with rollback.
  • Ghost data capture (opt-in).
  • Telemetry opt-out persistent across save reset.

Asset Budget & Streaming#

  • Per-fighter polygon budget: principals ≤ 80k tris LOD0, mid-roster ≤ 60k, crowd ≤ 25k; LOD chain to LOD3 / impostor.
  • Texture memory budget per fighter: ≤ 64MB at 4K texture pack, ≤ 32MB at 2K base, ≤ 8MB at 1K Switch2.
  • Animation budget: ≤ 800 unique anims per fighter; sharable generic anims pooled in Content/Animation/Shared/; total compressed package ≤ 80MB per fighter.
  • Audio budget: per-fighter VO + foley + barks ≤ 50MB per locale at 48kHz Opus.
  • Per-stage budget: ≤ 4M tris LOD0; texture ≤ 256MB at 4K pack; VFX GPU ≤ 4ms at 4K; audio ≤ 30MB per locale.
  • Streaming pool sizes: PS5 / XSX 4GB, PC scalable to 8GB, Switch2 1.5GB.
  • Asset chunking per-fighter: character / voice / base-costume / alt-costume / cosmetic-pack chunks for incremental install + DLC.
  • Texture streaming priority: in-match visible fighters + stage prioritized; off-screen partner fighters demoted.
  • Crowd LOD: instanced static mesh + bone-animated impostor at distance.
  • Asset audit weekly: orphan / oversize / missing-LOD / missing-skin / redundant-material report (cross-ref §57).

Hotfix, Quick-Resume, Crash Recovery, DRM#

flowchart LR Server[Hotfix Manifest Server] -- signed manifest --> Client[Game Client] Client -- offline match --> Local[Local Hotfix Values] Client -- online match --> Enforced[Server-Enforced Values] Tournament[Tournament Mode TO] -- freeze snapshot --> Replay[Replay Header] Crash[Mid-Match Crash] --> Reporter[Crash Reporter] Reporter -- symbolicated --> Tele[Telemetry] Reporter -- replay attached --> Ops[Ops Console] Sleep[Console Sleep / App-Switch] --> QR[Quick-Resume State] QR --> Resume[Resume on Wake]
  • Server-driven balance hotfix (data-only): tunable values for damage, frame data, meter cost, drive cost, finisher conditions — within bounds the anti-cheat trusts.
  • Hotfix manifest signed + versioned; offline match honors local hotfix; online enforces server hotfix; rollback capability on failed canary.
  • Tournament Mode freezes hotfix at TO snapshot; snapshot stored in replay header.
  • Mid-match crash recovery: SP auto-save + state reconstruction on relaunch; online ranked graceful disconnect with crash-vs-rage-quit attribution via crash reporter.
  • Quick-resume support per platform (Xbox Quick Resume, PS5 instant-resume, Switch2 sleep, PC sleep) with full session state preservation.
  • Background download during play with bandwidth throttling option.
  • PC DRM (Denuvo or equivalent) at launch with documented removal-plan window (6-12 months); console platform-native anti-piracy; cooked-asset integrity check at boot → safe-boot mode on tamper detection.

Build, Cook, Patch#

  • BuildGraph at Build/Build.xml for Win64, Linux (dedicated server), PS5, XSX, Switch2, Mac (dev only).
  • UnrealBuildAccelerator / Horde distributed builds with ≥ 75% cache hit-rate gate.
  • DDC sharing for editor performance.
  • CI workflows on every PR: editor compile, automation tests, Win64 cook.
  • Cook frame-budget gate fails CI on regression.
  • Chunked patch downloads; incremental patches per platform; manifest signing.
  • Day-one patch budget ≤ 5GB; subsequent patches ≤ 2GB typical.

Data Architecture#

  • Spreadsheet-of-truth at V2/balance/data/ (Google Sheets export / CSV).
  • CSV ↔ DataTable round-trip importer in V2Editor.
  • Per-asset-type validators (move, fighter, moveset, finisher, style, ruleset, arena, entrance).
  • Drift tests: every DA_Move referenced from a DA_Moveset exists, every animation referenced exists, every hitbox sequence non-empty.
  • CSV export of all runtime move frame data to V2/balance/exports/<branch>/frame-data.csv.

Live-Service & DLC#

  • Year-1 plan: 4 character DLC packs, 1 mode-expansion DLC, seasonal cosmetic drops.
  • Year-1 free updates: balance patches, new stages, new tower content, new tutorials, accessibility.
  • GameFeaturePlugin-based modular content delivery.
  • License-conditional content isolated to plugin for hot-swap removal.
  • Premium currency rules: transparent items, no real-money loot boxes, daily spend limits.

Accessibility#

V2's accessibility surface is cert-critical (PSN / Microsoft / Nintendo each require certain a11y features to ship) and is architected as a first-class subsystem rather than an after-the-fact toggle pass.

Visual a11y

  • Colorblind palettes: 4 palettes (Protanope, Deuteranope, Tritanope, Monochromacy). Applied via UColorPaletteSubsystem; widgets pull semantic color (e.g. Color.Damage.Health, Color.Status.Burn) not raw hex.
  • High-contrast HUD: 2 levels (Medium, High); HUD widgets carry a HighContrastVariant UMG override.
  • HUD scale: 75–150% in 5% steps; min-readable-size linter enforces 18 px @ 1080p minimum at any scale.
  • Reduced motion: every animated widget has a Reduced static variant; screen-shake, hitstop visual, camera-shake all have reduced variants; ranked-eligibility flag does not flip off when reduced-motion enabled (visual-only accommodation).
  • Subtitles + closed captions: per-locale, per-speaker, per-effect (e.g. "[gunshot]" caption tags). @v2/iris-accessibility uses @iris/accessibility for the accessibility bridge, while @v2/psyche-caption-streaming uses @psyche/caption-streaming for real-time match captions across HUD, spectator mode, replay transcripts, companion captions, and broadcast observer captions; in-engine subtitle system handles cinematic dialogue.

Motor a11y

  • Full input rebinding: every action remappable on every input class (KBM / gamepad / fight-stick / fight-pad / adaptive controller).
  • Assist macros: auto-combo-trigger, motion-shortcut (DP → single button), parry-window-extend (+2 frames), block-assist (auto-block when stick neutral). Assist-macros flag flips off ranked-eligibility in the matchmaking ticket; assist-eligible queues match assist-vs-assist or assist-vs-pure-with-handicap.
  • Hold-to-press toggles: every "hold" input has a "toggle" alternative; config-driven.
  • One-handed scheme: preset rebinding for left-only and right-only play; ships with each platform's adaptive-controller integration.
  • Adaptive controller integration: Sony Access Controller (PS5), Microsoft Xbox Adaptive Controller (XSX), Logitech Adaptive Gaming Kit (PC), Quadstick (PC). Per-controller calibration UI from V2Peripherals.

Auditory a11y

  • Audio cues for visual events: opt-in audio ping for low-HP, ringside rope position, finisher window, Drive Rush whiff — every gameplay state with critical visual cue has a corresponding audio cue.
  • Mono / binaural toggle: for hearing-impaired-in-one-ear players.
  • Subtitle-only mode: mutes voice / commentary but retains gameplay SFX.

Cognitive a11y

  • Tutorial assist: input prompts persist after first practice (toggle); trial cap removed (some players need 50+ attempts).
  • Tooltip everywhere: every menu item carries a tooltip with text and optional voice-over.
  • @iris/accessibility integration: @v2/iris-accessibility binds dyslexia-friendly typography, cognitive-load reduction, screen-reader bridge, real-time companion-app assist, native UE accessibility hooks, and accessibility certification gates. It consumes @v2/psyche-caption-streaming over @psyche/caption-streaming as the caption provider while Iris owns the cross-client accessibility semantics.
  • @psyche/caption-streaming integration: @v2/psyche-caption-streaming owns the real-time match caption session plan for HUD, spectator mode, replay, companion, and broadcast surfaces. Captions are off rollback presentation state and expose no deterministic gameplay input.

Cert + certification targets

  • VPAT 2.5 (WCAG 2.1 AA) for marketing site + companion app; certification target ≥ 90% WCAG 2.1 AA criteria pass before launch.
  • AbleGamers + Can I Play That community reviews scheduled in pre-launch beta.
  • Sony / Microsoft / Nintendo accessibility certification: each platform's required-a11y-feature list ships in launch build; cert blockers tracked per-platform at V2/legal/a11y-cert-checklist.md.
  • CI gate Tools/check-a11y-coverage.py asserts every focusable widget has an AccessibilityDescription and every animated widget has a Reduced variant.

Security, Privacy, Compliance#

V2 security/privacy/compliance composes the existing Oshun shared packages (@oshun/data-residency, @oshun/audit-platform, @oshun/trust-safety) plus Themis governance, @v2/aphrodite-age-gate over @aphrodite/age-verification, and @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine. This section pins the cert-blocking surface; the data-subject-rights request flow is detailed in arch§"Compliance & Data-Subject-Rights Architecture", and the privacy-by-design / DPIA / sub-processor governance process is detailed in arch§"Privacy-by-Design, DPIA & Sub-Processor Architecture".

Auth + identity

  • Account binding: Oshun account is the root (@oshun/identity); per-platform shadow accounts bind via @oshun/auth-client and the V2 @v2/oshun-identity-binding surface. FV2SaveHeader stores OshunAccountId and HomeRegionId separately from PlatformUserId so cloud saves cannot merge across identities.
  • MFA: TOTP required for account-merge, payment-detail change, and ranked-pro-tier qualification.
  • Session: JWT short-lived (15 min) + refresh token (30 days); refresh rotates on every use; cross-region session sync via @oshun/cache.

PII handling

  • Strip at telemetry ingest: @oshun/audit-platform pipeline applies a per-field PII allowlist; raw IP, raw device fingerprint, real-name fields never reach analytics warehouse. Per-region routing via @oshun/data-residency.
  • Per-region storage: EU player data routed to Frankfurt / Stockholm; JP to Tokyo; KR to Seoul; LATAM to São Paulo; CN to publisher-routed cloud; CCPA opt-out honored at ingest.
  • DSR routing: @v2/themis-privacy-dsr-routing composes @themis/privacy with @oshun/data-residency; Themis owns the access / erasure / portability / rectification workflow and data-residency owns the subject-home route. SLA per region remains GDPR 30 days, CCPA 45 days, LGPD 15 days. DSR machine-readable exports are JSON + CSV; deletion cascades to all bound shadow accounts.
  • V2 audit publication: Moderation, anti-cheat, and DSR surfaces publish canonical events through @oshun/audit-platform; V2 publishes and Oshun retains and exports the investigation-ready audit trail.
  • Per-feature consent: @v2/aphrodite-consent-surfaces replaces standalone V2 consent handling for telemetry, voice processing, and behavioral profiling. It uses @aphrodite/consent-engine, requires consent receipts when enabled, defaults missing opt-ins to privacy-preserving fallbacks, redacts disallowed data classes, and stays off rollback.

Rating boards + per-region content rules

  • Rating boards: ESRB M, PEGI 18, CERO Z, USK 18, ACB R18+, GRAC, ClassInd 18, OFLC R18 — single rating cycle per platform per region.
  • Per-region content rules use shared @oshun/region-rules per V2/docs/decisions/regional-content-rules-owner.md: China removes blood + finishers + ghost / skeleton imagery; Germany clamps to mild gore and swaps red blood for green / black where applicable; Australia / NZ cook standard gore with finisher pre-clearance; Korea clamps to mild gore and softened finishers. Missing region data defaults to the China most-restrictive profile.
  • Age gate: @v2/aphrodite-age-gate replaces the standalone V2 age gate. It uses @aphrodite/age-verification as a backend-only driver for gore tier, adult fatalities, and region-conditional cinematics. The Aphrodite brand is not visible to players, and the gate stays off rollback. The primitive-fitness audit keeps the existing Aphrodite primitive but parameterizes it with the mature-rated-fighting-game profile, rejects the adult-content default profile, uses rating-board / region-rule thresholds, and excludes 2257, performer-protection, and anti-CSAM performer workflows from V2 game content gating. The adult-content default profile is rejected for V2.
  • Per-region build cooks: Tools/cook-region.py produces per-region cooked content with gore-tier overrides; rating-board manifest at V2/legal/rating-boards.json is the source of truth.
  • 2257 record-keeping: if any CAW / CAF / NIL flow involves licensed performer likeness, @themis/likeness (forthcoming) holds the records; out-of-scope for CAW that is purely user-generated likeness.
  • Licensed-fighter likeness safety: @v2/aphrodite-licensed-likeness-safety composes @aphrodite/performer-sovereignty and @aphrodite/performer-autonomy. It consumes Themis @themis/likeness stamps by contract, listens for themis.license.revoked, and blocks the likeness surface plus Bellona cook for revoked, expired, terminated, mismatched, or withdrawn grants.

Cert constraints

  • Every rating board requires a separate Manifest + cert submission; cert windows tracked at V2/legal/cert-windows.md.
  • China cert: pursued via publisher route only; the V2 build always passes Tools/check-cn-content-rules.py before publisher hand-off.
  • EU AI Act: every shipping AI service requires a Model Card + conformity assessment; @v2/eu-ai-act-surface validates the Director, AI commentary, anti-cheat classifier suite, and generation-pipeline registry against @nous/safety Model Cards and @themis/accountability AI-system-of-record exports.

Observability, Evaluation, Release Gates#

  • All Node packages under apps/v2/ declare @oshun/metrics and @oshun/tracing as required from day one. The Unreal V2Services module exposes matching FV2ServiceObservabilityBinding records for apps/v2/* and V2/ue/Source/V2Services; the path is off rollback and cannot influence deterministic simulation.
  • Symbolicated crash reporter; in-the-loop fault injection in dev.
  • Per-platform perf dashboards.
  • Network-quality dashboard: matchmaking p99, rollback frame distribution, packet loss, rage-quit rate.
  • Anti-cheat false-positive rate dashboard.
  • Canary analysis automation for online services.
  • Release gates: regression suite + golden replays + frame-budget + crash rate + cert pass + RTC pass + canary pass.

Performance Budgets#

Target Resolution FPS Notes
PS5 (standard) 4K 60 RT off
PS5 Pro 4K 60 RT shadows on
PS5 Pro (perf mode) 1080p 120
Xbox Series X 4K 60
Xbox Series S 1440p 60 Reduced VFX density
Switch2 (docked) 1080p 60 Quality-band drop
Switch2 (handheld) 720p 30 Quality-band drop
PC baseline (RTX 3060 / 4060) 1440p 60 Medium settings
Steam Deck 800p 60 Verified

Per-frame: gameplay 4ms, anim 3ms, render 8ms, audio 1ms, network 0.5ms, GC ≤ 1ms incremental.

Loading: cold-boot ≤ 30s on PS5; mid-session match load ≤ 8s.

Testing, QA, Cert#

  • UE Automation Spec coverage for GAS, motion parser, hitbox engine, rollback determinism, save round-trip, data-table integrity.
  • Gauntlet suites: launch + tutorial + arcade ladder + online-headless 1v1, on every PR.
  • Replay-based regression: 200 golden replays per build, frame-by-frame divergence detection.
  • Cert / TRC / XR / lotcheck on every shipping platform.
  • Anti-cheat compatibility cert per platform.
  • Trophy / achievement plans across modes.

Content Pipeline & Source Control#

  • Perforce primary; Git LFS mirror for OSS-style branches.
  • Per-asset-type checkout policy (umap exclusive, uasset mostly mergeable with text-format on, blueprint binary).
  • Build farm with cooked-content caches per platform; weekly hard refresh; nightly delta cook.
  • Asset audit report weekly (orphans, oversize, missing LODs, missing skin weights, redundant material variants).

Per-Fighter Signature Library Architecture#

flowchart LR Checklist[Per-Fighter Checklist] --> Anim[Signature Animations] Checklist --> Audio[Signature Audio] Checklist --> VFX[Signature VFX] Checklist --> Stage[Signature Stage Reactions] Anim --> AnimBP[AnimBP Stance Layer] Anim --> ChooserHit[Hit-Reaction Chooser Tables] Audio --> Bank[Voice Bank] Audio --> Impact[Impact Sting Library] Audio --> Theme[Dynamic Music Stack] VFX --> Niagara[Niagara Templates] Stage --> Sequencer[Sequencer Presets] QA[QA Cert Pass] -- per-fighter audit --> Checklist Budget[Asset Budget] -- gates --> Checklist

Signature library is a per-fighter contract enforced by the checklist at V2/balance/fighters/<fighter>/signature-checklist.md, asset-budget-gated, and QA-cert-verified.

Side-Story & Story-Theater Pipeline#

  • Side Story plugin (V2/ue/Plugins/V2Mode_SideStory/) per fighter: Sequencer-driven cinematic + 3-5 scripted fights + branch logic.
  • Story Theater plugin (V2/ue/Plugins/V2Mode_StoryTheater/) indexes all unlocked cinematics across Story (§20) / Character Episodes / Side Stories / Arcade endings and presents a browse / replay UI with alt-language audio override + subtitle override + commentary track toggle.
  • Branch tree visualizer (V2Mode_StoryTheater) renders the Story branching graph; player can jump back to any branch point and retry.
  • Ending Gallery in Krypt hub indexes per-fighter Arcade endings.

Match-Flow Mode Plugin Matrix (extension)#

This matrix covers the canonical match-flow variants (versus, time / score attack, wager, handicap, and so on). It is a deliberately separate table from the core-mode matrix in arch§"Game Modes" (Arcade, Story, careers, hubs): that table covers full single-player and online experiences, while this one covers the lightweight match-flow variants that wrap a standard fight.

Mode Net Save Plugin
Local Versus (1P vs 2P) Local Match record V2Mode_LocalVersus
Versus CPU Local Match record shares V2Mode_LocalVersus
CPU vs CPU (attract) Local n/a shares V2Mode_LocalVersus
Time Attack Local + leaderboard Best-time per fighter V2Mode_TimeAttack
Score Attack Local + leaderboard Best-score per fighter V2Mode_ScoreAttack
Wager Match Online ranked-ineligible Wager ledger V2Mode_Wager
Friendly / Dare Online friend-only Match record V2Mode_Friendly
Handicap Local or online Match record V2Mode_Handicap
First Blood Local or online Match record V2Mode_FirstBlood
Boss Battle Local Per-boss progress V2Mode_Boss
Sparring Local + online lab n/a shares V2Mode_Training
Iron Man / Bo-N Online Set scorecard V2Mode_BestOfN
LAN LAN UDP broadcast Match record V2Mode_LAN

Ranked Season Service#

flowchart TB Match[1v1 Match End] --> MMR[Hidden MMR Update Glicko2 / TrueSkill2] MMR --> RankMap[Visible Rank Tier Mapping] RankMap --> Hysteresis[Hysteresis Gate] Hysteresis --> Visible[Player Rank Display] Inactivity[14-day Inactivity] --> Decay[Rank Decay Above Master] Decay --> MMR Anomaly[Sandbagging Anomaly Detection] --> Penalty[Auto-Derank] Penalty --> MMR Region[Region Pool] --> CrossPlatform[Cross-Platform Unified Pool] CrossPlatform --> MMR Tournament[Tournament Result] --> Crown[Crown Ranking Overlay] Ranked[Ranked Result] --> Crown

Service contract

  • gRPC service: libs/proto/v2/online/rank.proto (cross-ref Online Services contract above).
  • Key methods: Rank.RecordMatch(match_result) → mmr_delta, Rank.GetLeaderboard(mode, region, season, page) → ladder, Rank.GetSeasonState(account_id, mode) → season_state, Rank.GetCrownPoints(account_id, season) → points.
  • MMR model: TrueSkill2 with per-mode μ/σ; visible rank tiers mapped via static rank-tier-map.json. Hysteresis: ±1 tier requires ≥ 5 matches in the boundary band.
  • MMR delta cap: ±32 points per match (prevents single-match swings).
  • Placement matches: 10 placement matches at season start before visible rank shown; hidden MMR seeded from prior season − 1.5σ decay.
  • Rank decay: Master tier and above decay 50 MMR / 14 days of inactivity; decay stops at Master-tier floor.
  • Master tier threshold: top 1% of TrueSkill2-projected pool per region per mode; recalculated weekly.
  • Sandbagging detection: ML classifier emits v2.rank.sandbagging.detected on confidence ≥ 0.95; manual review opens via @themis/dispute-resolution; confirmed sandbaggers auto-derank 200 MMR.
  • Event-bus publishes: v2.rank.season.started, v2.rank.season.ended, v2.rank.tier.promoted, v2.rank.tier.demoted, v2.rank.sandbagging.detected.
  • Season authority: @v2/maat-live-service-calendar consumes @maat/strategy as the source of truth for V2 seasons and Crown Points pool windows; ranked services expose the calendar but do not define it.
  • SLOs: rank record p99 ≤ 800 ms; leaderboard fetch p99 ≤ 400 ms; season-end snapshot completed within 24h of season close.
  • Owner: V2 ranked team. Cost-tier: standard backend; ceiling at V2/docs/cost/ranked.md.

Companion App Architecture#

flowchart LR Mobile[apps/oshun/mobile/v2 V2 Companion] --> APIGW[Public API Gateway] APIGW --> Auth[Account Auth] APIGW --> Stats[Stats Service] APIGW --> History[Match History Service] APIGW --> Replay[Replay Stream Service] APIGW --> Push[Push Notification Service] Mobile -- second-screen --> LiveMatch[Live Match Bridge] LiveMatch --> Client[Game Client] Coach[Coach Mode] --> Mobile Webhooks[Tournament Webhooks] --> APIGW Discord[Discord Bot] --> APIGW
  • Companion app runs at apps/oshun/mobile/v2/ inside the shared Oshun Expo shell and consumes @oshun/shell-core, @oshun/auth-client, @oshun/concordia-integration, @oshun/trust-safety, @iris/agents, and @sophia/client. It consumes the same Public API as third-party tools; account-public-flag gates which stats are visible.
  • Second-screen mode during a live match: companion app receives low-bandwidth stream of opponent move list + frame data; no gameplay effect; cosmetic-only.
  • Push notifications routed via APNS / FCM with per-category opt-out.
  • Modding policy (PC) and Steam Workshop integration documented at apps/v2/web/dev-portal/.

Service contract

  • Public API: handlers at apps/oshun/web/api/v2/, Next route adapters at apps/oshun/web/src/app/api/v2/, and OpenAPI 3.1 spec at libs/openapi/v2/companion.yaml registered by @oshun/openapi. The runtime document is served at GET /api/v2/openapi; generated client SDK remains owned by @oshun/developer-portal.
  • Knowledge pages: frame-data wiki, combat glossary, and roadmap routes now live at /v2/wiki, /v2/glossary, and /v2/roadmap inside apps/oshun/web. They are backed by @sophia/client RAG response contracts and render citations from the frame-data schema, public API, companion, and architecture corpus.
  • Auth: OAuth 2.1 with PKCE; third-party apps register via developer portal, get per-app scopes; rate-limit per-app via @oshun/cache.
  • Key endpoints:
    • GET /v2/player/{id}/stats — public stats (per-account-public-flag).
    • GET /v2/player/{id}/history?limit=N — match history.
    • GET /v2/replay/{id} — replay stream (auth required for non-public).
    • POST /v2/match/{id}/coach-stream — second-screen low-bandwidth stream.
    • POST /v2/notification/subscribe — push subscription.
  • Event-bus subscribes (for push routing): v2.match.ended, v2.party.invite.created, v2.tournament.round.advancing, v2.daily-challenge.completed, v2.battle-pass.tier.unlocked.
  • SLOs: API p99 ≤ 400 ms; push delivery p99 ≤ 5 s end-to-end; second-screen stream ≤ 200 ms p99 from match event to companion render.
  • Rate limits: 100 req/min per third-party app (unauthenticated baseline); 1000 req/min per registered app; per-account 30 req/min on personal data.
  • Owner: V2 platform team. Cost-tier: ceiling at V2/docs/cost/companion.md; APNS / FCM at vendor standard tier.

Production Pipeline#

  • Mocap pipeline: Vicon / OptiTrack recording hardware → @aja/motion-pipeline-sdk cleanup / contact-root repair → @aja/neural-retargeting V2-skeleton retarget → Bellona/UE import → curve / keyframe edit → Sequencer / AnimBP import. Stunt double + safety + insurance handled at production layer. Every studio capture first passes @v2/aja-consent-nil-ledger, which requires active @aja/consent-management consent and a Themis @themis/likeness NIL link before Aja ingest; revocation blocks future Aja processing and Bellona cook for dependent clips.
  • Licensed likeness safety pipeline: @v2/aphrodite-licensed-likeness-safety runs before likeness surfaces, creator-suite publishing, replay export, and Bellona cook. @aphrodite/performer-sovereignty validates approved uses while @aphrodite/performer-autonomy emits the revocation flow that notifies Themis, Kuanyin, and Aja.
  • VO pipeline: per-locale recording → editing → loudness normalization → Opus encode → per-fighter bank version.
  • Music pipeline: composition → license clearance → master + variant authoring → MetaSounds graph build → in-game audio modulation.
  • IP / NIL / Likeness layer: per-asset rights metadata stored in V2/legal/rights-manifest.json; build pipeline verifies every shipping asset has cleared rights or is original-IP.
  • Pre-production milestone gates: Greenlight → Alpha → Beta → Gold master; each gate has documented exit criteria stored at V2/docs/production/milestones/.

Compliance & Data-Subject-Rights Architecture#

flowchart LR Player[Player] --> DSRForm[In-Game DSR Form] DSRForm --> Auth[Account 2FA] Auth --> ThemisPrivacy[@themis/privacy · DSR workflow] ThemisPrivacy --> DataResidency[@oshun/data-residency · subject-home route] DataResidency --> V2Dsr[@v2/themis-privacy-dsr-routing] V2Dsr --> Access[Access · download JSON export] V2Dsr --> Erasure[Erasure · delete + anonymize aggregates] V2Dsr --> Port[Portability · standard JSON export] V2Dsr --> Rect[Rectification · edit profile data] V2Dsr --> AuditPlatform[@oshun/audit-platform · DSR audit] AuditPlatform --> AuditLog[Retained + exportable audit log] Mod[Moderation Action] --> SoR[Statement of Reasons API · DSA] Mod --> AuditPlatform FairPlay[Anti-cheat Review] --> AuditPlatform SoR --> Appeal[Appeal Flow] Trusted[Trusted Flagger] --> ModQueue[Priority Moderation Queue] EU[EU Player Data] --> EUDC[EU Data Center · Frankfurt / Stockholm] JP[JP Player Data] --> JPDC[Tokyo] KR[KR Player Data] --> KRDC[Seoul] LATAM[LATAM Player Data] --> SPDC[São Paulo] CN[CN Player Data] --> CNCloud[China Publisher Cloud · Tencent / Alibaba]
  • Per-region data residency enforced by @oshun/data-residency route decisions and API gateway routing rules.
  • DSR SLA: 30d EU / 45d CCPA with one-time extension option.
  • DSR workflow ownership: access / erasure / portability / rectification are owned by @themis/privacy and exposed to V2 through @v2/themis-privacy-dsr-routing; V2 does not ship a local DSR ops console.
  • Audit-platform ownership: moderation decisions, anti-cheat review events, and DSR workflow routes are published through @oshun/audit-platform. V2 publishes; Oshun retains and exports the retained compliance, audit, and privacy investigation records.
  • Erasure preserves anonymized aggregates per GDPR Recital 26.
  • Portability format: standardized JSON with profile / matches / telemetry / cosmetics / friends / replays.
  • Statement of Reasons API publishes machine-readable moderation reasons per DSA Article 17; appealable.
  • Themis dispute adapter is @v2/themis-dispute-resolution over @themis/dispute-resolution: moderation appeals route to mediator + safety queues, and tournament-result disputes route to auditor-backed Themis challenge review. The adapter is off rollback.
  • Semi-annual transparency report ingested from moderation pipeline.

Esports Backend Architecture#

flowchart TB Event[Tournament Event] --> TOTools[TO Badge Tools] TOTools --> RuleFile[Tournament Rule File · per-event JSON] RuleFile --> ClientLock[Client Tournament Edition Lock] Event --> Bracket[Bracket Service · Smash.gg / Start.gg / Challonge / Battlefy] Bracket --> ResultIngest[Result Ingest] ResultIngest --> CrownPoints[Crown Points Pool] CrownPoints --> WorldFinal[World Final Qualification] Stream[Broadcast Stream] --> Uzume[Uzume Broadcast Pipeline · @uzume/broadcast] Uzume --> Overlay[Caster Overlay · graphics / replay / multiviewer] Stream --> Twitch[Twitch Extensions · Polls / Drops / Cosmetic Wager] Spec[Spectators] --> EmoteSystem[Spectator Emote System] Spec --> IrisTranslation[Iris Real-Time Translation · @iris/voice] IrisTranslation --> Overlay EmoteSystem --> HypeMeter[Hype Meter Service] HypeMeter --> Overlay Archive[Tournament Archive] --> ArchiveDB[(Searchable Archive DB)]
  • Per-event Tournament Edition snapshot stamped in replay header for audit; rule file uploaded via TO badge.
  • Crown points aggregated from the @maat/strategy Pro Circuit calendar + cross-region series through @v2/maat-live-service-calendar.
  • Wildcard / Roulette / Mystery modes are client-side variants gated by ruleset toggle; results-eligible per tournament rule file.
  • Esports Operations team runs live-event on-call.

Service contract

  • gRPC service: libs/proto/v2/esports/esports.proto.
  • Bracket integration: outbound webhooks to Smash.gg / Start.gg / Challonge / Battlefy via @oshun/inbound-integrations; V2 pulls results (server-authoritative) rather than accepting client-pushed results — every match's result is cryptographically verified against the replay hash before it counts for Crown Points.
  • Key methods: Esports.RegisterEvent(rule_file) → event_id, Esports.SubmitResult(event_id, match_result, replay_hash) → ack, Esports.GetBracket(event_id) → bracket, Esports.QualifyForFinals(season_id, region) → qualified[].
  • Crown Points formula: points = base_points[round] × region_factor × participant_factor × season_decay; full formula at V2/docs/esports/crown-points-formula.md. Base points per round (Round-32 = 50, Round-16 = 100, QF = 200, SF = 400, GF = 800).
  • Event-bus publishes: v2.tournament.event.started, v2.tournament.round.advancing, v2.tournament.event.completed, v2.crown-points.granted.
  • Broadcast pipeline: apps/v2/esports-tools/ ships @v2/esports-tools, which composes @uzume/broadcast for switching, graphics, multiviewer, replay, SRT contribution feeds, stream health, and stream destinations. Standalone OBS / NDI / vMix glue is not primary; OBS WebSocket is retained only for streamer-mode notification suppression.
  • Arena LED + projection: the same @v2/esports-tools package composes @uzume/lumina and @uzume/prism for live tournament LED wall layout, lighting pixel maps, projector mapping, structured-light alignment, arena video routes, and show-cue events. It is presentation/show-control state only and exposes mayInfluenceRollback: false.
  • Veritas fact-checking: @v2/esports-tools composes @veritas/fact-checking for post-match reporting, bracket result verification, and esports news publication readiness. Replay, bracket, report, and news claims are scored with explicit evidence and consensus; winner-record conflicts hold publication without changing match authority.
  • Iris real-time translation: @v2/iris-realtime-translation composes @iris/voice for spectator chat translation, commentary subtitle localization, broadcast overlays, and companion second-screen feeds. The bridge registers locale receivers per surface and remains presentation-only with mayInfluenceRollback: false.
  • Twitch Extensions rate-limit: 100 polls / extension / minute; per-extension auth via Twitch JWT.
  • SLOs: result ingest p99 ≤ 5 s from submit to bracket update; live bracket fetch p99 ≤ 200 ms; broadcast overlay update p99 ≤ 100 ms.
  • Owner: V2 esports ops team. Cost-tier: ceiling at V2/docs/cost/esports.md; commentary AI cost folds into deps§67.

Live-Service Calendar Service#

  • Calendar authority is @v2/maat-live-service-calendar over @maat/strategy; there is no standalone V2 live-calendar schema. Maat owns seasons, Crown Points, Pro Circuit calendar events, anniversary events, charity events, console tie-ins, community-voted events, and balance ramp windows.
  • Per-region calendar override: themes that conflict with cultural context auto-hidden via RegionVariant data asset.
  • Player-facing calendar widget + 6-month forward view + opt-in digest email.
  • Re-engagement service: 60d-inactivity trigger → returning-player reward grant + lapsed-player email; bandwidth-throttled (no spam).

Service contract

  • gRPC service: libs/proto/v2/live/calendar.proto.
  • Key methods: Calendar.ListEvents(region, range) → events[], Calendar.GetEvent(event_id) → event, Calendar.SubscribeReminder(event_id, channels) → ack.
  • Event-bus publishes: v2.calendar.event.starting, v2.calendar.event.ended, v2.calendar.reminder.dispatched.
  • Re-engagement throttle: ≤ 1 reactivation email / lapsed-player / 30 days; push notification rate-limit ≤ 1 / day / category. Player can opt out per channel.
  • SLOs: calendar fetch p99 ≤ 250 ms; event notification dispatch p99 ≤ 60 s from event-start; reactivation email delivery p99 ≤ 10 min.
  • Owner: V2 live-ops team. Cost-tier: standard email / push; ceiling at V2/docs/cost/live-calendar.md.

Progression & Codex Service#

  • Per-fighter XP / Mastery computed server-side from match-record + Trial / Mission / Tournament completion events; mirrored to client for HUD display.
  • Account level + Prestige loop maintained on the persistence layer (arch§"Persistence & Profile" + arch§"Cross-Play & Cross-Progression"); transparent per-level rewards table at V2/balance/progression/account-rewards.csv.
  • Codex / Encyclopedia content at V2/balance/codex/ (CSV / Markdown ↔ DataTable round-trip per arch§"Data Architecture"); per-entry unlock-condition data table; per-entry replay-link target into Story / Side Story / cinematic Vault.
  • Unified Quest Log aggregator (V2Mode_QuestLog plugin) ingesting from every mode's quest source.
  • Reward Inbox queue persisted per account; auto-claim toggle enforces low-value-only.

Service contract

  • gRPC service: libs/proto/v2/progression/progression.proto.
  • Key methods: Progression.GetAccountState(account_id) → state, Progression.RecordEvent(account_id, event) → rewards[], Codex.ListEntries(filter) → entries[], Codex.UnlockEntry(account_id, entry_id) → ack, QuestLog.GetActive(account_id) → quests[], RewardInbox.Pop(account_id) → reward_or_empty, RewardInbox.ConfirmClaim(account_id, reward_id) → ack.
  • Event-bus publishes: v2.progression.level.up, v2.progression.mastery.advanced, v2.codex.entry.unlocked, v2.reward.granted.
  • Event-bus subscribes: v2.match.ended, v2.trial.completed, v2.mission.completed, v2.tournament.event.completed.
  • SLOs: state fetch p99 ≤ 300 ms; event-driven reward grant p99 ≤ 3 s end-to-end (event → reward in inbox).
  • Owner: V2 progression team. Cost-tier: standard backend; ceiling at V2/docs/cost/progression.md.

Community & Support Backend#

flowchart LR Player[Player] --> Support[Support Portal Web/In-Game] Support --> Ticket[Ticket Service] Ticket --> SLA[Priority-Tier SLA Router] Player --> Feedback[Feedback Widget] Feedback --> FeedbackDB[Feedback DB] FeedbackDB --> Canny[Canny Feature Voting] Ambassador[Community Ambassador] --> ModConsole[Moderation Console] Ambassador --> CommunityChan[Community Channels] HallOfFame[Hall of Fame Service] --> Inductees[(Inductees DB)] Inductees --> Museum[In-Engine Museum Hub] Coach[Certified Coach] --> CoachRoute[Coach-Mode Routing] News[Devs-to-Players Announcement] --> Localize[24h Loc SLA] Localize --> InGameBanner[In-Game Banner] Localize --> NewsletterEmail[Newsletter Email]

Service contract

  • gRPC + REST services: libs/proto/v2/community/*.proto; Zendesk webhook integration via @oshun/inbound-integrations.
  • Key methods:
    • Support.OpenTicket(account_id, payload) → ticket_id, Support.GetTicket(ticket_id) → ticket, Support.PostMessage(ticket_id, message) → ack.
    • Feedback.Submit(account_id, feedback) → ack, Feedback.Vote(feature_id, vote) → ack.
    • Ambassador.GrantRole(account_id, role) → ack, Ambassador.RevokeRole(account_id, role) → ack.
    • HallOfFame.Induct(account_id, citation) → induction_id.
    • Coach.RegisterCertification(account_id, certification) → ack, Coach.GetRoster(filter) → coaches[].
  • SLA tiers (Priority-Tier SLA Router):
    • P0 (account compromise, payment dispute, harassment-in-progress): first response ≤ 1 hour, resolution ≤ 24h.
    • P1 (cheat report, ban appeal, payment failed): first response ≤ 8 hours, resolution ≤ 72h.
    • P2 (cosmetic loss, friend-list bug, UI bug): first response ≤ 48 hours, resolution ≤ 14 days.
    • P3 (feature request, general feedback): first response ≤ 7 days, resolution N/A.
  • Event-bus publishes: v2.support.ticket.opened, v2.support.ticket.resolved, v2.feedback.submitted, v2.ambassador.role.granted.
  • News localization SLA: 24h from English authoring to all 18 launch locales (subtitle level); 7d for full VO patch updates.
  • SLOs: ticket open p99 ≤ 1 s; feedback submit fire-and-forget; ambassador console p99 ≤ 500 ms.
  • Owner: V2 community ops team. Cost-tier: Zendesk subscription + Canny + email vendor; ceiling at V2/docs/cost/community.md.

Per-Platform Store & PPP Pricing#

V2's store integration is per-platform-store-native: each platform store has its own consumable / entitlement / refund / family-share semantics, and the V2 client surfaces those through a thin IPlatformStore adapter. Non-store flows (coaching marketplace, donations, esports prize pools, companion-app subscription) flow through Stripe / Adyen per deps§"Payment processing".

Per-platform store integration

  • Steam (Steamworks SDK): consumable IAP via Steam Inventory; entitlement manifests via Steamworks Web API; Steam Workshop for community cosmetics; Steam Family Library Sharing honored; refund window 14 days / 2h play (per Steam policy); OnlineSubsystemSteam adapter.
  • PSN: consumable / non-consumable IAP via PSN Commerce; PSN trophies + PS Plus integration; PS Plus Premium tier may include V2 in catalog; family-share honored; refund per Sony policy; OnlineSubsystemPSN adapter.
  • Microsoft Store (XSX + PC): IAP via Microsoft Commerce; Xbox achievements + Smart Delivery between XSX and PC; Game Pass tier may include V2; family-share via Microsoft Family; refund per MS policy; OnlineSubsystemMS adapter.
  • Nintendo eShop (Switch 2): IAP via Nintendo eShop; Nintendo Switch Online integration; cloud save; family-share via Nintendo Family; refund per Nintendo policy (digital purchases generally non-refundable); OnlineSubsystemNintendo adapter.
  • Epic Games Store: IAP via EOS Ecom; achievements via EOS Achievements; EGS overlay; OnlineSubsystemEOS adapter (also doubles as cross-platform auth/lobby backbone).
  • iOS / Android (companion app only — no IAP grants game items): App Store / Play Store IAP for companion-app subscription only; non-item flows.

PPP pricing surface

  • PPP table: @maat/finance publishes the V2 regional pricing policy used by @v2/maat-finance-ledger and mirrored in FV2MaatFinanceLedgerPolicy. Source data is regenerated quarterly from IMF + World Bank per-capita PPP data and signed via @oshun/config so clients consume the latest table without an app patch.
  • Per-region price tiers: baseline price × per-region PPP ratio rounded to the nearest platform-store-allowed tier (Steam has discrete tiers per region; Sony / MS / Nintendo similar). Per-region price ceiling capped at baseline; floor at ratio × 0.4 to prevent inversion attacks.
  • Local-currency display: client surface shows local-currency price + baseline-currency equivalent + reverse-look-up to regional purchase-power ratio (transparency).
  • Per-region price-change cadence: ratio refresh quarterly; no in-month changes (players can plan purchases against a stable price for ≥ 30 days).
  • Offline ledger cache: V2Persistence can apply a Maat-approved offline cache entry when online authority is unavailable; the entry carries a Maat decision id and reconciles on next online sync before cloud save promotion.
  • Responsible-play spend insight: @v2/lakshmi-responsible-play-spend-insight composes @lakshmi/behavioral, @lakshmi/budgeting, and @lakshmi/transactions for opt-in nudges, parental controls, self-imposed caps, and weekly summary reflection. This surface is off rollback and can only affect store confirmation or guardian approval, never match simulation.

VPN-region-shop detection

  • Detection signal: account_region (set at first purchase + verified at age-gate) vs session_region (geo-IP per-session) vs payment_region (per-IAP). Disagreement on more than one of the three for ≥ 90 days triggers a soft block on purchase.
  • Action on detection: prompt user to either confirm permanent region change (re-verify age, accept new region's content rules + ratings) or cancel purchase; never silently apply different region rules to the same account.
  • Whitelist: known business traveller patterns (consistent home region with brief secondary-region windows) do not trigger the block.
  • Honest disclosure: the V2 privacy notice discloses VPN detection as a fraud-prevention measure, not as a punitive cross-region price-arbitrage block (the latter would invite consumer-protection scrutiny in EU / UK).

Cert constraints

  • Each platform store must be the exclusive path for items that grant in-game gameplay state on that platform — coaching / donation / subscription are non-item flows and explicitly allowed under TRC.
  • CI gate Tools/check-payment-cert.py asserts no Stripe / Adyen call path can ever grant a gameplay item or cosmetic on console.
  • Steam DRM, Sony anti-tamper, Microsoft anti-tamper, Nintendo lotcheck signing all required at submission.

Balance Ops Service#

  • Public frame data tool starts as shell-native Sophia knowledge pages at /v2/wiki, /v2/glossary, and /v2/roadmap, consuming the same cited frame-data corpus that drives runtime data tables (cross-ref arch§"Data Architecture"). Raw CSV download and patch diff views remain owned by V2FrameDataPublisher.
  • Auto-matchup-chart generator in apps/v2/balance/ ingests match-result events from telemetry → produces per-fighter / per-rank matchup percentage.
  • ML balance recommender at apps/v2/ml-balance/ proposes buff/nerf candidates with confidence + telemetry justification; designer-reviewed; never auto-applied.
  • A/B framework integrated with PTB branch (cross-ref §52.8); per-A/B outcome published post-patch.

Service contract

  • gRPC service: libs/proto/v2/balance/balance.proto + ml-balance.proto.
  • Key methods: Balance.GetMatchupChart(fighter_id, rank_tier) → chart, Balance.GetFrameData(fighter_id, move_id) → frame_data, MLBalance.GetRecommendations(window, scope) → recommendations[], Balance.PublishPatch(version, changes) → ack.
  • Event-bus publishes: v2.balance.dataset.published, v2.balance.recommendation.generated, v2.balance.patch.shipped.
  • Event-bus subscribes: v2.match.ended (telemetry feed), maat.balance.dashboard.surface (@v2/maat-balance-dashboard over @maat/intelligence + @maat/dashboard + @maat/reporting), sophia.framedata.published (Sophia citation feed sourced from the @v2/sophia-release-candidate-ingestion release-candidate cook hook).
  • ML threshold: balance recommendation surfaces only when ≥ 5,000-match sample at the target rank tier, win-rate Δ ≥ 5 pp, matchup confidence ≥ 0.95. A/B duration default 14 days (PTB) before promotion.
  • SLOs: matchup-chart fetch p99 ≤ 600 ms; recommendation generation weekly cadence (Monday 04:00 UTC).
  • Owner: V2 balance team + Maat team. Cost-tier: Maat balance dashboard pipeline budget at V2/docs/cost/balance.md; there is no standalone V2 balance dashboard.

Engineering Polish Pipeline#

  • PSO pre-cache built into cooked content per platform; runtime PSO cache validation at boot.
  • Shader pre-warm at first-launch + per-cosmetic-pack load via dedicated worker thread.
  • Asset pre-load scheduled by V2Persistence load handler based on per-account session-pattern segment (§55.6).
  • Adaptive tickrate server-side switch in V2Netcode dedicated-server target; rollback paths exempt.
  • Per-session telemetry sampling randomized in V2Telemetry ingest layer; crash + cheat events always 100% sampled by event-class override.

AI Director Service#

flowchart LR SessionSignals[Session Signals · WinRate / Length / Frustration / Stomp] --> Director[AI Director State Machine] Director -- Calm --> Light[Light CPU Difficulty] Director -- Build --> Med[Medium Difficulty + Slow Climb] Director -- Climax --> Cinematic[Cinematic Max-Challenge + Hype Audio] Director -- Recovery --> Eased[Eased Difficulty] Director --> PerModeTuning[Per-Mode Director Profile] PerModeTuning --> ArcadeProfile[Arcade] PerModeTuning --> TowerProfile[Tower of Time] PerModeTuning --> TForceProfile[Tekken Force] PerModeTuning --> StoryProfile[Story] PlayerProfile[Per-Player Tendency Profile] --> AdaptiveAI[Adaptive AI] CombatTelemetry[V2 Combat Telemetry] --> ShaktiStyle[Shakti Style Classification] ShaktiStyle --> StyleMatchups[Style Matchup Hints] StyleMatchups --> Director Director -. opt-out toggle .- Player[Player Settings] Director -. EU AI Act conformity .- Compliance[EU AI Act Conformity]
  • Director never active in ranked / tournament — static rule-of-the-day only.
  • Per-player tendency profile stored alongside the save game (arch§"Persistence & Profile"); never shared cross-account.
  • EU AI Act conformity documented; per-player profile DSR honored.

Service contract

  • gRPC service: libs/proto/v2/director/ai-director.proto.
  • Key methods: Director.GetSessionState(player_id, mode) → state, Director.RecordMatchSignal(player_id, signals) → ack, Director.ApplyProfile(player_id, mode, profile) → ack.
  • Rollback-safety binding (corrected per arch§"Sister-Monorepo Integration Surface"): offline / training consumes live Psyche tendency hints freely through @v2/psyche-ai-director-hints and V2AdaptiveAI; online rollback-with-CPU defense-in-depth matches sample @psyche/behavior-prediction at match load, bake tendency-vector + seed into the deterministic match-start input stream, and run rollback-deterministic AI from then on. Live mid-match updates queue and apply at the next match-start. Never call Psyche or Director gRPC inside the rollback envelope.
  • Tunable parameters (per-mode, in apps/v2/ai-director/profiles/): epsilon ∈ [0.05, 0.30] (difficulty drift step), session-signal weights (win-rate / length / frustration / stomp; sum-to-1 vector), recovery-easing rate.
  • Event-bus publishes: v2.director.profile.applied, v2.director.signal.recorded.
  • Event-bus subscribes: psyche.behavior.prediction, v2.match.ended.
  • Unreal bridge: V2AdaptiveAI validates that live @psyche/behavior-prediction hints are non-rollback-only and that any rollback-with-CPU hint is serialized into FV2AdaptiveAIMatchStartInputVector before V2Netcode starts simulating.
  • Shakti style matchup binding: @shakti/sota-critical classifies per-player combat style as boxer, kickboxer, striker, grappler, or submission-specialist. @v2/shakti-style-classification converts the off-rollback shakti.player.style.updated output into AI Director matchup hints and V2AdaptiveAI validates the FV2AdaptiveAIShaktiStyleClassification / FV2AdaptiveAIStyleMatchupHint contract. Rollback frames cannot call Shakti; rollback-with-CPU consumers use match-start or next-match snapshots only.
  • EU AI Act: Director is Limited risk. @psyche/action-safety provides classifier transparency and opt-out, @v2/eu-ai-act-surface binds the V2 adapter, @nous/safety hosts V2/docs/ai/model-cards/adaptive-ai-director.md, and @themis/accountability owns the AI-system-of-record and conformity export. User-visible opt-out in Settings switches the player to the static CPU profile before classifier use; profile data remains per-account and DSR delete cascades to Director profile + Psyche tendency vector + Shakti style classification.
  • SLOs: profile fetch p99 ≤ 100 ms (off-rollback); signal recording fire-and-forget.
  • Owner: V2 AI team + Psyche team. Cost-tier: Psyche inference budget at V2/docs/cost/ai-director.md.

Local Multiplayer & Co-op Architecture#

flowchart LR Local[Local Input Streams] --> Multiplayer[Split-Screen Renderer] Multiplayer --> RenderBudget[Per-View Render Budget] Coop[Co-op Online] --> SessionHost[Session Host Migration ≤ 30s grace] Coop --> LootShare[Per-Player Loot Share] Crew[3v3 / 4v4 Crew Co-op] --> TeamHP[Shared Team HP] PartyMM[Party Matchmaking 2-4] --> MMRBalance[MMR-Balanced Pairing] Ghost[Ghost Co-op] --> GhostStore[Ghost Data Store]
  • Split-screen preserves 60fps target with per-view render budget; per-side accessibility independence.
  • Co-op online for Story / Tekken Force / Devil Within / Konquest: client-server net (cross-ref arch§"Client-Server Netcode") with session host migration on host disconnect.
  • Crew co-op (3v3 / 4v4) uses tag-team rollback for the 1v1 portions and client-server for crew-rotation moments.

Signature Event Mode Plugins#

Mode plugins for §93 signature events ship as UGameFeaturePlugin:

  • V2Event_Marathon — 24-hour charity-aligned event
  • V2Event_KingOfIronFist — 8-fighter elimination ladder
  • V2Event_WrestleMania — WWE PPV-style 8-match card
  • V2Event_FightWeek — UFC International Fight Week
  • V2Event_MishimaCup — SoulCalibur 16-fighter Weapon Master tournament
  • V2Event_EVO_Top8 — EVO-style Top 8 broadcast event
  • V2Event_CrewWars — Def Jam 4v4 crew elimination
  • V2Event_Horde — Boss-vs-crew asymmetric mode
  • V2Event_SpeedrunRace — 2-4 player Arcade race
  • V2Event_DeathMatch — single-round sudden death stipulation

Privacy-by-Design, DPIA & Sub-Processor Architecture#

This section covers the proactive privacy-engineering process — privacy-by-design review, Data Protection Impact Assessments, and the sub-processor registry. It is the companion to arch§"Compliance & Data-Subject-Rights Architecture", which covers the reactive data-subject-rights request flow.

flowchart LR Feature[New Feature] --> PrivacyByDesign[Privacy-by-Design Review] PrivacyByDesign --> DPIA[Data Protection Impact Assessment] DPIA --> ReleaseGate[Release Gate] ReleaseGate --> Ship[Ship] SubProcessor[New Sub-Processor] --> Notice[30-Day Notice] Notice --> Registry[Public Sub-Processor Registry] Privacy[Quarterly Privacy Review] --> DPO[Data Protection Officer] DPO --> AuditReport[Sanitized Public Summary] DSR[Access / Erasure / Portability / Rectification] --> ThemisDSR[@themis/privacy] ThemisDSR --> ResidencyDSR[@oshun/data-residency] ResidencyDSR --> DSRQueue[themis.privacy.dsr.<routeZone>] DSRQueue --> AuditPlatformDSR[@oshun/audit-platform] AuditPlatformDSR --> AuditTrail[DSR Audit Trail · retained + exportable]
  • Privacy-by-design + DPIA required on every feature touching identifiable / sensitive data.
  • Sub-processor registry at V2/legal/sub-processors.md + public view at apps/v2/web/legal/sub-processors.
  • Per-region compliance variants (cross-ref §54.2 + §80 + §94): AB 2273 / Bill 96 / Bill 25 / LGPD / Italy / Belgium / France surfacings via RegionVariant data asset.

Racing Component Architecture#

V2 ships a full racing component as a peer genre to fighting. Architecture extends existing systems:

Racing Module Split#

These modules extend the module set in arch§"Module Split".

Module Responsibility
V2Racing Race-mode registry, race-state machine, racing HUD injection, race rules / scoring / officiating
V2Vehicles Vehicle data assets (DA_Vehicle, DA_VehicleTune, DA_VehicleCustomization, DA_VehicleDamage), per-chassis archetype components, drive-train logic, engine + RPM model, tire model
V2RacePhysics Racing-specific physics (arcade-sim spectrum), off-road suspension, anti-grav hover, bike lean, hover-magnet attraction
V2RaceTracks Track / circuit / open-world racing-zone data, racing-line authoring, AI racing-line, sector splits, replay-deterministic pose recording
V2RaceModes GameInstance registry of race-mode plugins (Circuit / Sprint / Drag / Drift / Time Trial / Eliminator / Pursuit / Combat / Power-Play / Canyon Duel / Rally / Bike / Pod Racer)
V2VehicleAudio Engine notes (per-RPM bin), exhaust, turbo, tire screech, transmission whine, Doppler shifting, environmental ambience
V2VehicleVFX Tire smoke, sparks, debris, motion blur, speed lines, anti-grav engine glow, jump dust, mud splash

Racing Mode GameFeaturePlugins#

flowchart TB Racing[V2 Racing Hub] --> Career[V2RaceMode_Career] Racing --> Circuit[V2RaceMode_Circuit] Racing --> Sprint[V2RaceMode_Sprint] Racing --> Drag[V2RaceMode_Drag] Racing --> Drift[V2RaceMode_Drift] Racing --> TimeTrial[V2RaceMode_TimeTrial] Racing --> Eliminator[V2RaceMode_Eliminator] Racing --> SpeedTrap[V2RaceMode_SpeedTrap] Racing --> Pursuit[V2RaceMode_Pursuit] Racing --> Combat[V2RaceMode_Combat] Racing --> PowerPlay[V2RaceMode_PowerPlay] Racing --> CanyonDuel[V2RaceMode_CanyonDuel] Racing --> Rally[V2RaceMode_Rally] Racing --> Bike[V2RaceMode_Bike] Racing --> PodRacer[V2RaceMode_PodRacer] Racing --> OpenWorld[V2RaceMode_OpenWorld] Racing --> Crossover[V2RaceMode_FighterCrossover]

Vehicle Physics Pipeline#

  • Determinism boundary for racing. Racing modes ship on client-server with input prediction, not on the rollback envelope from arch§"Rollback Netcode". Continuous-physics solvers (hovercraft, bike-lean, drift) under cross-platform float modes are not bit-identical-deterministic across vendors. The Chaos vehicle solver runs server-authoritative and replicates to all clients; client-side prediction smooths the local pose only, never resimulates physics. The "bit-identical" promise applied to combat (arch§"Combat Authority & Determinism") does not apply to vehicle physics; the corresponding promise here is "server-consistent outcomes across all clients within one frame of replication latency."
  • Per-vehicle physics LOD is server-authoritative: the server runs the full physics solver for all vehicles regardless of client camera; clients receive full pose for vehicles inside camera frustum and interpolated pose for distant vehicles. Client physics LOD therefore never affects sync — it affects only local visual quality. There is no client-resimulated physics path for racing.
  • Per-mode physics profile: Arcade-Sim continuous dial preset per ruleset; per-vehicle handling personality baked.

Racing AI & Director#

  • Cop AI (cross-ref §103) state machine: Patrol → Alert → Pursue → Engage → Disengage → Lay-Low; per-heat-level behavior.
  • AI Driver personalities (cross-ref §110): Aggressive / Defensive / Drafter / Reckless / Conservative / Slipstream-Master / Drift- Specialist; per-fighter driving personality reflecting character.
  • Racing AI Director (cross-ref arch§"AI Director Service"): observes player race-skill level + tunes CPU race-time within tunable epsilon.

Racing Online#

Racing online extends arch§"Client-Server Netcode" and arch§"Online Services Backend".

  • Per-mode matchmaking queues with separate Racing MMR.
  • Per-mode ranked ladder (Racing + Cop separate where applicable).
  • Cross-play across PC / PS5 / XSX / Switch2 with input-method labeling (wheel vs gamepad vs KB+M).
  • Custom Room with full ruleset customization.
  • Autolog rivalry (Hot Pursuit-inspired) auto-surfacing friend challenges.
  • Per-mode max players: 12 / 4 / 8 / 8 / 12 / 6 / 2 (Circuit / Drag / Drift / Combat / Power-Play / Pursuit / Canyon Duel).

Vehicle Damage Model#

flowchart LR Collision[Vehicle Collision] --> Calculate[Damage Calc] Calculate --> CleanTier[Tier 0: Clean] Calculate --> Scuff[Tier 1: Scuffed] Calculate --> Damaged[Tier 2: Damaged] Calculate --> Wrecked[Tier 3: Wrecked] Calculate --> Totaled[Tier 4: Totaled] Wrecked --> PerfImpact[Performance Impact · sim ruleset] Totaled --> RaceRetire[Race Retire · sim] Totaled --> GetOutFight[Get-Out-and-Fight · crossover] PerImpact[Per-Tier Visual Transform] --> MaterialBlend[Material Param + Bone Deformation + Part Fall-Off]

Racing Replay#

Racing replay extends the replay system in arch§"Training, Trials, Replay Pipeline".

  • Deterministic race replay ≤ 2MB per 5-min race; replay determinism gate in CI.
  • GRID Flashback (time-rewind) supported in non-ranked modes with per-race-budget.
  • Photo Mode racing-aware with auto-suggest photo opportunities at signature moments (overtakes / crashes / Power-Play / finish-line).
  • Racing ghost data export per Time Trial / Canyon Duel.

Crossover: Racing × Fighting#

  • Shared roster + shared online backbone + shared cosmetic store + shared Battle Pass + shared currency ledger.
  • Crossover modes (cross-ref §118):
    • Fighter-as-driver in any race
    • Vehicle-on-vehicle melee combat
    • Get-Out-and-Fight transitions
    • Crossover signature events (race-then-fight chained)
  • Crossover ranked queue with separate MMR from pure fighting or pure racing.
  • Per-fighter signature vehicle unlocked via fighter Mastery + Side Story.

Vehicle Designer Service & Pit Crew Minigame#

flowchart LR Player[Player] --> Designer[Vehicle Designer] Designer --> Sculpt[Geometry Sculpting] Designer --> EngineLayout[Engine Layout Authoring] Designer --> Budget[Per-Component Balance Budget] Designer --> Paint[Paint / Decal / Vinyl] Designer --> SaveSlot[Custom Vehicle Save Slot] SaveSlot --> Code[Shareable Code] SaveSlot --> Gallery[Community Vehicle Gallery] PitCrew[Pit Crew Minigame] --> Actions[Per-Action Mini-Game] Actions --> TireChange[Tire Change] Actions --> OilChange[Oil Change] Actions --> EngineSwap[Engine Swap] Actions --> Alignment[Wheel Alignment] PitCrew --> CrewSpecialty[Per-Crew-Member Specialty Bonus] PitCrew --> CoopPit[Coach-Mode Co-op Pit]
  • Vehicle Designer asset-budget-gated; custom vehicles ranked-eligible only when in the designer-approved subset.
  • Pit Crew Minigame integrated with sim-mode racing for pit-stop strategy.
  • Per-driver telemetry dashboard in profile (cross-ref §47.3).

Service contract

  • gRPC service: libs/proto/v2/racing/vehicle-designer.proto.
  • Key methods: VehicleDesigner.SaveCustom(account_id, payload) → vehicle_id, VehicleDesigner.GenerateShareCode(vehicle_id) → code, VehicleDesigner.ImportShareCode(account_id, code) → vehicle_id, VehicleDesigner.SubmitForApproval(vehicle_id) → review_id, VehicleDesigner.GetGallery(filter) → vehicles[].
  • Asset-budget gate: per-vehicle slot has component-cost ceilings (engine tier 1-5 ≤ 100 budget pts; aero ≤ 80; tires ≤ 60; weight reduction ≤ 40). Designer rejects if sum > 240 pts.
  • Share-code grammar: Base32-encoded 12-char code over (vehicle hash + account watermark + creation-time nonce); decoded via @oshun/crypto HMAC validation. Codes never expire but can be revoked per-account via moderation.
  • Approval workflow: Themis Originality Shields verify designs against IP / brand database per V2/docs/decisions/originality-shields-launch-gate.md; manual reviewer approves designs that pass. Approved designs eligible for ranked custom-vehicle queues.
  • Event-bus publishes: v2.designer.vehicle.saved, v2.designer.vehicle.approved, v2.designer.share.imported.
  • SLOs: save p99 ≤ 600 ms; approval workflow ≤ 7 calendar days; gallery fetch p99 ≤ 400 ms.
  • Owner: V2 racing team + Themis (originality). Cost-tier: storage + approval-reviewer; ceiling at V2/docs/cost/vehicle-designer.md.

Convoy & Free-Roam Lobby#

flowchart TB Lobby[Free-Roam Lobby · 8-32 players] --> InstanceShard[Per-Region Instance Shard] Lobby --> DayNight[Synchronized Day/Night Cycle] Lobby --> Weather[Synchronized Weather] Lobby --> Convoy[Convoy Formation 2-8 players] Convoy --> SharedWaypoint[Shared Waypoint] Convoy --> CrewBonus[Crew Cosmetic Bonus] Convoy --> NPCChallenge[NPC-Initiated Challenge] Lobby --> MeetSpot[Per-District Meet-up Hot-Spot] Lobby --> CruisePhoto[Cruise Photo Session] Lobby --> ChatSystem[Open-World Chat + Radio + Horn]
  • No ranked progression in cruise mode; cosmetic + XP only.
  • Per-instance friend-priority sharding (cross-ref §8.4).

Heist Mode Architecture#

flowchart TB HeistStart[Heist Start] --> Recon[Recon Stage · stealth] Recon --> Approach[Approach Stage · drive] Approach --> Infiltration[Infiltration Stage · fight + hack] Infiltration --> Extraction[Extraction Stage · drive + pursue] Extraction --> Resolution[Resolution · cinematic] HeistRoles[Per-Crew Role] --> Hacker HeistRoles --> Wheelman HeistRoles --> Muscle HeistRoles --> Strategist Branches[3 Branch Decisions] --> AltOutcome[Alternate Outcome] HeistOnline[4-Player Online Co-op] --> HostMigration[Session Host Migration] HeistOnline --> LootShare[Per-Player Loot Share]
  • Per-quarter signature heist (cross-ref §83 live service).
  • Solo heist with AI crew at 75% reward.

Service contract

  • gRPC service: libs/proto/v2/heist/heist.proto. Heist instances are dedicated-server hosted (cross-ref arch§"Client-Server Netcode"); not inside the rollback envelope.
  • Key methods: Heist.MatchmakeCrew(account_id, role_pref) → crew_id, Heist.StartHeist(crew_id, heist_id, difficulty) → instance_id, Heist.ReportStageOutcome(instance_id, stage, outcome) → ack, Heist.SubmitFinalResult(instance_id, result) → rewards[].
  • Per-stage state machine: Recon(stealth) → Approach(drive) → Infiltration(fight+hack) → Extraction(drive+pursue) → Resolution. Each stage has explicit fail-state + retry budget; ≥ 3 failures in a stage triggers branch to alternate-outcome.
  • 3 branch decisions at fixed stage transitions; outcome data-driven from Content/Heist/<HeistId>/branches.dat.
  • Loot-share algorithm: equal split by default with per-crew Robin-Hood modifier (player who contributed most can voluntarily share more). Anti-abuse: rage-quit forfeits loot share; AFK detected via gameplay-tag inactivity.
  • AI guard behavior: state machine Patrol → Suspicious → Searching → Alerted → Combat → Lost-Sight → Patrol; behavior tree at Content/AI/HeistGuard/. Difficulty scales guard count + perception radius.
  • Stealth vs fight balance: stealth bypass grants 1.5× loot multiplier; full-combat clear grants 1.0× + bonus combat XP. Mixed outcomes scale linearly.
  • Event-bus publishes: v2.heist.started, v2.heist.stage.completed, v2.heist.completed, v2.heist.failed.
  • SLOs: crew matchmake p99 ≤ 25 s; dedicated server allocation p99 ≤ 10 s; heist completion ≥ 95% session-success (no server-side disconnects).
  • Owner: V2 modes team. Cost-tier: dedicated-server budget; ceiling at V2/docs/cost/heist.md.

Demolition Derby & Crossover Arena#

  • Demolition Derby mode plugins as V2Mode_DemolitionDerby with per-arena-type variants.
  • Vehicle-Hijack input-RPS layer integrated with Combat Racing ruleset (cross-ref §104).
  • Fight-On-Vehicle ruleset using fighting GAS system (cross-ref §2) on a moving-vehicle stage; per-vehicle Fight-On-Vehicle compatibility authored.
  • Mad-Max truck/bike chase combat plugin V2Mode_TruckChase.
  • Convoy Raid co-op plugin V2Mode_ConvoyRaid (2-4 player attacker vs AI convoy).

VR / AR Architecture#

flowchart LR Player[Player] --> Platform[Per-Platform VR Path] Platform --> PSVR2[PSVR2 · 4K-per-eye + foveated + eye tracking] Platform --> Quest[Quest 3 · async-time-warp + hand tracking] Platform --> VisionPro[Vision Pro · MR + gaze-and-pinch] Platform --> PCVR[PC VR · SteamVR / Oculus / Windows MR] Platform --> Comfort[Comfort Modes · vignette + snap-turn] Platform --> HUD[VR HUD · minimal + 3D physical UI] Platform --> Cert[Per-Platform VR Cert + Comfort Review] Cross[Cross-play VR vs non-VR] --> Matchmaking[Opt-in for non-ranked]
  • VR-specific cert per platform with epilepsy / motion-sickness compliance.
  • VR accessibility: seated mode + one-controller mode + voice-activated menu + 3D subtitle positioning.

Hardware Peripherals SDK Integration#

  • Per-vendor SDK integration layer at Source/V2Peripherals/: Logitech / Thrustmaster / Fanatec / Hori / MOZA / Cammus / Asetek SimSports / Simucube / Heusinkveld / Quadstick / PlayStation Access Controller / Xbox Adaptive Controller / Logitech Adaptive Gaming Kit.
  • Per-vendor force-feedback runtime: per-vehicle FFB profile authored + per-vehicle FFB tuning UI; Direct-Drive specific scaling to avoid overpowering force.
  • Per-controller-class ranked pool: Wheel + Pedals vs Gamepad separation in tournament mode with per-pool assists baseline.
  • First-launch calibration wizard for detected peripheral.
  • Community FFB profile gallery sharing.

Roguelike, Battle Royale, Sports Vehicle, Specialty Combat Architectures#

flowchart LR Player[Player] --> RogueHub[Roguelike Hub] RogueHub --> ProcGen[Procedural Room Graph] ProcGen --> CombatRoom[Combat Room] ProcGen --> ShrineRoom[Boon Shrine] ProcGen --> ShopRoom[Shop Room] ProcGen --> BossRoom[Cinematic Boss] BossRoom --> MetaCurrency[Meta-Currency Hub Upgrade] Player --> BR[Battle Royale] BR --> Ring[Shrinking Ring · 4-6 contraction phases] BR --> LootCrate[Loot Crate · per-rarity drops] BR --> SquadComms[Squad Voice / Ping] Player --> SportsModes[Sports Vehicle Modes] SportsModes --> Soccer[Vehicle Soccer] SportsModes --> Stunt[Stunt Mode] SportsModes --> CrashMode[Burnout Crash] SportsModes --> Trackmania[Time-Trial Precision] Player --> Specialty[Specialty Combat] Specialty --> Boxing[Punch-Out Boxing Sim] Specialty --> Bushido[Bushido One-Hit-Kill]
  • Roguelike Hub world persisted between runs; per-run procedural generation seed; per-boon synergy graph data.
  • Battle Royale uses client-server net (cross-ref arch§"Client-Server Netcode") with 100-player session sharding; squad-voice via EOS Voice; ring-state is server-authoritative and replicated to all clients consistently (within one frame of replication latency). BR sits outside the rollback envelope described in arch§"Combat Authority & Determinism"; "deterministic" never applies to BR — clients see the same state because the server is the source of truth, not because clients resimulate. Cheat detection runs server-side on the authoritative state.
  • Sports Vehicle Modes each ship as own V2Mode_VehicleSoccer / V2Mode_VehicleStunt / V2Mode_VehicleCrash / V2Mode_Trackmania GameFeaturePlugins.
  • Specialty Combat Modes as V2Mode_BoxingSim / V2Mode_BushidoBlade plugins.

Persistent World Economy & NPC Schedules#

flowchart LR Players[Player Population] -- purchases --> EconomyService[Persistent Economy Service] EconomyService -- daily rotation --> ShopInventory[Per-Shop Inventory] EconomyService -- supply-demand --> CosmeticPrices[Cosmetic Price Adjuster] NPCSchedule[NPC AI Schedule Manager] --> NPCBehavior[Per-NPC Daily Routine] NPCBehavior --> DistrictPop[Per-District Population Density] PlayerActivity[Player + NPC Criminal Activity] --> CrimeRate[Per-District Crime Rate] CrimeRate --> CopSpawn[Cop Spawn Density] CrimeRate --> Lockdown[Extreme Lockdown Trigger]
  • Economy ops dashboard (cross-ref arch§"Telemetry & Analytics") for inflation / deflation / cosmetic-price-distribution monitoring.
  • NPC schedule + crime-rate state persisted per-account world-state save; cross-platform synced.

Director Commentary & Cinematography Pipeline#

  • Per-cinematic commentary track authored as a Sequencer audio sub-track; toggleable at runtime (cross-ref §45.7 + §73.3).
  • ADR pipeline integrated with VO production (cross-ref §77.3); per-quarter session scheduled at recording studios.
  • Cinematography library assets at V2/balance/cinema/ consumed by V2Mode_CinematographyEditor plugin for authoring tooling.
  • Per-fighter origin comic content at V2/balance/comics/<fighter>/ with per-locale translation tables.
  • Story DLC seasons delivered via GameFeaturePlugin (cross-ref §52.2) with full ADR + comics + cinematics bundled per season.

Karaoke, Arcade Mini-Games, World Boss, AI Commentary, Vault#

flowchart LR Player[Player] --> Karaoke[Karaoke + Rhythm Mode] Karaoke --> RhythmGrid[Rhythm-aware Music Grid] Karaoke --> ScoreFreq[Pitch + Timing + Style Scoring] Player --> Arcade[Arcade Mini-Game Suite] Arcade --> Pinball Arcade --> AirHockey Arcade --> MiniGolf Arcade --> Darts Arcade --> Pool Arcade --> Cooking Arcade --> TekkenBowl Arcade --> PhotoTournament WorldBoss[World Boss Service] --> SharedHP[Community-Shared HP] SharedHP --> PerContribution[Per-Player Contribution Validation] PerContribution --> RewardTier[Per-Tier Reward · Bronze → Mythic] AICommentary[AI Commentary Service] --> MatchData[Per-Match Telemetry] MatchData --> PlayByPlayGen[Play-by-Play Generation · per-locale TTS] MatchData --> HighlightAI[Auto-Edited Highlight Reel] MatchData --> AnalysisScreen[Per-Match Analysis] Vault[Per-Account Vault] --> CloudStore[Cloud-Side Unlimited Cosmetic Storage] Vault --> ReplayArchive[Lifetime Replay Archive] Vault --> GhostArchive[Lifetime Ghost Data Archive] Vault --> Inheritance[Estate-Planning Inheritance]
  • Karaoke + Rhythm Mode uses MetaSounds graph with per-track BPM tagging; per-song scoring server-validated to prevent cheating.
  • Karaoke rhythm-combat bridge: @v2/karaoke-rhythm-combat-bridge composes Euterpe genesis / accompany / protect, Calliope sound-design, and Iris voice for procedural backing tracks, adaptive accompaniment, DMCA-safe streamer-mode swaps, per-fighter theme variations, and guide-voice speed/pitch directives. The bridge emits cook-time manifests for V2Mode_Karaoke, V2Mode_RhythmCombat, V2DynamicMusic, V2Audio, and the V2-owned pitch/rhythm scoring rubric; it is off rollback and rejects live rhythm-combat frame RPCs.
  • Arcade Mini-Game plugins: each ships as its own GameFeaturePlugin — V2Mode_Pinball, V2Mode_AirHockey, V2Mode_MiniGolf, V2Mode_Darts, V2Mode_Pool, V2Mode_Cooking (and V2Mode_PhotoTournament for the Photo-Mode jury-vote competition). The Subsystem Glossary enumerates the full plugin list; arcade-cabinet plugins compose with V2Mode_BattleHub for in-hub cabinet rendering and with V2Mode_QuestLog for daily achievements.
  • Maya mini-game suite bridge: @v2/maya-minigame-suite-bridge reuses Maya games projectile physics, Maya scene readiness, Maya physics readiness, and Maya input mapping for V2Mode_Pinball, V2Mode_AirHockey, V2Mode_MiniGolf, V2Mode_Darts, and V2Mode_Pool. V2 plugins keep per-game rules, scoring, cabinet art, leaderboard schema, quest hooks, and tuning. Maya combat, abilities, items, and inventory systems are explicitly excluded for the basic suite. The bridge is off rollback and rejects live mini-game frame RPCs.
  • Tekken Bowl arcade cabinet bridge: @v2/tekken-bowl-arcade-cabinet-bridge reuses Maya games ProjectilePhysicsSystem for the Tekken Bowl lane probe and Maya client MayaClientModPluginManager for ad-hoc per-cabinet plugins. The bridge emits the v2.battle-hub.arcade-cabinets.maya-games-plugins cook manifest for V2Mode_BattleHub, V2Mode_TekkenBowl, and V2ArcadeCabinetAdHocPlugin, enforces 1 Fighter Coin play gates with ambassador / pro-player free-play, requires per-cabinet leaderboards, stays off rollback, and rejects live Battle Hub frame RPCs.
  • World boss community raid bridge: @v2/world-boss-community-raid-bridge composes Themis shared HP governance and contribution-validation schema, Maat per-contribution aggregate dashboard signals, Hathor world-state spawn simulation, and Kuanyin raid defense for grief coordination. The bridge emits the v2.world-boss-community-raid-manifest, publishes only post-match server submission contracts, keeps shared HP display-only, and rejects live rollback frame RPCs.
  • Per-account vault estate bridge: @v2/per-account-vault-estate-bridge composes Lakshmi estate planning, @oshun/identity account inheritance / delegation gates, and Themis transfer audit. The bridge emits the v2.per-account-vault-estate-transfer-manifest and reciprocal v2.per-account-vault-asset-transfer schema, requires verified identity, beneficiary readiness, accepted delegation evidence, and immutable transfer audit records, stays off rollback, and rejects live gameplay frame RPCs.
  • Photo Mode tournament voting bridge: @v2/photo-mode-tournament-voting-bridge composes Kuanyin precognition moderation pre-pass with Themis ranked-choice jury voting and approval voting. The bridge emits the v2.photo-mode-tournament-voting-manifest and reciprocal v2.photo-mode-tournament-voting-profile, certifies winners for community gallery surfaces only, stays off rollback, and rejects live gameplay frame RPCs.
  • World Boss Service runs as cloud backend (cross-ref §16). World Boss sits outside the rollback envelope: per-contribution damage is computed client-side from the local match's frame-deterministic combat, then submitted to the server after the contributing match ends rather than applied inside the rollback loop. The community-shared HP state is therefore gameplay-inert during any individual match — it never affects the in-match simulation. Clients receive shared-HP updates via server push for HUD display only; the HUD is gameplay-inert per the arch§"Sovereign V2 surfaces (never delegated)" rule. Per-contribution validation runs server-side after match submission; tampered submissions are rejected without affecting any live match.
  • AI Commentary Service generates play-by-play text from match telemetry; per-locale text + TTS per-locale voice (cross-ref §43.7); EU AI Act-disclosed (cross-ref §80.4).
  • Per-account Vault stored cloud-side with daily immutable cold-storage snapshots; vault transfer on account merge audited.

World Boss Service Contract#

  • gRPC service: libs/proto/v2/world-boss/world-boss.proto.
  • Key methods: WorldBoss.GetActiveBoss(region) → boss_state, WorldBoss.SubmitContribution(account_id, match_id, damage) → ack, WorldBoss.GetLeaderboard(boss_id, region, page) → contributors[], WorldBoss.ClaimRewards(account_id, boss_id) → rewards[].
  • Determinism boundary: match-time damage submission only; no rollback-loop reads of shared HP. Damage validation runs the match's golden-replay hash through @nous/safety cheat classifier before crediting the account.
  • Event-bus publishes: v2.world-boss.spawned, v2.world-boss.defeated, v2.world-boss.contribution.submitted.
  • SLOs: contribution submit p99 ≤ 2 s; leaderboard fetch p99 ≤ 400 ms; shared-HP update push p99 ≤ 5 s end-to-end.
  • Owner: V2 modes team + Hathor (world-state). Cost-tier: ceiling at V2/docs/cost/world-boss.md.

AI Commentary Service Contract#

  • gRPC service: libs/proto/v2/ai-commentary/commentary.proto.
  • Determinism rule: off-rollback only; outputs are audio / subtitle inert (cross-ref arch§"Sovereign V2 surfaces (never delegated)" — commentary outputs never feed simulation state).
  • V2AICommentary bridge: V2/ue/Plugins/V2AICommentary/ uses @v2/iris-commentary-orchestration to call createMatchCommentaryStream on @iris/conversation-orchestration. The bridge rejects fromRollbackFrame=true, records (matchId, cueId, cueTriggerFrame, branchId), and routes only audio/subtitle output back to V2Audio.
  • Calliope commentator personas: @v2/calliope-commentator-personas validates the @calliope/persona-live launch roster at V2/ue/Content/V2/Audio/Commentary/commentator-personas.json. Each commentator has cleared @iris/voice voice clone metadata. The roster stores brand metadata, talent signoff, deterministic fallback-bank metadata, and audio/subtitle-only gameplayInert output. V2Audio consumes the roster via BuildDefaultCommentaryPersonas().
  • Psyche commentator face animation: @v2/psyche-commentary-face-animation consumes @iris/voice output metadata, then drives @psyche/avatar-lipsync viseme frames and @psyche/avatar-expressions ARKit expression curves for commentator face animation. V2Audio validates the generated /Game/V2/Audio/Commentary/FaceAnimation export as gameplay-inert and off-rollback.
  • Euterpe commentary mix ducking: @v2/euterpe-commentary-ducking reads @euterpe/accompany dynamic music context, uses @euterpe/master loudness and gain math, and exports FV2CommentaryDuckingMixSpec automation from V2.Commentary into V2.DynamicMusic. V2Audio applies the ducking as audio-mix-only, gameplay-inert, and off-rollback.
  • Key methods: Commentary.StreamCommentary(match_stream) → audio_stream, Commentary.GenerateHighlightReel(match_id) → reel_url, Commentary.GenerateAnalysis(match_id) → analysis.
  • Backed by deps§67: Anthropic Claude Sonnet 4.6 generates the play-by-play text, ElevenLabs Multilingual v2 synthesizes the TTS audio, and Isis ai-video performs the highlight-reel auto-edit.
  • Esports cost-ceiling: per-match-per-minute LLM cost capped per V2/docs/cost/ai-commentary.md; on-cap routes to @iris/conversation-providers-local.
  • EU AI Act: Limited risk; on-screen "AI commentary" badge mandatory. V2/docs/ai/model-cards/ai-commentary.md is hosted by @nous/safety, and @themis/accountability owns the conformity export through @v2/eu-ai-act-surface.
  • SLOs: real-time KO commentary lag p99 ≤ 800 ms from gameplay event to audio. V2 reserves 420 ms for Iris LLM round trip, 240 ms for persona TTS, 100 ms for Psyche lipsync/expression render, and 40 ms safety margin; on miss, it falls back to the pre-recorded bank keyed by (cueKind,ruleset,commentatorId,seed). Highlight reel generation p99 ≤ 90 s for a 5-min match.
  • Owner: V2 audio team + Iris + Calliope + Psyche + Euterpe. Cost-tier: ceiling at V2/docs/cost/ai-commentary.md.

Persistent Economy Service Contract#

  • gRPC service: libs/proto/src/oshun/v2/persistent_economy/economy.proto.
  • Key methods: Economy.GetShopInventory(district_id) → inventory, Economy.GetPriceCurve(item_id) → curve, Economy.RecordTransaction(account_id, item_id, qty, price) → ack, NPCSchedule.GetActiveSchedule(district_id, time_of_day) → schedule, CrimeRate.GetDistrictRate(district_id) → rate.
  • Tick rate: market simulation runs at 1 tick / hour (server-side); NPC schedules tick at 1 / 5min; crime-rate aggregates over 24h windows.
  • Anti-bot enforcement: @nous/safety market-bot classifier flags abnormal transaction patterns (rapid alt-account farming, pump-dump on player-driven prices); flagged accounts blocked from market.
  • Event-bus publishes: v2.economy.price.shifted, v2.economy.transaction.recorded, v2.crime.lockdown.triggered.
  • SLOs: inventory fetch p99 ≤ 400 ms; transaction p99 ≤ 800 ms; bot-detection latency ≤ 24h to first flag.
  • Owner: V2 world team + Hathor (simulation) + Maat (economy). Cost-tier: ceiling at V2/docs/cost/persistent-economy.md.

Real-World Brand & Celebrity Pipeline#

  • Per-brand sponsorship slot managed via V2/legal/sponsorships.md with a per-brand contract lifecycle (term / royalty / removal clause).
  • Per-celebrity guest character ships as V2Mode_CelebrityGuest_<id> GameFeaturePlugin (license-conditional, removable on contract end).
  • Per-venue tie-in stage ships as V2RaceTrack_<venue> plugin with per-venue licensing-conditional manifest.
  • Per-partnership ethics review workflow at V2/docs/partnerships/ with community-advisory board sign-off.

Launch Readiness#

See V2_TODOS.md § 138 "Launch Readiness". Architecture must satisfy:

  • Internal dogfood ≥ 60 days across all modes and platforms.
  • Closed beta with measurable target metrics (concurrent peak, matchmaking time, rollback frame distribution, crash rate, AC false-positive rate).
  • Cert / TRC / XR / lotcheck on every shipping platform.
  • Network stress test at 5× launch-estimated concurrency. Planning assumption (adopted 2026-06-12; revisit at beta): launch-estimated global concurrency = 100,000 CCU — sized against recent AAA fighting-game launches (SF6 and MK1 peaked at roughly 60-70k concurrent on Steam, with consoles adding a comparable share), rounded up for cross-platform day-one overlap. 5× therefore = 500,000 CCU for the stress-test gate.
  • Per-platform rollback plan + per-service rollback plan.
  • Day-one patch staged.
  • Critical-journey verification across every advertised mode.

Sister-Monorepo Integration Surface#

V2 is its own codebase with its own quality bar, but the Oshun monorepo already ships production-grade domains that cover most of V2's non-deterministic surface area. Rather than re-implement these inside apps/v2/ and V2/tools/, V2 consumes named Oshun domains across three integration channels: (a) Bellona's offline content pipeline at cook time, (b) the Oshun event bus + gRPC clients at runtime for non-deterministic warm-path services, and (c) the Oshun shell apps (apps/oshun/web, apps/oshun/mobile) for the out-of-game surface area. The deterministic combat inner loop — V2Combat, V2Gameplay, V2Input, V2Netcode rollback, save-format/replay-container, platform anti-cheat — stays V2-local without exception.

Sovereign V2 surfaces (never delegated)#

The following are non-negotiably V2-local because they sit inside the frame-deterministic, rollback-synchronized, or cert-driven envelope: hitbox / hurtbox engine, frame-data table runtime, motion-input parser + buffer, rollback engine, client-server replication for asymmetric modes, save-format binary + replay container, Sequencer cinematic timelines, per-platform IMC files, anti-cheat client driver, and the per-fighter signature animation runtime. Anything else is in scope for the integration table below.

Per-surface mapping (V2 → Oshun owner)#

V2 surface Oshun owner Integration channel
Auth + cross-progression @oshun/identity + Shared auth gRPC client (runtime)
ML balance recommender @v2/maat-balance-dashboard over @maat/intelligence + @maat/dashboard + @maat/reporting, @v2/sophia-release-candidate-ingestion over @sophia/ingestion for frame-data spreadsheet + patch-notes corpus citations, and Nous (model serving); no standalone V2 balance dashboard Event bus + Maat dashboards
AI commentary + highlight reel Iris (LLM orchestration + voice), Calliope (commentator personas), Psyche (commentator face animation), Euterpe (music ducking) + Nous (model hosting) gRPC client + Bellona/audio cook
AI Director + adaptive difficulty Psyche (behavior prediction) + Shakti (combat-sport tendency) + Nous (model serving) gRPC client (off-rollback)
Creator Suite (CAF/CAW/CAS/CAA/CAE) Yemaya (orchestration) + Isis (gen) + Aglaea (@aglaea/style-coaching + @aglaea/color-analysis) + Themis (@v2/themis-originality-shields over @themis/music-shield, @themis/visual-shield, @themis/text-shield, @themis/video-shield, @themis/design-shield) Bellona cook + companion app
Moderation (gallery, chat, replays) Kuanyin (@v2/kuanyin-first-line-moderation over @kuanyin/precognition + @kuanyin/foundation, @v2/kuanyin-mindful-friction over @kuanyin/mindful-friction, @v2/kuanyin-performer-protection over @kuanyin/performer-protection) + Themis (@v2/themis-dispute-resolution over @themis/dispute-resolution for DSA Statement of Reasons + appeals) Event bus + Iris voice hooks
Esports broadcast + bracket Uzume (broadcast / show control / overlays) + Veritas (post-match reporting) + Iris (real-time translation) Apps/oshun web + companion
Marketing site + roster microsite apps/oshun/web shell + Calliope content + Sophia lore Apps/oshun web
Companion app + public API + knowledge pages apps/oshun/mobile/v2/ + apps/oshun/web /v2/wiki, /v2/glossary, /v2/roadmap + @iris/agents (assistant) + @sophia/client (codex/frame-data RAG and citations) + @oshun/concordia-integration / @oshun/trust-safety for appeals and safety gates Apps/oshun web + mobile
Currency ledger + cosmetic store Maat (BI + compliance) + Aje (optional cosmetic NFT) + Lakshmi (@v2/lakshmi-responsible-play-spend-insight player-side spend insight, opt-in) gRPC client + store confirmation
Telemetry + balance dashboards @v2/maat-balance-dashboard composes @maat/intelligence + @maat/dashboard + @maat/reporting; @v2/sophia-release-candidate-ingestion refreshes Sophia cited frame-data context on every release-candidate cook and Nous serves model recommendations Event bus
Anti-cheat ML (smurf, win-trading, coordinated-throw, geographic-anomaly) @v2/nous-anti-cheat-classifiers over @nous/training + @nous/safety, with Kuanyin precognition for salt-cascade context only Event bus + hosted Model Card
Cinematic Story / Side Stories / Krypt Hathor (worldbuilding, dialogue trees, story graphs, lore-compiler) + Sophia (consistency) + Iris (LLM dialogue) Bellona/lore-compiler cook
NPC AI (World Tour / Tekken Force / DW) Hathor @hathor/llm-npc via V2 @v2/hathor-npc-adapter (personality, memory, world awareness, NPC-to-NPC, safety guardrails) gRPC client (off-rollback)
Mocap pipeline Aja (capture / clean / retarget / quality) + Bellona/mocap + Bellona/unreal Live Link Bellona cook
MetaHuman pipeline Bellona @bellona/metahuman (already shipped) Bellona cook
Combat Trials / Mission curriculum Shakti (combat-sports, martial-arts, form-analysis) + Metis (adaptive paths, AI tutoring) gRPC client + companion
Profile cards / titles / achievements @oshun/identity + Yemaya (asset orchestration) gRPC client (runtime)
Voice chat Iris voice + @v2/iris-accessibility over @iris/accessibility for screen-reader bridge semantics + @v2/psyche-caption-streaming over Psyche @psyche/caption-streaming for real-time match captions, spectator mode captions, and translation/captions + Kuanyin (real-time toxicity shield) Iris voice runtime
Per-feature consent surfaces @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine for telemetry, voice processing, and behavioral profiling consent receipts, redaction, and privacy-preserving fallbacks gRPC client + apps/oshun
Crew / faction / clique systems Kuanyin (@v2/kuanyin-community-harmony over @kuanyin/community-harmony) for temperature + raid defense, Themis (@v2/themis-community-governance over @themis/community) for rule votes, reputation standing, and constitutions + Aje (optional fan tokens) gRPC client + apps/oshun
Photo Mode + replay auto-edit Isis (ai-video, video-enhancement, post-production-ai) + Calliope cinema Bellona cook + apps/oshun web
Real-world brand / celebrity / NIL Themis (IP / NIL ledger) + Aje (optional on-chain rights manifest) + Kuanyin (@v2/kuanyin-performer-protection) + Aphrodite (@v2/aphrodite-licensed-likeness-safety over @aphrodite/performer-sovereignty + @aphrodite/performer-autonomy) for licensed-fighter likeness safety and revocation flow gRPC client + Bellona cook
Adult-content gore gating per region @v2/aphrodite-age-gate over @aphrodite/age-verification for runtime gore tier, adult fatalities, and region-conditional cinematics; primitive-fitness audit applies the mature-rated-fighting-game profile instead of the adult-content default; shared @oshun/region-rules cooks CN / DE / AU / NZ / KR gore variants and content cuts from Aphrodite age / consent inputs, defaulting missing region data to the China most-restrictive profile gRPC client + Bellona cook
Live-service calendar / battle pass @v2/maat-live-service-calendar over @maat/strategy for seasons, Crown Points, Pro Circuit calendar, anniversary events, charity events, and balance ramp windows + Maat finance + Calliope (seasonal artist tie-ins) + Euterpe (seasonal music drops) gRPC client + apps/oshun
Compliance (GDPR / CCPA / DSA / 2257) Shared data-residency + Maat compliance + Themis arbitration + @v2/aphrodite-age-gate over @aphrodite/age-verification + @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine + Kuanyin restorative gRPC client + audit log

Generative + procedural pipeline binding#

Bulk content that V2's previous draft left hand-authored is delegable to the following Oshun pipelines. The pattern is uniform: Isis generates → Themis verifies originality → Kuanyin moderates → Bellona cooks → V2 consumes.

  • Character textures / costume palette variants → Isis ai-texturing + Aglaea palette intelligence + Bellona/unreal cook.
  • Decals / logos / patterns for CAW gallery → Isis image-gen + @v2/themis-originality-shields + Kuanyin moderation.
  • Stage variants (weather, time-of-day, crowd dressing) → Isis 3d-scene-assembly + Hathor simulation + Maya genesis-terrain / genesis-urban + Bellona/openusd.
  • Real-world venue capture → Isis gaussian-splatting + Bellona/openusd + Bellona/unreal Nanite stage cook.
  • Music adaptive stems / per-fighter themes / seasonal drops → Euterpe genesis (music generation) + Euterpe accompany + Euterpe protect (copyright clearance).
  • Crowd voice barks / ambient VO → Iris voice + Psyche voice synthesis + Calliope persona voice bank.
  • AI commentary lipsync (the V2 Audio2Face gap) → Psyche avatar-lipsync + Psyche avatar-expressions driven by @iris/voice output + Bellona/metahuman.
  • NPC schedules + open-world dressing → Hathor simulation (economy, politics, ecology) + Hathor @hathor/llm-npc + Maya inspirations.
  • Fighter banter / win quote permutations → Hathor @hathor/llm-npc under Themis IP gates + Kuanyin safety filter.
  • Auto-edit highlight reels + thumbnails → Isis ai-video + Calliope cinema + Themis originality stamp from @v2/themis-originality-shields.
  • Frame-data balance permutations under recommender → @v2/maat-balance-dashboard (@maat/intelligence trends/anomalies, @maat/dashboard surface manifest, @maat/reporting scorecards/charts) + @v2/sophia-release-candidate-ingestion release-candidate cook citations from the frame-data spreadsheet and patch-notes corpus + Nous model serving.
  • Adaptive training drills → Metis adaptive paths + Shakti technique database + Psyche behavior modeling.
  • Animation cleanup / retarget → Aja motion-processing, neural-retargeting, motion-quality, optimization-ik.
  • Form / pose validation for player-driven fitness modes → Shakti form-analysis + Aja pose estimation.

Integration channels#

  • Channel A — Build-time content pipeline (offline). Bellona orchestrates Isis-generated assets, Aja-cleaned mocap, Hathor-authored narrative, Euterpe-generated music, and Themis-cleared rights manifests into engine-native .uasset / .umap artifacts via the existing @bellona/unreal bridge and BellonaUnrealEditor.uplugin. V2 cook consumes these.

  • Channel B — Runtime services bus (warm path, off-rollback). apps/v2/ becomes a thin adapter layer over the existing Oshun @oshun/event-bus (Redis Streams) and gRPC clients generated from libs/proto/. V2 runtime publishes events (v2.match.ended, v2.cosmetic.purchased, v2.player.reported) and subscribes to ecosystem events (hathor.dialogue.ready, hathor.world.published, isis.asset.cooked, maat.balance.recommendation). Latency-sensitive matchmaking / presence deploy regionally; the rest reuses shared infra. V2 narrative source for Story, Side Story, Krypt, Chronicles, and DJ Story lives in apps/hathor/studio-web; V2 consumes the @hathor/lore-compiler output as compiled artifact only.

  • Channel C — Out-of-game surfaces. The V2 marketing tile, companion app, public API, frame-data wiki, and esports portal become new tiles under apps/oshun/web and apps/oshun/mobile, consuming the @oshun/shell-core umbrella plus per-surface clients (@oshun/auth-client, @oshun/developer-portal, @oshun/concordia-integration, @oshun/persistence, @oshun/trust-safety, @oshun/persona-registry). The historical monolithic @oshun/sdk package does not exist; consumers import the specific surfaces they need. The web tile now lives at apps/oshun/web/src/app/v2/ and is linked from /explore; standalone Sanity / Contentful content stacks are not V2 dependencies for that route. The companion surface lives at apps/oshun/mobile/v2/ and links from mobile Explore through the shared Expo shell. Cross-product entitlements (e.g., Lilith meditation-streak unlocks a V2 card border) become trivial because account state already lives in @oshun/auth-client and related Oshun account surfaces.

  • Aje Web3 cosmetic ownership and faction governance. Optional Web3 cosmetic ownership is exposed through @v2/aje-web3-cosmetic-ownership, composing @aje/identity and @aje/nft; optional fan-token faction governance is exposed through @v2/aje-faction-governance, composing @aje/governance. Both paths require explicit opt-in and a per-platform cert-ban gate. The source of truth is V2/legal/platform-cert-bans.json; cooked-binary reachability is recorded in V2/ue/Build/PlatformCookAjeReachability.json, and check-platform-cert-bans.py fails CI if any Aje surface is reachable where bannedSurfaces[] prohibits it.

  • Racing ecosystem bridge. The V2 racing component (§96-119) consumes Galatea kinematics / whole-body control, Saraswati EV powertrain primitives, and Maya Genesis terrain / urban generation through @v2/racing-ecosystem-bridge. The bridge emits cook-time manifests for V2Vehicles, V2RacePhysics, and V2RaceTracks; it is off rollback and rejects live race-frame RPCs.

  • Lakshmi responsible-play spend insight. Player spend insight is exposed through @v2/lakshmi-responsible-play-spend-insight, composing @lakshmi/behavioral, @lakshmi/budgeting, and @lakshmi/transactions for opt-in nudges, parental controls, self-imposed caps, weekly summary reflection, and category budget velocity. It is off rollback and can only affect store confirmation, warnings, or guardian approval.

  • Kuanyin first-line moderation. Text, report, replay transcript, player name, and UGC caption checks are exposed through @v2/kuanyin-first-line-moderation, composing @kuanyin/precognition and @kuanyin/foundation as the first-line taxonomy and decision source. Two Hat and Community Sift are retired from V2 first-line text moderation; Hive AI and AWS Rekognition are retained only as media fallback providers for image or video coverage gaps. The service is off rollback and cannot influence deterministic inputs, simulation, or competitive frame outcomes.

  • Kuanyin mindful friction. Report submissions and flagged-message send attempts are exposed through @v2/kuanyin-mindful-friction, composing @kuanyin/mindful-friction pause-and-breathe overlays, Samma Vaca reflection gates, compassion nudges, timing optimization, skip policy, frequency management, and rewrite suggestions. Reports use the report_submitted trigger; flagged messages use flagged_content. The service is off rollback and can delay only report or message release timing, never deterministic inputs, simulation, or competitive frame outcomes.

  • Kuanyin community harmony. Crew, faction, and Battle Hub communities are exposed through @v2/kuanyin-community-harmony, composing @kuanyin/community-harmony temperature monitoring, tension detection, faction formation, intervention triggers, raid detection, defense mode, new-user throttles, posting restrictions, trusted-only mode, raid documentation, recovery, reassurance messaging, and platform reporting. The service is off rollback and can affect only community trust-and-safety controls, never deterministic inputs, simulation, or competitive frame outcomes.

  • Themis community governance. Crew, clique, stable, and faction governance is exposed through @v2/themis-community-governance, composing @themis/community sports-club rule committees, rule proposal voting, member reputation standing, and association-style constitution ratification for crew rules. The service is off rollback and can publish or hold social governance state, never deterministic inputs, simulation, or competitive frame outcomes.

  • Kuanyin performer protection. Licensed-fighter chat, Battle Hub chat, replay comments, creator-suite uploads, and commentary mentions are exposed through @v2/kuanyin-performer-protection, composing @kuanyin/performer-protection real-time shield, harmful-message interception, performer blindness, threat assessment, protection adjustment, emergency lockdown, boundary enforcement, shield configuration, and dashboard custom-rule builders. Every request cross-references the Themis NIL ledger stamp (@themis/likeness, rightsManifestSha256, consentChainRefs, and themis.license.revoked). The service is off rollback and can affect only likeness safety, publishing, cook, or moderation routing controls.

  • Aphrodite licensed-fighter likeness safety. Likeness surfaces, creator-suite uploads, replay exports, voice-line banks, commentary mentions, esports broadcast use, and Bellona cook run through @v2/aphrodite-licensed-likeness-safety. The bridge composes @aphrodite/performer-sovereignty for approved-use gating and @aphrodite/performer-autonomy for revocation flow, cross-references @themis/likeness, and treats themis.license.revoked as a hard cook block.

Capabilities V2 forces Oshun to build#

Integration is bidirectional. V2's requirements expose real gaps Oshun must close, each tracked as a reciprocal task in its owning DOMAINS/<name>/ spec.

  1. BellonaUnrealRuntime — runtime-shipped UE plugin (current BellonaUnrealEditor is editor-only). Owner: Bellona.
  2. Low-latency in-match commentary contract for Iris. Determinism rule: commentary outputs are audio / subtitle only and never feed simulation state, so the contract can be off-rollback because its outputs are gameplay-inert. Implemented by createMatchCommentaryStream in @iris/conversation-orchestration and consumed by @v2/iris-commentary-orchestration / V2AICommentary. Owner: Iris.
  3. AI Director behavior-hint integration with Psyche. Determinism rule: behavior hints cannot use a live mid-match channel — both peers must run identical CPU logic inside the rollback envelope. Two valid modes only: (a) offline / training consumes live Psyche tendency hints freely; (b) online rollback matches bake a tendency-vector + seed into the deterministic match-start input stream, then run rollback-deterministic AI for the match. Live mid-match Psyche updates queue and apply at the next match-start. Owner: Psyche.
  4. Shakti per-player combat-style classification for AI Director matchup tuning. @shakti/sota-critical emits boxer, kickboxer, striker, grappler, or submission-specialist classifications; V2 consumes them through @v2/shakti-style-classification and V2AdaptiveAI as off-rollback match-end or match-start snapshot hints. Owner: Shakti.
  5. Aja → Bellona/mocap → Bellona/unreal export: 60 Hz resampling and frame-snap alignment for source mocap. @bellona/mocap rejects sub-frame notify-segment boundaries, @bellona/unreal receives an editor-only Live Link handoff, and runtime Live Link plugins remain disabled. Notify-segment authoring (hit-active, armor, cancel-window) stays in UE animation montage authoring. Owner: Aja + Bellona.
  6. Themis NIL / likeness ledger schema (per-fighter / per-region / per-license-window) in a new @themis/likeness library. @themis/identity is governance-identity scope (DID, eligibility, Sybil resistance) and is the wrong home. Reciprocal tracker: docs/domains/themis/deep-dive/specifications.md § 11.8. Owner: Themis.
  7. Aphrodite licensed-fighter likeness safety and revocation flow is implemented by @aphrodite/performer-sovereignty and @aphrodite/performer-autonomy, with @v2/aphrodite-licensed-likeness-safety enforcing Bellona cook blocks until the Themis @themis/likeness package lands. Owner: Aphrodite.
  8. Maat live-service calendar shape for fighting-game live-ops (Crown Points, Pro Circuit calendar, balance ramp windows) is implemented by @maat/strategy and consumed through @v2/maat-live-service-calendar. Owner: Maat.
  9. Kuanyin rage-quit / competitive-salt cascade class, distinct from generic toxicity. Owner: Kuanyin.
  10. Shakti combat-sport ↔ fighting-game-ruleset bridge mapping real-sport biomechanics onto MK / SF / Tekken / SC / DJ ruleset frame-data is implemented by @shakti/fighting-ruleset-bridge and consumed through @v2/shakti-ruleset-bridge. The bridge emits off-rollback V2BalanceImporter CSV rows plus Sophia reference-card corpus entries, with explicit game-only cards for authored moves without real-sport antecedents. Owner: Shakti.
  11. Substrate composition for Concordia-style flows until libs/concordia/* ships — anti-cheat appeals + tournament-result disputes + crew conflicts compose @nous/cooperative-bargaining + @nous/preference-inference + @nous/agreement-search + @nous/concordia-sealed-memory in @v2/concordia-substrate; the same surface wires @iris/concordia-assistant for consent-gated appellant / arbiter dialogue scaffolding with party-isolated prompt contexts and @oshun/concordia-integration for V2 → substrate event routing, nav descriptors, and redacted telemetry registration. The high-impact moderation path also wires @kuanyin/concordia-restorative for anti-cheat appeal restorative preflight with Kuanyin safety gates. External launch exposure is gated by @oshun/config through ENABLE_V2_CONCORDIA_SUBSTRATE, default disabled until launch readiness. Owner: Nous + Iris + Oshun + Kuanyin + V2 service integration.
  12. Aje fan-token gating for crew / faction membership is composed by @v2/aje-faction-governance over @aje/governance (opt-in and per-platform cert-ban gate — Apple / PS5 / XSX / Switch2 may prohibit on-chain in-game items entirely; "opt-in" is insufficient on those platforms). Owner: Aje.
  13. Themis Originality Shields launch — @themis/music-shield, @themis/visual-shield, @themis/text-shield, @themis/video-shield, @themis/design-shield feed @v2/themis-originality-shields. V2 UGC accept-gates block unless the required shield set passes. Owner: Themis.
  14. EU AI Act conformity surface is implemented for the Adaptive AI Director: @psyche/action-safety emits classifier transparency and opt-out, @v2/eu-ai-act-surface composes the V2 contract, @nous/safety hosts the Model Card, and @themis/accountability records the AI-system-of-record. Owner: Psyche + Nous + Themis.
  15. Regional content-rule engine for per-region gore variants: shared @oshun/region-rules owns CN / DE / AU / NZ / KR SKU cook profiles and consumes Aphrodite age / consent inputs. Owner: Oshun platform + Aphrodite.

Privacy guard on cross-product entitlement#

Aphrodite is adult content; visible cross-product unlocks would create an outing risk, so Aphrodite community-status badges do not unlock V2 cosmetic / card-border / title grants by default. Cross-product entitlement claims from Aphrodite are opt-in per individual grant, with explicit out-of-context warning at grant time, and never surface implicitly via title / badge / lobby visibility. Cross-product entitlement from Lilith, Shakti, and Calliope may default-on under the @oshun/identity entitlement-claim API. The implemented @v2/cross-product-entitlement surface exposes aphroditeImplicitLobbyTitleBadgeBlocked: true so lobby, title, and badge surfaces cannot implicitly reveal Aphrodite activity.

Event-name convention#

A canonical naming convention prevents the inconsistent emission patterns that surfaced in earlier drafts (v2.match.*, v2.cosmetic.purchased, v2.cosmetic.requested, v2.dialogue.requested). All V2 events on @oshun/event-bus follow this convention:

  • Past-tense for emitted facts: v2.match.ended, v2.cosmetic.purchased, v2.player.reported, v2.mocap.captured, v2.replay.exported, v2.balance.dataset.published.
  • <noun>.requested suffix for command-style intent: v2.cosmetic.cook.requested, v2.stage.variant.requested, v2.dialogue.requested, v2.replay.export.requested. These signal a job; the worker emits a paired past-tense event on completion (v2.cosmetic.cook.completed etc.).
  • v2.<subject>.<verb-tense>: subject is the entity touched (match, cosmetic, player, mocap, dialogue, replay, stage, balance); verb-tense is unambiguous past or .requested.
  • Subscribed events from other domains keep their owner-prefixed names: hathor.dialogue.ready, isis.asset.cooked, maat.balance.recommendation, kuanyin.action.taken, themis.license.revoked, bellona.artifact.cooked, hathor.world.published.

Resolved decision ledger#

The third-pass adversarial review identified several items that needed explicit publisher / architecture decisions before agents could implement safely. They are now closed by ADRs and mirrored as checked decision tasks in V2_TODOS.md §1.6.19:

Decision Accepted default ADR
Identity reconciliation @oshun/identity is canonical; EOS is a linked platform/provider adapter. V2/docs/decisions/identity-reconciliation.md
Per-service SLOs Three tiers: A critical regional, B product services, C queued/batch AI. V2/docs/decisions/slo-tier-per-service.md
AI inference cost Text-first commentary with hard match/minute caps and local/preauthored failover. V2/docs/decisions/ai-inference-cost-model.md
Failure modes Preserve match integrity first; disable nonessential online/UGC/AI surfaces safely. V2/docs/decisions/failure-mode-matrix.md
Sovereign core Deterministic gameplay, replay input stream, save schema, and anti-cheat stay V2-local. V2/docs/decisions/sovereign-core-boundary.md
Neith integration V2 owns P1 rollback and matchmaking adapters; Neith can be evaluated after §7. V2/docs/decisions/neith-integration-scope.md
Entitlement claims Signed @oshun/identity claims via @v2/cross-product-entitlement; sensitive source products require per-grant opt-in. V2/docs/decisions/identity-entitlement-claim-api.md
Originality Shields Public UGC publishing blocks until shields are available; private/local creation can ship. V2/docs/decisions/originality-shields-launch-gate.md
Regional content rules Shared @oshun/region-rules cooks CN / DE / AU / NZ / KR gore variants and content cuts; Aphrodite supplies age / consent signals; missing regions use the China most-restrictive profile. V2/docs/decisions/regional-content-rules-owner.md
Platform cert bans V2/legal/platform-cert-bans.json is the source of truth; deny risky features by default. V2/docs/decisions/platform-cert-ban-truth-table.md
Model cards Cards live in V2/docs/ai/model-cards/; Nous owns runtime metadata, Themis owns audit export. V2/docs/decisions/model-card-hosting.md
@nous/platform Model registry, deployment manifests, routing metadata, cost caps, and eval links. V2/docs/decisions/nous-platform-scope.md
Frame-data schema V2 balance owns schema; @v2/sophia-release-candidate-ingestion sends the spreadsheet and patch-notes corpus through @sophia/ingestion on release-candidate cook. V2/docs/decisions/frame-data-spreadsheet-schema.md

Missing V2 surfaces from the per-surface mapping#

The mapping table at the top of this section listed the major V2 surfaces, but several large V2 features added in later sections of V2_features.md and V2_TODOS.md were not mapped to ecosystem owners in the first pass. Filling the gap:

V2 surface (later sections) Plausible owner(s)
Racing component (§96-119) @v2/racing-ecosystem-bridge over Galatea (kinematics + whole-body control) + Saraswati (EV powertrain) + Maya (open-world traversal + tracks) + Bellona/unreal
Karaoke + rhythm-combat fusion (§132) @v2/karaoke-rhythm-combat-bridge over Euterpe genesis + accompany + protect + Calliope sound-design + @iris/voice
Mini-game suite — pinball, air hockey, mini-golf, darts, pool (§133) @v2/maya-minigame-suite-bridge over Maya games projectile physics + Maya physics + Maya scene + Maya client input mapping; V2 plugins own game rules
Cooking simulator mini-game (§133) @v2/hestia-cooking-minigame-bridge over Hestia recipe intelligence, guided cooking, cooking education, ingredient database, and pantry sourcing
World boss + community raid (§134) @v2/world-boss-community-raid-bridge over Themis community (governance for community-shared HP rules + validation schema) + Maat intelligence (per-contribution aggregate) + Hathor simulation (world-state) + Kuanyin community-harmony (raid defense)
Per-account vault + estate planning (§137 / per-account vault) @v2/per-account-vault-estate-bridge over Lakshmi estate planning (@lakshmi/estate) + @oshun/identity account inheritance / delegation gates + Themis transparency transfer audit
Photo Mode tournament + jury voting (§133) @v2/photo-mode-tournament-voting-bridge over Themis voting (ranked-choice jury aggregation + approval voting) + Kuanyin precognition moderation pre-pass
Tekken Bowl extension + arcade cabinets in Battle Hub (§133) @v2/tekken-bowl-arcade-cabinet-bridge over Maya games ProjectilePhysicsSystem for the Tekken Bowl lane probe and Maya client ad-hoc per-cabinet plugin manifests for Battle Hub cabinet shells, coin gates, and leaderboards
AI-generated commentary + match analysis (§135) Already mapped (Iris + Calliope + Psyche)
Real-world brand / celebrity guest / venue tie-ins (§136) Already mapped (Themis NIL + Aje optional + Kuanyin performer-protection)

Each row above needs a corresponding subsection in V2_TODOS.md §1.6 before the related content cook starts. Reciprocal tasks land in the named domain's DOMAINS/<name>/specifications.md.

The racing row is closed by @v2/racing-ecosystem-bridge: Galatea owns the vehicle-as-articulated-body driver/ragdoll probe, Saraswati owns hybrid / electric powertrain modeling, Maya owns deterministic terrain/urban traversal readiness, and Bellona/Unreal remains the cooked artifact path.

The karaoke row is closed by @v2/karaoke-rhythm-combat-bridge: Euterpe genesis owns procedural backing tracks and the pitch/rhythm scoring source material, Euterpe accompany owns adaptive accompaniment analysis, Euterpe protect owns streamer-safe swap/originality checks, Calliope sound-design owns per-fighter theme variations, and Iris voice owns guide-voice speed/pitch directives. The bridge is cook-time only, off rollback, and rejects live rhythm-combat frame RPCs. The CI contract uses this exact guard phrase: rejects live rhythm-combat frame RPCs.

The mini-game suite row is closed by @v2/maya-minigame-suite-bridge: Maya games projectile physics, Maya physics readiness, Maya scene readiness, and Maya input manifests are reused for pinball, air hockey, mini-golf, darts, and pool; V2 plugins retain per-game-specific authoring and runtime rules. The bridge is cook-time only, off rollback, and rejects live mini-game frame RPCs.

The Tekken Bowl extension and Battle Hub arcade cabinet row is closed by @v2/tekken-bowl-arcade-cabinet-bridge: Maya games projectile primitives drive the Tekken Bowl 10-pin lane probe, Maya client ad-hoc plugins bind each cabinet to v2.battle-hub.arcade-cabinet, and V2 owns the cabinet shell, Fighter Coin gating, free-play exemptions, leaderboards, strike VFX, per-fighter bowling animations, themed alleys, and bowling-rank ladder. The bridge is cook-time only, off rollback, and rejects live Battle Hub frame RPCs.

The cooking simulator row is closed by @v2/hestia-cooking-minigame-bridge: Hestia recipe intelligence (@hestia/ai-ml) selects candidate recipes, @hestia/cooking provides guided step parsing, @hestia/education provides walkthrough and virtual-kitchen simulation metadata, and @hestia/ingredients plus @hestia/pantry validate ingredient sourcing. The bridge emits the hestia.recipe-as-mini-game-script cook manifest for V2Mode_Cooking, stays off rollback, and rejects live cooking frame RPCs.

Cross-References#