No description
  • C++ 87%
  • Python 12%
  • C 0.5%
  • CMake 0.4%
  • Just 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alexander Epaneshnikov d24c62ef30 docs: correct Object Scanner keys in README; move debug keys out of user docs
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>
2026-08-06 01:28:54 +03:00
.claude speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
cmake speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
data/sounds Fix hit-sound clipping: attenuate WAVs and lengthen cooldown 2026-05-08 02:38:42 +03:00
docs Add road network routing, new menu handlers, HUD hooks, and tools 2026-02-16 03:38:31 +03:00
lib speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
src speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
tools Add NVSE cosave inspect and strip tools 2026-05-09 20:20:09 +03:00
.gitignore gitignore: exclude Python bytecode cache 2026-05-27 13:05:46 +03:00
.gitmodules speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
CLAUDE.md speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
exports.def Add xNVSE plugin skeleton with working build 2026-02-03 16:41:20 +03:00
FalloutNVAccess.sln Add xNVSE plugin skeleton with working build 2026-02-03 16:41:20 +03:00
FalloutNVAccess.vcxproj speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
justfile speech: replace SRAL with Prism; no screen reader client DLL needed 2026-08-05 22:25:33 +03:00
LICENSE Add MIT license and update README license section 2026-03-22 10:42:51 +03:00
README.md docs: correct Object Scanner keys in README; move debug keys out of user docs 2026-08-06 01:28:54 +03:00

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 Plusmandatory 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:OnCornerMessage event 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.dll and 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:OnCornerMessage event 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).