Cap AI scores for Quiver Dance, Victory Dance, and Shell Smash. (#8585)
Some checks are pending
CI / build (push) Waiting to run
CI / docs_validate (push) Waiting to run
CI / allcontributors (push) Waiting to run

This commit is contained in:
surskitty 2025-12-19 00:35:48 -05:00 committed by GitHub
parent dcc8e56566
commit 01edcae486
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 59 additions and 20 deletions

View File

@ -4951,11 +4951,16 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru
case EFFECT_FILLET_AWAY:
if (HasHPForDamagingSetup(battlerAtk, battlerDef, 50))
{
u32 scoreIncrease = IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED);
if (scoreIncrease > BEST_EFFECT)
scoreIncrease = BEST_EFFECT;
s32 statUpScore = 0;
ADJUST_SCORE(scoreIncrease);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2);
if (statUpScore > BEST_EFFECT)
ADJUST_SCORE(BEST_EFFECT);
else
ADJUST_SCORE(statUpScore);
}
break;
case EFFECT_PSYCH_UP:
@ -5310,23 +5315,50 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB)
ADJUST_SCORE(GOOD_EFFECT);
case EFFECT_QUIVER_DANCE:
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
{
s32 statUpScore = 0;
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF);
if (statUpScore > BEST_EFFECT)
ADJUST_SCORE(BEST_EFFECT);
else
ADJUST_SCORE(statUpScore);
break;
}
case EFFECT_VICTORY_DANCE:
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
{
s32 statUpScore = 0;
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF);
if (statUpScore > BEST_EFFECT)
ADJUST_SCORE(BEST_EFFECT);
else
ADJUST_SCORE(statUpScore);
break;
}
case EFFECT_SHELL_SMASH:
{
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_WHITE_HERB)
ADJUST_SCORE(WEAK_EFFECT);
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
s32 statUpScore = 0;
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2);
if (statUpScore > BEST_EFFECT)
ADJUST_SCORE(BEST_EFFECT);
else
ADJUST_SCORE(statUpScore);
break;
}
case EFFECT_TIDY_UP:
IncreaseTidyUpScore(battlerAtk, battlerDef, move, &score);
case EFFECT_DRAGON_DANCE:
@ -5708,13 +5740,20 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru
//break;
case EFFECT_CLANGOROUS_SOUL:
if (HasHPForDamagingSetup(battlerAtk, battlerDef, 67))
{
u32 scoreIncrease = IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED);
if (scoreIncrease > BEST_EFFECT)
scoreIncrease = BEST_EFFECT;
{
s32 statUpScore = 0;
ADJUST_SCORE(scoreIncrease);
}
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK);
statUpScore += IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF);
if (statUpScore > BEST_EFFECT)
ADJUST_SCORE(BEST_EFFECT);
else
ADJUST_SCORE(statUpScore);
}
break;
//case EFFECT_NO_RETREAT: // TODO
//break;

View File

@ -73,7 +73,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); }
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_EXPLOSION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); }
OPPONENT(SPECIES_BIBAREL) { Moves(MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); Ability(ABILITY_SIMPLE); Item(ITEM_WHITE_HERB); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND);
NOT_EXPECT_MOVE(opponentRight, statusMove);