From 98b2c93b3fd3b0c495e2e596f23efe3b5f6dfdf9 Mon Sep 17 00:00:00 2001 From: Nephrite Date: Sat, 25 Nov 2023 19:22:28 +0900 Subject: [PATCH] Freeze/frostbite causing moves Added move effect FREEZE_OR_FROSTBITE macro so that we only need that if statement once... --- data/battle_scripts_1.s | 18 +----- include/constants/battle.h | 1 + include/constants/battle_move_effects.h | 4 +- src/battle_ai_util.c | 7 +-- src/battle_tv.c | 2 - .../battle_pyramid_wild_requirements.h | 2 +- src/data/battle_moves.h | 56 ++++++++----------- test/battle/ability/leaf_guard.c | 18 ++---- test/battle/ability/purifying_salt.c | 2 +- test/battle/move_effect/freeze_hit.c | 2 +- 10 files changed, 38 insertions(+), 74 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 292e848fd6..c8b59f3ba0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -27,7 +27,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_UNUSED_2 .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB .4byte BattleScript_EffectHit @ EFFECT_UNUSED_4 - .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_5 .4byte BattleScript_EffectHit @ EFFECT_UNUSED_6 .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER @@ -283,11 +283,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHealPulse @ EFFECT_HEAL_PULSE .4byte BattleScript_EffectQuash @ EFFECT_QUASH .4byte BattleScript_EffectIonDeluge @ EFFECT_ION_DELUGE -#if B_USE_FROSTBITE == TRUE - .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FREEZE_DRY -#else - .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_DRY -#endif + .4byte BattleScript_EffectHit @ EFFECT_FREEZE_DRY .4byte BattleScript_EffectTopsyTurvy @ EFFECT_TOPSY_TURVY .4byte BattleScript_EffectMistyTerrain @ EFFECT_MISTY_TERRAIN .4byte BattleScript_EffectGrassyTerrain @ EFFECT_GRASSY_TERRAIN @@ -423,7 +419,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectHit @ EFFECT_BARB_BARRAGE .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING - .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_397 .4byte BattleScript_EffectSnow @ EFFECT_SNOWSCAPE .4byte BattleScript_EffectHit @ EFFECT_UNUSED_399 .4byte BattleScript_EffectHit @ EFFECT_INFERNAL_PARADE @@ -3347,18 +3343,10 @@ BattleScript_AbsorbHealBlock:: tryfaintmon BS_TARGET goto BattleScript_MoveEnd -BattleScript_EffectFrostbiteHit:: - setmoveeffect MOVE_EFFECT_FROSTBITE - goto BattleScript_EffectHit - BattleScript_EffectSleepHit:: setmoveeffect MOVE_EFFECT_SLEEP goto BattleScript_EffectHit -BattleScript_EffectFreezeHit:: - setmoveeffect MOVE_EFFECT_FREEZE - goto BattleScript_EffectHit - BattleScript_EffectExplosion_AnimDmgRet: jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim diff --git a/include/constants/battle.h b/include/constants/battle.h index 4d19f12348..2092684c99 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -316,6 +316,7 @@ #define MOVE_EFFECT_TOXIC 6 #define MOVE_EFFECT_FROSTBITE 7 #define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_FROSTBITE // All above move effects apply primary status +#define MOVE_EFFECT_FREEZE_OR_FROSTBITE (B_USE_FROSTBITE == TRUE ? MOVE_EFFECT_FROSTBITE : MOVE_EFFECT_FREEZE) #define MOVE_EFFECT_CONFUSION 8 #define MOVE_EFFECT_FLINCH 9 #define MOVE_EFFECT_TRI_ATTACK 10 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 7fb2758658..4530a2279a 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -6,7 +6,7 @@ #define EFFECT_UNUSED_2 2 #define EFFECT_ABSORB 3 #define EFFECT_UNUSED_4 4 -#define EFFECT_FREEZE_HIT 5 +#define EFFECT_UNUSED_5 5 #define EFFECT_UNUSED_6 6 #define EFFECT_EXPLOSION 7 #define EFFECT_DREAM_EATER 8 @@ -400,7 +400,7 @@ #define EFFECT_DIRE_CLAW 394 #define EFFECT_BARB_BARRAGE 395 #define EFFECT_REVIVAL_BLESSING 396 -#define EFFECT_FROSTBITE_HIT 397 +#define EFFECT_UNUSED_397 397 #define EFFECT_SNOWSCAPE 398 #define EFFECT_UNUSED_399 399 #define EFFECT_INFERNAL_PARADE 400 diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 8d56988e35..ca000ef8bf 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -850,10 +850,6 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 if (AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE)) return TRUE; break; - case EFFECT_FREEZE_HIT: - if (AI_CanGetFrostbite(battlerDef, abilityDef)) - return TRUE; - break; case EFFECT_HIT_ESCAPE: if (CountUsablePartyMons(battlerAtk) != 0 && ShouldPivot(battlerAtk, battlerDef, abilityDef, move, AI_THINKING_STRUCT->movesetIndex)) return TRUE; @@ -932,8 +928,7 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE)) return TRUE; break; - case MOVE_EFFECT_FREEZE: - case MOVE_EFFECT_FROSTBITE: + case MOVE_EFFECT_FREEZE_OR_FROSTBITE: if (AI_CanGetFrostbite(battlerDef, abilityDef)) return TRUE; break; diff --git a/src/battle_tv.c b/src/battle_tv.c index e2e9dc9263..7dab9b842a 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -89,7 +89,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HIT] = 1, [EFFECT_SLEEP] = 1, [EFFECT_ABSORB] = 4, - [EFFECT_FREEZE_HIT] = 1, [EFFECT_EXPLOSION] = 0, [EFFECT_DREAM_EATER] = 5, [EFFECT_MIRROR_MOVE] = 1, @@ -468,7 +467,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_DOUBLE_SHOCK] = 0, // TODO: Assign points [EFFECT_SPECIAL_ATTACK_UP_HIT] = 1, [EFFECT_VICTORY_DANCE] = 0, // TODO: Assign points - [EFFECT_FROSTBITE_HIT] = 1, }; static const u16 sPoints_Effectiveness[] = diff --git a/src/data/battle_frontier/battle_pyramid_wild_requirements.h b/src/data/battle_frontier/battle_pyramid_wild_requirements.h index a7c25ebd1d..229b1b9be1 100644 --- a/src/data/battle_frontier/battle_pyramid_wild_requirements.h +++ b/src/data/battle_frontier/battle_pyramid_wild_requirements.h @@ -79,7 +79,7 @@ static const u16 sBurningMoves[] = { MOVE_BLAZING_TORQUE, }; -// EFFECT_FREEZE, EFFECT_FREEZE_HIT +// EFFECT_FREEZE, MOVE_EFFECT_FREEZE_OR_FROSTBITE static const u16 sFrostbiteMoves[] = { MOVE_ICE_PUNCH, MOVE_ICE_BEAM, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 3ef618957f..0efdd68498 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -129,16 +129,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_ICE_PUNCH] = { - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif + .effect = EFFECT_HIT, .power = 75, .type = TYPE_ICE, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -146,6 +141,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_FREEZE_OR_FROSTBITE, 10) + ), }, [MOVE_THUNDER_PUNCH] = @@ -1041,20 +1039,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #endif // The following effect is also relevant in battle_pike.c // If you cherry-pick this to use something other than the config, make sure to update it there too - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif + .effect = EFFECT_HIT, .type = TYPE_ICE, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_FREEZE_OR_FROSTBITE, 10) + ), }, [MOVE_BLIZZARD] = @@ -1064,21 +1060,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #else .power = 120, #endif - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif + .effect = EFFECT_HIT, .type = TYPE_ICE, .accuracy = 70, .pp = 5, - .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_FREEZE_OR_FROSTBITE, 10) + ), }, [MOVE_PSYBEAM] = @@ -3274,21 +3268,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_POWDER_SNOW] = { - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif + .effect = EFFECT_HIT, .power = 40, .type = TYPE_ICE, .accuracy = 100, .pp = 25, - .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_FREEZE_OR_FROSTBITE, 10) + ), }, [MOVE_PROTECT] = @@ -12184,9 +12176,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .bitingMove = TRUE, - ADDITIONAL_EFFECTS( - PRIMARY_EFFECT(MOVE_EFFECT_TRAP_BOTH) - ) + // ADDITIONAL_EFFECTS( // broke it oops + // PRIMARY_EFFECT(MOVE_EFFECT_TRAP_BOTH), + // ) }, [MOVE_STUFF_CHEEKS] = @@ -13112,21 +13104,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_FREEZING_GLARE] = { .power = 90, - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif + .effect = EFFECT_HIT, .type = TYPE_PSYCHIC, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_FREEZE_OR_FROSTBITE, 10) + ), }, [MOVE_FIERY_WRATH] = diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 595a9451c3..9d9dd211f7 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -9,29 +9,21 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") PARAMETRIZE { move = MOVE_HYPNOSIS; status = STATUS1_SLEEP; } PARAMETRIZE { move = MOVE_THUNDER_WAVE; status = STATUS1_PARALYSIS; } PARAMETRIZE { move = MOVE_TOXIC; status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } + // PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } // Pointless since you can't freeze in sunlight anyway GIVEN { ASSUME(gBattleMoves[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].effect == EFFECT_PARALYZE); ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, move); } } SCENE { - if (move != MOVE_POWDER_SNOW) { - NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); - ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - MESSAGE("It doesn't affect Leafeon…"); - NOT STATUS_ICON(player, status); - } else { - NONE_OF { - ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - STATUS_ICON(player, status); - } - } + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + NOT STATUS_ICON(player, status); } } diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index ea89124681..ef3f6ad60c 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Purifying Salt grants immunity to status effects") ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].effect == EFFECT_PARALYZE); ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); + ASSUME(gBattleMoves[MOVE_POWDER_SNOW].additionalEffects[0].moveEffect == MOVE_EFFECT_FREEZE_OR_FROSTBITE); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PURIFYING_SALT); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/freeze_hit.c b/test/battle/move_effect/freeze_hit.c index 4c9ff557e4..edd2cac1cc 100644 --- a/test/battle/move_effect/freeze_hit.c +++ b/test/battle/move_effect/freeze_hit.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); + ASSUME(gBattleMoves[MOVE_POWDER_SNOW].additionalEffects[0].moveEffect == MOVE_EFFECT_FREEZE_OR_FROSTBITE); ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70); }