# Platforms, Operations & Hardware

V4 ships six tactical-action cells under one account, one operator roster, and
one progression record across **nine day-one platforms** — Windows, PS5, PS5
Pro, Xbox Series X/S, Switch 2, macOS Apple Silicon, Steam Deck, iPad Pro, and
Android tablet. The cluster on this page is what turns that ambition into
something a platform holder will certify, an ops team can run at launch
concurrency, and a player can drive with whatever controller, wheel, or headset
is plugged in. It is also the cluster where V4's central honesty convention
bites hardest: the repository is **text-only**, so every cooked Unreal asset
exists as a `.v4asset.json` stand-in (~891 today), and a manifest that
_declares_ a cert pass or a 4K/60 frame budget cannot be cooked, profiled, or
booted from this repo. So the page draws a hard line. Some of this surface is
**real, tested Unreal C++** (the split-screen / hot-seat / LAN policy library,
the telemetry subsystem) and some is **machine-checked gates over JSON** (the
performance and PSO budgets); the rest — cert checklists, peripheral feedback
curves, XR variants, store mappings — is authored intent in manifests and
data-asset stand-ins, labeled as such wherever it appears. The section hub is
[../V4_features.md](../V4_features.md).

## What ships, honestly

The boundary between "implemented and tested" and "declared intent" runs cleanly
through this cluster, and it is worth stating up front so nothing below is
oversold.

- **Local multiplayer is real, validated C++.**
  `UV4LocalMultiplayerPolicyLibrary`
  (`V4/ue/Source/V4Modes/Private/V4LocalMultiplayer.cpp`, 319 lines) builds the
  launch split-screen / hot-seat / LAN policy matrix, computes viewport layouts
  and hot-seat turn orders, and self-validates — backed by the
  `V4.Modes.LocalMultiplayer.SplitHotSeatLAN` automation spec
  (`V4/ue/Source/V4Tests/Private/V4ModesTests/ModeSpec.cpp`).
- **Telemetry is a real C++ subsystem over a real schema.**
  `UV4TelemetrySubsystem` (`V4/ue/Source/V4Telemetry/`) is a substantive
  `UGameInstanceSubsystem` with schema validation, batching, region opt-out,
  certificate pinning, and an offline queue; it feeds the real ClickHouse DDL at
  `V4/ops/telemetry/clickhouse/schema.sql`.
- **Performance budgets are machine-checked, not decorative.**
  `apps/v4/scripts/src/v4-performance-budget-check.mjs` validates the
  per-platform memory and frame budgets (`V4/perf/performance-budgets.json`),
  the PSO delta report, and the shader-warm coverage manifest, and **fails the
  build** on a missing required PSO entry.
- **Peripheral tuning is data, not backing C++.** The DualSense trigger curves,
  Xbox impulse patterns, wheel calibration, HOTAS, adaptive-controller, and
  eye-tracking profiles live as JSON manifests (`V4/peripherals/`) mirrored to
  `DA_*` data-asset stand-ins, owned by the `V4Input` module. The input _router_
  is real C++; the _feedback profiles_ are authored data and are labeled as
  such.
- **Cert, store, and XR are declared intent.** `V4/release/certification.json`,
  `V4/store/platform-store-features.json`, and the `V4/xr/` variant manifests
  are honest checklist and entitlement declarations. A real TRC/XR/Lotcheck pass
  needs a cooked, bootable build that the stand-in repo cannot produce — the
  same caveat the architecture companion
  [../architecture/security-compliance-launch.md](../architecture/security-compliance-launch.md)
  states in full.

## Platform support, performance & certification

### Nine platforms, one mode catalogue

V4's platform parity rule is encoded, not promised:
`V4/release/platform-mode-availability.json` lists all nine platforms,
`"allAdvertisedModesOnAllPlatforms": true`, an empty `exceptions` array, and a
`platformExclusiveContentPolicy` of `CosmeticsOnly` over the full 37-entry
`advertisedModeIds` list — so no cell, mode, or mission is withheld behind a
platform, and the only thing a platform deal can buy is a skin. The one
principled exception is hardware reality, not policy: **Switch 2 builds strip
`V4Mode_Tactical_CoDWarzone` and `V4Mode_Tactical_R6Modern`** for memory,
capping tactical PvP at 8v8 with no 100-player battle royale, as the features
source and the cook strip-profiles record.

Reference targets scale with the silicon. PC's reference is 1440p/60 on an RTX
4070 + i7-13700K (ultra: 4K/60 on a 4090); PS5 and Xbox Series X hold 4K
(dynamic)/60 in Performance mode and 4K/30 in Quality with full Lumen; PS5 Pro
adds PSSR upscaling; Series S targets 1080p/60 with reduced Lumen; Switch 2 runs
1080p docked/30 with FSR; macOS/iPad use MetalFX; and Steam Deck / Linux is
Proton-verified at 800p/60.

### Performance budgets and engineering polish

The budgets behind those targets are real data with a real gate.
`V4/perf/performance-budgets.json` carries per-platform memory and frame budgets
— PS5 Performance, for example, pins a 6144 MB game budget, a 5120 MB streaming
pool, and an 8192 MB active-GPU target while holding every cell at 60 fps /
16.67 ms in 4K dynamic — and `v4-performance-budget-check.mjs` validates the
matrix, including the Switch 2, Series S, and Steam Deck blocks. Engineering
polish is gated the same way: `V4/perf/engineering-polish.json` declares a PSO
regression policy with a `missingPsoEntryBudget` of **0** and a
`maxShaderCompileStallMs` of **0.5**, and a shader pre-warm telemetry target of
**≥ 98 %** idle-warm coverage that the manifest records as met on PS5
Performance (1661 of 1680 permutations, 98.87 %). The PSO delta report
(`V4/perf/pso-delta-report.json`) is sourced from "Unreal Insights shader-stall
capture + ShaderPipelineCache CSV", tracks every required launch and patch
cache, and the gate asserts `missingRequiredPsoEntries` is empty — a missing
required PSO entry fails the build. (The cold-load p95 targets — PS5/XSX ≤ 9 s,
Series S 14 s, Switch 2 22 s, Steam Deck 12 s — are documented budget intent in
the features source; the budget JSON profiled here covers memory and frame
time.)

### Certification, build integrity & store

Certification is a manifest declaration of checklist coverage, not a profiled
pass. `V4/release/certification.json` enumerates nine platform entries — Sony
TRC (PS5, PS5 Pro), Microsoft XR, Nintendo Lotcheck, Steam Deck Verified,
Windows/Steam, macOS notarization, and the store reviews — each with a `status`
of `passed`/`verified`, `blockerCount: 0`, and four-plus evidence tokens
(`boot_to_interactive`, `save_data_lifecycle`, `pssr_scaling_path`,
`notarized_app_bundle`, and so on). The companion `v4-cert-check` gate counts a
platform only when its status is `passed`/`verified` with ≥ 4 evidence items —
but the honest caveat applies in full: these attest cert _intent and coverage_,
because a real pass needs a cooked build.

The build pipeline behind them is concrete: `V4/release/build-cook-patch.json`
defines a Jenkins PC buildfarm (checkout → preflight → restore DDC → build
editor → cook eight platforms → package → archive symbols → publish), a GitHub
Actions surface that lints/tests `@v4/scripts`, runs Nx-affected, and executes
`cargo test --workspace` over the Rust services, and a BuildGraph cook driver
with an 8-hour cook budget. DRM is platform-entitlement-only — Steam/EOS DRM and
per-store licenses, **no Denuvo** (`V4/release/drm-code-signing.json`), an
explicit trust and performance decision. Per-platform store integration is
authored in `V4/store/platform-store-features.json`: a single canonical
six-achievement design maps onto PSN trophies (a 1230-point budget with a
Platinum), Xbox gamerscore, Steam, Nintendo, Apple Game Center, and Google Play
Games, with a `serverAuthoritative`, `idempotentUnlocks`, `offlineQueue`,
`backfillOnAccountLink` sync policy. Pricing is PPP-adjusted per region and
published transparently at `/store/pricing`.

## Operations: launch, live-ops & studio

### The launch gate's operational inputs

The §94 launch readiness gate (detailed in the architecture companion) reads its
operational evidence from this directory. The matchmaking soak
(`V4/ops/launch/matchmaking-soak-5x.json`) simulates **200,000 players at 5×
launch concurrency** across all six cells in NA and EU and records a p99 of
**34.2 s under the 35 s bar**. The Open Beta crash dashboard
(`V4/ops/launch/open-beta-crash-dedup-dashboard.json`) reports **0.079 %**
deduped crash rate over 18.4 M Sentry release-health sessions, under the 0.1 %
threshold. The 24/7 launch support rota (`V4/ops/launch/watchtower-rota.json`)
staffs three regional shifts (AMER/EMEA/APAC, 18 agents each) for 30 days with a
**60-minute ranked-blocking hotfix turnaround** and dedicated escalation queues
for ranked-blocking, platform-cert, payments, and safety. Hotfixes themselves
ride data tables the patch service can push live within 30 minutes with no
client redownload, and the day-one patch is capped at ≤ 6 GB carrying the launch
anti-cheat and the closed-beta balance pass.

### The telemetry spine

V4's analytics are a real subsystem, not a wrapper. `UV4TelemetrySubsystem`
(`V4/ue/Source/V4Telemetry/`) builds a typed event schema, validates each event
against it, batches with a 32-event default and time/buffer flush triggers,
serializes to JSON, and persists an offline queue to disk for retry when the
client reconnects. Two privacy-first seams are built in: `SetRegionOptOut` /
`IsRegionOptedOut` gate a region's events behind a named regulation, and
`IsCertificatePinAccepted` pins the ingest endpoint's certificate. Events land
in the real ClickHouse DDL at `V4/ops/telemetry/clickhouse/schema.sql` — a
`MergeTree` events table ordered by `(event_name, cell, mode, region, ts)` with
a **395-day TTL**, a dead-letter table, and a `balance_metrics` materialized
view — and surface through the Grafana dashboards under
`V4/ops/telemetry/grafana/` (region health, mode funnel, cell balance, and the
Hitman seasonal world-state board). The full observability spine is owned by
[../architecture/telemetry-observability-performance.md](../architecture/telemetry-observability-performance.md).

### Studio operations & wellness

The production and wellness program is documented obligation backed by data
assets, and V4 treats it as launch-blocking.
`V4/ops/studio/studio-ops-baseline.json` locks the mocap schedule (a
10-shoot-day principal stage with 34 operators, requiring a union contract,
stunt coordinator, on-set medic, and stop-work authority), the 12-language VO
plan (Cinedubs cinematic partner, four recording waves from table-read to
pickups), and the composer cadence (five milestones, four approval gates). Its
wellness block declares a **no-mandatory-crunch** policy (40 h standard / 45 h
max planned, written approval for overtime, 1.5× comp time, an anonymous
reporting hotline), mental-health resources (EAP, a $750 remote-counselling
stipend, eight confidential sessions/year), a DEI baseline, and a seven-scope
sensitivity-reading manifest covering operators, historical civilizations,
Hitman locales, Wukong cultural representation, and trauma-informed tone.
`post-launch-wellness-operations.json` extends this into year one with a
**quarterly external crunch audit** by an independent reviewer against
timekeeping and on-call data, a published public policy URL, and a 30-day
corrective-action deadline.

## Hardware, peripherals & XR

### Local multiplayer: split-screen, hot-seat & LAN

This is the load-bearing real code of the cluster.
`UV4LocalMultiplayerPolicyLibrary` builds a launch policy matrix entirely in
C++: 2-player split for Tactical Co-op, Wukong Two-Tail, and Contra; 4-player
split for RTS Team and Spec Ops; a `RTST.HotSeat` policy using shared-keyboard
alternation; and an 8-player `RTS.LANSkirmish` policy. Each split policy carries
its own dynamic- resolution scale (Contra 0.78, Tactical 0.72, RTS Team 0.66) so
the renderer drops a band under split to hold the frame budget, and
`BuildViewportLayout` returns exact normalized viewport rects for 1/2/4 players
(vertical or horizontal two-player, grid four-player). The validator is strict
and self-checking: `ValidateLaunchPolicies` requires the five split caps,
per-viewport HUD, per-player profiles, a split dynamic-resolution scale `> 0`
and `≤ 0.8`, **Contra's screen-edge tethering**, the hot-seat's single-keyboard
alternation (turns assigned to `Keyboard.Primary` exclusively via
`BuildHotSeatTurnOrder`), and the LAN session's backend-free deterministic
lockstep at **25 Hz on broadcast port 7777**. The
`V4.Modes.LocalMultiplayer.SplitHotSeatLAN` spec exercises all of it — that
Tactical Co-op starts 2P on console without a backend but rejects a third
player, that 2P split picks the vertical layout, that 4P uses the grid, and that
hot-seat cycles turns back to player one.

```mermaid
flowchart TB
  subgraph real["Real, tested C++ / gated JSON"]
    LMP["UV4LocalMultiplayerPolicyLibrary<br/>split · hot-seat · LAN<br/>(V4Modes, 319 lines + spec)"]
    TEL["UV4TelemetrySubsystem<br/>schema · batch · opt-out · cert-pin"]
    PERF["v4-performance-budget-check.mjs<br/>memory · frame · PSO · shader-warm"]
  end
  subgraph data["Authored manifests + .v4asset.json stand-ins"]
    PERIPH["V4/peripherals/*.json<br/>DualSense · Xbox impulse · wheel · HOTAS<br/>· adaptive · eye-tracking"]
    XR["V4/xr/*.json<br/>OpenXR · PSVR2 · Quest3 · Vision Pro<br/>· cross-buy"]
    CERT["certification · store · platform-mode<br/>9-platform parity (CosmeticsOnly)"]
  end
  LMP --> CLIENT["V4 client"]
  PERIPH -->|DA_HardwarePeripheralDeepProfiles| CLIENT
  XR -->|DA_XRLaunchVariants| CLIENT
  TEL --> CH["ClickHouse v4_telemetry<br/>(395-day TTL) → Grafana"]
  PERF --> GATE["build / launch gate"]
  CERT --> GATE
```

### Controller feedback & accessibility peripherals

The peripheral program is broad, and it is authored data rather than backing C++
— the `V4Input` module owns input routing, the cover-stick modifier, and the
motion parser, but the feedback _profiles_ live in
`V4/peripherals/hardware-peripherals.json` and `hardware-peripherals-deep.json`,
mirrored to `DA_*` data-asset stand-ins. On DualSense, per-weapon adaptive
triggers give a high-caliber weapon a heavy 0.82- resistance pull and burst
weapons a two-stage pull, and `DA_DualSenseWeaponTriggerCurves` generates **one
trigger curve per weapon row (110 weapons)** plus cell-specific haptics — a 45
Hz Stealth suspicion heartbeat, a 220 Hz ARPG parry-success tick, a 62 Hz RTS
distant-battle bed. Xbox Series impulse triggers mirror the set with 110
per-weapon patterns. Seven gamepad presets ship with glyph sets (Xbox, DualShock
4, DualSense, Switch Pro, 8BitDo, Steam Controller, Steam Deck), all remappable.
The HOTAS profile binds the helo door-gunner setpiece (Little Bird, AC-130, Huey
segments); the racing-wheel manifest carries five real brand calibration
profiles (Logitech G923/G29, Thrustmaster T300RS, Fanatec CSL DD, Moza R5) with
per-brand rotation, deadzone, and force-feedback gain plus a settings-exposed
force-feedback curve editor. Accessibility peripherals are first-class:
`DA_AdaptiveControllerPresets` supplies Xbox Adaptive Controller presets
including a single-stick tactical variant with auto-strafe assist and
switch-scanning dwell, and `DA_EyeTrackingInputAssist` wires Tobii (120 Hz) and
PS5 Pro camera eye-tracking for a stick-gated camera-aim nudge and gaze-based UI
focus. (Vehicle-side impulse feedback is the one piece that is real C++:
`V4Vehicles` carries an `Impulse` field on its vehicle types.)

### VR & AR variants

XR is curated and entitlement-shared, authored in `V4/xr/launch-xr-support.json`
and `extended-xr-support.json` over the OpenXR, OpenXR hand-tracking and
eye-tracker, ARKit, and Apple Vision engine plugins. Three launch VR variants
target PSVR2 and Quest 3 at 90 fps — **Splinter Cell VR** (curated linear
stealth), the **R6 VR Training Range** (weapon handling only), and a **Wukong VR
Boss Room** (a single arena) — each with its own comfort options (vignette,
snap-turn, seated mode, dominant-hand, plus boss-scale comfort for Wukong) and
locomotion choices. Apple Vision Pro gets a room-anchored, world-scale-locked
**Contra AR overlay** at launch, and the extended (P3) manifest adds the full
Splinter Cell VR campaign, the full 30-boss Wukong roster, and a Vision Pro
Tactical Planning Table. Cross-buy is the key promise and it is data-encoded:
`grantPolicy: "OwnFlatScreenGrantsXrAndAr"` at `additionalCostUsdCents: 0`,
requiring a linked primary account, with progression shared with the flat-screen
save — so owning V4 grants every VR and AR variant free and your campaign
carries across.

## Where this connects

- **Sideways:**
  [Live Service, Progression & Vault](./live-service-progression-and-vault.md)
  owns the account, entitlement, and store surfaces the cross-buy grants and
  region pricing resolve against;
  [Trust, Safety & Compliance](./trust-safety-and-compliance.md) owns the
  parental-controls, anti-cheat, age-gating, and moderation surface this page's
  telemetry opt-out and store gating feed.
- **Architecture companions:**
  [Security, Compliance & Launch](../architecture/security-compliance-launch.md)
  is the home of the §94 launch readiness gate this page supplies soak, crash,
  and watchtower evidence to, and the source of the text-only `.v4asset.json`
  caveat;
  [Telemetry, Observability & Performance](../architecture/telemetry-observability-performance.md)
  owns the full analytics and performance spine the telemetry subsystem and
  budget gates plug into.
- The section hub: [../V4_features.md](../V4_features.md).
