166 lines
6.4 KiB
C
166 lines
6.4 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(GetMoveEffect(MOVE_TOXIC_THREAD) == EFFECT_TOXIC_THREAD);
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread both reduces speed and inflicts Poison")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
|
STATUS_ICON(opponent, poison: TRUE);
|
|
} THEN {
|
|
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread still inflicts Poison if speed can't go lower")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_SCARY_FACE) == EFFECT_SPEED_DOWN_2);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
|
STATUS_ICON(opponent, poison: TRUE);
|
|
} THEN {
|
|
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 6);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread still inflicts Poison if speed can't be lowered")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_REGICE) { Ability(ABILITY_CLEAR_BODY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
|
STATUS_ICON(opponent, poison: TRUE);
|
|
} THEN {
|
|
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread still lowers speed if the target can't be Poisoned")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gSpeciesInfo[SPECIES_BRONZOR].types[0] == TYPE_STEEL || gSpeciesInfo[SPECIES_BRONZOR].types[1] == TYPE_STEEL);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_BRONZOR);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
|
} THEN {
|
|
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread still lowers speed if the target is already Poisoned")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_POISON_POWDER); }
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player);
|
|
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
|
STATUS_ICON(opponent, poison: TRUE);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
} THEN {
|
|
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread fails if speed can't be lowered and status can't be inflicted")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_POISON_POWDER); }
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread fails if speed can't be lowered due to Clear Body and status can't be inflicted")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_REGICE) { Ability(ABILITY_CLEAR_BODY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_POISON_POWDER); }
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Toxic Thread fails if speed can't be lowered and target is a poison type")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(GetMoveNonVolatileStatus(MOVE_POISON_POWDER) == MOVE_EFFECT_POISON);
|
|
ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_POISON || gSpeciesInfo[SPECIES_ODDISH].types[1] == TYPE_POISON);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_ODDISH);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_SCARY_FACE); }
|
|
TURN { MOVE(player, MOVE_TOXIC_THREAD); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_THREAD, player);
|
|
}
|
|
}
|