- C++ 87%
- Python 12%
- C 0.5%
- CMake 0.4%
- Just 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The documented Object Scanner bindings had drifted from ObjectScanner.cpp: - Category cycling is Shift+Page Up / Shift+Page Down (NextCategory / PreviousCategory), not repeated Numpad 5 presses. Numpad 5 calls ScanAndAnnounce, which rescans the current category and never advances it. - Walking to the selection is Shift+Home, not End. End calls CycleSubcategory. Shift+Home also toggles: pressing it while walking calls AutoWalk::Stop. Following the old table, a player pressing End to walk somewhere would silently cycle subcategories instead. Also note that scanning is automatic: ScanIfNeeded runs from SelectNext / SelectPrevious and rescans past RESCAN_DISTANCE_THRESHOLD, and CheckLocationChange refreshes on every cell/worldspace change. Paging is the whole interaction. Numpad 5 and Ctrl+Shift+Home are development aids, not player features (Ctrl+Shift+Home speaks raw refIDs and base form IDs), so they move to a Debug keys section under Building from Source rather than sitting in the key tables users read. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
| .claude | ||
| cmake | ||
| data/sounds | ||
| docs | ||
| lib | ||
| src | ||
| tools | ||
| .gitignore | ||
| .gitmodules | ||
| CLAUDE.md | ||
| exports.def | ||
| FalloutNVAccess.sln | ||
| FalloutNVAccess.vcxproj | ||
| justfile | ||
| LICENSE | ||
| README.md | ||
FalloutNV Access
An xNVSE plugin that makes Fallout: New Vegas playable for blind and visually impaired users. It provides screen reader support through Prism (the Platform-agnostic Reader Interface for Speech and Messages), working with NVDA, JAWS, ZDSR, PC-Talker, BoyPCReader, Sense Reader, ZoomText, Windows OneCore voices, or SAPI.
Prism is statically linked and talks to each screen reader through its own native interface, so there is no controller DLL to install — the plugin DLL is self-contained.
This is a spiritual port of fallout4access for Fallout 4 — the design patterns and feature goals come from that project, but the implementation is a ground-up rewrite due to FNV's fundamentally different UI system (Gamebryo XML tiles vs Scaleform/Flash).
Public beta. Core menu reading and the gameplay tools below are in daily-playable shape. Long-distance AutoWalk routing is still experimental — see Known Issues.
Vanilla UI Plus is mandatory. Menu reading targets the VUI+ tile layout. Without VUI+ installed, menus will be silent — the plugin cannot detect VUI+ to warn you, so this is the first thing to check if menus don't read. See Requirements.
Features
Menu Accessibility
Every menu announces its contents via screen reader as you navigate. Supported menus:
- Start Menu — Main menu, pause menu, settings, save/load
- Pip-Boy — Inventory, Stats/Skills/Perks, Map (world + local)
- Dialog — NPC conversation topics and responses
- Container / Barter — Item lists with stats, weight, value
- Level Up / Traits / SPECIAL — Character creation and progression
- V.A.T.S. — Target selection with body part and hit chance
- Terminals — Computer menus and hacking minigame
- Crafting — Workbench, reloading bench, campfire recipes
- Repair — Self-repair and NPC repair services
- Item Mod — Weapon modification menu
- Companion Wheel — Companion command menu
- Sleep/Wait — Time selection
- Message Boxes — Confirmation dialogs
- Race/Sex — Character appearance menu
- MCM — Mod Configuration Menu (most option types; see Known Issues)
- Stewie's Tweaks menu
- Text Input — Name entry and other text fields
In most menus, press H to hear extra on-demand detail (an item's stats and effects, your caps, the relevant skill, header totals — whatever fits that menu).
Object Scanner
Find and navigate to nearby objects. Used from normal gameplay, with no menu open. Scanning is automatic — the list refreshes as you move and whenever you change cell or worldspace, so you just page through it.
| Key | Action |
|---|---|
| Page Up / Page Down | Previous / next nearby object |
| Shift+Page Up / Shift+Page Down | Previous / next category |
| End | Cycle subcategory within the current category |
| Home | Look at and announce the selected object |
| Shift+Home | Walk to the selected object (starts AutoWalk; press again to stop) |
Categories — Cycle through scan filters with Shift+Page Up / Shift+Page Down: All, NPCs, Doors, Containers, Items, Activators, Corpses, Companions, Locations. Each category has subcategories (e.g. Containers: Non-Empty / Empty, Doors: Locked / Cell Doors, Corpses: Unlooted / Looted).
AutoWalk
Automatic pathfinding navigation to a target. Walk to any scanned object or map marker hands-free.
- Uses the game's native navmesh pathfinding
- Smooth corridor-hugging steering with walk/run speed matching
- Stuck detection with automatic re-pathing
- Road network routing for long-distance outdoor travel — follows roads between distant locations
- Stops honestly at the closest reachable point when a target can't be pathed to, instead of orbiting
| Key | Action |
|---|---|
| W / A / S / D, Escape, or Space | Cancel AutoWalk |
| R | While on a road route, switch to a direct (straight-line) route |
AutoAim
A combat aim-assist for players who can't see to aim. It runs automatically — there is no separate hotkey; it engages while you hold your Aim button (whatever you've bound "Aim" to; right mouse by default).
- While aiming, it locks onto the best visible hostile and smoothly steers your aim onto them
- Audio cues tell you what's happening without sight:
- Line-of-sight ping — a soft looping tone that plays only while you have a clear shot to the locked target (requires JIP LN NVSE)
- Hit chime — plays on each of your hits, with distinct sounds for a critical hit, a sneak attack, and a kill (the kill chime fires instantly on a lethal hit)
Because it moves your aim while you hold Aim, expect aiming to feel "assisted." There is no in-game toggle yet.
HUD Notifications
Speaks heads-up information as it appears, including:
- Corner notifications — XP gains, quest updates, location discovery, item pickups (captured via itr-nvse)
- Subtitle text from NPC dialogue and ambient speech
- On-crosshair info — activation prompts and enemy health when you look at a target
Keybindings
A consolidated reference. Keys are not yet remappable.
Gameplay (no menu open):
| Key | Action |
|---|---|
| Page Up / Page Down | Previous / next nearby object |
| Shift+Page Up / Shift+Page Down | Previous / next scan category |
| End | Cycle subcategory |
| Home | Look at and announce the selected object |
| Shift+Home | Walk to the selected object (AutoWalk; press again to stop) |
| (hold Aim — right mouse by default) | Engage AutoAim on the best visible hostile |
While AutoWalk is active:
| Key | Action |
|---|---|
| W / A / S / D, Escape, Space | Cancel AutoWalk |
| R | Switch from a road route to a direct route |
In most menus:
| Key | Action |
|---|---|
| H | Announce extra on-demand detail / item card |
Pip-Boy Map:
| Key | Action |
|---|---|
| Page Up / Page Down | Previous / next marker |
| Home | Selected marker's full details |
| Shift+Home | Set the selected marker as a reference point |
| Enter | Travel to / AutoWalk to the selected marker |
Pip-Boy Inventory:
| Key | Action |
|---|---|
| H | Announce header stats |
| B | Toggle B42 Descriptions (requires the B42 Descriptions mod) |
Companion Wheel:
| Key | Action |
|---|---|
| Left / Right | Cycle commands |
| Enter | Confirm selection |
| H | Re-announce the current selection |
Requirements
-
Fallout: New Vegas (v1.4.0.525 or newer)
-
xNVSE 6.4.4 or newer (latest recommended)
-
Vanilla UI Plus — mandatory for menu accessibility. Menu reading targets the VUI+ tile layout; without it, menus are silent and the plugin cannot warn you (VUI+ is a UI mod, not an NVSE plugin, so it isn't detectable at runtime).
-
JIP LN NVSE — required. Used for the line-of-sight raycast behind AutoAim's "target visible" ping (and is a near-universal FNV dependency).
-
itr-nvse — required for HUD corner notifications. FalloutNVAccess subscribes to its
ITR:OnCornerMessageevent to read item pickups, XP gains, and generic popups. Without it the plugin still loads, but at startup it announces "itr N V S E is not installed — corner notifications will not be read." Everything else keeps working. Available at https://www.nexusmods.com/newvegas/mods/96922. -
Windows 10 or newer. Prism, the speech layer, does not support older versions of Windows.
-
A screen reader — NVDA (recommended), JAWS, ZDSR, PC-Talker, BoyPCReader, Sense Reader, or ZoomText. If none is running, speech falls back to Windows OneCore voices and then to SAPI, so the plugin still talks on a bare Windows install.
Nothing extra to install for your screen reader. Prism speaks to NVDA over NVDA's own RPC interface and to JAWS through its COM API, so
nvdaControllerClient.dlland friends are not needed — do not copy any controller DLL into your game folder. Just have the screen reader running (starting it after the game is fine; the plugin picks it up within a few seconds).
Tale of Two Wastelands (TTW): supported. Road-routing data for the Capital Wasteland and the Fallout 3 DLC worldspaces ships in the same archive, so a single install works for both pure New Vegas and TTW. (Pure-FNV users simply carry a little unused road data — harmless.)
Installation
A single archive works for both New Vegas and TTW. Use a mod manager (Mod Organizer 2 or Vortex) — install the archive like any other mod and enable it.
The archive contains, relative to your game's Data folder:
NVSE\Plugins\FalloutNVAccess.dll
NVSE\Plugins\FalloutNVAccess\*.dat (road networks + navmesh bridge graph)
Sound\fx\fnvaccess\*.wav (AutoAim audio cues)
README.md, LICENSE.txt (documentation, archive root)
PRISM-LICENSE.txt, PRISM-NOTICE.txt (Prism's licence and attributions)
PRISM-LICENSES\ (third-party licences Prism links in)
There is no separate screen-reader DLL in that list, and none is needed — see Requirements.
To install manually instead, extract the archive into your game's Data folder so the paths above line up. Copy all of it — the .dat files drive road routing and the .wav files are the AutoAim cues; the DLL alone is not enough.
Launch the game — you should hear "FalloutNV Access loaded" at the main menu.
Known Issues (Beta)
- Long-distance AutoWalk is experimental. For some cross-area destinations it stops at the closest reachable point ("Cannot reach, stopping at closest point") rather than completing the trip. Local navigation is reliable.
- Don't fast-travel while AutoWalk is moving. Starting a fast travel during an active AutoWalk can crash the game in rare cases. Cancel AutoWalk first (W/A/S/D, Escape, or Space).
- MCM option coverage is partial. Toggles, checkboxes, sliders, and dropdowns work; key-bind, RGB, and multi-slider option types can't be changed through the accessible path yet.
- Menus need Vanilla UI Plus. Without VUI+ installed, menu reading is silent (see Requirements).
Building from Source
Prerequisites
- Visual Studio 2022 (Build Tools v143)
- CMake
- just command runner
Build
git submodule update --init # xNVSE + Prism; NOT --recursive, see below
just prism # Build the Prism static library
just build # Build the Release DLL
Deliberately not --recursive: Prism's only submodule is gdextension/godot-cpp, needed just for its Godot binding, which this project does not build. Recursing clones a large repository for nothing.
just build builds Prism automatically if build/prism/<Config>/prism.lib is missing, so just prism is only needed to force a rebuild of the speech layer. Prism is C++23 and vendors its own dependencies, so the build needs no network access beyond the submodule checkout — but it does need midl.exe from the Windows SDK, which the Visual Studio C++ workload installs.
The output DLL is at Release/FalloutNVAccess.dll.
Set XSE_FONV_MODS_PATH (and optionally XSE_TTW_MODS_PATH) to your MO2 mods directory and the post-build step auto-installs the DLL, the WAV cues, and the README/license files into the mod folder, ready to zip.
Other build commands:
just build Debug # Debug build
just rebuild # Clean + build
just clean # Clean build artifacts
Debug keys
Not part of the user-facing key list above, and deliberately undocumented for players — scanning is automatic, so these exist only for development:
| Key | Action |
|---|---|
| Numpad 5 | Force an immediate rescan of the current category |
| Ctrl+Shift+Home | Speak the selected object's refID, base form ID, base type and distance |
Architecture
FalloutNV Access is a 32-bit xNVSE plugin DLL. It hooks the game's main loop to poll UI state each frame, detecting menu changes and reading text from Gamebryo's XML tile tree.
Key components:
- SpeechManager — Centralized speech output with timestamped logging
- MenuAccessibilityManager — Detects active menus, dispatches to per-menu handlers
- ObjectScanner — Scans nearby world objects by category, with look-at and walk-to
- AutoWalk — Navmesh-based pathfinding with corridor-hugging steering and road-network routing
- AutoAim — Combat aim-assist with line-of-sight and hit/kill audio cues
- RoadNetwork / BridgeGraph — Long-distance outdoor routing graphs
- HUD Notification Hooks — Intercepts subtitle and notification display for TTS
Dependencies
- xNVSE — Script extender API and reverse-engineered game class headers
- Prism — Screen reader / TTS abstraction library (statically linked, MPL-2.0)
- itr-nvse (runtime) — its
ITR:OnCornerMessageevent is consumed for HUD notification capture
Credits
- xNVSE team — the script extender that makes all of this possible
- Prism by Ethin Probst — screen reader and TTS abstraction (bundled, MPL-2.0 — see
PRISM-LICENSE.txt) - JIP LN NVSE, itr-nvse, and JohnnyGuitar NVSE authors — extended APIs and events
- fallout4access by alex19EP — design patterns and feature inspiration
License
This project is licensed under the MIT License (see LICENSE.txt in the archive).
Prism is statically linked and distributed under the Mozilla Public License 2.0; its licence ships as PRISM-LICENSE.txt and its attribution notice as PRISM-NOTICE.txt, with the third-party licences it links in under PRISM-LICENSES\. The MPL is a per-file licence: linking it into this MIT-licensed plugin is permitted, and the corresponding Prism source is available unmodified at https://github.com/ethindp/prism (this project builds it from the pinned lib/prism submodule and applies no patches).