From 9104c40d43e573daff06de91e2ecef5423ec2677 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Mon, 27 May 2024 16:07:13 +0100 Subject: [PATCH 01/31] Fixes Dancer triggering if the move's user didn't act (#4638) * Fixes Dancer triggering if the user flinched * Add check to make sure "Pokemon used move" message is kept * Address review --------- Co-authored-by: Fltp --- src/battle_script_commands.c | 15 +++++++- src/battle_util.c | 1 + test/battle/ability/dancer.c | 73 ++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b2d9e8a152..459c6007f7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6259,8 +6259,19 @@ static void Cmd_moveend(void) case MOVEEND_DANCER: // Special case because it's so annoying if (gMovesInfo[gCurrentMove].danceMove) { - u8 battler, nextDancer = 0; + u32 battler, nextDancer = 0; + bool32 turnOnHitmarker = FALSE; + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (gSpecialStatuses[battler].dancerUsedMove) + { + // in case a battler fails to act on a Dancer-called move + turnOnHitmarker = TRUE; + break; + } + } + if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker] || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove && gBattleStruct->bouncedMoveIsUsed))) @@ -6276,6 +6287,8 @@ static void Cmd_moveend(void) { if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) { + if (turnOnHitmarker) + gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed)) nextDancer = battler | 0x4; } diff --git a/src/battle_util.c b/src/battle_util.c index 1fe6facf12..493b1667b8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5754,6 +5754,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (IsBattlerAlive(battler) && (gMovesInfo[gCurrentMove].danceMove) && !gSpecialStatuses[battler].dancerUsedMove + && (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) && gBattlerAttacker != battler) { // Set bit and save Dancer mon's original target diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 34af26e75e..f54f7ab76a 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -53,3 +53,76 @@ DOUBLE_BATTLE_TEST("Dancer can copy Teeter Dance and confuse both opposing targe MESSAGE("Wynaut became confused!"); } } + +DOUBLE_BATTLE_TEST("Dancer triggers from slowest to fastest") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_WYNAUT) { Speed(50); } + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(3); } + } WHEN { + TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(opponentRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + ABILITY_POPUP(playerLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } +} + +SINGLE_BATTLE_TEST("Dancer doesn't trigger if the original user flinches") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + } WHEN { + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); + MESSAGE("Wobbuffet flinched!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_WYNAUT) { Speed(5); } + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(playerLeft, ABILITY_DANCER); + MESSAGE("Wobbuffet flinched!"); + NONE_OF { + MESSAGE("Wobbuffet used Dragon Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + } + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + MESSAGE("Foe Oricorio used Dragon Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } +} From df6fab7284ae6e7566deaf1ab15965883cf9698f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 28 May 2024 10:29:37 +0200 Subject: [PATCH 02/31] Missing ignoreSubstitute flags (#4623) * Missing ignoreSubstitute flags * update defog flag --- include/pokemon.h | 1 + src/data/moves_info.h | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/pokemon.h b/include/pokemon.h index d37e5f4ae9..a4a7ad47a0 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -514,6 +514,7 @@ struct MoveInfo u32 parentalBondBanned:1; u32 skyBattleBanned:1; u32 sketchBanned:1; + u32 padding:5; // end of word u32 argument; diff --git a/src/data/moves_info.h b/src/data/moves_info.h index fa11b510e1..35672537a6 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -6329,6 +6329,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_DEF_UP_1 }, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresSubstitute = TRUE, .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, @@ -10411,7 +10412,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_ACC_UP_1 }, - //.ignoresSubstitute = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS == GEN_4, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, @@ -14338,6 +14339,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .zMove = { .effect = Z_EFFECT_SPDEF_UP_2 }, .powderMove = TRUE, .magicCoatAffected = TRUE, + .ignoresSubstitute = TRUE, .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, From e0499f8b3e0a1549043e1b9212e31836d5073e1d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 28 May 2024 10:30:27 +0200 Subject: [PATCH 03/31] Fixes AI going for speed control even when faster (#4630) * Fixes AI going for speed control even when faster * Update src/battle_ai_util.c --- src/battle_ai_util.c | 64 +++++++++++--------------------------------- 1 file changed, 16 insertions(+), 48 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 84bd85e3bb..afcd1121e6 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -917,48 +917,21 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier) */ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered) { - u32 fasterAI = 0, fasterPlayer = 0, i; s8 prioAI = 0; s8 prioBattler2 = 0; - u16 *battler2Moves = GetMovesArray(battler2); - - // Check move priorities first. prioAI = GetMovePriority(battlerAI, moveConsidered); - for (i = 0; i < MAX_MON_MOVES; i++) - { - prioBattler2 = GetMovePriority(battler2, battler2Moves[i]); - if (battler2Moves[i] == MOVE_NONE || battler2Moves[i] == MOVE_UNAVAILABLE - || (prioBattler2 > prioAI && !CanIndexMoveFaintTarget(battler2, battlerAI, i , 2))) - continue; - if (prioAI > prioBattler2) - fasterAI++; - else if (prioBattler2 > prioAI) - fasterPlayer++; - } - - if (fasterAI > fasterPlayer) - { + if (prioAI > prioBattler2) + return AI_IS_FASTER; + + if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE, + AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2], + AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2], + AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2], + prioAI, prioBattler2) == 1) return AI_IS_FASTER; - } - else if (fasterAI < fasterPlayer) - { - return AI_IS_SLOWER; - } else - { - if (prioAI > prioBattler2) - return AI_IS_FASTER; // if we didn't know any of battler 2's moves to compare priorities, assume they don't have a prio+ move - // Priorities are the same(at least comparing to moves the AI is aware of), decide by speed. - if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE, - AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2], - AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2], - AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2], - prioAI, prioBattler2) == 1) - return AI_IS_FASTER; - else - return AI_IS_SLOWER; - } + return AI_IS_SLOWER; } // Check if target has means to faint ai mon. @@ -1657,19 +1630,14 @@ bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) - && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. + if (defAbility == ABILITY_CONTRARY + || defAbility == ABILITY_CLEAR_BODY + || defAbility == ABILITY_FULL_METAL_BODY + || defAbility == ABILITY_WHITE_SMOKE + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) + return FALSE; - if (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE - && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; + return (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)); } bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) From 0570609ce63e1bdbddb8da01acfeb52c7aa2765b Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 28 May 2024 10:34:05 +0200 Subject: [PATCH 04/31] Small Ability Effect Move Block refactor (#4635) * Small Ability Effect Move Block refactor * combine tests --- data/battle_scripts_1.s | 2 +- src/battle_util.c | 72 +++++++++++++++++++++--------- test/battle/ability/dazzling.c | 52 +++++++++++++++++++++ test/battle/ability/good_as_gold.c | 70 +++++++++++++++++++++++++++++ 4 files changed, 174 insertions(+), 22 deletions(-) create mode 100644 test/battle/ability/dazzling.c create mode 100644 test/battle/ability/good_as_gold.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a13aacea0c..a2184db6a6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8215,7 +8215,7 @@ BattleScript_DazzlingProtected:: attackstring ppreduce pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_POKEMONCANNOTUSEMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/src/battle_util.c b/src/battle_util.c index 493b1667b8..11cd2544d7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4977,30 +4977,69 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITYEFFECT_MOVES_BLOCK: // 2 { u16 moveTarget = GetBattlerMoveTargetType(battler, move); - u16 battlerAbility = GetBattlerAbility(battler); - u16 targetAbility = GetBattlerAbility(gBattlerTarget); - if ((gLastUsedAbility == ABILITY_SOUNDPROOF && gMovesInfo[move].soundMove && !(moveTarget & MOVE_TARGET_USER)) - || (gLastUsedAbility == ABILITY_BULLETPROOF && gMovesInfo[move].ballisticMove)) + switch (gLastUsedAbility) + { + case ABILITY_SOUNDPROOF: + if (gMovesInfo[move].soundMove && !(moveTarget & MOVE_TARGET_USER)) + effect = 1; + break; + case ABILITY_BULLETPROOF: + if (gMovesInfo[move].ballisticMove) + effect = 1; + break; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + effect = 2; + break; + case ABILITY_GOOD_AS_GOLD: + if (IS_MOVE_STATUS(gCurrentMove) + && !(moveTarget & MOVE_TARGET_USER) + && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) + && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) + effect = 3; + break; + } + + if (!effect) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battler))) + { + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + effect = 4; + break; + } + } + + if (effect == 1) { if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; gBattlescriptCurrInstr = BattleScript_SoundproofProtected; - effect = 1; } - else if ((gLastUsedAbility == ABILITY_DAZZLING || gLastUsedAbility == ABILITY_QUEENLY_MAJESTY || gLastUsedAbility == ABILITY_ARMOR_TAIL || IsBattlerAlive(battler ^= BIT_FLANK)) - && (battlerAbility == ABILITY_DAZZLING || battlerAbility == ABILITY_QUEENLY_MAJESTY || battlerAbility == ABILITY_ARMOR_TAIL) - && GetChosenMovePriority(gBattlerAttacker) > 0 - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + else if (effect == 2 || effect == 4) { + if (effect == 4) + gBattleScripting.battler = BATTLE_PARTNER(battler); + else + gBattleScripting.battler = battler; + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; gBattlescriptCurrInstr = BattleScript_DazzlingProtected; - effect = 1; + } + else if (effect == 3) + { + gBattlescriptCurrInstr = BattleScript_GoodAsGoldActivates; } else if (GetChosenMovePriority(gBattlerAttacker) > 0 - && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) - && !(IS_MOVE_STATUS(move) && (targetAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) + && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) + && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected @@ -5008,15 +5047,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattlescriptCurrInstr = BattleScript_DarkTypePreventsPrankster; effect = 1; } - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_GOOD_AS_GOLD - && IS_MOVE_STATUS(gCurrentMove) - && !(moveTarget & MOVE_TARGET_USER) - && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) - && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) - { - gBattlescriptCurrInstr = BattleScript_GoodAsGoldActivates; - effect = 1; - } break; } case ABILITYEFFECT_ABSORBING: // 3 diff --git a/test/battle/ability/dazzling.c b/test/battle/ability/dazzling.c new file mode 100644 index 0000000000..9eedb56a49 --- /dev/null +++ b/test/battle/ability/dazzling.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "test/battle.h" + + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority > 0); +} + +DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect the user from priority moves") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; } + PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; } + PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponentRight); + ABILITY_POPUP(opponentLeft, ability); + MESSAGE("Wobbuffet cannot use Quick Attack!"); + } +} + +DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect users partner from priority moves") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; } + PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; } + PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentRight); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponentRight); + ABILITY_POPUP(opponentLeft, ability); + MESSAGE("Wobbuffet cannot use Quick Attack!"); + } +} diff --git a/test/battle/ability/good_as_gold.c b/test/battle/ability/good_as_gold.c new file mode 100644 index 0000000000..596bb6c4c7 --- /dev/null +++ b/test/battle/ability/good_as_gold.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + + +SINGLE_BATTLE_TEST("Good as Gold protects from status moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } +} + +SINGLE_BATTLE_TEST("Good as Gold doesn't protect the user from it's own moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_NASTY_PLOT].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(opponent, MOVE_NASTY_PLOT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_NASTY_PLOT, opponent); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } + } +} + +SINGLE_BATTLE_TEST("Good as Gold doesn't protect from moves that target the field") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STEALTH_ROCK].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_STEALTH_ROCK].target == MOVE_TARGET_OPPONENTS_FIELD); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } + } +} + +DOUBLE_BATTLE_TEST("Good as Gold protects from partner's status moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_HELPING_HAND].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_HELPING_HAND); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HELPING_HAND, opponentRight); + ABILITY_POPUP(opponentLeft, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } +} From 06cbc9a1625bc4cecdcc62d96ae546c009f7ced8 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 28 May 2024 16:17:02 -0400 Subject: [PATCH 05/31] Restore changelog search-replace (#4644) --- docs/changelogs/1.8.x/1.8.0.md | 4 ++-- docs/changelogs/1.8.x/1.8.3.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/changelogs/1.8.x/1.8.0.md b/docs/changelogs/1.8.x/1.8.0.md index 128fefed06..81b66d3b12 100644 --- a/docs/changelogs/1.8.x/1.8.0.md +++ b/docs/changelogs/1.8.x/1.8.0.md @@ -359,10 +359,10 @@ * Added missing `P_UPDATED_EVS` config that allows setting the EV yield changes across generations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3993 * Added missing `P_UPDATED_EXP_YIELDS` config that allows setting the Experience yield changes across generations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3995 * Added evolution methods that require custom trackers (`MON_DATA_EVOLUTION_TRACKER`) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4087 - * `EVO_USE_MOVE_TWENTY_TIMES`: + * `EVO_LEVEL_MOVE_TWENTY_TIMES`: * Stantler can now evolve into Wyrdeer by using Psyshield Bash 20 times. * Primeape can now evolve into Annihilape by using Rage Fist 20 times. - * `EVO_RECOIL_DAMAGE_MALE`/`EVO_RECOIL_DAMAGE_FEMALE` + * `EVO_LEVEL_RECOIL_DAMAGE_MALE`/`EVO_LEVEL_RECOIL_DAMAGE_FEMALE` * White-Striped Basculin can now evolve into Basculegion when leveling up after receiving 294HP of recoil damage and being the corresponding gender. * Added missing Paldean Wooper icon by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4260 * Added missing data for placeholder Pokémon by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4281 diff --git a/docs/changelogs/1.8.x/1.8.3.md b/docs/changelogs/1.8.x/1.8.3.md index 0113aff558..8449f56383 100644 --- a/docs/changelogs/1.8.x/1.8.3.md +++ b/docs/changelogs/1.8.x/1.8.3.md @@ -23,8 +23,8 @@ * Fixed Exp. Candies ignoring hard caps. * Fixed Pokémon gaining 1 experience if they are at the level cap. * Fixed evolution tracker issues by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4503 - * `EVO_USE_MOVE_TWENTY_TIMES` no longer increases with every move. - * `EVO_RECOIL_DAMAGE_MALE/FEMALE` is no longer updated twice than intended. + * `EVO_LEVEL_MOVE_TWENTY_TIMES` no longer increases with every move. + * `EVO_LEVEL_RECOIL_DAMAGE_MALE/FEMALE` is no longer updated twice than intended. ## ✨ Feature Branches ✨ ### ***TheXaman's HGSS Pokédex Plus***: From 84a7fd86d69fdddde8b2bf7eec6d174899e5be68 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 29 May 2024 09:56:59 +0200 Subject: [PATCH 06/31] #4635 follow up. Missing test comments (#4647) --- test/battle/ability/armor_tail.c | 4 ++++ test/battle/ability/queenly_majesty.c | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 test/battle/ability/armor_tail.c create mode 100644 test/battle/ability/queenly_majesty.c diff --git a/test/battle/ability/armor_tail.c b/test/battle/ability/armor_tail.c new file mode 100644 index 0000000000..ac2f7dbfcf --- /dev/null +++ b/test/battle/ability/armor_tail.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Armor Tail are handled in test/battle/ability/dazzling.c diff --git a/test/battle/ability/queenly_majesty.c b/test/battle/ability/queenly_majesty.c new file mode 100644 index 0000000000..fcee95f6fa --- /dev/null +++ b/test/battle/ability/queenly_majesty.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Queenly Majesty are handled in test/battle/ability/dazzling.c From a0006d8dfb16c19c05807be57382b131382820fb Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 29 May 2024 13:54:18 -0400 Subject: [PATCH 07/31] AI_FLAG_RISKY Improvements (#4648) * #defines for damage roll bounds * Risky AI behavior implemented * Ignore score penalty to EFFECT_RECOIL_IF_MISS moves if accuracy has been lowered * Adjust score defines * EFFECT_MIND_BLOWN * Use GetBestDmgMoveFromBattler instead of AI_CompareDamagingMoves --- include/battle_ai_main.h | 6 ++- include/battle_ai_util.h | 4 ++ src/battle_ai_main.c | 59 +++++++++++++++--------- src/battle_ai_util.c | 4 +- src/battle_main.c | 6 ++- test/battle/ai_flag_risky.c | 91 +++++++++++++++++++++++++++++++++++++ 6 files changed, 146 insertions(+), 24 deletions(-) create mode 100644 test/battle/ai_flag_risky.c diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index e2c7804091..04441312f2 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -32,7 +32,7 @@ #define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect #define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target -// Temporary scores that are added together to determine a final score at the at of AI_CalcMoveEffectScore +// Temporary scores that are added together to determine a final score at the end of AI_CalcMoveEffectScore #define WEAK_EFFECT 1 #define DECENT_EFFECT 2 #define GOOD_EFFECT 4 @@ -49,6 +49,10 @@ #define SLOW_KILL 4 // AI is slower and faints target #define LAST_CHANCE 2 // AI faints to target. It should try and do damage with a priority move +// AI_Risky +#define STRONG_RISKY_EFFECT 3 +#define AVERAGE_RISKY_EFFECT 2 + #include "test_runner.h" // Logs for debugging AI tests. diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index b6319b7f66..afd468fbb6 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -5,6 +5,10 @@ #define AI_STRIKES_FIRST(battlerAi, battlerDef, move)((AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER)) +// Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. +#define MAX_ROLL_PERCENTAGE 100 +#define MIN_ROLL_PERCENTAGE 85 + enum { DMG_ROLL_LOWEST, diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index fda99dcafe..3f8178a327 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1434,8 +1434,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_MIRROR_COAT: if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) ADJUST_SCORE(-1); - if (predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS - || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) + if ((predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS + || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) + && !(predictedMove == MOVE_NONE && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY))) // Let Risky AI predict blindly based on stats ADJUST_SCORE(-10); break; @@ -1911,7 +1912,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better break; case EFFECT_RECOIL_IF_MISS: - if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75) + if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75 + && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY)) ADJUST_SCORE(-6); break; case EFFECT_TRANSFORM: @@ -4742,7 +4744,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0) ADJUST_SCORE(-20); else - score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + { + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move) + score += 1; + else + score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + } } score += AI_CalcMoveEffectScore(battlerAtk, battlerDef, move); @@ -4888,27 +4895,37 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gMovesInfo[move].criticalHitStage > 0) ADJUST_SCORE(DECENT_EFFECT); + // +3 Score switch (gMovesInfo[move].effect) { - case EFFECT_SLEEP: - case EFFECT_EXPLOSION: - case EFFECT_MIRROR_MOVE: - case EFFECT_OHKO: - case EFFECT_CONFUSE: - case EFFECT_METRONOME: - case EFFECT_PSYWAVE: case EFFECT_COUNTER: - case EFFECT_DESTINY_BOND: - case EFFECT_SWAGGER: - case EFFECT_ATTRACT: - case EFFECT_PRESENT: - case EFFECT_BELLY_DRUM: + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10) + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; case EFFECT_MIRROR_COAT: - case EFFECT_FOCUS_PUNCH: + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10) + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; + case EFFECT_EXPLOSION: + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; + + // +2 Score case EFFECT_REVENGE: - case EFFECT_FILLET_AWAY: - if (Random() & 1) - ADJUST_SCORE(DECENT_EFFECT); + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpeed >= gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed + 10) + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); + break; + case EFFECT_BELLY_DRUM: + if (gBattleMons[battlerAtk].hp >= gBattleMons[battlerAtk].maxHP * 90 / 100) + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); + break; + case EFFECT_MAX_HP_50_RECOIL: + case EFFECT_MIND_BLOWN: + case EFFECT_SWAGGER: + case EFFECT_FLATTER: + case EFFECT_ATTRACT: + case EFFECT_OHKO: + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_HIT: { @@ -4920,7 +4937,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { case MOVE_EFFECT_ALL_STATS_UP: if (Random() & 1) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; default: break; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 6afc4b65ae..9d4f03fb6e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -369,13 +369,15 @@ s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *type static inline s32 LowestRollDmg(s32 dmg) { - dmg *= 100 - 15; + dmg *= MIN_ROLL_PERCENTAGE; dmg /= 100; return dmg; } static inline s32 HighestRollDmg(s32 dmg) { + dmg *= MAX_ROLL_PERCENTAGE; + dmg /= 100; return dmg; } diff --git a/src/battle_main.c b/src/battle_main.c index 8168d10207..d34b52e51f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -54,6 +54,7 @@ #include "wild_encounter.h" #include "window.h" #include "constants/abilities.h" +#include "constants/battle_ai.h" #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/battle_partner.h" @@ -4438,7 +4439,10 @@ static void HandleTurnActionSelectionState(void) if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { - AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE); + else + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); } // fallthrough diff --git a/test/battle/ai_flag_risky.c b/test/battle/ai_flag_risky.c new file mode 100644 index 0000000000..eeef2fbe4e --- /dev/null +++ b/test/battle/ai_flag_risky.c @@ -0,0 +1,91 @@ +#include "global.h" +#include "test/battle.h" + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Mirror Coat against special attackers") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_MIRROR_COAT].effect == EFFECT_MIRROR_COAT); + ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseSpAttack == 85); + ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseAttack == 65); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GROVYLE) { Level(20); Moves(MOVE_ENERGY_BALL); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_MIRROR_COAT); } + } WHEN { + TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_MIRROR_COAT : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Counter against physical attackers") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_COUNTER].effect == EFFECT_COUNTER); + ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseAttack == 85); + ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseSpAttack == 60); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_MARSHTOMP) { Level(20); Moves(MOVE_WATERFALL); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_COUNTER); } + } WHEN { + TURN { MOVE(player, MOVE_WATERFALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_COUNTER : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will prioritize Revenge if slower") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_REVENGE].effect == EFFECT_REVENGE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GROVYLE) { Level(20); Speed(4); Moves(MOVE_ENERGY_BALL); } + OPPONENT(SPECIES_CASTFORM) { Level(19); Speed(3); Moves(MOVE_TACKLE, MOVE_REVENGE); } + } WHEN { + TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_REVENGE : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive options") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | aiRiskyFlag); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI prefers high damage moves at the expense of accuracy regardless of KO thresholds") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GOLDEEN) { Level(5); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_THUNDER, MOVE_THUNDERBOLT); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_THUNDER : MOVE_THUNDERBOLT); } + } +} From 7b1248b16718ddcfd12649407271c83400d9343e Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 29 May 2024 15:50:24 -0400 Subject: [PATCH 08/31] add savedBattlerAttacker and stack for saved target/attacker (#4061) * add saveattacker/savetarget stack * add safety checks to savedAttackerCount/savedTargetCount * add testing warnings for saveattacker/savetarget * update frisk with saveattacker * restoretarget at end of red card battle scripts, remove testing checks on SaveAttacker,SaveTarget --------- Co-authored-by: ghoulslash --- asm/macros/battle_script.inc | 24 ++- data/battle_scripts_1.s | 9 +- include/battle.h | 5 +- include/constants/battle_script_commands.h | 236 ++++++++++----------- src/battle_script_commands.c | 105 +++++++-- src/battle_util.c | 2 +- 6 files changed, 236 insertions(+), 145 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index cb6e2ff6a3..9c6ccd87d8 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1352,6 +1352,22 @@ .endm @ callnative macros + .macro savetarget + callnative BS_SaveTarget + .endm + + .macro restoretarget + callnative BS_RestoreTarget + .endm + + .macro saveattacker + callnative BS_SaveAttacker + .endm + + .macro restoreattacker + callnative BS_RestoreAttacker + .endm + .macro metalburstdamagecalculator failInstr:req callnative BS_CalcMetalBurstDmg .4byte \failInstr @@ -1774,14 +1790,6 @@ various \battler, VARIOUS_SWITCHIN_ABILITIES .endm - .macro savetarget - various BS_TARGET, VARIOUS_SAVE_TARGET - .endm - - .macro restoretarget - various BS_TARGET, VARIOUS_RESTORE_TARGET - .endm - .macro instanthpdrop battler:req various \battler, VARIOUS_INSTANT_HP_DROP .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e03e8e2d20..a3be5791e2 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8566,7 +8566,10 @@ BattleScript_FriskMsg:: return BattleScript_FriskActivates:: + saveattacker + copybyte gBattlerAttacker, sBATTLER tryfriskmsg BS_ATTACKER + restoreattacker end3 BattleScript_ImposterActivates:: @@ -9559,19 +9562,19 @@ BattleScript_RedCardIngrain: printstring STRINGID_PKMNANCHOREDITSELF waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_RedCardSuctionCups: printstring STRINGID_PKMNANCHORSITSELFWITH waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_RedCardDynamaxed: printstring STRINGID_MOVEBLOCKEDBYDYNAMAX waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_EjectButtonActivates:: diff --git a/include/battle.h b/include/battle.h index 72239928e0..f194a1b150 100644 --- a/include/battle.h +++ b/include/battle.h @@ -738,7 +738,10 @@ struct BattleStruct u8 magnitudeBasePower; u8 presentBasePower; u8 roostTypes[MAX_BATTLERS_COUNT][2]; - u8 savedBattlerTarget; + u8 savedBattlerTarget[5]; + u8 savedBattlerAttacker[5]; + u8 savedTargetCount:4; + u8 savedAttackerCount:4; bool8 ateBoost[MAX_BATTLERS_COUNT]; u8 activeAbilityPopUps; // as bits for each battler u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 7228954f21..3435537681 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -118,125 +118,123 @@ #define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 #define VARIOUS_STAT_TEXT_BUFFER 27 #define VARIOUS_SWITCHIN_ABILITIES 28 -#define VARIOUS_SAVE_TARGET 29 -#define VARIOUS_RESTORE_TARGET 30 -#define VARIOUS_INSTANT_HP_DROP 31 -#define VARIOUS_CLEAR_STATUS 32 -#define VARIOUS_RESTORE_PP 33 -#define VARIOUS_TRY_ACTIVATE_MOXIE 34 -#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35 -#define VARIOUS_PLAY_MOVE_ANIMATION 36 -#define VARIOUS_SET_LUCKY_CHANT 37 -#define VARIOUS_SUCKER_PUNCH_CHECK 38 -#define VARIOUS_SET_SIMPLE_BEAM 39 -#define VARIOUS_TRY_ENTRAINMENT 40 -#define VARIOUS_SET_LAST_USED_ABILITY 41 -#define VARIOUS_INVERT_STAT_STAGES 42 -#define VARIOUS_TRY_ME_FIRST 43 -#define VARIOUS_JUMP_IF_BATTLE_END 44 -#define VARIOUS_TRY_ELECTRIFY 45 -#define VARIOUS_TRY_REFLECT_TYPE 46 -#define VARIOUS_TRY_SOAK 47 -#define VARIOUS_HANDLE_MEGA_EVO 48 -#define VARIOUS_TRY_LAST_RESORT 49 -#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 50 -#define VARIOUS_TRY_HIT_SWITCH_TARGET 51 -#define VARIOUS_TRY_AUTOTOMIZE 52 -#define VARIOUS_ABILITY_POPUP 53 -#define VARIOUS_JUMP_IF_TARGET_ALLY 54 -#define VARIOUS_TRY_SYNCHRONOISE 55 -#define VARIOUS_PSYCHO_SHIFT 56 -#define VARIOUS_CURE_STATUS 57 -#define VARIOUS_POWER_TRICK 58 -#define VARIOUS_AFTER_YOU 59 -#define VARIOUS_BESTOW 60 -#define VARIOUS_JUMP_IF_NOT_GROUNDED 61 -#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 62 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 63 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 64 -#define VARIOUS_SET_AURORA_VEIL 65 -#define VARIOUS_TRY_THIRD_TYPE 66 -#define VARIOUS_ACUPRESSURE 67 -#define VARIOUS_SET_POWDER 68 -#define VARIOUS_SPECTRAL_THIEF 69 -#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 70 -#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 71 -#define VARIOUS_JUMP_IF_ROAR_FAILS 72 -#define VARIOUS_TRY_INSTRUCT 73 -#define VARIOUS_JUMP_IF_NOT_BERRY 74 -#define VARIOUS_TRACE_ABILITY 75 -#define VARIOUS_UPDATE_NICK 76 -#define VARIOUS_TRY_ILLUSION_OFF 77 -#define VARIOUS_SET_SPRITEIGNORE0HP 78 -#define VARIOUS_HANDLE_FORM_CHANGE 79 -#define VARIOUS_GET_STAT_VALUE 80 -#define VARIOUS_JUMP_IF_FULL_HP 81 -#define VARIOUS_LOSE_TYPE 82 -#define VARIOUS_TRY_ACTIVATE_SOULHEART 83 -#define VARIOUS_TRY_ACTIVATE_RECEIVER 84 -#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 85 -#define VARIOUS_TRY_FRISK 86 -#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 87 -#define VARIOUS_TRY_FAIRY_LOCK 88 -#define VARIOUS_JUMP_IF_NO_ALLY 89 -#define VARIOUS_POISON_TYPE_IMMUNITY 90 -#define VARIOUS_JUMP_IF_HOLD_EFFECT 91 -#define VARIOUS_INFATUATE_WITH_BATTLER 92 -#define VARIOUS_SET_LAST_USED_ITEM 93 -#define VARIOUS_PARALYZE_TYPE_IMMUNITY 94 -#define VARIOUS_JUMP_IF_ABSENT 95 -#define VARIOUS_DESTROY_ABILITY_POPUP 96 -#define VARIOUS_TOTEM_BOOST 97 -#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 98 -#define VARIOUS_MOVEEND_ITEM_EFFECTS 99 -#define VARIOUS_TERRAIN_SEED 100 -#define VARIOUS_MAKE_INVISIBLE 101 -#define VARIOUS_ROOM_SERVICE 102 -#define VARIOUS_EERIE_SPELL_PP_REDUCE 103 -#define VARIOUS_JUMP_IF_TEAM_HEALTHY 104 -#define VARIOUS_TRY_HEAL_QUARTER_HP 105 -#define VARIOUS_REMOVE_TERRAIN 106 -#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 107 -#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 108 -#define VARIOUS_GET_ROTOTILLER_TARGETS 109 -#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 110 -#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 111 -#define VARIOUS_CONSUME_BERRY 112 -#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 113 -#define VARIOUS_JUMP_IF_SPECIES 114 -#define VARIOUS_UPDATE_ABILITY_POPUP 115 -#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 116 -#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 117 -#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 118 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 119 -#define VARIOUS_TRY_NO_RETREAT 120 -#define VARIOUS_TRY_TAR_SHOT 121 -#define VARIOUS_CAN_TAR_SHOT_WORK 122 -#define VARIOUS_CHECK_POLTERGEIST 123 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 124 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 125 -#define VARIOUS_JUMP_IF_UNDER_200 126 -#define VARIOUS_SET_SKY_DROP 127 -#define VARIOUS_CLEAR_SKY_DROP 128 -#define VARIOUS_SKY_DROP_YAWN 129 -#define VARIOUS_CURE_CERTAIN_STATUSES 130 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 131 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 132 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 133 -#define VARIOUS_SAVE_BATTLER_ITEM 134 -#define VARIOUS_RESTORE_BATTLER_ITEM 135 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 136 -#define VARIOUS_SET_BEAK_BLAST 137 -#define VARIOUS_SWAP_SIDE_STATUSES 138 -#define VARIOUS_SWAP_STATS 139 -#define VARIOUS_TEATIME_INVUL 140 -#define VARIOUS_TEATIME_TARGETS 141 -#define VARIOUS_TRY_WIND_RIDER_POWER 142 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 143 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 144 -#define VARIOUS_STORE_HEALING_WISH 145 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 146 -#define VARIOUS_TRY_REVIVAL_BLESSING 147 +#define VARIOUS_INSTANT_HP_DROP 29 +#define VARIOUS_CLEAR_STATUS 30 +#define VARIOUS_RESTORE_PP 31 +#define VARIOUS_TRY_ACTIVATE_MOXIE 32 +#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 33 +#define VARIOUS_PLAY_MOVE_ANIMATION 34 +#define VARIOUS_SET_LUCKY_CHANT 35 +#define VARIOUS_SUCKER_PUNCH_CHECK 36 +#define VARIOUS_SET_SIMPLE_BEAM 37 +#define VARIOUS_TRY_ENTRAINMENT 38 +#define VARIOUS_SET_LAST_USED_ABILITY 39 +#define VARIOUS_INVERT_STAT_STAGES 40 +#define VARIOUS_TRY_ME_FIRST 41 +#define VARIOUS_JUMP_IF_BATTLE_END 42 +#define VARIOUS_TRY_ELECTRIFY 43 +#define VARIOUS_TRY_REFLECT_TYPE 44 +#define VARIOUS_TRY_SOAK 45 +#define VARIOUS_HANDLE_MEGA_EVO 46 +#define VARIOUS_TRY_LAST_RESORT 47 +#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 48 +#define VARIOUS_TRY_HIT_SWITCH_TARGET 49 +#define VARIOUS_TRY_AUTOTOMIZE 50 +#define VARIOUS_ABILITY_POPUP 51 +#define VARIOUS_JUMP_IF_TARGET_ALLY 52 +#define VARIOUS_TRY_SYNCHRONOISE 53 +#define VARIOUS_PSYCHO_SHIFT 54 +#define VARIOUS_CURE_STATUS 55 +#define VARIOUS_POWER_TRICK 56 +#define VARIOUS_AFTER_YOU 57 +#define VARIOUS_BESTOW 58 +#define VARIOUS_JUMP_IF_NOT_GROUNDED 59 +#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 60 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 61 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 62 +#define VARIOUS_SET_AURORA_VEIL 63 +#define VARIOUS_TRY_THIRD_TYPE 64 +#define VARIOUS_ACUPRESSURE 65 +#define VARIOUS_SET_POWDER 66 +#define VARIOUS_SPECTRAL_THIEF 67 +#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 68 +#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 69 +#define VARIOUS_JUMP_IF_ROAR_FAILS 70 +#define VARIOUS_TRY_INSTRUCT 71 +#define VARIOUS_JUMP_IF_NOT_BERRY 72 +#define VARIOUS_TRACE_ABILITY 73 +#define VARIOUS_UPDATE_NICK 74 +#define VARIOUS_TRY_ILLUSION_OFF 75 +#define VARIOUS_SET_SPRITEIGNORE0HP 76 +#define VARIOUS_HANDLE_FORM_CHANGE 77 +#define VARIOUS_GET_STAT_VALUE 78 +#define VARIOUS_JUMP_IF_FULL_HP 79 +#define VARIOUS_LOSE_TYPE 80 +#define VARIOUS_TRY_ACTIVATE_SOULHEART 81 +#define VARIOUS_TRY_ACTIVATE_RECEIVER 82 +#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 83 +#define VARIOUS_TRY_FRISK 84 +#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 85 +#define VARIOUS_TRY_FAIRY_LOCK 86 +#define VARIOUS_JUMP_IF_NO_ALLY 87 +#define VARIOUS_POISON_TYPE_IMMUNITY 88 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 89 +#define VARIOUS_INFATUATE_WITH_BATTLER 90 +#define VARIOUS_SET_LAST_USED_ITEM 91 +#define VARIOUS_PARALYZE_TYPE_IMMUNITY 92 +#define VARIOUS_JUMP_IF_ABSENT 93 +#define VARIOUS_DESTROY_ABILITY_POPUP 94 +#define VARIOUS_TOTEM_BOOST 95 +#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 96 +#define VARIOUS_MOVEEND_ITEM_EFFECTS 97 +#define VARIOUS_TERRAIN_SEED 98 +#define VARIOUS_MAKE_INVISIBLE 99 +#define VARIOUS_ROOM_SERVICE 100 +#define VARIOUS_EERIE_SPELL_PP_REDUCE 101 +#define VARIOUS_JUMP_IF_TEAM_HEALTHY 102 +#define VARIOUS_TRY_HEAL_QUARTER_HP 103 +#define VARIOUS_REMOVE_TERRAIN 104 +#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 105 +#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 106 +#define VARIOUS_GET_ROTOTILLER_TARGETS 107 +#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 108 +#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 109 +#define VARIOUS_CONSUME_BERRY 110 +#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 111 +#define VARIOUS_JUMP_IF_SPECIES 112 +#define VARIOUS_UPDATE_ABILITY_POPUP 113 +#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 114 +#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 115 +#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 116 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 117 +#define VARIOUS_TRY_NO_RETREAT 118 +#define VARIOUS_TRY_TAR_SHOT 119 +#define VARIOUS_CAN_TAR_SHOT_WORK 120 +#define VARIOUS_CHECK_POLTERGEIST 121 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 122 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 123 +#define VARIOUS_JUMP_IF_UNDER_200 124 +#define VARIOUS_SET_SKY_DROP 125 +#define VARIOUS_CLEAR_SKY_DROP 126 +#define VARIOUS_SKY_DROP_YAWN 127 +#define VARIOUS_CURE_CERTAIN_STATUSES 128 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 129 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 130 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 131 +#define VARIOUS_SAVE_BATTLER_ITEM 132 +#define VARIOUS_RESTORE_BATTLER_ITEM 133 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 134 +#define VARIOUS_SET_BEAK_BLAST 135 +#define VARIOUS_SWAP_SIDE_STATUSES 136 +#define VARIOUS_SWAP_STATS 137 +#define VARIOUS_TEATIME_INVUL 138 +#define VARIOUS_TEATIME_TARGETS 139 +#define VARIOUS_TRY_WIND_RIDER_POWER 140 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 141 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 142 +#define VARIOUS_STORE_HEALING_WISH 143 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 144 +#define VARIOUS_TRY_REVIVAL_BLESSING 145 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 31601e5d92..f7629db662 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -337,6 +337,8 @@ static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); +static void SaveBattlerAttacker(u32 battler); +static void SaveBattlerTarget(u32 battler); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -6168,7 +6170,8 @@ static void Cmd_moveend(void) && CanBattlerSwitch(gBattlerAttacker)) { gLastUsedItem = gBattleMons[battler].item; - gBattleStruct->savedBattlerTarget = gBattleScripting.battler = battler; // Battler with red card + SaveBattlerTarget(battler); // save battler with red card + gBattleScripting.battler = battler; gEffectBattler = gBattlerAttacker; if (gMovesInfo[gCurrentMove].effect == EFFECT_HIT_ESCAPE) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection @@ -6325,6 +6328,25 @@ static void Cmd_moveend(void) && (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) // And it is unusable && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn CancelMultiTurnMoves(gBattlerAttacker); // Cancel it + + + + if (gBattleStruct->savedAttackerCount > 0) + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); + // #endif + } + if (gBattleStruct->savedTargetCount > 0) + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); + // #endif + } gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; @@ -9379,18 +9401,6 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); return; } - case VARIOUS_SAVE_TARGET: - { - VARIOUS_ARGS(); - gBattleStruct->savedBattlerTarget = gBattlerTarget; - break; - } - case VARIOUS_RESTORE_TARGET: - { - VARIOUS_ARGS(); - gBattlerTarget = gBattleStruct->savedBattlerTarget; - break; - } case VARIOUS_INSTANT_HP_DROP: { VARIOUS_ARGS(); @@ -15655,6 +15665,75 @@ static void Cmd_callnative(void) } // Callnative Funcs + +static void SaveBattlerTarget(u32 battler) +{ + if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget)) + gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler; + else + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!"); +} + +static void SaveBattlerAttacker(u32 battler) +{ + if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker)) + gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler; + else + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerAttacker array size!"); +} + +void BS_SaveTarget(void) +{ + NATIVE_ARGS(); + SaveBattlerTarget(gBattlerTarget); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_RestoreTarget(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedTargetCount > 0) + { + gBattleStruct->savedTargetCount--; + gBattlerTarget = gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount]; + } + else + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreTarget attempting to restore an empty target!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreTarget attempting to restore an empty target!"); + // #endif + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SaveAttacker(void) +{ + NATIVE_ARGS(); + SaveBattlerAttacker(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_RestoreAttacker(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedAttackerCount > 0) + { + gBattleStruct->savedAttackerCount--; + gBattlerAttacker = gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount]; + } + else + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #endif + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_CalcMetalBurstDmg(void) { NATIVE_ARGS(const u8 *failInstr); diff --git a/src/battle_util.c b/src/battle_util.c index fa5379d8bf..b7aab24113 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4408,7 +4408,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = battler; + gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate effect++; } From 2c32da6b0afe0b3a36e39a8b77f407adfa7c134e Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 29 May 2024 22:30:23 +0200 Subject: [PATCH 09/31] Update battle_scripts_1.s (#4653) #4061 change `ABILITY_FRISK` to use `gBattleScripting.battler` but the script wasn't fully updated. BS_ATTACKER needed to be changed to `BS_SCRIPTING` --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a3be5791e2..c50d095ad4 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8568,7 +8568,7 @@ BattleScript_FriskMsg:: BattleScript_FriskActivates:: saveattacker copybyte gBattlerAttacker, sBATTLER - tryfriskmsg BS_ATTACKER + tryfriskmsg BS_SCRIPTING restoreattacker end3 From 58793294b8bfcec5f46356dac0cbc305e70f47e0 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 30 May 2024 09:53:23 +0200 Subject: [PATCH 10/31] Update item_icon_table.h (#4658) Add new line --- src/data/item_icon_table.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index e69de29bb2..d3f5a12faa 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -0,0 +1 @@ + From 462dca0c09df331d980114f92568a5d865cfe530 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 30 May 2024 09:54:24 +0200 Subject: [PATCH 11/31] Remove temp scores in AI_CalcMoveEffectScores (#4655) --- include/battle_ai_main.h | 12 +++--------- src/battle_ai_main.c | 11 ++--------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 04441312f2..ce92296b67 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -32,17 +32,11 @@ #define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect #define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target -// Temporary scores that are added together to determine a final score at the end of AI_CalcMoveEffectScore +// Scores given in AI_CalcMoveEffectScore #define WEAK_EFFECT 1 #define DECENT_EFFECT 2 -#define GOOD_EFFECT 4 -#define BEST_EFFECT 6 - -// AI_CalcMoveEffectScore final score -#define NOT_GOOD_ENOUGH 0 // Not worth using over a damaging move -#define GOOD_MOVE_EFFECTS 2 // Worth using over a damaging move -#define PREFERRED_MOVE_EFFECTS 3 // Worth using over a damagin move and is better then DECENT_EFFECT -#define BEST_MOVE_EFFECTS 4 // Best possible move effects. E.g. stat boosting moves that boost multiply moves +#define GOOD_EFFECT 3 +#define BEST_EFFECT 4 // AI_TryToFaint #define FAST_KILL 6 // AI is faster and faints target diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 3f8178a327..fcf56363db 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1435,7 +1435,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) ADJUST_SCORE(-1); if ((predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS - || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) + || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) && !(predictedMove == MOVE_NONE && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY))) // Let Risky AI predict blindly based on stats ADJUST_SCORE(-10); break; @@ -4722,14 +4722,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } - if (score <= 1) - return NOT_GOOD_ENOUGH; - else if (score <= 3) - return GOOD_MOVE_EFFECTS; - else if (score <= 5) - return PREFERRED_MOVE_EFFECTS; - else - return BEST_MOVE_EFFECTS; + return score; } // AI_FLAG_CHECK_VIABILITY - Chooses best possible move to hit player From 1a59adcea808d091ce351db0876c10bc6b9471d1 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 30 May 2024 12:53:48 +0100 Subject: [PATCH 12/31] Fixes Burning Bulwark incorrect message and Grassy Glide granting priority to Max Move (#4659) * Fixes Burning Bulwark burning message and normalizes similar messages * Fixes Grassy Glide granting priority to Max Move used from that slot * Missed freeze message --- src/battle_main.c | 2 +- src/battle_message.c | 8 ++++---- src/battle_util.c | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 0332214b9d..3bf3a3e638 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5050,7 +5050,7 @@ s8 GetMovePriority(u32 battler, u16 move) gProtectStructs[battler].pranksterElevated = 1; priority++; } - else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler)) + else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && !IsDynamaxed(battler) && !(gBattleStruct->dynamax.toDynamax & gBitTable[battler])) { priority++; } diff --git a/src/battle_message.c b/src/battle_message.c index 0da0cba0e7..eecec7d2a4 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -91,7 +91,7 @@ static const u8 sText_CantEscape2[] = _("Can't escape!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); @@ -103,12 +103,12 @@ static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nburned {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); @@ -117,7 +117,7 @@ static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nfro static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); diff --git a/src/battle_util.c b/src/battle_util.c index 11cd2544d7..905f78e01e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5507,6 +5507,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && RandomWeighted(RNG_STATIC, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; @@ -5524,6 +5525,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; From 8d58564569978a31cfddc7ddfc276d4c295a87ec Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 30 May 2024 15:24:33 -0400 Subject: [PATCH 13/31] Test runner set mode (#4661) * Item icon table glitch * Test runner uses OPTIONS_BATTLE_STYLE_SET --- src/data/item_icon_table.h | 2 +- test/test_runner.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index d3f5a12faa..8b13789179 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -1 +1 @@ - + diff --git a/test/test_runner.c b/test/test_runner.c index f5b7224523..9f29d6c7cf 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -124,6 +124,8 @@ top: gIntrTable[7] = Intr_Timer2; + gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SET; + // The current test restarted the ROM (e.g. by jumping to NULL). if (sCurrentTest.address != 0) { From 317cf2e9336feaa133e794b230803468be6208b5 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Thu, 30 May 2024 13:15:26 -0700 Subject: [PATCH 14/31] updated Disguise to be a breakable ability (#4666) --- src/data/abilities.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/abilities.h b/src/data/abilities.h index a65d4e8c24..8b81057b4f 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -1602,6 +1602,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .name = _("Disguise"), .description = COMPOUND_STRING("Decoy protects it once."), .aiRating = 8, + .breakable = TRUE, .cantBeCopied = TRUE, .cantBeSwapped = TRUE, .cantBeTraced = TRUE, From f6e00303b722d1cb6c3b32657c81a4f05a4d6d64 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 31 May 2024 00:08:04 +0200 Subject: [PATCH 15/31] Fixes Neutralizing Gas / Intim interaction freezing the game (#4668) --- data/battle_scripts_1.s | 12 ++++++------ test/battle/ability/intimidate.c | 24 +++++++++++++++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c50d095ad4..131a015ea0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5775,7 +5775,7 @@ BattleScript_PrintFullBox:: BattleScript_ActionSwitch:: hpthresholds2 BS_ATTACKER - copybyte sSAVED_BATTLER, gBattlerAttacker + saveattacker printstring STRINGID_RETURNMON jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit setmultihit 1 @@ -5793,7 +5793,7 @@ BattleScript_DoSwitchOut:: switchoutabilities BS_ATTACKER updatedynamax waitstate - copybyte gBattlerAttacker, sSAVED_BATTLER + restoreattacker returnatktoball waitstate drawpartystatussummary BS_ATTACKER @@ -7820,7 +7820,7 @@ BattleScript_TryIntimidateHoldEffectsRet: return BattleScript_IntimidateActivates:: - copybyte sSAVED_BATTLER, gBattlerTarget + savetarget .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG @@ -7858,7 +7858,7 @@ BattleScript_IntimidateLoopIncrement: BattleScript_IntimidateEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup - copybyte gBattlerTarget, sSAVED_BATTLER + restoretarget pause B_WAIT_TIME_MED end3 @@ -7891,7 +7891,7 @@ BattleScript_IntimidateInReverse: goto BattleScript_IntimidateLoopIncrement BattleScript_SupersweetSyrupActivates:: - copybyte sSAVED_BATTLER, gBattlerTarget + savetarget .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG @@ -7924,7 +7924,7 @@ BattleScript_SupersweetSyrupLoopIncrement: BattleScript_SupersweetSyrupEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup - copybyte gBattlerTarget, sSAVED_BATTLER + restoretarget pause B_WAIT_TIME_MED end3 diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 08560ccb00..0bb34a977e 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -107,9 +107,9 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); } } WHEN { TURN { - MOVE(player, MOVE_QUICK_ATTACK); - MOVE(opponent, MOVE_TACKLE); - SEND_OUT(opponent, 1); + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + SEND_OUT(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); @@ -210,3 +210,21 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is EXPECT_EQ(player->statStages[STAT_ATK], MIN_STAT_STAGE); } } + +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Weezing, that's enough! Come back!"); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Go! Wobbuffet!"); + } +} From 52d45674f0e770979a2cb0167923211a62ff519a Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 31 May 2024 12:10:03 +0200 Subject: [PATCH 16/31] Move Descriptions in battle (#4152) * Port xaman move desc to modern expansion * Fix modern compiler error * Fix compliling + EFFECT_PLACEHOLDER support * Change to L-button to avoid conflict with Mega Evolution * Reorder and change priority to category * add sprite for move category icon, declare category icon sprite data extern * remove static category icon sprite data from hgss dex for global data * Change to else if --------- Co-authored-by: Pawkkie Co-authored-by: RavePossum --- include/battle.h | 1 + include/battle_interface.h | 1 + include/constants/battle.h | 1 + include/graphics.h | 2 + include/pokemon_summary_screen.h | 4 +- src/battle_bg.c | 18 +++++++ src/battle_controller_player.c | 92 ++++++++++++++++++++++++++++++-- src/battle_gfx_sfx_util.c | 1 + src/battle_interface.c | 6 +++ src/battle_main.c | 2 + src/battle_message.c | 24 +++++++++ src/graphics.c | 3 ++ src/pokedex_plus_hgss.c | 60 ++------------------- src/pokemon_summary_screen.c | 19 +++---- 14 files changed, 162 insertions(+), 72 deletions(-) diff --git a/include/battle.h b/include/battle.h index f194a1b150..15e8d26366 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1149,6 +1149,7 @@ extern u16 gLastThrownBall; extern u16 gBallToDisplay; extern bool8 gLastUsedBallMenuPresent; extern u8 gPartyCriticalHits[PARTY_SIZE]; +extern u8 gCategoryIconSpriteId; static inline u32 GetBattlerPosition(u32 battler) { diff --git a/include/battle_interface.h b/include/battle_interface.h index f32017745f..903483e1d5 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -144,5 +144,6 @@ void TryAddLastUsedBallItemSprites(void); void SwapBallToDisplay(bool32 sameBall); void ArrowsChangeColorLastBallCycle(bool32 showArrows); void UpdateAbilityPopup(u8 battlerId); +void CategoryIcons_LoadSpritesGfx(void); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/constants/battle.h b/include/constants/battle.h index f195ea7e8c..1f11adbd5f 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -477,6 +477,7 @@ #define B_WIN_VS_OUTCOME_DRAW 21 #define B_WIN_VS_OUTCOME_LEFT 22 #define B_WIN_VS_OUTCOME_RIGHT 23 +#define B_WIN_MOVE_DESCRIPTION 24 // The following are duplicate id values for windows that Battle Arena uses differently. #define ARENA_WIN_PLAYER_NAME 15 diff --git a/include/graphics.h b/include/graphics.h index 488f9f5616..fc60c29ebf 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -1983,6 +1983,8 @@ extern const u32 gSummaryMoveSelect_Gfx[]; extern const u32 gSummaryMoveSelect_Pal[]; extern const u32 gStatusGfx_Icons[]; extern const u32 gStatusPal_Icons[]; +extern const u16 gCategoryIcons_Pal[]; +extern const u32 gCategoryIcons_Gfx[]; extern const u32 gShopMenu_Gfx[]; extern const u32 gShopMenu_Tilemap[]; diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3a1f5c38ab..924702baf9 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -5,10 +5,12 @@ extern u8 gLastViewedMonIndex; -extern const u8 *const gMoveDescriptionPointers[]; extern const u8 gNotDoneYetDescription[]; extern const struct SpriteTemplate gSpriteTemplate_MoveTypes; extern const struct CompressedSpriteSheet gSpriteSheet_MoveTypes; +extern const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons; +extern const struct SpritePalette gSpritePal_CategoryIcons; +extern const struct SpriteTemplate gSpriteTemplate_CategoryIcons; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); diff --git a/src/battle_bg.c b/src/battle_bg.c index 0f802d52de..328f990653 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -371,6 +371,15 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x00b0, }, + [B_WIN_MOVE_DESCRIPTION] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 47, + .width = 18, + .height = 6, + .paletteNum = 5, + .baseBlock = 0x0350, + }, DUMMY_WIN_TEMPLATE }; @@ -583,6 +592,15 @@ static const struct WindowTemplate sBattleArenaWindowTemplates[] = .paletteNum = 7, .baseBlock = 0x0090, }, + [B_WIN_MOVE_DESCRIPTION] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 47, + .width = 18, + .height = 6, + .paletteNum = 5, + .baseBlock = 0x0350, + }, DUMMY_WIN_TEMPLATE }; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index be6a63e00b..1d52dd0b69 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -31,6 +31,7 @@ #include "util.h" #include "window.h" #include "constants/battle_anim.h" +#include "constants/battle_move_effects.h" #include "constants/battle_partner.h" #include "constants/hold_effects.h" #include "constants/items.h" @@ -40,6 +41,8 @@ #include "constants/trainers.h" #include "constants/rgb.h" #include "level_caps.h" +#include "menu.h" +#include "pokemon_summary_screen.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -83,6 +86,7 @@ static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); +static void MoveSelectionDisplayMoveDescription(u32 battler); static void HandleMoveSwitching(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); @@ -158,6 +162,8 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; +static EWRAM_DATA bool8 sDescriptionSubmenu = 0; + static EWRAM_DATA bool8 sAckBallUseBtn = FALSE; static EWRAM_DATA bool8 sBallSwapped = FALSE; @@ -690,7 +696,7 @@ static void HandleInputChooseMove(u32 battler) else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON)) + if (JOY_NEW(A_BUTTON) && !sDescriptionSubmenu) { PlaySE(SE_SELECT); @@ -797,7 +803,7 @@ static void HandleInputChooseMove(u32 battler) break; } } - else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) + else if ((JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) && !sDescriptionSubmenu) { PlaySE(SE_SELECT); if (gBattleStruct->zmove.viewing) @@ -826,6 +832,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -840,6 +848,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -853,6 +863,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -867,10 +879,12 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } - else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing) + else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing && !sDescriptionSubmenu) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -886,6 +900,30 @@ static void HandleInputChooseMove(u32 battler) gBattlerControllerFuncs[battler] = HandleMoveSwitching; } } + else if (sDescriptionSubmenu) + { + if (JOY_NEW(L_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + sDescriptionSubmenu = FALSE; + if (gCategoryIconSpriteId != 0xFF) + { + DestroySprite(&gSprites[gCategoryIconSpriteId]); + gCategoryIconSpriteId = 0xFF; + } + + FillWindowPixelBuffer(B_WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); + ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE); + CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX); + PlaySE(SE_SELECT); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + } + } + else if (JOY_NEW(L_BUTTON)) + { + sDescriptionSubmenu = TRUE; + MoveSelectionDisplayMoveDescription(battler); + } else if (JOY_NEW(START_BUTTON)) { if (CanMegaEvolve(battler)) @@ -1772,6 +1810,54 @@ static void MoveSelectionDisplayMoveType(u32 battler) BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } +static void MoveSelectionDisplayMoveDescription(u32 battler) +{ + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[battler][4]); + u16 move = moveInfo->moves[gMoveSelectionCursor[battler]]; + u16 pwr = gMovesInfo[move].power; + u16 acc = gMovesInfo[move].accuracy; + u8 cat = gMovesInfo[move].category; + + u8 pwr_num[3], acc_num[3]; + u8 cat_desc[7] = _("CAT: "); + u8 pwr_desc[7] = _("PWR: "); + u8 acc_desc[7] = _("ACC: "); + u8 cat_start[] = _("{CLEAR_TO 0x03}"); + u8 pwr_start[] = _("{CLEAR_TO 0x38}"); + u8 acc_start[] = _("{CLEAR_TO 0x6D}"); + LoadMessageBoxAndBorderGfx(); + DrawStdWindowFrame(B_WIN_MOVE_DESCRIPTION, FALSE); + if (pwr < 2) + StringCopy(pwr_num, gText_BattleSwitchWhich5); + else + ConvertIntToDecimalStringN(pwr_num, pwr, STR_CONV_MODE_LEFT_ALIGN, 3); + if (acc < 2) + StringCopy(acc_num, gText_BattleSwitchWhich5); + else + ConvertIntToDecimalStringN(acc_num, acc, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gDisplayedStringBattle, cat_start); + StringAppend(gDisplayedStringBattle, cat_desc); + StringAppend(gDisplayedStringBattle, pwr_start); + StringAppend(gDisplayedStringBattle, pwr_desc); + StringAppend(gDisplayedStringBattle, pwr_num); + StringAppend(gDisplayedStringBattle, acc_start); + StringAppend(gDisplayedStringBattle, acc_desc); + StringAppend(gDisplayedStringBattle, acc_num); + StringAppend(gDisplayedStringBattle, gText_NewLine); + if (gMovesInfo[move].effect == EFFECT_PLACEHOLDER) + StringAppend(gDisplayedStringBattle, gNotDoneYetDescription); + else + StringAppend(gDisplayedStringBattle, gMovesInfo[move - 1].description); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_DESCRIPTION); + + if (gCategoryIconSpriteId == 0xFF) + gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1); + + StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat); + + CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL); +} + void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) { u16 src[2]; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 2bf3a5e910..4a3c3c50de 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -707,6 +707,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); MegaIndicator_LoadSpritesGfx(); TeraIndicator_LoadSpriteGfx(); + CategoryIcons_LoadSpritesGfx(); } else if (!IsDoubleBattle()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index bf148fc0d0..0dd61d5597 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -3753,3 +3753,9 @@ void ArrowsChangeColorLastBallCycle(bool32 showArrows) } #endif } + +void CategoryIcons_LoadSpritesGfx(void) +{ + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); +} diff --git a/src/battle_main.c b/src/battle_main.c index d34b52e51f..16551254d9 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -230,6 +230,7 @@ EWRAM_DATA u16 gBallToDisplay = 0; EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE; EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; +EWRAM_DATA u8 gCategoryIconSpriteId = 0; void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); @@ -3416,6 +3417,7 @@ static void BattleStartClearSetData(void) gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing + gCategoryIconSpriteId = 0xFF; } void SwitchInClearSetData(u32 battler) diff --git a/src/battle_message.c b/src/battle_message.c index 0e71bc7ca3..1dfcad3ab3 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2492,6 +2492,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = .fgColor = 1, .shadowColor = 6, }, + [B_WIN_MOVE_DESCRIPTION] = { + .fillValue = PIXEL_FILL(0xE), + .fontId = FONT_NARROW, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .speed = 0, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, + }, }; static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = @@ -2725,6 +2737,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = .bgColor = 1, .shadowColor = 3, }, + [B_WIN_MOVE_DESCRIPTION] = { + .fillValue = PIXEL_FILL(0xE), + .fontId = FONT_NARROW, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .speed = 0, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, + }, }; static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] = diff --git a/src/graphics.c b/src/graphics.c index 72e9925599..58c629fbc9 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1629,6 +1629,9 @@ const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/party_menu/pokeball.gb const u32 gStatusGfx_Icons[] = INCBIN_U32("graphics/interface/status_icons.4bpp.lz"); const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapal.lz"); +const u16 gCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); +const u32 gCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); + const u32 gMoveTypes_Gfx[] = INCBIN_U32("graphics/types/move_types.4bpp.lz"); const u32 gMoveTypes_Pal[] = INCBIN_U32("graphics/types/move_types.gbapal.lz"); diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 9f657d1673..e667e44bd6 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -622,60 +622,6 @@ static void DestroyCategoryIcon(void); static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum); -#define TAG_CATEGORY_ICONS 30004 - -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - -static const struct OamData sOamData_CategoryIcons = -{ - .size = SPRITE_SIZE(16x16), - .shape = SPRITE_SHAPE(16x16), - .priority = 0, -}; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = -{ - .data = sCategoryIcons_Gfx, - .size = 16*16*3/2, - .tag = TAG_CATEGORY_ICONS, -}; -static const struct SpritePalette sSpritePal_CategoryIcons = -{ - .data = sCategoryIcons_Pal, - .tag = TAG_CATEGORY_ICONS -}; -static const union AnimCmd sSpriteAnim_CategoryIcon0[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon1[] = -{ - ANIMCMD_FRAME(4, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon2[] = -{ - ANIMCMD_FRAME(8, 0), - ANIMCMD_END -}; -static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = -{ - sSpriteAnim_CategoryIcon0, - sSpriteAnim_CategoryIcon1, - sSpriteAnim_CategoryIcon2, -}; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = -{ - .tileTag = TAG_CATEGORY_ICONS, - .paletteTag = TAG_CATEGORY_ICONS, - .oam = &sOamData_CategoryIcons, - .anims = sSpriteAnimTable_CategoryIcons, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - //Stat bars by DizzyEgg #define TAG_STAT_BAR 4097 #define TAG_STAT_BAR_BG 4098 @@ -4769,7 +4715,7 @@ static void LoadTilesetTilemapHGSS(u8 page) static u8 ShowCategoryIcon(u32 category) { if (sPokedexView->categoryIconSpriteId == 0xFF) - sPokedexView->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 139, 90, 0); + sPokedexView->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 139, 90, 0); gSprites[sPokedexView->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sPokedexView->categoryIconSpriteId], category); @@ -4912,8 +4858,8 @@ static void Task_LoadStatsScreen(u8 taskId) CreateTypeIconSprites(); sPokedexView->categoryIconSpriteId = 0xFF; LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); gMain.state++; break; case 4: diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 78f27b3888..d4f080096b 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -740,9 +740,6 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}"); #define TAG_MON_MARKINGS 30003 #define TAG_CATEGORY_ICONS 30004 -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - static const struct OamData sOamData_CategoryIcons = { .size = SPRITE_SIZE(16x16), @@ -750,16 +747,16 @@ static const struct OamData sOamData_CategoryIcons = .priority = 0, }; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = +const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons = { - .data = sCategoryIcons_Gfx, + .data = gCategoryIcons_Gfx, .size = 16*16*3/2, .tag = TAG_CATEGORY_ICONS, }; -static const struct SpritePalette sSpritePal_CategoryIcons = +const struct SpritePalette gSpritePal_CategoryIcons = { - .data = sCategoryIcons_Pal, + .data = gCategoryIcons_Pal, .tag = TAG_CATEGORY_ICONS }; @@ -788,7 +785,7 @@ static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = sSpriteAnim_CategoryIcon2, }; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = +const struct SpriteTemplate gSpriteTemplate_CategoryIcons = { .tileTag = TAG_CATEGORY_ICONS, .paletteTag = TAG_CATEGORY_ICONS, @@ -1142,7 +1139,7 @@ static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings. static u8 ShowCategoryIcon(u32 category) { if (sMonSummaryScreen->categoryIconSpriteId == 0xFF) - sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 48, 129, 0); + sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 129, 0); gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sMonSummaryScreen->categoryIconSpriteId], category); @@ -1437,8 +1434,8 @@ static bool8 DecompressGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, OBJ_PLTT_ID(13), 3 * PLTT_SIZE_4BPP); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); sMonSummaryScreen->switchCounter = 0; return TRUE; } From 13d4d29e1e3c32eb2d88c0c59c3953851095fcbd Mon Sep 17 00:00:00 2001 From: sneed <56992013+Sneed69@users.noreply.github.com> Date: Fri, 31 May 2024 13:19:07 +0300 Subject: [PATCH 17/31] Move SOLAR_POWER_HP_DROP label (#4675) --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 905f78e01e..08deb4fb59 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4903,10 +4903,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 BattleScriptPushCursorAndCallback(BattleScript_BadDreamsActivates); effect++; break; - SOLAR_POWER_HP_DROP: case ABILITY_SOLAR_POWER: if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) { + SOLAR_POWER_HP_DROP: BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates); gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) From bebc13b5a1a08141d044f4da969c12b9152de989 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 31 May 2024 12:22:18 +0200 Subject: [PATCH 18/31] Adjust Ate-Ability code a bit to make it more readable (#4640) * Adjust Ate-Ability code a bit to make it more readable * stupid oversight * fixed * pull normal type move check out of function * unused var * switch and tests * oversight * Apply suggestions from code review --------- Co-authored-by: Bassoonian --- src/battle_main.c | 74 ++++++++++++++++++------- test/battle/ability/ate_abilities.c | 85 +++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 test/battle/ability/ate_abilities.c diff --git a/src/battle_main.c b/src/battle_main.c index 16551254d9..88dbb94f8b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5976,9 +5976,59 @@ void RunBattleScriptCommands(void) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } +bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) +{ + u32 ateType; + + switch (gMovesInfo[move].effect) + { + case EFFECT_TERA_BLAST: + if (IsTerastallized(battlerAtk)) + return FALSE; + break; + case EFFECT_TERA_STARSTORM: + if (gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) + return FALSE; + break; + case EFFECT_HIDDEN_POWER: + case EFFECT_WEATHER_BALL: + case EFFECT_CHANGE_TYPE_ON_ITEM: + case EFFECT_NATURAL_GIFT: + return FALSE; + } + + ateType = TYPE_NONE; + switch (attackerAbility) + { + case ABILITY_PIXILATE: + ateType = TYPE_FAIRY; + break; + case ABILITY_REFRIGERATE: + ateType = TYPE_ICE; + break; + case ABILITY_AERILATE: + ateType = TYPE_FLYING; + break; + case ABILITY_GALVANIZE: + ateType = TYPE_ELECTRIC; + break; + default: + ateType = TYPE_NONE; + break; + } + + if (ateType != TYPE_NONE) + { + gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET; + return TRUE; + } + + return FALSE; +} + void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) { - u32 moveType, ateType, attackerAbility; + u32 moveType, attackerAbility; u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE); if (move == MOVE_STRUGGLE) @@ -6080,29 +6130,15 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } attackerAbility = GetBattlerAbility(battlerAtk); - - if (gMovesInfo[move].type == TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && gMovesInfo[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM - && gMovesInfo[move].effect != EFFECT_NATURAL_GIFT - && !(gMovesInfo[move].effect == EFFECT_TERA_BLAST && IsTerastallized(battlerAtk)) - && !(gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) - && ((attackerAbility == ABILITY_PIXILATE && (ateType = TYPE_FAIRY)) - || (attackerAbility == ABILITY_REFRIGERATE && (ateType = TYPE_ICE)) - || (attackerAbility == ABILITY_AERILATE && (ateType = TYPE_FLYING)) - || ((attackerAbility == ABILITY_GALVANIZE) && (ateType = TYPE_ELECTRIC)) - ) - ) + if (gMovesInfo[move].type == TYPE_NORMAL && TrySetAteType(move, battlerAtk, attackerAbility)) { - gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET; if (!IsDynamaxed(battlerAtk)) gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gMovesInfo[move].type != TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && attackerAbility == ABILITY_NORMALIZE) + && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER + && gMovesInfo[move].effect != EFFECT_WEATHER_BALL + && attackerAbility == ABILITY_NORMALIZE) { gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; if (!IsDynamaxed(battlerAtk)) diff --git a/test/battle/ability/ate_abilities.c b/test/battle/ability/ate_abilities.c new file mode 100644 index 0000000000..12ee75722a --- /dev/null +++ b/test/battle/ability/ate_abilities.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type moves") +{ + u32 move; + + PARAMETRIZE { move = MOVE_HIDDEN_POWER; } + PARAMETRIZE { move = MOVE_WEATHER_BALL; } + PARAMETRIZE { move = MOVE_MULTI_ATTACK; } + + ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].effect == EFFECT_HIDDEN_POWER); + ASSUME(gMovesInfo[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); + ASSUME(gMovesInfo[MOVE_MULTI_ATTACK].effect == EFFECT_CHANGE_TYPE_ON_ITEM); + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NOT MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Pixilate turns a normal type move into Fairy") +{ + GIVEN { + PLAYER(SPECIES_DRAGONITE); + OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Refrigerate turns a normal type move into Ice") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Aerilate turns a normal type move into Flying") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} From d55e0727474e02287ea46d3b91dfddd8ad5d7fbe Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 31 May 2024 12:55:15 +0200 Subject: [PATCH 19/31] Adds AI_IsFaster and AI_IsSlower functions (#4671) --- include/battle_ai_util.h | 4 +- src/battle_ai_main.c | 78 ++++++++++++++++++------------------ src/battle_ai_switch_items.c | 6 +-- src/battle_ai_util.c | 46 ++++++++++++--------- 4 files changed, 72 insertions(+), 62 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index afd468fbb6..700527dbeb 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -3,8 +3,6 @@ #define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) -#define AI_STRIKES_FIRST(battlerAi, battlerDef, move)((AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER)) - // Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. #define MAX_ROLL_PERCENTAGE 100 #define MIN_ROLL_PERCENTAGE 85 @@ -16,6 +14,8 @@ enum DMG_ROLL_HIGHEST, }; +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); bool32 IsAiVsAiBattle(void); bool32 BattlerHasAi(u32 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index fcf56363db..862d575c00 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -834,7 +834,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); - if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move)) RETURN_SCORE_MINUS(10); if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk)) @@ -1079,7 +1079,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (moveEffect) { case EFFECT_HIT: // only applies to Vital Throw - if (gMovesInfo[move].priority < 0 && AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) + if (gMovesInfo[move].priority < 0 && AI_IsFaster(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) ADJUST_SCORE(-2); // don't want to move last break; default: @@ -1523,7 +1523,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to disable @@ -1545,7 +1545,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to encore @@ -1923,7 +1923,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SPITE: case EFFECT_MIMIC: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) @@ -2068,7 +2068,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (isDoubleBattle) { if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // partner is going to set up hazards - && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove)) // partner is going to set up before the potential Defog { ADJUST_SCORE(-10); break; // Don't use Defog if partner is going to set up hazards @@ -2096,7 +2096,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && AI_IsSlower(battlerAtk, battlerDef, move) && gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE) ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you @@ -2280,7 +2280,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ME_FIRST: if (predictedMove != MOVE_NONE) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + if (AI_IsSlower(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail else return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); @@ -2463,7 +2463,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_ELECTRIFY: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + if (AI_IsSlower(battlerAtk, battlerDef, move) //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -2492,7 +2492,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + if (AI_IsSlower(battlerAtk, battlerDef, move)) instructedMove = predictedMove; else instructedMove = gLastMoves[battlerDef]; @@ -2531,21 +2531,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_QUASH: if (!isDoubleBattle - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || AI_IsSlower(battlerAtk, battlerDef, move) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_AFTER_YOU: if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef) || !isDoubleBattle - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || AI_IsSlower(battlerAtk, battlerDef, move) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SUCKER_PUNCH: if (predictedMove != MOVE_NONE) { - if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first + if (IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move)) // Opponent going first ADJUST_SCORE(-10); } break; @@ -2587,8 +2587,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-1); break; case EFFECT_FLAIL: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first - || aiData->hpPercents[battlerAtk] > 50) + if (AI_IsSlower(battlerAtk, battlerDef, move) // Opponent should go first + || aiData->hpPercents[battlerAtk] > 50) ADJUST_SCORE(-4); break; //TODO @@ -2624,7 +2624,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) ADJUST_SCORE(-10); else if (CanTargetFaintAi(battlerDef, battlerAtk) - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + && AI_IsSlower(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); break; case EFFECT_JUNGLE_HEALING: @@ -2652,7 +2652,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_UPPER_HAND: - if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move + if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move) || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move ADJUST_SCORE(-10); break; case EFFECT_PLACEHOLDER: @@ -2677,7 +2677,7 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && gMovesInfo[move].effect != EFFECT_EXPLOSION) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(FAST_KILL); else ADJUST_SCORE(SLOW_KILL); @@ -2743,7 +2743,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Adjust for always crit moves if (gMovesInfo[aiData->partnerMove].alwaysCriticalHit && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT) { - if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first + if (AI_IsSlower(battlerAtk, battlerAtkPartner, move)) // Partner moving first { // discourage raising our attack since it's about to be maxed out if (IsAttackBoostMoveEffect(effect)) @@ -3023,7 +3023,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerAtkPartner, move)) instructedMove = aiData->partnerMove; else instructedMove = gLastMoves[battlerAtkPartner]; @@ -3037,8 +3037,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_AFTER_YOU: - if (AI_WhoStrikesFirst(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) == AI_IS_SLOWER // Opponent mon 1 goes before partner - || AI_WhoStrikesFirst(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove) == AI_IS_SLOWER) // Opponent mon 2 goes before partner + if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) // Opponent mon 1 goes before partner + || AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove)) // Opponent mon 2 goes before partner { if (gMovesInfo[aiData->partnerMove].effect == EFFECT_COUNTER || gMovesInfo[aiData->partnerMove].effect == EFFECT_MIRROR_COAT) break; // These moves need to go last @@ -3047,9 +3047,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_HEAL_PULSE: case EFFECT_HIT_ENEMY_HEAL_ALLY: - if (AI_WhoStrikesFirst(battlerAtk, FOE(battlerAtk), move) == AI_IS_FASTER - && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) == AI_IS_FASTER - && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) + if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move) + && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) + && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) RETURN_SCORE_PLUS(WEAK_EFFECT); break; } // attacker move effects @@ -3343,7 +3343,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(-3); else if (!AI_RandLessThan(70)) ADJUST_SCORE(DECENT_EFFECT); @@ -3558,7 +3558,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_MIMIC: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerDef, move)) { if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF) return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); @@ -3620,7 +3620,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) && (gLastMoves[battlerDef] != MOVE_NONE) && (gLastMoves[battlerDef] != 0xFFFF) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)) + && (AI_IsFaster(battlerAtk, battlerDef, move))) { if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) ADJUST_SCORE(GOOD_EFFECT); // Disable move that can kill attacker @@ -3648,7 +3648,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_DESTINY_BOND: if (IsDynamaxed(battlerDef)) break; - else if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk)) + else if (AI_IsFaster(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SPITE: @@ -3848,7 +3848,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE && !isDoubleBattle) { - if ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if ((AI_IsFaster(battlerAtk, battlerDef, move)) && (gMovesInfo[predictedMove].effect == EFFECT_EXPLOSION || gMovesInfo[predictedMove].effect == EFFECT_PROTECT)) ADJUST_SCORE(GOOD_EFFECT); else if (gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) @@ -3890,7 +3890,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_ATTRACT: if (!isDoubleBattle - && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + && (AI_IsSlower(battlerAtk, battlerDef, move)) && BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef])) break; // Don't use if the attract won't have a change to activate if (gBattleMons[battlerDef].status1 & STATUS1_ANY @@ -3924,7 +3924,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (isDoubleBattle) { if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // Partner is going to set up hazards - && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(battlerAtk), move) == AI_IS_SLOWER) // Partner going first + && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move)) // Partner going first break; // Don't use Defog if partner is going to set up hazards } if (ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef])) @@ -4350,7 +4350,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEAL_BLOCK: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) + if (AI_IsFaster(battlerAtk, battlerDef, move) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) ADJUST_SCORE(DECENT_EFFECT); // Try to cancel healing move else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS || (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) @@ -4382,7 +4382,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_QUASH: - if (isDoubleBattle && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove) == AI_IS_SLOWER) + if (isDoubleBattle && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove)) ADJUST_SCORE(DECENT_EFFECT); // Attacker partner wouldn't go before target break; case EFFECT_TAILWIND: @@ -4397,7 +4397,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) && !(AI_GetTypeEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { if (gMovesInfo[predictedMove].type == TYPE_GROUND) ADJUST_SCORE(GOOD_EFFECT); // Cause the enemy's move to fail @@ -4412,7 +4412,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_CAMOUFLAGE: - if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first + if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4448,7 +4448,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_ENDEAVOR: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER && !CanTargetFaintAi(battlerDef, battlerAtk)) + if (AI_IsSlower(battlerAtk, battlerDef, move) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_REVIVAL_BLESSING: @@ -4708,7 +4708,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_THROAT_CHOP: if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].soundMove) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(DECENT_EFFECT); @@ -4759,7 +4759,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score return score; if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && AI_IsSlower(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk) && GetMovePriority(battlerAtk, move) == 0) { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 2dac845c47..5aee43b8bf 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -162,7 +162,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) // Check if current mon can outspeed and KO in spite of bad matchup, and don't switch out if it can if(damageDealt > gBattleMons[opposingBattler].hp) { - if (AI_WhoStrikesFirst(battler, opposingBattler, aiBestMove) == AI_IS_FASTER) + if (AI_IsFaster(battler, opposingBattler, aiBestMove)) return FALSE; } @@ -569,7 +569,7 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) && AnyStatIsRaised(battler)) switchMon = FALSE; if (AiExpectsToFaintPlayer(battler) - && !AI_STRIKES_FIRST(battler, opposingBattler, 0) + && AI_IsSlower(battler, opposingBattler, 0) && !AI_OpponentCanFaintAiWithMod(battler, 0)) switchMon = FALSE; } @@ -2019,7 +2019,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler) if (GetBattlerSide(target) != GetBattlerSide(battler) && CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], 0) - && AI_WhoStrikesFirst(battler, target, GetAIChosenMove(battler)) == AI_IS_FASTER) + && AI_IsFaster(battler, target, GetAIChosenMove(battler))) { // We expect to faint the target and move first -> dont use an item return TRUE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 9d4f03fb6e..7a39d15c69 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -35,6 +35,16 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier); // Functions +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER); +} + +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_SLOWER); +} + u32 GetAIChosenMove(u32 battlerId) { return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]); @@ -311,7 +321,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i]; if (gMovesInfo[move].effect == EFFECT_PROTECT && move != MOVE_ENDURE) return TRUE; - if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)) == AI_IS_SLOWER) + if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI))) return TRUE; } return FALSE; @@ -1614,7 +1624,7 @@ bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) return !(battlerAbility == ABILITY_BIG_PECKS); case STAT_SPEED: // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_WhoStrikesFirst(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER + return !(AI_IsFaster(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) && CountUsablePartyMons(sBattler_AI) == 0 && !HasMoveEffect(sBattler_AI, EFFECT_ELECTRO_BALL)); case STAT_ACC: @@ -1683,7 +1693,7 @@ u32 CountNegativeStatStages(u32 battlerId) bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1702,7 +1712,7 @@ bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1721,12 +1731,12 @@ bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. - if (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsSlower(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && defAbility != ABILITY_CONTRARY && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_FULL_METAL_BODY @@ -1738,7 +1748,7 @@ bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1756,7 +1766,7 @@ bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1774,7 +1784,7 @@ bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1793,7 +1803,7 @@ bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -2514,7 +2524,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 /*if (IsPredictedToSwitch(battlerDef, battlerAtk) && !hasStatBoost) return PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/ - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise { @@ -2898,7 +2908,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi if (((!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)) // Opponent goes first + || AI_IsSlower(battlerAtk, battlerDef, move))) // Opponent goes first { return 0; } @@ -2906,7 +2916,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) && CanTargetFaintAi(battlerDef, battlerAtk))) + || ((AI_IsFaster(battlerAtk, battlerDef, move)) && CanTargetFaintAi(battlerDef, battlerAtk))) { return 2; // good idea to flinch } @@ -3024,7 +3034,7 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) { - if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) { // using item or user goes first u32 healPercent = (gMovesInfo[move].argument == 0) ? 50 : gMovesInfo[move].argument; @@ -3051,7 +3061,7 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent) { - if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) { // using item or user going first s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; @@ -3510,7 +3520,7 @@ bool32 IsRecycleEncouragedItem(u32 item) static void IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score, bool32 considerContrary) { u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk); - u32 aiIsFaster = GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == AI_IS_FASTER; + u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE); u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) @@ -3844,7 +3854,7 @@ void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerDef) != 0) ADJUST_SCORE_PTR(-2); - if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE_PTR(-10); if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE) ADJUST_SCORE_PTR(GOOD_EFFECT); @@ -3890,6 +3900,6 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st } return (preventsStatLoss - && AI_STRIKES_FIRST(battlerAtk, battlerAtkPartner, TRUE) + && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } From 810caa7fd673020ad5fe7ed81c74bf49f01a3052 Mon Sep 17 00:00:00 2001 From: sneed <56992013+Sneed69@users.noreply.github.com> Date: Fri, 31 May 2024 16:54:51 +0300 Subject: [PATCH 20/31] In battle move descriptions index fix (#4678) --- src/battle_controller_player.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 1d52dd0b69..5bf12e2cc7 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1847,7 +1847,7 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) if (gMovesInfo[move].effect == EFFECT_PLACEHOLDER) StringAppend(gDisplayedStringBattle, gNotDoneYetDescription); else - StringAppend(gDisplayedStringBattle, gMovesInfo[move - 1].description); + StringAppend(gDisplayedStringBattle, gMovesInfo[move].description); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_DESCRIPTION); if (gCategoryIconSpriteId == 0xFF) From e869aaf70b105c3e50835bc67a31d98432e63eb0 Mon Sep 17 00:00:00 2001 From: sneed <56992013+Sneed69@users.noreply.github.com> Date: Fri, 31 May 2024 17:56:17 +0300 Subject: [PATCH 21/31] Add global constants for damage roll related code and make AverageRollDmg faster (#4663) * faster AverageRollDmg, global dmg roll constants * restore MAX_ROLL_PERCENTAGE & MIN_ROLL_PERCENTAGE * rename AverageRollDmg --- include/battle_ai_util.h | 4 ++-- include/battle_util.h | 4 ++++ src/battle_ai_util.c | 8 ++++---- src/battle_util.c | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 700527dbeb..36ce1cdda5 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -4,8 +4,8 @@ #define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) // Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. -#define MAX_ROLL_PERCENTAGE 100 -#define MIN_ROLL_PERCENTAGE 85 +#define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI +#define MIN_ROLL_PERCENTAGE DMG_ROLL_PERCENT_LO enum { diff --git a/include/battle_util.h b/include/battle_util.h index 2bfc9cba9e..9638cf1a77 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -66,6 +66,10 @@ enum { #define IS_WHOLE_SIDE_ALIVE(battler) ((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler)))) #define IS_ALIVE_AND_PRESENT(battler) (IsBattlerAlive(battler) && IsBattlerSpritePresent(battler)) +// Lowest and highest percentages used for damage roll calculations +#define DMG_ROLL_PERCENT_LO 85 +#define DMG_ROLL_PERCENT_HI 100 + // for Natural Gift and Fling struct TypePower { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 7a39d15c69..d3645bfdef 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -391,9 +391,9 @@ static inline s32 HighestRollDmg(s32 dmg) return dmg; } -static inline s32 AverageRollDmg(s32 dmg) +static inline s32 AverageDmg(s32 dmg) { - dmg = ((HighestRollDmg(dmg) + LowestRollDmg(dmg)) * 100) / 2; + dmg = (dmg * (MIN_ROLL_PERCENTAGE + MAX_ROLL_PERCENTAGE)) / 2; dmg /= 100; return dmg; } @@ -559,7 +559,7 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes u32 critChance = GetCritHitChance(critChanceIndex); // With critChance getting closer to 1, dmg gets closer to critDmg. if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); + dmg = AverageDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); else @@ -568,7 +568,7 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes else { if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageRollDmg(normalDmg); + dmg = AverageDmg(normalDmg); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg(normalDmg); else diff --git a/src/battle_util.c b/src/battle_util.c index b7aab24113..1c16baa2fd 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9994,7 +9994,7 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, if (randomFactor) { - dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } @@ -10055,7 +10055,7 @@ static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u3 if (randomFactor) { - dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } From e3959a764bba066d6d7f80926f34df881f002168 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 31 May 2024 17:54:25 +0200 Subject: [PATCH 22/31] Rename MgbaPrintf_ to Test_MgbaPrintf (#4642) --- gflib/malloc.c | 4 ++-- include/test/test.h | 8 ++++---- src/battle_ai_main.c | 2 +- test/test_runner.c | 26 +++++++++++++------------- test/test_runner_battle.c | 22 +++++++++++----------- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/gflib/malloc.c b/gflib/malloc.c index 3c15dd9447..edf7be1305 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -92,9 +92,9 @@ void *AllocInternal(void *heapStart, u32 size, const char *location) { const char *location = MemBlockLocation(block); if (location) - MgbaPrintf_("%s: %d bytes allocated", location, block->size); + Test_MgbaPrintf("%s: %d bytes allocated", location, block->size); else - MgbaPrintf_(": %d bytes allocated", block->size); + Test_MgbaPrintf(": %d bytes allocated", block->size); } block = block->next; } diff --git a/include/test/test.h b/include/test/test.h index dbd547ba9f..5a543a52b9 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -75,7 +75,7 @@ void Test_ExpectedResult(enum TestResult); void Test_ExpectLeaks(bool32); void Test_ExitWithResult(enum TestResult, const char *fmt, ...); -s32 MgbaPrintf_(const char *fmt, ...); +s32 Test_MgbaPrintf(const char *fmt, ...); #define TEST(_name) \ static void CAT(Test, __LINE__)(void); \ @@ -193,7 +193,7 @@ static inline struct Benchmark BenchmarkStop(void) do \ { \ u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ - MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ + Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if (((a_ - BENCHMARK_ABS) * BENCHMARK_REL) >= (b_ * 100)) \ Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) @@ -202,7 +202,7 @@ static inline struct Benchmark BenchmarkStop(void) do \ { \ u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ - MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ + Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if ((a_ * 100) <= ((b_ - BENCHMARK_ABS) * BENCHMARK_REL)) \ Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) @@ -215,7 +215,7 @@ static inline struct Benchmark BenchmarkStop(void) #define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) -#define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (MgbaPrintf_(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1)) +#define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (Test_MgbaPrintf(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1)) #define TO_DO \ do { \ diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 862d575c00..c8f6cacdaf 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3156,7 +3156,7 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) isTwoTurnNotSemiInvulnerableMove[i] = FALSE; } /* - MgbaPrintf_("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); + Test_MgbaPrintf("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); */ } diff --git a/test/test_runner.c b/test/test_runner.c index 9f29d6c7cf..27fa623836 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -180,7 +180,7 @@ top: break; } - MgbaPrintf_(":N%s", gTestRunnerState.test->name); + Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; gTestRunnerState.expectLeaks = FALSE; @@ -249,7 +249,7 @@ top: || !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END) || (block->next <= block && block->next != head)) { - MgbaPrintf_("gHeap corrupted block at 0x%p", block); + Test_MgbaPrintf("gHeap corrupted block at 0x%p", block); gTestRunnerState.result = TEST_RESULT_ERROR; break; } @@ -258,9 +258,9 @@ top: { const char *location = MemBlockLocation(block); if (location) - MgbaPrintf_("%s: %d bytes not freed", location, block->size); + Test_MgbaPrintf("%s: %d bytes not freed", location, block->size); else - MgbaPrintf_(": %d bytes not freed", block->size); + Test_MgbaPrintf(": %d bytes not freed", block->size); gTestRunnerState.result = TEST_RESULT_FAIL; } block = block->next; @@ -283,7 +283,7 @@ top: if (gTestRunnerState.result == gTestRunnerState.expectedResult) { color = "\e[32m"; - MgbaPrintf_(":N%s", gTestRunnerState.test->name); + Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); } else if (gTestRunnerState.result != TEST_RESULT_ASSUMPTION_FAIL || gTestRunnerSkipIsFail) { @@ -342,18 +342,18 @@ top: if (gTestRunnerState.result == TEST_RESULT_PASS) { if (gTestRunnerState.result != gTestRunnerState.expectedResult) - MgbaPrintf_(":U%s%s\e[0m", color, result); + Test_MgbaPrintf(":U%s%s\e[0m", color, result); else - MgbaPrintf_(":P%s%s\e[0m", color, result); + Test_MgbaPrintf(":P%s%s\e[0m", color, result); } else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) - MgbaPrintf_(":A%s%s\e[0m", color, result); + Test_MgbaPrintf(":A%s%s\e[0m", color, result); else if (gTestRunnerState.result == TEST_RESULT_TODO) - MgbaPrintf_(":T%s%s\e[0m", color, result); + Test_MgbaPrintf(":T%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) - MgbaPrintf_(":K%s%s\e[0m", color, result); + Test_MgbaPrintf(":K%s%s\e[0m", color, result); else - MgbaPrintf_(":F%s%s\e[0m", color, result); + Test_MgbaPrintf(":F%s%s\e[0m", color, result); } break; @@ -395,7 +395,7 @@ static void FunctionTest_Run(void *data) do { if (gFunctionTestRunnerState->parameters) - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); + Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); gFunctionTestRunnerState->parameters = 0; function(); } while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters); @@ -517,7 +517,7 @@ static void MgbaExit_(u8 exitCode) asm("swi 0x3" :: "r" (_exitCode)); } -s32 MgbaPrintf_(const char *fmt, ...) +s32 Test_MgbaPrintf(const char *fmt, ...) { va_list va; va_start(va, fmt); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index afc996a326..9a71c9a9a8 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -208,20 +208,20 @@ static void PrintTestName(void) if (STATE->trials && STATE->parameters) { if (STATE->trials == 1) - MgbaPrintf_(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1); + Test_MgbaPrintf(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1); else - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + Test_MgbaPrintf(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); } else if (STATE->trials) { if (STATE->trials == 1) - MgbaPrintf_(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); + Test_MgbaPrintf(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); else - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + Test_MgbaPrintf(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); } else if (STATE->parameters) { - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); } } @@ -956,7 +956,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return; DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot]; - MgbaPrintf_("Score Log for move %S:\n", GetMoveName(moveId)); + Test_MgbaPrintf("Score Log for move %S:\n", GetMoveName(moveId)); for (i = 0; i < MAX_AI_LOG_LINES; i++) { struct AILogLine *log = &DATA.aiLogLines[battlerId][moveSlot][i]; @@ -965,17 +965,17 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco if (log->set) { scoreFromLogs = log->score; - MgbaPrintf_("%s:%d: = %d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: = %d\n", log->file, log->line, log->score); } else if (log->score > 0) { scoreFromLogs += log->score; - MgbaPrintf_("%s:%d: +%d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: +%d\n", log->file, log->line, log->score); } else { scoreFromLogs += log->score; - MgbaPrintf_("%s:%d: %d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: %d\n", log->file, log->line, log->score); } } else @@ -987,7 +987,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco { Test_ExitWithResult(TEST_RESULT_ERROR, "Warning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore); } - MgbaPrintf_("Total: %d\n", totalScore); + Test_MgbaPrintf("Total: %d\n", totalScore); } static void ClearAiLog(u32 battlerId) @@ -1163,7 +1163,7 @@ static s32 TryMessage(s32 i, s32 n, const u8 *string) continue; event = &DATA.queuedEvents[i].as.message; - // MgbaPrintf_("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging. + // Test_MgbaPrintf("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging. for (j = k = 0; ; j++, k++) { if (event->pattern[k] == CHAR_SPACE) From 5405e6532efd6ae466323a9f7ade639b1687bdb2 Mon Sep 17 00:00:00 2001 From: WillKolada <57021938+WillKolada@users.noreply.github.com> Date: Fri, 31 May 2024 11:23:56 -0500 Subject: [PATCH 23/31] Clear Dynamax data when a battler faints (#4672) * Update battle_main.c Now clears dynamax data when a battler faints * Update battle_main.c Actually call the helper function instead of only doing half of what it does. * Added new line before return Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_main.c b/src/battle_main.c index 90c290c887..9fa55a3d39 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3718,6 +3718,9 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + // Clear Dynamax data + UndoDynamax(battler); + return result; } From 0ed8d09d4777608d7749a66d171c438fca655f0c Mon Sep 17 00:00:00 2001 From: WillKolada <57021938+WillKolada@users.noreply.github.com> Date: Fri, 31 May 2024 15:33:31 -0500 Subject: [PATCH 24/31] Revert Dynamax HP on fainting (#4681) * Revert Dynamax HP on fainting Calls UndoDynamax whenever a mon faints to ensure that its HP is reverted and the relevant data is cleared. Updates UndoDynamax to CalculateMonStats after applying the HP reversion to prevent fainted mons from retaining their boosted Max HP until the end of the battle. * Update src/battle_main.c --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_dynamax.c | 1 + src/battle_main.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 7286045684..557ed604fe 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -207,6 +207,7 @@ void UndoDynamax(u16 battlerId) u16 mult = UQ_4_12(1.0/1.5); // placeholder gBattleMons[battlerId].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up SetMonData(mon, MON_DATA_HP, &gBattleMons[battlerId].hp); + CalculateMonStats(mon); } // Makes sure there are no Dynamax flags set, including on switch / faint. diff --git a/src/battle_main.c b/src/battle_main.c index 3bf3a3e638..0ab3a67fa8 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3677,6 +3677,9 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + // Clear Dynamax data + UndoDynamax(battler); + return result; } From cb1b4bc9a00afb3f019569b23cc36f0018fba970 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sat, 1 Jun 2024 01:30:43 -0400 Subject: [PATCH 25/31] Switch AI uses trapping abilities aggressively (#4669) * Trapping switch AI * Review feedback, mostly spacing cleanup * Assume Mawile is Steel type * Move switching tests into their own file --- src/battle_ai_switch_items.c | 133 ++++++++++---- test/battle/ai.c | 264 ---------------------------- test/battle/ai_switching.c | 331 +++++++++++++++++++++++++++++++++++ 3 files changed, 433 insertions(+), 295 deletions(-) create mode 100644 test/battle/ai_switching.c diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5aee43b8bf..19bf2adbc6 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -29,6 +29,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler); static bool32 AI_ShouldHeal(u32 battler, u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount); static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon); +static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent); static void InitializeSwitchinCandidate(struct Pokemon *mon) { @@ -414,6 +415,48 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) return FALSE; } +static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult) +{ + s32 firstId; + s32 lastId; + struct Pokemon *party; + s32 i; + u16 monAbility; + s32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + + // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer + if (!(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) + return FALSE; + + // Check if current mon has an ability that traps opponent + if (CanAbilityTrapOpponent(gBattleMons[battler].ability, opposingBattler)) + return FALSE; + + // Check party for mon with ability that traps opponent + GetAIPartyIndexes(battler, &firstId, &lastId); + + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = firstId; i < lastId; i++) + { + monAbility = GetMonAbility(&party[i]); + if (CanAbilityTrapOpponent(monAbility, opposingBattler)) + { + if (i == AI_DATA->mostSuitableMonId[battler]) // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 + { + gBattleStruct->AI_monToSwitchIntoId[battler] = i; + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } + } + return FALSE; +} + static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) { bool32 switchMon = FALSE; @@ -1017,6 +1060,8 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) return TRUE; if (ShouldSwitchIfGameStatePrompt(battler, emitResult)) return TRUE; + if (FindMonThatTrapsOpponent(battler, emitResult)) + return TRUE; if (FindMonThatAbsorbsOpponentsMove(battler, emitResult)) return TRUE; @@ -1691,6 +1736,25 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle return maxDamageTaken; } +static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) +{ + if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST))) + return FALSE; + else if (ability == ABILITY_SHADOW_TAG) + { + if (B_SHADOW_TAG_ESCAPE >= GEN_4 && GetBattlerAbility(opponent) == ABILITY_SHADOW_TAG) // Check if ability exists in species + return FALSE; + else + return TRUE; + } + else if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(opponent)) + return TRUE; + else if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(opponent, TYPE_STEEL)) + return TRUE; + else + return FALSE; +} + // This function splits switching behaviour mid-battle from after a KO. // Mid battle, it integrates GetBestMonTypeMatchup (vanilla with modifications), GetBestMonDefensive (custom), and GetBestMonBatonPass (vanilla with modifications) // After a KO, integrates GetBestMonRevengeKiller (custom), GetBestMonTypeMatchup (vanilla with modifications), GetBestMonBatonPass (vanilla with modifications), and GetBestMonDmg (vanilla) @@ -1704,17 +1768,17 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u8 battlerIn1, u8 battlerIn2, bool32 isSwitchAfterKO) { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; - int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE; + int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; int i, j, aliveCount = 0, bits = 0; s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed - u32 aiMove, hitsToKO, hitsToKOThreshold, maxHitsToKO = 0; - s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, maxDamageDealt = 0, damageDealt = 0; + u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIThreshold, maxHitsToKO = 0; + s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, aiMovePriority = 0, maxDamageDealt = 0, damageDealt = 0; u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; if (isSwitchAfterKO) - hitsToKOThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free + hitsToKOAIThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free else - hitsToKOThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free + hitsToKOAIThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free // Iterate through mons for (i = firstId; i < lastId; i++) @@ -1744,12 +1808,12 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, continue; // Get max number of hits for player to KO AI mon - hitsToKO = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); + hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); // Track max hits to KO and set GetBestMonDefensive if applicable - if(hitsToKO > maxHitsToKO) + if(hitsToKOAI > maxHitsToKO) { - maxHitsToKO = hitsToKO; + maxHitsToKO = hitsToKOAI; if(maxHitsToKO > defensiveMonHitKOThreshold) defensiveMonId = i; } @@ -1759,7 +1823,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check that good type matchups gets at least two turns and set GetBestMonTypeMatchup if applicable if (typeMatchup < bestResist) { - if ((hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKO > hitsToKOThreshold + 1) // Need to take an extra hit if slower + if ((hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKOAI > hitsToKOAIThreshold + 1) // Need to take an extra hit if slower { bestResist = typeMatchup; typeMatchupId = i; @@ -1772,13 +1836,14 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; + aiMovePriority = gMovesInfo[aiMove].priority; // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_AVERAGE); // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not - if (aiMove == MOVE_BATON_PASS && ((hitsToKO > hitsToKOThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) + if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) bits |= gBitTable[i]; // Check for mon with resistance and super effective move for GetBestMonTypeMatchup @@ -1789,7 +1854,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) { // Assuming a super effective move would do significant damage or scare the player out, so not being as conservative here - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { bestResistEffective = typeMatchup; typeMatchupEffectiveId = i; @@ -1804,7 +1869,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check that mon isn't one shot and set GetBestMonDmg if applicable if (damageDealt > maxDamageDealt) { - if(hitsToKO > hitsToKOThreshold) + if(hitsToKOAI > hitsToKOAIThreshold) { maxDamageDealt = damageDealt; damageMonId = i; @@ -1816,7 +1881,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (damageDealt > playerMonHP) { // If AI mon is faster and doesn't die to hazards - if ((aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) + if ((aiMonSpeed > playerMonSpeed || aiMovePriority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) { // We have a revenge killer revengeKillerId = i; @@ -1826,7 +1891,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else { // If AI mon can't be OHKO'd - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { // We have a slow revenge killer slowRevengeKillerId = i; @@ -1838,10 +1903,10 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (damageDealt > playerMonHP / 2) { // If AI mon is faster - if (aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0) + if (aiMonSpeed > playerMonSpeed || aiMovePriority > 0) { // If AI mon can't be OHKO'd - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { // We have a fast threaten fastThreatenId = i; @@ -1851,13 +1916,25 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else { // If AI mon can't be 2HKO'd - if (hitsToKO > hitsToKOThreshold + 1) + if (hitsToKOAI > hitsToKOAIThreshold + 1) { // We have a slow threaten slowThreatenId = i; } } } + + // If mon can trap + if (CanAbilityTrapOpponent(AI_DATA->switchinCandidate.battleMon.ability, opposingBattler)) + { + hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); + if (CountUsablePartyMons(opposingBattler) > 0 + && (((hitsToKOAI > hitsToKOPlayer && isSwitchAfterKO) // If can 1v1 after a KO + || (hitsToKOAI == hitsToKOPlayer && isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))) + || ((hitsToKOAI > hitsToKOPlayer + 1 && !isSwitchAfterKO) // If can 1v1 after mid battle + || (hitsToKOAI == hitsToKOPlayer + 1 && !isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))))) + trapperId = i; + } } } } @@ -1867,43 +1944,37 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Different switching priorities depending on switching mid battle vs switching after a KO if (isSwitchAfterKO) { - // Return GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg - if (revengeKillerId != PARTY_SIZE) + // Return Trapper > GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg + if (trapperId != PARTY_SIZE) + return trapperId; + else if (revengeKillerId != PARTY_SIZE) return revengeKillerId; - else if (slowRevengeKillerId != PARTY_SIZE) return slowRevengeKillerId; - else if (fastThreatenId != PARTY_SIZE) return fastThreatenId; - else if (slowThreatenId != PARTY_SIZE) return slowThreatenId; - else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; - else if (batonPassId != PARTY_SIZE) return batonPassId; - else if (damageMonId != PARTY_SIZE) return damageMonId; } else { - // Return GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass - if (typeMatchupEffectiveId != PARTY_SIZE) + // Return Trapper > GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass + if (trapperId != PARTY_SIZE) + return trapperId; + else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; - else if (defensiveMonId != PARTY_SIZE) return defensiveMonId; - else if (batonPassId != PARTY_SIZE) return batonPassId; diff --git a/test/battle/ai.c b/test/battle/ai.c index e673be4e6a..2d804446d5 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -2,26 +2,6 @@ #include "test/battle.h" #include "battle_ai_util.h" -AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed. -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_STUNFISK); - PLAYER(SPECIES_PELIPPER); - OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); } - OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); } - } WHEN { - - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - } -} - AI_SINGLE_BATTLE_TEST("AI prefers Bubble over Water Gun if it's slower") { u32 speedPlayer, speedAi; @@ -526,222 +506,6 @@ AI_SINGLE_BATTLE_TEST("AI will choose either Rock Tomb or Bulldoze if Stat drop } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); } - // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place - OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } - OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } - OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); } - OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); } - OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); } - OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); } - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } - } SCENE { - MESSAGE("Venusaur fainted!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); } - // Scenario courtesy of Duke, who triggered the bug in the first place - OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); } - } WHEN { - TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); } - } SCENE { - MESSAGE("Bulbasaur fainted!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } - // Scenario courtesy of Duke, who triggered the bug in the first place - OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } - OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); } - } WHEN { - TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") -{ - bool32 alakazamFirst; - u32 speedAlakazm; - u32 aiSmartSwitchFlags = 0; - - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in - PARAMETRIZE{ speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in - - GIVEN { - ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. - OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } - OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. - OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. - } WHEN { - TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped - } SCENE { - MESSAGE("Foe Kadabra fainted!"); - if (alakazamFirst) { - MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); - } else { - MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); - } - } -} - -AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); } - } WHEN { - TURN { MOVE(player, MOVE_PERISH_SONG); } - TURN { ; } - TURN { ; } - TURN { EXPECT_SWITCH(opponent, 1); } - } SCENE { - MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in") -{ - u32 aiIsSmart = 0; - u32 aiSmartSwitchFlags = 0; - - PARAMETRIZE{ aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd - PARAMETRIZE{ aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks - OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium - OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium - } WHEN { - TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} - TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup") -{ - u32 aiSmartSwitchFlags = 0; - u32 move1; - u32 move2; - u32 expectedIndex; - - PARAMETRIZE{ expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } - PARAMETRIZE{ expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout - OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); } - OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); } - OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } - } WHEN { - TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } - } WHEN { - TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); } - OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); } - OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_CHARM); } - TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them") -{ - u32 move1; - - PARAMETRIZE{ move1 = MOVE_TACKLE; } - PARAMETRIZE{ move1 = MOVE_RAPID_SPIN; } - - GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); } - OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); } - OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_STEALTH_ROCK); } - TURN { MOVE(player, MOVE_EARTHQUAKE); } - TURN { MOVE(player, MOVE_CHARM); } - TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out - MOVE(player, MOVE_CHARM); - if (move1 == MOVE_RAPID_SPIN) - EXPECT_SWITCH(opponent, 1); - else if (move1 == MOVE_TACKLE) - EXPECT_MOVE(opponent, MOVE_TACKLE); - } - } -} - AI_SINGLE_BATTLE_TEST("First Impression is preferred on the first turn of the species if it's the best dmg move") { GIVEN { @@ -778,34 +542,6 @@ AI_SINGLE_BATTLE_TEST("First Impression is not chosen if it's blocked by certain } } -AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle") -{ - u32 flags; - - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags); - PLAYER(SPECIES_RATTATA); - PLAYER(SPECIES_RATTATA); - // No moves to damage player. - OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } - } WHEN { - TURN { EXPECT_SWITCH(opponentLeft, 3); }; - } SCENE { - MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); - NONE_OF { - MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); - } - } -} - AI_SINGLE_BATTLE_TEST("AI will not choose Burn Up if the user lost the Fire typing") { GIVEN { diff --git a/test/battle/ai_switching.c b/test/battle/ai_switching.c new file mode 100644 index 0000000000..fb5085a791 --- /dev/null +++ b/test/battle/ai_switching.c @@ -0,0 +1,331 @@ +#include "global.h" +#include "test/battle.h" + +AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed. +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_STUNFISK); + PLAYER(SPECIES_PELIPPER); + OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); } + OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); } + } WHEN { + + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + } +} + +// General switching behaviour +AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_PERISH_SONG); } + TURN { ; } + TURN { ; } + TURN { EXPECT_SWITCH(opponent, 1); } + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); + } +} + +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle") +{ + u32 flags; + + PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE {flags = 0; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags); + PLAYER(SPECIES_RATTATA); + PLAYER(SPECIES_RATTATA); + // No moves to damage player. + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } + } WHEN { + TURN { EXPECT_SWITCH(opponentLeft, 3); }; + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + NONE_OF { + MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + } + } +} + +// General AI_FLAG_SMART_MON_CHOICES behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); } + // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place + OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } + OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } + OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); } + OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); } + OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); } + OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Venusaur fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); } + // Scenario courtesy of Duke, who triggered the bug in the first place + OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Bulbasaur fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + // Scenario courtesy of Duke, who triggered the bug in the first place + OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); } + } WHEN { + TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") +{ + bool32 alakazamFirst; + u32 speedAlakazm; + u32 aiSmartSwitchFlags = 0; + + PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off + PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in + PARAMETRIZE{ speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in + + GIVEN { + ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. + OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } + OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. + OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. + } WHEN { + TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped + } SCENE { + MESSAGE("Foe Kadabra fainted!"); + if (alakazamFirst) { + MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); + } else { + MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); + } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in") +{ + u32 aiIsSmart = 0; + u32 aiSmartSwitchFlags = 0; + + PARAMETRIZE{ aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd + PARAMETRIZE{ aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks + OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} + TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup") +{ + u32 aiSmartSwitchFlags = 0; + u32 move1; + u32 move2; + u32 expectedIndex; + + PARAMETRIZE{ expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage + PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } + PARAMETRIZE{ expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move + PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout + OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); } + OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); } + OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); } + } +} + +// General AI_FLAG_SMART_SWITCHING behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); } + OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); } + OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_CHARM); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them") +{ + u32 move1; + + PARAMETRIZE{ move1 = MOVE_TACKLE; } + PARAMETRIZE{ move1 = MOVE_RAPID_SPIN; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); } + OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); } + OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { MOVE(player, MOVE_EARTHQUAKE); } + TURN { MOVE(player, MOVE_CHARM); } + TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out + MOVE(player, MOVE_CHARM); + if (move1 == MOVE_RAPID_SPIN) + EXPECT_SWITCH(opponent, 1); + else if (move1 == MOVE_TACKLE) + EXPECT_MOVE(opponent, MOVE_TACKLE); + } + } +} + +// Trapping behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon mid battle") +{ + u32 aiSmartSwitchingFlag = 0; + PARAMETRIZE { aiSmartSwitchingFlag = 0; } + PARAMETRIZE { aiSmartSwitchingFlag = AI_FLAG_SMART_SWITCHING; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[1] == TYPE_GHOST); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchingFlag); + PLAYER(SPECIES_ELECTRODE) { Speed(4); Moves(MOVE_THUNDERBOLT, MOVE_AURA_SPHERE, MOVE_PROTECT); } + PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; + OPPONENT(SPECIES_SNORLAX) { Speed(1); Moves(MOVE_HEADBUTT); } + OPPONENT(SPECIES_DUGTRIO) { Speed(3); Ability(ABILITY_ARENA_TRAP); Moves(MOVE_EARTHQUAKE); } + OPPONENT(SPECIES_GOLURK) { Speed(5); Moves(MOVE_EARTHQUAKE); } + } WHEN { + if (aiSmartSwitchingFlag == AI_FLAG_SMART_SWITCHING) + TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_SWITCH(opponent, 1); } + else + TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_MOVE(opponent, MOVE_HEADBUTT); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will switch in trapping mon after KO") +{ + u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches + GIVEN{ + ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag); + PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); } + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); } + OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); } + OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } + } WHEN { + if (aiSmartMonChoicesFlag == AI_FLAG_SMART_MON_CHOICES) + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); } + else + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + } +} + +AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon left") +{ + u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches + GIVEN{ + ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag); + PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); } + OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); } + OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); } + OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } + } WHEN { + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + } +} From 0be643a517a4eb3e20805e3dfea53ce39b7209a6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 1 Jun 2024 01:38:22 -0400 Subject: [PATCH 26/31] Set TYPE_NONE as type 0 + other type data tweaks (#4462) * Set TYPE_MYSTERY as type 0 * Remove redundant TYPE_NONE * Moved Gen 1-3 type damage categories to gTypesInfo * Set TYPE_NONE as 0 instead * Grouped type info to a single file * Fixed sTypeEffectivenessTable static name * Adjusted MON_DATA_TERA_TYPE to account for shift in type IDs * oops, missed the extern * Moved Tera Type RGB values to gTypesInfo * Fixed Tera Type test * Added option test feature to set IVs * Hidden Power type test * Tera Type safeguard in givemon * Removed isHiddenPowerType for a future PR that refactors Hidden Power * Review changes --- graphics/types/none.png | Bin 0 -> 215 bytes graphics_file_rules.mk | 2 +- include/battle_main.h | 1 + include/config/battle.h | 2 +- include/constants/pokemon.h | 44 +-- include/data.h | 3 + include/test/battle.h | 12 + src/battle_main.c | 337 +------------------- src/battle_terastal.c | 28 +- src/battle_util.c | 46 +-- src/data/types_info.h | 423 +++++++++++++++++++++++++ src/menu.c | 1 + src/pokedex.c | 2 +- src/pokedex_plus_hgss.c | 2 +- src/pokemon.c | 6 +- src/pokemon_summary_screen.c | 55 ++-- src/script_pokemon_util.c | 2 +- test/battle/gimmick/terastal.c | 1 + test/battle/move_effect/hidden_power.c | 106 +++++++ test/battle/move_effect/tera_blast.c | 51 +++ test/pokemon.c | 21 +- test/test_runner_battle.c | 42 +++ 22 files changed, 729 insertions(+), 458 deletions(-) create mode 100644 graphics/types/none.png create mode 100644 src/data/types_info.h create mode 100644 test/battle/move_effect/hidden_power.c diff --git a/graphics/types/none.png b/graphics/types/none.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ea01d556a3d6b1a638c078c3dc702e1013b9bf GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%AmxltF+`h%1mj`ah}qY*19QW3lCb zFUu)=m;7I|SK;0>!|EvlSxcrApWUL6l>}7QTwVPC|9^8=`D;K&o zHRe)O$(h6=HMycCA;*6STa|sTdynamicMoveType = ((NUMBER_OF_MON_TYPES - 4) * typeBits) / 63 + 1; + // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) + // The final + 2 skips past TYPE_NONE and Normal. + gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) gBattleStruct->dynamicMoveType++; gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_SET; diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 796cc4ba08..afe7f3a5ce 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -169,33 +169,9 @@ uq4_12_t GetTeraMultiplier(u32 battler, u32 type) } } -// Most values pulled from the Tera type icon palette. -const u16 sTeraTypeRGBValues[NUMBER_OF_MON_TYPES] = { - [TYPE_NORMAL] = RGB_WHITE, // custom - [TYPE_FIGHTING] = RGB(26, 8, 14), - [TYPE_FLYING] = RGB(31, 26, 7), - [TYPE_POISON] = RGB(26, 10, 25), // custom - [TYPE_GROUND] = RGB(25, 23, 18), - [TYPE_ROCK] = RGB(18, 16, 8), // custom - [TYPE_BUG] = RGB(18, 24, 6), - [TYPE_GHOST] = RGB(12, 10, 16), - [TYPE_STEEL] = RGB(19, 19, 20), - [TYPE_MYSTERY] = RGB_WHITE, - [TYPE_FIRE] = RGB(31, 20, 11), - [TYPE_WATER] = RGB(10, 18, 27), - [TYPE_GRASS] = RGB(12, 24, 11), - [TYPE_ELECTRIC] = RGB(30, 26, 7), - [TYPE_PSYCHIC] = RGB(31, 14, 15), - [TYPE_ICE] = RGB(14, 26, 25), - [TYPE_DRAGON] = RGB(10, 18, 27), - [TYPE_DARK] = RGB(6, 5, 8), - [TYPE_FAIRY] = RGB(31, 15, 21), - [TYPE_STELLAR] = RGB(10, 18, 27), -}; - u16 GetTeraTypeRGB(u32 type) { - return sTeraTypeRGBValues[type]; + return gTypesInfo[type].teraTypeRGBValue; } // TERASTAL TRIGGER: @@ -636,6 +612,7 @@ static const struct SpriteTemplate sSpriteTemplate_StellarIndicator = static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] = { + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE}, {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE}, @@ -661,6 +638,7 @@ static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + static const struct SpriteTemplate * const sTeraIndicatorSpriteTemplates[NUMBER_OF_MON_TYPES] = { + [TYPE_NONE] = &sSpriteTemplate_NormalIndicator, // just in case [TYPE_NORMAL] = &sSpriteTemplate_NormalIndicator, [TYPE_FIGHTING] = &sSpriteTemplate_FightingIndicator, [TYPE_FLYING] = &sSpriteTemplate_FlyingIndicator, diff --git a/src/battle_util.c b/src/battle_util.c index 477c0aa7dd..4bbb6c3c2e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -903,44 +903,6 @@ static const uq4_12_t sPercentToModifier[] = UQ_4_12(1.00), // 100 }; -#define X UQ_4_12 -#define ______ X(1.0) // Regular effectiveness. - -// Type matchup updates. Attacker Defender -#define STL_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_6 ? X(1.0) : X(0.5)) // Ghost/Dark -> Steel -#define PSN_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(2.0)) // Bug -> Poison -#define BUG_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(1.0) : X(2.0)) // Poison -> Bug -#define PSY_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(2.0) : X(0.0)) // Ghost -> Psychic -#define FIR_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(1.0)) // Ice -> Fire - -static const uq4_12_t sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = -{// Defender --> - // Attacker Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy Stellar - [TYPE_NORMAL] = {______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, - [TYPE_FIGHTING] = {X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5), ______}, - [TYPE_FLYING] = {______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, ______}, - [TYPE_POISON] = {______, ______, ______, X(0.5), X(0.5), X(0.5), BUG_RS, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0), ______}, - [TYPE_GROUND] = {______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______, ______}, - [TYPE_ROCK] = {______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______, ______}, - [TYPE_BUG] = {______, X(0.5), X(0.5), PSN_RS, ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5), ______}, - [TYPE_GHOST] = {X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, PSY_RS, ______, ______, X(0.5), ______, ______}, - [TYPE_STEEL] = {______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0), ______}, - [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, - [TYPE_FIRE] = {______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______, ______}, - [TYPE_WATER] = {______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, - [TYPE_GRASS] = {______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, - [TYPE_ELECTRIC] = {______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______, ______}, - [TYPE_PSYCHIC] = {______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______, ______}, - [TYPE_ICE] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, FIR_RS, X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______, ______}, - [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0), ______}, - [TYPE_DARK] = {______, X(0.5), ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5), ______}, - [TYPE_FAIRY] = {______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______}, - [TYPE_STELLAR] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, -}; - -#undef ______ -#undef X - // code u8 GetBattlerForBattleScript(u8 caseId) { @@ -10367,8 +10329,8 @@ static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier) uq4_12_t GetTypeModifier(u32 atkType, u32 defType) { if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) - return GetInverseTypeMultiplier(sTypeEffectivenessTable[atkType][defType]); - return sTypeEffectivenessTable[atkType][defType]; + return GetInverseTypeMultiplier(gTypeEffectivenessTable[atkType][defType]); + return gTypeEffectivenessTable[atkType][defType]; } s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp) @@ -10912,10 +10874,8 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMovesInfo[moveId].type < TYPE_MYSTERY) - return DAMAGE_CATEGORY_PHYSICAL; else - return DAMAGE_CATEGORY_SPECIAL; + return gTypesInfo[gMovesInfo[moveId].type].damageCategory; } static bool32 TryRemoveScreens(u32 battler) diff --git a/src/data/types_info.h b/src/data/types_info.h new file mode 100644 index 0000000000..f9bd233ca6 --- /dev/null +++ b/src/data/types_info.h @@ -0,0 +1,423 @@ +#include "constants/battle.h" +#include "constants/pokemon.h" + +#define X UQ_4_12 +#define ______ X(1.0) // Regular effectiveness. + +// Type matchup updates. Attacker Defender +#define STL_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_6 ? X(1.0) : X(0.5)) // Ghost/Dark -> Steel +#define PSN_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(2.0)) // Bug -> Poison +#define BUG_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(1.0) : X(2.0)) // Poison -> Bug +#define PSY_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(2.0) : X(0.0)) // Ghost -> Psychic +#define FIR_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(1.0)) // Ice -> Fire + +const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = +{// Defender --> + // Attacker None Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy Stellar + [TYPE_NONE] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_NORMAL] = {______, ______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_FIGHTING] = {______, X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5), ______}, + [TYPE_FLYING] = {______, ______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, ______}, + [TYPE_POISON] = {______, ______, ______, ______, X(0.5), X(0.5), X(0.5), BUG_RS, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0), ______}, + [TYPE_GROUND] = {______, ______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______, ______}, + [TYPE_ROCK] = {______, ______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______, ______}, + [TYPE_BUG] = {______, ______, X(0.5), X(0.5), PSN_RS, ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5), ______}, + [TYPE_GHOST] = {______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, PSY_RS, ______, ______, X(0.5), ______, ______}, + [TYPE_STEEL] = {______, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0), ______}, + [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_FIRE] = {______, ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______, ______}, + [TYPE_WATER] = {______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, + [TYPE_GRASS] = {______, ______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, + [TYPE_ELECTRIC] = {______, ______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______, ______}, + [TYPE_PSYCHIC] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______, ______}, + [TYPE_ICE] = {______, ______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, FIR_RS, X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______, ______}, + [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0), ______}, + [TYPE_DARK] = {______, ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5), ______}, + [TYPE_FAIRY] = {______, ______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______}, + [TYPE_STELLAR] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, +}; + +#undef ______ +#undef X + +#if B_EXPANDED_TYPE_NAMES == TRUE +#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) +#else +#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(_name) +#endif + +// .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. +// In this array there's commented-out data such as references to type-resist berries that would otherwise would go unused. +// However, we figured this information would be useful for users that want to add their own types as a reminder of +// what data would they need to add in order to have their new types be fully fledged like official types. +const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = +{ + [TYPE_NONE] = + { + .name = _("None"), + .generic = _("a move"), + .palette = 15, // Uses TYPE_MYSTERY's icon + .teraTypeRGBValue = RGB_WHITE, + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_NormalTMHM, + }, + [TYPE_NORMAL] = + { + .name = _("Normal"), + .generic = _("a NORMAL move"), + .palette = 13, + .zMove = MOVE_BREAKNECK_BLITZ, + .maxMove = MOVE_MAX_STRIKE, + .teraTypeRGBValue = RGB_WHITE, // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_NormalTMHM, + //.enhanceItem = ITEM_SILK_SCARF, + //.berry = ITEM_CHILAN_BERRY, + //.gem = ITEM_NORMAL_GEM, + //.zCrystal = ITEM_NORMALIUM_Z, + //.teraShard = ITEM_NORMAL_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_NORMAL, + }, + [TYPE_FIGHTING] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"), + .generic = _("a FIGHTING move"), + .palette = 13, + .zMove = MOVE_ALL_OUT_PUMMELING, + .maxMove = MOVE_MAX_KNUCKLE, + .teraTypeRGBValue = RGB(26, 8, 14), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_FightingTMHM, + //.enhanceItem = ITEM_BLACK_BELT, + //.berry = ITEM_CHOPLE_BERRY, + //.gem = ITEM_FIGHTING_GEM, + //.zCrystal = ITEM_FIGHTINIUM_Z, + //.plate = ITEM_FIST_PLATE, + //.memory = ITEM_FIGHTING_MEMORY, + //.teraShard = ITEM_FIGHTING_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FIGHTING, + }, + [TYPE_FLYING] = + { + .name = _("Flying"), + .generic = _("a FLYING move"), + .palette = 14, + .zMove = MOVE_SUPERSONIC_SKYSTRIKE, + .maxMove = MOVE_MAX_AIRSTREAM, + .teraTypeRGBValue = RGB(31, 26, 7), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_FlyingTMHM, + //.enhanceItem = ITEM_SHARP_BEAK, + //.berry = ITEM_COBA_BERRY, + //.gem = ITEM_FLYING_GEM, + //.zCrystal = ITEM_FLYINIUM_Z, + //.plate = ITEM_SKY_PLATE, + //.memory = ITEM_FLYING_MEMORY, + //.teraShard = ITEM_FLYING_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FLYING, + }, + [TYPE_POISON] = + { + .name = _("Poison"), + .generic = _("a POISON move"), + .palette = 14, + .zMove = MOVE_ACID_DOWNPOUR, + .maxMove = MOVE_MAX_OOZE, + .teraTypeRGBValue = RGB(26, 10, 25), // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_PoisonTMHM, + //.enhanceItem = ITEM_POISON_BARB, + //.berry = ITEM_KEBIA_BERRY, + //.gem = ITEM_POISON_GEM, + //.zCrystal = ITEM_POISONIUM_Z, + //.plate = ITEM_TOXIC_PLATE, + //.memory = ITEM_POISON_MEMORY, + //.teraShard = ITEM_POISON_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_POISON, + }, + [TYPE_GROUND] = + { + .name = _("Ground"), + .generic = _("a GROUND move"), + .palette = 13, + .zMove = MOVE_TECTONIC_RAGE, + .maxMove = MOVE_MAX_QUAKE, + .teraTypeRGBValue = RGB(25, 23, 18), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_GroundTMHM, + //.enhanceItem = ITEM_SOFT_SAND, + //.berry = ITEM_SHUCA_BERRY, + //.gem = ITEM_GROUND_GEM, + //.zCrystal = ITEM_GROUNDIUM_Z, + //.plate = ITEM_EARTH_PLATE, + //.memory = ITEM_GROUND_MEMORY, + //.teraShard = ITEM_GROUND_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GROUND, + }, + [TYPE_ROCK] = + { + .name = _("Rock"), + .generic = _("a ROCK move"), + .palette = 13, + .zMove = MOVE_CONTINENTAL_CRUSH, + .maxMove = MOVE_MAX_ROCKFALL, + .teraTypeRGBValue = RGB(18, 16, 8), // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_RockTMHM, + //.enhanceItem = ITEM_HARD_STONE, + //.berry = ITEM_CHARTI_BERRY, + //.gem = ITEM_ROCK_GEM, + //.zCrystal = ITEM_ROCKIUM_Z, + //.plate = ITEM_STONE_PLATE, + //.memory = ITEM_ROCK_MEMORY, + //.teraShard = ITEM_ROCK_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ROCK, + }, + [TYPE_BUG] = + { + .name = _("Bug"), + .generic = _("a BUG move"), + .palette = 15, + .zMove = MOVE_SAVAGE_SPIN_OUT, + .maxMove = MOVE_MAX_FLUTTERBY, + .teraTypeRGBValue = RGB(18, 24, 6), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_BugTMHM, + //.enhanceItem = ITEM_SILVER_POWDER, + //.berry = ITEM_TANGA_BERRY, + //.gem = ITEM_BUG_GEM, + //.zCrystal = ITEM_BUGINIUM_Z, + //.plate = ITEM_INSECT_PLATE, + //.memory = ITEM_BUG_MEMORY, + //.teraShard = ITEM_BUG_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_BUG, + }, + [TYPE_GHOST] = + { + .name = _("Ghost"), + .generic = _("a GHOST move"), + .palette = 14, + .zMove = MOVE_NEVER_ENDING_NIGHTMARE, + .maxMove = MOVE_MAX_PHANTASM, + .teraTypeRGBValue = RGB(12, 10, 16), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_GhostTMHM, + //.enhanceItem = ITEM_SPELL_TAG, + //.berry = ITEM_KASIB_BERRY, + //.gem = ITEM_GHOST_GEM, + //.zCrystal = ITEM_GHOSTIUM_Z, + //.plate = ITEM_SPOOKY_PLATE, + //.memory = ITEM_GHOST_MEMORY, + //.teraShard = ITEM_GHOST_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GHOST, + }, + [TYPE_STEEL] = + { + .name = _("Steel"), + .generic = _("a STEEL move"), + .palette = 13, + .zMove = MOVE_CORKSCREW_CRASH, + .maxMove = MOVE_MAX_STEELSPIKE, + .teraTypeRGBValue = RGB(19, 19, 20), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_SteelTMHM, + //.enhanceItem = ITEM_METAL_COAT, + //.berry = ITEM_BABIRI_BERRY, + //.gem = ITEM_STEEL_GEM, + //.zCrystal = ITEM_STEELIUM_Z, + //.plate = ITEM_IRON_PLATE, + //.memory = ITEM_STEEL_MEMORY, + //.teraShard = ITEM_STEEL_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_STEEL, + }, + [TYPE_MYSTERY] = + { + .name = _("???"), + .generic = _("a ??? move"), + .palette = 15, + .teraTypeRGBValue = RGB_WHITE, + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + }, + [TYPE_FIRE] = + { + .name = _("Fire"), + .generic = _("a FIRE move"), + .palette = 13, + .zMove = MOVE_INFERNO_OVERDRIVE, + .maxMove = MOVE_MAX_FLARE, + .teraTypeRGBValue = RGB(31, 20, 11), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_FireTMHM, + //.enhanceItem = ITEM_CHARCOAL, + //.berry = ITEM_OCCA_BERRY, + //.gem = ITEM_FIRE_GEM, + //.zCrystal = ITEM_FIRIUM_Z, + //.plate = ITEM_FLAME_PLATE, + //.memory = ITEM_FIRE_MEMORY, + //.teraShard = ITEM_FIRE_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FIRE, + }, + [TYPE_WATER] = + { + .name = _("Water"), + .generic = _("a WATER move"), + .palette = 14, + .zMove = MOVE_HYDRO_VORTEX, + .maxMove = MOVE_MAX_GEYSER, + .teraTypeRGBValue = RGB(10, 18, 27), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_WaterTMHM, + //.enhanceItem = ITEM_MYSTIC_WATER, + //.berry = ITEM_PASSHO_BERRY, + //.gem = ITEM_WATER_GEM, + //.zCrystal = ITEM_WATERIUM_Z, + //.plate = ITEM_SPLASH_PLATE, + //.memory = ITEM_WATER_MEMORY, + //.teraShard = ITEM_WATER_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_WATER, + }, + [TYPE_GRASS] = + { + .name = _("Grass"), + .generic = _("a GRASS move"), + .palette = 15, + .zMove = MOVE_BLOOM_DOOM, + .maxMove = MOVE_MAX_OVERGROWTH, + .teraTypeRGBValue = RGB(12, 24, 11), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_GrassTMHM, + //.enhanceItem = ITEM_MIRACLE_SEED, + //.berry = ITEM_RINDO_BERRY, + //.gem = ITEM_GRASS_GEM, + //.zCrystal = ITEM_GRASSIUM_Z, + //.plate = ITEM_MEADOW_PLATE, + //.memory = ITEM_GRASS_MEMORY, + //.teraShard = ITEM_GRASS_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GRASS, + }, + [TYPE_ELECTRIC] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"), + .generic = _("an ELECTRIC move"), + .palette = 13, + .zMove = MOVE_GIGAVOLT_HAVOC, + .maxMove = MOVE_MAX_LIGHTNING, + .teraTypeRGBValue = RGB(30, 26, 7), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_ElectricTMHM, + //.enhanceItem = ITEM_MAGNET, + //.berry = ITEM_WACAN_BERRY, + //.gem = ITEM_ELECTRIC_GEM, + //.zCrystal = ITEM_ELECTRIUM_Z, + //.plate = ITEM_ZAP_PLATE, + //.memory = ITEM_ELECTRIC_MEMORY, + //.teraShard = ITEM_ELECTRIC_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ELECTRIC, + }, + [TYPE_PSYCHIC] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"), + .generic = _("a PSYCHIC move"), + .palette = 14, + .zMove = MOVE_SHATTERED_PSYCHE, + .maxMove = MOVE_MAX_MINDSTORM, + .teraTypeRGBValue = RGB(31, 14, 15), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_PsychicTMHM, + //.enhanceItem = ITEM_TWISTED_SPOON, + //.berry = ITEM_PAYAPA_BERRY, + //.gem = ITEM_PSYCHIC_GEM, + //.zCrystal = ITEM_PSYCHIUM_Z, + //.plate = ITEM_MIND_PLATE, + //.memory = ITEM_PSYCHIC_MEMORY, + //.teraShard = ITEM_PSYCHIC_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_PSYCHIC, + }, + [TYPE_ICE] = + { + .name = _("Ice"), + .generic = _("an ICE move"), + .palette = 14, + .zMove = MOVE_SUBZERO_SLAMMER, + .maxMove = MOVE_MAX_HAILSTORM, + .teraTypeRGBValue = RGB(14, 26, 25), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_IceTMHM, + //.enhanceItem = ITEM_NEVER_MELT_ICE, + //.berry = ITEM_YACHE_BERRY, + //.gem = ITEM_ICE_GEM, + //.zCrystal = ITEM_ICIUM_Z, + //.plate = ITEM_ICICLE_PLATE, + //.memory = ITEM_ICE_MEMORY, + //.teraShard = ITEM_ICE_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ICE, + }, + [TYPE_DRAGON] = + { + .name = _("Dragon"), + .generic = _("a DRAGON move"), + .palette = 15, + .zMove = MOVE_DEVASTATING_DRAKE, + .maxMove = MOVE_MAX_WYRMWIND, + .teraTypeRGBValue = RGB(10, 18, 27), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_DragonTMHM, + //.enhanceItem = ITEM_DRAGON_FANG, + //.berry = ITEM_HABAN_BERRY, + //.gem = ITEM_DRAGON_GEM, + //.zCrystal = ITEM_DRAGONIUM_Z, + //.plate = ITEM_DRACO_PLATE, + //.memory = ITEM_DRAGON_MEMORY, + //.teraShard = ITEM_DRAGON_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_DRAGON, + }, + [TYPE_DARK] = + { + .name = _("Dark"), + .generic = _("a DARK move"), + .palette = 13, + .zMove = MOVE_BLACK_HOLE_ECLIPSE, + .maxMove = MOVE_MAX_DARKNESS, + .teraTypeRGBValue = RGB(6, 5, 8), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_DarkTMHM, + //.enhanceItem = ITEM_BLACK_GLASSES, + //.berry = ITEM_COLBUR_BERRY, + //.gem = ITEM_DARK_GEM, + //.zCrystal = ITEM_DARKINIUM_Z, + //.plate = ITEM_DREAD_PLATE, + //.memory = ITEM_DARK_MEMORY, + //.teraShard = ITEM_DARK_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_DARK, + }, + [TYPE_FAIRY] = + { + .name = _("Fairy"), + .generic = _("a FAIRY move"), + .palette = 14, + .zMove = MOVE_TWINKLE_TACKLE, + .maxMove = MOVE_MAX_STARFALL, + .teraTypeRGBValue = RGB(31, 15, 21), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_FairyTMHM, + //.enhanceItem = ITEM_FAIRY_FEATHER, + //.berry = ITEM_ROSELI_BERRY, + //.gem = ITEM_FAIRY_GEM, + //.zCrystal = ITEM_FAIRIUM_Z, + //.plate = ITEM_PIXIE_PLATE, + //.memory = ITEM_FAIRY_MEMORY, + //.teraShard = ITEM_FAIRY_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FAIRY, + }, + [TYPE_STELLAR] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"), + .generic = _("a STELLAR move"), + .palette = 15, + .zMove = MOVE_BREAKNECK_BLITZ, + .maxMove = MOVE_MAX_STRIKE, + .teraTypeRGBValue = RGB(10, 18, 27), + .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe + // .teraShard = ITEM_STELLAR_TERA_SHARD, + }, +}; diff --git a/src/menu.c b/src/menu.c index a6bd9ae2bc..1952ec5ed4 100644 --- a/src/menu.c +++ b/src/menu.c @@ -112,6 +112,7 @@ static const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_C static const struct MenuInfoIcon sMenuInfoIcons[] = { // { width, height, offset } { 12, 12, 0x00 }, // Unused + [TYPE_NONE + 1] = { 32, 12, 0xA4 }, // Copy of TYPE_MYSTERY's [TYPE_NORMAL + 1] = { 32, 12, 0x20 }, [TYPE_FIGHTING + 1] = { 32, 12, 0x64 }, [TYPE_FLYING + 1] = { 32, 12, 0x60 }, diff --git a/src/pokedex.c b/src/pokedex.c index 6153e72213..8b70529a93 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1389,7 +1389,7 @@ static const struct SearchOptionText sDexSearchColorOptions[] = static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES] = // + 2 for "None" and terminator, - 2 for Mystery and Stellar { - {gText_DexEmptyString, gText_DexSearchTypeNone}, + {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name}, {gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name}, diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index e667e44bd6..22cbd5ba14 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -1901,7 +1901,7 @@ static const struct SearchOptionText sDexSearchColorOptions[] = static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES] = // + 2 for "None" and terminator, - 2 for Mystery and Stellar { - {gText_DexEmptyString, gText_DexSearchTypeNone}, + {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name}, {gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name}, diff --git a/src/pokemon.c b/src/pokemon.c index 7952452cb3..d52b6627eb 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2771,14 +2771,14 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) break; case MON_DATA_TERA_TYPE: { - if (substruct0->teraType == 0) + if (substruct0->teraType == TYPE_NONE) { const u8 *types = gSpeciesInfo[substruct0->species].types; retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1]; } else { - retVal = substruct0->teraType - 1; + retVal = substruct0->teraType; } break; } @@ -3207,7 +3207,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) { u32 teraType; SET8(teraType); - substruct0->teraType = 1 + teraType; + substruct0->teraType = teraType; break; } case MON_DATA_EVOLUTION_TRACKER: diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index d4f080096b..70b82a3edc 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -812,6 +812,10 @@ static const struct OamData sOamData_MoveTypes = .paletteNum = 0, .affineParam = 0, }; +static const union AnimCmd sSpriteAnim_TypeNone[] = { + ANIMCMD_FRAME(TYPE_NONE * 8, 0, FALSE, FALSE), + ANIMCMD_END +}; static const union AnimCmd sSpriteAnim_TypeNormal[] = { ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE), ANIMCMD_END @@ -913,31 +917,32 @@ static const union AnimCmd sSpriteAnim_CategoryTough[] = { ANIMCMD_END }; static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = { - sSpriteAnim_TypeNormal, - sSpriteAnim_TypeFighting, - sSpriteAnim_TypeFlying, - sSpriteAnim_TypePoison, - sSpriteAnim_TypeGround, - sSpriteAnim_TypeRock, - sSpriteAnim_TypeBug, - sSpriteAnim_TypeGhost, - sSpriteAnim_TypeSteel, - sSpriteAnim_TypeMystery, - sSpriteAnim_TypeFire, - sSpriteAnim_TypeWater, - sSpriteAnim_TypeGrass, - sSpriteAnim_TypeElectric, - sSpriteAnim_TypePsychic, - sSpriteAnim_TypeIce, - sSpriteAnim_TypeDragon, - sSpriteAnim_TypeDark, - sSpriteAnim_TypeFairy, - sSpriteAnim_TypeStellar, - sSpriteAnim_CategoryCool, - sSpriteAnim_CategoryBeauty, - sSpriteAnim_CategoryCute, - sSpriteAnim_CategorySmart, - sSpriteAnim_CategoryTough, + [TYPE_NONE] = sSpriteAnim_TypeNone, + [TYPE_NORMAL] = sSpriteAnim_TypeNormal, + [TYPE_FIGHTING] = sSpriteAnim_TypeFighting, + [TYPE_FLYING] = sSpriteAnim_TypeFlying, + [TYPE_POISON] = sSpriteAnim_TypePoison, + [TYPE_GROUND] = sSpriteAnim_TypeGround, + [TYPE_ROCK] = sSpriteAnim_TypeRock, + [TYPE_BUG] = sSpriteAnim_TypeBug, + [TYPE_GHOST] = sSpriteAnim_TypeGhost, + [TYPE_STEEL] = sSpriteAnim_TypeSteel, + [TYPE_MYSTERY] = sSpriteAnim_TypeMystery, + [TYPE_FIRE] = sSpriteAnim_TypeFire, + [TYPE_WATER] = sSpriteAnim_TypeWater, + [TYPE_GRASS] = sSpriteAnim_TypeGrass, + [TYPE_ELECTRIC] = sSpriteAnim_TypeElectric, + [TYPE_PSYCHIC] = sSpriteAnim_TypePsychic, + [TYPE_ICE] = sSpriteAnim_TypeIce, + [TYPE_DRAGON] = sSpriteAnim_TypeDragon, + [TYPE_DARK] = sSpriteAnim_TypeDark, + [TYPE_FAIRY] = sSpriteAnim_TypeFairy, + [TYPE_STELLAR] = sSpriteAnim_TypeStellar, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = sSpriteAnim_CategoryCool, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = sSpriteAnim_CategoryBeauty, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = sSpriteAnim_CategoryCute, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = sSpriteAnim_CategorySmart, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = sSpriteAnim_CategoryTough, }; const struct CompressedSpriteSheet gSpriteSheet_MoveTypes = diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index f7dacbbfb7..0946ec1d15 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -352,7 +352,7 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu // tera type if (teraType >= NUMBER_OF_MON_TYPES) - teraType = gSpeciesInfo[species].types[0]; + teraType = TYPE_NONE; SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType); // EV and IV diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 18eab992af..c40b6823e7 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -765,6 +765,7 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type's one-time boost factors in dynamically- SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly") { u32 type; + PARAMETRIZE { type = TYPE_NONE; } PARAMETRIZE { type = TYPE_NORMAL; } PARAMETRIZE { type = TYPE_FIGHTING; } PARAMETRIZE { type = TYPE_FLYING; } diff --git a/test/battle/move_effect/hidden_power.c b/test/battle/move_effect/hidden_power.c new file mode 100644 index 0000000000..8ec63c21a7 --- /dev/null +++ b/test/battle/move_effect/hidden_power.c @@ -0,0 +1,106 @@ +#include "global.h" +#include "test/battle.h" + +// IV combinations sourced from https://www.smogon.com/forums/threads/hidden-power-iv-combinations.78083/ +SINGLE_BATTLE_TEST("Hidden Power's type is determined by IVs") +{ + u32 type, j, foeType, foeSpecies; + u32 hp, atk, def, spAtk, spDef, speed; + bool32 hidden; + + PARAMETRIZE { type = TYPE_NONE; hidden = FALSE; } + PARAMETRIZE { type = TYPE_NORMAL; hidden = FALSE; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_MYSTERY; hidden = FALSE; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 3; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 23; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; } + + // Any type after Dark shouldn't be part of Hidden Power officially. + for (j = TYPE_DARK + 1; j < NUMBER_OF_MON_TYPES; j++) { + PARAMETRIZE { type = j; hidden = FALSE; } + } + + GIVEN { + if (hidden) { + ASSUME(gTypeEffectivenessTable[type][foeType] == UQ_4_12(0.5)); // Foe's Type resists + ASSUME(gSpeciesInfo[foeSpecies].types[0] == gSpeciesInfo[foeSpecies].types[1]); // Foe's pure type + ASSUME(gSpeciesInfo[foeSpecies].types[0] == foeType); // Foe is the resisted type + PLAYER(SPECIES_DUNSPARCE) { HPIV(hp); AttackIV(atk); DefenseIV(def); SpAttackIV(spAtk); SpDefenseIV(spDef); SpeedIV(speed); } + } else { + PLAYER(SPECIES_DUNSPARCE); + } + OPPONENT(foeSpecies); + } WHEN { + TURN { MOVE(player, MOVE_HIDDEN_POWER); } + } SCENE { + // Only test valid Hidden Power types + if (hidden) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HIDDEN_POWER, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } +} + +TO_DO_BATTLE_TEST("Hidden Power's power is determined by IVs before Gen6"); diff --git a/test/battle/move_effect/tera_blast.c b/test/battle/move_effect/tera_blast.c index 4592cf32a5..ca1413d2e8 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -21,6 +21,57 @@ SINGLE_BATTLE_TEST("Tera Blast changes from Normal-type to the user's Tera Type" } } +SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") +{ + u32 species; + u32 type; + + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FLYING; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_POISON; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FIRE; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_BUG; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_ICE; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_GROUND; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_ROCK; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_WATER; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_NORMAL; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_GHOST; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_PSYCHIC; } + PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_GRASS; } + PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_ELECTRIC; } + PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_DRAGON; } + PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_FAIRY; } + PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_FIGHTING; } + PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_STEEL; } + PARAMETRIZE { species = SPECIES_ABRA; type = TYPE_DARK; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[1] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[1] == TYPE_POISON); + ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[1] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[0] == TYPE_DRAGON); + ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[1] == TYPE_DRAGON); + ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[0] == TYPE_DARK); + ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[1] == TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_ABRA].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_ABRA].types[1] == TYPE_PSYCHIC); + PLAYER(SPECIES_WOBBUFFET) { TeraType(type); } + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + } SCENE { + if (species == SPECIES_GASTLY && type == TYPE_NORMAL) + MESSAGE("It doesn't affect Foe Gastly…"); + else + MESSAGE("It's super effective!"); + } +} + SINGLE_BATTLE_TEST("Tera Blast becomes a physical move if the user is Terastallized and has a higher Attack stat", s16 damage) { bool32 tera; diff --git a/test/pokemon.c b/test/pokemon.c index 2e35896027..fa96b47f26 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -33,11 +33,11 @@ TEST("Terastallization type defaults to primary or secondary type") || teraType == gSpeciesInfo[SPECIES_PIDGEY].types[1]); } -TEST("Terastallization type can be set to any type") +TEST("Terastallization type can be set to any type except TYPE_NONE") { u32 i, teraType; struct Pokemon mon; - for (i = 0; i < NUMBER_OF_MON_TYPES; i++) + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) { PARAMETRIZE { teraType = i; } } @@ -46,6 +46,23 @@ TEST("Terastallization type can be set to any type") EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE)); } +TEST("Terastallization type is reset to the default types when setting Tera Type back to TYPE_NONE") +{ + u32 i, teraType, typeNone; + struct Pokemon mon; + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) + { + PARAMETRIZE { teraType = i; typeNone = TYPE_NONE; } + } + CreateMon(&mon, SPECIES_PIDGEY, 100, 0, FALSE, 0, OT_ID_PRESET, 0); + SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType); + EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE)); + SetMonData(&mon, MON_DATA_TERA_TYPE, &typeNone); + typeNone = GetMonData(&mon, MON_DATA_TERA_TYPE); + EXPECT(typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[0] + || typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[1]); +} + TEST("Shininess independent from PID and OTID") { u32 pid, otId, data; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 9a71c9a9a8..b2cc4725ce 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1717,6 +1717,48 @@ void Speed_(u32 sourceLine, u32 speed) DATA.explicitSpeeds[DATA.currentSide] |= 1 << DATA.currentPartyIndex; } +void HPIV_(u32 sourceLine, u32 hpIV) +{ + INVALID_IF(!DATA.currentMon, "HP IV outside of PLAYER/OPPONENT"); + INVALID_IF(hpIV > MAX_PER_STAT_IVS, "Illegal HP IV: %d", hpIV); + SetMonData(DATA.currentMon, MON_DATA_HP_IV, &hpIV); +} + +void AttackIV_(u32 sourceLine, u32 attackIV) +{ + INVALID_IF(!DATA.currentMon, "Attack IV outside of PLAYER/OPPONENT"); + INVALID_IF(attackIV > MAX_PER_STAT_IVS, "Illegal attack IV: %d", attackIV); + SetMonData(DATA.currentMon, MON_DATA_ATK_IV, &attackIV); +} + +void DefenseIV_(u32 sourceLine, u32 defenseIV) +{ + INVALID_IF(!DATA.currentMon, "Defense IV outside of PLAYER/OPPONENT"); + INVALID_IF(defenseIV > MAX_PER_STAT_IVS, "Illegal defense IV: %d", defenseIV); + SetMonData(DATA.currentMon, MON_DATA_DEF_IV, &defenseIV); +} + +void SpAttackIV_(u32 sourceLine, u32 spAttackIV) +{ + INVALID_IF(!DATA.currentMon, "SpAttack IV outside of PLAYER/OPPONENT"); + INVALID_IF(spAttackIV > MAX_PER_STAT_IVS, "Illegal special attack IV: %d", spAttackIV); + SetMonData(DATA.currentMon, MON_DATA_SPATK_IV, &spAttackIV); +} + +void SpDefenseIV_(u32 sourceLine, u32 spDefenseIV) +{ + INVALID_IF(!DATA.currentMon, "SpDefense IV outside of PLAYER/OPPONENT"); + INVALID_IF(spDefenseIV > MAX_PER_STAT_IVS, "Illegal special defense IV: %d", spDefenseIV); + SetMonData(DATA.currentMon, MON_DATA_SPDEF_IV, &spDefenseIV); +} + +void SpeedIV_(u32 sourceLine, u32 speedIV) +{ + INVALID_IF(!DATA.currentMon, "Speed IV outside of PLAYER/OPPONENT"); + INVALID_IF(speedIV > MAX_PER_STAT_IVS, "Illegal speed IV: %d", speedIV); + SetMonData(DATA.currentMon, MON_DATA_SPEED_IV, &speedIV); +} + void Item_(u32 sourceLine, u32 item) { INVALID_IF(!DATA.currentMon, "Item outside of PLAYER/OPPONENT"); From 0a8284ce9fa11da5dc729c4784d46da79269f181 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 1 Jun 2024 09:07:51 -0400 Subject: [PATCH 27/31] Added missing Move Effect TODO tests - Volume B (#4682) * Added missing Move Effect TODO tests - Volume B * Apply suggestions from code review Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Removed unused bulldoze effect file * Removed individual tests for Baton Pass + Status1 in favor of the existing single test --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_ai_main.c | 1 + src/battle_ai_util.c | 4 +- test/battle/move_effect/aqua_ring.c | 2 +- test/battle/move_effect/baddy_bad.c | 6 + test/battle/move_effect/baton_pass.c | 54 +++++++++ test/battle/move_effect/beak_blast.c | 3 + test/battle/move_effect/beat_up.c | 31 +++++ test/battle/move_effect/belch.c | 6 + test/battle/move_effect/belly_drum.c | 5 + test/battle/move_effect/bestow.c | 10 ++ test/battle/move_effect/bide.c | 3 + test/battle/move_effect/blizzard.c | 4 + test/battle/move_effect/body_press.c | 12 ++ test/battle/move_effect/bolt_beak.c | 5 + test/battle/move_effect/brick_break.c | 21 ---- test/battle/move_effect/brine.c | 4 + test/battle/move_effect/bulk_up.c | 4 + test/battle/move_effect/earthquake.c | 28 +++++ test/battle/move_effect/embargo.c | 2 +- test/battle/move_effect/gastro_acid.c | 3 + test/battle/move_effect/leech_seed.c | 1 + test/battle/move_effect/pursuit.c | 2 + test/battle/move_effect/raging_bull.c | 160 ++++++++++++++++++++++++++ test/battle/move_effect/substitute.c | 2 + test/battle/move_effect/telekinesis.c | 4 + test/battle/terrain/grassy.c | 27 ----- test/dynamax.c | 4 + 27 files changed, 357 insertions(+), 51 deletions(-) create mode 100644 test/battle/move_effect/baddy_bad.c create mode 100644 test/battle/move_effect/baton_pass.c create mode 100644 test/battle/move_effect/beat_up.c create mode 100644 test/battle/move_effect/bestow.c create mode 100644 test/battle/move_effect/blizzard.c create mode 100644 test/battle/move_effect/body_press.c create mode 100644 test/battle/move_effect/bolt_beak.c create mode 100644 test/battle/move_effect/brine.c create mode 100644 test/battle/move_effect/bulk_up.c create mode 100644 test/battle/move_effect/earthquake.c create mode 100644 test/battle/move_effect/raging_bull.c diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 6d9a7cacde..71817646b1 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4042,6 +4042,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry } break; + case EFFECT_RAGING_BULL: case EFFECT_BRICK_BREAK: if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_REFLECT) ADJUST_SCORE(DECENT_EFFECT); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index afcd1121e6..489588c33a 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2976,7 +2976,9 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect) { u32 atkSide = GetBattlerSide(battlerAtk); - if (HasMoveEffect(battlerDef, EFFECT_BRICK_BREAK)) // Don't waste a turn if screens will be broken + // Don't waste a turn if screens will be broken + if (HasMoveEffect(battlerDef, EFFECT_BRICK_BREAK) + || HasMoveEffect(battlerDef, EFFECT_RAGING_BULL)) return FALSE; switch (moveEffect) diff --git a/test/battle/move_effect/aqua_ring.c b/test/battle/move_effect/aqua_ring.c index c31bfbd8df..158c839d79 100644 --- a/test/battle/move_effect/aqua_ring.c +++ b/test/battle/move_effect/aqua_ring.c @@ -3,4 +3,4 @@ TO_DO_BATTLE_TEST("Aqua Ring recovers 1/16th HP at end of turn"); TO_DO_BATTLE_TEST("Aqua Ring can be used under Heal Block but will not heal the user"); -TO_DO_BATTLE_TEST("Aqua Ring can be Baton Passed"); +TO_DO_BATTLE_TEST("Baton Pass passes Aqua Ring's effect"); diff --git a/test/battle/move_effect/baddy_bad.c b/test/battle/move_effect/baddy_bad.c new file mode 100644 index 0000000000..e2ee4a6d84 --- /dev/null +++ b/test/battle/move_effect/baddy_bad.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Baddy Bad sets up Reflect, reducing physical damage"); +TO_DO_BATTLE_TEST("Baddy Bad's Reflect lasts for 5 turns"); +TO_DO_BATTLE_TEST("Baddy Bad can still damage the target when Reflect is already set up"); diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c new file mode 100644 index 0000000000..6fad1c1605 --- /dev/null +++ b/test/battle/move_effect/baton_pass.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Baton Pass switches out the user"); +TO_DO_BATTLE_TEST("Baton Pass fails if there's no valid party Pokémon left"); +TO_DO_BATTLE_TEST("Baton Pass passes both positive and negative stat changes"); +TO_DO_BATTLE_TEST("AI doesn't choose Baton Pass if the Ace Pokémon is the last one available to switch in"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass non-volatile status conditions"); // Status1 +TO_DO_BATTLE_TEST("Baton Pass doesn't pass infatuation"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass type changes"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass ability changes"); + +// +// Move these to the corresponding effect files. +// +TO_DO_BATTLE_TEST("Baton Pass passes confusion status"); // test/battle/status2/confusion.c + +TO_DO_BATTLE_TEST("Baton Pass passes Cursed status"); // test/battle/move_effect/curse.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Disable's effect"); // test/battle/move_effect/disable.c +TO_DO_BATTLE_TEST("Baton Pass passes Dragon Cheer's effect"); // test/battle/move_effect/dragon_cheer.c +TO_DO_BATTLE_TEST("Baton Pass passes Fairy lock's escape prevention effect"); // test/battle/move_effect/fairy_lock.c +TO_DO_BATTLE_TEST("Baton Pass passes Focus Energy's effect"); // test/battle/move_effect/focus_energy.c +TO_DO_BATTLE_TEST("Baton Pass passes Heal Block's effect"); // test/battle/move_effect/heal_block.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Imprison's effect"); // test/battle/move_effect/imprison.c +TO_DO_BATTLE_TEST("Baton Pass passes Ingrain's effect"); // test/battle/move_effect/ingrain.c +TO_DO_BATTLE_TEST("Baton Pass passes Magnet Rise's effect"); // test/battle/move_effect/magnet_rise.c +TO_DO_BATTLE_TEST("Baton Pass passes escape prevention primary effect if it's used by the target"); // test/battle/move_effect/mean_look.c (Spider Web, Mean Look, Block) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass escape prevention primary effects if it's used by the user"); // test/battle/move_effect/mean_look.c (Spider Web, Mean Look, Block) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Mimic's learnt move"); // test/battle/move_effect/mimic.c +TO_DO_BATTLE_TEST("Baton Pass passes Minimize's evasion but not the weakness to stomping moves"); // test/battle/move_effect/minimize.c +TO_DO_BATTLE_TEST("Baton Pass passes No Retreat's escape prevention effect"); // test/battle/move_effect/no_retreat.c +TO_DO_BATTLE_TEST("Baton Pass passes Octolock's escape prevention effect"); // test/battle/move_effect/octolock.c +TO_DO_BATTLE_TEST("Baton Pass passes Perish Song's effect"); // test/battle/move_effect/perish_song.c +TO_DO_BATTLE_TEST("Baton Pass passes Power Trick's effect"); // test/battle/move_effect/power_trick.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Rollout's multiplier"); // test/battle/move_effect/rollout.c +TO_DO_BATTLE_TEST("Baton Pass passes Sappy Seed's effect"); // test/battle/move_effect/sappy_seed.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Transformations"); // test/battle/move_effect/transform.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Yawn's effect"); // test/battle/move_effect/yawn.c + +TO_DO_BATTLE_TEST("Baton Pass passes Core Enforcer's effect"); // test/battle/move_effect_secondary/core_enforcer.c +TO_DO_BATTLE_TEST("Baton Pass passes escape prevention secondary effect"); // test/battle/move_effect_secondary/prevent_escape.c (Thousand Waves, Spirit Shackle, Anchor Shot) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass escape prevention secondary effect if it's used by the user"); // test/battle/move_effect_secondary/prevent_escape.c (Thousand Waves, Spirit Shackle, Anchor Shot) + +// Unconfirmed by Bulbapedia, should be tested in-game: +// - Nightmare +// - Encore +// - Spotlight +// - Taunt +// - Throat Chop +// - Torment +// - Splinters +// - Power Boost +// - Power Drop +// - Guard Boost diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index eeb3d59bf0..d3c8d01919 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -111,3 +111,6 @@ SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") HP_BAR(opponent); } } + +TO_DO_BATTLE_TEST("Beak Blast's charging message is shown regardless if it would've missed"); +TO_DO_BATTLE_TEST("Bulletproof is immune to Beak Blast but not to the burn it causes"); diff --git a/test/battle/move_effect/beat_up.c b/test/battle/move_effect/beat_up.c new file mode 100644 index 0000000000..5e11360531 --- /dev/null +++ b/test/battle/move_effect/beat_up.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "test/battle.h" + +// General +TO_DO_BATTLE_TEST("Beat Up hits the target for each non-fainted, non-statused member in the party"); +TO_DO_BATTLE_TEST("Beat Up's strikes have each an independent chance of a critical hit"); + +// B_BEAT_UP Gen2-4 +TO_DO_BATTLE_TEST("Beat Up lists each party member's name"); +TO_DO_BATTLE_TEST("Beat Up's damage is typeless"); +TO_DO_BATTLE_TEST("Beat Up's damage doesn't consider STAB"); +TO_DO_BATTLE_TEST("Beat Up's last strike-only can trigger King's Rock"); +TO_DO_BATTLE_TEST("Beat Up's base power is the same for each strike"); +TO_DO_BATTLE_TEST("Beat Up's damage is determined by each striking Pokémon's base attack and level and the target's defense"); +TO_DO_BATTLE_TEST("Beat Up ignores stat stage changes"); //eg. Swords Dance +TO_DO_BATTLE_TEST("Beat Up ignores Huge Power"); +TO_DO_BATTLE_TEST("Beat Up ignores Choice Band"); + +// B_BEAT_UP Gen5+ +TO_DO_BATTLE_TEST("Beat Up doesn't list party member's name"); +TO_DO_BATTLE_TEST("Beat Up's damage is Dark-typed"); +TO_DO_BATTLE_TEST("Beat Up's damage receives STAB"); +TO_DO_BATTLE_TEST("Beat Up's can trigger King's Rock on all strikes"); +TO_DO_BATTLE_TEST("Beat Up's base power is determined by each striking Pokémon"); +TO_DO_BATTLE_TEST("Beat Up's damage is determined by the user's attack and the target's defense"); +TO_DO_BATTLE_TEST("Beat Up's damage considers stat stage changes"); //eg. Swords Dance +TO_DO_BATTLE_TEST("Beat Up's damage considers Huge Power"); +TO_DO_BATTLE_TEST("Beat Up's damage considers Choice Band"); + +// Unconfirmed by Bulbapedia +// - Technician interacion diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c index 34e026abe5..2a732e0e45 100644 --- a/test/battle/move_effect/belch.c +++ b/test/battle/move_effect/belch.c @@ -39,6 +39,7 @@ SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") else { TURN { MOVE(player, MOVE_STUFF_CHEEKS); } TURN { MOVE(player, MOVE_BELCH); } + TURN { MOVE(player, MOVE_BELCH); } } } SCENE { if (item == ITEM_NONE) { @@ -47,6 +48,11 @@ SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") else { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); } } } + +TO_DO_BATTLE_TEST("Belch can still be used after switching out"); +TO_DO_BATTLE_TEST("Belch can still be used after fainting"); +TO_DO_BATTLE_TEST("Belch can still be used after restoring the consumed berry"); diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index bbaa910d27..82abaf30c4 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -104,3 +104,8 @@ SINGLE_BATTLE_TEST("Belly Drum's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +TO_DO_BATTLE_TEST("Belly Drum maximizes the user's Attack stat, even when below 0"); +TO_DO_BATTLE_TEST("Belly Drum minimizes the user's Attack stat if it has Contrary"); // Should still say "maximized attack" +TO_DO_BATTLE_TEST("Belly Drum fails if the user's Attack is already at +6, even with Contrary"); +TO_DO_BATTLE_TEST("Belly Drum deducts HP if the user has contrary and is at -6"); diff --git a/test/battle/move_effect/bestow.c b/test/battle/move_effect/bestow.c new file mode 100644 index 0000000000..1161cdf8ae --- /dev/null +++ b/test/battle/move_effect/bestow.c @@ -0,0 +1,10 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bestow transfers its held item to the target"); +TO_DO_BATTLE_TEST("Bestow fails if the user has no held item"); +TO_DO_BATTLE_TEST("Bestow fails if the target already has a held item"); +TO_DO_BATTLE_TEST("Bestow fails if the target is behind a Substitute"); +TO_DO_BATTLE_TEST("Bestow fails if the user is holding Mail"); +TO_DO_BATTLE_TEST("Bestow fails if the user's held item changes its form"); +TO_DO_BATTLE_TEST("Bestow fails if the user's held item is a Z-Crystal"); diff --git a/test/battle/move_effect/bide.c b/test/battle/move_effect/bide.c index 39efe281ec..41a6e01416 100644 --- a/test/battle/move_effect/bide.c +++ b/test/battle/move_effect/bide.c @@ -32,3 +32,6 @@ SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") EXPECT_EQ(bideDamage, 2 * (damage1 + damage2)); } } + +TO_DO_BATTLE_TEST("Bide hits the last Pokémon that attacked the user, even allies"); +TO_DO_BATTLE_TEST("Bide has +1 priority if called via a different move"); // Gen 5 onwards diff --git a/test/battle/move_effect/blizzard.c b/test/battle/move_effect/blizzard.c new file mode 100644 index 0000000000..1e566f98fc --- /dev/null +++ b/test/battle/move_effect/blizzard.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Blizzard ignores accuracy check durin Hail and Snow"); diff --git a/test/battle/move_effect/body_press.c b/test/battle/move_effect/body_press.c new file mode 100644 index 0000000000..e1bf54f4e8 --- /dev/null +++ b/test/battle/move_effect/body_press.c @@ -0,0 +1,12 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Body Press's damage depends on the user's base Defense instead of its base Attack"); +TO_DO_BATTLE_TEST("Body Press's damage depends on the user's Defense stat stages"); + +// Could be split into multiple tests or maybe to separate files based on the modifier? +TO_DO_BATTLE_TEST("Body Press's damage is influenced by all other Attack modifiers that are not stat stages"); +TO_DO_BATTLE_TEST("Body Press's damage is NOT influenced by any other Defense besides stat stages"); + +// Unconfirmed by Bulbapedia: +// - Defeatist interaction diff --git a/test/battle/move_effect/bolt_beak.c b/test/battle/move_effect/bolt_beak.c new file mode 100644 index 0000000000..fdd95da700 --- /dev/null +++ b/test/battle/move_effect/bolt_beak.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled if it attacks before the target"); +TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled the target switches out"); diff --git a/test/battle/move_effect/brick_break.c b/test/battle/move_effect/brick_break.c index 4fbc65a4d5..513369b5a1 100644 --- a/test/battle/move_effect/brick_break.c +++ b/test/battle/move_effect/brick_break.c @@ -137,24 +137,3 @@ DOUBLE_BATTLE_TEST("Brick Break can remove Light Screen, Reflect and Aurora Veil HP_BAR(playerLeft); } } - -SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros Form") -{ - u16 speciesPlayer; - u16 speciesOpponent; - - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } - - GIVEN { - PLAYER(speciesPlayer); - OPPONENT(speciesOpponent); - } WHEN { - TURN { MOVE(player, MOVE_RAGING_BULL); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); - HP_BAR(opponent); - MESSAGE("It's not very effective…"); - } -} diff --git a/test/battle/move_effect/brine.c b/test/battle/move_effect/brine.c new file mode 100644 index 0000000000..9165257859 --- /dev/null +++ b/test/battle/move_effect/brine.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Brine's power doubles if the target is at 50% or below max HP"); diff --git a/test/battle/move_effect/bulk_up.c b/test/battle/move_effect/bulk_up.c new file mode 100644 index 0000000000..7f47d5d48e --- /dev/null +++ b/test/battle/move_effect/bulk_up.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bulk Up increases the user's Attack and Defense"); diff --git a/test/battle/move_effect/earthquake.c b/test/battle/move_effect/earthquake.c new file mode 100644 index 0000000000..93955e15b4 --- /dev/null +++ b/test/battle/move_effect/earthquake.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Earthquake's and Bulldoze's damage is halved when Grassy Terrain is in effect", s16 damage) +{ + bool32 terrain; + u16 move; + PARAMETRIZE { terrain = FALSE; move = MOVE_EARTHQUAKE; } // 0 + PARAMETRIZE { terrain = TRUE; move = MOVE_EARTHQUAKE; } // 1 + PARAMETRIZE { terrain = FALSE; move = MOVE_BULLDOZE; } // 2 + PARAMETRIZE { terrain = TRUE; move = MOVE_BULLDOZE; } // 3 + GIVEN { + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); + ASSUME(gMovesInfo[MOVE_BULLDOZE].effect == EFFECT_EARTHQUAKE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.5), results[3].damage); + } +} diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 8d9cc9c86d..628fc44119 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro } } -SINGLE_BATTLE_TEST("Embargo is passed via Baton Pass") +SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/gastro_acid.c b/test/battle/move_effect/gastro_acid.c index a9fba14f89..b76cef8dc6 100644 --- a/test/battle/move_effect/gastro_acid.c +++ b/test/battle/move_effect/gastro_acid.c @@ -39,3 +39,6 @@ SINGLE_BATTLE_TEST("Gastro Acid fails if target has a banned ability") MESSAGE("But it failed!"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Gastro Acid's effect"); +TO_DO_BATTLE_TEST("Baton Pass removes Gastro Acid if its ability cannot be surpressed"); diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index 6faf4e8031..1e71437f80 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -24,3 +24,4 @@ TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") TO_DO_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user") TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived. TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again") +TO_DO_BATTLE_TEST("Baton Pass passes Leech Seed's effect"); diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 4cc1662413..0b517d4228 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -24,3 +24,5 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac MESSAGE("Go! Wobbuffet!"); } } + +TO_DO_BATTLE_TEST("Baton Pass doesn't cause Pursuit to increase its power or priority"); diff --git a/test/battle/move_effect/raging_bull.c b/test/battle/move_effect/raging_bull.c new file mode 100644 index 0000000000..23b138ca41 --- /dev/null +++ b/test/battle/move_effect/raging_bull.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_RAGING_BULL].effect == EFFECT_RAGING_BULL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_LIGHT_SCREEN].effect == EFFECT_LIGHT_SCREEN); + ASSUME(gMovesInfo[MOVE_REFLECT].effect == EFFECT_REFLECT); + ASSUME(gMovesInfo[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); +} + +SINGLE_BATTLE_TEST("Raging Bull removes Light Screen, Reflect and Aurora Veil from the target's side of the field") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if the target is immune") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if the target Protected") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_RAGING_BULL); MOVE(opponent, MOVE_PROTECT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if it misses") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); } + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_RAGING_BULL, hit: FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Raging Bull can remove Light Screen, Reflect and Aurora Veil on users side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_SNOWSCAPE); + MOVE(playerLeft, move); + MOVE(playerRight, MOVE_RAGING_BULL, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, playerRight); + MESSAGE("The wall shattered!"); + HP_BAR(playerLeft); + } +} + +SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros Form") +{ + u16 speciesPlayer; + u16 speciesOpponent; + + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } + + GIVEN { + PLAYER(speciesPlayer); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} diff --git a/test/battle/move_effect/substitute.c b/test/battle/move_effect/substitute.c index a2e4c686ec..5a3c973ebb 100644 --- a/test/battle/move_effect/substitute.c +++ b/test/battle/move_effect/substitute.c @@ -68,3 +68,5 @@ SINGLE_BATTLE_TEST("Substitute's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Substitutes"); diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 6e8ef409f0..4210b1865b 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -68,3 +68,7 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") MESSAGE("It doesn't affect Foe Wynaut…"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Telekinesis' effect"); +//Bulbapedia doesn't confirm what happens with Diglett, Dugtrio, Sandygast and Palossand, so it needs to be tested in-game. +TO_DO_BATTLE_TEST("Baton Pass removes Telekinesis' effect disappears if the switching-in mon is Mega Gengar"); diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index af0776d3df..678352dc5e 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -57,33 +57,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 } } -// Magnitude is not tested because its damage is variable. -SINGLE_BATTLE_TEST("Grassy Terrain decreases power of Earthquake and Bulldoze by 50 percent", s16 damage) -{ - bool32 terrain; - u16 move; - PARAMETRIZE { terrain = FALSE; move = MOVE_EARTHQUAKE; } // 0 - PARAMETRIZE { terrain = TRUE; move = MOVE_EARTHQUAKE; } // 1 - PARAMETRIZE { terrain = FALSE; move = MOVE_BULLDOZE; } // 2 - PARAMETRIZE { terrain = TRUE; move = MOVE_BULLDOZE; } // 3 - GIVEN { - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); - ASSUME(gMovesInfo[MOVE_BULLDOZE].effect == EFFECT_EARTHQUAKE); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - if (terrain) - TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } - TURN { MOVE(player, move); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, move, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); - EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.5), results[3].damage); - } -} - SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") { GIVEN { diff --git a/test/dynamax.c b/test/dynamax.c index 03ff3c2ade..09b48be1e8 100644 --- a/test/dynamax.c +++ b/test/dynamax.c @@ -1158,6 +1158,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") } } +TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention effect"); + DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns") { GIVEN { @@ -1391,6 +1393,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance") } } +TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass doesn't pass G-Max Chi Strike's effect"); + DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's last move") { GIVEN { From 43e2a973fcbe5a279aadd5c269d4aa01df708382 Mon Sep 17 00:00:00 2001 From: Isaac Rivera <40581123+iriv24@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:00:17 -0400 Subject: [PATCH 28/31] add check for held item before using poltergeist and a check that it is the first turn for moves that are first turn only (#4693) --- src/battle_ai_util.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 489588c33a..4524e3b25b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -446,6 +446,14 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) && gMovesInfo[move].argument == ARG_TRY_REMOVE_TERRAIN_FAIL) return TRUE; break; + case EFFECT_POLTERGEIST: + if (AI_DATA->items[battlerDef] == ITEM_NONE) + return TRUE; + break; + case EFFECT_FIRST_TURN_ONLY: + if (!gDisableStructs[battlerAtk].isFirstTurn) + return TRUE; + break; } return FALSE; From 97143e020fc4a1101804644584c15734e4c1fd7d Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sun, 2 Jun 2024 08:18:13 +0200 Subject: [PATCH 29/31] Refactor move animations (#4683) * fix getboxmondata for evolutiontracker if compiled with agbcc * refactored move animation scripts as part of gMovesInfo * migration script for move anims * default animation, migration for battle_anim_scripts.s * added warning for missing animation * add include to migration * add struct member in migration script * removed include and struct member from migration script --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- data/battle_anim_scripts.s | 2190 +++++------------ include/battle_anim_scripts.h | 940 +++++++ include/pokemon.h | 2 + .../battle_anim_moves_refactor.py | 63 + src/battle_anim.c | 37 +- src/battle_main.c | 2 +- src/data/moves_info.h | 1928 +++++++++++---- src/pokemon.c | 10 + 8 files changed, 3084 insertions(+), 2088 deletions(-) create mode 100644 include/battle_anim_scripts.h create mode 100644 migration_scripts/battle_anim_moves_refactor.py diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 2bef0a0858..586698b2f2 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -18,956 +18,6 @@ gMovesWithQuietBGM:: .2byte MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE, 0xFFFF - .align 2 -gBattleAnims_Moves:: - .4byte Move_NONE - .4byte Move_POUND - .4byte Move_KARATE_CHOP - .4byte Move_DOUBLE_SLAP - .4byte Move_COMET_PUNCH - .4byte Move_MEGA_PUNCH - .4byte Move_PAY_DAY - .4byte Move_FIRE_PUNCH - .4byte Move_ICE_PUNCH - .4byte Move_THUNDER_PUNCH - .4byte Move_SCRATCH - .4byte Move_VICE_GRIP - .4byte Move_GUILLOTINE - .4byte Move_RAZOR_WIND - .4byte Move_SWORDS_DANCE - .4byte Move_CUT - .4byte Move_GUST - .4byte Move_WING_ATTACK - .4byte Move_WHIRLWIND - .4byte Move_FLY - .4byte Move_BIND - .4byte Move_SLAM - .4byte Move_VINE_WHIP - .4byte Move_STOMP - .4byte Move_DOUBLE_KICK - .4byte Move_MEGA_KICK - .4byte Move_JUMP_KICK - .4byte Move_ROLLING_KICK - .4byte Move_SAND_ATTACK - .4byte Move_HEADBUTT - .4byte Move_HORN_ATTACK - .4byte Move_FURY_ATTACK - .4byte Move_HORN_DRILL - .4byte Move_TACKLE - .4byte Move_BODY_SLAM - .4byte Move_WRAP - .4byte Move_TAKE_DOWN - .4byte Move_THRASH - .4byte Move_DOUBLE_EDGE - .4byte Move_TAIL_WHIP - .4byte Move_POISON_STING - .4byte Move_TWINEEDLE - .4byte Move_PIN_MISSILE - .4byte Move_LEER - .4byte Move_BITE - .4byte Move_GROWL - .4byte Move_ROAR - .4byte Move_SING - .4byte Move_SUPERSONIC - .4byte Move_SONIC_BOOM - .4byte Move_DISABLE - .4byte Move_ACID - .4byte Move_EMBER - .4byte Move_FLAMETHROWER - .4byte Move_MIST - .4byte Move_WATER_GUN - .4byte Move_HYDRO_PUMP - .4byte Move_SURF - .4byte Move_ICE_BEAM - .4byte Move_BLIZZARD - .4byte Move_PSYBEAM - .4byte Move_BUBBLE_BEAM - .4byte Move_AURORA_BEAM - .4byte Move_HYPER_BEAM - .4byte Move_PECK - .4byte Move_DRILL_PECK - .4byte Move_SUBMISSION - .4byte Move_LOW_KICK - .4byte Move_COUNTER - .4byte Move_SEISMIC_TOSS - .4byte Move_STRENGTH - .4byte Move_ABSORB - .4byte Move_MEGA_DRAIN - .4byte Move_LEECH_SEED - .4byte Move_GROWTH - .4byte Move_RAZOR_LEAF - .4byte Move_SOLAR_BEAM - .4byte Move_POISON_POWDER - .4byte Move_STUN_SPORE - .4byte Move_SLEEP_POWDER - .4byte Move_PETAL_DANCE - .4byte Move_STRING_SHOT - .4byte Move_DRAGON_RAGE - .4byte Move_FIRE_SPIN - .4byte Move_THUNDER_SHOCK - .4byte Move_THUNDERBOLT - .4byte Move_THUNDER_WAVE - .4byte Move_THUNDER - .4byte Move_ROCK_THROW - .4byte Move_EARTHQUAKE - .4byte Move_FISSURE - .4byte Move_DIG - .4byte Move_TOXIC - .4byte Move_CONFUSION - .4byte Move_PSYCHIC - .4byte Move_HYPNOSIS - .4byte Move_MEDITATE - .4byte Move_AGILITY - .4byte Move_QUICK_ATTACK - .4byte Move_RAGE - .4byte Move_TELEPORT - .4byte Move_NIGHT_SHADE - .4byte Move_MIMIC - .4byte Move_SCREECH - .4byte Move_DOUBLE_TEAM - .4byte Move_RECOVER - .4byte Move_HARDEN - .4byte Move_MINIMIZE - .4byte Move_SMOKESCREEN - .4byte Move_CONFUSE_RAY - .4byte Move_WITHDRAW - .4byte Move_DEFENSE_CURL - .4byte Move_BARRIER - .4byte Move_LIGHT_SCREEN - .4byte Move_HAZE - .4byte Move_REFLECT - .4byte Move_FOCUS_ENERGY - .4byte Move_BIDE - .4byte Move_METRONOME - .4byte Move_MIRROR_MOVE @ doesnt have an actual animation - .4byte Move_SELF_DESTRUCT - .4byte Move_EGG_BOMB - .4byte Move_LICK - .4byte Move_SMOG - .4byte Move_SLUDGE - .4byte Move_BONE_CLUB - .4byte Move_FIRE_BLAST - .4byte Move_WATERFALL - .4byte Move_CLAMP - .4byte Move_SWIFT - .4byte Move_SKULL_BASH - .4byte Move_SPIKE_CANNON - .4byte Move_CONSTRICT - .4byte Move_AMNESIA - .4byte Move_KINESIS - .4byte Move_SOFT_BOILED - .4byte Move_HIGH_JUMP_KICK - .4byte Move_GLARE - .4byte Move_DREAM_EATER - .4byte Move_POISON_GAS - .4byte Move_BARRAGE - .4byte Move_LEECH_LIFE - .4byte Move_LOVELY_KISS - .4byte Move_SKY_ATTACK - .4byte Move_TRANSFORM - .4byte Move_BUBBLE - .4byte Move_DIZZY_PUNCH - .4byte Move_SPORE - .4byte Move_FLASH - .4byte Move_PSYWAVE - .4byte Move_SPLASH - .4byte Move_ACID_ARMOR - .4byte Move_CRABHAMMER - .4byte Move_EXPLOSION - .4byte Move_FURY_SWIPES - .4byte Move_BONEMERANG - .4byte Move_REST - .4byte Move_ROCK_SLIDE - .4byte Move_HYPER_FANG - .4byte Move_SHARPEN - .4byte Move_CONVERSION - .4byte Move_TRI_ATTACK - .4byte Move_SUPER_FANG - .4byte Move_SLASH - .4byte Move_SUBSTITUTE - .4byte Move_STRUGGLE - .4byte Move_SKETCH - .4byte Move_TRIPLE_KICK - .4byte Move_THIEF - .4byte Move_SPIDER_WEB - .4byte Move_MIND_READER - .4byte Move_NIGHTMARE - .4byte Move_FLAME_WHEEL - .4byte Move_SNORE - .4byte Move_CURSE - .4byte Move_FLAIL - .4byte Move_CONVERSION_2 - .4byte Move_AEROBLAST - .4byte Move_COTTON_SPORE - .4byte Move_REVERSAL - .4byte Move_SPITE - .4byte Move_POWDER_SNOW - .4byte Move_PROTECT - .4byte Move_MACH_PUNCH - .4byte Move_SCARY_FACE - .4byte Move_FAINT_ATTACK - .4byte Move_SWEET_KISS - .4byte Move_BELLY_DRUM - .4byte Move_SLUDGE_BOMB - .4byte Move_MUD_SLAP - .4byte Move_OCTAZOOKA - .4byte Move_SPIKES - .4byte Move_ZAP_CANNON - .4byte Move_FORESIGHT - .4byte Move_DESTINY_BOND - .4byte Move_PERISH_SONG - .4byte Move_ICY_WIND - .4byte Move_DETECT - .4byte Move_BONE_RUSH - .4byte Move_LOCK_ON - .4byte Move_OUTRAGE - .4byte Move_SANDSTORM - .4byte Move_GIGA_DRAIN - .4byte Move_ENDURE - .4byte Move_CHARM - .4byte Move_ROLLOUT - .4byte Move_FALSE_SWIPE - .4byte Move_SWAGGER - .4byte Move_MILK_DRINK - .4byte Move_SPARK - .4byte Move_FURY_CUTTER - .4byte Move_STEEL_WING - .4byte Move_MEAN_LOOK - .4byte Move_ATTRACT - .4byte Move_SLEEP_TALK - .4byte Move_HEAL_BELL - .4byte Move_RETURN - .4byte Move_PRESENT - .4byte Move_FRUSTRATION - .4byte Move_SAFEGUARD - .4byte Move_PAIN_SPLIT - .4byte Move_SACRED_FIRE - .4byte Move_MAGNITUDE - .4byte Move_DYNAMIC_PUNCH - .4byte Move_MEGAHORN - .4byte Move_DRAGON_BREATH - .4byte Move_BATON_PASS - .4byte Move_ENCORE - .4byte Move_PURSUIT - .4byte Move_RAPID_SPIN - .4byte Move_SWEET_SCENT - .4byte Move_IRON_TAIL - .4byte Move_METAL_CLAW - .4byte Move_VITAL_THROW - .4byte Move_MORNING_SUN - .4byte Move_SYNTHESIS - .4byte Move_MOONLIGHT - .4byte Move_HIDDEN_POWER - .4byte Move_CROSS_CHOP - .4byte Move_TWISTER - .4byte Move_RAIN_DANCE - .4byte Move_SUNNY_DAY - .4byte Move_CRUNCH - .4byte Move_MIRROR_COAT - .4byte Move_PSYCH_UP - .4byte Move_EXTREME_SPEED - .4byte Move_ANCIENT_POWER - .4byte Move_SHADOW_BALL - .4byte Move_FUTURE_SIGHT - .4byte Move_ROCK_SMASH - .4byte Move_WHIRLPOOL - .4byte Move_BEAT_UP - .4byte Move_FAKE_OUT - .4byte Move_UPROAR - .4byte Move_STOCKPILE - .4byte Move_SPIT_UP - .4byte Move_SWALLOW - .4byte Move_HEAT_WAVE - .4byte Move_HAIL - .4byte Move_TORMENT - .4byte Move_FLATTER - .4byte Move_WILL_O_WISP - .4byte Move_MEMENTO - .4byte Move_FACADE - .4byte Move_FOCUS_PUNCH - .4byte Move_SMELLING_SALTS - .4byte Move_FOLLOW_ME - .4byte Move_NATURE_POWER - .4byte Move_CHARGE - .4byte Move_TAUNT - .4byte Move_HELPING_HAND - .4byte Move_TRICK - .4byte Move_ROLE_PLAY - .4byte Move_WISH - .4byte Move_ASSIST - .4byte Move_INGRAIN - .4byte Move_SUPERPOWER - .4byte Move_MAGIC_COAT - .4byte Move_RECYCLE - .4byte Move_REVENGE - .4byte Move_BRICK_BREAK - .4byte Move_YAWN - .4byte Move_KNOCK_OFF - .4byte Move_ENDEAVOR - .4byte Move_ERUPTION - .4byte Move_SKILL_SWAP - .4byte Move_IMPRISON - .4byte Move_REFRESH - .4byte Move_GRUDGE - .4byte Move_SNATCH - .4byte Move_SECRET_POWER - .4byte Move_DIVE - .4byte Move_ARM_THRUST - .4byte Move_CAMOUFLAGE - .4byte Move_TAIL_GLOW - .4byte Move_LUSTER_PURGE - .4byte Move_MIST_BALL - .4byte Move_FEATHER_DANCE - .4byte Move_TEETER_DANCE - .4byte Move_BLAZE_KICK - .4byte Move_MUD_SPORT - .4byte Move_ICE_BALL - .4byte Move_NEEDLE_ARM - .4byte Move_SLACK_OFF - .4byte Move_HYPER_VOICE - .4byte Move_POISON_FANG - .4byte Move_CRUSH_CLAW - .4byte Move_BLAST_BURN - .4byte Move_HYDRO_CANNON - .4byte Move_METEOR_MASH - .4byte Move_ASTONISH - .4byte Move_WEATHER_BALL - .4byte Move_AROMATHERAPY - .4byte Move_FAKE_TEARS - .4byte Move_AIR_CUTTER - .4byte Move_OVERHEAT - .4byte Move_ODOR_SLEUTH - .4byte Move_ROCK_TOMB - .4byte Move_SILVER_WIND - .4byte Move_METAL_SOUND - .4byte Move_GRASS_WHISTLE - .4byte Move_TICKLE - .4byte Move_COSMIC_POWER - .4byte Move_WATER_SPOUT - .4byte Move_SIGNAL_BEAM - .4byte Move_SHADOW_PUNCH - .4byte Move_EXTRASENSORY - .4byte Move_SKY_UPPERCUT - .4byte Move_SAND_TOMB - .4byte Move_SHEER_COLD - .4byte Move_MUDDY_WATER - .4byte Move_BULLET_SEED - .4byte Move_AERIAL_ACE - .4byte Move_ICICLE_SPEAR - .4byte Move_IRON_DEFENSE - .4byte Move_BLOCK - .4byte Move_HOWL - .4byte Move_DRAGON_CLAW - .4byte Move_FRENZY_PLANT - .4byte Move_BULK_UP - .4byte Move_BOUNCE - .4byte Move_MUD_SHOT - .4byte Move_POISON_TAIL - .4byte Move_COVET - .4byte Move_VOLT_TACKLE - .4byte Move_MAGICAL_LEAF - .4byte Move_WATER_SPORT - .4byte Move_CALM_MIND - .4byte Move_LEAF_BLADE - .4byte Move_DRAGON_DANCE - .4byte Move_ROCK_BLAST - .4byte Move_SHOCK_WAVE - .4byte Move_WATER_PULSE - .4byte Move_DOOM_DESIRE - .4byte Move_PSYCHO_BOOST -@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@ - .4byte Move_ROOST - .4byte Move_GRAVITY - .4byte Move_MIRACLE_EYE - .4byte Move_WAKE_UP_SLAP - .4byte Move_HAMMER_ARM - .4byte Move_GYRO_BALL - .4byte Move_HEALING_WISH - .4byte Move_BRINE - .4byte Move_NATURAL_GIFT - .4byte Move_FEINT - .4byte Move_PLUCK - .4byte Move_TAILWIND - .4byte Move_ACUPRESSURE - .4byte Move_METAL_BURST - .4byte Move_U_TURN - .4byte Move_CLOSE_COMBAT - .4byte Move_PAYBACK - .4byte Move_ASSURANCE - .4byte Move_EMBARGO - .4byte Move_FLING - .4byte Move_PSYCHO_SHIFT - .4byte Move_TRUMP_CARD - .4byte Move_HEAL_BLOCK - .4byte Move_WRING_OUT - .4byte Move_POWER_TRICK - .4byte Move_GASTRO_ACID - .4byte Move_LUCKY_CHANT - .4byte Move_ME_FIRST - .4byte Move_COPYCAT - .4byte Move_POWER_SWAP - .4byte Move_GUARD_SWAP - .4byte Move_PUNISHMENT - .4byte Move_LAST_RESORT - .4byte Move_WORRY_SEED - .4byte Move_SUCKER_PUNCH - .4byte Move_TOXIC_SPIKES - .4byte Move_HEART_SWAP - .4byte Move_AQUA_RING - .4byte Move_MAGNET_RISE - .4byte Move_FLARE_BLITZ - .4byte Move_FORCE_PALM - .4byte Move_AURA_SPHERE - .4byte Move_ROCK_POLISH - .4byte Move_POISON_JAB - .4byte Move_DARK_PULSE - .4byte Move_NIGHT_SLASH - .4byte Move_AQUA_TAIL - .4byte Move_SEED_BOMB - .4byte Move_AIR_SLASH - .4byte Move_XSCISSOR - .4byte Move_BUG_BUZZ - .4byte Move_DRAGON_PULSE - .4byte Move_DRAGON_RUSH - .4byte Move_POWER_GEM - .4byte Move_DRAIN_PUNCH - .4byte Move_VACUUM_WAVE - .4byte Move_FOCUS_BLAST - .4byte Move_ENERGY_BALL - .4byte Move_BRAVE_BIRD - .4byte Move_EARTH_POWER - .4byte Move_SWITCHEROO - .4byte Move_GIGA_IMPACT - .4byte Move_NASTY_PLOT - .4byte Move_BULLET_PUNCH - .4byte Move_AVALANCHE - .4byte Move_ICE_SHARD - .4byte Move_SHADOW_CLAW - .4byte Move_THUNDER_FANG - .4byte Move_ICE_FANG - .4byte Move_FIRE_FANG - .4byte Move_SHADOW_SNEAK - .4byte Move_MUD_BOMB - .4byte Move_PSYCHO_CUT - .4byte Move_ZEN_HEADBUTT - .4byte Move_MIRROR_SHOT - .4byte Move_FLASH_CANNON - .4byte Move_ROCK_CLIMB - .4byte Move_DEFOG - .4byte Move_TRICK_ROOM - .4byte Move_DRACO_METEOR - .4byte Move_DISCHARGE - .4byte Move_LAVA_PLUME - .4byte Move_LEAF_STORM - .4byte Move_POWER_WHIP - .4byte Move_ROCK_WRECKER - .4byte Move_CROSS_POISON - .4byte Move_GUNK_SHOT - .4byte Move_IRON_HEAD - .4byte Move_MAGNET_BOMB - .4byte Move_STONE_EDGE - .4byte Move_CAPTIVATE - .4byte Move_STEALTH_ROCK - .4byte Move_GRASS_KNOT - .4byte Move_CHATTER - .4byte Move_JUDGMENT - .4byte Move_BUG_BITE - .4byte Move_CHARGE_BEAM - .4byte Move_WOOD_HAMMER - .4byte Move_AQUA_JET - .4byte Move_ATTACK_ORDER - .4byte Move_DEFEND_ORDER - .4byte Move_HEAL_ORDER - .4byte Move_HEAD_SMASH - .4byte Move_DOUBLE_HIT - .4byte Move_ROAR_OF_TIME - .4byte Move_SPACIAL_REND - .4byte Move_LUNAR_DANCE - .4byte Move_CRUSH_GRIP - .4byte Move_MAGMA_STORM - .4byte Move_DARK_VOID - .4byte Move_SEED_FLARE - .4byte Move_OMINOUS_WIND - .4byte Move_SHADOW_FORCE -@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@ - .4byte Move_HONE_CLAWS - .4byte Move_WIDE_GUARD - .4byte Move_GUARD_SPLIT - .4byte Move_POWER_SPLIT - .4byte Move_WONDER_ROOM - .4byte Move_PSYSHOCK - .4byte Move_VENOSHOCK - .4byte Move_AUTOTOMIZE - .4byte Move_RAGE_POWDER - .4byte Move_TELEKINESIS - .4byte Move_MAGIC_ROOM - .4byte Move_SMACK_DOWN - .4byte Move_STORM_THROW - .4byte Move_FLAME_BURST - .4byte Move_SLUDGE_WAVE - .4byte Move_QUIVER_DANCE - .4byte Move_HEAVY_SLAM - .4byte Move_SYCHRONOISE - .4byte Move_ELECTRO_BALL - .4byte Move_SOAK - .4byte Move_FLAME_CHARGE - .4byte Move_COIL - .4byte Move_LOW_SWEEP - .4byte Move_ACID_SPRAY - .4byte Move_FOUL_PLAY - .4byte Move_SIMPLE_BEAM - .4byte Move_ENTRAINMENT - .4byte Move_AFTER_YOU - .4byte Move_ROUND - .4byte Move_ECHOED_VOICE - .4byte Move_CHIP_AWAY - .4byte Move_CLEAR_SMOG - .4byte Move_STORED_POWER - .4byte Move_QUICK_GUARD - .4byte Move_ALLY_SWITCH - .4byte Move_SCALD - .4byte Move_SHELL_SMASH - .4byte Move_HEAL_PULSE - .4byte Move_HEX - .4byte Move_SKY_DROP - .4byte Move_SHIFT_GEAR - .4byte Move_CIRCLE_THROW - .4byte Move_INCINERATE - .4byte Move_QUASH - .4byte Move_ACROBATICS - .4byte Move_REFLECT_TYPE - .4byte Move_RETALIATE - .4byte Move_FINAL_GAMBIT - .4byte Move_BESTOW - .4byte Move_INFERNO - .4byte Move_WATER_PLEDGE - .4byte Move_FIRE_PLEDGE - .4byte Move_GRASS_PLEDGE - .4byte Move_VOLT_SWITCH - .4byte Move_STRUGGLE_BUG - .4byte Move_BULLDOZE - .4byte Move_FROST_BREATH - .4byte Move_DRAGON_TAIL - .4byte Move_WORK_UP - .4byte Move_ELECTROWEB - .4byte Move_WILD_CHARGE - .4byte Move_DRILL_RUN - .4byte Move_DUAL_CHOP - .4byte Move_HEART_STAMP - .4byte Move_HORN_LEECH - .4byte Move_SACRED_SWORD - .4byte Move_RAZOR_SHELL - .4byte Move_HEAT_CRASH - .4byte Move_LEAF_TORNADO - .4byte Move_STEAMROLLER - .4byte Move_COTTON_GUARD - .4byte Move_NIGHT_DAZE - .4byte Move_PSYSTRIKE - .4byte Move_TAIL_SLAP - .4byte Move_HURRICANE - .4byte Move_HEAD_CHARGE - .4byte Move_GEAR_GRIND - .4byte Move_SEARING_SHOT - .4byte Move_TECHNO_BLAST - .4byte Move_RELIC_SONG - .4byte Move_SECRET_SWORD - .4byte Move_GLACIATE - .4byte Move_BOLT_STRIKE - .4byte Move_BLUE_FLARE - .4byte Move_FIERY_DANCE - .4byte Move_FREEZE_SHOCK - .4byte Move_ICE_BURN - .4byte Move_SNARL - .4byte Move_ICICLE_CRASH - .4byte Move_V_CREATE - .4byte Move_FUSION_FLARE - .4byte Move_FUSION_BOLT -@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@ - .4byte Move_FLYING_PRESS - .4byte Move_MAT_BLOCK - .4byte Move_BELCH - .4byte Move_ROTOTILLER - .4byte Move_STICKY_WEB - .4byte Move_FELL_STINGER - .4byte Move_PHANTOM_FORCE - .4byte Move_TRICK_OR_TREAT - .4byte Move_NOBLE_ROAR - .4byte Move_ION_DELUGE - .4byte Move_PARABOLIC_CHARGE - .4byte Move_FORESTS_CURSE - .4byte Move_PETAL_BLIZZARD - .4byte Move_FREEZE_DRY - .4byte Move_DISARMING_VOICE - .4byte Move_PARTING_SHOT - .4byte Move_TOPSY_TURVY - .4byte Move_DRAINING_KISS - .4byte Move_CRAFTY_SHIELD - .4byte Move_FLOWER_SHIELD - .4byte Move_GRASSY_TERRAIN - .4byte Move_MISTY_TERRAIN - .4byte Move_ELECTRIFY - .4byte Move_PLAY_ROUGH - .4byte Move_FAIRY_WIND - .4byte Move_MOONBLAST - .4byte Move_BOOMBURST - .4byte Move_FAIRY_LOCK - .4byte Move_KINGS_SHIELD - .4byte Move_PLAY_NICE - .4byte Move_CONFIDE - .4byte Move_DIAMOND_STORM - .4byte Move_STEAM_ERUPTION - .4byte Move_HYPERSPACE_HOLE - .4byte Move_WATER_SHURIKEN - .4byte Move_MYSTICAL_FIRE - .4byte Move_SPIKY_SHIELD - .4byte Move_AROMATIC_MIST - .4byte Move_EERIE_IMPULSE - .4byte Move_VENOM_DRENCH - .4byte Move_POWDER - .4byte Move_GEOMANCY - .4byte Move_MAGNETIC_FLUX - .4byte Move_HAPPY_HOUR - .4byte Move_ELECTRIC_TERRAIN - .4byte Move_DAZZLING_GLEAM - .4byte Move_CELEBRATE - .4byte Move_HOLD_HANDS - .4byte Move_BABY_DOLL_EYES - .4byte Move_NUZZLE - .4byte Move_HOLD_BACK - .4byte Move_INFESTATION - .4byte Move_POWER_UP_PUNCH - .4byte Move_OBLIVION_WING - .4byte Move_THOUSAND_ARROWS - .4byte Move_THOUSAND_WAVES - .4byte Move_LANDS_WRATH - .4byte Move_LIGHT_OF_RUIN - .4byte Move_ORIGIN_PULSE - .4byte Move_PRECIPICE_BLADES - .4byte Move_DRAGON_ASCENT - .4byte Move_HYPERSPACE_FURY -@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@ - .4byte Move_SHORE_UP - .4byte Move_FIRST_IMPRESSION - .4byte Move_BANEFUL_BUNKER - .4byte Move_SPIRIT_SHACKLE - .4byte Move_DARKEST_LARIAT - .4byte Move_SPARKLING_ARIA - .4byte Move_ICE_HAMMER - .4byte Move_FLORAL_HEALING - .4byte Move_HIGH_HORSEPOWER - .4byte Move_STRENGTH_SAP - .4byte Move_SOLAR_BLADE - .4byte Move_LEAFAGE - .4byte Move_SPOTLIGHT - .4byte Move_TOXIC_THREAD - .4byte Move_LASER_FOCUS - .4byte Move_GEAR_UP - .4byte Move_THROAT_CHOP - .4byte Move_POLLEN_PUFF - .4byte Move_ANCHOR_SHOT - .4byte Move_PSYCHIC_TERRAIN - .4byte Move_LUNGE - .4byte Move_FIRE_LASH - .4byte Move_POWER_TRIP - .4byte Move_BURN_UP - .4byte Move_SPEED_SWAP - .4byte Move_SMART_STRIKE - .4byte Move_PURIFY - .4byte Move_REVELATION_DANCE - .4byte Move_CORE_ENFORCER - .4byte Move_TROP_KICK - .4byte Move_INSTRUCT - .4byte Move_BEAK_BLAST - .4byte Move_CLANGING_SCALES - .4byte Move_DRAGON_HAMMER - .4byte Move_BRUTAL_SWING - .4byte Move_AURORA_VEIL - .4byte Move_SHELL_TRAP - .4byte Move_FLEUR_CANNON - .4byte Move_PSYCHIC_FANGS - .4byte Move_STOMPING_TANTRUM - .4byte Move_SHADOW_BONE - .4byte Move_ACCELEROCK - .4byte Move_LIQUIDATION - .4byte Move_PRISMATIC_LASER - .4byte Move_SPECTRAL_THIEF - .4byte Move_SUNSTEEL_STRIKE - .4byte Move_MOONGEIST_BEAM - .4byte Move_TEARFUL_LOOK - .4byte Move_ZING_ZAP - .4byte Move_NATURES_MADNESS - .4byte Move_MULTI_ATTACK - .4byte Move_MIND_BLOWN - .4byte Move_PLASMA_FISTS - .4byte Move_PHOTON_GEYSER - .4byte Move_ZIPPY_ZAP - .4byte Move_SPLISHY_SPLASH - .4byte Move_FLOATY_FALL - .4byte Move_PIKA_PAPOW - .4byte Move_BOUNCY_BUBBLE - .4byte Move_BUZZY_BUZZ - .4byte Move_SIZZLY_SLIDE - .4byte Move_GLITZY_GLOW - .4byte Move_BADDY_BAD - .4byte Move_SAPPY_SEED - .4byte Move_FREEZY_FROST - .4byte Move_SPARKLY_SWIRL - .4byte Move_VEEVEE_VOLLEY - .4byte Move_DOUBLE_IRON_BASH -@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@ - .4byte Move_DYNAMAX_CANNON - .4byte Move_SNIPE_SHOT - .4byte Move_JAW_LOCK - .4byte Move_STUFF_CHEEKS - .4byte Move_NO_RETREAT - .4byte Move_TAR_SHOT - .4byte Move_MAGIC_POWDER - .4byte Move_DRAGON_DARTS - .4byte Move_TEATIME - .4byte Move_OCTOLOCK - .4byte Move_BOLT_BEAK - .4byte Move_FISHIOUS_REND - .4byte Move_COURT_CHANGE - .4byte Move_CLANGOROUS_SOUL - .4byte Move_BODY_PRESS - .4byte Move_DECORATE - .4byte Move_DRUM_BEATING - .4byte Move_SNAP_TRAP - .4byte Move_PYRO_BALL - .4byte Move_BEHEMOTH_BLADE - .4byte Move_BEHEMOTH_BASH - .4byte Move_AURA_WHEEL - .4byte Move_BREAKING_SWIPE - .4byte Move_BRANCH_POKE - .4byte Move_OVERDRIVE - .4byte Move_APPLE_ACID - .4byte Move_GRAV_APPLE - .4byte Move_SPIRIT_BREAK - .4byte Move_STRANGE_STEAM - .4byte Move_LIFE_DEW - .4byte Move_OBSTRUCT - .4byte Move_FALSE_SURRENDER - .4byte Move_METEOR_ASSAULT - .4byte Move_ETERNA_BEAM - .4byte Move_STEEL_BEAM - .4byte Move_EXPANDING_FORCE - .4byte Move_STEEL_ROLLER - .4byte Move_SCALE_SHOT - .4byte Move_METEOR_BEAM - .4byte Move_SHELL_SIDE_ARM - .4byte Move_MISTY_EXPLOSION - .4byte Move_GRASSY_GLIDE - .4byte Move_RISING_VOLTAGE - .4byte Move_TERRAIN_PULSE - .4byte Move_SKITTER_SMACK - .4byte Move_BURNING_JEALOUSY - .4byte Move_LASH_OUT - .4byte Move_POLTERGEIST - .4byte Move_CORROSIVE_GAS - .4byte Move_COACHING - .4byte Move_FLIP_TURN - .4byte Move_TRIPLE_AXEL - .4byte Move_DUAL_WINGBEAT - .4byte Move_SCORCHING_SANDS - .4byte Move_JUNGLE_HEALING - .4byte Move_WICKED_BLOW - .4byte Move_SURGING_STRIKES - .4byte Move_THUNDER_CAGE - .4byte Move_DRAGON_ENERGY - .4byte Move_FREEZING_GLARE - .4byte Move_FIERY_WRATH - .4byte Move_THUNDEROUS_KICK - .4byte Move_GLACIAL_LANCE - .4byte Move_ASTRAL_BARRAGE - .4byte Move_EERIE_SPELL -@@@@ LA MOVES - .4byte Move_DIRE_CLAW - .4byte Move_PSYSHIELD_BASH - .4byte Move_POWER_SHIFT - .4byte Move_STONE_AXE - .4byte Move_SPRINGTIDE_STORM - .4byte Move_MYSTICAL_POWER - .4byte Move_RAGING_FURY - .4byte Move_WAVE_CRASH - .4byte Move_CHLOROBLAST - .4byte Move_MOUNTAIN_GALE - .4byte Move_VICTORY_DANCE - .4byte Move_HEADLONG_RUSH - .4byte Move_BARB_BARRAGE - .4byte Move_ESPER_WING - .4byte Move_BITTER_MALICE - .4byte Move_SHELTER - .4byte Move_TRIPLE_ARROWS - .4byte Move_INFERNAL_PARADE - .4byte Move_CEASELESS_EDGE - .4byte Move_BLEAKWIND_STORM - .4byte Move_WILDBOLT_STORM - .4byte Move_SANDSEAR_STORM - .4byte Move_LUNAR_BLESSING - .4byte Move_TAKE_HEART -@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@ - .4byte Move_TERA_BLAST - .4byte Move_SILK_TRAP - .4byte Move_AXE_KICK - .4byte Move_LAST_RESPECTS - .4byte Move_LUMINA_CRASH - .4byte Move_ORDER_UP - .4byte Move_JET_PUNCH - .4byte Move_SPICY_EXTRACT - .4byte Move_SPIN_OUT - .4byte Move_POPULATION_BOMB - .4byte Move_ICE_SPINNER - .4byte Move_GLAIVE_RUSH - .4byte Move_REVIVAL_BLESSING - .4byte Move_SALT_CURE - .4byte Move_TRIPLE_DIVE - .4byte Move_MORTAL_SPIN - .4byte Move_DOODLE - .4byte Move_FILLET_AWAY - .4byte Move_KOWTOW_CLEAVE - .4byte Move_FLOWER_TRICK - .4byte Move_TORCH_SONG - .4byte Move_AQUA_STEP - .4byte Move_RAGING_BULL - .4byte Move_MAKE_IT_RAIN - .4byte Move_RUINATION - .4byte Move_COLLISION_COURSE - .4byte Move_ELECTRO_DRIFT - .4byte Move_SHED_TAIL - .4byte Move_CHILLY_RECEPTION - .4byte Move_TIDY_UP - .4byte Move_SNOWSCAPE - .4byte Move_POUNCE - .4byte Move_TRAILBLAZE - .4byte Move_CHILLING_WATER - .4byte Move_HYPER_DRILL - .4byte Move_TWIN_BEAM - .4byte Move_RAGE_FIST - .4byte Move_ARMOR_CANNON - .4byte Move_BITTER_BLADE - .4byte Move_DOUBLE_SHOCK - .4byte Move_GIGATON_HAMMER - .4byte Move_COMEUPPANCE - .4byte Move_AQUA_CUTTER - .4byte Move_BLAZING_TORQUE - .4byte Move_WICKED_TORQUE - .4byte Move_NOXIOUS_TORQUE - .4byte Move_COMBAT_TORQUE - .4byte Move_MAGICAL_TORQUE - .4byte Move_PSYBLADE - .4byte Move_HYDRO_STEAM - .4byte Move_BLOOD_MOON - .4byte Move_MATCHA_GOTCHA - .4byte Move_SYRUP_BOMB - .4byte Move_IVY_CUDGEL - .4byte Move_ELECTRO_SHOT - .4byte Move_TERA_STARSTORM - .4byte Move_FICKLE_BEAM - .4byte Move_BURNING_BULWARK - .4byte Move_THUNDERCLAP - .4byte Move_MIGHTY_CLEAVE - .4byte Move_TACHYON_CUTTER - .4byte Move_HARD_PRESS - .4byte Move_DRAGON_CHEER - .4byte Move_ALLURING_VOICE - .4byte Move_TEMPER_FLARE - .4byte Move_SUPERCELL_SLAM - .4byte Move_PSYCHIC_NOISE - .4byte Move_UPPER_HAND - .4byte Move_MALIGNANT_CHAIN -@@@@ Z MOVES - .4byte Move_BREAKNECK_BLITZ - .4byte Move_ALL_OUT_PUMMELING - .4byte Move_SUPERSONIC_SKYSTRIKE - .4byte Move_ACID_DOWNPOUR - .4byte Move_TECTONIC_RAGE - .4byte Move_CONTINENTAL_CRUSH - .4byte Move_SAVAGE_SPIN_OUT - .4byte Move_NEVER_ENDING_NIGHTMARE - .4byte Move_CORKSCREW_CRASH - .4byte Move_INFERNO_OVERDRIVE - .4byte Move_HYDRO_VORTEX - .4byte Move_BLOOM_DOOM - .4byte Move_GIGAVOLT_HAVOC - .4byte Move_SHATTERED_PSYCHE - .4byte Move_SUBZERO_SLAMMER - .4byte Move_DEVASTATING_DRAKE - .4byte Move_BLACK_HOLE_ECLIPSE - .4byte Move_TWINKLE_TACKLE - .4byte Move_CATASTROPIKA - .4byte Move_10000000_VOLT_THUNDERBOLT - .4byte Move_STOKED_SPARKSURFER - .4byte Move_EXTREME_EVOBOOST - .4byte Move_PULVERIZING_PANCAKE - .4byte Move_GENESIS_SUPERNOVA - .4byte Move_SINISTER_ARROW_RAID - .4byte Move_MALICIOUS_MOONSAULT - .4byte Move_OCEANIC_OPERETTA - .4byte Move_SPLINTERED_STORMSHARDS - .4byte Move_LETS_SNUGGLE_FOREVER - .4byte Move_CLANGOROUS_SOULBLAZE - .4byte Move_GUARDIAN_OF_ALOLA - .4byte Move_SEARING_SUNRAZE_SMASH - .4byte Move_MENACING_MOONRAZE_MAELSTROM - .4byte Move_LIGHT_THAT_BURNS_THE_SKY - .4byte Move_SOUL_STEALING_7_STAR_STRIKE -@@@@ MAX MOVES - .4byte Move_MAX_GUARD - .4byte Move_MAX_STRIKE - .4byte Move_MAX_KNUCKLE - .4byte Move_MAX_AIRSTREAM - .4byte Move_MAX_OOZE - .4byte Move_MAX_QUAKE - .4byte Move_MAX_ROCKFALL - .4byte Move_MAX_FLUTTERBY - .4byte Move_MAX_PHANTASM - .4byte Move_MAX_STEELSPIKE - .4byte Move_MAX_FLARE - .4byte Move_MAX_GEYSER - .4byte Move_MAX_OVERGROWTH - .4byte Move_MAX_LIGHTNING - .4byte Move_MAX_MINDSTORM - .4byte Move_MAX_HAILSTORM - .4byte Move_MAX_WYRMWIND - .4byte Move_MAX_DARKNESS - .4byte Move_MAX_STARFALL -@@@@ G-MAX MOVES - .4byte Move_G_MAX_VINE_LASH - .4byte Move_G_MAX_WILDFIRE - .4byte Move_G_MAX_CANNONADE - .4byte Move_G_MAX_BEFUDDLE - .4byte Move_G_MAX_VOLT_CRASH - .4byte Move_G_MAX_GOLD_RUSH - .4byte Move_G_MAX_CHI_STRIKE - .4byte Move_G_MAX_TERROR - .4byte Move_G_MAX_FOAM_BURST - .4byte Move_G_MAX_RESONANCE - .4byte Move_G_MAX_CUDDLE - .4byte Move_G_MAX_REPLENISH - .4byte Move_G_MAX_MALODOR - .4byte Move_G_MAX_MELTDOWN - .4byte Move_G_MAX_DRUM_SOLO - .4byte Move_G_MAX_FIREBALL - .4byte Move_G_MAX_HYDROSNIPE - .4byte Move_G_MAX_WIND_RAGE - .4byte Move_G_MAX_GRAVITAS - .4byte Move_G_MAX_STONESURGE - .4byte Move_G_MAX_VOLCALITH - .4byte Move_G_MAX_TARTNESS - .4byte Move_G_MAX_SWEETNESS - .4byte Move_G_MAX_SANDBLAST - .4byte Move_G_MAX_STUN_SHOCK - .4byte Move_G_MAX_CENTIFERNO - .4byte Move_G_MAX_SMITE - .4byte Move_G_MAX_SNOOZE - .4byte Move_G_MAX_FINALE - .4byte Move_G_MAX_STEELSURGE - .4byte Move_G_MAX_DEPLETION - .4byte Move_G_MAX_ONE_BLOW - .4byte Move_G_MAX_RAPID_FLOW -@@@ Last Move - cannot be reached - .4byte Move_COUNT - .align 2 gBattleAnims_StatusConditions:: .4byte Status_Poison @ B_ANIM_STATUS_PSN @@ -1048,7 +98,7 @@ gBattleAnims_Special:: .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW @@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@ -Move_ROOST: +Move_ROOST:: loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATTACKER @@ -1073,7 +123,7 @@ Move_ROOST: waitforvisualfinish end -Move_GRAVITY: +Move_GRAVITY:: fadetobg BG_COSMIC waitbgfadein createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1 @@ -1094,7 +144,7 @@ Move_GRAVITY: waitforvisualfinish end -Move_MIRACLE_EYE: +Move_MIRACLE_EYE:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -1112,7 +162,7 @@ Move_MIRACLE_EYE: clearmonbg ANIM_DEF_PARTNER end -Move_WAKE_UP_SLAP: +Move_WAKE_UP_SLAP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT @@ -1132,7 +182,7 @@ Move_WAKE_UP_SLAP: blendoff end -Move_HAMMER_ARM: +Move_HAMMER_ARM:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT @@ -1156,7 +206,7 @@ Move_HAMMER_ARM: blendoff end -Move_GYRO_BALL: +Move_GYRO_BALL:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -1186,7 +236,7 @@ Move_GYRO_BALL: waitforvisualfinish end -Move_HEALING_WISH: +Move_HEALING_WISH:: loadspritegfx ANIM_TAG_GREEN_SPARKLE setalpha 0, 16 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -1206,7 +256,7 @@ Move_HEALING_WISH: waitforvisualfinish end -Move_BRINE: +Move_BRINE:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -1220,7 +270,7 @@ Move_BRINE: blendoff end -Move_NATURAL_GIFT: +Move_NATURAL_GIFT:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER @@ -1249,7 +299,7 @@ Move_NATURAL_GIFT: delay 1 end -Move_FEINT: +Move_FEINT:: loadspritegfx ANIM_TAG_FEINT createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER @@ -1263,7 +313,7 @@ Move_FEINT: waitforvisualfinish end -Move_PLUCK: +Move_PLUCK:: loadspritegfx ANIM_TAG_SEED_BROWN loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -1289,7 +339,7 @@ Move_PLUCK: waitforvisualfinish end -Move_TAILWIND: +Move_TAILWIND:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -1352,7 +402,7 @@ General_Tailwind: delay 1 end -Move_ACUPRESSURE: +Move_ACUPRESSURE:: loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_SPARK_2 createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 @@ -1360,7 +410,7 @@ Move_ACUPRESSURE: call ElectricityEffect end -Move_METAL_BURST: +Move_METAL_BURST:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loadspritegfx ANIM_TAG_RED_ORB loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 @@ -1383,7 +433,7 @@ Move_METAL_BURST: waitforvisualfinish end -Move_U_TURN: +Move_U_TURN:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -1412,7 +462,7 @@ UTurnVisible: createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE goto UTurnContinue -Move_CLOSE_COMBAT: +Move_CLOSE_COMBAT:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET call SetHighSpeedBg @@ -1448,7 +498,7 @@ Move_CLOSE_COMBAT: delay 1 end -Move_PAYBACK: +Move_PAYBACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -1480,7 +530,7 @@ Move_PAYBACK: waitbgfadein end -Move_ASSURANCE: +Move_ASSURANCE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE monbg ANIM_TARGET @@ -1499,7 +549,7 @@ Move_ASSURANCE: waitbgfadein end -Move_EMBARGO: +Move_EMBARGO:: loadspritegfx ANIM_TAG_RED_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -1521,7 +571,7 @@ EmbargoOrbs1: delay 12 return -Move_FLING: +Move_FLING:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLACK_BALL monbg ANIM_DEF_PARTNER @@ -1537,7 +587,7 @@ Move_FLING: blendoff end -Move_PSYCHO_SHIFT: +Move_PSYCHO_SHIFT:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -1563,7 +613,7 @@ Move_PSYCHO_SHIFT: blendoff end -Move_TRUMP_CARD: +Move_TRUMP_CARD:: loadspritegfx ANIM_TAG_TRUMP_CARD loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES @@ -1607,7 +657,7 @@ Move_TRUMP_CARD: waitforvisualfinish end -Move_HEAL_BLOCK: +Move_HEAL_BLOCK:: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_TARGET createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2 @@ -1631,7 +681,7 @@ Move_HEAL_BLOCK: clearmonbg ANIM_TARGET end -Move_WRING_OUT: +Move_WRING_OUT:: loadspritegfx ANIM_TAG_WRING_OUT monbg ANIM_TARGET setalpha 12, 8 @@ -1652,7 +702,7 @@ Move_WRING_OUT: waitforvisualfinish end -Move_POWER_TRICK: +Move_POWER_TRICK:: loadspritegfx ANIM_TAG_POWER_TRICK loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 @@ -1664,7 +714,7 @@ Move_POWER_TRICK: waitforvisualfinish end -Move_GASTRO_ACID: +Move_GASTRO_ACID:: loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE @@ -1696,7 +746,7 @@ Move_GASTRO_ACID: clearmonbg ANIM_DEF_PARTNER end -Move_LUCKY_CHANT: +Move_LUCKY_CHANT:: loadspritegfx ANIM_TAG_GOLD_STARS monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -1723,10 +773,10 @@ Move_LUCKY_CHANT: unloadspritegfx ANIM_TAG_GOLD_STARS end -Move_ME_FIRST: +Move_ME_FIRST:: end -Move_COPYCAT: +Move_COPYCAT:: loadspritegfx ANIM_TAG_GRAY_ORB loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -1748,7 +798,7 @@ Move_COPYCAT: waitforvisualfinish end -Move_POWER_SWAP: +Move_POWER_SWAP:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32 @@ -1790,7 +840,7 @@ Move_POWER_SWAP: waitforvisualfinish end -Move_GUARD_SWAP: +Move_GUARD_SWAP:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32 @@ -1832,7 +882,7 @@ Move_GUARD_SWAP: waitforvisualfinish end -Move_PUNISHMENT: +Move_PUNISHMENT:: loadspritegfx ANIM_TAG_SCRATCH loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -1855,7 +905,7 @@ Move_PUNISHMENT: blendoff end -Move_LAST_RESORT: +Move_LAST_RESORT:: fadetobg BG_COSMIC waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 @@ -1893,7 +943,7 @@ Move_LAST_RESORT: call UnsetHighSpeedBg end -Move_WORRY_SEED: +Move_WORRY_SEED:: loadspritegfx ANIM_TAG_WORRY_SEED loadspritegfx ANIM_TAG_SMALL_CLOUD playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -1907,7 +957,7 @@ Move_WORRY_SEED: waitforvisualfinish end -Move_SUCKER_PUNCH: +Move_SUCKER_PUNCH:: loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -1920,7 +970,7 @@ Move_SUCKER_PUNCH: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_TOXIC_SPIKES: +Move_TOXIC_SPIKES:: loadspritegfx ANIM_TAG_TOXIC_SPIKES loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER @@ -1940,10 +990,10 @@ Move_TOXIC_SPIKES: clearmonbg ANIM_DEF_PARTNER end -Move_HEART_SWAP: +Move_HEART_SWAP:: end -Move_AQUA_RING: +Move_AQUA_RING:: General_AquaRingHeal: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -1992,7 +1042,7 @@ General_AquaRingHeal: blendoff end -Move_MAGNET_RISE: +Move_MAGNET_RISE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2029,7 +1079,7 @@ Move_MAGNET_RISE: waitforvisualfinish end -Move_FLARE_BLITZ: +Move_FLARE_BLITZ:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -2106,7 +1156,7 @@ Move_FLARE_BLITZ: waitbgfadein end -Move_FORCE_PALM: +Move_FORCE_PALM:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -2124,7 +1174,7 @@ Move_FORCE_PALM: blendoff end -Move_AURA_SPHERE: +Move_AURA_SPHERE:: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER @@ -2149,7 +1199,7 @@ SetAuraSphereBG: fadetobg BG_AURA_SPHERE goto SetHighSpeedBgFade -Move_ROCK_POLISH: +Move_ROCK_POLISH:: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 setalpha 12, 8 @@ -2216,7 +1266,7 @@ Move_ROCK_POLISH: blendoff end -Move_POISON_JAB: +Move_POISON_JAB:: loadspritegfx ANIM_TAG_PURPLE_JAB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -2270,7 +1320,7 @@ Move_POISON_JAB: blendoff end -Move_DARK_PULSE: +Move_DARK_PULSE:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_TARGET fadetobg BG_DARK @@ -2298,7 +1348,7 @@ Move_DARK_PULSE: waitbgfadein end -Move_NIGHT_SLASH: +Move_NIGHT_SLASH:: loadspritegfx ANIM_TAG_SLASH createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK @@ -2318,7 +1368,7 @@ Move_NIGHT_SLASH: waitforvisualfinish end -Move_AQUA_TAIL: +Move_AQUA_TAIL:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -2372,7 +1422,7 @@ Move_AQUA_TAIL: blendoff end -Move_SEED_BOMB: +Move_SEED_BOMB:: loadspritegfx ANIM_TAG_SEED loadspritegfx ANIM_TAG_EXPLOSION createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 @@ -2421,7 +1471,7 @@ Move_SEED_BOMB: waitforvisualfinish end -Move_AIR_SLASH: +Move_AIR_SLASH:: loadspritegfx ANIM_TAG_SLASH call SetSkyBg createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 @@ -2434,7 +1484,7 @@ Move_AIR_SLASH: call UnsetSkyBg end -Move_XSCISSOR: +Move_X_SCISSOR:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -2452,7 +1502,7 @@ Move_XSCISSOR: blendoff end -Move_BUG_BUZZ: +Move_BUG_BUZZ:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -2479,7 +1529,7 @@ Move_BUG_BUZZ: call UnsetBugBg end -Move_DRAGON_PULSE: +Move_DRAGON_PULSE:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -2512,7 +1562,7 @@ DragonPulseParticle: delay 4 return -Move_DRAGON_RUSH: +Move_DRAGON_RUSH:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -2541,7 +1591,7 @@ Move_DRAGON_RUSH: blendoff end -Move_POWER_GEM: @ Copy of Hidden Power with background blackened +Move_POWER_GEM:: @ Copy of Hidden Power with background blackened loadspritegfx ANIM_TAG_POWER_GEM createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish @@ -2575,7 +1625,7 @@ Move_POWER_GEM: @ Copy of Hidden Power with background blackened waitforvisualfinish end -Move_DRAIN_PUNCH: +Move_DRAIN_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLUE_STAR @@ -2596,7 +1646,7 @@ Move_DRAIN_PUNCH: blendoff end -Move_VACUUM_WAVE: +Move_VACUUM_WAVE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_THIN_RING @@ -2612,7 +1662,7 @@ Move_VACUUM_WAVE: blendoff end -Move_FOCUS_BLAST: +Move_FOCUS_BLAST:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -2636,7 +1686,7 @@ SetFocusBlastBG: fadetobg BG_FOCUS_BLAST goto SetHighSpeedBgFade -Move_ENERGY_BALL: +Move_ENERGY_BALL:: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET setalpha 12, 8 @@ -2654,7 +1704,7 @@ Move_ENERGY_BALL: blendoff end -Move_BRAVE_BIRD: +Move_BRAVE_BIRD:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BIRD call SetSkyBg @@ -2677,7 +1727,7 @@ Move_BRAVE_BIRD: call UnsetSkyBg end -Move_EARTH_POWER: +Move_EARTH_POWER:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50 @@ -2706,7 +1756,7 @@ Move_EARTH_POWER: waitforvisualfinish end -Move_SWITCHEROO: +Move_SWITCHEROO:: fadetobg BG_DARK waitbgfadein loadspritegfx ANIM_TAG_ITEM_BAG @@ -2738,7 +1788,7 @@ Move_SWITCHEROO: waitbgfadein end -Move_GIGA_IMPACT: +Move_GIGA_IMPACT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -2782,7 +1832,7 @@ GigaImpactContinuity: waitforvisualfinish end -Move_NASTY_PLOT: +Move_NASTY_PLOT:: loadspritegfx ANIM_TAG_AMNESIA fadetobg BG_DARK waitbgfadeout @@ -2797,7 +1847,7 @@ Move_NASTY_PLOT: call UnsetPsychicBg end -Move_BULLET_PUNCH: +Move_BULLET_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -2851,7 +1901,7 @@ Move_BULLET_PUNCH: blendoff end -Move_AVALANCHE: +Move_AVALANCHE:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER @@ -2902,7 +1952,7 @@ SnowSlide1: delay 2 return -Move_ICE_SHARD: +Move_ICE_SHARD:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -2938,7 +1988,7 @@ Move_ICE_SHARD: blendoff end -Move_SHADOW_CLAW: +Move_SHADOW_CLAW:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -2964,7 +2014,7 @@ Move_SHADOW_CLAW: clearmonbg ANIM_TARGET end -Move_THUNDER_FANG: +Move_THUNDER_FANG:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LIGHTNING loadspritegfx ANIM_TAG_SHARP_TEETH @@ -2998,7 +2048,7 @@ Move_THUNDER_FANG: delay 1 end -Move_ICE_FANG: +Move_ICE_FANG:: monbg ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -3035,7 +2085,7 @@ Move_ICE_FANG: delay 1 end -Move_FIRE_FANG: +Move_FIRE_FANG:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT @@ -3064,7 +2114,7 @@ Move_FIRE_FANG: delay 1 end -Move_SHADOW_SNEAK: +Move_SHADOW_SNEAK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -3102,7 +2152,7 @@ ShadowSneakMovement: delay 0x4 return -Move_MUD_BOMB: +Move_MUD_BOMB:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 @@ -3153,7 +2203,7 @@ Move_MUD_BOMB: waitforvisualfinish end -Move_PSYCHO_CUT: +Move_PSYCHO_CUT:: loadspritegfx ANIM_TAG_SPIRAL loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -3181,7 +2231,7 @@ Move_PSYCHO_CUT: waitforvisualfinish end -Move_ZEN_HEADBUTT: +Move_ZEN_HEADBUTT:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_ATTACKER @@ -3213,7 +2263,7 @@ Move_ZEN_HEADBUTT: delay 1 end -Move_MIRROR_SHOT: +Move_MIRROR_SHOT:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish @@ -3247,7 +2297,7 @@ Move_MIRROR_SHOT: blendoff end -Move_FLASH_CANNON: +Move_FLASH_CANNON:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -3284,7 +2334,7 @@ Move_FLASH_CANNON: clearmonbg ANIM_TARGET end -Move_ROCK_CLIMB: +Move_ROCK_CLIMB:: delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish @@ -3319,7 +2369,7 @@ Move_ROCK_CLIMB: blendoff end -Move_DEFOG: +Move_DEFOG:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -3354,7 +2404,7 @@ InitRoomAnimation: return @ Credits to Skeli -Move_DRACO_METEOR: +Move_DRACO_METEOR:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour loadspritegfx ANIM_TAG_WATER_GUN @Sparkles Trail @@ -3439,7 +2489,7 @@ DracoMeteor4: createsprite gDracoMeteorTailSpriteTemplate 0x83, 5, 0xffb0, 0xffc0, 0xFFF8, 0x20, 0x19 return -Move_DISCHARGE: +Move_DISCHARGE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -3544,7 +2594,7 @@ DischargeElectrify: createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER return -Move_LAVA_PLUME: +Move_LAVA_PLUME:: loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED @@ -3564,7 +2614,7 @@ Move_LAVA_PLUME: waitforvisualfinish end -Move_LEAF_STORM: +Move_LEAF_STORM:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LEAF @@ -3676,7 +2726,7 @@ Move_LEAF_STORM: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_WHIP: +Move_POWER_WHIP:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 @@ -3690,7 +2740,7 @@ Move_POWER_WHIP: waitbgfadein end -Move_ROCK_WRECKER: +Move_ROCK_WRECKER:: jumpargeq 7, 1, RockWrecker_1 fadetobg BG_ROCK_WRECKER waitbgfadeout @@ -3736,7 +2786,7 @@ RockWrecker_2: call UnsetPsychicBg end -Move_CROSS_POISON: +Move_CROSS_POISON:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_TARGET @@ -3752,7 +2802,7 @@ Move_CROSS_POISON: blendoff end -Move_GUNK_SHOT: +Move_GUNK_SHOT:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_WATER_IMPACT @@ -3809,7 +2859,7 @@ SetGunkShotBG: goto SetHighSpeedBgFade -Move_IRON_HEAD: +Move_IRON_HEAD:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -3831,7 +2881,7 @@ Move_IRON_HEAD: waitforvisualfinish end -Move_MAGNET_BOMB: +Move_MAGNET_BOMB:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -3896,7 +2946,7 @@ Move_MAGNET_BOMB: waitforvisualfinish end -Move_STONE_EDGE: +Move_STONE_EDGE:: loadspritegfx ANIM_TAG_STONE_EDGE loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET @@ -3955,7 +3005,7 @@ Move_STONE_EDGE: blendoff end -Move_CAPTIVATE: +Move_CAPTIVATE:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_DEF_PARTNER, 0, 2, 0 @@ -3971,7 +3021,7 @@ Move_CAPTIVATE: waitforvisualfinish end -Move_STEALTH_ROCK: +Move_STEALTH_ROCK:: loadspritegfx ANIM_TAG_STEALTH_ROCK monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -3988,7 +3038,7 @@ Move_STEALTH_ROCK: clearmonbg ANIM_DEF_PARTNER end -Move_GRASS_KNOT: +Move_GRASS_KNOT:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -4001,7 +3051,7 @@ Move_GRASS_KNOT: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_CHATTER: +Move_CHATTER:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -4041,7 +3091,7 @@ Move_CHATTER: clearmonbg ANIM_DEF_PARTNER end -Move_JUDGMENT: +Move_JUDGMENT:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_GREEN_SPIKE @@ -4137,7 +3187,7 @@ JudgmentInwardSpikes2: createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left return -Move_BUG_BITE: +Move_BUG_BITE:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -4178,7 +3228,7 @@ Move_BUG_BITE: blendoff end -Move_CHARGE_BEAM: +Move_CHARGE_BEAM:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -4230,7 +3280,7 @@ SparkBeam: delay 1 return -Move_WOOD_HAMMER: +Move_WOOD_HAMMER:: loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_IMPACT @@ -4259,7 +3309,7 @@ WoodHammerImpact: createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, -5, 0, -20, -24, 20, 2 return -Move_AQUA_JET: +Move_AQUA_JET:: loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH @@ -4292,7 +3342,7 @@ Move_AQUA_JET: blendoff end -Move_ATTACK_ORDER: +Move_ATTACK_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4338,7 +3388,7 @@ Move_ATTACK_ORDER: blendoff end -Move_DEFEND_ORDER: +Move_DEFEND_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4375,7 +3425,7 @@ Move_DEFEND_ORDER: waitforvisualfinish end -Move_HEAL_ORDER: +Move_HEAL_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4412,7 +3462,7 @@ Move_HEAL_ORDER: waitforvisualfinish end -Move_HEAD_SMASH: +Move_HEAD_SMASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_SkullBashPosition, 2, 0 @@ -4434,7 +3484,7 @@ Move_HEAD_SMASH: waitbgfadein end -Move_DOUBLE_HIT: +Move_DOUBLE_HIT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -4456,7 +3506,7 @@ Move_DOUBLE_HIT: blendoff end -Move_ROAR_OF_TIME: +Move_ROAR_OF_TIME:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_WATER_GUN @@ -4497,7 +3547,7 @@ Move_ROAR_OF_TIME: waitforvisualfinish end -Move_SPACIAL_REND: +Move_SPACIAL_REND:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN monbg ANIM_ATK_PARTNER @@ -4531,7 +3581,7 @@ Move_SPACIAL_REND: blendoff end -Move_LUNAR_DANCE: +Move_LUNAR_DANCE:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB @@ -4572,7 +3622,7 @@ Move_LUNAR_DANCE: delay 1 end -Move_CRUSH_GRIP: +Move_CRUSH_GRIP:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE @@ -4597,7 +3647,7 @@ Move_CRUSH_GRIP: blendoff end -Move_MAGMA_STORM: +Move_MAGMA_STORM:: loadspritegfx ANIM_TAG_SMALL_EMBER fadetobg BG_MAGMA_STORM @Add new bg waitbgfadeout @@ -4622,7 +3672,7 @@ Move_MAGMA_STORM: blendoff end -Move_DARK_VOID: +Move_DARK_VOID:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars @@ -4649,7 +3699,7 @@ Move_DARK_VOID: visible ANIM_DEF_PARTNER end -Move_SEED_FLARE: +Move_SEED_FLARE:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2 @@ -4734,7 +3784,7 @@ Move_SEED_FLARE: blendoff end -Move_OMINOUS_WIND: +Move_OMINOUS_WIND:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0 playsewithpan 228, 0 @@ -4793,7 +3843,7 @@ OminousWindHit: waitbgfadein end -Move_SHADOW_FORCE: +Move_SHADOW_FORCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim ShadowForcePrep ShadowForceAttack @@ -4847,7 +3897,7 @@ ShadowForceBg: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@ -Move_HONE_CLAWS: +Move_HONE_CLAWS:: loadspritegfx ANIM_TAG_SWIPE call HoneClawsAnim createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK @@ -4868,7 +3918,7 @@ HoneClawsAnim: delay 10 return -Move_WIDE_GUARD: +Move_WIDE_GUARD:: loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -4979,7 +4029,7 @@ General_WonderRoom: blendoff end -Move_PSYSHOCK: +Move_PSYSHOCK:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_GRAY_SMOKE @@ -5056,7 +4106,7 @@ PsyshockConverge: delay 2 return -Move_VENOSHOCK: +Move_VENOSHOCK:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_TOXIC_BUBBLE createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1 @@ -5084,7 +4134,7 @@ Move_VENOSHOCK: delay 15 end -Move_AUTOTOMIZE: +Move_AUTOTOMIZE:: loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits setalpha 12, 8 monbg ANIM_ATK_PARTNER @@ -5175,7 +4225,7 @@ Move_SMACK_DOWN:: createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 goto SeismicTossWeak -Move_STORM_THROW: +Move_STORM_THROW:: call StormThorwAnim call StormThorwAnim call StormThorwAnim @@ -5198,7 +4248,7 @@ StormThorwAnim: delay 8 return -Move_FLAME_BURST: +Move_FLAME_BURST:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER @@ -5231,13 +4281,13 @@ FlameBurstSpread: return -Move_SLUDGE_WAVE: +Move_SLUDGE_WAVE:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SLUDGE_WAVE waitforvisualfinish end -Move_QUIVER_DANCE: +Move_QUIVER_DANCE:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER call SetBugBg @@ -5260,7 +4310,7 @@ Move_QUIVER_DANCE: call UnsetBugBg end -Move_HEAVY_SLAM: +Move_HEAVY_SLAM:: loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -5290,7 +4340,7 @@ Move_HEAVY_SLAM: blendoff end -Move_SYCHRONOISE: +Move_SYNCHRONOISE:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_WATER_ORB @blue color @@ -5329,7 +4379,7 @@ Move_SYCHRONOISE: clearmonbg ANIM_DEF_PARTNER end -Move_ELECTRO_BALL: +Move_ELECTRO_BALL:: loadspritegfx ANIM_TAG_SPARK_2 @yelow loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball @@ -5356,7 +4406,7 @@ Move_ELECTRO_BALL: blendoff end -Move_SOAK: +Move_SOAK:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_TARGET @@ -5391,7 +4441,7 @@ Move_SOAK: blendoff end -Move_FLAME_CHARGE: +Move_FLAME_CHARGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -5424,7 +4474,7 @@ FlameChargeSwirl: createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c return -Move_COIL: +Move_COIL:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 @@ -5443,7 +4493,7 @@ Move_COIL: waitforvisualfinish end -Move_LOW_SWEEP: +Move_LOW_SWEEP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -5455,7 +4505,7 @@ Move_LOW_SWEEP: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_ACID_SPRAY: +Move_ACID_SPRAY:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE @@ -5481,7 +4531,7 @@ Move_ACID_SPRAY: clearmonbg ANIM_TARGET end -Move_FOUL_PLAY: +Move_FOUL_PLAY:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -5504,7 +4554,7 @@ Move_FOUL_PLAY: blendoff end -Move_SIMPLE_BEAM: +Move_SIMPLE_BEAM:: loadspritegfx ANIM_TAG_GOLD_RING @psybeam loadspritegfx ANIM_TAG_ROCKS @brown color loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -5550,7 +4600,7 @@ SimpleBeamWithRings: delay 0x2 return -Move_ENTRAINMENT: +Move_ENTRAINMENT:: createvisualtask AnimTask_TeeterDanceMovement, 5 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER delay 0x18 @@ -5565,7 +4615,7 @@ Move_ENTRAINMENT: waitforvisualfinish end -Move_AFTER_YOU: +Move_AFTER_YOU:: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER @@ -5580,7 +4630,7 @@ Move_AFTER_YOU: waitforvisualfinish end -Move_ROUND: +Move_ROUND:: loadspritegfx ANIM_TAG_MUSIC_NOTES createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -5602,7 +4652,7 @@ Move_ROUND: waitforvisualfinish end -Move_ECHOED_VOICE: +Move_ECHOED_VOICE:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -5622,7 +4672,7 @@ MetalSoundPlayNote: delay 0x2 return -Move_CHIP_AWAY: +Move_CHIP_AWAY:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF waitforvisualfinish @@ -5640,7 +4690,7 @@ Move_CHIP_AWAY: blendoff end -Move_CLEAR_SMOG: +Move_CLEAR_SMOG:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_TARGET splitbgprio_all @@ -5668,7 +4718,7 @@ ClearSmogCloud: delay 7 return -Move_STORED_POWER: +Move_STORED_POWER:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT call SetPsychicBackground @@ -5698,7 +4748,7 @@ Move_STORED_POWER: waitforvisualfinish end -Move_QUICK_GUARD: +Move_QUICK_GUARD:: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 @@ -5728,7 +4778,7 @@ Move_QUICK_GUARD: clearmonbg ANIM_ATTACKER end -Move_ALLY_SWITCH: +Move_ALLY_SWITCH:: call SetPsychicBackground createvisualtask AnimTask_AllySwitchAttacker, 2 createvisualtask AnimTask_AllySwitchPartner, 2 @@ -5736,7 +4786,7 @@ Move_ALLY_SWITCH: call UnsetPsychicBg end -Move_SCALD: +Move_SCALD:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -5782,7 +4832,7 @@ ScaldHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1 return -Move_SHELL_SMASH: +Move_SHELL_SMASH:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_IMPACT @@ -5810,7 +4860,7 @@ Move_SHELL_SMASH: waitforvisualfinish end -Move_HEAL_PULSE: +Move_HEAL_PULSE:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_THIN_RING @@ -5841,7 +4891,7 @@ Move_HEAL_PULSE: call HealingEffect2 end -Move_HEX: +Move_HEX:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple @@ -5862,7 +4912,7 @@ Move_HEX: waitforvisualfinish end -Move_SKY_DROP: +Move_SKY_DROP:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim SkyDropSetup SkyDropUnleash @@ -5895,7 +4945,7 @@ SkyDropUnleash: blendoff end -Move_SHIFT_GEAR: +Move_SHIFT_GEAR:: loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER @@ -5905,7 +4955,7 @@ Move_SHIFT_GEAR: clearmonbg ANIM_ATTACKER end -Move_CIRCLE_THROW: +Move_CIRCLE_THROW:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_ICE_CHUNK @@ -5932,7 +4982,7 @@ Move_CIRCLE_THROW: blendoff end -Move_INCINERATE: +Move_INCINERATE:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -5972,7 +5022,7 @@ Move_INCINERATE: blendoff end -Move_QUASH: +Move_QUASH:: loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand fadetobg BG_DARK waitbgfadein @@ -5989,7 +5039,7 @@ Move_QUASH: waitbgfadein end -Move_ACROBATICS: +Move_ACROBATICS:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_IMPACT @@ -6064,7 +5114,7 @@ AcrobaticsSlashes: delay 2 return -Move_REFLECT_TYPE: +Move_REFLECT_TYPE:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color @@ -6102,7 +5152,7 @@ Move_REFLECT_TYPE: blendoff end -Move_RETALIATE: +Move_RETALIATE:: loadspritegfx ANIM_TAG_CUT @Cut monbg ANIM_DEF_PARTNER setalpha 9, 8 @@ -6123,7 +5173,7 @@ Move_RETALIATE: blendoff end -Move_FINAL_GAMBIT: +Move_FINAL_GAMBIT:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation @@ -6150,7 +5200,7 @@ Move_FINAL_GAMBIT: waitforvisualfinish end -Move_BESTOW: +Move_BESTOW:: monbg ANIM_TARGET splitbgprio ANIM_TARGET panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -6160,7 +5210,7 @@ Move_BESTOW: clearmonbg ANIM_TARGET end -Move_INFERNO: +Move_INFERNO:: loadspritegfx ANIM_TAG_SMALL_EMBER call SetImpactBackground loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 @@ -6204,7 +5254,7 @@ InfernoAnim: delay 1 return -Move_WATER_PLEDGE: +Move_WATER_PLEDGE:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -6324,7 +5374,7 @@ Move_WATER_PLEDGE: blendoff end -Move_FIRE_PLEDGE: +Move_FIRE_PLEDGE:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -6423,7 +5473,7 @@ Move_FIRE_PLEDGE: blendoff end -Move_GRASS_PLEDGE: +Move_GRASS_PLEDGE:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_WHIP_HIT monbg ANIM_DEF_PARTNER @@ -6530,7 +5580,7 @@ GrassPledgeMiddleFountain: delay 4 return -Move_VOLT_SWITCH: +Move_VOLT_SWITCH:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_THIN_RING @@ -6569,7 +5619,7 @@ VoltSwitchAgainstPartner: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2 goto VoltSwitchContinue -Move_STRUGGLE_BUG: +Move_STRUGGLE_BUG:: loadspritegfx ANIM_TAG_MOVEMENT_WAVES loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -6595,12 +5645,12 @@ Move_STRUGGLE_BUG: blendoff end -Move_BULLDOZE: +Move_BULLDOZE:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 0x8 goto Move_EARTHQUAKE -Move_FROST_BREATH: +Move_FROST_BREATH:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME @@ -6638,7 +5688,7 @@ Move_FROST_BREATH: call UnsetPsychicBg end -Move_DRAGON_TAIL: +Move_DRAGON_TAIL:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT @@ -6674,7 +5724,7 @@ TailWhackDown: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return -Move_WORK_UP: +Move_WORK_UP:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2 @@ -6708,7 +5758,7 @@ Move_WORK_UP: waitforvisualfinish end -Move_ELECTROWEB: +Move_ELECTROWEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD loadspritegfx ANIM_TAG_SPARK_2 @@ -6726,11 +5776,11 @@ Move_ELECTROWEB: delay 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK call ElectricityEffect_OnTargets -Move_ELECTROWEB_Wait: +Move_ELECTROWEB_Wait:: waitforvisualfinish end -Move_WILD_CHARGE: +Move_WILD_CHARGE:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -6765,7 +5815,7 @@ ScreenFlash: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE return -Move_DRILL_RUN: +Move_DRILL_RUN:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT setalpha 12, 8 @@ -6820,7 +5870,7 @@ Move_DRILL_RUN: call UnsetPsychicBg end -Move_DUAL_CHOP: +Move_DUAL_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -6842,7 +5892,7 @@ Move_DUAL_CHOP: blendoff end -Move_HEART_STAMP: +Move_HEART_STAMP:: loadspritegfx ANIM_TAG_HEART_STAMP monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 @@ -6855,7 +5905,7 @@ Move_HEART_STAMP: waitforvisualfinish end -Move_HORN_LEECH: +Move_HORN_LEECH:: loadspritegfx ANIM_TAG_HORN_LEECH @Horn loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_ORBS @@ -6872,7 +5922,7 @@ Move_HORN_LEECH: waitforvisualfinish end -Move_SACRED_SWORD: +Move_SACRED_SWORD:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -6898,7 +5948,7 @@ Move_SACRED_SWORD: waitforvisualfinish end -Move_RAZOR_SHELL: +Move_RAZOR_SHELL:: loadspritegfx ANIM_TAG_RAZOR_SHELL loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET @@ -6912,7 +5962,7 @@ Move_RAZOR_SHELL: waitforvisualfinish end -Move_HEAT_CRASH: +Move_HEAT_CRASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WARM_ROCK loadspritegfx ANIM_TAG_ROCKS @@ -6936,7 +5986,7 @@ Move_HEAT_CRASH: blendoff end -Move_LEAF_TORNADO: +Move_LEAF_TORNADO:: loadspritegfx ANIM_TAG_GUST @Gust loadspritegfx ANIM_TAG_LEAF @Leaves monbg ANIM_DEF_PARTNER @@ -6967,7 +6017,7 @@ LeafTornadoVortex: delay 0x2 return -Move_STEAMROLLER: +Move_STEAMROLLER:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -6993,7 +6043,7 @@ Move_STEAMROLLER: blendoff end -Move_COTTON_GUARD: +Move_COTTON_GUARD:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -7023,7 +6073,7 @@ CottonSporesSpiralInward: delay 0x3 return -Move_NIGHT_DAZE: +Move_NIGHT_DAZE:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles @@ -7061,7 +6111,7 @@ Move_NIGHT_DAZE: waitforvisualfinish end -Move_PSYSTRIKE: +Move_PSYSTRIKE:: monbg ANIM_TARGET setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 @@ -7078,7 +6128,7 @@ Move_PSYSTRIKE: blendoff end -Move_TAIL_SLAP: +Move_TAIL_SLAP:: loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades @@ -7099,7 +6149,7 @@ TailSlapLeft: createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0 goto TailSlapContinue -Move_HURRICANE: +Move_HURRICANE:: loadspritegfx ANIM_TAG_GUST monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -7136,7 +6186,7 @@ HurricaneGustCentered: createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 return -Move_HEAD_CHARGE: +Move_HEAD_CHARGE:: loadspritegfx ANIM_TAG_IMPACT fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT waitbgfadein @@ -7156,7 +6206,7 @@ Move_HEAD_CHARGE: waitbgfadeout end -Move_GEAR_GRIND: +Move_GEAR_GRIND:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_TARGET @@ -7179,7 +6229,7 @@ Move_GEAR_GRIND: blendoff end -Move_SEARING_SHOT: +Move_SEARING_SHOT:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge @@ -7265,7 +6315,7 @@ Move_SEARING_SHOT: blendoff end -Move_TECHNO_BLAST: +Move_TECHNO_BLAST:: createvisualtask AnimTask_TechnoBlast, 0x5 jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire jumpargeq 0x0, TYPE_WATER, TechnoBlastWater @@ -7728,7 +6778,7 @@ TechnoBlastIceChargeParticles: delay 0x4 return -Move_RELIC_SONG: +Move_RELIC_SONG:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -7809,7 +6859,7 @@ Move_RELIC_SONG: waitforvisualfinish end -Move_SECRET_SWORD: +Move_SECRET_SWORD:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -7838,7 +6888,7 @@ Move_SECRET_SWORD: waitforvisualfinish end -Move_GLACIATE: +Move_GLACIATE:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -8502,7 +7552,7 @@ Move_ROTOTILLER:: waitforvisualfinish end -Move_STICKY_WEB: +Move_STICKY_WEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -8540,7 +7590,7 @@ Move_STICKY_WEB: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end -Move_FELL_STINGER: +Move_FELL_STINGER:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -8561,7 +7611,7 @@ Move_FELL_STINGER: clearmonbg ANIM_TARGET end -Move_PHANTOM_FORCE: +Move_PHANTOM_FORCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim PhantomForcePrep PhantomForceAttack @@ -8633,7 +7683,7 @@ PhantomForceBg: waitbgfadein return -Move_TRICK_OR_TREAT: +Move_TRICK_OR_TREAT:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT fadetobg BG_NIGHTMARE @@ -8657,7 +7707,7 @@ Move_TRICK_OR_TREAT: waitbgfadein end -Move_NOBLE_ROAR: +Move_NOBLE_ROAR:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -8678,10 +7728,10 @@ Move_NOBLE_ROAR: delay 20 end -Move_ION_DELUGE: +Move_ION_DELUGE:: end -Move_PARABOLIC_CHARGE: +Move_PARABOLIC_CHARGE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -8736,7 +7786,7 @@ ParabolicChargeDouble: createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK goto ParabolicChargeHeal; -Move_FORESTS_CURSE: +Move_FORESTS_CURSE:: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER @@ -8873,7 +7923,7 @@ Move_DISARMING_VOICE:: waitforvisualfinish end -Move_PARTING_SHOT: +Move_PARTING_SHOT:: loadspritegfx ANIM_TAG_NOISE_LINE fadetobg BG_DARK waitbgfadein @@ -8891,7 +7941,7 @@ Move_PARTING_SHOT: waitbgfadein end -Move_TOPSY_TURVY: +Move_TOPSY_TURVY:: loadspritegfx ANIM_TAG_SWEAT_DROP setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK @@ -8908,7 +7958,7 @@ Move_TOPSY_TURVY: blendoff end -Move_DRAINING_KISS: +Move_DRAINING_KISS:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -9244,7 +8294,7 @@ Move_FAIRY_WIND:: blendoff end -Move_MOONBLAST: +Move_MOONBLAST:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -9267,7 +8317,7 @@ Move_MOONBLAST: blendoff end -Move_BOOMBURST: +Move_BOOMBURST:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 @@ -10151,7 +9201,7 @@ InfestationVortex: delay 0x1 return -Move_POWER_UP_PUNCH: +Move_POWER_UP_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_BREATH @@ -14562,7 +13612,7 @@ BasicExplosion: createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return -Move_ETERNA_BEAM:: +Move_ETERNABEAM:: goto Move_HYPER_BEAM Move_STEEL_BEAM:: @@ -14840,7 +13890,7 @@ Move_SHELL_SIDE_ARM:: createvisualtask AnimTask_ShellSideArm, 0x5 jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL -Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder +Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA monbg ANIM_DEF_PARTNER @@ -14866,7 +13916,7 @@ Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder clearmonbg ANIM_DEF_PARTNER blendoff end -Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder +Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA @@ -16858,7 +15908,7 @@ Move_SYRUP_BOMB:: jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW @ Credits to Dat.H A -Move_SYRUP_BOMB_RED: +Move_SYRUP_BOMB_RED:: loadspritegfx ANIM_TAG_SYRUP_BLOB_RED loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED loadspritegfx ANIM_TAG_SYRUP_SHELL_RED @@ -16896,7 +15946,7 @@ SyrupBombProjectileRed: delay 3 return -Move_SYRUP_BOMB_YELLOW: +Move_SYRUP_BOMB_YELLOW:: loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW @@ -17229,7 +16279,7 @@ Move_UPPER_HAND:: blendoff end -Move_JET_PUNCH: +Move_JET_PUNCH:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -17938,9 +16988,9 @@ Move_MALIGNANT_CHAIN:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ -Move_NONE: -Move_MIRROR_MOVE: -Move_POUND: +Move_NONE:: +Move_MIRROR_MOVE:: +Move_POUND:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17952,7 +17002,7 @@ Move_POUND: blendoff end -Move_DOUBLE_SLAP: +Move_DOUBLE_SLAP:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17971,7 +17021,7 @@ DoubleSlapRight: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2 goto DoubleSlapContinue -Move_POISON_POWDER: +Move_POISON_POWDER:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 @@ -17996,7 +17046,7 @@ Move_POISON_POWDER: waitforvisualfinish end -Move_STUN_SPORE: +Move_STUN_SPORE:: loadspritegfx ANIM_TAG_STUN_SPORE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -18020,7 +17070,7 @@ Move_STUN_SPORE: waitforvisualfinish end -Move_SLEEP_POWDER: +Move_SLEEP_POWDER:: loadspritegfx ANIM_TAG_SLEEP_POWDER loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -18044,7 +17094,7 @@ Move_SLEEP_POWDER: waitforvisualfinish end -Move_SWIFT: +Move_SWIFT:: loadspritegfx ANIM_TAG_YELLOW_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18071,7 +17121,7 @@ Move_SWIFT: blendoff end -Move_STRENGTH: +Move_STRENGTH:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18097,7 +17147,7 @@ Move_STRENGTH: blendoff end -Move_TACKLE: +Move_TACKLE:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -18111,7 +17161,7 @@ Move_TACKLE: blendoff end -Move_BODY_SLAM: +Move_BODY_SLAM:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18137,7 +17187,7 @@ Move_BODY_SLAM: blendoff end -Move_SUPERSONIC: +Move_SUPERSONIC:: loadspritegfx ANIM_TAG_GOLD_RING monbg ANIM_ATK_PARTNER splitbgprio_foes ANIM_ATTACKER @@ -18159,7 +17209,7 @@ SupersonicRing: delay 2 return -Move_SCREECH: +Move_SCREECH:: loadspritegfx ANIM_TAG_PURPLE_RING createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 2, 1 call ScreechRing @@ -18174,7 +17224,7 @@ ScreechRing: delay 2 return -Move_FLAME_WHEEL: +Move_FLAME_WHEEL:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -18216,7 +17266,7 @@ FlameWheel1: @ Unused delay 4 return -Move_PIN_MISSILE: +Move_PIN_MISSILE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18245,7 +17295,7 @@ Move_PIN_MISSILE: blendoff end -Move_ICICLE_SPEAR: +Move_ICICLE_SPEAR:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18274,7 +17324,7 @@ Move_ICICLE_SPEAR: blendoff end -Move_TAKE_DOWN: +Move_TAKE_DOWN:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18297,7 +17347,7 @@ Move_TAKE_DOWN: blendoff end -Move_DOUBLE_EDGE: +Move_DOUBLE_EDGE:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 @@ -18330,7 +17380,7 @@ Move_DOUBLE_EDGE: waitforvisualfinish end -Move_POISON_STING: +Move_POISON_STING:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -18350,7 +17400,7 @@ Move_POISON_STING: blendoff end -Move_TWINEEDLE: +Move_TWINEEDLE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18370,7 +17420,7 @@ Move_TWINEEDLE: blendoff end -Move_FIRE_BLAST: +Move_FIRE_BLAST:: loadspritegfx ANIM_TAG_SMALL_EMBER createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2 call FireBlastRing @@ -18418,7 +17468,7 @@ FireBlastCross: createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0, 0, 15, 2, 2 return -Move_LEECH_SEED: +Move_LEECH_SEED:: loadspritegfx ANIM_TAG_SEED playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 @@ -18433,7 +17483,7 @@ Move_LEECH_SEED: waitforvisualfinish end -Move_EMBER: +Move_EMBER:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER, 5, 2 createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 @@ -18472,7 +17522,7 @@ SetImpactContestsBG: changebg BG_IMPACT_CONTESTS goto SetImpactBackgroundRet -Move_MEGA_PUNCH: +Move_MEGA_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18497,7 +17547,7 @@ Move_MEGA_PUNCH: waitbgfadein end -Move_MEGA_KICK: +Move_MEGA_KICK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18522,7 +17572,7 @@ Move_MEGA_KICK: waitbgfadein end -Move_COMET_PUNCH: +Move_COMET_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18544,7 +17594,7 @@ CometPunchRight: createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto CometPunchContinue -Move_SONIC_BOOM: +Move_SONIC_BOOM:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18569,7 +17619,7 @@ SonicBoomHit: delay 4 return -Move_THUNDER_SHOCK: +Move_THUNDER_SHOCK:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK @@ -18590,7 +17640,7 @@ Move_THUNDER_SHOCK: waitforvisualfinish end -Move_THUNDERBOLT: +Move_THUNDERBOLT:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 @@ -18639,7 +17689,7 @@ Move_THUNDERBOLT: waitforvisualfinish end -Move_THUNDER_WAVE: +Move_THUNDER_WAVE:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H @@ -18660,7 +17710,7 @@ Move_THUNDER_WAVE: waitforvisualfinish end -Move_BEAT_UP: +Move_BEAT_UP:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18694,7 +17744,7 @@ BeatUpRight: playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET goto BeatUpContinue -Move_STOMP: +Move_STOMP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18710,13 +17760,13 @@ Move_STOMP: blendoff end -Move_TAIL_WHIP: +Move_TAIL_WHIP:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 waitforvisualfinish end -Move_CUT: +Move_CUT:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18730,7 +17780,7 @@ Move_CUT: waitforvisualfinish end -Move_HIDDEN_POWER: +Move_HIDDEN_POWER:: loadspritegfx ANIM_TAG_RED_ORB playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -18760,7 +17810,7 @@ Move_HIDDEN_POWER: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 end -Move_REVERSAL: +Move_REVERSAL:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18788,7 +17838,7 @@ Move_REVERSAL: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 end -Move_PURSUIT: +Move_PURSUIT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -18815,7 +17865,7 @@ PursuitOnSwitchout: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue -Move_SPIKE_CANNON: +Move_SPIKE_CANNON:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18839,7 +17889,7 @@ Move_SPIKE_CANNON: blendoff end -Move_SWORDS_DANCE: +Move_SWORDS_DANCE:: loadspritegfx ANIM_TAG_SWORD monbg ANIM_ATTACKER setalpha 12, 8 @@ -18854,7 +17904,7 @@ Move_SWORDS_DANCE: delay 1 end -Move_PSYCH_UP: +Move_PSYCH_UP:: loadspritegfx ANIM_TAG_SPIRAL monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK @@ -18873,7 +17923,7 @@ Move_PSYCH_UP: waitforvisualfinish end -Move_DIZZY_PUNCH: +Move_DIZZY_PUNCH:: loadspritegfx ANIM_TAG_DUCK loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18910,7 +17960,7 @@ DizzyPunchLunge: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1 return -Move_FIRE_SPIN: +Move_FIRE_SPIN:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 @@ -18935,7 +17985,7 @@ FireSpinEffect: delay 2 return -Move_FURY_CUTTER: +Move_FURY_CUTTER:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18973,7 +18023,7 @@ FuryCutterStrongest: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 -Move_SELF_DESTRUCT: +Move_SELF_DESTRUCT:: loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 6, 0, 38, 1 @@ -19004,7 +18054,7 @@ SelfDestructExplode: delay 6 return -Move_SLAM: +Move_SLAM:: loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19028,7 +18078,7 @@ Move_SLAM: blendoff end -Move_VINE_WHIP: +Move_VINE_WHIP:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -19039,7 +18089,7 @@ Move_VINE_WHIP: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 6, 1 end -Move_DRILL_PECK: +Move_DRILL_PECK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19058,7 +18108,7 @@ Move_DRILL_PECK: waitforvisualfinish end -Move_WATERFALL: +Move_WATERFALL:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -19143,7 +18193,7 @@ RisingWaterHitEffect: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 return -Move_EXPLOSION: +Move_EXPLOSION:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -19176,7 +18226,7 @@ Explosion1: delay 6 return -Move_DEFENSE_CURL: +Move_DEFENSE_CURL:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE @@ -19188,7 +18238,7 @@ Move_DEFENSE_CURL: waitforvisualfinish end -Move_PROTECT: +Move_PROTECT:: loadspritegfx ANIM_TAG_PROTECT monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -19198,7 +18248,7 @@ Move_PROTECT: clearmonbg ANIM_ATK_PARTNER end -Move_DETECT: +Move_DETECT:: loadspritegfx ANIM_TAG_SPARKLE_4 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish @@ -19213,7 +18263,7 @@ Move_DETECT: waitforvisualfinish end -Move_FRUSTRATION: +Move_FRUSTRATION:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_DEF_PARTNER @@ -19318,7 +18368,7 @@ Frustration_Weak: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 goto Frustration_Continue -Move_SAFEGUARD: +Move_SAFEGUARD:: loadspritegfx ANIM_TAG_GUARD_RING monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -19336,7 +18386,7 @@ Move_SAFEGUARD: blendoff end -Move_PAIN_SPLIT: +Move_PAIN_SPLIT:: loadspritegfx ANIM_TAG_PAIN_SPLIT createsprite gPainSplitProjectileSpriteTemplate, ANIM_ATTACKER, 2, -8, -42, ANIM_ATTACKER createsprite gPainSplitProjectileSpriteTemplate, ANIM_TARGET, 2, -8, -42, ANIM_TARGET @@ -19360,7 +18410,7 @@ Move_PAIN_SPLIT: createvisualtask AnimTask_PainSplitMovement, 2, ANIM_TARGET, 2 end -Move_VICE_GRIP: +Move_VISE_GRIP:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19376,7 +18426,7 @@ Move_VICE_GRIP: blendoff end -Move_GUILLOTINE: +Move_GUILLOTINE:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19401,7 +18451,7 @@ Move_GUILLOTINE: waitbgfadein end -Move_PAY_DAY: +Move_PAY_DAY:: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19419,7 +18469,7 @@ Move_PAY_DAY: blendoff end -Move_OUTRAGE: +Move_OUTRAGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB(14, 13, 0) @@ -19464,7 +18514,7 @@ OutrageFlames: createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 return -Move_SPARK: +Move_SPARK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -19510,7 +18560,7 @@ Move_SPARK: waitforvisualfinish end -Move_ATTRACT: +Move_ATTRACT:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -19539,7 +18589,7 @@ Move_ATTRACT: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) end -Move_GROWTH: +Move_GROWTH:: call GrowthEffect waitforvisualfinish call GrowthEffect @@ -19551,7 +18601,7 @@ GrowthEffect: createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return -Move_WHIRLWIND: +Move_WHIRLWIND:: loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 60, 0 createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 60, 1 @@ -19570,7 +18620,7 @@ Move_WHIRLWIND: waitforvisualfinish end -Move_CONFUSE_RAY: +Move_CONFUSE_RAY:: loadspritegfx ANIM_TAG_YELLOW_BALL monbg ANIM_DEF_PARTNER fadetobg BG_GHOST @@ -19590,7 +18640,7 @@ Move_CONFUSE_RAY: waitbgfadein end -Move_LOCK_ON: +Move_LOCK_ON:: loadspritegfx ANIM_TAG_LOCK_ON createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 1 @@ -19602,7 +18652,7 @@ Move_LOCK_ON: waitforvisualfinish end -Move_MEAN_LOOK: +Move_MEAN_LOOK:: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -19617,7 +18667,7 @@ Move_MEAN_LOOK: waitforvisualfinish end -Move_ROCK_THROW: +Move_ROCK_THROW:: loadspritegfx ANIM_TAG_ROCKS createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0 @@ -19638,7 +18688,7 @@ Move_ROCK_THROW: waitforvisualfinish end -Move_ROCK_SLIDE: +Move_ROCK_SLIDE:: loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 @@ -19689,7 +18739,7 @@ RockSlideRocks: delay 2 return -Move_THIEF: +Move_THIEF:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET delay 1 @@ -19709,7 +18759,7 @@ Move_THIEF: waitbgfadein end -Move_BUBBLE_BEAM: +Move_BUBBLE_BEAM:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -19747,7 +18797,7 @@ BulbblebeamCreateBubbles: delay 3 return -Move_ICY_WIND: +Move_ICY_WIND:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER @@ -19783,7 +18833,7 @@ IcyWindSwirlingSnowballs: createsprite gSwirlingSnowballSpriteTemplate, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1 return -Move_SMOKESCREEN: +Move_SMOKESCREEN:: loadspritegfx ANIM_TAG_BLACK_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER @@ -19807,7 +18857,7 @@ Move_SMOKESCREEN: waitforvisualfinish end -Move_CONVERSION: +Move_CONVERSION:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -19859,7 +18909,7 @@ Move_CONVERSION: blendoff end -Move_CONVERSION_2: +Move_CONVERSION_2:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -19904,7 +18954,7 @@ Move_CONVERSION_2: blendoff end -Move_ROLLING_KICK: +Move_ROLLING_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19926,7 +18976,7 @@ Move_ROLLING_KICK: blendoff end -Move_HEADBUTT: +Move_HEADBUTT:: loadspritegfx ANIM_TAG_IMPACT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19942,7 +18992,7 @@ Move_HEADBUTT: waitforvisualfinish end -Move_HORN_ATTACK: +Move_HORN_ATTACK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19960,7 +19010,7 @@ Move_HORN_ATTACK: waitforvisualfinish end -Move_FURY_ATTACK: +Move_FURY_ATTACK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2 @@ -19984,7 +19034,7 @@ FuryAttackLeft: playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue -Move_HORN_DRILL: +Move_HORN_DRILL:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT jumpifcontest HornDrillInContest @@ -20051,7 +19101,7 @@ HornDrillInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto HornDrillContinue -Move_THRASH: +Move_THRASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET createvisualtask AnimTask_ThrashMoveMonHorizontal, 2 @@ -20069,7 +19119,7 @@ Move_THRASH: playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET end -Move_SING: +Move_SING:: loadspritegfx ANIM_TAG_MUSIC_NOTES monbg ANIM_DEF_PARTNER createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -20105,7 +19155,7 @@ Move_SING: waitforvisualfinish end -Move_LOW_KICK: +Move_LOW_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -20118,7 +19168,7 @@ Move_LOW_KICK: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_EARTHQUAKE: +Move_EARTHQUAKE:: createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 @@ -20128,7 +19178,7 @@ Move_EARTHQUAKE: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end -Move_FISSURE: +Move_FISSURE:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 @@ -20171,7 +19221,7 @@ FissureDirtPlumeClose: playsewithpan SE_M_DIG, SOUND_PAN_TARGET return -Move_DIG: +Move_DIG:: choosetwoturnanim DigSetUp, DigUnleash DigEnd: end @@ -20219,7 +19269,7 @@ DigThrowDirt: delay 32 return -Move_MEDITATE: +Move_MEDITATE:: call SetPsychicBackground createvisualtask AnimTask_MeditateStretchAttacker, 2 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -20229,7 +19279,7 @@ Move_MEDITATE: call UnsetPsychicBg end -Move_AGILITY: +Move_AGILITY:: monbg ANIM_ATK_PARTNER setalpha 12, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 @@ -20250,7 +19300,7 @@ Move_AGILITY: delay 1 end -Move_QUICK_ATTACK: +Move_QUICK_ATTACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -20267,7 +19317,7 @@ Move_QUICK_ATTACK: waitforvisualfinish end -Move_RAGE: +Move_RAGE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_TARGET @@ -20288,7 +19338,7 @@ Move_RAGE: clearmonbg ANIM_TARGET end -Move_TELEPORT: +Move_TELEPORT:: call SetPsychicBackground createvisualtask AnimTask_Teleport, 2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -20323,12 +19373,12 @@ DoubleTeamAnimRet: delay 1 return -Move_DOUBLE_TEAM: +Move_DOUBLE_TEAM:: createvisualtask AnimTask_DoubleTeam, 2 call DoubleTeamAnimRet end -Move_MINIMIZE: +Move_MINIMIZE:: setalpha 10, 8 createvisualtask AnimTask_Minimize, 2 loopsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 34, 3 @@ -20336,7 +19386,7 @@ Move_MINIMIZE: blendoff end -Move_METRONOME: +Move_METRONOME:: loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -20348,7 +19398,7 @@ Move_METRONOME: waitforvisualfinish end -Move_SKULL_BASH: +Move_SKULL_BASH:: choosetwoturnanim SkullBashSetUp, SkullBashAttack SkullBashEnd: end @@ -20381,7 +19431,7 @@ SkullBashAttack: createvisualtask AnimTask_SkullBashPosition, 2, 1 goto SkullBashEnd -Move_AMNESIA: +Move_AMNESIA:: loadspritegfx ANIM_TAG_AMNESIA call SetPsychicBackground delay 8 @@ -20393,7 +19443,7 @@ Move_AMNESIA: call UnsetPsychicBg end -Move_KINESIS: +Move_KINESIS:: loadspritegfx ANIM_TAG_ALERT loadspritegfx ANIM_TAG_BENT_SPOON playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20412,7 +19462,7 @@ Move_KINESIS: call UnsetPsychicBg end -Move_GLARE: +Move_GLARE:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE createvisualtask AnimTask_GlareEyeDots, 5, 0 @@ -20430,7 +19480,7 @@ Move_GLARE: createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK end -Move_BARRAGE: +Move_BARRAGE:: loadspritegfx ANIM_TAG_RED_BALL createvisualtask AnimTask_BarrageBall, 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -20441,7 +19491,7 @@ Move_BARRAGE: loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2 end -Move_SKY_ATTACK: +Move_SKY_ATTACK:: choosetwoturnanim SkyAttackSetUp, SkyAttackUnleash SkyAttackEnd: end @@ -20507,20 +19557,20 @@ SkyAttackUnleash: call UnsetSkyBg goto SkyAttackEnd -Move_FLASH: +Move_FLASH:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 waitforvisualfinish end -Move_SPLASH: +Move_SPLASH:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish end -Move_ACID_ARMOR: +Move_ACID_ARMOR:: monbg ANIM_ATTACKER setalpha 15, 0 createvisualtask AnimTask_AcidArmor, 2, ANIM_ATTACKER @@ -20531,13 +19581,13 @@ Move_ACID_ARMOR: delay 1 end -Move_SHARPEN: +Move_SHARPEN:: loadspritegfx ANIM_TAG_SPHERE_TO_CUBE createsprite gSharpenSphereSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish end -Move_SUPER_FANG: +Move_SUPER_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -20557,7 +19607,7 @@ Move_SUPER_FANG: blendoff end -Move_SLASH: +Move_SLASH:: loadspritegfx ANIM_TAG_SLASH createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -20568,7 +19618,7 @@ Move_SLASH: waitforvisualfinish end -Move_STRUGGLE: +Move_STRUGGLE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MOVEMENT_WAVES monbg ANIM_TARGET @@ -20586,7 +19636,7 @@ Move_STRUGGLE: blendoff end -Move_SKETCH: +Move_SKETCH:: loadspritegfx ANIM_TAG_PENCIL monbg ANIM_TARGET createvisualtask AnimTask_SketchDrawMon, 2 @@ -20597,7 +19647,7 @@ Move_SKETCH: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 2 end -Move_NIGHTMARE: +Move_NIGHTMARE:: fadetobg BG_GHOST waitbgfadein jumpifcontest NightmareInContest @@ -20619,7 +19669,7 @@ NightmareInContest: waitbgfadein end -Move_FLAIL: +Move_FLAIL:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -20634,7 +19684,7 @@ Move_FLAIL: blendoff end -Move_SPITE: +Move_SPITE:: fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein @@ -20668,7 +19718,7 @@ UnsetHighSpeedBg: waitbgfadein return -Move_MACH_PUNCH: +Move_MACH_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER @@ -20688,7 +19738,7 @@ Move_MACH_PUNCH: call UnsetHighSpeedBg end -Move_FORESIGHT: +Move_FORESIGHT:: loadspritegfx ANIM_TAG_MAGNIFYING_GLASS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -20707,7 +19757,7 @@ Move_FORESIGHT: clearmonbg ANIM_DEF_PARTNER end -Move_DESTINY_BOND: +Move_DESTINY_BOND:: loadspritegfx ANIM_TAG_WHITE_SHADOW fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20727,7 +19777,7 @@ Move_DESTINY_BOND: clearmonbg 5 end -Move_ENDURE: +Move_ENDURE:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -20752,7 +19802,7 @@ EndureEffect: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0, 1 return -Move_CHARM: +Move_CHARM:: loadspritegfx ANIM_TAG_MAGENTA_HEART createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -20766,7 +19816,7 @@ Move_CHARM: waitforvisualfinish end -Move_ROLLOUT: +Move_ROLLOUT:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_ROCKS @@ -20783,7 +19833,7 @@ Move_ROLLOUT: blendoff end -Move_FALSE_SWIPE: +Move_FALSE_SWIPE:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_IMPACT createsprite gFalseSwipeSliceSpriteTemplate, ANIM_TARGET, 2 @@ -20810,7 +19860,7 @@ Move_FALSE_SWIPE: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_SWAGGER: +Move_SWAGGER:: loadspritegfx ANIM_TAG_BREATH loadspritegfx ANIM_TAG_ANGER createvisualtask AnimTask_GrowAndShrink, 2 @@ -20828,7 +19878,7 @@ Move_SWAGGER: waitforvisualfinish end -Move_MILK_DRINK: +Move_MILK_DRINK:: loadspritegfx ANIM_TAG_MILK_BOTTLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -20849,7 +19899,7 @@ Move_MILK_DRINK: waitforvisualfinish end -Move_MAGNITUDE: +Move_MAGNITUDE:: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish jumpreteq FALSE, MagnitudeRegular @@ -20871,7 +19921,7 @@ MagnitudeIntense: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd -Move_RAPID_SPIN: +Move_RAPID_SPIN:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -20890,7 +19940,7 @@ Move_RAPID_SPIN: clearmonbg ANIM_ATTACKER end -Move_MOONLIGHT: +Move_MOONLIGHT:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR @@ -20917,7 +19967,7 @@ Move_MOONLIGHT: waitforvisualfinish end -Move_EXTREME_SPEED: +Move_EXTREME_SPEED:: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT call SetHighSpeedBg @@ -20953,7 +20003,7 @@ Move_EXTREME_SPEED: delay 1 end -Move_UPROAR: +Move_UPROAR:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -20978,7 +20028,7 @@ Move_UPROAR: clearmonbg ANIM_DEF_PARTNER end -Move_HEAT_WAVE: +Move_HEAT_WAVE:: loadspritegfx ANIM_TAG_FLYING_DIRT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE @@ -21003,7 +20053,7 @@ Move_HEAT_WAVE: end @ Also used by Hail weather -Move_HAIL: +Move_HAIL:: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK @@ -21014,7 +20064,7 @@ Move_HAIL: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end -Move_TORMENT: +Move_TORMENT:: loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createvisualtask AnimTask_TormentAttacker, 2 @@ -21027,7 +20077,7 @@ Move_TORMENT: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_MEMENTO: +Move_MEMENTO:: setalpha 0, 16 delay 1 createvisualtask AnimTask_InitMementoShadow, 2 @@ -21051,14 +20101,14 @@ Move_MEMENTO: delay 1 end -Move_FACADE: +Move_FACADE:: loadspritegfx ANIM_TAG_SWEAT_DROP createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 3 createvisualtask AnimTask_FacadeColorBlend, 2, ANIM_ATTACKER, 72 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3 end -Move_SMELLING_SALTS: +Move_SMELLING_SALTS:: loadspritegfx ANIM_TAG_TAG_HAND loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2 @@ -21073,7 +20123,7 @@ Move_SMELLING_SALTS: loopsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET, 16, 3 end -Move_FOLLOW_ME: +Move_FOLLOW_ME:: loadspritegfx ANIM_TAG_FINGER createsprite gFollowMeFingerSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -21083,7 +20133,7 @@ Move_FOLLOW_ME: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 end -Move_CHARGE: +Move_CHARGE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21118,7 +20168,7 @@ Move_CHARGE: blendoff end -Move_TAUNT: +Move_TAUNT:: loadspritegfx ANIM_TAG_FINGER_2 loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_ANGER @@ -21138,7 +20188,7 @@ Move_TAUNT: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_HELPING_HAND: +Move_HELPING_HAND:: loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_HelpingHandAttackerMovement, 5 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0 @@ -21155,7 +20205,7 @@ Move_HELPING_HAND: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_ASSIST: +Move_ASSIST:: loadspritegfx ANIM_TAG_PAW_PRINT createsprite gAssistPawprintSpriteTemplate, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36 delay 2 @@ -21172,7 +20222,7 @@ Move_ASSIST: playsewithpan SE_M_SCRATCH, 0 end -Move_SUPERPOWER: +Move_SUPERPOWER:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -21206,7 +20256,7 @@ Move_SUPERPOWER: delay 1 end -Move_RECYCLE: +Move_RECYCLE:: loadspritegfx ANIM_TAG_RECYCLE monbg ANIM_ATTACKER setalpha 0, 16 @@ -21222,7 +20272,7 @@ Move_RECYCLE: delay 1 end -Move_BRICK_BREAK: +Move_BRICK_BREAK:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21286,7 +20336,7 @@ BrickBreakShatteredWall: clearmonbg ANIM_TARGET end -Move_YAWN: +Move_YAWN:: loadspritegfx ANIM_TAG_PINK_CLOUD createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21302,7 +20352,7 @@ Move_YAWN: playsewithpan SE_M_YAWN, SOUND_PAN_TARGET end -Move_ENDEAVOR: +Move_ENDEAVOR:: loadspritegfx ANIM_TAG_SWEAT_DROP loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 2 @@ -21318,7 +20368,7 @@ Move_ENDEAVOR: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_ERUPTION: +Move_ERUPTION:: loadspritegfx ANIM_TAG_WARM_ROCK createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED waitforvisualfinish @@ -21343,7 +20393,7 @@ Move_ERUPTION: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED end -Move_SKILL_SWAP: +Move_SKILL_SWAP:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB call SetPsychicBackground createvisualtask AnimTask_SkillSwap, 3, ANIM_TARGET @@ -21356,7 +20406,7 @@ Move_SKILL_SWAP: call UnsetPsychicBg end -Move_IMPRISON: +Move_IMPRISON:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_X_SIGN call SetPsychicBackground @@ -21373,7 +20423,7 @@ Move_IMPRISON: call UnsetPsychicBg end -Move_GRUDGE: +Move_GRUDGE:: loadspritegfx ANIM_TAG_PURPLE_FLAME monbg ANIM_ATTACKER splitbgprio_all @@ -21391,7 +20441,7 @@ Move_GRUDGE: clearmonbg ANIM_ATTACKER end -Move_CAMOUFLAGE: +Move_CAMOUFLAGE:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 @@ -21409,7 +20459,7 @@ Move_CAMOUFLAGE: clearmonbg ANIM_ATK_PARTNER end -Move_TAIL_GLOW: +Move_TAIL_GLOW:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -21425,7 +20475,7 @@ Move_TAIL_GLOW: delay 1 end -Move_LUSTER_PURGE: +Move_LUSTER_PURGE:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT fadetobg BG_PSYCHIC @@ -21468,7 +20518,7 @@ Move_LUSTER_PURGE: call UnsetPsychicBg end -Move_MIST_BALL: +Move_MIST_BALL:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WHITE_FEATHER delay 0 @@ -21488,7 +20538,7 @@ Move_MIST_BALL: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE end -Move_FEATHER_DANCE: +Move_FEATHER_DANCE:: loadspritegfx ANIM_TAG_WHITE_FEATHER monbg ANIM_DEF_PARTNER splitbgprio_all @@ -21510,7 +20560,7 @@ Move_FEATHER_DANCE: clearmonbg ANIM_DEF_PARTNER end -Move_TEETER_DANCE: +Move_TEETER_DANCE:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_DUCK createvisualtask AnimTask_TeeterDanceMovement, 5 @@ -21530,7 +20580,7 @@ Move_TEETER_DANCE: playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER end -Move_MUD_SPORT: +Move_MUD_SPORT:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 6 delay 24 @@ -21577,7 +20627,7 @@ Move_MUD_SPORT: waitplaysewithpan SE_M_BUBBLE2, 0, 10 end -Move_NEEDLE_ARM: +Move_NEEDLE_ARM:: loadspritegfx ANIM_TAG_GREEN_SPIKE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21620,7 +20670,7 @@ Move_NEEDLE_ARM: createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, -17, -17, 10 end -Move_SLACK_OFF: +Move_SLACK_OFF:: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_SlackOffSquish, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21629,7 +20679,7 @@ Move_SLACK_OFF: waitforvisualfinish end -Move_CRUSH_CLAW: +Move_CRUSH_CLAW:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -21650,7 +20700,7 @@ Move_CRUSH_CLAW: clearmonbg ANIM_TARGET end -Move_AROMATHERAPY: +Move_AROMATHERAPY:: playsewithpan SE_M_PETAL_DANCE, 0 loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING @@ -21689,7 +20739,7 @@ Move_AROMATHERAPY: waitforvisualfinish end -Move_FAKE_TEARS: +Move_FAKE_TEARS:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -21712,7 +20762,7 @@ Move_FAKE_TEARS: waitforvisualfinish end -Move_AIR_CUTTER: +Move_AIR_CUTTER:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT @@ -21733,7 +20783,7 @@ Move_AIR_CUTTER: delay 0 end -Move_ODOR_SLEUTH: +Move_ODOR_SLEUTH:: monbg ANIM_TARGET createvisualtask AnimTask_OdorSleuthMovement, 5 delay 24 @@ -21749,7 +20799,7 @@ Move_ODOR_SLEUTH: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end -Move_GRASS_WHISTLE: +Move_GRASS_WHISTLE:: loadspritegfx ANIM_TAG_MUSIC_NOTES createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish @@ -21786,7 +20836,7 @@ Move_GRASS_WHISTLE: waitforvisualfinish end -Move_TICKLE: +Move_TICKLE:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish @@ -21804,7 +20854,7 @@ Move_TICKLE: waitforvisualfinish end -Move_WATER_SPOUT: +Move_WATER_SPOUT:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -21821,7 +20871,7 @@ Move_WATER_SPOUT: blendoff end -Move_SHADOW_PUNCH: +Move_SHADOW_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET fadetobg BG_GHOST @@ -21842,7 +20892,7 @@ Move_SHADOW_PUNCH: waitbgfadein end -Move_EXTRASENSORY: +Move_EXTRASENSORY:: call SetPsychicBackground monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -21863,7 +20913,7 @@ Move_EXTRASENSORY: call UnsetPsychicBg end -Move_AERIAL_ACE: +Move_AERIAL_ACE:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -21880,20 +20930,20 @@ Move_AERIAL_ACE: blendoff end -Move_IRON_DEFENSE: +Move_IRON_DEFENSE:: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end -Move_BLOCK: +Move_BLOCK:: loadspritegfx ANIM_TAG_X_SIGN createsprite gBlockXSpriteTemplate, ANIM_TARGET, 66 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET end -Move_HOWL: +Move_HOWL:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER delay 12 @@ -21903,7 +20953,7 @@ Move_HOWL: delay 30 end -Move_BULK_UP: +Move_BULK_UP:: loadspritegfx ANIM_TAG_BREATH createvisualtask AnimTask_GrowAndShrink, 2 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -21913,7 +20963,7 @@ Move_BULK_UP: waitforvisualfinish end -Move_COVET: +Move_COVET:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 @@ -21930,7 +20980,7 @@ Move_COVET: loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 4, 3 end -Move_VOLT_TACKLE: +Move_VOLT_TACKLE:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21977,7 +21027,7 @@ Move_VOLT_TACKLE: waitforvisualfinish end -Move_WATER_SPORT: +Move_WATER_SPORT:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB createvisualtask AnimTask_WaterSport, 5 delay 8 @@ -21990,7 +21040,7 @@ Move_WATER_SPORT: panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 end -Move_CALM_MIND: +Move_CALM_MIND:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK @@ -22013,7 +21063,7 @@ Move_CALM_MIND: clearmonbg ANIM_ATK_PARTNER end -Move_LEAF_BLADE: +Move_LEAF_BLADE:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_CROSS_IMPACT createvisualtask AnimTask_LeafBlade, 5 @@ -22038,7 +21088,7 @@ Move_LEAF_BLADE: blendoff end -Move_DRAGON_DANCE: +Move_DRAGON_DANCE:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -22062,7 +21112,7 @@ Move_DRAGON_DANCE: delay 1 end -Move_SHOCK_WAVE: +Move_SHOCK_WAVE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -22092,13 +21142,13 @@ Move_SHOCK_WAVE: blendoff end -Move_HARDEN: +Move_HARDEN:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish end -Move_BELLY_DRUM: +Move_BELLY_DRUM:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -22141,7 +21191,7 @@ BellyDrumRight: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 8, 2, 1 return -Move_MIND_READER: +Move_MIND_READER:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -22181,7 +21231,7 @@ MindReaderEyeSpikeEffect: delay 2 return -Move_ICE_PUNCH: +Move_ICE_PUNCH:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -22218,7 +21268,7 @@ Move_ICE_PUNCH: blendoff end -Move_REST: +Move_REST:: playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_LETTER_Z createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -22229,7 +21279,7 @@ Move_REST: waitforvisualfinish end -Move_CONFUSION: +Move_CONFUSION:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -22246,7 +21296,7 @@ Move_CONFUSION: call UnsetPsychicBg end -Move_PSYCHIC: +Move_PSYCHIC:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -22263,7 +21313,7 @@ Move_PSYCHIC: call UnsetPsychicBg end -Move_FUTURE_SIGHT: +Move_FUTURE_SIGHT:: goto FutureSight FutureSightContinue: waitforvisualfinish @@ -22283,7 +21333,7 @@ FutureSight: blendoff goto FutureSightContinue -Move_THUNDER: +Move_THUNDER:: loadspritegfx ANIM_TAG_LIGHTNING fadetobg BG_THUNDER waitbgfadeout @@ -22341,7 +21391,7 @@ Move_THUNDER: waitbgfadein end -Move_THUNDER_PUNCH: +Move_THUNDER_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_LIGHTNING @@ -22374,7 +21424,7 @@ Move_THUNDER_PUNCH: blendoff end -Move_SACRED_FIRE: +Move_SACRED_FIRE:: loadspritegfx ANIM_TAG_FIRE loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER, 7, 5 @@ -22431,7 +21481,7 @@ Move_SACRED_FIRE: waitforvisualfinish end -Move_SCRATCH: +Move_SCRATCH:: loadspritegfx ANIM_TAG_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -22444,7 +21494,7 @@ Move_SCRATCH: waitforvisualfinish end -Move_DRAGON_BREATH: +Move_DRAGON_BREATH:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -22478,7 +21528,7 @@ Move_DRAGON_BREATH: clearmonbg ANIM_DEF_PARTNER end -Move_ROAR: +Move_ROAR:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -22506,7 +21556,7 @@ RoarEffect: createsprite gRoarNoiseLineSpriteTemplate, ANIM_ATTACKER, 2, 24, 8, 1 return -Move_GROWL: +Move_GROWL:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect @@ -22518,7 +21568,7 @@ Move_GROWL: waitforvisualfinish end -Move_SNORE: +Move_SNORE:: loadspritegfx ANIM_TAG_SNORE_Z monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -22539,7 +21589,7 @@ SnoreEffect: createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 return -Move_LIGHT_SCREEN: +Move_LIGHT_SCREEN:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL setalpha 0, 16 @@ -22566,7 +21616,7 @@ SpecialScreenSparkle: createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE return -Move_MIRROR_COAT: +Move_MIRROR_COAT:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_RED_LIGHT_WALL setalpha 0, 16 @@ -22579,7 +21629,7 @@ Move_MIRROR_COAT: blendoff end -Move_REFLECT: +Move_REFLECT:: loadspritegfx ANIM_TAG_SPARKLE_4 loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL setalpha 0, 16 @@ -22596,7 +21646,7 @@ Move_REFLECT: blendoff end -Move_BARRIER: +Move_BARRIER:: loadspritegfx ANIM_TAG_GRAY_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -22606,7 +21656,7 @@ Move_BARRIER: blendoff end -Move_BUBBLE: +Move_BUBBLE:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -22642,7 +21692,7 @@ Move_BUBBLE: blendoff end -Move_SMOG: +Move_SMOG:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD monbg ANIM_DEF_PARTNER splitbgprio_all @@ -22669,7 +21719,7 @@ SmogCloud: delay 7 return -Move_FAINT_ATTACK: +Move_FEINT_ATTACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER fadetobg BG_DARK @@ -22705,7 +21755,7 @@ Move_FAINT_ATTACK: waitbgfadein end -Move_SAND_ATTACK: +Move_SAND_ATTACK:: loadspritegfx ANIM_TAG_MUD_SAND monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -22733,7 +21783,7 @@ SandAttackDirt: delay 2 return -Move_MUD_SLAP: +Move_MUD_SLAP:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 @@ -22756,7 +21806,7 @@ MudSlapMud: delay 2 return -Move_DRAGON_RAGE: +Move_DRAGON_RAGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -22788,7 +21838,7 @@ Move_DRAGON_RAGE: waitforvisualfinish end -Move_RAIN_DANCE: +Move_RAIN_DANCE:: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK @@ -22802,7 +21852,7 @@ Move_RAIN_DANCE: waitforvisualfinish end -Move_BITE: +Move_BITE:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22819,7 +21869,7 @@ Move_BITE: delay 1 end -Move_CRUNCH: +Move_CRUNCH:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22847,7 +21897,7 @@ Move_CRUNCH: waitbgfadein end -Move_CLAMP: +Move_CLAMP:: loadspritegfx ANIM_TAG_CLAMP loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22864,7 +21914,7 @@ Move_CLAMP: waitforvisualfinish end -Move_ICE_BEAM: +Move_ICE_BEAM:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -22908,13 +21958,13 @@ IceBeamCreateCrystals: delay 1 return -Move_WITHDRAW: +Move_WITHDRAW:: playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createvisualtask AnimTask_Withdraw, 5 waitforvisualfinish end -Move_AURORA_BEAM: +Move_AURORA_BEAM:: loadspritegfx ANIM_TAG_RAINBOW_RINGS fadetobg BG_AURORA waitbgfadein @@ -22950,7 +22000,7 @@ AuroraBeamCreateRings: delay 1 return -Move_SOLAR_BEAM: +Move_SOLAR_BEAM:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp, SolarBeamUnleash SolarBeamEnd: @@ -23039,7 +22089,7 @@ SolarBeamUnleash1: delay 4 return -Move_BLIZZARD: +Move_BLIZZARD:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER call SetHighSpeedBg @@ -23079,7 +22129,7 @@ BlizzardIceCrystals: delay 3 return -Move_POWDER_SNOW: +Move_POWDER_SNOW:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK @@ -23113,7 +22163,7 @@ PowderSnowSnowballs: delay 3 return -Move_HYDRO_PUMP: +Move_HYDRO_PUMP:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23160,7 +22210,7 @@ HydroPumpHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1 return -Move_SIGNAL_BEAM: +Move_SIGNAL_BEAM:: loadspritegfx ANIM_TAG_GLOWY_RED_ORB loadspritegfx ANIM_TAG_GLOWY_GREEN_ORB loadspritegfx ANIM_TAG_DUCK @@ -23201,7 +22251,7 @@ SignalBeamOrbs: delay 1 return -Move_ABSORB: +Move_ABSORB:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23254,7 +22304,7 @@ AbsorbEffect: delay 4 return -Move_MEGA_DRAIN: +Move_MEGA_DRAIN:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23315,7 +22365,7 @@ MegaDrainAbsorbEffect: delay 4 return -Move_GIGA_DRAIN: +Move_GIGA_DRAIN:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23384,7 +22434,7 @@ GigaDrainAbsorbEffect: delay 4 return -Move_LEECH_LIFE: +Move_LEECH_LIFE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_ORBS delay 1 @@ -23414,7 +22464,7 @@ Move_LEECH_LIFE: blendoff end -Move_SYNTHESIS: +Move_SYNTHESIS:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -23427,7 +22477,7 @@ Move_SYNTHESIS: waitforvisualfinish end -Move_TOXIC: +Move_TOXIC:: loadspritegfx ANIM_TAG_TOXIC_BUBBLE loadspritegfx ANIM_TAG_POISON_BUBBLE call ToxicBubbles @@ -23452,7 +22502,7 @@ ToxicBubbles: delay 15 return -Move_SLUDGE: +Move_SLUDGE:: loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 @@ -23463,7 +22513,7 @@ Move_SLUDGE: waitforvisualfinish end -Move_SLUDGE_BOMB: +Move_SLUDGE_BOMB:: loadspritegfx ANIM_TAG_POISON_BUBBLE call SludgeBombProjectile call SludgeBombProjectile @@ -23506,7 +22556,7 @@ SludgeBombProjectile: delay 3 return -Move_ACID: +Move_ACID:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE @@ -23539,7 +22589,7 @@ Move_ACID: clearmonbg ANIM_DEF_PARTNER end -Move_BONEMERANG: +Move_BONEMERANG:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23559,7 +22609,7 @@ Move_BONEMERANG: blendoff end -Move_BONE_CLUB: +Move_BONE_CLUB:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23577,7 +22627,7 @@ Move_BONE_CLUB: blendoff end -Move_BONE_RUSH: +Move_BONE_RUSH:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23593,7 +22643,7 @@ Move_BONE_RUSH: blendoff end -Move_SPIKES: +Move_SPIKES:: loadspritegfx ANIM_TAG_SPIKES monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -23610,7 +22660,7 @@ Move_SPIKES: clearmonbg ANIM_DEF_PARTNER end -Move_MEGAHORN: +Move_MEGAHORN:: loadspritegfx ANIM_TAG_HORN_HIT_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23653,7 +22703,7 @@ MegahornInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto MegahornContinue -Move_GUST: +Move_GUST:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23671,7 +22721,7 @@ Move_GUST: blendoff end -Move_WING_ATTACK: +Move_WING_ATTACK:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23695,7 +22745,7 @@ Move_WING_ATTACK: blendoff end -Move_PECK: +Move_PECK:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2 @@ -23703,7 +22753,7 @@ Move_PECK: waitforvisualfinish end -Move_AEROBLAST: +Move_AEROBLAST:: loadspritegfx ANIM_TAG_AIR_WAVE_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23744,7 +22794,7 @@ AeroblastBeam: delay 3 return -Move_WATER_GUN: +Move_WATER_GUN:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23768,7 +22818,7 @@ Move_WATER_GUN: blendoff end -Move_CRABHAMMER: +Move_CRABHAMMER:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23805,14 +22855,14 @@ Move_CRABHAMMER: blendoff end -Move_SURF: +Move_SURF:: createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF delay 24 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 waitforvisualfinish end -Move_FLAMETHROWER: +Move_FLAMETHROWER:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23846,7 +22896,7 @@ FlamethrowerCreateFlames: return @ Also used by Sandstorm weather -Move_SANDSTORM: +Move_SANDSTORM:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_SANDSTORM, 0 createvisualtask AnimTask_LoadSandstormBackground, 5, FALSE @@ -23866,7 +22916,7 @@ Move_SANDSTORM: createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 end -Move_WHIRLPOOL: +Move_WHIRLPOOL:: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23899,7 +22949,7 @@ WhirlpoolEffect: delay 2 return -Move_FLY: +Move_FLY:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim FlySetUp, FlyUnleash @@ -23926,7 +22976,7 @@ FlyUnleash: blendoff goto FlyEnd -Move_BOUNCE: +Move_BOUNCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim BounceSetUp, BounceUnleash @@ -23952,7 +23002,7 @@ BounceUnleash: blendoff goto BounceEnd -Move_KARATE_CHOP: +Move_KARATE_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23969,7 +23019,7 @@ Move_KARATE_CHOP: blendoff end -Move_CROSS_CHOP: +Move_CROSS_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_DEF_PARTNER @@ -23987,7 +23037,7 @@ Move_CROSS_CHOP: blendoff end -Move_JUMP_KICK: +Move_JUMP_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24005,7 +23055,7 @@ Move_JUMP_KICK: blendoff end -Move_HIGH_JUMP_KICK: +Move_HIGH_JUMP_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24031,7 +23081,7 @@ Move_HIGH_JUMP_KICK: blendoff end -Move_DOUBLE_KICK: +Move_DOUBLE_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24044,7 +23094,7 @@ Move_DOUBLE_KICK: blendoff end -Move_TRIPLE_KICK: +Move_TRIPLE_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24077,7 +23127,7 @@ TripleKickCenter: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto TripleKickContinue -Move_DYNAMIC_PUNCH: +Move_DYNAMIC_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION @@ -24111,7 +23161,7 @@ Move_DYNAMIC_PUNCH: blendoff end -Move_COUNTER: +Move_COUNTER:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -24143,7 +23193,7 @@ Move_COUNTER: blendoff end -Move_VITAL_THROW: +Move_VITAL_THROW:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24166,7 +23216,7 @@ Move_VITAL_THROW: blendoff end -Move_ROCK_SMASH: +Move_ROCK_SMASH:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -24193,7 +23243,7 @@ Move_ROCK_SMASH: blendoff end -Move_SUBMISSION: +Move_SUBMISSION:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24227,7 +23277,7 @@ SubmissionHit: return @ Also used by Sunny weather -Move_SUNNY_DAY: +Move_SUNNY_DAY:: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 @@ -24250,7 +23300,7 @@ SunnyDayLightRay: delay 6 return -Move_COTTON_SPORE: +Move_COTTON_SPORE:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -24271,7 +23321,7 @@ CreateCottonSpores: delay 12 return -Move_SPORE: +Move_SPORE:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24295,7 +23345,7 @@ CreateSpore: delay 12 return -Move_PETAL_DANCE: +Move_PETAL_DANCE:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24333,7 +23383,7 @@ Move_PETAL_DANCE: blendoff end -Move_RAZOR_LEAF: +Move_RAZOR_LEAF:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -24373,10 +23423,10 @@ Move_RAZOR_LEAF: blendoff end -Move_NATURE_POWER: +Move_NATURE_POWER:: @ No actual animation, uses the animation of a move from sNaturePowerMoves instead -Move_ANCIENT_POWER: +Move_ANCIENT_POWER:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24409,7 +23459,7 @@ Move_ANCIENT_POWER: blendoff end -Move_OCTAZOOKA: +Move_OCTAZOOKA:: loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER @@ -24426,7 +23476,7 @@ Move_OCTAZOOKA: waitforvisualfinish end -Move_MIST: +Move_MIST:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -24450,7 +23500,7 @@ MistCloud: delay 7 return -Move_HAZE: +Move_HAZE:: waitforvisualfinish playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 @@ -24460,7 +23510,7 @@ Move_HAZE: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK end -Move_FIRE_PUNCH: +Move_FIRE_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -24496,7 +23546,7 @@ FireSpreadEffect: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 return -Move_LEER: +Move_LEER:: loadspritegfx ANIM_TAG_LEER monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -24515,7 +23565,7 @@ Move_LEER: waitforvisualfinish end -Move_DREAM_EATER: +Move_DREAM_EATER:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -24582,7 +23632,7 @@ DreamEaterAbsorb: delay 4 return -Move_POISON_GAS: +Move_POISON_GAS:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD loadspritegfx ANIM_TAG_POISON_BUBBLE delay 0 @@ -24620,7 +23670,7 @@ Move_POISON_GAS: delay 0 end -Move_BIND: +Move_BIND:: createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, ANIM_ATTACKER goto BindWrap @@ -24635,11 +23685,11 @@ BindWrapSqueezeTarget: delay 16 return -Move_WRAP: +Move_WRAP:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 6, 4, 2, 4 goto BindWrap -Move_PSYBEAM: +Move_PSYBEAM:: loadspritegfx ANIM_TAG_GOLD_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24666,7 +23716,7 @@ PsybeamRings: delay 4 return -Move_HYPNOSIS: +Move_HYPNOSIS:: loadspritegfx ANIM_TAG_GOLD_RING call SetPsychicBackground call HypnosisRings @@ -24684,7 +23734,7 @@ HypnosisRings: delay 6 return -Move_PSYWAVE: +Move_PSYWAVE:: loadspritegfx ANIM_TAG_BLUE_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24708,7 +23758,7 @@ PsywaveRings: delay 4 return -Move_ZAP_CANNON: +Move_ZAP_CANNON:: loadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_SPARK_2 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER @@ -24729,7 +23779,7 @@ Move_ZAP_CANNON: waitforvisualfinish end -Move_STEEL_WING: +Move_STEEL_WING:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24756,7 +23806,7 @@ Move_STEEL_WING: blendoff end -Move_IRON_TAIL: +Move_IRON_TAIL:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK @@ -24775,7 +23825,7 @@ Move_IRON_TAIL: waitforvisualfinish end -Move_POISON_TAIL: +Move_POISON_TAIL:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24796,7 +23846,7 @@ Move_POISON_TAIL: waitforvisualfinish end -Move_METAL_CLAW: +Move_METAL_CLAW:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -24817,7 +23867,7 @@ Move_METAL_CLAW: waitforvisualfinish end -Move_NIGHT_SHADE: +Move_NIGHT_SHADE:: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -24836,7 +23886,7 @@ Move_NIGHT_SHADE: waitbgfadein end -Move_EGG_BOMB: +Move_EGG_BOMB:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_LARGE_FRESH_EGG playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -24861,7 +23911,7 @@ Move_EGG_BOMB: waitforvisualfinish end -Move_SHADOW_BALL: +Move_SHADOW_BALL:: loadspritegfx ANIM_TAG_SHADOW_BALL fadetobg BG_GHOST waitbgfadein @@ -24876,7 +23926,7 @@ Move_SHADOW_BALL: waitbgfadein end -Move_LICK: +Move_LICK:: loadspritegfx ANIM_TAG_LICK delay 15 playsewithpan SE_M_LICK, SOUND_PAN_TARGET @@ -24885,7 +23935,7 @@ Move_LICK: waitforvisualfinish end -Move_FOCUS_ENERGY: +Move_FOCUS_ENERGY:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -24898,7 +23948,7 @@ Move_FOCUS_ENERGY: waitforvisualfinish end -Move_BIDE: +Move_BIDE:: choosetwoturnanim BideSetUp, BideUnleash end BideSetUp: @@ -24938,7 +23988,7 @@ BideUnleash: blendoff end -Move_STRING_SHOT: +Move_STRING_SHOT:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24983,7 +24033,7 @@ StringShotThread: delay 1 return -Move_SPIDER_WEB: +Move_SPIDER_WEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -25020,7 +24070,7 @@ SpiderWebThread: delay 1 return -Move_RAZOR_WIND: +Move_RAZOR_WIND:: choosetwoturnanim RazorWindSetUp, RazorWindUnleash RazorWindEnd: waitforvisualfinish @@ -25058,7 +24108,7 @@ RazorWindUnleash: blendoff goto RazorWindEnd -Move_DISABLE: +Move_DISABLE:: loadspritegfx ANIM_TAG_SPARKLE_4 monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -25074,7 +24124,7 @@ Move_DISABLE: blendoff end -Move_RECOVER: +Move_RECOVER:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -25109,7 +24159,7 @@ RecoverAbsorbEffect: delay 3 return -Move_MIMIC: +Move_MIMIC:: loadspritegfx ANIM_TAG_ORBS setalpha 11, 5 monbg_static ANIM_DEF_PARTNER @@ -25128,7 +24178,7 @@ Move_MIMIC: blendoff end -Move_CONSTRICT: +Move_CONSTRICT:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2 @@ -25145,7 +24195,7 @@ Move_CONSTRICT: waitforvisualfinish end -Move_CURSE: +Move_CURSE:: choosetwoturnanim CurseGhost, CurseStats CurseGhost: loadspritegfx ANIM_TAG_NAIL @@ -25190,7 +24240,7 @@ CurseStats1: createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED return -Move_SOFT_BOILED: +Move_SOFT_BOILED:: loadspritegfx ANIM_TAG_BREAKING_EGG loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -25213,7 +24263,7 @@ Move_SOFT_BOILED: call HealingEffect2 end -Move_HEAL_BELL: +Move_HEAL_BELL:: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING @@ -25265,7 +24315,7 @@ HealBellRing: playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return -Move_FAKE_OUT: +Move_FAKE_OUT:: playsewithpan SE_M_FLATTER, 0 createvisualtask AnimTask_FakeOut, 5 waitforvisualfinish @@ -25276,7 +24326,7 @@ Move_FAKE_OUT: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE end -Move_SCARY_FACE: +Move_SCARY_FACE:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 0, 16, RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -25294,7 +24344,7 @@ Move_SCARY_FACE: waitforvisualfinish end -Move_SWEET_KISS: +Move_SWEET_KISS:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_ANGEL createsprite gAngelSpriteTemplate, ANIM_TARGET, 2, 16, -48 @@ -25313,7 +24363,7 @@ Move_SWEET_KISS: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 end -Move_LOVELY_KISS: +Move_LOVELY_KISS:: loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DEVIL createsprite gDevilSpriteTemplate, ANIM_TARGET, 2, 0, -24 @@ -25326,7 +24376,7 @@ Move_LOVELY_KISS: createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, -128, -22 end -Move_FURY_SWIPES: +Move_FURY_SWIPES:: loadspritegfx ANIM_TAG_SWIPE createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5 delay 4 @@ -25341,7 +24391,7 @@ Move_FURY_SWIPES: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1 end -Move_INGRAIN: +Move_INGRAIN:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 @@ -25371,7 +24421,7 @@ Move_INGRAIN: waitforvisualfinish end -Move_PRESENT: +Move_PRESENT:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_IsHealingMove, 2 createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1 @@ -25431,14 +24481,14 @@ PresentHeal: call HealingEffect2 end -Move_BATON_PASS: +Move_BATON_PASS:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end -Move_PERISH_SONG: +Move_PERISH_SONG:: loadspritegfx ANIM_TAG_MUSIC_NOTES_2 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 0 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 1, 1, 16 @@ -25474,7 +24524,7 @@ Move_PERISH_SONG: waitforvisualfinish end -Move_SLEEP_TALK: +Move_SLEEP_TALK:: loadspritegfx ANIM_TAG_LETTER_Z createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, ANIM_ATTACKER delay 20 @@ -25501,7 +24551,7 @@ Move_SLEEP_TALK: waitforvisualfinish end -Move_HYPER_FANG: +Move_HYPER_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 1 @@ -25532,7 +24582,7 @@ HyperFangInContest: fadetobg BG_IMPACT_CONTESTS goto HyperFangContinue -Move_TRI_ATTACK: +Move_TRI_ATTACK:: loadspritegfx ANIM_TAG_TRI_ATTACK_TRIANGLE createsprite gTriAttackTriangleSpriteTemplate, ANIM_TARGET, 2, 16, 0 playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER @@ -25581,7 +24631,7 @@ Move_TRI_ATTACK: waitforvisualfinish end -Move_WILL_O_WISP: +Move_WILL_O_WISP:: loadspritegfx ANIM_TAG_WISP_FIRE loadspritegfx ANIM_TAG_WISP_ORB monbg ANIM_DEF_PARTNER @@ -25612,7 +24662,7 @@ Move_WILL_O_WISP: clearmonbg ANIM_DEF_PARTNER end -Move_ENCORE: +Move_ENCORE:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 @@ -25632,7 +24682,7 @@ Move_ENCORE: createvisualtask AnimTask_RemoveSpotlight, 2 end -Move_TRICK: +Move_TRICK:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80 @@ -25660,7 +24710,7 @@ Move_TRICK: waitforvisualfinish end -Move_WISH: +Move_WISH:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK @@ -25676,7 +24726,7 @@ Move_WISH: waitforvisualfinish end -Move_STOCKPILE: +Move_STOCKPILE:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE @@ -25705,7 +24755,7 @@ StockpileAbsorb: delay 1 return -Move_SPIT_UP: +Move_SPIT_UP:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25752,7 +24802,7 @@ SpitUpStrongest: createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 240 goto SpitUpContinue -Move_SWALLOW: +Move_SWALLOW:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25788,7 +24838,7 @@ SwallowBest: call SwallowEffect goto SwallowContinue -Move_TRANSFORM: +Move_TRANSFORM:: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 @@ -25797,7 +24847,7 @@ Move_TRANSFORM: clearmonbg ANIM_ATTACKER end -Move_MORNING_SUN: +Move_MORNING_SUN:: loadspritegfx ANIM_TAG_GREEN_STAR loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 @@ -25829,7 +24879,7 @@ MorningSunStar: delay 5 return -Move_SWEET_SCENT: +Move_SWEET_SCENT:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 100, 0, 100 @@ -25867,7 +24917,7 @@ SweetScentEffect: delay 2 return -Move_HYPER_BEAM: +Move_HYPER_BEAM:: loadspritegfx ANIM_TAG_ORBS createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK waitforvisualfinish @@ -25917,7 +24967,7 @@ HyperBeamOrbs: delay 1 return -Move_FLATTER: +Move_FLATTER:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET @@ -25962,7 +25012,7 @@ CreateFlatterConfetti: createsprite gFlatterConfettiSpriteTemplate, ANIM_ATTACKER, 40, ANIM_TARGET return -Move_ROLE_PLAY: +Move_ROLE_PLAY:: monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK @@ -25977,7 +25027,7 @@ Move_ROLE_PLAY: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK end -Move_REFRESH: +Move_REFRESH:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER @@ -25991,7 +25041,7 @@ Move_REFRESH: createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end -Move_BLAZE_KICK: +Move_BLAZE_KICK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -26012,7 +25062,7 @@ Move_BLAZE_KICK: blendoff end -Move_HYPER_VOICE: +Move_HYPER_VOICE:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect @@ -26033,7 +25083,7 @@ HyperVoiceEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_SAND_TOMB: +Move_SAND_TOMB:: loadspritegfx ANIM_TAG_MUD_SAND createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 @@ -26061,7 +25111,7 @@ SandTombSwirlingDirt: delay 2 return -Move_SHEER_COLD: +Move_SHEER_COLD:: fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 @@ -26079,7 +25129,7 @@ Move_SHEER_COLD: waitbgfadein end -Move_ARM_THRUST: +Move_ARM_THRUST:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT splitbgprio ANIM_TARGET @@ -26106,13 +25156,13 @@ ArmThrustLeft: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 goto ArmThrustContinue -Move_MUDDY_WATER: +Move_MUDDY_WATER:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER waitforvisualfinish end -Move_BULLET_SEED: +Move_BULLET_SEED:: loadspritegfx ANIM_TAG_SEED createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 delay 5 @@ -26137,7 +25187,7 @@ Move_BULLET_SEED: waitforvisualfinish end -Move_DRAGON_CLAW: +Move_DRAGON_CLAW:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER @@ -26197,7 +25247,7 @@ DragonClawFireSpiral: return end -Move_MUD_SHOT: +Move_MUD_SHOT:: loadspritegfx ANIM_TAG_BROWN_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -26229,7 +25279,7 @@ MudShotOrbs: delay 2 return -Move_METEOR_MASH: +Move_METEOR_MASH:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -26254,7 +25304,7 @@ Move_METEOR_MASH: waitforvisualfinish end -Move_REVENGE: +Move_REVENGE:: loadspritegfx ANIM_TAG_PURPLE_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -26283,7 +25333,7 @@ Move_REVENGE: blendoff end -Move_POISON_FANG: +Move_POISON_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BITE, SOUND_PAN_TARGET @@ -26296,12 +25346,12 @@ Move_POISON_FANG: waitforvisualfinish end -Move_SUBSTITUTE: +Move_SUBSTITUTE:: playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER createvisualtask AnimTask_MonToSubstitute, 2 end -Move_FRENZY_PLANT: +Move_FRENZY_PLANT:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -26361,7 +25411,7 @@ Move_FRENZY_PLANT: blendoff end -Move_METAL_SOUND: +Move_METAL_SOUND:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -26381,7 +25431,7 @@ MetalSoundRings: delay 2 return -Move_FOCUS_PUNCH: +Move_FOCUS_PUNCH:: goto FocusPunch FocusPunchEnd: waitforvisualfinish @@ -26429,7 +25479,7 @@ FocusPunchInContest: fadetobg BG_IMPACT_CONTESTS goto FocusPunchContinue -Move_RETURN: +Move_RETURN:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -26566,7 +25616,7 @@ ReturnStrongestHit: waitforvisualfinish return -Move_COSMIC_POWER: +Move_COSMIC_POWER:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_COSMIC_POWER, 0 playsewithpan SE_M_COSMIC_POWER, 0 @@ -26591,7 +25641,7 @@ Move_COSMIC_POWER: waitforvisualfinish end -Move_BLAST_BURN: +Move_BLAST_BURN:: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26636,7 +25686,7 @@ Move_BLAST_BURN: blendoff end -Move_ROCK_TOMB: +Move_ROCK_TOMB:: loadspritegfx ANIM_TAG_X_SIGN loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1 @@ -26694,7 +25744,7 @@ UnsetBugBg: waitbgfadein return -Move_SILVER_WIND: +Move_SILVER_WIND:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 playsewithpan SE_M_MORNING_SUN, 0 @@ -26733,12 +25783,12 @@ Move_SILVER_WIND: call UnsetBugBg end -Move_SNATCH: +Move_SNATCH:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6 end -Move_DIVE: +Move_DIVE:: loadspritegfx ANIM_TAG_SPLASH loadspritegfx ANIM_TAG_SWEAT_BEAD choosetwoturnanim DiveSetUp, DiveAttack @@ -26783,7 +25833,7 @@ DiveAttackWaterDroplets: createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 1, 1 return -Move_ROCK_BLAST: +Move_ROCK_BLAST:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26801,7 +25851,7 @@ Move_ROCK_BLAST: waitforvisualfinish end -Move_OVERHEAT: +Move_OVERHEAT:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26882,7 +25932,7 @@ Move_OVERHEAT: waitforvisualfinish end -Move_HYDRO_CANNON: +Move_HYDRO_CANNON:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -26924,7 +25974,7 @@ HydroCannonBeam: createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 return -Move_ASTONISH: +Move_ASTONISH:: loadspritegfx ANIM_TAG_SWEAT_BEAD playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26937,7 +25987,7 @@ Move_ASTONISH: waitforvisualfinish end -Move_SEISMIC_TOSS: +Move_SEISMIC_TOSS:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS setarg 7, 0 @@ -27004,7 +26054,7 @@ SeismicTossRockScatter2: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 return -Move_MAGIC_COAT: +Move_MAGIC_COAT:: loadspritegfx ANIM_TAG_ORANGE_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -27014,7 +26064,7 @@ Move_MAGIC_COAT: blendoff end -Move_WATER_PULSE: +Move_WATER_PULSE:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_BLUE_RING_2 monbg ANIM_TARGET @@ -27045,7 +26095,7 @@ Move_WATER_PULSE: clearmonbg ANIM_DEF_PARTNER end -Move_PSYCHO_BOOST: +Move_PSYCHO_BOOST:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER fadetobg BG_PSYCHIC @@ -27072,7 +26122,7 @@ Move_PSYCHO_BOOST: call UnsetPsychicBg end -Move_KNOCK_OFF: +Move_KNOCK_OFF:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -27093,7 +26143,7 @@ Move_KNOCK_OFF: waitforvisualfinish end -Move_DOOM_DESIRE: +Move_DOOM_DESIRE:: createvisualtask GetIsDoomDesireHitTurn, 2 delay 1 monbg ANIM_ATK_PARTNER @@ -27112,7 +26162,7 @@ Move_DOOM_DESIRE: blendoff end -Move_SKY_UPPERCUT: +Move_SKY_UPPERCUT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -27156,7 +26206,7 @@ Move_SKY_UPPERCUT: waitbgfadein end -Move_SECRET_POWER: +Move_SECRET_POWER:: createvisualtask AnimTask_GetFieldTerrain, 5 jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM @@ -27201,7 +26251,7 @@ Move_SECRET_POWER: goto Move_SLAM .endif -Move_TWISTER: +Move_TWISTER:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -27247,7 +26297,7 @@ Move_TWISTER: blendoff end -Move_MAGICAL_LEAF: +Move_MAGICAL_LEAF:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -27291,7 +26341,7 @@ Move_MAGICAL_LEAF: blendoff end -Move_ICE_BALL: +Move_ICE_BALL:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_GetIceBallCounter, 5, 0 @@ -27381,7 +26431,7 @@ IceBallImpactShard: createsprite gIceBallImpactShardSpriteTemplate, ANIM_TARGET, 4, -12, -16 return -Move_WEATHER_BALL: +Move_WEATHER_BALL:: loadspritegfx ANIM_TAG_WEATHER_BALL createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER delay 8 @@ -27477,7 +26527,7 @@ WeatherBallIce: waitforvisualfinish end -Move_COUNT: +Move_COUNT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -28869,7 +27919,7 @@ Move_BREAKNECK_BLITZ:: end -Move_ALL_OUT_PUMMELING: +Move_ALL_OUT_PUMMELING:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_METEOR @@ -28959,7 +28009,7 @@ Move_ALL_OUT_PUMMELING: end -Move_SUPERSONIC_SKYSTRIKE: +Move_SUPERSONIC_SKYSTRIKE:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -29032,7 +28082,7 @@ FinishSupersonicSkystrike: end -Move_ACID_DOWNPOUR: +Move_ACID_DOWNPOUR:: loadspritegfx ANIM_TAG_BLUE_ORB @ reversal loadspritegfx ANIM_TAG_POISON_JAB @ poison jab loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles @@ -29118,7 +28168,7 @@ AcidDownpourFlareOnAttacker: return -Move_TECTONIC_RAGE: +Move_TECTONIC_RAGE:: loadspritegfx ANIM_TAG_DIRT_MOUND @ dig loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks loadspritegfx ANIM_TAG_ROCKS @ rollout @@ -34425,163 +33475,163 @@ General_SetWeather:: jumpreteq 4, General_Hail end -Move_MAX_GUARD: +Move_MAX_GUARD:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PROTECT end -Move_MAX_STRIKE: -Move_G_MAX_REPLENISH: +Move_MAX_STRIKE:: +Move_G_MAX_REPLENISH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_GIGA_IMPACT end -Move_MAX_AIRSTREAM: -Move_G_MAX_WIND_RAGE: +Move_MAX_AIRSTREAM:: +Move_G_MAX_WIND_RAGE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_AEROBLAST end -Move_MAX_OOZE: -Move_G_MAX_MALODOR: +Move_MAX_OOZE:: +Move_G_MAX_MALODOR:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_GUNK_SHOT end -Move_G_MAX_WILDFIRE: -Move_G_MAX_FIREBALL: -Move_G_MAX_CENTIFERNO: -Move_MAX_FLARE: +Move_G_MAX_WILDFIRE:: +Move_G_MAX_FIREBALL:: +Move_G_MAX_CENTIFERNO:: +Move_MAX_FLARE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_BLAST_BURN end -Move_G_MAX_CANNONADE: -Move_G_MAX_HYDROSNIPE: -Move_G_MAX_FOAM_BURST: -Move_MAX_GEYSER: +Move_G_MAX_CANNONADE:: +Move_G_MAX_HYDROSNIPE:: +Move_G_MAX_FOAM_BURST:: +Move_MAX_GEYSER:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_HYDRO_CANNON end -Move_G_MAX_VINE_LASH: -Move_G_MAX_DRUM_SOLO: -Move_G_MAX_TARTNESS: -Move_G_MAX_SWEETNESS: -Move_MAX_OVERGROWTH: +Move_G_MAX_VINE_LASH:: +Move_G_MAX_DRUM_SOLO:: +Move_G_MAX_TARTNESS:: +Move_G_MAX_SWEETNESS:: +Move_MAX_OVERGROWTH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_FRENZY_PLANT end -Move_MAX_LIGHTNING: -Move_G_MAX_STUN_SHOCK: +Move_MAX_LIGHTNING:: +Move_G_MAX_STUN_SHOCK:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_ZAP_CANNON end -Move_G_MAX_CHI_STRIKE: -Move_G_MAX_ONE_BLOW: -Move_G_MAX_RAPID_FLOW: -Move_MAX_KNUCKLE: +Move_G_MAX_CHI_STRIKE:: +Move_G_MAX_ONE_BLOW:: +Move_G_MAX_RAPID_FLOW:: +Move_MAX_KNUCKLE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_CLOSE_COMBAT end -Move_G_MAX_RESONANCE: -Move_MAX_HAILSTORM: +Move_G_MAX_RESONANCE:: +Move_MAX_HAILSTORM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_SHEER_COLD end -Move_G_MAX_SANDBLAST: -Move_MAX_QUAKE: +Move_G_MAX_SANDBLAST:: +Move_MAX_QUAKE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_FISSURE end -Move_G_MAX_BEFUDDLE: -Move_MAX_FLUTTERBY: +Move_G_MAX_BEFUDDLE:: +Move_MAX_FLUTTERBY:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_BUG_BUZZ end -Move_G_MAX_STEELSURGE: -Move_G_MAX_MELTDOWN: -Move_MAX_STEELSPIKE: +Move_G_MAX_STEELSURGE:: +Move_G_MAX_MELTDOWN:: +Move_MAX_STEELSPIKE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_HEAVY_SLAM end -Move_G_MAX_TERROR: -Move_MAX_PHANTASM: +Move_G_MAX_TERROR:: +Move_MAX_PHANTASM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PHANTOM_FORCE end -Move_G_MAX_GRAVITAS: -Move_MAX_MINDSTORM: +Move_G_MAX_GRAVITAS:: +Move_MAX_MINDSTORM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PSYCHO_BOOST end -Move_G_MAX_SMITE: -Move_G_MAX_FINALE: -Move_MAX_STARFALL: +Move_G_MAX_SMITE:: +Move_G_MAX_FINALE:: +Move_MAX_STARFALL:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_MOONBLAST end -Move_G_MAX_STONESURGE: -Move_G_MAX_VOLCALITH: -Move_MAX_ROCKFALL: +Move_G_MAX_STONESURGE:: +Move_G_MAX_VOLCALITH:: +Move_MAX_ROCKFALL:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_ROCK_WRECKER end -Move_G_MAX_DEPLETION: -Move_MAX_WYRMWIND: +Move_G_MAX_DEPLETION:: +Move_MAX_WYRMWIND:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_SPACIAL_REND end -Move_G_MAX_SNOOZE: -Move_MAX_DARKNESS: +Move_G_MAX_SNOOZE:: +Move_MAX_DARKNESS:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_DARK_PULSE end -Move_G_MAX_CUDDLE: +Move_G_MAX_CUDDLE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_COVET end -Move_G_MAX_VOLT_CRASH: +Move_G_MAX_VOLT_CRASH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_VOLT_TACKLE end -Move_G_MAX_GOLD_RUSH: +Move_G_MAX_GOLD_RUSH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PAY_DAY diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h new file mode 100644 index 0000000000..d97aaa421d --- /dev/null +++ b/include/battle_anim_scripts.h @@ -0,0 +1,940 @@ +#ifndef GUARD_BATTLE_ANIM_SCRIPTS_H +#define GUARD_BATTLE_ANIM_SCRIPTS_H + +extern const u8 Move_NONE[]; +extern const u8 Move_POUND[]; +extern const u8 Move_KARATE_CHOP[]; +extern const u8 Move_DOUBLE_SLAP[]; +extern const u8 Move_COMET_PUNCH[]; +extern const u8 Move_MEGA_PUNCH[]; +extern const u8 Move_PAY_DAY[]; +extern const u8 Move_FIRE_PUNCH[]; +extern const u8 Move_ICE_PUNCH[]; +extern const u8 Move_THUNDER_PUNCH[]; +extern const u8 Move_SCRATCH[]; +extern const u8 Move_VISE_GRIP[]; +extern const u8 Move_GUILLOTINE[]; +extern const u8 Move_RAZOR_WIND[]; +extern const u8 Move_SWORDS_DANCE[]; +extern const u8 Move_CUT[]; +extern const u8 Move_GUST[]; +extern const u8 Move_WING_ATTACK[]; +extern const u8 Move_WHIRLWIND[]; +extern const u8 Move_FLY[]; +extern const u8 Move_BIND[]; +extern const u8 Move_SLAM[]; +extern const u8 Move_VINE_WHIP[]; +extern const u8 Move_STOMP[]; +extern const u8 Move_DOUBLE_KICK[]; +extern const u8 Move_MEGA_KICK[]; +extern const u8 Move_JUMP_KICK[]; +extern const u8 Move_ROLLING_KICK[]; +extern const u8 Move_SAND_ATTACK[]; +extern const u8 Move_HEADBUTT[]; +extern const u8 Move_HORN_ATTACK[]; +extern const u8 Move_FURY_ATTACK[]; +extern const u8 Move_HORN_DRILL[]; +extern const u8 Move_TACKLE[]; +extern const u8 Move_BODY_SLAM[]; +extern const u8 Move_WRAP[]; +extern const u8 Move_TAKE_DOWN[]; +extern const u8 Move_THRASH[]; +extern const u8 Move_DOUBLE_EDGE[]; +extern const u8 Move_TAIL_WHIP[]; +extern const u8 Move_POISON_STING[]; +extern const u8 Move_TWINEEDLE[]; +extern const u8 Move_PIN_MISSILE[]; +extern const u8 Move_LEER[]; +extern const u8 Move_BITE[]; +extern const u8 Move_GROWL[]; +extern const u8 Move_ROAR[]; +extern const u8 Move_SING[]; +extern const u8 Move_SUPERSONIC[]; +extern const u8 Move_SONIC_BOOM[]; +extern const u8 Move_DISABLE[]; +extern const u8 Move_ACID[]; +extern const u8 Move_EMBER[]; +extern const u8 Move_FLAMETHROWER[]; +extern const u8 Move_MIST[]; +extern const u8 Move_WATER_GUN[]; +extern const u8 Move_HYDRO_PUMP[]; +extern const u8 Move_SURF[]; +extern const u8 Move_ICE_BEAM[]; +extern const u8 Move_BLIZZARD[]; +extern const u8 Move_PSYBEAM[]; +extern const u8 Move_BUBBLE_BEAM[]; +extern const u8 Move_AURORA_BEAM[]; +extern const u8 Move_HYPER_BEAM[]; +extern const u8 Move_PECK[]; +extern const u8 Move_DRILL_PECK[]; +extern const u8 Move_SUBMISSION[]; +extern const u8 Move_LOW_KICK[]; +extern const u8 Move_COUNTER[]; +extern const u8 Move_SEISMIC_TOSS[]; +extern const u8 Move_STRENGTH[]; +extern const u8 Move_ABSORB[]; +extern const u8 Move_MEGA_DRAIN[]; +extern const u8 Move_LEECH_SEED[]; +extern const u8 Move_GROWTH[]; +extern const u8 Move_RAZOR_LEAF[]; +extern const u8 Move_SOLAR_BEAM[]; +extern const u8 Move_POISON_POWDER[]; +extern const u8 Move_STUN_SPORE[]; +extern const u8 Move_SLEEP_POWDER[]; +extern const u8 Move_PETAL_DANCE[]; +extern const u8 Move_STRING_SHOT[]; +extern const u8 Move_DRAGON_RAGE[]; +extern const u8 Move_FIRE_SPIN[]; +extern const u8 Move_THUNDER_SHOCK[]; +extern const u8 Move_THUNDERBOLT[]; +extern const u8 Move_THUNDER_WAVE[]; +extern const u8 Move_THUNDER[]; +extern const u8 Move_ROCK_THROW[]; +extern const u8 Move_EARTHQUAKE[]; +extern const u8 Move_FISSURE[]; +extern const u8 Move_DIG[]; +extern const u8 Move_TOXIC[]; +extern const u8 Move_CONFUSION[]; +extern const u8 Move_PSYCHIC[]; +extern const u8 Move_HYPNOSIS[]; +extern const u8 Move_MEDITATE[]; +extern const u8 Move_AGILITY[]; +extern const u8 Move_QUICK_ATTACK[]; +extern const u8 Move_RAGE[]; +extern const u8 Move_TELEPORT[]; +extern const u8 Move_NIGHT_SHADE[]; +extern const u8 Move_MIMIC[]; +extern const u8 Move_SCREECH[]; +extern const u8 Move_DOUBLE_TEAM[]; +extern const u8 Move_RECOVER[]; +extern const u8 Move_HARDEN[]; +extern const u8 Move_MINIMIZE[]; +extern const u8 Move_SMOKESCREEN[]; +extern const u8 Move_CONFUSE_RAY[]; +extern const u8 Move_WITHDRAW[]; +extern const u8 Move_DEFENSE_CURL[]; +extern const u8 Move_BARRIER[]; +extern const u8 Move_LIGHT_SCREEN[]; +extern const u8 Move_HAZE[]; +extern const u8 Move_REFLECT[]; +extern const u8 Move_FOCUS_ENERGY[]; +extern const u8 Move_BIDE[]; +extern const u8 Move_METRONOME[]; +extern const u8 Move_MIRROR_MOVE[]; +extern const u8 Move_SELF_DESTRUCT[]; +extern const u8 Move_EGG_BOMB[]; +extern const u8 Move_LICK[]; +extern const u8 Move_SMOG[]; +extern const u8 Move_SLUDGE[]; +extern const u8 Move_BONE_CLUB[]; +extern const u8 Move_FIRE_BLAST[]; +extern const u8 Move_WATERFALL[]; +extern const u8 Move_CLAMP[]; +extern const u8 Move_SWIFT[]; +extern const u8 Move_SKULL_BASH[]; +extern const u8 Move_SPIKE_CANNON[]; +extern const u8 Move_CONSTRICT[]; +extern const u8 Move_AMNESIA[]; +extern const u8 Move_KINESIS[]; +extern const u8 Move_SOFT_BOILED[]; +extern const u8 Move_HIGH_JUMP_KICK[]; +extern const u8 Move_GLARE[]; +extern const u8 Move_DREAM_EATER[]; +extern const u8 Move_POISON_GAS[]; +extern const u8 Move_BARRAGE[]; +extern const u8 Move_LEECH_LIFE[]; +extern const u8 Move_LOVELY_KISS[]; +extern const u8 Move_SKY_ATTACK[]; +extern const u8 Move_TRANSFORM[]; +extern const u8 Move_BUBBLE[]; +extern const u8 Move_DIZZY_PUNCH[]; +extern const u8 Move_SPORE[]; +extern const u8 Move_FLASH[]; +extern const u8 Move_PSYWAVE[]; +extern const u8 Move_SPLASH[]; +extern const u8 Move_ACID_ARMOR[]; +extern const u8 Move_CRABHAMMER[]; +extern const u8 Move_EXPLOSION[]; +extern const u8 Move_FURY_SWIPES[]; +extern const u8 Move_BONEMERANG[]; +extern const u8 Move_REST[]; +extern const u8 Move_ROCK_SLIDE[]; +extern const u8 Move_HYPER_FANG[]; +extern const u8 Move_SHARPEN[]; +extern const u8 Move_CONVERSION[]; +extern const u8 Move_TRI_ATTACK[]; +extern const u8 Move_SUPER_FANG[]; +extern const u8 Move_SLASH[]; +extern const u8 Move_SUBSTITUTE[]; +extern const u8 Move_STRUGGLE[]; +extern const u8 Move_SKETCH[]; +extern const u8 Move_TRIPLE_KICK[]; +extern const u8 Move_THIEF[]; +extern const u8 Move_SPIDER_WEB[]; +extern const u8 Move_MIND_READER[]; +extern const u8 Move_NIGHTMARE[]; +extern const u8 Move_FLAME_WHEEL[]; +extern const u8 Move_SNORE[]; +extern const u8 Move_CURSE[]; +extern const u8 Move_FLAIL[]; +extern const u8 Move_CONVERSION_2[]; +extern const u8 Move_AEROBLAST[]; +extern const u8 Move_COTTON_SPORE[]; +extern const u8 Move_REVERSAL[]; +extern const u8 Move_SPITE[]; +extern const u8 Move_POWDER_SNOW[]; +extern const u8 Move_PROTECT[]; +extern const u8 Move_MACH_PUNCH[]; +extern const u8 Move_SCARY_FACE[]; +extern const u8 Move_FEINT_ATTACK[]; +extern const u8 Move_SWEET_KISS[]; +extern const u8 Move_BELLY_DRUM[]; +extern const u8 Move_SLUDGE_BOMB[]; +extern const u8 Move_MUD_SLAP[]; +extern const u8 Move_OCTAZOOKA[]; +extern const u8 Move_SPIKES[]; +extern const u8 Move_ZAP_CANNON[]; +extern const u8 Move_FORESIGHT[]; +extern const u8 Move_DESTINY_BOND[]; +extern const u8 Move_PERISH_SONG[]; +extern const u8 Move_ICY_WIND[]; +extern const u8 Move_DETECT[]; +extern const u8 Move_BONE_RUSH[]; +extern const u8 Move_LOCK_ON[]; +extern const u8 Move_OUTRAGE[]; +extern const u8 Move_SANDSTORM[]; +extern const u8 Move_GIGA_DRAIN[]; +extern const u8 Move_ENDURE[]; +extern const u8 Move_CHARM[]; +extern const u8 Move_ROLLOUT[]; +extern const u8 Move_FALSE_SWIPE[]; +extern const u8 Move_SWAGGER[]; +extern const u8 Move_MILK_DRINK[]; +extern const u8 Move_SPARK[]; +extern const u8 Move_FURY_CUTTER[]; +extern const u8 Move_STEEL_WING[]; +extern const u8 Move_MEAN_LOOK[]; +extern const u8 Move_ATTRACT[]; +extern const u8 Move_SLEEP_TALK[]; +extern const u8 Move_HEAL_BELL[]; +extern const u8 Move_RETURN[]; +extern const u8 Move_PRESENT[]; +extern const u8 Move_FRUSTRATION[]; +extern const u8 Move_SAFEGUARD[]; +extern const u8 Move_PAIN_SPLIT[]; +extern const u8 Move_SACRED_FIRE[]; +extern const u8 Move_MAGNITUDE[]; +extern const u8 Move_DYNAMIC_PUNCH[]; +extern const u8 Move_MEGAHORN[]; +extern const u8 Move_DRAGON_BREATH[]; +extern const u8 Move_BATON_PASS[]; +extern const u8 Move_ENCORE[]; +extern const u8 Move_PURSUIT[]; +extern const u8 Move_RAPID_SPIN[]; +extern const u8 Move_SWEET_SCENT[]; +extern const u8 Move_IRON_TAIL[]; +extern const u8 Move_METAL_CLAW[]; +extern const u8 Move_VITAL_THROW[]; +extern const u8 Move_MORNING_SUN[]; +extern const u8 Move_SYNTHESIS[]; +extern const u8 Move_MOONLIGHT[]; +extern const u8 Move_HIDDEN_POWER[]; +extern const u8 Move_CROSS_CHOP[]; +extern const u8 Move_TWISTER[]; +extern const u8 Move_RAIN_DANCE[]; +extern const u8 Move_SUNNY_DAY[]; +extern const u8 Move_CRUNCH[]; +extern const u8 Move_MIRROR_COAT[]; +extern const u8 Move_PSYCH_UP[]; +extern const u8 Move_EXTREME_SPEED[]; +extern const u8 Move_ANCIENT_POWER[]; +extern const u8 Move_SHADOW_BALL[]; +extern const u8 Move_FUTURE_SIGHT[]; +extern const u8 Move_ROCK_SMASH[]; +extern const u8 Move_WHIRLPOOL[]; +extern const u8 Move_BEAT_UP[]; +extern const u8 Move_FAKE_OUT[]; +extern const u8 Move_UPROAR[]; +extern const u8 Move_STOCKPILE[]; +extern const u8 Move_SPIT_UP[]; +extern const u8 Move_SWALLOW[]; +extern const u8 Move_HEAT_WAVE[]; +extern const u8 Move_HAIL[]; +extern const u8 Move_TORMENT[]; +extern const u8 Move_FLATTER[]; +extern const u8 Move_WILL_O_WISP[]; +extern const u8 Move_MEMENTO[]; +extern const u8 Move_FACADE[]; +extern const u8 Move_FOCUS_PUNCH[]; +extern const u8 Move_SMELLING_SALTS[]; +extern const u8 Move_FOLLOW_ME[]; +extern const u8 Move_NATURE_POWER[]; +extern const u8 Move_CHARGE[]; +extern const u8 Move_TAUNT[]; +extern const u8 Move_HELPING_HAND[]; +extern const u8 Move_TRICK[]; +extern const u8 Move_ROLE_PLAY[]; +extern const u8 Move_WISH[]; +extern const u8 Move_ASSIST[]; +extern const u8 Move_INGRAIN[]; +extern const u8 Move_SUPERPOWER[]; +extern const u8 Move_MAGIC_COAT[]; +extern const u8 Move_RECYCLE[]; +extern const u8 Move_REVENGE[]; +extern const u8 Move_BRICK_BREAK[]; +extern const u8 Move_YAWN[]; +extern const u8 Move_KNOCK_OFF[]; +extern const u8 Move_ENDEAVOR[]; +extern const u8 Move_ERUPTION[]; +extern const u8 Move_SKILL_SWAP[]; +extern const u8 Move_IMPRISON[]; +extern const u8 Move_REFRESH[]; +extern const u8 Move_GRUDGE[]; +extern const u8 Move_SNATCH[]; +extern const u8 Move_SECRET_POWER[]; +extern const u8 Move_DIVE[]; +extern const u8 Move_ARM_THRUST[]; +extern const u8 Move_CAMOUFLAGE[]; +extern const u8 Move_TAIL_GLOW[]; +extern const u8 Move_LUSTER_PURGE[]; +extern const u8 Move_MIST_BALL[]; +extern const u8 Move_FEATHER_DANCE[]; +extern const u8 Move_TEETER_DANCE[]; +extern const u8 Move_BLAZE_KICK[]; +extern const u8 Move_MUD_SPORT[]; +extern const u8 Move_ICE_BALL[]; +extern const u8 Move_NEEDLE_ARM[]; +extern const u8 Move_SLACK_OFF[]; +extern const u8 Move_HYPER_VOICE[]; +extern const u8 Move_POISON_FANG[]; +extern const u8 Move_CRUSH_CLAW[]; +extern const u8 Move_BLAST_BURN[]; +extern const u8 Move_HYDRO_CANNON[]; +extern const u8 Move_METEOR_MASH[]; +extern const u8 Move_ASTONISH[]; +extern const u8 Move_WEATHER_BALL[]; +extern const u8 Move_AROMATHERAPY[]; +extern const u8 Move_FAKE_TEARS[]; +extern const u8 Move_AIR_CUTTER[]; +extern const u8 Move_OVERHEAT[]; +extern const u8 Move_ODOR_SLEUTH[]; +extern const u8 Move_ROCK_TOMB[]; +extern const u8 Move_SILVER_WIND[]; +extern const u8 Move_METAL_SOUND[]; +extern const u8 Move_GRASS_WHISTLE[]; +extern const u8 Move_TICKLE[]; +extern const u8 Move_COSMIC_POWER[]; +extern const u8 Move_WATER_SPOUT[]; +extern const u8 Move_SIGNAL_BEAM[]; +extern const u8 Move_SHADOW_PUNCH[]; +extern const u8 Move_EXTRASENSORY[]; +extern const u8 Move_SKY_UPPERCUT[]; +extern const u8 Move_SAND_TOMB[]; +extern const u8 Move_SHEER_COLD[]; +extern const u8 Move_MUDDY_WATER[]; +extern const u8 Move_BULLET_SEED[]; +extern const u8 Move_AERIAL_ACE[]; +extern const u8 Move_ICICLE_SPEAR[]; +extern const u8 Move_IRON_DEFENSE[]; +extern const u8 Move_BLOCK[]; +extern const u8 Move_HOWL[]; +extern const u8 Move_DRAGON_CLAW[]; +extern const u8 Move_FRENZY_PLANT[]; +extern const u8 Move_BULK_UP[]; +extern const u8 Move_BOUNCE[]; +extern const u8 Move_MUD_SHOT[]; +extern const u8 Move_POISON_TAIL[]; +extern const u8 Move_COVET[]; +extern const u8 Move_VOLT_TACKLE[]; +extern const u8 Move_MAGICAL_LEAF[]; +extern const u8 Move_WATER_SPORT[]; +extern const u8 Move_CALM_MIND[]; +extern const u8 Move_LEAF_BLADE[]; +extern const u8 Move_DRAGON_DANCE[]; +extern const u8 Move_ROCK_BLAST[]; +extern const u8 Move_SHOCK_WAVE[]; +extern const u8 Move_WATER_PULSE[]; +extern const u8 Move_DOOM_DESIRE[]; +extern const u8 Move_PSYCHO_BOOST[]; +extern const u8 Move_ROOST[]; +extern const u8 Move_GRAVITY[]; +extern const u8 Move_MIRACLE_EYE[]; +extern const u8 Move_WAKE_UP_SLAP[]; +extern const u8 Move_HAMMER_ARM[]; +extern const u8 Move_GYRO_BALL[]; +extern const u8 Move_HEALING_WISH[]; +extern const u8 Move_BRINE[]; +extern const u8 Move_NATURAL_GIFT[]; +extern const u8 Move_FEINT[]; +extern const u8 Move_PLUCK[]; +extern const u8 Move_TAILWIND[]; +extern const u8 Move_ACUPRESSURE[]; +extern const u8 Move_METAL_BURST[]; +extern const u8 Move_U_TURN[]; +extern const u8 Move_CLOSE_COMBAT[]; +extern const u8 Move_PAYBACK[]; +extern const u8 Move_ASSURANCE[]; +extern const u8 Move_EMBARGO[]; +extern const u8 Move_FLING[]; +extern const u8 Move_PSYCHO_SHIFT[]; +extern const u8 Move_TRUMP_CARD[]; +extern const u8 Move_HEAL_BLOCK[]; +extern const u8 Move_WRING_OUT[]; +extern const u8 Move_POWER_TRICK[]; +extern const u8 Move_GASTRO_ACID[]; +extern const u8 Move_LUCKY_CHANT[]; +extern const u8 Move_ME_FIRST[]; +extern const u8 Move_COPYCAT[]; +extern const u8 Move_POWER_SWAP[]; +extern const u8 Move_GUARD_SWAP[]; +extern const u8 Move_PUNISHMENT[]; +extern const u8 Move_LAST_RESORT[]; +extern const u8 Move_WORRY_SEED[]; +extern const u8 Move_SUCKER_PUNCH[]; +extern const u8 Move_TOXIC_SPIKES[]; +extern const u8 Move_HEART_SWAP[]; +extern const u8 Move_AQUA_RING[]; +extern const u8 Move_MAGNET_RISE[]; +extern const u8 Move_FLARE_BLITZ[]; +extern const u8 Move_FORCE_PALM[]; +extern const u8 Move_AURA_SPHERE[]; +extern const u8 Move_ROCK_POLISH[]; +extern const u8 Move_POISON_JAB[]; +extern const u8 Move_DARK_PULSE[]; +extern const u8 Move_NIGHT_SLASH[]; +extern const u8 Move_AQUA_TAIL[]; +extern const u8 Move_SEED_BOMB[]; +extern const u8 Move_AIR_SLASH[]; +extern const u8 Move_X_SCISSOR[]; +extern const u8 Move_BUG_BUZZ[]; +extern const u8 Move_DRAGON_PULSE[]; +extern const u8 Move_DRAGON_RUSH[]; +extern const u8 Move_POWER_GEM[]; +extern const u8 Move_DRAIN_PUNCH[]; +extern const u8 Move_VACUUM_WAVE[]; +extern const u8 Move_FOCUS_BLAST[]; +extern const u8 Move_ENERGY_BALL[]; +extern const u8 Move_BRAVE_BIRD[]; +extern const u8 Move_EARTH_POWER[]; +extern const u8 Move_SWITCHEROO[]; +extern const u8 Move_GIGA_IMPACT[]; +extern const u8 Move_NASTY_PLOT[]; +extern const u8 Move_BULLET_PUNCH[]; +extern const u8 Move_AVALANCHE[]; +extern const u8 Move_ICE_SHARD[]; +extern const u8 Move_SHADOW_CLAW[]; +extern const u8 Move_THUNDER_FANG[]; +extern const u8 Move_ICE_FANG[]; +extern const u8 Move_FIRE_FANG[]; +extern const u8 Move_SHADOW_SNEAK[]; +extern const u8 Move_MUD_BOMB[]; +extern const u8 Move_PSYCHO_CUT[]; +extern const u8 Move_ZEN_HEADBUTT[]; +extern const u8 Move_MIRROR_SHOT[]; +extern const u8 Move_FLASH_CANNON[]; +extern const u8 Move_ROCK_CLIMB[]; +extern const u8 Move_DEFOG[]; +extern const u8 Move_TRICK_ROOM[]; +extern const u8 Move_DRACO_METEOR[]; +extern const u8 Move_DISCHARGE[]; +extern const u8 Move_LAVA_PLUME[]; +extern const u8 Move_LEAF_STORM[]; +extern const u8 Move_POWER_WHIP[]; +extern const u8 Move_ROCK_WRECKER[]; +extern const u8 Move_CROSS_POISON[]; +extern const u8 Move_GUNK_SHOT[]; +extern const u8 Move_IRON_HEAD[]; +extern const u8 Move_MAGNET_BOMB[]; +extern const u8 Move_STONE_EDGE[]; +extern const u8 Move_CAPTIVATE[]; +extern const u8 Move_STEALTH_ROCK[]; +extern const u8 Move_GRASS_KNOT[]; +extern const u8 Move_CHATTER[]; +extern const u8 Move_JUDGMENT[]; +extern const u8 Move_BUG_BITE[]; +extern const u8 Move_CHARGE_BEAM[]; +extern const u8 Move_WOOD_HAMMER[]; +extern const u8 Move_AQUA_JET[]; +extern const u8 Move_ATTACK_ORDER[]; +extern const u8 Move_DEFEND_ORDER[]; +extern const u8 Move_HEAL_ORDER[]; +extern const u8 Move_HEAD_SMASH[]; +extern const u8 Move_DOUBLE_HIT[]; +extern const u8 Move_ROAR_OF_TIME[]; +extern const u8 Move_SPACIAL_REND[]; +extern const u8 Move_LUNAR_DANCE[]; +extern const u8 Move_CRUSH_GRIP[]; +extern const u8 Move_MAGMA_STORM[]; +extern const u8 Move_DARK_VOID[]; +extern const u8 Move_SEED_FLARE[]; +extern const u8 Move_OMINOUS_WIND[]; +extern const u8 Move_SHADOW_FORCE[]; +extern const u8 Move_HONE_CLAWS[]; +extern const u8 Move_WIDE_GUARD[]; +extern const u8 Move_GUARD_SPLIT[]; +extern const u8 Move_POWER_SPLIT[]; +extern const u8 Move_WONDER_ROOM[]; +extern const u8 Move_PSYSHOCK[]; +extern const u8 Move_VENOSHOCK[]; +extern const u8 Move_AUTOTOMIZE[]; +extern const u8 Move_RAGE_POWDER[]; +extern const u8 Move_TELEKINESIS[]; +extern const u8 Move_MAGIC_ROOM[]; +extern const u8 Move_SMACK_DOWN[]; +extern const u8 Move_STORM_THROW[]; +extern const u8 Move_FLAME_BURST[]; +extern const u8 Move_SLUDGE_WAVE[]; +extern const u8 Move_QUIVER_DANCE[]; +extern const u8 Move_HEAVY_SLAM[]; +extern const u8 Move_SYNCHRONOISE[]; +extern const u8 Move_ELECTRO_BALL[]; +extern const u8 Move_SOAK[]; +extern const u8 Move_FLAME_CHARGE[]; +extern const u8 Move_COIL[]; +extern const u8 Move_LOW_SWEEP[]; +extern const u8 Move_ACID_SPRAY[]; +extern const u8 Move_FOUL_PLAY[]; +extern const u8 Move_SIMPLE_BEAM[]; +extern const u8 Move_ENTRAINMENT[]; +extern const u8 Move_AFTER_YOU[]; +extern const u8 Move_ROUND[]; +extern const u8 Move_ECHOED_VOICE[]; +extern const u8 Move_CHIP_AWAY[]; +extern const u8 Move_CLEAR_SMOG[]; +extern const u8 Move_STORED_POWER[]; +extern const u8 Move_QUICK_GUARD[]; +extern const u8 Move_ALLY_SWITCH[]; +extern const u8 Move_SCALD[]; +extern const u8 Move_SHELL_SMASH[]; +extern const u8 Move_HEAL_PULSE[]; +extern const u8 Move_HEX[]; +extern const u8 Move_SKY_DROP[]; +extern const u8 Move_SHIFT_GEAR[]; +extern const u8 Move_CIRCLE_THROW[]; +extern const u8 Move_INCINERATE[]; +extern const u8 Move_QUASH[]; +extern const u8 Move_ACROBATICS[]; +extern const u8 Move_REFLECT_TYPE[]; +extern const u8 Move_RETALIATE[]; +extern const u8 Move_FINAL_GAMBIT[]; +extern const u8 Move_BESTOW[]; +extern const u8 Move_INFERNO[]; +extern const u8 Move_WATER_PLEDGE[]; +extern const u8 Move_FIRE_PLEDGE[]; +extern const u8 Move_GRASS_PLEDGE[]; +extern const u8 Move_VOLT_SWITCH[]; +extern const u8 Move_STRUGGLE_BUG[]; +extern const u8 Move_BULLDOZE[]; +extern const u8 Move_FROST_BREATH[]; +extern const u8 Move_DRAGON_TAIL[]; +extern const u8 Move_WORK_UP[]; +extern const u8 Move_ELECTROWEB[]; +extern const u8 Move_WILD_CHARGE[]; +extern const u8 Move_DRILL_RUN[]; +extern const u8 Move_DUAL_CHOP[]; +extern const u8 Move_HEART_STAMP[]; +extern const u8 Move_HORN_LEECH[]; +extern const u8 Move_SACRED_SWORD[]; +extern const u8 Move_RAZOR_SHELL[]; +extern const u8 Move_HEAT_CRASH[]; +extern const u8 Move_LEAF_TORNADO[]; +extern const u8 Move_STEAMROLLER[]; +extern const u8 Move_COTTON_GUARD[]; +extern const u8 Move_NIGHT_DAZE[]; +extern const u8 Move_PSYSTRIKE[]; +extern const u8 Move_TAIL_SLAP[]; +extern const u8 Move_HURRICANE[]; +extern const u8 Move_HEAD_CHARGE[]; +extern const u8 Move_GEAR_GRIND[]; +extern const u8 Move_SEARING_SHOT[]; +extern const u8 Move_TECHNO_BLAST[]; +extern const u8 Move_RELIC_SONG[]; +extern const u8 Move_SECRET_SWORD[]; +extern const u8 Move_GLACIATE[]; +extern const u8 Move_BOLT_STRIKE[]; +extern const u8 Move_BLUE_FLARE[]; +extern const u8 Move_FIERY_DANCE[]; +extern const u8 Move_FREEZE_SHOCK[]; +extern const u8 Move_ICE_BURN[]; +extern const u8 Move_SNARL[]; +extern const u8 Move_ICICLE_CRASH[]; +extern const u8 Move_V_CREATE[]; +extern const u8 Move_FUSION_FLARE[]; +extern const u8 Move_FUSION_BOLT[]; +extern const u8 Move_FLYING_PRESS[]; +extern const u8 Move_MAT_BLOCK[]; +extern const u8 Move_BELCH[]; +extern const u8 Move_ROTOTILLER[]; +extern const u8 Move_STICKY_WEB[]; +extern const u8 Move_FELL_STINGER[]; +extern const u8 Move_PHANTOM_FORCE[]; +extern const u8 Move_TRICK_OR_TREAT[]; +extern const u8 Move_NOBLE_ROAR[]; +extern const u8 Move_ION_DELUGE[]; +extern const u8 Move_PARABOLIC_CHARGE[]; +extern const u8 Move_FORESTS_CURSE[]; +extern const u8 Move_PETAL_BLIZZARD[]; +extern const u8 Move_FREEZE_DRY[]; +extern const u8 Move_DISARMING_VOICE[]; +extern const u8 Move_PARTING_SHOT[]; +extern const u8 Move_TOPSY_TURVY[]; +extern const u8 Move_DRAINING_KISS[]; +extern const u8 Move_CRAFTY_SHIELD[]; +extern const u8 Move_FLOWER_SHIELD[]; +extern const u8 Move_GRASSY_TERRAIN[]; +extern const u8 Move_MISTY_TERRAIN[]; +extern const u8 Move_ELECTRIFY[]; +extern const u8 Move_PLAY_ROUGH[]; +extern const u8 Move_FAIRY_WIND[]; +extern const u8 Move_MOONBLAST[]; +extern const u8 Move_BOOMBURST[]; +extern const u8 Move_FAIRY_LOCK[]; +extern const u8 Move_KINGS_SHIELD[]; +extern const u8 Move_PLAY_NICE[]; +extern const u8 Move_CONFIDE[]; +extern const u8 Move_DIAMOND_STORM[]; +extern const u8 Move_STEAM_ERUPTION[]; +extern const u8 Move_HYPERSPACE_HOLE[]; +extern const u8 Move_WATER_SHURIKEN[]; +extern const u8 Move_MYSTICAL_FIRE[]; +extern const u8 Move_SPIKY_SHIELD[]; +extern const u8 Move_AROMATIC_MIST[]; +extern const u8 Move_EERIE_IMPULSE[]; +extern const u8 Move_VENOM_DRENCH[]; +extern const u8 Move_POWDER[]; +extern const u8 Move_GEOMANCY[]; +extern const u8 Move_MAGNETIC_FLUX[]; +extern const u8 Move_HAPPY_HOUR[]; +extern const u8 Move_ELECTRIC_TERRAIN[]; +extern const u8 Move_DAZZLING_GLEAM[]; +extern const u8 Move_CELEBRATE[]; +extern const u8 Move_HOLD_HANDS[]; +extern const u8 Move_BABY_DOLL_EYES[]; +extern const u8 Move_NUZZLE[]; +extern const u8 Move_HOLD_BACK[]; +extern const u8 Move_INFESTATION[]; +extern const u8 Move_POWER_UP_PUNCH[]; +extern const u8 Move_OBLIVION_WING[]; +extern const u8 Move_THOUSAND_ARROWS[]; +extern const u8 Move_THOUSAND_WAVES[]; +extern const u8 Move_LANDS_WRATH[]; +extern const u8 Move_LIGHT_OF_RUIN[]; +extern const u8 Move_ORIGIN_PULSE[]; +extern const u8 Move_PRECIPICE_BLADES[]; +extern const u8 Move_DRAGON_ASCENT[]; +extern const u8 Move_HYPERSPACE_FURY[]; +extern const u8 Move_SHORE_UP[]; +extern const u8 Move_FIRST_IMPRESSION[]; +extern const u8 Move_BANEFUL_BUNKER[]; +extern const u8 Move_SPIRIT_SHACKLE[]; +extern const u8 Move_DARKEST_LARIAT[]; +extern const u8 Move_SPARKLING_ARIA[]; +extern const u8 Move_ICE_HAMMER[]; +extern const u8 Move_FLORAL_HEALING[]; +extern const u8 Move_HIGH_HORSEPOWER[]; +extern const u8 Move_STRENGTH_SAP[]; +extern const u8 Move_SOLAR_BLADE[]; +extern const u8 Move_LEAFAGE[]; +extern const u8 Move_SPOTLIGHT[]; +extern const u8 Move_TOXIC_THREAD[]; +extern const u8 Move_LASER_FOCUS[]; +extern const u8 Move_GEAR_UP[]; +extern const u8 Move_THROAT_CHOP[]; +extern const u8 Move_POLLEN_PUFF[]; +extern const u8 Move_ANCHOR_SHOT[]; +extern const u8 Move_PSYCHIC_TERRAIN[]; +extern const u8 Move_LUNGE[]; +extern const u8 Move_FIRE_LASH[]; +extern const u8 Move_POWER_TRIP[]; +extern const u8 Move_BURN_UP[]; +extern const u8 Move_SPEED_SWAP[]; +extern const u8 Move_SMART_STRIKE[]; +extern const u8 Move_PURIFY[]; +extern const u8 Move_REVELATION_DANCE[]; +extern const u8 Move_CORE_ENFORCER[]; +extern const u8 Move_TROP_KICK[]; +extern const u8 Move_INSTRUCT[]; +extern const u8 Move_BEAK_BLAST[]; +extern const u8 Move_CLANGING_SCALES[]; +extern const u8 Move_DRAGON_HAMMER[]; +extern const u8 Move_BRUTAL_SWING[]; +extern const u8 Move_AURORA_VEIL[]; +extern const u8 Move_SHELL_TRAP[]; +extern const u8 Move_FLEUR_CANNON[]; +extern const u8 Move_PSYCHIC_FANGS[]; +extern const u8 Move_STOMPING_TANTRUM[]; +extern const u8 Move_SHADOW_BONE[]; +extern const u8 Move_ACCELEROCK[]; +extern const u8 Move_LIQUIDATION[]; +extern const u8 Move_PRISMATIC_LASER[]; +extern const u8 Move_SPECTRAL_THIEF[]; +extern const u8 Move_SUNSTEEL_STRIKE[]; +extern const u8 Move_MOONGEIST_BEAM[]; +extern const u8 Move_TEARFUL_LOOK[]; +extern const u8 Move_ZING_ZAP[]; +extern const u8 Move_NATURES_MADNESS[]; +extern const u8 Move_MULTI_ATTACK[]; +extern const u8 Move_MIND_BLOWN[]; +extern const u8 Move_PLASMA_FISTS[]; +extern const u8 Move_PHOTON_GEYSER[]; +extern const u8 Move_ZIPPY_ZAP[]; +extern const u8 Move_SPLISHY_SPLASH[]; +extern const u8 Move_FLOATY_FALL[]; +extern const u8 Move_PIKA_PAPOW[]; +extern const u8 Move_BOUNCY_BUBBLE[]; +extern const u8 Move_BUZZY_BUZZ[]; +extern const u8 Move_SIZZLY_SLIDE[]; +extern const u8 Move_GLITZY_GLOW[]; +extern const u8 Move_BADDY_BAD[]; +extern const u8 Move_SAPPY_SEED[]; +extern const u8 Move_FREEZY_FROST[]; +extern const u8 Move_SPARKLY_SWIRL[]; +extern const u8 Move_VEEVEE_VOLLEY[]; +extern const u8 Move_DOUBLE_IRON_BASH[]; +extern const u8 Move_DYNAMAX_CANNON[]; +extern const u8 Move_SNIPE_SHOT[]; +extern const u8 Move_JAW_LOCK[]; +extern const u8 Move_STUFF_CHEEKS[]; +extern const u8 Move_NO_RETREAT[]; +extern const u8 Move_TAR_SHOT[]; +extern const u8 Move_MAGIC_POWDER[]; +extern const u8 Move_DRAGON_DARTS[]; +extern const u8 Move_TEATIME[]; +extern const u8 Move_OCTOLOCK[]; +extern const u8 Move_BOLT_BEAK[]; +extern const u8 Move_FISHIOUS_REND[]; +extern const u8 Move_COURT_CHANGE[]; +extern const u8 Move_CLANGOROUS_SOUL[]; +extern const u8 Move_BODY_PRESS[]; +extern const u8 Move_DECORATE[]; +extern const u8 Move_DRUM_BEATING[]; +extern const u8 Move_SNAP_TRAP[]; +extern const u8 Move_PYRO_BALL[]; +extern const u8 Move_BEHEMOTH_BLADE[]; +extern const u8 Move_BEHEMOTH_BASH[]; +extern const u8 Move_AURA_WHEEL[]; +extern const u8 Move_BREAKING_SWIPE[]; +extern const u8 Move_BRANCH_POKE[]; +extern const u8 Move_OVERDRIVE[]; +extern const u8 Move_APPLE_ACID[]; +extern const u8 Move_GRAV_APPLE[]; +extern const u8 Move_SPIRIT_BREAK[]; +extern const u8 Move_STRANGE_STEAM[]; +extern const u8 Move_LIFE_DEW[]; +extern const u8 Move_OBSTRUCT[]; +extern const u8 Move_FALSE_SURRENDER[]; +extern const u8 Move_METEOR_ASSAULT[]; +extern const u8 Move_ETERNABEAM[]; +extern const u8 Move_STEEL_BEAM[]; +extern const u8 Move_EXPANDING_FORCE[]; +extern const u8 Move_STEEL_ROLLER[]; +extern const u8 Move_SCALE_SHOT[]; +extern const u8 Move_METEOR_BEAM[]; +extern const u8 Move_SHELL_SIDE_ARM[]; +extern const u8 Move_MISTY_EXPLOSION[]; +extern const u8 Move_GRASSY_GLIDE[]; +extern const u8 Move_RISING_VOLTAGE[]; +extern const u8 Move_TERRAIN_PULSE[]; +extern const u8 Move_SKITTER_SMACK[]; +extern const u8 Move_BURNING_JEALOUSY[]; +extern const u8 Move_LASH_OUT[]; +extern const u8 Move_POLTERGEIST[]; +extern const u8 Move_CORROSIVE_GAS[]; +extern const u8 Move_COACHING[]; +extern const u8 Move_FLIP_TURN[]; +extern const u8 Move_TRIPLE_AXEL[]; +extern const u8 Move_DUAL_WINGBEAT[]; +extern const u8 Move_SCORCHING_SANDS[]; +extern const u8 Move_JUNGLE_HEALING[]; +extern const u8 Move_WICKED_BLOW[]; +extern const u8 Move_SURGING_STRIKES[]; +extern const u8 Move_THUNDER_CAGE[]; +extern const u8 Move_DRAGON_ENERGY[]; +extern const u8 Move_FREEZING_GLARE[]; +extern const u8 Move_FIERY_WRATH[]; +extern const u8 Move_THUNDEROUS_KICK[]; +extern const u8 Move_GLACIAL_LANCE[]; +extern const u8 Move_ASTRAL_BARRAGE[]; +extern const u8 Move_EERIE_SPELL[]; +extern const u8 Move_DIRE_CLAW[]; +extern const u8 Move_PSYSHIELD_BASH[]; +extern const u8 Move_POWER_SHIFT[]; +extern const u8 Move_STONE_AXE[]; +extern const u8 Move_SPRINGTIDE_STORM[]; +extern const u8 Move_MYSTICAL_POWER[]; +extern const u8 Move_RAGING_FURY[]; +extern const u8 Move_WAVE_CRASH[]; +extern const u8 Move_CHLOROBLAST[]; +extern const u8 Move_MOUNTAIN_GALE[]; +extern const u8 Move_VICTORY_DANCE[]; +extern const u8 Move_HEADLONG_RUSH[]; +extern const u8 Move_BARB_BARRAGE[]; +extern const u8 Move_ESPER_WING[]; +extern const u8 Move_BITTER_MALICE[]; +extern const u8 Move_SHELTER[]; +extern const u8 Move_TRIPLE_ARROWS[]; +extern const u8 Move_INFERNAL_PARADE[]; +extern const u8 Move_CEASELESS_EDGE[]; +extern const u8 Move_BLEAKWIND_STORM[]; +extern const u8 Move_WILDBOLT_STORM[]; +extern const u8 Move_SANDSEAR_STORM[]; +extern const u8 Move_LUNAR_BLESSING[]; +extern const u8 Move_TAKE_HEART[]; +extern const u8 Move_TERA_BLAST[]; +extern const u8 Move_SILK_TRAP[]; +extern const u8 Move_AXE_KICK[]; +extern const u8 Move_LAST_RESPECTS[]; +extern const u8 Move_LUMINA_CRASH[]; +extern const u8 Move_ORDER_UP[]; +extern const u8 Move_JET_PUNCH[]; +extern const u8 Move_SPICY_EXTRACT[]; +extern const u8 Move_SPIN_OUT[]; +extern const u8 Move_POPULATION_BOMB[]; +extern const u8 Move_ICE_SPINNER[]; +extern const u8 Move_GLAIVE_RUSH[]; +extern const u8 Move_REVIVAL_BLESSING[]; +extern const u8 Move_SALT_CURE[]; +extern const u8 Move_TRIPLE_DIVE[]; +extern const u8 Move_MORTAL_SPIN[]; +extern const u8 Move_DOODLE[]; +extern const u8 Move_FILLET_AWAY[]; +extern const u8 Move_KOWTOW_CLEAVE[]; +extern const u8 Move_FLOWER_TRICK[]; +extern const u8 Move_TORCH_SONG[]; +extern const u8 Move_AQUA_STEP[]; +extern const u8 Move_RAGING_BULL[]; +extern const u8 Move_MAKE_IT_RAIN[]; +extern const u8 Move_RUINATION[]; +extern const u8 Move_COLLISION_COURSE[]; +extern const u8 Move_ELECTRO_DRIFT[]; +extern const u8 Move_SHED_TAIL[]; +extern const u8 Move_CHILLY_RECEPTION[]; +extern const u8 Move_TIDY_UP[]; +extern const u8 Move_SNOWSCAPE[]; +extern const u8 Move_POUNCE[]; +extern const u8 Move_TRAILBLAZE[]; +extern const u8 Move_CHILLING_WATER[]; +extern const u8 Move_HYPER_DRILL[]; +extern const u8 Move_TWIN_BEAM[]; +extern const u8 Move_RAGE_FIST[]; +extern const u8 Move_ARMOR_CANNON[]; +extern const u8 Move_BITTER_BLADE[]; +extern const u8 Move_DOUBLE_SHOCK[]; +extern const u8 Move_GIGATON_HAMMER[]; +extern const u8 Move_COMEUPPANCE[]; +extern const u8 Move_AQUA_CUTTER[]; +extern const u8 Move_BLAZING_TORQUE[]; +extern const u8 Move_WICKED_TORQUE[]; +extern const u8 Move_NOXIOUS_TORQUE[]; +extern const u8 Move_COMBAT_TORQUE[]; +extern const u8 Move_MAGICAL_TORQUE[]; +extern const u8 Move_PSYBLADE[]; +extern const u8 Move_HYDRO_STEAM[]; +extern const u8 Move_BLOOD_MOON[]; +extern const u8 Move_MATCHA_GOTCHA[]; +extern const u8 Move_SYRUP_BOMB[]; +extern const u8 Move_IVY_CUDGEL[]; +extern const u8 Move_ELECTRO_SHOT[]; +extern const u8 Move_TERA_STARSTORM[]; +extern const u8 Move_FICKLE_BEAM[]; +extern const u8 Move_BURNING_BULWARK[]; +extern const u8 Move_THUNDERCLAP[]; +extern const u8 Move_MIGHTY_CLEAVE[]; +extern const u8 Move_TACHYON_CUTTER[]; +extern const u8 Move_HARD_PRESS[]; +extern const u8 Move_DRAGON_CHEER[]; +extern const u8 Move_ALLURING_VOICE[]; +extern const u8 Move_TEMPER_FLARE[]; +extern const u8 Move_SUPERCELL_SLAM[]; +extern const u8 Move_PSYCHIC_NOISE[]; +extern const u8 Move_UPPER_HAND[]; +extern const u8 Move_MALIGNANT_CHAIN[]; +extern const u8 Move_BREAKNECK_BLITZ[]; +extern const u8 Move_ALL_OUT_PUMMELING[]; +extern const u8 Move_SUPERSONIC_SKYSTRIKE[]; +extern const u8 Move_ACID_DOWNPOUR[]; +extern const u8 Move_TECTONIC_RAGE[]; +extern const u8 Move_CONTINENTAL_CRUSH[]; +extern const u8 Move_SAVAGE_SPIN_OUT[]; +extern const u8 Move_NEVER_ENDING_NIGHTMARE[]; +extern const u8 Move_CORKSCREW_CRASH[]; +extern const u8 Move_INFERNO_OVERDRIVE[]; +extern const u8 Move_HYDRO_VORTEX[]; +extern const u8 Move_BLOOM_DOOM[]; +extern const u8 Move_GIGAVOLT_HAVOC[]; +extern const u8 Move_SHATTERED_PSYCHE[]; +extern const u8 Move_SUBZERO_SLAMMER[]; +extern const u8 Move_DEVASTATING_DRAKE[]; +extern const u8 Move_BLACK_HOLE_ECLIPSE[]; +extern const u8 Move_TWINKLE_TACKLE[]; +extern const u8 Move_CATASTROPIKA[]; +extern const u8 Move_10000000_VOLT_THUNDERBOLT[]; +extern const u8 Move_STOKED_SPARKSURFER[]; +extern const u8 Move_EXTREME_EVOBOOST[]; +extern const u8 Move_PULVERIZING_PANCAKE[]; +extern const u8 Move_GENESIS_SUPERNOVA[]; +extern const u8 Move_SINISTER_ARROW_RAID[]; +extern const u8 Move_MALICIOUS_MOONSAULT[]; +extern const u8 Move_OCEANIC_OPERETTA[]; +extern const u8 Move_SPLINTERED_STORMSHARDS[]; +extern const u8 Move_LETS_SNUGGLE_FOREVER[]; +extern const u8 Move_CLANGOROUS_SOULBLAZE[]; +extern const u8 Move_GUARDIAN_OF_ALOLA[]; +extern const u8 Move_SEARING_SUNRAZE_SMASH[]; +extern const u8 Move_MENACING_MOONRAZE_MAELSTROM[]; +extern const u8 Move_LIGHT_THAT_BURNS_THE_SKY[]; +extern const u8 Move_SOUL_STEALING_7_STAR_STRIKE[]; +extern const u8 Move_MAX_GUARD[]; +extern const u8 Move_MAX_FLARE[]; +extern const u8 Move_MAX_FLUTTERBY[]; +extern const u8 Move_MAX_LIGHTNING[]; +extern const u8 Move_MAX_STRIKE[]; +extern const u8 Move_MAX_KNUCKLE[]; +extern const u8 Move_MAX_PHANTASM[]; +extern const u8 Move_MAX_HAILSTORM[]; +extern const u8 Move_MAX_OOZE[]; +extern const u8 Move_MAX_GEYSER[]; +extern const u8 Move_MAX_AIRSTREAM[]; +extern const u8 Move_MAX_STARFALL[]; +extern const u8 Move_MAX_WYRMWIND[]; +extern const u8 Move_MAX_MINDSTORM[]; +extern const u8 Move_MAX_ROCKFALL[]; +extern const u8 Move_MAX_QUAKE[]; +extern const u8 Move_MAX_DARKNESS[]; +extern const u8 Move_MAX_OVERGROWTH[]; +extern const u8 Move_MAX_STEELSPIKE[]; +extern const u8 Move_G_MAX_VINE_LASH[]; +extern const u8 Move_G_MAX_WILDFIRE[]; +extern const u8 Move_G_MAX_CANNONADE[]; +extern const u8 Move_G_MAX_BEFUDDLE[]; +extern const u8 Move_G_MAX_VOLT_CRASH[]; +extern const u8 Move_G_MAX_GOLD_RUSH[]; +extern const u8 Move_G_MAX_CHI_STRIKE[]; +extern const u8 Move_G_MAX_TERROR[]; +extern const u8 Move_G_MAX_FOAM_BURST[]; +extern const u8 Move_G_MAX_RESONANCE[]; +extern const u8 Move_G_MAX_CUDDLE[]; +extern const u8 Move_G_MAX_REPLENISH[]; +extern const u8 Move_G_MAX_MALODOR[]; +extern const u8 Move_G_MAX_MELTDOWN[]; +extern const u8 Move_G_MAX_DRUM_SOLO[]; +extern const u8 Move_G_MAX_FIREBALL[]; +extern const u8 Move_G_MAX_HYDROSNIPE[]; +extern const u8 Move_G_MAX_WIND_RAGE[]; +extern const u8 Move_G_MAX_GRAVITAS[]; +extern const u8 Move_G_MAX_STONESURGE[]; +extern const u8 Move_G_MAX_VOLCALITH[]; +extern const u8 Move_G_MAX_TARTNESS[]; +extern const u8 Move_G_MAX_SWEETNESS[]; +extern const u8 Move_G_MAX_SANDBLAST[]; +extern const u8 Move_G_MAX_STUN_SHOCK[]; +extern const u8 Move_G_MAX_CENTIFERNO[]; +extern const u8 Move_G_MAX_SMITE[]; +extern const u8 Move_G_MAX_SNOOZE[]; +extern const u8 Move_G_MAX_FINALE[]; +extern const u8 Move_G_MAX_STEELSURGE[]; +extern const u8 Move_G_MAX_DEPLETION[]; +extern const u8 Move_G_MAX_ONE_BLOW[]; +extern const u8 Move_G_MAX_RAPID_FLOW[]; + +#endif // GUARD_BATTLE_ANIM_SCRIPTS_H diff --git a/include/pokemon.h b/include/pokemon.h index fdd5059f44..39dbc11f33 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -529,6 +529,7 @@ struct MoveInfo u8 contestCategory:3; u8 contestComboStarterId; u8 contestComboMoves[MAX_COMBO_MOVES]; + const u8 *battleAnimScript; }; #define EFFECTS_ARR(...) (const struct AdditionalEffect[]) {__VA_ARGS__} @@ -866,5 +867,6 @@ u16 GetSpeciesPreEvolution(u16 species); void HealPokemon(struct Pokemon *mon); void HealBoxPokemon(struct BoxPokemon *boxMon); const u8 *GetMoveName(u16 moveId); +const u8 *GetMoveAnimationScript(u16 moveId); #endif // GUARD_POKEMON_H diff --git a/migration_scripts/battle_anim_moves_refactor.py b/migration_scripts/battle_anim_moves_refactor.py new file mode 100644 index 0000000000..116d3964c0 --- /dev/null +++ b/migration_scripts/battle_anim_moves_refactor.py @@ -0,0 +1,63 @@ +import re + +def IsCommaMissing(line: str): + sanitized_line = line.removesuffix('\n').strip() + if sanitized_line.endswith('{') or sanitized_line.endswith('(') or sanitized_line.endswith(','): + return False + if not re.search(r'\.[A-Za-z0-9_]+', sanitized_line): + return False + return True + +input_file = open('./src/data/moves_info.h', 'r') +lines = input_file.readlines() +input_file.close() + + +battle_anim_lines = [] +moves_info_lines = [] + +move = None +bracketCount = 0 +for line in lines: + m = re.search(r'\[MOVE_([A-Za-z0-9_]+)\] =', line) + if m: + move = m.group(1) + bracketCount = 0 + battle_anim_lines.append('extern const u8 Move_' + move + '[];\n') + + if move and re.search(r'\{', line): + bracketCount = bracketCount + 1 + + if move and re.search(r'\}', line): + if (bracketCount == 1): + moves_info_lines.append(8 * ' ' + '.battleAnimScript = Move_' + move + ',\n') + move = None + bracketCount = bracketCount - 1 + + comment_split = line.split('//') + if move and IsCommaMissing(comment_split[0]): + line = comment_split[0].removesuffix('\n') + ',' + line[len(comment_split[0]):-1] + '\n' + + + moves_info_lines.append(line) + +output_file_mi = open('./src/data/moves_info.h', 'w') +output_file_mi.writelines(moves_info_lines) +output_file_mi.close() + +output_file_bas = open('./include/battle_anim_scripts.h', 'w') +output_file_bas.writelines('#ifndef GUARD_BATTLE_ANIM_SCRIPTS_H\n') +output_file_bas.writelines('#define GUARD_BATTLE_ANIM_SCRIPTS_H\n\n') +output_file_bas.writelines(battle_anim_lines) +output_file_bas.writelines('\n#endif // GUARD_BATTLE_ANIM_SCRIPTS_H\n') +output_file_bas.close() + +b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'r') +lines = b_anim_scripts_s.read() +b_anim_scripts_s.close() + +lines = re.sub(r'(Move_[A-Za-z0-9_]*)([:]+)', r'\1::', lines) + +b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'w') +b_anim_scripts_s.write(lines) +b_anim_scripts_s.close() diff --git a/src/battle_anim.c b/src/battle_anim.c index d944aac562..33691a2e95 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -30,7 +30,6 @@ extern const u16 gMovesWithQuietBGM[]; extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Moves[]; extern const u8 *const gBattleAnims_Special[]; extern const u8 *const gBattleAnims_StatusConditions[]; @@ -234,7 +233,6 @@ static void Nop(void) void LaunchBattleAnimation(u32 animType, u32 animId) { s32 i; - const u8 *const *animsTable; if (gTestRunnerEnabled) { @@ -249,23 +247,6 @@ void LaunchBattleAnimation(u32 animType, u32 animId) } } - switch (animType) - { - case ANIM_TYPE_GENERAL: - default: - animsTable = gBattleAnims_General; - break; - case ANIM_TYPE_MOVE: - animsTable = gBattleAnims_Moves; - break; - case ANIM_TYPE_STATUS: - animsTable = gBattleAnims_StatusConditions; - break; - case ANIM_TYPE_SPECIAL: - animsTable = gBattleAnims_Special; - break; - } - sAnimHideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM); if (animType != ANIM_TYPE_MOVE) { @@ -322,7 +303,23 @@ void LaunchBattleAnimation(u32 animType, u32 animId) sMonAnimTaskIdArray[0] = TASK_NONE; sMonAnimTaskIdArray[1] = TASK_NONE; - sBattleAnimScriptPtr = animsTable[animId]; + + switch (animType) + { + case ANIM_TYPE_GENERAL: + default: + sBattleAnimScriptPtr = gBattleAnims_General[animId]; + break; + case ANIM_TYPE_MOVE: + sBattleAnimScriptPtr = GetMoveAnimationScript(animId); + break; + case ANIM_TYPE_STATUS: + sBattleAnimScriptPtr = gBattleAnims_StatusConditions[animId]; + break; + case ANIM_TYPE_SPECIAL: + sBattleAnimScriptPtr = gBattleAnims_Special[animId]; + break; + } gAnimScriptActive = TRUE; sAnimFramesToWait = 0; gAnimScriptCallback = RunAnimScriptCommand; diff --git a/src/battle_main.c b/src/battle_main.c index 9b36b1a2cd..1e89c672e0 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3390,7 +3390,7 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; // Clear Dynamax data - UndoDynamax(battler); + UndoDynamax(battler); return result; } diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 9d9f67ee4b..2a4846955d 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1,4 +1,5 @@ #include "battle_dynamax.h" +#include "battle_anim_scripts.h" #include "constants/battle.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" @@ -133,6 +134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = TRUE, .sketchBanned = TRUE, .assistBanned = TRUE, + .battleAnimScript = Move_NONE, }, [MOVE_POUND] = @@ -154,7 +156,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_POUND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POUND, }, [MOVE_KARATE_CHOP] = @@ -177,6 +180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_KARATE_CHOP, }, [MOVE_DOUBLE_SLAP] = @@ -198,6 +202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, + .battleAnimScript = Move_DOUBLE_SLAP, }, [MOVE_COMET_PUNCH] = @@ -219,7 +224,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COMET_PUNCH, }, [MOVE_MEGA_PUNCH] = @@ -242,6 +248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_MEGA_PUNCH, }, [MOVE_PAY_DAY] = @@ -264,7 +271,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PAY_DAY, }, [MOVE_FIRE_PUNCH] = @@ -291,6 +299,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_PUNCH, .contestComboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, + .battleAnimScript = Move_FIRE_PUNCH, }, [MOVE_ICE_PUNCH] = @@ -321,6 +330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ICE_PUNCH, .contestComboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, + .battleAnimScript = Move_ICE_PUNCH, }, [MOVE_THUNDER_PUNCH] = @@ -347,6 +357,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_THUNDER_PUNCH, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_ICE_PUNCH}, + .battleAnimScript = Move_THUNDER_PUNCH, }, [MOVE_SCRATCH] = @@ -368,6 +379,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCRATCH, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_SCRATCH, }, [MOVE_VISE_GRIP] = @@ -388,7 +400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_VICE_GRIP, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VISE_GRIP, }, [MOVE_GUILLOTINE] = @@ -410,6 +423,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, + .battleAnimScript = Move_GUILLOTINE, }, [MOVE_RAZOR_WIND] = @@ -434,7 +448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAZOR_WIND, }, [MOVE_SWORDS_DANCE] = @@ -457,7 +472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SWORDS_DANCE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWORDS_DANCE, }, [MOVE_CUT] = @@ -480,6 +496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CUT, }, [MOVE_GUST] = @@ -502,7 +519,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUST, }, [MOVE_WING_ATTACK] = @@ -523,7 +541,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WING_ATTACK, }, [MOVE_WHIRLWIND] = @@ -550,7 +569,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WHIRLWIND, }, [MOVE_FLY] = @@ -576,7 +596,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLY, }, [MOVE_BIND] = @@ -602,6 +623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, + .battleAnimScript = Move_BIND, }, [MOVE_SLAM] = @@ -624,6 +646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, + .battleAnimScript = Move_SLAM, }, [MOVE_VINE_WHIP] = @@ -651,6 +674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_VINE_WHIP, }, [MOVE_STOMP] = @@ -678,6 +702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_STOMP, }, [MOVE_DOUBLE_KICK] = @@ -699,7 +724,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_KICK, }, [MOVE_MEGA_KICK] = @@ -721,6 +747,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_MEGA_KICK, }, [MOVE_JUMP_KICK] = @@ -749,6 +776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_JUMP_KICK, }, [MOVE_ROLLING_KICK] = @@ -774,7 +802,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROLLING_KICK, }, [MOVE_SAND_ATTACK] = @@ -797,6 +826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SAND_ATTACK, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SAND_ATTACK, }, [MOVE_HEADBUTT] = @@ -822,6 +852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_HEADBUTT, }, [MOVE_HORN_ATTACK] = @@ -843,6 +874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_HORN_ATTACK, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_HORN_ATTACK, }, [MOVE_FURY_ATTACK] = @@ -864,6 +896,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK, COMBO_STARTER_PECK}, + .battleAnimScript = Move_FURY_ATTACK, }, [MOVE_HORN_DRILL] = @@ -885,6 +918,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK}, + .battleAnimScript = Move_HORN_DRILL, }, [MOVE_TACKLE] = @@ -912,6 +946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER}, + .battleAnimScript = Move_TACKLE, }, [MOVE_BODY_SLAM] = @@ -938,7 +973,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BODY_SLAM, }, [MOVE_WRAP] = @@ -962,7 +998,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WRAP, }, [MOVE_TAKE_DOWN] = @@ -985,6 +1022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_TAKE_DOWN, }, [MOVE_THRASH] = @@ -1011,6 +1049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAGE}, + .battleAnimScript = Move_THRASH, }, [MOVE_DOUBLE_EDGE] = @@ -1033,6 +1072,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_DOUBLE_EDGE, }, [MOVE_TAIL_WHIP] = @@ -1055,6 +1095,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_TAIL_WHIP, }, [MOVE_POISON_STING] = @@ -1078,7 +1119,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_STING, }, [MOVE_TWINEEDLE] = @@ -1104,7 +1146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TWINEEDLE, }, [MOVE_PIN_MISSILE] = @@ -1124,7 +1167,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PIN_MISSILE, }, [MOVE_LEER] = @@ -1147,6 +1191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_LEER, .contestComboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_LEER, }, [MOVE_BITE] = @@ -1173,6 +1218,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_BITE, }, [MOVE_GROWL] = @@ -1197,6 +1243,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_GROWL, }, [MOVE_ROAR] = @@ -1223,7 +1270,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROAR, }, [MOVE_SING] = @@ -1247,7 +1295,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SING, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SING, }, [MOVE_SUPERSONIC] = @@ -1271,7 +1320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUPERSONIC, }, [MOVE_SONIC_BOOM] = @@ -1292,7 +1342,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SONIC_BOOM, }, [MOVE_DISABLE] = @@ -1321,7 +1372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DISABLE, }, [MOVE_ACID] = @@ -1349,7 +1401,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID, }, [MOVE_EMBER] = @@ -1374,6 +1427,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_EMBER, }, [MOVE_FLAMETHROWER] = @@ -1398,6 +1452,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLAMETHROWER, }, [MOVE_MIST] = @@ -1421,7 +1476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIST, }, [MOVE_WATER_GUN] = @@ -1442,6 +1498,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_WATER_GUN, }, [MOVE_HYDRO_PUMP] = @@ -1462,6 +1519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_HYDRO_PUMP, }, [MOVE_SURF] = @@ -1484,6 +1542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SURF, .contestComboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_SURF, }, [MOVE_ICE_BEAM] = @@ -1514,6 +1573,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_BEAM, }, [MOVE_BLIZZARD] = @@ -1543,6 +1603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, + .battleAnimScript = Move_BLIZZARD, }, [MOVE_PSYBEAM] = @@ -1567,6 +1628,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYBEAM, }, [MOVE_BUBBLE_BEAM] = @@ -1591,6 +1653,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BUBBLE_BEAM, }, [MOVE_AURORA_BEAM] = @@ -1615,6 +1678,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_AURORA_BEAM, }, [MOVE_HYPER_BEAM] = @@ -1637,7 +1701,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_BEAM, }, [MOVE_PECK] = @@ -1658,7 +1723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PECK, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PECK, }, [MOVE_DRILL_PECK] = @@ -1680,6 +1746,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PECK}, + .battleAnimScript = Move_DRILL_PECK, }, [MOVE_SUBMISSION] = @@ -1702,6 +1769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SUBMISSION, }, [MOVE_LOW_KICK] = @@ -1722,7 +1790,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOW_KICK, }, [MOVE_COUNTER] = @@ -1749,6 +1818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_COUNTER, }, [MOVE_SEISMIC_TOSS] = @@ -1771,6 +1841,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_SEISMIC_TOSS, }, [MOVE_STRENGTH] = @@ -1791,7 +1862,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRENGTH, }, [MOVE_ABSORB] = @@ -1814,6 +1886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_ABSORB, }, [MOVE_MEGA_DRAIN] = @@ -1835,6 +1908,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_MEGA_DRAIN, }, [MOVE_LEECH_SEED] = @@ -1857,6 +1931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LEECH_SEED, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, + .battleAnimScript = Move_LEECH_SEED, }, [MOVE_GROWTH] = @@ -1880,7 +1955,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_GROWTH, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GROWTH, }, [MOVE_RAZOR_LEAF] = @@ -1903,6 +1979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_RAZOR_LEAF, }, [MOVE_SOLAR_BEAM] = @@ -1926,6 +2003,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SOLAR_BEAM, }, [MOVE_POISON_POWDER] = @@ -1949,6 +2027,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_POISON_POWDER, }, [MOVE_STUN_SPORE] = @@ -1972,6 +2051,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_STUN_SPORE, }, [MOVE_SLEEP_POWDER] = @@ -1995,6 +2075,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_SLEEP_POWDER, }, [MOVE_PETAL_DANCE] = @@ -2028,6 +2109,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_PETAL_DANCE, }, [MOVE_STRING_SHOT] = @@ -2049,7 +2131,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_STRING_SHOT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRING_SHOT, }, [MOVE_DRAGON_RAGE] = @@ -2072,6 +2155,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RAGE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_RAGE, }, [MOVE_FIRE_SPIN] = @@ -2096,6 +2180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_SPIN, }, [MOVE_THUNDER_SHOCK] = @@ -2120,6 +2205,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDER_SHOCK, }, [MOVE_THUNDERBOLT] = @@ -2144,6 +2230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDERBOLT, }, [MOVE_THUNDER_WAVE] = @@ -2166,6 +2253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDER_WAVE, }, [MOVE_THUNDER] = @@ -2191,6 +2279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_THUNDER, }, [MOVE_ROCK_THROW] = @@ -2210,7 +2299,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ROCK_THROW, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_THROW, }, [MOVE_EARTHQUAKE] = @@ -2233,7 +2323,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_EARTHQUAKE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EARTHQUAKE, }, [MOVE_FISSURE] = @@ -2256,6 +2347,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE}, + .battleAnimScript = Move_FISSURE, }, [MOVE_DIG] = @@ -2281,7 +2373,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIG, }, [MOVE_TOXIC] = @@ -2303,7 +2396,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TOXIC, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOXIC, }, [MOVE_CONFUSION] = @@ -2328,6 +2422,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CONFUSION, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_CONFUSION, }, [MOVE_PSYCHIC] = @@ -2352,6 +2447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, + .battleAnimScript = Move_PSYCHIC, }, [MOVE_HYPNOSIS] = @@ -2373,7 +2469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPNOSIS, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPNOSIS, }, [MOVE_MEDITATE] = @@ -2398,6 +2495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_MEDITATE, }, [MOVE_AGILITY] = @@ -2422,6 +2520,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, + .battleAnimScript = Move_AGILITY, }, [MOVE_QUICK_ATTACK] = @@ -2443,6 +2542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, + .battleAnimScript = Move_QUICK_ATTACK, }, [MOVE_RAGE] = @@ -2463,7 +2563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_RAGE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAGE, }, [MOVE_TELEPORT] = @@ -2487,6 +2588,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_TELEPORT, }, [MOVE_NIGHT_SHADE] = @@ -2506,7 +2608,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_SHADE, }, [MOVE_MIMIC] = @@ -2535,7 +2638,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIMIC, }, [MOVE_SCREECH] = @@ -2559,7 +2663,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCREECH, }, [MOVE_DOUBLE_TEAM] = @@ -2583,7 +2688,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_TEAM, }, [MOVE_RECOVER] = @@ -2614,7 +2720,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RECOVER, }, [MOVE_HARDEN] = @@ -2638,7 +2745,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HARDEN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HARDEN, }, [MOVE_MINIMIZE] = @@ -2662,7 +2770,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MINIMIZE, }, [MOVE_SMOKESCREEN] = @@ -2685,6 +2794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SMOG}, + .battleAnimScript = Move_SMOKESCREEN, }, [MOVE_CONFUSE_RAY] = @@ -2706,7 +2816,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONFUSE_RAY, }, [MOVE_WITHDRAW] = @@ -2731,6 +2842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WITHDRAW, }, [MOVE_DEFENSE_CURL] = @@ -2754,7 +2866,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_DEFENSE_CURL, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DEFENSE_CURL, }, [MOVE_BARRIER] = @@ -2778,7 +2891,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BARRIER, }, [MOVE_LIGHT_SCREEN] = @@ -2803,6 +2917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_LIGHT_SCREEN, }, [MOVE_HAZE] = @@ -2827,6 +2942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_HAZE, }, [MOVE_REFLECT] = @@ -2851,6 +2967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_REFLECT, }, [MOVE_FOCUS_ENERGY] = @@ -2875,7 +2992,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOCUS_ENERGY, }, [MOVE_BIDE] = @@ -2899,7 +3017,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BIDE, }, [MOVE_METRONOME] = @@ -2928,7 +3047,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METRONOME, }, [MOVE_MIRROR_MOVE] = @@ -2956,7 +3076,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRROR_MOVE, }, [MOVE_SELF_DESTRUCT] = @@ -2977,7 +3098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SELF_DESTRUCT, }, [MOVE_EGG_BOMB] = @@ -2999,6 +3121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SOFT_BOILED}, + .battleAnimScript = Move_EGG_BOMB, }, [MOVE_LICK] = @@ -3023,7 +3146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LICK, }, [MOVE_SMOG] = @@ -3047,7 +3171,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SMOG, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMOG, }, [MOVE_SLUDGE] = @@ -3072,6 +3197,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE, .contestComboMoves = {COMBO_STARTER_SLUDGE_BOMB}, + .battleAnimScript = Move_SLUDGE, }, [MOVE_BONE_CLUB] = @@ -3096,6 +3222,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_CLUB, .contestComboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONE_CLUB, }, [MOVE_FIRE_BLAST] = @@ -3120,6 +3247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_BLAST, }, [MOVE_WATERFALL] = @@ -3147,6 +3275,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATERFALL, }, [MOVE_CLAMP] = @@ -3172,6 +3301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_CLAMP, }, [MOVE_SWIFT] = @@ -3191,7 +3321,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWIFT, }, [MOVE_SKULL_BASH] = @@ -3220,7 +3351,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKULL_BASH, }, [MOVE_SPIKE_CANNON] = @@ -3240,7 +3372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKE_CANNON, }, [MOVE_CONSTRICT] = @@ -3265,7 +3398,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONSTRICT, }, [MOVE_AMNESIA] = @@ -3289,7 +3423,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AMNESIA, }, [MOVE_KINESIS] = @@ -3312,6 +3447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_KINESIS, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_KINESIS, }, [MOVE_SOFT_BOILED] = @@ -3336,7 +3472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SOFT_BOILED, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SOFT_BOILED, }, [MOVE_HIGH_JUMP_KICK] = @@ -3365,6 +3502,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_HIGH_JUMP_KICK, }, [MOVE_GLARE] = @@ -3393,6 +3531,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_GLARE, }, [MOVE_DREAM_EATER] = @@ -3414,6 +3553,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, + .battleAnimScript = Move_DREAM_EATER, }, [MOVE_POISON_GAS] = @@ -3441,7 +3581,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_GAS, }, [MOVE_BARRAGE] = @@ -3462,7 +3603,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BARRAGE, }, [MOVE_LEECH_LIFE] = @@ -3485,7 +3627,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEECH_LIFE, }, [MOVE_LOVELY_KISS] = @@ -3507,7 +3650,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOVELY_KISS, }, [MOVE_SKY_ATTACK] = @@ -3537,7 +3681,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKY_ATTACK, }, [MOVE_TRANSFORM] = @@ -3566,7 +3711,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRANSFORM, }, [MOVE_BUBBLE] = @@ -3591,6 +3737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BUBBLE, }, [MOVE_DIZZY_PUNCH] = @@ -3616,7 +3763,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIZZY_PUNCH, }, [MOVE_SPORE] = @@ -3639,7 +3787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPORE, }, [MOVE_FLASH] = @@ -3661,7 +3810,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLASH, }, [MOVE_PSYWAVE] = @@ -3682,6 +3832,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYWAVE, }, [MOVE_SPLASH] = @@ -3705,7 +3856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPLASH, }, [MOVE_ACID_ARMOR] = @@ -3729,7 +3881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID_ARMOR, }, [MOVE_CRABHAMMER] = @@ -3752,6 +3905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CRABHAMMER, }, [MOVE_EXPLOSION] = @@ -3772,7 +3926,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXPLOSION, }, [MOVE_FURY_SWIPES] = @@ -3794,6 +3949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH}, + .battleAnimScript = Move_FURY_SWIPES, }, [MOVE_BONEMERANG] = @@ -3815,6 +3971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONEMERANG, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONEMERANG, }, [MOVE_REST] = @@ -3840,6 +3997,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_REST, .contestComboMoves = {COMBO_STARTER_BELLY_DRUM, COMBO_STARTER_CHARM, COMBO_STARTER_YAWN}, + .battleAnimScript = Move_REST, }, [MOVE_ROCK_SLIDE] = @@ -3864,6 +4022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, + .battleAnimScript = Move_ROCK_SLIDE, }, [MOVE_HYPER_FANG] = @@ -3889,7 +4048,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_FANG, }, [MOVE_SHARPEN] = @@ -3913,7 +4073,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHARPEN, }, [MOVE_CONVERSION] = @@ -3937,7 +4098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONVERSION, }, [MOVE_TRI_ATTACK] = @@ -3962,6 +4124,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON}, + .battleAnimScript = Move_TRI_ATTACK, }, [MOVE_SUPER_FANG] = @@ -3984,6 +4147,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_SUPER_FANG, }, [MOVE_SLASH] = @@ -4007,6 +4171,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_SLASH, }, [MOVE_SUBSTITUTE] = @@ -4031,7 +4196,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUBSTITUTE, }, [MOVE_STRUGGLE] = @@ -4069,6 +4235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .encoreBanned = TRUE, .assistBanned = TRUE, .sketchBanned = TRUE, + .battleAnimScript = Move_STRUGGLE, }, [MOVE_SKETCH] = @@ -4100,7 +4267,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKETCH, }, [MOVE_TRIPLE_KICK] = @@ -4123,6 +4291,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_TRIPLE_KICK, }, [MOVE_THIEF] = @@ -4151,7 +4320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THIEF, }, [MOVE_SPIDER_WEB] = @@ -4175,6 +4345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STRING_SHOT}, + .battleAnimScript = Move_SPIDER_WEB, }, [MOVE_MIND_READER] = @@ -4195,7 +4366,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_MIND_READER, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIND_READER, }, [MOVE_NIGHTMARE] = @@ -4217,7 +4389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHTMARE, }, [MOVE_FLAME_WHEEL] = @@ -4244,6 +4417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLAME_WHEEL, }, [MOVE_SNORE] = @@ -4271,6 +4445,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, + .battleAnimScript = Move_SNORE, }, [MOVE_CURSE] = @@ -4294,7 +4469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_CURSE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CURSE, }, [MOVE_FLAIL] = @@ -4316,6 +4492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_FLAIL, }, [MOVE_CONVERSION_2] = @@ -4339,7 +4516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONVERSION_2, }, [MOVE_AEROBLAST] = @@ -4361,7 +4539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AEROBLAST, }, [MOVE_COTTON_SPORE] = @@ -4384,7 +4563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COTTON_SPORE, }, [MOVE_REVERSAL] = @@ -4406,6 +4586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_REVERSAL, }, [MOVE_SPITE] = @@ -4429,6 +4610,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_SPITE, }, [MOVE_POWDER_SNOW] = @@ -4457,6 +4639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_POWDER_SNOW, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_POWDER_SNOW, }, [MOVE_PROTECT] = @@ -4481,6 +4664,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_PROTECT, }, [MOVE_MACH_PUNCH] = @@ -4502,7 +4686,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MACH_PUNCH, }, [MOVE_SCARY_FACE] = @@ -4525,6 +4710,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCARY_FACE, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, + .battleAnimScript = Move_SCARY_FACE, }, [MOVE_FEINT_ATTACK] = @@ -4546,6 +4732,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_LEER, COMBO_STARTER_POUND}, + .battleAnimScript = Move_FEINT_ATTACK, }, [MOVE_SWEET_KISS] = @@ -4568,6 +4755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_SWEET_KISS, }, [MOVE_BELLY_DRUM] = @@ -4591,7 +4779,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BELLY_DRUM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BELLY_DRUM, }, [MOVE_SLUDGE_BOMB] = @@ -4617,6 +4806,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE_BOMB, .contestComboMoves = {COMBO_STARTER_SLUDGE}, + .battleAnimScript = Move_SLUDGE_BOMB, }, [MOVE_MUD_SLAP] = @@ -4641,6 +4831,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SLAP, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_MUD_SLAP, }, [MOVE_OCTAZOOKA] = @@ -4666,6 +4857,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_OCTAZOOKA, }, [MOVE_SPIKES] = @@ -4691,7 +4883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKES, }, [MOVE_ZAP_CANNON] = @@ -4717,6 +4910,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, + .battleAnimScript = Move_ZAP_CANNON, }, [MOVE_FORESIGHT] = @@ -4739,7 +4933,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORESIGHT, }, [MOVE_DESTINY_BOND] = @@ -4767,6 +4962,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, + .battleAnimScript = Move_DESTINY_BOND, }, [MOVE_PERISH_SONG] = @@ -4792,6 +4988,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_SING}, + .battleAnimScript = Move_PERISH_SONG, }, [MOVE_ICY_WIND] = @@ -4817,6 +5014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICY_WIND, }, [MOVE_DETECT] = @@ -4843,6 +5041,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_DETECT, }, [MOVE_BONE_RUSH] = @@ -4863,6 +5062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_RUSH, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONE_RUSH, }, [MOVE_LOCK_ON] = @@ -4883,7 +5083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LOCK_ON, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOCK_ON, }, [MOVE_OUTRAGE] = @@ -4909,7 +5110,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OUTRAGE, }, [MOVE_SANDSTORM] = @@ -4933,7 +5135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SANDSTORM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SANDSTORM, }, [MOVE_GIGA_DRAIN] = @@ -4956,6 +5159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_GIGA_DRAIN, }, [MOVE_ENDURE] = @@ -4981,7 +5185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ENDURE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENDURE, }, [MOVE_CHARM] = @@ -5003,7 +5208,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_CHARM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHARM, }, [MOVE_ROLLOUT] = @@ -5027,6 +5233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_ROLLOUT, }, [MOVE_FALSE_SWIPE] = @@ -5046,6 +5253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_FALSE_SWIPE, }, [MOVE_SWAGGER] = @@ -5067,7 +5275,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWAGGER, }, [MOVE_MILK_DRINK] = @@ -5092,7 +5301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MILK_DRINK, }, [MOVE_SPARK] = @@ -5118,6 +5328,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_SPARK, }, [MOVE_FURY_CUTTER] = @@ -5146,6 +5357,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_FURY_CUTTER, }, [MOVE_STEEL_WING] = @@ -5171,7 +5383,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_WING, }, [MOVE_MEAN_LOOK] = @@ -5195,6 +5408,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_MEAN_LOOK, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_MEAN_LOOK, }, [MOVE_ATTRACT] = @@ -5217,7 +5431,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ATTRACT, }, [MOVE_SLEEP_TALK] = @@ -5248,6 +5463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, + .battleAnimScript = Move_SLEEP_TALK, }, [MOVE_HEAL_BELL] = @@ -5274,6 +5490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HEAL_BELL, .contestComboMoves = {COMBO_STARTER_LUCKY_CHANT}, + .battleAnimScript = Move_HEAL_BELL, }, [MOVE_RETURN] = @@ -5294,7 +5511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RETURN, }, [MOVE_PRESENT] = @@ -5315,7 +5533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRESENT, }, [MOVE_FRUSTRATION] = @@ -5336,7 +5555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FRUSTRATION, }, [MOVE_SAFEGUARD] = @@ -5360,7 +5580,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SAFEGUARD, }, [MOVE_PAIN_SPLIT] = @@ -5382,6 +5603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_PAIN_SPLIT, }, [MOVE_SACRED_FIRE] = @@ -5407,6 +5629,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SACRED_FIRE, }, [MOVE_MAGNITUDE] = @@ -5428,7 +5651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNITUDE, }, [MOVE_DYNAMIC_PUNCH] = @@ -5455,6 +5679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_DYNAMIC_PUNCH, }, [MOVE_MEGAHORN] = @@ -5475,7 +5700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MEGAHORN, }, [MOVE_DRAGON_BREATH] = @@ -5501,6 +5727,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_BREATH, .contestComboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_BREATH, }, [MOVE_BATON_PASS] = @@ -5523,7 +5750,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BATON_PASS, }, [MOVE_ENCORE] = @@ -5547,7 +5775,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENCORE, }, [MOVE_PURSUIT] = @@ -5569,7 +5798,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PURSUIT, }, [MOVE_RAPID_SPIN] = @@ -5602,7 +5832,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAPID_SPIN, }, [MOVE_SWEET_SCENT] = @@ -5624,7 +5855,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SWEET_SCENT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWEET_SCENT, }, [MOVE_IRON_TAIL] = @@ -5649,7 +5881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_TAIL, }, [MOVE_METAL_CLAW] = @@ -5676,6 +5909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, + .battleAnimScript = Move_METAL_CLAW, }, [MOVE_VITAL_THROW] = @@ -5697,6 +5931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_VITAL_THROW, }, [MOVE_MORNING_SUN] = @@ -5722,6 +5957,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MORNING_SUN, }, [MOVE_SYNTHESIS] = @@ -5747,6 +5983,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SYNTHESIS, }, [MOVE_MOONLIGHT] = @@ -5772,6 +6009,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MOONLIGHT, }, [MOVE_HIDDEN_POWER] = @@ -5791,7 +6029,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HIDDEN_POWER, }, [MOVE_CROSS_CHOP] = @@ -5814,6 +6053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_CROSS_CHOP, }, [MOVE_TWISTER] = @@ -5839,7 +6079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TWISTER, }, [MOVE_RAIN_DANCE] = @@ -5862,7 +6103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_RAIN_DANCE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAIN_DANCE, }, [MOVE_SUNNY_DAY] = @@ -5885,7 +6127,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SUNNY_DAY, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUNNY_DAY, }, [MOVE_CRUNCH] = @@ -5920,6 +6163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_CRUNCH, }, [MOVE_MIRROR_COAT] = @@ -5944,6 +6188,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_MIRROR_COAT, }, [MOVE_PSYCH_UP] = @@ -5968,7 +6213,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCH_UP, }, [MOVE_EXTREME_SPEED] = @@ -5989,7 +6235,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXTREME_SPEED, }, [MOVE_ANCIENT_POWER] = @@ -6015,7 +6262,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ANCIENT_POWER, }, [MOVE_SHADOW_BALL] = @@ -6040,7 +6288,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_BALL, }, [MOVE_FUTURE_SIGHT] = @@ -6069,6 +6318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_FUTURE_SIGHT, }, [MOVE_ROCK_SMASH] = @@ -6093,7 +6343,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_SMASH, }, [MOVE_WHIRLPOOL] = @@ -6118,6 +6369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WHIRLPOOL, }, [MOVE_BEAT_UP] = @@ -6137,7 +6389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BEAT_UP, }, [MOVE_FAKE_OUT] = @@ -6162,7 +6415,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_FAKE_OUT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAKE_OUT, }, [MOVE_UPROAR] = @@ -6194,7 +6448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_UPROAR, }, [MOVE_STOCKPILE] = @@ -6218,7 +6473,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_STOCKPILE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STOCKPILE, }, [MOVE_SPIT_UP] = @@ -6240,6 +6496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, + .battleAnimScript = Move_SPIT_UP, }, [MOVE_SWALLOW] = @@ -6265,6 +6522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, + .battleAnimScript = Move_SWALLOW, }, [MOVE_HEAT_WAVE] = @@ -6290,6 +6548,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_HEAT_WAVE, }, [MOVE_HAIL] = @@ -6312,7 +6571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HAIL, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HAIL, }, [MOVE_TORMENT] = @@ -6331,11 +6591,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_DEF_UP_1 }, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresSubstitute = TRUE, .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TORMENT, }, [MOVE_FLATTER] = @@ -6358,6 +6618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_FLATTER, }, [MOVE_WILL_O_WISP] = @@ -6380,6 +6641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_WILL_O_WISP, }, [MOVE_MEMENTO] = @@ -6400,7 +6662,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MEMENTO, }, [MOVE_FACADE] = @@ -6422,6 +6685,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_FACADE, }, [MOVE_FOCUS_PUNCH] = @@ -6451,6 +6715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_FOCUS_PUNCH, }, [MOVE_SMELLING_SALTS] = @@ -6475,7 +6740,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMELLING_SALTS, }, [MOVE_FOLLOW_ME] = @@ -6501,7 +6767,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOLLOW_ME, }, [MOVE_NATURE_POWER] = @@ -6528,7 +6795,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURE_POWER, }, [MOVE_CHARGE] = @@ -6552,7 +6820,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CHARGE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHARGE, }, [MOVE_TAUNT] = @@ -6575,7 +6844,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TAUNT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAUNT, }, [MOVE_HELPING_HAND] = @@ -6602,7 +6872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HELPING_HAND, }, [MOVE_TRICK] = @@ -6626,7 +6897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK, }, [MOVE_ROLE_PLAY] = @@ -6650,7 +6922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROLE_PLAY, }, [MOVE_WISH] = @@ -6675,7 +6948,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WISH, }, [MOVE_ASSIST] = @@ -6704,7 +6978,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ASSIST, }, [MOVE_INGRAIN] = @@ -6729,7 +7004,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INGRAIN, }, [MOVE_SUPERPOWER] = @@ -6755,6 +7031,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SUPERPOWER, }, [MOVE_MAGIC_COAT] = @@ -6777,7 +7054,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_COAT, }, [MOVE_RECYCLE] = @@ -6801,7 +7079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RECYCLE, }, [MOVE_REVENGE] = @@ -6821,6 +7100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_REVENGE, .contestComboMoves = {COMBO_STARTER_PAYBACK}, + .battleAnimScript = Move_REVENGE, }, [MOVE_BRICK_BREAK] = @@ -6842,6 +7122,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_BRICK_BREAK, }, [MOVE_YAWN] = @@ -6863,7 +7144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_YAWN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_YAWN, }, [MOVE_KNOCK_OFF] = @@ -6888,6 +7170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_KNOCK_OFF, }, [MOVE_ENDEAVOR] = @@ -6910,6 +7193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_ENDEAVOR, }, [MOVE_ERUPTION] = @@ -6930,6 +7214,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_ERUPTION, }, [MOVE_SKILL_SWAP] = @@ -6951,7 +7236,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKILL_SWAP, }, [MOVE_IMPRISON] = @@ -6977,7 +7263,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IMPRISON, }, [MOVE_REFRESH] = @@ -7002,6 +7289,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_REFRESH, }, [MOVE_GRUDGE] = @@ -7026,6 +7314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_GRUDGE, }, [MOVE_SNATCH] = @@ -7051,7 +7340,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNATCH, }, [MOVE_SECRET_POWER] = @@ -7075,7 +7365,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SECRET_POWER, }, [MOVE_DIVE] = @@ -7102,6 +7393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_DIVE, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SURF}, + .battleAnimScript = Move_DIVE, }, [MOVE_ARM_THRUST] = @@ -7123,6 +7415,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_ARM_THRUST, }, [MOVE_CAMOUFLAGE] = @@ -7146,7 +7439,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CAMOUFLAGE, }, [MOVE_TAIL_GLOW] = @@ -7170,7 +7464,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAIL_GLOW, }, [MOVE_LUSTER_PURGE] = @@ -7195,6 +7490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_LUSTER_PURGE, }, [MOVE_MIST_BALL] = @@ -7220,6 +7516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_MIST_BALL, }, [MOVE_FEATHER_DANCE] = @@ -7242,7 +7539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FEATHER_DANCE, }, [MOVE_TEETER_DANCE] = @@ -7265,7 +7563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TEETER_DANCE, }, [MOVE_BLAZE_KICK] = @@ -7292,6 +7591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BLAZE_KICK, }, [MOVE_MUD_SPORT] = @@ -7316,6 +7616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_MUD_SPORT, }, [MOVE_ICE_BALL] = @@ -7340,6 +7641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_BALL, }, [MOVE_NEEDLE_ARM] = @@ -7365,7 +7667,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NEEDLE_ARM, }, [MOVE_SLACK_OFF] = @@ -7390,7 +7693,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SLACK_OFF, }, [MOVE_HYPER_VOICE] = @@ -7412,7 +7716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_VOICE, }, [MOVE_POISON_FANG] = @@ -7438,7 +7743,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_FANG, }, [MOVE_CRUSH_CLAW] = @@ -7464,6 +7770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CRUSH_CLAW, }, [MOVE_BLAST_BURN] = @@ -7488,6 +7795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BLAST_BURN, }, [MOVE_HYDRO_CANNON] = @@ -7512,6 +7820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_HYDRO_CANNON, }, [MOVE_METEOR_MASH] = @@ -7538,7 +7847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_MASH, }, [MOVE_ASTONISH] = @@ -7564,7 +7874,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ASTONISH, }, [MOVE_WEATHER_BALL] = @@ -7587,6 +7898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_WEATHER_BALL, }, [MOVE_AROMATHERAPY] = @@ -7610,7 +7922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AROMATHERAPY, }, [MOVE_FAKE_TEARS] = @@ -7632,7 +7945,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAKE_TEARS, }, [MOVE_AIR_CUTTER] = @@ -7655,7 +7969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AIR_CUTTER, }, [MOVE_OVERHEAT] = @@ -7681,6 +7996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_OVERHEAT, }, [MOVE_ODOR_SLEUTH] = @@ -7703,7 +8019,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ODOR_SLEUTH, }, [MOVE_ROCK_TOMB] = @@ -7728,6 +8045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, + .battleAnimScript = Move_ROCK_TOMB, }, [MOVE_SILVER_WIND] = @@ -7753,7 +8071,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SILVER_WIND, }, [MOVE_METAL_SOUND] = @@ -7777,7 +8096,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_METAL_SOUND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METAL_SOUND, }, [MOVE_GRASS_WHISTLE] = @@ -7801,7 +8121,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_WHISTLE, }, [MOVE_TICKLE] = @@ -7823,7 +8144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TICKLE, }, [MOVE_COSMIC_POWER] = @@ -7847,7 +8169,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COSMIC_POWER, }, [MOVE_WATER_SPOUT] = @@ -7868,6 +8191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_SPOUT, }, [MOVE_SIGNAL_BEAM] = @@ -7891,7 +8215,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SIGNAL_BEAM, }, [MOVE_SHADOW_PUNCH] = @@ -7913,7 +8238,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_PUNCH, }, [MOVE_EXTRASENSORY] = @@ -7938,7 +8264,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXTRASENSORY, }, [MOVE_SKY_UPPERCUT] = @@ -7962,6 +8289,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_SKY_UPPERCUT, }, [MOVE_SAND_TOMB] = @@ -7985,6 +8313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SAND_TOMB, }, [MOVE_SHEER_COLD] = @@ -8005,6 +8334,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SHEER_COLD, }, [MOVE_MUDDY_WATER] = @@ -8030,6 +8360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_MUDDY_WATER, }, [MOVE_BULLET_SEED] = @@ -8051,6 +8382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_BULLET_SEED, }, [MOVE_AERIAL_ACE] = @@ -8072,7 +8404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AERIAL_ACE, }, [MOVE_ICICLE_SPEAR] = @@ -8092,7 +8425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICICLE_SPEAR, }, [MOVE_IRON_DEFENSE] = @@ -8116,7 +8450,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_DEFENSE, }, [MOVE_BLOCK] = @@ -8139,7 +8474,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BLOCK, }, [MOVE_HOWL] = @@ -8164,7 +8500,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOWL, }, [MOVE_DRAGON_CLAW] = @@ -8186,6 +8523,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_CLAW, }, [MOVE_FRENZY_PLANT] = @@ -8211,6 +8549,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_FRENZY_PLANT, }, [MOVE_BULK_UP] = @@ -8234,7 +8573,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULK_UP, }, [MOVE_BOUNCE] = @@ -8264,7 +8604,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOUNCE, }, [MOVE_MUD_SHOT] = @@ -8289,6 +8630,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_MUD_SHOT, }, [MOVE_POISON_TAIL] = @@ -8314,7 +8656,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_TAIL, }, [MOVE_COVET] = @@ -8342,7 +8685,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COVET, }, [MOVE_VOLT_TACKLE] = @@ -8370,7 +8714,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VOLT_TACKLE, }, [MOVE_MAGICAL_LEAF] = @@ -8391,6 +8736,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_MAGICAL_LEAF, }, [MOVE_WATER_SPORT] = @@ -8415,6 +8761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_WATER_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_SPORT, }, [MOVE_CALM_MIND] = @@ -8438,7 +8785,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CALM_MIND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CALM_MIND, }, [MOVE_LEAF_BLADE] = @@ -8461,7 +8809,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_BLADE, }, [MOVE_DRAGON_DANCE] = @@ -8487,6 +8836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_DANCE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_DANCE, }, [MOVE_ROCK_BLAST] = @@ -8507,7 +8857,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_BLAST, }, [MOVE_SHOCK_WAVE] = @@ -8528,6 +8879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_SHOCK_WAVE, }, [MOVE_WATER_PULSE] = @@ -8553,6 +8905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_PULSE, }, [MOVE_DOOM_DESIRE] = @@ -8574,7 +8927,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOOM_DESIRE, }, [MOVE_PSYCHO_BOOST] = @@ -8599,6 +8953,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYCHO_BOOST, }, [MOVE_ROOST] = @@ -8624,6 +8979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_BRAVE_BIRD}, + .battleAnimScript = Move_ROOST, }, [MOVE_GRAVITY] = @@ -8647,7 +9003,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRAVITY, }, [MOVE_MIRACLE_EYE] = @@ -8670,7 +9027,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRACLE_EYE, }, [MOVE_WAKE_UP_SLAP] = @@ -8695,7 +9053,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WAKE_UP_SLAP, }, [MOVE_HAMMER_ARM] = @@ -8722,6 +9081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_HAMMER_ARM, }, [MOVE_GYRO_BALL] = @@ -8743,7 +9103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GYRO_BALL, }, [MOVE_HEALING_WISH] = @@ -8765,7 +9126,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEALING_WISH, }, [MOVE_BRINE] = @@ -8786,6 +9148,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BRINE, }, [MOVE_NATURAL_GIFT] = @@ -8805,7 +9168,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURAL_GIFT, }, [MOVE_FEINT] = @@ -8831,7 +9195,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FEINT, }, [MOVE_PLUCK] = @@ -8853,7 +9218,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLUCK, }, [MOVE_TAILWIND] = @@ -8878,7 +9244,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAILWIND, }, [MOVE_ACUPRESSURE] = @@ -8902,7 +9269,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACUPRESSURE, }, [MOVE_METAL_BURST] = @@ -8924,6 +9292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, + .battleAnimScript = Move_METAL_BURST, }, [MOVE_U_TURN] = @@ -8942,7 +9311,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_U_TURN, }, [MOVE_CLOSE_COMBAT] = @@ -8966,6 +9336,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_CLOSE_COMBAT, }, [MOVE_PAYBACK] = @@ -8987,6 +9358,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PAYBACK, .contestComboMoves = {COMBO_STARTER_REVENGE}, + .battleAnimScript = Move_PAYBACK, }, [MOVE_ASSURANCE] = @@ -9008,6 +9380,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE}, + .battleAnimScript = Move_ASSURANCE, }, [MOVE_EMBARGO] = @@ -9029,7 +9402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EMBARGO, }, [MOVE_FLING] = @@ -9050,7 +9424,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLING, }, [MOVE_PSYCHO_SHIFT] = @@ -9071,7 +9446,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHO_SHIFT, }, [MOVE_TRUMP_CARD] = @@ -9092,7 +9468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRUMP_CARD, }, [MOVE_HEAL_BLOCK] = @@ -9114,7 +9491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAL_BLOCK, }, [MOVE_WRING_OUT] = @@ -9134,7 +9512,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WRING_OUT, }, [MOVE_POWER_TRICK] = @@ -9158,7 +9537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_TRICK, }, [MOVE_GASTRO_ACID] = @@ -9180,7 +9560,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GASTRO_ACID, }, [MOVE_LUCKY_CHANT] = @@ -9205,6 +9586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_LUCKY_CHANT, .contestComboMoves = {COMBO_STARTER_HEAL_BELL}, + .battleAnimScript = Move_LUCKY_CHANT, }, [MOVE_ME_FIRST] = @@ -9235,7 +9617,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ME_FIRST, }, [MOVE_COPYCAT] = @@ -9265,7 +9648,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COPYCAT, }, [MOVE_POWER_SWAP] = @@ -9287,7 +9671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_SWAP, }, [MOVE_GUARD_SWAP] = @@ -9309,7 +9694,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUARD_SWAP, }, [MOVE_PUNISHMENT] = @@ -9330,7 +9716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PUNISHMENT, }, [MOVE_LAST_RESORT] = @@ -9351,7 +9738,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LAST_RESORT, }, [MOVE_WORRY_SEED] = @@ -9374,6 +9762,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_WORRY_SEED, .contestComboMoves = {COMBO_STARTER_LEECH_SEED}, + .battleAnimScript = Move_WORRY_SEED, }, [MOVE_SUCKER_PUNCH] = @@ -9392,7 +9781,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUCKER_PUNCH, }, [MOVE_TOXIC_SPIKES] = @@ -9418,7 +9808,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOXIC_SPIKES, }, [MOVE_HEART_SWAP] = @@ -9440,7 +9831,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEART_SWAP, }, [MOVE_AQUA_RING] = @@ -9464,7 +9856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AQUA_RING, }, [MOVE_MAGNET_RISE] = @@ -9489,7 +9882,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNET_RISE, }, [MOVE_FLARE_BLITZ] = @@ -9517,6 +9911,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLARE_BLITZ, }, [MOVE_FORCE_PALM] = @@ -9541,7 +9936,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORCE_PALM, }, [MOVE_AURA_SPHERE] = @@ -9563,7 +9959,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AURA_SPHERE, }, [MOVE_ROCK_POLISH] = @@ -9587,7 +9984,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_POLISH, }, [MOVE_POISON_JAB] = @@ -9612,7 +10010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_JAB, }, [MOVE_DARK_PULSE] = @@ -9637,7 +10036,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARK_PULSE, }, [MOVE_NIGHT_SLASH] = @@ -9660,7 +10060,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_SLASH, }, [MOVE_AQUA_TAIL] = @@ -9682,6 +10083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_AQUA_TAIL, }, [MOVE_SEED_BOMB] = @@ -9702,7 +10104,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEED_BOMB, }, [MOVE_AIR_SLASH] = @@ -9727,7 +10130,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AIR_SLASH, }, [MOVE_X_SCISSOR] = @@ -9750,6 +10154,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_X_SCISSOR, }, [MOVE_BUG_BUZZ] = @@ -9775,7 +10180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BUG_BUZZ, }, [MOVE_DRAGON_PULSE] = @@ -9796,7 +10202,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_PULSE, }, [MOVE_DRAGON_RUSH] = @@ -9823,6 +10230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RUSH, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_RUSH, }, [MOVE_POWER_GEM] = @@ -9842,7 +10250,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_GEM, }, [MOVE_DRAIN_PUNCH] = @@ -9864,6 +10273,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_DRAIN_PUNCH, }, [MOVE_VACUUM_WAVE] = @@ -9883,7 +10293,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VACUUM_WAVE, }, [MOVE_FOCUS_BLAST] = @@ -9909,6 +10320,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_FOCUS_BLAST, }, [MOVE_ENERGY_BALL] = @@ -9934,6 +10346,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_ENERGY_BALL, }, [MOVE_BRAVE_BIRD] = @@ -9955,7 +10368,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BRAVE_BIRD, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRAVE_BIRD, }, [MOVE_EARTH_POWER] = @@ -9980,7 +10394,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EARTH_POWER, }, [MOVE_SWITCHEROO] = @@ -10004,7 +10419,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWITCHEROO, }, [MOVE_GIGA_IMPACT] = @@ -10027,7 +10443,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GIGA_IMPACT, }, [MOVE_NASTY_PLOT] = @@ -10051,7 +10468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NASTY_PLOT, }, [MOVE_BULLET_PUNCH] = @@ -10073,7 +10491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULLET_PUNCH, }, [MOVE_AVALANCHE] = @@ -10092,7 +10511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AVALANCHE, }, [MOVE_ICE_SHARD] = @@ -10112,7 +10532,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICE_SHARD, }, [MOVE_SHADOW_CLAW] = @@ -10134,7 +10555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_CLAW, }, [MOVE_THUNDER_FANG] = @@ -10165,6 +10587,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_THUNDER_FANG, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG}, + .battleAnimScript = Move_THUNDER_FANG, }, [MOVE_ICE_FANG] = @@ -10199,6 +10622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_ICE_FANG, .contestComboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG}, + .battleAnimScript = Move_ICE_FANG, }, [MOVE_FIRE_FANG] = @@ -10229,6 +10653,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_FANG, .contestComboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG}, + .battleAnimScript = Move_FIRE_FANG, }, [MOVE_SHADOW_SNEAK] = @@ -10249,7 +10674,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_SNEAK, }, [MOVE_MUD_BOMB] = @@ -10274,7 +10700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MUD_BOMB, }, [MOVE_PSYCHO_CUT] = @@ -10296,7 +10723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHO_CUT, }, [MOVE_ZEN_HEADBUTT] = @@ -10321,7 +10749,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ZEN_HEADBUTT, }, [MOVE_MIRROR_SHOT] = @@ -10345,7 +10774,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRROR_SHOT, }, [MOVE_FLASH_CANNON] = @@ -10369,7 +10799,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLASH_CANNON, }, [MOVE_ROCK_CLIMB] = @@ -10394,7 +10825,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_CLIMB, }, [MOVE_DEFOG] = @@ -10412,12 +10844,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_ACC_UP_1 }, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS == GEN_4, + //.ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DEFOG, }, [MOVE_TRICK_ROOM] = @@ -10439,7 +10872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK_ROOM, }, [MOVE_DRACO_METEOR] = @@ -10463,7 +10897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRACO_METEOR, }, [MOVE_DISCHARGE] = @@ -10488,6 +10923,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_DISCHARGE, }, [MOVE_LAVA_PLUME] = @@ -10510,6 +10946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_LAVA_PLUME, }, [MOVE_LEAF_STORM] = @@ -10533,7 +10970,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_STORM, }, [MOVE_POWER_WHIP] = @@ -10555,6 +10993,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_POWER_WHIP, }, [MOVE_ROCK_WRECKER] = @@ -10577,7 +11016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_WRECKER, }, [MOVE_CROSS_POISON] = @@ -10604,7 +11044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CROSS_POISON, }, [MOVE_GUNK_SHOT] = @@ -10628,7 +11069,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUNK_SHOT, }, [MOVE_IRON_HEAD] = @@ -10653,7 +11095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_HEAD, }, [MOVE_MAGNET_BOMB] = @@ -10674,7 +11117,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNET_BOMB, }, [MOVE_STONE_EDGE] = @@ -10695,7 +11139,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STONE_EDGE, }, [MOVE_CAPTIVATE] = @@ -10718,6 +11163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_CAPTIVATE, }, [MOVE_STEALTH_ROCK] = @@ -10742,7 +11188,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEALTH_ROCK, }, [MOVE_GRASS_KNOT] = @@ -10764,7 +11211,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_KNOT, }, [MOVE_CHATTER] = @@ -10803,7 +11251,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHATTER, }, [MOVE_JUDGMENT] = @@ -10824,7 +11273,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_JUDGMENT, }, [MOVE_BUG_BITE] = @@ -10846,7 +11296,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BUG_BITE, }, [MOVE_CHARGE_BEAM] = @@ -10872,6 +11323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_CHARGE_BEAM, }, [MOVE_WOOD_HAMMER] = @@ -10893,7 +11345,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WOOD_HAMMER, }, [MOVE_AQUA_JET] = @@ -10915,6 +11368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_AQUA_JET, }, [MOVE_ATTACK_ORDER] = @@ -10936,6 +11390,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_ATTACK_ORDER, .contestComboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER}, + .battleAnimScript = Move_ATTACK_ORDER, }, [MOVE_DEFEND_ORDER] = @@ -10960,6 +11415,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_DEFEND_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER}, + .battleAnimScript = Move_DEFEND_ORDER, }, [MOVE_HEAL_ORDER] = @@ -10985,6 +11441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HEAL_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER}, + .battleAnimScript = Move_HEAL_ORDER, }, [MOVE_HEAD_SMASH] = @@ -11006,7 +11463,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAD_SMASH, }, [MOVE_DOUBLE_HIT] = @@ -11028,7 +11486,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_HIT, }, [MOVE_ROAR_OF_TIME] = @@ -11052,7 +11511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROAR_OF_TIME, }, [MOVE_SPACIAL_REND] = @@ -11073,7 +11533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPACIAL_REND, }, [MOVE_LUNAR_DANCE] = @@ -11096,7 +11557,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LUNAR_DANCE, }, [MOVE_CRUSH_GRIP] = @@ -11116,7 +11578,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CRUSH_GRIP, }, [MOVE_MAGMA_STORM] = @@ -11140,6 +11603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MAGMA_STORM, }, [MOVE_DARK_VOID] = @@ -11162,7 +11626,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARK_VOID, }, [MOVE_SEED_FLARE] = @@ -11186,7 +11651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEED_FLARE, }, [MOVE_OMINOUS_WIND] = @@ -11212,7 +11678,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OMINOUS_WIND, }, [MOVE_SHADOW_FORCE] = @@ -11240,7 +11707,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_FORCE, }, [MOVE_HONE_CLAWS] = @@ -11264,7 +11732,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HONE_CLAWS, }, [MOVE_WIDE_GUARD] = @@ -11290,7 +11759,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WIDE_GUARD, }, [MOVE_GUARD_SPLIT] = @@ -11312,7 +11782,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUARD_SPLIT, }, [MOVE_POWER_SPLIT] = @@ -11334,7 +11805,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_SPLIT, }, [MOVE_WONDER_ROOM] = @@ -11356,7 +11828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WONDER_ROOM, }, [MOVE_PSYSHOCK] = @@ -11374,7 +11847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYSHOCK, }, [MOVE_VENOSHOCK] = @@ -11396,6 +11870,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_VENOSHOCK, }, [MOVE_AUTOTOMIZE] = @@ -11419,7 +11894,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AUTOTOMIZE, }, [MOVE_RAGE_POWDER] = @@ -11446,7 +11922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAGE_POWDER, }, [MOVE_TELEKINESIS] = @@ -11469,7 +11946,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TELEKINESIS, }, [MOVE_MAGIC_ROOM] = @@ -11491,7 +11969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_ROOM, }, [MOVE_SMACK_DOWN] = @@ -11516,7 +11995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMACK_DOWN, }, [MOVE_STORM_THROW] = @@ -11536,7 +12016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STORM_THROW, }, [MOVE_FLAME_BURST] = @@ -11560,7 +12041,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLAME_BURST, }, [MOVE_SLUDGE_WAVE] = @@ -11584,7 +12066,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SLUDGE_WAVE, }, [MOVE_QUIVER_DANCE] = @@ -11609,7 +12092,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUIVER_DANCE, }, [MOVE_HEAVY_SLAM] = @@ -11630,7 +12114,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAVY_SLAM, }, [MOVE_SYNCHRONOISE] = @@ -11650,7 +12135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SYNCHRONOISE, }, [MOVE_ELECTRO_BALL] = @@ -11671,7 +12157,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRO_BALL, }, [MOVE_SOAK] = @@ -11693,7 +12180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SOAK, }, [MOVE_FLAME_CHARGE] = @@ -11719,7 +12207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLAME_CHARGE, }, [MOVE_COIL] = @@ -11743,7 +12232,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COIL, }, [MOVE_LOW_SWEEP] = @@ -11768,7 +12258,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOW_SWEEP, }, [MOVE_ACID_SPRAY] = @@ -11793,7 +12284,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID_SPRAY, }, [MOVE_FOUL_PLAY] = @@ -11814,7 +12306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOUL_PLAY, }, [MOVE_SIMPLE_BEAM] = @@ -11836,7 +12329,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SIMPLE_BEAM, }, [MOVE_ENTRAINMENT] = @@ -11858,7 +12352,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENTRAINMENT, }, [MOVE_AFTER_YOU] = @@ -11883,7 +12378,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AFTER_YOU, }, [MOVE_ROUND] = @@ -11908,7 +12404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROUND, }, [MOVE_ECHOED_VOICE] = @@ -11930,7 +12427,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ECHOED_VOICE, }, [MOVE_CHIP_AWAY] = @@ -11950,7 +12448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHIP_AWAY, }, [MOVE_CLEAR_SMOG] = @@ -11973,7 +12472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLEAR_SMOG, }, [MOVE_STORED_POWER] = @@ -11993,7 +12493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STORED_POWER, }, [MOVE_QUICK_GUARD] = @@ -12019,7 +12520,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUICK_GUARD, }, [MOVE_ALLY_SWITCH] = @@ -12042,7 +12544,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ALLY_SWITCH, }, [MOVE_SCALD] = @@ -12067,7 +12570,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCALD, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCALD, }, [MOVE_SHELL_SMASH] = @@ -12091,7 +12595,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_SMASH, }, [MOVE_HEAL_PULSE] = @@ -12116,7 +12621,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAL_PULSE, }, [MOVE_HEX] = @@ -12139,6 +12645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_HEX, }, [MOVE_SKY_DROP] = @@ -12164,7 +12671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKY_DROP, }, [MOVE_SHIFT_GEAR] = @@ -12188,7 +12696,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHIFT_GEAR, }, [MOVE_CIRCLE_THROW] = @@ -12209,7 +12718,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CIRCLE_THROW, }, [MOVE_INCINERATE] = @@ -12232,7 +12742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INCINERATE, }, [MOVE_QUASH] = @@ -12254,7 +12765,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUASH, }, [MOVE_ACROBATICS] = @@ -12275,7 +12787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACROBATICS, }, [MOVE_REFLECT_TYPE] = @@ -12298,7 +12811,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_REFLECT_TYPE, }, [MOVE_RETALIATE] = @@ -12319,7 +12833,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RETALIATE, }, [MOVE_FINAL_GAMBIT] = @@ -12341,7 +12856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FINAL_GAMBIT, }, [MOVE_BESTOW] = @@ -12367,7 +12883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BESTOW, }, [MOVE_INFERNO] = @@ -12391,7 +12908,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INFERNO, }, [MOVE_WATER_PLEDGE] = @@ -12412,7 +12930,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WATER_PLEDGE, }, [MOVE_FIRE_PLEDGE] = @@ -12433,7 +12952,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIRE_PLEDGE, }, [MOVE_GRASS_PLEDGE] = @@ -12454,7 +12974,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_PLEDGE, }, [MOVE_VOLT_SWITCH] = @@ -12472,7 +12993,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VOLT_SWITCH, }, [MOVE_STRUGGLE_BUG] = @@ -12496,7 +13018,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRUGGLE_BUG, }, [MOVE_BULLDOZE] = @@ -12521,7 +13044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULLDOZE, }, [MOVE_FROST_BREATH] = @@ -12540,7 +13064,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FROST_BREATH, }, [MOVE_DRAGON_TAIL] = @@ -12562,6 +13087,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_TAIL, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH}, + .battleAnimScript = Move_DRAGON_TAIL, }, [MOVE_WORK_UP] = @@ -12585,7 +13111,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WORK_UP, }, [MOVE_ELECTROWEB] = @@ -12609,7 +13136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTROWEB, }, [MOVE_WILD_CHARGE] = @@ -12631,7 +13159,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WILD_CHARGE, }, [MOVE_DRILL_RUN] = @@ -12653,7 +13182,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRILL_RUN, }, [MOVE_DUAL_CHOP] = @@ -12675,7 +13205,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DUAL_CHOP, }, [MOVE_HEART_STAMP] = @@ -12700,7 +13231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEART_STAMP, }, [MOVE_HORN_LEECH] = @@ -12720,7 +13252,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HORN_LEECH, }, [MOVE_SACRED_SWORD] = @@ -12741,7 +13274,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SACRED_SWORD, }, [MOVE_RAZOR_SHELL] = @@ -12767,7 +13301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAZOR_SHELL, }, [MOVE_HEAT_CRASH] = @@ -12787,7 +13322,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAT_CRASH, }, [MOVE_LEAF_TORNADO] = @@ -12812,7 +13348,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_TORNADO, }, [MOVE_STEAMROLLER] = @@ -12838,7 +13375,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEAMROLLER, }, [MOVE_COTTON_GUARD] = @@ -12862,7 +13400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COTTON_GUARD, }, [MOVE_NIGHT_DAZE] = @@ -12886,7 +13425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_DAZE, }, [MOVE_PSYSTRIKE] = @@ -12904,7 +13444,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYSTRIKE, }, [MOVE_TAIL_SLAP] = @@ -12925,7 +13466,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAIL_SLAP, }, [MOVE_HURRICANE] = @@ -12951,7 +13493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HURRICANE, }, [MOVE_HEAD_CHARGE] = @@ -12973,7 +13516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAD_CHARGE, }, [MOVE_GEAR_GRIND] = @@ -12996,7 +13540,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEAR_GRIND, }, [MOVE_SEARING_SHOT] = @@ -13019,7 +13564,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEARING_SHOT, }, [MOVE_TECHNO_BLAST] = @@ -13041,7 +13587,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TECHNO_BLAST, }, [MOVE_RELIC_SONG] = @@ -13069,7 +13616,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RELIC_SONG, }, [MOVE_SECRET_SWORD] = @@ -13091,7 +13639,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SECRET_SWORD, }, [MOVE_GLACIATE] = @@ -13115,7 +13664,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GLACIATE, }, [MOVE_BOLT_STRIKE] = @@ -13140,7 +13690,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOLT_STRIKE, }, [MOVE_BLUE_FLARE] = @@ -13164,7 +13715,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BLUE_FLARE, }, [MOVE_FIERY_DANCE] = @@ -13190,7 +13742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIERY_DANCE, }, [MOVE_FREEZE_SHOCK] = @@ -13218,7 +13771,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZE_SHOCK, }, [MOVE_ICE_BURN] = @@ -13246,7 +13800,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICE_BURN, }, [MOVE_SNARL] = @@ -13273,7 +13828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNARL, }, [MOVE_ICICLE_CRASH] = @@ -13297,7 +13853,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICICLE_CRASH, }, [MOVE_V_CREATE] = @@ -13324,7 +13881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_V_CREATE, }, [MOVE_FUSION_FLARE] = @@ -13345,7 +13903,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FUSION_FLARE, }, [MOVE_FUSION_BOLT] = @@ -13365,7 +13924,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FUSION_BOLT, }, [MOVE_FLYING_PRESS] = @@ -13391,7 +13951,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLYING_PRESS, }, [MOVE_MAT_BLOCK] = @@ -13420,7 +13981,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAT_BLOCK, }, [MOVE_BELCH] = @@ -13448,7 +14010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BELCH, }, [MOVE_ROTOTILLER] = @@ -13472,7 +14035,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROTOTILLER, }, [MOVE_STICKY_WEB] = @@ -13497,7 +14061,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STICKY_WEB, }, [MOVE_FELL_STINGER] = @@ -13518,7 +14083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FELL_STINGER, }, [MOVE_PHANTOM_FORCE] = @@ -13546,7 +14112,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PHANTOM_FORCE, }, [MOVE_TRICK_OR_TREAT] = @@ -13569,7 +14136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK_OR_TREAT, }, [MOVE_NOBLE_ROAR] = @@ -13593,7 +14161,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NOBLE_ROAR, }, [MOVE_ION_DELUGE] = @@ -13616,7 +14185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ION_DELUGE, }, [MOVE_PARABOLIC_CHARGE] = @@ -13637,7 +14207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PARABOLIC_CHARGE, }, [MOVE_FORESTS_CURSE] = @@ -13660,7 +14231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORESTS_CURSE, }, [MOVE_PETAL_BLIZZARD] = @@ -13681,7 +14253,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PETAL_BLIZZARD, }, [MOVE_FREEZE_DRY] = @@ -13710,7 +14283,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZE_DRY, }, [MOVE_DISARMING_VOICE] = @@ -13732,7 +14306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DISARMING_VOICE, }, [MOVE_PARTING_SHOT] = @@ -13756,7 +14331,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PARTING_SHOT, }, [MOVE_TOPSY_TURVY] = @@ -13778,7 +14354,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOPSY_TURVY, }, [MOVE_DRAINING_KISS] = @@ -13799,7 +14376,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAINING_KISS, }, [MOVE_CRAFTY_SHIELD] = @@ -13824,7 +14402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CRAFTY_SHIELD, }, [MOVE_FLOWER_SHIELD] = @@ -13847,7 +14426,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLOWER_SHIELD, }, [MOVE_GRASSY_TERRAIN] = @@ -13871,7 +14451,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_GRASSY_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASSY_TERRAIN, }, [MOVE_MISTY_TERRAIN] = @@ -13895,7 +14476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MISTY_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MISTY_TERRAIN, }, [MOVE_ELECTRIFY] = @@ -13916,7 +14498,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRIFY, }, [MOVE_PLAY_ROUGH] = @@ -13941,7 +14524,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLAY_ROUGH, }, [MOVE_FAIRY_WIND] = @@ -13962,7 +14546,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAIRY_WIND, }, [MOVE_MOONBLAST] = @@ -13986,7 +14571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MOONBLAST, }, [MOVE_BOOMBURST] = @@ -14008,7 +14594,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOOMBURST, }, [MOVE_FAIRY_LOCK] = @@ -14031,7 +14618,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAIRY_LOCK, }, [MOVE_KINGS_SHIELD] = @@ -14058,7 +14646,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_KINGS_SHIELD, }, [MOVE_PLAY_NICE] = @@ -14082,7 +14671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLAY_NICE, }, [MOVE_CONFIDE] = @@ -14107,7 +14697,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONFIDE, }, [MOVE_DIAMOND_STORM] = @@ -14132,7 +14723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIAMOND_STORM, }, [MOVE_STEAM_ERUPTION] = @@ -14159,6 +14751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, + .battleAnimScript = Move_STEAM_ERUPTION, }, [MOVE_HYPERSPACE_HOLE] = @@ -14183,6 +14776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_HOLE, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_FURY}, + .battleAnimScript = Move_HYPERSPACE_HOLE, }, [MOVE_WATER_SHURIKEN] = @@ -14202,7 +14796,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WATER_SHURIKEN, }, [MOVE_MYSTICAL_FIRE] = @@ -14226,7 +14821,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MYSTICAL_FIRE, }, [MOVE_SPIKY_SHIELD] = @@ -14252,7 +14848,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKY_SHIELD, }, [MOVE_AROMATIC_MIST] = @@ -14276,7 +14873,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AROMATIC_MIST, }, [MOVE_EERIE_IMPULSE] = @@ -14298,7 +14896,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EERIE_IMPULSE, }, [MOVE_VENOM_DRENCH] = @@ -14321,6 +14920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_VENOM_DRENCH, }, [MOVE_POWDER] = @@ -14340,11 +14940,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .zMove = { .effect = Z_EFFECT_SPDEF_UP_2 }, .powderMove = TRUE, .magicCoatAffected = TRUE, - .ignoresSubstitute = TRUE, .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWDER, }, [MOVE_GEOMANCY] = @@ -14369,7 +14969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEOMANCY, }, [MOVE_MAGNETIC_FLUX] = @@ -14394,7 +14995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNETIC_FLUX, }, [MOVE_HAPPY_HOUR] = @@ -14417,7 +15019,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HAPPY_HOUR, }, [MOVE_ELECTRIC_TERRAIN] = @@ -14441,7 +15044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRIC_TERRAIN, }, [MOVE_DAZZLING_GLEAM] = @@ -14461,7 +15065,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DAZZLING_GLEAM, }, [MOVE_CELEBRATE] = @@ -14490,7 +15095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CELEBRATE, }, [MOVE_HOLD_HANDS] = @@ -14519,7 +15125,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOLD_HANDS, }, [MOVE_BABY_DOLL_EYES] = @@ -14541,7 +15148,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BABY_DOLL_EYES, }, [MOVE_NUZZLE] = @@ -14566,7 +15174,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NUZZLE, }, [MOVE_HOLD_BACK] = @@ -14585,7 +15194,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOLD_BACK, }, [MOVE_INFESTATION] = @@ -14609,7 +15219,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INFESTATION, }, [MOVE_POWER_UP_PUNCH] = @@ -14636,7 +15247,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_UP_PUNCH, }, [MOVE_OBLIVION_WING] = @@ -14656,7 +15268,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OBLIVION_WING, }, [MOVE_THOUSAND_ARROWS] = @@ -14684,6 +15297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_ARROWS, .contestComboMoves = {COMBO_STARTER_THOUSAND_WAVES}, + .battleAnimScript = Move_THOUSAND_ARROWS, }, [MOVE_THOUSAND_WAVES] = @@ -14709,6 +15323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_WAVES, .contestComboMoves = {COMBO_STARTER_THOUSAND_ARROWS}, + .battleAnimScript = Move_THOUSAND_WAVES, }, [MOVE_LANDS_WRATH] = @@ -14729,7 +15344,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LANDS_WRATH, }, [MOVE_LIGHT_OF_RUIN] = @@ -14748,6 +15364,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_LIGHT_OF_RUIN, }, [MOVE_ORIGIN_PULSE] = @@ -14769,7 +15386,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ORIGIN_PULSE, }, [MOVE_PRECIPICE_BLADES] = @@ -14790,7 +15408,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRECIPICE_BLADES, }, [MOVE_DRAGON_ASCENT] = @@ -14814,7 +15433,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_ASCENT, }, [MOVE_HYPERSPACE_FURY] = @@ -14842,6 +15462,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_FURY, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_HOLE}, + .battleAnimScript = Move_HYPERSPACE_FURY, }, [MOVE_SHORE_UP] = @@ -14866,7 +15487,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_SANDSTORM} + .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SHORE_UP, }, [MOVE_FIRST_IMPRESSION] = @@ -14888,7 +15510,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIRST_IMPRESSION, }, [MOVE_BANEFUL_BUNKER] = @@ -14914,7 +15537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BANEFUL_BUNKER, }, [MOVE_SPIRIT_SHACKLE] = @@ -14938,7 +15562,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIRIT_SHACKLE, }, [MOVE_DARKEST_LARIAT] = @@ -14960,7 +15585,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARKEST_LARIAT, }, [MOVE_SPARKLING_ARIA] = @@ -14988,6 +15614,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, + .battleAnimScript = Move_SPARKLING_ARIA, }, [MOVE_ICE_HAMMER] = @@ -15014,6 +15641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_HAMMER, }, [MOVE_FLORAL_HEALING] = @@ -15038,7 +15666,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLORAL_HEALING, }, [MOVE_HIGH_HORSEPOWER] = @@ -15059,7 +15688,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HIGH_HORSEPOWER, }, [MOVE_STRENGTH_SAP] = @@ -15082,7 +15712,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRENGTH_SAP, }, [MOVE_SOLAR_BLADE] = @@ -15108,6 +15739,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SOLAR_BLADE, }, [MOVE_LEAFAGE] = @@ -15128,6 +15760,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_LEAFAGE, }, [MOVE_SPOTLIGHT] = @@ -15153,7 +15786,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPOTLIGHT, }, [MOVE_TOXIC_THREAD] = @@ -15176,6 +15810,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_TOXIC_THREAD, }, [MOVE_LASER_FOCUS] = @@ -15199,7 +15834,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LASER_FOCUS, }, [MOVE_GEAR_UP] = @@ -15224,7 +15860,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEAR_UP, }, [MOVE_THROAT_CHOP] = @@ -15249,7 +15886,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THROAT_CHOP, }, [MOVE_POLLEN_PUFF] = @@ -15270,7 +15908,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POLLEN_PUFF, }, [MOVE_ANCHOR_SHOT] = @@ -15295,7 +15934,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ANCHOR_SHOT, }, [MOVE_PSYCHIC_TERRAIN] = @@ -15318,7 +15958,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHIC_TERRAIN, }, [MOVE_LUNGE] = @@ -15343,7 +15984,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LUNGE, }, [MOVE_FIRE_LASH] = @@ -15369,6 +16011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_LASH, }, [MOVE_POWER_TRIP] = @@ -15389,7 +16032,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_TRIP, }, [MOVE_BURN_UP] = @@ -15416,6 +16060,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BURN_UP, }, [MOVE_SPEED_SWAP] = @@ -15437,7 +16082,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPEED_SWAP, }, [MOVE_SMART_STRIKE] = @@ -15458,7 +16104,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMART_STRIKE, }, [MOVE_PURIFY] = @@ -15482,7 +16129,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PURIFY, }, [MOVE_REVELATION_DANCE] = @@ -15503,7 +16151,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_REVELATION_DANCE, }, [MOVE_CORE_ENFORCER] = @@ -15527,7 +16176,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CORE_ENFORCER, }, [MOVE_TROP_KICK] = @@ -15552,7 +16202,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TROP_KICK, }, [MOVE_INSTRUCT] = @@ -15577,7 +16228,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INSTRUCT, }, [MOVE_BEAK_BLAST] = @@ -15605,7 +16257,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BEAK_BLAST, }, [MOVE_CLANGING_SCALES] = @@ -15631,7 +16284,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLANGING_SCALES, }, [MOVE_DRAGON_HAMMER] = @@ -15653,6 +16307,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_HAMMER, }, [MOVE_BRUTAL_SWING] = @@ -15673,7 +16328,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRUTAL_SWING, }, [MOVE_AURORA_VEIL] = @@ -15698,6 +16354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_AURORA_VEIL, }, [MOVE_SHELL_TRAP] = @@ -15724,7 +16381,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_TRAP, }, [MOVE_FLEUR_CANNON] = @@ -15749,7 +16407,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLEUR_CANNON, }, [MOVE_PSYCHIC_FANGS] = @@ -15771,7 +16430,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHIC_FANGS, }, [MOVE_STOMPING_TANTRUM] = @@ -15793,7 +16453,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STOMPING_TANTRUM, }, [MOVE_SHADOW_BONE] = @@ -15818,6 +16479,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SHADOW_BONE, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, + .battleAnimScript = Move_SHADOW_BONE, }, [MOVE_ACCELEROCK] = @@ -15838,7 +16500,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACCELEROCK, }, [MOVE_LIQUIDATION] = @@ -15864,6 +16527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_LIQUIDATION, }, [MOVE_PRISMATIC_LASER] = @@ -15887,7 +16551,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRISMATIC_LASER, }, [MOVE_SPECTRAL_THIEF] = @@ -15913,7 +16578,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPECTRAL_THIEF, }, [MOVE_SUNSTEEL_STRIKE] = @@ -15936,7 +16602,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUNSTEEL_STRIKE, }, [MOVE_MOONGEIST_BEAM] = @@ -15958,7 +16625,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MOONGEIST_BEAM, }, [MOVE_TEARFUL_LOOK] = @@ -15981,7 +16649,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TEARFUL_LOOK, }, [MOVE_ZING_ZAP] = @@ -16007,6 +16676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_ZING_ZAP, }, [MOVE_NATURES_MADNESS] = @@ -16027,7 +16697,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURES_MADNESS, }, [MOVE_MULTI_ATTACK] = @@ -16049,7 +16720,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MULTI_ATTACK, }, [MOVE_MIND_BLOWN] = @@ -16070,7 +16742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIND_BLOWN, }, [MOVE_PLASMA_FISTS] = @@ -16093,7 +16766,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLASMA_FISTS, }, [MOVE_PHOTON_GEYSER] = @@ -16115,7 +16789,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PHOTON_GEYSER, }, [MOVE_ZIPPY_ZAP] = @@ -16142,6 +16817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .chance = 100, }), #endif + .battleAnimScript = Move_ZIPPY_ZAP, }, [MOVE_SPLISHY_SPLASH] = @@ -16164,6 +16840,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), + .battleAnimScript = Move_SPLISHY_SPLASH, }, [MOVE_FLOATY_FALL] = @@ -16188,6 +16865,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_FLOATY_FALL, }, [MOVE_PIKA_PAPOW] = @@ -16206,6 +16884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_PIKA_PAPOW, }, [MOVE_BOUNCY_BUBBLE] = @@ -16230,6 +16909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, + .battleAnimScript = Move_BOUNCY_BUBBLE, }, [MOVE_BUZZY_BUZZ] = @@ -16252,6 +16932,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), + .battleAnimScript = Move_BUZZY_BUZZ, }, [MOVE_SIZZLY_SLIDE] = @@ -16276,6 +16957,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 100, }), + .battleAnimScript = Move_SIZZLY_SLIDE, }, [MOVE_GLITZY_GLOW] = @@ -16294,6 +16976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_GLITZY_GLOW, }, [MOVE_BADDY_BAD] = @@ -16312,6 +16995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_BADDY_BAD, }, [MOVE_SAPPY_SEED] = @@ -16331,6 +17015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SAPPY_SEED, }, [MOVE_FREEZY_FROST] = @@ -16349,6 +17034,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_FREEZY_FROST, }, [MOVE_SPARKLY_SWIRL] = @@ -16367,6 +17053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_SPARKLY_SWIRL, }, [MOVE_VEEVEE_VOLLEY] = @@ -16386,6 +17073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_VEEVEE_VOLLEY, }, [MOVE_DOUBLE_IRON_BASH] = @@ -16414,7 +17102,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_IRON_BASH, }, [MOVE_DYNAMAX_CANNON] = @@ -16444,6 +17133,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DYNAMAX_CANNON, }, [MOVE_SNIPE_SHOT] = @@ -16464,7 +17154,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNIPE_SHOT, }, [MOVE_JAW_LOCK] = @@ -16489,7 +17180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_JAW_LOCK, }, [MOVE_STUFF_CHEEKS] = @@ -16512,7 +17204,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STUFF_CHEEKS, }, [MOVE_NO_RETREAT] = @@ -16535,7 +17228,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NO_RETREAT, }, [MOVE_TAR_SHOT] = @@ -16556,7 +17250,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAR_SHOT, }, [MOVE_MAGIC_POWDER] = @@ -16579,7 +17274,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_POWDER, }, [MOVE_DRAGON_DARTS] = @@ -16602,6 +17298,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_DARTS, }, [MOVE_TEATIME] = @@ -16625,6 +17322,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_TEATIME, }, [MOVE_OCTOLOCK] = @@ -16644,7 +17342,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OCTOLOCK, }, [MOVE_BOLT_BEAK] = @@ -16665,7 +17364,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOLT_BEAK, }, [MOVE_FISHIOUS_REND] = @@ -16687,7 +17387,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FISHIOUS_REND, }, [MOVE_COURT_CHANGE] = @@ -16708,7 +17409,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COURT_CHANGE, }, [MOVE_CLANGOROUS_SOUL] = @@ -16734,7 +17436,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLANGOROUS_SOUL, }, [MOVE_BODY_PRESS] = @@ -16757,7 +17460,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BODY_PRESS, }, [MOVE_DECORATE] = @@ -16780,7 +17484,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DECORATE, }, [MOVE_DRUM_BEATING] = @@ -16805,7 +17510,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRUM_BEATING, }, [MOVE_SNAP_TRAP] = @@ -16831,7 +17537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNAP_TRAP, }, [MOVE_PYRO_BALL] = @@ -16858,7 +17565,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PYRO_BALL, }, [MOVE_BEHEMOTH_BLADE] = @@ -16885,6 +17593,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BEHEMOTH_BLADE, }, [MOVE_BEHEMOTH_BASH] = @@ -16910,6 +17619,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BEHEMOTH_BASH, }, [MOVE_AURA_WHEEL] = @@ -16935,7 +17645,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AURA_WHEEL, }, [MOVE_BREAKING_SWIPE] = @@ -16962,6 +17673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BREAKING_SWIPE, }, [MOVE_BRANCH_POKE] = @@ -16983,7 +17695,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRANCH_POKE, }, [MOVE_OVERDRIVE] = @@ -17007,6 +17720,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_OVERDRIVE, }, [MOVE_APPLE_ACID] = @@ -17031,7 +17745,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_APPLE_ACID, }, [MOVE_GRAV_APPLE] = @@ -17057,6 +17772,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_GRAV_APPLE, }, [MOVE_SPIRIT_BREAK] = @@ -17082,7 +17798,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIRIT_BREAK, }, [MOVE_STRANGE_STEAM] = @@ -17107,7 +17824,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRANGE_STEAM, }, [MOVE_LIFE_DEW] = @@ -17133,7 +17851,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LIFE_DEW, }, [MOVE_OBSTRUCT] = @@ -17158,6 +17877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_OBSTRUCT, }, [MOVE_FALSE_SURRENDER] = @@ -17179,7 +17899,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FALSE_SURRENDER, }, [MOVE_METEOR_ASSAULT] = @@ -17205,7 +17926,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_ASSAULT, }, [MOVE_ETERNABEAM] = @@ -17230,7 +17952,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ETERNABEAM, }, [MOVE_STEEL_BEAM] = @@ -17251,7 +17974,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_BEAM, }, [MOVE_EXPANDING_FORCE] = @@ -17271,7 +17995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN} + .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}, + .battleAnimScript = Move_EXPANDING_FORCE, }, [MOVE_STEEL_ROLLER] = @@ -17295,6 +18020,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_ROLLER, }, [MOVE_SCALE_SHOT] = @@ -17316,6 +18042,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_SCALE_SHOT, }, [MOVE_METEOR_BEAM] = @@ -17343,6 +18070,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_BEAM, }, [MOVE_SHELL_SIDE_ARM] = @@ -17366,7 +18094,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_SIDE_ARM, }, [MOVE_MISTY_EXPLOSION] = @@ -17386,7 +18115,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN} + .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN}, + .battleAnimScript = Move_MISTY_EXPLOSION, }, [MOVE_GRASSY_GLIDE] = @@ -17408,7 +18138,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN} + .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN}, + .battleAnimScript = Move_GRASSY_GLIDE, }, [MOVE_RISING_VOLTAGE] = @@ -17428,7 +18159,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN} + .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}, + .battleAnimScript = Move_RISING_VOLTAGE, }, [MOVE_TERRAIN_PULSE] = @@ -17450,6 +18182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN}, + .battleAnimScript = Move_TERRAIN_PULSE, }, [MOVE_SKITTER_SMACK] = @@ -17474,7 +18207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKITTER_SMACK, }, [MOVE_BURNING_JEALOUSY] = @@ -17499,7 +18233,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BURNING_JEALOUSY, }, [MOVE_LASH_OUT] = @@ -17520,7 +18255,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LASH_OUT, }, [MOVE_POLTERGEIST] = @@ -17541,6 +18277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_POLTERGEIST, }, [MOVE_CORROSIVE_GAS] = @@ -17561,7 +18298,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CORROSIVE_GAS, }, [MOVE_COACHING] = @@ -17584,7 +18322,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COACHING, }, [MOVE_FLIP_TURN] = @@ -17605,7 +18344,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLIP_TURN, }, [MOVE_TRIPLE_AXEL] = @@ -17627,7 +18367,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRIPLE_AXEL, }, [MOVE_DUAL_WINGBEAT] = @@ -17650,6 +18391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DUAL_WINGBEAT, }, [MOVE_SCORCHING_SANDS] = @@ -17674,7 +18416,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCORCHING_SANDS, }, [MOVE_JUNGLE_HEALING] = @@ -17700,6 +18443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_JUNGLE_HEALING, }, [MOVE_WICKED_BLOW] = @@ -17723,7 +18467,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WICKED_BLOW, }, [MOVE_SURGING_STRIKES] = @@ -17748,7 +18493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SURGING_STRIKES, }, [MOVE_THUNDER_CAGE] = @@ -17772,7 +18518,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THUNDER_CAGE, }, [MOVE_DRAGON_ENERGY] = @@ -17793,7 +18540,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_ENERGY, }, [MOVE_FREEZING_GLARE] = @@ -17822,7 +18570,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZING_GLARE, }, [MOVE_FIERY_WRATH] = @@ -17848,6 +18597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_FIERY_WRATH, }, [MOVE_THUNDEROUS_KICK] = @@ -17874,6 +18624,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_THUNDEROUS_KICK, }, [MOVE_GLACIAL_LANCE] = @@ -17895,6 +18646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_GLACIAL_LANCE, }, [MOVE_ASTRAL_BARRAGE] = @@ -17916,6 +18668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_ASTRAL_BARRAGE, }, [MOVE_EERIE_SPELL] = @@ -17937,7 +18690,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EERIE_SPELL, }, [MOVE_DIRE_CLAW] = @@ -17959,6 +18713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DIRE_CLAW, .chance = 50, }), + .battleAnimScript = Move_DIRE_CLAW, }, [MOVE_PSYSHIELD_BASH] = @@ -17981,6 +18736,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_PSYSHIELD_BASH, }, [MOVE_POWER_SHIFT] = @@ -18001,6 +18757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_POWER_SHIFT, }, [MOVE_STONE_AXE] = @@ -18023,6 +18780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_STEALTH_ROCK, .chance = 100, }), + .battleAnimScript = Move_STONE_AXE, }, [MOVE_SPRINGTIDE_STORM] = @@ -18045,6 +18803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 30, }), + .battleAnimScript = Move_SPRINGTIDE_STORM, }, [MOVE_MYSTICAL_POWER] = @@ -18066,6 +18825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_MYSTICAL_POWER, }, [MOVE_RAGING_FURY] = @@ -18087,6 +18847,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_THRASH, .self = TRUE, }), + .battleAnimScript = Move_RAGING_FURY, }, [MOVE_WAVE_CRASH] = @@ -18106,6 +18867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_WAVE_CRASH, }, [MOVE_CHLOROBLAST] = @@ -18122,6 +18884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_CHLOROBLAST, }, [MOVE_MOUNTAIN_GALE] = @@ -18142,6 +18905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_MOUNTAIN_GALE, }, [MOVE_VICTORY_DANCE] = @@ -18162,6 +18926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_VICTORY_DANCE, }, [MOVE_HEADLONG_RUSH] = @@ -18184,6 +18949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), + .battleAnimScript = Move_HEADLONG_RUSH, }, [MOVE_BARB_BARRAGE] = @@ -18205,6 +18971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 50, }), + .battleAnimScript = Move_BARB_BARRAGE, }, [MOVE_ESPER_WING] = @@ -18227,6 +18994,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_ESPER_WING, }, [MOVE_BITTER_MALICE] = @@ -18247,6 +19015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_BITTER_MALICE, }, [MOVE_SHELTER] = @@ -18266,6 +19035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_SHELTER, }, [MOVE_TRIPLE_ARROWS] = @@ -18291,6 +19061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_TRIPLE_ARROWS, }, [MOVE_INFERNAL_PARADE] = @@ -18312,6 +19083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), + .battleAnimScript = Move_INFERNAL_PARADE, }, [MOVE_CEASELESS_EDGE] = @@ -18334,6 +19106,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPIKES, .chance = 100, }), + .battleAnimScript = Move_CEASELESS_EDGE, }, [MOVE_BLEAKWIND_STORM] = @@ -18355,6 +19128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 30, }), + .battleAnimScript = Move_BLEAKWIND_STORM, }, [MOVE_WILDBOLT_STORM] = @@ -18376,6 +19150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 20, }), + .battleAnimScript = Move_WILDBOLT_STORM, }, [MOVE_SANDSEAR_STORM] = @@ -18397,6 +19172,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), + .battleAnimScript = Move_SANDSEAR_STORM, }, [MOVE_LUNAR_BLESSING] = @@ -18417,6 +19193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .healingMove = TRUE, + .battleAnimScript = Move_LUNAR_BLESSING, }, [MOVE_TAKE_HEART] = @@ -18436,6 +19213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_TAKE_HEART, }, [MOVE_TERA_BLAST] = @@ -18457,6 +19235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TERA_BLAST, .self = TRUE, }), + .battleAnimScript = Move_TERA_BLAST, }, [MOVE_SILK_TRAP] = @@ -18476,6 +19255,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SILK_TRAP, }, [MOVE_AXE_KICK] = @@ -18497,6 +19277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), + .battleAnimScript = Move_AXE_KICK, }, [MOVE_LAST_RESPECTS] = @@ -18514,6 +19295,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, // Only since it isn't implemented yet + .battleAnimScript = Move_LAST_RESPECTS, }, [MOVE_LUMINA_CRASH] = @@ -18534,6 +19316,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_DEF_MINUS_2, .chance = 100, }), + .battleAnimScript = Move_LUMINA_CRASH, }, [MOVE_ORDER_UP] = @@ -18552,6 +19335,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_ORDER_UP, }, [MOVE_JET_PUNCH] = @@ -18571,6 +19355,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_JET_PUNCH, }, [MOVE_SPICY_EXTRACT] = @@ -18589,6 +19374,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SPICY_EXTRACT, }, [MOVE_SPIN_OUT] = @@ -18611,6 +19397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_2, .self = TRUE, }), + .battleAnimScript = Move_SPIN_OUT, }, [MOVE_POPULATION_BOMB] = @@ -18631,6 +19418,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .slicingMove = TRUE, .metronomeBanned = TRUE, .strikeCount = 10, + .battleAnimScript = Move_POPULATION_BOMB, }, [MOVE_ICE_SPINNER] = @@ -18650,6 +19438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_ICE_SPINNER, }, [MOVE_GLAIVE_RUSH] = @@ -18667,6 +19456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_GLAIVE_RUSH, }, [MOVE_REVIVAL_BLESSING] = @@ -18688,6 +19478,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .healingMove = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), + .battleAnimScript = Move_REVIVAL_BLESSING, }, [MOVE_SALT_CURE] = @@ -18705,6 +19496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_SALT_CURE, }, [MOVE_TRIPLE_DIVE] = @@ -18723,6 +19515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .strikeCount = 3, + .battleAnimScript = Move_TRIPLE_DIVE, }, [MOVE_MORTAL_SPIN] = @@ -18748,6 +19541,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 100, }), + .battleAnimScript = Move_MORTAL_SPIN, }, [MOVE_DOODLE] = @@ -18767,6 +19561,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_DOODLE, }, [MOVE_FILLET_AWAY] = @@ -18788,6 +19583,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_FILLET_AWAY, }, [MOVE_KOWTOW_CLEAVE] = @@ -18806,6 +19602,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_KOWTOW_CLEAVE, }, [MOVE_FLOWER_TRICK] = @@ -18823,6 +19620,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .alwaysCriticalHit = TRUE, + .battleAnimScript = Move_FLOWER_TRICK, }, [MOVE_TORCH_SONG] = @@ -18846,6 +19644,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_TORCH_SONG, }, [MOVE_AQUA_STEP] = @@ -18869,6 +19668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_AQUA_STEP, }, [MOVE_RAGING_BULL] = @@ -18887,6 +19687,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_RAGING_BULL, }, [MOVE_MAKE_IT_RAIN] = @@ -18911,6 +19712,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1, .self = TRUE, }), + .battleAnimScript = Move_MAKE_IT_RAIN, }, [MOVE_RUINATION] = @@ -18928,6 +19730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_RUINATION, }, [MOVE_COLLISION_COURSE] = @@ -18946,6 +19749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_COLLISION_COURSE, }, [MOVE_ELECTRO_DRIFT] = @@ -18964,6 +19768,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_ELECTRO_DRIFT, }, [MOVE_SHED_TAIL] = @@ -18984,6 +19789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SHED_TAIL, }, [MOVE_CHILLY_RECEPTION] = @@ -19004,6 +19810,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_CHILLY_RECEPTION, }, [MOVE_TIDY_UP] = @@ -19023,6 +19830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_TIDY_UP, }, [MOVE_SNOWSCAPE] = @@ -19043,6 +19851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SNOWSCAPE, }, [MOVE_POUNCE] = @@ -19065,6 +19874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_POUNCE, }, [MOVE_TRAILBLAZE] = @@ -19088,6 +19898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_TRAILBLAZE, }, [MOVE_CHILLING_WATER] = @@ -19109,6 +19920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_CHILLING_WATER, }, [MOVE_HYPER_DRILL] = @@ -19128,6 +19940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_HYPER_DRILL, }, [MOVE_TWIN_BEAM] = @@ -19146,6 +19959,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .metronomeBanned = TRUE, + .battleAnimScript = Move_TWIN_BEAM, }, [MOVE_RAGE_FIST] = @@ -19165,6 +19979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_RAGE_FIST, }, [MOVE_ARMOR_CANNON] = @@ -19186,6 +20001,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), + .battleAnimScript = Move_ARMOR_CANNON, }, [MOVE_BITTER_BLADE] = @@ -19205,6 +20021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .slicingMove = TRUE, .healingMove = TRUE, + .battleAnimScript = Move_BITTER_BLADE, }, [MOVE_DOUBLE_SHOCK] = @@ -19228,6 +20045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE, .self = TRUE, }), + .battleAnimScript = Move_DOUBLE_SHOCK, }, [MOVE_GIGATON_HAMMER] = @@ -19245,6 +20063,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .cantUseTwice = TRUE, + .battleAnimScript = Move_GIGATON_HAMMER, }, [MOVE_COMEUPPANCE] = @@ -19264,6 +20083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .meFirstBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_COMEUPPANCE, }, [MOVE_AQUA_CUTTER] = @@ -19282,6 +20102,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .slicingMove = TRUE, + .battleAnimScript = Move_AQUA_CUTTER, }, [MOVE_BLAZING_TORQUE] = @@ -19310,6 +20131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), + .battleAnimScript = Move_BLAZING_TORQUE, }, [MOVE_WICKED_TORQUE] = @@ -19338,6 +20160,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SLEEP, .chance = 10, }), + .battleAnimScript = Move_WICKED_TORQUE, }, [MOVE_NOXIOUS_TORQUE] = @@ -19366,6 +20189,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 30, }), + .battleAnimScript = Move_NOXIOUS_TORQUE, }, [MOVE_COMBAT_TORQUE] = @@ -19394,6 +20218,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), + .battleAnimScript = Move_COMBAT_TORQUE, }, [MOVE_MAGICAL_TORQUE] = @@ -19422,6 +20247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), + .battleAnimScript = Move_MAGICAL_TORQUE, }, [MOVE_PSYBLADE] = @@ -19440,6 +20266,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_PSYBLADE, }, [MOVE_HYDRO_STEAM] = @@ -19457,6 +20284,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .thawsUser = TRUE, + .battleAnimScript = Move_HYDRO_STEAM, }, [MOVE_BLOOD_MOON] = @@ -19474,6 +20302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .cantUseTwice = TRUE, + .battleAnimScript = Move_BLOOD_MOON, }, [MOVE_MATCHA_GOTCHA] = @@ -19497,6 +20326,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), + .battleAnimScript = Move_MATCHA_GOTCHA, }, [MOVE_SYRUP_BOMB] = @@ -19519,6 +20349,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SYRUP_BOMB, .chance = 100, }), + .battleAnimScript = Move_SYRUP_BOMB, }, [MOVE_IVY_CUDGEL] = @@ -19537,6 +20368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_IVY_CUDGEL, }, [MOVE_ELECTRO_SHOT] = @@ -19559,6 +20391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .onChargeTurnOnly = TRUE, }, SHEER_FORCE_HACK), + .battleAnimScript = Move_ELECTRO_SHOT, }, [MOVE_TERA_STARSTORM] = @@ -19579,6 +20412,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .copycatBanned = TRUE, .mimicBanned = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), + .battleAnimScript = Move_TERA_STARSTORM, }, [MOVE_FICKLE_BEAM] = @@ -19595,6 +20429,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_FICKLE_BEAM, }, [MOVE_BURNING_BULWARK] = @@ -19617,6 +20452,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .copycatBanned = TRUE, .assistBanned = TRUE, + .battleAnimScript = Move_BURNING_BULWARK, }, [MOVE_THUNDERCLAP] = @@ -19631,6 +20467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 1, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_THUNDERCLAP, }, [MOVE_MIGHTY_CLEAVE] = @@ -19648,6 +20485,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_MIGHTY_CLEAVE, }, [MOVE_TACHYON_CUTTER] = @@ -19666,6 +20504,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .slicingMove = TRUE, + .battleAnimScript = Move_TACHYON_CUTTER, }, [MOVE_HARD_PRESS] = @@ -19682,6 +20521,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = 100, .makesContact = TRUE, + .battleAnimScript = Move_HARD_PRESS, }, [MOVE_DRAGON_CHEER] = @@ -19699,6 +20539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .ignoresSubstitute = TRUE, + .battleAnimScript = Move_DRAGON_CHEER, }, [MOVE_ALLURING_VOICE] = @@ -19722,6 +20563,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .onlyIfTargetRaisedStats = TRUE, .chance = 100, }), + .battleAnimScript = Move_ALLURING_VOICE, }, [MOVE_TEMPER_FLARE] = @@ -19739,6 +20581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_TEMPER_FLARE, }, [MOVE_SUPERCELL_SLAM] = @@ -19756,6 +20599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_SUPERCELL_SLAM, }, [MOVE_PSYCHIC_NOISE] = @@ -19778,6 +20622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PSYCHIC_NOISE, .chance = 100, }), + .battleAnimScript = Move_PSYCHIC_NOISE, }, [MOVE_UPPER_HAND] = @@ -19799,6 +20644,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 100, }), + .battleAnimScript = Move_UPPER_HAND, }, [MOVE_MALIGNANT_CHAIN] = @@ -19819,6 +20665,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TOXIC, .chance = 50, }), + .battleAnimScript = Move_MALIGNANT_CHAIN, }, // Z-Moves @@ -19834,6 +20681,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, //determined from move type + .battleAnimScript = Move_BREAKNECK_BLITZ, }, [MOVE_ALL_OUT_PUMMELING] = { @@ -19847,6 +20695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_ALL_OUT_PUMMELING, }, [MOVE_SUPERSONIC_SKYSTRIKE] = { @@ -19860,6 +20709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SUPERSONIC_SKYSTRIKE, }, [MOVE_ACID_DOWNPOUR] = { @@ -19873,6 +20723,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_ACID_DOWNPOUR, }, [MOVE_TECTONIC_RAGE] = { @@ -19887,6 +20738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_TECTONIC_RAGE, }, [MOVE_CONTINENTAL_CRUSH] = { @@ -19900,6 +20752,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CONTINENTAL_CRUSH, }, [MOVE_SAVAGE_SPIN_OUT] = { @@ -19913,6 +20766,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SAVAGE_SPIN_OUT, }, [MOVE_NEVER_ENDING_NIGHTMARE] = { @@ -19926,6 +20780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_NEVER_ENDING_NIGHTMARE, }, [MOVE_CORKSCREW_CRASH] = { @@ -19939,6 +20794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CORKSCREW_CRASH, }, [MOVE_INFERNO_OVERDRIVE] = { @@ -19952,6 +20808,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_INFERNO_OVERDRIVE, }, [MOVE_HYDRO_VORTEX] = { @@ -19965,6 +20822,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_HYDRO_VORTEX, }, [MOVE_BLOOM_DOOM] = { @@ -19978,6 +20836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_BLOOM_DOOM, }, [MOVE_GIGAVOLT_HAVOC] = { @@ -19991,6 +20850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_GIGAVOLT_HAVOC, }, [MOVE_SHATTERED_PSYCHE] = { @@ -20004,6 +20864,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SHATTERED_PSYCHE, }, [MOVE_SUBZERO_SLAMMER] = { @@ -20017,6 +20878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SUBZERO_SLAMMER, }, [MOVE_DEVASTATING_DRAKE] = { @@ -20030,6 +20892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_DEVASTATING_DRAKE, }, [MOVE_BLACK_HOLE_ECLIPSE] = { @@ -20043,6 +20906,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_BLACK_HOLE_ECLIPSE, }, [MOVE_TWINKLE_TACKLE] = { @@ -20056,6 +20920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_TWINKLE_TACKLE, }, [MOVE_CATASTROPIKA] = { @@ -20069,6 +20934,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CATASTROPIKA, }, [MOVE_10000000_VOLT_THUNDERBOLT] = { @@ -20083,6 +20949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_10000000_VOLT_THUNDERBOLT, }, [MOVE_STOKED_SPARKSURFER] = { @@ -20100,6 +20967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), + .battleAnimScript = Move_STOKED_SPARKSURFER, }, [MOVE_EXTREME_EVOBOOST] = { @@ -20113,6 +20981,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 0, .category = DAMAGE_CATEGORY_STATUS, + .battleAnimScript = Move_EXTREME_EVOBOOST, }, [MOVE_PULVERIZING_PANCAKE] = { @@ -20126,6 +20995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_PULVERIZING_PANCAKE, }, [MOVE_GENESIS_SUPERNOVA] = { @@ -20140,6 +21010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. + .battleAnimScript = Move_GENESIS_SUPERNOVA, }, [MOVE_SINISTER_ARROW_RAID] = { @@ -20153,6 +21024,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SINISTER_ARROW_RAID, }, [MOVE_MALICIOUS_MOONSAULT] = { @@ -20166,6 +21038,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_MALICIOUS_MOONSAULT, }, [MOVE_OCEANIC_OPERETTA] = { @@ -20179,6 +21052,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_OCEANIC_OPERETTA, }, [MOVE_SPLINTERED_STORMSHARDS] = { @@ -20193,6 +21067,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. + .battleAnimScript = Move_SPLINTERED_STORMSHARDS, }, [MOVE_LETS_SNUGGLE_FOREVER] = { @@ -20206,6 +21081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_LETS_SNUGGLE_FOREVER, }, [MOVE_CLANGOROUS_SOULBLAZE] = { @@ -20226,6 +21102,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_CLANGOROUS_SOULBLAZE, }, [MOVE_GUARDIAN_OF_ALOLA] = { @@ -20239,6 +21116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_GUARDIAN_OF_ALOLA, }, [MOVE_SEARING_SUNRAZE_SMASH] = { @@ -20253,6 +21131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_SEARING_SUNRAZE_SMASH, }, [MOVE_MENACING_MOONRAZE_MAELSTROM] = { @@ -20267,6 +21146,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_MENACING_MOONRAZE_MAELSTROM, }, [MOVE_LIGHT_THAT_BURNS_THE_SKY] = { @@ -20281,6 +21161,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_LIGHT_THAT_BURNS_THE_SKY, }, [MOVE_SOUL_STEALING_7_STAR_STRIKE] = { @@ -20294,6 +21175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SOUL_STEALING_7_STAR_STRIKE, }, [MOVE_MAX_GUARD] = @@ -20308,6 +21190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 4, .category = DAMAGE_CATEGORY_STATUS, + .battleAnimScript = Move_MAX_GUARD, }, [MOVE_MAX_FLARE] = @@ -20323,6 +21206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SUN, + .battleAnimScript = Move_MAX_FLARE, }, [MOVE_MAX_FLUTTERBY] = @@ -20338,6 +21222,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_ATK, + .battleAnimScript = Move_MAX_FLUTTERBY, }, [MOVE_MAX_LIGHTNING] = @@ -20353,6 +21238,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_ELECTRIC_TERRAIN, + .battleAnimScript = Move_MAX_LIGHTNING, }, [MOVE_MAX_STRIKE] = @@ -20368,6 +21254,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED, + .battleAnimScript = Move_MAX_STRIKE, }, [MOVE_MAX_KNUCKLE] = @@ -20383,6 +21270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, + .battleAnimScript = Move_MAX_KNUCKLE, }, [MOVE_MAX_PHANTASM] = @@ -20398,6 +21286,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_DEFENSE, + .battleAnimScript = Move_MAX_PHANTASM, }, [MOVE_MAX_HAILSTORM] = @@ -20413,6 +21302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HAIL, + .battleAnimScript = Move_MAX_HAILSTORM, }, [MOVE_MAX_OOZE] = @@ -20428,6 +21318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, + .battleAnimScript = Move_MAX_OOZE, }, [MOVE_MAX_GEYSER] = @@ -20443,6 +21334,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAIN, + .battleAnimScript = Move_MAX_GEYSER, }, [MOVE_MAX_AIRSTREAM] = @@ -20458,6 +21350,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SPEED, + .battleAnimScript = Move_MAX_AIRSTREAM, }, [MOVE_MAX_STARFALL] = @@ -20473,6 +21366,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MISTY_TERRAIN, + .battleAnimScript = Move_MAX_STARFALL, }, [MOVE_MAX_WYRMWIND] = @@ -20488,6 +21382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_ATTACK, + .battleAnimScript = Move_MAX_WYRMWIND, }, [MOVE_MAX_MINDSTORM] = @@ -20503,6 +21398,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PSYCHIC_TERRAIN, + .battleAnimScript = Move_MAX_MINDSTORM, }, [MOVE_MAX_ROCKFALL] = @@ -20518,6 +21414,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDSTORM, + .battleAnimScript = Move_MAX_ROCKFALL, }, [MOVE_MAX_QUAKE] = @@ -20534,6 +21431,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_MAX_QUAKE, }, [MOVE_MAX_DARKNESS] = @@ -20549,6 +21447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_DEF, + .battleAnimScript = Move_MAX_DARKNESS, }, [MOVE_MAX_OVERGROWTH] = @@ -20564,6 +21463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRASSY_TERRAIN, + .battleAnimScript = Move_MAX_OVERGROWTH, }, [MOVE_MAX_STEELSPIKE] = @@ -20579,6 +21479,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, + .battleAnimScript = Move_MAX_STEELSPIKE, }, [MOVE_G_MAX_VINE_LASH] = @@ -20594,6 +21495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VINE_LASH, + .battleAnimScript = Move_G_MAX_VINE_LASH, }, [MOVE_G_MAX_WILDFIRE] = @@ -20609,6 +21511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_WILDFIRE, + .battleAnimScript = Move_G_MAX_WILDFIRE, }, [MOVE_G_MAX_CANNONADE] = @@ -20624,6 +21527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CANNONADE, + .battleAnimScript = Move_G_MAX_CANNONADE, }, [MOVE_G_MAX_BEFUDDLE] = @@ -20639,6 +21543,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_EFFECT_SPORE_FOES, + .battleAnimScript = Move_G_MAX_BEFUDDLE, }, [MOVE_G_MAX_VOLT_CRASH] = @@ -20654,6 +21559,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PARALYZE_FOES, + .battleAnimScript = Move_G_MAX_VOLT_CRASH, }, [MOVE_G_MAX_GOLD_RUSH] = @@ -20669,6 +21575,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, + .battleAnimScript = Move_G_MAX_GOLD_RUSH, }, [MOVE_G_MAX_CHI_STRIKE] = @@ -20684,6 +21591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CRIT_PLUS, + .battleAnimScript = Move_G_MAX_CHI_STRIKE, }, [MOVE_G_MAX_TERROR] = @@ -20699,6 +21607,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MEAN_LOOK, + .battleAnimScript = Move_G_MAX_TERROR, }, [MOVE_G_MAX_FOAM_BURST] = @@ -20714,6 +21623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, + .battleAnimScript = Move_G_MAX_FOAM_BURST, }, [MOVE_G_MAX_RESONANCE] = @@ -20729,6 +21639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AURORA_VEIL, + .battleAnimScript = Move_G_MAX_RESONANCE, }, [MOVE_G_MAX_CUDDLE] = @@ -20744,6 +21655,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_INFATUATE_FOES, + .battleAnimScript = Move_G_MAX_CUDDLE, }, [MOVE_G_MAX_REPLENISH] = @@ -20759,6 +21671,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RECYCLE_BERRIES, + .battleAnimScript = Move_G_MAX_REPLENISH, }, [MOVE_G_MAX_MALODOR] = @@ -20774,6 +21687,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_FOES, + .battleAnimScript = Move_G_MAX_MALODOR, }, [MOVE_G_MAX_MELTDOWN] = @@ -20789,6 +21703,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_TORMENT_FOES, + .battleAnimScript = Move_G_MAX_MELTDOWN, }, [MOVE_G_MAX_DRUM_SOLO] = @@ -20805,6 +21720,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_DRUM_SOLO, }, [MOVE_G_MAX_FIREBALL] = @@ -20821,6 +21737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_FIREBALL, }, [MOVE_G_MAX_HYDROSNIPE] = @@ -20837,6 +21754,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_HYDROSNIPE, }, [MOVE_G_MAX_WIND_RAGE] = @@ -20852,6 +21770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_DEFOG, + .battleAnimScript = Move_G_MAX_WIND_RAGE, }, [MOVE_G_MAX_GRAVITAS] = @@ -20867,6 +21786,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRAVITY, + .battleAnimScript = Move_G_MAX_GRAVITAS, }, [MOVE_G_MAX_STONESURGE] = @@ -20882,6 +21802,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEALTH_ROCK, + .battleAnimScript = Move_G_MAX_STONESURGE, }, [MOVE_G_MAX_VOLCALITH] = @@ -20897,6 +21818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VOLCALITH, + .battleAnimScript = Move_G_MAX_VOLCALITH, }, [MOVE_G_MAX_TARTNESS] = @@ -20912,6 +21834,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, + .battleAnimScript = Move_G_MAX_TARTNESS, }, [MOVE_G_MAX_SWEETNESS] = @@ -20927,6 +21850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AROMATHERAPY, + .battleAnimScript = Move_G_MAX_SWEETNESS, }, [MOVE_G_MAX_SANDBLAST] = @@ -20942,6 +21866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDBLAST_FOES, + .battleAnimScript = Move_G_MAX_SANDBLAST, }, [MOVE_G_MAX_STUN_SHOCK] = @@ -20957,6 +21882,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_PARALYZE_FOES, + .battleAnimScript = Move_G_MAX_STUN_SHOCK, }, [MOVE_G_MAX_CENTIFERNO] = @@ -20972,6 +21898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIRE_SPIN_FOES, + .battleAnimScript = Move_G_MAX_CENTIFERNO, }, [MOVE_G_MAX_SMITE] = @@ -20987,6 +21914,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES, + .battleAnimScript = Move_G_MAX_SMITE, }, @@ -21003,6 +21931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_YAWN_FOE, + .battleAnimScript = Move_G_MAX_SNOOZE, }, [MOVE_G_MAX_FINALE] = @@ -21018,6 +21947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HEAL_TEAM, + .battleAnimScript = Move_G_MAX_FINALE, }, [MOVE_G_MAX_STEELSURGE] = @@ -21033,6 +21963,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEELSURGE, + .battleAnimScript = Move_G_MAX_STEELSURGE, }, [MOVE_G_MAX_DEPLETION] = @@ -21048,6 +21979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SPITE, + .battleAnimScript = Move_G_MAX_DEPLETION, }, [MOVE_G_MAX_ONE_BLOW] = @@ -21063,6 +21995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + .battleAnimScript = Move_G_MAX_ONE_BLOW, }, [MOVE_G_MAX_RAPID_FLOW] = @@ -21078,6 +22011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + .battleAnimScript = Move_G_MAX_RAPID_FLOW, }, }; diff --git a/src/pokemon.c b/src/pokemon.c index d52b6627eb..b8698cb01a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6832,3 +6832,13 @@ const u8 *GetMoveName(u16 moveId) { return gMovesInfo[moveId].name; } + +const u8 *GetMoveAnimationScript(u16 moveId) +{ + if (gMovesInfo[moveId].battleAnimScript == NULL) + { + DebugPrintfLevel(MGBA_LOG_WARN, "No animation for moveId=%u", moveId); + return Move_TACKLE; + } + return gMovesInfo[moveId].battleAnimScript; +} From 240b69d0324b31b023c4ba219a29299f0ee090c4 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 2 Jun 2024 08:26:43 +0200 Subject: [PATCH 30/31] Added Normal and Terastal Terapagos sprites (#4691) Co-authored-by: Hedara --- graphics/pokemon/terapagos/anim_front.png | Bin 0 -> 1284 bytes graphics/pokemon/terapagos/back.png | Bin 0 -> 611 bytes graphics/pokemon/terapagos/normal.pal | 19 +++++++++ graphics/pokemon/terapagos/shiny.pal | 19 +++++++++ .../pokemon/terapagos/terastal/anim_front.png | Bin 0 -> 5458 bytes graphics/pokemon/terapagos/terastal/back.png | Bin 0 -> 4904 bytes .../pokemon/terapagos/terastal/normal.pal | 19 +++++++++ graphics/pokemon/terapagos/terastal/shiny.pal | 19 +++++++++ src/data/graphics/pokemon.h | 16 ++++---- .../pokemon/species_info/gen_9_families.h | 36 +++++++++--------- src/data/pokemon_graphics/front_pic_anims.h | 16 +++++++- 11 files changed, 117 insertions(+), 27 deletions(-) create mode 100644 graphics/pokemon/terapagos/anim_front.png create mode 100644 graphics/pokemon/terapagos/back.png create mode 100644 graphics/pokemon/terapagos/normal.pal create mode 100644 graphics/pokemon/terapagos/shiny.pal create mode 100644 graphics/pokemon/terapagos/terastal/anim_front.png create mode 100644 graphics/pokemon/terapagos/terastal/back.png create mode 100644 graphics/pokemon/terapagos/terastal/normal.pal create mode 100644 graphics/pokemon/terapagos/terastal/shiny.pal diff --git a/graphics/pokemon/terapagos/anim_front.png b/graphics/pokemon/terapagos/anim_front.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef2270bd3fc7ffcd871bdb2a7066ac9f84946e3 GIT binary patch literal 1284 zcmV+f1^fDmP)EX>4Tx04R}tkv&MmKpe$iQ%gl!9PCikAwzYti;6hbDionYs1;guFuC*#nzSS- zE{=k0!NHHks)LKOt`4q(Aou~|?BJy6A|?JWDYS_3;J6>}?mh0_0Ya# zo%23%gq3BL_?&pcpbHW|a$RxxjdRIifoDdHY-XM~LM)bgSm|L_HZNsGzSbbDicWQdq~1&~DoH_pxoaPXPZjaHV(swH7e@NqV!Z z#g2f%ZQ$a%t0{ZH_D#NPe0^u?W1M(KqFRp<7^J&F!tTkJASrOI@XJfP+I| zyhPdS9`Ek&?d{()o&J6RQUP+ARLkv00000mP)t-sn9!gm8f-Blg=gmBJWQaVKyBn_ zwEzGBbE4}s$)im4%$elL=Jc)2`+z?(!vFvO$RMlR00092Nkl#o`BGSqu3~8Ia}j zuk2TfBM`)uhk&?bAHXJ&esj(bregRXguE;%0e~9-iB*c10BM30`~>oEn-Y?TK=Du8 zJo7M~0Jd4?p`Uy9&-SGiAQzoPxuEHNa*Z~R%70f1LOrb^(IO++EJ0k(`3EkfXQpm6v#B_k6u zKWG5xeUg95fT02?8j=xY9PF9;e>YoB6&tbPh$kHAK!&l*Wk0eU#% zXF%)pMp-TU3YMP$CA88AZOM6^*GrT<((#qobwfcXFetAg4oG_edfRkj`@%c8c`Oab!MHfCMeOe@bnxyt}kGd zcs*(N0Qq@vVd{(c)vH&p{-~bRp5ia~j3UhhUq?bO_}U9tJ)MA4A7S+n#F`hBrpW5* zX4DJ9;F`qU?-LzkiS8BI?YGL)eHgPpB$%88DVNBPjYFGOt` zXauQ01r0ELZJ>2$Cjse}JjK0kbpSHov&XTP&UDf3BFL>$`UX@p@>Fye|FR2&QSG{n zj#rVY9L^<+VEg{uKWNr$dY6{|0bcYE+8dn}XRZE$)XtX-1xSH+)jz;?(E=sf5U%8$q*waPPnG uAGGwl{z1e4_7C3vff3&R!4JY+#Qy-a>^qU`TAK&}0000Px#Fi=cXMVQc_CK_xpB86w>;XF*Bpg?WpXSDzT0CS@2G|8h(^vs#$$>#K}&HI2q zGQ$7=|HvS#+W-In5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV8)#Ysd#R9J=W*3o){ zAPfdjp=c)9`2KIZKq8>kHgR|Rnv3bh{zE{)4#T&;^!LkY@p%vj%7U{2oS!(K1tLsB z=o?@mI6aUTt^-z?MbHXZo}c#ul)wB)H3F7XiG|hyOj@8GPa#Ma94TddjO8=H9U^m_lWmiYg=j@M{Rx| zcT!%NzXa4r(hl&FwVY^h9N%~vzBFKp(@uor1oQy!91tx4ORoG4$=4pyu7%G6 zxC5*kkcDdiPUbI_k^m&!0G5T4GXsFvuM(W*vzqfW3-IP; xJ_TBy1v;Uxgm?KQU$+cg3TMC}Pr~^xn_qo$GGK@S!fXHl002ovPDHLkV1lK%8}k4F literal 0 HcmV?d00001 diff --git a/graphics/pokemon/terapagos/normal.pal b/graphics/pokemon/terapagos/normal.pal new file mode 100644 index 0000000000..533a2e7c68 --- /dev/null +++ b/graphics/pokemon/terapagos/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +38 26 108 +49 34 133 +103 230 225 +60 76 160 +160 64 109 +228 103 181 +0 0 0 +115 162 235 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/shiny.pal b/graphics/pokemon/terapagos/shiny.pal new file mode 100644 index 0000000000..1a59467bd6 --- /dev/null +++ b/graphics/pokemon/terapagos/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +37 114 136 +66 151 189 +151 58 210 +63 209 230 +160 64 109 +234 243 49 +0 0 0 +218 32 48 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/terastal/anim_front.png b/graphics/pokemon/terapagos/terastal/anim_front.png new file mode 100644 index 0000000000000000000000000000000000000000..90a42f88b52fbb0d685a0ee966d4ff53f29f1672 GIT binary patch literal 5458 zcmeHLX;f257ETn5fCwtKwxXni3!+J0b`ld3Ab=SNAcBC)z{|@Ei9iyQK!VtcfV<$< zgA1T^D=xUS8=x%;C@PAm?Y<9)$l?MFjX+Dw)C-6@)91|boaujtQ>pu^zWdd!uWns< ztPTqBwY45&jlTD%uDHSA0U+@fI6SaKpyB)M zWMB`#55!?!D?l3#Yz%|7F?dUJzYf@A`|KZp?b3(Ad}#OqI9t$XgGL9o1L*TXQ?2Y> z>nyOb&tUTpX8_KO_|W@Gq(MYFg$7X=ZonU+GkFl32hoTSm&fApz#txn&;1w?#&rDd zBQ}UHP37ekB=PbhYIPcgDi+1zOxfRW6wEjucw38qv)ev;lfx+AvV!XB>#{p#7b3z4VIKC~_=O4DV8h1Y&3@KoS#gWWss4%H z)a))&-rcHbpMaMZRmJiqzOb1p>l}GzFmauQC;j-k2+5VwqO))IZ)u`jJKp{7{Xu+z zl13yBpS%rzSpKqnwe(SSaiAkQGGe0pTD9%hhCeTT`(u7p!ss-=qXK=e)IOS)-b<0GT4gbaC@e=E&JJt zm%GC&ZYEy2Bz*S!MBS9<`6(Nb@ndfgPcLZ^b_(VmV6qw~dIyUdE-ZAvnA}3SvB2$G z$I;po0m;=2ZJx1vtTgJy=HGmL*N(%dJ}SKs?>p;la^<+F&dVF55B`yIA}!d;B;2KO z#d#Hpdh$6%Z@B?Z$&OX7`hkv)18UJLe{V}PMs_@Y|5|munGiBmw_TL6UI=o~qzVZ) zgiHN-h$fB#%QZ5TVv5sZ2ZrMdO|QaG#IozD%EH-Qj83WMi)(`ak*S7M5of} zWPl*+6V(RTL{{saF^XOeF{(#&Dy>1KQ4=vvSf+_L2uLI_Py7&HoK`CBr&sIyQ~-KV zO|X_qqd?TSIO?Y!dV_ZYAn6O}Pd)S@iCUBzjOsP* z9HFAIXdHm*!K$>+mc(vczXv8kv?@+(_5xymhBT-YAI17CHf+YcolgS+?)|)&76{++Z%5$z`Ern9k;qVTjG-(%2B44ROs>a)jrj(Z#{w zI8||QG)mQ~qsKp#hfVqt>X`ibVD z-WxRwUD*57`xvV-UnL^Zd?|P^(z^vcoPf&BaRRR1DMSgYqft;j`qK5oxav<*fi7c0 zFp!bVa8t0!Ob!hq%V;Rb2M(8^;Bq+#0y92m*J~68BdkL`qJfS;E0CV%-%vys^FdAd z9Bovh*eL+P$Pk+h(f(5~YTt&bSk3sbV?Oo2G~t^8pA;G3*E{Dmt3>aUA@k-lH$`YP8KDey($ui5ogt}jyHi@;yA>;EQ~^~cvKR1N+LGJ=;S zC{=wQs&)YV)*LHUo_Vn~H zJ-6a2dM=RWqHn#ieuK7mg;wr|%QN7AGpY0S`*ZHd0^=@VU*cF26A^(4kD%lnQ*^>_zy zVM+Y+wpaGH!7DbWtqoipA{0I-KUh+-cYW5Q(Ra?RtEd)x@IBkVZJhk>T~hM&s>p|_ z>PpMf#6z?1iz0``cMI+}b+)dQJ_#LWWA8HpANekDwL@Wh>(O&Lg>T%8Cns8NO*7TM zyCxF;F$~G`-8Jg0pJ;KBw?pWyuEhHJ9g_+98OG`E3;sA)k`x&5TV7FNYfEZ<{-K$> z#-#hCzKP`Cq6H|3`hR_TG@4X29kguZN!S*ktp`qJw% zWO;4tz60Fs`msC;HUg}bp9`2=qsoTojcfLM#-cHnY;8-{LpA$H1o+Z2F2;Zjfn^swp$JiO3 zRTH{jT06m|vV?N-#cE@agChKSTMnVAqtYhA!SV^UvTE9{7+e26#2j2sPR_4ers)qQ zEnGh5jcw+W;P4wg;wHNDnTvThej3zxYHy8I1|gH9T9}mjB;(Q1#ipq>E4rNH=cC&S zJeFUzOjDG7``o=|aN4)KFLt;i>x}6^=PYdX-lKB`QqdxfbI`dscEg=bM8_R(DOU2Q zKRzS8c`5M}+{!-vVs`8KgO`Q~Zx4xdaJ}Oax~3pPaSDX%Rv8Oe+*i(fzz6LB*Uq+rfm2U(ZIB!c9d`0Qge?Vn~4n^ z3Atizr|7KN^T=}{B6-hFFMSa$)371W!>19)n{*%SGS3RlmC|lg} zd;7}~D^GXL73`n+t6%%;&YCe%6{H2bZFBRwiKUyLP85c}Bri{`v@3nhY7wUQ;2aeB Vw^yuNkOj&bPU0OPKI|El@^8Fi|L6b! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/terapagos/terastal/back.png b/graphics/pokemon/terapagos/terastal/back.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa96b0ab0759268db77436517b04a7c45c58f88 GIT binary patch literal 4904 zcmeHLX;c$g7Ont-;)sZ-sIg54X#q`ANh+&EK*EwEK?Gz`Y^fwwq<}0W0Rk>3g0?6s z3gdvd;nJga$nii)<_A}%nB+qjO{t+diGEutf|%&V|E)91|boaujr^YU)J_ucQ^ z_r3cr6l=r7f=4+{a)cmglq^IV0eU~O+1Y~c*x-~F&^2JOGF&F}hK7R&fTY+#6cPg( zWsq${v4u#luRwDFHi;qIB+4*rzaH3=d+k30+p`yA18g?M1{wwW?Vxdh?F#xb(1}+#+}8)oB;5s4r{P8DG>J_)nUyO@!i1BysqNJwlBTSoJTIV`46sOzFQ=dOHnpCY?mDf_l9zTwpp?Ej$%y8OzyE&Zl^>MPgbCqX*K3Mb<^Llw#=Z8a-<7zgI z<}!UN`uCcbHEZSfpPZgY#m2>X%$~jzZqBaBkB{+L(G;H^_hjpQZqW|+jV^gVFr!Zu zF9_XWE)jl{B>rJ!X8wZfi?$zMxZ`;1HCrxh>v z#n#@)th?m<^u33{>seX$X60v-8)#K4+I-(h7JZBGnmqy|{9as4o&CL~joFYSy#DrB zQ$?8N30MDhM%QF{!jFaRLBV-bC^`4fT}%s(?66#!lJM^GCi%TB*%hlIMwor~>b#+V zO26(hL1l+1Y^sHN&D&^8rP?%Mbzi>D%vkdF!G{*2zSSYh$x!0AG2a*DpqYq@HO0z9 z#Y&xqiK=u8jA_>B$peFYe9d}PnT(le3M`S(O6aXs)pQ!6lF(y#a#*epz|=%YmH~^* z3X4)^B`ZZLy6Giy?`MzL8!xAKaCO%Ai@G%LiEETPAOJPObmFdD){ zm@p&IOr&$@vmI$Z1{E%jkOuWqfF}uEZ8GV_ELKKF1~Y@p)EN?4Y>`OBf;lV>hXD`_ zW2V-Gni*Q7J4w;QA;pYJ1EDt&IxUUlL>0O;lY~wO^R&MBGQkn{%hn;yofOg+Ymz>K;ygAxl&$FwH*!4xWGzrQ}skYe4AO3A`f zFb#kj!K&Sat5<0oQSfx`EDzVjs6(T;az;FhR!w3TrsbB`mhm{PTP^f?rA;uOckU>;3 zt+a$0Mrb%s0^G1v?c7A5l(5Lm~-Uc>ipda-E96GyfNwygW1?fCon&LKwmNnbx768x@JA_B{1GrV!Sv zM59?Rg&0-#Y{7`8V=8N$fU9RpsYbPl7^oh->Do6={6;FUIUs{@wt#^sa4rK;A|eJV zhCfI^2|j8ZiGvpd-)a6wT9mP+lLSGt?M)3P3Oh%xA#t z{}hbXyI~etGx~Py!}>2xe5`;$MF#lwjDg|>Y9Xt?81`yLmYv`6(|Z=b;|hR!Xpv9S zcSx=wxjspOPXZ5R*N|MFq`)VEhqCMcCYR&D>lCI1e+6ZLm!;V17pdSy3l0yB3M_6Y zUC49r&I}6*3cB+}oEKxCyl7|G*IHDx_}UHGP{tLsE}cQ-Pp7^>~QNMD3?1d{(m zpeW`BOQGChQ^8cmm#C5yt=Nw&!M zmycOhT6;Y!DevOqrOom`e6W2#)$?6?<*g63yEe6APOaR>nXR4QL@iYBUOm1}HDL{} zTFvG&?$z8)?$~~cm-h7T(em;F-VOJq*MB7nq)V>8JA5YnXr~5wzQV1QT`=*?ZC^Z5 zK&6g7R`QhtQ^`uKo>%?Ie8EucL_1J*;NGjw`Xz#yZZ~sF&wrhBEv!45iH2-A5 zqv(_0;dizrl;j9%l%kh$kZ*zrhZvg6pc0bd{^W4Fz5lL;WI_cLysIr^PPvN;>Ljuv+OMnxy!k~ zj-Gj?#hn#)6G>`uD;%@1b@i?f*HYgeoOD}oV5ju(D4VNGH$umsPmslCc-O5FI()xr zOzAPF# zo@;P+-TSAu29K*-iyvfn9R15e=u{vSviQ(p+$9p)u=MR2`mpMopI2IqQ;cv^N97f zfAjELDfDMdny)T$6M4SBx~#A<$ls2VQ-9{jD~r;poLY8I_xy#eC)KpNEqr&Iz1>mz z%cSVW+A=$f^PZ-IpS5R2SXx}2;{O%@X5wqn$wMP4NeyGCc!^IGin@kv_FcKl^+fYY QkgSj_Fid)6PD1v-0b+CC^8f$< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/terapagos/terastal/normal.pal b/graphics/pokemon/terapagos/terastal/normal.pal new file mode 100644 index 0000000000..453f7ce70c --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +52 66 152 +0 200 255 +197 34 91 diff --git a/graphics/pokemon/terapagos/terastal/shiny.pal b/graphics/pokemon/terapagos/terastal/shiny.pal new file mode 100644 index 0000000000..f6103ac9f6 --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +84 215 251 +255 0 0 +244 255 0 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 88164f9337..f12df681c9 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -13046,19 +13046,19 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS - // const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/footprint.1bpp"); #endif //P_FOOTPRINTS - // const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/footprint.1bpp"); diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 538a121725..901134e3ad 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -6619,17 +6619,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosNormal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPic = gMonFrontPic_TerapagosNormal, + .frontPicSize = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_TerapagosNormal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosNormal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosNormal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosNormal, - //.shinyPalette = gMonShinyPalette_TerapagosNormal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosNormal, + .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, FOOTPRINT(TerapagosNormal) @@ -6676,17 +6677,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosTerastal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 0, + .frontPic = gMonFrontPic_TerapagosTerastal, + .frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPicYOffset = 8, .frontAnimFrames = sAnims_TerapagosTerastal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosTerastal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosTerastal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosTerastal, - //.shinyPalette = gMonShinyPalette_TerapagosTerastal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosTerastal, + .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, FOOTPRINT(TerapagosTerastal) diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index ab8707ac5d..d802521afe 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -10120,8 +10120,20 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(IronCrown); #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosNormal); -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosTerastal); +static const union AnimCmd sAnim_TerapagosNormal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +static const union AnimCmd sAnim_TerapagosTerastal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosStellar); #endif //P_FAMILY_TERAPAGOS From 4eda5f61af48f41769cd035a9c7a27c5ef71b8d7 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 2 Jun 2024 15:36:12 +0200 Subject: [PATCH 31/31] Use 9th roll instead of average in AI calcs (#4679) * Use 9th roll instead of average in AI calcs * damage_roll * duke suggestion --- include/battle_ai_util.h | 5 +++-- src/battle_ai_main.c | 2 +- src/battle_ai_switch_items.c | 4 ++-- src/battle_ai_util.c | 14 +++++++------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 36ce1cdda5..ffb5d3ca77 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -4,13 +4,14 @@ #define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) // Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. -#define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI +#define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI #define MIN_ROLL_PERCENTAGE DMG_ROLL_PERCENT_LO +#define DMG_ROLL_PERCENTAGE ((MAX_ROLL_PERCENTAGE + MIN_ROLL_PERCENTAGE + 1) / 2) // Controls the damage roll the AI sees for the default roll. By default the 9th roll is seen enum { DMG_ROLL_LOWEST, - DMG_ROLL_AVERAGE, + DMG_ROLL_DEFAULT, DMG_ROLL_HIGHEST, }; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 484efbbbd6..10ad41d1fc 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -464,7 +464,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 else if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_LOWEST); else - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_AVERAGE); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_DEFAULT); aiData->moveAccuracy[battlerAtk][battlerDef][i] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); } aiData->simulatedDmg[battlerAtk][battlerDef][i] = dmg; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 19bf2adbc6..77552ccae9 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1279,7 +1279,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_AVERAGE); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); if (bestDmg < dmg) { bestDmg = dmg; @@ -1840,7 +1840,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_AVERAGE); + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f76599a52f..7efee7ae05 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -391,9 +391,9 @@ static inline s32 HighestRollDmg(s32 dmg) return dmg; } -static inline s32 AverageDmg(s32 dmg) +static inline s32 DmgRoll(s32 dmg) { - dmg = (dmg * (MIN_ROLL_PERCENTAGE + MAX_ROLL_PERCENTAGE)) / 2; + dmg *= DMG_ROLL_PERCENTAGE; dmg /= 100; return dmg; } @@ -566,8 +566,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critChance = GetCritHitChance(critChanceIndex); // With critChance getting closer to 1, dmg gets closer to critDmg. - if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); + if (dmgRoll == DMG_ROLL_DEFAULT) + dmg = DmgRoll((critDmg + normalDmg * (critChance - 1)) / (critChance)); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); else @@ -575,8 +575,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes } else { - if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageDmg(normalDmg); + if (dmgRoll == DMG_ROLL_DEFAULT) + dmg = DmgRoll(normalDmg); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg(normalDmg); else @@ -3763,7 +3763,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) return FALSE; - if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_AVERAGE) >= gBattleMons[battlerDef].hp) + if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT) >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target return TRUE;