This runbook covers TODOS.phase-72.72.13.1.15: saving per-player accessibility
preferences and applying them on startup before gameplay.
Runtime Surface#
Accessibility settings persistence spans V2Persistence and V2UI:
- persistence struct:
FV2PersistedAccessibilitySettings - settings snapshot:
FV2PlayerSettingsSnapshot - save game:
UV2SaveGame - persistence subsystem:
UV2PersistenceSubsystem - startup apply hook:
UV2UISubsystem::ApplyStartupAccessibilitySettings - automation spec:
V2/ue/Source/V2Tests/Private/Persistence/AccessibilitySettingsPersistence.spec.cpp - contract:
V2/ue/Content/V2/UI/Accessibility/AccessibilitySettingsPersistence_V2_Contract.json - focused checker:
V2/ue/Tools/check-v2-accessibility-settings-persistence.py
FV2PersistedAccessibilitySettings owns the save-friendly representation. It
uses primitive values and stable FName ids so the V2Persistence module does
not need a runtime dependency on V2UI.
Persisted Fields#
The snapshot persists:
- selected accessibility preset profile id
- HUD scale and opacity
- reduced motion
- camera shake intensity
- screen reader announcements
- large text and text scale
- color palette and contrast ids
- readable font id
- letter spacing percent
All numeric values are normalized before save. HUD scale, camera shake, and letter spacing are stored in 5 percent steps. Large text restores at 1.5x or higher, and letter spacing maps to at most 0.12em.
Startup Apply#
UV2SaveGame::GetStartupAccessibilitySettings resolves a normalized startup
snapshot. UV2PersistenceSubsystem::MarkAccessibilitySettingsAppliedOnStartup
records when those settings were applied. UV2UISubsystem exposes
ApplyStartupAccessibilitySettings and
WereAccessibilitySettingsAppliedBeforeGameplay so startup flow can apply the
runtime FV2UIAccessibilitySettings before gameplay HUD or match state binds.
Verification#
Run these checks after changing accessibility settings persistence:
python3 V2/ue/Tools/check-v2-accessibility-settings-persistence.py
python3 V2/ue/Tools/check-v2-profile-save-game.py
python3 V2/ue/Tools/check-v2-persistence-module.py
python3 V2/ue/Tools/check-v2-settings-ui.py
python3 V2/ue/Tools/check-v2-ui-module.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
python3 -m py_compile V2/ue/Tools/check-v2-accessibility-settings-persistence.py V2/ue/Tools/check-v2-ci-workflow.py
python3 -m json.tool V2/ue/Content/V2/UI/Accessibility/AccessibilitySettingsPersistence_V2_Contract.json
Automation test name:
V2.UI.Accessibility.AccessibilitySettingsPersistence.AssetContract.
Horde Gates#
accessibility-settings-persistence-sourceaccessibility-settings-persistence-profile-saveaccessibility-settings-persistence-normalizationaccessibility-settings-persistence-startup-applyaccessibility-settings-persistence-automationaccessibility-settings-persistence-ci-wired