ref: 55ca2da25acc0598539eede5359f25f08223de2d
dir: /engine/battle/ai/redundant.asm/
AI_Redundant: ; Check if move effect c will fail because it's already been used. ; Return z if the move is a good choice. ; Return nz if the move is a bad choice. ld a, c ld de, 3 ld hl, .Moves call IsInArray jp nc, .NotRedundant inc hl ld a, [hli] ld h, [hl] ld l, a jp hl .Moves: dbw EFFECT_DREAM_EATER, .DreamEater dbw EFFECT_HEAL, .Heal dbw EFFECT_LIGHT_SCREEN, .LightScreen dbw EFFECT_MIST, .Mist dbw EFFECT_FOCUS_ENERGY, .FocusEnergy dbw EFFECT_CONFUSE, .Confuse dbw EFFECT_TRANSFORM, .Transform dbw EFFECT_REFLECT, .Reflect dbw EFFECT_SUBSTITUTE, .Substitute dbw EFFECT_LEECH_SEED, .LeechSeed dbw EFFECT_DISABLE, .Disable dbw EFFECT_ENCORE, .Encore dbw EFFECT_SNORE, .Snore dbw EFFECT_SLEEP_TALK, .SleepTalk dbw EFFECT_MEAN_LOOK, .MeanLook dbw EFFECT_NIGHTMARE, .Nightmare dbw EFFECT_SPIKES, .Spikes dbw EFFECT_FORESIGHT, .Foresight dbw EFFECT_PERISH_SONG, .PerishSong dbw EFFECT_SANDSTORM, .Sandstorm dbw EFFECT_ATTRACT, .Attract dbw EFFECT_SAFEGUARD, .Safeguard dbw EFFECT_RAIN_DANCE, .RainDance dbw EFFECT_SUNNY_DAY, .SunnyDay dbw EFFECT_TELEPORT, .Teleport dbw EFFECT_MORNING_SUN, .MorningSun dbw EFFECT_SYNTHESIS, .Synthesis dbw EFFECT_MOONLIGHT, .Moonlight dbw EFFECT_SWAGGER, .Swagger dbw EFFECT_FUTURE_SIGHT, .FutureSight db -1 .LightScreen: ld a, [wEnemyScreens] bit SCREENS_LIGHT_SCREEN, a ret .Mist: ld a, [wEnemySubStatus4] bit SUBSTATUS_MIST, a ret .FocusEnergy: ld a, [wEnemySubStatus4] bit SUBSTATUS_FOCUS_ENERGY, a ret .Confuse: ld a, [wPlayerSubStatus3] bit SUBSTATUS_CONFUSED, a ret nz ld a, [wPlayerScreens] bit SCREENS_SAFEGUARD, a ret .Transform: ld a, [wEnemySubStatus5] bit SUBSTATUS_TRANSFORMED, a ret .Reflect: ld a, [wEnemyScreens] bit SCREENS_REFLECT, a ret .Substitute: ld a, [wEnemySubStatus4] bit SUBSTATUS_SUBSTITUTE, a ret .LeechSeed: ld a, [wPlayerSubStatus4] bit SUBSTATUS_LEECH_SEED, a ret .Disable: ld a, [wPlayerDisableCount] and a ret .Encore: ld a, [wPlayerSubStatus5] bit SUBSTATUS_ENCORED, a ret .Snore: .SleepTalk: ld a, [wEnemyMonStatus] and SLP_MASK jr z, .Redundant jr .NotRedundant .MeanLook: ld a, [wEnemySubStatus5] bit SUBSTATUS_CANT_RUN, a ret .Nightmare: ld a, [wBattleMonStatus] and a jr z, .Redundant ld a, [wPlayerSubStatus1] bit SUBSTATUS_NIGHTMARE, a ret .Spikes: ld a, [wPlayerScreens] bit SCREENS_SPIKES, a ret .Foresight: ld a, [wPlayerSubStatus1] bit SUBSTATUS_IDENTIFIED, a ret .PerishSong: ld a, [wPlayerSubStatus1] bit SUBSTATUS_PERISH, a ret .Sandstorm: ld a, [wBattleWeather] cp WEATHER_SANDSTORM jr z, .Redundant jr .NotRedundant .Attract: farcall CheckOppositeGender jr c, .Redundant ld a, [wPlayerSubStatus1] bit SUBSTATUS_IN_LOVE, a ret .Safeguard: ld a, [wEnemyScreens] bit SCREENS_SAFEGUARD, a ret .RainDance: ld a, [wBattleWeather] cp WEATHER_RAIN jr z, .Redundant jr .NotRedundant .SunnyDay: ld a, [wBattleWeather] cp WEATHER_SUN jr z, .Redundant jr .NotRedundant .DreamEater: ld a, [wBattleMonStatus] and SLP_MASK jr z, .Redundant jr .NotRedundant .Swagger: ld a, [wPlayerSubStatus3] bit SUBSTATUS_CONFUSED, a ret .FutureSight: ; BUG: AI does not discourage Future Sight when it's already been used (see docs/bugs_and_glitches.md) ld a, [wEnemyScreens] bit 5, a ret .Heal: .MorningSun: .Synthesis: .Moonlight: farcall AICheckEnemyMaxHP jr nc, .NotRedundant .Teleport: .Redundant: ld a, 1 and a ret .NotRedundant: xor a ret