V5 is one UE5 open-world narrative universe split across six ruleset cells —
1947-noir Urban, Prohibition-era Period, an 1899 Frontier, a
Witcher-flavoured Hunter, a hard-SF Sci-Fi, and the cross-cell Mind
Palace — shipped age-rated, voiced, online, and cross-play across nine day-one
platforms. At that scale, accessibility, localization, and legal compliance stop
being a backlog and become a launch precondition: a platform holder bounces
a build over a missing accessibility matrix, a regulator fines over a deletion
that fails to cascade or a moderation action with no statement of reasons, a
market refuses a build whose gore is uncut for its rating board, and a deaf or
colour-blind player who cannot follow a deduction is a player who refunds. This
page is the surface where those three meet, and it is unusually concrete because
V5 makes one deliberate architectural choice: it reimplements the model rather
than composing the shared one. A repository-wide search finds zero V5
imports of @oshun/*, @themis/*, or @aphrodite/* — the cross-product locale
catalog @oshun/i18n and the shared privacy packages are real and used by the
Oshun app shells, but they are not this product's root. Accessibility,
localization, residency, data-subject rights, age-gating, DSA moderation, and
the region-rating matrix are authored as three first-party Unreal C++ modules —
V5Accessibility, V5Localization, V5Compliance — over JSON policy manifests
under V5/legal/ and V5/loc/. The features hub is
../V5_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.
- Three real, domain-specific UE C++ modules.
V5/ue/Source/V5Accessibility/Private/V5AccessibilitySystems.cpp(392 lines),V5Compliance/.../V5ComplianceSystems.cpp(282 lines), andV5Localization/.../V5LocalizationSystems.cpp(486 lines) areUBlueprintFunctionLibrarybuilders that author typed, persistable launch profiles — not policy stubs. All three are registered asRuntimemodules inV5/ue/V5.uproject, depend only onCore/CoreUObject/Engine/V5Core, and have compiled object files present underV5/ue/Intermediate/Build/Linux/x64/UnrealEditor/Development/(systems, gen, and test objects) from the on-box UnrealEngine-5.5.4 build. - The specs assert computed values, not truthiness. Thirteen automation
tests across the three modules pin real arithmetic — a 30-day DSAR resolving
to
DueUnixSeconds == 2593000, a 72-hour EU moderation SLA, a photosensitivity clamp of≤ 3flashes, a240-route voice-chat translation matrix, font-scale clamps1.7 → 1.6— and would fail on a hardcoded return. - Zero cooked content. V5 carries no
.uassetfiles; it is a logic-plus-manifest skeleton. The C++ compiles and is unit-tested, but no cert run, no profiled accessibility playthrough, and no played day-one build can be evidenced from this repo. Those claims are forward-looking by construction. - The external accessibility audit was fabricated, then retracted — and the
two sources still disagree. The C++
BuildExternalAuditEngagement()still names an invented counterparty ("AccessForge Accessibility Audit Cooperative", idaccessforge-a11y) withStatus = Engaged; the legal source of truth,V5/legal/accessibility-consultant-engagement.json, was corrected on 2026-06-12 tostatus: "not_engaged", vendor[VENDOR TBD], every datenull. The one fact both share is the only one that gates ship:bSignedAuditReceived = false. This page records the divergence rather than smoothing it. - Real-time voice-chat translation is a real router over named provider
seams. The 240-pair route matrix, opt-in gating, output-mode resolution, and
refusal logic are real; the STT/MT/TTS providers (
WhisperSTT,V5RealtimeMT,CoquiTTS) are named integration points, and the transcript transform is a deterministic stand-in, labeled below.
Accessibility#
V5Accessibility is deliberately a settings-and-policy library, not a renderer:
it produces the FV5Accessibility* structs the rest of the game and UI consume,
and the spec pins the behaviour per feature.
The settings model#
- Subtitles —
BuildSubtitleStyleclamps font scale to[0.8, 1.6]and border to[0, 6]px, applies per-speaker colour coding (Player / Companion / Radio / SFX), keeps an SFX caption track, and carries a period-radio caption flag. The spec asserts the high-end clamps (1.7 → 1.6,8.0 → 6.0). - Colour vision —
BuildPaletteremaps both the UI palette and the gameplay-cue tags (cue.threat.*,cue.clue_trail.*,cue.faction.*) across four modes —Deutera,Proton,Trit,Monochrome— and any high-contrast or monochrome selection setsbMindPalaceShapeCodingso deduction cues never depend on hue alone. - Photosensitivity —
BuildPhotosensitivityPolicy(true)drops the flash budget from 12 to 3 per five seconds, removes strobe, dims burst overlays to a0.55brightness scalar, and applies to VR/AR; the spec assertsMaxFlashesPerFiveSeconds ≤ 3. - Combat audio cues —
BuildCombatCueSetemits five events (incoming fire, hit confirmation, low health, target lock, vehicle collision), each with a MetaSound graph id, a visual-companion id, and spatial-marker / vibration companions; low-health rides a1.15volume scalar, and the caller's disabled-event list is honoured per cue. - Per-cell difficulty —
BuildDefaultDifficultyProfilesproduces one profile for every cell (GetAllV5Cells()), with Easy/Normal/Hard/Brutal driving concrete scalars: Easy =0.6 / 0.65 / 1.3damage / accuracy / resource with a 12 s hint delay; Brutal =1.65 / 1.45 / 0.65at 120 s. Each isbStoredPerCell, so an easy Sci-Fi flight model and a hard Hunter combat model coexist in one profile. - Aim assist —
BuildAimAssistProfileclamps per-axis sensitivity to[0.25, 1.5], exposes a driving variant with0.55stickiness and a14°acquisition cone (vs8°on foot), and orders the priority pyramid enemy → breakable → civilian. - Speech & input —
BuildSpeechAccessProfileadvertises Coqui TTS over all 16 launch cultures (bCoversAllLaunchLanguagesis the literalNum() == 16check) and Whisper STT that requires opt-in;BuildInputAccessPlanenables per-input remapping across seven named Enhanced-Input contexts and one-handed schemes for the PS5 Access and Xbox Adaptive controllers. - Camera comfort, period-radio captions, Mind Palace contrast round out the
set — camera shake clamped to
[0, 1], period-radio captions split into dialog / SFX / station-ident / music-description channels, and the Mind Palace carrying six evidence/thread shape tokens for colour-independent deduction.
The launch QA gate#
BuildLaunchQASuite assembles 13 checks spanning every surface above,
twelve of them automated under the V5.Accessibility filter. The thirteenth,
qa.accessibility.external_audit, is bManualReview and carries status
ReleaseBlocked — the suite encodes that an internal pass is necessary but
not sufficient, and that an external, signed audit gates ship. As "What
ships" records, that audit has not been received: the MindPalaceQAAndAudit
spec deliberately asserts TestFalse("Signed audit is not falsely claimed", …).
So the settings model is real and tested, but the launch readiness it feeds
stays red on the one human sign-off it cannot fabricate.
Localization, voice-over & region variants#
V5Localization reimplements the whole launch language plan in C++ rather than
reaching for @oshun/i18n. (The shared lib is real — eight app-shell locales,
an ICU Intl.* formatter, a <requested> → <language> → en-US fallback chain,
RTL metadata — but it serves the Oshun product shells and is not imported
anywhere under V5/.)
Sixteen packs and the dashboard pipeline#
BuildLaunchLanguagePacks authors 16 packs: 4 full-lipsync (en-US, fr,
de, es-LATAM), 8 lipsync-light (en-UK, es-ES, it, pt-br, ja, ko, zh-Hans,
zh-Hant), and 4 text-only (ru, ar, pl, tr; Arabic flagged bRightToLeft).
Every pack covers the same five string domains — UI, Subtitle, Caption, Codex,
PeriodRadio — and carries a /Game/Localization/V5/<culture>/V5.archive path
and a ST_V5_<culture> string-table path. BuildDashboardPipeline runs the
real UE Localization Dashboard commandlet chain (GatherTextFromSource,
GatherTextFromAssets, GenerateGatherManifest, GenerateGatherArchive,
GenerateTextLocalizationResource) with en-US as native culture. The
out-of-Unreal mirror V5/loc/language-packs.json agrees pack-for-pack and
exists so pipeline tooling can read the plan without the editor.
Voice-over and lipsync tiers#
BuildVoiceRecordingProfiles emits a profile for each of the 12 voiced
packs, routing studios by culture — studio.la (en-US, es-LATAM),
studio.london (en-UK, fr, de, es-ES, it, pt-br), studio.tokyo (ja, ko), else
outsourced — and sizing PrincipalLineCount at 92,000 lines for
full-lipsync cultures and 54,000 otherwise (the Sci-Fi player character
carries a separate SciFiPlayerLinesPerGender default of 38,000).
BuildLipsyncProfiles then marks the four full cultures bFullFaceUsd with a
strict 0.25 s max sync offset, and the lipsync-light cultures a viseme pass at
0.5 s; every profile keeps a Sequencer note track. The VoiceAndLipsync spec
asserts exactly 12 recordings, 4 full, 8 light.
Real-time voice-chat translation#
This is the system that most needs an honest label.
BuildRealtimeVoiceChat TranslationRoutes builds the full 240-route
ordered matrix (16 × 15), and ValidateRealtimeVoiceChatTranslationPlan asserts
every invariant: 16 unique supported cultures, 15 inbound and 15 outbound routes
per culture, a ≤ 750 ms end-to-end budget, party and team voice, speaker and
listener opt-in, no raw-audio retention, no training on voice chat, a
synthetic-voice indicator, and per-route profanity filtering. Output mode is
resolved from the target tier — voiced targets get SynthesizedVoiceAndCaption
via CoquiTTS at a 650 ms budget; text-only targets (ru, ar, pl, tr) get
CaptionOnly with no TTS at 450 ms. TranslateVoiceChatTranscript refuses
unless the route exists, the cultures differ, the transcript is non-empty, and
all three privacy gates are set. What is real here is the router, the gating,
the output-mode and latency resolution, and the refusal logic, all spec-verified
end to end. What is a named seam is the actual STT → MT → TTS: WhisperSTT,
V5RealtimeMT, and CoquiTTS are provider identifiers, not in-module
implementations, and the transcript transform itself ("[ja] Hold the gate.")
is a deterministic target-tagged stand-in, not a shipped translation. The
release-gate manifest path is
fullvision_realtime_voice_chat_translation_manifest.json.
Region rating variants and content gates#
BuildRegionRatingVariants authors 8 board variants — US ESRB M, EU PEGI
18, UK BBFC 18, DE USK 18, JP CERO Z, CN NTAB, AU ACB R18+, KR GRAC — each
linked to its build-variant id and content-gate ids. BuildContentGates carries
the six real edits the boards demand: the AO-rated Hard Vacuum cinematic
excluded from the US M build, the 1968 Mafia gore-cut for USK, a toned-down
extreme-gore cinematic for CERO Z, NTAB faction-name swaps for CN, an
ACB-reviewed chemical-misuse edit for AU, and GRAC commerce/online-interaction
disclosures for KR; five of the six set bBlocksUncutContent. These satisfy the
cert obligations in V5/legal/rating-boards.json and
V5/legal/platform-cert-bans.json.
The localization QA gate#
BuildLocalizationQAProfiles emits 16 profiles, every one bReleaseGate and
bProofreadRequired; the 12 voiced cultures additionally carry
RequiresLipsyncCheck. BuildLaunchPlan composes the dashboard pipeline,
packs, recordings, lipsync, the 240-route translation plan, the 8 rating
variants, the 6 gates, and the 16 QA profiles into one launch object — so a
per-language proofread-plus-lipsync pass is encoded as a gate, not a promise.
Privacy, residency & compliance#
V5Compliance is the clearest expression of the reimplement-rather-than-compose
decision, and its math is rule-driven and time-bounded.
Residency and data-subject rights#
NormalizeRegion folds aliases (GB/EN-GB → UK, ZH-CN → CN,
CALIFORNIA → CA) and BuildResidencyPolicy resolves storage per
jurisdiction: CN pins to cn-shanghai / cn-hangzhou with
bCrossRegionReplicationBlocked and bCNOnly; EU to fra / dublin with
bEUOnly; UK to london / dublin; California to pdx; and the
global default spreads across iad / pdx / sin / syd unpinned. The
BuildLaunchResidencyPolicies set and V5/legal/data-residency.json agree
field-for-field. BuildDSARRequest stamps a 30-day SLA, computes
DueUnixSeconds = Created + 30·86400, routes through the companion-app
portal (/companion/privacy/dsar), enumerates export scopes (account,
save-games, telemetry, workshop, moderation), and embeds the caller's
residency policy so an EU subject's export bucket never leaves the EU. CCPA
do-not-sell is an account-level flag forced on for California regardless of
input.
Age-gating, DSA moderation, and the release-coverage AND#
BuildAgeGateProfile bands age into Under13 / Teen / Adult and, for under-13,
cascades the full COPPA restriction set in one place — guardian consent
required, social surfaces / voice chat / Workshop publishing / personalized ads
all disabled, telemetry essential-only, DSAR routed through a guardian. DSA
moderation is region-aware: BuildModerationReport marks a report
DSA-eligible only for EU/UK, and only then sets human-review-required, an
appeal path, a transparency-log id, and a 72-hour SLA (vs 120
elsewhere); the spec deliberately asserts a US report is not falsely
DSA-eligible. Privacy notices are authored for 10 jurisdictions (Global, CA,
EU, UK, CN, BR, JP, KR, AU, NZ), each disclosing do-not-sell where
California/Global applies and DSA reporting where EU/UK applies; the cookie
model defaults to essential-only with reject-all, requires explicit marketing
opt-in for EU/UK/CN/BR/KR, and shows a do-not-sell link only for California.
BuildLaunchProfile ANDs all of it into one bAllReleaseGatesAuthored
assertion — ≥ 5 residency policies, ≥ 10 notices, cookie models mirroring
notices, a 30-day DSAR, a visible DSA appeal path, and a guardian-gated under-13
profile — so a single missing piece fails the whole launch-coverage check.
Where this connects#
- Sideways to platform & tech:
Platform, Performance & Tech owns the
nine-platform parity matrix, the per-region store SKUs these rating variants
ship into, and the zero-
.uassetreality that caps every cooked and cert claim here. - Sideways to production & launch: Production, Progression, World & Launch owns the mocap / VO / composer capacity behind the 12 voiced SKUs and the release-gate aggregation that reads this page's accessibility, localization, and compliance gates.
- Sideways to online services: Online Services & Infrastructure owns the anti-cheat and competitive-integrity surface that completes the compliance picture, plus the moderation queue whose UGC the DSA reporting governs.
- Architecture companion:
Accessibility, Security & Compliance
is the system-level home of these three modules, the service tier
(
compliance-dsar,anti-cheat), and the full record of the retracted audit. - The features hub: ../V5_features.md.