From 9ec16f4eb63b02261e8de6bd1ff9509709937724 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:08:21 -0400 Subject: [PATCH] Clear Body tests include Full Metal Body and White Smoke (#4797) --- test/battle/ability/clear_body.c | 276 +++++++++++++++++++------- test/battle/ability/full_metal_body.c | 38 ---- test/battle/ability/white_smoke.c | 39 ---- 3 files changed, 206 insertions(+), 147 deletions(-) delete mode 100644 test/battle/ability/full_metal_body.c delete mode 100644 test/battle/ability/white_smoke.c diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 1117bac3d3..5dd4eff5db 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -1,15 +1,19 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Clear Body prevents intimidate") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimidate") { s16 turnOneHit; s16 turnTwoHit; + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }; + OPPONENT(species) { Ability(ability); }; } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } @@ -20,24 +24,38 @@ SINGLE_BATTLE_TEST("Clear Body prevents intimidate") NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); } } -SINGLE_BATTLE_TEST("Clear Body prevents stat stage reduction from moves") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent stat stage reduction from moves") { - u16 move; - PARAMETRIZE{ move = MOVE_GROWL; } - PARAMETRIZE{ move = MOVE_LEER; } - PARAMETRIZE{ move = MOVE_CONFIDE; } - PARAMETRIZE{ move = MOVE_FAKE_TEARS; } - PARAMETRIZE{ move = MOVE_SCARY_FACE; } - PARAMETRIZE{ move = MOVE_SWEET_SCENT; } - PARAMETRIZE{ move = MOVE_SAND_ATTACK; } + u16 move = MOVE_NONE; + u32 j, species = SPECIES_NONE, ability = ABILITY_NONE; + static const u16 statReductionMoves[] = { + MOVE_GROWL, + MOVE_LEER, + MOVE_CONFIDE, + MOVE_FAKE_TEARS, + MOVE_SCARY_FACE, + MOVE_SWEET_SCENT, + MOVE_SAND_ATTACK, + }; + for (j = 0; j < ARRAY_COUNT(statReductionMoves); j++) + { + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; move = statReductionMoves[j]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; move = statReductionMoves[j]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; move = statReductionMoves[j]; } + } GIVEN { ASSUME(gMovesInfo[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); @@ -48,7 +66,7 @@ SINGLE_BATTLE_TEST("Clear Body prevents stat stage reduction from moves") ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, move); } } SCENE { @@ -56,18 +74,27 @@ SINGLE_BATTLE_TEST("Clear Body prevents stat stage reduction from moves") ANIMATION(ANIM_TYPE_MOVE, move, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); } } -SINGLE_BATTLE_TEST("Clear Body prevents Sticky Web") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent Sticky Web effect on switchin") { + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { ASSUME(gMovesInfo[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); PLAYER(SPECIES_WOBBUFFET) OPPONENT(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_STICKY_WEB); } TURN { SWITCH(opponent, 1); } @@ -75,32 +102,43 @@ SINGLE_BATTLE_TEST("Clear Body prevents Sticky Web") NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent stat stage reduction from moves used by the user") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent stat stage reduction from moves used by the user") { + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { ASSUME(MoveHasAdditionalEffectSelf(MOVE_SUPERPOWER, MOVE_EFFECT_ATK_DEF_DOWN) == TRUE); PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(opponent, MOVE_SUPERPOWER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); NONE_OF { - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); } } } -SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body") +SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body and White Smoke, but not Full Metal Body") { - u32 j, k; - u16 ability = ABILITY_NONE; + u32 j, k, species = SPECIES_NONE, ability = ABILITY_NONE; + u16 breakerAbility = ABILITY_NONE; u16 move = ABILITY_NONE; static const u16 breakerAbilities[] = { ABILITY_MOLD_BREAKER, @@ -121,7 +159,9 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body") { for (k = 0; k < ARRAY_COUNT(breakerAbilities); k++) { - PARAMETRIZE{ move = statReductionMoves[j]; ability = breakerAbilities[k]; } + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } } } @@ -133,146 +173,242 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body") ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); - PLAYER(SPECIES_WOBBUFFET) { Ability(ability); } - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(breakerAbility); } + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, move); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, move, player); - NONE_OF { - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + if (ability == ABILITY_FULL_METAL_BODY){ // Full Metal Body can't be ignored by breaker abilities + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + } + else{ + ANIMATION(ANIM_TYPE_MOVE, move, player); + NONE_OF { + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + } } } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent Speed reduction from Iron Ball") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Speed reduction from Iron Ball") { - u16 heldItem; - PARAMETRIZE{ heldItem = ITEM_NONE; } - PARAMETRIZE{ heldItem = ITEM_IRON_BALL; } + u32 j, species = SPECIES_NONE, ability = ABILITY_NONE; + u16 heldItem = ITEM_NONE; + static const u16 heldItems[] = { + ITEM_NONE, + ITEM_IRON_BALL, + }; + for (j = 0; j < ARRAY_COUNT(heldItems); j++) + { + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; heldItem = heldItems[j]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; heldItem = heldItems[j]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; heldItem = heldItems[j]; } + } GIVEN { ASSUME(gItemsInfo[ITEM_IRON_BALL].holdEffect == HOLD_EFFECT_IRON_BALL); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } - OPPONENT(SPECIES_BELDUM) { Speed(6); Ability(ABILITY_CLEAR_BODY); Item(heldItem); } + OPPONENT(species) { Speed(6); Ability(ability); Item(heldItem); } } WHEN { TURN { } } SCENE { - NOT ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + NOT ABILITY_POPUP(opponent, ability); if (heldItem == ITEM_IRON_BALL) { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Beldum used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); } else { - MESSAGE("Foe Beldum used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent Speed reduction from paralysis") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Speed reduction from paralysis") { + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(4); } - OPPONENT(SPECIES_BELDUM) { Speed(6); Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Speed(6); Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_THUNDER_WAVE); } TURN { MOVE(player, MOVE_THUNDER_WAVE); } } SCENE { - MESSAGE("Foe Beldum used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); MESSAGE("Wobbuffet used Thunder Wave!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); - NOT ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Thunder Wave!"); ONE_OF { - MESSAGE("Foe Beldum used Celebrate!"); - MESSAGE("Foe Beldum is paralyzed! It can't move!"); + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Foe Metang is paralyzed! It can't move!"); + MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("Foe Solgaleo is paralyzed! It can't move!"); + MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("Foe Torkoal is paralyzed! It can't move!"); } } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent Attack reduction from burn", s16 damage) +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Attack reduction from burn", s16 damage) { - bool32 burned; - PARAMETRIZE{ burned = FALSE; } - PARAMETRIZE{ burned = TRUE; } + bool32 burned = FALSE; + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; burned = TRUE; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; burned = TRUE; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; burned = TRUE; } GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); if (burned) Status1(STATUS1_BURN); } + OPPONENT(species) { Ability(ability); if (burned) Status1(STATUS1_BURN); } } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - NOT ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + NOT ABILITY_POPUP(opponent, ability); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent receiving negative stat changes from Baton Pass") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent receiving negative stat changes from Baton Pass") { + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } - OPPONENT(SPECIES_BELDUM) { Speed(6); Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Speed(6); Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_SCARY_FACE); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_SCARY_FACE); } } SCENE { MESSAGE("Wobbuffet used Scary Face!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum used Celebrate!"); + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent Topsy-Turvy") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Topsy-Turvy") { + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { ASSUME(gMovesInfo[MOVE_TOPSY_TURVY].effect == EFFECT_TOPSY_TURVY); ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } - OPPONENT(SPECIES_BELDUM) { Speed(6); Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Speed(6); Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_SCARY_FACE); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TOPSY_TURVY); } TURN { MOVE(player, MOVE_SCARY_FACE); } } SCENE { MESSAGE("Wobbuffet used Topsy-Turvy!"); - NOT ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + NOT ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); - MESSAGE("Foe Beldum used Celebrate!"); - MESSAGE("Foe Beldum used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) { + MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("Foe Solgaleo used Celebrate!"); + } + else if (ability == ABILITY_WHITE_SMOKE) { + MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("Foe Torkoal used Celebrate!"); + } + else { + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Foe Metang used Celebrate!"); + } MESSAGE("Wobbuffet used Scary Face!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + ABILITY_POPUP(opponent, ability); } } -SINGLE_BATTLE_TEST("Clear Body doesn't prevent Spectral Thief from resetting positive stat changes") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Spectral Thief from resetting positive stat changes") { + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF) == TRUE); ASSUME(gMovesInfo[MOVE_AGILITY].effect == EFFECT_SPEED_UP_2); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } - OPPONENT(SPECIES_METANG) { Speed(5); Ability(ABILITY_CLEAR_BODY); } + OPPONENT(species) { Speed(5); Ability(ability); } } WHEN { TURN{ MOVE(opponent, MOVE_AGILITY); } TURN{ MOVE(player, MOVE_SPECTRAL_THIEF); } TURN{ } } SCENE { - MESSAGE("Foe Metang used Agility!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Agility!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Agility!"); + else + MESSAGE("Foe Metang used Agility!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_AGILITY, opponent); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Metang used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); MESSAGE("Wobbuffet used SpectrlThief!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); - NOT ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Metang used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); } } diff --git a/test/battle/ability/full_metal_body.c b/test/battle/ability/full_metal_body.c deleted file mode 100644 index d00714d524..0000000000 --- a/test/battle/ability/full_metal_body.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -SINGLE_BATTLE_TEST("Full Metal Body prevents intimidate") -{ - s16 turnOneHit; - s16 turnTwoHit; - - GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_SOLGALEO) { Ability(ABILITY_FULL_METAL_BODY); }; - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } - - } SCENE { - HP_BAR(player, captureDamage: &turnOneHit); - ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - HP_BAR(player, captureDamage: &turnTwoHit); - } THEN { - EXPECT_EQ(turnOneHit, turnTwoHit); - } -} - -TO_DO_BATTLE_TEST("Full Metal Body prevents stat stage reduction from moves"); // Growl, Leer, Confide, Fake Tears, Scary Face, Sweet Scent, Sand Attack (Attack, Defense, Sp. Attack, Sp. Defense, Speed, Evasion, Accuracy -TO_DO_BATTLE_TEST("Full Metal Body prevents Sticky Web"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent stat stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Speed reduction from Iron Ball"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Speed reduction from paralysis"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent receiving negative stat changes from Baton Pass"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Spectral Thief from resetting positive stat changes"); -TO_DO_BATTLE_TEST("Full Metal Body is ignored by Mold Breaker"); diff --git a/test/battle/ability/white_smoke.c b/test/battle/ability/white_smoke.c deleted file mode 100644 index 7bedbca242..0000000000 --- a/test/battle/ability/white_smoke.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -SINGLE_BATTLE_TEST("White Smoke prevents intimidate") -{ - s16 turnOneHit; - s16 turnTwoHit; - - GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_WHITE_SMOKE); }; - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } - - } SCENE { - HP_BAR(player, captureDamage: &turnOneHit); - ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - HP_BAR(player, captureDamage: &turnTwoHit); - } THEN { - EXPECT_EQ(turnOneHit, turnTwoHit); - } -} - - -TO_DO_BATTLE_TEST("White Smoke prevents stat stage reduction from moves"); // Growl, Leer, Confide, Fake Tears, Scary Face, Sweet Scent, Sand Attack (Attack, Defense, Sp. Attack, Sp. Defense, Speed, Evasion, Accuracy -TO_DO_BATTLE_TEST("White Smoke prevents Sticky Web"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent stat stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Speed reduction from Iron Ball"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Speed reduction from paralysis"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent receiving negative stat changes from Baton Pass"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Spectral Thief from resetting positive stat changes"); -TO_DO_BATTLE_TEST("White Smoke is ignored by Mold Breaker");