Add basic Unaware check bad move scoring (#6524)
This commit is contained in:
parent
5b9077e207
commit
9cb96235f9
@ -236,5 +236,6 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 IsBattlerItemEnabled(u32 battler);
|
||||
bool32 IsBattlerPredictedToSwitch(u32 battler);
|
||||
bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 HasBattlerSideAbility(u32 battlerDef, u32 ability, struct AiLogicData *aiData);
|
||||
|
||||
#endif //GUARD_BATTLE_AI_UTIL_H
|
||||
|
||||
@ -1200,6 +1200,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
break;
|
||||
case EFFECT_QUIVER_DANCE:
|
||||
case EFFECT_GEOMANCY:
|
||||
if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, aiData))
|
||||
ADJUST_SCORE(-10);
|
||||
if (gBattleMons[battlerAtk].statStages[STAT_SPATK] >= MAX_STAT_STAGE || !HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL))
|
||||
ADJUST_SCORE(-10);
|
||||
else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED))
|
||||
@ -1735,6 +1737,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
break;
|
||||
case EFFECT_BELLY_DRUM:
|
||||
case EFFECT_FILLET_AWAY:
|
||||
if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, aiData))
|
||||
ADJUST_SCORE(-10);
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(-10);
|
||||
else if (aiData->hpPercents[battlerAtk] <= 60)
|
||||
|
||||
@ -3937,6 +3937,10 @@ static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statI
|
||||
if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
|
||||
return NO_INCREASE;
|
||||
|
||||
// Don't increase stats if opposing battler has Unaware
|
||||
if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, AI_DATA))
|
||||
return NO_INCREASE;
|
||||
|
||||
// Don't increase stat if AI is at +4
|
||||
if (gBattleMons[battlerAtk].statStages[statId] >= MAX_STAT_STAGE - 2)
|
||||
return NO_INCREASE;
|
||||
@ -4423,3 +4427,12 @@ bool32 IsBattlerItemEnabled(u32 battler)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 HasBattlerSideAbility(u32 battler, u32 ability, struct AiLogicData *aiData)
|
||||
{
|
||||
if (aiData->abilities[battler] == ability)
|
||||
return TRUE;
|
||||
if (IsDoubleBattle() && AI_DATA->abilities[BATTLE_PARTNER(battler)] == ability)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -899,3 +899,15 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI considers Focus Sash when det
|
||||
TURN { MOVE(player, MOVE_AIR_SLASH); EXPECT_MOVE(opponent, MOVE_FLAMETHROWER); }
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("AI won't boost stats against opponent with Unaware")
|
||||
{
|
||||
GIVEN {
|
||||
MoveHasAdditionalEffectSelf(MOVE_SWORDS_DANCE, MOVE_EFFECT_ATK_PLUS_2);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
|
||||
PLAYER(SPECIES_QUAGSIRE) { Ability(ABILITY_UNAWARE); Moves(MOVE_TACKLE); }
|
||||
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_BODY_SLAM, MOVE_SWORDS_DANCE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_BODY_SLAM); }
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user