AI actually avoids contact vs rocky helmet/rough skin (#4779)
This commit is contained in:
parent
a17259763c
commit
000f144465
2 changed files with 30 additions and 5 deletions
|
@ -820,17 +820,18 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
|
|||
s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo)
|
||||
{
|
||||
bool32 effect1, effect2;
|
||||
s32 defAbility = AI_DATA->abilities[battlerDef];
|
||||
u32 defAbility = AI_DATA->abilities[battlerDef];
|
||||
u32 atkAbility = AI_DATA->abilities[battlerAtk];
|
||||
|
||||
// Check if physical moves hurt.
|
||||
if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_PROTECTIVE_PADS
|
||||
if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_PROTECTIVE_PADS && atkAbility != ABILITY_LONG_REACH
|
||||
&& (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET
|
||||
|| defAbility == ABILITY_IRON_BARBS || defAbility == ABILITY_ROUGH_SKIN))
|
||||
{
|
||||
if (IS_MOVE_PHYSICAL(move1) && !IS_MOVE_PHYSICAL(move2))
|
||||
if (gMovesInfo[move1].makesContact && !gMovesInfo[move2].makesContact)
|
||||
return -1;
|
||||
if (gMovesInfo[move2].makesContact && !gMovesInfo[move1].makesContact)
|
||||
return 1;
|
||||
if (IS_MOVE_PHYSICAL(move2) && !IS_MOVE_PHYSICAL(move1))
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check additional effects.
|
||||
|
|
|
@ -1000,3 +1000,27 @@ AI_SINGLE_BATTLE_TEST("AI calculates guaranteed criticals and detects critical i
|
|||
TURN { EXPECT_MOVE(opponent, MOVE_STORM_THROW); }
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI avoids contact moves against rocky helmet")
|
||||
{
|
||||
u32 item;
|
||||
|
||||
PARAMETRIZE { item = ITEM_NONE; }
|
||||
PARAMETRIZE { item = ITEM_ROCKY_HELMET; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BRANCH_POKE].makesContact);
|
||||
ASSUME(!gMovesInfo[MOVE_LEAFAGE].makesContact);
|
||||
ASSUME(gMovesInfo[MOVE_BRANCH_POKE].power == gMovesInfo[MOVE_LEAFAGE].power);
|
||||
ASSUME(gMovesInfo[MOVE_BRANCH_POKE].type == gMovesInfo[MOVE_LEAFAGE].type);
|
||||
ASSUME(gMovesInfo[MOVE_BRANCH_POKE].category == gMovesInfo[MOVE_LEAFAGE].category);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(item); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BRANCH_POKE, MOVE_LEAFAGE); }
|
||||
} WHEN {
|
||||
if (item == ITEM_ROCKY_HELMET)
|
||||
TURN { EXPECT_MOVE(opponent, MOVE_LEAFAGE); }
|
||||
else
|
||||
TURN { EXPECT_MOVES(opponent, MOVE_LEAFAGE, MOVE_BRANCH_POKE); }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue