Fighting Game · Features

Mode Catalog, Training & Replay

A focused page within the Fighting Game Features documentation. The full map and every sibling page live in the Features hub.

8sections12 minread1diagram

On this page
stateDiagram-v2 [*] --> Browsing Browsing --> Configuring: mode ruleset roster and options selected Configuring --> Loading: load plan and content versions validate Configuring --> Refused: entitlement platform or compatibility failure Loading --> Active: deterministic session begins Active --> TrainingPaused: training tool or replay takeover TrainingPaused --> Active Active --> Completed: mode terminal condition Completed --> Recording: replay results and progression commit Recording --> Theater: compatible replay available Theater --> Active: governed replay takeover or rematch Refused --> [*]

Mode configuration, content loading, deterministic play, training control, result settlement, replay publication, and takeover are distinct states with different compatibility and recovery requirements.

This is the player-facing tour of where V2 sends you when you press Start: the arcade ladders and story campaigns, the booker sims and card-collector seasons, the bonus stages and arcade cabinets, the frame-accurate practice lab, and the replay theater that records every match as re-simulatable inputs. V2's pitch is that one fighting game can host fifty-odd distinct experiences without any of them forking the deterministic match loop — a CPU arcade run, a 30-entrant Royal Rumble, and a turn-based hex campaign all bottom out in the same simulation. The seam that makes that work is a registry of mode definitions rather than fifty hand-written game modes, and the companion architecture page, ../architecture/game-modes-training-and-replay.md, explains the registry, the load-plan builder, and the replay codec on the engine side. This page stays on the player's side of the menu: what each surface is, what you actually do in it, and which parts are shipped C++ versus a named target waiting on content. The two largest standalone modes — the Hades-style roguelike, the 100-player Battle Royale, the world boss, karaoke, and the signature live events — get their own page, ./signature-events-and-standalone-modes.md; the moment-to-moment fight these modes all run is in ./combat-systems-defense-and-game-feel.md. For the full feature scope this slots into, start at the hub: ../V2_features.md.

What ships, honestly#

The mode machinery is real, complete, and heavily tested; the content each mode points at is mostly named-but-unbuilt. UV2ModeRegistrySubsystem (V2Modes/Public/V2ModeRegistrySubsystem.h) implements registration, validation, the load-plan builder, activation/deactivation, and a seven-state lifecycle as ordinary C++ that compiles into the editor and runs headless under automation. FV2ModeCatalog::BuildDefaultModeDefinitions() builds a fixed roster of 52 canonical modes (Modes.Reserve(52), V2ModeCatalog.cpp:6287+), and the per-mode content builders carry real domain math — the arcade scoring evaluator, Royal Rumble entry scheduling, the MyGM booking sim. The data behind it is enormous: V2ModeTypes.h is a 347 KB header declaring 135 enum classes and 286 USTRUCTs. The single spec V2Tests/Automation/Modes.Module.spec.cpp carries 705 TestTrue/TestEqual/TestNotNull assertions over the registry and catalogue.

Four honest qualifications. First, the per-mode Game Feature plugins and maps do not exist on disk: MakeMode synthesizes each definition's GameFeaturePluginURL and PrimaryMapPath by convention, but a scan of V2/ue/Plugins finds only three real .uplugin files (V2AICommentary, V2AdaptiveAI, V2AssetLinter) and none named V2Mode_*. The nine tracked .uassets (eight region-variant data assets under ue/Content/V2/Regions, plus one editor frame-data inspector) are not mode content — there are no shipped fighter or stage binaries. These URLs are target artifacts the registry can plan against today and content production fills in later. Second, activation records the plan; it does not execute a GameFeature load — it loads required C++ modules for real through FModuleManager, but never calls UGameFeaturesSubsystem or opens a level. Third, the training and replay tooling specs are real, validated C++ data contracts plus a native screen class; the visual overlays they describe bind on the presentation side of the sim/present split, which is the engine-integration boundary. Fourth, a spec/code discrepancy on the replay budget: prose says "≤ 1 MB / 5-min," but the shipped FV2ReplayFileCompressionProfile pins TargetMaxBytesPerMinute = 1048576 — 1 MiB per minute. The code is the authority.

The mode catalog#

Every mode is one FV2ModeDefinition value carrying an id, a category (EV2ModeCategory, 14 values), a network model (EV2ModeNetworkModel, 7 values), a save model (EV2ModeSaveModel, 8 values), player/spectator bands, and a set of capability flags (bSupportsReplay, bSupportsRollbackDeterminism, bAvailableAtLaunch). IsValidDefinition() is a real gate, not a truthiness check — it rejects a definition with no id, no design-section reference, an inverted player range, or an invalid dependency. The catalog the player sees groups out of those 52 entries roughly like this:

  • Single-player core — three Arcade variants (Mode.Arcade.Classic, Mode.Arcade.Survivor, Mode.Arcade.GhostBattle), the 12-chapter branching Mode.Story, and the MK-lineage Tower/Tournament/Survivor family. Arcade is a classic 8-fighter ladder with a mid-ladder rival, a sub-boss, a final boss, and per-fighter ending; each fight is graded by a genuine algorithm — EvaluateArcadeFightScore (V2ModeCatalog.cpp:4778) computes a real TimeBonus = max(0, 6000 − seconds×40), a +500 flawless bonus, a min(combo×120, 2400) combo bonus, and a flat 1500 finisher bonus over a 1000 base, not a hardcoded grade.
  • Single-player expansions — the Krypt reward vault, the 100-player Battle Hub (Mode.BattleHub, ClientServerHub, 1–100 players), open-world Mode.WorldTour, the Tekken Force brawler, Devil Within, and the MK-lineage Konquest open-realm campaign.
  • Sports-entertainmentMode.WWE.Universe (a weekly-TV/PPV booker sim with a real auto-book pass), MyCAREER/MyRISE/MyGM, the UFC GOAT career, and Mode.MyFaction, a Bronze→Pink Diamond card collector. The MyGM economy carries a real SalaryCapCents = 60000000 salary-cap constraint, not a flavor string.
  • Multi-fighterMode.RoyalRumble (a 30-entrant timed-entry elimination ruleset, BattleRoyal category, up to 30 players), tag-team 2v2/3v3, and the three 100-player Battle Royale variants up to Mode.BattleRoyale.Hybrid100.
  • Strategy / street / specialtyMode.ChessKombat (LocalTurnBased hex tactics), the SoulCalibur strategy-RPG suite, Def Jam story and tag battle, and three specialty rulesets (boxing sim, Bushido Blade one-hit, MK one-hit tournament).

Requesting a mode runs it through BuildModeLoadPlan, which refuses online modes when the request disallows online services — asking for Mode.BattleHub offline never produces a plan, because its ClientServerHub model trips RequiresNetworkServices(). That single predicate is the player-visible reason a mode greys out when you're not signed in. The match-flow variants (Local Versus, Time/Score Attack, Wager, Handicap, First Blood, Best-of-N, LAN) are lightweight wrappers around a standard fight, catalogued as design intent rather than separate plugin directories.

Bonus modes & mini-games#

V2 honors the genre tradition of short, self-contained, non-canonical loops. Each has its own scoring and leaderboard; none are ranked-eligible, and all are reachable as Battle Hub arcade cabinets. The classics are here — SF II car/barrel destruction and the Tekken Force board breaker as fixed-timer object-clearing challenges, Tekken Bowl (ten-frame bowling with per-fighter signature animation), Tekken Ball (charge-a-hit-to-raise-ball-damage volleyball), MK Test Your Luck's random modifier roll, the SC Tower of Lost Souls floor-climb, Boss Rush with an HP-carry-over option, and King-of-the-Hill / Endless Versus winner-stays rotation.

The one bonus surface that lives as shipped external data is the arcade mini-game suite. V2/balance/modes/arcade-mini-game-suite.json (schema v2.modes.arcade-mini-game-suite-data.v1, section 133) enumerates eight cabinets — Pinball, Air Hockey, Mini-Golf, Darts, Pool/Billiards, Cooking, Photo Tournament, Tekken Bowl — each with its real authored parameters (Pinball's faction-themed playfields, bumpers/ramps/flippers/jackpot, multiball, controller tilt; Mini-Golf's 18- and 9-hole counts with authored hazards and a community course editor). Those eight match EV2ArcadeMiniGameSuiteKind one-for-one, and BuildDefaultArcadeMiniGameSuiteCatalog() is the validated runtime mirror. The cabinet economy is data too: coinInputCostFighterCoins: 1, with free play for ambassadors and pro players, and a per-cabinet leaderboard granting cosmetic top-N rewards. The playable cabinets themselves — the actual pinball physics — are the named-but-unbuilt content layer; the suite definition, economy, and scoring contract are real and tested. Unlocks come via Krypt chests, Tower clears, or seasonal events, and any un-earned bonus mode can be made default-available as an accessibility accommodation rather than gated behind grind.

Training tools — a first-class product surface#

Training is not a separate engine; it is the same deterministic simulation as a live match, with non-deterministic tooling layered on the presentation side — overlays attach to FV2PresentWorld, never to the integer-frame FV2SimWorld, so determinism is preserved by construction (see the combat and netcode pages). The contract for the whole workspace is one validated struct, FV2TrainingModeToolingSpec (V2UI/Public/V2UITypes.h:16614), surfaced by the native UV2TrainingToolsScreen, with BuildDefaultTrainingModeToolingSpec() (V2UIConfigAsset.cpp:6873) authoring the shipped defaults and IsValidSpec() gating them. This is real C++: HasRequiredToolCoverage() (V2UITypes.cpp:21720) fails the spec unless all eight rulesets, all ten specialized trainers, and all four range visualizers are present, and the top-level flags bFrameAccurateSimulation, bLosslessOnlineRulesParity, bReducedMotionSafe, and bGameplayInertUI are each required to pass.

Dummy programming (FV2TrainingDummyProgrammingSpec) is the heart of it: a state set (Stand / Crouch / Jump), six block modes (Auto / All / FirstHit / None / Random / AfterFirstHit), throw-tech toggle, six wakeup actions (None / Reversal / Random / GetUpAttack / RollForward / RollBack), five behavior presets (Aggressive / Defensive / ThrowHappy / ReversalOnWake / Random), three frame-step modes (one frame / N frames / until-next-hit), and an 8-slot action recorder — each slot clamped to 1–60 seconds, with Loop / Random / Sequential playback and a trigger on hit / block / whiff / neutral. There are 10 lab save slots per fighter, an always-counter-hit toggle, shareable lab-setup codes, and step-simulation-while-paused.

Display tools (FV2TrainingDisplayToolsSpec) give the hitbox/hurtbox viewer color-coded by the same vulnerability bitmask the combat resolver reads, a 12-frame hit-active region trace, and a frame-data overlay surfacing startup/active/recovery, on-hit/on-block advantage, and juggle proration. Input display runs on both sides with frame numbers, negative-edge markers, and motion-recognition highlights; the readouts add per-hit damage, the running scaling factor, numeric ruleset meters, hitstun/blockstun countdown bars, a reset-opportunity flag, and a whiff-punish window flash. Stage/position offers seven presets (Corner / MidScreen / BehindOpponent / Wallsplat / Knockdown / JumpArc / Custom), five reset triggers, and Full/Half/OnePixel/Custom HP and meter resets with reset-on-first-hit auto-loop for execution drills. Combo tools expose 0.25×/0.5×/0.75× slow-mo replay, auto-loop on success, length/damage limit indicators, best-combo trackers per character and per starter, a stored personal best, and a frame-perfect just-frame marker.

Five tooling sub-systems make training a full product surface. Replay Takeover from training saves the last match as a lab scenario preserving both fighters' state, loads your own and cloud replays, pauses at any frame, and lets you take over either side and continue the match. Practice-during-loading (Mode.Training.LoadingPractice) hosts an ad-hoc dummy space on match-load screens that auto-yields when the real match is ready. The multiplayer training lobby tolerates up to 250 ms RTT, lets a friend join as opponent or coach, and gives the coach the power to pause both clients, annotate frames, drive dummy commands, and push notes over a client-server tooling channel. The ten specialized trainers — Frame Trap Detector, Option Select Detector, Hit-Confirm, Anti-Air, Wakeup, Cross-Up, Throw Shimmy, Reaction Time, Combo Damage Optimizer, Defensive Option Chart — are each scenario-driven and performance-scored, and the four range visualizers (Throw / Move Reach / Punish / Anti-Air zone) draw from frame-accurate combat geometry. A drag-drop, profile-saved, shareable-as-code HUD layout and a CSV/JSON match-data export (every input, hit, and state transition, plus one-click community-lab import) round out the spec.

Mission & tutorial curriculum is a parallel validated surface, FV2MissionTrialCurriculumSpec (section 61, asserted by V2Tests/.../MissionTrialCurriculum.spec.cpp): a 30-minute First-Boot Tutorial that re-prompts after 3 consecutive losses and covers throw-tech and wakeup choices, eight ruleset tutorial tracks of eight lessons each whose completion unlocks that ruleset's Combat Trials, and eight fighter trial tracks totaling 160 combat trials (GetTotalCombatTrialCount() returns exactly 160 — 20 per fighter). The spec validates against the navigation graph, so a trial that points at a non-existent screen fails the build.

Replay theater, takeover & spectator#

A V2 replay is inputs plus determinism hashes, re-simulated rather than recorded as video. The file model lives in V2Input/Public/V2InputTypes.h: FV2ReplayFileHeader carries the magic V2RF, format version, replay/match/ruleset/ stage ids, build and content versions, the CosmeticManifestHash, the RngSeed, a 60 Hz tick rate, total frames, and three determinism anchors — InputStreamHash, InitialStateHash, FinalStateHash. FV2InputReplayEncoder is a real binary serializer that writes the literal V,2,R,F bytes and bails to an empty buffer on any malformed field rather than emit a corrupt file. The byte budget is computed: EstimateCompressedBytesPerMinute() does a real ceiling division against the compression profile (1 MiB/min, codec non-None), and the CI determinism gate re-plays each replay and fails on any FinalStateHash mismatch — the same hashes the anti-cheat replay-drift pipeline reuses (Netcode/GoldenReplayCorpus.spec.cpp).

On top of the file format sits a real theater. The viewer (Cinematics/ReplayViewer, ReplayFreeCamera, ReplayEntityTrackingCamera, ReplayKillCam specs) drives a FV2ReplayViewerSessionRequest with player-authored camera keyframes, free-cam, and entity-tracking cuts; highlight detection classifies moments through EV2ReplayHighlightEventKind (Kill / LowHealth / Survival / RoundEnd) and EV2ReplayHighlightMomentKind (MultiKill / ClutchPlay / NearDeathSurvival), and clip export builds an MP4 via in-engine MoviePipeline (ReplayClipExport.spec.cpp). Replay Takeover is implemented as fail-loud C++ in V2OnlineServices: UV2OnlineServicesSubsystem::CreateReplayTakeoverPracticeScenario validates the request, then requires the replay to actually exist — registered in CloudReplays or queued as a local download — and returns false with a precise reason otherwise, only then building a new practice scenario while preserving the original read-only. Sharing (FV2ReplaySharingWorkflowSpec, Online/ReplaySharing.spec.cpp) uploads to the cloud, mints HTTPS share links, downloads shared replays, opens them in-game, and requires owner consent before any upload. Spectator supports an in-match observer cap with a TO-controlled anti-spoiler delay, director-cam, and lower-thirds. The scrubber's round-start / big-hit / combo / KO / finisher chapter markers are the feature-prose intent that the shipped highlight-event vocabulary above begins to realize.

AI Director & adaptive difficulty#

Above the per-bot Adaptive AI sits a session-level Director that tunes CPU difficulty and pacing in single-player modes only — never in ranked or tournament. The engine half is real: V2AdaptiveAI is one of the three shipped .uplugins, and services/psyche-ai-director-hints is real TypeScript exporting buildV2AdaptiveAILiveHintPlan, buildV2AdaptiveAIMatchStartSnapshotPlan, and queueV2AdaptiveAIMidMatchPsycheUpdateForNextMatch, computing tendency hints over observed actions through @psyche/behavior-prediction. Its defining constant is V2_AI_DIRECTOR_HINT_ROLLBACK_POLICY = 'live-off-rollback-or-match-start-snapshot-only' — the Director's hints are consumed either off the rollback path or from a match-start snapshot, so they can never enter the deterministic frame loop. That, plus the per-skill-bucket MMR-matched CPU model, is the same rollback-safe, out-of-band discipline the world-boss damage pipeline uses. The named Calm→Build→Climax→Recovery state machine, the per-mode tuning table (Arcade, Towers, Tekken Force, Devil Within, Konquest, Def Jam, MyCAREER), the step-down-after-3-losses / step-up-after-5-perfects adaptive rules, and the EU AI Act transparency toggle are design spec in the feature monolith, and the difficulty-analytics service is the telemetry surface feeding them.

How it connects#

The mode registry is the orchestration layer almost every other V2 system hangs off. The combat, juggle, blockstring, and golden-replay systems that training and replay are built on are inventoried in ./combat-systems-defense-and-game-feel.md; the heaviest standalone modes — roguelike, Battle Royale, world boss, karaoke, specialty combat, and the signature live events that each ship as a removable UGameFeaturePlugin — are in ./signature-events-and-standalone-modes.md. For the registry machinery itself — the load-plan builder, the seven-state lifecycle, HUD injection, the replay codec internals, and the Hathor UGC-world bridge — read the architecture companion, ../architecture/game-modes-training-and-replay.md.