v1.4.3
Duel:
- Players can now be targeted from the Player Info Zone. While a spell or ability is targeting, pressing Enter on a player you've focused with V selects that player as the target — previously Enter there only opened the emote wheel (you) or toggled mute (opponent), so players could only be targeted by tabbing to their portrait. Falls back to the old emote/mute behavior when nothing is targeting.
- Drawn cards are now announced by name. A draw speaks " drawn" for one card, or " cards drawn" followed by the names for multiple — instead of just a count. Your draws only; opponent draws stay a count (hidden information). The pre-game opening hand and mulligan redraws stay silent here, since the Mulligan browser already lists those cards.
- The T shortcut now also reads the active timer, so you only need one hotkey for the full picture. On top of the turn and phase, it appends whichever player is currently on the clock and their remaining time and timeouts — e.g. "Opponent's first main phase, turn 5. Opponent timer: 1 minute 2 seconds, 1 timeout." Only the player holding priority has a running timer, so the announced owner is the one actually counting down (often you, during the opponent's turn). When no one is on a clock (for example against the AI), the timer part is omitted. The standalone E / Shift+E shortcuts for querying a specific side are unchanged.
- Zone transfers (cards changing zones — dying, being destroyed, sacrificed, exiled, milled, discarded, returned) read consistently now. Every event maps to the game's own reason, so the wording matches what actually happened — "destroyed" for a destroyed permanent, "sacrificed" for a sacrifice, "milled"/"discarded" for those, and "died" only for creatures (non-creatures and planeswalkers read "put into the graveyard" rather than being mislabeled as dying). When several cards leave for the same reason at once — a board wipe, a mass mill — they are grouped into a single counted announcement ("Opponent's 2 cards milled: …", "3 creatures died: …") split by owner, instead of a string of separate lines or a generic "N permanents left battlefield". Combat deaths are named the same way. Previously the wording was driven by mismatched reason strings that never matched the game's values, so almost everything leaving the battlefield was announced as "died" regardless of how it actually left.
Season end / rewards:
- The end-of-season screen (shown once per monthly rank reset) is now accessible through its whole sequence. It has three phases — your final rank, the rewards you earned, then your new-season placement — advanced by one action. Previously only the two rank screens read correctly: the middle "rewards" phase went silent (it never listed what you won) and the reveal surfaced as a row of unlabeled "Button" elements, so the screen was effectively a dead end. The phase is now detected from which display objects are actually active rather than the game's
_endOfSeasonDisplayStatefield, which was observed stuck on the first phase for the entire sequence — so the rewards phase is enumerated like any other reward popup (pack set names, card names, currencies). - The rewards phase now actually reads what you earned. The reveal is animated, so when you advance into it the reward tiles don't exist yet for the first fraction of a second — the earlier build scanned once at that instant, found nothing, and read only the "Season Rewards" title. It now announces "Season Rewards, revealing, please wait" and keeps watching until the reveal finishes, then re-announces with the full list (pack set names, card names, currencies), the same way a normal reward popup reads.
- One clear action to move through it: Enter (or Space) advances to the next screen, announced as "Continuing". While the game is still playing a reveal animation — during which it silently absorbs clicks — pressing Enter now says "Revealing, please wait" instead of appearing to do nothing. Left/Right still browse multiple reward items. Backspace re-reads the current screen instead of acting as a "dismiss" (the sequence can't be dismissed mid-way, and the old behavior could silently skip an unread screen). Advancing routes through the game's background-click path, so the final screen closes cleanly without pressing "Play" (which would queue a match).
- No more repetition: identical season announcements are suppressed, so re-scans after each keypress no longer re-read the same rank/placement line over and over.
- This handling was rebuilt from a real end-of-season log and should now work, but the screen only appears once a month so it hasn't been verified live yet. Extra diagnostic logging was added around phase detection to make the next occurrence easy to check — if anything still misbehaves at your next season reset, please send the MelonLoader log so it can be fixed.
What's New popup (set releases / announcements):
- The "What's New" popup now reads the actual content of each page. Previously navigating it announced only "Page 1 of 4", "Page 2 of 4", … with no text — the page title was extracted internally but only written to the log and never spoken, and the descriptions were never read at all, so the whole screen was a dead end for a screen reader. Now the current page's title and body are announced when the popup opens, are re-read whenever you move to a different page (via the page dots), and are available as a text item you can re-read with Enter. Content is read from the popup panel itself (menu chrome behind the modal is excluded) and only the visible page is read. Note: any art, or text baked into an image rather than real text, still can't be read.
Packs:
- Wildcards opened in booster packs now read as wildcards with their rarity — "Rare Wildcard", "Mythic Rare Wildcard", and so on — instead of falling back to the navbar's vault-progress text (e.g. "+99"). A wildcard tile has no card name of its own, so the name lookup used to come up empty and the on-screen vault-progress text was read in its place. The tile's group id is now checked against the game's own
CardCategory.IsWildcard, and the rarity is read from the pack entry'sCardData.Rarity. The label prefers the game's localized wildcard term (MainNav/General/{Rarity}Wildcard, translated in some languages and English in others) and falls back to English; the Packs-screen wildcard-progress readout uses the same wording for consistency. Contributed by @lilmike (PR #108). - Gems from duplicate protection now read as gems. When a pack contains a card you already own the maximum copies of, the game replaces it with a gems award tile — these were reading as "Unknown card". They now announce the amount, e.g. "250 Gems". The game stores such tiles as a reward card with no group id and the awarded number tucked into the card's rules-text override, so the amount is read from there and paired with the localized "Gems" currency word (the same wording used elsewhere for gem prices).
- Pack tiles now include the game's own reveal tags — the small badges sighted players see on a freshly revealed card. There are exactly two, appended after the name and type line and read from the pack entry's already-localized tag list (so they appear in your game language — e.g. "Erste" and "Zeitversetzte Karten" in German — rather than always in English):
- First (
MainNav/NewTags/First_label) — this copy is new to your collection: you owned none of this card before opening the pack. It appears on most cards from a set you're still completing, so expect to hear it often. - Bonus Sheet (
MainNav/NewTags/BonusSheet_Label) — the card belongs to the set's bonus/special-guests sheet (a separate sub-set of reprints), not the main set.
Wildcards and gems tiles carry no tags, so they read exactly as before.
- First (
- Wildcard detection now uses the game's own
CardData.IsWildcardproperty (which also excludes non-wildcard "boon" objects) rather than a bare group-id check, and the stale on-screen "Vault Progress" text scraping — which misread a percentage bar as a duplicate count and belonged to a display that lives elsewhere — was removed. - The wildcard-progress bars on the pack-opening screen now read correct, meaningful numbers. The game's wildcard track is a countdown — how many more packs you must open before your next wildcard — but the earlier build scraped the visual fill bars instead, producing inconsistent and misleading output: one bar read as a fraction ("1/6") and the other as a raw fill percentage ("83%"), neither of which is the packs-remaining figure the game actually shows, and the Mythic wildcard was never mentioned at all. There are only two rings — an Uncommon ring and a shared Rare/Mythic ring — not one per rarity. Both now read as "packs to go", derived from the game's own track position (
WildcardTrack._trackPosition, i.e.Inventory.wcTrackPosition) using the game's exact arithmetic: the Uncommon bar reads e.g. "Uncommon Wildcard in 5 packs", and the Rare bar reads both countdowns it tracks, e.g. "Rare Wildcard in 1 pack, Mythic Rare Wildcard in 12 packs" (so whichever number is smaller is the one coming next). The rarity terms use the game's own localized wildcard words, and the "in N packs" wording is translated into all supported languages (with correct plural forms, including the separate 2–4 form used in Russian and Polish).
Bug fixes:
- Phase stops (keys 1-0) no longer break for the rest of a match if pressed during the mulligan. The phase-stop button map is built lazily on the first press and cached for the whole scene; during the mulligan the phase timeline isn't in the scene, so that first build produced an empty map — which then stayed cached and non-null, so it never rebuilt and every later press silently did nothing for the entire duel. The build now commits to the cache only when it actually resolved at least one phase button; a build that finds no ladder (mulligan) or no buttons leaves the cache uninitialized, so the map self-heals on the next press once the phase timeline exists. Presses during the mulligan are now harmless no-ops instead of poisoning the feature.
- Filled in the missing translations for the v1.4.2 "Announce priority" strings, which had shipped only in English and German. The other ten languages no longer fall back to English for the priority announcement and its setting.
- Turn timers read again in best-of-three. The E / Shift+E timer shortcut preferred the match clock, which in Bo3 (and other timed events) runs for the whole match and counts a large 20+ minute figure — so it drowned out the per-turn rope timer and you could never hear how much time was left on the current turn. The readout now prefers whichever player's turn (rope) timer is actually running and falls back to the match clock only when no turn timer is active. The T shortcut, which shares this logic, benefits too. Contributed by @lilmike (PR #107).
- The battle pass progress tile now reports the correct current level. It read the first numeric text box on the tile, which could actually be the pending reward value — so when the next reward was a number like Gold or an ICR count, the level was announced as e.g. "2000" instead of your real level. It now reads the tile's dedicated level label (
_eppLevelLabelon theObjectiveBubble), falling back to the old circle text only when that label is missing. Contributed by @lilmike (PR #107).
Verification (SHA256):
AccessibleArenaInstaller.exe:592871d89e8561adf117a5509f95a09aa63846bc4f92d65cff58a9f5633179abAccessibleArena.dll:4e6ee49f1836c8a5d1febf273da137a729acd00eaf0213e9d94a31e8671317c9
Verify in PowerShell with Get-FileHash <filename> -Algorithm SHA256 or in Command Prompt with certutil -hashfile <filename> SHA256.