diff options
Diffstat (limited to 'src/dungeon_ai_targeting_1.c')
-rw-r--r-- | src/dungeon_ai_targeting_1.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/dungeon_ai_targeting_1.c b/src/dungeon_ai_targeting_1.c new file mode 100644 index 0000000..5ff76b0 --- /dev/null +++ b/src/dungeon_ai_targeting_1.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "dungeon_ai_targeting_1.h" + +#include "constants/ability.h" +#include "constants/tactic.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util.h" + +extern void CheckRunAwayVisualFlag(struct DungeonEntity *, bool8 showRunAwayEffect); + +bool8 ShouldAvoidFirstHit(struct DungeonEntity *pokemon, bool8 forceAvoid) +{ + if (!HasTactic(pokemon, TACTIC_AVOID_THE_FIRST_HIT)) + return FALSE; + if (!forceAvoid) + return FALSE; + return TRUE; +} + +bool8 ShouldAvoidEnemies(struct DungeonEntity *pokemon) +{ + if (!EntityExists(pokemon)) + { + return FALSE; + } + else + { + struct DungeonEntityData *pokemonData = pokemon->entityData; + if (pokemonData->terrifiedTurnsLeft != 0) + { + return TRUE; + } + if (pokemonData->isLeader) + { + return FALSE; + } + if (HasAbility(pokemon, ABILITY_RUN_AWAY)) + { + bool8 runAwayActive = pokemonData->HP < pokemonData->maxHP / 2; + if (runAwayActive) + { + return TRUE; + } + } + if (HasTactic(pokemon, TACTIC_GET_AWAY) || + (HasTactic(pokemon, TACTIC_AVOID_TROUBLE) && pokemonData->HP <= pokemonData->maxHP / 2)) + { + return TRUE; + } + return FALSE; + } +} + +bool8 ShouldAvoidEnemiesAndShowEffect(struct DungeonEntity *pokemon, bool8 showRunAwayEffect) +{ + if (ShouldAvoidEnemies(pokemon)) + { + CheckRunAwayVisualFlag(pokemon, showRunAwayEffect); + return TRUE; + } + return FALSE; +} |