AI uses Extreme Evoboost. (#7706)
This commit is contained in:
parent
0f2518c17f
commit
0ebd308497
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user