Remove non-volatile status EFFECTs (#6772)

This commit is contained in:
Eduardo Quezada 2025-05-16 16:52:51 -04:00 committed by GitHub
parent c133da2437
commit edf7c67775
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
43 changed files with 427 additions and 265 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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