From c98be493a16456536e431fd1937d43efecd94710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Santos?= Date: Wed, 17 Apr 2024 12:03:53 +0200 Subject: [PATCH 1/2] Add Acrobatics effect --- src/data/move.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index bfbf21450f6..87651eafa9c 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1749,6 +1749,24 @@ export class TurnDamagedDoublePowerAttr extends VariablePowerAttr { } } +export class NoHeldItemDoublePowerAttr extends VariablePowerAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const heldItems = this.getUserHeldItems(user); + + if (!heldItems.length) { + (args[0] as Utils.NumberHolder).value *= 2; + return true; + } + + return false; + } + + getUserHeldItems(user: Pokemon) { + return user.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + && (m as PokemonHeldItemModifier).pokemonId === user.id, user.isPlayer()) as PokemonHeldItemModifier[]; + } +} + const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { let message: string; user.scene.executeWithSeedOffset(() => { @@ -4874,7 +4892,7 @@ export function initMoves() { new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5) .unimplemented(), new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) - .partial(), + .attr(NoHeldItemDoublePowerAttr), new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) From e622745c1b555411556138a0a9bf1c7d9d093b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Santos?= Date: Wed, 17 Apr 2024 13:25:28 +0200 Subject: [PATCH 2/2] Add list of items to consider for Acrobatics --- src/data/move.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 87651eafa9c..f3b34de8a5d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -16,6 +16,7 @@ import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilit import { Abilities } from "./enums/abilities"; import { allAbilities } from './ability'; import { PokemonHeldItemModifier } from "../modifier/modifier"; +import { modifierTypes } from '../modifier/modifier-type'; import { BattlerIndex } from "../battle"; import { Stat } from "./pokemon-stat"; import { TerrainType } from "./terrain"; @@ -1750,6 +1751,20 @@ export class TurnDamagedDoublePowerAttr extends VariablePowerAttr { } export class NoHeldItemDoublePowerAttr extends VariablePowerAttr { + heldItemModifierTypes: (keyof typeof modifierTypes)[] = [ + 'REVIVER_SEED', + 'BERRY', + 'SOOTHE_BELL', + 'GRIP_CLAW', + 'FOCUS_BAND', + 'KINGS_ROCK', + 'LEFTOVERS', + 'SHELL_BELL', + 'BATON', + 'LUCKY_EGG', + 'GOLDEN_EGG', + ]; + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const heldItems = this.getUserHeldItems(user); @@ -1761,9 +1776,13 @@ export class NoHeldItemDoublePowerAttr extends VariablePowerAttr { return false; } + countsAsHeldItem(item: PokemonHeldItemModifier) { + return this.heldItemModifierTypes.includes(item.type.id as keyof typeof modifierTypes); + } + getUserHeldItems(user: Pokemon) { return user.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === user.id, user.isPlayer()) as PokemonHeldItemModifier[]; + && (m as PokemonHeldItemModifier).pokemonId === user.id && this.countsAsHeldItem(m), user.isPlayer()) as PokemonHeldItemModifier[]; } }