AI uses Extreme Evoboost. (#7706)

This commit is contained in:
surskitty 2025-09-09 16:13:18 -04:00 committed by GitHub
parent 0f2518c17f
commit 0ebd308497
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 9 deletions

View File

@ -136,6 +136,7 @@ bool32 CanKnockOffItem(u32 battler, u32 item);
bool32 IsAbilityOfRating(u32 ability, s8 rating);
bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability);
bool32 AI_MoveMakesContact(u32 ability, enum ItemHoldEffect holdEffect, u32 move);
bool32 IsConsideringZMove(u32 battlerAtk, u32 battlerDef, u32 move);
bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove);
void SetAIUsingGimmick(u32 battler, enum AIConsiderGimmick use);
bool32 IsAIUsingGimmick(u32 battler);

View File

@ -2760,8 +2760,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_HOLD_HANDS:
case EFFECT_CELEBRATE:
case EFFECT_HAPPY_HOUR:
case EFFECT_LAST_RESORT:
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && ShouldUseZMove(battlerAtk, battlerDef, move))
if (IsConsideringZMove(battlerAtk, battlerDef, move))
break;
ADJUST_SCORE(-10);
break;
@ -4446,7 +4445,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_HOLD_HANDS:
case EFFECT_CELEBRATE:
case EFFECT_HAPPY_HOUR:
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && ShouldUseZMove(battlerAtk, battlerDef, move))
case EFFECT_LAST_RESORT:
if (IsConsideringZMove(battlerAtk, battlerDef, move))
ADJUST_SCORE(BEST_EFFECT);
break;
case EFFECT_TELEPORT: // Either remove or add better logic

View File

@ -665,7 +665,7 @@ bool32 IsDamageMoveUnusable(struct DamageContext *ctx)
return TRUE;
break;
case EFFECT_LAST_RESORT:
if (!CanUseLastResort(ctx->battlerAtk))
if (!CanUseLastResort(ctx->battlerAtk) && !IsConsideringZMove(ctx->battlerAtk, ctx->battlerDef, ctx->move))
return TRUE;
break;
case EFFECT_LOW_KICK:
@ -4843,6 +4843,12 @@ bool32 AI_MoveMakesContact(u32 ability, enum ItemHoldEffect holdEffect, u32 move
return FALSE;
}
bool32 IsConsideringZMove(u32 battlerAtk, u32 battlerDef, u32 move)
{
return gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && ShouldUseZMove(battlerAtk, battlerDef, move);
}
//TODO - this could use some more sophisticated logic
bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove)
{

View File

@ -63,10 +63,8 @@ AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Happy Hour")
}
}
// Last Resort itself is missing logic!
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Extreme Evoboost")
{
KNOWN_FAILING;
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
@ -75,9 +73,8 @@ AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Extreme Evoboost")
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_LAST_RESORT, gimmick: GIMMICK_Z_MOVE); }
TURN { EXPECT_MOVE(opponent, MOVE_POUND, gimmick: GIMMICK_NONE);
SCORE_EQ_VAL(opponent, MOVE_LAST_RESORT, 80); }
// Uncomment when Last Resort works correctly.
// TURN { EXPECT_MOVE(opponent, MOVE_LAST_RESORT, gimmick: GIMMICK_NONE); }
SCORE_LT_VAL(opponent, MOVE_LAST_RESORT, AI_SCORE_DEFAULT); }
TURN { EXPECT_MOVE(opponent, MOVE_LAST_RESORT, gimmick: GIMMICK_NONE); }
}
}