summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/deck_ai_pointers.asm55
-rw-r--r--src/engine/bank05.asm2465
-rw-r--r--src/engine/deck_ai.asm2011
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