Files
alchemist-accessibility/README.md
T

160 lines
5.4 KiB
Markdown
Raw Normal View History

# Alchemist Accessibility
A blind-accessibility mod for **Sulphur Memories: Alchemist** 0.4.2 — screen
reader speech, an object tracker, tile-by-tile exploration and directional wall
tones.
Speech goes through **Tolk**, so it uses whichever screen reader you already have
running (NVDA, JAWS, System Access) and falls back to SAPI 5 if none is.
> This repository contains **only the mod**. It does not contain the game, and
> you need your own copy. Developed against version **0.4.2**.
---
## Installing
You need the game as an *extracted source folder* — a directory with `main.lua`
and `conf.lua` in it — rather than a packed `.love` or the Steam build. The mod
loads its TTS libraries by absolute path, which cannot work from inside a
`.love` archive.
**1. Copy the `accessibility/` folder** from this repository into the game
folder, next to `main.lua`:
```
Sulphur Memories Alchemist 0.4.2/
main.lua
conf.lua
states/
models/
accessibility/ <- this repository's accessibility/ folder
```
**2. Add one line to `main.lua`.** Find `love.load()` (around line 95) and add
the marked line immediately after `console.prepare()`:
```lua
function love.load()
...
user.initialize()
states.setup()
console.prepare()
require("accessibility").initialize() --ACCESSIBILITY MOD: sole entry point
local messages = require("models.messages")
```
That is the *entire* game-side change — one line. Everything else the mod does
is applied at runtime from inside `accessibility/`, which is what lets it be
lifted onto a new game version cheaply.
The placement matters: by that point templates are preprocessed, keybindings are
loaded, `states.setup()` has run and the console canvas exists, and it is still
before the first `states.switch()`.
If you prefer, `install.patch` in this repository applies the same change:
```
git apply install.patch # from inside the game folder
```
**3. Run the game.**
```
"C:\Program Files\LOVE\love.exe" "C:\path\to\Sulphur Memories Alchemist 0.4.2"
```
You should hear "Main menu" once it loads.
---
## Checking it works
Run with **`lovec.exe`** instead of `love.exe` to get a console window. Every
spoken line is mirrored there, and at startup the mod prints a self-test:
```
[accessibility] TTS initialised
[accessibility] TTS: available
[accessibility] speech channel: yes
[speech]! Main menu
```
- `TTS: UNAVAILABLE` — the DLLs in `accessibility/lib/` were not loadable.
- `speech channel: NO` — Tolk loaded but found no screen reader and no SAPI, so
nothing will be audible.
The self-test also reports every patch and every menu probe. If a future game
version renames something the mod reads, it shows up here at startup as
`PROBE BROKEN: no upvalue 'x'` rather than as silence three screens into a
playthrough.
---
## What it adds
Full key list and explanation: **[`accessibility/README.md`](accessibility/README.md)**.
In brief:
| | |
|---|---|
| **Message log** | `[` / `]` walk back and forth, `\` repeats, `Shift+\` copies. New messages are spoken automatically. |
| **Looking around** | `/` scans all eight neighbours, `;` says where you are, `Ctrl`+numpad probes one direction without moving. The game's own examine mode (`x`) is fully spoken. |
| **Object tracker** | `PageUp`/`PageDown` with `Ctrl`/`Shift` to move through categories, kinds and instances; `Home` for distance and path length; `Ctrl+Home` to walk there. |
| **Your character** | `'` for health and effects, `,` for the selected action. Damage and healing are announced unprompted. |
| **Wall tones** | Each step, a tone sounds from the direction of any wall within five tiles, positioned in 3D. |
| **Menus** | All 23 screens are spoken, including the journal's page text, inventory, crafting, dialogue and the options screens. |
The tracker never reports anything outside the game's own field of view or your
remembered map — it is an accessibility aid, not a cheat.
---
## Reporting problems
Run with `lovec.exe` and include the console output. `[speech]` lines show
exactly what was said and when — `!` interrupted, `*` urgent, ` ` queued.
The most useful report is **something that was silent when it should not have
been**, together with the screen you were on and the key you pressed.
---
## For developers
Start with [`CLAUDE.md`](CLAUDE.md) for orientation, then
[`accessibility/docs/`](accessibility/docs/) — `docs/README.md` maps it, and
`docs/scratch.md` is the living handoff document with the current state of play
and the traps already discovered.
There is a code-driven test harness that plays the game by itself and checks
what gets spoken:
```
"C:\Program Files\LOVE\lovec.exe" . --a11y-test
```
Design goal throughout: **change as little game code as possible**, so the mod
re-applies cleanly to a new game version.
---
## Credits and licensing
The mod is built on [love2talk](https://github.com/rustyoldrake/love2talk)
(vendored in `accessibility/vendor/love2talk/`, see `VENDORED.md` there for the
local modifications and the licence).
`accessibility/lib/` contains:
- **Tolk** — screen reader abstraction, LGPL 3.0
- **nvdaControllerClient64.dll** — NVDA controller client
- **SAAPI64.dll** — System Access API
These ship with the mod because Tolk loads them through the OS loader, so they
must sit on disk beside the game rather than inside an archive.
*Sulphur Memories: Alchemist* is the property of its developers and is not
included or redistributed here.