A screen-reader accessibility mod for Graveyard Keeper (Unity / Mono), built on BepInEx 5 + HarmonyX, speaking through Tolk (NVDA, SAPI, etc.). It patches the game at runtime and never modifies the game's own files — BepInEx only adds files alongside the executable.
⚠️ Work in progress — not yet playable. The main menu is fully verified, and most narration (dialogue, inventory, crafting, management) is implemented, but the mod has not had a full in-game pass yet. There are no releases; install only if you want to follow development or contribute testing.
The roadmap distinguishes these verification levels:
- In-game verified: tested in the real game with NVDA/Tolk.
- Implemented/build-verified: code exists and
dotnet build src/GraveyardAccessibility.csproj -c Releasesucceeds, but still needs a full in-game pass.
| Phase | Status | Included now |
|---|---|---|
| 0 — main menu | Done, in-game verified | Mod load speech, focused menu entries, mouse hover, confirmation dialogs. Menus are driven by gamepad or mouse; the game disables arrow-key menu navigation in mouse/keyboard mode. |
| 1 — dialogue/story | Mostly done, build-verified | NPC/player and object-anchored speech bubbles, CornerTalkGUI narrator/thought messages, focused answer options, text windows, cinematic/perspective text, tutorials, and the new-body-arrived notification. |
| 2 — inventory/tooltips | Mostly done, build-verified | Item cells, inventory/chest/toolbar focus, visible tooltips, collected drops, item count selector, equip-to-toolbar flow. Money pickup and any direct toolbar-only edge cases still need coverage. |
| 3 — management | Mostly done, build-verified | Crafting menus including special resource/mixed/alchemy flows, vendors, tech tree and tech unlock dialogs, body/grave/soul screens, prayer crafting/report flows, in-game menu categories, map and NPC list summaries. Needs a full in-game pass for verbosity and edge cases. |
| 4 — HUD/status | Partially implemented/build-verified | View/Back + RT reads the visible HUD state on demand: day, approximate time, energy and health. The localized loading label is announced. Quests, buffs, sleep/wait and options controls remain pending. |
| 5 — real-time world | Partially implemented/build-verified | Positional sonar, the navigable nearby-object list, and localized interaction-prompt narration exist but still need a full in-game pass. Area announcements, virtual cursor, fishing and dungeon support remain pending. |
- docs/arquitectura-menu-inicial.md — engine analysis, the
steam_appid.txtrequirement, and the gamepad-vs-keyboard finding. - docs/roadmap-accesibilidad.md — the phased plan for the rest of the game (dialogue, inventory, crafting, HUD, world) with verified Harmony anchor points.
- docs/graveyard-keeper.md — original engine viability study.
- Have a screen reader running (NVDA recommended).
- Run
install.batand approve the administrator prompt. It finds your Steam copy of Graveyard Keeper automatically (or asks for the path) and copies the mod in. - Launch the game. The first launch is slower than usual while BepInEx initializes. You should hear "Graveyard Keeper accessibility loaded." at the main menu.
To remove it, run uninstall.bat. It deletes only the files the mod added, leaving
the game exactly as it was.
Game text (item names, dialogue, menus) is always spoken in the game's own language.
The mod's own announcements (prefixes like "Craft queue", sonar categories,
directions) default to English. To switch them, set Language = es (or another
code) under [General] in BepInEx/config/com.accessibility.graveyardkeeper.cfg —
the mod then loads BepInEx/plugins/lang/<code>.lang, falling back to English for
any key the file does not define. A Spanish translation (es.lang) ships with the
mod; to add another language, copy it, translate the values, and keep the keys.
- Press and release View/Back (the former Select button) to open the in-game inventory/menu as usual. The action occurs on release so the button can also act as an accessibility modifier.
- Hold View/Back and press RT to hear the current day and weekday symbol, approximate position in the day/night cycle, and energy and health rounded to the nearest 10%. This matches the precision of the visual clock and unlabelled bars.
- Use LB/RB while exploring to browse the nearby-object list. These buttons retain their normal tab-switching behavior inside menus.
Requirements: .NET SDK (8.0+) and a local copy of the game at Graveyard_Keeper/
(kept out of git). BepInEx must already be unpacked into plugin/ (see below).
dotnet build src/GraveyardAccessibility.csproj -c Release
The build drops GraveyardAccessibility.dll straight into
plugin/BepInEx/plugins/, so the plugin/ tree is always a ready-to-ship package.
dev-install.bat installs the mod into the repo's own Graveyard_Keeper/ test
copy (not the Steam install) so you can iterate without touching your Steam files.
dev-uninstall.bat removes it again. These target Graveyard_Keeper/ next to the
script and need no admin rights. Rebuild, run dev-install.bat, launch the game.
The regular install.bat / uninstall.bat are for distribution: they
auto-detect the Steam copy. Internally both installers accept -GameDir <path> to
override the target folder; the dev scripts just pass the local copy's path.
src/ C# source (this repo's code)
plugin/ The distributable mod, copied verbatim into the game folder
winhttp.dll BepInEx doorstop
Tolk.dll Screen-reader bridge (lives in game root for P/Invoke)
nvdaControllerClient64.dll
BepInEx/
core/ BepInEx + HarmonyX (unpacked from the official release)
plugins/
GraveyardAccessibility.dll ← our compiled plugin
installer/ PowerShell install/uninstall logic
install.bat / uninstall.bat
docs/ Engine analysis and phase notes
Graveyard_Keeper/ Local game copy (gitignored — never committed)
BepInEx's own binaries are not committed. Download
BepInEx 5.4.x x64 and extract it into
plugin/, then build (the plugin DLL is produced by the build). Tolk.dll and
nvdaControllerClient64.dll are already committed in plugin/.
This mod's own code and documentation are released under the MIT License.
Bundled third-party binaries keep their own licenses:
- Tolk (
Tolk.dll) — LGPL-3.0, © Davy Kager. nvdaControllerClient64.dll— LGPL-2.1, © NV Access.- BepInEx (not committed; downloaded at setup) — LGPL-2.1.
Graveyard Keeper itself is © Lazy Bear Games; this project contains no game assets or game code.