v1.4.2
Duel:
- New "you have priority" announcement for the moments the game otherwise only signals silently. When you gain a window to act and nothing else already told you, the mod now speaks "Du hast Priorität" / "You have priority". This targets the easy-to-miss case where the opponent casts a spell or activates an ability and you could respond with an instant, but no phase change or prompt announced it — so without a visual cue you could sit there not realizing you could act. The signal is the game's own: MTGA wraps each free-priority window in an
ActionsAvailableWorkflow(it plays a "gain priority" sound and logsPriorityReceived()when that workflow applies), and that workflow is only the "respond or pass" state — forced decisions (choose targets, declare attackers/blockers, discard) are separate workflows that already carry their own prompts. The mod watchesGameManager.CurrentInteractionfor that workflow and announces on the rising edge. To stay helpful rather than chatty it announces only when there is something on the stack to react to — your own just-cast spell (so you can protect or chain it) or the opponent's spell/ability — read live via the existing timing-safe stack-holder count; an empty stack (after a land, at the start of your phase, or passed to you with nothing pending) stays silent. It also suppresses within ~2 s of a phase/turn change or a prompt (those already imply you can act) and debounces rapid re-fires. Fires on both your turn and the opponent's. New setting Announce priority (F2, on by default) turns it off. - The opponent's command zone (Shift+W) now reads the opponent's commander as a full, live card — actual cost (including commander tax) rather than just the printed cost, with the extended-info menu (I), counters (K), and attachment/target jumps (J) all working, exactly as on any other card. Partner commanders are supported: Shift+W lists both and Left/Right walks between them. The old approach read the commander identity from
MatchManager.PlayerInfo.CommanderGrpIds, a private property the game removed in update 2026.60 — so since the v1.4.1 hotfix the opponent command zone announced "empty" even in Brawl. It also relied on a secondary zone-event tracker that mis-tagged opponent commanders as the player's own (theirControllerIdis 0). The zone is now sourced live from the game state, mirroring Arena's own commander-examine path:GameManager.CurrentGameState.Opponent.CommanderIdsgives the commander instance IDs,ViewManager.TryGetCardViewresolves each to the real card view (the sameDuelScene_CDCobject the mod drives everywhere, so the whole card pipeline works for free), and the card database is the fallback by GrpId when no live view exists. Only commanders actually in the command zone are shown — once cast, the commander correctly drops off Shift+W and is found on the battlefield. These are central, long-lived APIs, so the feature is far less fragile to future game updates than the removed private property was. - Duel action prompts now carry the game's own instruction text when it adds context. When the highlighted prompt button is announced (e.g. on a ward cost, a "may" trigger, or a target step), the mod now appends the localized instruction the game itself shows — for example "Bezahle 2" / "Pay 2" for a ward cost, or "Choose a target" — so you hear not just the button label but what you're paying or doing and how much. The suffix is only added when it differs from the button text (no duplicate chatter) and is skipped during combat, where the phase is already announced and the changing attacker/blocker count button would otherwise repeat the instruction as noise. Deduplication still keys on the raw button text, so the extra context never adds repeats.
- Emblems in the command zone are now readable as cards (untested — well-founded but not yet verified in-game). Emblems (e.g. from planeswalker ultimates, or "The Ring") live in the command zone but have no dedicated examine widget — they are ordinary card objects (
MtgCardInstancewithObjectType == Emblem). They now appear in command-zone navigation alongside the commander: W picks up your emblems, Shift+W the opponent's, each as a full navigable card (rules text via the I menu, etc.). They are read live fromMtgGameState.Command.VisibleCards, split by controller and resolved to their card view the same way the commander is, and deduplicated against the commander so nothing is listed twice. This reuses the (confirmed-working) commander plumbing, but the emblem path itself has not been exercised in a live game, so treat it as speculative until tested with an emblem-producing card.
Bug fixes:
- Modal "choose one" cards now read each mode's specific rules text again, not just the card name. After game update 2026.60 a card's
AbilityIdscan arrive as a collection of wrapper objects/tuples (the ability id sitting on anId/Item1member) rather than a plainuint[]; the extraction only recognized the plain-uint shapes and dropped the wrapped one tonull, so the abilities couldn't be resolved and cards like split/modal "pick one" spells read as just their name with no rules text. A newExtractAbilityIdshelper now normalizes all three shapes (uint array,IEnumerable<uint>, and the wrapped-object collection), and the modalRulesTextOverridepath was likewise loosened fromIListto a plainIEnumerableso a non-IListbacking collection no longer silently yields empty override text. Contributed by @lilmike (PR #105). - Lands being played now read again. The game can fire a single
ZoneTransferUXEventdirectly rather than wrapped inside aZoneTransferGroup— e.g. a land entering the battlefield — and the bare event wasn't classified, so it fell through to "ignored" and nothing was announced. The event type map now routes a loneZoneTransferUXEventthrough the same handler, which detects it has no_zoneTransferslist to unwrap and processes it directly as the individual transfer. Contributed by @lilmike (PR #105). - Already-used permanents no longer appear in the Tab cycle of playable/activatable things. A planeswalker that already used a loyalty ability this turn, or a creature whose only ability is a
{T}:ability that is now tapped, would still be offered when tabbing — pressing Enter on it then did nothing, since the game won't accept the action. The cause was in the battlefield/hand "what can I do?" supplement, which reads MTGA's own per-card interaction list (ActionsAvailableWorkflow.GetInteractionsForId) instead of the flaky visual highlight. That list contains both available actions (_request.Actions,IsActive=true) and disqualified ones (_request.InactiveActions,IsActive=false); a disqualified free ability still carries a playable action type andCanAffordToCast=true, so the supplement — which checked only those two — surfaced it. The check now also requiresGreInteraction.IsActive, matching the game's ownHighlightUtil.GetHighlightForAction(which produces the visual glow) andCanClickgate exactly. This is a strict tightening of the supplement only (the visual-highlight scan is untouched, so targeting and selection highlights are unaffected): genuinely usable cards — the ones the supplement exists to recover when their glow fails to render — are alwaysIsActive=trueand still appear; only unusable entries are dropped.
Verification (SHA256):
AccessibleArenaInstaller.exe:a7a0227eb48f9f639b8b43a8ee1a7eb63fe08b55385a6c93c5b5e44644726ec9AccessibleArena.dll:4b7ee325d9a2a8a99f95e4de62daaeec570e710135bb8d35084e2199c43379e4
Verify in PowerShell with Get-FileHash <filename> -Algorithm SHA256 or in Command Prompt with certutil -hashfile <filename> SHA256.