70224f0ea3
Co-authored-by: Pawkkie <61265402+Pawkkie@users.noreply.github.com>
236 lines
9.9 KiB
C
236 lines
9.9 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(gItemsInfo[ITEM_BOOSTER_ENERGY].holdEffect == HOLD_EFFECT_BOOSTER_ENERGY);
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy will activate Quark Drive after Electric Terrain ends")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_IRON_MOTH) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); };
|
|
} WHEN {
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
} SCENE {
|
|
ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!");
|
|
MESSAGE("Iron Moth's Sp. Atk was heightened!");
|
|
}
|
|
ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
|
|
MESSAGE("The Electric Terrain activated Iron Moth's Quark Drive!");
|
|
MESSAGE("Iron Moth's Sp. Atk was heightened!");
|
|
MESSAGE("The electricity disappeared from the battlefield.");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
|
|
MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!");
|
|
MESSAGE("Iron Moth's Sp. Atk was heightened!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy will activate Protosynthesis after harsh sunlight ends")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_RAGING_BOLT) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); };
|
|
} WHEN {
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
TURN {}
|
|
} SCENE {
|
|
ABILITY_POPUP(opponent, ABILITY_DROUGHT);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
|
|
MESSAGE("Raging Bolt's Sp. Atk was heightened!");
|
|
}
|
|
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
|
|
MESSAGE("The harsh sunlight activated Raging Bolt's Protosynthesis!");
|
|
MESSAGE("Raging Bolt's Sp. Atk was heightened!");
|
|
MESSAGE("The sunlight faded.");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
|
|
MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
|
|
MESSAGE("Raging Bolt's Sp. Atk was heightened!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy activates Protosynthesis and increases highest stat")
|
|
{
|
|
u32 attack, defense, speed, spAttack, spDefense;
|
|
|
|
PARAMETRIZE { attack = 110; defense = 100; speed = 100; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 110; speed = 100; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 110; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 110; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 100; spDefense = 110; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_RAGING_BOLT) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
|
|
} WHEN {
|
|
TURN { }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
|
|
MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
|
|
if (attack == 110)
|
|
MESSAGE("Raging Bolt's Attack was heightened!");
|
|
else if (defense == 110)
|
|
MESSAGE("Raging Bolt's Defense was heightened!");
|
|
else if (speed == 110)
|
|
MESSAGE("Raging Bolt's Speed was heightened!");
|
|
else if (spAttack == 110)
|
|
MESSAGE("Raging Bolt's Sp. Atk was heightened!");
|
|
else if (spDefense == 110)
|
|
MESSAGE("Raging Bolt's Sp. Def was heightened!");
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_NONE);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy activates Quark Drive and increases highest stat")
|
|
{
|
|
u32 attack, defense, speed, spAttack, spDefense;
|
|
|
|
PARAMETRIZE { attack = 110; defense = 100; speed = 100; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 110; speed = 100; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 110; spAttack = 100; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 110; spDefense = 100; }
|
|
PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 100; spDefense = 110; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_IRON_MOTH) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
|
|
} WHEN {
|
|
TURN { }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
if (attack == 110)
|
|
MESSAGE("Iron Moth's Attack was heightened!");
|
|
else if (defense == 110)
|
|
MESSAGE("Iron Moth's Defense was heightened!");
|
|
else if (speed == 110)
|
|
MESSAGE("Iron Moth's Speed was heightened!");
|
|
else if (spAttack == 110)
|
|
MESSAGE("Iron Moth's Sp. Atk was heightened!");
|
|
else if (spDefense == 110)
|
|
MESSAGE("Iron Moth's Sp. Def was heightened!");
|
|
} THEN {
|
|
EXPECT(player->item == ITEM_NONE);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy increases special attack by 30% if it is the highest stat", s16 damage)
|
|
{
|
|
u32 species;
|
|
u32 ability;
|
|
u32 item;
|
|
|
|
PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_NONE; }
|
|
PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_BOOSTER_ENERGY; }
|
|
|
|
PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_NONE; }
|
|
PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_BOOSTER_ENERGY; }
|
|
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_ROUND].category == DAMAGE_CATEGORY_SPECIAL);
|
|
PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ability); Item(item); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_ROUND); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, player);
|
|
HP_BAR(opponent, captureDamage: &results[i].damage);
|
|
} FINALLY {
|
|
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy increases special defense by 30% if it is the highest stat", s16 damage)
|
|
{
|
|
u32 species;
|
|
u32 ability;
|
|
u32 item;
|
|
|
|
PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_NONE; }
|
|
PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_BOOSTER_ENERGY; }
|
|
|
|
PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_NONE; }
|
|
PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_BOOSTER_ENERGY; }
|
|
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_ROUND].category == DAMAGE_CATEGORY_SPECIAL);
|
|
PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(100); SpDefense(110); Ability(ability); Item(item); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_ROUND); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponent);
|
|
HP_BAR(player, captureDamage: &results[i].damage);
|
|
} FINALLY {
|
|
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.7), results[1].damage);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy can't be flung if a Paradox species is involved")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gSpeciesInfo[SPECIES_IRON_MOTH].isParadox == TRUE);
|
|
PLAYER(SPECIES_IRON_MOTH);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BOOSTER_ENERGY); }
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_FLING); }
|
|
} SCENE {
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, opponent);
|
|
MESSAGE("But it failed!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Booster Energy can't be tricked if a Paradox species is involved")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gSpeciesInfo[SPECIES_IRON_MOTH].isParadox == TRUE);
|
|
PLAYER(SPECIES_IRON_MOTH) { Item(ITEM_BERRY_JUICE); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BOOSTER_ENERGY); }
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_TRICK); }
|
|
} SCENE {
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent);
|
|
MESSAGE("But it failed!");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Booster Energy triggers correctly for all battlers if multiple fainted the previous turn")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_CATERPIE) { HP(1); }
|
|
PLAYER(SPECIES_GOUGING_FIRE) { Item(ITEM_BOOSTER_ENERGY); }
|
|
PLAYER(SPECIES_IRON_MOTH) { Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_CATERPIE) { HP(1); }
|
|
OPPONENT(SPECIES_CATERPIE) { HP(1); }
|
|
OPPONENT(SPECIES_FLUTTER_MANE) { Item(ITEM_BOOSTER_ENERGY); }
|
|
OPPONENT(SPECIES_CATERPIE);
|
|
} WHEN {
|
|
TURN { MOVE(playerLeft, MOVE_EXPLOSION);
|
|
SEND_OUT(opponentRight, 3);
|
|
SEND_OUT(opponentLeft, 2);
|
|
SEND_OUT(playerRight, 3);
|
|
SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft);
|
|
ABILITY_POPUP(playerLeft, ABILITY_PROTOSYNTHESIS);
|
|
ABILITY_POPUP(playerRight, ABILITY_QUARK_DRIVE);
|
|
ABILITY_POPUP(opponentLeft, ABILITY_PROTOSYNTHESIS);
|
|
}
|
|
}
|