diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index e51d57915c..83c9caa203 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -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 }; diff --git a/include/generational_changes.h b/include/generational_changes.h index 53991bab1f..a6f3a56ef7 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -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 diff --git a/src/battle_util.c b/src/battle_util.c index ed00fb4d45..7729b0f67a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -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)); diff --git a/test/battle/ai/check_bad_move.c b/test/battle/ai/check_bad_move.c index 79b960ec60..776dcd7de2 100644 --- a/test/battle/ai/check_bad_move.c +++ b/test/battle/ai/check_bad_move.c @@ -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); } diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c index 0679725510..f41f6a2145 100644 --- a/test/battle/damage_formula.c +++ b/test/battle/damage_formula.c @@ -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);