Skip to content

v1.3

Choose a tag to compare

@JeanStiletto JeanStiletto released this 28 May 22:19
· 73 commits to main since this release

PlayBlade / Events tab:

  • The Events tab is now a proper drill-down hierarchy: Tabs → Filter chips → Event tiles, parallel to how other tabs go Tabs → Folders → Decks. Filter chips ("Alle", "In Arbeit", "Neu", "Limited", "Constructed", and any format-specific chips) were previously mixed into a single 23-item flat list with the actual event tiles, sorted by screen position so they ended up between in-progress events and the rest — confusing to read and prone to misactivations (the chip would trigger a "navigate to folders list" path that had no folders, leaving the navigator stuck). Filter chips now form their own group between the tabs and the event tiles. Enter on the Events tab lands on the chip row, Enter on a chip drills into the filtered event list, Backspace climbs back up one level each press, and position restore remembers which chip and which tab the user came from. Chip detection uses the game's own EventBladeContentView._eventTileContainer reference: anything inside that container is a tile, anything else inside the events panel is a chip.
  • Activating an event tile no longer asks the navigator to enter a non-existent folders list. The mode/queue-type code path that called RequestFoldersEntry() for every PlayBladeContent activation now skips that step for event tiles (detected via the same _eventTileContainer ancestry check) and lets panel detection handle the event-page transition naturally.

Duel:

  • Card info readout now surfaces chosen / named-card data. Cards that record a creature type (Cavern of Souls, Engineered Plague), a color (Iona, Shield of Emeria), or a card name (Pithing Needle, Meddling Mage, Cabal Therapy) display that pick in their on-card rules text for sighted players; the mod was dropping it. Arrow Down past rules text now reads "Chosen: Wizard" and "Named card: Cabal Therapy" sourced from MtgCardInstance.LinkedInfoText and LinkedInfoTitleLocIds via the same IGreLocProvider path the game's own LinkedInfoTextParser / LinkedInfoTitleTextParser use, so the resolved strings match what's rendered on the card face. Contributed by @LordLuceus (PR #99).
  • New N hotkey announces what's currently resolving on the stack — the topmost stack item with its rules text, in the same format the mod uses when something newly hits the stack. Workflow prompts during long combos ("Submit 0", target select, "you may discard a card") often give no clue which trigger they belong to: the auto-fired stack announcement runs once per zone update, so a prompt that opens several beats later has no spoken trace. N closes that gap on demand. Announces "Nothing on the stack" when the stack is empty. Contributed by @LordLuceus (PR #102).

Bug fixes:

  • Surveil zone tracking was broken: the mod's _bottomCards list was always empty, so every card read as "keep" regardless of where the player had moved it, Tab announcements lied about the selection, and Tab → Enter on a "milled" card retried the same direction instead of toggling it back to the library (no way to deselect short of cancelling the whole browser). Root cause: RefreshSurveilCardLists walked BrowserCardHolder_ViewDismiss for the bottom zone, a holder Surveil doesn't have — Surveil keeps both zones in a single cardHolder with libraryGroup / graveyardGroup lists tracking the split. The refresh now reads those lists directly via the public GetLibraryCards() / GetGraveyardCards() getters on SurveilBrowser, matching what the game itself queries when laying out the cards. As a belt-and-braces fix the tracked lists are also updated eagerly the moment an Enter-driven move succeeds, so DetectCardZone is correct during the 0.2 s window before the reconciling refresh coroutine fires (this also closes the equivalent gap for Scry, where the lists were correct after the delay but stale within it). Contributed by @LordLuceus (PR #100).
  • 0-cost cards are now announced correctly. PR #91 wired in the live cast-action cost so reducers (Warden of Evos Isle, Goblin Electromancer, etc.) would be reflected, but treated a length-0 Action.ManaCost as "not yet resolved" and skipped past it — falling all the way back to PrintedCastingCost. The result: a card discounted to 0 still read its printed cost, so a "free" cast announced as costing one mana the player would never actually pay. Empty live-action cost is now the real 0-cost signal (cost reducers brought the spell to free, or it's a Suspend/Cascade exile cast, or it's a printed-0 artifact like Memnite); ParseManaQuantityArray renders an empty mana-quantity array as the localized ManaFree ("Free" in English), short-circuiting the fallback chain. Mana-cost block is now read for printed-0-cost cards too (Memnite, Mox Amber, Ornithopter) instead of being silently omitted. Contributed by @LordLuceus (PR #101).
  • Surveil browser no longer announces "moved to put on bottom" when you press Enter on a card. Surveil mills the chosen cards to the graveyard rather than putting them on the bottom of the library, but GetZoneName / GetShortZoneName were sharing the Scry phrasing. The bottom zone now reads as "Graveyard" for Surveil (announcements become "X moved to graveyard", "Graveyard: empty", etc.); Scry, Read Ahead, and Split keep their existing wording. Contributed by @LordLuceus (PR #98).
  • Shift+Enter on a deck-builder card with the Craft filter on no longer auto-spends a wildcard. TryOpenCardViewerForFocusedCard invoked DeckBuilderActionsHandler.OpenCardViewer via reflection without setting InputManager.BlockNextEnterKeyUp, so the trailing Return KeyUp leaked to PopupManager.HandleKeyUp → CardViewerController.OnEnter() → OnCraftClicked(), crafting the card with no second confirmation. The plain-Enter and right-click activation paths already set the guard via CardTileActivator / UIActivator; the reflection-driven Shift+Enter path now sets it too, matching the same fix applied for the challenge-invite popup in v0.9.4.
  • Lands no longer announce "Mana cost: Free" after the v1.3 0-cost-cards fix. Lands have no casting cost, so the empty-array path always rendered them as Free — useless noise that added an Arrow Down press before the player reached the type line and rules text. Suppressed specifically when CardTypes contains Land; Memnite, Mox Amber, and discounted-to-0 spells still announce "Free" because they can actually be cast. Contributed by @LordLuceus (PR #103).

Verification (SHA256):

  • AccessibleArenaInstaller.exe: 5491a2c6f426d801eb201da37166cad6f92eb7dac294c74ebcb9380ff58696ce
  • AccessibleArena.dll: d32322d2fdd1e95f75f200e393f1e457626bf0240ed2a7e6ff897b26cbeb2405

Verify in PowerShell with Get-FileHash <filename> -Algorithm SHA256 or in Command Prompt with certutil -hashfile <filename> SHA256.