No description
  • C++ 86.3%
  • Python 13.1%
  • C 0.5%
Find a file
Alexander Epaneshnikov 74c917379a MCMMenu: keyboard activation via held focus, slider/dropdown popups, panel nav
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>
2026-06-02 18:58:01 +03:00
.claude Update Ghidra MCP tool list to consolidated themixednuts set 2026-05-09 18:18:32 +03:00
cmake Integrate SRAL and speak hello message on plugin load 2026-02-03 18:46:10 +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 Use NVSE as git submodule, install to MO2 mods dir 2026-02-03 16:50:09 +03:00
src MCMMenu: keyboard activation via held focus, slider/dropdown popups, panel nav 2026-06-02 18:58:01 +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 Use NVSE as git submodule, install to MO2 mods dir 2026-02-03 16:50:09 +03:00
CLAUDE.md docs: document calling plugin script commands from C++ 2026-05-28 17:06:09 +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 HUDNotifications: migrate corner-message capture to itr-nvse event 2026-05-27 13:05:46 +03:00
justfile Integrate SRAL and speak hello message on plugin load 2026-02-03 18:46:10 +03:00
LICENSE Add MIT license and update README license section 2026-03-22 10:42:51 +03:00
README.md HUDNotifications: migrate corner-message capture to itr-nvse event 2026-05-27 13:05:46 +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 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:OnCornerMessage event 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

  1. Install xNVSE if you haven't already
  2. Copy FalloutNVAccess.dll to Data\NVSE\Plugins\
  3. 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:OnCornerMessage event we consume for HUD notification capture. Their HUDMainMenu::ShowNotify hook 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).