From 7fb811d33d53b78bb5b53ecf12109d5b5a3415ce Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 19 Nov 2023 15:05:00 +0100 Subject: [PATCH] burn_hit -> move_effect_burn --- data/battle_scripts_1.s | 9 +- src/battle_ai_util.c | 42 +++--- src/battle_script_commands.c | 19 ++- .../battle_pyramid_wild_requirements.h | 4 +- src/data/battle_moves.h | 130 ++++++++++++------ test/battle/ai.c | 6 +- test/battle/move_effect/absorb.c | 27 ++++ test/battle/move_effect/burn_hit.c | 65 ++++++++- test/battle/move_effect/matcha_gotcha.c | 67 --------- 9 files changed, 221 insertions(+), 148 deletions(-) delete mode 100644 test/battle/move_effect/matcha_gotcha.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 72d09d33a3..bee2c3f82a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -26,7 +26,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSleep @ EFFECT_SLEEP .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB - .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT + .4byte BattleScript_EffectHit @ EFFECT_BURN_HIT .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION @@ -426,7 +426,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT .4byte BattleScript_EffectSnow @ EFFECT_SNOWSCAPE .4byte BattleScript_EffectHit @ EFFECT_UNUSED_399 - .4byte BattleScript_EffectInfernalParade @ EFFECT_INFERNAL_PARADE + .4byte BattleScript_EffectHit @ EFFECT_INFERNAL_PARADE .4byte BattleScript_EffectTakeHeart @ EFFECT_TAKE_HEART .4byte BattleScript_EffectAxeKick @ EFFECT_AXE_KICK .4byte BattleScript_EffectHit @ EFFECT_COLLISION_COURSE @@ -3373,11 +3373,6 @@ BattleScript_AbsorbHealBlock:: tryfaintmon BS_TARGET goto BattleScript_MoveEnd -BattleScript_EffectInfernalParade:: -BattleScript_EffectBurnHit:: - setmoveeffect MOVE_EFFECT_BURN - goto BattleScript_EffectHit - BattleScript_EffectFrostbiteHit:: setmoveeffect MOVE_EFFECT_FROSTBITE goto BattleScript_EffectHit diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 810d52fe17..9af0685d2e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -843,31 +843,9 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 u32 abilityDef = AI_DATA->abilities[battlerDef]; u32 abilityAtk = AI_DATA->abilities[battlerAtk]; - // check ADDITIONAL_EFFECTS - for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++) - { - // Obviously ignore moves that target self - if (gBattleMoves[move].additionalEffects[i].self) - continue; - - switch (gBattleMoves[move].additionalEffects[i].moveEffect) - { - case MOVE_EFFECT_PARALYSIS: - if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) - return TRUE; - break; - } - } switch (gBattleMoves[move].effect) { - case EFFECT_HIT: - default: - return FALSE; - case EFFECT_BURN_HIT: - if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE)) - return TRUE; - break; case EFFECT_POISON_HIT: case EFFECT_POISON_FANG: if (AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) @@ -962,6 +940,26 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 break; } + // check ADDITIONAL_EFFECTS + for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++) + { + // Obviously ignore moves that target self + if (gBattleMoves[move].additionalEffects[i].self) + continue; + + switch (gBattleMoves[move].additionalEffects[i].moveEffect) + { + case MOVE_EFFECT_PARALYSIS: + if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) + return TRUE; + break; + case MOVE_EFFECT_BURN: + if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE)) + return TRUE; + break; + } + } + return FALSE; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2b4a86aea8..5fad096362 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -355,6 +355,7 @@ static bool32 ChangeOrderTargetAfterAttacker(void); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); static void RemoveAllTerrains(void); static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate); +static bool8 CanBurnHitThaw(u16 move); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -5286,8 +5287,7 @@ static void Cmd_moveend(void) if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget - && (moveType == TYPE_FIRE - || (B_BURN_HIT_THAW >= GEN_6 && gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT)) + && (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove)) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; @@ -15672,6 +15672,21 @@ static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 byIntimidate) return FALSE; } +static bool8 CanBurnHitThaw(u16 move) +{ + u8 i; + + if (B_BURN_HIT_THAW >= GEN_6) + { + for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++) + { + if (gBattleMoves[move].additionalEffects[i].moveEffect == MOVE_EFFECT_BURN) + return TRUE; + } + } + return FALSE; +} + void BS_CheckParentalBondCounter(void) { NATIVE_ARGS(u8 counter, const u8 *jumpInstr); diff --git a/src/data/battle_frontier/battle_pyramid_wild_requirements.h b/src/data/battle_frontier/battle_pyramid_wild_requirements.h index 1b9e359f1f..efafd2cfa5 100644 --- a/src/data/battle_frontier/battle_pyramid_wild_requirements.h +++ b/src/data/battle_frontier/battle_pyramid_wild_requirements.h @@ -57,7 +57,7 @@ static const u16 sPoisoningMoves[] = { MOVE_TOXIC_THREAD, }; -// EFFECT_BURN_HIT, EFFECT_WILL_O_WISP +// MOVE_EFFECT_BURN, EFFECT_WILL_O_WISP static const u16 sBurningMoves[] = { MOVE_WILL_O_WISP, //MOVE_EMBER, @@ -169,7 +169,7 @@ static const struct BattlePyramidRequirement sBattlePyramidRequirementsByRound[] { .type = TYPE_ICE, }, - + [7] = /* pokemon with explosion effects */ { .type = TYPE_MYSTERY, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 3a72842f49..aaa5a1e6d2 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -110,12 +110,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_FIRE_PUNCH] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 75, .type = TYPE_FIRE, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -123,6 +122,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_ICE_PUNCH] = @@ -910,17 +912,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_EMBER] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_FIRE, .accuracy = 100, .pp = 25, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_FLAMETHROWER] = @@ -930,16 +934,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #else .power = 95, #endif - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .type = TYPE_FIRE, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_MIST] = @@ -2226,16 +2232,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #else .power = 120, #endif - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .type = TYPE_FIRE, .accuracy = 85, .pp = 5, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_WATERFALL] = @@ -3074,12 +3082,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_FLAME_WHEEL] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_FIRE, .accuracy = 100, .pp = 25, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -3087,6 +3094,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .sheerForceBoost = TRUE, .thawsUser = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_SNORE] = @@ -3973,18 +3983,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SACRED_FIRE] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_FIRE, .accuracy = 95, .pp = 5, - .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .thawsUser = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 50) + ) }, [MOVE_MAGNITUDE] = @@ -4627,17 +4639,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #else .power = 100, #endif - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .type = TYPE_FIRE, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .windMove = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_HAIL] = @@ -5355,12 +5369,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_BLAZE_KICK] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 85, .type = TYPE_FIRE, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -5368,6 +5381,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .highCritRatio = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_MUD_SPORT] = @@ -7708,17 +7724,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_LAVA_PLUME] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_FIRE, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 30, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_LEAF_STORM] = @@ -8831,18 +8849,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SCALD] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_WATER, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .thawsUser = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_SHELL_SMASH] = @@ -9068,17 +9088,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_INFERNO] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_FIRE, .accuracy = 50, .pp = 5, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100) + ) }, [MOVE_WATER_PLEDGE] = @@ -9531,18 +9553,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SEARING_SHOT] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_FIRE, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 30, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .ballisticMove = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_TECHNO_BLAST] = @@ -9634,17 +9658,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_BLUE_FLARE] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 130, .type = TYPE_FIRE, .accuracy = 85, .pp = 5, - .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 20) + ) }, [MOVE_FIERY_DANCE] = @@ -9690,17 +9716,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .type = TYPE_ICE, .accuracy = 90, .pp = 5, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .argument = MOVE_EFFECT_BURN, .zMoveEffect = Z_EFFECT_NONE, .twoTurnMove = TRUE, .sheerForceBoost = TRUE, .metronomeBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_SNARL] = @@ -10339,12 +10366,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_STEAM_ERUPTION] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 110, .type = TYPE_WATER, .accuracy = 95, .pp = 5, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, @@ -10352,6 +10378,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .sheerForceBoost = TRUE, .thawsUser = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_HYPERSPACE_HOLE] = @@ -11853,10 +11882,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .power = 90, .pp = 15, #endif - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .type = TYPE_FIRE, .accuracy = 100, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -11865,6 +11893,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .thawsUser = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100) + ) }, [MOVE_GLITZY_GLOW] = @@ -12313,12 +12344,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_PYRO_BALL] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 120, .type = TYPE_FIRE, .accuracy = 90, .pp = 5, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -12327,6 +12357,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .thawsUser = TRUE, .ballisticMove = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) + ) }, [MOVE_BEHEMOTH_BLADE] = @@ -12755,17 +12788,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_BURNING_JEALOUSY] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_FIRE, - .accuracy = 100, .pp = 5, - .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100) + ) }, [MOVE_LASH_OUT] = @@ -12878,18 +12912,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SCORCHING_SANDS] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_GROUND, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .thawsUser = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_JUNGLE_HEALING] = @@ -13407,12 +13443,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .type = TYPE_GHOST, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_CEASELESS_EDGE] = @@ -13486,16 +13524,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .power = 95, .pp = 5, #endif - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .type = TYPE_GROUND, .accuracy = 80, - .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .windMove = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 20) + ) }, [MOVE_LUNAR_BLESSING] = @@ -14238,12 +14278,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_BLAZING_TORQUE] = { - .effect = EFFECT_BURN_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_FIRE, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -14258,6 +14297,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .instructBanned = TRUE, .encoreBanned = TRUE, .assistBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30) + ) }, [MOVE_WICKED_TORQUE] = diff --git a/test/battle/ai.c b/test/battle/ai.c index b3f336d15e..ce3efb725b 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -574,7 +574,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize 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); } + 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); } @@ -588,7 +588,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize { 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); } + 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); } // Mid battle, AI sends out Aron OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } @@ -601,7 +601,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize of { 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); } + 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); } diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index 5d164de40d..b645387b9b 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -41,3 +41,30 @@ SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") } } } + +DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both targets") +{ + s16 damageLeft; + s16 damageRight; + s16 healedLeft; + s16 healedRight; + + GIVEN { + ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damageLeft); + HP_BAR(playerLeft, captureDamage: &healedLeft); + HP_BAR(opponentRight, captureDamage: &damageRight); + HP_BAR(playerLeft, captureDamage: &healedRight); + } THEN { + EXPECT_MUL_EQ(damageLeft, Q_4_12(-0.5), healedLeft); + EXPECT_MUL_EQ(damageRight, Q_4_12(-0.5), healedRight); + } +} diff --git a/test/battle/move_effect/burn_hit.c b/test/battle/move_effect/burn_hit.c index 627a051a53..406e91b215 100644 --- a/test/battle/move_effect/burn_hit.c +++ b/test/battle/move_effect/burn_hit.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gBattleMoves[MOVE_EMBER].effect == EFFECT_BURN_HIT); + ASSUME(gBattleMoves[MOVE_EMBER].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN); } SINGLE_BATTLE_TEST("Ember inflicts burn") @@ -38,3 +38,66 @@ SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type Pokémon") } } } + +DOUBLE_BATTLE_TEST("Lava Plume inflicts burn to every battler on the field") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LAVA_PLUME].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN); + ASSUME(gBattleMoves[MOVE_LAVA_PLUME].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LAVA_PLUME); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LAVA_PLUME, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); + STATUS_ICON(opponentLeft, burn: TRUE); + HP_BAR(playerRight); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, playerRight); + STATUS_ICON(playerRight, burn: TRUE); + HP_BAR(opponentRight); + STATUS_ICON(opponentRight, burn: TRUE); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); + } +} + +SINGLE_BATTLE_TEST("Matcha Gotcha inflicts burn 20% of the time") +{ + PASSES_RANDOMLY(20, 100, RNG_SECONDARY_EFFECT); + GIVEN { + ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + STATUS_ICON(opponent, burn: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Matcha Gatcha can burn both targets") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); + STATUS_ICON(opponentLeft, burn: TRUE); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); + STATUS_ICON(opponentRight, burn: TRUE); + } +} diff --git a/test/battle/move_effect/matcha_gotcha.c b/test/battle/move_effect/matcha_gotcha.c deleted file mode 100644 index 4071f7ca2f..0000000000 --- a/test/battle/move_effect/matcha_gotcha.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); - ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN); -} - -SINGLE_BATTLE_TEST("Matcha Gotcha inflicts burn 20% of the time") -{ - PASSES_RANDOMLY(20, 100, RNG_SECONDARY_EFFECT); - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_MATCHA_GOTCHA); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, player); - HP_BAR(opponent); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - STATUS_ICON(opponent, burn: TRUE); - } -} - -DOUBLE_BATTLE_TEST("Matcha Gatcha can burn both targets") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); - HP_BAR(opponentLeft); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - STATUS_ICON(opponentLeft, burn: TRUE); - HP_BAR(opponentRight); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - STATUS_ICON(opponentRight, burn: TRUE); - } -} - -DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both targets") -{ - s16 damageLeft; - s16 damageRight; - s16 healedLeft; - s16 healedRight; - - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); - HP_BAR(opponentLeft, captureDamage: &damageLeft); - HP_BAR(playerLeft, captureDamage: &healedLeft); - HP_BAR(opponentRight, captureDamage: &damageRight); - HP_BAR(playerLeft, captureDamage: &healedRight); - } -}