# Modes & Multiplayer

This is the answer to "what do I actually press play on, and who is in the room
with me?" V5 is one UE5 open-world universe split across six ruleset cells — a
1947-noir **Urban** cell, a Prohibition-era **Period** cell, an 1899
**Frontier**, a Witcher-flavoured **Hunter** cell, a hard-SF **Sci-Fi** cell,
and the cross-cell **Mind Palace** — and it advertises a catalogue as wide as
that implies: eight primary campaigns, a per-cell skirmish surface, six co-op
shapes, six PvP modes, a five-cell horde mode, training and trials, replay
theatre, and a persistent Bureau-HQ social lobby that ties the whole thing
together. The product only coheres if every one of those surfaces bottoms out in
the same orchestration seam instead of forking the engine per genre. They do. A
"mode" in V5 is a **data record plus a GameFeature plugin plus a build-target
gate**, registered in one catalog, and the families this page covers —
single-player **campaigns**, drop-in **co-op**, competitive **PvP**, **horde**,
and the **multiplayer experience that spans cells** — are differentiated not by
separate runtimes but by the per-cell module that runs after the registry hands
off. This page tours those families on the player's side of the menu: what each
is, what you do in it, what netcode posture it adopts, and which parts are
shipped, compiled, tested C++ versus content that is named-but-uncooked. For the
full mode taxonomy and the scope this slots into, start at the hub:
[../V5_features.md](../V5_features.md).

## What ships, honestly

**The mode machinery is real, compiled, and tested, and so is each family's
per-cell domain logic — but it sits one rung below a running net stack, exactly
like the netcode layer it composes.** Seven Unreal C++ modules carry this page:
`V5Modes`, `V5OnlineServices`, `V5HordeDefense`, `V5SpecOpsCoop`,
`V5UrbanOnline`, `V5FrontierOnline` and `V5SciFiPvP`. Every one compiles on the
on-box engine (each carries 13–16 `.o` objects under
`V5/ue/Intermediate/Build/Linux/x64/UnrealEditor/Development/`), and every
automation spec they declare reported `Result={Success}` in the on-box run
logged at `Saved/Logs/AutomationFull.log` (2026-06-13) — the four `V5.Modes.*`
specs, three `V5.HordeDefense.*`, four `V5.SpecOpsCoop.*`, four
`V5.UrbanOnline.*`, four `V5.FrontierOnline.*`, five `V5.SciFiPvP.*` and the
`V5.OnlineServices.*` suite including a live HTTP round-trip.

Four honest qualifications keep the rest of the page at face value.

- **`V5Modes` is a registry/gate/router, not a live transition state machine.**
  Unlike V4's `UV4ModeSubsystem::TransitionToMode`, V5 ships **no** runtime mode
  switch. `V5Modes` is a set of `UBlueprintFunctionLibrary` statics — a launch
  catalog, a GameFeature-plugin discoverer, a per-build-target ruleset gate, a
  per-cell HUD router, a Bureau-HQ lobby-state builder, an arcade-cabinet
  profile, and a pro-stadium esports catalog. It decides _which modes a build
  exposes and how their HUD/lobby is shaped_; mounting the chosen plugin into a
  live world is the GameFeatures/World-Partition layer one rung down.
- **The per-cell multiplayer modules are catalog + rule + scoring + sync-
  validation libraries that _compose_ the shared seams.** `V5UrbanOnline`,
  `V5FrontierOnline`, `V5SciFiPvP`, `V5SpecOpsCoop` and `V5HordeDefense` all
  depend on `V5Netcode` (AOI profiles, Iris config, the rollback evaluator) and
  `V5OnlineServices` (matchmaking / leaderboard / balance-ledger request
  builders). They emit config structs, deterministic scoring, and
  `FV5OnlineServiceRequest` JSON payloads — **request construction, not a live
  session.** There is a real `FHttpModule` transport behind those requests
  (`V5OnlineHttpClient.cpp:64`/`:182`, proven by
  `V5.OnlineServices.HttpTransport.LiveRoundTrip`), but no shipping pawn or
  `PlayerState` opens one of these sessions yet.
- **The content is uncooked.** Every map is a soft path —
  `/Game/V5/SciFiPvP/CapitalRaid/Year1/Maps/CR_01.CR_01`,
  `/Game/V5/UrbanOnline/Maps/DM_07`, `/Game/V5/HordeDefense/Maps/L_Horde_Urban`,
  `… /SpecOps/Maps/L_SpecOps_18` — that resolves to nothing at runtime today.
  The wave _director_ is real code; the wave's enemy _meshes_ are described, not
  baked.
- **The numbers are computed, not transcribed.** Each family carries real
  arithmetic — horde player/wave scaling curves, Capital-Raid ranked-point
  formulas, speedrun time scoring, demand/supply economy repricing, best-of-N
  resolution — that a test would fail on if it were hardcoded.

These are altitude statements, not disparagement: every line cited compiles, is
UHT-processed, and is exercised by a passing spec. V5's modes-and-multiplayer
stack is the **policy, catalog, scoring and session-shape layer**, with the wire
binding deferred to the same boundary the architecture companion draws for
`V5Netcode` itself:
[../architecture/netcode-authority-and-determinism.md](../architecture/netcode-authority-and-determinism.md).

## How a mode is selected

Everything below routes through one catalog.
`UV5_Mode_Registry::BuildLaunchCatalog`
(`V5Modes/Private/V5ModeSystems.cpp:291`) returns **29** `FV5ModeDefinition`
records (pinned at `V5ModesTests.cpp:15`), each carrying a `PluginName`, a
`Cell`, an `EV5ModeNetworkModel` (one of `OfflineSinglePlayer`,
`OnlineOpenWorld`, `Cooperative`, `CompetitivePvP`, `SocialLobby`, `EditorTool`,
`Utility`), a HUD-surface tag, a player cap, and the dedicated/listen/online
flags. The registry genuinely touches the engine:
`DiscoverEnabledGameFeaturePlugins` (`:301`) walks
`IPluginManager::Get().GetEnabledPlugins()` and keeps only plugins whose name
starts with `V5Mode_` and that reference an enabled `GameFeatures` plugin
(`IsV5GameFeaturePlugin`, `:86`).

`EnumerateEnabledGameFeaturePlugins(Enabled, Target)` (`:306`) then filters that
roster through `GateKnownMode` (`:129`) for one of six `EV5ModeBuildTarget`
values. The gate is real policy, not a passthrough: a `DedicatedServer` build
keeps only `bSupportsDedicatedServer` modes; a `ListenServer` build also admits
offline/utility rulesets; a `LANOffline` build refuses any
`bRequiresOnlineServices`, `CompetitivePvP` or `SocialLobby` mode; an
`ArcadeCabinet` build cooks only the five curated local-co-op slots **and forces
`bRequiresOnlineServices=false`** so a cabinet Spec-Ops run uses a local service
shim instead of the live backend (`:134`, `:164`). The spec drives this exactly
— a dedicated snapshot keeps 2 of 4 enabled modes and gates the client/editor
pair; the cabinet snapshot enables 5 and gates the one non-cabinet online mode.

```mermaid
flowchart TD
    HQ[Bureau HQ persistent lobby · 32 occupants] --> Pick[Player opens a cell portal or a queue group]
    Pick --> Gate{UV5_Mode_RulesetGate::EvaluateModeForTarget}
    Gate -->|editor-only / wrong build target| Hidden[mode hidden from this build]
    Gate -->|enabled| HUD[UV5_Mode_PerCellHUDRouter routes the per-cell HUD]
    HUD --> Net{EV5ModeNetworkModel}
    Net -->|OfflineSinglePlayer| LO[Campaign / Period: no socket · seeded PRNG]
    Net -->|OnlineOpenWorld| DED[Dedicated server + AOI streaming]
    Net -->|Cooperative| LSN[Listen server · 2 s host migration · AI backfill]
    Net -->|CompetitivePvP| RB[Dedicated 60 Hz · 8-frame rollback duels]
    DED --> MM["UV5_Online_MatchmakingService::BuildQueueRequest(...)"]
    LSN --> MM
    RB --> MM
    MM --> SVC[Leaderboards · balance-ledger · replays request builders]
    SVC --> HTTP[Real FHttpModule transport · LiveRoundTrip-tested]
```

Once a mode is admitted, `UV5_Mode_PerCellHUDRouter::BuildHUDRoute` (`:333`)
picks the cell's HUD widget and status labels — Urban shows wanted stars and
ammo and, for `V5Mode_Urban_Online`, a network panel; Vice Squad and Steampunk
Detective expose an investigation notebook; the Sci-Fi ship HUD exposes hull and
crew status. The shell that hosts all of this is **Bureau HQ**, a persistent
`SocialLobby` mode (cap 32). `UV5_Mode_OnlineLobby_BureauHQ::BuildLobbyState`
(`:451`) mints seven cell portals and four queue groups (open-world, co-op, PvP,
training), clamps the connected-player count, fences the Sci-Fi portal behind
healthy online services, and flips its primary action to "Retry online services"
when the backend is down — a fail-loud lobby, not a fake-connected one.

## Campaign, skirmish and signature modes

Campaigns are V5's single-player spine — eight primary arcs (Heist City, Street
Triad, Made Man, Vice Squad, Outlaw Trail, Witcher's Path, Galactic Squad, Hard
Vacuum) plus a cross-cell Mind Palace arc, each registered as an
`OfflineSinglePlayer` mode that, per the netcode model, never opens a socket and
runs on the seeded xoshiro256+ PRNG. Three carry a co-op surface (Heist City
1–4P, Outlaw Trail's 1–2P shared epilogue, Hard Vacuum's 1–6P crew); those
switch to a listen server. The per-cell campaign content lives on the cell pages
— the Sci-Fi arcs at [./scifi-galactic-squad.md](./scifi-galactic-squad.md), the
open-world cells at [./urban-crime-cell.md](./urban-crime-cell.md) and
[./frontier-cell.md](./frontier-cell.md).

**Skirmish / quick-play** is the short-session entry point: a 5–15-minute drop
that writes to a rotating skirmish save (never the campaign slot) and grants
reduced Bureau XP so it cannot be farmed. **Signature modes** are the curated
~20–30-minute showcase loop each cell ships (Heist Planner → Execution,
MotionScan Interrogation, Dead Eye + Cinematic Encounter, Witcher Sense →
Contract, Flip-and-Burn + Dialogue Wheel) — the slice press runs to feel a
cell's identity in one sitting, reachable from the cell-select shell with a
pre-built profile. **Training, trials and replay theatre** round out the solo
surface: fixed-seed trials are comparable across the leaderboard, and every PvP
match and trial run is captured as an input-stream replay re-simulated from
inputs (not video), so a replay survives a patch only within the same binary
version. The registry exposes `V5Mode_Replay`, `V5Mode_Spectator`,
`V5Mode_Training_Range` and `V5Mode_PhotoMode` as first-class entries in the
same catalog.

## Co-op across cells

Co-op is where the universe's "one engine, many genres" thesis becomes a
multiplayer room. Two cross-cell modes anchor it.

**Spec Ops** (`V5SpecOpsCoop`) is the curated cross-cell co-op ladder.
`UV5_SpecOpsCoop_Catalog::BuildMissions` (`V5SpecOpsCoopSystems.cpp:115`) builds
exactly **18** 1–4-player missions, each one spanning a primary, secondary and
tertiary cell plus the Mind Palace in its `AllowedLoadoutCells`, each
drop-in/drop-out and enemy-density-scaling, with a computed length of
`16 + (index % 4) × 3` minutes. The loadout selector offers **10** cross-cell
roles across all five gameplay cells (driver, breacher, negotiator, shadow,
marksman, tracker, sign-caster, alchemist, tech, vanguard); `BuildSelectorState`
(`:341`) enforces that **roles are unique within a squad** and that every chosen
loadout's source cell is allowed for the mission. A Year-1 stretch catalog adds
12 more missions totalling exactly 300 minutes, gated to Bureau Tier ≥5 and
locked behind `year-1-expansion`. Matchmaking is dedicated-authoritative but
also solo-and-listen-capable (`BuildMatchmakingProfile`, `:229`), and its
payload declares `"crossCellLoadouts":true` so the queue knows to assemble a
mixed-cell squad.

**Horde Defense** (`V5HordeDefense`) is one shared wave director with a per-cell
verb set. `BuildPlaylistForCell` (`V5HordeDefenseSystems.cpp:147`) builds a
**20-wave** playlist for each of the five gameplay cells — four acts of five, a
60-second vendor prep between acts, a mini-boss closing each act and a cell boss
at wave 20 (`BuildWave`, `:41`). The per-wave math is real:
`BaseEnemyCount = 6 + wave × 2`, `HealthScale = 1 + (wave−1) × 0.08`, and the
flavour is cell-specific — Urban gang waves add SWAT support and civilian-rescue
bonuses, Period mob waves trigger scripted police reinforcement at act
boundaries, Frontier predators flank, Hunter waves demand oil prep for the boss,
Sci-Fi boarding marines vent a room on a hull breach. Live-player scaling is the
headline curve, computed in `EvaluateWaveScaling` (`:195`):
`EnemyCountMultiplier = 1 + (players−1) × 0.45 + (wave−1) × 0.025` and
`HealthMultiplier = 1 + (players−1) × 0.20 + (wave−1) × 0.015`, with
`bRetuneAtNextWaveBoundary` set so a 4-player session does not trivialize when
one player drops mid-act. Every cell carries its own 1–4P matchmaking queue
(`/v5/matchmaking/horde/<cell>/queue`), and `ValidateCatalog` (`:206`) fails
loudly if any of the five playlists, twenty waves, or per-cell flavour tags is
missing.

The open-world cells add their own co-op shapes. Urban **Freeroam** is a 2–30
player dedicated-server shard streaming relevancy through the shared 300 m Urban
AOI profile; **Heist Co-op** is a 2–4 player listen-server run with role locks
and AI backfill (`V5UrbanOnlineSystems.cpp:135`). Its cross-player integrity is
a real guard: `UV5_UrbanOnline_HeistSync::ValidateCrossPlayerHeistSync` (`:540`)
refuses to commit a checkpoint unless every player is ready, every player's
checkpoint frame equals the authoritative server frame, roles are unique per
crew, and a four-player crew covers all of driver/hacker/gunner/lookout.
Frontier **Posse** is a 2–7 player dedicated session on the 500 m Frontier AOI
profile with join-in-progress; `ValidatePosseSynchronization`
(`V5FrontierOnlineSystems.cpp:381`) additionally aligns the shared objective
version, the **economy ledger version**, and per-player horse replication state
across the posse.

## PvP across cells

Competitive PvP ships as per-cell catalogs that select a netcode posture and
emit a matchmaking contract. They split cleanly along the line the netcode
companion draws: **twitch PvP rolls back, objective PvP stays
server-authoritative.**

The **Sci-Fi PvP** module (`V5SciFiPvP`) is the densest. `BuildModes`
(`V5SciFiPvPSystems.cpp:224`) defines two modes — a 1v1 corvette **Ship Duel**
and a 5v5 frigate **Capital Raid** — both flagged `bRollbackPrediction` with an
8-frame window at a 60 Hz tick, both dedicated-server. The rollback decision is
not re-implemented here: `UV5_SciFiPvP_Rollback::EvaluateShipPvPRollback`
(`:683`) delegates straight to `UV5_Net_RollbackEmulated::EvaluateRollback`, the
same span-and-window evaluator the architecture page documents (a correct
prediction costs zero rewinds; a mismatch rolls back to
`max(LastConfirmed, Mismatch)` and checks the 8-frame budget). Capital Raid is
the ranked centrepiece: a 90-day season, anti-cheat-clean gate, leaver penalty,
crossplay-opt-in requirement and six expansion maps, all validated in
`ValidateCapitalRaidExpansionCatalog` (`:541`). Its score is genuine arithmetic,
in `EvaluateMatchResult` (`:732`) — it rejects a dirty anti-cheat record, a
leaver forfeit, a binding mismatch or a loss, then computes
`RankedPoints = max(1, 1200 + scoreDifferential × 100 + (cores × 200 + breaches × 75) + clamp(duration, 0, 180) × 2)`.
A Year-1 **Pro Circuit Season 2** layers a 16-seed double-elimination bracket of
exactly 30 match slots (15 upper, 14 lower, 1 grand final, `:671`) over eight
esports-only maps, with workshop content disabled and an observer delay required
— the integrity posture an esports broadcast needs.

The other cells follow the same shape. **Urban** ships a 4v4 Deathmatch and a
4v4 Heist-vs-Heist; `MakeMode` (`V5UrbanOnlineSystems.cpp:25`) pins the
deathmatch modes to a 60 Hz tick and the open-world modes to 30 Hz, the 16
deathmatch arenas each carry `bSupportsEightFrameRollback`, and the standard
six-phase lifecycle (`Lobby → Loading → Warmup → Live → Scoreboard → PostMatch`)
is asserted in `ValidateOnlineCatalog`. **Frontier** ships an 8-player
free-for-all Showdown (Dead-Eye disabled, lasso and horse-chase enabled) and a
4v4 Posse War; the Posse War Year-1 tournament runs a
ranked-ladder-into-weekly-finals bracket cutting to 32 teams, best-of-five, and
scores each match as
`max(1, 1000 + roundDifferential × 125 + (captures × 30 + eliminations × 20) + clamp(time, 0, 180) × 2)`
(`V5FrontierOnlineSystems.cpp:467`). Across all of these, every score and queue
flows through the shared `V5OnlineServices` request builders, and every ranked
profile carries `bCrossplayOptInRequired` — matching the one documented
crossplay opt-out in `crossplay-progression-policy.json`, where the
high-precision Sci-Fi spaceship PvP is allowed to fence console players off for
input-parity fairness.

## The multiplayer experience, end to end

Pulled together, a cross-cell multiplayer session is a chain of pure functions
over plain data, each one tested. From Bureau HQ a player opens a queue; the
cell module builds an `FV5OnlineServiceRequest` via
`UV5_Online_MatchmakingService::BuildQueueRequest` (skill rating, ping, region,
cell, mode), the netcode module hands it the right AOI profile and Iris/tick
config, the session adopts one of four postures (offline-seeded, dedicated +
AOI, listen + 2-second host migration + AI backfill, or dedicated 60 Hz with
8-frame rollback duels), and on completion the result is graded and written back
through `UV5_Online_LeaderboardsService::BuildScoreWriteRequest` — or, for the
open-world economies, through the balance-ledger client that reprices each
district/region's goods by a clamped demand/supply ratio. Speedrun and trial
surfaces close the same loop: `EvaluateRouteScore`
(`V5UrbanOnlineSystems.cpp:581`) rejects an anti-cheat-dirty run, a >30-second
penalty on a clean-run route, or a time outside the 1.5× target window, then
scores the survivor as `round((targetTime / adjustedTime) × 100000)`.

What makes this a _universe_ and not five bolted-together games is that the seam
is shared all the way down: the same registry gates every mode, the same AOI and
rollback library serves every cell, the same online-services contract carries
every queue and score, and the same Bureau HQ lobby is the front door. The
honest boundary holds throughout — these are the catalogs, rules, scoring and
session _shapes_; the live wire that binds them into a running shard is the
deferred layer the netcode companion describes. The backend that those request
builders speak to — auth (real HS256 JWT verification and RFC 7636 PKCE),
friends, parties, matchmaking, leaderboards, replays, anti-cheat — and its real
`FHttpModule` transport are detailed in the online-services page.

## Where this connects

The mode registry is the orchestration layer almost everything here hangs off,
and it is also the seam to the rest of V5. The dedicated-server backbone,
matchmaking service, leaderboards, anti-cheat, crossplay/cross-progression
policy and the live HTTP transport that ranked PvP, co-op matchmaking and replay
storage read from are covered in
[./online-services-and-infrastructure.md](./online-services-and-infrastructure.md).
The Mission Editor, Heist Author, Case Author and Workshop — the editor-only
modes the ruleset gate hides outside editor builds, and the player-made content
the co-op and signature surfaces consume — are in
[./content-creator-tools-and-workshop.md](./content-creator-tools-and-workshop.md).
The per-cell netcode postures, server authority, lag compensation, 8-frame
rollback evaluator and the seeded determinism backbone every mode above selects
are the architecture companion,
[../architecture/netcode-authority-and-determinism.md](../architecture/netcode-authority-and-determinism.md).
The orientation hub for the whole feature set is
[../V5_features.md](../V5_features.md).

## Related

- The feature hub: [../V5_features.md](../V5_features.md)
- [Online Services & Infrastructure](./online-services-and-infrastructure.md) —
  the dedicated-server backbone, matchmaking, leaderboards, anti-cheat,
  crossplay and the real HTTP transport the queues and scores ride
- [Content Creator Tools & Workshop](./content-creator-tools-and-workshop.md) —
  the editor-only modes and the player-made content co-op and signature surfaces
  consume
- Architecture companion:
  [../architecture/netcode-authority-and-determinism.md](../architecture/netcode-authority-and-determinism.md)
  — per-cell netcode, server authority, lag compensation, rollback and
  determinism
- [Sci-Fi Galactic-Squad cell](./scifi-galactic-squad.md),
  [Urban Crime cell](./urban-crime-cell.md), [Frontier cell](./frontier-cell.md)
  — the campaigns and gunplay behind the modes
