diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2532424d24..92a39a54a6 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4224,6 +4224,30 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(AWFUL_EFFECT); } break; + case EFFECT_FLOWER_SHIELD: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS)) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + } + if (hasPartner && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS)) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_DEF)); + } + if (IS_BATTLER_OF_TYPE(FOE(battlerAtk), TYPE_GRASS)) + { + if (aiData->abilities[FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + if (IS_BATTLER_OF_TYPE(BATTLE_PARTNER(FOE(battlerAtk)), TYPE_GRASS)) + { + if (aiData->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + break; case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) diff --git a/test/battle/ai/can_use_all_moves.c b/test/battle/ai/can_use_all_moves.c index 4d2ec08630..83ee14affa 100644 --- a/test/battle/ai/can_use_all_moves.c +++ b/test/battle/ai/can_use_all_moves.c @@ -456,7 +456,6 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600") case EFFECT_ION_DELUGE: case EFFECT_AROMATIC_MIST: case EFFECT_POWDER: - case EFFECT_FLOWER_SHIELD: case EFFECT_ELECTRIFY: //TODO: AI TESTS @@ -467,6 +466,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600") case EFFECT_FAIRY_LOCK: // tests exist elsewhere + case EFFECT_FLOWER_SHIELD: case EFFECT_ROTOTILLER: case EFFECT_GRASSY_TERRAIN: case EFFECT_MISTY_TERRAIN: diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c index 9eac08eb4d..8e9e8e334c 100644 --- a/test/battle/move_effect/flower_shield.c +++ b/test/battle/move_effect/flower_shield.c @@ -37,3 +37,19 @@ DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all Grass-type Pokémon" } TO_DO_BATTLE_TEST("Flower Shield fails if there's no Grass-type Pokémon on the field") + +AI_DOUBLE_BATTLE_TEST("AI uses Flower Shield") +{ + GIVEN { + ASSUME(GetSpeciesType(SPECIES_TANGELA, 0) == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 0) != TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 1) != TYPE_GRASS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + OPPONENT(SPECIES_TANGELA) { Moves(MOVE_FLOWER_SHIELD, MOVE_POUND); } + OPPONENT(SPECIES_TANGELA); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_FLOWER_SHIELD); } + } +}