175 lines
6.2 KiB
C

#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_TRANSFORM) == EFFECT_TRANSFORM);
}
SINGLE_BATTLE_TEST("Transform fails on semi-invulnerable target in Gen2+")
{
u32 genConfig;
bool32 expectFail;
PARAMETRIZE { genConfig = GEN_1; expectFail = FALSE; }
PARAMETRIZE { genConfig = GEN_2; expectFail = TRUE; }
GIVEN {
WITH_CONFIG(B_TRANSFORM_SEMI_INV_FAIL, genConfig);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_DIG); }
OPPONENT(SPECIES_DITTO) { Speed(10); Moves(MOVE_TRANSFORM); }
} WHEN {
TURN { MOVE(player, MOVE_DIG); MOVE(opponent, MOVE_TRANSFORM); }
} SCENE {
if (expectFail)
MESSAGE("But it failed!");
else
MESSAGE("The opposing Ditto transformed into Wobbuffet!");
}
}
SINGLE_BATTLE_TEST("Transform fails on transformed target in Gen2+")
{
u32 genConfig;
bool32 expectFail;
PARAMETRIZE { genConfig = GEN_1; expectFail = FALSE; }
PARAMETRIZE { genConfig = GEN_2; expectFail = TRUE; }
GIVEN {
WITH_CONFIG(B_TRANSFORM_TARGET_FAIL, genConfig);
PLAYER(SPECIES_DITTO) { Speed(50); Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(player, MOVE_TRANSFORM); MOVE(opponent, MOVE_CELEBRATE); }
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRANSFORM); }
} SCENE {
MESSAGE("Ditto transformed into Wobbuffet!");
if (expectFail)
MESSAGE("But it failed!");
else
MESSAGE("The opposing Wobbuffet transformed into Wobbuffet!");
}
}
SINGLE_BATTLE_TEST("Transform fails when the user is already transformed in Gen5+")
{
u32 genConfig;
bool32 expectFail;
PARAMETRIZE { genConfig = GEN_4; expectFail = FALSE; }
PARAMETRIZE { genConfig = GEN_5; expectFail = TRUE; }
GIVEN {
WITH_CONFIG(B_TRANSFORM_USER_FAIL, genConfig);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); }
OPPONENT(SPECIES_DITTO) { Speed(10); Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRANSFORM); }
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRANSFORM); }
} SCENE {
MESSAGE("The opposing Ditto transformed into Wobbuffet!");
if (expectFail)
MESSAGE("But it failed!");
else
MESSAGE("The opposing Ditto transformed into Wobbuffet!");
}
}
SINGLE_BATTLE_TEST("Transform fails on target behind substitute in Gen5+")
{
u32 genConfig;
bool32 expectFail;
PARAMETRIZE { genConfig = GEN_4; expectFail = FALSE; }
PARAMETRIZE { genConfig = GEN_5; expectFail = TRUE; }
GIVEN {
WITH_CONFIG(B_TRANSFORM_SUBSTITUTE_FAIL, genConfig);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_SUBSTITUTE); }
OPPONENT(SPECIES_DITTO) { Speed(10); Moves(MOVE_TRANSFORM); }
} WHEN {
TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_TRANSFORM); }
} SCENE {
if (expectFail)
MESSAGE("But it failed!");
else
MESSAGE("The opposing Ditto transformed into Wobbuffet!");
}
}
SINGLE_BATTLE_TEST("Transformed Pokemon cannot change forms in Gen5+")
{
u32 genConfig;
bool32 expectFormChange;
PARAMETRIZE { genConfig = GEN_4; expectFormChange = TRUE; }
PARAMETRIZE { genConfig = GEN_5; expectFormChange = FALSE; }
GIVEN {
WITH_CONFIG(B_TRANSFORM_FORM_CHANGES, genConfig);
PLAYER(SPECIES_AEGISLASH) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); }
OPPONENT(SPECIES_DITTO) { Moves(MOVE_TACKLE, MOVE_TRANSFORM); }
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRANSFORM); }
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); }
} SCENE {
if (expectFormChange) {
ABILITY_POPUP(opponent, ABILITY_STANCE_CHANGE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponent);
} else {
NONE_OF {
ABILITY_POPUP(opponent, ABILITY_STANCE_CHANGE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponent);
}
}
} THEN {
if (expectFormChange)
EXPECT_EQ(opponent->species, SPECIES_AEGISLASH_BLADE);
else
EXPECT_EQ(opponent->species, SPECIES_AEGISLASH);
}
}
SINGLE_BATTLE_TEST("(TERA) Transform does not copy the target's Tera Type, and if the user is Terastallized it keeps its own Tera Type")
{
u32 playerDoTera;
PARAMETRIZE { playerDoTera = GIMMICK_TERA; }
PARAMETRIZE { playerDoTera = GIMMICK_NONE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_EARTHQUAKE); TeraType(TYPE_GHOST); }
OPPONENT(SPECIES_DITTO) { TeraType(TYPE_FLYING); }
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: playerDoTera); MOVE(opponent, MOVE_TRANSFORM); }
TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, moveSlot: 0); }
TURN { MOVE(player, MOVE_EARTHQUAKE); MOVE(opponent, moveSlot: 0, gimmick: GIMMICK_TERA); }
} SCENE {
// turn 1
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent);
// turn 2
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
// turn 3
MESSAGE("Wobbuffet used Earthquake!");
MESSAGE("It doesn't affect the opposing Ditto…");
NOT { HP_BAR(opponent); }
}
}
SINGLE_BATTLE_TEST("Transform returns the user to normal at the end of the battle after fainting")
{
GIVEN {
PLAYER(SPECIES_DITTO) { HP(1); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_PIDGEOT) { Item(ITEM_PIDGEOTITE); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(player, MOVE_TRANSFORM); }
TURN { MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); }
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_DITTO);
}
}
TO_DO_BATTLE_TEST("TODO: Write Transform (Move Effect) test titles")