From a244d7b8b6a14c96440e5da95b68ba9ad55620a1 Mon Sep 17 00:00:00 2001 From: Nephrite Date: Sun, 24 Dec 2023 22:54:41 +0900 Subject: [PATCH] Updated moves that raise the target's own stats To do: moves like CC, Overheat that LOWER stats; did NOT remove the effect for raising all stats due to an AI function --- data/battle_scripts_1.s | 40 ++---- include/constants/battle_move_effects.h | 12 +- include/pokemon.h | 6 +- src/battle_ai_main.c | 119 +++++++++++------ src/battle_ai_util.c | 149 +++++++++++---------- src/battle_tv.c | 7 - src/data/battle_moves.h | 165 ++++++++++++++---------- 7 files changed, 271 insertions(+), 227 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b16513494b..afe74590bb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -95,7 +95,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_UNUSED_70 .4byte BattleScript_EffectHit @ EFFECT_UNUSED_71 .4byte BattleScript_EffectHit @ EFFECT_UNUSED_72 - .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_73 .4byte BattleScript_EffectTwoTurnsAttack @ EFFECT_TWO_TURNS_ATTACK .4byte BattleScript_EffectHit @ EFFECT_UNUSED_75 .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW @@ -157,9 +157,9 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_HIDDEN_POWER .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY - .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT - .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT - .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_135 + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_136 + .4byte BattleScript_EffectHit @ EFFECT_ALL_STATS_UP_HIT .4byte BattleScript_EffectHit @ EFFECT_FELL_STINGER .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP @@ -294,7 +294,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_HURRICANE .4byte BattleScript_EffectHit @ EFFECT_TWO_TYPED_MOVE .4byte BattleScript_EffectMeFirst @ EFFECT_ME_FIRST - .4byte BattleScript_EffectSpeedUpHit @ EFFECT_SPEED_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_272 .4byte BattleScript_EffectQuiverDance @ EFFECT_QUIVER_DANCE .4byte BattleScript_EffectCoil @ EFFECT_COIL .4byte BattleScript_EffectElectrify @ EFFECT_ELECTRIFY @@ -340,7 +340,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE .4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST .4byte BattleScript_EffectPowder @ EFFECT_POWDER - .4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_318 .4byte BattleScript_EffectHit @ EFFECT_BELCH .4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT .4byte BattleScript_EffectHit @ EFFECT_UNUSED_321 @@ -377,7 +377,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectRecoilHP25 @ EFFECT_RECOIL_HP_25 .4byte BattleScript_EffectStuffCheeks @ EFFECT_STUFF_CHEEKS .4byte BattleScript_EffectHit @ EFFECT_GRAV_APPLE - .4byte BattleScript_EffectEvasionUpHit @ EFFECT_EVASION_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_355 .4byte BattleScript_EffectGlitzyGlow @ EFFECT_GLITZY_GLOW .4byte BattleScript_EffectBaddyBad @ EFFECT_BADDY_BAD .4byte BattleScript_EffectSappySeed @ EFFECT_SAPPY_SEED @@ -408,7 +408,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDarkVoid @ EFFECT_DARK_VOID .4byte BattleScript_EffectHit @ EFFET_UNUSED_384 .4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK - .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_387 .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY @@ -1180,10 +1180,6 @@ BattleScript_EffectGlitzyGlow: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectEvasionUpHit: - setmoveeffect MOVE_EFFECT_EVS_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - BattleScript_EffectStuffCheeks:: attackcanceler attackstring @@ -1564,10 +1560,6 @@ BattleScript_EffectPartingShotSwitch: BattleScript_PartingShotEnd: end -BattleScript_EffectSpAtkUpHit: - setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - BattleScript_EffectPowder: attackcanceler accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON @@ -5000,22 +4992,6 @@ BattleScript_BlockedByPrimalWeatherRet:: jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet return -BattleScript_EffectDefenseUpHit:: - setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - -BattleScript_EffectAttackUpHit:: - setmoveeffect MOVE_EFFECT_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - -BattleScript_EffectSpecialAttackUpHit:: - setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - -BattleScript_EffectAllStatsUpHit:: - setmoveeffect MOVE_EFFECT_ALL_STATS_UP | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - BattleScript_EffectBellyDrum:: attackcanceler attackstring diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 82c604116a..38dda767d1 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -136,8 +136,8 @@ #define EFFECT_HIDDEN_POWER 132 #define EFFECT_RAIN_DANCE 133 #define EFFECT_SUNNY_DAY 134 -#define EFFECT_DEFENSE_UP_HIT 135 -#define EFFECT_ATTACK_UP_HIT 136 +#define EFFECT_UNUSED_135 135 +#define EFFECT_UNUSED_136 136 #define EFFECT_ALL_STATS_UP_HIT 137 #define EFFECT_FELL_STINGER 138 #define EFFECT_BELLY_DRUM 139 @@ -275,7 +275,7 @@ #define EFFECT_HURRICANE 269 #define EFFECT_TWO_TYPED_MOVE 270 #define EFFECT_ME_FIRST 271 -#define EFFECT_SPEED_UP_HIT 272 +#define EFFECT_UNUSED_272 272 #define EFFECT_QUIVER_DANCE 273 #define EFFECT_COIL 274 #define EFFECT_ELECTRIFY 275 @@ -321,7 +321,7 @@ #define EFFECT_ACUPRESSURE 315 #define EFFECT_AROMATIC_MIST 316 #define EFFECT_POWDER 317 -#define EFFECT_SP_ATTACK_UP_HIT 318 +#define EFFECT_UNUSED_318 318 #define EFFECT_BELCH 319 #define EFFECT_PARTING_SHOT 320 #define EFFECT_UNUSED_321 321 @@ -358,7 +358,7 @@ #define EFFECT_RECOIL_HP_25 352 #define EFFECT_STUFF_CHEEKS 353 #define EFFECT_GRAV_APPLE 354 -#define EFFECT_EVASION_UP_HIT 355 +#define EFFECT_UNUSED_355 355 #define EFFECT_GLITZY_GLOW 356 #define EFFECT_BADDY_BAD 357 #define EFFECT_SAPPY_SEED 358 @@ -389,7 +389,7 @@ #define EFFECT_DARK_VOID 383 #define EFFET_UNUSED_384 384 #define EFFECT_DOUBLE_SHOCK 385 -#define EFFECT_SPECIAL_ATTACK_UP_HIT 386 +#define EFFECT_UNUSED_387 386 #define EFFECT_VICTORY_DANCE 387 #define EFFECT_TEATIME 388 #define EFFECT_ATTACK_UP_USER_ALLY 389 // Howl 8th Gen diff --git a/include/pokemon.h b/include/pokemon.h index 23e79f5573..40d9a87820 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -400,8 +400,10 @@ struct BattleMove }; #define ADDITIONAL_EFFECTS(...) \ - .numAdditionalEffects = NARG_8(__VA_ARGS__) / 3, \ - .additionalEffects = (const struct AdditionalEffect[]) { __VA_ARGS__ } + .numAdditionalEffects = ARRAY_COUNT(EFFECTS_ARR( __VA_ARGS__ )), \ + .additionalEffects = EFFECTS_ARR( __VA_ARGS__ ) + +#define EFFECTS_ARR(...) (const struct AdditionalEffect[]) { __VA_ARGS__ } #define PRIMARY_EFFECT(_moveEffect) {.self = FALSE, .chance = 0, .moveEffect = _moveEffect} #define PRIMARY_EFFECT_SELF(_moveEffect) {.self = TRUE, .chance = 0, .moveEffect = _moveEffect} diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 695dfcab69..76f454eb66 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3509,14 +3509,22 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(-3); break; } - goto SHOULD_USE_PHAZING_MOVE; + if (isDoubleBattle) + score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); + else + score += min(CountPositiveStatStages(battlerDef), 4); + break; case EFFECT_ROAR: if (aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) { ADJUST_SCORE(-3); break; } - goto SHOULD_USE_PHAZING_MOVE; + if (isDoubleBattle) + score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); + else + score += min(CountPositiveStatStages(battlerDef), 4); + break; case EFFECT_MULTI_HIT: case EFFECT_TRIPLE_KICK: if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move) @@ -3762,10 +3770,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) ADJUST_SCORE(1); break; - case EFFECT_SPEED_UP_HIT: - if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY && !AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) - ADJUST_SCORE(3); - break; case EFFECT_DESTINY_BOND: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(3); @@ -4021,14 +4025,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(1); } break; - case EFFECT_ATTACK_UP_HIT: - if (sereneGraceBoost) - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); - break; - case EFFECT_SPECIAL_ATTACK_UP_HIT: - if (sereneGraceBoost) - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); - break; case EFFECT_FELL_STINGER: if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE && aiData->abilities[battlerAtk] != ABILITY_CONTRARY @@ -4045,7 +4041,35 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score score += (MAX_STAT_STAGE - gBattleMons[battlerAtk].statStages[STAT_ATK]); break; case EFFECT_PSYCH_UP: - goto SHOULD_USE_STAT_COPY_MOVE; + // Want to copy positive stat changes + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i]) + { + switch (i) + { + case STAT_ATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + ADJUST_SCORE(1); + break; + case STAT_SPATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + ADJUST_SCORE(1); + break; + case STAT_ACC: + case STAT_EVASION: + case STAT_SPEED: + ADJUST_SCORE(1); + break; + case STAT_DEF: + case STAT_SPDEF: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) + ADJUST_SCORE(1); + break; + } + } + } + break; case EFFECT_SEMI_INVULNERABLE: ADJUST_SCORE(1); if (predictedMove != MOVE_NONE && !isDoubleBattle) @@ -4831,31 +4855,50 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++) { if (gBattleMoves[move].additionalEffects[i].self) - continue; - - switch (gBattleMoves[move].additionalEffects[i].moveEffect) { - case MOVE_EFFECT_FLINCH: - score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); - break; - case MOVE_EFFECT_ATK_MINUS_1: - case MOVE_EFFECT_DEF_MINUS_1: - case MOVE_EFFECT_SP_ATK_MINUS_1: - case MOVE_EFFECT_SP_DEF_MINUS_1: - case MOVE_EFFECT_ACC_MINUS_1: - case MOVE_EFFECT_EVS_MINUS_1: - if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY) - ADJUST_SCORE(2); - break; - case MOVE_EFFECT_SPD_MINUS_1: - if (ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - { + // Consider move effects that target self + switch (gBattleMoves[move].additionalEffects[i].moveEffect) + { + case MOVE_EFFECT_SPD_PLUS_1: + if (sereneGraceBoost && aiData->abilities[battlerAtk] != ABILITY_CONTRARY && !AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + ADJUST_SCORE(3); + break; + case MOVE_EFFECT_ATK_PLUS_1: + if (sereneGraceBoost) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + break; + case MOVE_EFFECT_SP_ATK_PLUS_1: + if (sereneGraceBoost) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + break; + } + } + else // consider move effects that hinder the target + { + switch (gBattleMoves[move].additionalEffects[i].moveEffect) + { + case MOVE_EFFECT_FLINCH: + score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); + break; + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY) - ADJUST_SCORE(5); - else ADJUST_SCORE(2); - } - break; + break; + case MOVE_EFFECT_SPD_MINUS_1: + if (ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef])) + { + if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY) + ADJUST_SCORE(5); + else + ADJUST_SCORE(2); + } + break; + } } // Only consider the below if they're certain to happen @@ -4868,14 +4911,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score IncreasePoisonScore(battlerAtk, battlerDef, move, &score); break; case MOVE_EFFECT_CLEAR_SMOG: - SHOULD_USE_PHAZING_MOVE: if (isDoubleBattle) score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); else score += min(CountPositiveStatStages(battlerDef), 4); break; case MOVE_EFFECT_SPECTRAL_THIEF: - SHOULD_USE_STAT_COPY_MOVE: // Want to copy positive stat changes for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 7ddb99c7d6..4cd33dad26 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -850,87 +850,96 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 if (CountUsablePartyMons(battlerAtk) != 0 && ShouldPivot(battlerAtk, battlerDef, abilityDef, move, AI_THINKING_STRUCT->movesetIndex)) return TRUE; break; - case EFFECT_ATTACK_UP_HIT: case EFFECT_FELL_STINGER: if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) return TRUE; break; - case EFFECT_DEFENSE_UP2_HIT: - case EFFECT_DEFENSE_UP_HIT: - if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF)) - return TRUE; - break; - case EFFECT_SPEED_UP_HIT: - if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPEED)) - return TRUE; - break; - case EFFECT_SPECIAL_ATTACK_UP_HIT: - if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK)) - return TRUE; - break; - case EFFECT_ALL_STATS_UP_HIT: - for (i = STAT_ATK; i <= NUM_STATS; i++) - { - if (BattlerStatCanRise(battlerAtk, abilityAtk, i)) - return TRUE; - } - break; } // check ADDITIONAL_EFFECTS for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++) { - // Obviously ignore moves that target self + // Consider move effects that target self if (gBattleMoves[move].additionalEffects[i].self) - continue; - - switch (gBattleMoves[move].additionalEffects[i].moveEffect) { - case MOVE_EFFECT_POISON: - case MOVE_EFFECT_TOXIC: - if (AI_CanPoison(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; - case MOVE_EFFECT_FREEZE_OR_FROSTBITE: - if (AI_CanGetFrostbite(battlerDef, abilityDef)) - return TRUE; - break; - case MOVE_EFFECT_PARALYSIS: - if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) - return TRUE; - break; - case MOVE_EFFECT_CONFUSION: - if (AI_CanConfuse(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE)) - return TRUE; - break; - case MOVE_EFFECT_FLINCH: - if (ShouldTryToFlinch(battlerAtk, battlerDef, abilityAtk, abilityDef, move)) - return TRUE; - break; - case MOVE_EFFECT_ATK_MINUS_1: - case MOVE_EFFECT_DEF_MINUS_1: - case MOVE_EFFECT_SPD_MINUS_1: - case MOVE_EFFECT_SP_ATK_MINUS_1: - case MOVE_EFFECT_SP_DEF_MINUS_1: - case MOVE_EFFECT_ACC_MINUS_1: - case MOVE_EFFECT_EVS_MINUS_1: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) - return TRUE; - break; - case MOVE_EFFECT_ATK_MINUS_2: - case MOVE_EFFECT_DEF_MINUS_2: - case MOVE_EFFECT_SPD_MINUS_2: - case MOVE_EFFECT_SP_ATK_MINUS_2: - case MOVE_EFFECT_SP_DEF_MINUS_2: - case MOVE_EFFECT_ACC_MINUS_2: - case MOVE_EFFECT_EVS_MINUS_2: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) - return TRUE; - break; + switch (gBattleMoves[move].additionalEffects[i].moveEffect) + { + case MOVE_EFFECT_ATK_PLUS_1: + if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) + return TRUE; + break; + case MOVE_EFFECT_DEF_PLUS_2: + case MOVE_EFFECT_DEF_PLUS_1: + if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF)) + return TRUE; + break; + case MOVE_EFFECT_SPD_PLUS_1: + if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPEED)) + return TRUE; + break; + case MOVE_EFFECT_SP_ATK_PLUS_1: + if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK)) + return TRUE; + break; + case MOVE_EFFECT_ALL_STATS_UP: + for (i = STAT_ATK; i <= NUM_STATS; i++) + { + if (BattlerStatCanRise(battlerAtk, abilityAtk, i)) + return TRUE; + } + break; + } + } + else // consider move effects that hinder the target + { + switch (gBattleMoves[move].additionalEffects[i].moveEffect) + { + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_TOXIC: + if (AI_CanPoison(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; + case MOVE_EFFECT_FREEZE_OR_FROSTBITE: + if (AI_CanGetFrostbite(battlerDef, abilityDef)) + return TRUE; + break; + case MOVE_EFFECT_PARALYSIS: + if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) + return TRUE; + break; + case MOVE_EFFECT_CONFUSION: + if (AI_CanConfuse(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE)) + return TRUE; + break; + case MOVE_EFFECT_FLINCH: + if (ShouldTryToFlinch(battlerAtk, battlerDef, abilityAtk, abilityDef, move)) + return TRUE; + break; + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: + if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) + return TRUE; + break; + case MOVE_EFFECT_ATK_MINUS_2: + case MOVE_EFFECT_DEF_MINUS_2: + case MOVE_EFFECT_SPD_MINUS_2: + case MOVE_EFFECT_SP_ATK_MINUS_2: + case MOVE_EFFECT_SP_DEF_MINUS_2: + case MOVE_EFFECT_ACC_MINUS_2: + case MOVE_EFFECT_EVS_MINUS_2: + if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) + return TRUE; + break; + } } } diff --git a/src/battle_tv.c b/src/battle_tv.c index e77e15fa2b..4666845355 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -206,9 +206,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HIDDEN_POWER] = 1, [EFFECT_RAIN_DANCE] = 4, [EFFECT_SUNNY_DAY] = 4, - [EFFECT_DEFENSE_UP_HIT] = 1, - [EFFECT_ATTACK_UP_HIT] = 1, - [EFFECT_ALL_STATS_UP_HIT] = 1, [EFFECT_BELLY_DRUM] = 7, [EFFECT_PSYCH_UP] = 7, [EFFECT_MIRROR_COAT] = 6, @@ -342,7 +339,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HURRICANE] = 0, // TODO: Assign points [EFFECT_TWO_TYPED_MOVE] = 0, // TODO: Assign points [EFFECT_ME_FIRST] = 0, // TODO: Assign points - [EFFECT_SPEED_UP_HIT] = 0, // TODO: Assign points [EFFECT_QUIVER_DANCE] = 0, // TODO: Assign points [EFFECT_COIL] = 0, // TODO: Assign points [EFFECT_ELECTRIFY] = 0, // TODO: Assign points @@ -386,7 +382,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ACUPRESSURE] = 0, // TODO: Assign points [EFFECT_AROMATIC_MIST] = 0, // TODO: Assign points [EFFECT_POWDER] = 0, // TODO: Assign points - [EFFECT_SP_ATTACK_UP_HIT] = 0, // TODO: Assign points [EFFECT_BELCH] = 0, // TODO: Assign points [EFFECT_PARTING_SHOT] = 0, // TODO: Assign points [EFFECT_MAT_BLOCK] = 0, // TODO: Assign points @@ -419,7 +414,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_RECOIL_HP_25] = 0, // TODO: Assign points [EFFECT_STUFF_CHEEKS] = 0, // TODO: Assign points [EFFECT_GRAV_APPLE] = 0, // TODO: Assign points - [EFFECT_EVASION_UP_HIT] = 0, // TODO: Assign points [EFFECT_GLITZY_GLOW] = 0, // TODO: Assign points [EFFECT_BADDY_BAD] = 0, // TODO: Assign points [EFFECT_SAPPY_SEED] = 0, // TODO: Assign points @@ -448,7 +442,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HIT_SET_REMOVE_TERRAIN] = 0, // TODO: Assign points [EFFECT_DARK_VOID] = 0, // TODO: Assign points [EFFECT_DOUBLE_SHOCK] = 0, // TODO: Assign points - [EFFECT_SPECIAL_ATTACK_UP_HIT] = 1, [EFFECT_VICTORY_DANCE] = 0, // TODO: Assign points }; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 44962d5798..1941b6d82d 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -3872,18 +3872,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_STEEL_WING] = { - .effect = EFFECT_DEFENSE_UP_HIT, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_STEEL, .accuracy = 90, .pp = 25, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_DEF_PLUS_1, 10), + ), }, [MOVE_MEAN_LOOK] = @@ -4228,18 +4230,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_METAL_CLAW] = { - .effect = EFFECT_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_STEEL, .accuracy = 95, .pp = 35, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 10) + ), }, [MOVE_VITAL_THROW] = @@ -4478,20 +4482,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_ANCIENT_POWER] = { - #if B_UPDATED_MOVE_DATA < GEN_4 - .makesContact = TRUE, - #endif - .effect = EFFECT_ALL_STATS_UP_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_ROCK, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .makesContact = B_UPDATED_MOVE_DATA < GEN_4, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10) + ), }, [MOVE_SHADOW_BALL] = @@ -5632,10 +5636,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .power = 100, .accuracy = 85, #endif - .effect = EFFECT_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .type = TYPE_STEEL, .pp = 10, - .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -5643,6 +5646,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 20) + ), }, [MOVE_ASTONISH] = @@ -5798,18 +5804,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SILVER_WIND] = { - .effect = EFFECT_ALL_STATS_UP_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_BUG, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .windMove = B_EXTRAPOLATED_MOVE_FLAGS, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10) + ), }, [MOVE_METAL_SOUND] = @@ -8062,25 +8070,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, }, +#if B_UPDATED_MOVE_DATA == GEN_5 +#define CHATTER_EFFECT_CHANCE 10 +#elif B_UPDATED_MOVE_DATA >= GEN_6 +#define CHATTER_EFFECT_CHANCE 100 +#else +#define CHATTER_EFFECT_CHANCE 31 +#endif + [MOVE_CHATTER] = { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 65, - ADDITIONAL_EFFECTS( - SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 100) - ), - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 60, - ADDITIONAL_EFFECTS( - SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 10) - ), - #else - .power = 60, - ADDITIONAL_EFFECTS( - SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 31) - ), - #endif .effect = EFFECT_HIT, + .power = B_UPDATED_MOVE_DATA >= GEN_6 ? 65 : 60, .type = TYPE_FLYING, .accuracy = 100, .pp = 20, @@ -8098,6 +8099,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .sleepTalkBanned = TRUE, .instructBanned = TRUE, .assistBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, CHATTER_EFFECT_CHANCE) + ), }, [MOVE_JUDGMENT] = @@ -8132,17 +8136,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_CHARGE_BEAM] = { - .effect = EFFECT_SP_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_ELECTRIC, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 70, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 70) + ), }, [MOVE_WOOD_HAMMER] = @@ -8381,18 +8387,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_OMINOUS_WIND] = { - .effect = EFFECT_ALL_STATS_UP_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_GHOST, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .windMove = B_EXTRAPOLATED_MOVE_FLAGS, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10) + ), }, [MOVE_SHADOW_FORCE] = @@ -8758,18 +8766,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_FLAME_CHARGE] = { - .effect = EFFECT_SPEED_UP_HIT, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_FIRE, .accuracy = 100, .pp = 20, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100) + ), }, [MOVE_COIL] = @@ -9860,18 +9870,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_FIERY_DANCE] = { - .effect = EFFECT_SP_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_FIRE, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .danceMove = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 50) + ), }, [MOVE_FREEZE_SHOCK] = @@ -10543,22 +10555,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_DIAMOND_STORM] = { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .effect = EFFECT_DEFENSE_UP2_HIT, - #else - .effect = EFFECT_DEFENSE_UP_HIT, - #endif .power = 100, .type = TYPE_ROCK, .accuracy = 95, .pp = 5, - .secondaryEffectChance = 50, .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(B_UPDATED_MOVE_DATA >= GEN_7 ? MOVE_EFFECT_DEF_PLUS_2: MOVE_EFFECT_DEF_PLUS_1, 50), + ), }, [MOVE_STEAM_ERUPTION] = @@ -10910,12 +10919,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_POWER_UP_PUNCH] = { - .effect = EFFECT_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_FIGHTING, .accuracy = 100, .pp = 20, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -10923,6 +10931,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 100) + ), }, [MOVE_OBLIVION_WING] = @@ -11976,26 +11987,24 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_ZIPPY_ZAP] = { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 80, - .effect = EFFECT_EVASION_UP_HIT, - .pp = 10, - .sheerForceBoost = TRUE, - #else - .effect = EFFECT_ALWAYS_CRIT, - .power = 50, - .pp = 15, - #endif + .effect = B_UPDATED_MOVE_DATA >= GEN_8 ? EFFECT_HIT : EFFECT_ALWAYS_CRIT, + .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 80 : 50, .type = TYPE_ELECTRIC, .accuracy = 100, - .secondaryEffectChance = 100, + .pp = B_UPDATED_MOVE_DATA >= GEN_8 ? 10 : 15, .target = MOVE_TARGET_SELECTED, .priority = 2, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, + .sheerForceBoost = B_UPDATED_MOVE_DATA >= GEN_8, .metronomeBanned = TRUE, + #if B_UPDATED_MOVE_DATA < GEN_8 + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_EVS_PLUS_1, 100) + ), + #endif }, [MOVE_SPLISHY_SPLASH] = @@ -12014,7 +12023,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, ADDITIONAL_EFFECTS( SECONDARY_EFFECT(MOVE_EFFECT_PARALYSIS, 30) - ) + ), }, [MOVE_FLOATY_FALL] = @@ -13394,18 +13403,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_PSYSHIELD_BASH] = { - .effect = EFFECT_DEFENSE_UP_HIT, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_PSYCHIC, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_DEF_PLUS_1, 100) + ), }, [MOVE_POWER_SHIFT] = @@ -13470,17 +13481,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_MYSTICAL_POWER] = { - .effect = EFFECT_SPECIAL_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_PSYCHIC, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 100) + ), }, [MOVE_RAGING_FURY] = @@ -13624,16 +13637,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .power = 75, .accuracy = 90, #endif - .effect = EFFECT_SPEED_UP_HIT, + .effect = EFFECT_HIT, .type = TYPE_PSYCHIC, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .highCritRatio = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100) + ), }, [MOVE_BITTER_MALICE] = @@ -14177,12 +14192,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_TORCH_SONG] = { - .effect = EFFECT_SP_ATTACK_UP_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_FIRE, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, @@ -14190,16 +14204,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .sheerForceBoost = TRUE, .soundMove = TRUE, .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 100) + ), }, [MOVE_AQUA_STEP] = { - .effect = EFFECT_SPEED_UP_HIT, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_WATER, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -14207,6 +14223,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .sheerForceBoost = TRUE, .danceMove = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100) + ), }, [MOVE_RAGING_BULL] = @@ -14376,18 +14395,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_TRAILBLAZE] = { - .effect = EFFECT_SPEED_UP_HIT, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_GRASS, .accuracy = 100, .pp = 20, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100) + ), }, [MOVE_CHILLING_WATER] = @@ -15165,18 +15186,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = }, [MOVE_CLANGOROUS_SOULBLAZE] = { - .effect = EFFECT_ALL_STATS_UP_HIT, + .effect = EFFECT_HIT, .power = 185, .type = TYPE_DRAGON, .accuracy = 0, .pp = 1, - .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0, .soundMove = TRUE, .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 100) + ), }, [MOVE_GUARDIAN_OF_ALOLA] = {