From cc68e3e967cdcd3d8a76f4c8a6f4b011965e5a83 Mon Sep 17 00:00:00 2001 From: Kris Johnson <11083252+KrisXV@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:00:37 -0600 Subject: [PATCH] Linked: Fix modified-priority moves in a link --- data/mods/linked/moves.ts | 2 +- data/mods/linked/scripts.ts | 20 +++++++++++--------- sim/global-types.ts | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts index eb3fce6e79..1cdc9bc522 100644 --- a/data/mods/linked/moves.ts +++ b/data/mods/linked/moves.ts @@ -244,7 +244,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { pokemon.disableMove(lastMove.id); // @ts-expect-error - const { index: linkIndex, link: linkedMoves } = pokemon.queryLinkMove(lastMove); + const { linkIndex, linkedMoves } = pokemon.queryLinkMove(lastMove); if (linkIndex >= 0) pokemon.disableMove(linkedMoves[1 - linkIndex].id); }, }, diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts index ae561390f9..c8a6c186ba 100644 --- a/data/mods/linked/scripts.ts +++ b/data/mods/linked/scripts.ts @@ -36,19 +36,18 @@ export const Scripts: ModdedBattleScriptsData = { } } } - // take priority from the base move, so abilities like Prankster only apply once - // (instead of compounding every time `getActionSpeed` is called) - let priority = this.dex.moves.get(move.id).priority; // Linked mod - const { index: linkIndex, link: linkedMoves } = action.pokemon.queryLinkMove(action.move); + const { linkIndex, linkedMoves } = action.pokemon.queryLinkMove(action.move); if (linkIndex >= 0 && action.pokemon.getCanLinkMove(action.move)) { const linkedActions = action.linked || linkedMoves; const altMove = linkedActions[1 - linkIndex]; - let thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority); + let thisPriority = this.dex.moves.get(linkedActions[linkIndex].id).priority; + thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, thisPriority); thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], thisPriority); - let thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, altMove.priority); + let thatPriority = this.dex.moves.get(altMove.id).priority; + thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, thatPriority); thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, thatPriority); - priority = Math.min(thisPriority, thatPriority); + const priority = Math.min(thisPriority, thatPriority); action.priority = priority + action.fractionalPriority; if (this.gen > 5) { // Gen 6+: Quick Guard blocks moves with artificially enhanced priority. @@ -57,6 +56,9 @@ export const Scripts: ModdedBattleScriptsData = { altMove.priority = priority; } } else { + // take priority from the base move, so abilities like Prankster only apply once + // (instead of compounding every time `getActionSpeed` is called) + let priority = this.dex.moves.get(move.id).priority; priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority); priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority); action.priority = priority + action.fractionalPriority; @@ -722,8 +724,8 @@ export const Scripts: ModdedBattleScriptsData = { queryLinkMove(move, ignoreDisabled) { // @ts-expect-error modded const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves!(ignoreDisabled); - if (!linkedMoves.length) return { index: -1, link: linkedMoves }; - return { index: linkedMoves.findIndex(x => x.id === move.id), link: linkedMoves }; + if (!linkedMoves.length) return { linkIndex: -1, linkedMoves }; + return { linkIndex: linkedMoves.findIndex(x => x.id === move.id), linkedMoves }; }, }, }; diff --git a/sim/global-types.ts b/sim/global-types.ts index 0d9fb3ddab..8eea0b7c38 100644 --- a/sim/global-types.ts +++ b/sim/global-types.ts @@ -335,7 +335,7 @@ interface ModdedBattlePokemon { getCanLinkMove?: (this: Pokemon, move: ActiveMove) => boolean; queryLinkMove?: ( this: Pokemon, move: ActiveMove, ignoreDisabled?: boolean - ) => { index: number, link: [ActiveMove, ActiveMove] }; + ) => { linkIndex: number, linkedMoves: [ActiveMove, ActiveMove] }; } interface ModdedBattleQueue extends Partial {