198 lines
5.9 KiB
C
198 lines
5.9 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
#include "mail.h"
|
|
|
|
SINGLE_BATTLE_TEST("Trick swaps held items")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_LUM_BERRY);
|
|
EXPECT(opponent->item == ITEM_SITRUS_BERRY);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick succeeds if only the user has an item")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_NONE);
|
|
EXPECT(opponent->item == ITEM_SITRUS_BERRY);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick succeeds if only the target has an item")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_LUM_BERRY);
|
|
EXPECT(opponent->item == ITEM_NONE);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if both battlers have no held item")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_NONE);
|
|
EXPECT(opponent->item == ITEM_NONE);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if either item is Mail")
|
|
{
|
|
u16 atkItem = ITEM_NONE, defItem = ITEM_NONE;
|
|
|
|
ASSUME(ItemIsMail(ITEM_ORANGE_MAIL));
|
|
PARAMETRIZE { atkItem = ITEM_ORANGE_MAIL; defItem = ITEM_NONE; }
|
|
PARAMETRIZE { atkItem = ITEM_ORAN_BERRY; defItem = ITEM_ORANGE_MAIL; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(atkItem); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(defItem); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == atkItem);
|
|
EXPECT(opponent->item == defItem);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if either item is a Z-Crystal")
|
|
{
|
|
u16 atkItem = ITEM_NONE, defItem = ITEM_NONE;
|
|
|
|
ASSUME(GetItemHoldEffect(ITEM_FIGHTINIUM_Z) == HOLD_EFFECT_Z_CRYSTAL);
|
|
PARAMETRIZE { atkItem = ITEM_FIGHTINIUM_Z; defItem = ITEM_NONE; }
|
|
PARAMETRIZE { atkItem = ITEM_SITRUS_BERRY; defItem = ITEM_FIGHTINIUM_Z; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(atkItem); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(defItem); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == atkItem);
|
|
EXPECT(opponent->item == defItem);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if either battler holds a Mega Stone")
|
|
{
|
|
u16 atkItem = ITEM_NONE, defItem = ITEM_NONE;
|
|
u16 atkSpecies = SPECIES_WOBBUFFET, defSpecies = SPECIES_WOBBUFFET;
|
|
|
|
PARAMETRIZE { atkSpecies = SPECIES_BLAZIKEN; atkItem = ITEM_BLAZIKENITE; defSpecies = SPECIES_WOBBUFFET; defItem = ITEM_SITRUS_BERRY; }
|
|
PARAMETRIZE { atkSpecies = SPECIES_WOBBUFFET; atkItem = ITEM_SITRUS_BERRY; defSpecies = SPECIES_BLAZIKEN; defItem = ITEM_BLAZIKENITE; }
|
|
|
|
GIVEN {
|
|
PLAYER(atkSpecies) { Item(atkItem); }
|
|
OPPONENT(defSpecies) { Item(defItem); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == atkItem);
|
|
EXPECT(opponent->item == defItem);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if an item changes the holder's form")
|
|
{
|
|
u16 atkItem = ITEM_NONE, defItem = ITEM_NONE;
|
|
|
|
PARAMETRIZE { atkItem = ITEM_GRISEOUS_CORE; defItem = ITEM_SITRUS_BERRY; }
|
|
PARAMETRIZE { atkItem = ITEM_SITRUS_BERRY; defItem = ITEM_GRISEOUS_CORE; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_GIRATINA_ORIGIN) { Item(atkItem); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(defItem); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == atkItem);
|
|
EXPECT(opponent->item == defItem);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick doesn't fail if the user has Sticky Hold")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_SITRUS_BERRY); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, player);
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_LUM_BERRY);
|
|
EXPECT(opponent->item == ITEM_SITRUS_BERRY);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails against Sticky Hold")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_LUM_BERRY); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("The opposing Wobbuffet's Sticky Hold made Trick ineffective!");
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_SITRUS_BERRY);
|
|
EXPECT(opponent->item == ITEM_LUM_BERRY);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick fails if the target is behind a Substitute")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); Speed(50); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Speed(100); }
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TRICK); }
|
|
} SCENE {
|
|
MESSAGE("But it failed!");
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_SITRUS_BERRY);
|
|
EXPECT(opponent->item == ITEM_LUM_BERRY);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Trick can be used against targets with an active form change that doesn't require items")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_XERNEAS);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_TRICK); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent);
|
|
}
|
|
}
|