Improved move additional effect handling; now accounts for Shield Dust. (#7650)
This commit is contained in:
parent
70068bf314
commit
4fa26b2296
@ -5661,7 +5661,8 @@ case EFFECT_GUARD_SPLIT:
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED));
|
||||
if (CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED))
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED));
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_DEF_MINUS_1:
|
||||
@ -5669,18 +5670,35 @@ case EFFECT_GUARD_SPLIT:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_ACC_MINUS_1:
|
||||
case MOVE_EFFECT_EVS_MINUS_1:
|
||||
if (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
{
|
||||
u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1;
|
||||
if (CanLowerStat(battlerAtk, battlerDef, aiData, statId))
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId));
|
||||
break;
|
||||
}
|
||||
case MOVE_EFFECT_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_ACC_MINUS_2:
|
||||
case MOVE_EFFECT_EVS_MINUS_2:
|
||||
if (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
{
|
||||
u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2;
|
||||
if (CanLowerStat(battlerAtk, battlerDef, aiData, statId))
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId));
|
||||
break;
|
||||
}
|
||||
case MOVE_EFFECT_LOWER_ATTACK_SIDE:
|
||||
case MOVE_EFFECT_LOWER_DEFENSE_SIDE:
|
||||
case MOVE_EFFECT_LOWER_SPEED_SIDE:
|
||||
case MOVE_EFFECT_LOWER_SP_ATK_SIDE:
|
||||
case MOVE_EFFECT_LOWER_SP_DEF_SIDE:
|
||||
{
|
||||
u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_LOWER_ATTACK_SIDE;
|
||||
if (CanLowerStat(battlerAtk, battlerDef, aiData, statId))
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId));
|
||||
break;
|
||||
}
|
||||
case MOVE_EFFECT_POISON:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
break;
|
||||
|
||||
@ -2056,6 +2056,10 @@ bool32 CanLowerStat(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData,
|
||||
case ABILITY_WHITE_SMOKE:
|
||||
case ABILITY_FULL_METAL_BODY:
|
||||
return FALSE;
|
||||
case ABILITY_SHIELD_DUST:
|
||||
if (!IsBattleMoveStatus(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX)
|
||||
return FALSE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -391,3 +391,21 @@ AI_SINGLE_BATTLE_TEST("AI uses Wide Guard against Earthquake when opponent would
|
||||
TURN { MOVE(player, MOVE_EARTHQUAKE); EXPECT_MOVE(opponent, MOVE_WIDE_GUARD); }
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI sees Shield Dust immunity to additional effects")
|
||||
{
|
||||
u32 ability;
|
||||
PARAMETRIZE { ability = ABILITY_SHIELD_DUST; }
|
||||
PARAMETRIZE { ability = ABILITY_TINTED_LENS; }
|
||||
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
|
||||
PLAYER(SPECIES_VENOMOTH) { Ability(ability); Moves(MOVE_CELEBRATE, MOVE_POUND); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CHILLING_WATER, MOVE_BRINE); }
|
||||
} WHEN {
|
||||
if (ability == ABILITY_SHIELD_DUST)
|
||||
TURN { EXPECT_MOVE(opponent, MOVE_BRINE); }
|
||||
else
|
||||
TURN { EXPECT_MOVE(opponent, MOVE_CHILLING_WATER); }
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user