From ce4d22bb8a26228a262fa561a9255ee3ba718f0f Mon Sep 17 00:00:00 2001 From: Eucalyptus Date: Sat, 17 Aug 2024 03:08:54 -0400 Subject: [PATCH] Trick no longer selects items randomly and instead bases it on item tier, and prioritizes Toxic Orb and Flame Orb --- src/data/move.ts | 52 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 14c26b23bb7..09db8daf6c1 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -28,6 +28,7 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveUsedEvent } from "#app/events/battle-scene.js"; +import { ModifierTier } from "#app/modifier/modifier-tier.js"; export enum MoveCategory { PHYSICAL, @@ -6061,17 +6062,58 @@ export class SwapHeldItemsAttr extends MoveEffectAttr { })); if (targetHeldItems.length) { - const targetItemToSwap = targetHeldItems[target.randSeedInt(targetHeldItems.length)]; - user.scene.tryTransferHeldItemModifier(targetItemToSwap, user, false); + const swapItemIdx = 0; + const targetPool = target.isPlayer() ? ModifierPoolType.PLAYER : ModifierPoolType.TRAINER; + + for (let idx = 1; idx < targetHeldItems.length; idx++) { + const currentItemFlameOrToxic = targetHeldItems[swapItemIdx].type.id === "TOXIC_ORB" || targetHeldItems[swapItemIdx].type.id === "FLAME_ORB"; + const nextItemNotFlameOrToxic = targetHeldItems[idx].type.id !== "TOXIC_ORB" && targetHeldItems[idx].type.id !== "FLAME_ORB"; + let nextItemTier = targetHeldItems[idx].type.getOrInferTier(targetPool); + let currentItemTier = targetHeldItems[swapItemIdx].type.getOrInferTier(targetPool); + nextItemTier = nextItemTier !== null ? nextItemTier : ModifierTier.COMMON; + currentItemTier = currentItemTier !== null ? currentItemTier : ModifierTier.COMMON; + + if (nextItemNotFlameOrToxic && (nextItemTier > currentItemTier || currentItemFlameOrToxic)) { + targetHeldItems[swapItemIdx] = targetHeldItems[idx]; + } + + if (targetHeldItems[swapItemIdx].type.tier === ModifierTier.LUXURY) { + break; + } + } + user.scene.tryTransferHeldItemModifier(targetHeldItems[swapItemIdx], user, false); } if (userHeldItems.length) { - const userItemToSwap = userHeldItems[user.randSeedInt(userHeldItems.length)]; - target.scene.tryTransferHeldItemModifier(userItemToSwap, target, false); + let swapItemIdx = 0; + const userPool = user.isPlayer() ? ModifierPoolType.PLAYER : ModifierPoolType.TRAINER; + + for (let idx = 1; idx < userHeldItems.length; idx++) { + if (userHeldItems[swapItemIdx].type.id === "TOXIC_ORB" || userHeldItems[swapItemIdx].type.id === "FLAME_ORB") { + break; + } + + if (userHeldItems[idx].type.id === "TOXIC_ORB" || userHeldItems[idx].type.id === "FLAME_ORB") { + swapItemIdx = idx; + break; + } + + let nextItemTier = userHeldItems[idx].type.getOrInferTier(userPool); + let currentItemTier = userHeldItems[swapItemIdx].type.getOrInferTier(userPool); + nextItemTier = nextItemTier !== null ? nextItemTier : ModifierTier.COMMON; + currentItemTier = currentItemTier !== null ? currentItemTier : ModifierTier.COMMON; + + if (nextItemTier < currentItemTier) { + swapItemIdx = idx; + } + } + + const swappedItemName = userHeldItems[swapItemIdx].type.name; + target.scene.tryTransferHeldItemModifier(userHeldItems[swapItemIdx], target, false); user.scene.queueMessage(i18next.t("moveTriggers:trickFoeNewItem", { pokemonNameWithAffix: getPokemonNameWithAffix(target), - itemName: userItemToSwap.type.name, + itemName: swappedItemName, })); } return true;