diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 308a05e70f..69f6567384 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -454,6 +454,7 @@ extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_StealthRockActivates[]; +extern const u8 BattleScript_DefogTryHazards[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index 6741ebe47b..a34e314dd1 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -381,8 +381,9 @@ #define MOVE_EFFECT_STEALTH_ROCK 77 #define MOVE_EFFECT_STEELSURGE 78 #define MOVE_EFFECT_DAMAGE_NON_TYPES 79 +#define MOVE_EFFECT_DEFOG 80 -#define NUM_MOVE_EFFECTS 80 +#define NUM_MOVE_EFFECTS 81 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 478b7ea1b5..64a5c577ad 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3848,6 +3848,20 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; } + case MOVE_EFFECT_DAMAGE_NON_TYPES: + { + side = GetBattlerSide(gBattlerTarget); + if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) + { + gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; + gSideTimers[side].damageNonTypesTimer = 4; + gSideTimers[side].damageNonTypesType = gBattleMoves[gCurrentMove].type; + BattleScriptPush(gBattlescriptCurrInstr + 1); + ChooseDamageNonTypesString(gBattleMoves[gCurrentMove].type); + gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; + } + break; + } case MOVE_EFFECT_STEALTH_ROCK: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) { @@ -3862,21 +3876,17 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_SteelsurgeActivates; } break; - case MOVE_EFFECT_DAMAGE_NON_TYPES: - { - side = GetBattlerSide(gEffectBattler); - if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) + case MOVE_EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SCREEN_ANY + || gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_HAZARDS_ANY + || gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_HAZARDS_ANY + || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { - gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; - gSideTimers[side].damageNonTypesTimer = 4; - gSideTimers[side].damageNonTypesType = gBattleMoves[gCurrentMove].type; BattleScriptPush(gBattlescriptCurrInstr + 1); - ChooseDamageNonTypesString(gBattleMoves[gCurrentMove].type); - gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; + gBattlescriptCurrInstr = BattleScript_DefogTryHazards; } break; } - } } } @@ -11331,6 +11341,9 @@ static void Cmd_various(void) case MAX_EFFECT_STEELSURGE: gBattleScripting.moveEffect = MOVE_EFFECT_STEELSURGE; break; + case MAX_EFFECT_DEFOG: + gBattleScripting.moveEffect = MOVE_EFFECT_DEFOG; + break; } break; }