ShouldSwitchIfWonderGuard tests and cleanup (#5383)
This commit is contained in:
parent
c7e1e857f3
commit
79776bf6bb
@ -199,7 +199,8 @@ enum RandomTag
|
||||
RNG_TRACE,
|
||||
RNG_FICKLE_BEAM,
|
||||
RNG_AI_ABILITY,
|
||||
RNG_AI_HASBADODDS,
|
||||
RNG_AI_SWITCH_HASBADODDS,
|
||||
RNG_AI_SWITCH_WONDER_GUARD,
|
||||
RNG_SHELL_SIDE_ARM,
|
||||
};
|
||||
|
||||
|
||||
@ -180,7 +180,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
|
||||
&& gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4)))
|
||||
{
|
||||
// 50% chance to stay in regardless
|
||||
if (!RandomPercentage(RNG_AI_HASBADODDS, 50))
|
||||
if (!RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50))
|
||||
return FALSE;
|
||||
|
||||
// Switch mon out
|
||||
@ -203,7 +203,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
|
||||
return FALSE;
|
||||
|
||||
// 50% chance to stay in regardless
|
||||
if (!RandomPercentage(RNG_AI_HASBADODDS, 50))
|
||||
if (!RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50))
|
||||
return FALSE;
|
||||
|
||||
// Switch mon out
|
||||
@ -284,7 +284,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult)
|
||||
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
|
||||
if (move != MOVE_NONE)
|
||||
{
|
||||
if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && Random() % 3 < 2)
|
||||
if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && (RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, 66) || ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING))))
|
||||
{
|
||||
// We found a mon.
|
||||
gBattleStruct->AI_monToSwitchIntoId[battler] = i;
|
||||
|
||||
@ -360,7 +360,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would be OKHO'd and they have a good switchin 50% of the time")
|
||||
{
|
||||
PASSES_RANDOMLY(50, 100, RNG_AI_HASBADODDS);
|
||||
PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_HASBADODDS);
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_RHYDON].types[0] == TYPE_GROUND);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[0] == TYPE_WATER);
|
||||
@ -375,3 +375,50 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would
|
||||
TURN { MOVE(player, MOVE_THUNDERBOLT) ; EXPECT_SWITCH(opponent, 1); }
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to a mon with Wonder Guard 66% of the time")
|
||||
{
|
||||
u32 aiOmniscientFlag = 0;
|
||||
PARAMETRIZE { aiOmniscientFlag = 0; }
|
||||
PARAMETRIZE { aiOmniscientFlag = AI_FLAG_OMNISCIENT; }
|
||||
PASSES_RANDOMLY(66, 100, RNG_AI_SWITCH_WONDER_GUARD);
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG);
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST);
|
||||
ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
|
||||
ASSUME(gMovesInfo[MOVE_SHADOW_BALL].type == TYPE_GHOST);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiOmniscientFlag);
|
||||
PLAYER(SPECIES_SHEDINJA) { Moves(MOVE_TACKLE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHADOW_BALL); }
|
||||
} WHEN {
|
||||
if(aiOmniscientFlag == 0) {
|
||||
TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_MOVE(opponent, MOVE_TACKLE); }
|
||||
TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); }
|
||||
}
|
||||
else {
|
||||
TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't deal damage to a mon with Wonder Guard 100% of the time")
|
||||
{
|
||||
PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_WONDER_GUARD);
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG);
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST);
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[0] == ABILITY_WONDER_GUARD);
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[1] == ABILITY_NONE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[2] == ABILITY_NONE);
|
||||
ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
|
||||
ASSUME(gMovesInfo[MOVE_SHADOW_BALL].type == TYPE_GHOST);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
|
||||
PLAYER(SPECIES_SHEDINJA) { Moves(MOVE_TACKLE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHADOW_BALL); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); }
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user