From edf7c677750e1924e8db5d31f16a040ef0233806 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 16 May 2025 16:52:51 -0400 Subject: [PATCH] Remove non-volatile status EFFECTs (#6772) --- include/battle_ai_util.h | 3 +- include/battle_scripts.h | 1 - include/constants/battle_move_effects.h | 6 +- include/move.h | 14 +- src/battle_ai_main.c | 152 ++++++++++------ src/battle_ai_switch_items.c | 7 +- src/battle_ai_util.c | 64 ++++--- src/battle_dome.c | 27 ++- src/battle_script_commands.c | 7 +- src/battle_tv.c | 16 ++ .../battle_pyramid_wild_requirements.h | 6 +- src/data/battle_move_effects.h | 32 +--- src/data/moves_info.h | 26 +-- test/battle/ability/corrosion.c | 36 ++-- test/battle/ability/flower_veil.c | 10 +- test/battle/ability/hyper_cutter.c | 3 +- test/battle/ability/immunity.c | 3 +- test/battle/ability/insomnia.c | 3 +- test/battle/ability/leaf_guard.c | 12 +- test/battle/ability/limber.c | 2 +- test/battle/ability/liquid_ooze.c | 3 +- test/battle/ability/magic_bounce.c | 9 +- test/battle/ability/pastel_veil.c | 2 +- test/battle/ability/purifying_salt.c | 12 +- test/battle/ability/sweet_veil.c | 2 +- test/battle/ability/synchronize.c | 3 +- test/battle/ability/thermal_exchange.c | 9 +- test/battle/ability/water_bubble.c | 2 +- test/battle/ai/ai.c | 9 +- test/battle/ai/ai_switching.c | 6 +- test/battle/move_effect/defog.c | 3 +- test/battle/move_effect/instruct.c | 3 +- test/battle/move_effect/magic_coat.c | 3 +- test/battle/move_effect/metronome.c | 3 +- test/battle/move_effect/mirror_move.c | 3 +- test/battle/move_effect/refresh.c | 3 +- test/battle/move_effect/retaliate.c | 9 +- test/battle/move_effect/sleep.c | 3 +- test/battle/move_effect/take_heart.c | 3 +- test/battle/move_effect/toxic.c | 2 +- test/battle/sleep_clause.c | 165 ++++++++++++------ test/battle/status1/burn.c | 2 +- test/battle/status1/poison.c | 3 +- 43 files changed, 427 insertions(+), 265 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 1e35dbf532..791e49cddd 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -135,6 +135,7 @@ bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensiv bool32 HasMoveWithCategory(u32 battler, u32 category); bool32 HasMoveWithType(u32 battler, u32 type); bool32 HasMoveEffect(u32 battlerId, enum BattleMoveEffects moveEffect); +bool32 HasNonVolatileMoveEffect(u32 battlerId, u32 effect); bool32 IsPowerBasedOnStatus(u32 battlerId, enum BattleMoveEffects effect, u32 argument); bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); @@ -143,7 +144,7 @@ bool32 HasMoveThatLowersOwnStats(u32 battlerId); bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedEffect(enum BattleMoveEffects moveEffect); -bool32 IsNonVolatileStatusMoveEffect(enum BattleMoveEffects moveEffect); +bool32 IsNonVolatileStatusMove(u32 moveEffect); bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility); bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsHazardMove(u32 move); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index dfa78de15d..0b12113cdb 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -867,7 +867,6 @@ extern const u8 BattleScript_EffectFickleBeam[]; extern const u8 BattleScript_FickleBeamDoubled[]; extern const u8 BattleScript_QuestionForfeitBattle[]; extern const u8 BattleScript_ForfeitBattleGaveMoney[]; -extern const u8 BattleScript_EffectNonVolatileStatus[]; extern const u8 BattleScript_AbilityPopUp[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5d82157a15..eb0756bd40 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -5,7 +5,7 @@ enum BattleMoveEffects { EFFECT_PLACEHOLDER, EFFECT_HIT, - EFFECT_SLEEP, + EFFECT_NON_VOLATILE_STATUS, EFFECT_ABSORB, EFFECT_EXPLOSION, EFFECT_DREAM_EATER, @@ -31,7 +31,6 @@ enum BattleMoveEffects EFFECT_MULTI_HIT, EFFECT_CONVERSION, EFFECT_RESTORE_HP, - EFFECT_TOXIC, EFFECT_LIGHT_SCREEN, EFFECT_REST, EFFECT_OHKO, @@ -59,8 +58,6 @@ enum BattleMoveEffects EFFECT_ACCURACY_DOWN_2, EFFECT_EVASION_DOWN_2, EFFECT_REFLECT, - EFFECT_POISON, - EFFECT_PARALYZE, EFFECT_TWO_TURNS_ATTACK, EFFECT_SUBSTITUTE, EFFECT_RAGE, @@ -138,7 +135,6 @@ enum BattleMoveEffects EFFECT_HAIL, EFFECT_TORMENT, EFFECT_FLATTER, - EFFECT_WILL_O_WISP, EFFECT_MEMENTO, EFFECT_FACADE, EFFECT_FOCUS_PUNCH, diff --git a/include/move.h b/include/move.h index 1a70a81460..16ede9d809 100644 --- a/include/move.h +++ b/include/move.h @@ -2,6 +2,7 @@ #define GUARD_MOVES_H #include "contest_effect.h" +#include "constants/battle.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" @@ -535,9 +536,18 @@ static inline u32 GetMoveRecoil(u32 moveId) return gMovesInfo[SanitizeMoveId(moveId)].argument.recoilPercentage; } -static inline u32 GetMoveNonVolatileStatus(u32 moveId) +static inline u32 GetMoveNonVolatileStatus(u32 move) { - return gMovesInfo[SanitizeMoveId(moveId)].argument.nonVolatileStatus; + move = SanitizeMoveId(move); + switch(GetMoveEffect(move)) + { + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_YAWN: + case EFFECT_DARK_VOID: + return gMovesInfo[move].argument.nonVolatileStatus; + default: + return MOVE_EFFECT_NONE; + } } static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index f62ff4376d..dc2e36adc0 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -996,6 +996,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // move data enum BattleMoveEffects moveEffect = GetMoveEffect(move); + u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); s32 moveType; u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = gAiLogicData; @@ -1027,8 +1028,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(20); // Don't setup into expected Focus Punch. - if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS && moveEffect != EFFECT_SLEEP && GetMoveEffect(predictedMove) != EFFECT_FOCUS_PUNCH - && GetMoveEffect(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == EFFECT_FOCUS_PUNCH && RandomPercentage(RNG_AI_STATUS_FOCUS_PUNCH, STATUS_MOVE_FOCUS_PUNCH_CHANCE)) + if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS + && nonVolatileStatus != MOVE_EFFECT_SLEEP + && GetMoveEffect(predictedMove) != EFFECT_FOCUS_PUNCH + && GetMoveEffect(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == EFFECT_FOCUS_PUNCH + && RandomPercentage(RNG_AI_STATUS_FOCUS_PUNCH, STATUS_MOVE_FOCUS_PUNCH_CHANCE)) { RETURN_SCORE_MINUS(20); } @@ -1091,9 +1095,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_MAGIC_GUARD: switch (moveEffect) { - case EFFECT_POISON: - case EFFECT_WILL_O_WISP: - case EFFECT_TOXIC: case EFFECT_LEECH_SEED: ADJUST_SCORE(-5); break; @@ -1104,6 +1105,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) default: break; } + + switch(nonVolatileStatus) + { + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_TOXIC: + case MOVE_EFFECT_BURN: + ADJUST_SCORE(-5); + break; + } + break; break; case ABILITY_WONDER_GUARD: if (effectiveness < UQ_4_12(2.0)) @@ -1123,11 +1134,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(10); break; case ABILITY_SWEET_VEIL: - if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + if (nonVolatileStatus == MOVE_EFFECT_SLEEP) RETURN_SCORE_MINUS(10); break; case ABILITY_FLOWER_VEIL: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect))) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMove(move))) RETURN_SCORE_MINUS(10); break; case ABILITY_MAGIC_BOUNCE: @@ -1139,17 +1150,17 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(20); break; case ABILITY_COMATOSE: - if (IsNonVolatileStatusMoveEffect(moveEffect)) + if (IsNonVolatileStatusMove(move)) RETURN_SCORE_MINUS(10); break; case ABILITY_SHIELDS_DOWN: - if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect)) + if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMove(move)) RETURN_SCORE_MINUS(10); break; case ABILITY_LEAF_GUARD: if ((AI_GetWeather() & B_WEATHER_SUN) && aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA - && IsNonVolatileStatusMoveEffect(moveEffect)) + && IsNonVolatileStatusMove(move)) RETURN_SCORE_MINUS(10); break; } // def ability checks @@ -1172,11 +1183,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(20); break; case ABILITY_SWEET_VEIL: - if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + if (nonVolatileStatus == MOVE_EFFECT_SLEEP) RETURN_SCORE_MINUS(20); break; case ABILITY_FLOWER_VEIL: - if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) + if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMove(move) || IsStatLoweringEffect(moveEffect))) RETURN_SCORE_MINUS(10); break; case ABILITY_AROMA_VEIL: @@ -1195,13 +1206,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // terrain & effect checks if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) { - if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + if (nonVolatileStatus == MOVE_EFFECT_SLEEP) RETURN_SCORE_MINUS(20); } if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) { - if (IsNonVolatileStatusMoveEffect(moveEffect) || IsConfusionMoveEffect(moveEffect)) + if (IsNonVolatileStatusMove(move) || IsConfusionMoveEffect(moveEffect)) RETURN_SCORE_MINUS(20); } @@ -1261,12 +1272,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; default: break; // check move damage - case EFFECT_SLEEP: - if (!AI_CanPutToSleep(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) - ADJUST_SCORE(-10); - if (PartnerMoveActivatesSleepClause(aiData->partnerMove)) - ADJUST_SCORE(-20); - break; case EFFECT_EXPLOSION: if (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE)) ADJUST_SCORE(-2); @@ -1609,7 +1614,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); if (HasMoveEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)) ADJUST_SCORE(-10); - if (HasMoveEffect(battlerAtk, EFFECT_SLEEP) && ! (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + if (HasNonVolatileMoveEffect(battlerAtk, MOVE_EFFECT_SLEEP) && ! (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) ADJUST_SCORE(-10); break; case EFFECT_COUNTER: @@ -1634,13 +1639,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) ADJUST_SCORE(-1); // may still want to just poison //fallthrough - case EFFECT_POISON: - case EFFECT_TOXIC: - if (!AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) - ADJUST_SCORE(-10); - if (!ShouldPoison(battlerAtk, battlerDef)) - ADJUST_SCORE(-5); - break; case EFFECT_LIGHT_SCREEN: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LIGHTSCREEN || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) @@ -1680,12 +1678,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!AI_CanConfuse(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) ADJUST_SCORE(-10); break; - case EFFECT_PARALYZE: - if (!AI_CanParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - ADJUST_SCORE(-10); - if (!ShouldParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-5); - break; case EFFECT_SUBSTITUTE: if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) ADJUST_SCORE(-8); @@ -1974,12 +1966,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (B_MENTAL_HERB >= GEN_5 && aiData->holdEffects[battlerDef] == HOLD_EFFECT_MENTAL_HERB) ADJUST_SCORE(-6); break; - case EFFECT_WILL_O_WISP: - if (!AI_CanBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - ADJUST_SCORE(-10); - if (!ShouldBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-5); - break; case EFFECT_MEMENTO: if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -2864,6 +2850,36 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return 0; // cannot even select } // move effect checks + // check non-volatile effects + switch(nonVolatileStatus) + { + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_TOXIC: + if (!AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) + ADJUST_SCORE(-10); + if (!ShouldPoison(battlerAtk, battlerDef)) + ADJUST_SCORE(-5); + break; + case MOVE_EFFECT_SLEEP: + if (!AI_CanPutToSleep(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) + ADJUST_SCORE(-10); + if (PartnerMoveActivatesSleepClause(aiData->partnerMove)) + ADJUST_SCORE(-20); + break; + case MOVE_EFFECT_PARALYSIS: + if (!AI_CanParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) + ADJUST_SCORE(-10); + if (!ShouldParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef])) + ADJUST_SCORE(-5); + break; + case MOVE_EFFECT_BURN: + if (!AI_CanBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + ADJUST_SCORE(-10); + if (!ShouldBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef])) + ADJUST_SCORE(-5); + break; + } + // Choice items if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && IsBattlerItemEnabled(battlerAtk)) { @@ -3790,10 +3806,26 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(-20); // Force switch if all your attacking moves are physical and you have Natural Cure. } + // Non-volatile statuses + switch(GetMoveNonVolatileStatus(move)) + { + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_TOXIC: + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_SLEEP: + IncreaseSleepScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_PARALYSIS: + IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_BURN: + IncreaseBurnScore(battlerAtk, battlerDef, move, &score); + break; + } // move effect checks switch (moveEffect) { - case EFFECT_SLEEP: case EFFECT_YAWN: IncreaseSleepScore(battlerAtk, battlerDef, move, &score); break; @@ -4029,10 +4061,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING)) ADJUST_SCORE(GOOD_EFFECT); break; - case EFFECT_TOXIC: - case EFFECT_POISON: - IncreasePoisonScore(battlerAtk, battlerDef, move, &score); - break; case EFFECT_LIGHT_SCREEN: case EFFECT_REFLECT: case EFFECT_AURORA_VEIL: @@ -4081,9 +4109,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_CONFUSE: IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; - case EFFECT_PARALYZE: - IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); - break; case EFFECT_SUBSTITUTE: case EFFECT_SHED_TAIL: ADJUST_SCORE(IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move)); @@ -4164,13 +4189,25 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_ENCORE: + { if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - else if (gDisableStructs[battlerDef].encoreTimer == 0 + + bool32 encourage = gBattleMoveEffects[GetMoveEffect(gLastMoves[battlerDef])].encourageEncore; + + switch(GetMoveNonVolatileStatus(gLastMoves[battlerDef])) + { + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_PARALYSIS: + encourage = TRUE; + break; + } + if (gDisableStructs[battlerDef].encoreTimer == 0 && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && (gBattleMoveEffects[GetMoveEffect(gLastMoves[battlerDef])].encourageEncore)) + && (encourage)) ADJUST_SCORE(BEST_EFFECT); break; + } case EFFECT_SLEEP_TALK: case EFFECT_SNORE: if (!IsWakeupTurn(battlerAtk) && gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) @@ -4464,9 +4501,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_TORMENT: break; - case EFFECT_WILL_O_WISP: - IncreaseBurnScore(battlerAtk, battlerDef, move, &score); - break; case EFFECT_FOLLOW_ME: if (isDoubleBattle && GetMoveTarget(move) == MOVE_TARGET_USER @@ -5360,8 +5394,7 @@ static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 case EFFECT_ACCURACY_DOWN_2: case EFFECT_EVASION_DOWN_2: case EFFECT_REFLECT: - case EFFECT_POISON: - case EFFECT_PARALYZE: + case EFFECT_NON_VOLATILE_STATUS: case EFFECT_SUBSTITUTE: case EFFECT_LEECH_SEED: case EFFECT_MINIMIZE: @@ -5372,7 +5405,6 @@ static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 case EFFECT_DEFENSE_CURL: case EFFECT_TORMENT: case EFFECT_FLATTER: - case EFFECT_WILL_O_WISP: case EFFECT_INGRAIN: case EFFECT_IMPRISON: case EFFECT_TICKLE: @@ -5741,7 +5773,6 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SPECIAL_DEFENSE_DOWN_2: case EFFECT_ACCURACY_DOWN_2: case EFFECT_EVASION_DOWN_2: - case EFFECT_POISON: case EFFECT_PAIN_SPLIT: case EFFECT_PERISH_SONG: case EFFECT_SAFEGUARD: @@ -5757,6 +5788,13 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) default: break; } + + switch(GetMoveNonVolatileStatus(move)) + { + case MOVE_EFFECT_POISON: + ADJUST_SCORE(-2); + break; + } } else { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 9f2691f7a7..76b7cc0565 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -204,11 +204,16 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) aiMoveEffect = GetMoveEffect(aiMove); if (aiMove != MOVE_NONE) { + u32 nonVolatileStatus = GetMoveNonVolatileStatus(aiMove); // Check if mon has an "important" status move if (aiMoveEffect == EFFECT_REFLECT || aiMoveEffect == EFFECT_LIGHT_SCREEN || aiMoveEffect == EFFECT_SPIKES || aiMoveEffect == EFFECT_TOXIC_SPIKES || aiMoveEffect == EFFECT_STEALTH_ROCK || aiMoveEffect == EFFECT_STICKY_WEB || aiMoveEffect == EFFECT_LEECH_SEED || aiMoveEffect == EFFECT_EXPLOSION - || aiMoveEffect == EFFECT_SLEEP || aiMoveEffect == EFFECT_YAWN || aiMoveEffect == EFFECT_TOXIC || aiMoveEffect == EFFECT_WILL_O_WISP || aiMoveEffect == EFFECT_PARALYZE + || nonVolatileStatus == MOVE_EFFECT_SLEEP + || nonVolatileStatus == MOVE_EFFECT_TOXIC + || nonVolatileStatus == MOVE_EFFECT_PARALYSIS + || nonVolatileStatus == MOVE_EFFECT_BURN + || aiMoveEffect == EFFECT_YAWN || aiMoveEffect == EFFECT_TRICK || aiMoveEffect == EFFECT_TRICK_ROOM || aiMoveEffect== EFFECT_WONDER_ROOM || aiMoveEffect == EFFECT_PSYCHO_SHIFT || aiMoveEffect == EFFECT_FIRST_TURN_ONLY ) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 7e74f2532d..d6f3a5b533 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1504,20 +1504,9 @@ bool32 IsAromaVeilProtectedEffect(enum BattleMoveEffects moveEffect) } } -bool32 IsNonVolatileStatusMoveEffect(enum BattleMoveEffects moveEffect) +bool32 IsNonVolatileStatusMove(u32 move) { - switch (moveEffect) - { - case EFFECT_SLEEP: - case EFFECT_TOXIC: - case EFFECT_POISON: - case EFFECT_PARALYZE: - case EFFECT_WILL_O_WISP: - case EFFECT_YAWN: - return TRUE; - default: - return FALSE; - } + return GetMoveNonVolatileStatus(move) != MOVE_EFFECT_NONE; } bool32 IsConfusionMoveEffect(enum BattleMoveEffects moveEffect) @@ -1678,8 +1667,10 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) if (gAiLogicData->abilities[battlerDef] == ABILITY_NO_GUARD || gAiLogicData->abilities[battlerAtk] == ABILITY_NO_GUARD) return TRUE; - enum BattleMoveEffects effect = GetMoveEffect(move); - if (B_TOXIC_NEVER_MISS >= GEN_6 && effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); + if (B_TOXIC_NEVER_MISS >= GEN_6 + && nonVolatileStatus == MOVE_EFFECT_TOXIC + && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) return TRUE; // discouraged from hitting @@ -2201,6 +2192,20 @@ bool32 HasMoveEffect(u32 battlerId, enum BattleMoveEffects effect) return FALSE; } +bool32 HasNonVolatileMoveEffect(u32 battlerId, u32 effect) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMoveNonVolatileStatus(moves[i]) == effect) + return TRUE; + } + + return FALSE; +} + bool32 IsPowerBasedOnStatus(u32 battlerId, enum BattleMoveEffects effect, u32 argument) { s32 i; @@ -2348,7 +2353,8 @@ bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef) if (IsMoveUnusable(i, moves[i], moveLimitations)) continue; - if (GetMoveEffect(moves[i]) == EFFECT_SLEEP && gAiLogicData->moveAccuracy[battlerAtk][battlerDef][i] < 85) + if (GetMoveNonVolatileStatus(moves[i]) == MOVE_EFFECT_SLEEP + && gAiLogicData->moveAccuracy[battlerAtk][battlerDef][i] < 85) return TRUE; } return FALSE; @@ -2594,13 +2600,17 @@ static inline bool32 IsMoveSleepClauseTrigger(u32 move) // Sleeping effects like Sleep Powder, Yawn, Dark Void, etc. switch (effect) { - case EFFECT_SLEEP: case EFFECT_YAWN: case EFFECT_DARK_VOID: return TRUE; default: break; } + switch(GetMoveNonVolatileStatus(move)) + { + case MOVE_EFFECT_SLEEP: + return TRUE; + } // Sleeping effects like G-Max Befuddle, G-Max Snooze, etc. u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); @@ -3614,13 +3624,14 @@ bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef return FALSE; enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); + u32 nonVolatileStatus = GetMoveNonVolatileStatus(partnerMove); if (partnerMove != MOVE_NONE && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef - && (partnerEffect == EFFECT_SLEEP - || partnerEffect == EFFECT_POISON - || partnerEffect == EFFECT_TOXIC - || partnerEffect == EFFECT_PARALYZE - || partnerEffect == EFFECT_WILL_O_WISP + && (nonVolatileStatus == MOVE_EFFECT_POISON + || nonVolatileStatus == MOVE_EFFECT_TOXIC + || nonVolatileStatus == MOVE_EFFECT_SLEEP + || nonVolatileStatus == MOVE_EFFECT_PARALYSIS + || nonVolatileStatus == MOVE_EFFECT_BURN || partnerEffect == EFFECT_YAWN)) return TRUE; return FALSE; @@ -4494,11 +4505,10 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) if (IsBattlerPredictedToSwitch(battlerDef)) scoreIncrease += DECENT_EFFECT; - if (HasMoveEffect(battlerDef, EFFECT_SLEEP) - || HasMoveEffect(battlerDef, EFFECT_TOXIC) - || HasMoveEffect(battlerDef, EFFECT_POISON) - || HasMoveEffect(battlerDef, EFFECT_PARALYZE) - || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) + if (HasNonVolatileMoveEffect(battlerDef, MOVE_EFFECT_SLEEP) + || HasNonVolatileMoveEffect(battlerDef, MOVE_EFFECT_TOXIC) + || HasNonVolatileMoveEffect(battlerDef, MOVE_EFFECT_PARALYSIS) + || HasNonVolatileMoveEffect(battlerDef, MOVE_EFFECT_BURN) || HasMoveEffect(battlerDef, EFFECT_CONFUSE) || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) scoreIncrease += GOOD_EFFECT; diff --git a/src/battle_dome.c b/src/battle_dome.c index 420394d929..ce1c693adf 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -4002,25 +4002,26 @@ static bool32 IsDomeStatusMoveEffect(u32 move) { switch(GetMoveEffect(move)) { - case EFFECT_SLEEP: case EFFECT_CONFUSE: case EFFECT_DISABLE: - case EFFECT_POISON: - case EFFECT_PARALYZE: - case EFFECT_TOXIC: case EFFECT_LEECH_SEED: case EFFECT_TAUNT: case EFFECT_TORMENT: - case EFFECT_WILL_O_WISP: case EFFECT_ENCORE: case EFFECT_ATTRACT: case EFFECT_NIGHTMARE: - case EFFECT_YAWN: case EFFECT_CURSE: return TRUE; default: - return MoveHasAdditionalEffect(move, MOVE_EFFECT_WRAP); + break; } + + if (GetMoveNonVolatileStatus(move) != MOVE_EFFECT_NONE) + return TRUE; + if (MoveHasAdditionalEffect(move, MOVE_EFFECT_WRAP)) + return TRUE; + + return FALSE; } static bool32 IsDomeRareMove(u32 move) @@ -4085,8 +4086,6 @@ static bool32 IsDomeComboMove(u32 move) case EFFECT_TOXIC_SPIKES: case EFFECT_STEALTH_ROCK: case EFFECT_STICKY_WEB: - // Inflicting sleep & related effects - case EFFECT_SLEEP: case EFFECT_YAWN: case EFFECT_DREAM_EATER: case EFFECT_NIGHTMARE: @@ -4121,11 +4120,21 @@ static bool32 IsDomeComboMove(u32 move) break; } + // Move flags if (MoveAlwaysHitsInRain(move)) return TRUE; else if (MoveAlwaysHitsInHailSnow(move)) return TRUE; + // Inflicting sleep & related effects + switch(GetMoveNonVolatileStatus(move)) + { + case MOVE_EFFECT_SLEEP: + return TRUE; + default: + return FALSE; + } + return FALSE; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 55125f4926..cd71a35e8c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1280,7 +1280,7 @@ static void Cmd_attackcanceler(void) ABILITY_RUN_SCRIPT)) return; - if (effect == EFFECT_PARALYZE) + if (GetMoveNonVolatileStatus(gCurrentMove) == MOVE_EFFECT_PARALYSIS) { if (CanAbilityAbsorbMove(gBattlerAttacker, gBattlerTarget, @@ -1493,9 +1493,12 @@ static bool32 AccuracyCalcHelper(u32 move, u32 battler) bool32 effect = FALSE; u32 ability = ABILITY_NONE; enum BattleMoveEffects moveEffect = GetMoveEffect(move); + u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); if ((gStatuses3[battler] & STATUS3_ALWAYS_HITS && gDisableStructs[battler].battlerWithSureHit == gBattlerAttacker) - || (B_TOXIC_NEVER_MISS >= GEN_6 && moveEffect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) + || (B_TOXIC_NEVER_MISS >= GEN_6 + && nonVolatileStatus == MOVE_EFFECT_TOXIC + && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) || gStatuses4[battler] & STATUS4_GLAIVE_RUSH) { effect = TRUE; diff --git a/src/battle_tv.c b/src/battle_tv.c index 953932cfed..96ce633440 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -809,6 +809,22 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) default: break; } + switch(GetMoveNonVolatileStatus(arg2)) + { + case MOVE_EFFECT_SLEEP: + baseFromEffect++; + break; + case MOVE_EFFECT_PARALYSIS: + baseFromEffect += 3; + break; + case MOVE_EFFECT_BURN: + case MOVE_EFFECT_POISON: + baseFromEffect += 4; + break; + case MOVE_EFFECT_TOXIC: + baseFromEffect += 5; + break; + } // Guaranteed hit but without negative priority if (GetMoveAccuracy(move) == 0 && GetMovePriority(move) >= 0) diff --git a/src/data/battle_frontier/battle_pyramid_wild_requirements.h b/src/data/battle_frontier/battle_pyramid_wild_requirements.h index b559daf037..fd5695344a 100644 --- a/src/data/battle_frontier/battle_pyramid_wild_requirements.h +++ b/src/data/battle_frontier/battle_pyramid_wild_requirements.h @@ -13,7 +13,7 @@ struct BattlePyramidRequirement { u8 nEvoItems; }; -// EFFECT_PARALYZE, MOVE_EFFECT_PARALYZE (30% or more) +// MOVE_EFFECT_PARALYZE (30% or more) static const u16 sParalyzingMoves[] = { //MOVE_THUNDER_PUNCH, MOVE_BODY_SLAM, @@ -35,7 +35,7 @@ static const u16 sParalyzingMoves[] = { MOVE_COMBAT_TORQUE, }; -// MOVE_EFFECT_POISON (30% or more), EFFECT_POISON, MOVE_EFFECT_TOXIC, EFFECT_TOXIC, EFFECT_TOXIC_THREAD +// MOVE_EFFECT_POISON (30% or more), MOVE_EFFECT_TOXIC, EFFECT_TOXIC_THREAD static const u16 sPoisoningMoves[] = { MOVE_POISON_STING, //MOVE_TWINEEDLE, @@ -57,7 +57,7 @@ static const u16 sPoisoningMoves[] = { MOVE_TOXIC_THREAD, }; -// MOVE_EFFECT_BURN, EFFECT_WILL_O_WISP +// MOVE_EFFECT_BURN static const u16 sBurningMoves[] = { MOVE_WILL_O_WISP, //MOVE_EMBER, diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 0ab2364ced..06b1fb3fd6 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -16,10 +16,10 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 1, }, - [EFFECT_SLEEP] = + [EFFECT_NON_VOLATILE_STATUS] = { .battleScript = BattleScript_EffectNonVolatileStatus, - .battleTvScore = 1, + .battleTvScore = 0, // Handled within the battle TV functions }, [EFFECT_ABSORB] = @@ -183,13 +183,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .encourageEncore = TRUE, }, - [EFFECT_TOXIC] = - { - .battleScript = BattleScript_EffectNonVolatileStatus, - .battleTvScore = 5, - .encourageEncore = TRUE, - }, - [EFFECT_LIGHT_SCREEN] = { .battleScript = BattleScript_EffectLightScreen, @@ -366,20 +359,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .encourageEncore = TRUE, }, - [EFFECT_POISON] = - { - .battleScript = BattleScript_EffectNonVolatileStatus, - .battleTvScore = 4, - .encourageEncore = TRUE, - }, - - [EFFECT_PARALYZE] = - { - .battleScript = BattleScript_EffectNonVolatileStatus, - .battleTvScore = 4, - .encourageEncore = TRUE, - }, - [EFFECT_TWO_TURNS_ATTACK] = { .battleScript = BattleScript_EffectTwoTurnsAttack, @@ -887,13 +866,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 7, }, - [EFFECT_WILL_O_WISP] = - { - .battleScript = BattleScript_EffectNonVolatileStatus, - .battleTvScore = 5, - .encourageEncore = TRUE, - }, - [EFFECT_MEMENTO] = { .battleScript = BattleScript_EffectMemento, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 3ed1de6df2..1409943a54 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1311,7 +1311,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A soothing song lulls the\n" "foe into a deep slumber."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_NORMAL, .accuracy = 55, @@ -2084,7 +2084,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Scatters a toxic powder\n" "that may poison the foe."), - .effect = EFFECT_POISON, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_POISON, .accuracy = 75, @@ -2110,7 +2110,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Scatters a powder that may\n" "paralyze the foe."), - .effect = EFFECT_PARALYZE, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_GRASS, .accuracy = 75, @@ -2136,7 +2136,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Scatters a powder that may\n" "cause the foe to sleep."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_GRASS, .accuracy = 75, @@ -2321,7 +2321,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A weak jolt of electricity\n" "that paralyzes the foe."), - .effect = EFFECT_PARALYZE, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_ELECTRIC, .accuracy = B_UPDATED_MOVE_DATA >= GEN_7 ? 90 : 100, @@ -2473,7 +2473,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Poisons the foe with an\n" "intensifying toxin."), - .effect = EFFECT_TOXIC, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_POISON, .accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 90 : 85, @@ -2549,7 +2549,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A hypnotizing move that\n" "may induce sleep."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 60, @@ -3656,7 +3656,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = #else .accuracy = 75, #endif - .effect = EFFECT_PARALYZE, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_NORMAL, .pp = 30, @@ -3715,7 +3715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = #else .accuracy = 55, #endif - .effect = EFFECT_POISON, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_POISON, .pp = 40, @@ -3785,7 +3785,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Demands a kiss with a scary\n" "face that induces sleep."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_NORMAL, .accuracy = 75, @@ -3926,7 +3926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Scatters a cloud of spores\n" "that always induce sleep."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_GRASS, .accuracy = 100, @@ -6920,7 +6920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Inflicts a burn on the foe\n" "with intense fire."), - .effect = EFFECT_WILL_O_WISP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_FIRE, .accuracy = B_UPDATED_MOVE_DATA >= GEN_6 ? 85 : 75, @@ -8459,7 +8459,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Lulls the foe into sleep\n" "with a pleasant melody."), - .effect = EFFECT_SLEEP, + .effect = EFFECT_NON_VOLATILE_STATUS, .power = 0, .type = TYPE_GRASS, .accuracy = 55, diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c index ffac25e54e..1e589967db 100644 --- a/test/battle/ability/corrosion.c +++ b/test/battle/ability/corrosion.c @@ -30,8 +30,10 @@ SINGLE_BATTLE_TEST("Corrosion can poison or badly poison a Steel type with a sta PARAMETRIZE { move = MOVE_TOXIC; } GIVEN { - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_BELDUM); } WHEN { @@ -111,8 +113,10 @@ SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion poisons a PARAMETRIZE { move = MOVE_TOXIC; } PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_ABRA) { Ability(ABILITY_SYNCHRONIZE); } } WHEN { @@ -138,8 +142,10 @@ SINGLE_BATTLE_TEST("Corrosion cannot bypass moves that prevent poisoning such as PARAMETRIZE { move = MOVE_TOXIC; } PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -160,8 +166,10 @@ SINGLE_BATTLE_TEST("Corrosion cannot bypass abilities that prevent poisoning suc PARAMETRIZE { move = MOVE_TOXIC; } PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } } WHEN { @@ -182,8 +190,10 @@ SINGLE_BATTLE_TEST("Corrosion allows the Pokémon with the ability to poison a S PARAMETRIZE { move = MOVE_TOXIC; } PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_BELDUM); @@ -206,8 +216,10 @@ SINGLE_BATTLE_TEST("Corrosion's effect is lost if the move used by the Pokémon PARAMETRIZE { move = MOVE_TOXIC; } PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/flower_veil.c b/test/battle/ability/flower_veil.c index 97349b6ba3..2b36d08d60 100644 --- a/test/battle/ability/flower_veil.c +++ b/test/battle/ability/flower_veil.c @@ -3,15 +3,15 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_GAS) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_POISON_GAS) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_GAS) == MOVE_EFFECT_POISON); - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); - ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_PARALYZE); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS); - ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_HYPNOSIS) == MOVE_EFFECT_SLEEP); } diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 696c2e136b..7b1070e613 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -43,7 +43,8 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents Attack stage reduction from moves") SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack reduction from burn") { GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } } WHEN { diff --git a/test/battle/ability/immunity.c b/test/battle/ability/immunity.c index 365b5d0d50..81fbe1b8c1 100644 --- a/test/battle/ability/immunity.c +++ b/test/battle/ability/immunity.c @@ -18,7 +18,8 @@ SINGLE_BATTLE_TEST("Immunity prevents Poison Sting poison") SINGLE_BATTLE_TEST("Immunity prevents Toxic bad poison") { GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } } WHEN { diff --git a/test/battle/ability/insomnia.c b/test/battle/ability/insomnia.c index 533ca9ce85..61bb1931fa 100644 --- a/test/battle/ability/insomnia.c +++ b/test/battle/ability/insomnia.c @@ -4,7 +4,8 @@ SINGLE_BATTLE_TEST("Insomnia prevents sleep") { GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index e04881ecb4..94785bd29b 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -11,10 +11,14 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") PARAMETRIZE { move = MOVE_TOXIC; status = STATUS1_TOXIC_POISON; } // PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } // Pointless since you can't freeze in sunlight anyway GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); - ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_SLEEP); - ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_PARALYZE); - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); + ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_HYPNOSIS) == MOVE_EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/limber.c b/test/battle/ability/limber.c index fa18069946..f89f9a1e74 100644 --- a/test/battle/ability/limber.c +++ b/test/battle/ability/limber.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Limber prevents paralysis") SINGLE_BATTLE_TEST("Limber prevents paralysis from Thunder Wave") { GIVEN { - ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_PARALYZE); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS); PLAYER(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/liquid_ooze.c b/test/battle/ability/liquid_ooze.c index bb2fc81afa..0e5a0c6cf7 100644 --- a/test/battle/ability/liquid_ooze.c +++ b/test/battle/ability/liquid_ooze.c @@ -142,7 +142,8 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes Dream Eater users to lose HP instead of h { s16 damage; GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_DREAM_EATER) == EFFECT_DREAM_EATER); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_TENTACRUEL) { Ability(ABILITY_LIQUID_OOZE); } diff --git a/test/battle/ability/magic_bounce.c b/test/battle/ability/magic_bounce.c index 2731a21fed..e04c018a33 100644 --- a/test/battle/ability/magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -5,7 +5,8 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") { GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); } } WHEN { @@ -23,7 +24,8 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") { GIVEN { ASSUME(IsPowderMove(MOVE_STUN_SPORE)); - ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_PARALYZE); + ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_STUN_SPORE) == MOVE_EFFECT_PARALYSIS); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); } } WHEN { @@ -118,7 +120,8 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting foes field") SINGLE_BATTLE_TEST("Magic Bounce bounced back status moves can not be bounced back by Magic Bounce") { GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); } OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); } } WHEN { diff --git a/test/battle/ability/pastel_veil.c b/test/battle/ability/pastel_veil.c index e7cd83426e..1c0926ac80 100644 --- a/test/battle/ability/pastel_veil.c +++ b/test/battle/ability/pastel_veil.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); } diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index 1c98466aef..49060e6596 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -61,10 +61,14 @@ SINGLE_BATTLE_TEST("Purifying Salt grants immunity to status effects") PARAMETRIZE { move = MOVE_TOXIC; status = STATUS1_TOXIC_POISON; } PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); - ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_SLEEP); - ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_PARALYZE); - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); + ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_HYPNOSIS) == MOVE_EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE) == TRUE); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PURIFYING_SALT); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/sweet_veil.c b/test/battle/ability/sweet_veil.c index 0e1322925f..56431055c6 100644 --- a/test/battle/ability/sweet_veil.c +++ b/test/battle/ability/sweet_veil.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_HYPNOSIS) == MOVE_EFFECT_SLEEP); } diff --git a/test/battle/ability/synchronize.c b/test/battle/ability/synchronize.c index 83f960973c..e150e2950e 100644 --- a/test/battle/ability/synchronize.c +++ b/test/battle/ability/synchronize.c @@ -5,7 +5,8 @@ SINGLE_BATTLE_TEST("Synchronize will mirror back non volatile status back at opp { GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ABRA) { Ability(ABILITY_SYNCHRONIZE); } diff --git a/test/battle/ability/thermal_exchange.c b/test/battle/ability/thermal_exchange.c index 90cf395f30..1eb621594f 100644 --- a/test/battle/ability/thermal_exchange.c +++ b/test/battle/ability/thermal_exchange.c @@ -4,7 +4,8 @@ SINGLE_BATTLE_TEST("Thermal Exchange makes Will-O-Wisp fail") { GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); PLAYER(SPECIES_BAXCALIBUR) { Ability(ABILITY_THERMAL_EXCHANGE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -37,7 +38,8 @@ SINGLE_BATTLE_TEST("Thermal Exchange prevents the user from getting burned when SINGLE_BATTLE_TEST("Thermal Exchange cures burns when acquired") { GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP); PLAYER(SPECIES_BAXCALIBUR) { Ability(ABILITY_THERMAL_EXCHANGE); } OPPONENT(SPECIES_WOBBUFFET); @@ -56,7 +58,8 @@ SINGLE_BATTLE_TEST("Thermal Exchange cures burns when acquired") SINGLE_BATTLE_TEST("Thermal Exchange burn prevention can be bypassed with Mold Breaker but is cured after") { GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); PLAYER(SPECIES_BAXCALIBUR) { Ability(ABILITY_THERMAL_EXCHANGE); } OPPONENT(SPECIES_RAMPARDOS) { Ability(ABILITY_MOLD_BREAKER); } } WHEN { diff --git a/test/battle/ability/water_bubble.c b/test/battle/ability/water_bubble.c index f6d838ae31..d140dac040 100644 --- a/test/battle/ability/water_bubble.c +++ b/test/battle/ability/water_bubble.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Water Bubble prevents burn from Will-o-Wisp") { GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); PLAYER(SPECIES_DEWPIDER) { Ability(ABILITY_WATER_BUBBLE); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 55942c2834..2bf7e0b910 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -802,9 +802,12 @@ AI_SINGLE_BATTLE_TEST("AI won't use status moves against opponents that would be PARAMETRIZE { aiMove = MOVE_TOXIC; } PARAMETRIZE { aiMove = MOVE_THUNDER_WAVE; } GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_PARALYZE); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_SWELLOW) { Ability(ABILITY_GUTS); Moves(MOVE_TACKLE); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, aiMove); } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index afde8a62ab..eb889f008e 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -612,7 +612,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee PARAMETRIZE { species = SPECIES_HARIYAMA, odds = SHOULD_SWITCH_BADLY_POISONED_PERCENTAGE; } PASSES_RANDOMLY(odds, 100, RNG_AI_SWITCH_BADLY_POISONED); GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH, MOVE_CELEBRATE, MOVE_TOXIC, MOVE_AURA_SPHERE); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); } @@ -1138,7 +1139,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if all moves { PASSES_RANDOMLY(SHOULD_SWITCH_ALL_SCORES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_SCORES_BAD); GIVEN { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); ASSUME(GetMoveEffect(MOVE_POLTERGEIST) == EFFECT_POLTERGEIST); ASSUME(GetMoveType(MOVE_SCALD) == TYPE_WATER); ASSUME(GetMoveType(MOVE_EARTHQUAKE) == TYPE_GROUND); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 6f9acc7dfc..d4c6650c72 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -13,7 +13,8 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES); ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES); ASSUME(GetMoveEffect(MOVE_STICKY_WEB) == EFFECT_STICKY_WEB); - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); ASSUME(GetMoveEffect(MOVE_SCREECH) == EFFECT_DEFENSE_DOWN_2); ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); ASSUME(GetMoveCategory(MOVE_GUST) == DAMAGE_CATEGORY_SPECIAL); diff --git a/test/battle/move_effect/instruct.c b/test/battle/move_effect/instruct.c index e79439d336..03a39fe154 100644 --- a/test/battle/move_effect/instruct.c +++ b/test/battle/move_effect/instruct.c @@ -60,7 +60,8 @@ DOUBLE_BATTLE_TEST("Instruct-called move targets the target of the move picked o DOUBLE_BATTLE_TEST("Instruct doesn't bypass sleep") { GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, MOVE_POUND, MOVE_SCRATCH, MOVE_GROWL); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/magic_coat.c b/test/battle/move_effect/magic_coat.c index 343322408d..50ed79e194 100644 --- a/test/battle/move_effect/magic_coat.c +++ b/test/battle/move_effect/magic_coat.c @@ -9,7 +9,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Magic Coat prints the correct message when bouncing back a move") { GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index 1a5d4aeb9d..3bb178e2f2 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -27,7 +27,8 @@ SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types") GIVEN { ASSUME(IsPowderMove(MOVE_POISON_POWDER)); ASSUME(gSpeciesInfo[SPECIES_TANGELA].types[0] == TYPE_GRASS); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_TANGELA); } WHEN { diff --git a/test/battle/move_effect/mirror_move.c b/test/battle/move_effect/mirror_move.c index 2df8c91fba..905fb32d31 100644 --- a/test/battle/move_effect/mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -43,7 +43,8 @@ SINGLE_BATTLE_TEST("Mirror Move's called powder move fails against Grass Types") GIVEN { ASSUME(IsPowderMove(MOVE_STUN_SPORE)); ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); - ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_PARALYZE); + ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_STUN_SPORE) == MOVE_EFFECT_PARALYSIS); PLAYER(SPECIES_ODDISH); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/refresh.c b/test/battle/move_effect/refresh.c index 7d0ba0273e..f11a8dfca1 100644 --- a/test/battle/move_effect/refresh.c +++ b/test/battle/move_effect/refresh.c @@ -45,7 +45,8 @@ SINGLE_BATTLE_TEST("Refresh does not cure the user of Freeze") SINGLE_BATTLE_TEST("Refresh does not cure sleep when used by Sleep Talk") { GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SLEEP_TALK, MOVE_REFRESH); } diff --git a/test/battle/move_effect/retaliate.c b/test/battle/move_effect/retaliate.c index 34843da04e..47b1c3325d 100644 --- a/test/battle/move_effect/retaliate.c +++ b/test/battle/move_effect/retaliate.c @@ -63,9 +63,12 @@ DOUBLE_BATTLE_TEST("Retaliate works with passive damage") PARAMETRIZE { move = MOVE_FLAME_BURST; moveTarget = playerRight; } PARAMETRIZE { move = MOVE_FIRE_PLEDGE; moveTarget = playerRight; move2 = MOVE_GRASS_PLEDGE; } GIVEN { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); - ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_POISON); - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); #if B_USE_FROSTBITE == TRUE ASSUME(GetMoveAdditionalEffectById(MOVE_ICE_BEAM, 0)->moveEffect == MOVE_EFFECT_FREEZE_OR_FROSTBITE); #endif diff --git a/test/battle/move_effect/sleep.c b/test/battle/move_effect/sleep.c index 702044d331..524db0cf08 100644 --- a/test/battle/move_effect/sleep.c +++ b/test/battle/move_effect/sleep.c @@ -3,7 +3,8 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_HYPNOSIS) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_HYPNOSIS) == MOVE_EFFECT_SLEEP); } SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") diff --git a/test/battle/move_effect/take_heart.c b/test/battle/move_effect/take_heart.c index e029439103..69560de74d 100644 --- a/test/battle/move_effect/take_heart.c +++ b/test/battle/move_effect/take_heart.c @@ -50,7 +50,8 @@ SINGLE_BATTLE_TEST("Take Heart cures the user of all status conditions") SINGLE_BATTLE_TEST("Take Heart cures sleep when used by Sleep Talk") { GIVEN { - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SLEEP_TALK, MOVE_TAKE_HEART); } diff --git a/test/battle/move_effect/toxic.c b/test/battle/move_effect/toxic.c index 26f54e5d57..c25b4fc640 100644 --- a/test/battle/move_effect/toxic.c +++ b/test/battle/move_effect/toxic.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_TOXIC); + ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); } diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index b6c1224755..c2c74314e5 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -5,7 +5,8 @@ AI_SINGLE_BATTLE_TEST("Sleep Clause: AI will not use sleep moves while sleep cla { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -21,7 +22,8 @@ AI_DOUBLE_BATTLE_TEST("Sleep Clause: AI will not use sleep moves while sleep cla { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -39,7 +41,8 @@ AI_DOUBLE_BATTLE_TEST("Sleep Clause: AI will not use sleep move if partner is al { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -55,7 +58,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep moves fail when sleep clause is active") { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -82,7 +86,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep moves fail when sleep clause is active ( { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { HP(1); MaxHP(100); } @@ -108,7 +113,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Rest does not activate sleep clause") { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -128,7 +134,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Rest does not activate sleep clause (Doubles)" { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -150,7 +157,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Rest can still be used when sleep clause is ac { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -174,7 +182,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Rest can still be used when sleep clause is ac { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -196,7 +205,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Psycho Shift'ing sleep will fail if sleep clau { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK); ASSUME(GetMoveEffect(MOVE_PSYCHO_SHIFT) == EFFECT_PSYCHO_SHIFT); PLAYER(SPECIES_WOBBUFFET) @@ -222,7 +232,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Psycho Shift'ing sleep will activate sleep cla { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK); ASSUME(GetMoveEffect(MOVE_PSYCHO_SHIFT) == EFFECT_PSYCHO_SHIFT); PLAYER(SPECIES_ZIGZAGOON) @@ -298,7 +309,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -322,7 +334,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -349,7 +362,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -376,7 +390,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -401,7 +416,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Moves with sleep effect chance will activate s GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(MoveHasAdditionalEffect(MOVE_RELIC_SONG, MOVE_EFFECT_SLEEP)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -429,7 +445,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Moves with sleep effect chance will still do d GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(MoveHasAdditionalEffect(MOVE_RELIC_SONG, MOVE_EFFECT_SLEEP)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -456,7 +473,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Dire Claw cannot sleep a mon when sleep clause GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(MoveHasAdditionalEffect(MOVE_DIRE_CLAW, MOVE_EFFECT_DIRE_CLAW)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -532,7 +550,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(B_SLEEP_TURNS >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -564,7 +583,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { move = MOVE_SPARKLY_SWIRL; healingSlot = opponentLeft; sporedSlot = opponentRight; switchIndex = 1; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLY_SWIRL, MOVE_EFFECT_AROMATHERAPY)); @@ -622,7 +642,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(MoveHasAdditionalEffect(MOVE_WAKE_UP_SLAP, MOVE_EFFECT_REMOVE_STATUS)); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -664,7 +685,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_UPROAR) == EFFECT_UPROAR); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -705,7 +727,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { move = MOVE_AROMATHERAPY; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK); ASSUME(GetMoveEffect(MOVE_PSYCHO_SHIFT) == EFFECT_PSYCHO_SHIFT); ASSUME(GetMoveEffect(MOVE_JUNGLE_HEALING) == EFFECT_JUNGLE_HEALING); @@ -761,7 +784,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_PELIPPER) { Ability(ABILITY_DRIZZLE); } OPPONENT(SPECIES_LUVDISC) { Ability(ABILITY_HYDRATION); } } WHEN { @@ -785,7 +809,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_SWABLU) { Ability(ABILITY_NATURAL_CURE); } OPPONENT(SPECIES_ZIGZAGOON); @@ -815,7 +840,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_DRATINI) { Ability(ABILITY_SHED_SKIN); } } WHEN { @@ -839,7 +865,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PASSES_RANDOMLY(30, 100, RNG_HEALER); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -867,7 +894,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { heldItem = ITEM_LUM_BERRY; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP); ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); PLAYER(SPECIES_ZIGZAGOON); @@ -898,7 +926,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { heldItem = ITEM_LUM_BERRY; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP); ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); @@ -931,7 +960,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(gItemsInfo[ITEM_AWAKENING].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -955,7 +985,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON) { Level(5); } OPPONENT(SPECIES_ZIGZAGOON); @@ -980,7 +1011,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON) { Level(5); } @@ -1008,7 +1040,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { ability = ABILITY_INSOMNIA; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_DELIBIRD) { Ability(ability); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SLEEP_TALK, MOVE_SKILL_SWAP); } } WHEN { @@ -1044,7 +1077,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PARAMETRIZE { ability = ABILITY_INSOMNIA; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON) PLAYER(SPECIES_DELIBIRD) { Ability(ability); } OPPONENT(SPECIES_RALTS) { Ability(ABILITY_TRACE); } @@ -1081,7 +1115,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo KNOWN_FAILING; // Sleep Clause parts work, but Imposter seems broken with battle messages / targeting. Issue #5565 https://github.com/rh-hideout/pokeemerald-expansion/issues/5565 GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(gItemsInfo[ITEM_LAGGING_TAIL].holdEffect == HOLD_EFFECT_LAGGING_TAIL); PLAYER(SPECIES_ZIGZAGOON) PLAYER(SPECIES_DELIBIRD) { Ability(ability); } @@ -1116,7 +1151,8 @@ AI_SINGLE_BATTLE_TEST("Sleep Clause: AI will use sleep moves again when sleep cl { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHESTO_BERRY); } @@ -1132,7 +1168,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SWEETNESS, MOVE_EFFECT_AROMATHERAPY)); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_APPLETUN) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -1158,7 +1195,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Pre-existing sleep condition doesn't activate { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON) { Status1(STATUS1_SLEEP); } OPPONENT(SPECIES_ZIGZAGOON); @@ -1178,7 +1216,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep caused by Effect Spore does not prevent GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_ZIGZAGOON); @@ -1214,7 +1253,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1251,7 +1291,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_ZIGZAGOON); @@ -1291,7 +1332,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Rest doesn't deactivate sleep { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_ZIGZAGOON) { HP(1); MaxHP(100); } PLAYER(SPECIES_ZIGZAGOON); @@ -1327,7 +1369,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Waking up after Rest doesn't deactivate sleep { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_ZIGZAGOON) { HP(1); MaxHP(100); } PLAYER(SPECIES_ZIGZAGOON); @@ -1365,7 +1408,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Suppressing and then sleeping Vital Spirit / I PARAMETRIZE { ability = ABILITY_INSOMNIA; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_DELIBIRD) { Ability(ability); } OPPONENT(SPECIES_ZIGZAGOON); @@ -1395,7 +1439,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Mold Breaker Pokémon sleeping Vital Spirit / PARAMETRIZE { ability = ABILITY_INSOMNIA; } GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_PANCHAM) { Ability(ABILITY_MOLD_BREAKER); } OPPONENT(SPECIES_DELIBIRD) { Ability(ability); } OPPONENT(SPECIES_ZIGZAGOON); @@ -1422,7 +1467,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon slept due to Effect Spore befo PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -1449,7 +1495,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon who's partner is slept before { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1476,7 +1523,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: If both Pokémon on one side are Yawn'd at the { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); PLAYER(SPECIES_ZIGZAGOON) { Speed(5); } PLAYER(SPECIES_ZIGZAGOON) { Speed(4); } @@ -1501,7 +1549,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Reflection moves (ie. Magic Coat) fail if slee { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1526,7 +1575,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Reflection moves (ie. Magic Coat) that reflect { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1581,7 +1631,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Magic Bounce'ing a sleep move activates sleep { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); } PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -1634,7 +1685,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep Clause does not prevent sleeping your pa { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1720,7 +1772,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep moves used after being Encore'd are prev { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1749,7 +1802,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Spore'ing opponent after Yawn'ing partner does { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); @@ -1786,7 +1840,8 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Opponent Spore'ing player's partner after part { GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index 3e1ac36af5..689338cce8 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_WILL_O_WISP); + ASSUME(GetMoveEffect(MOVE_WILL_O_WISP) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); } diff --git a/test/battle/status1/poison.c b/test/battle/status1/poison.c index 90d6fa032c..0a749ea96d 100644 --- a/test/battle/status1/poison.c +++ b/test/battle/status1/poison.c @@ -25,7 +25,8 @@ SINGLE_BATTLE_TEST("Poison can't bad poison a poison or steel type") PARAMETRIZE { species = SPECIES_BULBASAUR; } GIVEN { - ASSUME(GetMoveEffect(MOVE_POISON_GAS) == EFFECT_POISON); + ASSUME(GetMoveEffect(MOVE_POISON_GAS) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_GAS) == MOVE_EFFECT_POISON); ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_GAS) == MOVE_EFFECT_POISON); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species);