an accessability mod for fallout4
  • C++ 86%
  • Python 11.7%
  • Lua 1.2%
  • Papyrus 0.8%
  • PowerShell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alexander Epaneshnikov 68605447e4 feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL
SRAL's NVDA backend LoadLibrary's nvdaControllerClient.dll, so that file had
to be placed in the game folder by hand -- an undocumented install step that
silently cost users all speech when missed. Prism talks to NVDA over its
ncalrpc RPC interface using a MIDL client stub generated at build time from
idl/nvdaController.idl, and reaches JAWS over COM, so nothing ships alongside
the plugin. Verified against a live NVDA with no controller DLL present.

Backend policy changes in two ways. SRAL was initialised with SAPI excluded,
so a user without a screen reader got silence; Prism's registry is ordered by
priority and we now take the best that initialises, which means OneCore or
SAPI speak when no reader is running. It also brings ZoomText, SenseReader,
ZDSR, PC-Talker and BoyPCReader along for free.

SRAL re-picked its engine inside every SRAL_Speak. Prism caches its backend,
so SpeechManager reproduces that itself: a speak failure that means the
backend is gone reselects immediately, and while sitting on an OneCore/SAPI
fallback it re-probes every 10 seconds so a screen reader started after the
game -- or one that crashed and restarted -- gets picked up. Backend instances
are explicitly not thread-safe, hence the mutex around speech.

Build notes, all of which are load-bearing:
  - /WHOLEARCHIVE is required. Backends self-register from static initialisers
    in object files nothing references, so without it the registry is empty and
    nothing speaks. It also pulls in Prism's delay-load failure hook, which is
    what turns a missing PCTKUSR.dll into "backend unavailable" instead of a
    crash.
  - /LTCG is required because Prism's CMake enables IPO unconditionally, with
    no cache variable to override, so prism.lib carries /GL objects.
  - PrismInstall.cmake exports prism.lib but not the static libraries it builds
    out of third_party/, so the package script copies prism_dep_*.lib into the
    install tree and fails loudly if it ever finds none.
  - WIN32_LEAN_AND_MEAN/NOGDI/NOMINMAX have to be command-line defines: prism.h
    includes windows.h, whose ERROR macro eats REX::ERROR and whose
    DETECTION_TYPE collides with RE::DETECTION_TYPE, and MSVC discards anything
    written above the #include "pch.h" line.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 02:23:43 +03:00
.claude feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
Data feat(autowalk): support Fallout London / the OG runtime 2026-06-14 19:13:53 +03:00
docs feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
lib feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
res chore(deps): update CommonLibF4 and document the NG exclusion 2026-08-06 02:19:23 +03:00
src feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
tools chore(tools): add navmesh, NIF and Ghidra analysis scripts 2026-08-06 02:22:55 +03:00
.clang-format Add clang-format and clang-tidy configuration 2026-03-20 22:10:49 +03:00
.clang-tidy Fix bugprone and performance issues found by clang-tidy 2026-03-20 22:10:49 +03:00
.gitignore Announce level and XP on Pip-Boy Stats page and perk chart 2026-04-18 18:02:19 +03:00
.gitmodules feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
CHANGELOG.md feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
CLAUDE.md feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
EXCEPTIONS Initial commit 2025-06-21 00:00:05 +03:00
justfile Remove hardcoded machine paths from docs and build config 2026-02-09 14:40:27 +03:00
LICENSE Initial commit 2025-06-21 00:00:05 +03:00
README.md feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
xmake-requires.lock feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00
xmake.lua feat(speech): replace SRAL with Prism, dropping the NVDA controller DLL 2026-08-06 02:23:43 +03:00

Fallout 4 Access

An F4SE plugin that makes Fallout 4 accessible to blind and visually impaired players. Uses Prism (Platform-agnostic Reader Interface for Speech and Messages) to provide screen reader support through NVDA, JAWS and others, falling back to Windows OneCore or SAPI voices when no screen reader is running.

Features

Accessible Menus

  • Main Menu, Pause Menu - Full navigation and announcements
  • Settings Menu - All settings categories with values read aloud
  • Save/Load Menus - Save slot details including character level and playtime
  • Pip-Boy - Inventory, Stats, Data (Quests/Workshops/Stats), Map, and Radio pages
  • Container/Looting - Item lists with stats, weight, and value
  • Barter Menu - Vendor trading with side-switching (F key)
  • Terminal Menus - In-game computer terminals
  • Dialogue Menu - NPC conversation options with speaker names
  • VATS - Target selection and body part announcements
  • Level-Up Menu - Perk selection and descriptions
  • Workbenches - Cooking, Power Armor, and Robot workbenches
  • Workshop & Supply Lines - Settlement building and caravan management
  • Message Boxes & Confirmation Dialogs - Prompts and choices
  • S.P.E.C.I.A.L. Menu - Character creation stat allocation
  • Examine Menu - Item inspection
  • Loading Screens - Loading screen text read aloud

Gameplay Accessibility

  • Object Scanner - Scans nearby objects by category (NPCs, items, doors, containers) with subcategories, locked door detection, and corpse loot tracking
  • Crosshair Feedback - Announces what you're looking at
  • Auto-Aim - Continuous target tracking assistance
  • Auto-Walk - Navigate to map markers and scanned objects
  • Audio Hit Markers - Distinct sounds for hits, critical hits, and kills
  • HUD Notifications - Item pickups, location discoveries, and XP gains read aloud
  • Combat Stats (H key) - Press H to hear health, ammo, and other combat stats
  • Contextual Info - Carry weight and caps on Pip-Boy inventory

Requirements

  • Fallout 4 — works on both the next-gen update (Anniversary Edition) and the original 1.10.163 runtime (the version used by downgraded installs and Fallout: London). A single download supports both; the right version is detected automatically, with nothing to configure.
  • F4SE (Fallout 4 Script Extender) — use the build matching your game version
  • Windows 10 or later
  • A screen reader: NVDA (recommended) or JAWS. ZoomText, SenseReader, ZDSR, PC-Talker and BoyPCReader are also supported. Without a screen reader the mod speaks through Windows OneCore or SAPI voices instead.
  • Address Library for F4SE — the database for your game version (next-gen or the original-runtime "all-in-one")

Nothing else needs to be installed for screen reader support. In particular there is no nvdaControllerClient.dll to copy anywhere — the plugin talks to NVDA directly. If a previous version of this mod had you place that file in your game folder, you can delete it.

Installation

  1. Install F4SE and Address Library if you haven't already
  2. Copy the fallout4access folder into your Fallout 4 Data directory (or install via a mod manager)
  3. The folder structure should be:
    Data/
      F4SE/
        Plugins/
          fallout4access.dll
      Sound/
        FX/
          F4A/
            UI/
              (sound files)
    
  4. Load fallout4access.esp in your mod load order

Building from Source

Requirements

  • XMake 2.8.2+
  • C++23 compiler (MSVC or Clang-CL)
  • Windows x64

Clone

git clone --recurse-submodules https://git.alex19ep.me/alex19EP/f4access
cd fallout4access

Build

xmake build

Build output is in build/windows/x64/release/fallout4access.dll.

Install to Mod Organizer 2

Set the environment variable XSE_FO4_MODS_PATH to your MO2 mods directory, then:

xmake install

Generate Visual Studio Project (Optional)

xmake project -k vsxmake

License

This project is licensed under the GNU General Public License v3.0.

Credits

  • CommonLibF4 - Reverse-engineered F4SE API
  • Prism - Platform-agnostic Reader Interface for Speech and Messages (MPL-2.0), statically linked
  • F4SE - Fallout 4 Script Extender