v1.4.6
Update with the installer, not with F5. This release replaces the speech library — Tolk is gone, Prism takes its place — and the in-game F5 update in v1.4.5 only ever fetches the mod file. It would install this version without the new library, and the mod would then start up with nothing to speak through: silent, unable to say what went wrong, and unable to update itself out of it again, since F5 also lives in the part that has gone quiet. Download AccessibleArenaInstaller.exe from this release and run it instead. It puts both files in place, and it takes the old Tolk files out. From this version on, F5 carries the speech library along with it and this stops being something you have to think about.
Speech:
-
Speech now goes through the Prism library instead of Tolk. Tolk reached NVDA, JAWS and Narrator; Prism reaches those plus ZDSR, PC-Talker, BoyPC Reader, Sense Reader, ZoomText, UIA and SAPI through one interface — the Asian screen readers that were the whole reason this switch sat on the wish list are now supported. Nothing about how the mod speaks changed: announcement priorities still decide what interrupts and what queues, and your screen reader's own queue still does the sequencing. The old blocker turned out not to apply — the official Prism .NET binding needs .NET 10, but the mod does not use it; it talks to Prism's C interface directly, which .NET Framework 4.7.2 handles fine.
-
The mod now speaks even when no screen reader is running. Prism falls through to Narrator's voice or the Windows system voice, where Tolk simply went silent. That makes the mod usable while a screen reader is restarting, and gives a new user something to hear before they have one set up.
-
New setting "Speech output" (F2). Leave it on Automatic to use whichever screen reader is running, or pick a specific output. The read-back names what is actually speaking, so choosing a reader that is not running says so instead of leaving you guessing — for example "JAWS, not available, using NVDA".
-
New setting "Critical alerts via system voice", on by default. Critical alerts are spoken by the Windows voice rather than your screen reader, so your own keypresses cannot cut them short. They arrive in a second, different voice; turn the setting off (F2) if you would rather have everything in one voice. "System voice volume" sets how loud that second voice is.
-
One file instead of two:
prism.dllreplacesTolk.dllandnvdaControllerClient64.dll. Prism links its NVDA bridge in and finds the other readers' client libraries itself. Installing removes the old Tolk pair, and uninstalling removes whichever of them is present, so upgrading leaves nothing behind. The shipped build carries crash-safety fixes for users who have ZDSR, PC-Talker or BoyPC Reader installed at a version that would otherwise take the game down during startup. -
Updating to this version brings the speech library with it. Both update paths used to move the mod file alone, which was correct for every release until this one — and wrong for exactly this one, because it is the release that swaps Tolk for Prism. The installer's "update only" option deliberately skipped the speech files on the grounds that they never change, and F5 inside the game downloads the mod file and nothing else. Either would have left you with a mod that has no library to speak through: it would have started up, found nothing, and gone silent, with no way to tell you why or to be updated again from inside the game. The installer now refreshes the speech library on an update as well as a fresh install, and F5 fetches it alongside the mod, replacing it only when it actually differs from the one you have. If the library cannot be fetched, the update stops instead of finishing into silence.
-
Card names with accents, umlauts or non-Latin scripts are handled explicitly on the way to the speech library. Prism rejects text that is not valid UTF-8 and drops the whole announcement when it sees any, which is a silent failure — so the encoding is now pinned down by tests rather than by luck.
Duel:
-
Battlefield focus no longer slides onto a different card behind your back. Position in a row was a plain counter into a list that gets rebuilt and re-sorted left-to-right on every refresh — and pressing Enter forces exactly such a refresh. So acting on one of several identical permanents moved the ground under you: the stack split into two entries, or the game simply slid the permanents around as one tapped or stepped forward to attack, and "the third one" now meant a different creature. You could not work through five tokens by pressing Enter and arrowing along; every press meant working out where you had ended up. Focus is now pinned to the card itself rather than to its slot, and is re-found after each rebuild — including when the game merges your card back into a stack, where focus follows to the entry that now represents it. This is the same approach that has been keeping the Tab order stable. Position numbers can still shift as the board re-sorts; what changed is that the card under your focus stays the card you were on.
-
Ctrl+Enter on a stacked entry now works everywhere, not just in combat. Only the declare-attackers and declare-blockers steps accept the game's stack-count badge — every other situation refuses it outright, so choosing four of your six Tentacles as targets, or tapping three of five identical creatures, meant one press per copy with a re-orientation in between. Where the badge is refused, the mod now clicks the stack's cards one after another instead: the same clicks a sighted player makes on a fanned-out stack, sent one at a time and each one accepted or refused by the game's own logic exactly as a mouse click would be. Each click waits for the game to be ready for it rather than going out on a timer — picking targets is a round trip to the server, and the game refuses every click made while one is still in flight, so clicks sent on a fixed rhythm were thrown away and only the first of them selected anything. Copies you already picked yourself are left alone instead of being un-picked. The run stops the moment the game moves on — once an effect has the number of targets it asked for, the remaining clicks are dropped rather than landing in whatever came next — and reports what actually happened ("3 of 5 clicked"). Any key press cancels a run in progress. Needs the "Battlefield stacking" setting; on a card that is not stacked, Ctrl+Enter is still just Enter.
-
Stepping to the next copy after acting on one no longer hands you back a copy you already used. When you press Enter on one of several identical permanents, focus moves on to the next one — but it moved to the next card that merely shared the name, with no check on what state that card was in. Once a few copies were declared, that regularly meant landing back on a creature already set to attack, where the next Enter quietly took it out of combat again. Which copy is untouched is now decided by comparing states: a copy still sitting in the state the clicked card was in before you pressed Enter is one you have not used, and a copy already in the state it ended up in is one you have. When every copy is done, focus simply stays where it is instead of moving somewhere wrong.
-
Selection state moved to the front of the battlefield announcement, straight after the card name. When you are picking several targets out of a wide row, whether a copy is already chosen is the one thing you are listening for, and it used to sit behind combat state, attachments and targeting — far enough back that checking it cost a full read of the line.
-
Costs you pay while casting a spell — ward, and additional costs like "discard a card" — can now actually be paid. Targeting a creature with "Ward — discard a card" and answering Yes left you stuck: Tab reported nothing to choose from, Enter on a card in hand said it could not be played, and cancelling the spell was the only way out. The mod recognized "pick a card" states by the game's counted confirm button ("1 confirm"), but a cost paid mid-cast shows no such button — the game promotes Cancel to the primary button instead — and it puts no visible highlight on the cards either, so both of the ways the mod looks for a choice came up empty and Enter fell back to trying to cast the card. The mod now asks the game's own interaction logic which cards it would accept a click on, the same question a mouse click answers, so those cards are listed on Tab and a single Enter pays the cost. The instruction the game shows ("Discard a card") is read out when the payment starts, as it already was for discards that happen on resolution.
-
Space during a Yes/No prompt no longer clicks a button belonging to something else. On prompts like the ward question, Space fell through to the duel's main prompt button, which at that moment was still the targeting confirm underneath the dialog — so the answer you had focused was never sent and the prompt just sat there. Space now activates the focused answer, the same as Enter, matching how it already worked for the other direct-choice prompts.
-
"You may cast the exiled card" prompts can be turned down again. Chandra, Torch of Defiance's plus one exiles a card and offers it to you; if you could not pay for it, there was no way to say no. Space cast it, the spell then asked for a target you did not have, cancelling put the card back, and the offer came straight back — round and round. Two things were wrong. First, the confirm safety on these prompts was only pretending: it announced "press Space again to confirm", but the game's own keyboard handling had already taken that same press and cast the card, so the warning described a decision that was over. The mod now keeps the game out of Space for the whole visit to that prompt, so the first press really does only warn. Second, the escape hatch added in v1.2 for Tinybones-style "may cast" triggers only recognised the trap when a target had already been picked for you. On Chandra's version nothing is selected, so it did not match, and Backspace fell through to a cancel button that these prompts do not have — it did nothing at all. Backspace now covers both shapes: press it twice and the trigger is declined, which for Chandra means she deals her two damage instead. The prompt's hint (Ctrl+F1) mentions Backspace now, which it previously did not.
-
The card a "you may cast" prompt is offering can now be heard. Tab in a card-selection browser walks only the cards the game will accept a click on, which is right in a library search where three cards out of eighty are legal picks — but when the exiled card turns out to be uncastable, nothing at all is legal, and the filter hid the browser's entire contents. Tab was a dead key: press after press produced silence, and the only thing that eventually happened was Tab leaving for another zone. So you were asked whether to cast a card you were never told the name of. When no card in the browser passes the filter, all of them are offered instead, and the card is read out on entry rather than waiting for a keypress. Where some cards are legal, Tab still skips the rest exactly as before.
-
Targeting a player with V, Arrow Right, Enter no longer hits whatever was on the battlefield instead. Whether this worked came down to which zone you happened to be in before pressing V. The player info zone only moves focus onto a portrait; it does not take over the duel's zone ownership. So if you were last on the battlefield, the handler that runs first still believed the battlefield owned Enter, and during a targeting prompt it clicked the card you had been parked on — announcing that card as selected, which sounds exactly like a confirmation. A "choose any target" burn spell went into your own blocker; you found out when the damage resolved. Coming from your hand via Tab, that same handler stood aside and the press reached the player, which is why the shortcut looked reliable most of the time. The player info zone now holds on to Enter for as long as it has focus.
-
Enter on a player who is not a legal target no longer toggles the opponent's mute. Once the press above had spent the targeting prompt, pressing V, Arrow Right, Enter again fell through to the mute switch, so a second attempt at targeting silently muted your opponent and a third unmuted them, with nothing said either way. While the game is asking for targets, Enter on a player either targets that player or says it cannot — it never reaches emotes or mute.
-
Cards your opponent reveals are now spoken — "Opponent Revealed Llanowar Elves", with the rules text for up to three cards at a time. Explore, "reveal the top card of your library", and the hand peeks that some black spells cause all show the card face-up to both players, and all of them were silent: a sighted opponent-facing display appeared, sat there, and vanished again with nothing said, so a public piece of information was simply not available to you. The reveal announcement had in fact been written long ago, but it read a
CardNamefield off the event that no reveal event has ever carried, so it could never produce a single word. Reveals are also not card movements — the card never leaves the library or hand, the game only shows a copy of it — so the zone-transfer machinery that announces draws, plays and deaths never saw them either. They are now read from the reveal event itself. Only the opponent's reveals are announced; your own already come through the browser you are looking at, and saying them twice would be worse than not at all. On a mass reveal, names only — a whole revealed hand with every ability text attached is not something anyone can listen through — and the "Brief opponent announcements" setting (F2) drops the rules text entirely, as it does elsewhere. Found and diagnosed by Michael Taboada (@lilmike, PR #113), who identified the event and the exact fields it hides the card behind; reimplemented here on the announcer's existing reflection helpers so that the second reveal event type the game sends cannot break it.
Verification (SHA256):
AccessibleArenaInstaller.exe:9746b56a90e1a7af26baab27c7b923ed772a7d5daf340bb96178fed9000c4721AccessibleArena.dll:0554d0ae19ddf4943f3e2fc8f973de69917df9de25954a3cca83638a79ad56e1prism.dll:000fbddb87c6696a2ed3949540ff1f88296dd7a90c0de4fb095fa21213ff319b
Verify in PowerShell with Get-FileHash <filename> -Algorithm SHA256 or in Command Prompt with certutil -hashfile <filename> SHA256.