Fighting Game · Guides & deep dives

V2 Accessibility Settings Persistence

Accessibility settings persistence spans V2Persistence and V2UI:

5sections1 minread

On this page

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:

bash
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-source
  • accessibility-settings-persistence-profile-save
  • accessibility-settings-persistence-normalization
  • accessibility-settings-persistence-startup-apply
  • accessibility-settings-persistence-automation
  • accessibility-settings-persistence-ci-wired