- C++ 86.3%
- Python 13.1%
- C 0.5%
Make MCM options actually activatable by keyboard and add the two modal popup types plus left/right panel navigation. - Activation fix: hold MCM focus on the cursor option every frame (_TargetOption + mouseover) so MCM_Options/_optionID stays resolved ahead of the click. The old same-frame set-mouseover-then-click lost the _target -> _optionIDX -> _optionID rollup race and activated "option zero". (Frida-verified 2026-05-30.) - Clicks are now a deferred press/release state machine (ProcessPendingClick): press a clean clicked=1 only when MCM is not mid-debounce (_UnClick==0), release once consumed. Replaces the raw "clicked = _UnClick+1, never release" that re-toggled options and left stuck mod/submenu clicks. - Slider popup (MCM_Scale): Left/Right step via meter arrows, Enter accepts, Tab cancels; value announced off the per-frame change. - Dropdown popup (MCM_List): Up/Down move the highlighted choice held in focus (_TargetList + mouseover), Enter commits (FinishList: _Value= _active, _NewValue=1, mirroring MCMListScript iTask 99), Tab cancels. - Panel-focus nav: Left/Right move along Mod list <- Categories <- Settings; auto-advance to the deepest level only when the active mod/category changed or returning from a popup, else leave focus put. - Option value reading prefers the on-screen value/text (formatted number or dropdown choice label) over the raw numeric _value. Co-Authored-By: Claude Opus 4.8 (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 SRAL (Screen Reader Abstraction Library), working with NVDA, JAWS, or Windows SAPI.
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).
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
- HUD — Subtitle reading, notification announcements, compass info
- 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
- Stewie Tweaks
- Text Input — Name entry and other text fields
Press H in most menus to hear detailed item card information (stats, effects, weight, value).
Object Scanner
Scan the world around you to find and navigate to nearby objects. Activated from the gameplay HUD (no menu open).
| Key | Action |
|---|---|
| Numpad 5 | Scan nearby objects |
| Page Up / Page Down | Cycle through scan results |
| Home | Look at selected object |
| End | Walk to selected object (starts AutoWalk) |
| Ctrl+Shift+Home | Announce detailed object info |
Categories — Cycle through scan filters with repeated Numpad 5 presses: 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 location hands-free.
- Uses the game's native navmesh pathfinding system
- Smooth rotation and movement with walk/run speed matching
- Stuck detection with automatic re-pathing
- Road network routing for long-distance outdoor travel — follows roads between distant locations
- Cancel anytime with WASD, Escape, or Space
- Press R to repeat the destination name while walking
HUD Notifications
Automatically speaks HUD notifications as they appear, including:
- XP gains, quest updates, location discovery
- Subtitle text from NPC dialogue and ambient speech
Requirements
- Fallout: New Vegas (v1.4.0.525+)
- xNVSE (latest version)
- JIP LN NVSE — required; used for raycasts, menu events, and extended game APIs
- itr-nvse — required; FalloutNVAccess subscribes to its
ITR:OnCornerMessageevent to read HUD corner notifications (item pickups, XP gains, generic popups). Without itr-nvse the plugin still loads, but at startup it logs an error and announces "itr N V S E is not installed — corner notifications will not be read." Other features keep working; only corner-message capture is lost. Available at https://www.nexusmods.com/newvegas/mods/96922 - Vanilla UI Plus — required for menu accessibility; tile paths and trait bindings target the VUI+ menu layout
- A screen reader: NVDA (recommended), JAWS, or Windows SAPI
Installation
- Install xNVSE if you haven't already
- Copy
FalloutNVAccess.dlltoData\NVSE\Plugins\ - Launch the game — you should hear "FalloutNV Access loaded" at the main menu
If using Mod Organizer 2, place the DLL under your mod folder at NVSE\Plugins\FalloutNVAccess.dll.
Building from Source
Prerequisites
- Visual Studio 2022 (Build Tools v143)
- CMake
- just command runner
Build
just sral # Build SRAL static library
just build # Build Release DLL
The output DLL is at Release/FalloutNVAccess.dll.
Set the XSE_FONV_MODS_PATH environment variable to your MO2 mods directory and the post-build step will auto-install the DLL.
Other build commands:
just build Debug # Debug build
just rebuild # Clean + build
just clean # Clean build artifacts
Architecture
FalloutNV Access is a 32-bit xNVSE plugin DLL. It hooks into 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 smooth rotation and road network routing
- RoadNetwork — Graph of road waypoints for long-distance outdoor navigation
- HUD Notification Hooks — Intercepts subtitle and notification display for TTS
Dependencies
- xNVSE — Script extender API and reverse-engineered game class headers
- SRAL — Screen reader abstraction library (built as static lib)
- itr-nvse (runtime, not build) — third-party NVSE plugin whose
ITR:OnCornerMessageevent we consume for HUD notification capture. TheirHUDMainMenu::ShowNotifyhook covers every corner message the engine displays with a robust instruction-decoding trampoline; we listen rather than reimplement to avoid hook conflicts at the same address.
License
This project is licensed under the MIT License. SRAL is licensed under its own terms (see lib/SRAL/LICENSE).