From 50215d05ec0dc619eceb7cbf492ec69e24dcef8f Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sun, 10 Dec 2023 21:52:11 -0600 Subject: [PATCH] Implement moves with basic functionality --- src/data/move.ts | 361 ++++++++++++++++++++++++++++++----------------- 1 file changed, 230 insertions(+), 131 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 30955036f24..4c97d095f29 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1412,7 +1412,8 @@ export enum MultiHitType { _2, _2_TO_5, _3, - _3_INCR + _3_INCR, + _10 } export class HealAttr extends MoveEffectAttr { @@ -1540,6 +1541,9 @@ export class MultiHitAttr extends MoveAttr { hitTimes = 3; // TODO: Add power increase for every hit break; + case MultiHitType._10: + hitTimes = 10; + break; } (args[0] as Utils.IntegerHolder).value = hitTimes; return true; @@ -3361,7 +3365,7 @@ export function initMoves() { new AttackMove(Moves.PURSUIT, "Pursuit (N)", Type.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, "The power of this attack move is doubled if it's used on a target that's switching out of battle.", -1, 0, 2), new AttackMove(Moves.RAPID_SPIN, "Rapid Spin", Type.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, -1, "A spin attack that can also eliminate such moves as Bind, Wrap, and Leech Seed. This also raises the user's Speed stat.", 100, 0, 2) .attr(StatChangeAttr, BattleStat.SPD, 1, true) - .attr(LapseBattlerTagAttr, [ BattlerTagType.BIND, BattlerTagType.WRAP, BattlerTagType.FIRE_SPIN, BattlerTagType.WHIRLPOOL, BattlerTagType.CLAMP, BattlerTagType.SAND_TOMB, BattlerTagType.MAGMA_STORM ], true), + .attr(LapseBattlerTagAttr, [ BattlerTagType.BIND, BattlerTagType.WRAP, BattlerTagType.FIRE_SPIN, BattlerTagType.WHIRLPOOL, BattlerTagType.CLAMP, BattlerTagType.SAND_TOMB, BattlerTagType.MAGMA_STORM, BattlerTagType.SEEDED ], true), new StatusMove(Moves.SWEET_SCENT, "Sweet Scent", Type.NORMAL, 100, 20, -1, "A sweet scent that harshly lowers opposing Pokémon's evasiveness.", -1, 0, 2) .attr(StatChangeAttr, BattleStat.EVA, -1) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -4242,16 +4246,18 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.LUNGE, "Lunge", Type.BUG, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user makes a lunge at the target, attacking with full force. This also lowers the target's Attack stat.", 100, 0, 7) .attr(StatChangeAttr, BattleStat.ATK, -1), - new AttackMove(Moves.FIRE_LASH, "Fire Lash (N)", Type.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user strikes the target with a burning lash. This also lowers the target's Defense stat.", 100, 0, 7), + new AttackMove(Moves.FIRE_LASH, "Fire Lash", Type.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user strikes the target with a burning lash. This also lowers the target's Defense stat.", 100, 0, 7) + .attr(StatChangeAttr, BattleStat.DEF, -1), new AttackMove(Moves.POWER_TRIP, "Power Trip (N)", Type.DARK, MoveCategory.PHYSICAL, 20, 100, 10, -1, "The user boasts its strength and attacks the target. The more the user's stats are raised, the greater the move's power.", -1, 0, 7), new AttackMove(Moves.BURN_UP, "Burn Up (N)", Type.FIRE, MoveCategory.SPECIAL, 130, 100, 5, -1, "To inflict massive damage, the user burns itself out. After using this move, the user will no longer be Fire type.", -1, 0, 7), new StatusMove(Moves.SPEED_SWAP, "Speed Swap (N)", Type.PSYCHIC, -1, 10, -1, "The user exchanges Speed stats with the target.", -1, 0, 7), - new AttackMove(Moves.SMART_STRIKE, "Smart Strike (N)", Type.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, "The user stabs the target with a sharp horn. This attack never misses.", -1, 0, 7), + new AttackMove(Moves.SMART_STRIKE, "Smart Strike", Type.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, "The user stabs the target with a sharp horn. This attack never misses.", -1, 0, 7), new StatusMove(Moves.PURIFY, "Purify (N)", Type.POISON, -1, 20, -1, "The user heals the target's status condition. If the move succeeds, it also restores the user's own HP.", -1, 0, 7), new AttackMove(Moves.REVELATION_DANCE, "Revelation Dance (N)", Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, "The user attacks the target by dancing very hard. The user's type determines the type of this move.", -1, 0, 7), new AttackMove(Moves.CORE_ENFORCER, "Core Enforcer (N)", Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, "If the Pokémon the user has inflicted damage on have already used their moves, this move eliminates the effect of the target's Ability.", -1, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.TROP_KICK, "Trop Kick (N)", Type.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, -1, "The user lands an intense kick of tropical origins on the target. This also lowers the target's Attack stat.", 100, 0, 7), + new AttackMove(Moves.TROP_KICK, "Trop Kick", Type.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, -1, "The user lands an intense kick of tropical origins on the target. This also lowers the target's Attack stat.", 100, 0, 7) + .attr(StatChangeAttr, BattleStat.ATK, -1), new StatusMove(Moves.INSTRUCT, "Instruct (N)", Type.PSYCHIC, -1, 15, -1, "The user instructs the target to use the target's last move again.", -1, 0, 7), new AttackMove(Moves.BEAK_BLAST, "Beak Blast", Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, "The user first heats up its beak, and then it attacks the target. Making direct contact with the Pokémon while it's heating up its beak results in a burn.", -1, -3, 7) .attr(ChargeAttr, ChargeAnim.BEAK_BLAST_CHARGING, "started\nheating up its beak!"), @@ -4274,19 +4280,27 @@ export function initMoves() { new AttackMove(Moves.GENESIS_SUPERNOVA, "Genesis Supernova (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, -1, "After obtaining Z-Power, the user, Mew, attacks the target with full force. The terrain will be charged with psychic energy.", -1, 0, 7), new AttackMove(Moves.SHELL_TRAP, "Shell Trap (N)", Type.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, "The user sets a shell trap. If the user is hit by a physical move, the trap will explode and inflict damage on opposing Pokémon.", -1, -3, 7) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FLEUR_CANNON, "Fleur Cannon (N)", Type.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, "The user unleashes a strong beam. The attack's recoil harshly lowers the user's Sp. Atk stat.", 100, 0, 7), + new AttackMove(Moves.FLEUR_CANNON, "Fleur Cannon", Type.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, "The user unleashes a strong beam. The attack's recoil harshly lowers the user's Sp. Atk stat.", 100, 0, 7) + .attr(StatChangeAttr, BattleStat.SPATK, -2, true), new AttackMove(Moves.PSYCHIC_FANGS, "Psychic Fangs (N)", Type.PSYCHIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, "The user bites the target with its psychic capabilities. This can also destroy Light Screen and Reflect.", -1, 0, 7), new AttackMove(Moves.STOMPING_TANTRUM, "Stomping Tantrum (N)", Type.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, "Driven by frustration, the user attacks the target. If the user's previous move has failed, the power of this move doubles.", -1, 0, 7), - new AttackMove(Moves.SHADOW_BONE, "Shadow Bone (N)", Type.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, -1, "The user attacks by beating the target with a bone that contains a spirit. This may also lower the target's Defense stat.", 20, 0, 7), - new AttackMove(Moves.ACCELEROCK, "Accelerock (N)", Type.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, "The user smashes into the target at high speed. This move always goes first.", -1, 1, 7), - new AttackMove(Moves.LIQUIDATION, "Liquidation (N)", Type.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, "The user slams into the target using a full-force blast of water. This may also lower the target's Defense stat.", 20, 0, 7), - new AttackMove(Moves.PRISMATIC_LASER, "Prismatic Laser (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, "The user shoots powerful lasers using the power of a prism. The user can't move on the next turn.", -1, 0, 7), + new AttackMove(Moves.SHADOW_BONE, "Shadow Bone", Type.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, -1, "The user attacks by beating the target with a bone that contains a spirit. This may also lower the target's Defense stat.", 20, 0, 7) + .attr(StatChangeAttr, BattleStat.DEF, -1), + new AttackMove(Moves.ACCELEROCK, "Accelerock", Type.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, "The user smashes into the target at high speed. This move always goes first.", -1, 1, 7), + new AttackMove(Moves.LIQUIDATION, "Liquidation", Type.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, "The user slams into the target using a full-force blast of water. This may also lower the target's Defense stat.", 20, 0, 7) + .attr(StatChangeAttr, BattleStat.DEF, -1), + new AttackMove(Moves.PRISMATIC_LASER, "Prismatic Laser (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, "The user shoots powerful lasers using the power of a prism. The user can't move on the next turn.", -1, 0, 7) + .attr(AddBattlerTagAttr, BattlerTagType.RECHARGING, true), new AttackMove(Moves.SPECTRAL_THIEF, "Spectral Thief (N)", Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, "The user hides in the target's shadow, steals the target's stat boosts, and then attacks.", -1, 0, 7), new AttackMove(Moves.SUNSTEEL_STRIKE, "Sunsteel Strike (N)", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user slams into the target with the force of a meteor. This move can be used on the target regardless of its Abilities.", -1, 0, 7), new AttackMove(Moves.MOONGEIST_BEAM, "Moongeist Beam (N)", Type.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, "The user emits a sinister ray to attack the target. This move can be used on the target regardless of its Abilities.", -1, 0, 7), - new StatusMove(Moves.TEARFUL_LOOK, "Tearful Look (N)", Type.NORMAL, -1, 20, -1, "The user gets teary eyed to make the target lose its combative spirit. This lowers the target's Attack and Sp. Atk stats.", 100, 0, 7), - new AttackMove(Moves.ZING_ZAP, "Zing Zap (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, -1, "A strong electric blast crashes down on the target, giving it an electric shock. This may also make the target flinch.", 30, 0, 7), - new AttackMove(Moves.NATURES_MADNESS, "Nature's Madness (N)", Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, "The user hits the target with the force of nature. It halves the target's HP.", -1, 0, 7), + new StatusMove(Moves.TEARFUL_LOOK, "Tearful Look", Type.NORMAL, -1, 20, -1, "The user gets teary eyed to make the target lose its combative spirit. This lowers the target's Attack and Sp. Atk stats.", 100, 0, 7) + .attr(StatChangeAttr, BattleStat.ATK, -1) + .attr(StatChangeAttr, BattleStat.SPATK, -1), + new AttackMove(Moves.ZING_ZAP, "Zing Zap", Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, -1, "A strong electric blast crashes down on the target, giving it an electric shock. This may also make the target flinch.", 30, 0, 7) + .attr(FlinchAttr), + new AttackMove(Moves.NATURES_MADNESS, "Nature's Madness", Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, "The user hits the target with the force of nature. It halves the target's HP.", -1, 0, 7) + .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.MULTI_ATTACK, "Multi-Attack (N)", Type.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, "Cloaking itself in high energy, the user slams into the target. The memory held determines the move's type.", -1, 0, 7), // Unused new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, "10,000,000 Volt Thunderbolt (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, "The user, Pikachu wearing a cap, powers up a jolt of electricity using its Z-Power and unleashes it. Critical hits land more easily.", -1, 0, 7), @@ -4295,37 +4309,42 @@ export function initMoves() { new AttackMove(Moves.PLASMA_FISTS, "Plasma Fists (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, "The user attacks with electrically charged fists. This move changes Normal-type moves to Electric-type moves.", -1, 0, 7), new AttackMove(Moves.PHOTON_GEYSER, "Photon Geyser (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, "The user attacks a target with a pillar of light. This move inflicts Attack or Sp. Atk damage—whichever stat is higher for the user.", -1, 0, 7), /* Unused */ - new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, "Light That Burns the Sky (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, "", -1, 0, 7), - new AttackMove(Moves.SEARING_SUNRAZE_SMASH, "Searing Sunraze Smash (N)", Type.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, "", -1, 0, 7), - new AttackMove(Moves.MENACING_MOONRAZE_MAELSTROM, "Menacing Moonraze Maelstrom (N)", Type.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, "", -1, 0, 7), - new AttackMove(Moves.LETS_SNUGGLE_FOREVER, "Let's Snuggle Forever (N)", Type.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, "", -1, 0, 7), - new AttackMove(Moves.SPLINTERED_STORMSHARDS, "Splintered Stormshards (N)", Type.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, "", -1, 0, 7), - new AttackMove(Moves.CLANGOROUS_SOULBLAZE, "Clangorous Soulblaze (N)", Type.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, -1, "", 100, 0, 7) + new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, "Light That Burns the Sky (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, "This attack inflicts Attack or Sp. Atk damage—whichever stat is higher for the user, Necrozma. This move ignores the target's Ability.", -1, 0, 7), + new AttackMove(Moves.SEARING_SUNRAZE_SMASH, "Searing Sunraze Smash (N)", Type.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, "After obtaining Z-Power, the user, Solgaleo, attacks the target with full force. This move can ignore the effect of the target's Ability.", -1, 0, 7), + new AttackMove(Moves.MENACING_MOONRAZE_MAELSTROM, "Menacing Moonraze Maelstrom (N)", Type.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, "After obtaining Z-Power, the user, Lunala, attacks the target with full force. This move can ignore the effect of the target's Ability.", -1, 0, 7), + new AttackMove(Moves.LETS_SNUGGLE_FOREVER, "Let's Snuggle Forever (N)", Type.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, "After obtaining Z-Power, the user, Mimikyu, punches the target with full force.", -1, 0, 7), + new AttackMove(Moves.SPLINTERED_STORMSHARDS, "Splintered Stormshards (N)", Type.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, "After obtaining Z-Power, the user, Lycanroc, attacks the target with full force. This move negates the effect on the battlefield.", -1, 0, 7), + new AttackMove(Moves.CLANGOROUS_SOULBLAZE, "Clangorous Soulblaze (N)", Type.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, -1, "After obtaining Z-Power, the user, Kommo-o, attacks the opposing Pokémon with full force. This move boosts the user's stats.", 100, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.ZIPPY_ZAP, "Zippy Zap (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, -1, "", 100, 2, 7), - new AttackMove(Moves.SPLISHY_SPLASH, "Splishy Splash (N)", Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, "", 30, 0, 7) + new AttackMove(Moves.ZIPPY_ZAP, "Zippy Zap (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user attacks the target with bursts of electricity at high speed. This move always goes first and results in a critical hit.", 100, 2, 7), + new AttackMove(Moves.SPLISHY_SPLASH, "Splishy Splash (N)", Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, "The user charges a huge wave with electricity and hits the opposing Pokémon with the wave. This may also leave the opposing Pokémon with paralysis.", 30, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FLOATY_FALL, "Floaty Fall (N)", Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, "", 30, 0, 7), - new AttackMove(Moves.PIKA_PAPOW, "Pika Papow (N)", Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, "", -1, 0, 7), - new AttackMove(Moves.BOUNCY_BUBBLE, "Bouncy Bubble (N)", Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, "", -1, 0, 7), - new AttackMove(Moves.BUZZY_BUZZ, "Buzzy Buzz (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, -1, "", 100, 0, 7), - new AttackMove(Moves.SIZZLY_SLIDE, "Sizzly Slide (N)", Type.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, -1, "", 100, 0, 7), - new AttackMove(Moves.GLITZY_GLOW, "Glitzy Glow (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, "", -1, 0, 7), - new AttackMove(Moves.BADDY_BAD, "Baddy Bad (N)", Type.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, "", -1, 0, 7), - new AttackMove(Moves.SAPPY_SEED, "Sappy Seed (N)", Type.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, "", 100, 0, 7), - new AttackMove(Moves.FREEZY_FROST, "Freezy Frost (N)", Type.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, "", -1, 0, 7), - new AttackMove(Moves.SPARKLY_SWIRL, "Sparkly Swirl (N)", Type.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, "", -1, 0, 7), - new AttackMove(Moves.VEEVEE_VOLLEY, "Veevee Volley (N)", Type.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, "", -1, 0, 7), + new AttackMove(Moves.FLOATY_FALL, "Floaty Fall (N)", Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, "The user floats in the air, and then dives at a steep angle to attack the target. This may also make the target flinch.", 30, 0, 7), + new AttackMove(Moves.PIKA_PAPOW, "Pika Papow (N)", Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, "The more Pikachu loves its Trainer, the greater the move's power. It never misses.", -1, 0, 7), + new AttackMove(Moves.BOUNCY_BUBBLE, "Bouncy Bubble (N)", Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, "The user attacks by shooting water bubbles at the target. It then absorbs water and restores its HP by half the damage taken by the target.", -1, 0, 7), + new AttackMove(Moves.BUZZY_BUZZ, "Buzzy Buzz (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, -1, "The user shoots a jolt of electricity to attack the target. This also leaves the target with paralysis.", 100, 0, 7), + new AttackMove(Moves.SIZZLY_SLIDE, "Sizzly Slide (N)", Type.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, -1, "The user cloaks itself in fire and charges at the target. This also leaves the target with a burn.", 100, 0, 7), + new AttackMove(Moves.GLITZY_GLOW, "Glitzy Glow (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, "The user bombards the target with telekinetic force. A wondrous wall of light is put up to weaken the power of the opposing Pokémon's special moves.", -1, 0, 7), + new AttackMove(Moves.BADDY_BAD, "Baddy Bad (N)", Type.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, "The user acts bad and attacks the target. A wondrous wall of light is put up to weaken the power of the opposing Pokémon's physical moves.", -1, 0, 7), + new AttackMove(Moves.SAPPY_SEED, "Sappy Seed (N)", Type.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, "The user grows a gigantic stalk that scatters seeds to attack the target. The seeds drain the target's HP every turn.", 100, 0, 7), + new AttackMove(Moves.FREEZY_FROST, "Freezy Frost (N)", Type.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, "The user attacks with a crystal made of cold frozen haze. It eliminates every stat change among all the Pokémon engaged in battle.", -1, 0, 7), + new AttackMove(Moves.SPARKLY_SWIRL, "Sparkly Swirl (N)", Type.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, "The user attacks the target by wrapping it with a whirlwind of an overpowering scent. This also heals all status conditions of the user's party.", -1, 0, 7), + new AttackMove(Moves.VEEVEE_VOLLEY, "Veevee Volley (N)", Type.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, "The more Eevee loves its Trainer, the greater the move's power. It never misses.", -1, 0, 7), /* End Unused */ - new AttackMove(Moves.DOUBLE_IRON_BASH, "Double Iron Bash (N)", Type.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, -1, "The user rotates, centering the hex nut in its chest, and then strikes with its arms twice in a row. This may also make the target flinch.", 30, 0, 7), - new SelfStatusMove(Moves.MAX_GUARD, "Max Guard (N)", Type.NORMAL, -1, 10, -1, "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession.", -1, 4, 8), + new AttackMove(Moves.DOUBLE_IRON_BASH, "Double Iron Bash", Type.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, -1, "The user rotates, centering the hex nut in its chest, and then strikes with its arms twice in a row. This may also make the target flinch.", 30, 0, 7) + .attr(MultiHitAttr, MultiHitType._2) + .attr(FlinchAttr), + new SelfStatusMove(Moves.MAX_GUARD, "Max Guard", Type.NORMAL, -1, 10, -1, "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession.", -1, 4, 8) + .attr(ProtectAttr), new AttackMove(Moves.DYNAMAX_CANNON, "Dynamax Cannon", Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, "The user unleashes a strong beam from its core. This move deals twice the damage if the target is over level 200.", -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => target.level > 200 ? 2 : 1) .ignoresVirtual(), new AttackMove(Moves.SNIPE_SHOT, "Snipe Shot (N)", Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, "The user ignores the effects of opposing Pokémon's moves and Abilities that draw in moves, allowing this move to hit the chosen target.", -1, 0, 8), new AttackMove(Moves.JAW_LOCK, "Jaw Lock (N)", Type.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, "This move prevents the user and the target from switching out until either of them faints. The effect goes away if either of the Pokémon leaves the field.", -1, 0, 8), new SelfStatusMove(Moves.STUFF_CHEEKS, "Stuff Cheeks (N)", Type.NORMAL, -1, 10, -1, "The user eats its held Berry, then sharply raises its Defense stat.", 100, 0, 8), - new SelfStatusMove(Moves.NO_RETREAT, "No Retreat (N)", Type.FIGHTING, -1, 5, -1, "This move raises all the user's stats but prevents the user from switching out or fleeing.", 100, 0, 8), + new SelfStatusMove(Moves.NO_RETREAT, "No Retreat", Type.FIGHTING, -1, 5, -1, "This move raises all the user's stats but prevents the user from switching out or fleeing.", 100, 0, 8) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 1, true) + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, true, 1, true), new StatusMove(Moves.TAR_SHOT, "Tar Shot (N)", Type.ROCK, 100, 15, -1, "The user pours sticky tar over the target, lowering the target's Speed stat. The target becomes weaker to Fire-type moves.", 100, 0, 8), new StatusMove(Moves.MAGIC_POWDER, "Magic Powder (N)", Type.PSYCHIC, 100, 20, -1, "The user scatters a cloud of magic powder that changes the target to Psychic type.", -1, 0, 8), new AttackMove(Moves.DRAGON_DARTS, "Dragon Darts (N)", Type.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, "The user attacks twice using Dreepy. If there are two targets, this move hits each target once.", -1, 0, 8), @@ -4376,22 +4395,31 @@ export function initMoves() { /* End Unused */ new SelfStatusMove(Moves.CLANGOROUS_SOUL, "Clangorous Soul (N)", Type.DRAGON, 100, 5, -1, "The user raises all its stats by using some of its HP.", 100, 0, 8), new AttackMove(Moves.BODY_PRESS, "Body Press (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user attacks by slamming its body into the target. The higher the user's Defense, the more damage it can inflict on the target.", -1, 0, 8), - new StatusMove(Moves.DECORATE, "Decorate (N)", Type.FAIRY, -1, 15, -1, "The user sharply raises the target's Attack and Sp. Atk stats by decorating the target.", 100, 0, 8), - new AttackMove(Moves.DRUM_BEATING, "Drum Beating (N)", Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user plays its drum, controlling the drum's roots to attack the target. This also lowers the target's Speed stat.", 100, 0, 8), + new StatusMove(Moves.DECORATE, "Decorate", Type.FAIRY, -1, 15, -1, "The user sharply raises the target's Attack and Sp. Atk stats by decorating the target.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.ATK, 2) + .attr(StatChangeAttr, BattleStat.SPATK, 2), + new AttackMove(Moves.DRUM_BEATING, "Drum Beating", Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user plays its drum, controlling the drum's roots to attack the target. This also lowers the target's Speed stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.SPD, -1), new AttackMove(Moves.SNAP_TRAP, "Snap Trap (N)", Type.GRASS, MoveCategory.PHYSICAL, 35, 100, 15, -1, "The user snares the target in a snap trap for four to five turns.", 100, 0, 8), - new AttackMove(Moves.PYRO_BALL, "Pyro Ball (N)", Type.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, -1, "The user attacks by igniting a small stone and launching it as a fiery ball at the target. This may also leave the target with a burn.", 10, 0, 8), - new AttackMove(Moves.BEHEMOTH_BLADE, "Behemoth Blade (N)", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user becomes a gigantic sword and cuts the target. This move deals twice the damage if the target is Dynamaxed.", -1, 0, 8), - new AttackMove(Moves.BEHEMOTH_BASH, "Behemoth Bash (N)", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user becomes a gigantic shield and slams into the target. This move deals twice the damage if the target is Dynamaxed.", -1, 0, 8), + new AttackMove(Moves.PYRO_BALL, "Pyro Ball", Type.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, -1, "The user attacks by igniting a small stone and launching it as a fiery ball at the target. This may also leave the target with a burn.", 10, 0, 8) + .attr(StatusEffectAttr, StatusEffect.BURN), + new AttackMove(Moves.BEHEMOTH_BLADE, "Behemoth Blade", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user wields a large, powerful sword using its whole body and cuts the target in a vigorous attack.", -1, 0, 8), + new AttackMove(Moves.BEHEMOTH_BASH, "Behemoth Bash", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user's body becomes a firm shield and slams into the target fiercely.", -1, 0, 8), new AttackMove(Moves.AURA_WHEEL, "Aura Wheel (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, -1, "Morpeko attacks and raises its Speed with the energy stored in its cheeks. This move's type changes depending on the user's form.", 100, 0, 8), - new AttackMove(Moves.BREAKING_SWIPE, "Breaking Swipe (N)", Type.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, -1, "The user swings its tough tail wildly and attacks opposing Pokémon. This also lowers their Attack stats.", 100, 0, 8) + new AttackMove(Moves.BREAKING_SWIPE, "Breaking Swipe", Type.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, -1, "The user swings its tough tail wildly and attacks opposing Pokémon. This also lowers their Attack stats.", 100, 0, 8) + .target(MoveTarget.ALL_NEAR_ENEMIES) + .attr(StatChangeAttr, BattleStat.ATK, -1), + new AttackMove(Moves.BRANCH_POKE, "Branch Poke", Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, "The user attacks the target by poking it with a sharply pointed branch.", -1, 0, 8), + new AttackMove(Moves.OVERDRIVE, "Overdrive", Type.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user attacks opposing Pokémon by twanging a guitar or bass guitar, causing a huge echo and strong vibration.", -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BRANCH_POKE, "Branch Poke (N)", Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, "The user attacks the target by poking it with a sharply pointed branch.", -1, 0, 8), - new AttackMove(Moves.OVERDRIVE, "Overdrive (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user attacks opposing Pokémon by twanging a guitar or bass guitar, causing a huge echo and strong vibration.", -1, 0, 8) - .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.APPLE_ACID, "Apple Acid (N)", Type.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user attacks the target with an acidic liquid created from tart apples. This also lowers the target's Sp. Def stat.", 100, 0, 8), - new AttackMove(Moves.GRAV_APPLE, "Grav Apple (N)", Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user inflicts damage by dropping an apple from high above. This also lowers the target's Defense stat.", 100, 0, 8), - new AttackMove(Moves.SPIRIT_BREAK, "Spirit Break (N)", Type.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, -1, "The user attacks the target with so much force that it could break the target's spirit. This also lowers the target's Sp. Atk stat.", 100, 0, 8), - new AttackMove(Moves.STRANGE_STEAM, "Strange Steam (N)", Type.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, -1, "The user attacks the target by emitting steam. This may also confuse the target.", 20, 0, 8), + new AttackMove(Moves.APPLE_ACID, "Apple Acid", Type.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user attacks the target with an acidic liquid created from tart apples. This also lowers the target's Sp. Def stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.SPDEF, -1), + new AttackMove(Moves.GRAV_APPLE, "Grav Apple (P)", Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user inflicts damage by dropping an apple from high above. This also lowers the target's Defense stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.DEF, -1), + new AttackMove(Moves.SPIRIT_BREAK, "Spirit Break", Type.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, -1, "The user attacks the target with so much force that it could break the target's spirit. This also lowers the target's Sp. Atk stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.SPATK, -1), + new AttackMove(Moves.STRANGE_STEAM, "Strange Steam", Type.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, -1, "The user attacks the target by emitting steam. This may also confuse the target.", 20, 0, 8) + .attr(ConfuseAttr), new StatusMove(Moves.LIFE_DEW, "Life Dew (N)", Type.WATER, -1, 10, -1, "The user scatters mysterious water around and restores the HP of itself and its ally Pokémon in the battle.", -1, 0, 8) .target(MoveTarget.USER_AND_ALLIES), new SelfStatusMove(Moves.OBSTRUCT, "Obstruct (P)", Type.DARK, 100, 10, -1, "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession. Direct contact harshly lowers the attacker's Defense stat.", -1, 4, 8) @@ -4420,12 +4448,12 @@ export function initMoves() { new AttackMove(Moves.POLTERGEIST, "Poltergeist (N)", Type.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, "The user attacks the target by controlling the target's item. The move fails if the target doesn't have an item.", -1, 0, 8), new StatusMove(Moves.CORROSIVE_GAS, "Corrosive Gas (N)", Type.POISON, 100, 40, -1, "The user surrounds everything around it with highly acidic gas and melts away items they hold.", -1, 0, 8) .target(MoveTarget.ALL_NEAR_OTHERS), - new StatusMove(Moves.COACHING, "Coaching (N)", Type.FIGHTING, -1, 10, -1, "The user properly coaches its ally Pokémon, boosting their Attack and Defense stats.", 100, 0, 8) + new StatusMove(Moves.COACHING, "Coaching (P)", Type.FIGHTING, -1, 10, -1, "The user properly coaches its ally Pokémon, boosting their Attack and Defense stats.", 100, 0, 8) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], 1) .target(MoveTarget.USER_AND_ALLIES), new AttackMove(Moves.FLIP_TURN, "Flip Turn", Type.WATER, MoveCategory.PHYSICAL, 60, 100, 20, -1, "After making its attack, the user rushes back to switch places with a party Pokémon in waiting.", -1, 0, 8) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.TRIPLE_AXEL, "Triple Axel (p)", Type.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, "A consecutive three-kick attack that becomes more powerful with each successful hit.", -1, 0, 8) + new AttackMove(Moves.TRIPLE_AXEL, "Triple Axel (P)", Type.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, "A consecutive three-kick attack that becomes more powerful with each successful hit.", -1, 0, 8) .attr(MultiHitAttr, MultiHitType._3_INCR) .attr(MissEffectAttr, (user: Pokemon, move: Move) => { user.turnData.hitsLeft = 1; @@ -4457,97 +4485,168 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.ASTRAL_BARRAGE, "Astral Barrage", Type.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, "The user attacks by sending a frightful amount of small ghosts at opposing Pokémon.", -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.EERIE_SPELL, "Eerie Spell (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, -1, "The user attacks with its tremendous psychic power. This also removes 3 PP from the target's last move.", -1, 0, 8), - new AttackMove(Moves.DIRE_CLAW, "Dire Claw (N)", Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, -1, "", -1, 0, 8), - new AttackMove(Moves.PSYSHIELD_BASH, "Psyshield Bash (N)", Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, -1, "", -1, 0, 8), - new SelfStatusMove(Moves.POWER_SHIFT, "Power Shift (N)", Type.NORMAL, -1, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.STONE_AXE, "Stone Axe (N)", Type.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, -1, "", -1, 0, 8), - new AttackMove(Moves.SPRINGTIDE_STORM, "Springtide Storm (N)", Type.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, -1, "", -1, 0, 8) + new AttackMove(Moves.EERIE_SPELL, "Eerie Spell (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, -1, "The user attacks with its tremendous psychic power. This also removes 3 PP from the target's last move.", 100, 0, 8), + new AttackMove(Moves.DIRE_CLAW, "Dire Claw", Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user lashes out at the target with ruinous claws. This may also leave the target poisoned, paralyzed, or asleep.", 50, 0, 8) + .attr(StatusEffectAttr, StatusEffect.POISON) + .attr(StatusEffectAttr, StatusEffect.PARALYSIS) + .attr(StatusEffectAttr, StatusEffect.SLEEP), + new AttackMove(Moves.PSYSHIELD_BASH, "Psyshield Bash", Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, -1, "Cloaking itself in psychic energy, the user slams into the target. This also boosts the user's Defense stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.DEF, 1, true), + new SelfStatusMove(Moves.POWER_SHIFT, "Power Shift (N)", Type.NORMAL, -1, 10, -1, "The user swaps its Attack and Defense stats.", 100, 0, 8), + new AttackMove(Moves.STONE_AXE, "Stone Axe", Type.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, -1, "The user swings its stone axes at the target. Stone splinters left behind by this attack float around the target.", 100, 0, 8) + .attr(AddArenaTrapTagAttr, ArenaTagType.STEALTH_ROCK), + new AttackMove(Moves.SPRINGTIDE_STORM, "Springtide Storm", Type.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, -1, "The user attacks by wrapping opposing Pokémon in fierce winds brimming with love and hate. This may also lower their Attack stats.", 30, 0, 8) + .attr(StatChangeAttr, BattleStat.ATK, -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.MYSTICAL_POWER, "Mystical Power (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.RAGING_FURY, "Raging Fury (N)", Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, "", -1, 0, 8) + new AttackMove(Moves.MYSTICAL_POWER, "Mystical Power", Type.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, -1, "The user attacks by emitting a mysterious power. This also boosts the user's Sp. Atk stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.SPATK, 1, true), + new AttackMove(Moves.RAGING_FURY, "Raging Fury", Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, "The user rampages around spewing flames for two to three turns. The user then becomes confused.", -1, 0, 8) + .attr(FrenzyAttr) + .attr(MissEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new AttackMove(Moves.WAVE_CRASH, "Wave Crash (N)", Type.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.CHLOROBLAST, "Chloroblast (N)", Type.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, "", -1, 0, 8), - new AttackMove(Moves.MOUNTAIN_GALE, "Mountain Gale (N)", Type.ICE, MoveCategory.PHYSICAL, 100, 85, 10, -1, "", -1, 0, 8), - new SelfStatusMove(Moves.VICTORY_DANCE, "Victory Dance (N)", Type.FIGHTING, -1, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.HEADLONG_RUSH, "Headlong Rush (N)", Type.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, "", -1, 0, 8), - new AttackMove(Moves.BARB_BARRAGE, "Barb Barrage (N)", Type.POISON, MoveCategory.PHYSICAL, 60, 100, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.ESPER_WING, "Esper Wing (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.BITTER_MALICE, "Bitter Malice (N)", Type.GHOST, MoveCategory.SPECIAL, 75, 100, 10, -1, "", -1, 0, 8), - new SelfStatusMove(Moves.SHELTER, "Shelter (N)", Type.STEEL, -1, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.TRIPLE_ARROWS, "Triple Arrows (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, -1, "", -1, 0, 8), - new AttackMove(Moves.INFERNAL_PARADE, "Infernal Parade (N)", Type.GHOST, MoveCategory.SPECIAL, 60, 100, 15, -1, "", -1, 0, 8), - new AttackMove(Moves.CEASELESS_EDGE, "Ceaseless Edge (N)", Type.DARK, MoveCategory.PHYSICAL, 65, 90, 15, -1, "", -1, 0, 8), - new AttackMove(Moves.BLEAKWIND_STORM, "Bleakwind Storm (N)", Type.FLYING, MoveCategory.SPECIAL, 100, 80, 10, -1, "", -1, 0, 8) + new AttackMove(Moves.WAVE_CRASH, "Wave Crash", Type.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, "The user shrouds itself in water and slams into the target with its whole body to inflict damage. This also damages the user quite a lot.", -1, 0, 8) + .attr(RecoilAttr), + new AttackMove(Moves.CHLOROBLAST, "Chloroblast (N)", Type.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, "The user launches its amassed chlorophyll to inflict damage on the target. This also damages the user.", -1, 0, 8), + new AttackMove(Moves.MOUNTAIN_GALE, "Mountain Gale", Type.ICE, MoveCategory.PHYSICAL, 100, 85, 10, -1, "The user hurls giant chunks of ice at the target to inflict damage. This may also make the target flinch.", 30, 0, 8) + .attr(FlinchAttr), + new SelfStatusMove(Moves.VICTORY_DANCE, "Victory Dance", Type.FIGHTING, -1, 10, -1, "The user performs an intense dance to usher in victory, boosting its Attack, Defense, and Speed stats.", 100, 0, 8) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPD ], 1, true), + new AttackMove(Moves.HEADLONG_RUSH, "Headlong Rush", Type.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, "The user smashes into the target in a full-body tackle. This also lowers the user's Defense and Sp. Def stats.", 100, 0, 8) + .attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], -1, true), + new AttackMove(Moves.BARB_BARRAGE, "Barb Barrage", Type.POISON, MoveCategory.PHYSICAL, 60, 100, 10, -1, "The user launches countless toxic barbs to inflict damage. This may also poison the target. This move's power is doubled if the target is already poisoned.", 50, 0, 8) + .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1) + .attr(StatusEffectAttr, StatusEffect.POISON), + new AttackMove(Moves.ESPER_WING, "Esper Wing", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user slashes the target with aura-enriched wings. This also boosts the user's Speed stat. This move has a heightened chance of landing a critical hit.", 100, 0, 8) + .attr(HighCritAttr) + .attr(StatChangeAttr, BattleStat.SPD, 1, true), + new AttackMove(Moves.BITTER_MALICE, "Bitter Malice", Type.GHOST, MoveCategory.SPECIAL, 75, 100, 10, -1, "The user attacks the target with spine-chilling resentment. This also lowers the target's Attack stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.ATK, -1), + new SelfStatusMove(Moves.SHELTER, "Shelter", Type.STEEL, -1, 10, -1, "The user makes its skin as hard as an iron shield, sharply boosting its Defense stat.", 100, 0, 8) + .attr(StatChangeAttr, BattleStat.DEF, 2, true), + new AttackMove(Moves.TRIPLE_ARROWS, "Triple Arrows (P)", Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, -1, "The user kicks, then fires three arrows. This move has a heightened chance of landing a critical hit and may also lower the target's Defense stat or make it flinch.", 30, 0, 8) + .attr(HighCritAttr) + .attr(StatChangeAttr, BattleStat.DEF, -1) + .attr(FlinchAttr), + new AttackMove(Moves.INFERNAL_PARADE, "Infernal Parade (P)", Type.GHOST, MoveCategory.SPECIAL, 60, 100, 15, -1, "The user attacks with myriad fireballs. This may also leave the target with a burn. This move's power is doubled if the target has a status condition.", 30, 0, 8) + .attr(StatusEffectAttr, StatusEffect.BURN), + new AttackMove(Moves.CEASELESS_EDGE, "Ceaseless Edge", Type.DARK, MoveCategory.PHYSICAL, 65, 90, 15, -1, "The user slashes its shell blade at the target. Shell splinters left behind by this attack remain scattered under the target as spikes.", 100, 0, 8) + .attr(AddArenaTrapTagAttr, ArenaTagType.SPIKES), + new AttackMove(Moves.BLEAKWIND_STORM, "Bleakwind Storm", Type.FLYING, MoveCategory.SPECIAL, 100, 80, 10, -1, "The user attacks with savagely cold winds that cause both body and spirit to tremble. This may also lower the Speed stats of opposing Pokémon.", 30, 0, 8) + .attr(ThunderAccuracyAttr) + .attr(StatChangeAttr, BattleStat.SPD, -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.WILDBOLT_STORM, "Wildbolt Storm (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, -1, "", -1, 0, 8) + new AttackMove(Moves.WILDBOLT_STORM, "Wildbolt Storm", Type.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, -1, "The user summons a thunderous tempest and savagely attacks with lightning and wind. This may also leave opposing Pokémon with paralysis.", 20, 0, 8) + .attr(ThunderAccuracyAttr) + .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SANDSEAR_STORM, "Sandsear Storm (N)", Type.GROUND, MoveCategory.SPECIAL, 100, 80, 10, -1, "", -1, 0, 8) + new AttackMove(Moves.SANDSEAR_STORM, "Sandsear Storm", Type.GROUND, MoveCategory.SPECIAL, 100, 80, 10, -1, "The user attacks by wrapping opposing Pokémon in fierce winds and searingly hot sand. This may also leave them with a burn.", 20, 0, 8) + .attr(ThunderAccuracyAttr) + .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.LUNAR_BLESSING, "Lunar Blessing (N)", Type.PSYCHIC, -1, 5, -1, "", -1, 0, 8) - .target(MoveTarget.NEAR_ALLY), - new StatusMove(Moves.TAKE_HEART, "Take Heart (N)", Type.PSYCHIC, -1, 10, -1, "", -1, 0, 8) - .target(MoveTarget.NEAR_ALLY), - new AttackMove(Moves.TERA_BLAST, "Tera Blast (N)", Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, "", -1, 0, 9), - new SelfStatusMove(Moves.SILK_TRAP, "Silk Trap (N)", Type.BUG, -1, 10, -1, "", -1, 4, 9), - new AttackMove(Moves.AXE_KICK, "Axe Kick (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.LAST_RESPECTS, "Last Respects (N)", Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.LUMINA_CRASH, "Lumina Crash (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.ORDER_UP, "Order Up (N)", Type.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.JET_PUNCH, "Jet Punch (N)", Type.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, "", -1, 1, 9), - new StatusMove(Moves.SPICY_EXTRACT, "Spicy Extract (N)", Type.GRASS, -1, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.SPIN_OUT, "Spin Out (N)", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.POPULATION_BOMB, "Population Bomb (N)", Type.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.ICE_SPINNER, "Ice Spinner (N)", Type.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.GLAIVE_RUSH, "Glaive Rush (N)", Type.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, "", -1, 0, 9), - new StatusMove(Moves.REVIVAL_BLESSING, "Revival Blessing (N)", Type.NORMAL, -1, 1, -1, "", -1, 0, 9), - new AttackMove(Moves.SALT_CURE, "Salt Cure (N)", Type.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.TRIPLE_DIVE, "Triple Dive (N)", Type.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.MORTAL_SPIN, "Mortal Spin (N)", Type.POISON, MoveCategory.PHYSICAL, 30, 100, 15, -1, "", -1, 0, 9) + new StatusMove(Moves.LUNAR_BLESSING, "Lunar Blessing (P)", Type.PSYCHIC, -1, 5, -1, "The user receives a blessing from the crescent moon, restoring HP and curing status conditions for itself and its ally Pokémon currently in the battle.", -1, 0, 8) + .attr(HealAttr, 0.25) + .target(MoveTarget.USER_AND_ALLIES), + new SelfStatusMove(Moves.TAKE_HEART, "Take Heart (P)", Type.PSYCHIC, -1, 10, -1, "The user lifts its spirits, curing its own status conditions and boosting its Sp. Atk and Sp. Def stats.", -1, 0, 8) + .attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF ], 1, true), + new AttackMove(Moves.TERA_BLAST, "Tera Blast (N)", Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, "If the user has Terastallized, it unleashes energy of its Tera Type. This move inflicts damage using the Attack or Sp. Atk stat-whichever is higher for the user.", -1, 0, 9), + new SelfStatusMove(Moves.SILK_TRAP, "Silk Trap (N)", Type.BUG, -1, 10, -1, "The user spins a silken trap, protecting itself from damage while lowering the Speed stat of any attacker that makes direct contact.", -1, 4, 9), + new AttackMove(Moves.AXE_KICK, "Axe Kick", Type.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, -1, "The user attacks by kicking up into the air and slamming its heel down upon the target. This may also confuse the target. If it misses, the user takes damage instead.", 30, 0, 9) + .attr(MissEffectAttr, (user: Pokemon, move: Move) => { user.damage(Math.floor(user.getMaxHp() / 2)); return true; }) + .attr(FlinchAttr), + new AttackMove(Moves.LAST_RESPECTS, "Last Respects (N)", Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, "The user attacks to avenge its allies. The more defeated allies there are in the user's party, the greater the move's power.", -1, 0, 9), + new AttackMove(Moves.LUMINA_CRASH, "Lumina Crash", Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user attacks by unleashing a peculiar light that even affects the mind. This also harshly lowers the target's Sp. Def stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPDEF, -2), + new AttackMove(Moves.ORDER_UP, "Order Up (N)", Type.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user attacks with elegant poise. If the user has a Tatsugiri in its mouth, this move boosts one of the user's stats based on the Tatsugiri's form.", -1, 0, 9), + new AttackMove(Moves.JET_PUNCH, "Jet Punch", Type.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, "The user summons a torrent around its fist and punches at blinding speed. This move always goes first.", -1, 1, 9), + new StatusMove(Moves.SPICY_EXTRACT, "Spicy Extract", Type.GRASS, -1, 15, -1, "The user emits an incredibly spicy extract, sharply boosting the target's Attack stat and harshly lowering the target's Defense stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.ATK, 2) + .attr(StatChangeAttr, BattleStat.DEF, -2), + new AttackMove(Moves.SPIN_OUT, "Spin Out", Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user spins furiously by straining its legs, inflicting damage on the target. This also harshly lowers the user's Speed stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPD, -2, true), + new AttackMove(Moves.POPULATION_BOMB, "Population Bomb (P)", Type.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, "The user's fellows gather in droves to perform a combo attack that hits the target one to ten times in a row.", -1, 0, 9) + .attr(MultiHitAttr, MultiHitType._10), + new AttackMove(Moves.ICE_SPINNER, "Ice Spinner (N)", Type.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user covers its feet in thin ice and twirls around, slamming into the target. This move's spinning motion also destroys the terrain.", -1, 0, 9), + new AttackMove(Moves.GLAIVE_RUSH, "Glaive Rush (N)", Type.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, "The user throws its entire body into a reckless charge. After this move is used, attacks on the user cannot miss and will inflict double damage until the user's next turn.", -1, 0, 9), + new StatusMove(Moves.REVIVAL_BLESSING, "Revival Blessing (N)", Type.NORMAL, -1, 1, -1, "The user bestows a loving blessing, reviving a party Pokémon that has fainted and restoring half that Pokémon's max HP.", -1, 0, 9), + new AttackMove(Moves.SALT_CURE, "Salt Cure (N)", Type.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, -1, "The user salt cures the target, inflicting damage every turn. Steel and Water types are more strongly affected by this move.", -1, 0, 9), + new AttackMove(Moves.TRIPLE_DIVE, "Triple Dive", Type.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, "The user performs a perfectly timed triple dive, hitting the target with splashes of water three times in a row.", -1, 0, 9) + .attr(MultiHitAttr, MultiHitType._3), + new AttackMove(Moves.MORTAL_SPIN, "Mortal Spin", Type.POISON, MoveCategory.PHYSICAL, 30, 100, 15, -1, "The user performs a spin attack that can also eliminate the effects of such moves as Bind, Wrap, and Leech Seed. This also poisons opposing Pokémon.", -1, 0, 9) + .attr(LapseBattlerTagAttr, [ BattlerTagType.BIND, BattlerTagType.WRAP, BattlerTagType.FIRE_SPIN, BattlerTagType.WHIRLPOOL, BattlerTagType.CLAMP, BattlerTagType.SAND_TOMB, BattlerTagType.MAGMA_STORM, BattlerTagType.SEEDED ], true) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.DOODLE, "Doodle (N)", Type.NORMAL, 100, 10, -1, "", -1, 0, 9), - new SelfStatusMove(Moves.FILLET_AWAY, "Fillet Away (N)", Type.NORMAL, -1, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.KOWTOW_CLEAVE, "Kowtow Cleave (N)", Type.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.FLOWER_TRICK, "Flower Trick (N)", Type.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.TORCH_SONG, "Torch Song (N)", Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.AQUA_STEP, "Aqua Step (N)", Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.RAGING_BULL, "Raging Bull (N)", Type.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.MAKE_IT_RAIN, "Make It Rain (N)", Type.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, "", -1, 0, 9) + new StatusMove(Moves.DOODLE, "Doodle (N)", Type.NORMAL, 100, 10, -1, "The user captures the very essence of the target in a sketch. This changes the Abilities of the user and its ally Pokémon to that of the target.", -1, 0, 9), + new SelfStatusMove(Moves.FILLET_AWAY, "Fillet Away (N)", Type.NORMAL, -1, 10, -1, "The user sharply boosts its Attack, Sp. Atk, and Speed stats by using its own HP.", -1, 0, 9), + new AttackMove(Moves.KOWTOW_CLEAVE, "Kowtow Cleave", Type.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, "The user slashes at the target after kowtowing to make the target let down its guard. This attack never misses.", -1, 0, 9), + new AttackMove(Moves.FLOWER_TRICK, "Flower Trick", Type.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, "The user throws a rigged bouquet of flowers at the target. This attack never misses and always lands a critical hit.", 100, 0, 9) + .attr(CritOnlyAttr), + new AttackMove(Moves.TORCH_SONG, "Torch Song", Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, "The user blows out raging flames as if singing a song, scorching the target. This also boosts the user's Sp. Atk stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPATK, 1, true) + .soundBased(), + new AttackMove(Moves.AQUA_STEP, "Aqua Step", Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user toys with the target and attacks it using light and fluid dance steps. This also boosts the user's Speed stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPD, 1, true), + new AttackMove(Moves.RAGING_BULL, "Raging Bull (N)", Type.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, "The user performs a tackle like a raging bull. This move's type depends on the user's form. It can also break barriers, such as Light Screen and Reflect.", -1, 0, 9), + new AttackMove(Moves.MAKE_IT_RAIN, "Make It Rain (P)", Type.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, "The user attacks by throwing out a mass of coins. This also lowers the user's Sp. Atk stat. Money is earned after the battle.", -1, 0, 9) + .attr(StatChangeAttr, BattleStat.SPATK, -1, true) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PSYBLADE, "Psyblade (N)", Type.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.HYDRO_STEAM, "Hydro Steam (N)", Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.RUINATION, "Ruination (N)", Type.DARK, MoveCategory.SPECIAL, 1, 90, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.COLLISION_COURSE, "Collision Course (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.ELECTRO_DRIFT, "Electro Drift (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, "", -1, 0, 9), - new SelfStatusMove(Moves.SHED_TAIL, "Shed Tail (N)", Type.NORMAL, -1, 10, -1, "", -1, 0, 9), - new StatusMove(Moves.CHILLY_RECEPTION, "Chilly Reception (N)", Type.ICE, -1, 10, -1, "", -1, 0, 9) + new AttackMove(Moves.PSYBLADE, "Psyblade (N)", Type.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, "The user rends the target with an ethereal blade. This move's power is boosted by 50 percent if the user is on Electric Terrain.", -1, 0, 9), + new AttackMove(Moves.HYDRO_STEAM, "Hydro Steam (N)", Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, "The user blasts the target with boiling-hot water. This move's power is not lowered in harsh sunlight but rather boosted by 50 percent.", -1, 0, 9), + new AttackMove(Moves.RUINATION, "Ruination", Type.DARK, MoveCategory.SPECIAL, 1, 90, 10, -1, "The user summons a ruinous disaster. This cuts the target's HP in half.", -1, 0, 9) + .attr(TargetHalfHpDamageAttr), + new AttackMove(Moves.COLLISION_COURSE, "Collision Course (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user transforms and crashes to the ground, causing a massive prehistoric explosion. This move's power is boosted more than usual if it's a supereffective hit.", -1, 0, 9), + new AttackMove(Moves.ELECTRO_DRIFT, "Electro Drift (N)", Type.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, "The user races forward at ultrafast speeds, piercing its target with futuristic electricity. This move's power is boosted more than usual if it's a supereffective hit.", -1, 0, 9), + new SelfStatusMove(Moves.SHED_TAIL, "Shed Tail (N)", Type.NORMAL, -1, 10, -1, "The user creates a substitute for itself using its own HP before switching places with a party Pokémon in waiting.", -1, 0, 9), + new StatusMove(Moves.CHILLY_RECEPTION, "Chilly Reception", Type.ICE, -1, 10, -1, "The user tells a chillingly bad joke before switching places with a party Pokémon in waiting. This summons a snowstorm lasting five turns.", -1, 0, 9) + .attr(WeatherChangeAttr, WeatherType.HAIL) // Set to Hail for now, if Snow is added in the future, change this + .attr(ForceSwitchOutAttr, true, false) .target(MoveTarget.BOTH_SIDES), - new SelfStatusMove(Moves.TIDY_UP, "Tidy Up (N)", Type.NORMAL, -1, 10, -1, "", -1, 0, 9), - new StatusMove(Moves.SNOWSCAPE, "Snowscape (N)", Type.ICE, -1, 10, -1, "", -1, 0, 9) + new SelfStatusMove(Moves.TIDY_UP, "Tidy Up (P)", Type.NORMAL, -1, 10, -1, "The user tidies up and removes the effects of Spikes, Stealth Rock, Sticky Web, Toxic Spikes, and Substitute. This also boosts the user's Attack and Speed stats.", 100, 0, 9) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPD ], 1, true), + new StatusMove(Moves.SNOWSCAPE, "Snowscape", Type.ICE, -1, 10, -1, "The user summons a snowstorm lasting five turns. This boosts the Defense stats of Ice types.", -1, 0, 9) + .attr(WeatherChangeAttr, WeatherType.HAIL) // Set to Hail for now, if Snow is added in the future, change this .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.POUNCE, "Pounce (N)", Type.BUG, MoveCategory.PHYSICAL, 50, 100, 20, -1, "", -1, 0, 9), - new AttackMove(Moves.TRAILBLAZE, "Trailblaze (N)", Type.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, -1, "", -1, 0, 9), - new AttackMove(Moves.CHILLING_WATER, "Chilling Water (N)", Type.WATER, MoveCategory.SPECIAL, 50, 100, 20, -1, "", -1, 0, 9), - new AttackMove(Moves.HYPER_DRILL, "Hyper Drill (N)", Type.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.TWIN_BEAM, "Twin Beam (N)", Type.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.RAGE_FIST, "Rage Fist", Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, "The more times the user has been hit by attacks, the greater the move's power.", -1, 0, 9) + new AttackMove(Moves.POUNCE, "Pounce", Type.BUG, MoveCategory.PHYSICAL, 50, 100, 20, -1, "The user attacks by pouncing on the target. This also lowers the target's Speed stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPD, -1), + new AttackMove(Moves.TRAILBLAZE, "Trailblaze", Type.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, -1, "The user attacks suddenly as if leaping out from tall grass. The user's nimble footwork boosts its Speed stat.", 100, 0, 9) + .attr(StatChangeAttr, BattleStat.SPD, 1, true), + new AttackMove(Moves.CHILLING_WATER, "Chilling Water", Type.WATER, MoveCategory.SPECIAL, 50, 100, 20, -1, "The user attacks the target by showering it with water that's so cold it saps the target's power. This also lowers the target's Attack stat.", -1, 0, 9) + .attr(StatChangeAttr, BattleStat.ATK, -1), + new AttackMove(Moves.HYPER_DRILL, "Hyper Drill", Type.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, "The user spins the pointed part of its body at high speed to pierce the target. This attack can hit a target using a move such as Protect or Detect.", -1, 0, 9) + .ignoresProtect(), + new AttackMove(Moves.TWIN_BEAM, "Twin Beam", Type.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, "The user shoots mystical beams from its eyes to inflict damage. The target is hit twice in a row.", -1, 0, 9) + .attr(MultiHitAttr, MultiHitType._2), + new AttackMove(Moves.RAGE_FIST, "Rage Fist", Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, "The user converts its rage into energy to attack. The more times the user has been hit by attacks, the greater the move's power.", -1, 0, 9) .attr(HitCountPowerAttr), - new AttackMove(Moves.ARMOR_CANNON, "Armor Cannon (N)", Type.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.BITTER_BLADE, "Bitter Blade (N)", Type.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.DOUBLE_SHOCK, "Double Shock (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.GIGATON_HAMMER, "Gigaton Hammer (N)", Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.COMEUPPANCE, "Comeuppance (N)", Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, "", -1, 0, 9) + new AttackMove(Moves.ARMOR_CANNON, "Armor Cannon", Type.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, "The user shoots its own armor out as blazing projectiles. This also lowers the user's Defense and Sp. Def stats.", -1, 0, 9) + .attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], -1, true), + new AttackMove(Moves.BITTER_BLADE, "Bitter Blade", Type.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, "The user focuses its bitter feelings toward the world of the living into a slashing attack. The user's HP is restored by up to half the damage taken by the target.", -1, 0, 9) + .attr(HitHealAttr), + new AttackMove(Moves.DOUBLE_SHOCK, "Double Shock (N)", Type.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, "The user discharges all the electricity from its body to perform a high-damage attack. After using this move, the user will no longer be Electric type.", -1, 0, 9), + new AttackMove(Moves.GIGATON_HAMMER, "Gigaton Hammer (N)", Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, "The user swings its whole body around to attack with its huge hammer. This move can't be used twice in a row.", -1, 0, 9), + new AttackMove(Moves.COMEUPPANCE, "Comeuppance", Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, "The user retaliates with much greater force against the opponent that last inflicted damage on it.", -1, 0, 9) + .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.PHYSICAL) + .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.SPECIAL) .target(MoveTarget.ATTACKER), - new AttackMove(Moves.AQUA_CUTTER, "Aqua Cutter (N)", Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, "", -1, 0, 9), - new AttackMove(Moves.BLAZING_TORQUE, "Blazing Torque (N)", Type.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.WICKED_TORQUE, "Wicked Torque (N)", Type.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.NOXIOUS_TORQUE, "Noxious Torque (N)", Type.POISON, MoveCategory.PHYSICAL, 100, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.COMBAT_TORQUE, "Combat Torque (N)", Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.MAGICAL_TORQUE, "Magical Torque (N)", Type.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.BLOOD_MOON, "Blood Moon (N)", Type.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, "", -1, 0, 9), - new AttackMove(Moves.MATCHA_GOTCHA, "Matcha Gotcha (N)", Type.GRASS, MoveCategory.SPECIAL, 80, 90, 15, -1, "", -1, 0, 9), - new AttackMove(Moves.SYRUP_BOMB, "Syrup Bomb (N)", Type.GRASS, MoveCategory.SPECIAL, 60, 85, 10, -1, "", -1, 0, 9), - new AttackMove(Moves.IVY_CUDGEL, "Ivy Cudgel (N)", Type.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, "", -1, 0, 9) + new AttackMove(Moves.AQUA_CUTTER, "Aqua Cutter", Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, "The user expels pressurized water to cut at the target like a blade. This move has a heightened chance of landing a critical hit.", -1, 0, 9) + .attr(HighCritAttr), + /* Unused */ + new AttackMove(Moves.BLAZING_TORQUE, "Blazing Torque", Type.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user revs their blazing engine into the target. This may also leave the target with a burn.", 30, 0, 9) + .attr(StatusEffectAttr, StatusEffect.BURN), + new AttackMove(Moves.WICKED_TORQUE, "Wicked Torque", Type.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, "The user revs their engine into the target with malicious intent. This may put the target to sleep.", 10, 0, 9) + .attr(StatusEffectAttr, StatusEffect.SLEEP), + new AttackMove(Moves.NOXIOUS_TORQUE, "Noxious Torque", Type.POISON, MoveCategory.PHYSICAL, 100, 100, 10, -1, "The user revs their poisonous engine into the target. This may also poison the target.", 30, 0, 9) + .attr(StatusEffectAttr, StatusEffect.POISON), + new AttackMove(Moves.COMBAT_TORQUE, "Combat Torque", Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, -1, "The user revs their engine forcefully into the target. This may also leave the target with paralysis.", 30, 0, 9) + .attr(StatusEffectAttr, StatusEffect.PARALYSIS), + new AttackMove(Moves.MAGICAL_TORQUE, "Magical Torque", Type.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, -1, "The user revs their fae-like engine into the target. This may also confuse the target.", 30, 0, 9) + .attr(ConfuseAttr), + /* End Unused */ + new AttackMove(Moves.BLOOD_MOON, "Blood Moon (N)", Type.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, "The user unleashes the full brunt of its spirit from a full moon that shines as red as blood. This move can't be used twice in a row.", -1, 0, 9), + new AttackMove(Moves.MATCHA_GOTCHA, "Matcha Gotcha", Type.GRASS, MoveCategory.SPECIAL, 80, 90, 15, -1, "The user fires a blast of tea that it mixed. The user's HP is restored by up to half the damage taken by the target. This may also leave the target with a burn.", 20, 0, 9) + .attr(HitHealAttr) + .attr(StatusEffectAttr, StatusEffect.BURN) + .target(MoveTarget.ALL_NEAR_ENEMIES), + new AttackMove(Moves.SYRUP_BOMB, "Syrup Bomb (N)", Type.GRASS, MoveCategory.SPECIAL, 60, 85, 10, -1, "The user sets off an explosion of sticky candy syrup, which coats the target and causes the target's Speed stat to drop each turn for three turns.", -1, 0, 9), + new AttackMove(Moves.IVY_CUDGEL, "Ivy Cudgel (P)", Type.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, "The user strikes with an ivy-wrapped cudgel. This move's type changes depending on the mask worn by the user, and it has a heightened chance of landing a critical hit.", -1, 0, 9) + .attr(HighCritAttr) ); } \ No newline at end of file