Merge pull request #2218 from LOuroboros/patch-1

Updated Serene Grace checks in AI_CheckViability
This commit is contained in:
Eduardo Quezada D'Ottone 2022-09-05 10:30:18 -03:00 committed by GitHub
commit 99a9b9f859
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2976,6 +2976,8 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
u16 predictedMove = AI_DATA->predictedMoves[battlerDef];
bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk);
u32 i;
// We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those.
bool32 sereneGraceBoost = (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100));
// Targeting partner, check benefits of doing that instead
if (IsTargetingPartner(battlerAtk, battlerDef))
@ -3434,7 +3436,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
score += 2;
break;
case EFFECT_CONFUSE_HIT:
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE)
if (sereneGraceBoost)
score++;
//fallthrough
case EFFECT_CONFUSE:
@ -3453,7 +3455,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
case EFFECT_SPECIAL_DEFENSE_DOWN_HIT:
case EFFECT_ACCURACY_DOWN_HIT:
case EFFECT_EVASION_DOWN_HIT:
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
if (sereneGraceBoost && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
score += 2;
break;
case EFFECT_SPEED_DOWN_HIT:
@ -3461,12 +3463,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
score -= 2;
else if (!AI_RandLessThan(70))
score++;
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
score++;
if (ShouldLowerSpeed(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
{
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
score += 4;
if (sereneGraceBoost && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
score += 5;
else
score += 2;
}
@ -3597,7 +3597,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
score++;
break;
case EFFECT_SPEED_UP_HIT:
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && !WillAIStrikeFirst())
if (sereneGraceBoost && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && !WillAIStrikeFirst())
score += 3;
break;
case EFFECT_DESTINY_BOND:
@ -3841,7 +3841,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
}
break;
case EFFECT_ATTACK_UP_HIT:
if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE)
if (sereneGraceBoost)
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
break;
case EFFECT_FELL_STINGER: