Remove badge boosts
Modern Pokemon games have done away with badge boosts and instead have the minimum level for obedience increase with every badge you acquire.
Ruby
First, open
calculate_base_damage.c and edit the function
CalculateBaseDamage by removing the
BADGE_BOOST macro and the four lines where it's used.
#define BADGE_BOOST(badge, stat, bank) ({ \
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) \
{ \
if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
&& gTrainerBattleOpponent != SECRET_BASE_OPPONENT \
&& FlagGet(FLAG_BADGE0##badge##_GET) \
&& GetBattlerSide(bank) == B_SIDE_PLAYER) \
(stat) = (110 * (stat)) / 100; \
} \
})
BADGE_BOOST(1, attack, bankAtk);
BADGE_BOOST(5, defense, bankDef);
BADGE_BOOST(7, spAttack, bankAtk);
BADGE_BOOST(7, spDefense, bankDef);
Next, open
battle_2.c and edit the function
GetWhoStrikesFirst by removing these two blocks of code.
// Only give badge speed boost to the player's mon.
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBattlerSide(bank1) == 0)
bank1AdjustedSpeed = (bank1AdjustedSpeed * 110) / 100;
// Only give badge speed boost to the player's mon.
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBattlerSide(bank2) == 0)
{
bank2AdjustedSpeed = (bank2AdjustedSpeed * 110) / 100;
}
Finally, open
battle_util.c and edit the function
IsMonDisobedient. You should be able to find this section of code.
if (FlagGet(FLAG_BADGE02_GET))
obedienceLevel = 30;
if (FlagGet(FLAG_BADGE04_GET))
obedienceLevel = 50;
if (FlagGet(FLAG_BADGE06_GET))
obedienceLevel = 70;
How badge boosts correspond to increases in the minimum obedience level is up to you. As an example, here's how obedience works in Omega Ruby/Alpha Sapphire, Gen 7 and the Let's Go games. (For X/Y-style obedience, increase all these values by 10.)
if (FlagGet(FLAG_BADGE01_GET))
obedienceLevel = 20;
if (FlagGet(FLAG_BADGE02_GET))
obedienceLevel = 30;
if (FlagGet(FLAG_BADGE03_GET))
obedienceLevel = 40;
if (FlagGet(FLAG_BADGE04_GET))
obedienceLevel = 50;
if (FlagGet(FLAG_BADGE05_GET))
obedienceLevel = 60;
if (FlagGet(FLAG_BADGE06_GET))
obedienceLevel = 70;
if (FlagGet(FLAG_BADGE07_GET))
obedienceLevel = 80;
Emerald
First, open
pokemon.c and edit the function
CalculateBaseDamage by removing the
ShouldGetBadgeBoost function and the eight lines of code that use it.
static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk))
attack = (110 * attack) / 100;
if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
defense = (110 * defense) / 100;
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
spAttack = (110 * spAttack) / 100;
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
spDefense = (110 * spDefense) / 100;
static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
return FALSE;
else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
return FALSE;
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return FALSE;
else if (FlagGet(badgeFlag))
return TRUE;
else
return FALSE;
}
Next, open
battle_main.c and edit the function
GetWhoStrikesFirst. There are two blocks of seven lines of code with the comment "badge boost"; remove them.
// badge boost
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
&& FlagGet(FLAG_BADGE03_GET)
&& GetBattlerSide(battler1) == B_SIDE_PLAYER)
{
speedBattler1 = (speedBattler1 * 110) / 100;
}
// badge boost
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
&& FlagGet(FLAG_BADGE03_GET)
&& GetBattlerSide(battler2) == B_SIDE_PLAYER)
{
speedBattler2 = (speedBattler2 * 110) / 100;
}
Finally, open
battle_util.c and edit the function
IsMonDisobedient. You should be able to find this section of code.
if (FlagGet(FLAG_BADGE02_GET))
obedienceLevel = 30;
if (FlagGet(FLAG_BADGE04_GET))
obedienceLevel = 50;
if (FlagGet(FLAG_BADGE06_GET))
obedienceLevel = 70;
How badge boosts correspond to increases in the minimum obedience level is up to you. As an example, here's how obedience works in Omega Ruby/Alpha Sapphire, Gen 7 and the Let's Go games. (For X/Y-style obedience, increase all these values by 10.)
if (FlagGet(FLAG_BADGE01_GET))
obedienceLevel = 20;
if (FlagGet(FLAG_BADGE02_GET))
obedienceLevel = 30;
if (FlagGet(FLAG_BADGE03_GET))
obedienceLevel = 40;
if (FlagGet(FLAG_BADGE04_GET))
obedienceLevel = 50;
if (FlagGet(FLAG_BADGE05_GET))
obedienceLevel = 60;
if (FlagGet(FLAG_BADGE06_GET))
obedienceLevel = 70;
if (FlagGet(FLAG_BADGE07_GET))
obedienceLevel = 80;