Tactical Action · Features

Platforms, Operations & Hardware

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

5sections11 minread1diagram

On this page

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.

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 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.

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.

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#