diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/data/deck_ai_pointers.asm | 55 | ||||
-rw-r--r-- | src/engine/bank05.asm | 2465 | ||||
-rw-r--r-- | src/engine/deck_ai.asm | 2011 |
3 files changed, 2068 insertions, 2463 deletions
diff --git a/src/data/deck_ai_pointers.asm b/src/data/deck_ai_pointers.asm new file mode 100644 index 0000000..13f148b --- /dev/null +++ b/src/data/deck_ai_pointers.asm @@ -0,0 +1,55 @@ +PointerTable_14000: ; 14000 (05:4000)
+ dw PointerTable_147bd ; SAMS_PRACTICE_DECK
+ dw PointerTable_14668 ; PRACTICE_PLAYER_DECK
+ dw PointerTable_14668 ; SAMS_NORMAL_DECK
+ dw PointerTable_14668 ; CHARMANDER_AND_FRIENDS_DECK
+ dw PointerTable_14668 ; CHARMANDER_EXTRA_DECK
+ dw PointerTable_14668 ; SQUIRTLE_AND_FRIENDS_DECK
+ dw PointerTable_14668 ; SQUIRTLE_EXTRA_DECK
+ dw PointerTable_14668 ; BULBASAUR_AND_FRIENDS_DECK
+ dw PointerTable_14668 ; BULBASAUR_EXTRA_DECK
+ dw PointerTable_14668 ; LIGHTNING_AND_FIRE_DECK
+ dw PointerTable_14668 ; WATER_AND_FIGHTING_DECK
+ dw PointerTable_14668 ; GRASS_AND_PSYCHIC_DECK
+ dw PointerTable_149e8 ; LEGENDARY_MOLTRES_DECK
+ dw PointerTable_14b0f ; LEGENDARY_ZAPDOS_DECK
+ dw PointerTable_14c0b ; LEGENDARY_ARTICUNO_DECK
+ dw PointerTable_14d60 ; LEGENDARY_DRAGONITE_DECK
+ dw PointerTable_14e89 ; FIRST_STRIKE_DECK
+ dw PointerTable_14f0e ; ROCK_CRUSHER_DECK
+ dw PointerTable_14f8f ; GO_GO_RAIN_DANCE_DECK
+ dw PointerTable_15019 ; ZAPPING_SELFDESTRUCT_DECK
+ dw PointerTable_1509b ; FLOWER_POWER_DECK
+ dw PointerTable_15122 ; STRANGE_PSYSHOCK_DECK
+ dw PointerTable_151ad ; WONDERS_OF_SCIENCE_DECK
+ dw PointerTable_15232 ; FIRE_CHARGE_DECK
+ dw PointerTable_152bd ; IM_RONALD_DECK
+ dw PointerTable_1534b ; POWERFUL_RONALD_DECK
+ dw PointerTable_153e8 ; INVINCIBLE_RONALD_DECK
+ dw PointerTable_1546f ; LEGENDARY_RONALD_DECK
+ dw PointerTable_148dc ; MUSCLES_FOR_BRAINS_DECK
+ dw PointerTable_14668 ; HEATED_BATTLE_DECK
+ dw PointerTable_14668 ; LOVE_TO_BATTLE_DECK
+ dw PointerTable_14668 ; EXCAVATION_DECK
+ dw PointerTable_14668 ; BLISTERING_POKEMON_DECK
+ dw PointerTable_14668 ; HARD_POKEMON_DECK
+ dw PointerTable_14668 ; WATERFRONT_POKEMON_DECK
+ dw PointerTable_14668 ; LONELY_FRIENDS_DECK
+ dw PointerTable_14668 ; SOUND_OF_THE_WAVES_DECK
+ dw PointerTable_14668 ; PIKACHU_DECK
+ dw PointerTable_14668 ; BOOM_BOOM_SELFDESTRUCT_DECK
+ dw PointerTable_14668 ; POWER_GENERATOR_DECK
+ dw PointerTable_14668 ; ETCETERA_DECK
+ dw PointerTable_14668 ; FLOWER_GARDEN_DECK
+ dw PointerTable_14668 ; KALEIDOSCOPE_DECK
+ dw PointerTable_14668 ; GHOST_DECK
+ dw PointerTable_14668 ; NAP_TIME_DECK
+ dw PointerTable_14668 ; STRANGE_POWER_DECK
+ dw PointerTable_14668 ; FLYIN_POKEMON_DECK
+ dw PointerTable_14668 ; LOVELY_NIDORAN_DECK
+ dw PointerTable_14668 ; POISON_DECK
+ dw PointerTable_14668 ; ANGER_DECK
+ dw PointerTable_14668 ; FLAMETHROWER_DECK
+ dw PointerTable_14668 ; RESHUFFLE_DECK
+ dw PointerTable_148dc ; IMAKUNI_DECK
+; 1406a
diff --git a/src/engine/bank05.asm b/src/engine/bank05.asm index 2b2b3f8..96ebe50 100644 --- a/src/engine/bank05.asm +++ b/src/engine/bank05.asm @@ -1,58 +1,4 @@ -PointerTable_14000: ; 14000 (05:4000) - dw PointerTable_147bd ; SAMS_PRACTICE_DECK - dw PointerTable_14668 ; PRACTICE_PLAYER_DECK - dw PointerTable_14668 ; SAMS_NORMAL_DECK - dw PointerTable_14668 ; CHARMANDER_AND_FRIENDS_DECK - dw PointerTable_14668 ; CHARMANDER_EXTRA_DECK - dw PointerTable_14668 ; SQUIRTLE_AND_FRIENDS_DECK - dw PointerTable_14668 ; SQUIRTLE_EXTRA_DECK - dw PointerTable_14668 ; BULBASAUR_AND_FRIENDS_DECK - dw PointerTable_14668 ; BULBASAUR_EXTRA_DECK - dw PointerTable_14668 ; LIGHTNING_AND_FIRE_DECK - dw PointerTable_14668 ; WATER_AND_FIGHTING_DECK - dw PointerTable_14668 ; GRASS_AND_PSYCHIC_DECK - dw PointerTable_149e8 ; LEGENDARY_MOLTRES_DECK - dw PointerTable_14b0f ; LEGENDARY_ZAPDOS_DECK - dw PointerTable_14c0b ; LEGENDARY_ARTICUNO_DECK - dw PointerTable_14d60 ; LEGENDARY_DRAGONITE_DECK - dw PointerTable_14e89 ; FIRST_STRIKE_DECK - dw PointerTable_14f0e ; ROCK_CRUSHER_DECK - dw PointerTable_14f8f ; GO_GO_RAIN_DANCE_DECK - dw PointerTable_15019 ; ZAPPING_SELFDESTRUCT_DECK - dw PointerTable_1509b ; FLOWER_POWER_DECK - dw PointerTable_15122 ; STRANGE_PSYSHOCK_DECK - dw PointerTable_151ad ; WONDERS_OF_SCIENCE_DECK - dw PointerTable_15232 ; FIRE_CHARGE_DECK - dw PointerTable_152bd ; IM_RONALD_DECK - dw PointerTable_1534b ; POWERFUL_RONALD_DECK - dw PointerTable_153e8 ; INVINCIBLE_RONALD_DECK - dw PointerTable_1546f ; LEGENDARY_RONALD_DECK - dw PointerTable_148dc ; MUSCLES_FOR_BRAINS_DECK - dw PointerTable_14668 ; HEATED_BATTLE_DECK - dw PointerTable_14668 ; LOVE_TO_BATTLE_DECK - dw PointerTable_14668 ; EXCAVATION_DECK - dw PointerTable_14668 ; BLISTERING_POKEMON_DECK - dw PointerTable_14668 ; HARD_POKEMON_DECK - dw PointerTable_14668 ; WATERFRONT_POKEMON_DECK - dw PointerTable_14668 ; LONELY_FRIENDS_DECK - dw PointerTable_14668 ; SOUND_OF_THE_WAVES_DECK - dw PointerTable_14668 ; PIKACHU_DECK - dw PointerTable_14668 ; BOOM_BOOM_SELFDESTRUCT_DECK - dw PointerTable_14668 ; POWER_GENERATOR_DECK - dw PointerTable_14668 ; ETCETERA_DECK - dw PointerTable_14668 ; FLOWER_GARDEN_DECK - dw PointerTable_14668 ; KALEIDOSCOPE_DECK - dw PointerTable_14668 ; GHOST_DECK - dw PointerTable_14668 ; NAP_TIME_DECK - dw PointerTable_14668 ; STRANGE_POWER_DECK - dw PointerTable_14668 ; FLYIN_POKEMON_DECK - dw PointerTable_14668 ; LOVELY_NIDORAN_DECK - dw PointerTable_14668 ; POISON_DECK - dw PointerTable_14668 ; ANGER_DECK - dw PointerTable_14668 ; FLAMETHROWER_DECK - dw PointerTable_14668 ; RESHUFFLE_DECK - dw $48dc ; IMAKUNI_DECK -; 1406a +INCLUDE "data/deck_ai_pointers.asm" PointerTable_1406a: ; 1406a (5:406a) dw $406c @@ -1657,2414 +1603,7 @@ AIPerformSciptedTurn: ; 1483a (5:483a) ret ; 0x148dc -PointerTable_148dc: ; 148dc (5:48dc) - dw Func_148e8 - dw Func_148e8 - dw Func_148ec - dw Func_148f3 - dw Func_148f7 - dw Func_148fb - -Func_148e8: ; 148e8 (5:48e8) - INCROM $148e8, $148ec - -Func_148ec: ; 148ec (5:48ec) - call InitAIDuelVars - call AIPlayInitialBasicCards - ret -; 0x148f3 - -Func_148f3: ; 148f3 (5:48f3) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x148f7 - -Func_148f7: ; 148f7 (5:48f7) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x148fb - -Func_148fb: ; 148fb (5:48fb) - call _AIPickPrizeCards - ret -; 0x148ff - -Func_148ff: ; 148ff (5:48ff) - INCROM $148ff, $149e8 - -PointerTable_149e8: ; 149e8 (05:49e8) - dw Func_149f4 - dw Func_149f4 - dw Func_149f8 - dw Func_14a09 - dw Func_14a0d - dw Func_14a11 - -Func_149f4: ; 149f4 (5:49f4) - call Func_14a81 - ret -; 0x149f8 - -Func_149f8: ; 149f8 (5:49f8) - call InitAIDuelVars - call Func_14a4a - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc ; Play Area set up was successful - call AIPlayInitialBasicCards - ret -; 0x14a09 - -Func_14a09: ; 14a09 (5:4a09) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14a0d - -Func_14a0d: ; 14a0d (5:4a0d) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14a11 - -Func_14a11: ; 14a11 (5:4a11) - call _AIPickPrizeCards - ret -; 0x14a15 - -Data_14a15: ; 14a15 (5:4a15) - db MAGMAR2 - db GROWLITHE - db VULPIX - db MAGMAR1 - db MOLTRES1 - db MOLTRES2 - db $00 - -Data_14a1c: ; 14a1c (5:4a1c) - db MOLTRES1 - db VULPIX - db GROWLITHE - db MAGMAR2 - db MAGMAR1 - db $00 - -Data_14a22: ; 14a22 (5:4a22) - db MOLTRES2 - db MOLTRES1 - db VULPIX - db GROWLITHE - db MAGMAR2 - db MAGMAR1 - db $00 - -Data_14a29: ; 14a29 (5:4a29) - db GROWLITHE - db $80 - 5 - db VULPIX - db $80 - 5 - db $00 - -Data_14a2e: ; 14a2e (5:4a2e) - db VULPIX - db 3 - db $80 + 0 - - db NINETAILS2 - db 3 - db $80 + 1 - - db GROWLITHE - db 3 - db $80 + 1 - - db ARCANINE2 - db 4 - db $80 + 1 - - db MAGMAR1 - db 4 - db $80 - 1 - - db MAGMAR2 - db 1 - db $80 - 1 - - db MOLTRES2 - db 3 - db $80 + 2 - - db MOLTRES1 - db 4 - db $80 + 2 - - db $00 - -Data_14a47: ; 14a47 (5:4a47) - db ENERGY_REMOVAL - db MOLTRES2 - db $00 - -Func_14a4a: ; 14a4a (5:4a4a) - ld hl, wcda8 - ld de, Data_14a47 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14a15 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14a1c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14a22 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb0 - ld de, Data_14a29 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_14a2e - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14a81 - -Func_14a81: ; 14a81 (5:4a81) - call InitAITurnVars - farcall Func_227d3 - jp nc, .try_attack - - ld a, AI_TRAINER_CARD_PHASE_02 - call AIProcessHandTrainerCards - ld a, AI_TRAINER_CARD_PHASE_04 - call AIProcessHandTrainerCards - -; check if AI can play Moltres2 from hand -; if so, play it. - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - cp MAX_PLAY_AREA_POKEMON - jr nc, .skip_moltres ; skip if bench is full - ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK - call GetTurnDuelistVariable - cp DECK_SIZE - 9 - jr nc, .skip_moltres ; skip if cards in deck <= 9 - ld a, MUK - call CountPokemonIDInBothPlayAreas - jr c, .skip_moltres ; skip if Muk in play - ld a, MOLTRES2 - call LookForCardIDInHandList_Bank5 - jr nc, .skip_moltres ; skip if no Moltres2 in hand - ldh [hTemp_ffa0], a - ld a, OPPACTION_PLAY_BASIC_PKMN - bank1call AIMakeDecision - -.skip_moltres - call AIDecidePlayPokemonCard - ret c - ld a, AI_TRAINER_CARD_PHASE_05 - call AIProcessHandTrainerCards - call Func_14786 - ld a, AI_TRAINER_CARD_PHASE_10 - call AIProcessHandTrainerCards - ld a, AI_TRAINER_CARD_PHASE_11 - call AIProcessHandTrainerCards - -; handle attaching energy from hand - ld a, [wAlreadyPlayedEnergy] - or a - jr nz, .skip_attach_energy - -; if Magmar2 is the Arena card and has no energy attached, -; try attaching an energy card to it from the hand. -; otherwise, run normal AI energy attach routine. - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - call GetCardIDFromDeckIndex - ld a, MAGMAR2 - cp e - jr nz, .attach_normally - ; Magmar2 is the Arena card - call CreateEnergyCardListFromHand - jr c, .skip_attach_energy - ld e, PLAY_AREA_ARENA - call CountNumberOfEnergyCardsAttached - or a - jr nz, .attach_normally - xor a ; PLAY_AREA_ARENA - ldh [hTempPlayAreaLocation_ff9d], a - call AITryToPlayEnergyCard - jr c, .skip_attach_energy - -.attach_normally - call AIProcessAndTryToPlayEnergy - -.skip_attach_energy -; try playing Pokemon cards from hand again - call AIDecidePlayPokemonCard - ld a, AI_TRAINER_CARD_PHASE_13 - call AIProcessHandTrainerCards - -.try_attack - call AIProcessAndTryToUseAttack - ret c - ld a, OPPACTION_FINISH_NO_ATTACK - bank1call AIMakeDecision - ret -; 0x14b0f - -PointerTable_14b0f: ; 14b0f (05:4b0f) - dw Func_14b1b - dw Func_14b1b - dw Func_14b1f - dw Func_14b30 - dw Func_14b34 - dw Func_14b38 - -Func_14b1b: ; 14b1b (5:4b1b) - INCROM $14b1b, $14b1f - -Func_14b1f: ; 14b1f (5:4b1f) - call InitAIDuelVars - call Func_14b6c - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14b30 - -Func_14b30: ; 14b30 (5:4b30) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14b34 - -Func_14b34: ; 14b34 (5:4b34) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14b38 - -Func_14b38: ; 14b38 (5:4b38) - call _AIPickPrizeCards - ret -; 0x14b3c - -Data_14b3c: ; 14b3c (5:4b3c) - db ELECTABUZZ2 - db VOLTORB - db EEVEE - db ZAPDOS1 - db ZAPDOS2 - db ZAPDOS3 - db $00 - -Data_14b43: ; 14b43 (5:4b43) - db ZAPDOS2 - db ZAPDOS1 - db EEVEE - db VOLTORB - db ELECTABUZZ2 - db $00 - -Data_14b49: ; 14b49 (5:4b49) - db EEVEE - db $80 - 5 - db VOLTORB - db $80 - 5 - db ELECTABUZZ2 - db $80 - 5 - db $00 - -Data_14b50: ; 14b50 (5:4b50) - db VOLTORB - db 1 - db $80 - 1 - - db ELECTRODE1 - db 3 - db $80 + 0 - - db ELECTABUZZ2 - db 2 - db $80 - 1 - - db JOLTEON2 - db 3 - db $80 + 1 - - db ZAPDOS1 - db 4 - db $80 + 2 - - db ZAPDOS2 - db 4 - db $80 + 2 - - db ZAPDOS3 - db 3 - db $80 + 1 - - db EEVEE - db 3 - db $80 + 0 - - db $00 - -Data_14b69: ; 14b69 (5:4b69) - db GAMBLER - db ZAPDOS3 - db $00 - -Func_14b6c: ; 14b6c (5:4b6c) - ld hl, wcda8 - ld de, Data_14b69 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14b3c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14b43 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14b43 - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14b50 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14b9a - -Func_14b9a: ; 14b9a (5:4b9a) - INCROM $14b9a, $14c0b - -PointerTable_14c0b: ; 14c0b (5:4c0b) - dw Func_14c17 - dw Func_14c17 - dw Func_14c1b - dw Func_14c2c - dw Func_14c30 - dw Func_14c34 - -Func_14c17: ; 14c17 (5:4c17) - INCROM $14c17, $14c1b - -Func_14c1b: ; 14c1b (5:4c1b) - call InitAIDuelVars - call Func_14c63 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14c2c - -Func_14c2c: ; 14c2c (5:4c2c) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14c30 - -Func_14c30: ; 14c30 (5:4c30) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14c34 - -Func_14c34: ; 14c34 (5:4c34) - call _AIPickPrizeCards - ret -; 0x14c38 - -Data_14c38: ; 14c38 (5:4c38) - db CHANSEY - db LAPRAS - db DITTO - db SEEL - db ARTICUNO1 - db ARTICUNO2 - db $00 - -Data_14c3f: ; 14c3f (5:4c3f) - db ARTICUNO1 - db SEEL - db LAPRAS - db CHANSEY - db DITTO - db $00 - -Data_14c45: ; 14c45 (5:4c45) - db SEEL - db $80 - 3 - db DITTO - db $80 - 3 - db $00 - -Data_14c4a: ; 14c4a (5:4c4a) - db SEEL - db 3 - db $80 + 1 - - db DEWGONG - db 4 - db $80 + 0 - - db LAPRAS - db 3 - db $80 + 0 - - db ARTICUNO1 - db 4 - db $80 + 1 - - db ARTICUNO2 - db 3 - db $80 + 0 - - db CHANSEY - db 0 - db $80 - 8 - - db DITTO - db 3 - db $80 + 0 - - db $00 - -Data_14c60: ; 14c60 (5:4c60) - db GAMBLER - db ARTICUNO2 - db $00 - -Func_14c63: ; 14c63 (5:4c63) - ld hl, wcda8 - ld de, Data_14c60 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14c38 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14c3f - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14c3f - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14c4a - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14c91 - -; this routine handles how Legendary Articuno -; prioritises playing energy cards to each Pokémon. -; first, it makes sure that all Lapras have at least -; 3 energy cards before moving on to Articuno, -; and then to Dewgong and Seel -ScoreLegendaryArticunoCards: ; 14c91 (5:4c91) - call SwapTurn - call CountPrizes - call SwapTurn - cp 3 - ret c - -; player prizes >= 3 -; if Lapras has more than half HP and -; can use second move, check next for Articuno -; otherwise, check if Articuno or Dewgong -; have more than half HP and can use second move -; and if so, the next Pokémon to check is Lapras - ld a, LAPRAS - call CheckForBenchIDAtHalfHPAndCanUseSecondMove - jr c, .articuno - ld a, ARTICUNO1 - call CheckForBenchIDAtHalfHPAndCanUseSecondMove - jr c, .lapras - ld a, DEWGONG - call CheckForBenchIDAtHalfHPAndCanUseSecondMove - jr c, .lapras - jr .articuno - -; the following routines check for certain card IDs in bench -; and call RaiseAIScoreToAllMatchingIDsInBench if these are found. -; for Lapras, an additional check is made to its -; attached energy count, which skips calling the routine -; if this count is >= 3 -.lapras - ld a, LAPRAS - ld b, PLAY_AREA_BENCH_1 - call LookForCardIDInPlayArea_Bank5 - jr nc, .articuno - ld e, a - call CountNumberOfEnergyCardsAttached - cp 3 - jr nc, .articuno - ld a, LAPRAS - call RaiseAIScoreToAllMatchingIDsInBench - ret - -.articuno - ld a, ARTICUNO1 - ld b, PLAY_AREA_BENCH_1 - call LookForCardIDInPlayArea_Bank5 - jr nc, .dewgong - ld a, ARTICUNO1 - call RaiseAIScoreToAllMatchingIDsInBench - ret - -.dewgong - ld a, DEWGONG - ld b, PLAY_AREA_BENCH_1 - call LookForCardIDInPlayArea_Bank5 - jr nc, .seel - ld a, DEWGONG - call RaiseAIScoreToAllMatchingIDsInBench - ret - -.seel - ld a, SEEL - ld b, PLAY_AREA_BENCH_1 - call LookForCardIDInPlayArea_Bank5 - ret nc - ld a, SEEL - call RaiseAIScoreToAllMatchingIDsInBench - ret -; 0x14cf7 - -Func_14cf7: ; 14cf7 (5:4cf7) - INCROM $14cf7, $14d60 - -PointerTable_14d60: ; 14d60 (05:4d60) - dw Func_14d6c - dw Func_14d6c - dw Func_14d70 - dw Func_14d81 - dw Func_14d85 - dw Func_14d89 - -Func_14d6c: ; 14d6c (5:4d6c) - INCROM $14d6c, $14d70 - -Func_14d70: ; 14d70 (5:4d70) - call InitAIDuelVars - call Func_14dc1 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14d81 - -Func_14d81: ; 14d81 (5:4d81) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14d85 - -Func_14d85: ; 14d85 (5:4d85) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14d89 - -Func_14d89: ; 14d89 (5:4d89) - call _AIPickPrizeCards - ret -; 0x14d8d - -Data_14d8d: ; 14d8d (5:4d8d) - db KANGASKHAN - db LAPRAS - db CHARMANDER - db DRATINI - db MAGIKARP - db $00 - -Data_14d93: ; 14d93 (5:4d93) - db CHARMANDER - db MAGIKARP - db DRATINI - db LAPRAS - db KANGASKHAN - db $00 - -Data_14d99: ; 14d99 (5:4d99) - db CHARMANDER - db $80 - 1 - db MAGIKARP - db $80 - 5 - db $00 - -Data_14d9e: ; 14d9e (5:4d9e) - db CHARMANDER - db 3 - db $80 + 1 - - db CHARMELEON - db 4 - db $80 + 1 - - db CHARIZARD - db 5 - db $80 + 0 - - db MAGIKARP - db 3 - db $80 + 1 - - db GYARADOS - db 4 - db $80 - 1 - - db DRATINI - db 2 - db $80 + 0 - - db DRAGONAIR - db 4 - db $80 + 0 - - db DRAGONITE1 - db 3 - db $80 - 1 - - db KANGASKHAN - db 2 - db $80 - 2 - - db LAPRAS - db 3 - db $80 + 0 - - db $00 - -Data_14dbd: ; 14dbd (5:4dbd) - db GAMBLER - db DRAGONITE1 - db KANGASKHAN - db $00 - -Func_14dc1: ; 14dc1 (5:4dc1) - ld hl, wcda8 - ld de, Data_14dbd - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14d8d - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14d93 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14d93 - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14d9e - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14def - -Func_14def: ; 14def (5:4def) - INCROM $14def, $14e89 - -PointerTable_14e89: ; 14e89 (5:4e89) - dw Func_14e95 - dw Func_14e95 - dw Func_14e99 - dw Func_14eaa - dw Func_14eae - dw Func_14eb2 - -Func_14e95: ; 14e95 (5:4e95) - INCROM $14e95, $14e99 - -Func_14e99: ; 14e99 (5:4e99) - call InitAIDuelVars - call Func_14ee0 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14eaa - -Func_14eaa: ; 14eaa (5:4eaa) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14eae - -Func_14eae: ; 14eae (5:4eae) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14eb2 - -Func_14eb2: ; 14eb2 (5:4eb2) - call _AIPickPrizeCards - ret -; 0x14eb6 - -Data_14eb6: ; 14eb6 (5:1eb6) - db HITMONCHAN - db MACHOP - db HITMONLEE - db MANKEY - db $00 - -Data_14ebb: ; 14ebb (5:1ebb) - db MACHOP - db HITMONLEE - db HITMONCHAN - db MANKEY - db $00 - -Data_14ec0: ; 14ec0 (5:1ec0) - db MACHOP - db $80 - 1 - db MACHOKE - db $80 - 1 - db MANKEY - db $80 - 2 - db $00 - -Data_14ec7: ; 14ec7 (5:1ec7) - db MACHOP - db 3 - db $80 - - db MACHOKE - db 4 - db $80 - - db MACHAMP - db 4 - db $80 - 1 - - db HITMONCHAN - db 3 - db $80 - - db HITMONLEE - db 3 - db $80 - - db MANKEY - db 2 - db $80 - 1 - - db PRIMEAPE - db 3 - db $80 - 1 - - db $00 - -Data_14edd: ; 14edd (5:1edd) - db HITMONLEE - db HITMONCHAN - db $00 - -Func_14ee0: ; 14ee0 (5:4ee0) - ld hl, wcda8 - ld de, Data_14edd - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14eb6 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14ebb - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14ebb - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14ec7 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14f0e - -PointerTable_14f0e: ; 14f0e (5:4f0e) - dw Func_14f1a - dw Func_14f1a - dw Func_14f1e - dw Func_14f2f - dw Func_14f33 - dw Func_14f37 - -Func_14f1a: ; 14f1a (5:4f1a) - INCROM $14f1a, $14f1e - -Func_14f1e: ; 14f1e (5:4f1e) - call InitAIDuelVars - call Func_14f61 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14f2f - -Func_14f2f: ; 14f2f (5:4f2f) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14f33 - -Func_14f33: ; 14f33 (5:4f33) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14f37 - -Func_14f37: ; 14f37 (5:4f37) - call _AIPickPrizeCards - ret -; 0x14f3b - -Data_14f3b: ; 14f3b (5:4f3b) - db RHYHORN - db ONIX - db GEODUDE - db DIGLETT - db $00 - -Data_14f40: ; 14f40 (5:4f40) - db DIGLETT - db GEODUDE - db RHYHORN - db ONIX - db $00 - -Data_14f45: ; 14f45 (5:4f45) - db DIGLETT - db $80 - 1 - db $00 - -Data_14f48: ; 14f48 (5:4f48) - db DIGLETT - db 3 - db $80 + 1 - - db DUGTRIO - db 4 - db $80 + 0 - - db GEODUDE - db 2 - db $80 + 1 - - db GRAVELER - db 3 - db $80 + 0 - - db GOLEM - db 4 - db $80 + 0 - - db ONIX - db 2 - db $80 - 1 - - db RHYHORN - db 3 - db $80 + 0 - - db $00 - -Data_14f5e: ; 14f5e (5:4f5e) - db ENERGY_REMOVAL - db RHYHORN - db $00 - -Func_14f61: ; 14f61 (5:4f61) - ld hl, wcda8 - ld de, Data_14f5e - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14f3b - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14f40 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14f40 - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14f48 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x14f8f - -PointerTable_14f8f: ; 14f8f (5:4f8f) - dw Func_14f9b - dw Func_14f9b - dw Func_14f9f - dw Func_14fb0 - dw Func_14fb4 - dw Func_14fb8 - -Func_14f9b: ; 14f9b (5:4f9b) - INCROM $14f9b, $14f9f - -Func_14f9f: ; 14f9f (5:4f9f) - call InitAIDuelVars - call Func_14feb - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x14fb0 - -Func_14fb0: ; 14fb0 (5:4fb0) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14fb4 - -Func_14fb4: ; 14fb4 (5:4fb4) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x14fb8 - -Func_14fb8: ; 14fb8 (5:4fb8) - call _AIPickPrizeCards - ret -; 0x14fbc - -Data_14fbc: ; 14fbc (5:4fbc) - db LAPRAS - db HORSEA - db GOLDEEN - db SQUIRTLE - db $00 - -Data_14fc1: ; 14fc1 (5:4fc1) - db SQUIRTLE - db HORSEA - db GOLDEEN - db LAPRAS - db $00 - -Data_14fc6: ; 14fc6 (5:4fc6) - db SQUIRTLE - db $80 - 3 - db WARTORTLE - db $80 - 2 - db HORSEA - db $80 - 1 - db $00 - -Data_14fcd: ; 14fcd (5:4fcd) - db SQUIRTLE - db 2 - db $80 + 0 - - db WARTORTLE - db 3 - db $80 + 0 - - db BLASTOISE - db 5 - db $80 + 0 - - db GOLDEEN - db 1 - db $80 + 0 - - db SEAKING - db 2 - db $80 + 0 - - db HORSEA - db 2 - db $80 + 0 - - db SEADRA - db 3 - db $80 + 0 - - db LAPRAS - db 3 - db $80 + 0 - - db $00 - -Data_14fe6: ; 14fe6 (5:4fe6) - db GAMBLER - db ENERGY_RETRIEVAL - db SUPER_ENERGY_RETRIEVAL - db BLASTOISE - db $00 - -Func_14feb: ; 14feb (5:4feb) - ld hl, wcda8 - ld de, Data_14fe6 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_14fbc - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_14fc1 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_14fc1 - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_14fcd - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x15019 - -PointerTable_15019: ; 15019 (5:5019) - dw Func_15025 - dw Func_15025 - dw Func_15029 - dw Func_1503a - dw Func_1503e - dw Func_15042 - -Func_15025: ; 15025 (5:5025) - INCROM $15025, $15029 - -Func_15029: ; 15029 (5:5029) - call InitAIDuelVars - call Func_1506d - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x1503a - -Func_1503a: ; 1503a (5:503a) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x1503e - -Func_1503e: ; 1503e (5:503e) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15042 - -Func_15042: ; 15042 (5:5042) - call _AIPickPrizeCards - ret -; 0x15046 - -Data_15046: ; 15046 (5:5046) - db KANGASKHAN - db ELECTABUZZ2 - db TAUROS - db MAGNEMITE1 - db VOLTORB - db $00 - -Data_1504c: ; 1504c (5:504c) - db MAGNEMITE1 - db VOLTORB - db ELECTABUZZ2 - db TAUROS - db KANGASKHAN - db $00 - -Data_15052: ; 15052 (5:5052) - db VOLTORB - db $80 - 1 - db $00 - -Data_15055: ; 15055 (5:5055) - db MAGNEMITE1 - db 3 - db $80 + 1 - - db MAGNETON1 - db 4 - db $80 + 0 - - db VOLTORB - db 3 - db $80 + 1 - - db ELECTRODE1 - db 3 - db $80 + 0 - - db ELECTABUZZ2 - db 1 - db $80 + 0 - - db KANGASKHAN - db 2 - db $80 - 2 - - db TAUROS - db 3 - db $80 + 0 - - db $00 - -Data_1506b: ; 1506b (5:506b) - db KANGASKHAN - db $00 - -Func_1506d: ; 1506d (5:506d) - ld hl, wcda8 - ld de, Data_1506b - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_15046 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_1504c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_1504c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_15055 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x1509b - -PointerTable_1509b: ; 1509b (5:509b) - dw Func_150a7 - dw Func_150a7 - dw Func_150ab - dw Func_150bc - dw Func_150c0 - dw Func_150c4 - -Func_150a7: ; 150a7 (5:50a7) - INCROM $150a7, $150ab - -Func_150ab: ; 150ab (5:50ab) - call InitAIDuelVars - call Func_150f4 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x150bc - -Func_150bc: ; 150bc (5:50bc) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x150c0 - -Func_150c0: ; 150c0 (5:50c0) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x150c4 - -Func_150c4: ; 150c4 (5:50c4) - call _AIPickPrizeCards - ret -; 0x150c8 - -Data_150c8 ; 150c8 (5:50c8) - db ODDISH - db EXEGGCUTE - db BULBASAUR - db $00 - -Data_150cc ; 150cc (5:50cc) - db BULBASAUR - db EXEGGCUTE - db ODDISH - db $00 - -Data_150cf ; 150cf (5:50cf) - db GLOOM - db $80 - 2 - db VILEPLUME - db $80 - 2 - db BULBASAUR - db $80 - 2 - db IVYSAUR - db $80 - 2 - db $00 - -Data_150d9 ; 150d9 (5:50d9) - db BULBASAUR - db 3 - db $80 + 0 - - db IVYSAUR - db 4 - db $80 + 0 - - db VENUSAUR2 - db 4 - db $80 + 0 - - db ODDISH - db 2 - db $80 + 0 - - db GLOOM - db 3 - db $80 - 1 - - db VILEPLUME - db 3 - db $80 - 1 - - db EXEGGCUTE - db 3 - db $80 + 0 - - db EXEGGUTOR - db 22 - db $80 + 0 - - db $00 - -Data_150f2 ; 150f2 (5:50f2) - db VENUSAUR2 - db $00 - -Func_150f4: ; 150f4 (5:50f4) - ld hl, wcda8 - ld de, Data_150f2 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_150c8 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_150cc - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_150cc - ld [hl], e - inc hl - ld [hl], d - -; missing wcdb0 - - ld hl, wcdb2 - ld de, Data_150d9 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x15122 - -PointerTable_15122: ; 15122 (5:5122) - dw Func_1512e - dw Func_1512e - dw Func_15132 - dw Func_15143 - dw Func_15147 - dw Func_1514b - -Func_1512e: ; 1512e (5:512e) - INCROM $1512e, $15132 - -Func_15132: ; 15132 (5:5132) - call InitAIDuelVars - call Func_1517f - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x15143 - -Func_15143: ; 15143 (5:5143) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15147 - -Func_15147: ; 15147 (5:5147) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x1514b - -Func_1514b: ; 1514b (5:514b) - call _AIPickPrizeCards - ret -; 0x1514f - -Data_1514f: ; 1514f (5:514f) - db KANGASKHAN - db CHANSEY - db SNORLAX - db MR_MIME - db ABRA - db $00 - -Data_15155: ; 15155 (5:5155) - db ABRA - db MR_MIME - db KANGASKHAN - db SNORLAX - db CHANSEY - db $00 - -Data_1515b: ; 1515b (5:515b) - db ABRA - db $80 - 3 - db SNORLAX - db $80 - 3 - db KANGASKHAN - db $80 - 1 - db CHANSEY - db $80 - 1 - db $00 - -Data_15164 ; 15164 (5:5164) - db ABRA - db 3 - db $80 + 1 - - db KADABRA - db 3 - db $80 + 0 - - db ALAKAZAM - db 3 - db $80 + 0 - - db MR_MIME - db 2 - db $80 + 0 - - db CHANSEY - db 2 - db $80 - 2 - - db KANGASKHAN - db 4 - db $80 - 2 - - db SNORLAX - db 0 - db $80 - 8 - - db $00 - -Data_1517a ; 1517a (5:517a) - db GAMBLER - db MR_MIME - db ALAKAZAM - db SWITCH - db $00 - -Func_1517f: ; 1517f (5:517f) - ld hl, wcda8 - ld de, Data_1517a - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_1514f - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_15155 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_15155 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_15164 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x151ad - -PointerTable_151ad: ; 151ad (5:51ad) - dw Func_151b9 - dw Func_151b9 - dw Func_151bd - dw Func_151ce - dw Func_151d2 - dw Func_151d6 - -Func_151b9: ; 151b9 (5:51b9) - INCROM $151b9, $151bd - -Func_151bd: ; 151bd (5:51bd) - call InitAIDuelVars - call Func_15204 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x151ce - -Func_151ce: ; 151ce (5:51ce) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x151d2 - -Func_151d2: ; 151d2 (5:51d2) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x151d6 - -Func_151d6: ; 151d6 (5:51d6) - call _AIPickPrizeCards - ret -; 0x151da - -Data_151da: ; 151da (5:51da) - db MEWTWO1 - db MEWTWO3 - db MEWTWO2 - db GRIMER - db KOFFING - db PORYGON - db $00 - -Data_151e1: ; 151e1 (5:51e1) - db GRIMER - db KOFFING - db MEWTWO3 - db MEWTWO2 - db MEWTWO1 - db PORYGON - db $00 - -Data_151e8: ; 151e8 (5:51e8) - db $00 - -Data_151e9: ; 151e9 (5:51e9) - db GRIMER - db 3 - db $80 + 0 - - db MUK - db 4 - db $80 + 0 - - db KOFFING - db 2 - db $80 + 0 - - db WEEZING - db 3 - db $80 + 0 - - db MEWTWO1 - db 2 - db $80 - 1 - - db MEWTWO3 - db 2 - db $80 - 1 - - db MEWTWO2 - db 2 - db $80 - 1 - - db PORYGON - db 2 - db $80 - 1 - - db $00 - -Data_15202: ; 15202 (5:5202) - db MUK - db $00 - -Func_15204: ; 15204 (5:5204) - ld hl, wcda8 - ld de, Data_15202 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_151da - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_151e1 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_151e1 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_151e9 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x15232 - -PointerTable_15232: ; 15232 (5:52PointerTable_12) - dw Func_1523e - dw Func_1523e - dw Func_15242 - dw Func_15253 - dw Func_15257 - dw Func_1525b - -Func_1523e: ; 1523e (5:523e) - INCROM $1523e, $15242 - -Func_15242: ; 15242 (5:5242) - call InitAIDuelVars - call Func_1528f - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x15253 - -Func_15253: ; 15253 (5:5253) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15257 - -Func_15257: ; 15257 (5:5257) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x1525b - -Func_1525b: ; 1525b (5:525b) - call _AIPickPrizeCards - ret -; 0x1525f - -Data_1525f: ; 1525f (5:525f) - db JIGGLYPUFF3 - db CHANSEY - db TAUROS - db MAGMAR1 - db JIGGLYPUFF1 - db GROWLITHE - db $00 - -Data_15266: ; 15266 (5:5266) - db JIGGLYPUFF3 - db CHANSEY - db GROWLITHE - db MAGMAR1 - db JIGGLYPUFF1 - db TAUROS - db $00 - -Data_1526e: ; 1526e (5:526e) - db JIGGLYPUFF1 - db $80 - 1 - db CHANSEY - db $80 - 1 - db GROWLITHE - db $80 - 1 - db $00 - -Data_15274: ; 15274 (5:5274) - db GROWLITHE - db 3 - db $80 + 0 - - db ARCANINE2 - db 4 - db $80 + 0 - - db MAGMAR1 - db 3 - db $80 + 0 - - db JIGGLYPUFF1 - db 3 - db $80 + 0 - - db JIGGLYPUFF3 - db 2 - db $80 + 0 - - db WIGGLYTUFF - db 3 - db $80 + 0 - - db CHANSEY - db 4 - db $80 + 0 - - db TAUROS - db 3 - db $80 + 0 - - db $00 - -Data_1528d: ; 1528d (5:528d) - db GAMBLER - db $00 - -Func_1528f: ; 1528f (5:528f) - ld hl, wcda8 - ld de, Data_1528d - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_1525f - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_15266 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_15266 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_15274 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x152bd - -PointerTable_152bd: ; 152bd (5:52bd) - dw Func_152c9 - dw Func_152c9 - dw Func_152cd - dw Func_152de - dw Func_152e2 - dw Func_152e6 - -Func_152c9: ; 152c9 (5:52c9) - INCROM $152c9, $152cd - -Func_152cd: ; 152cd (5:52cd) - call InitAIDuelVars - call Func_1531d - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x152de - -Func_152de: ; 152de (5:52de) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x152e2 - -Func_152e2: ; 152e2 (5:52e2) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x152e6 - -Func_152e6: ; 152e6 (5:52e6) - call _AIPickPrizeCards - ret -; 0x152ea - -Data_152ea: ; 152ea (5:52ea) - db LAPRAS - db SEEL - db CHARMANDER - db CUBONE - db SQUIRTLE - db GROWLITHE - db $00 - -Data_152f1: ; 152f1 (5:52f1) - db CHARMANDER - db SQUIRTLE - db SEEL - db CUBONE - db GROWLITHE - db LAPRAS - db $00 - -Data_152f8: ; 152f8 (5:52f8) - db $00 - -Data_152f9: ; 152f9 (5:52f9) - db CHARMANDER - db 3 - db $80 + 0 - - db CHARMELEON - db 5 - db $80 + 0 - - db GROWLITHE - db 2 - db $80 + 0 - - db ARCANINE2 - db 4 - db $80 + 0 - - db SQUIRTLE - db 2 - db $80 + 0 - - db WARTORTLE - db 3 - db $80 + 0 - - db SEEL - db 3 - db $80 + 0 - - db DEWGONG - db 4 - db $80 + 0 - - db LAPRAS - db 3 - db $80 + 0 - - db CUBONE - db 3 - db $80 + 0 - - db MAROWAK1 - db 3 - db $80 + 0 - - db $00 - -Data_1531b: ; 1531b (5:531b) - db LAPRAS - db $00 - -Func_1531d: ; 1531d (5:531d) - ld hl, wcda8 - ld de, Data_1531b - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_152ea - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_152f1 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_152f1 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_152f9 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x1534b - -PointerTable_1534b: ; 1534b (5:534b) - dw Func_15357 - dw Func_15357 - dw Func_1535b - dw Func_1536c - dw Func_15370 - dw Func_15374 - -Func_15357: ; 15357 (5:5357) - INCROM $15357, $1535b - -Func_1535b: ; 1535b (5:535b) - call InitAIDuelVars - call Func_153ba - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x1536c - -Func_1536c: ; 1536c (5:536c) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15370 - -Func_15370: ; 15370 (5:5370) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15374 - -Func_15374: ; 15374 (5:5374) - call _AIPickPrizeCards - ret -; 0x15378 - -Data_15378: ; 15378 (5:5378) - db KANGASKHAN - db ELECTABUZZ2 - db HITMONCHAN - db MR_MIME - db LICKITUNG - db HITMONLEE - db TAUROS - db JYNX - db MEWTWO1 - db DODUO - db $00 - -Data_15383: ; 15383 (5:5383) - db KANGASKHAN - db HITMONLEE - db HITMONCHAN - db TAUROS - db DODUO - db JYNX - db MEWTWO1 - db ELECTABUZZ2 - db MR_MIME - db LICKITUNG - db $00 - -Data_1538e: ; 1538e (5:538e) - db KANGASKHAN - db $80 - 1 - db DODUO - db $80 - 1 - db DODRIO - db $80 - 1 - db $00 - -Data_15395: ; 15395 (5:5395) - db ELECTABUZZ2 - db 2 - db $80 + 1 - - db HITMONLEE - db 3 - db $80 + 1 - - db HITMONCHAN - db 3 - db $80 + 1 - - db MR_MIME - db 2 - db $80 + 0 - - db JYNX - db 3 - db $80 + 0 - - db MEWTWO1 - db 2 - db $80 + 0 - - db DODUO - db 3 - db $80 - 1 - - db DODRIO - db 3 - db $80 - 1 - - db LICKITUNG - db 2 - db $80 + 0 - - db KANGASKHAN - db 4 - db $80 - 1 - - db TAUROS - db 3 - db $80 + 0 - - db $00 - -Data_153b7: ; 153b7 (5:53b7) - db GAMBLER - db ENERGY_REMOVAL - db $00 - -Func_153ba: ; 153ba (5:53ba) - ld hl, wcda8 - ld de, Data_153b7 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_15378 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_15383 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_15383 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_15395 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x153e8 - -PointerTable_153e8: ; 153e8 (5:53e8) - dw Func_153f4 - dw Func_153f4 - dw Func_153f8 - dw Func_15409 - dw Func_1540d - dw Func_15411 - -Func_153f4: ; 153f4 (5:53f4) - INCROM $153f4, $153f8 - -Func_153f8: ; 153f8 (5:53f8) - call InitAIDuelVars - call Func_15441 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x15409 - -Func_15409: ; 15409 (5:5409) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x1540d - -Func_1540d: ; 1540d (5:540d) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15411 - -Func_15411: ; 15411 (5:5411) - call _AIPickPrizeCards - ret -; 0x15415 - -Data_15415: ; 15415 (5:5415) - db KANGASKHAN - db MAGMAR2 - db CHANSEY - db GEODUDE - db SCYTHER - db GRIMER - db $00 - -Data_1541c: ; 1541c (5:541c) - db GRIMER - db SCYTHER - db GEODUDE - db CHANSEY - db MAGMAR2 - db KANGASKHAN - db $00 - -Data_15423: ; 15423 (5:5423) - db GRIMER - db $80 - 1 - db $00 - -Data_15426: ; 15426 (5:5426) - db GRIMER - db 1 - db $80 - 1 - - db MUK - db 3 - db $80 - 1 - - db SCYTHER - db 4 - db $80 + 1 - - db MAGMAR2 - db 2 - db $80 + 0 - - db GEODUDE - db 2 - db $80 + 0 - - db GRAVELER - db 3 - db $80 + 0 - - db CHANSEY - db 4 - db $80 + 0 - - db KANGASKHAN - db 4 - db $80 - 1 - - db $00 - -Data_1543f: ; 1543f (5:543f) - db GAMBLER - db $00 - -Func_15441: ; 15441 (5:5441) - ld hl, wcda8 - ld de, Data_1543f - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_15415 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_1541c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_1541c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_15426 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x1546f - -PointerTable_1546f: ; 1546f (5:546f) - dw Func_1547b - dw Func_1547b - dw Func_1547f - dw Func_15490 - dw Func_15494 - dw Func_15498 - -Func_1547b: ; 1547b (5:547b) - INCROM $1547b, $1547f - -Func_1547f: ; 1547f (5:547f) - call InitAIDuelVars - call Func_154d9 - call SetUpBossStartingHandAndDeck - call TrySetUpBossStartingPlayArea - ret nc - call AIPlayInitialBasicCards - ret -; 0x15490 - -Func_15490: ; 15490 (5:5490) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15494 - -Func_15494: ; 15494 (5:5494) - call AIDecideBenchPokemonToSwitchTo - ret -; 0x15498 - -Func_15498: ; 15498 (5:5498) - call _AIPickPrizeCards - ret -; 0x1549c - -Data_1549c: ; 1549c (5:549c) - db KANGASKHAN - db DRATINI - db EEVEE - db ZAPDOS3 - db ARTICUNO2 - db MOLTRES2 - db $00 - -Data_154a3: ; 154a3 (5:54a3) - db KANGASKHAN - db DRATINI - db EEVEE - db $00 - -Data_154a7: ; 154a7 (5:54a7) - db MOLTRES2 - db ZAPDOS3 - db KANGASKHAN - db DRATINI - db EEVEE - db ARTICUNO2 - db $00 - -Data_154ae: ; 154ae (5:54ae) - db EEVEE - db $80 - 2 - db $00 - -Data_154b1: ; 154b1 (5:54b1) - db FLAREON1 - db 3 - db $80 - - db MOLTRES2 - db 3 - db $80 - - db VAPOREON1 - db 3 - db $80 - - db ARTICUNO2 - db 0 - db $78 - - db JOLTEON1 - db 4 - db $80 - - db ZAPDOS3 - db 0 - db $78 - - db KANGASKHAN - db 4 - db $7f - - db EEVEE - db 3 - db $80 - - db DRATINI - db 3 - db $80 - - db DRAGONAIR - db 4 - db $80 - - db DRAGONITE1 - db 3 - db $80 - - db $00 - -Data_154d3: ; 154d3 (5:54d3) - db MOLTRES2 - db ARTICUNO2 - db ZAPDOS3 - db DRAGONITE1 - db GAMBLER - db $00 - -Func_154d9: ; 154d9 (5:54d9) - ld hl, wcda8 - ld de, Data_154d3 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdaa - ld de, Data_1549c - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdac - ld de, Data_154a3 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdae - ld de, Data_154a7 - ld [hl], e - inc hl - ld [hl], d - - ld hl, wcdb2 - ld de, Data_154b1 - ld [hl], e - inc hl - ld [hl], d - - ret -; 0x15507 +INCLUDE "engine/deck_ai.asm" Func_15507: ; 15507 (5:5507) INCROM $15507, $155d2 diff --git a/src/engine/deck_ai.asm b/src/engine/deck_ai.asm new file mode 100644 index 0000000..f62239e --- /dev/null +++ b/src/engine/deck_ai.asm @@ -0,0 +1,2011 @@ +; AI card retreat score bonus
+; when the AI retreat routine runs through the Bench to choose
+; a Pokemon to switch to, it looks up in this list and if
+; a card ID matches, applies a retreat score bonus to this card.
+; positive (negative) means more (less) likely to switch to this card.
+airetreat: MACRO
+ db \1 ; card ID
+ db $80 + \2 ; retreat score (ranges between -128 and 127)
+ENDM
+
+; AI card energy attach score bonus
+; when the AI energy attachment run through the Play Area to choose
+; a Pokemon to attach an energy card, it looks up in this list and if
+; a card ID matches, skips this card if the maximum number of energy
+; cards attached has been reached. If it hasn't been reached, additionally
+; applies a positive (or negative) AI score to attach energy to this card.
+aienergy: MACRO
+ db \1 ; card ID
+ db \2 ; maximum number of attached cards
+ db $80 + \3 ; energy score (ranges between -128 and 127)
+ENDM
+
+PointerTable_148dc: ; 148dc (5:48dc)
+ dw Func_148e8
+ dw Func_148e8
+ dw Func_148ec
+ dw Func_148f3
+ dw Func_148f7
+ dw Func_148fb
+
+Func_148e8: ; 148e8 (5:48e8)
+ INCROM $148e8, $148ec
+
+Func_148ec: ; 148ec (5:48ec)
+ call InitAIDuelVars
+ call AIPlayInitialBasicCards
+ ret
+; 0x148f3
+
+Func_148f3: ; 148f3 (5:48f3)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x148f7
+
+Func_148f7: ; 148f7 (5:48f7)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x148fb
+
+Func_148fb: ; 148fb (5:48fb)
+ call _AIPickPrizeCards
+ ret
+; 0x148ff
+
+Func_148ff: ; 148ff (5:48ff)
+ INCROM $148ff, $149e8
+
+PointerTable_149e8: ; 149e8 (05:49e8)
+ dw Func_149f4
+ dw Func_149f4
+ dw Func_149f8
+ dw Func_14a09
+ dw Func_14a0d
+ dw Func_14a11
+
+Func_149f4: ; 149f4 (5:49f4)
+ call Func_14a81
+ ret
+; 0x149f8
+
+Func_149f8: ; 149f8 (5:49f8)
+ call InitAIDuelVars
+ call Func_14a4a
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc ; Play Area set up was successful
+ call AIPlayInitialBasicCards
+ ret
+; 0x14a09
+
+Func_14a09: ; 14a09 (5:4a09)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14a0d
+
+Func_14a0d: ; 14a0d (5:4a0d)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14a11
+
+Func_14a11: ; 14a11 (5:4a11)
+ call _AIPickPrizeCards
+ ret
+; 0x14a15
+
+Data_14a15: ; 14a15 (5:4a15)
+ db MAGMAR2
+ db GROWLITHE
+ db VULPIX
+ db MAGMAR1
+ db MOLTRES1
+ db MOLTRES2
+ db $00
+
+Data_14a1c: ; 14a1c (5:4a1c)
+ db MOLTRES1
+ db VULPIX
+ db GROWLITHE
+ db MAGMAR2
+ db MAGMAR1
+ db $00
+
+Data_14a22: ; 14a22 (5:4a22)
+ db MOLTRES2
+ db MOLTRES1
+ db VULPIX
+ db GROWLITHE
+ db MAGMAR2
+ db MAGMAR1
+ db $00
+
+Data_14a29: ; 14a29 (5:4a29)
+ airetreat GROWLITHE, -5
+ airetreat VULPIX, -5
+ db $00
+
+Data_14a2e: ; 14a2e (5:4a2e)
+ aienergy VULPIX, 3, +0
+ aienergy NINETAILS2, 3, +1
+ aienergy GROWLITHE, 3, +1
+ aienergy ARCANINE2, 4, +1
+ aienergy MAGMAR1, 4, -1
+ aienergy MAGMAR2, 1, -1
+ aienergy MOLTRES2, 3, +2
+ aienergy MOLTRES1, 4, +2
+ db $00
+
+Data_14a47: ; 14a47 (5:4a47)
+ db ENERGY_REMOVAL
+ db MOLTRES2
+ db $00
+
+Func_14a4a: ; 14a4a (5:4a4a)
+ ld hl, wcda8
+ ld de, Data_14a47
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14a15
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14a1c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14a22
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdb0
+ ld de, Data_14a29
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdb2
+ ld de, Data_14a2e
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14a81
+
+Func_14a81: ; 14a81 (5:4a81)
+ call InitAITurnVars
+ farcall Func_227d3
+ jp nc, .try_attack
+
+ ld a, AI_TRAINER_CARD_PHASE_02
+ call AIProcessHandTrainerCards
+ ld a, AI_TRAINER_CARD_PHASE_04
+ call AIProcessHandTrainerCards
+
+; check if AI can play Moltres2 from hand
+; if so, play it.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ jr nc, .skip_moltres ; skip if bench is full
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE - 9
+ jr nc, .skip_moltres ; skip if cards in deck <= 9
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ jr c, .skip_moltres ; skip if Muk in play
+ ld a, MOLTRES2
+ call LookForCardIDInHandList_Bank5
+ jr nc, .skip_moltres ; skip if no Moltres2 in hand
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_PLAY_BASIC_PKMN
+ bank1call AIMakeDecision
+
+.skip_moltres
+ call AIDecidePlayPokemonCard
+ ret c
+ ld a, AI_TRAINER_CARD_PHASE_05
+ call AIProcessHandTrainerCards
+ call Func_14786
+ ld a, AI_TRAINER_CARD_PHASE_10
+ call AIProcessHandTrainerCards
+ ld a, AI_TRAINER_CARD_PHASE_11
+ call AIProcessHandTrainerCards
+
+; handle attaching energy from hand
+ ld a, [wAlreadyPlayedEnergy]
+ or a
+ jr nz, .skip_attach_energy
+
+; if Magmar2 is the Arena card and has no energy attached,
+; try attaching an energy card to it from the hand.
+; otherwise, run normal AI energy attach routine.
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, MAGMAR2
+ cp e
+ jr nz, .attach_normally
+ ; Magmar2 is the Arena card
+ call CreateEnergyCardListFromHand
+ jr c, .skip_attach_energy
+ ld e, PLAY_AREA_ARENA
+ call CountNumberOfEnergyCardsAttached
+ or a
+ jr nz, .attach_normally
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call AITryToPlayEnergyCard
+ jr c, .skip_attach_energy
+
+.attach_normally
+ call AIProcessAndTryToPlayEnergy
+
+.skip_attach_energy
+; try playing Pokemon cards from hand again
+ call AIDecidePlayPokemonCard
+ ld a, AI_TRAINER_CARD_PHASE_13
+ call AIProcessHandTrainerCards
+
+.try_attack
+ call AIProcessAndTryToUseAttack
+ ret c
+ ld a, OPPACTION_FINISH_NO_ATTACK
+ bank1call AIMakeDecision
+ ret
+; 0x14b0f
+
+PointerTable_14b0f: ; 14b0f (05:4b0f)
+ dw Func_14b1b
+ dw Func_14b1b
+ dw Func_14b1f
+ dw Func_14b30
+ dw Func_14b34
+ dw Func_14b38
+
+Func_14b1b: ; 14b1b (5:4b1b)
+ INCROM $14b1b, $14b1f
+
+Func_14b1f: ; 14b1f (5:4b1f)
+ call InitAIDuelVars
+ call Func_14b6c
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14b30
+
+Func_14b30: ; 14b30 (5:4b30)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14b34
+
+Func_14b34: ; 14b34 (5:4b34)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14b38
+
+Func_14b38: ; 14b38 (5:4b38)
+ call _AIPickPrizeCards
+ ret
+; 0x14b3c
+
+Data_14b3c: ; 14b3c (5:4b3c)
+ db ELECTABUZZ2
+ db VOLTORB
+ db EEVEE
+ db ZAPDOS1
+ db ZAPDOS2
+ db ZAPDOS3
+ db $00
+
+Data_14b43: ; 14b43 (5:4b43)
+ db ZAPDOS2
+ db ZAPDOS1
+ db EEVEE
+ db VOLTORB
+ db ELECTABUZZ2
+ db $00
+
+Data_14b49: ; 14b49 (5:4b49)
+ airetreat EEVEE, -5
+ airetreat VOLTORB, -5
+ airetreat ELECTABUZZ2, -5
+ db $00
+
+Data_14b50: ; 14b50 (5:4b50)
+ aienergy VOLTORB, 1, -1
+ aienergy ELECTRODE1, 3, +0
+ aienergy ELECTABUZZ2, 2, -1
+ aienergy JOLTEON2, 3, +1
+ aienergy ZAPDOS1, 4, +2
+ aienergy ZAPDOS2, 4, +2
+ aienergy ZAPDOS3, 3, +1
+ aienergy EEVEE, 3, +0
+ db $00
+
+Data_14b69: ; 14b69 (5:4b69)
+ db GAMBLER
+ db ZAPDOS3
+ db $00
+
+Func_14b6c: ; 14b6c (5:4b6c)
+ ld hl, wcda8
+ ld de, Data_14b69
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14b3c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14b43
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14b43
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14b50
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14b9a
+
+Func_14b9a: ; 14b9a (5:4b9a)
+ INCROM $14b9a, $14c0b
+
+PointerTable_14c0b: ; 14c0b (5:4c0b)
+ dw Func_14c17
+ dw Func_14c17
+ dw Func_14c1b
+ dw Func_14c2c
+ dw Func_14c30
+ dw Func_14c34
+
+Func_14c17: ; 14c17 (5:4c17)
+ INCROM $14c17, $14c1b
+
+Func_14c1b: ; 14c1b (5:4c1b)
+ call InitAIDuelVars
+ call Func_14c63
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14c2c
+
+Func_14c2c: ; 14c2c (5:4c2c)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14c30
+
+Func_14c30: ; 14c30 (5:4c30)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14c34
+
+Func_14c34: ; 14c34 (5:4c34)
+ call _AIPickPrizeCards
+ ret
+; 0x14c38
+
+Data_14c38: ; 14c38 (5:4c38)
+ db CHANSEY
+ db LAPRAS
+ db DITTO
+ db SEEL
+ db ARTICUNO1
+ db ARTICUNO2
+ db $00
+
+Data_14c3f: ; 14c3f (5:4c3f)
+ db ARTICUNO1
+ db SEEL
+ db LAPRAS
+ db CHANSEY
+ db DITTO
+ db $00
+
+Data_14c45: ; 14c45 (5:4c45)
+ airetreat SEEL, -3
+ airetreat DITTO, -3
+ db $00
+
+Data_14c4a: ; 14c4a (5:4c4a)
+ aienergy SEEL, 3, +1
+ aienergy DEWGONG, 4, +0
+ aienergy LAPRAS, 3, +0
+ aienergy ARTICUNO1, 4, +1
+ aienergy ARTICUNO2, 3, +0
+ aienergy CHANSEY, 0, -8
+ aienergy DITTO, 3, +0
+ db $00
+
+Data_14c60: ; 14c60 (5:4c60)
+ db GAMBLER
+ db ARTICUNO2
+ db $00
+
+Func_14c63: ; 14c63 (5:4c63)
+ ld hl, wcda8
+ ld de, Data_14c60
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14c38
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14c3f
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14c3f
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14c4a
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14c91
+
+; this routine handles how Legendary Articuno
+; prioritises playing energy cards to each Pokémon.
+; first, it makes sure that all Lapras have at least
+; 3 energy cards before moving on to Articuno,
+; and then to Dewgong and Seel
+ScoreLegendaryArticunoCards: ; 14c91 (5:4c91)
+ call SwapTurn
+ call CountPrizes
+ call SwapTurn
+ cp 3
+ ret c
+
+; player prizes >= 3
+; if Lapras has more than half HP and
+; can use second move, check next for Articuno
+; otherwise, check if Articuno or Dewgong
+; have more than half HP and can use second move
+; and if so, the next Pokémon to check is Lapras
+ ld a, LAPRAS
+ call CheckForBenchIDAtHalfHPAndCanUseSecondMove
+ jr c, .articuno
+ ld a, ARTICUNO1
+ call CheckForBenchIDAtHalfHPAndCanUseSecondMove
+ jr c, .lapras
+ ld a, DEWGONG
+ call CheckForBenchIDAtHalfHPAndCanUseSecondMove
+ jr c, .lapras
+ jr .articuno
+
+; the following routines check for certain card IDs in bench
+; and call RaiseAIScoreToAllMatchingIDsInBench if these are found.
+; for Lapras, an additional check is made to its
+; attached energy count, which skips calling the routine
+; if this count is >= 3
+.lapras
+ ld a, LAPRAS
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank5
+ jr nc, .articuno
+ ld e, a
+ call CountNumberOfEnergyCardsAttached
+ cp 3
+ jr nc, .articuno
+ ld a, LAPRAS
+ call RaiseAIScoreToAllMatchingIDsInBench
+ ret
+
+.articuno
+ ld a, ARTICUNO1
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank5
+ jr nc, .dewgong
+ ld a, ARTICUNO1
+ call RaiseAIScoreToAllMatchingIDsInBench
+ ret
+
+.dewgong
+ ld a, DEWGONG
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank5
+ jr nc, .seel
+ ld a, DEWGONG
+ call RaiseAIScoreToAllMatchingIDsInBench
+ ret
+
+.seel
+ ld a, SEEL
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank5
+ ret nc
+ ld a, SEEL
+ call RaiseAIScoreToAllMatchingIDsInBench
+ ret
+; 0x14cf7
+
+Func_14cf7: ; 14cf7 (5:4cf7)
+ INCROM $14cf7, $14d60
+
+PointerTable_14d60: ; 14d60 (05:4d60)
+ dw Func_14d6c
+ dw Func_14d6c
+ dw Func_14d70
+ dw Func_14d81
+ dw Func_14d85
+ dw Func_14d89
+
+Func_14d6c: ; 14d6c (5:4d6c)
+ INCROM $14d6c, $14d70
+
+Func_14d70: ; 14d70 (5:4d70)
+ call InitAIDuelVars
+ call Func_14dc1
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14d81
+
+Func_14d81: ; 14d81 (5:4d81)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14d85
+
+Func_14d85: ; 14d85 (5:4d85)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14d89
+
+Func_14d89: ; 14d89 (5:4d89)
+ call _AIPickPrizeCards
+ ret
+; 0x14d8d
+
+Data_14d8d: ; 14d8d (5:4d8d)
+ db KANGASKHAN
+ db LAPRAS
+ db CHARMANDER
+ db DRATINI
+ db MAGIKARP
+ db $00
+
+Data_14d93: ; 14d93 (5:4d93)
+ db CHARMANDER
+ db MAGIKARP
+ db DRATINI
+ db LAPRAS
+ db KANGASKHAN
+ db $00
+
+Data_14d99: ; 14d99 (5:4d99)
+ airetreat CHARMANDER, -1
+ airetreat MAGIKARP, -5
+ db $00
+
+Data_14d9e: ; 14d9e (5:4d9e)
+ aienergy CHARMANDER, 3, +1
+ aienergy CHARMELEON, 4, +1
+ aienergy CHARIZARD, 5, +0
+ aienergy MAGIKARP, 3, +1
+ aienergy GYARADOS, 4, -1
+ aienergy DRATINI, 2, +0
+ aienergy DRAGONAIR, 4, +0
+ aienergy DRAGONITE1, 3, -1
+ aienergy KANGASKHAN, 2, -2
+ aienergy LAPRAS, 3, +0
+ db $00
+
+Data_14dbd: ; 14dbd (5:4dbd)
+ db GAMBLER
+ db DRAGONITE1
+ db KANGASKHAN
+ db $00
+
+Func_14dc1: ; 14dc1 (5:4dc1)
+ ld hl, wcda8
+ ld de, Data_14dbd
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14d8d
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14d93
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14d93
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14d9e
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14def
+
+Func_14def: ; 14def (5:4def)
+ INCROM $14def, $14e89
+
+PointerTable_14e89: ; 14e89 (5:4e89)
+ dw Func_14e95
+ dw Func_14e95
+ dw Func_14e99
+ dw Func_14eaa
+ dw Func_14eae
+ dw Func_14eb2
+
+Func_14e95: ; 14e95 (5:4e95)
+ INCROM $14e95, $14e99
+
+Func_14e99: ; 14e99 (5:4e99)
+ call InitAIDuelVars
+ call Func_14ee0
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14eaa
+
+Func_14eaa: ; 14eaa (5:4eaa)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14eae
+
+Func_14eae: ; 14eae (5:4eae)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14eb2
+
+Func_14eb2: ; 14eb2 (5:4eb2)
+ call _AIPickPrizeCards
+ ret
+; 0x14eb6
+
+Data_14eb6: ; 14eb6 (5:1eb6)
+ db HITMONCHAN
+ db MACHOP
+ db HITMONLEE
+ db MANKEY
+ db $00
+
+Data_14ebb: ; 14ebb (5:1ebb)
+ db MACHOP
+ db HITMONLEE
+ db HITMONCHAN
+ db MANKEY
+ db $00
+
+Data_14ec0: ; 14ec0 (5:1ec0)
+ airetreat MACHOP, - 1
+ airetreat MACHOKE, - 1
+ airetreat MANKEY, - 2
+ db $00
+
+Data_14ec7: ; 14ec7 (5:1ec7)
+ aienergy MACHOP, 3, +0
+ aienergy MACHOKE, 4, +0
+ aienergy MACHAMP, 4, -1
+ aienergy HITMONCHAN, 3, +0
+ aienergy HITMONLEE, 3, +0
+ aienergy MANKEY, 2, -1
+ aienergy PRIMEAPE, 3, -1
+ db $00
+
+Data_14edd: ; 14edd (5:1edd)
+ db HITMONLEE
+ db HITMONCHAN
+ db $00
+
+Func_14ee0: ; 14ee0 (5:4ee0)
+ ld hl, wcda8
+ ld de, Data_14edd
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14eb6
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14ebb
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14ebb
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14ec7
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14f0e
+
+PointerTable_14f0e: ; 14f0e (5:4f0e)
+ dw Func_14f1a
+ dw Func_14f1a
+ dw Func_14f1e
+ dw Func_14f2f
+ dw Func_14f33
+ dw Func_14f37
+
+Func_14f1a: ; 14f1a (5:4f1a)
+ INCROM $14f1a, $14f1e
+
+Func_14f1e: ; 14f1e (5:4f1e)
+ call InitAIDuelVars
+ call Func_14f61
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14f2f
+
+Func_14f2f: ; 14f2f (5:4f2f)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14f33
+
+Func_14f33: ; 14f33 (5:4f33)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14f37
+
+Func_14f37: ; 14f37 (5:4f37)
+ call _AIPickPrizeCards
+ ret
+; 0x14f3b
+
+Data_14f3b: ; 14f3b (5:4f3b)
+ db RHYHORN
+ db ONIX
+ db GEODUDE
+ db DIGLETT
+ db $00
+
+Data_14f40: ; 14f40 (5:4f40)
+ db DIGLETT
+ db GEODUDE
+ db RHYHORN
+ db ONIX
+ db $00
+
+Data_14f45: ; 14f45 (5:4f45)
+ airetreat DIGLETT, -1
+ db $00
+
+Data_14f48: ; 14f48 (5:4f48)
+ aienergy DIGLETT, 3, +1
+ aienergy DUGTRIO, 4, +0
+ aienergy GEODUDE, 2, +1
+ aienergy GRAVELER, 3, +0
+ aienergy GOLEM, 4, +0
+ aienergy ONIX, 2, -1
+ aienergy RHYHORN, 3, +0
+ db $00
+
+Data_14f5e: ; 14f5e (5:4f5e)
+ db ENERGY_REMOVAL
+ db RHYHORN
+ db $00
+
+Func_14f61: ; 14f61 (5:4f61)
+ ld hl, wcda8
+ ld de, Data_14f5e
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14f3b
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14f40
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14f40
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14f48
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x14f8f
+
+PointerTable_14f8f: ; 14f8f (5:4f8f)
+ dw Func_14f9b
+ dw Func_14f9b
+ dw Func_14f9f
+ dw Func_14fb0
+ dw Func_14fb4
+ dw Func_14fb8
+
+Func_14f9b: ; 14f9b (5:4f9b)
+ INCROM $14f9b, $14f9f
+
+Func_14f9f: ; 14f9f (5:4f9f)
+ call InitAIDuelVars
+ call Func_14feb
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x14fb0
+
+Func_14fb0: ; 14fb0 (5:4fb0)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14fb4
+
+Func_14fb4: ; 14fb4 (5:4fb4)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x14fb8
+
+Func_14fb8: ; 14fb8 (5:4fb8)
+ call _AIPickPrizeCards
+ ret
+; 0x14fbc
+
+Data_14fbc: ; 14fbc (5:4fbc)
+ db LAPRAS
+ db HORSEA
+ db GOLDEEN
+ db SQUIRTLE
+ db $00
+
+Data_14fc1: ; 14fc1 (5:4fc1)
+ db SQUIRTLE
+ db HORSEA
+ db GOLDEEN
+ db LAPRAS
+ db $00
+
+Data_14fc6: ; 14fc6 (5:4fc6)
+ airetreat SQUIRTLE, -3
+ airetreat WARTORTLE, -2
+ airetreat HORSEA, -1
+ db $00
+
+Data_14fcd: ; 14fcd (5:4fcd)
+ aienergy SQUIRTLE, 2, +0
+ aienergy WARTORTLE, 3, +0
+ aienergy BLASTOISE, 5, +0
+ aienergy GOLDEEN, 1, +0
+ aienergy SEAKING, 2, +0
+ aienergy HORSEA, 2, +0
+ aienergy SEADRA, 3, +0
+ aienergy LAPRAS, 3, +0
+ db $00
+
+Data_14fe6: ; 14fe6 (5:4fe6)
+ db GAMBLER
+ db ENERGY_RETRIEVAL
+ db SUPER_ENERGY_RETRIEVAL
+ db BLASTOISE
+ db $00
+
+Func_14feb: ; 14feb (5:4feb)
+ ld hl, wcda8
+ ld de, Data_14fe6
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_14fbc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_14fc1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_14fc1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_14fcd
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x15019
+
+PointerTable_15019: ; 15019 (5:5019)
+ dw Func_15025
+ dw Func_15025
+ dw Func_15029
+ dw Func_1503a
+ dw Func_1503e
+ dw Func_15042
+
+Func_15025: ; 15025 (5:5025)
+ INCROM $15025, $15029
+
+Func_15029: ; 15029 (5:5029)
+ call InitAIDuelVars
+ call Func_1506d
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x1503a
+
+Func_1503a: ; 1503a (5:503a)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x1503e
+
+Func_1503e: ; 1503e (5:503e)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15042
+
+Func_15042: ; 15042 (5:5042)
+ call _AIPickPrizeCards
+ ret
+; 0x15046
+
+Data_15046: ; 15046 (5:5046)
+ db KANGASKHAN
+ db ELECTABUZZ2
+ db TAUROS
+ db MAGNEMITE1
+ db VOLTORB
+ db $00
+
+Data_1504c: ; 1504c (5:504c)
+ db MAGNEMITE1
+ db VOLTORB
+ db ELECTABUZZ2
+ db TAUROS
+ db KANGASKHAN
+ db $00
+
+Data_15052: ; 15052 (5:5052)
+ airetreat VOLTORB, -1
+ db $00
+
+Data_15055: ; 15055 (5:5055)
+ aienergy MAGNEMITE1, 3, +1
+ aienergy MAGNETON1, 4, +0
+ aienergy VOLTORB, 3, +1
+ aienergy ELECTRODE1, 3, +0
+ aienergy ELECTABUZZ2, 1, +0
+ aienergy KANGASKHAN, 2, -2
+ aienergy TAUROS, 3, +0
+ db $00
+
+Data_1506b: ; 1506b (5:506b)
+ db KANGASKHAN
+ db $00
+
+Func_1506d: ; 1506d (5:506d)
+ ld hl, wcda8
+ ld de, Data_1506b
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_15046
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_1504c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_1504c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_15055
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x1509b
+
+PointerTable_1509b: ; 1509b (5:509b)
+ dw Func_150a7
+ dw Func_150a7
+ dw Func_150ab
+ dw Func_150bc
+ dw Func_150c0
+ dw Func_150c4
+
+Func_150a7: ; 150a7 (5:50a7)
+ INCROM $150a7, $150ab
+
+Func_150ab: ; 150ab (5:50ab)
+ call InitAIDuelVars
+ call Func_150f4
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x150bc
+
+Func_150bc: ; 150bc (5:50bc)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x150c0
+
+Func_150c0: ; 150c0 (5:50c0)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x150c4
+
+Func_150c4: ; 150c4 (5:50c4)
+ call _AIPickPrizeCards
+ ret
+; 0x150c8
+
+Data_150c8 ; 150c8 (5:50c8)
+ db ODDISH
+ db EXEGGCUTE
+ db BULBASAUR
+ db $00
+
+Data_150cc ; 150cc (5:50cc)
+ db BULBASAUR
+ db EXEGGCUTE
+ db ODDISH
+ db $00
+
+Data_150cf ; 150cf (5:50cf)
+ airetreat GLOOM, -2
+ airetreat VILEPLUME, -2
+ airetreat BULBASAUR, -2
+ airetreat IVYSAUR, -2
+ db $00
+
+Data_150d9 ; 150d9 (5:50d9)
+ aienergy BULBASAUR, 3, +0
+ aienergy IVYSAUR, 4, +0
+ aienergy VENUSAUR2, 4, +0
+ aienergy ODDISH, 2, +0
+ aienergy GLOOM, 3, -1
+ aienergy VILEPLUME, 3, -1
+ aienergy EXEGGCUTE, 3, +0
+ aienergy EXEGGUTOR, 22, +0
+ db $00
+
+Data_150f2 ; 150f2 (5:50f2)
+ db VENUSAUR2
+ db $00
+
+Func_150f4: ; 150f4 (5:50f4)
+ ld hl, wcda8
+ ld de, Data_150f2
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_150c8
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_150cc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_150cc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_150d9
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x15122
+
+PointerTable_15122: ; 15122 (5:5122)
+ dw Func_1512e
+ dw Func_1512e
+ dw Func_15132
+ dw Func_15143
+ dw Func_15147
+ dw Func_1514b
+
+Func_1512e: ; 1512e (5:512e)
+ INCROM $1512e, $15132
+
+Func_15132: ; 15132 (5:5132)
+ call InitAIDuelVars
+ call Func_1517f
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x15143
+
+Func_15143: ; 15143 (5:5143)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15147
+
+Func_15147: ; 15147 (5:5147)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x1514b
+
+Func_1514b: ; 1514b (5:514b)
+ call _AIPickPrizeCards
+ ret
+; 0x1514f
+
+Data_1514f: ; 1514f (5:514f)
+ db KANGASKHAN
+ db CHANSEY
+ db SNORLAX
+ db MR_MIME
+ db ABRA
+ db $00
+
+Data_15155: ; 15155 (5:5155)
+ db ABRA
+ db MR_MIME
+ db KANGASKHAN
+ db SNORLAX
+ db CHANSEY
+ db $00
+
+Data_1515b: ; 1515b (5:515b)
+ airetreat ABRA, -3
+ airetreat SNORLAX, -3
+ airetreat KANGASKHAN, -1
+ airetreat CHANSEY, -1
+ db $00
+
+Data_15164 ; 15164 (5:5164)
+ aienergy ABRA, 3, +1
+ aienergy KADABRA, 3, +0
+ aienergy ALAKAZAM, 3, +0
+ aienergy MR_MIME, 2, +0
+ aienergy CHANSEY, 2, -2
+ aienergy KANGASKHAN, 4, -2
+ aienergy SNORLAX, 0, -8
+ db $00
+
+Data_1517a ; 1517a (5:517a)
+ db GAMBLER
+ db MR_MIME
+ db ALAKAZAM
+ db SWITCH
+ db $00
+
+Func_1517f: ; 1517f (5:517f)
+ ld hl, wcda8
+ ld de, Data_1517a
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_1514f
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_15155
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_15155
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_15164
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x151ad
+
+PointerTable_151ad: ; 151ad (5:51ad)
+ dw Func_151b9
+ dw Func_151b9
+ dw Func_151bd
+ dw Func_151ce
+ dw Func_151d2
+ dw Func_151d6
+
+Func_151b9: ; 151b9 (5:51b9)
+ INCROM $151b9, $151bd
+
+Func_151bd: ; 151bd (5:51bd)
+ call InitAIDuelVars
+ call Func_15204
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x151ce
+
+Func_151ce: ; 151ce (5:51ce)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x151d2
+
+Func_151d2: ; 151d2 (5:51d2)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x151d6
+
+Func_151d6: ; 151d6 (5:51d6)
+ call _AIPickPrizeCards
+ ret
+; 0x151da
+
+Data_151da: ; 151da (5:51da)
+ db MEWTWO1
+ db MEWTWO3
+ db MEWTWO2
+ db GRIMER
+ db KOFFING
+ db PORYGON
+ db $00
+
+Data_151e1: ; 151e1 (5:51e1)
+ db GRIMER
+ db KOFFING
+ db MEWTWO3
+ db MEWTWO2
+ db MEWTWO1
+ db PORYGON
+ db $00
+
+Data_151e8: ; 151e8 (5:51e8)
+ db $00
+
+Data_151e9: ; 151e9 (5:51e9)
+ aienergy GRIMER, 3, +0
+ aienergy MUK, 4, +0
+ aienergy KOFFING, 2, +0
+ aienergy WEEZING, 3, +0
+ aienergy MEWTWO1, 2, -1
+ aienergy MEWTWO3, 2, -1
+ aienergy MEWTWO2, 2, -1
+ aienergy PORYGON, 2, -1
+ db $00
+
+Data_15202: ; 15202 (5:5202)
+ db MUK
+ db $00
+
+Func_15204: ; 15204 (5:5204)
+ ld hl, wcda8
+ ld de, Data_15202
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_151da
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_151e1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_151e1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_151e9
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x15232
+
+PointerTable_15232: ; 15232 (5:52PointerTable_12)
+ dw Func_1523e
+ dw Func_1523e
+ dw Func_15242
+ dw Func_15253
+ dw Func_15257
+ dw Func_1525b
+
+Func_1523e: ; 1523e (5:523e)
+ INCROM $1523e, $15242
+
+Func_15242: ; 15242 (5:5242)
+ call InitAIDuelVars
+ call Func_1528f
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x15253
+
+Func_15253: ; 15253 (5:5253)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15257
+
+Func_15257: ; 15257 (5:5257)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x1525b
+
+Func_1525b: ; 1525b (5:525b)
+ call _AIPickPrizeCards
+ ret
+; 0x1525f
+
+Data_1525f: ; 1525f (5:525f)
+ db JIGGLYPUFF3
+ db CHANSEY
+ db TAUROS
+ db MAGMAR1
+ db JIGGLYPUFF1
+ db GROWLITHE
+ db $00
+
+Data_15266: ; 15266 (5:5266)
+ db JIGGLYPUFF3
+ db CHANSEY
+ db GROWLITHE
+ db MAGMAR1
+ db JIGGLYPUFF1
+ db TAUROS
+ db $00
+
+Data_1526e: ; 1526e (5:526e)
+ airetreat JIGGLYPUFF1, -1
+ airetreat CHANSEY, -1
+ airetreat GROWLITHE, -1
+ db $00
+
+Data_15274: ; 15274 (5:5274)
+ aienergy GROWLITHE, 3, +0
+ aienergy ARCANINE2, 4, +0
+ aienergy MAGMAR1, 3, +0
+ aienergy JIGGLYPUFF1, 3, +0
+ aienergy JIGGLYPUFF3, 2, +0
+ aienergy WIGGLYTUFF, 3, +0
+ aienergy CHANSEY, 4, +0
+ aienergy TAUROS, 3, +0
+ db $00
+
+Data_1528d: ; 1528d (5:528d)
+ db GAMBLER
+ db $00
+
+Func_1528f: ; 1528f (5:528f)
+ ld hl, wcda8
+ ld de, Data_1528d
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_1525f
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_15266
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_15266
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_15274
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x152bd
+
+PointerTable_152bd: ; 152bd (5:52bd)
+ dw Func_152c9
+ dw Func_152c9
+ dw Func_152cd
+ dw Func_152de
+ dw Func_152e2
+ dw Func_152e6
+
+Func_152c9: ; 152c9 (5:52c9)
+ INCROM $152c9, $152cd
+
+Func_152cd: ; 152cd (5:52cd)
+ call InitAIDuelVars
+ call Func_1531d
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x152de
+
+Func_152de: ; 152de (5:52de)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x152e2
+
+Func_152e2: ; 152e2 (5:52e2)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x152e6
+
+Func_152e6: ; 152e6 (5:52e6)
+ call _AIPickPrizeCards
+ ret
+; 0x152ea
+
+Data_152ea: ; 152ea (5:52ea)
+ db LAPRAS
+ db SEEL
+ db CHARMANDER
+ db CUBONE
+ db SQUIRTLE
+ db GROWLITHE
+ db $00
+
+Data_152f1: ; 152f1 (5:52f1)
+ db CHARMANDER
+ db SQUIRTLE
+ db SEEL
+ db CUBONE
+ db GROWLITHE
+ db LAPRAS
+ db $00
+
+Data_152f8: ; 152f8 (5:52f8)
+ db $00
+
+Data_152f9: ; 152f9 (5:52f9)
+ aienergy CHARMANDER, 3, +0
+ aienergy CHARMELEON, 5, +0
+ aienergy GROWLITHE, 2, +0
+ aienergy ARCANINE2, 4, +0
+ aienergy SQUIRTLE, 2, +0
+ aienergy WARTORTLE, 3, +0
+ aienergy SEEL, 3, +0
+ aienergy DEWGONG, 4, +0
+ aienergy LAPRAS, 3, +0
+ aienergy CUBONE, 3, +0
+ aienergy MAROWAK1, 3, +0
+ db $00
+
+Data_1531b: ; 1531b (5:531b)
+ db LAPRAS
+ db $00
+
+Func_1531d: ; 1531d (5:531d)
+ ld hl, wcda8
+ ld de, Data_1531b
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_152ea
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_152f1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_152f1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_152f9
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x1534b
+
+PointerTable_1534b: ; 1534b (5:534b)
+ dw Func_15357
+ dw Func_15357
+ dw Func_1535b
+ dw Func_1536c
+ dw Func_15370
+ dw Func_15374
+
+Func_15357: ; 15357 (5:5357)
+ INCROM $15357, $1535b
+
+Func_1535b: ; 1535b (5:535b)
+ call InitAIDuelVars
+ call Func_153ba
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x1536c
+
+Func_1536c: ; 1536c (5:536c)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15370
+
+Func_15370: ; 15370 (5:5370)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15374
+
+Func_15374: ; 15374 (5:5374)
+ call _AIPickPrizeCards
+ ret
+; 0x15378
+
+Data_15378: ; 15378 (5:5378)
+ db KANGASKHAN
+ db ELECTABUZZ2
+ db HITMONCHAN
+ db MR_MIME
+ db LICKITUNG
+ db HITMONLEE
+ db TAUROS
+ db JYNX
+ db MEWTWO1
+ db DODUO
+ db $00
+
+Data_15383: ; 15383 (5:5383)
+ db KANGASKHAN
+ db HITMONLEE
+ db HITMONCHAN
+ db TAUROS
+ db DODUO
+ db JYNX
+ db MEWTWO1
+ db ELECTABUZZ2
+ db MR_MIME
+ db LICKITUNG
+ db $00
+
+Data_1538e: ; 1538e (5:538e)
+ airetreat KANGASKHAN, -1
+ airetreat DODUO, -1
+ airetreat DODRIO, -1
+ db $00
+
+Data_15395: ; 15395 (5:5395)
+ aienergy ELECTABUZZ2, 2, +1
+ aienergy HITMONLEE, 3, +1
+ aienergy HITMONCHAN, 3, +1
+ aienergy MR_MIME, 2, +0
+ aienergy JYNX, 3, +0
+ aienergy MEWTWO1, 2, +0
+ aienergy DODUO, 3, -1
+ aienergy DODRIO, 3, -1
+ aienergy LICKITUNG, 2, +0
+ aienergy KANGASKHAN, 4, -1
+ aienergy TAUROS, 3, +0
+ db $00
+
+Data_153b7: ; 153b7 (5:53b7)
+ db GAMBLER
+ db ENERGY_REMOVAL
+ db $00
+
+Func_153ba: ; 153ba (5:53ba)
+ ld hl, wcda8
+ ld de, Data_153b7
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_15378
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_15383
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_15383
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_15395
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x153e8
+
+PointerTable_153e8: ; 153e8 (5:53e8)
+ dw Func_153f4
+ dw Func_153f4
+ dw Func_153f8
+ dw Func_15409
+ dw Func_1540d
+ dw Func_15411
+
+Func_153f4: ; 153f4 (5:53f4)
+ INCROM $153f4, $153f8
+
+Func_153f8: ; 153f8 (5:53f8)
+ call InitAIDuelVars
+ call Func_15441
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x15409
+
+Func_15409: ; 15409 (5:5409)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x1540d
+
+Func_1540d: ; 1540d (5:540d)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15411
+
+Func_15411: ; 15411 (5:5411)
+ call _AIPickPrizeCards
+ ret
+; 0x15415
+
+Data_15415: ; 15415 (5:5415)
+ db KANGASKHAN
+ db MAGMAR2
+ db CHANSEY
+ db GEODUDE
+ db SCYTHER
+ db GRIMER
+ db $00
+
+Data_1541c: ; 1541c (5:541c)
+ db GRIMER
+ db SCYTHER
+ db GEODUDE
+ db CHANSEY
+ db MAGMAR2
+ db KANGASKHAN
+ db $00
+
+Data_15423: ; 15423 (5:5423)
+ airetreat GRIMER, -1
+ db $00
+
+Data_15426: ; 15426 (5:5426)
+ aienergy GRIMER, 1, -1
+ aienergy MUK, 3, -1
+ aienergy SCYTHER, 4, +1
+ aienergy MAGMAR2, 2, +0
+ aienergy GEODUDE, 2, +0
+ aienergy GRAVELER, 3, +0
+ aienergy CHANSEY, 4, +0
+ aienergy KANGASKHAN, 4, -1
+ db $00
+
+Data_1543f: ; 1543f (5:543f)
+ db GAMBLER
+ db $00
+
+Func_15441: ; 15441 (5:5441)
+ ld hl, wcda8
+ ld de, Data_1543f
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_15415
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_1541c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_1541c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_15426
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x1546f
+
+PointerTable_1546f: ; 1546f (5:546f)
+ dw Func_1547b
+ dw Func_1547b
+ dw Func_1547f
+ dw Func_15490
+ dw Func_15494
+ dw Func_15498
+
+Func_1547b: ; 1547b (5:547b)
+ INCROM $1547b, $1547f
+
+Func_1547f: ; 1547f (5:547f)
+ call InitAIDuelVars
+ call Func_154d9
+ call SetUpBossStartingHandAndDeck
+ call TrySetUpBossStartingPlayArea
+ ret nc
+ call AIPlayInitialBasicCards
+ ret
+; 0x15490
+
+Func_15490: ; 15490 (5:5490)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15494
+
+Func_15494: ; 15494 (5:5494)
+ call AIDecideBenchPokemonToSwitchTo
+ ret
+; 0x15498
+
+Func_15498: ; 15498 (5:5498)
+ call _AIPickPrizeCards
+ ret
+; 0x1549c
+
+Data_1549c: ; 1549c (5:549c)
+ db KANGASKHAN
+ db DRATINI
+ db EEVEE
+ db ZAPDOS3
+ db ARTICUNO2
+ db MOLTRES2
+ db $00
+
+Data_154a3: ; 154a3 (5:54a3)
+ db KANGASKHAN
+ db DRATINI
+ db EEVEE
+ db $00
+
+Data_154a7: ; 154a7 (5:54a7)
+ db MOLTRES2
+ db ZAPDOS3
+ db KANGASKHAN
+ db DRATINI
+ db EEVEE
+ db ARTICUNO2
+ db $00
+
+Data_154ae: ; 154ae (5:54ae)
+ airetreat EEVEE, -2
+ db $00
+
+Data_154b1: ; 154b1 (5:54b1)
+ aienergy FLAREON1, 3, +0
+ aienergy MOLTRES2, 3, +0
+ aienergy VAPOREON1, 3, +0
+ aienergy ARTICUNO2, 0, -8
+ aienergy JOLTEON1, 4, +0
+ aienergy ZAPDOS3, 0, -8
+ aienergy KANGASKHAN, 4, -1
+ aienergy EEVEE, 3, +0
+ aienergy DRATINI, 3, +0
+ aienergy DRAGONAIR, 4, +0
+ aienergy DRAGONITE1, 3, +0
+ db $00
+
+Data_154d3: ; 154d3 (5:54d3)
+ db MOLTRES2
+ db ARTICUNO2
+ db ZAPDOS3
+ db DRAGONITE1
+ db GAMBLER
+ db $00
+
+Func_154d9: ; 154d9 (5:54d9)
+ ld hl, wcda8
+ ld de, Data_154d3
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdaa
+ ld de, Data_1549c
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdac
+ ld de, Data_154a3
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ld hl, wcdae
+ ld de, Data_154a7
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; missing wcdb0
+
+ ld hl, wcdb2
+ ld de, Data_154b1
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+ ret
+; 0x15507
|