v1.1.1 - Duel locates v10.7.0, ATK/DEF tracking, post-duel Enter
Patch release. Duel polish: corrects long-standing field-locate assumptions for game v10.7.0, makes battle-position changes survive across the same turn, fixes the Character Level result page that started ignoring Enter again, and tightens attack-target selection.
Fixes
- Third monster on the field now appears in the monster row.
MonsterLocateswas assumed to be{2, 3, 4}based on older docs; in game v10.7.0 the three Speed Duel monster zones are at locates 1, 2, 3 (loc=4 is never occupied). Verified empirically by decodingCardMovep3 destinations as(locate << 1) | playeragainst summon order. Now{1, 2, 3}so all three Normal Summon slots show up under the M zone hotkey and Left/Right navigation. - ATK / DEF position change is reflected immediately, not next turn. The old command-mask heuristic only sees the OPPOSITE position bit (TurnAtk available → currently DEF; TurnDef available → currently ATK). After a position change has been used this turn both bits drop, and the heuristic fell back to "Attack position" regardless of actual orientation until the next turn. New
DuelPositionTrackerkeyed on uniqueId is updated byCutinTurn(looking up the actual uniqueId from(p1=player, p2=locate, slot=0)rather than misreading p2 as the uniqueId),RunSummon/RunSpSummon/CutinReverse(set ATK),CardSet(set DEF),CardBreak/CardExplosion(forget).ReadCurrentCardconsults the tracker before falling back to the cmdMask heuristic. A position change now also speaks: "Switched to Defense position: ". - Tribute / EmotionalList card selection picks the card the user heard.
cardList(visual order) anditemList(data order) are not guaranteed to share an ordering — the game can sortcardList. The old code readitemList[i]for the announcement but calledOnClickCard(cardList[i])to confirm; when orderings diverged the user heard one card and the click hit a different one. Both paths now resolve throughcardList[visualIndex].Indexso reads and clicks target the sameListItem. Diagnostic log emitsEmoCard[visual=N, itemIdx=M]so any future divergence is visible. - Post-duel "Character Level" result page advances on Enter again. The v1.1.0 fix used exact-match button-text "NEXT" and exact-name "nextbutton"; game v10.7.0 displays the text as "Next" (Title case) and names the GO
NextButton0. Both filters are now case-insensitive, and the GO-name fallback usesStartsWith("nextbutton")/StartsWith("okbutton")/StartsWith("btnnext")/StartsWith("btnok")so suffixed names match. - Attack target selection skips empty opp slots. Pressing Enter on an announced "Slot N: Empty" used to send
OnSelectAttackedagainst an empty zone; the drag failed and the fallbackOnDoCardCommand(Attack)let the engine reroute to the only legal target. Game-correct, but the audio + animation read like a direct attack while the engine actually resolved a battle.BeginTargetSelectionnow strips empty entries from the navigable list and a newNavigateTarget(direction)wraps over the filtered count so Left/Right only visits real opp monsters.
Documentation
docs/game-api.md: corrected monster-zone locate mapping (1, 2, 3 in Speed Duel), added a "ViewType param semantics" table coveringRunSummon,CardMove,CardBreak/CardExplosion,CutinTurn(the trap that bit the position-tracker fix),LifeSet/LifeDamage,PhaseChange, andRunDialog.
Known issues (non-blocking)
- The Extra Monster Zone (loc=6, used by Synchro/Xyz/Link/Fusion summons) is no longer a navigable column. It still counts in the F-key field summary so EMZ activity is visible there and via summon announcements. A player's own EMZ-summoned monster cannot be selected as an attacker via field nav for now.
- Tribute summon EmotionalList may still re-prompt with multi-material tributes; new diagnostic log lines (
EmoCard[visual=N, itemIdx=M]) will pinpoint whether it's an order mismatch or a multi-select detection issue.
What's in the zip
Mods/DuelLinksAccess.dll— the mod (Release build)Tolk.dll— Tolk screen-reader bridgenvdaControllerClient64.dll— NVDA controller client (64-bit, matches the game)README.md— full keybinding reference and a new Home / Duel World screen guideLICENSE— MIT
Install
- Install MelonLoader v0.7.3 Open-Beta against
dlpc.exe(Yu-Gi-Oh! Duel Links on Steam). Launch the game once so MelonLoader generates its assemblies, then close it. - Extract the zip directly into your Duel Links install folder. The structure already matches what the game expects:
DuelLinksAccess.dlllands inMods\, andTolk.dll+nvdaControllerClient64.dllland in the game root next todlpc.exe. If you're upgrading from v1.1.0, this will overwrite the old DLL. - Launch. You should hear "Duel Links Access loaded. F1 for help."
If your screen reader is something other than NVDA, swap nvdaControllerClient64.dll for the controller client matching your reader (Tolk supports JAWS, Window-Eyes, SuperNova, ZoomText, SAPI, and more — see Tolk's docs).
See README.md (now bundled in the zip) for the full key bindings and a guide to the Home / Duel World screen layout.