Fixed Transistor damage calculation test failing when GEN_LATEST is less than GEN_9 (#7577)

This commit is contained in:
Eduardo Quezada 2025-08-18 13:44:43 -04:00 committed by GitHub
parent 60f5f3302d
commit 7d459fd6dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 25 additions and 9 deletions

View File

@ -29,6 +29,7 @@ enum GenConfigTag
GEN_SNOW_WARNING,
GEN_ALLY_SWITCH_FAIL_CHANCE,
GEN_DREAM_EATER_LIQUID_OOZE,
GEN_CONFIG_TRANSISTOR_BOOST,
GEN_CONFIG_COUNT
};

View File

@ -32,6 +32,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
[GEN_SNOW_WARNING] = B_SNOW_WARNING,
[GEN_ALLY_SWITCH_FAIL_CHANCE] = B_ALLY_SWITCH_FAIL_CHANCE,
[GEN_DREAM_EATER_LIQUID_OOZE] = B_DREAM_EATER_LIQUID_OOZE,
[GEN_CONFIG_TRANSISTOR_BOOST] = B_TRANSISTOR_BOOST,
};
#if TESTING

View File

@ -8706,7 +8706,7 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx)
case ABILITY_TRANSISTOR:
if (moveType == TYPE_ELECTRIC)
{
if (B_TRANSISTOR_BOOST >= GEN_9)
if (GetGenConfig(GEN_CONFIG_TRANSISTOR_BOOST) >= GEN_9)
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
else
modifier = uq4_12_multiply(modifier, UQ_4_12(1.5));

View File

@ -15,6 +15,7 @@ AI_SINGLE_BATTLE_TEST("AI will not try to lower opposing stats if target is prot
PARAMETRIZE { ability = ABILITY_CLEAR_BODY; species = SPECIES_BELDUM; move = MOVE_NOBLE_ROAR; }
GIVEN {
WITH_CONFIG(GEN_ILLUMINATE_EFFECT, GEN_9);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_OMNISCIENT);
PLAYER(species) { Ability(ability); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, move); }

View File

@ -231,23 +231,36 @@ SINGLE_BATTLE_TEST("Gem boosted Damage calculation")
#define NUM_DAMAGE_SPREADS (DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO) + 1
static const s16 sThunderShockTransistorSpread[] = { 54, 55, 56, 57, 57, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 65 };
static const s16 sThunderShockTransistorSpreadGen9[] = { 54, 55, 56, 57, 57, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 65 };
static const s16 sThunderShockTransistorSpreadGen8[] = { 63, 64, 65, 66, 66, 67, 68, 69, 69, 70, 71, 72, 72, 73, 74, 75 };
static const s16 sThunderShockRegularSpread[] = { 42, 42, 43, 43, 44, 45, 45, 45, 46, 46, 47, 48, 48, 48, 49, 50 };
static const s16 sWildChargeTransistorSpread[] = { 123, 124, 126, 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 142, 144, 145 };
static const s16 sWildChargeTransistorSpreadGen9[] = { 123, 124, 126, 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 142, 144, 145 };
static const s16 sWildChargeTransistorSpreadGen8[] = { 141, 143, 145, 147, 148, 150, 151, 153, 155, 156, 158, 160, 162, 163, 165, 167 };
static const s16 sWildChargeRegularSpread[] = { 94, 96, 96, 98, 99, 100, 101, 102, 103, 105, 105, 107, 108, 109, 110, 111 };
DOUBLE_BATTLE_TEST("Transistor Damage calculation", s16 damage)
{
s16 expectedDamageTransistorSpec = 0, expectedDamageRegularPhys = 0, expectedDamageRegularSpec = 0, expectedDamageTransistorPhys = 0;
s16 damagePlayerLeft, damagePlayerRight, damageOpponentLeft, damageOpponentRight;
u32 gen = 0;
for (u32 spread = 0; spread < 16; ++spread) {
PARAMETRIZE { expectedDamageTransistorSpec = sThunderShockTransistorSpread[spread],
PARAMETRIZE { gen = GEN_9,
expectedDamageTransistorSpec = sThunderShockTransistorSpreadGen9[spread],
expectedDamageRegularSpec = sThunderShockRegularSpread[spread];
expectedDamageTransistorPhys = sWildChargeTransistorSpreadGen9[spread],
expectedDamageRegularPhys = sWildChargeRegularSpread[spread];
}
}
for (u32 spread = 0; spread < 16; ++spread) {
PARAMETRIZE { gen = GEN_8,
expectedDamageTransistorSpec = sThunderShockTransistorSpreadGen8[spread],
expectedDamageRegularSpec = sThunderShockRegularSpread[spread],
expectedDamageTransistorPhys = sWildChargeTransistorSpread[spread],
expectedDamageTransistorPhys = sWildChargeTransistorSpreadGen8[spread],
expectedDamageRegularPhys = sWildChargeRegularSpread[spread];
}
}
GIVEN {
WITH_CONFIG(GEN_CONFIG_TRANSISTOR_BOOST, gen);
ASSUME(GetMoveType(MOVE_WILD_CHARGE) == TYPE_ELECTRIC);
ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
ASSUME(GetMoveCategory(MOVE_WILD_CHARGE) == DAMAGE_CATEGORY_PHYSICAL);
@ -260,10 +273,10 @@ DOUBLE_BATTLE_TEST("Transistor Damage calculation", s16 damage)
OPPONENT(SPECIES_REGIELEKI) { Ability(ABILITY_TRANSISTOR); }
} WHEN {
TURN {
MOVE(playerLeft, MOVE_THUNDER_SHOCK, target: opponentLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i));
MOVE(playerRight, MOVE_THUNDER_SHOCK, target: opponentRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i));
MOVE(opponentLeft, MOVE_WILD_CHARGE, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i));
MOVE(opponentRight, MOVE_WILD_CHARGE, target: playerRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i));
MOVE(playerLeft, MOVE_THUNDER_SHOCK, target: opponentLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16)));
MOVE(playerRight, MOVE_THUNDER_SHOCK, target: opponentRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16)));
MOVE(opponentLeft, MOVE_WILD_CHARGE, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16)));
MOVE(opponentRight, MOVE_WILD_CHARGE, target: playerRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16)));
}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, playerLeft);