mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Fix bug due to variable overflow when AI chooses new Pokemon to send out (#3068)
This commit is contained in:
parent
43821d606f
commit
62ae3b1df1
@ -212,6 +212,8 @@ bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId);
|
||||
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
|
||||
void MulModifier(u16 *modifier, u16 val);
|
||||
|
||||
// Ability checks
|
||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||
|
@ -822,7 +822,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId,
|
||||
|
||||
while (bits != 0x3F) // All mons were checked.
|
||||
{
|
||||
u32 bestResist = UQ_4_12(1.0);
|
||||
u16 bestResist = UQ_4_12(1.0);
|
||||
int bestMonId = PARTY_SIZE;
|
||||
// Find the mon whose type is the most suitable defensively.
|
||||
for (i = firstId; i < lastId; i++)
|
||||
@ -830,21 +830,21 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId,
|
||||
if (!(gBitTable[i] & invalidMons) && !(gBitTable[i] & bits))
|
||||
{
|
||||
u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
u32 typeEffectiveness = UQ_4_12(1.0);
|
||||
u16 typeEffectiveness = UQ_4_12(1.0);
|
||||
|
||||
u8 atkType1 = gBattleMons[opposingBattler].type1;
|
||||
u8 atkType2 = gBattleMons[opposingBattler].type2;
|
||||
u8 defType1 = gSpeciesInfo[species].types[0];
|
||||
u8 defType2 = gSpeciesInfo[species].types[1];
|
||||
|
||||
typeEffectiveness *= GetTypeModifier(atkType1, defType1);
|
||||
MulModifier(&typeEffectiveness, (GetTypeModifier(atkType1, defType1)));
|
||||
if (atkType2 != atkType1)
|
||||
typeEffectiveness *= GetTypeModifier(atkType2, defType1);
|
||||
MulModifier(&typeEffectiveness, (GetTypeModifier(atkType2, defType1)));
|
||||
if (defType2 != defType1)
|
||||
{
|
||||
typeEffectiveness *= GetTypeModifier(atkType1, defType2);
|
||||
MulModifier(&typeEffectiveness, (GetTypeModifier(atkType1, defType2)));
|
||||
if (atkType2 != atkType1)
|
||||
typeEffectiveness *= GetTypeModifier(atkType2, defType2);
|
||||
MulModifier(&typeEffectiveness, (GetTypeModifier(atkType2, defType2)));
|
||||
}
|
||||
if (typeEffectiveness < bestResist)
|
||||
{
|
||||
|
@ -8341,7 +8341,7 @@ u32 GetMoveTargetCount(u16 move, u8 battlerAtk, u8 battlerDef)
|
||||
}
|
||||
}
|
||||
|
||||
static void MulModifier(u16 *modifier, u16 val)
|
||||
void MulModifier(u16 *modifier, u16 val)
|
||||
{
|
||||
*modifier = UQ_4_12_TO_INT((*modifier * val) + UQ_4_12_ROUND);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user