Score adjustments towards guaranteed stat drops. (#7670)

This commit is contained in:
surskitty 2025-09-02 05:31:35 -04:00 committed by GitHub
parent 0a0d574998
commit 2f75c6a264
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 10 deletions

View File

@ -5685,11 +5685,20 @@ case EFFECT_GUARD_SPLIT:
if (CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED))
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED));
break;
case MOVE_EFFECT_ACC_MINUS_1:
case MOVE_EFFECT_ACC_MINUS_2:
if (CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ACC))
{
u32 scoreIncrease = IncreaseStatDownScore(battlerAtk, battlerDef, STAT_ACC);
if (scoreIncrease == WEAK_EFFECT)
scoreIncrease = DECENT_EFFECT;
ADJUST_SCORE(scoreIncrease);
}
break;
case MOVE_EFFECT_ATK_MINUS_1:
case MOVE_EFFECT_DEF_MINUS_1:
case MOVE_EFFECT_SP_ATK_MINUS_1:
case MOVE_EFFECT_SP_DEF_MINUS_1:
case MOVE_EFFECT_ACC_MINUS_1:
case MOVE_EFFECT_EVS_MINUS_1:
{
u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1;
@ -5701,7 +5710,6 @@ case EFFECT_GUARD_SPLIT:
case MOVE_EFFECT_DEF_MINUS_2:
case MOVE_EFFECT_SP_ATK_MINUS_2:
case MOVE_EFFECT_SP_DEF_MINUS_2:
case MOVE_EFFECT_ACC_MINUS_2:
case MOVE_EFFECT_EVS_MINUS_2:
{
u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2;

View File

@ -2113,13 +2113,15 @@ u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, u32 stat)
tempScore += DECENT_EFFECT;
break;
case STAT_DEF:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL))
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)
|| HasMoveWithCategory(BATTLE_PARTNER(battlerAtk), DAMAGE_CATEGORY_PHYSICAL))
tempScore += DECENT_EFFECT;
break;
case STAT_SPEED:
{
u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData);
if (AI_IsSlower(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY))
if (AI_IsSlower(battlerAtk, battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY)
|| AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY))
tempScore += DECENT_EFFECT;
break;
}
@ -2128,16 +2130,16 @@ u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, u32 stat)
tempScore += DECENT_EFFECT;
break;
case STAT_SPDEF:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL))
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL)
|| HasMoveWithCategory(BATTLE_PARTNER(battlerAtk), DAMAGE_CATEGORY_SPECIAL))
tempScore += DECENT_EFFECT;
break;
case STAT_ACC:
if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)
tempScore += WEAK_EFFECT;
tempScore += WEAK_EFFECT;
if (IsBattlerTrapped(battlerAtk, battlerDef))
tempScore += DECENT_EFFECT;
if (gBattleMons[battlerDef].volatiles.leechSeed)
tempScore += WEAK_EFFECT;
if (gBattleMons[battlerDef].volatiles.root)
tempScore += WEAK_EFFECT;
if (gBattleMons[battlerDef].volatiles.cursed)
tempScore += WEAK_EFFECT;
break;

View File

@ -60,7 +60,7 @@ AI_SINGLE_BATTLE_TEST("AI doesn't use accuracy-lowering moves if it knows that t
if (abilityAI == ABILITY_MOLD_BREAKER) {
SCORE_GT(opponent, MOVE_SAND_ATTACK, MOVE_CELEBRATE);
} else {
SCORE_EQ(opponent, MOVE_SAND_ATTACK, MOVE_CELEBRATE);
SCORE_LT_VAL(opponent, MOVE_SAND_ATTACK, AI_SCORE_DEFAULT);
}
}
} SCENE {