2026-08-01 22:25:09 +02:00
|
|
|
|
# Accessibility mod — Sulphur Memories: Alchemist
|
|
|
|
|
|
|
|
|
|
|
|
Blind-accessibility mod adding screen-reader speech, an object tracker, tile
|
|
|
|
|
|
exploration and directional wall tones.
|
|
|
|
|
|
|
|
|
|
|
|
Speech goes through **Tolk**, so it uses your running screen reader (NVDA, JAWS,
|
|
|
|
|
|
System Access) and falls back to SAPI 5 if none is running.
|
|
|
|
|
|
|
|
|
|
|
|
## Running
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
"C:\Program Files\LOVE\love.exe" "D:\code\Sulphur Memories Alchemist 0.4.2 sanctified"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Use `lovec.exe` instead of `love.exe` to get a console window — every spoken line
|
|
|
|
|
|
is mirrored there, which is useful for reporting bugs.
|
|
|
|
|
|
|
|
|
|
|
|
The TTS libraries live in `accessibility/lib/` and are loaded by absolute path,
|
|
|
|
|
|
so nothing needs installing or copying into Program Files.
|
|
|
|
|
|
|
|
|
|
|
|
If speech does not work, check the console for the startup self-test:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
[accessibility] TTS: available
|
|
|
|
|
|
[accessibility] speech channel: yes
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
`speech channel: NO` means Tolk loaded but found no screen reader and no SAPI.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Keys added by the mod
|
|
|
|
|
|
|
|
|
|
|
|
All of these are **in addition to** the game's own controls, and none of them
|
|
|
|
|
|
replace a key the game uses.
|
|
|
|
|
|
|
|
|
|
|
|
### Reading the message log
|
|
|
|
|
|
|
|
|
|
|
|
| Key | Action |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `[` | Previous message |
|
|
|
|
|
|
| `]` | Next message |
|
|
|
|
|
|
| `Shift+[` | Oldest message |
|
|
|
|
|
|
| `Shift+]` | Newest message (and resume following new messages) |
|
|
|
|
|
|
| `\` | Repeat the current message |
|
|
|
|
|
|
| `Shift+\` | Copy the current message to the clipboard |
|
|
|
|
|
|
|
|
|
|
|
|
New messages are spoken automatically. Pressing any key that does something in
|
|
|
|
|
|
the game cancels whatever is still queued, so you are never stuck listening to a
|
|
|
|
|
|
backlog. While you are moving through the history, new messages do **not** drag
|
|
|
|
|
|
the cursor away — press `Shift+]` to return to the newest.
|
|
|
|
|
|
|
|
|
|
|
|
### Looking around
|
|
|
|
|
|
|
|
|
|
|
|
| Key | Action |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `/` | Scan all eight neighbouring tiles, clockwise from north |
|
2026-08-02 02:03:32 +02:00
|
|
|
|
| `Shift+/` | Cycle automatic announcements of what comes in and out of view |
|
2026-08-01 22:25:09 +02:00
|
|
|
|
| `;` | Where am I — area name, in-game date and time, coordinates |
|
|
|
|
|
|
| `Ctrl` + numpad `1`–`9` | Describe the tile in that direction without moving |
|
|
|
|
|
|
| `Ctrl` + numpad `5` | Describe the tile you are standing on |
|
|
|
|
|
|
|
2026-08-02 02:03:32 +02:00
|
|
|
|
#### Announcing things as they come into view (`Shift+/`)
|
|
|
|
|
|
|
|
|
|
|
|
`/` tells you what is around you *now*. `Shift+/` decides how much of that
|
|
|
|
|
|
happens by itself as you walk, cycling three settings:
|
|
|
|
|
|
|
|
|
|
|
|
- **View announcements when you stop** *(the default)* — changes pile up while
|
|
|
|
|
|
you are moving and are read out once you have stood still for a moment. A
|
|
|
|
|
|
single step reports as soon as the step lands. A ten-tile walk gives you **one
|
|
|
|
|
|
combined summary at the end** rather than ten reports on top of each other,
|
|
|
|
|
|
and it is a *net* change: something that came into view halfway along and went
|
|
|
|
|
|
out again before you stopped is not mentioned.
|
|
|
|
|
|
- **View announcements on every step** — each step reports its own change. Best
|
|
|
|
|
|
when you are creeping along carefully; too talkative for crossing a room.
|
|
|
|
|
|
- **View announcements off**.
|
|
|
|
|
|
|
|
|
|
|
|
You hear things arriving — `In view: a rat, 4 tiles north-east. barrel, 3,
|
|
|
|
|
|
nearest 2 tiles east` — and creatures leaving: `Out of view: a rat`. Only
|
|
|
|
|
|
creatures are reported when they leave. Furniture drops out of sight constantly
|
|
|
|
|
|
as walls come between you and it, and being told the bed is out of view every
|
|
|
|
|
|
other step would bury everything useful; a creature you can no longer see is
|
|
|
|
|
|
worth knowing about.
|
|
|
|
|
|
|
|
|
|
|
|
These announcements are queued rather than urgent, so anything you asked for
|
|
|
|
|
|
yourself is spoken first, and any key that acts in the game clears them.
|
|
|
|
|
|
|
|
|
|
|
|
Nothing outside your current field of view is ever reported.
|
|
|
|
|
|
|
2026-08-01 22:25:09 +02:00
|
|
|
|
The game's own examine mode (**`x`**) is also fully spoken: the arrow keys move a
|
|
|
|
|
|
cursor around the map and each tile is described with its distance and direction
|
|
|
|
|
|
from you. Press `f` in examine mode to jump between exits.
|
|
|
|
|
|
|
|
|
|
|
|
### Object tracker
|
|
|
|
|
|
|
|
|
|
|
|
Finds everything you have seen, sorted by distance.
|
|
|
|
|
|
|
|
|
|
|
|
| Key | Action |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `Ctrl+PageUp` / `Ctrl+PageDown` | Previous / next **category** |
|
|
|
|
|
|
| `PageUp` / `PageDown` | Previous / next **kind** of thing in that category |
|
|
|
|
|
|
| `Shift+PageUp` / `Shift+PageDown` | Previous / next **instance** of that kind |
|
|
|
|
|
|
| `Home` | Distance, direction, and number of steps by path |
|
2026-08-02 01:00:25 +02:00
|
|
|
|
| `Ctrl+Home` | Walk to it |
|
2026-08-01 22:25:09 +02:00
|
|
|
|
|
|
|
|
|
|
Categories: Creatures, Items, Alchemy, Interactables, Exits, Terrain features.
|
|
|
|
|
|
|
|
|
|
|
|
So `Ctrl+PageDown` to reach "Creatures", `PageDown` to move between rat / beetle
|
|
|
|
|
|
/ guard, and `Shift+PageDown` to step through the individual rats. `Home` gives
|
|
|
|
|
|
you the walking distance, which indoors is often very different from the
|
|
|
|
|
|
straight-line distance.
|
2026-08-02 01:00:25 +02:00
|
|
|
|
|
|
|
|
|
|
`Ctrl+Home` does exactly what left-clicking the tile does with a mouse: it queues
|
|
|
|
|
|
a walk along the game's own path. If the thing itself cannot be stood on — a
|
|
|
|
|
|
creature, a chest, a bed — you walk to the nearest tile beside it instead, and
|
|
|
|
|
|
the announcement says "next to" rather than "to". As with a mouse click, the walk
|
|
|
|
|
|
stops early if something interrupts you, and while an enemy is in view the game
|
|
|
|
|
|
only ever commits one step at a time.
|
|
|
|
|
|
|
|
|
|
|
|
Your selection sticks. The list is rebuilt and re-sorted by distance every turn,
|
|
|
|
|
|
but the tracker follows the thing you picked rather than the slot it was in, so a
|
|
|
|
|
|
rat you are tracking stays selected as it moves around. It is only let go when it
|
|
|
|
|
|
genuinely stops being visible.
|
2026-08-01 22:25:09 +02:00
|
|
|
|
|
|
|
|
|
|
The tracker only ever reports things you have actually seen.
|
|
|
|
|
|
|
2026-08-02 01:04:03 +02:00
|
|
|
|
### The journal (`j`)
|
|
|
|
|
|
|
|
|
|
|
|
The journal has three parts, and all three are spoken:
|
|
|
|
|
|
|
|
|
|
|
|
| Key | Moves |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `q` / `e` | Between tabs — Quests, Lore, Bestiary, Components, Recipes, Tutorials |
|
|
|
|
|
|
| Up / Down | Between entries in the current tab |
|
|
|
|
|
|
| Left / Right | Between pages of the selected entry |
|
|
|
|
|
|
|
|
|
|
|
|
Selecting an entry reads its title, its position in the list, and then the text
|
|
|
|
|
|
of the page itself. The tab name is only spoken when you change tabs, and the
|
|
|
|
|
|
title only when you change entry, so flipping pages doesn't make you sit through
|
|
|
|
|
|
the heading again.
|
|
|
|
|
|
|
|
|
|
|
|
Long entries run to several pages; you are told `page 2 of 3` when there is more
|
|
|
|
|
|
than one. The page text also goes into the message history, so `[` and `]` will
|
|
|
|
|
|
walk back through it and `\` re-reads a line — useful for a long lore entry you
|
|
|
|
|
|
want to take in a piece at a time.
|
|
|
|
|
|
|
2026-08-02 02:59:21 +02:00
|
|
|
|
### The inventory (`i`)
|
|
|
|
|
|
|
|
|
|
|
|
Moving the cursor reads the item under it, or `empty`, plus the slot number:
|
|
|
|
|
|
`a torch, slot 3`. `q` / `e` change tab, and the tab name is spoken when it
|
|
|
|
|
|
changes. An item you are currently wearing, wielding or have switched on is read
|
|
|
|
|
|
as `equipped`.
|
|
|
|
|
|
|
|
|
|
|
|
Pressing enter (or `z`) on an item opens a small menu of the things you can do
|
|
|
|
|
|
with *that* item right now — the list is different for every item, and changes
|
|
|
|
|
|
with its state. It is read as, for example:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
a torch, actions, Switch on, 1 of 2
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Up and Down move through the actions, enter performs the selected one, and any
|
|
|
|
|
|
other key closes the menu without doing anything. After the action runs you hear
|
|
|
|
|
|
the item again, so `Switch on` is followed by `a torch, equipped, slot 3` — that
|
|
|
|
|
|
is your confirmation it worked.
|
|
|
|
|
|
|
|
|
|
|
|
Some items have no actions at all (plain crafting reagents, for instance). For
|
|
|
|
|
|
those, enter does nothing whatsoever in the base game — not even a click — so the
|
|
|
|
|
|
mod says `a pinch of sulphur, no actions` rather than leaving you wondering
|
|
|
|
|
|
whether the key registered.
|
|
|
|
|
|
|
|
|
|
|
|
Common actions include Activate, Wield, Unwield, Wear, Take off, Switch on,
|
|
|
|
|
|
Switch off, Drink, Eat, Apply, Read, Open, and Prepare for throwing / Pack away.
|
|
|
|
|
|
**Equipping is done from here** — there is no separate equipment screen.
|
|
|
|
|
|
|
2026-08-01 22:25:09 +02:00
|
|
|
|
### Your character
|
|
|
|
|
|
|
|
|
|
|
|
| Key | Action |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `'` | Health and active effects |
|
|
|
|
|
|
| `,` | Currently selected action |
|
|
|
|
|
|
|
|
|
|
|
|
You are also told automatically when you take damage or are healed.
|
|
|
|
|
|
|
|
|
|
|
|
### Wall tones
|
|
|
|
|
|
|
|
|
|
|
|
Each step you take, a tone sounds from the direction of any wall within five
|
|
|
|
|
|
tiles, positioned in 3D so you can hear where it is. Further walls are louder.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Reporting problems
|
|
|
|
|
|
|
|
|
|
|
|
Run with `lovec.exe` and include the console output. Lines beginning `[speech]`
|
|
|
|
|
|
show exactly what was spoken and when:
|
|
|
|
|
|
|
|
|
|
|
|
- `[speech]!` — interrupted whatever was being said
|
|
|
|
|
|
- `[speech]*` — urgent alert, spoken immediately
|
|
|
|
|
|
- `[speech] ` — queued normally
|
|
|
|
|
|
|
|
|
|
|
|
If something is **silent that should not be**, that is the most useful thing to
|
|
|
|
|
|
report, together with the screen you were on and the key you pressed.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## For developers
|
|
|
|
|
|
|
|
|
|
|
|
See `accessibility/docs/` — start with `docs/README.md`, and read
|
|
|
|
|
|
`docs/scratch.md` first if you are picking the work up mid-stream.
|