AI uses Court Change. (#7525)
This commit is contained in:
parent
38cfc4bacf
commit
2469627c61
@ -2320,6 +2320,23 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
|| DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
|
||||
ADJUST_SCORE(-9);
|
||||
break;
|
||||
case EFFECT_COURT_CHANGE:
|
||||
if (gSideStatuses[GetBattlerSide(FOE(battlerAtk))] & SIDE_STATUS_BAD_COURT)
|
||||
ADJUST_SCORE(BAD_EFFECT);
|
||||
if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_GOOD_COURT)
|
||||
ADJUST_SCORE(BAD_EFFECT);
|
||||
if (AreAnyHazardsOnSide(GetBattlerSide(FOE(battlerAtk))) && CountUsablePartyMons(battlerAtk) != 0)
|
||||
ADJUST_SCORE(WORST_EFFECT);
|
||||
if (hasPartner)
|
||||
{
|
||||
if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards
|
||||
&& AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change
|
||||
{
|
||||
ADJUST_SCORE(-10);
|
||||
break; // Don't use Defog if partner is going to set up hazards
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EFFECT_DEFOG:
|
||||
if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST)
|
||||
|| AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)))
|
||||
@ -2880,7 +2897,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
ADJUST_SCORE(-10);
|
||||
}
|
||||
break;
|
||||
case EFFECT_COURT_CHANGE:
|
||||
case EFFECT_TEATIME:
|
||||
if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
|
||||
ADJUST_SCORE(-10);
|
||||
@ -4603,6 +4619,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
//if (CountUsablePartyMons(battlerDef) != 0)
|
||||
//ADJUST_SCORE(8);
|
||||
break;
|
||||
case EFFECT_COURT_CHANGE:
|
||||
if (gSideStatuses[GetBattlerSide(FOE(battlerAtk))] & SIDE_STATUS_GOOD_COURT)
|
||||
ADJUST_SCORE(WEAK_EFFECT);
|
||||
if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_BAD_COURT)
|
||||
ADJUST_SCORE(WEAK_EFFECT);
|
||||
|
||||
if (AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0)
|
||||
{
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
}
|
||||
|
||||
if (hasPartner)
|
||||
{
|
||||
if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards
|
||||
&& AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change
|
||||
{
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EFFECT_DEFOG:
|
||||
if ((AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0)
|
||||
|| (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_GOOD_FOG))
|
||||
|
||||
@ -217,3 +217,35 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps G-Max Vine Lash, G-Max
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI uses Court Change")
|
||||
{
|
||||
u32 move;
|
||||
|
||||
PARAMETRIZE { move = MOVE_HEADBUTT; }
|
||||
PARAMETRIZE { move = MOVE_REFLECT; }
|
||||
PARAMETRIZE { move = MOVE_LIGHT_SCREEN; }
|
||||
PARAMETRIZE { move = MOVE_SAFEGUARD; }
|
||||
PARAMETRIZE { move = MOVE_SPIKES; }
|
||||
PARAMETRIZE { move = MOVE_STEALTH_ROCK; }
|
||||
PARAMETRIZE { move = MOVE_TOXIC_SPIKES; }
|
||||
PARAMETRIZE { move = MOVE_TAILWIND; }
|
||||
PARAMETRIZE { move = MOVE_STICKY_WEB; }
|
||||
PARAMETRIZE { move = MOVE_MIST; }
|
||||
PARAMETRIZE { move = MOVE_LUCKY_CHANT; }
|
||||
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_ZIGZAGOON) { Moves(move, MOVE_CELEBRATE); }
|
||||
PLAYER(SPECIES_ZIGZAGOON) { Moves(move, MOVE_CELEBRATE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_COURT_CHANGE, MOVE_HEADBUTT); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_COURT_CHANGE, MOVE_HEADBUTT); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_HEADBUTT); }
|
||||
if (move == MOVE_HEADBUTT)
|
||||
TURN { MOVE(player, MOVE_CELEBRATE); NOT_EXPECT_MOVE(opponent, MOVE_COURT_CHANGE); }
|
||||
else
|
||||
TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_COURT_CHANGE); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user