From c28b8b92435478e5c123a1654059be265df9074b Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Wed, 27 Nov 2024 23:42:14 +0100 Subject: [PATCH 1/3] Fixes Recoil if Miss effect if crashed into absorb ability --- data/battle_scripts_1.s | 56 ++++------------------ include/battle.h | 4 +- include/battle_scripts.h | 2 +- include/constants/battle_move_effects.h | 1 + include/constants/battle_script_commands.h | 12 ++--- src/battle_script_commands.c | 49 ++++++++++--------- src/data/battle_move_effects.h | 8 +++- src/data/moves_info.h | 2 +- test/battle/move_effect/recoil_if_miss.c | 43 +++++++++++++++-- 9 files changed, 93 insertions(+), 84 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a17c54c7e3a0..d7e79ae857ef 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3447,52 +3447,6 @@ BattleScript_EffectSuperFang:: damagetohalftargethp goto BattleScript_HitFromAtkAnimation -BattleScript_EffectRecoilIfMiss:: - attackcanceler - accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - typecalc - jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage -.endif - goto BattleScript_HitFromAtkString -BattleScript_MoveMissedDoDamage:: - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed - attackstring - ppreduce - pause B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG -.if B_CRASH_IF_TARGET_IMMUNE < GEN_4 - jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd -.endif - moveendcase MOVEEND_PROTECT_LIKE_EFFECT @ Spiky Shield's damage happens before recoil. - jumpifhasnohp BS_ATTACKER, BattleScript_MoveEnd - printstring STRINGID_PKMNCRASHED - waitmessage B_WAIT_TIME_LONG - damagecalc - typecalc - adjustdamage -.if B_CRASH_IF_TARGET_IMMUNE == GEN_4 - manipulatedamage DMG_RECOIL_FROM_IMMUNE -.else - manipulatedamage DMG_RECOIL_FROM_MISS -.endif -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE -.else - bichalfword gMoveResultFlags, MOVE_RESULT_MISSED -.endif - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - orhalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE -.else - orhalfword gMoveResultFlags, MOVE_RESULT_MISSED -.endif - goto BattleScript_MoveEnd - BattleScript_EffectMist:: attackcanceler attackstring @@ -7564,6 +7518,16 @@ BattleScript_MoveEffectConfusion:: waitmessage B_WAIT_TIME_LONG return +BattleScript_MoveEffectRecoilIfMiss:: + printstring STRINGID_PKMNCRASHED + waitmessage B_WAIT_TIME_LONG + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + return + BattleScript_MoveEffectRecoil:: jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd diff --git a/include/battle.h b/include/battle.h index fda1639fa5ed..ea7de96a53e6 100644 --- a/include/battle.h +++ b/include/battle.h @@ -804,7 +804,9 @@ struct BattleStruct u8 fickleBeamBoosted:1; u8 obedienceResult:3; u8 redCardActivates:1; - u8 usedMicleBerry; + u8 usedMicleBerry:4; + u8 noTargetPresent:1; + u8 padding:3; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 4e34a81da8f8..4796438a216b 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -158,6 +158,7 @@ extern const u8 BattleScript_MoveEffectToxic[]; extern const u8 BattleScript_MoveEffectPayDay[]; extern const u8 BattleScript_MoveEffectWrap[]; extern const u8 BattleScript_MoveEffectConfusion[]; +extern const u8 BattleScript_MoveEffectRecoilIfMiss[]; extern const u8 BattleScript_MoveEffectRecoil[]; extern const u8 BattleScript_FaintAttackerForExplosion[]; extern const u8 BattleScript_MaxHp50Recoil[]; @@ -591,7 +592,6 @@ extern const u8 BattleScript_EffectOHKO[]; extern const u8 BattleScript_EffectSuperFang[]; extern const u8 BattleScript_EffectFixedDamageArg[]; extern const u8 BattleScript_EffectHealBlock[]; -extern const u8 BattleScript_EffectRecoilIfMiss[]; extern const u8 BattleScript_EffectMist[]; extern const u8 BattleScript_EffectFocusEnergy[]; extern const u8 BattleScript_EffectConfuse[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5da278110f2c..05a5f50fff6b 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -39,6 +39,7 @@ enum { EFFECT_FIXED_DAMAGE_ARG, EFFECT_HEAL_BLOCK, EFFECT_RECOIL_IF_MISS, + EFFECT_RECOIL, EFFECT_MIST, EFFECT_FOCUS_ENERGY, EFFECT_CONFUSE, diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index a8daf8841b58..d0bbfabe6b6b 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -235,13 +235,11 @@ // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 -#define DMG_RECOIL_FROM_MISS 1 -#define DMG_DOUBLED 2 -#define DMG_1_8_TARGET_HP 3 -#define DMG_FULL_ATTACKER_HP 4 -#define DMG_CURR_ATTACKER_HP 5 -#define DMG_BIG_ROOT 6 -#define DMG_RECOIL_FROM_IMMUNE 7 // Used to calculate recoil for the Gen 4 version of Jump Kick +#define DMG_DOUBLED 1 +#define DMG_1_8_TARGET_HP 2 +#define DMG_FULL_ATTACKER_HP 3 +#define DMG_CURR_ATTACKER_HP 4 +#define DMG_BIG_ROOT 5 // Cmd_jumpifcantswitch #define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b1dbcc61061d..7226b54fd983 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1332,7 +1332,7 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_FlingFailConsumeItem; else gBattlescriptCurrInstr = BattleScript_FailedFromAtkString; - + gBattleStruct->noTargetPresent = TRUE; if (!gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) CancelMultiTurnMoves(gBattlerAttacker); return; @@ -1410,6 +1410,7 @@ static void Cmd_attackcanceler(void) if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected) { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE; gLastUsedAbility = ABILITY_LIGHTNING_ROD; BattleScriptPushCursor(); @@ -1418,6 +1419,7 @@ static void Cmd_attackcanceler(void) } else if (gSpecialStatuses[gBattlerTarget].stormDrainRedirected) { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; gSpecialStatuses[gBattlerTarget].stormDrainRedirected = FALSE; gLastUsedAbility = ABILITY_STORM_DRAIN; BattleScriptPushCursor(); @@ -1470,7 +1472,10 @@ static bool32 JumpIfMoveFailed(u8 adder, u16 move) { TrySetDestinyBondToHappen(); if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move)) + { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; return TRUE; + } } gBattlescriptCurrInstr += adder; return FALSE; @@ -5592,7 +5597,26 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } - else if (gMovesInfo[gCurrentMove].recoil > 0 + else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL_IF_MISS + && gMoveResultFlags & (MOVE_RESULT_NO_EFFECT) + && !gBattleStruct->noTargetPresent + && IsBattlerAlive(gBattlerAttacker)) + { + if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)) + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage) + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + else + gBattleMoveDamage /= 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilIfMiss; + effect = TRUE; + } + else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one @@ -6469,6 +6493,7 @@ static void Cmd_moveend(void) gBattleStruct->distortedTypeMatchups = 0; gBattleStruct->redCardActivates = FALSE; gBattleStruct->usedMicleBerry &= ~(1u << gBattlerAttacker); + gBattleStruct->noTargetPresent = FALSE; if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) gBattleStruct->pledgeMove = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) @@ -11345,23 +11370,6 @@ static void Cmd_manipulatedamage(void) case DMG_CHANGE_SIGN: gBattleMoveDamage *= -1; break; - case DMG_RECOIL_FROM_MISS: - if (B_RECOIL_IF_MISS_DMG >= GEN_5) - { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - } - else if (B_RECOIL_IF_MISS_DMG == GEN_4) - { - if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage) - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - } - else - { - gBattleMoveDamage /= 2; - } - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - break; case DMG_DOUBLED: gBattleMoveDamage *= 2; break; @@ -11379,9 +11387,6 @@ static void Cmd_manipulatedamage(void) case DMG_BIG_ROOT: gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); break; - case DMG_RECOIL_FROM_IMMUNE: - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - break; } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index ead7cee6f1ef..750c3ef3fb5d 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -238,7 +238,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_RECOIL_IF_MISS] = { - .battleScript = BattleScript_EffectRecoilIfMiss, + .battleScript = BattleScript_EffectHit, + .battleTvScore = 1, + }, + + [EFFECT_RECOIL] = + { + .battleScript = BattleScript_EffectHit, .battleTvScore = 1, }, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 3a6837dd2b14..02249d4f2a25 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -9897,7 +9897,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "A charge that may burn the\n" "foe. Also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_FIRE, .accuracy = 100, diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index b6083e9d190e..26412d850b61 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_JUMP_KICK].effect == EFFECT_RECOIL_IF_MISS); } -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") +SINGLE_BATTLE_TEST("Recoil If Miss: Jump Kick has 50% recoil on miss") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -22,14 +22,14 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") } } -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") +SINGLE_BATTLE_TEST("Recoil If Miss: Jump Kick has 50% recoil on protect") { GIVEN { ASSUME(!gMovesInfo[MOVE_JUMP_KICK].ignoresProtect); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_JUMP_KICK); } } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); @@ -38,7 +38,25 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") } } -SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +SINGLE_BATTLE_TEST("Recoil If Miss: Jump Kick recoil happens after Spiky Shield damage") +{ + GIVEN { + ASSUME(!gMovesInfo[MOVE_JUMP_KICK].ignoresProtect); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, player); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Recoil If Miss: Jump Kick has no recoil if no target") { GIVEN { ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); @@ -54,7 +72,7 @@ SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") } } -SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pokemon can faint from either of these") +SINGLE_BATTLE_TEST("Recoil If Miss: Jump Kick's recoil happens after Spiky Shield damage and Pokemon can faint from either of these") { s16 hp, maxHp = 256; bool32 faintOnSpiky = FALSE, faintOnJumpKick = FALSE; @@ -98,3 +116,18 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok } } } + +SINGLE_BATTLE_TEST("Recoil If Miss: Supercell Slam causes recoil if it is absorbed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); } + } WHEN { + TURN { MOVE(player, MOVE_SUPERCELL_SLAM); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} From a46dc3f5ab2c143e043c39f54c83c75b3be927c5 Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Thu, 28 Nov 2024 01:16:19 +0100 Subject: [PATCH 2/3] fix tests --- include/constants/battle.h | 1 + src/battle_script_commands.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/constants/battle.h b/include/constants/battle.h index d531ea80e652..67505128fb93 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -281,6 +281,7 @@ #define MOVE_RESULT_FOE_HUNG_ON (1 << 7) #define MOVE_RESULT_STURDIED (1 << 8) #define MOVE_RESULT_FOE_ENDURED_AFFECTION (1 << 9) +#define MOVE_RESULT_ABSORBED (1 << 10) #define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED) // Battle Weather flags diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7226b54fd983..b53a11ae7a9f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1410,7 +1410,7 @@ static void Cmd_attackcanceler(void) if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected) { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + gMoveResultFlags |= MOVE_RESULT_ABSORBED; gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE; gLastUsedAbility = ABILITY_LIGHTNING_ROD; BattleScriptPushCursor(); @@ -1419,7 +1419,7 @@ static void Cmd_attackcanceler(void) } else if (gSpecialStatuses[gBattlerTarget].stormDrainRedirected) { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + gMoveResultFlags |= MOVE_RESULT_ABSORBED; gSpecialStatuses[gBattlerTarget].stormDrainRedirected = FALSE; gLastUsedAbility = ABILITY_STORM_DRAIN; BattleScriptPushCursor(); @@ -1473,7 +1473,7 @@ static bool32 JumpIfMoveFailed(u8 adder, u16 move) TrySetDestinyBondToHappen(); if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move)) { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + gMoveResultFlags |= MOVE_RESULT_ABSORBED; return TRUE; } } @@ -5598,7 +5598,7 @@ static void Cmd_moveend(void) break; } else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL_IF_MISS - && gMoveResultFlags & (MOVE_RESULT_NO_EFFECT) + && gMoveResultFlags & (MOVE_RESULT_NO_EFFECT | MOVE_RESULT_ABSORBED) && !gBattleStruct->noTargetPresent && IsBattlerAlive(gBattlerAttacker)) { From b9a0969c55211d6655f8fd726c56321315c32f7c Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Thu, 28 Nov 2024 10:02:52 +0100 Subject: [PATCH 3/3] reverted recoil effect --- include/constants/battle_move_effects.h | 1 - src/battle_script_commands.c | 2 +- src/data/battle_move_effects.h | 6 ------ src/data/moves_info.h | 2 +- 4 files changed, 2 insertions(+), 9 deletions(-) diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 05a5f50fff6b..5da278110f2c 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -39,7 +39,6 @@ enum { EFFECT_FIXED_DAMAGE_ARG, EFFECT_HEAL_BLOCK, EFFECT_RECOIL_IF_MISS, - EFFECT_RECOIL, EFFECT_MIST, EFFECT_FOCUS_ENERGY, EFFECT_CONFUSE, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b53a11ae7a9f..d9379961baad 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5616,7 +5616,7 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilIfMiss; effect = TRUE; } - else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL + else if (gMovesInfo[gCurrentMove].recoil > 0 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 750c3ef3fb5d..75c4ca0998fc 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -242,12 +242,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 1, }, - [EFFECT_RECOIL] = - { - .battleScript = BattleScript_EffectHit, - .battleTvScore = 1, - }, - [EFFECT_MIST] = { .battleScript = BattleScript_EffectMist, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 02249d4f2a25..3a6837dd2b14 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -9897,7 +9897,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "A charge that may burn the\n" "foe. Also hurts the user."), - .effect = EFFECT_RECOIL, + .effect = EFFECT_HIT, .power = 120, .type = TYPE_FIRE, .accuracy = 100,