diff options
Diffstat (limited to 'engine/battle/trainer_ai.asm')
-rw-r--r-- | engine/battle/trainer_ai.asm | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm index 2225dca1..17e68e75 100644 --- a/engine/battle/trainer_ai.asm +++ b/engine/battle/trainer_ai.asm @@ -288,13 +288,19 @@ INCLUDE "data/trainers/special_moves.asm" INCLUDE "data/trainers/parties.asm" TrainerAI: - and a ld a, [wIsInBattle] dec a - ret z ; if not a trainer, we're done here + jr z, .done ; if not a trainer, we're done here ld a, [wLinkState] cp LINK_STATE_BATTLING - ret z + jr z, .done ; if in a link battle, we're done as well + ld a, [wEnemyBattleStatus1] + and 1 << CHARGING_UP | 1 << THRASHING_ABOUT | 1 << STORING_ENERGY ; %10011 + jr nz, .done ; don't follow trainer ai if opponent is in a locked state + ld a, [wEnemyBattleStatus2] + and 1 << USING_RAGE ; %1000000 + jr nz, .done ; don't follow trainer ai if opponent is locked in rage + ; note that this doesn't check for hyper beam recharge which can cause problems ld a, [wTrainerClass] ; what trainer class is this? dec a ld c, a @@ -305,7 +311,7 @@ TrainerAI: add hl, bc ld a, [wAICount] and a - ret z ; if no AI uses left, we're done here + jr z, .done; if no AI uses left, we're done here inc hl inc a jr nz, .getpointer @@ -318,6 +324,9 @@ TrainerAI: ld l, a call Random jp hl +.done + and a + ret INCLUDE "data/trainers/ai_pointers.asm" @@ -377,22 +386,22 @@ ErikaAI: jp AIUseSuperPotion KogaAI: - cp 25 percent + 1 + cp 13 percent - 1 ret nc jp AIUseXAttack BlaineAI: cp 25 percent + 1 ret nc + ld a, 10 + call AICheckIfHPBelowFraction + ret nc jp AIUseSuperPotion SabrinaAI: cp 25 percent + 1 ret nc - ld a, 10 - call AICheckIfHPBelowFraction - ret nc - jp AIUseHyperPotion + jp AIUseXDefend Sony2AI: cp 13 percent - 1 |