Fixed missing move encapsulation in upcoming (#6226)
This commit is contained in:
parent
a8c9857a56
commit
621d2ef83d
@ -760,7 +760,7 @@ void BattleAI_DoAIProcessing_PredictedSwitchin(struct AI_ThinkingStruct *aiThink
|
||||
&& aiThink->score[aiThink->movesetIndex] > 0
|
||||
&& ShouldConsiderMoveForBattler(battlerAtk, battlerDef, aiThink->moveConsidered))
|
||||
{
|
||||
if (IsChaseEffect(gMovesInfo[aiThink->moveConsidered].effect))
|
||||
if (IsChaseEffect(GetMoveEffect(aiThink->moveConsidered)))
|
||||
{
|
||||
// Save new switchin data
|
||||
simulatedDamageSwitchin[aiThink->movesetIndex] = aiData->simulatedDmg[battlerAtk][battlerDef][aiThink->movesetIndex];
|
||||
@ -5398,7 +5398,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
u32 ability = gBattleMons[battlerAtk].ability;
|
||||
u32 opposingHazardFlags = gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_TOXIC_SPIKES);
|
||||
u32 aiHazardFlags = gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_HAZARDS_ANY);
|
||||
u32 moveEffect = gMovesInfo[move].effect;
|
||||
u32 moveEffect = GetMoveEffect(move);
|
||||
struct AiLogicData *aiData = AI_DATA;
|
||||
uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
|
||||
|
||||
@ -5518,9 +5518,9 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
|
||||
// Additional effects
|
||||
for (i = 0; i < gMovesInfo[move].numAdditionalEffects; i++)
|
||||
for (i = 0; i < GetMoveAdditionalEffectCount(move); i++)
|
||||
{
|
||||
switch (gMovesInfo[move].additionalEffects[i].moveEffect)
|
||||
switch (GetMoveAdditionalEffectById(move, i)->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_WRAP:
|
||||
ADJUST_SCORE(-GOOD_EFFECT);
|
||||
|
||||
@ -164,7 +164,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler)
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
playerMove = gBattleMons[opposingBattler].moves[i];
|
||||
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && gMovesInfo[playerMove].effect != EFFECT_FOCUS_PUNCH)
|
||||
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH)
|
||||
{
|
||||
damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected;
|
||||
if (damageTaken > maxDamageTaken)
|
||||
@ -1703,7 +1703,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
playerMove = gBattleMons[opposingBattler].moves[i];
|
||||
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && gMovesInfo[playerMove].effect != EFFECT_FOCUS_PUNCH)
|
||||
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH)
|
||||
{
|
||||
damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST);
|
||||
if (damageTaken > maxDamageTaken)
|
||||
|
||||
@ -3923,7 +3923,7 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
|
||||
void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
{
|
||||
if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && gMovesInfo[GetBestDmgMoveFromBattler(battlerAtk, battlerDef)].effect != EFFECT_FOCUS_PUNCH)
|
||||
if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && GetMoveEffect(GetBestDmgMoveFromBattler(battlerAtk, battlerDef)) != EFFECT_FOCUS_PUNCH)
|
||||
|| AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_SLP || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS)
|
||||
return;
|
||||
|
||||
|
||||
@ -6468,7 +6468,7 @@ static void Cmd_moveend(void)
|
||||
break;
|
||||
}
|
||||
case MOVEEND_RAPID_SPIN:
|
||||
if (gMovesInfo[gCurrentMove].effect == EFFECT_RAPID_SPIN
|
||||
if (GetMoveEffect(gCurrentMove) == EFFECT_RAPID_SPIN
|
||||
&& !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
|
||||
&& IsBattlerTurnDamaged(gBattlerTarget))
|
||||
{
|
||||
@ -6644,7 +6644,7 @@ static void Cmd_moveend(void)
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_HIT_SWITCH_TARGET:
|
||||
if (gMovesInfo[gCurrentMove].effect == EFFECT_HIT_SWITCH_TARGET
|
||||
if (GetMoveEffect(gCurrentMove) == EFFECT_HIT_SWITCH_TARGET
|
||||
&& !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
|
||||
&& IsBattlerTurnDamaged(gBattlerTarget)
|
||||
&& IsBattlerAlive(gBattlerTarget)
|
||||
@ -7088,7 +7088,7 @@ static void Cmd_moveend(void)
|
||||
else // Eject Pack
|
||||
{
|
||||
if (!gDisableStructs[gBattlerTarget].startEmergencyExit
|
||||
&& !(gMovesInfo[gCurrentMove].effect == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker)))
|
||||
&& !(GetMoveEffect(gCurrentMove) == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker)))
|
||||
{
|
||||
effect = TRUE;
|
||||
gBattleStruct->battlerState[battler].usedEjectItem = TRUE;
|
||||
|
||||
@ -934,7 +934,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
|
||||
// Various cases to add/remove points
|
||||
if (GetMoveRecoil(arg2) > 0)
|
||||
baseFromEffect++; // Recoil moves
|
||||
if (gMovesInfo[arg2].effect == EFFECT_RAPID_SPIN)
|
||||
if (GetMoveEffect(arg2) == EFFECT_RAPID_SPIN)
|
||||
baseFromEffect++;
|
||||
if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_SP_ATK_MINUS_2) || MoveHasAdditionalEffect(arg2, MOVE_EFFECT_ATK_DEF_DOWN))
|
||||
baseFromEffect += 2; // Overheat, Superpower, etc.
|
||||
|
||||
@ -8189,8 +8189,8 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
&& gBattlerAttacker != gBattlerTarget
|
||||
&& !IsBattlerAtMaxHp(gBattlerAttacker)
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
&& gMovesInfo[gCurrentMove].effect != EFFECT_FUTURE_SIGHT
|
||||
&& gMovesInfo[gCurrentMove].effect != EFFECT_PAIN_SPLIT
|
||||
&& GetMoveEffect(gCurrentMove) != EFFECT_FUTURE_SIGHT
|
||||
&& GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT
|
||||
&& (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)))
|
||||
{
|
||||
gLastUsedItem = atkItem;
|
||||
|
||||
@ -7,8 +7,8 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Taunt")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_TAUNT].effect == EFFECT_TAUNT);
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].category == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(GetMoveEffect(MOVE_TAUNT) == EFFECT_TAUNT);
|
||||
ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -28,8 +28,8 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Torment")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_TORMENT].effect == EFFECT_TORMENT);
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].category == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(GetMoveEffect(MOVE_TORMENT) == EFFECT_TORMENT);
|
||||
ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -51,8 +51,8 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Encore")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE);
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].category == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE);
|
||||
ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -74,8 +74,8 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DISABLE].effect == EFFECT_DISABLE);
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].category == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(GetMoveEffect(MOVE_DISABLE) == EFFECT_DISABLE);
|
||||
ASSUME(GetMoveCategory(MOVE_HARDEN) == DAMAGE_CATEGORY_STATUS);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -94,7 +94,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable")
|
||||
DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Cursed Body")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_PECK].makesContact);
|
||||
ASSUME(MoveMakesContact(MOVE_PECK));
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_JELLICENT) { Ability(ABILITY_CURSED_BODY); }
|
||||
@ -118,8 +118,8 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Heal Block")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HEAL_BLOCK].effect == EFFECT_HEAL_BLOCK);
|
||||
ASSUME(gMovesInfo[MOVE_RECOVER].effect == EFFECT_RESTORE_HP);
|
||||
ASSUME(GetMoveEffect(MOVE_HEAL_BLOCK) == EFFECT_HEAL_BLOCK);
|
||||
ASSUME(GetMoveEffect(MOVE_RECOVER) == EFFECT_RESTORE_HP);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); HP(1); }
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -139,7 +139,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_ATTRACT].effect == EFFECT_ATTRACT);
|
||||
ASSUME(GetMoveEffect(MOVE_ATTRACT) == EFFECT_ATTRACT);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -156,7 +156,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation")
|
||||
DOUBLE_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Imprison")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_IMPRISON].effect == EFFECT_IMPRISON);
|
||||
ASSUME(GetMoveEffect(MOVE_IMPRISON) == EFFECT_IMPRISON);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_IMPRISON, MOVE_CELEBRATE); }
|
||||
@ -180,7 +180,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil prevents Psychic Noise's effect")
|
||||
PARAMETRIZE { moveTarget = playerLeft; }
|
||||
PARAMETRIZE { moveTarget = playerRight; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_PSYCHIC_NOISE].additionalEffects[0].moveEffect == MOVE_EFFECT_PSYCHIC_NOISE);
|
||||
ASSUME(GetMoveAdditionalEffectById(MOVE_PSYCHIC_NOISE, 0)->moveEffect == MOVE_EFFECT_PSYCHIC_NOISE);
|
||||
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
SINGLE_BATTLE_TEST("Big Pecks prevents Defense stage reduction from moves")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN);
|
||||
ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
|
||||
} WHEN {
|
||||
@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Big Pecks prevents Defense stage reduction from moves")
|
||||
SINGLE_BATTLE_TEST("Big Pecks is ignored by Mold Breaker")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN);
|
||||
ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN);
|
||||
PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
|
||||
OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
|
||||
} WHEN {
|
||||
@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Defense stage reduction from moves
|
||||
SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Topsy-Turvy")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].effect == EFFECT_DEFENSE_UP);
|
||||
ASSUME(gMovesInfo[MOVE_TOPSY_TURVY].effect == EFFECT_TOPSY_TURVY);
|
||||
ASSUME(GetMoveEffect(MOVE_HARDEN) == EFFECT_DEFENSE_UP);
|
||||
ASSUME(GetMoveEffect(MOVE_TOPSY_TURVY) == EFFECT_TOPSY_TURVY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
|
||||
} WHEN {
|
||||
@ -75,9 +75,9 @@ SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Topsy-Turvy")
|
||||
SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Spectral Thief from resetting positive Defense stage changes")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].effect == EFFECT_DEFENSE_UP);
|
||||
ASSUME(GetMoveEffect(MOVE_HARDEN) == EFFECT_DEFENSE_UP);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF));
|
||||
ASSUME(gMovesInfo[MOVE_SOAK].effect == EFFECT_SOAK);
|
||||
ASSUME(GetMoveEffect(MOVE_SOAK) == EFFECT_SOAK);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
|
||||
} WHEN {
|
||||
@ -96,8 +96,8 @@ SINGLE_BATTLE_TEST("Big Pecks doesn't prevent Spectral Thief from resetting posi
|
||||
SINGLE_BATTLE_TEST("Big Pecks doesn't prevent receiving negative Defense stage changes from Baton Pass")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN);
|
||||
ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS);
|
||||
ASSUME(GetMoveEffect(MOVE_LEER) == EFFECT_DEFENSE_DOWN);
|
||||
ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
|
||||
|
||||
@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon")
|
||||
SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
||||
PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight")
|
||||
SINGLE_BATTLE_TEST("Innards Out doesn't trigger if Future Sight user is not on field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
||||
PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Innards Out doesn't trigger if Future Sight user is not on f
|
||||
SINGLE_BATTLE_TEST("Innards Out triggers if Future Sight user is back on the field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
||||
PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
|
||||
@ -75,7 +75,7 @@ DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to ta
|
||||
DOUBLE_BATTLE_TEST("Lightning Rod redirects an ally's attack")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC);
|
||||
ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); }
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_HYPER_VOICE].type == TYPE_NORMAL);
|
||||
ASSUME(gMovesInfo[MOVE_HYPER_VOICE].power > 0);
|
||||
ASSUME(GetMoveType(MOVE_HYPER_VOICE) == TYPE_NORMAL);
|
||||
ASSUME(GetMovePower(MOVE_HYPER_VOICE) > 0);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Liquid voice turns a sound move into a Water-type move")
|
||||
|
||||
@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Shield Dust does not block self-targeting effects, primary o
|
||||
PARAMETRIZE { move = MOVE_METEOR_ASSAULT; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN);
|
||||
ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE);
|
||||
|
||||
@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Snow Cloak increases evasion during snow")
|
||||
{
|
||||
PASSES_RANDOMLY(4, 5, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_POUND].accuracy == 100);
|
||||
ASSUME(GetMoveAccuracy(MOVE_POUND) == 100);
|
||||
PLAYER(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Unnerve doesn't prevent opposing Pokémon from using Natural
|
||||
PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; }
|
||||
PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT);
|
||||
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
|
||||
PLAYER(mon) { Ability(ability); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }
|
||||
} WHEN {
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
SINGLE_BATTLE_TEST("Water Compaction raises Defense 2 stages when hit by a water type move")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER);
|
||||
ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER);
|
||||
PLAYER(SPECIES_SANDYGAST) { Ability(ABILITY_WATER_COMPACTION); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -20,8 +20,8 @@ SINGLE_BATTLE_TEST("Water Compaction raises Defense 2 stages when hit by a water
|
||||
SINGLE_BATTLE_TEST("Water Compaction raises Defense 2 stages on each hit of a multi-hit Water type move")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_SURGING_STRIKES].type == TYPE_WATER);
|
||||
ASSUME(gMovesInfo[MOVE_SURGING_STRIKES].strikeCount == 3);
|
||||
ASSUME(GetMoveType(MOVE_SURGING_STRIKES) == TYPE_WATER);
|
||||
ASSUME(GetMoveStrikeCount(MOVE_SURGING_STRIKES) == 3);
|
||||
PLAYER(SPECIES_SANDYGAST) { Ability(ABILITY_WATER_COMPACTION); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Water Compaction does not affect damage taken from Water typ
|
||||
PARAMETRIZE { ability = ABILITY_SAND_VEIL; }
|
||||
PARAMETRIZE { ability = ABILITY_WATER_COMPACTION; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER);
|
||||
ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER);
|
||||
PLAYER(SPECIES_SANDYGAST) { Ability(ability); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -975,7 +975,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch out if Yawn'd wi
|
||||
PARAMETRIZE{ aceFlag = 0; }
|
||||
PARAMETRIZE{ aceFlag = AI_FLAG_ACE_POKEMON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
|
||||
ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | aceFlag | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_SMART_SWITCHING);
|
||||
PLAYER(SPECIES_SLOWKING) { Moves(MOVE_YAWN, MOVE_CONFUSION, MOVE_POWER_GEM, MOVE_WATER_PULSE); Item(ITEM_LEFTOVERS); }
|
||||
OPPONENT(SPECIES_SCOLIPEDE) { Moves(MOVE_POISON_TAIL); }
|
||||
|
||||
@ -192,7 +192,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to dyna
|
||||
PARAMETRIZE { tera = GIMMICK_NONE; }
|
||||
PARAMETRIZE { tera = GIMMICK_TERA; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_WATER_SPOUT].effect == EFFECT_POWER_BASED_ON_USER_HP);
|
||||
ASSUME(GetMoveEffect(MOVE_WATER_SPOUT) == EFFECT_POWER_BASED_ON_USER_HP);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); TeraType(TYPE_WATER); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block self-targeting effects, primary
|
||||
PARAMETRIZE { move = MOVE_METEOR_ASSAULT; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN);
|
||||
ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE);
|
||||
|
||||
@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP of damage dealt")
|
||||
SINGLE_BATTLE_TEST("Shell Bell doesn't restore HP for damage dealt by a foreseen move")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Level(16); };
|
||||
} WHEN {
|
||||
|
||||
@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Charge will not expire if it flinches twice in a row")
|
||||
{
|
||||
s16 damage[2];
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_IRON_HEAD].additionalEffects[0].moveEffect == MOVE_EFFECT_FLINCH);
|
||||
ASSUME(GetMoveAdditionalEffectById(MOVE_IRON_HEAD, 0)->moveEffect == MOVE_EFFECT_FLINCH);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
|
||||
} WHEN {
|
||||
|
||||
@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Electrify makes the target's move Electric-type for the rema
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND);
|
||||
ASSUME(gMovesInfo[MOVE_TACKLE].type != TYPE_ELECTRIC);
|
||||
ASSUME(GetMoveType(MOVE_TACKLE) != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_SANDSLASH);
|
||||
} WHEN {
|
||||
@ -21,7 +21,7 @@ DOUBLE_BATTLE_TEST("Electrify makes the target's move Electric-type for the rema
|
||||
KNOWN_FAILING;
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND);
|
||||
ASSUME(gMovesInfo[MOVE_TACKLE].type != TYPE_ELECTRIC);
|
||||
ASSUME(GetMoveType(MOVE_TACKLE) != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_SANDSLASH);
|
||||
@ -41,8 +41,8 @@ SINGLE_BATTLE_TEST("Electrify can change status moves to Electric-type")
|
||||
KNOWN_FAILING;
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND);
|
||||
ASSUME(gMovesInfo[MOVE_LEER].category == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_LEER].type != TYPE_ELECTRIC);
|
||||
ASSUME(GetMoveCategory(MOVE_LEER) == DAMAGE_CATEGORY_STATUS);
|
||||
ASSUME(GetMoveType(MOVE_LEER) != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_SANDSLASH);
|
||||
} WHEN {
|
||||
@ -58,8 +58,8 @@ SINGLE_BATTLE_TEST("Electrify changes the type of foreseen moves")
|
||||
KNOWN_FAILING;
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_SANDSLASH].types[1] == TYPE_GROUND);
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].effect == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(gMovesInfo[MOVE_FUTURE_SIGHT].type != TYPE_ELECTRIC);
|
||||
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
||||
ASSUME(GetMoveType(MOVE_FUTURE_SIGHT) != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_SANDSLASH);
|
||||
} WHEN {
|
||||
|
||||
@ -6,14 +6,14 @@
|
||||
/*
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_X].effect == EFFECT_EVASION_UP_2);
|
||||
ASSUME(GetMoveEffect(MOVE_X) == EFFECT_EVASION_UP_2);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Team raises Evasion by 1 stage")
|
||||
{
|
||||
PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 5, 100, RNG_ACCURACY);
|
||||
PASSES_RANDOMLY(GetMoveAccuracy(MOVE_SCRATCH) * 3 / 5, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100);
|
||||
ASSUME(GetMoveAccuracy(MOVE_SCRATCH) == 100);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -1,19 +1,13 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_RAPID_SPIN].effect == EFFECT_RAPID_SPIN);
|
||||
ASSUME(gMovesInfo[MOVE_MORTAL_SPIN].effect == EFFECT_RAPID_SPIN);
|
||||
#if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE);
|
||||
#endif
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_MORTAL_SPIN, MOVE_EFFECT_POISON) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Rapid Spin activates after Toxic Debris")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN);
|
||||
#if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE);
|
||||
#endif
|
||||
PLAYER(SPECIES_GLIMMORA) { Ability(ABILITY_TOXIC_DEBRIS); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -29,6 +23,10 @@ SINGLE_BATTLE_TEST("Rapid Spin activates after Toxic Debris")
|
||||
SINGLE_BATTLE_TEST("Rapid Spin blows away Wrap, hazards and raises Speed (Gen 8+)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_RAPID_SPIN) == EFFECT_RAPID_SPIN);
|
||||
#if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_SPD_PLUS_1) == TRUE);
|
||||
#endif
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -49,6 +47,8 @@ SINGLE_BATTLE_TEST("Rapid Spin blows away Wrap, hazards and raises Speed (Gen 8+
|
||||
SINGLE_BATTLE_TEST("Rapid Spin: Mortal Spin blows away Wrap, hazards and poisons foe")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_MORTAL_SPIN) == EFFECT_RAPID_SPIN);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_MORTAL_SPIN, MOVE_EFFECT_POISON) == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Last Half Hp")
|
||||
{
|
||||
gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_LAST_HALF_HP;
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG);
|
||||
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_SUPER_FANG);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user