Fix AI not recognising Volt Absorb/FlashFire (#4781)
This commit is contained in:
parent
416519220d
commit
21339cf272
2 changed files with 29 additions and 1 deletions
|
@ -943,6 +943,19 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||||
&& IsNonVolatileStatusMoveEffect(moveEffect))
|
&& IsNonVolatileStatusMoveEffect(moveEffect))
|
||||||
RETURN_SCORE_MINUS(10);
|
RETURN_SCORE_MINUS(10);
|
||||||
break;
|
break;
|
||||||
|
case ABILITY_VOLT_ABSORB:
|
||||||
|
case ABILITY_LIGHTNING_ROD:
|
||||||
|
if (moveType == TYPE_ELECTRIC)
|
||||||
|
RETURN_SCORE_MINUS(20);
|
||||||
|
break;
|
||||||
|
case ABILITY_STORM_DRAIN:
|
||||||
|
if (moveType == TYPE_WATER)
|
||||||
|
RETURN_SCORE_MINUS(20);
|
||||||
|
break;
|
||||||
|
case ABILITY_FLASH_FIRE:
|
||||||
|
if (moveType == TYPE_FIRE)
|
||||||
|
RETURN_SCORE_MINUS(20);
|
||||||
|
break;
|
||||||
} // def ability checks
|
} // def ability checks
|
||||||
|
|
||||||
// target partner ability checks & not attacking partner
|
// target partner ability checks & not attacking partner
|
||||||
|
@ -3386,7 +3399,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||||
score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle);
|
score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle);
|
||||||
break;
|
break;
|
||||||
case EFFECT_ROAR:
|
case EFFECT_ROAR:
|
||||||
if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF)
|
if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF)
|
||||||
|| aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
|
|| aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
|
||||||
break;
|
break;
|
||||||
else if (IsDynamaxed(battlerDef))
|
else if (IsDynamaxed(battlerDef))
|
||||||
|
|
|
@ -1001,6 +1001,21 @@ AI_SINGLE_BATTLE_TEST("AI calculates guaranteed criticals and detects critical i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AI_DOUBLE_BATTLE_TEST("AI recognizes Volt Absorb received from Trace")
|
||||||
|
{
|
||||||
|
GIVEN {
|
||||||
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||||
|
PLAYER(SPECIES_MAGNETON);
|
||||||
|
PLAYER(SPECIES_GARDEVOIR) { Ability(ABILITY_TRACE); }
|
||||||
|
OPPONENT(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); Moves(MOVE_THUNDER_WAVE, MOVE_THUNDERSHOCK, MOVE_WATER_GUN); }
|
||||||
|
OPPONENT(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); Moves(MOVE_THUNDER_WAVE, MOVE_THUNDERSHOCK, MOVE_WATER_GUN); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_THUNDERSHOCK); NOT_EXPECT_MOVE(opponentLeft, MOVE_THUNDER_WAVE); NOT_EXPECT_MOVE(opponentRight, MOVE_THUNDER_WAVE); }
|
||||||
|
} THEN {
|
||||||
|
EXPECT(gBattleResources->aiData->abilities[B_POSITION_PLAYER_RIGHT] == ABILITY_VOLT_ABSORB);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AI_SINGLE_BATTLE_TEST("AI avoids contact moves against rocky helmet")
|
AI_SINGLE_BATTLE_TEST("AI avoids contact moves against rocky helmet")
|
||||||
{
|
{
|
||||||
u32 item;
|
u32 item;
|
||||||
|
|
Loading…
Reference in a new issue