Freeze/frostbite causing moves

Added move effect FREEZE_OR_FROSTBITE macro so that we only need that if statement once...
This commit is contained in:
Nephrite 2023-11-25 19:22:28 +09:00
parent 5eae07e4b9
commit 98b2c93b3f
10 changed files with 38 additions and 74 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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[] =

View file

@ -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,

View file

@ -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] =

View file

@ -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);
}
}

View file

@ -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 {

View file

@ -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);
}