100 lines
3.5 KiB
C
100 lines
3.5 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(GetItemHoldEffect(ITEM_LIGHT_BALL) == HOLD_EFFECT_LIGHT_BALL);
|
|
}
|
|
|
|
static const u32 speciesToCheck[] = {
|
|
SPECIES_PICHU,
|
|
SPECIES_PIKACHU,
|
|
SPECIES_PIKACHU_COSPLAY,
|
|
SPECIES_PIKACHU_ROCK_STAR,
|
|
SPECIES_PIKACHU_BELLE,
|
|
SPECIES_PIKACHU_POP_STAR,
|
|
SPECIES_PIKACHU_PHD,
|
|
SPECIES_PIKACHU_LIBRE,
|
|
SPECIES_PIKACHU_ORIGINAL,
|
|
SPECIES_PIKACHU_HOENN,
|
|
SPECIES_PIKACHU_SINNOH,
|
|
SPECIES_PIKACHU_UNOVA,
|
|
SPECIES_PIKACHU_KALOS,
|
|
SPECIES_PIKACHU_ALOLA,
|
|
SPECIES_PIKACHU_PARTNER,
|
|
SPECIES_PIKACHU_WORLD,
|
|
SPECIES_PIKACHU_GMAX,
|
|
};
|
|
|
|
SINGLE_BATTLE_TEST("Light Ball doubles Pikachu's Special Attack", s16 damage)
|
|
{
|
|
u32 species = 0, item = 0;
|
|
|
|
for (u32 j = 0; j < ARRAY_COUNT(speciesToCheck); j++) {
|
|
PARAMETRIZE { item = ITEM_NONE; species = speciesToCheck[j]; }
|
|
PARAMETRIZE { item = ITEM_LIGHT_BALL; species = speciesToCheck[j]; }
|
|
}
|
|
|
|
GIVEN {
|
|
ASSUME(GetMoveCategory(MOVE_THUNDERSHOCK) == DAMAGE_CATEGORY_SPECIAL);
|
|
if (species == SPECIES_PIKACHU_GMAX) {
|
|
PLAYER(SPECIES_PIKACHU) { Item(item); GigantamaxFactor(TRUE); }
|
|
} else {
|
|
PLAYER(species) { Item(item); }
|
|
}
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
if (species == SPECIES_PIKACHU_GMAX) {
|
|
TURN { MOVE(player, MOVE_THUNDERSHOCK, gimmick: GIMMICK_DYNAMAX); }
|
|
} else {
|
|
TURN { MOVE(player, MOVE_THUNDERSHOCK); }
|
|
}
|
|
} SCENE {
|
|
HP_BAR(opponent, captureDamage: &results[i].damage);
|
|
} THEN {
|
|
if (i == 1) { // First check to avoid boosting other species
|
|
EXPECT_EQ(results[i - 1].damage, results[i].damage);
|
|
} else if (i % 2 == 1) { // Every 2nd test afterwards
|
|
EXPECT_MUL_EQ(results[i - 1].damage, Q_4_12(2.0), results[i].damage);
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Light Ball doubles Pikachu's Attack (Gen4+)", s16 damage)
|
|
{
|
|
u32 species = 0, item = 0, config = 0;
|
|
|
|
for (u32 j = 0; j < ARRAY_COUNT(speciesToCheck); j++) {
|
|
PARAMETRIZE { item = ITEM_NONE; config = GEN_3; species = speciesToCheck[j]; }
|
|
PARAMETRIZE { item = ITEM_LIGHT_BALL; config = GEN_3; species = speciesToCheck[j]; }
|
|
PARAMETRIZE { item = ITEM_LIGHT_BALL; config = GEN_4; species = speciesToCheck[j]; }
|
|
}
|
|
|
|
GIVEN {
|
|
WITH_CONFIG(B_LIGHT_BALL_ATTACK_BOOST, config);
|
|
ASSUME(GetMoveCategory(MOVE_SPARK) == DAMAGE_CATEGORY_PHYSICAL);
|
|
if (species == SPECIES_PIKACHU_GMAX) {
|
|
PLAYER(SPECIES_PIKACHU) { Item(item); GigantamaxFactor(TRUE); }
|
|
} else {
|
|
PLAYER(species) { Item(item); }
|
|
}
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
if (species == SPECIES_PIKACHU_GMAX) {
|
|
TURN { MOVE(player, MOVE_SPARK, gimmick: GIMMICK_DYNAMAX); }
|
|
} else {
|
|
TURN { MOVE(player, MOVE_SPARK); }
|
|
}
|
|
} SCENE {
|
|
HP_BAR(opponent, captureDamage: &results[i].damage);
|
|
} THEN {
|
|
if (i == 2) { // First check to avoid boosting other species
|
|
EXPECT_EQ(results[i - 2].damage, results[i].damage); // No item vs Light Ball
|
|
EXPECT_EQ(results[i - 1].damage, results[i].damage); // Gen 3 vs Gen 4
|
|
} else if (i % 3 == 2) { // Every 3rd test afterwards
|
|
EXPECT_MUL_EQ(results[i - 2].damage, Q_4_12(2.0), results[i].damage); // No item vs Light Ball
|
|
EXPECT_MUL_EQ(results[i - 1].damage, Q_4_12(2.0), results[i].damage); // Gen 3 vs Gen 4
|
|
}
|
|
}
|
|
}
|