summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxCrystal <rgr.crystal@gmail.com>2020-04-24 20:23:51 +0200
committerGitHub <noreply@github.com>2020-04-24 20:23:51 +0200
commitebd79f9631342cd5969b57eb8215ef1a23becbb9 (patch)
tree44a9d03f62e0a462e6efb5ae431daf2520a5186c /src
parente360e0102a7332dc9a026327e2cbcce71c6cdcd4 (diff)
parent9aa5cba752d247f94179b0c9fc6a558f26f77a47 (diff)
Merge branch 'master' into master
Diffstat (limited to 'src')
-rw-r--r--src/constants/card_data_constants.asm13
-rw-r--r--src/constants/duel_constants.asm26
-rw-r--r--src/data/cards.asm18
-rw-r--r--src/engine/bank01.asm10
-rw-r--r--src/engine/bank05.asm441
-rw-r--r--src/engine/bank08.asm6406
-rw-r--r--src/engine/home.asm16
-rw-r--r--src/macros/wram.asm2
-rw-r--r--src/text/text1.asm2
-rw-r--r--src/text/text_offsets.asm5982
-rw-r--r--src/wram.asm53
11 files changed, 9622 insertions, 3347 deletions
diff --git a/src/constants/card_data_constants.asm b/src/constants/card_data_constants.asm
index 9d4c88f..3f26e4d 100644
--- a/src/constants/card_data_constants.asm
+++ b/src/constants/card_data_constants.asm
@@ -41,7 +41,7 @@ CARD_DATA_MOVE1_EFFECT_COMMANDS EQU $18
CARD_DATA_MOVE1_FLAG1 EQU $1a
CARD_DATA_MOVE1_FLAG2 EQU $1b
CARD_DATA_MOVE1_FLAG3 EQU $1c
-CARD_DATA_MOVE1_UNKNOWN1 EQU $1d
+CARD_DATA_MOVE1_EFFECT_PARAM EQU $1d
CARD_DATA_MOVE1_ANIMATION EQU $1e
; TYPE_PKMN card only
@@ -55,7 +55,7 @@ CARD_DATA_MOVE2_EFFECT_COMMANDS EQU $2b
CARD_DATA_MOVE2_FLAG1 EQU $2d
CARD_DATA_MOVE2_FLAG2 EQU $2e
CARD_DATA_MOVE2_FLAG3 EQU $2f
-CARD_DATA_MOVE2_UNKNOWN1 EQU $30
+CARD_DATA_MOVE2_EFFECT_PARAM EQU $30
CARD_DATA_MOVE2_ANIMATION EQU $31
; TYPE_PKMN card only
@@ -226,3 +226,12 @@ FLAG_3_BIT_1 EQU $1 << FLAG_3_BIT_1_F
; special CARD_DATA_RETREAT_COST values
UNABLE_RETREAT EQU $64
+
+; attack index constants
+FIRST_ATTACK_OR_PKMN_POWER EQU $0
+SECOND_ATTACK EQU $1
+
+; whether move with the ATTACHED_ENERGY_BOOST flag
+; has limit on attached energy cards boost.
+MAX_ENERGY_BOOST_IS_LIMITED EQU $2
+MAX_ENERGY_BOOST_IS_NOT_LIMITED EQU $3
diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm
index f3e2912..65f58e3 100644
--- a/src/constants/duel_constants.asm
+++ b/src/constants/duel_constants.asm
@@ -224,3 +224,29 @@ EFFECT_FAILED_UNSUCCESSFUL EQU $02
; wAnimationQueue length
ANIMATION_QUEUE_LENGTH EQU 7
+
+; wPreviousAIFlags and wCurrentAIFlags constants
+AI_FLAG_USED_PLUSPOWER EQU 1 << 0
+AI_FLAG_USED_SWITCH EQU 1 << 1
+AI_FLAG_USED_PROFESSOR_OAK EQU 1 << 2
+AI_FLAG_MODIFIED_HAND EQU 1 << 3
+AI_FLAG_USED_GUST_OF_WIND EQU 1 << 4
+
+; used to determine which Trainer cards for AI
+; to process in AIProcessHandTrainerCards.
+; aside from a few exceptions, these go in chronological order.
+AI_TRAINER_CARD_PHASE_01 EQU $1
+AI_TRAINER_CARD_PHASE_02 EQU $2
+AI_TRAINER_CARD_PHASE_03 EQU $3
+AI_TRAINER_CARD_PHASE_04 EQU $4
+AI_TRAINER_CARD_PHASE_05 EQU $5
+AI_TRAINER_CARD_PHASE_06 EQU $6
+AI_TRAINER_CARD_PHASE_07 EQU $7
+AI_TRAINER_CARD_PHASE_08 EQU $8
+AI_TRAINER_CARD_PHASE_09 EQU $9
+AI_TRAINER_CARD_PHASE_10 EQU $a
+AI_TRAINER_CARD_PHASE_11 EQU $b
+AI_TRAINER_CARD_PHASE_12 EQU $c
+AI_TRAINER_CARD_PHASE_13 EQU $d
+AI_TRAINER_CARD_PHASE_14 EQU $e
+AI_TRAINER_CARD_PHASE_15 EQU $f
diff --git a/src/data/cards.asm b/src/data/cards.asm
index a15f0e5..e601f98 100644
--- a/src/data/cards.asm
+++ b/src/data/cards.asm
@@ -1952,7 +1952,7 @@ ExeggutorCard: ; 31689 (c:5689)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 3
+ db MAX_ENERGY_BOOST_IS_NOT_LIMITED
db 2 ; animation
db 3 ; retreat cost
@@ -3278,7 +3278,7 @@ BlastoiseCard: ; 31d23 (c:5d23)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 22 ; animation
db 3 ; retreat cost
@@ -3417,7 +3417,7 @@ PoliwagCard: ; 31de6 (c:5de6)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
; move 2
@@ -3519,7 +3519,7 @@ PoliwrathCard: ; 31e68 (c:5e68)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
; move 2
@@ -4029,7 +4029,7 @@ SeadraCard: ; 320f2 (c:60f2)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
; move 2
@@ -4386,7 +4386,7 @@ LaprasCard: ; 322b9 (c:62b9)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
; move 2
@@ -4502,7 +4502,7 @@ Vaporeon2Card: ; 3233b (c:633b)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
db 1 ; retreat cost
@@ -4553,7 +4553,7 @@ OmanyteCard: ; 3237c (c:637c)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
db 1 ; retreat cost
@@ -4590,7 +4590,7 @@ OmastarCard: ; 323bd (c:63bd)
db NONE ; flags 1
db ATTACHED_ENERGY_BOOST ; flags 2
db NONE ; flags 3
- db 2
+ db MAX_ENERGY_BOOST_IS_LIMITED
db 19 ; animation
; move 2
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm
index 5131025..b73b47c 100644
--- a/src/engine/bank01.asm
+++ b/src/engine/bank01.asm
@@ -3055,7 +3055,7 @@ PracticeDuelVerify_Turn2: ; 5438 (1:5438)
ld a, [wTempCardID_ccc2]
cp SEAKING
jp nz, ReturnWrongAction
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
cp 1
jp nz, ReturnWrongAction
ld e, PLAY_AREA_ARENA
@@ -3090,7 +3090,7 @@ PracticeDuelVerify_Turn4: ; 5467 (1:5467)
ld a, [wTempCardID_ccc2]
cp SEAKING
jr nz, ReturnWrongAction
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
cp 1
jr nz, ReturnWrongAction
ret
@@ -3127,7 +3127,7 @@ PracticeDuelVerify_Turn7Or8: ; 54b7 (1:54b7)
ld a, [wTempCardID_ccc2]
cp STARMIE
jr nz, ReturnWrongAction
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
cp 1
jr nz, ReturnWrongAction
ret
@@ -6041,7 +6041,7 @@ DisplayOpponentUsedMoveScreen: ; 6635 (1:6635)
ld a, CARDPAGE_POKEMON_OVERVIEW
ld [wCardPageNumber], a
ld hl, wLoadedCard1Move1Name
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
or a
jr z, .first_move
ld hl, wLoadedCard1Move2Name
@@ -6886,7 +6886,7 @@ OppAction_6b3e: ; 6b3e (1:6b3e)
call SwapTurn
ldh a, [hTempCardIndex_ff9f]
ld [wPlayerAttackingCardIndex], a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld [wPlayerAttackingMoveIndex], a
ld a, [wTempCardID_ccc2]
ld [wPlayerAttackingCardID], a
diff --git a/src/engine/bank05.asm b/src/engine/bank05.asm
index 251f5c5..ee45de4 100644
--- a/src/engine/bank05.asm
+++ b/src/engine/bank05.asm
@@ -91,7 +91,7 @@ Func_1409e: ; 1409e (5:409e)
; input:
; [hTempPlayAreaLocation_ff9d] = location of attacking card to consider
; output:
-; [wSelectedMoveIndex] = move index that KOs
+; [wSelectedAttack] = move index that KOs
CheckIfAnyMoveKnocksOutDefendingCard: ; 140ae (5:40ae)
xor a ; first move
call CheckIfMoveKnocksOutDefendingCard
@@ -116,10 +116,10 @@ CheckIfMoveKnocksOutDefendingCard: ; 140b5 (5:40b5)
; to exactly 0 HP.
; outputs that attack index in wSelectedMove.
CheckIfAnyDefendingPokemonAttackDealsSameDamageAsHP: ; 140c5 (5:40c5)
- xor a ; first attack
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
call .check_damage
ret c
- ld a, $01 ; second attack
+ ld a, SECOND_ATTACK
.check_damage
call EstimateDamage_FromDefendingPokemon
@@ -326,7 +326,7 @@ Func_14226: ; 14226 (5:4226)
; can't use a move or if that selected move doesn't have enough energy
; input:
; [hTempPlayAreaLocation_ff9d] = location of Pokémon card
-; [wSelectedMoveIndex] = selected move to examine
+; [wSelectedAttack] = selected move to examine
CheckIfSelectedMoveIsUnusable: ; 1424b (5:424b)
ldh a, [hTempPlayAreaLocation_ff9d]
or a
@@ -340,7 +340,7 @@ CheckIfSelectedMoveIsUnusable: ; 1424b (5:424b)
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
call CopyMoveDataAndDamage_FromDeckIndex
call HandleAmnesiaSubstatus
@@ -361,7 +361,7 @@ CheckIfSelectedMoveIsUnusable: ; 1424b (5:424b)
; and checks if there is enough energy to execute the selected move
; input:
; [hTempPlayAreaLocation_ff9d] = location of Pokémon card
-; [wSelectedMoveIndex] = selected move to examine
+; [wSelectedAttack] = selected move to examine
; output:
; b = basic energy still needed
; c = colorless energy still needed
@@ -374,7 +374,7 @@ CheckEnergyNeededForAttack: ; 14279 (5:4279)
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
call CopyMoveDataAndDamage_FromDeckIndex
ld hl, wLoadedMoveName
@@ -634,7 +634,7 @@ CreateEnergyCardListFromHand: ; 1438c (5:438c)
; looks for card ID in hand and
; sets carry if a card wasn't found
-; as opposed to LookForCardIDInHandList
+; as opposed to LookForCardIDInHandList_Bank5
; this function doesn't create a list
; and preserves hl, de and bc
; input:
@@ -686,7 +686,7 @@ LookForCardIDInHand: ; 143bf (5:43bf)
; a = move index to take into account
; [hTempPlayAreaLocation_ff9d] = location of attacking card to consider
EstimateDamage_VersusDefendingCard: ; 143e5 (5:43e5)
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld e, a
ldh a, [hTempPlayAreaLocation_ff9d]
add DUELVARS_ARENA_CARD
@@ -903,7 +903,7 @@ _CalculateDamage_VersusDefendingPokemon: ; 14462 (5:4462)
; damage as the receiver
EstimateDamage_FromDefendingPokemon: ; 1450b (5:450b)
call SwapTurn
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld e, a
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
@@ -1135,8 +1135,8 @@ _CalculateDamage_FromDefendingPokemon: ; 1459b (5:459b)
ret
; 0x14663
-Func_14663: ; 14663 (5:4663)
- farcall Func_200e5
+AIProcessHandTrainerCards: ; 14663 (5:4663)
+ farcall _AIProcessHandTrainerCards
ret
; GENERAL DECK POINTER LIST - Not sure on all of these.
@@ -1175,7 +1175,7 @@ Func_14687: ; 14687 (5:4687)
Func_1468b: ; 1468b (5:468b)
call Func_15649
ld a, $1
- call Func_14663
+ call AIProcessHandTrainerCards
farcall $8, $67d3
jp nc, $4776
farcall $8, $6790
@@ -1184,28 +1184,28 @@ Func_1468b: ; 1468b (5:468b)
ret c
farcall $8, $662d
ld a, $2
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $3
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $4
- call Func_14663
+ call AIProcessHandTrainerCards
call $5eae
ret c
ld a, $5
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $6
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $7
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $8
- call Func_14663
+ call AIProcessHandTrainerCards
call $4786
ld a, $a
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $b
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $c
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, [wAlreadyPlayedEnergy]
or a
jr nz, .asm_146ed
@@ -1220,37 +1220,37 @@ Func_1468b: ; 1468b (5:468b)
ld a, $d
farcall $8, $619b
ld a, $d
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $f
- call Func_14663
- ld a, [wce20]
- and $4
+ call AIProcessHandTrainerCards
+ ld a, [wPreviousAIFlags]
+ and AI_FLAG_USED_PROFESSOR_OAK
jr z, .asm_14776
ld a, $1
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $2
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $3
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $4
- call Func_14663
+ call AIProcessHandTrainerCards
call $5eae
ret c
ld a, $5
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $6
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $7
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $8
- call Func_14663
+ call AIProcessHandTrainerCards
call $4786
ld a, $a
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $b
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, $c
- call Func_14663
+ call AIProcessHandTrainerCards
ld a, [wAlreadyPlayedEnergy]
or a
jr nz, .asm_1475b
@@ -1265,7 +1265,7 @@ Func_1468b: ; 1468b (5:468b)
ld a, $d
farcall $8, $619b
ld a, $d
- call Func_14663
+ call AIProcessHandTrainerCards
.asm_14776
ld a, $e
@@ -1317,7 +1317,7 @@ ScoreLegendaryArticunoCards: ; 14c91 (5:4c91)
.lapras
ld a, LAPRAS
ld b, PLAY_AREA_BENCH_1
- call LookForCardIDInBench
+ call LookForCardIDInPlayArea_Bank5
jr nc, .articuno
ld e, a
call CountNumberOfEnergyCardsAttached
@@ -1330,7 +1330,7 @@ ScoreLegendaryArticunoCards: ; 14c91 (5:4c91)
.articuno
ld a, ARTICUNO1
ld b, PLAY_AREA_BENCH_1
- call LookForCardIDInBench
+ call LookForCardIDInPlayArea_Bank5
jr nc, .dewgong
ld a, ARTICUNO1
call RaiseAIScoreToAllMatchingIDsInBench
@@ -1339,7 +1339,7 @@ ScoreLegendaryArticunoCards: ; 14c91 (5:4c91)
.dewgong
ld a, DEWGONG
ld b, PLAY_AREA_BENCH_1
- call LookForCardIDInBench
+ call LookForCardIDInPlayArea_Bank5
jr nc, .seel
ld a, DEWGONG
call RaiseAIScoreToAllMatchingIDsInBench
@@ -1348,7 +1348,7 @@ ScoreLegendaryArticunoCards: ; 14c91 (5:4c91)
.seel
ld a, SEEL
ld b, PLAY_AREA_BENCH_1
- call LookForCardIDInBench
+ call LookForCardIDInPlayArea_Bank5
ret nc
ld a, SEEL
call RaiseAIScoreToAllMatchingIDsInBench
@@ -1386,7 +1386,7 @@ Data_1514f: ; 1514f (5:514f)
; output:
; a = card deck index, if found
; carry set if found
-LookForCardIDInHandList: ; 155d2 (5:55d2)
+LookForCardIDInHandList_Bank5: ; 155d2 (5:55d2)
ld [wTempCardIDToLook], a
call CreateHandCardList
ld hl, wDuelTempList
@@ -1408,7 +1408,7 @@ LookForCardIDInHandList: ; 155d2 (5:55d2)
; 0x155ef
; returns carry if card ID in a
-; is found in bench, starting with
+; is found in Play Area, starting with
; location in b
; input:
; a = card ID
@@ -1416,7 +1416,7 @@ LookForCardIDInHandList: ; 155d2 (5:55d2)
; ouput:
; a = PLAY_AREA_* of found card
; carry set if found
-LookForCardIDInBench: ; 155ef (5:55ef)
+LookForCardIDInPlayArea_Bank5: ; 155ef (5:55ef)
ld [wTempCardIDToLook], a
.loop
@@ -1450,7 +1450,7 @@ Func_15612: ; 15612 (5:5612)
Func_15636: ; 15636 (5:5636)
ld a, $10
ld hl, wcda5
- call ZeroData
+ call ClearMemory_Bank5
ld a, $5
ld [wcda6], a
ld a, $ff
@@ -1462,7 +1462,7 @@ Func_15649: ; 15649 (5:5649)
inc a
ld [wcda6], a
xor a
- ld [wce20], a
+ ld [wPreviousAIFlags], a
ld [wcddb], a
ld [wcddc], a
ld [wce03], a
@@ -1530,7 +1530,7 @@ Func_15649: ; 15649 (5:5649)
; after removing that attached energy card.
; input:
; [hTempPlayAreaLocation_ff9d] = location of Pokémon card
-; [wSelectedMoveIndex] = selected move to examine
+; [wSelectedAttack] = selected move to examine
; output:
; b = basic energy still needed
; c = colorless energy still needed
@@ -1543,7 +1543,7 @@ CheckEnergyNeededForAttackAfterDiscard: ; 156c3 (5:56c3)
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
call CopyMoveDataAndDamage_FromDeckIndex
ld hl, wLoadedMoveName
@@ -1561,7 +1561,7 @@ CheckEnergyNeededForAttackAfterDiscard: ; 156c3 (5:56c3)
.is_attack
ldh a, [hTempPlayAreaLocation_ff9d]
- farcall GetEnergyCardToDiscard
+ farcall AIPickEnergyCardToDiscard
call LoadCardDataToBuffer1_FromDeckIndex
cp DOUBLE_COLORLESS_ENERGY
jr z, .colorless
@@ -1642,7 +1642,7 @@ CheckEnergyNeededForAttackAfterDiscard: ; 156c3 (5:56c3)
; 0x1575e
; zeroes a bytes starting at hl
-ZeroData: ; 1575e (5:575e)
+ClearMemory_Bank5: ; 1575e (5:575e)
push af
push bc
push hl
@@ -1659,7 +1659,7 @@ ZeroData: ; 1575e (5:575e)
; 0x1576b
; returns in a the tens digit of value in a
-CalculateTensDigit: ; 1576b (5:576b)
+CalculateByteTensDigit: ; 1576b (5:576b)
push bc
ld c, 0
.loop
@@ -1678,7 +1678,7 @@ CalculateTensDigit: ; 1576b (5:576b)
; input:
; a = divisor
; b = dividend
-CalculateBDividedByA: ; 15778 (5:5778)
+CalculateBDividedByA_Bank5: ; 15778 (5:5778)
push bc
ld c, a
ld a, b
@@ -1765,8 +1765,99 @@ CheckIfAnyCardIDinLocation: ; 157a3 (5:57a3)
ret
; 0x157c6
-Func_157c6: ; 157c6 (5:57c6)
- INCROM $157c6, $158b2
+; counts total number of energy cards in opponent's hand
+; plus all the cards attached in Turn Duelist's Play Area.
+; output:
+; a and wTempAI = total number of energy cards.
+CountOppEnergyCardsInHandAndAttached: ; 157c6 (5:57c6)
+ xor a
+ ld [wTempAI], a
+ call CreateEnergyCardListFromHand
+ jr c, .attached
+
+; counts number of energy cards in hand
+ ld b, -1
+ ld hl, wDuelTempList
+.loop_hand
+ inc b
+ ld a, [hli]
+ cp $ff
+ jr nz, .loop_hand
+ ld a, b
+ ld [wTempAI], a
+
+; counts number of energy cards
+; that are attached in Play Area
+.attached
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+.loop_play_area
+ call CountNumberOfEnergyCardsAttached
+ ld hl, wTempAI
+ add [hl]
+ ld [hl], a
+ inc e
+ dec d
+ jr nz, .loop_play_area
+ ret
+; 0x157f3
+
+; returns carry if any card with ID in e is found
+; in the list that is pointed by hl.
+; if one is found, it is removed from the list.
+; input:
+; e = card ID to look for.
+; hl = list to look in
+RemoveCardIDInList: ; 157f3 (5:57f3)
+ push hl
+ push de
+ push bc
+ ld c, e
+
+.loop_1
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+
+ ldh [hTempCardIndex_ff98], a
+ call GetCardIDFromDeckIndex
+ ld a, c
+ cp e
+ jr nz, .loop_1
+
+; found
+ ld d, h
+ ld e, l
+ dec hl
+
+; remove this index from the list
+; and reposition the rest of the list ahead.
+.loop_2
+ ld a, [de]
+ inc de
+ ld [hli], a
+ cp $ff
+ jr nz, .loop_2
+
+ ldh a, [hTempCardIndex_ff98]
+ pop bc
+ pop de
+ pop hl
+ scf
+ ret
+
+.no_carry
+ pop bc
+ pop de
+ pop hl
+ or a
+ ret
+; 0x1581b
+
+Func_1581b: ; 1581b (5:581b)
+ INCROM $1581b, $158b2
; determine AI score for retreating
; return carry if AI decides to retreat
@@ -1779,7 +1870,7 @@ AIDecideWhetherToRetreat: ; 158b2 (5:58b2)
call LoadDefendingPokemonColorWRAndPrizeCards
ld a, 128 ; initial retreat score
ld [wAIScore], a
- ld a, [$cdb4]
+ ld a, [wcdb4]
or a
jr z, .check_status
srl a
@@ -2283,11 +2374,11 @@ AIDecideBenchPokemonToSwitchTo: ; 15b72 (5:5b72)
; to raise AI score accordingly
.check_can_use_moves
xor a
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
call nc, .calculate_damage
ld a, $01
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
call nc, .calculate_damage
jr .check_energy_card
@@ -2296,10 +2387,10 @@ AIDecideBenchPokemonToSwitchTo: ; 15b72 (5:5b72)
; it can inflict to the defending Pokémon
; AI score += floor(Damage / 10) + 1
.calculate_damage
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, [wDamage]
- call CalculateTensDigit
+ call CalculateByteTensDigit
inc a
call AddToAIScore
ret
@@ -2310,10 +2401,10 @@ AIDecideBenchPokemonToSwitchTo: ; 15b72 (5:5b72)
.check_energy_card
call LookForEnergyNeededInHand
jr nc, .check_attached_energy
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, [wDamage]
- call CalculateTensDigit
+ call CalculateByteTensDigit
srl a
call AddToAIScore
@@ -2440,8 +2531,8 @@ AIDecideBenchPokemonToSwitchTo: ; 15b72 (5:5b72)
.add_hp_score
ld b, a
ld a, 4
- call CalculateBDividedByA
- call CalculateTensDigit
+ call CalculateBDividedByA_Bank5
+ call CalculateByteTensDigit
call AddToAIScore
; raise AI score if
@@ -2530,7 +2621,7 @@ AIDecideBenchPokemonToSwitchTo: ; 15b72 (5:5b72)
; done
xor a
- ld [$cdb4], a
+ ld [wcdb4], a
jp FindHighestBenchScore
; 0x15d4f
@@ -2948,11 +3039,11 @@ AIDecideEvolution: ; 15f4c (5:5f4c)
; check if the card can use any moves
; and if any of those moves can KO
xor a
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr nc, .can_attack
ld a, $01
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .cant_attack_or_ko
.can_attack
@@ -2982,11 +3073,11 @@ AIDecideEvolution: ; 15f4c (5:5f4c)
ld a, [wTempAIPokemonCard]
ld [hl], a
xor a
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr nc, .evolution_can_attack
ld a, $01
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .evolution_cant_attack
.evolution_can_attack
@@ -3104,7 +3195,7 @@ AIDecideEvolution: ; 15f4c (5:5f4c)
jr z, .check_mysterious_fossil
srl a
srl a
- call CalculateTensDigit
+ call CalculateByteTensDigit
call SubFromAIScore
; if is Mysterious Fossil or
@@ -3206,7 +3297,7 @@ Func_16120: ; 16120 (5:6120)
cp 3
jr c, .not_enough_energy
push af
- farcall CountEnergyCardsInHand
+ farcall CountOppEnergyCardsInHand
pop bc
add b
cp 6
@@ -3466,7 +3557,7 @@ CheckIfActivePokemonCanUseAnyNonResidualMove: ; 162a1 (5:62a1)
xor a ; active card
ldh [hTempPlayAreaLocation_ff9d], a
; first move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .next_move
ld a, [wLoadedMoveCategory]
@@ -3476,7 +3567,7 @@ CheckIfActivePokemonCanUseAnyNonResidualMove: ; 162a1 (5:62a1)
.next_move
; second move
ld a, $01
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .fail
ld a, [wLoadedMoveCategory]
@@ -3502,7 +3593,7 @@ CheckIfActivePokemonCanUseAnyNonResidualMove: ; 162a1 (5:62a1)
; [hTempPlayAreaLocation_ff9d] = location of Pokémon card
LookForEnergyNeededInHand: ; 162c8 (5:62c8)
xor a ; first move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
ld a, b
add c
@@ -3516,7 +3607,7 @@ LookForEnergyNeededInHand: ; 162c8 (5:62c8)
.second_attack
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
ld a, b
add c
@@ -3536,7 +3627,7 @@ LookForEnergyNeededInHand: ; 162c8 (5:62c8)
or a
jr z, .one_colorless
ld a, e
- call LookForCardIDInHandList
+ call LookForCardIDInHandList_Bank5
ret c
jr .no_carry
@@ -3548,7 +3639,7 @@ LookForEnergyNeededInHand: ; 162c8 (5:62c8)
.two_colorless
ld a, DOUBLE_COLORLESS_ENERGY
- call LookForCardIDInHandList
+ call LookForCardIDInHandList_Bank5
ret c
jr .no_carry
; 0x16311
@@ -3562,7 +3653,7 @@ LookForEnergyNeededInHand: ; 162c8 (5:62c8)
; return carry if successful in finding card
; input:
; [hTempPlayAreaLocation_ff9d] = location of Pokémon card
-; [wSelectedMoveIndex] = selected move to examine
+; [wSelectedAttack] = selected move to examine
LookForEnergyNeededForMoveInHand: ; 16311 (5:6311)
call CheckEnergyNeededForAttack
ld a, b
@@ -3583,7 +3674,7 @@ LookForEnergyNeededForMoveInHand: ; 16311 (5:6311)
or a
jr z, .one_colorless
ld a, e
- call LookForCardIDInHandList
+ call LookForCardIDInHandList_Bank5
ret c
jr .done
@@ -3595,7 +3686,7 @@ LookForEnergyNeededForMoveInHand: ; 16311 (5:6311)
.two_colorless
ld a, DOUBLE_COLORLESS_ENERGY
- call LookForCardIDInHandList
+ call LookForCardIDInHandList_Bank5
ret c
jr .done
; 0x1633f
@@ -4080,7 +4171,7 @@ AIDecideWhichCardToAttachEnergy: ; 164fc (5:64fc)
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
- call CalculateTensDigit
+ call CalculateByteTensDigit
cp 3
jr nc, .check_defending_can_ko
; hp < 30
@@ -4124,7 +4215,7 @@ AIDecideWhichCardToAttachEnergy: ; 164fc (5:64fc)
.bench
add DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
- call CalculateTensDigit
+ call CalculateByteTensDigit
cp 3
jr nc, .asm_165e1
; hp < 30
@@ -4271,9 +4362,9 @@ AIDecideWhichCardToAttachEnergy: ; 164fc (5:64fc)
; in order to determine whether to play energy card.
; the AI score is increased/decreased accordingly.
; input:
-; [wSelectedMoveIndex] = move to check.
+; [wSelectedAttack] = move to check.
DetermineAIScoreOfMoveEnergyRequirement: ; 16695 (5:6695)
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
jp c, .not_enough_energy
ld a, MOVE_FLAG2_ADDRESS | ATTACHED_ENERGY_BOOST_F
@@ -4285,9 +4376,12 @@ DetermineAIScoreOfMoveEnergyRequirement: ; 16695 (5:6695)
jp .check_evolution
.attached_energy_boost
- ld a, [wLoadedMoveUnknown1]
- cp $02
+ ld a, [wLoadedMoveEffectParam]
+ cp MAX_ENERGY_BOOST_IS_LIMITED
jr z, .check_surplus_energy
+
+ ; is MAX_ENERGY_BOOST_IS_NOT_LIMITED,
+ ; which is equal to 3, add to score.
call AddToAIScore
jp .check_evolution
@@ -4313,7 +4407,7 @@ DetermineAIScoreOfMoveEnergyRequirement: ; 16695 (5:6695)
ld a, MOVE_FLAG2_ADDRESS | ATTACHED_ENERGY_BOOST_F
call CheckLoadedMoveFlag
jp nc, .check_evolution
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -4392,7 +4486,7 @@ DetermineAIScoreOfMoveEnergyRequirement: ; 16695 (5:6695)
ldh a, [hTempPlayAreaLocation_ff9d]
or a
jr nz, .check_evolution
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -4580,7 +4674,7 @@ CheckIfEvolutionNeedsEnergyForMove: ; 16805 (5:6805)
; 0x1683b
; returns in e the card ID of the energy required for
-; the Discard/Energy Boost attack loaded in wSelectedMoveIndex.
+; the Discard/Energy Boost attack loaded in wSelectedAttack.
; if it's Zapdos2's Thunderbolt attack, return no carry.
; if it's Charizard's Fire Spin or Exeggutor's Big Eggplosion
; attack, don't return energy card ID, but set carry.
@@ -4595,7 +4689,7 @@ GetEnergyCardForDiscardOrEnergyBoostAttack: ; 1683b (5:683b)
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
ld b, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
or a
jr z, .first_attack
@@ -4682,7 +4776,7 @@ AITryToPlayEnergyCard: ; 1689f (5:689f)
; if first attack doesn't need, test for the second attack.
xor a
ld [wTempAI], a
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
jr nc, .second_attack
ld a, b
@@ -4693,8 +4787,8 @@ AITryToPlayEnergyCard: ; 1689f (5:689f)
jr nz, .check_deck
.second_attack
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
jr nc, .check_discard_or_energy_boost
ld a, b
@@ -4713,8 +4807,8 @@ AITryToPlayEnergyCard: ; 1689f (5:689f)
; for both attacks, check if it has the effect of
; discarding energy cards or attached energy boost.
- xor a ; first attack
- ld [wSelectedMoveIndex], a
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
ld a, MOVE_FLAG2_ADDRESS | ATTACHED_ENERGY_BOOST_F
call CheckLoadedMoveFlag
@@ -4723,8 +4817,8 @@ AITryToPlayEnergyCard: ; 1689f (5:689f)
call CheckLoadedMoveFlag
jr c, .energy_boost_or_discard_energy
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
call CheckEnergyNeededForAttack
ld a, MOVE_FLAG2_ADDRESS | ATTACHED_ENERGY_BOOST_F
call CheckLoadedMoveFlag
@@ -4832,7 +4926,7 @@ AITryToPlayEnergyCard: ; 1689f (5:689f)
jr z, .check_first_attack
ret
.check_first_attack
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
or a
jp z, .second_attack
ret
@@ -4940,14 +5034,14 @@ Func_169ca: ; 169ca (5:69ca)
dec b
jr nz, .loop
+; copies wAIScore to wcde3
ld a, [wAIScore]
ld [de], a
- jr Func_169f8.asm_169fc
+ jr Func_169fc
; copies wTempPlayAreaAIScore to wPlayAreaAIScore
; and loads wAIscore with value in wcde3.
; identical to Func_164d3.
-; TODO: reconsider function structure here.
Func_169e3: ; 169e3 (5:69e3)
push af
ld de, wPlayAreaAIScore
@@ -4959,6 +5053,7 @@ Func_169e3: ; 169e3 (5:69e3)
inc de
dec b
jr nz, .loop
+
ld a, [hl]
ld [wAIScore], a
pop af
@@ -4968,27 +5063,32 @@ Func_169e3: ; 169e3 (5:69e3)
Func_169f8: ; 169f8 (5:69f8)
xor a
ld [wcdd9], a
-.asm_169fc
- ld a, [wce20]
- and $01
- jr z, .asm_16a0b
- ld a, [wcdd6]
- ld [wSelectedMoveIndex], a
- jr .first_attack
-
-.asm_16a0b
+ ; fallthrough
+
+Func_169fc: ; 169fc (5:69fc)
+; if AI used Pluspower, load its attack index
+ ld a, [wPreviousAIFlags]
+ and AI_FLAG_USED_PLUSPOWER
+ jr z, .no_pluspower
+ ld a, [wAIPluspowerAttack]
+ ld [wSelectedAttack], a
+ jr .attack_chosen
+
+.no_pluspower
ld a, [wcda7]
cp $80
jp z, .asm_16a77
; determine AI score of both attacks.
- xor a ; first attack
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
call GetAIScoreOfAttack
ld a, [wAIScore]
ld [wPlayAreaAIScore], a
- ld a, $01 ; second attack
+ ld a, SECOND_ATTACK
call GetAIScoreOfAttack
- ld c, $01
+
+; compare both attack scores
+ ld c, SECOND_ATTACK
ld a, [wPlayAreaAIScore]
ld b, a
ld a, [wAIScore]
@@ -5006,13 +5106,15 @@ Func_169f8: ; 169f8 (5:69f8)
.asm_16a30
cp $50 ; minimum score to use attack
jr c, .asm_16a77
+ ; enough score, proceed
+
ld a, c
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
or a
- jr z, .first_attack
+ jr z, .attack_chosen
call CheckWhetherToSwitchToFirstAttack
-.first_attack
+.attack_chosen
ld a, [wcdd9]
or a
jr z, .asm_16a48
@@ -5021,23 +5123,30 @@ Func_169f8: ; 169f8 (5:69f8)
.asm_16a48
ld a, $0e
- call Func_14663
- xor a
+ call AIProcessHandTrainerCards
+
+; load this attack's damage output against
+; the current Defending Pokemon.
+ xor a ; PLAY_AREA_ARENA
ldh [hTempPlayAreaLocation_ff9d], a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, [wDamage]
+
or a
jr z, .asm_16a62
-.asm_16a5c
+ ; if damage is 0, fallthrough
+
+.cannot_damage
xor a
- ld [$cdb4], a
+ ld [wcdb4], a
jr .asm_16a6d
+
.asm_16a62
ld a, MOVE_FLAG1_ADDRESS | DAMAGE_TO_OPPONENT_BENCH_F
call CheckLoadedMoveFlag
- jr c, .asm_16a5c
- ld hl, $cdb4
+ jr c, .cannot_damage
+ ld hl, wcdb4
inc [hl]
.asm_16a6d
ld a, $01
@@ -5051,7 +5160,7 @@ Func_169f8: ; 169f8 (5:69f8)
jr z, .asm_16a80
jp Func_169e3
.asm_16a80
- ld hl, $cdb4
+ ld hl, wcdb4
inc [hl]
or a
ret
@@ -5060,7 +5169,7 @@ Func_169f8: ; 169f8 (5:69f8)
; determines the AI score of attack index in a.
GetAIScoreOfAttack: ; 16a86 (5:6a86)
; initialize AI score.
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, $50
ld [wAIScore], a
@@ -5103,7 +5212,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
; player is under No Damage substatus
ld a, $01
ld [wAICannotDamage], a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, [wLoadedMoveCategory]
cp POKEMON_POWER
@@ -5117,7 +5226,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
; calculate damage to player to check if move can KO.
; encourage move if it's able to KO.
.check_if_can_ko
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_VersusDefendingCard
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -5142,7 +5251,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
ld [wTempAI], a
or a
jr z, .no_damage
- call CalculateTensDigit
+ call CalculateByteTensDigit
call AddToAIScore
jr .check_recoil
.no_damage
@@ -5174,13 +5283,13 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
.is_recoil
; sub from AI score number of damage counters
; that move deals to itself.
- ld a, [wLoadedMoveUnknown1]
+ ld a, [wLoadedMoveEffectParam]
or a
jp z, .check_defending_can_ko
ld [wDamage], a
call ApplyDamageModifiers_DamageToSelf
ld a, e
- call CalculateTensDigit
+ call CalculateByteTensDigit
call SubFromAIScore
push de
@@ -5395,12 +5504,12 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
; if defending card can KO, encourage move
; unless move is non-damaging.
.check_defending_can_ko
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
push af
call CheckIfDefendingPokemonCanKnockOut
pop bc
ld a, b
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
jr nc, .check_discard
ld a, 5
call AddToAIScore
@@ -5413,7 +5522,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
; subtract from AI score if this move requires
; discarding any energy cards.
.check_discard
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
@@ -5424,14 +5533,14 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
jr nc, .asm_16ca6
ld a, 1
call SubFromAIScore
- ld a, [wLoadedMoveUnknown1]
+ ld a, [wLoadedMoveEffectParam]
call SubFromAIScore
.asm_16ca6
ld a, MOVE_FLAG2_ADDRESS | FLAG_2_BIT_6_F
call CheckLoadedMoveFlag
jr nc, .check_nullify_flag
- ld a, [wLoadedMoveUnknown1]
+ ld a, [wLoadedMoveEffectParam]
call AddToAIScore
; encourage move if it has a nullify or weaken attack effect.
@@ -5454,13 +5563,13 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
ld a, MOVE_FLAG2_ADDRESS | HEAL_USER_F
call CheckLoadedMoveFlag
jr nc, .check_status_effect
- ld a, [wLoadedMoveUnknown1]
+ ld a, [wLoadedMoveEffectParam]
cp 1
jr z, .tally_heal_score
ld a, [wTempAI]
- call CalculateTensDigit
+ call CalculateByteTensDigit
ld b, a
- ld a, [wLoadedMoveUnknown1]
+ ld a, [wLoadedMoveEffectParam]
cp 3
jr z, .asm_16cec
srl b
@@ -5469,7 +5578,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
.asm_16cec
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
- call CalculateTensDigit
+ call CalculateByteTensDigit
cp b
jr c, .tally_heal_score
ld a, b
@@ -5477,9 +5586,9 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
push af
ld e, PLAY_AREA_ARENA
call GetCardDamage
- call CalculateTensDigit
+ call CalculateByteTensDigit
pop bc
- cp b ; wLoadedMoveUnknown1
+ cp b ; wLoadedMoveEffectParam
jr c, .add_heal_score
ld a, b
.add_heal_score
@@ -5771,7 +5880,7 @@ HandleSwordsDanceAndFocusEnergy: ; 16ecb (5:6ecb)
or a
jr nz, .success
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .success
ld a, $01 ; second move
@@ -5828,7 +5937,7 @@ HandlePorygonConversion: ; 16f18 (5:6f18)
cp CONFUSED
jp z, HandleSpecialAIMoves.zero
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
or a
jr nz, .conversion_2
@@ -6053,11 +6162,11 @@ CheckWhetherToSwitchToFirstAttack: ; 17019 (5:7019)
jr c, .keep_second_attack
; switch to first attack
xor a
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ret
.keep_second_attack
ld a, $01
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ret
; 0x17057
@@ -6186,7 +6295,7 @@ CheckIfArenaCardIsAtHalfHPCanEvolveAndUseSecondMove: ; 170c9 (5:70c9)
xor a ; active card
ldh [hTempPlayAreaLocation_ff9d], a
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
push hl
call CheckIfSelectedMoveIsUnusable
pop hl
@@ -6209,7 +6318,7 @@ CheckIfArenaCardIsAtHalfHPCanEvolveAndUseSecondMove: ; 170c9 (5:70c9)
CheckIfBenchCardsAreAtHalfHPCanEvolveAndUseSecondMove: ; 17101 (5:7101)
ldh a, [hTempPlayAreaLocation_ff9d]
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
push de
ld a, DUELVARS_BENCH
@@ -6253,7 +6362,7 @@ CheckIfBenchCardsAreAtHalfHPCanEvolveAndUseSecondMove: ; 17101 (5:7101)
ld a, c
ldh [hTempPlayAreaLocation_ff9d], a
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
push bc
push hl
call CheckIfSelectedMoveIsUnusable
@@ -6267,7 +6376,7 @@ CheckIfBenchCardsAreAtHalfHPCanEvolveAndUseSecondMove: ; 17101 (5:7101)
pop hl
pop de
ld a, e
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, d
ldh [hTempPlayAreaLocation_ff9d], a
ld a, b
@@ -6282,11 +6391,11 @@ Func_17161 ; 17161 (5:7161)
; return carry if Pokémon at play area location
; in hTempPlayAreaLocation_ff9d does not have
-; energy required for the move index in wSelectedMoveIndex
+; energy required for the move index in wSelectedAttack
; or has exactly the same amount of energy needed
; input:
; [hTempPlayAreaLocation_ff9d] = play area location
-; [wSelectedMoveIndex] = move index to check
+; [wSelectedAttack] = move index to check
; output:
; a = number of extra energy cards attached
CheckIfNoSurplusEnergyForMove: ; 171fb (5:71fb)
@@ -6294,7 +6403,7 @@ CheckIfNoSurplusEnergyForMove: ; 171fb (5:71fb)
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
call CopyMoveDataAndDamage_FromDeckIndex
ld hl, wLoadedMoveName
@@ -6448,7 +6557,7 @@ Func_172af ; 172af (5:72af)
CheckIfCanDamageDefendingPokemon: ; 17383 (5:7383)
ldh [hTempPlayAreaLocation_ff9d], a
xor a ; first move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .second_attack
xor a
@@ -6459,7 +6568,7 @@ CheckIfCanDamageDefendingPokemon: ; 17383 (5:7383)
.second_attack
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
call CheckIfSelectedMoveIsUnusable
jr c, .no_carry
ld a, $01
@@ -6526,7 +6635,7 @@ CheckIfDefendingPokemonCanKnockOut: ; 173b1 (5:73b1)
; a = move index
; [hTempPlayAreaLocation_ff9d] = location of card to check
CheckIfDefendingPokemonCanKnockOutWithMove: ; 173e4 (5:73e4)
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ldh a, [hTempPlayAreaLocation_ff9d]
push af
xor a
@@ -6540,7 +6649,7 @@ CheckIfDefendingPokemonCanKnockOutWithMove: ; 173e4 (5:73e4)
jr c, .done
; player's active Pokémon can use move
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
call EstimateDamage_FromDefendingPokemon
ldh a, [hTempPlayAreaLocation_ff9d]
add DUELVARS_ARENA_CARD_HP
@@ -6601,8 +6710,12 @@ CheckIfNotABossDeckID: ; 17426 (5:7426)
; probability to return carry:
; - 50% if deck AI is playing is on the list;
-; - 25% for all other decks.
-Func_1743b: ; 1743b (5:743b)
+; - 25% for all other decks;
+; - 0% for boss decks.
+; used for certain decks to randomly choose
+; not to play Trainer card in hand.
+ChooseRandomlyNotToPlayTrainerCard: ; 1743b (5:743b)
+; boss decks always use Trainer cards.
push hl
push de
call CheckIfNotABossDeckID
@@ -6654,7 +6767,7 @@ CheckForBenchIDAtHalfHPAndCanUseSecondMove: ; 17474 (5:7474)
ld [wcdf9], a
ldh a, [hTempPlayAreaLocation_ff9d]
ld d, a
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
push de
ld a, DUELVARS_ARENA_CARD
@@ -6692,7 +6805,7 @@ CheckForBenchIDAtHalfHPAndCanUseSecondMove: ; 17474 (5:7474)
ld a, c
ldh [hTempPlayAreaLocation_ff9d], a
ld a, $01 ; second move
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
push bc
call CheckIfSelectedMoveIsUnusable
pop bc
@@ -6702,7 +6815,7 @@ CheckForBenchIDAtHalfHPAndCanUseSecondMove: ; 17474 (5:7474)
pop hl
pop de
ld a, e
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, d
ldh [hTempPlayAreaLocation_ff9d], a
ld a, b
@@ -6752,7 +6865,7 @@ RaiseAIScoreToAllMatchingIDsInBench: ; 174cd (5:74cd)
Func_174f2: ; 174f2 (5:74f2)
ld a, MAX_PLAY_AREA_POKEMON
ld hl, wcdfa
- call ZeroData
+ call ClearMemory_Bank5
ld a, DUELVARS_BENCH
call GetTurnDuelistVariable
ld e, 0
@@ -6761,7 +6874,7 @@ Func_174f2: ; 174f2 (5:74f2)
push hl
ld a, MAX_PLAY_AREA_POKEMON
ld hl, wcdea
- call ZeroData
+ call ClearMemory_Bank5
pop hl
inc e
ld a, [hli]
@@ -6875,7 +6988,7 @@ Func_17583: ; 17583 (5:7583)
push hl
push de
call GetCardDamage
- call CalculateTensDigit
+ call CalculateByteTensDigit
ld b, a
push bc
call CountNumberOfEnergyCardsAttached
diff --git a/src/engine/bank08.asm b/src/engine/bank08.asm
index 48ed23f..5a0f535 100644
--- a/src/engine/bank08.asm
+++ b/src/engine/bank08.asm
@@ -6,47 +6,47 @@ unknown_data_20000: MACRO
ENDM
Data_20000: ; 20000 (8:4000)
- unknown_data_20000 $07, POTION, CheckIfPotionPreventsKnockOut, AIPlayPotion
- unknown_data_20000 $0a, POTION, FindTargetCardForPotion, AIPlayPotion
- unknown_data_20000 $08, SUPER_POTION, CheckIfSuperPotionPreventsKnockOut, AIPlaySuperPotion
- unknown_data_20000 $0b, SUPER_POTION, FindTargetCardForSuperPotion, AIPlaySuperPotion
- unknown_data_20000 $0d, DEFENDER, CheckIfDefenderPreventsKnockOut, AIPlayDefender
- unknown_data_20000 $0e, DEFENDER, CheckIfDefenderPreventsRecoilKnockOut, AIPlayDefender
- unknown_data_20000 $0d, PLUSPOWER, $4501, AIPlayPluspower
- unknown_data_20000 $0e, PLUSPOWER, $45a5, AIPlayPluspower
- unknown_data_20000 $09, SWITCH, $462e, $4612
- unknown_data_20000 $07, GUST_OF_WIND, $467e, $4666
- unknown_data_20000 $0a, GUST_OF_WIND, $467e, $4666
- unknown_data_20000 $04, BILL, $4878, $486d
- unknown_data_20000 $05, ENERGY_REMOVAL, $4895, $4880
- unknown_data_20000 $05, SUPER_ENERGY_REMOVAL, $49bc, $4994
- unknown_data_20000 $07, POKEMON_BREEDER, $4b1b, $4b06
- unknown_data_20000 $0f, PROFESSOR_OAK, $4cc1, $4cae
- unknown_data_20000 $0a, ENERGY_RETRIEVAL, $4e6e, $4e44
- unknown_data_20000 $0b, SUPER_ENERGY_RETRIEVAL, $4fc1, $4f80
- unknown_data_20000 $06, POKEMON_CENTER, $50eb, $50e0
- unknown_data_20000 $07, IMPOSTER_PROFESSOR_OAK, $517b, $5170
- unknown_data_20000 $0c, ENERGY_SEARCH, $51aa, $519a
- unknown_data_20000 $03, POKEDEX, $52dc, $52b4
- unknown_data_20000 $07, FULL_HEAL, $5428, $541d
- unknown_data_20000 $0a, MR_FUJI, $54a7, $5497
- unknown_data_20000 $0a, SCOOP_UP, $5506, $54f1
- unknown_data_20000 $02, MAINTENANCE, $562c, $560f
- unknown_data_20000 $03, RECYCLE, $56b8, $569a
- unknown_data_20000 $0d, LASS, $5768, $5755
- unknown_data_20000 $04, ITEM_FINDER, $57b1, $578f
- unknown_data_20000 $01, IMAKUNI_CARD, $581e, $5813
- unknown_data_20000 $01, GAMBLER, $5875, $582d
- unknown_data_20000 $05, REVIVE, $58a9, $5899
- unknown_data_20000 $0d, POKEMON_FLUTE, $58e8, $58d8
- unknown_data_20000 $05, CLEFAIRY_DOLL, $5982, $5977
- unknown_data_20000 $05, MYSTERIOUS_FOSSIL, $5982, $5977
- unknown_data_20000 $02, POKE_BALL, $59c6, $59a6
- unknown_data_20000 $02, COMPUTER_SEARCH, $5b34, $5b12
- unknown_data_20000 $02, POKEMON_TRADER, $5d8f, $5d7a
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_07, POTION, AIDecide_Potion1, AIPlay_Potion
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_10, POTION, AIDecide_Potion2, AIPlay_Potion
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_08, SUPER_POTION, AIDecide_SuperPotion1, AIPlay_SuperPotion
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_11, SUPER_POTION, AIDecide_SuperPotion2, AIPlay_SuperPotion
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_13, DEFENDER, AIDecide_Defender1, AIPlay_Defender
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_14, DEFENDER, AIDecide_Defender2, AIPlay_Defender
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_13, PLUSPOWER, AIDecide_Pluspower1, AIPlay_Pluspower
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_14, PLUSPOWER, AIDecide_Pluspower2, AIPlay_Pluspower
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_09, SWITCH, AIDecide_Switch, AIPlay_Switch
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_07, GUST_OF_WIND, AIDecide_GustOfWind, AIPlay_GustOfWind
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_10, GUST_OF_WIND, AIDecide_GustOfWind, AIPlay_GustOfWind
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_04, BILL, AIDecide_Bill, AIPlay_Bill
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_05, ENERGY_REMOVAL, AIDecide_EnergyRemoval, AIPlay_EnergyRemoval
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_05, SUPER_ENERGY_REMOVAL, AIDecide_SuperEnergyRemoval, AIPlay_SuperEnergyRemoval
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_07, POKEMON_BREEDER, AIDecide_PokemonBreeder, AIPlay_PokemonBreeder
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_15, PROFESSOR_OAK, AIDecide_ProfessorOak, AIPlay_ProfessorOak
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_10, ENERGY_RETRIEVAL, AIDecide_EnergyRetrieval, AIPlay_EnergyRetrieval
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_11, SUPER_ENERGY_RETRIEVAL, AIDecide_SuperEnergyRetrieval, AIPlay_SuperEnergyRetrieval
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_06, POKEMON_CENTER, AIDecide_PokemonCenter, AIPlay_PokemonCenter
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_07, IMPOSTER_PROFESSOR_OAK, AIDecide_ImposterProfessorOak, AIPlay_ImposterProfessorOak
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_12, ENERGY_SEARCH, AIDecide_EnergySearch, AIPlay_EnergySearch
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_03, POKEDEX, AIDecide_Pokedex, AIPlay_Pokedex
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_07, FULL_HEAL, AIDecide_FullHeal, AIPlay_FullHeal
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_10, MR_FUJI, AIDecide_MrFuji, AIPlay_MrFuji
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_10, SCOOP_UP, AIDecide_ScoopUp, AIPlay_ScoopUp
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_02, MAINTENANCE, AIDecide_Maintenance, AIPlay_Maintenance
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_03, RECYCLE, AIDecide_Recycle, AIPlay_Recycle
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_13, LASS, AIDecide_Lass, AIPlay_Lass
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_04, ITEM_FINDER, AIDecide_ItemFinder, AIPlay_ItemFinder
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_01, IMAKUNI_CARD, AIDecide_Imakuni, AIPlay_Imakuni
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_01, GAMBLER, AIDecide_Gambler, AIPlay_Gambler
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_05, REVIVE, AIDecide_Revive, AIPlay_Revive
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_13, POKEMON_FLUTE, AIDecide_PokemonFlute, AIPlay_PokemonFlute
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_05, CLEFAIRY_DOLL, AIDecide_ClefairyDollOrMysteriousFossil, AIPlay_ClefairyDollOrMysteriousFossil
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_05, MYSTERIOUS_FOSSIL, AIDecide_ClefairyDollOrMysteriousFossil, AIPlay_ClefairyDollOrMysteriousFossil
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_02, POKE_BALL, AIDecide_Pokeball, AIPlay_Pokeball
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_02, COMPUTER_SEARCH, AIDecide_ComputerSearch, AIPlay_ComputerSearch
+ unknown_data_20000 AI_TRAINER_CARD_PHASE_02, POKEMON_TRADER, AIDecide_PokemonTrader, AIPlay_PokemonTrader
db $ff
-Func_200e5: ; 200e5 (8:40e5)
+_AIProcessHandTrainerCards: ; 200e5 (8:40e5)
ld [wce18], a
; create hand list in wDuelTempList and wTempHandCardList.
call CreateHandCardList
@@ -57,7 +57,7 @@ Func_200e5: ; 200e5 (8:40e5)
.loop_hand
ld a, [hli]
- ld [wce16], a
+ ld [wAITrainerCardToPlay], a
cp $ff
ret z
@@ -67,7 +67,7 @@ Func_200e5: ; 200e5 (8:40e5)
ld hl, Data_20000
.loop_data
xor a
- ld [wce21], a
+ ld [wCurrentAIFlags], a
ld a, [hli]
cp $ff
jp z, .pop_hl
@@ -75,16 +75,18 @@ Func_200e5: ; 200e5 (8:40e5)
; compare input to first byte in data and continue if equal.
cp d
jp nz, .inc_hl_by_5
+
ld a, [hli]
ld [wce17], a
- ld a, [wce16]
+ ld a, [wAITrainerCardToPlay]
call LoadCardDataToBuffer1_FromDeckIndex
+
cp SWITCH
jr nz, .skip_switch_check
ld b, a
- ld a, [wce20]
- and $02
+ ld a, [wPreviousAIFlags]
+ and AI_FLAG_USED_SWITCH
jr nz, .inc_hl_by_4
ld a, b
@@ -95,61 +97,79 @@ Func_200e5: ; 200e5 (8:40e5)
cp b
jr nz, .inc_hl_by_4
+; found Trainer card
push hl
push de
- ld a, [wce16]
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
+
+; if Headache effects prevent playing card
+; move on to the next item in list.
bank1call CheckCantUseTrainerDueToHeadache
jp c, .next_in_data
+
call LoadNonPokemonCardEffectCommands
ld a, EFFECTCMDTYPE_INITIAL_EFFECT_1
call TryExecuteEffectCommandFunction
jp c, .next_in_data
- farcall Func_1743b
+
+; AI can randomly choose not to play card.
+ farcall ChooseRandomlyNotToPlayTrainerCard
jr c, .next_in_data
+
+; call routine to decide whether to play Trainer card
pop de
pop hl
push hl
call CallIndirect
pop hl
jr nc, .inc_hl_by_4
+
+; routine returned carry, which means
+; this card should be played.
inc hl
inc hl
- ld [wce19], a
+ ld [wAITrainerCardParameter], a
+; show Play Trainer Card screen
push de
push hl
- ld a, [wce16]
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
ld a, OPPACTION_PLAY_TRAINER
bank1call AIMakeDecision
pop hl
pop de
jr c, .inc_hl_by_2
+
+; execute the effects of the Trainer card
push hl
call CallIndirect
pop hl
inc hl
inc hl
- ld a, [wce20]
+ ld a, [wPreviousAIFlags]
ld b, a
- ld a, [wce21]
+ ld a, [wCurrentAIFlags]
or b
- ld [wce20], a
+ ld [wPreviousAIFlags], a
pop hl
- and $08
+ and AI_FLAG_MODIFIED_HAND
jp z, .loop_hand
-.asm_20186 ; 20186 (8:4186)
+; the hand was modified during the Trainer effect
+; so it needs to be re-listed again and
+; looped from the top.
call CreateHandCardList
ld hl, wDuelTempList
ld de, wTempHandCardList
call CopyBuffer
ld hl, wTempHandCardList
- ld a, [wce20]
- and $f7
- ld [wce20], a
+; clear the AI_FLAG_MODIFIED_HAND flag
+ ld a, [wPreviousAIFlags]
+ and ~AI_FLAG_MODIFIED_HAND
+ ld [wPreviousAIFlags], a
jp .loop_hand
.inc_hl_by_5
@@ -177,10 +197,10 @@ Func_200e5: ; 200e5 (8:40e5)
; 0x201b5
; makes AI use Potion card.
-AIPlayPotion: ; 201b5 (8:41b5)
- ld a, [wce16]
+AIPlay_Potion: ; 201b5 (8:41b5)
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
- ld a, [wce19]
+ ld a, [wAITrainerCardParameter]
ldh [hTemp_ffa0], a
ld e, a
call GetCardDamage
@@ -199,7 +219,7 @@ AIPlayPotion: ; 201b5 (8:41b5)
; next turn after using Potion.
; if it cannot, return carry.
; also take into account whether move is high recoil.
-CheckIfPotionPreventsKnockOut: ; 201d1 (8:41d1)
+AIDecide_Potion1: ; 201d1 (8:41d1)
farcall AIDecideWhetherToRetreat
jr c, .no_carry
call Func_22bad
@@ -242,7 +262,7 @@ CheckIfPotionPreventsKnockOut: ; 201d1 (8:41d1)
; output:
; a = card to use Potion on;
; carry set if Potion should be used.
-FindTargetCardForPotion: ; 20204 (8:4204)
+AIDecide_Potion2: ; 20204 (8:4204)
xor a
ldh [hTempPlayAreaLocation_ff9d], a
farcall CheckIfDefendingPokemonCanKnockOut
@@ -342,16 +362,16 @@ FindTargetCardForPotion: ; 20204 (8:4204)
; and have the BOOST_IF_TAKEN_DAMAGE effect.
.check_boost_if_taken_damage ; 2027e (8:427e)
push de
- xor a ; first attack
- ld [wSelectedMoveIndex], a
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
farcall CheckIfSelectedMoveIsUnusable
jr c, .second_attack
ld a, MOVE_FLAG3_ADDRESS | BOOST_IF_TAKEN_DAMAGE_F
call CheckLoadedMoveFlag
jr c, .set_carry
.second_attack
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
farcall CheckIfSelectedMoveIsUnusable
jr c, .false
ld a, MOVE_FLAG3_ADDRESS | BOOST_IF_TAKEN_DAMAGE_F
@@ -368,14 +388,14 @@ FindTargetCardForPotion: ; 20204 (8:4204)
; 0x202a8
; makes AI use Super Potion card.
-AIPlaySuperPotion: ; 202a8 (8:42a8)
- ld a, [wce16]
+AIPlay_SuperPotion: ; 202a8 (8:42a8)
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
- ld a, [wce19]
+ ld a, [wAITrainerCardParameter]
ldh [hTempPlayAreaLocation_ffa1], a
- call GetEnergyCardToDiscard
+ call AIPickEnergyCardToDiscard
ldh [hTemp_ffa0], a
- ld a, [wce19]
+ ld a, [wAITrainerCardParameter]
ld e, a
call GetCardDamage
cp 40
@@ -393,7 +413,7 @@ AIPlaySuperPotion: ; 202a8 (8:42a8)
; active card next turn after using Super Potion.
; if it cannot, return carry.
; also take into account whether move is high recoil.
-CheckIfSuperPotionPreventsKnockOut: ; 202cc (8:42cc)
+AIDecide_SuperPotion1: ; 202cc (8:42cc)
farcall AIDecideWhetherToRetreat
jr c, .no_carry
call Func_22bad
@@ -411,7 +431,7 @@ CheckIfSuperPotionPreventsKnockOut: ; 202cc (8:42cc)
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
ld h, a
- ld e, $00
+ ld e, PLAY_AREA_ARENA
call GetCardDamage
cp 40 + 1 ; if damage < 40
jr c, .calculate_hp
@@ -447,7 +467,7 @@ CheckIfSuperPotionPreventsKnockOut: ; 202cc (8:42cc)
; output:
; a = card to use Super Potion on;
; carry set if Super Potion should be used.
-FindTargetCardForSuperPotion: ; 2030f (8:430f)
+AIDecide_SuperPotion2: ; 2030f (8:430f)
xor a
ldh [hTempPlayAreaLocation_ff9d], a
farcall CheckIfDefendingPokemonCanKnockOut
@@ -457,7 +477,7 @@ FindTargetCardForSuperPotion: ; 2030f (8:430f)
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
ld h, a
- ld e, $00
+ ld e, PLAY_AREA_ARENA
call GetCardDamage
cp 40 + 1 ; if damage < 40
jr c, .calculate_hp
@@ -564,16 +584,16 @@ FindTargetCardForSuperPotion: ; 2030f (8:430f)
; and have the BOOST_IF_TAKEN_DAMAGE effect.
.check_boost_if_taken_damage ; 2039e (8:439e)
push de
- xor a ; first attack
- ld [wSelectedMoveIndex], a
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
farcall CheckIfSelectedMoveIsUnusable
jr c, .second_attack_1
ld a, MOVE_FLAG3_ADDRESS | BOOST_IF_TAKEN_DAMAGE_F
call CheckLoadedMoveFlag
jr c, .true_1
.second_attack_1
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
farcall CheckIfSelectedMoveIsUnusable
jr c, .false_1
ld a, MOVE_FLAG3_ADDRESS | BOOST_IF_TAKEN_DAMAGE_F
@@ -593,8 +613,8 @@ FindTargetCardForSuperPotion: ; 2030f (8:430f)
; given that they have enough energy to be used before discarding.
.check_energy_cost ; 203c8 (8:43c8)
push de
- xor a ; first attack
- ld [wSelectedMoveIndex], a
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
ld a, e
ldh [hTempPlayAreaLocation_ff9d], a
farcall CheckEnergyNeededForAttack
@@ -605,8 +625,8 @@ FindTargetCardForSuperPotion: ; 2030f (8:430f)
.second_attack_2
pop de
push de
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
ld a, e
ldh [hTempPlayAreaLocation_ff9d], a
farcall CheckEnergyNeededForAttack
@@ -624,8 +644,8 @@ FindTargetCardForSuperPotion: ; 2030f (8:430f)
ret
; 0x203f8
-AIPlayDefender: ; 203f8 (8:43f8)
- ld a, [wce16]
+AIPlay_Defender: ; 203f8 (8:43f8)
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
xor a
ldh [hTemp_ffa0], a
@@ -637,17 +657,17 @@ AIPlayDefender: ; 203f8 (8:43f8)
; returns carry if using Defender can prevent a KO
; by the defending Pokémon.
; this takes into account both attacks and whether they're useable.
-CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
- xor a
+AIDecide_Defender1: ; 20406 (8:4406)
+ xor a ; PLAY_AREA_ARENA
ldh [hTempPlayAreaLocation_ff9d], a
farcall CheckIfAnyMoveKnocksOutDefendingCard
- jr nc, .asm_2041b
+ jr nc, .cannot_ko
farcall CheckIfSelectedMoveIsUnusable
jr nc, .no_carry
farcall LookForEnergyNeededForMoveInHand
jr c, .no_carry
-.asm_2041b
+.cannot_ko
; check if any of the defending Pokémon's attacks deal
; damage exactly equal to current HP, and if so,
; only continue if that move is useable.
@@ -658,7 +678,7 @@ CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
call SwapTurn
jr c, .no_carry
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
farcall EstimateDamage_FromDefendingPokemon
ld a, [wDamage]
ld [wce06], a
@@ -666,11 +686,11 @@ CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
; load in a the attack that was not selected,
; and check if it is useable.
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld b, a
ld a, $01
sub b
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
push de
call SwapTurn
farcall CheckIfSelectedMoveIsUnusable
@@ -680,7 +700,7 @@ CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
; the other attack is useable.
; compare its damage to the selected move.
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
push de
farcall EstimateDamage_FromDefendingPokemon
pop de
@@ -692,11 +712,11 @@ CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
; and deals less damage than the selected move,
; switch back to the other attack.
.switch_back
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld b, a
ld a, $01
sub b
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, [wce06]
ld [wDamage], a
@@ -722,7 +742,7 @@ CheckIfDefenderPreventsKnockOut: ; 20406 (8:4406)
; return carry if using Defender prevents Pokémon
; from being knocked out by an attack with recoil.
-CheckIfDefenderPreventsRecoilKnockOut: ; 20486 (8:4486)
+AIDecide_Defender2: ; 20486 (8:4486)
ld a, MOVE_FLAG1_ADDRESS | HIGH_RECOIL_F
call CheckLoadedMoveFlag
jr c, .recoil
@@ -736,14 +756,14 @@ CheckIfDefenderPreventsRecoilKnockOut: ; 20486 (8:4486)
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
or a
jr nz, .second_attack
; first attack
- ld a, [wLoadedCard2Move1Unknown1]
+ ld a, [wLoadedCard2Move1EffectParam]
jr .check_weak
.second_attack
- ld a, [wLoadedCard2Move2Unknown1]
+ ld a, [wLoadedCard2Move2EffectParam]
; double recoil damage if card is weak to its own color.
.check_weak
@@ -795,20 +815,23 @@ CheckIfDefenderPreventsRecoilKnockOut: ; 20486 (8:4486)
ret
; 0x204e8
-AIPlayPluspower: ; 204e8 (8:44e8)
- ld a, [wce21]
- or $01
- ld [wce21], a
- ld a, [wce19]
- ld [wcdd6], a
- ld a, [wce16]
+AIPlay_Pluspower: ; 204e8 (8:44e8)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_USED_PLUSPOWER
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardParameter]
+ ld [wAIPluspowerAttack], a
+ ld a, [wAITrainerCardToPlay]
ldh [hTempCardIndex_ff9f], a
ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
bank1call AIMakeDecision
ret
; 0x20501
-Func_20501: ; 20501 (8:4501)
+; returns carry if using a Pluspower can KO defending Pokémon
+; if active card cannot KO without the boost.
+; outputs in a the attack to use.
+AIDecide_Pluspower1: ; 20501 (8:4501)
; this is mistakenly duplicated
xor a
ldh [hTempPlayAreaLocation_ff9d], a
@@ -848,36 +871,44 @@ Func_20501: ; 20501 (8:4501)
call SwapTurn
jr c, .no_carry
- xor a ; first attack
- ld [wSelectedMoveIndex], a
- call .asm_20562
- jr c, .asm_20551
- ld a, $01 ; second attack
- ld [wSelectedMoveIndex], a
- call .asm_20562
- jr c, .asm_20559
+; check both attacks and decide which one
+; can KO with Pluspower boost.
+; if neither can KO, return no carry.
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
+ call .check_ko_with_pluspower
+ jr c, .kos_with_pluspower_1
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
+ call .check_ko_with_pluspower
+ jr c, .kos_with_pluspower_2
.no_carry
or a
ret
-.asm_20551
- call .asm_20589
+
+; first attack can KO with Pluspower.
+.kos_with_pluspower_1
+ call .check_mr_mime
jr nc, .no_carry
- xor a ; first attack
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
scf
ret
-.asm_20559
- call .asm_20589
+; second attack can KO with Pluspower.
+.kos_with_pluspower_2
+ call .check_mr_mime
jr nc, .no_carry
- ld a, $01 ; first attack
+ ld a, SECOND_ATTACK
scf
ret
; 0x20562
-.asm_20562 ; 20562 (8:4562)
+; return carry if move is useable and KOs
+; defending Pokémon with Pluspower boost.
+.check_ko_with_pluspower ; 20562 (8:4562)
farcall CheckIfSelectedMoveIsUnusable
jr c, .unusable
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
farcall EstimateDamage_VersusDefendingCard
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -887,23 +918,25 @@ Func_20501: ; 20501 (8:4501)
jr c, .no_carry
jr z, .no_carry
ld a, [hl]
- add 10
+ add 10 ; add Pluspower boost
ld c, a
ld a, b
sub c
- ret c
- ret nz
+ ret c ; return carry if damage > HP left
+ ret nz ; does not KO
scf
- ret
+ ret ; KOs with Pluspower boost
.unusable
or a
ret
; 0x20589
-.asm_20589 ; 20589 (8:4589)
+; returns carry if Pluspower boost does
+; not exceed 30 damage when facing Mr. Mime.
+.check_mr_mime ; 20589 (8:4589)
ld a, [wDamage]
- add 10
- cp 30
+ add 10 ; add Pluspower boost
+ cp 30 ; no danger in preventing damage
ret c
call SwapTurn
ld a, DUELVARS_ARENA_CARD
@@ -911,41 +944,5359 @@ Func_20501: ; 20501 (8:4501)
call GetCardIDFromDeckIndex
call SwapTurn
ld a, e
- cp $9b
+ cp MR_MIME
ret z
+; damage is >= 30 but not Mr. Mime
scf
ret
; 0x205a5
-Func_205a5: ; 205a5 (8:45a5)
+; returns carry 7/10 of the time
+; if selected move is useable, can't KO without Pluspower boost
+; can damage Mr. Mime even with Pluspower boost
+; and has a minimum damage > 0.
+; outputs in a the attack to use.
+AIDecide_Pluspower2: ; 205a5 (8:45a5)
xor a
ldh [hTempPlayAreaLocation_ff9d], a
- call Func_205d7
- jr nc, .asm_205b9
- call Func_205f6
- jr nc, .asm_205b9
- call Func_205bb
- jr nc, .asm_205b9
+ call .check_can_ko
+ jr nc, .no_carry
+ call .check_random
+ jr nc, .no_carry
+ call .check_mr_mime
+ jr nc, .no_carry
scf
ret
-.asm_205b9
+.no_carry
or a
ret
; 0x205bb
-Func_205bb: ; 205bb (8:45bb)
- INCROM $205bb, $205d7
+; returns carry if Pluspower boost does
+; not exceed 30 damage when facing Mr. Mime.
+.check_mr_mime ; 205bb (8:45bb)
+ ld a, [wDamage]
+ add 10 ; add Pluspower boost
+ cp 30 ; no danger in preventing damage
+ ret c
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ call SwapTurn
+ ld a, e
+ cp MR_MIME
+ ret z
+; damage is >= 30 but not Mr. Mime
+ scf
+ ret
+; 0x205d7
+
+; return carry if move is useable but cannot KO.
+.check_can_ko ; 205d7 (8:45d7)
+ farcall CheckIfSelectedMoveIsUnusable
+ jr c, .unuseable
+ ld a, [wSelectedAttack]
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld hl, wDamage
+ sub [hl]
+ jr c, .no_carry
+ jr z, .no_carry
+; can't KO.
+ scf
+ ret
+.unuseable
+ or a
+ ret
+; 0x205f6
+
+; return carry 7/10 of the time if
+; move is useable and minimum damage > 0.
+.check_random ; 205f6 (8:45f6)
+ farcall CheckIfSelectedMoveIsUnusable
+ jr c, .unuseable
+ ld a, [wSelectedAttack]
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wAIMinDamage]
+ cp 10
+ jr c, .unuseable
+ ld a, 10
+ call Random
+ cp 3
+ ret
+; 0x20612
+
+AIPlay_Switch: ; 20612 (8:4612)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_USED_SWITCH
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ xor a
+ ld [wcdb4], a
+ ret
+; 0x2062e
+
+; returns carry if the active card has less energy cards
+; than the retreat cost and if AI can't play an energy
+; card from the hand to fulfill the cost
+AIDecide_Switch: ; 2062e (8:462e)
+; check if AI can already play an energy card from hand to retreat
+ ld a, [wAIPlayEnergyCardForRetreat]
+ or a
+ jr z, .check_cost_amount
+
+; can't play energy card from hand to retreat
+; compare number of energy cards attached to retreat cost
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call GetPlayAreaCardRetreatCost
+ push af
+ ld e, PLAY_AREA_ARENA
+ farcall CountNumberOfEnergyCardsAttached
+ ld b, a
+ pop af
+ sub b
+ ; jump if cards attached > retreat cost
+ jr c, .check_cost_amount
+ cp 2
+ ; jump if retreat cost is 2 more energy cards
+ ; than the number of cards attached
+ jr nc, .switch
+
+.check_cost_amount
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call GetPlayAreaCardRetreatCost
+ cp 3
+ ; jump if retreat cost >= 3
+ jr nc, .switch
+
+ push af
+ ld e, PLAY_AREA_ARENA
+ farcall CountNumberOfEnergyCardsAttached
+ pop bc
+ cp b
+ ; jump if energy cards attached < retreat cost
+ jr c, .switch
+ ret
+
+.switch
+ farcall AIDecideBenchPokemonToSwitchTo
+ ccf
+ ret
+; 0x20666
+
+AIPlay_GustOfWind: ; 20666 (8:4666)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_USED_GUST_OF_WIND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x2067e
+
+AIDecide_GustOfWind: ; 2067e (8:467e)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ dec a
+ or a
+ ret z ; no bench cards
+
+; if used Gust Of Wind already,
+; do not use it again.
+ ld a, [wPreviousAIFlags]
+ and AI_FLAG_USED_GUST_OF_WIND
+ ret nz
+
+ farcall CheckIfActivePokemonCanUseAnyNonResidualMove
+ ret nc ; no non-residual move can be used
+
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .check_id ; if can't KO
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .no_carry ; if KO move is useable
+ farcall LookForEnergyNeededForMoveInHand
+ jr c, .no_carry ; if energy card is in hand
+
+.check_id
+ ; skip if current active card is MEW3 or MEWTWO1
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp MEW3
+ jr z, .no_carry
+ cp MEWTWO1
+ jr z, .no_carry
+
+ call .FindBenchCardToKnockOut
+ ret c
+
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call .CheckIfNoAttackDealsDamage
+ jr c, .check_bench_energy
+
+ ; skip if current arena card's color is
+ ; the defending card's weakness
+ call GetArenaCardColor
+ call TranslateColorToWR
+ ld b, a
+ call SwapTurn
+ call GetArenaCardWeakness
+ call SwapTurn
+ and b
+ jr nz, .no_carry
+
+; check weakness
+ call .FindBenchCardWithWeakness
+ ret nc ; no bench card weak to arena card
+ scf
+ ret ; found bench card weak to arena card
+
+.no_carry
+ or a
+ ret
+
+; being here means AI's arena card cannot damage player's arena card
+
+; first check if there is a card in player's bench that
+; has no attached energy cards and that the AI can damage
+.check_bench_energy
+ ; return carry if there's a bench card with weakness
+ call .FindBenchCardWithWeakness
+ ret c
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+; loop through bench and check attached energy cards
+.loop_1
+ inc e
+ dec d
+ jr z, .check_bench_hp
+ call SwapTurn
+ call GetPlayAreaCardAttachedEnergies
+ call SwapTurn
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr nz, .loop_1 ; skip if has energy attached
+ call .CheckIfCanDamageBenchedCard
+ jr nc, .loop_1
+ ld a, e
+ scf
+ ret
+
+.check_bench_hp
+ ld a, $ff
+ ld [wce06], a
+ xor a
+ ld [wce08], a
+ ld e, a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ld d, a
+
+; find bench card with least amount of available HP
+.loop_2
+ inc e
+ dec d
+ jr z, .check_found
+ ld a, e
+ add DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld a, [wce06]
+ inc b
+ cp b
+ jr c, .loop_2
+ call .CheckIfCanDamageBenchedCard
+ jr nc, .loop_2
+ dec b
+ ld a, b
+ ld [wce06], a
+ ld a, e
+ ld [wce08], a
+ jr .loop_2
+
+.check_found
+ ld a, [wce08]
+ or a
+ jr z, .no_carry
+; a card was found
+
+.set_carry
+ scf
+ ret
+
+.check_can_damage
+ push bc
+ push hl
+ xor a ; PLAY_AREA_ARENA
+ farcall CheckIfCanDamageDefendingPokemon
+ pop hl
+ pop bc
+ jr nc, .loop_3
+ ld a, c
+ scf
+ ret
+
+; returns carry if any of the player's
+; benched cards is weak to color in b
+; and has a way to damage it
+.FindBenchCardWithWeakness ; 2074d (8:474d)
+ ld a, DUELVARS_BENCH
+ call GetNonTurnDuelistVariable
+ ld c, PLAY_AREA_ARENA
+.loop_3
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ call SwapTurn
+ call LoadCardDataToBuffer1_FromDeckIndex
+ call SwapTurn
+ ld a, [wLoadedCard1Weakness]
+ and b
+ jr nz, .check_can_damage
+ jr .loop_3
+
+; returns carry if neither attack can deal damage
+.CheckIfNoAttackDealsDamage ; 2076b (8:476b)
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
+ call .CheckIfAttackDealsNoDamage
+ jr c, .second_attack
+ ret
+.second_attack
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
+ call .CheckIfAttackDealsNoDamage
+ jr c, .true
+ ret
+.true
+ scf
+ ret
+
+; returns carry if attack is Pokemon Power
+; or otherwise doesn't deal any damage
+.CheckIfAttackDealsNoDamage ; 20782 (8:4782)
+ ld a, [wSelectedAttack]
+ ld e, a
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, a
+ call CopyMoveDataAndDamage_FromDeckIndex
+ ld a, [wLoadedMoveCategory]
+
+ ; skip if move is a Power or has 0 damage
+ cp POKEMON_POWER
+ jr z, .no_damage
+ ld a, [wDamage]
+ or a
+ ret z
+
+ ; check damage against defending card
+ ld a, [wSelectedAttack]
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wAIMaxDamage]
+ or a
+ ret nz
+
+.no_damage
+ scf
+ ret
+
+; returns carry if there is a player's bench card that
+; the opponent's current active card can KO
+.FindBenchCardToKnockOut ; 207a9 (8:47a9)
+ ld a, DUELVARS_BENCH
+ call GetNonTurnDuelistVariable
+ ld e, PLAY_AREA_BENCH_1
+
+.loop_4
+ ld a, [hli]
+ cp $ff
+ ret z
+
+; overwrite the player's active card and its HP
+; with the current bench card that is being checked
+ push hl
+ push de
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ push af
+ ld [hl], b
+ ld a, e
+ add DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ push af
+ ld [hl], b
+
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call .CheckIfAnyAttackKnocksOut
+ jr nc, .next
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .found
+ farcall LookForEnergyNeededForMoveInHand
+ jr c, .found
+
+; the following two local routines can be condensed into one
+; since they both revert the player's arena card
+.next
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ pop de
+ inc e
+ pop hl
+ jr .loop_4
+
+; revert player's arena card and set carry
+.found
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ pop de
+ ld a, e
+ pop hl
+ scf
+ ret
+
+; returns carry if any of arena card's attacks
+; KOs player card in location stored in e
+.CheckIfAnyAttackKnocksOut ; 20806 (8:4806)
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ call .CheckIfAttackKnocksOut
+ ret c
+ ld a, SECOND_ATTACK
+
+; returns carry if attack KOs player card
+; in location stored in e
+.CheckIfAttackKnocksOut
+ push de
+ farcall EstimateDamage_VersusDefendingCard
+ pop de
+ ld a, DUELVARS_ARENA_CARD_HP
+ add e
+ call GetNonTurnDuelistVariable
+ ld hl, wDamage
+ sub [hl]
+ ret c
+ ret nz
+ scf
+ ret
+
+; returns carry if opponent's arena card can damage
+; this benched card if it were switched with
+; the player's arena card
+.CheckIfCanDamageBenchedCard ; 20821 (8:4821)
+ push bc
+ push de
+ push hl
+
+ ; overwrite arena card data
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ push af
+ ld [hl], b
+
+ ; overwrite arena card HP
+ ld a, e
+ add DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ push af
+ ld [hl], b
+
+ xor a ; PLAY_AREA_ARENA
+ farcall CheckIfCanDamageDefendingPokemon
+ jr c, .can_damage
+
+; the following two local routines can be condensed into one
+; since they both revert the player's arena card
+
+; can't damage
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ pop hl
+ pop de
+ pop bc
+ or a
+ ret
+
+.can_damage
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+ pop hl
+ pop de
+ pop bc
+ scf
+ ret
+; 0x2086d
+
+AIPlay_Bill: ; 2086d (8:486d)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20878
+
+; return carry if cards in deck > 9
+AIDecide_Bill: ; 20878 (8:4878)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE - 9
+ ret
+; 0x20880
+
+AIPlay_EnergyRemoval: ; 20880 (8:4880)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20895
+
+; picks an energy card in the player's Play Area to remove
+AIDecide_EnergyRemoval: ; 20895 (8:4895)
+; check if the current active card can KO player's card
+; if it's possible to KO, then do not consider the player's
+; active card to remove its attached energy
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .cannot_ko
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .can_ko
+ farcall LookForEnergyNeededForMoveInHand
+ jr nc, .cannot_ko
+
+.can_ko
+ ; start checking from the bench
+ ld a, PLAY_AREA_BENCH_1
+ ld [wce0f], a
+ jr .check_bench_energy
+.cannot_ko
+ ; start checking from the arena card
+ xor a ; PLAY_AREA_ARENA
+ ld [wce0f], a
+
+; loop each card and check if it has enough energy to use any attack
+; if it does, then proceed to pick an energy card to remove
+.check_bench_energy
+ call SwapTurn
+ ld a, [wce0f]
+ ld e, a
+.loop_1
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ cp $ff
+ jr z, .default
+
+ ld d, a
+ call .CheckIfCardHasEnergyAttached
+ jr nc, .next_1
+ call .CheckIfNotEnoughEnergyToAttack
+ jr nc, .pick_energy ; jump if enough energy to attack
+.next_1
+ inc e
+ jr .loop_1
+
+.pick_energy
+; a play area card was picked to remove energy
+; store the picked energy card to remove in wce1a
+; and set carry
+ ld a, e
+ push af
+ call PickAttachedEnergyCardToRemove
+ ld [wce1a], a
+ pop af
+ call SwapTurn
+ scf
+ ret
+
+; if no card in player's Play Area was found with enough energy
+; to attack, just pick an energy card from player's active card
+; (in case the AI cannot KO it this turn)
+.default
+ ld a, [wce0f]
+ or a
+ jr nz, .check_bench_damage ; not active card
+ call .CheckIfCardHasEnergyAttached
+ jr c, .pick_energy
+
+; lastly, check what attack on player's Play Area is highest damaging
+; and pick an energy card attached to that Pokemon to remove
+.check_bench_damage
+ xor a
+ ld [wce06], a
+ ld [wce08], a
+
+ ld e, PLAY_AREA_BENCH_1
+.loop_2
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ cp $ff
+ jr z, .found_damage
+
+ ld d, a
+ call .CheckIfCardHasEnergyAttached
+ jr nc, .next_2
+ call .FindHighestDamagingAttack
+.next_2
+ inc e
+ jr .loop_2
+
+.found_damage
+ ld a, [wce08]
+ or a
+ jr z, .no_carry ; skip if none found
+ ld e, a
+ jr .pick_energy
+.no_carry
+ call SwapTurn
+ or a
+ ret
+
+; returns carry if this card has any energy cards attached
+.CheckIfCardHasEnergyAttached ; 2091a (8:491a)
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ ret z
+ scf
+ ret
+
+; returns carry if this card does not
+; have enough energy for either of its attacks
+.CheckIfNotEnoughEnergyToAttack ; 20924 (8:4924)
+ push de
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckEnergyNeededForAttack
+ jr nc, .enough_energy
+ pop de
+
+ push de
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckEnergyNeededForAttack
+ jr nc, .check_surplus
+ pop de
+
+; neither attack has enough energy
+ scf
+ ret
+
+.enough_energy
+ pop de
+ or a
+ ret
+
+; first attack doesn't have enough energy (or is just a Pokemon Power)
+; but second attack has enough energy to be used
+; check if there's surplus energy for attack and, if so, return carry
+.check_surplus
+ farcall CheckIfNoSurplusEnergyForMove
+ pop de
+ ccf
+ ret
+
+; stores in wce06 the highest damaging attack
+; for the card in play area location in e
+; and stores this card's location in wce08
+.FindHighestDamagingAttack ; 2094f (8:494f)
+ push de
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wDamage]
+ or a
+ jr z, .skip_1
+ ld e, a
+ ld a, [wce06]
+ cp e
+ jr nc, .skip_1
+ ld a, e
+ ld [wce06], a ; store this damage value
+ pop de
+ ld a, e
+ ld [wce08], a ; store this location
+ jr .second_attack
+
+.skip_1
+ pop de
+
+.second_attack
+ push de
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+ ld a, SECOND_ATTACK
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wDamage]
+ or a
+ jr z, .skip_2
+ ld e, a
+ ld a, [wce06]
+ cp e
+ jr nc, .skip_2
+ ld a, e
+ ld [wce06], a ; store this damage value
+ pop de
+ ld a, e
+ ld [wce08], a ; store this location
+ ret
+.skip_2
+ pop de
+ ret
+; 0x20994
+
+AIPlay_SuperEnergyRemoval: ; 20994 (8:4994)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wce1b]
+ ldh [hTempRetreatCostCards], a
+ ld a, [wce1c]
+ ldh [hTempRetreatCostCards + 1], a
+ ld a, [wce1d]
+ ldh [hTempRetreatCostCards + 2], a
+ ld a, $ff
+ ldh [hTempRetreatCostCards + 3], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x209bc
+
+; picks two energy cards in the player's Play Area to remove
+AIDecide_SuperEnergyRemoval: ; 209bc (8:49bc)
+ ld e, PLAY_AREA_BENCH_1
+.loop_1
+; first find an Arena card with a color energy card
+; to discard for card effect
+; return immediately if no Arena cards
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ cp $ff
+ jr z, .exit
+
+ ld d, a
+ push de
+ call .LookForNonDoubleColorless
+ pop de
+ jr c, .not_double_colorless
+ inc e
+ jr .loop_1
+
+; returns carry if an energy card other than double colorless
+; is found attached to the card in play area location e
+.LookForNonDoubleColorless
+ ld a, e
+ call CreateArenaOrBenchEnergyCardList
+ ld hl, wDuelTempList
+.loop_2
+ ld a, [hli]
+ cp $ff
+ ret z
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp DOUBLE_COLORLESS_ENERGY
+ ; any basic energy card
+ ; will set carry flag here
+ jr nc, .loop_2
+ ret
+
+.exit
+ or a
+ ret
+
+; card in Play Area location e was found with
+; a basic energy card
+.not_double_colorless
+ ld a, e
+ ld [wce0f], a
+
+; check if the current active card can KO player's card
+; if it's possible to KO, then do not consider the player's
+; active card to remove its attached energy
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .cannot_ko
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .can_ko
+ farcall LookForEnergyNeededForMoveInHand
+ jr nc, .cannot_ko
+
+.can_ko
+ ; start checking from the bench
+ call SwapTurn
+ ld e, PLAY_AREA_BENCH_1
+ jr .loop_3
+.cannot_ko
+ ; start checking from the arena card
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+
+; loop each card and check if it has enough energy to use any attack
+; if it does, then proceed to pick energy cards to remove
+.loop_3
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ cp $ff
+ jr z, .no_carry
+
+ ld d, a
+ call .CheckIfFewerThanTwoEnergyCards
+ jr c, .next_1
+ call .CheckIfNotEnoughEnergyToAttack
+ jr nc, .found_card ; jump if enough energy to attack
+.next_1
+ inc e
+ jr .loop_3
+
+.found_card
+; a play area card was picked to remove energy
+; if this is not the Arena Card, then check
+; entire bench to pick the highest damage
+ ld a, e
+ or a
+ jr nz, .check_bench_damage
+
+; store the picked energy card to remove in wce1a
+; and set carry
+.pick_energy
+ ld [wce1b], a
+ call PickTwoAttachedEnergyCards
+ ld [wce1c], a
+ ld a, b
+ ld [wce1d], a
+ call SwapTurn
+ ld a, [wce0f]
+ push af
+ call AIPickEnergyCardToDiscard
+ ld [wce1a], a
+ pop af
+ scf
+ ret
+
+; check what attack on player's Play Area is highest damaging
+; and pick an energy card attached to that Pokemon to remove
+.check_bench_damage
+ xor a
+ ld [wce06], a
+ ld [wce08], a
+
+ ld e, PLAY_AREA_BENCH_1
+.loop_4
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ cp $ff
+ jr z, .found_damage
+
+ ld d, a
+ call .CheckIfFewerThanTwoEnergyCards
+ jr c, .next_2
+ call .CheckIfNotEnoughEnergyToAttack
+ jr c, .next_2
+ call .FindHighestDamagingAttack
+.next_2
+ inc e
+ jr .loop_4
+
+.found_damage
+ ld a, [wce08]
+ or a
+ jr z, .no_carry
+ jr .pick_energy
+.no_carry
+ call SwapTurn
+ or a
+ ret
+
+; returns carry if the number of energy cards attached
+; is fewer than 2, or if all energy combined yields
+; fewer than 2 energy
+.CheckIfFewerThanTwoEnergyCards ; 20a77 (8:4a77)
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ cp 2
+ ret c ; return if fewer than 2 attached cards
+
+; count all energy attached
+; i.e. colored energy card = 1
+; and double colorless energy card = 2
+ xor a
+ ld b, NUM_COLORED_TYPES
+ ld hl, wAttachedEnergies
+.loop_5
+ add [hl]
+ inc hl
+ dec b
+ jr nz, .loop_5
+ ld b, [hl]
+ srl b
+ add b
+ cp 2
+ ret
+
+; returns carry if this card does not
+; have enough energy for either of its attacks
+.CheckIfNotEnoughEnergyToAttack ; 20a92 (8:4a92)
+ push de
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ ld [wSelectedAttack], a
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckEnergyNeededForAttack
+ jr nc, .enough_energy
+ pop de
+
+ push de
+ ld a, SECOND_ATTACK
+ ld [wSelectedAttack], a
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ farcall CheckEnergyNeededForAttack
+ jr nc, .check_surplus
+ pop de
+
+; neither attack has enough energy
+ scf
+ ret
+
+.enough_energy
+ pop de
+ or a
+ ret
+
+; first attack doesn't have enough energy (or is just a Pokemon Power)
+; but second attack has enough energy to be used
+; check if there's surplus energy for attack and, if so,
+; return carry if this surplus energy is at least 2
+.check_surplus
+ farcall CheckIfNoSurplusEnergyForMove
+ cp 2
+ jr c, .enough_energy
+ pop de
+ scf
+ ret
+; 0x20ac1
+
+; stores in wce06 the highest damaging attack
+; for the card in play area location in e
+; and stores this card's location in wce08
+.FindHighestDamagingAttack ; 20ac1 (8:4ac1)
+ push de
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+ xor a ; FIRST_ATTACK_OR_PKMN_POWER
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wDamage]
+ or a
+ jr z, .skip_1
+ ld e, a
+ ld a, [wce06]
+ cp e
+ jr nc, .skip_1
+ ld a, e
+ ld [wce06], a ; store this damage value
+ pop de
+ ld a, e
+ ld [wce08], a ; store this location
+ jr .second_attack
+
+.skip_1
+ pop de
+
+.second_attack
+ push de
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+ ld a, SECOND_ATTACK
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wDamage]
+ or a
+ jr z, .skip_2
+ ld e, a
+ ld a, [wce06]
+ cp e
+ jr nc, .skip_2
+ ld a, e
+ ld [wce06], a ; store this damage value
+ pop de
+ ld a, e
+ ld [wce08], a ; store this location
+ ret
+.skip_2
+ pop de
+ ret
+; 0x20b06
+
+AIPlay_PokemonBreeder: ; 20b06 (8:4b06)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wce1a]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20b1b
+
+AIDecide_PokemonBreeder: ; 20b1b (8:4b1b)
+ call IsPrehistoricPowerActive
+ jp c, .done
+
+ ld a, 7
+ ld hl, wce08
+ call ClearMemory_Bank8
+
+ xor a
+ ld [wce06], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+
+.loop_hand_1
+ ld a, [hli]
+ cp $ff
+ jr z, .not_found_in_hand
+
+; check if card in hand is any of the following
+; stage 2 Pokemon cards
+ ld d, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp VENUSAUR1
+ jr z, .found
+ cp VENUSAUR2
+ jr z, .found
+ cp BLASTOISE
+ jr z, .found
+ cp VILEPLUME
+ jr z, .found
+ cp ALAKAZAM
+ jr z, .found
+ cp GENGAR
+ jr nz, .loop_hand_1
+
+.found
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ push hl
+ call GetTurnDuelistVariable
+ pop hl
+ ld c, a
+ ld e, PLAY_AREA_ARENA
+
+; check Play Area for card that can evolve into
+; the picked stage 2 Pokemon
+.loop_play_area_1
+ push hl
+ push bc
+ push de
+ call CheckIfCanEvolveInto_BasicToStage2
+ pop de
+ call nc, .can_evolve
+ pop bc
+ pop hl
+ inc e
+ dec c
+ jr nz, .loop_play_area_1
+ jr .loop_hand_1
+
+.can_evolve
+ ld a, DUELVARS_ARENA_CARD_HP
+ add e
+ call GetTurnDuelistVariable
+ call ConvertHPToCounters
+ swap a
+ ld b, a
+
+; count number of energy cards attached and keep
+; the lowest 4 bits (capped at $0f)
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ cp $10
+ jr c, .not_maxed_out
+ ld a, %00001111
+.not_maxed_out
+ or b
+
+; 4 high bits of a = HP counters Pokemon still has
+; 4 low bits of a = number of energy cards attached
+
+; store this score in wce08 + PLAY_AREA*
+ ld hl, wce08
+ ld c, e
+ ld b, $00
+ add hl, bc
+ ld [hl], a
+
+; store the deck index of stage 2 Pokemon in wce0f + PLAY_AREA*
+ ld hl, wce0f
+ add hl, bc
+ ld [hl], d
+
+; increase wce06 by one
+ ld hl, wce06
+ inc [hl]
+ ret
+
+.not_found_in_hand
+ ld a, [wce06]
+ or a
+ jr z, .check_evolution_and_dragonite
+
+; an evolution has been found before
+ xor a
+ ld [wce06], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld e, $00
+ ld d, $00
+
+; find highest score in wce08
+.loop_score_1
+ ld hl, wce08
+ add hl, de
+ ld a, [wce06]
+ cp [hl]
+ jr nc, .not_higher
+
+; store this score to wce06
+ ld a, [hl]
+ ld [wce06], a
+; store this PLay Area location to wce07
+ ld a, e
+ ld [wce07], a
+
+.not_higher
+ inc e
+ dec c
+ jr nz, .loop_score_1
+
+; store the deck index of the stage 2 card
+; that has been decided in wce1a,
+; return the Play Area location of card
+; to evolve in a and return carry
+ ld a, [wce07]
+ ld e, a
+ ld hl, wce0f
+ add hl, de
+ ld a, [hl]
+ ld [wce1a], a
+ ld a, [wce07]
+ scf
+ ret
+
+.check_evolution_and_dragonite
+ ld a, 7
+ ld hl, wce08
+ call ClearMemory_Bank8
+
+ xor a
+ ld [wce06], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ push hl
+
+.loop_hand_2
+ pop hl
+ ld a, [hli]
+ cp $ff
+ jr z, .check_evolution_found
+
+ push hl
+ ld d, a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area_2
+; check if evolution is possible
+ push bc
+ push de
+ call CheckIfCanEvolveInto_BasicToStage2
+ pop de
+ call nc, .HandleDragonite1Evolution
+ call nc, .can_evolve
+
+; not possible to evolve or returned carry
+; when handling Dragonite1 evolution
+ pop bc
+ inc e
+ dec c
+ jr nz, .loop_play_area_2
+ jr .loop_hand_2
+
+.check_evolution_found
+ ld a, [wce06]
+ or a
+ jr nz, .evolution_was_found
+; no evolution was found before
+ or a
+ ret
+
+.evolution_was_found
+ xor a
+ ld [wce06], a
+ ld a, $ff
+ ld [wce07], a
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld e, $00
+ ld d, $00
+
+; find highest score in wce08 with at least
+; 2 energy cards attached
+.loop_score_2
+ ld hl, wce08
+ add hl, de
+ ld a, [wce06]
+ cp [hl]
+ jr nc, .next_score
+
+; take the lower 4 bits (total energy cards)
+; and skip if less than 2
+ ld a, [hl]
+ ld b, a
+ and %00001111
+ cp 2
+ jr c, .next_score
+
+; has at least 2 energy cards
+; store the score in wce06
+ ld a, b
+ ld [wce06], a
+; store this PLay Area location to wce07
+ ld a, e
+ ld [wce07], a
+
+.next_score
+ inc e
+ dec c
+ jr nz, .loop_score_2
+
+ ld a, [wce07]
+ cp $ff
+ jr z, .done
+
+; a card to evolve was found
+; store the deck index of the stage 2 card
+; that has been decided in wce1a,
+; return the Play Area location of card
+; to evolve in a and return carry
+ ld e, a
+ ld hl, wce0f
+ add hl, de
+ ld a, [hl]
+ ld [wce1a], a
+ ld a, [wce07]
+ scf
+ ret
+
+.done
+ or a
+ ret
+
+; return carry if card is evolving to Dragonite1 and if
+; - the card that is evolving is not Arena card and
+; number of damage counters in Play Area is under 8;
+; - the card that is evolving is Arena card and has under 5
+; damage counters or has less than 3 energy cards attached.
+.HandleDragonite1Evolution ; 20c5c (8:4c5c)
+ push af
+ push bc
+ push de
+ push hl
+ push de
+
+; check card ID
+ ld a, d
+ call GetCardIDFromDeckIndex
+ ld a, e
+ pop de
+ cp DRAGONITE1
+ jr nz, .no_carry
+
+; check card Play Area location
+ ld a, e
+ or a
+ jr z, .active_card_dragonite
+
+; the card that is evolving is not active card
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld b, a
+ ld c, 0
+
+; count damage counters in Play Area
+.loop_play_area_damage
+ dec b
+ ld e, b
+ push bc
+ call GetCardDamage
+ pop bc
+ call ConvertHPToCounters
+ add c
+ ld c, a
+
+ ld a, b
+ or a
+ jr nz, .loop_play_area_damage
+
+; compare number of total damage counters
+; with 7, if less or equal to that, set carry
+ ld a, 7
+ cp c
+ jr c, .no_carry
+ jr .set_carry
+
+.active_card_dragonite
+; the card that is evolving is active card
+; compare number of this card's damage counters
+; with 5, if less than that, set carry
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamage
+ cp 5
+ jr c, .set_carry
+
+; compare number of this card's attached energy cards
+; with 3, if less than that, set carry
+ ld e, PLAY_AREA_ARENA
+ farcall CountNumberOfEnergyCardsAttached
+ cp 3
+ jr c, .set_carry
+ jr .no_carry
+
+.no_carry
+ pop hl
+ pop de
+ pop bc
+ pop af
+ ret
+
+.set_carry
+ pop hl
+ pop de
+ pop bc
+ pop af
+ scf
+ ret
+; 0x20cae
+
+AIPlay_ProfessorOak: ; 20cae (8:4cae)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_USED_PROFESSOR_OAK | AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20cc1
+
+; sets carry if AI determines a score of playing
+; Professor Oak is over a certain threshold.
+AIDecide_ProfessorOak: ; 20cc1 (8:4cc1)
+; return if cards in deck <= 6
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE - 6
+ ret nc
+
+ ld a, [wOpponentDeckID]
+ cp LEGENDARY_ARTICUNO_DECK_ID
+ jp z, .HandleLegendaryArticunoDeck
+ cp EXCAVATION_DECK_ID
+ jp z, .HandleExcavationDeck
+ cp WONDERS_OF_SCIENCE_DECK_ID
+ jp z, .HandleWondersOfScienceDeck
+
+; return if cards in deck <= 14
+.check_cards_deck
+ ld a, [hl]
+ cp DECK_SIZE - 14
+ ret nc
+
+; initialize score
+ ld a, $1e
+ ld [wce06], a
+
+; check number of cards in hand
+.check_cards_hand
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 4
+ jr nc, .more_than_3_cards
+
+; less than 4 cards in hand
+ ld a, [wce06]
+ add $32
+ ld [wce06], a
+ jr .check_energy_cards
+
+.more_than_3_cards
+ cp 9
+ jr c, .check_energy_cards
+
+; more than 8 cards
+ ld a, [wce06]
+ sub $1e
+ ld [wce06], a
+
+.check_energy_cards
+ farcall CreateEnergyCardListFromHand
+ jr nc, .handle_blastoise
+
+; no energy cards in hand
+ ld a, [wce06]
+ add $28
+ ld [wce06], a
+
+.handle_blastoise
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ jr c, .check_hand
+
+; no Muk in Play Area
+ ld a, BLASTOISE
+ call CountPokemonIDInPlayArea
+ jr nc, .check_hand
+
+; at least one Blastoise in AI Play Area
+ ld a, WATER_ENERGY
+ farcall LookForCardIDInHand
+ jr nc, .check_hand
+
+; no Water energy in hand
+ ld a, [wce06]
+ add $0a
+ ld [wce06], a
+
+; this part seems buggy
+; the AI loops through all the cards in hand and checks
+; if any of them is not a Pokemon card and has Basic stage.
+; it seems like the intention was that if there was
+; any Basic Pokemon still in hand, the AI would add to the score.
+.check_hand
+ call CreateHandCardList
+ ld hl, wDuelTempList
+.loop_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .check_evolution
+
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wLoadedCard1Type]
+ cp TYPE_ENERGY
+ jr c, .loop_hand ; bug, should be jr nc
+
+ ld a, [wLoadedCard1Stage]
+ or a
+ jr nz, .loop_hand
+
+ ld a, [wce06]
+ add $0a
+ ld [wce06], a
+
+.check_evolution
+ xor a
+ ld [wce0f], a
+ ld [wce0f + 1], a
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area
+ push de
+ call .LookForEvolution
+ pop de
+ jr nc, .not_in_hand
+
+; there's a card in hand that can evolve
+ ld a, $01
+ ld [wce0f], a
+
+.not_in_hand
+; check if a card that can evolve was found at all
+; if not, go to the next card in the Play Area
+ ld a, [wce08]
+ cp $01
+ jr nz, .next_play_area
+
+; if it was found, set wce0f + 1 to $01
+ ld a, $01
+ ld [wce0f + 1], a
+
+.next_play_area
+ inc e
+ dec d
+ jr nz, .loop_play_area
+
+; if a card was found that evolves...
+ ld a, [wce0f + 1]
+ or a
+ jr z, .check_score
+
+; ...but that card is not in the hand...
+ ld a, [wce0f]
+ or a
+ jr nz, .check_score
+
+; ...add to the score
+ ld a, [wce06]
+ add $0a
+ ld [wce06], a
+
+; only return carry if score > $3c
+.check_score
+ ld a, [wce06]
+ ld b, $3c
+ cp b
+ jr nc, .set_carry
+ or a
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x20d9d
+
+; return carry if there's a card in the hand that
+; can evolve the card in Play Area location in e.
+; sets wce08 to $01 if any card is found that can
+; evolve regardless of card location.
+.LookForEvolution ; 20d9d (8:4d9d)
+ xor a
+ ld [wce08], a
+ ld d, 0
+
+; loop through the whole deck to check if there's
+; a card that can evolve this Pokemon.
+.loop_deck_evolution
+ push de
+ call CheckIfCanEvolveInto
+ pop de
+ jr nc, .can_evolve
+.evolution_not_in_hand
+ inc d
+ ld a, DECK_SIZE
+ cp d
+ jr nz, .loop_deck_evolution
+
+ or a
+ ret
+
+; a card was found that can evolve, set wce08 to $01
+; and if the card is in the hand, return carry.
+; otherwise resume looping through deck.
+.can_evolve
+ ld a, $01
+ ld [wce08], a
+ ld a, DUELVARS_CARD_LOCATIONS
+ add d
+ call GetTurnDuelistVariable
+ cp CARD_LOCATION_HAND
+ jr nz, .evolution_not_in_hand
+
+ scf
+ ret
+; 0x20dc3
+
+; handles Legendary Articuno Deck AI logic.
+.HandleLegendaryArticunoDeck ; 20dc3 (8:4dc3)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 3
+ jr nc, .check_playable_cards
+
+; has less than 3 Pokemon in Play Area.
+ push af
+ call CreateHandCardList
+ pop af
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+; if no cards in hand evolve cards in Play Area,
+; returns carry.
+.loop_play_area_articuno
+ ld a, DUELVARS_ARENA_CARD
+ add e
+
+ push de
+ call GetTurnDuelistVariable
+ farcall CheckForEvolutionInList
+ pop de
+ jr c, .check_playable_cards
+
+ inc e
+ ld a, d
+ cp e
+ jr nz, .loop_play_area_articuno
+
+.set_carry_articuno
+ scf
+ ret
+
+; if there are more than 3 energy cards in hand,
+; return no carry, otherwise check for playable cards.
+.check_playable_cards
+ call CountOppEnergyCardsInHand
+ cp 4
+ jr nc, .no_carry_articuno
+
+; remove both Professor Oak cards from list
+; before checking for playable cards
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld e, PROFESSOR_OAK
+ farcall RemoveCardIDInList
+ ld e, PROFESSOR_OAK
+ farcall RemoveCardIDInList
+
+; look in hand for cards that can be played.
+; if a card that cannot be played is found, return no carry.
+; otherwise return carry.
+.loop_hand_articuno
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry_articuno
+ push hl
+ farcall CheckIfCardCanBePlayed
+ pop hl
+ jr c, .loop_hand_articuno
+
+.no_carry_articuno
+ or a
+ ret
+; 0x20e11
+
+; handles Excavation deck AI logic.
+; sets score depending on whether there's no
+; Mysterious Fossil in play and in hand.
+.HandleExcavationDeck ; 20e11 (8:4e11)
+; return no carry if cards in deck < 15
+ ld a, [hl]
+ cp 46
+ ret nc
+
+; look for Mysterious Fossil
+ ld a, MYSTERIOUS_FOSSIL
+ call LookForCardIDInHandAndPlayArea
+ jr c, .found_mysterious_fossil
+ ld a, $50
+ ld [wce06], a
+ jp .check_cards_hand
+.found_mysterious_fossil
+ ld a, $1e
+ ld [wce06], a
+ jp .check_cards_hand
+; 0x20e2c
+
+; handles Wonders of Science AI logic.
+; if there's either Grimer or Muk in hand,
+; do not play Professor Oak.
+.HandleWondersOfScienceDeck ; 20e2c (8:4e2c)
+ ld a, GRIMER
+ call LookForCardIDInHandList_Bank8
+ jr c, .found_grimer_or_muk
+ ld a, MUK
+ call LookForCardIDInHandList_Bank8
+ jr c, .found_grimer_or_muk
+
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ jp .check_cards_deck
+
+.found_grimer_or_muk
+ or a
+ ret
+; 0x20e44
+
+AIPlay_EnergyRetrieval: ; 20e44 (8:4e44)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wce1b]
+ ldh [hTempRetreatCostCards], a
+ cp $ff
+ jr z, .asm_20e68
+ ld a, $ff
+ ldh [$ffa3], a
+.asm_20e68
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20e6e
+
+; checks whether AI can play Energy Retrieval and
+; picks the energy cards from the discard pile,
+; and duplicate cards in hand to discard.
+AIDecide_EnergyRetrieval: ; 20e6e (8:4e6e)
+; return no carry if no cards in hand
+ farcall CreateEnergyCardListFromHand
+ jp nc, .no_carry
+
+; handle Go Go Rain Dance deck
+; return no carry if there's no Muk card in play and
+; if there's no Blastoise card in Play Area
+; if there's a Muk in play, continue as normal
+ ld a, [wOpponentDeckID]
+ cp GO_GO_RAIN_DANCE_DECK_ID
+ jr nz, .start
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ jr c, .start
+ ld a, BLASTOISE
+ call CountPokemonIDInPlayArea
+ jp nc, .no_carry
+
+.start
+; find duplicate cards in hand
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ call FindDuplicateCards
+ jp c, .no_carry
+
+ ld [wce06], a
+ ld a, CARD_LOCATION_DISCARD_PILE
+ call FindBasicEnergyCardsInLocation
+ jp c, .no_carry
+
+; some basic energy cards were found in Discard Pile
+ ld a, $ff
+ ld [wce1a], a
+ ld [wce1b], a
+ ld [wce1c], a
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+; first check if there are useful energy cards in the list
+; and choose them for retrieval first
+.loop_play_area
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+
+; load this card's ID in wTempCardID
+; and this card's Type in wTempCardType
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+ ld [wTempCardType], a
+
+; loop the energy cards in the Discard Pile
+; and check if they are useful for this Pokemon
+ ld hl, wDuelTempList
+.loop_energy_cards_1
+ ld a, [hli]
+ cp $ff
+ jr z, .next_play_area
+
+ ld b, a
+ push hl
+ farcall CheckIfEnergyIsUseful
+ pop hl
+ jr nc, .loop_energy_cards_1
+
+ ld a, [wce1a]
+ cp $ff
+ jr nz, .second_energy_1
+
+; check if there were already chosen cards,
+; if this is the second chosen card, return carry
+
+; first energy card found
+ ld a, b
+ ld [wce1a], a
+ call RemoveCardFromList
+ jr .next_play_area
+.second_energy_1
+ ld a, b
+ ld [wce1b], a
+ jr .set_carry
+
+.next_play_area
+ inc e
+ dec d
+ jr nz, .loop_play_area
+
+; next, if there are still energy cards left to choose,
+; loop through the energy cards again and select
+; them in order.
+ ld hl, wDuelTempList
+.loop_energy_cards_2
+ ld a, [hli]
+ cp $ff
+ jr z, .check_chosen
+ ld b, a
+ ld a, [wce1a]
+ cp $ff
+ jr nz, .second_energy_2
+ ld a, b
+ ld [wce1a], a
+ call RemoveCardFromList
+ jr .loop_energy_cards_2
+
+.second_energy_2
+ ld a, b
+ ld [wce1b], a
+ jr .set_carry
+
+; will set carry if at least one has been chosen
+.check_chosen
+ ld a, [wce1a]
+ cp $ff
+ jr nz, .set_carry
+.no_carry
+ or a
+ ret
+
+.set_carry
+ ld a, [wce06]
+ scf
+ ret
+; 0x20f27
+
+; remove an element from the list
+; and shortens it accordingly
+; input:
+; hl = pointer to element after the one to remove
+RemoveCardFromList: ; 20f27 (8:4f27)
+ push de
+ ld d, h
+ ld e, l
+ dec hl
+ push hl
+.loop_remove
+ ld a, [de]
+ ld [hli], a
+ cp $ff
+ jr z, .done_remove
+ inc de
+ jr .loop_remove
+.done_remove
+ pop hl
+ pop de
+ ret
+; 0x20f38
+
+; finds duplicates in card list in hl.
+; if a duplicate of Pokemon cards are found, return in
+; a the deck index of the second one.
+; otherwise, if a duplicate of non-Pokemon cards are found
+; return in a the deck index of the second one.
+; if no duplicates found, return carry.
+; input:
+; hl = list to look in
+; output:
+; a = deck index of duplicate card
+FindDuplicateCards: ; 20f38 (8:4f38)
+ ld a, $ff
+ ld [wce0f], a
+ ld [wce0f + 1], a
+ push hl
+
+.loop_outer
+; get ID of current card
+ pop hl
+ ld a, [hli]
+ cp $ff
+ jr z, .check_found
+ call GetCardIDFromDeckIndex
+ ld b, e
+ push hl
+
+; loop the rest of the list to find
+; another card with the same ID
+.loop_inner
+ ld a, [hli]
+ cp $ff
+ jr z, .loop_outer
+ ld c, a
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp b
+ jr nz, .loop_inner
+
+; found two cards with same ID
+ push bc
+ call GetCardType
+ pop bc
+ cp TYPE_ENERGY
+ jr c, .not_energy
+
+; they are energy or trainer cards
+; loads wce0f+1 with this card deck index
+ ld a, c
+ ld [wce0f + 1], a
+ jr .loop_outer
+
+.not_energy
+; they are Pokemon cards
+; loads wce0f with this card deck index
+ ld a, c
+ ld [wce0f], a
+ jr .loop_outer
+
+.check_found
+ ld a, [wce0f]
+ cp $ff
+ jr nz, .no_carry
+ ld a, [wce0f + 1]
+ cp $ff
+ jr nz, .no_carry
+
+; only set carry if duplicate cards were not found
+ scf
+ ret
+
+.no_carry
+; two cards with the same ID were found
+; of either Pokemon or Non-Pokemon cards
+ or a
+ ret
+; 0x20f80
+
+AIPlay_SuperEnergyRetrieval: ; 20f80 (8:4f80)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wce1b]
+ ldh [hTempRetreatCostCards], a
+ ld a, [wce1c]
+ ldh [$ffa3], a
+ cp $ff
+ jr z, .asm_20fbb
+ ld a, [wce1d]
+ ldh [$ffa4], a
+ cp $ff
+ jr z, .asm_20fbb
+ ld a, [wce1e]
+ ldh [$ffa5], a
+ cp $ff
+ jr z, .asm_20fbb
+ ld a, $ff
+ ldh [$ffa6], a
+.asm_20fbb
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x20fc1
+
+AIDecide_SuperEnergyRetrieval: ; 20fc1 (8:4fc1)
+; return no carry if no cards in hand
+ farcall CreateEnergyCardListFromHand
+ jp nc, .no_carry
+
+; handle Go Go Rain Dance deck
+; return no carry if there's no Muk card in play and
+; if there's no Blastoise card in Play Area
+; if there's a Muk in play, continue as normal
+ ld a, [wOpponentDeckID]
+ cp GO_GO_RAIN_DANCE_DECK_ID
+ jr nz, .start
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ jr c, .start
+ ld a, BLASTOISE
+ call CountPokemonIDInPlayArea
+ jp nc, .no_carry
+
+.start
+; find duplicate cards in hand
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ call FindDuplicateCards
+ jp c, .no_carry
+
+; remove the duplicate card in hand
+; and run the hand check again
+ ld [wce06], a
+ ld hl, wDuelTempList
+ call FindAndRemoveCardFromList
+ call FindDuplicateCards
+ jp c, .no_carry
+
+ ld [wce08], a
+ ld a, CARD_LOCATION_DISCARD_PILE
+ call FindBasicEnergyCardsInLocation
+ jp c, .no_carry
+
+; some basic energy cards were found in Discard Pile
+ ld a, $ff
+ ld [wce1b], a
+ ld [wce1c], a
+ ld [wce1d], a
+ ld [wce1e], a
+ ld [wce1f], a
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+; first check if there are useful energy cards in the list
+; and choose them for retrieval first
+.loop_play_area
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+
+; load this card's ID in wTempCardID
+; and this card's Type in wTempCardType
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+ ld [wTempCardType], a
+
+; loop the energy cards in the Discard Pile
+; and check if they are useful for this Pokemon
+ ld hl, wDuelTempList
+.loop_energy_cards_1
+ ld a, [hli]
+ cp $ff
+ jr z, .next_play_area
+
+ ld b, a
+ push hl
+ farcall CheckIfEnergyIsUseful
+ pop hl
+ jr nc, .loop_energy_cards_1
+
+; first energy
+ ld a, [wce1b]
+ cp $ff
+ jr nz, .second_energy_1
+ ld a, b
+ ld [wce1b], a
+ call RemoveCardFromList
+ jr .next_play_area
+
+.second_energy_1
+ ld a, [wce1c]
+ cp $ff
+ jr nz, .third_energy_1
+ ld a, b
+ ld [wce1c], a
+ call RemoveCardFromList
+ jr .next_play_area
+
+.third_energy_1
+ ld a, [wce1d]
+ cp $ff
+ jr nz, .fourth_energy_1
+ ld a, b
+ ld [wce1d], a
+ call RemoveCardFromList
+ jr .next_play_area
+
+.fourth_energy_1
+ ld a, b
+ ld [wce1e], a
+ jr .set_carry
+
+.next_play_area
+ inc e
+ dec d
+ jr nz, .loop_play_area
+
+; next, if there are still energy cards left to choose,
+; loop through the energy cards again and select
+; them in order.
+ ld hl, wDuelTempList
+.loop_energy_cards_2
+ ld a, [hli]
+ cp $ff
+ jr z, .check_chosen
+ ld b, a
+ ld a, [wce1b]
+ cp $ff
+ jr nz, .second_energy_2
+ ld a, b
+
+; first energy
+ ld [wce1b], a
+ call RemoveCardFromList
+ jr .loop_energy_cards_2
+
+.second_energy_2
+ ld a, [wce1c]
+ cp $ff
+ jr nz, .third_energy_2
+ ld a, b
+ ld [wce1c], a
+ call RemoveCardFromList
+ jr .loop_energy_cards_2
+
+.third_energy_2
+ ld a, [wce1d]
+ cp $ff
+ jr nz, .fourth_energy
+ ld a, b
+ ld [wce1d], a
+ call RemoveCardFromList
+ jr .loop_energy_cards_2
+
+.fourth_energy
+ ld a, b
+ ld [wce1e], a
+ jr .set_carry
+
+; will set carry if at least one has been chosen
+.check_chosen
+ ld a, [wce1b]
+ cp $ff
+ jr nz, .set_carry
+
+.no_carry
+ or a
+ ret
+.set_carry
+ ld a, [wce08]
+ ld [wce1a], a
+ ld a, [wce06]
+ scf
+ ret
+; 0x210d5
+
+; finds the card with deck index a in list hl,
+; and removes it from the list.
+; the card HAS to exist in the list, since this
+; routine does not check for the terminating byte $ff!
+; input:
+; a = card deck index to look
+; hl = pointer to list of cards
+FindAndRemoveCardFromList: ; 210d5 (8:50d5)
+ push hl
+ ld b, a
+.loop_duplicate
+ ld a, [hli]
+ cp b
+ jr nz, .loop_duplicate
+ call RemoveCardFromList
+ pop hl
+ ret
+; 0x210e0
+
+AIPlay_PokemonCenter: ; 210e0 (8:50e0)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x210eb
+
+AIDecide_PokemonCenter: ; 210eb (8:50eb)
+ xor a
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+; return if active Pokemon can KO player's card.
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .start
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .no_carry
+ farcall LookForEnergyNeededForMoveInHand
+ jr c, .no_carry
+
+.start
+ xor a
+ ld [wce06], a
+ ld [wce08], a
+ ld [wce0f], a
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, e ; useless instruction
+ pop de
+
+; get this Pokemon's current HP in number of counters
+; and add it to the total.
+ ld a, [wLoadedCard1HP]
+ call ConvertHPToCounters
+ ld b, a
+ ld a, [wce06]
+ add b
+ ld [wce06], a
+
+; get this Pokemon's current damage counters
+; and add it to the total.
+ call GetCardDamage
+ call ConvertHPToCounters
+ ld b, a
+ ld a, [wce08]
+ add b
+ ld [wce08], a
+
+; get this Pokemon's number of attached energy cards
+; and add it to the total.
+; if there's overflow, return no carry.
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ ld b, a
+ ld a, [wce0f]
+ add b
+ jr c, .no_carry
+ ld [wce0f], a
+
+ inc e
+ dec d
+ jr nz, .loop_play_area
+
+; if (number of damage counters / 2) < (total energy cards attached)
+; return no carry.
+ ld a, [wce08]
+ srl a
+ ld hl, wce0f
+ cp [hl]
+ jr c, .no_carry
+
+; if (number of HP counters * 6 / 10) >= (number of damage counters)
+; return no carry.
+ ld a, [wce06]
+ ld l, a
+ ld h, 6
+ call HtimesL
+ call CalculateWordTensDigit
+ ld a, l
+ ld hl, wce08
+ cp [hl]
+ jr nc, .no_carry
+
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+; 0x21170
+
+AIPlay_ImposterProfessorOak: ; 21170 (8:5170)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x2117b
+
+; sets carry depending on player's number of cards
+; in deck in in hand.
+AIDecide_ImposterProfessorOak: ; 2117b (8:517b)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetNonTurnDuelistVariable
+ cp DECK_SIZE - 14
+ jr c, .more_than_14_cards
+
+; if player has less than 14 cards in deck, only
+; set carry if number of cards in their hands < 6
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetNonTurnDuelistVariable
+ cp 6
+ jr c, .set_carry
+.no_carry
+ or a
+ ret
+
+; if player has more than 14 cards in deck, only
+; set carry if number of cards in their hands >= 9
+.more_than_14_cards
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetNonTurnDuelistVariable
+ cp 9
+ jr c, .no_carry
+.set_carry
+ scf
+ ret
+; 0x2119a
+
+AIPlay_EnergySearch: ; 2119a (8:519a)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x211aa
+
+; AI checks for playing Energy Search
+AIDecide_EnergySearch: ; 211aa (8:51aa)
+ farcall CreateEnergyCardListFromHand
+ jr c, .start
+ call .CheckForUsefulEnergyCards
+ jr c, .start
+
+; there are energy cards in hand and at least
+; one of them is useful to a card in Play Area
+.no_carry
+ or a
+ ret
+
+.start
+ ld a, [wOpponentDeckID]
+ cp HEATED_BATTLE_DECK_ID
+ jr z, .heated_battle
+ cp WONDERS_OF_SCIENCE_DECK_ID
+ jr z, .wonders_of_science
+
+; if no energy cards in deck, return no carry
+ ld a, CARD_LOCATION_DECK
+ call FindBasicEnergyCardsInLocation
+ jr c, .no_carry
+
+; if any of the energy cards in deck is useful
+; return carry right away...
+ call .CheckForUsefulEnergyCards
+ jr c, .no_useful
+ scf
+ ret
+
+; ...otherwise save the list in a before return carry.
+.no_useful
+ ld a, [wDuelTempList]
+ scf
+ ret
+
+; Heated Battle deck only searches for Fire and Lightning
+; if they are found to be useful to some card in Play Area
+.heated_battle
+ ld a, CARD_LOCATION_DECK
+ call FindBasicEnergyCardsInLocation
+ jr c, .no_carry
+ call .CheckUsefulFireOrLightningEnergy
+ jr c, .no_carry
+ scf
+ ret
+
+; this subroutine has a bug.
+; it was supposed to use the .CheckUsefulGrassEnergy subroutine
+; but uses .CheckUsefulFireOrLightningEnergy instead.
+.wonders_of_science
+ ld a, CARD_LOCATION_DECK
+ call FindBasicEnergyCardsInLocation
+ jr c, .no_carry
+ call .CheckUsefulFireOrLightningEnergy
+ jr c, .no_carry
+ scf
+ ret
+; 0x211f1
+
+; return carry if cards in wDuelTempList are not
+; useful to any of the Play Area Pokemon
+.CheckForUsefulEnergyCards ; 211f1 (8:51f1)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area_1
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+ call GetTurnDuelistVariable
+
+; store ID and type of card
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+ ld [wTempCardType], a
+
+; look in list for a useful energy,
+; is any is found return no carry.
+ ld hl, wDuelTempList
+.loop_energy_1
+ ld a, [hli]
+ cp $ff
+ jr z, .none_found
+ ld b, a
+ push hl
+ farcall CheckIfEnergyIsUseful
+ pop hl
+ jr nc, .loop_energy_1
+
+ ld a, b
+ or a
+ ret
+
+.none_found
+ inc e
+ ld a, e
+ cp d
+ jr nz, .loop_play_area_1
+
+ scf
+ ret
+; 0x2122e
+
+; checks whether there are useful energies
+; only for Fire and Lightning type Pokemon cards
+; in Play Area. If none found, return carry.
+.CheckUsefulFireOrLightningEnergy ; 2122e (8:522e)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area_2
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+ call GetTurnDuelistVariable
+
+; get card's ID and Type
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+
+; only do check if the Pokemon's type
+; is either Fire or Lightning
+ cp TYPE_ENERGY_FIRE
+ jr z, .fire_or_lightning
+ cp TYPE_ENERGY_LIGHTNING
+ jr nz, .next_play_area
+
+; loop each energy card in list
+.fire_or_lightning
+ ld [wTempCardType], a
+ ld hl, wDuelTempList
+.loop_energy_2
+ ld a, [hli]
+ cp $ff
+ jr z, .next_play_area
+
+; if this energy card is useful,
+; return no carry.
+ ld b, a
+ push hl
+ farcall CheckIfEnergyIsUseful
+ pop hl
+ jr nc, .loop_energy_2
+
+ ld a, b
+ or a
+ ret
+
+.next_play_area
+ inc e
+ ld a, e
+ cp d
+ jr nz, .loop_play_area_2
+
+; no card was found to be useful
+; for Fire/Lightning type Pokemon card.
+ scf
+ ret
+; 0x21273
+
+; checks whether there are useful energies
+; only for Grass type Pokemon cards
+; in Play Area. If none found, return carry.
+.CheckUsefulGrassEnergy ; 21273 (8:5273)
+; unreferenced
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+.loop_play_area_3
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+ call GetTurnDuelistVariable
+
+; get card's ID and Type
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+
+; only do check if the Pokemon's type is Grass
+ cp TYPE_ENERGY_GRASS
+ jr nz, .next_play_area_3
+
+; loop each energy card in list
+ ld [wTempCardType], a
+ ld hl, wDuelTempList
+.loop_energy_3
+ ld a, [hli]
+ cp $ff
+ jr z, .next_play_area_3
+
+; if this energy card is useful,
+; return no carry.
+ ld b, a
+ push hl
+ farcall CheckIfEnergyIsUseful
+ pop hl
+ jr nc, .loop_energy_3
+
+ ld a, b
+ or a
+ ret
+
+.next_play_area_3
+ inc e
+ ld a, e
+ cp d
+ jr nz, .loop_play_area_3
+
+; no card was found to be useful
+; for Grass type Pokemon card.
+ scf
+ ret
+; 0x212b4
+
+AIPlay_Pokedex: ; 212b4 (8:52b4)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wce1a]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1b]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wce1c]
+ ldh [hTempRetreatCostCards], a
+ ld a, [wce1d]
+ ldh [$ffa3], a
+ ld a, [wce1e]
+ ldh [$ffa4], a
+ ld a, $ff
+ ldh [$ffa5], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x212dc
+
+AIDecide_Pokedex: ; 212dc (8:52dc)
+ ld a, [wcda6]
+ cp $06
+ jr c, .no_carry
+
+; return no carry if number of cards in deck <= 4
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE - 4
+ jr nc, .no_carry
+
+; has a 3 in 10 chance of actually playing card
+ ld a, 10
+ call Random
+ cp 3
+ jr c, .pick_cards
+
+.no_carry
+ or a
+ ret
+
+.pick_cards
+; the following comparison is disregarded
+; the Wonders of Science deck was probably intended
+; to use PickPokedexCards_Unreferenced instead
+ ld a, [wOpponentDeckID]
+ cp WONDERS_OF_SCIENCE_DECK_ID
+ jp PickPokedexCards ; bug, should be jp nz
+; 0x212ff
+
+; picks order of the cards in deck from the effects of Pokedex.
+; prioritises Pokemon cards, then Trainer cards, then energy cards.
+; stores the resulting order in wce1a.
+PickPokedexCards_Unreferenced: ; 212ff (8:52ff)
+; unreferenced
+ xor a
+ ld [wcda6], a
+
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ add DUELVARS_DECK_CARDS
+ ld l, a
+ lb de, $00, $00
+ ld b, 5
+
+; run through 5 of the remaining cards in deck
+.next_card
+ ld a, [hli]
+ ld c, a
+ call .GetCardType
+
+; load this card's deck index and type in memory
+; wce08 = card types
+; wce0f = card deck indices
+ push hl
+ ld hl, wce08
+ add hl, de
+ ld [hl], a
+ ld hl, wce0f
+ add hl, de
+ ld [hl], c
+ pop hl
+
+ inc e
+ dec b
+ jr nz, .next_card
+
+; terminate the wce08 list
+ ld a, $ff
+ ld [wce08 + 5], a
+
+ ld de, wce1a
+
+; find Pokemon
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+; run through the stored cards
+; and look for any Pokemon cards.
+.loop_pokemon
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .find_trainers
+ cp TYPE_ENERGY
+ jr nc, .loop_pokemon
+; found a Pokemon card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_pokemon
+
+; run through the stored cards
+; and look for any Trainer cards.
+.find_trainers
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+.loop_trainers
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .find_energy
+ cp TYPE_TRAINER
+ jr nz, .loop_trainers
+; found a Trainer card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_trainers
+
+.find_energy
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+; run through the stored cards
+; and look for any energy cards.
+.loop_energy
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ and TYPE_ENERGY
+ jr z, .loop_energy
+; found an energy card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_energy
+
+.done
+ scf
+ ret
+; 0x21383
+
+.GetCardType ; 21383 (8:5383)
+ push bc
+ push de
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop de
+ pop bc
+ ret
+; 0x2138e
+
+; picks order of the cards in deck from the effects of Pokedex.
+; prioritises energy cards, then Pokemon cards, then Trainer cards.
+; stores the resulting order in wce1a.
+PickPokedexCards: ; 2138e (8:538e)
+ xor a
+ ld [wcda6], a
+
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ add DUELVARS_DECK_CARDS
+ ld l, a
+ lb de, $00, $00
+ ld b, 5
+
+; run through 5 of the remaining cards in deck
+.next_card
+ ld a, [hli]
+ ld c, a
+ call .GetCardType
+
+; load this card's deck index and type in memory
+; wce08 = card types
+; wce0f = card deck indices
+ push hl
+ ld hl, wce08
+ add hl, de
+ ld [hl], a
+ ld hl, wce0f
+ add hl, de
+ ld [hl], c
+ pop hl
+
+ inc e
+ dec b
+ jr nz, .next_card
+
+; terminate the wce08 list
+ ld a, $ff
+ ld [wce08 + 5], a
+
+ ld de, wce1a
+
+; find energy
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+; run through the stored cards
+; and look for any energy cards.
+.loop_energy
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .find_pokemon
+ and TYPE_ENERGY
+ jr z, .loop_energy
+; found an energy card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_energy
+
+.find_pokemon
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+; run through the stored cards
+; and look for any Pokemon cards.
+.loop_pokemon
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .find_trainers
+ cp TYPE_ENERGY
+ jr nc, .loop_pokemon
+; found a Pokemon card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_pokemon
+
+; run through the stored cards
+; and look for any Trainer cards.
+.find_trainers
+ ld hl, wce08
+ ld c, -1
+ ld b, $00
+
+.loop_trainers
+ inc c
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ cp TYPE_TRAINER
+ jr nz, .loop_trainers
+; found a Trainer card
+; store it in wce1a list
+ push hl
+ ld hl, wce0f
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ ld [de], a
+ inc de
+ jr .loop_trainers
+
+.done
+ scf
+ ret
+; 0x21412
+
+.GetCardType ; 21412 (8:5412)
+ push bc
+ push de
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop de
+ pop bc
+ ret
+; 0x2141d
+
+AIPlay_FullHeal: ; 2141d (8:541d)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21428
+
+AIDecide_FullHeal: ; 21428 (8:5428)
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+
+; skip if no status on arena card
+ or a ; NO_STATUS
+ jr z, .no_carry
+
+ and CNF_SLP_PRZ
+ cp PARALYZED
+ jr z, .paralyzed
+ cp ASLEEP
+ jr z, .asleep
+ cp CONFUSED
+ jr z, .confused
+ ; if either PSN or DBLPSN, fallthrough
+
+.set_carry
+ scf
+ ret
+
+.asleep
+; set carry if any of the following
+; cards are in the Play Area.
+ ld a, GASTLY1
+ ld b, PLAY_AREA_ARENA
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .set_carry
+ ld a, GASTLY2
+ ld b, PLAY_AREA_ARENA
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .set_carry
+ ld a, HAUNTER2
+ ld b, PLAY_AREA_ARENA
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .set_carry
+
+; otherwise fallthrough
+
+.paralyzed
+; if Scoop Up is in hand and decided to be played, skip.
+ ld a, SCOOP_UP
+ call LookForCardIDInHandList_Bank8
+ jr nc, .no_scoop_up_prz
+ call AIDecide_ScoopUp
+ jr c, .no_carry
+
+.no_scoop_up_prz
+; if card can damage defending Pokemon...
+ xor a ; PLAY_AREA_ARENA
+ farcall CheckIfCanDamageDefendingPokemon
+ jr nc, .no_carry
+; ...and can play an energy card to retreat, set carry.
+ ld a, [wAIPlayEnergyCardForRetreat]
+ or a
+ jr nz, .set_carry
+
+; if not, check whether it's a card it would rather retreat,
+; and if it isn't, set carry.
+ farcall AIDecideWhetherToRetreat
+ jr nc, .set_carry
+
+.no_carry
+ or a
+ ret
+
+.confused
+; if Scoop Up is in hand and decided to be played, skip.
+ ld a, SCOOP_UP
+ call LookForCardIDInHandList_Bank8
+ jr nc, .no_scoop_up_cnf
+ call AIDecide_ScoopUp
+ jr c, .no_carry
+
+.no_scoop_up_cnf
+; if card can damage defending Pokemon...
+ xor a ; PLAY_AREA_ARENA
+ farcall CheckIfCanDamageDefendingPokemon
+ jr nc, .no_carry
+; ...and can play an energy card to retreat, set carry.
+ ld a, [wAIPlayEnergyCardForRetreat]
+ or a
+ jr nz, .set_carry
+; if not, return no carry.
+ jr .no_carry
+; 0x21497
+
+AIPlay_MrFuji: ; 21497 (8:5497)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x214a7
+
+; AI logic for playing Mr Fuji
+AIDecide_MrFuji: ; 214a7 (8:54a7)
+ ld a, $ff
+ ld [wce06], a
+ ld [wce08], a
+
+; if just one Pokemon in Play Area, skip.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 1
+ ret z
+
+ dec a
+ ld d, a
+ ld e, PLAY_AREA_BENCH_1
+
+; find a Pokemon in the bench that has damage counters.
+.loop_bench
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ push de
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ pop de
+
+ ld a, [wLoadedCard1HP]
+ ld b, a
+
+ ; skip if zero damage counters
+ call GetCardDamage
+ call ConvertHPToCounters
+ or a
+ jr z, .next
+
+; a = damage counters
+; b = hp left
+ call CalculateBDividedByA_Bank8
+ cp 20
+ jr nc, .next
+
+; here, HP left in counters is less than twice
+; the number of damage counters, that is:
+; HP < 1/3 max HP
+
+; if value is less than the one found before, store this one.
+ ld hl, wce08
+ cp [hl]
+ jr nc, .next
+ ld [hl], a
+ ld a, e
+ ld [wce06], a
+.next
+ inc e
+ dec d
+ jr nz, .loop_bench
+
+ ld a, [wce06]
+ cp $ff
+ ret z
+
+ scf
+ ret
+; 0x214f1
+
+AIPlay_ScoopUp: ; 214f1 (8:54f1)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21506
+
+AIDecide_ScoopUp: ; 21506 (8:5506)
+ xor a
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+; if only one Pokemon in Play Area, skip.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 2
+ jr c, .no_carry
+
+; handle some decks differently
+ ld a, [wOpponentDeckID]
+ cp LEGENDARY_ARTICUNO_DECK_ID
+ jr z, .HandleLegendaryArticuno
+ cp LEGENDARY_RONALD_DECK_ID
+ jp z, .HandleLegendaryRonald
+
+; if can't KO defending Pokemon, check if defending Pokemon
+; can KO this card. If so, then continue.
+; If not, return no carry.
+
+; if it can KO the defending Pokemon this turn,
+; return no carry.
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .cannot_ko
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .no_carry
+ farcall LookForEnergyNeededForMoveInHand
+ jr c, .no_carry
+
+.cannot_ko
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ and CNF_SLP_PRZ
+ cp PARALYZED
+ jr z, .cannot_retreat
+ cp ASLEEP
+ jr z, .cannot_retreat
+
+; doesn't have a status that prevents retreat.
+; so check if it has enough energy to retreat.
+; if not, return no carry.
+ xor a
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call GetPlayAreaCardRetreatCost
+ ld b, a
+ ld e, PLAY_AREA_ARENA
+ farcall CountNumberOfEnergyCardsAttached
+ cp b
+ jr c, .cannot_retreat
+
+.no_carry
+ or a
+ ret
+
+.cannot_retreat
+; store damage and total HP left
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wLoadedCard1HP]
+ call ConvertHPToCounters
+ ld d, a
+
+; skip if card has no damage counters.
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamage
+ or a
+ jr z, .no_carry
+
+; if (total damage / total HP counters) < 7
+; return carry.
+; (this corresponds to damage counters
+; being under 70% of the max HP)
+ ld b, a
+ ld a, d
+ call CalculateBDividedByA_Bank8
+ cp 7
+ jr c, .no_carry
+
+; store Pokemon to switch to in wce1a and set carry.
+.decide_switch
+ farcall AIDecideBenchPokemonToSwitchTo
+ jr c, .no_carry
+ ld [wce1a], a
+ xor a
+ scf
+ ret
+
+; this deck will use Scoop Up on a benched Articuno2.
+; it checks if the defending Pokemon is a Snorlax,
+; but interestingly does not check for Muk in both Play Areas.
+; will also use Scoop Up on
+.HandleLegendaryArticuno
+; if less than 3 Play Area Pokemon cards, skip.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 3
+ jr c, .no_carry
+
+; look for Articuno2 in bench
+ ld a, ARTICUNO2
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .articuno_bench
+
+; check Arena card
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp ARTICUNO2
+ jr z, .articuno_or_chansey
+ cp CHANSEY
+ jr nz, .no_carry
+
+; here either Articuno2 or Chansey
+; is the Arena Card.
+.articuno_or_chansey
+; if can't KO defending Pokemon, check if defending Pokemon
+; can KO this card. If so, then continue.
+; If not, return no carry.
+
+; if it can KO the defending Pokemon this turn,
+; return no carry.
+ farcall CheckIfAnyMoveKnocksOutDefendingCard
+ jr nc, .check_ko
+ farcall CheckIfSelectedMoveIsUnusable
+ jr nc, .no_carry
+ farcall LookForEnergyNeededForMoveInHand
+ jr c, .no_carry
+.check_ko
+ farcall CheckIfDefendingPokemonCanKnockOut
+ jr nc, .no_carry
+ jr .decide_switch
+
+.articuno_bench
+; skip if the defending card is Snorlax
+ push af
+ ld a, DUELVARS_ARENA_CARD
+ call GetNonTurnDuelistVariable
+ call SwapTurn
+ call GetCardIDFromDeckIndex
+ call SwapTurn
+ ld a, e
+ cp SNORLAX
+ pop bc
+ jr z, .no_carry
+
+; check attached energy cards.
+; if it has any, return no carry.
+ ld a, b
+.check_attached_energy
+ ld e, a
+ push af
+ farcall CountNumberOfEnergyCardsAttached
+ or a
+ pop bc
+ ld a, b
+ jr z, .no_energy
+ jp .no_carry
+
+.no_energy
+; has decided to Scoop Up benched card,
+; store $ff as the Pokemon card to switch to
+; because there's no need to switch.
+ push af
+ ld a, $ff
+ ld [wce1a], a
+ pop af
+ scf
+ ret
+; 0x215e7
+
+; this deck will use Scoop Up on a benched Articuno2, Zapdos3 or Molres2.
+; interestingly, does not check for Muk in both Play Areas.
+.HandleLegendaryRonald ; 215e7 (8:55e7)
+; if less than 3 Play Area Pokemon cards, skip.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 3
+ jp c, .no_carry
+
+ ld a, ARTICUNO2
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .articuno_bench
+ ld a, ZAPDOS3
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .check_attached_energy
+ ld a, MOLTRES2
+ ld b, PLAY_AREA_BENCH_1
+ call LookForCardIDInPlayArea_Bank8
+ jr c, .check_attached_energy
+ jp .no_carry
+; 0x2160f
+
+AIPlay_Maintenance: ; 2160f (8:560f)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wce1a]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1b]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x2162c
+
+; AI logic for playing Maintenance
+AIDecide_Maintenance: ; 2162c (8:562c)
+; Imakuni? has his own thing
+ ld a, [wOpponentDeckID]
+ cp IMAKUNI_DECK_ID
+ jr z, .imakuni
+
+; skip if number of cars in hand < 4.
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 4
+ jr c, .no_carry
+
+; list out all the hand cards and remove
+; wAITrainerCardToPlay from list.Then find any duplicate cards.
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld a, [wAITrainerCardToPlay]
+ call FindAndRemoveCardFromList
+; if duplicates are not found, return no carry.
+ call FindDuplicateCards
+ jp c, .no_carry
+
+; store the first duplicate card and remove it from the list.
+; run duplicate check again.
+ ld [wce1a], a
+ ld hl, wDuelTempList
+ call FindAndRemoveCardFromList
+; if duplicates are not found, return no carry.
+ call FindDuplicateCards
+ jp c, .no_carry
+
+; store the second duplicate card and return carry.
+ ld [wce1b], a
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+
+.imakuni
+; has a 2 in 10 chance of not skipping.
+ ld a, 10
+ call Random
+ cp 2
+ jr nc, .no_carry
+
+; skip if number of cards in hand < 3.
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 3
+ jr c, .no_carry
+
+; shuffle hand cards
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ call CountCardsInDuelTempList
+ call ShuffleCards
+
+; go through each card and find
+; cards that are different from wAITrainerCardToPlay.
+; if found, add those cards to wce1a and wce1a+1.
+ ld a, [wAITrainerCardToPlay]
+ ld b, a
+ ld c, 2
+ ld de, wce1a
+
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ cp b
+ jr z, .loop
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+
+; two cards were found, return carry.
+ scf
+ ret
+; 0x2169a
+
+AIPlay_Recycle: ; 2169a (8:569a)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ldtx de, TrainerCardSuccessCheckText
+ bank1call TossCoin
+ jr nc, .asm_216ae
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ jr .asm_216b2
+.asm_216ae
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+.asm_216b2
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x216b8
+
+; lists cards to look for in the Discard Pile.
+; has priorities for Ghost Deck, and a "default" priority list
+; (which is the Fire Charge deck, since it's the only other
+; deck that runs a Recycle card in it.)
+AIDecide_Recycle: ; 216b8 (8:56b8)
+; no use checking if no cards in Discard Pile
+ call CreateDiscardPileCardList
+ jr c, .no_carry
+
+ ld a, $ff
+ ld [wce08], a
+ ld [wce08 + 1], a
+ ld [wce08 + 2], a
+ ld [wce08 + 3], a
+ ld [wce08 + 4], a
+
+; handle Ghost deck differently
+ ld hl, wDuelTempList
+ ld a, [wOpponentDeckID]
+ cp GHOST_DECK_ID
+ jr z, .loop_2
+
+; priority list for Fire Charge deck
+.loop_1
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; double colorless
+ cp DOUBLE_COLORLESS_ENERGY
+ jr nz, .chansey
+ ld a, b
+ ld [wce08], a
+ jr .loop_1
+
+.chansey
+ cp CHANSEY
+ jr nz, .tauros
+ ld a, b
+ ld [wce08 + 1], a
+ jr .loop_1
+
+.tauros
+ cp TAUROS
+ jr nz, .jigglypuff
+ ld a, b
+ ld [wce08 + 2], a
+ jr .loop_1
+
+.jigglypuff
+ cp JIGGLYPUFF1
+ jr nz, .loop_1
+ ld a, b
+ ld [wce08 + 3], a
+ jr .loop_1
+
+; loop through wce08 and set carry
+; on the first that was found in Discard Pile.
+; if none were found, return no carry.
+.done
+ ld hl, wce08
+ ld b, 5
+.loop_found
+ ld a, [hli]
+ cp $ff
+ jr nz, .set_carry
+ dec b
+ jr nz, .loop_found
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+
+; priority list for Ghost deck
+.loop_2
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; gastly2
+ cp GASTLY2
+ jr nz, .gastly1
+ ld a, b
+ ld [wce08], a
+ jr .loop_2
+
+.gastly1
+ cp GASTLY1
+ jr nz, .zubat
+ ld a, b
+ ld [wce08 + 1], a
+ jr .loop_2
+
+.zubat
+ cp ZUBAT
+ jr nz, .ditto
+ ld a, b
+ ld [wce08 + 2], a
+ jr .loop_2
+
+.ditto
+ cp DITTO
+ jr nz, .meowth
+ ld a, b
+ ld [wce08 + 3], a
+ jr .loop_2
+
+.meowth
+ cp MEOWTH2
+ jr nz, .loop_2
+ ld a, b
+ ld [wce08 + 4], a
+ jr .loop_2
+; 0x21755
+
+AIPlay_Lass: ; 21755 (8:5755)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21768
+
+AIDecide_Lass: ; 21768 (8:5768)
+; skip if player has less than 7 cards in hand
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetNonTurnDuelistVariable
+ cp 7
+ jr c, .no_carry
+
+; look for Trainer cards in hand (except for Lass)
+; if any is found, return no carry.
+; otherwise, return carry.
+ call CreateHandCardList
+ ld hl, wDuelTempList
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp LASS
+ jr z, .loop
+ ld a, [wLoadedCard1Type]
+ cp TYPE_TRAINER
+ jr nz, .loop
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2178f
+
+AIPlay_ItemFinder: ; 2178f (8:578f)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wce1a]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1b]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTempRetreatCostCards], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x217b1
+
+; checks whether there's Energy Removal in Discard Pile.
+; if so, find duplicate cards in hand to discard
+; that are not Mr Mime and Pokemon Trader cards.
+; this logic is suitable only for Strange Psyshock deck.
+AIDecide_ItemFinder: ; 217b1 (8:57b1)
+; skip if no Discard Pile.
+ call CreateDiscardPileCardList
+ jr c, .no_carry
+
+; look for Energy Removal in Discard Pile
+ ld hl, wDuelTempList
+.loop_discard_pile
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp ENERGY_REMOVAL
+ jr nz, .loop_discard_pile
+; found, store this deck index
+ ld a, b
+ ld [wce06], a
+
+; before looking for cards to discard in hand,
+; remove any Mr Mime and Pokemon Trader cards.
+; this way these are guaranteed to not be discarded.
+ call CreateHandCardList
+ ld hl, wDuelTempList
+.loop_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .choose_discard
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp MR_MIME
+ jr nz, .pkmn_trader
+ call RemoveCardFromList
+ jr .loop_hand
+.pkmn_trader
+ cp POKEMON_TRADER
+ jr nz, .loop_hand
+ call RemoveCardFromList
+ jr .loop_hand
+
+; choose cards to discard from hand.
+.choose_discard
+ ld hl, wDuelTempList
+
+; do not discard wAITrainerCardToPlay
+ ld a, [wAITrainerCardToPlay]
+ call FindAndRemoveCardFromList
+; find any duplicates, if not found, return no carry.
+ call FindDuplicateCards
+ jp c, .no_carry
+
+; store the duplicate found in wce1a and
+; remove it from the hand list.
+ ld [wce1a], a
+ ld hl, wDuelTempList
+ call FindAndRemoveCardFromList
+; find duplicates again, if not found, return no carry.
+ call FindDuplicateCards
+ jp c, .no_carry
+
+; store the duplicate found in wce1b.
+; output the card to be recovered from the Discard Pile.
+ ld [wce1b], a
+ ld a, [wce06]
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+; 0x21813
+
+AIPlay_Imakuni: ; 21813 (8:5813)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x2181e
+
+; only sets carry if Active card is not confused.
+AIDecide_Imakuni: ; 2181e (8:581e)
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ and CNF_SLP_PRZ
+ cp CONFUSED
+ jr z, .confused
+ scf
+ ret
+.confused
+ or a
+ ret
+; 0x2182d
+
+AIPlay_Gambler: ; 2182d (8:582d)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wOpponentDeckID]
+ cp IMAKUNI_DECK_ID
+ jr z, .asm_2186a
+ ld hl, wRNG1
+ ld a, [hli]
+ ld [wce06], a
+ ld a, [hli]
+ ld [wce08], a
+ ld a, [hl]
+ ld [wce0f], a
+ ld a, $50
+ ld [hld], a
+ ld [hld], a
+ ld [hl], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ld hl, wRNG1
+ ld a, [wce06]
+ ld [hli], a
+ ld a, [wce08]
+ ld [hli], a
+ ld a, [wce0f]
+ ld [hl], a
+ ret
+.asm_2186a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21875
+
+; checks whether to play Gambler.
+; aside from Imakuni, all other opponents only
+; play if there's less than 4 cards in the deck.
+AIDecide_Gambler: ; 21875 (8:5875)
+; Imakuni? has his own routine
+ ld a, [wOpponentDeckID]
+ cp IMAKUNI_DECK_ID
+ jr z, .imakuni
+
+ ld a, [wcda7]
+ and $80
+ jr z, .no_carry
+
+; set carry if number of cards in deck <= 4
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE - 4
+ jr nc, .set_carry
+.no_carry
+ or a
+ ret
+
+.imakuni
+; has a 2 in 10 chance of returning carry
+ ld a, 10
+ call Random
+ cp 2
+ jr nc, .no_carry
+.set_carry
+ scf
+ ret
+; 0x21899
+
+AIPlay_Revive: ; 21899 (8:5899)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x218a9
+
+; checks certain cards in Discard Pile to use Revive on.
+; suitable for Muscle For Brains deck only.
+AIDecide_Revive: ; 218a9 (8:58a9)
+; skip if no cards in Discard Pile
+ call CreateDiscardPileCardList
+ jr c, .no_carry
+
+; skip if number of Pokemon cards in Play Area >= 4
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 4
+ jr nc, .no_carry
+
+; look in Discard Pile for specific cards.
+ ld hl, wDuelTempList
+.loop_discard_pile
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; these checks have a bug.
+; it works fine for Hitmonchan and Hitmonlee,
+; but in case it's a Tauros card, the routine will fallthrough
+; into the Kangaskhan check. since it will never be equal to Kangaskhan,
+; it will fallthrough into the set carry branch.
+; in case it's a Kangaskhan card, the check will fail in the Tauros check
+; and jump back into the loop. so just by accident the Tauros check works,
+; but Kangaskhan will never be correctly checked because of this.
+ cp HITMONCHAN
+ jr z, .set_carry
+ cp HITMONLEE
+ jr z, .set_carry
+ cp TAUROS
+ jr nz, .loop_discard_pile ; bug, these two lines should be swapped
+ cp KANGASKHAN
+ jr z, .set_carry ; bug, these two lines should be swapped
+
+.set_carry
+ ld a, b
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x218d8
+
+AIPlay_PokemonFlute: ; 218d8 (8:58d8)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x218e8
+
+AIDecide_PokemonFlute: ; 218e8 (8:58e8)
+; if player has no Discard Pile, skip.
+ call SwapTurn
+ call CreateDiscardPileCardList
+ call SwapTurn
+ jr c, .no_carry
+
+; if player's Play Area is already full, skip.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ jr nc, .no_carry
+
+ ld a, [wOpponentDeckID]
+ cp IMAKUNI_DECK_ID
+ jr z, .imakuni
+
+ ld a, $ff
+ ld [wce06], a
+ ld [wce08], a
+
+; find Basic stage Pokemon with lowest HP in Discard Pile
+ ld hl, wDuelTempList
+.loop_1
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+
+ ld b, a
+ call SwapTurn
+ call LoadCardDataToBuffer1_FromDeckIndex
+ call SwapTurn
+; skip this card if it's not Pokemon card
+ ld a, [wLoadedCard1Type]
+ cp TYPE_ENERGY
+ jr nc, .loop_1
+; skip this card if it's not Basic Stage
+ ld a, [wLoadedCard1Stage]
+ or a ; BASIC
+ jr nz, .loop_1
+
+; compare this HP with one stored
+ ld a, [wLoadedCard1HP]
+ push hl
+ ld hl, wce06
+ cp [hl]
+ pop hl
+ jr nc, .loop_1
+; if lower, store this one
+ ld [wce06], a
+ ld a, b
+ ld [wce08], a
+ jr .loop_1
+
+.done
+; if lowest HP found >= 50, return no carry
+ ld a, [wce06]
+ cp 50
+ jr nc, .no_carry
+; otherwise output its deck index in a and set carry.
+ ld a, [wce08]
+ scf
+ ret
+.no_carry
+ or a
+ ret
+
+.imakuni
+; has 2 in 10 chance of not skipping
+ ld a, 10
+ call Random
+ cp 2
+ jr nc, .no_carry
+
+; look for any Basic Pokemon card
+ ld hl, wDuelTempList
+.loop_2
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ ld b, a
+ call SwapTurn
+ call LoadCardDataToBuffer1_FromDeckIndex
+ call SwapTurn
+ ld a, [wLoadedCard1Type]
+ cp TYPE_ENERGY
+ jr nc, .loop_2
+ ld a, [wLoadedCard1Stage]
+ or a ; BASIC
+ jr nz, .loop_2
+
+; a Basic stage Pokemon was found, return carry
+ ld a, b
+ scf
+ ret
+; 0x21977
+
+AIPlay_ClefairyDollOrMysteriousFossil: ; 21977 (8:5977)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21982
+
+; AI logic for playing Clefairy Doll
+AIDecide_ClefairyDollOrMysteriousFossil: ; 21982 (8:5982)
+; if has max number of Play Area Pokemon, skip
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ jr nc, .no_carry
+
+; store number of Play Area Pokemon cards
+ ld [wce06], a
+
+; if the Arena card is Wigglytuff, return carry
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp WIGGLYTUFF
+ jr z, .set_carry
+
+; if number of Play Area Pokemon >= 4, return no carry
+ ld a, [wce06]
+ cp 4
+ jr nc, .no_carry
+
+.set_carry
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x219a6
+
+AIPlay_Pokeball: ; 219a6 (8:59a6)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ldtx de, TrainerCardSuccessCheckText
+ bank1call TossCoin
+ ldh [hTemp_ffa0], a
+ jr nc, .asm_219bc
+ ld a, [wAITrainerCardParameter]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ jr .asm_219c0
+.asm_219bc
+ ld a, $ff
+ ldh [hTempPlayAreaLocation_ffa1], a
+.asm_219c0
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x219c6
+
+AIDecide_Pokeball: ; 219c6 (8:59c6)
+; go to the routines associated with deck ID
+ ld a, [wOpponentDeckID]
+ cp FIRE_CHARGE_DECK_ID
+ jr z, .fire_charge
+ cp HARD_POKEMON_DECK_ID
+ jr z, .hard_pokemon
+ cp PIKACHU_DECK_ID
+ jr z, .pikachu
+ cp ETCETERA_DECK_ID
+ jr z, .etcetera
+ cp LOVELY_NIDORAN_DECK_ID
+ jp z, .lovely_nidoran
+ or a
+ ret
+
+; this deck runs a deck check for specific
+; card IDs in order of decreasing priority
+.fire_charge
+ ld e, CHANSEY
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, TAUROS
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, JIGGLYPUFF1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ret
+
+; this deck runs a deck check for specific
+; card IDs in order of decreasing priority
+.hard_pokemon
+ ld e, RHYHORN
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, RHYDON
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, ONIX
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ret
+
+; this deck runs a deck check for specific
+; card IDs in order of decreasing priority
+.pikachu
+ ld e, PIKACHU2
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, PIKACHU3
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, PIKACHU4
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, PIKACHU1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, FLYING_PIKACHU
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ret
+
+; this deck runs a deck check for specific
+; card IDs in order of decreasing priority
+; given a specific energy card in hand.
+; also it avoids redundancy, so if it already
+; has that card ID in the hand, it is skipped.
+.etcetera
+; fire
+ ld a, FIRE_ENERGY
+ call LookForCardIDInHandList_Bank8
+ jr nc, .lightning
+ ld a, CHARMANDER
+ call LookForCardIDInHandList_Bank8
+ jr c, .lightning
+ ld a, MAGMAR2
+ call LookForCardIDInHandList_Bank8
+ jr c, .lightning
+ ld e, CHARMANDER
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, MAGMAR2
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+
+.lightning
+ ld a, LIGHTNING_ENERGY
+ call LookForCardIDInHandList_Bank8
+ jr nc, .fighting
+ ld a, PIKACHU1
+ call LookForCardIDInHandList_Bank8
+ jr c, .fighting
+ ld a, MAGNEMITE1
+ call LookForCardIDInHandList_Bank8
+ jr c, .fighting
+ ld e, PIKACHU1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, MAGNEMITE1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+
+.fighting
+ ld a, FIGHTING_ENERGY
+ call LookForCardIDInHandList_Bank8
+ jr nc, .psychic
+ ld a, DIGLETT
+ call LookForCardIDInHandList_Bank8
+ jr c, .psychic
+ ld a, MACHOP
+ call LookForCardIDInHandList_Bank8
+ jr c, .psychic
+ ld e, DIGLETT
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, MACHOP
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+
+.psychic
+ ld a, PSYCHIC_ENERGY
+ call LookForCardIDInHandList_Bank8
+ jr nc, .done_etcetera
+ ld a, GASTLY1
+ call LookForCardIDInHandList_Bank8
+ jr c, .done_etcetera
+ ld a, JYNX
+ call LookForCardIDInHandList_Bank8
+ jr c, .done_etcetera
+ ld e, GASTLY1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+ ld e, JYNX
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret c
+.done_etcetera
+ or a
+ ret
+
+; this deck looks for card evolutions if
+; its pre-evolution is in hand or in Play Area.
+; if none of these are found, it looks for pre-evolutions
+; of cards it has in hand.
+; it does this for both the NidoranM (first)
+; and NidoranF (second) families.
+.lovely_nidoran
+ ld b, NIDORANM
+ ld a, NIDORINO
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ ret c
+ ld b, NIDORINO
+ ld a, NIDOKING
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ ret c
+ ld a, NIDORANM
+ ld b, NIDORINO
+ call LookForCardIDInDeck_GivenCardIDInHand
+ ret c
+ ld a, NIDORINO
+ ld b, NIDOKING
+ call LookForCardIDInDeck_GivenCardIDInHand
+ ret c
+ ld b, NIDORANF
+ ld a, NIDORINA
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ ret c
+ ld b, NIDORINA
+ ld a, NIDOQUEEN
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ ret c
+ ld a, NIDORANF
+ ld b, NIDORINA
+ call LookForCardIDInDeck_GivenCardIDInHand
+ ret c
+ ld a, NIDORINA
+ ld b, NIDOQUEEN
+ call LookForCardIDInDeck_GivenCardIDInHand
+ ret c
+ ret
+; 0x21b12
+
+AIPlay_ComputerSearch: ; 21b12 (8:5b12)
+ ld a, [wCurrentAIFlags]
+ or AI_FLAG_MODIFIED_HAND
+ ld [wCurrentAIFlags], a
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTempRetreatCostCards], a
+ ld a, [wce1a]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1b]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21b34
+
+; checks what Deck ID AI is playing and handle
+; them in their own routine.
+AIDecide_ComputerSearch: ; 21b34 (8:5b34)
+; skip if number of cards in hand < 3
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 3
+ jr c, .no_carry
+
+ ld a, [wOpponentDeckID]
+ cp ROCK_CRUSHER_DECK_ID
+ jr z, AIDecide_ComputerSearch_RockCrusher
+ cp WONDERS_OF_SCIENCE_DECK_ID
+ jp z, AIDecide_ComputerSearch_WondersOfScience
+ cp FIRE_CHARGE_DECK_ID
+ jp z, AIDecide_ComputerSearch_FireCharge
+ cp ANGER_DECK_ID
+ jp z, AIDecide_ComputerSearch_Anger
+
+.no_carry
+ or a
+ ret
+
+AIDecide_ComputerSearch_RockCrusher: ; 21b55 (8:5b55)
+; if number of cards in hand is equal to 3,
+; target Professor Oak in deck
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 3
+ jr nz, .graveler
+
+ ld e, PROFESSOR_OAK
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr c, .find_discard_cards_1
+ ; no Professor Oak in deck, fallthrough
+
+.no_carry
+ or a
+ ret
+
+.find_discard_cards_1
+ ld [wce06], a
+ ld a, $ff
+ ld [wce1a], a
+ ld [wce1b], a
+
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld de, wce1a
+.loop_hand_1
+ ld a, [hli]
+ cp $ff
+ jr z, .check_discard_cards
+
+ ld c, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; if any of the following cards are in the hand,
+; return no carry.
+ cp PROFESSOR_OAK
+ jr z, .no_carry
+ cp FIGHTING_ENERGY
+ jr z, .no_carry
+ cp DOUBLE_COLORLESS_ENERGY
+ jr z, .no_carry
+ cp DIGLETT
+ jr z, .no_carry
+ cp GEODUDE
+ jr z, .no_carry
+ cp ONIX
+ jr z, .no_carry
+ cp RHYHORN
+ jr z, .no_carry
+
+; if it's same as wAITrainerCardToPlay, skip this card.
+ ld a, [wAITrainerCardToPlay]
+ ld b, a
+ ld a, c
+ cp b
+ jr z, .loop_hand_1
+
+; store this card index in memory
+ ld [de], a
+ inc de
+ jr .loop_hand_1
+
+.check_discard_cards
+; check if two cards were found
+; if so, output in a the deck index
+; of Professor Oak card found in deck and set carry.
+ ld a, [wce1b]
+ cp $ff
+ jr z, .no_carry
+ ld a, [wce06]
+ scf
+ ret
+
+; more than 3 cards in hand, so look for
+; specific evolution cards.
+
+; checks if there is a Graveler card in the deck to target.
+; if so, check if there's Geodude in hand or Play Area,
+; and if there's no Graveler card in hand, proceed.
+; also removes Geodude from hand list so that it is not discarded.
+.graveler
+ ld e, GRAVELER
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .golem
+ ld [wce06], a
+ ld a, GEODUDE
+ call LookForCardIDInHandAndPlayArea
+ jr nc, .golem
+ ld a, GRAVELER
+ call LookForCardIDInHandList_Bank8
+ jr c, .golem
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld e, GEODUDE
+ farcall RemoveCardIDInList
+ jr .find_discard_cards_2
+
+; checks if there is a Golem card in the deck to target.
+; if so, check if there's Graveler in Play Area,
+; and if there's no Golem card in hand, proceed.
+.golem
+ ld e, GOLEM
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .dugtrio
+ ld [wce06], a
+ ld a, GRAVELER
+ call LookForCardIDInPlayArea_Bank8
+ jr nc, .dugtrio
+ ld a, GOLEM
+ call LookForCardIDInHandList_Bank8
+ jr c, .dugtrio
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ jr .find_discard_cards_2
+
+; checks if there is a Dugtrio card in the deck to target.
+; if so, check if there's Diglett in Play Area,
+; and if there's no Dugtrio card in hand, proceed.
+.dugtrio
+ ld e, DUGTRIO
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry
+ ld [wce06], a
+ ld a, DIGLETT
+ call LookForCardIDInPlayArea_Bank8
+ jp nc, .no_carry
+ ld a, DUGTRIO
+ call LookForCardIDInHandList_Bank8
+ jp c, .no_carry
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ jr .find_discard_cards_2
+
+.find_discard_cards_2
+ ld a, $ff
+ ld [wce1a], a
+ ld [wce1b], a
+
+ ld bc, wce1a
+ ld d, $00 ; start considering Trainer cards only
+
+; stores wAITrainerCardToPlay in e so that
+; all routines ignore it for the discard effects.
+ ld a, [wAITrainerCardToPlay]
+ ld e, a
+
+; this loop will store in wce1a cards to discard from hand.
+; at the start it will only consider Trainer cards,
+; then if there are still needed to discard,
+; move on to Pokemon cards, and finally to Energy cards.
+.loop_hand_2
+ call RemoveFromListDifferentCardOfGivenType
+ jr c, .found
+ inc d ; move on to next type (Pokemon, then Energy)
+ ld a, $03
+ cp d
+ jp z, .no_carry ; no more types to look
+ jr .loop_hand_2
+.found
+; store this card in memory,
+; and if there's still one more card to search for,
+; jump back into the loop.
+ ld [bc], a
+ inc bc
+ ld a, [wce1b]
+ cp $ff
+ jr z, .loop_hand_2
+
+; output in a Computer Search target and set carry.
+ ld a, [wce06]
+ scf
+ ret
+
+AIDecide_ComputerSearch_WondersOfScience: ; 21c56 (8:5c56)
+; if number of cards in hand < 5, target Professor Oak in deck
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 5
+ jr nc, .look_in_hand
+
+; target Professor Oak for Computer Search
+ ld e, PROFESSOR_OAK
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .look_in_hand ; can be a jr
+ ld [wce06], a
+ jr .find_discard_cards
+
+; Professor Oak not in deck, move on to
+; look for other cards instead.
+; if Grimer or Muk are not in hand,
+; check whether to use Computer Search on them.
+.look_in_hand
+ ld a, GRIMER
+ call LookForCardIDInHandList_Bank8
+ jr nc, .target_grimer
+ ld a, MUK
+ call LookForCardIDInHandList_Bank8
+ jr nc, .target_muk
+
+.no_carry
+ or a
+ ret
+
+; first check Grimer
+; if in deck, check cards to discard.
+.target_grimer
+ ld e, GRIMER
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry ; can be a jr
+ ld [wce06], a
+ jr .find_discard_cards
+
+; first check Muk
+; if in deck, check cards to discard.
+.target_muk
+ ld e, MUK
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry ; can be a jr
+ ld [wce06], a
+
+; only discard Trainer cards from hand.
+; if there are less than 2 Trainer cards to discard,
+; then return with no carry.
+; else, store the cards to discard and the
+; target card deck index, and return carry.
+.find_discard_cards
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld d, $00 ; first consider Trainer cards
+
+; ignore wAITrainerCardToPlay for the discard effects.
+ ld a, [wAITrainerCardToPlay]
+ ld e, a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1a], a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1b], a
+ ld a, [wce06]
+ scf
+ ret
+
+AIDecide_ComputerSearch_FireCharge: ; 21cbb (8:5cbb)
+; pick target card in deck from highest to lowest priority.
+; if not found in hand, go to corresponding branch.
+ ld a, CHANSEY
+ call LookForCardIDInHandList_Bank8
+ jr nc, .chansey
+ ld a, TAUROS
+ call LookForCardIDInHandList_Bank8
+ jr nc, .tauros
+ ld a, JIGGLYPUFF1
+ call LookForCardIDInHandList_Bank8
+ jr nc, .jigglypuff
+ ; fallthrough
+
+.no_carry
+ or a
+ ret
+
+; for each card targeted, check if it's in deck and,
+; if not, then return no carry.
+; else, look for cards to discard.
+.chansey
+ ld e, CHANSEY
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry
+ ld [wce06], a
+ jr .find_discard_cards
+.tauros
+ ld e, TAUROS
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry
+ ld [wce06], a
+ jr .find_discard_cards
+.jigglypuff
+ ld e, JIGGLYPUFF1
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jp nc, .no_carry
+ ld [wce06], a
+
+; only discard Trainer cards from hand.
+; if there are less than 2 Trainer cards to discard,
+; then return with no carry.
+; else, store the cards to discard and the
+; target card deck index, and return carry.
+.find_discard_cards
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld d, $00 ; first consider Trainer cards
-Func_205d7: ; 205d7 (8:45d7)
- INCROM $205d7, $205f6
+; ignore wAITrainerCardToPlay for the discard effects.
+ ld a, [wAITrainerCardToPlay]
+ ld e, a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1a], a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1b], a
+ ld a, [wce06]
+ scf
+ ret
+; 0x21d1e
-Func_205f6: ; 205f6 (8:45f6)
- INCROM $205f6, $2282e
+AIDecide_ComputerSearch_Anger: ; 21d1e (8:5d1e)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, RATTATA
+ ld a, RATICATE
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_discard_cards
+ ld a, RATTATA
+ ld b, RATICATE
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_discard_cards
+ ld b, GROWLITHE
+ ld a, ARCANINE1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_discard_cards
+ ld a, GROWLITHE
+ ld b, ARCANINE1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_discard_cards
+ ld b, DODUO
+ ld a, DODRIO
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_discard_cards
+ ld a, DODUO
+ ld b, DODRIO
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_discard_cards
+ ; fallthrough
+
+.no_carry
+ or a
+ ret
+
+; only discard Trainer cards from hand.
+; if there are less than 2 Trainer cards to discard,
+; then return with no carry.
+; else, store the cards to discard and the
+; target card deck index, and return carry.
+.find_discard_cards
+ ld [wce06], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld d, $00 ; first consider Trainer cards
+
+; ignore wAITrainerCardToPlay for the discard effects.
+ ld a, [wAITrainerCardToPlay]
+ ld e, a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1a], a
+ call RemoveFromListDifferentCardOfGivenType
+ jr nc, .no_carry
+ ld [wce1b], a
+ ld a, [wce06]
+ scf
+ ret
+; 0x21d7a
+
+AIPlay_PokemonTrader: ; 21d7a (8:5d7a)
+ ld a, [wAITrainerCardToPlay]
+ ldh [hTempCardIndex_ff9f], a
+ ld a, [wAITrainerCardParameter]
+ ldh [hTemp_ffa0], a
+ ld a, [wce1a]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld a, OPPACTION_EXECUTE_TRAINER_EFFECTS
+ bank1call AIMakeDecision
+ ret
+; 0x21d8f
+
+AIDecide_PokemonTrader: ; 21d8f (8:5d8f)
+; each deck has their own routine for picking
+; what Pokemon to look for.
+ ld a, [wOpponentDeckID]
+ cp LEGENDARY_MOLTRES_DECK_ID
+ jr z, AIDecide_PokemonTrader_LegendaryMoltres
+ cp LEGENDARY_ARTICUNO_DECK_ID
+ jr z, AIDecide_PokemonTrader_LegendaryArticuno
+ cp LEGENDARY_DRAGONITE_DECK_ID
+ jp z, AIDecide_PokemonTrader_LegendaryDragonite
+ cp LEGENDARY_RONALD_DECK_ID
+ jp z, AIDecide_PokemonTrader_LegendaryRonald
+ cp BLISTERING_POKEMON_DECK_ID
+ jp z, AIDecide_PokemonTrader_BlisteringPokemon
+ cp SOUND_OF_THE_WAVES_DECK_ID
+ jp z, AIDecide_PokemonTrader_SoundOfTheWaves
+ cp POWER_GENERATOR_DECK_ID
+ jp z, AIDecide_PokemonTrader_PowerGenerator
+ cp FLOWER_GARDEN_DECK_ID
+ jp z, AIDecide_PokemonTrader_FlowerGarden
+ cp STRANGE_POWER_DECK_ID
+ jp z, AIDecide_PokemonTrader_StrangePower
+ cp FLAMETHROWER_DECK_ID
+ jp z, AIDecide_PokemonTrader_Flamethrower
+ or a
+ ret
+
+AIDecide_PokemonTrader_LegendaryMoltres: ; 21dc4 (8:5dc4)
+; look for Moltres2 card in deck to trade with a
+; card in hand different from Moltres1.
+ ld a, MOLTRES2
+ ld e, MOLTRES1
+ call LookForCardIDToTradeWithDifferentHandCard
+ jr nc, .no_carry
+; success
+ ld [wce1a], a
+ ld a, e
+ scf
+ ret
+.no_carry
+ or a
+ ret
+
+AIDecide_PokemonTrader_LegendaryArticuno: ; 21dd5 (8:5dd5)
+; if has none of these cards in Hand or Play Area, proceed
+ ld a, ARTICUNO1
+ call LookForCardIDInHandAndPlayArea
+ jr c, .no_carry
+ ld a, LAPRAS
+ call LookForCardIDInHandAndPlayArea
+ jr c, .no_carry
+
+; if doesn't have Seel in Hand or Play Area,
+; look for it in the deck.
+; otherwise, look for Dewgong instead.
+ ld a, SEEL
+ call LookForCardIDInHandAndPlayArea
+ jr c, .dewgong
+
+ ld e, SEEL
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .dewgong
+ ld [wce1a], a
+ jr .check_hand
+
+.dewgong
+ ld a, DEWGONG
+ call LookForCardIDInHandAndPlayArea
+ jr c, .no_carry
+ ld e, DEWGONG
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .no_carry
+ ld [wce1a], a
+
+; a Seel or Dewgong was found in deck,
+; check hand for card to trade for
+.check_hand
+ ld a, CHANSEY
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, DITTO
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, ARTICUNO2
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ; doesn't have any of the cards in hand
+
+.no_carry
+ or a
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x21e24
+
+AIDecide_PokemonTrader_LegendaryDragonite: ; 21e24 (8:5e24)
+; if has less than 5 cards of energy
+; and of Pokemon in hand/Play Area,
+; target a Kangaskhan in deck.
+ farcall CountOppEnergyCardsInHandAndAttached
+ cp 5
+ jr c, .kangaskhan
+ call CountPokemonCardsInHandAndInPlayArea
+ cp 5
+ jr c, .kangaskhan
+ ; total number of energy cards >= 5
+ ; total number of Pokemon cards >= 5
+
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, MAGIKARP
+ ld a, GYARADOS
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, MAGIKARP
+ ld b, GYARADOS
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, DRATINI
+ ld a, DRAGONAIR
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld b, DRAGONAIR
+ ld a, DRAGONITE1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, DRATINI
+ ld b, DRAGONAIR
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld a, DRAGONAIR
+ ld b, DRAGONITE1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, CHARMANDER
+ ld a, CHARMELEON
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld b, CHARMELEON
+ ld a, CHARIZARD
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, CHARMANDER
+ ld b, CHARMELEON
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld a, CHARMELEON
+ ld b, CHARIZARD
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ jr .no_carry
+
+.kangaskhan
+ ld e, KANGASKHAN
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .no_carry
+
+; card was found as target in deck,
+; look for card in hand to trade with
+.choose_hand
+ ld [wce1a], a
+ ld a, DRAGONAIR
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, CHARMELEON
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, GYARADOS
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, MAGIKARP
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, CHARMANDER
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, DRATINI
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ; non found
+
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x21ec9
+
+AIDecide_PokemonTrader_LegendaryRonald: ; 21ec9 (8:5ec9)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, EEVEE
+ ld a, FLAREON1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld b, EEVEE
+ ld a, VAPOREON1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld b, EEVEE
+ ld a, JOLTEON1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, EEVEE
+ ld b, FLAREON1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld a, EEVEE
+ ld b, VAPOREON1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld a, EEVEE
+ ld b, JOLTEON1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, DRATINI
+ ld a, DRAGONAIR
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld b, DRAGONAIR
+ ld a, DRAGONITE1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, DRATINI
+ ld b, DRAGONAIR
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld a, DRAGONAIR
+ ld b, DRAGONITE1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ jr .no_carry
+
+; card was found as target in deck,
+; look for card in hand to trade with
+.choose_hand
+ ld [wce1a], a
+ ld a, ZAPDOS3
+ call LookForCardIDInHandList_Bank8
+ jr c, .set_carry
+ ld a, ARTICUNO2
+ call LookForCardIDInHandList_Bank8
+ jr c, .set_carry
+ ld a, MOLTRES2
+ call LookForCardIDInHandList_Bank8
+ jr c, .set_carry
+ ; none found
+
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x21f41
+
+AIDecide_PokemonTrader_BlisteringPokemon: ; 21f41 (8:5f41)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, RHYHORN
+ ld a, RHYDON
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, RHYHORN
+ ld b, RHYDON
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, CUBONE
+ ld a, MAROWAK1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, CUBONE
+ ld b, MAROWAK1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, PONYTA
+ ld a, RAPIDASH
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, PONYTA
+ ld b, RAPIDASH
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ jr .no_carry
+
+; a card in deck was found to look for,
+; check if there are duplicates in hand to trade with.
+.find_duplicates
+ ld [wce1a], a
+ call FindDuplicatePokemonCards
+ jr c, .set_carry
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x21f85
+
+AIDecide_PokemonTrader_SoundOfTheWaves: ; 21f85 (8:5f85)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, SEEL
+ ld a, DEWGONG
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, SEEL
+ ld b, DEWGONG
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, KRABBY
+ ld a, KINGLER
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, KRABBY
+ ld b, KINGLER
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, SHELLDER
+ ld a, CLOYSTER
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, SHELLDER
+ ld b, CLOYSTER
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, HORSEA
+ ld a, SEADRA
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, HORSEA
+ ld b, SEADRA
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ ld b, TENTACOOL
+ ld a, TENTACRUEL
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .choose_hand
+ ld a, TENTACOOL
+ ld b, TENTACRUEL
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .choose_hand
+ jr .no_carry
+
+; card was found as target in deck,
+; look for card in hand to trade with
+.choose_hand
+ ld [wce1a], a
+ ld a, SEEL
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, KRABBY
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, HORSEA
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, SHELLDER
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ld a, TENTACOOL
+ call CheckIfHasCardIDInHand
+ jr c, .set_carry
+ ; none found
+
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2200b
+
+AIDecide_PokemonTrader_PowerGenerator: ; 2200b (8:600b)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, PIKACHU2
+ ld a, RAICHU1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jp c, .find_duplicates
+ ld b, PIKACHU1
+ ld a, RAICHU1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, PIKACHU2
+ ld b, RAICHU1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, PIKACHU1
+ ld b, RAICHU1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, VOLTORB
+ ld a, ELECTRODE2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, VOLTORB
+ ld a, ELECTRODE1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, VOLTORB
+ ld b, ELECTRODE2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, VOLTORB
+ ld b, ELECTRODE1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, MAGNEMITE1
+ ld a, MAGNETON2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, MAGNEMITE2
+ ld a, MAGNETON2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, MAGNEMITE1
+ ld a, MAGNETON1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, MAGNEMITE2
+ ld a, MAGNETON1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, MAGNEMITE2
+ ld b, MAGNETON2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, MAGNEMITE1
+ ld b, MAGNETON2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, MAGNEMITE2
+ ld b, MAGNETON1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, MAGNEMITE1
+ ld b, MAGNETON1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ; bug, missing jr .no_carry
+
+; since this last check falls through regardless of result,
+; register a might hold an invalid deck index,
+; which might lead to hilarious results like Brandon
+; trading a Pikachu with a Grass Energy from the deck.
+; however, since it's deep in a tower of conditionals,
+; reaching here is extremely unlikely.
+
+; a card in deck was found to look for,
+; check if there are duplicates in hand to trade with.
+.find_duplicates
+ ld [wce1a], a
+ call FindDuplicatePokemonCards
+ jr c, .set_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x220a8
+
+AIDecide_PokemonTrader_FlowerGarden: ; 220a8 (8:60a8)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, BULBASAUR
+ ld a, IVYSAUR
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, IVYSAUR
+ ld a, VENUSAUR2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, BULBASAUR
+ ld b, IVYSAUR
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, IVYSAUR
+ ld b, VENUSAUR2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, BELLSPROUT
+ ld a, WEEPINBELL
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, WEEPINBELL
+ ld a, VICTREEBEL
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, BELLSPROUT
+ ld b, WEEPINBELL
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, WEEPINBELL
+ ld b, VICTREEBEL
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, ODDISH
+ ld a, GLOOM
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, GLOOM
+ ld a, VILEPLUME
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, ODDISH
+ ld b, GLOOM
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, GLOOM
+ ld b, VILEPLUME
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ jr .no_carry
+
+; a card in deck was found to look for,
+; check if there are duplicates in hand to trade with.
+.find_duplicates
+ ld [wce1a], a
+ call FindDuplicatePokemonCards
+ jr c, .found
+.no_carry
+ or a
+ ret
+.found
+ scf
+ ret
+; 0x22122
+
+AIDecide_PokemonTrader_StrangePower: ; 22122 (8:6122)
+; looks for a Pokemon in hand to trade with Mr Mime in deck.
+; inputing Mr Mime in register e for the function is redundant
+; since it already checks whether a Mr Mime exists in the hand.
+ ld a, MR_MIME
+ ld e, MR_MIME
+ call LookForCardIDToTradeWithDifferentHandCard
+ jr nc, .no_carry
+; found
+ ld [wce1a], a
+ ld a, e
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x22133
+
+AIDecide_PokemonTrader_Flamethrower: ; 22133 (8:6133)
+; for each of the following cards,
+; first run a check if there's a pre-evolution in
+; Play Area or in the hand. If there is, choose it as target.
+; otherwise, check if the evolution card is in
+; hand and if so, choose it as target instead.
+ ld b, CHARMANDER
+ ld a, CHARMELEON
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld b, CHARMELEON
+ ld a, CHARIZARD
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, CHARMANDER
+ ld b, CHARMELEON
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld a, CHARMELEON
+ ld b, CHARIZARD
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, VULPIX
+ ld a, NINETAILS1
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, VULPIX
+ ld b, NINETAILS1
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, GROWLITHE
+ ld a, ARCANINE2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, GROWLITHE
+ ld b, ARCANINE2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ ld b, EEVEE
+ ld a, FLAREON2
+ call LookForCardIDInDeck_GivenCardIDInHandAndPlayArea
+ jr c, .find_duplicates
+ ld a, EEVEE
+ ld b, FLAREON2
+ call LookForCardIDInDeck_GivenCardIDInHand
+ jr c, .find_duplicates
+ jr .no_carry
+
+; a card in deck was found to look for,
+; check if there are duplicates in hand to trade with.
+.find_duplicates
+ ld [wce1a], a
+ call FindDuplicatePokemonCards
+ jr c, .set_carry
+.no_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2219b
+
+Func_2219b: ; 2219b (8:219b)
+ INCROM $2219b, $227f6
+
+; lists in wDuelTempList all the basic energy cards
+; in card location of a.
+; outputs in a number of cards found.
+; returns carry if none were found.
+; input:
+; a = CARD_LOCATION_* to look
+; output:
+; a = number of cards found
+FindBasicEnergyCardsInLocation: ; 227f6 (8:67f6)
+ ld [wTempAI], a
+ lb de, 0, 0
+ ld hl, wDuelTempList
+
+; d = number of basic energy cards found
+; e = current card in deck
+; loop entire deck
+.loop
+ ld a, DUELVARS_CARD_LOCATIONS
+ add e
+ push hl
+ call GetTurnDuelistVariable
+ ld hl, wTempAI
+ cp [hl]
+ pop hl
+ jr nz, .next_card
+
+; is in the card location we're looking for
+ ld a, e
+ push de
+ push hl
+ call GetCardIDFromDeckIndex
+ pop hl
+ ld a, e
+ pop de
+ cp DOUBLE_COLORLESS_ENERGY
+ ; only basic energy cards
+ ; will set carry here
+ jr nc, .next_card
+
+; is a basic energy card
+; add this card to the TempList
+ ld a, e
+ ld [hli], a
+ inc d
+.next_card
+ inc e
+ ld a, DECK_SIZE
+ cp e
+ jr nz, .loop
+
+; check if any were found
+ ld a, d
+ or a
+ jr z, .set_carry
+
+; some were found, add the termination byte on TempList
+ ld a, $ff
+ ld [hl], a
+ ld a, d
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x2282e
; returns in a the card index of energy card
; attached to Pokémon in Play Area location a,
-; that is to be discarded.
-GetEnergyCardToDiscard: ; 2282e (8:682e)
+; that is to be discarded by the AI for an effect.
+; outputs $ff is none was found.
+; input:
+; a = PLAY_AREA_* constant of card
+; output:
+; a = deck index of attached energy card chosen
+AIPickEnergyCardToDiscard: ; 2282e (8:682e)
; load Pokémon's attached energy cards.
ldh [hTempPlayAreaLocation_ff9d], a
call CreateArenaOrBenchEnergyCardList
@@ -994,8 +6345,206 @@ GetEnergyCardToDiscard: ; 2282e (8:682e)
ret
; 0x22875
-Func_22875: ; 22875 (8:6875)
- INCROM $22875, $2297b
+; returns in a the deck index of an energy card attached to card
+; in player's Play Area location a to remove.
+; prioritises double colorless energy, then any useful energy,
+; then defaults to the first energy card attached if neither
+; of those are found.
+; returns $ff in a if there are no energy cards attached.
+; input:
+; a = Play Area location to check
+; output:
+; a = deck index of attached energy card
+PickAttachedEnergyCardToRemove: ; 22875 (8:6875)
+; construct energy list and check if there are any energy cards attached
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call CreateArenaOrBenchEnergyCardList
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld e, a
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr z, .no_energy
+
+; load card data and store its type
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD
+ add b
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+ ld [wTempCardType], a
+
+; first look for any double colorless energy
+ ld hl, wDuelTempList
+.loop_1
+ ld a, [hl]
+ cp $ff
+ jr z, .check_useful
+ push hl
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp DOUBLE_COLORLESS_ENERGY
+ pop hl
+ jr z, .found
+ inc hl
+ jr .loop_1
+
+; then look for any energy cards that are useful
+.check_useful
+ ld hl, wDuelTempList
+.loop_2
+ ld a, [hl]
+ cp $ff
+ jr z, .default
+ farcall CheckIfEnergyIsUseful
+ jr c, .found
+ inc hl
+ jr .loop_2
+
+; return the energy card that was found
+.found
+ ld a, [hl]
+ ret
+
+; if none were found with the above criteria,
+; just return the first option
+.default
+ ld hl, wDuelTempList
+ ld a, [hl]
+ ret
+
+; return $ff if no energy cards attached
+.no_energy
+ ld a, $ff
+ ret
+; 0x228d1
+
+; stores in wTempAI and wCurCardCanAttack the deck indices
+; of energy cards attached to card in Play Area location a.
+; prioritises double colorless energy, then any useful energy,
+; then defaults to the first two energy cards attached if neither
+; of those are found.
+; returns $ff in a if there are no energy cards attached.
+; input:
+; a = Play Area location to check
+; output:
+; [wTempAI] = deck index of attached energy card
+; [wCurCardCanAttack] = deck index of attached energy card
+PickTwoAttachedEnergyCards: ; 228d1 (8:68d1)
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call CreateArenaOrBenchEnergyCardList
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld e, a
+ farcall CountNumberOfEnergyCardsAttached
+ cp 2
+ jp c, .not_enough
+
+; load card data and store its type
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD
+ add b
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempCardID], a
+ call LoadCardDataToBuffer1_FromCardID
+ ld a, [wLoadedCard1Type]
+ or TYPE_ENERGY
+ ld [wTempCardType], a
+ ld a, $ff
+ ld [wTempAI], a
+ ld [wCurCardCanAttack], a
+
+; first look for any double colorless energy
+ ld hl, wDuelTempList
+.loop_1
+ ld a, [hl]
+ cp $ff
+ jr z, .check_useful
+ push hl
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp DOUBLE_COLORLESS_ENERGY
+ pop hl
+ jr z, .found_double_colorless
+ inc hl
+ jr .loop_1
+.found_double_colorless
+ ld a, [wTempAI]
+ cp $ff
+ jr nz, .already_chosen_1
+ ld a, [hli]
+ ld [wTempAI], a
+ jr .loop_1
+.already_chosen_1
+ ld a, [hl]
+ ld [wCurCardCanAttack], a
+ jr .done
+
+; then look for any energy cards that are useful
+.check_useful
+ ld hl, wDuelTempList
+.loop_2
+ ld a, [hl]
+ cp $ff
+ jr z, .default
+ farcall CheckIfEnergyIsUseful
+ jr c, .found_useful
+ inc hl
+ jr .loop_2
+.found_useful
+ ld a, [wTempAI]
+ cp $ff
+ jr nz, .already_chosen_2
+ ld a, [hli]
+ ld [wTempAI], a
+ jr .loop_2
+.already_chosen_2
+ ld a, [hl]
+ ld [wCurCardCanAttack], a
+ jr .done
+
+; if none were found with the above criteria,
+; just return the first 2 options
+.default
+ ld hl, wDuelTempList
+ ld a, [wTempAI]
+ cp $ff
+ jr nz, .pick_one_card
+
+; pick 2 cards
+ ld a, [hli]
+ ld [wTempAI], a
+ ld a, [hl]
+ ld [wCurCardCanAttack], a
+ jr .done
+.pick_one_card
+ ld a, [wTempAI]
+ ld b, a
+.loop_3
+ ld a, [hli]
+ cp b
+ jr z, .loop_3 ; already picked
+ ld [wCurCardCanAttack], a
+
+.done
+ ld a, [wCurCardCanAttack]
+ ld b, a
+ ld a, [wTempAI]
+ ret
+
+; return $ff if no energy cards attached
+.not_enough
+ ld a, $ff
+ ret
+; 0x2297b
; copies $ff terminated buffer from hl to de
CopyBuffer: ; 2297b (8:697b)
@@ -1007,15 +6556,29 @@ CopyBuffer: ; 2297b (8:697b)
jr CopyBuffer
; 0x22983
-Func_22983: ; 22983 (8:6983)
- INCROM $22983, $22990
+; zeroes a bytes starting at hl
+ClearMemory_Bank8: ; 22983 (8:6983)
+ push af
+ push bc
+ push hl
+ ld b, a
+ xor a
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ pop hl
+ pop bc
+ pop af
+ ret
+; 0x22990
; counts number of energy cards found in hand
; and outputs result in a
; sets carry if none are found
; output:
; a = number of energy cards found
-CountEnergyCardsInHand: ; 22990 (8:6990)
+CountOppEnergyCardsInHand: ; 22990 (8:6990)
farcall CreateEnergyCardListFromHand
ret c
ld b, -1
@@ -1030,14 +6593,544 @@ CountEnergyCardsInHand: ; 22990 (8:6990)
ret
; 0x229a3
-Func_229a3 ; 229a3 (8:69a3)
- INCROM $229a3, $22bad
+; converts HP in a to number of equivalent damage counters
+; input:
+; a = HP
+; output:
+; a = number of damage counters
+ConvertHPToCounters: ; 229a3 (8:69a3)
+ push bc
+ ld c, 0
+.loop
+ sub 10
+ jr c, .carry
+ inc c
+ jr .loop
+.carry
+ ld a, c
+ pop bc
+ ret
+; 0x229b0
+
+; calculates floor(hl / 10)
+CalculateWordTensDigit: ; 229b0 (8:69b0)
+ push bc
+ push de
+ lb bc, $ff, -10
+ lb de, $ff, -1
+.asm_229b8
+ inc de
+ add hl, bc
+ jr c, .asm_229b8
+ ld h, d
+ ld l, e
+ pop de
+ pop bc
+ ret
+; 0x229c1
+
+; returns in a division of b by a
+CalculateBDividedByA_Bank8: ; 229c1 (8:69c1)
+ push bc
+ ld c, a
+ ld a, b
+ ld b, c
+ ld c, 0
+.loop
+ sub b
+ jr c, .done
+ inc c
+ jr .loop
+.done
+ ld a, c
+ pop bc
+ ret
+; 0x229d0
+
+; returns in a the deck index of the first
+; instance of card with ID equal to the ID in e
+; in card location a.
+; returns carry if found.
+; input:
+; a = CARD_LOCATION_*
+; e = card ID to look for
+LookForCardIDInLocation: ; 229d0 (8:69d0)
+ ld b, a
+ ld c, e
+ lb de, $00, 0 ; d is never used
+.loop
+ ld a, DUELVARS_CARD_LOCATIONS
+ add e
+ call GetTurnDuelistVariable
+ cp b
+ jr nz, .next
+ ld a, e
+ push de
+ call GetCardIDFromDeckIndex
+ ld a, e
+ pop de
+ cp c
+ jr z, .found
+.next
+ inc e
+ ld a, DECK_SIZE
+ cp e
+ jr nz, .loop
+
+; not found
+ or a
+ ret
+.found
+ ld a, e
+ scf
+ ret
+; 0x229f3
+
+; return carry if card ID loaded in a is found in hand
+; and outputs in a the deck index of that card
+; input:
+; a = card ID
+; output:
+; a = card deck index, if found
+; carry set if found
+LookForCardIDInHandList_Bank8: ; 229f3 (8:69f3)
+ ld [wTempCardIDToLook], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+
+.loop
+ ld a, [hli]
+ cp $ff
+ ret z
+
+ ldh [hTempCardIndex_ff98], a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld b, a
+ ld a, [wTempCardIDToLook]
+ cp b
+ jr nz, .loop
+
+ ldh a, [hTempCardIndex_ff98]
+ scf
+ ret
+; 0x22a10
+
+; searches in deck for card ID 1 in a, and
+; if found, searches in Hand/Play Area for card ID 2 in b, and
+; if found, searches for card ID 1 in Hand/Play Area, and
+; if none found, return carry and output deck index
+; of the card ID 1 in deck.
+; input:
+; a = card ID 1
+; b = card ID 2
+; output:
+; a = index of card ID 1 in deck
+LookForCardIDInDeck_GivenCardIDInHandAndPlayArea: ; 22a10 (8:6a10)
+; store a in wCurCardCanAttack
+; and b in wTempAI
+ ld c, a
+ ld a, b
+ ld [wTempAI], a
+ ld a, c
+ ld [wCurCardCanAttack], a
+
+; look for the card ID 1 in deck
+ ld e, a
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret nc
+
+; was found, store its deck index in memory
+ ld [wTempAIPokemonCard], a
+
+; look for the card ID 2
+; in Hand and Play Area, return if not found.
+ ld a, [wTempAI]
+ call LookForCardIDInHandAndPlayArea
+ ret nc
+
+; look for the card ID 1 in the Hand and Play Area
+; if any card is found, return no carry.
+ ld a, [wCurCardCanAttack]
+ call LookForCardIDInHandAndPlayArea
+ jr c, .no_carry
+; none found
+
+ ld a, [wTempAIPokemonCard]
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+; 0x22a39
+
+; returns carry if card ID in a
+; is found in Play Area or in hand
+; input:
+; a = card ID
+LookForCardIDInHandAndPlayArea: ; 22a39 (8:6a39)
+ ld b, a
+ push bc
+ call LookForCardIDInHandList_Bank8
+ pop bc
+ ret c
+
+ ld a, b
+ ld b, PLAY_AREA_ARENA
+ call LookForCardIDInPlayArea_Bank8
+ ret c
+ or a
+ ret
+; 0x22a49
+
+; searches in deck for card ID 1 in a, and
+; if found, searches in Hand Area for card ID 2 in b, and
+; if found, searches for card ID 1 in Hand/Play Area, and
+; if none found, return carry and output deck index
+; of the card ID 1 in deck.
+; input:
+; a = card ID 1
+; b = card ID 2
+; output:
+; a = index of card ID 1 in deck
+LookForCardIDInDeck_GivenCardIDInHand: ; 22a49 (8:6a49)
+; store a in wCurCardCanAttack
+; and b in wTempAI
+ ld c, a
+ ld a, b
+ ld [wTempAI], a
+ ld a, c
+ ld [wCurCardCanAttack], a
+
+; look for the card ID 1 in deck
+ ld e, a
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ ret nc
+
+; was found, store its deck index in memory
+ ld [wTempAIPokemonCard], a
+
+; look for the card ID 2 in hand, return if not found.
+ ld a, [wTempAI]
+ call LookForCardIDInHandList_Bank8
+ ret nc
+
+; look for the card ID 1 in the Hand and Play Area
+; if any card is found, return no carry.
+ ld a, [wCurCardCanAttack]
+ call LookForCardIDInHandAndPlayArea
+ jr c, .no_carry
+; none found
+
+ ld a, [wTempAIPokemonCard]
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+; 0x22a72
+
+; returns carry if card ID in a
+; is found in Play Area, starting with
+; location in b
+; input:
+; a = card ID
+; b = PLAY_AREA_* to start with
+; ouput:
+; a = PLAY_AREA_* of found card
+; carry set if found
+LookForCardIDInPlayArea_Bank8: ; 22a72 (8:6a72)
+ ld [wTempCardIDToLook], a
+.loop
+ ld a, DUELVARS_ARENA_CARD
+ add b
+ call GetTurnDuelistVariable
+ cp $ff
+ ret z
+
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld c, a
+ ld a, [wTempCardIDToLook]
+ cp c
+ jr z, .is_same
+
+ inc b
+ ld a, MAX_PLAY_AREA_POKEMON
+ cp b
+ jr nz, .loop
+ ld b, $ff
+ or a
+ ret
+
+.is_same
+ ld a, b
+ scf
+ ret
+; 0x22a95
+
+; runs through list avoiding card in e.
+; removes first card in list not equal to e
+; and that has a type allowed to be removed, in d.
+; returns carry if successful in finding a card.
+; input:
+; d = type of card allowed to be removed
+; ($00 = Trainer, $01 = Pokemon, $02 = Energy)
+; e = card deck index to avoid removing
+; output:
+; a = card index of removed card
+RemoveFromListDifferentCardOfGivenType: ; 22a95 (8:6a95)
+ push hl
+ push de
+ push bc
+ call CountCardsInDuelTempList
+ call ShuffleCards
+
+; loop list until a card with
+; deck index different from e is found.
+.loop_list
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ cp e
+ jr z, .loop_list
+
+; get this card's type
+ ldh [hTempCardIndex_ff98], a
+ push de
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop de
+ cp TYPE_ENERGY
+ jr c, .pkmn_card
+ cp TYPE_TRAINER
+ jr nz, .energy
+
+; only remove from list specific type.
+
+; trainer
+ ld a, d
+ or a
+ jr nz, .loop_list
+ jr .remove_card
+.energy
+ ld a, d
+ cp $02
+ jr nz, .loop_list
+ jr .remove_card
+.pkmn_card
+ ld a, d
+ cp $01
+ jr nz, .loop_list
+ ; fallthrough
+
+.remove_card
+ ld d, h
+ ld e, l
+ dec hl
+.loop_remove
+ ld a, [de]
+ inc de
+ ld [hli], a
+ cp $ff
+ jr nz, .loop_remove
+
+; success
+ ldh a, [hTempCardIndex_ff98]
+ pop bc
+ pop de
+ pop hl
+ scf
+ ret
+.no_carry
+ pop bc
+ pop de
+ pop hl
+ or a
+ ret
+; 0x22ae0
+
+; used in Pokemon Trader checks to look for a specific
+; card in the deck to trade with a card in hand that
+; has a card ID different from e.
+; returns carry if successful.
+; input:
+; a = card ID 1
+; e = card ID 2
+; output:
+; a = deck index of card ID 1 found in deck
+; e = deck index of Pokemon card in hand dfferent than card ID 2
+LookForCardIDToTradeWithDifferentHandCard: ; 22ae0 (8:6ae0)
+ ld hl, wCurCardCanAttack
+ ld [hl], e
+ ld [wTempAI], a
+
+; if card ID 1 is in hand, return no carry.
+ call LookForCardIDInHandList_Bank8
+ jr c, .no_carry
+
+; if card ID 1 is not in deck, return no carry.
+ ld a, [wTempAI]
+ ld e, a
+ ld a, CARD_LOCATION_DECK
+ call LookForCardIDInLocation
+ jr nc, .no_carry
+
+; store its deck index
+ ld [wTempAI], a
+
+; look in hand for Pokemon card ID that
+; is different from card ID 2.
+ ld a, [wCurCardCanAttack]
+ ld c, a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+
+.loop_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .no_carry
+ ld b, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ cp c
+ jr z, .loop_hand
+ ld a, [wLoadedCard1Type]
+ cp TYPE_ENERGY
+ jr nc, .loop_hand
+
+; found, output deck index of card ID 1 in deck
+; and deck index of card found in hand, and set carry
+ ld e, b
+ ld a, [wTempAI]
+ scf
+ ret
+
+.no_carry
+ or a
+ ret
+; 0x22b1f
+
+; returns carry if at least one card in the hand
+; has the card ID of input. Outputs its index.
+; input:
+; a = card ID to look for
+; output:
+; a = deck index of card in hand found
+CheckIfHasCardIDInHand: ; 22b1f (8:6b1f)
+ ld [wTempCardIDToLook], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld c, 0
+
+.loop_hand
+ ld a, [hli]
+ cp $ff
+ ret z
+ ldh [hTempCardIndex_ff98], a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld b, a
+ ld a, [wTempCardIDToLook]
+ cp b
+ jr nz, .loop_hand
+ ld a, c
+ or a
+ jr nz, .set_carry
+ inc c
+ jr nz, .loop_hand
+
+.set_carry
+ ldh a, [hTempCardIndex_ff98]
+ scf
+ ret
+; 0x22b45
+
+; outputs in a total number of Pokemon cards in hand
+; plus Pokemon in Turn Duelist's Play Area.
+CountPokemonCardsInHandAndInPlayArea: ; 22b45 (8:6b45)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld [wTempAI], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+.loop_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_ENERGY
+ jr nc, .loop_hand
+ ld a, [wTempAI]
+ inc a
+ ld [wTempAI], a
+ jr .loop_hand
+.done
+ ld a, [wTempAI]
+ ret
+; 0x22b6f
+
+; returns carry if a duplicate Pokemon card is found in hand.
+; outputs in a the deck index of one of them.
+FindDuplicatePokemonCards: ; 22b6f (8:6b6f)
+ ld a, $ff
+ ld [wTempAI], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ push hl
+
+.loop_hand_outer
+ pop hl
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ call GetCardIDFromDeckIndex
+ ld b, e
+ push hl
+
+.loop_hand_inner
+ ld a, [hli]
+ cp $ff
+ jr z, .loop_hand_outer
+ ld c, a
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp b
+ jr nz, .loop_hand_inner
+
+; found two cards with same ID,
+; if they are Pokemon cards, store its deck index.
+ push bc
+ call GetCardType
+ pop bc
+ cp TYPE_ENERGY
+ jr nc, .loop_hand_outer
+ ld a, c
+ ld [wTempAI], a
+ ; for some reason loop still continues
+ ; even though if some other duplicate
+ ; cards are found, it overwrites the result.
+ jr .loop_hand_outer
+
+.done
+ ld a, [wTempAI]
+ cp $ff
+ jr z, .no_carry
+
+; found
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x22bad
; return carry flag if move is not high recoil.
Func_22bad: ; 22bad (8:6bad)
farcall Func_169ca
ret nc
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld e, a
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
@@ -1049,5 +7142,6 @@ Func_22bad: ; 22bad (8:6bad)
ret
; 0x22bc6
-Func_22bc6 ; 22bc6 (8:6bc6)
- INCROM $22bc6, $24000
+rept $143a
+ db $ff
+endr
diff --git a/src/engine/home.asm b/src/engine/home.asm
index b7374aa..545995a 100644
--- a/src/engine/home.asm
+++ b/src/engine/home.asm
@@ -4376,7 +4376,7 @@ Func_161e: ; 161e (0:161e)
; 0x16ad
; copies, given a card identified by register a (card ID):
-; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f
+; - e into wSelectedAttack and d into hTempCardIndex_ff9f
; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove
; - Also from that move, its Damage field into wDamage
; finally, clears wNoDamageOrEffect and wDealtDamage
@@ -4384,7 +4384,7 @@ CopyMoveDataAndDamage_FromCardID: ; 16ad (0:16ad)
push de
push af
ld a, e
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, d
ldh [hTempCardIndex_ff9f], a
pop af
@@ -4395,13 +4395,13 @@ CopyMoveDataAndDamage_FromCardID: ; 16ad (0:16ad)
jr CopyMoveDataAndDamage
; copies, given a card identified by register d (0-59 deck index):
-; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f
+; - e into wSelectedAttack and d into hTempCardIndex_ff9f
; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove
; - Also from that move, its Damage field into wDamage
; finally, clears wNoDamageOrEffect and wDealtDamage
CopyMoveDataAndDamage_FromDeckIndex: ; 16c0 (0:16c0)
ld a, e
- ld [wSelectedMoveIndex], a
+ ld [wSelectedAttack], a
ld a, d
ldh [hTempCardIndex_ff9f], a
call LoadCardDataToBuffer1_FromDeckIndex
@@ -4465,7 +4465,7 @@ Func_16f6: ; 16f6 (0:16f6)
; Use an attack (from DuelMenu_Attack) or a Pokemon Power (from DuelMenu_PkmnPower)
UseAttackOrPokemonPower: ; 1730 (0:1730)
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
ld [wPlayerAttackingMoveIndex], a
ldh a, [hTempCardIndex_ff9f]
ld [wPlayerAttackingCardIndex], a
@@ -5259,7 +5259,7 @@ MoveCardToDiscardPileIfInArena: ; 1c13 (0:1c13)
ret
; 0x1c35
-; calculate damage of card at CARD_LOCATION_PLAY_AREA + e
+; calculate damage of card at CARD_LOCATION_* in e
; return the result in a
GetCardDamage: ; 1c35 (0:1c35)
push hl
@@ -9858,7 +9858,7 @@ HandleCantAttackSubstatus: ; 33c1 (0:33c1)
ret
; return carry if the turn holder's arena Pokemon cannot use
-; selected move at wSelectedMoveIndex due to amnesia
+; selected move at wSelectedAttack due to amnesia
HandleAmnesiaSubstatus: ; 33e1 (0:33e1)
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
@@ -9874,7 +9874,7 @@ HandleAmnesiaSubstatus: ; 33e1 (0:33e1)
.affected_by_amnesia
ld a, DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX
call GetTurnDuelistVariable
- ld a, [wSelectedMoveIndex]
+ ld a, [wSelectedAttack]
cp [hl]
jr nz, .not_the_disabled_move
ldtx hl, UnableToUseAttackDueToAmnesiaText
diff --git a/src/macros/wram.asm b/src/macros/wram.asm
index ca8a9d0..ef7d8b2 100644
--- a/src/macros/wram.asm
+++ b/src/macros/wram.asm
@@ -35,7 +35,7 @@ move_data_struct: MACRO
\1Flag1:: ds 1
\1Flag2:: ds 1
\1Flag3:: ds 1
-\1Unknown1:: ds 1
+\1EffectParam:: ds 1
\1Animation:: ds 1
ENDM
diff --git a/src/text/text1.asm b/src/text/text1.asm
index 1bfcf54..69f44f6 100644
--- a/src/text/text1.asm
+++ b/src/text/text1.asm
@@ -1123,7 +1123,7 @@ Text00ee: ; 37eb8 (d:7eb8)
line "If Heads, Attack is successful!"
done
-Text00ef: ; 37eea (d:7eea)
+TrainerCardSuccessCheckText: ; 37eea (d:7eea)
text "Trainer card success check!"
line "If Heads, you're successful!"
done
diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm
index d8e4855..3149307 100644
--- a/src/text/text_offsets.asm
+++ b/src/text/text_offsets.asm
@@ -1,2993 +1,2993 @@
const_def 1
-TextOffsets:: ; 34000 (d:4000)
- dwb $0000, $00 ; 0x0000
- textpointer HandText ; 0x0001
- textpointer CheckText ; 0x0002
- textpointer AttackText ; 0x0003
- textpointer PKMNPowerText ; 0x0004
- textpointer DoneText ; 0x0005
- textpointer TypeText ; 0x0006
- textpointer RetreatText ; 0x0007
- textpointer WeaknessText ; 0x0008
- textpointer ResistanceText ; 0x0009
- textpointer PKMNPWRText ; 0x000a
- textpointer Text000b ; 0x000b
- textpointer LengthText ; 0x000c
- textpointer WeightText ; 0x000d
- textpointer PokemonText ; 0x000e
- textpointer MetresText ; 0x000f
- textpointer LbsText ; 0x0010
- textpointer PromostarRarityText ; 0x0011
- textpointer CircleRarityText ; 0x0012
- textpointer DiamondRarityText ; 0x0013
- textpointer StarRarityText ; 0x0014
- textpointer AllCardsOwnedText ; 0x0015
- textpointer TotalNumberOfCardsText ; 0x0016
- textpointer TypesOfCardsText ; 0x0017
- textpointer GrassPokemonText ; 0x0018
- textpointer FirePokemonText ; 0x0019
- textpointer WaterPokemonText ; 0x001a
- textpointer LightningPokemonText ; 0x001b
- textpointer FightingPokemonText ; 0x001c
- textpointer PsychicPokemonText ; 0x001d
- textpointer ColorlessPokemonText ; 0x001e
- textpointer TrainerCardText ; 0x001f
- textpointer EnergyCardText ; 0x0020
- textpointer Text0021 ; 0x0021
- textpointer Text0022 ; 0x0022
- textpointer NoPokemonOnTheBenchText ; 0x0023
- textpointer UnableDueToSleepText ; 0x0024
- textpointer UnableDueToParalysisText ; 0x0025
- textpointer Received10DamageDueToPoisonText ; 0x0026
- textpointer Received20DamageDueToPoisonText ; 0x0027
- textpointer IsStillAsleepText ; 0x0028
- textpointer IsCuredOfSleepText ; 0x0029
- textpointer IsCuredOfParalysisText ; 0x002a
- textpointer BetweenTurnsText ; 0x002b
- textpointer UnableToUseItText ; 0x002c
- textpointer NoEnergyCardsText ; 0x002d
- textpointer IsThisOKText ; 0x002e
- textpointer YesOrNoText ; 0x002f
- textpointer DiscardName ; 0x0030
- textpointer IncompleteText ; 0x0031
- textpointer Text0032 ; 0x0032
- textpointer UsedText ; 0x0033
- textpointer Text0034 ; 0x0034
- textpointer PokemonsAttackText ; 0x0035
- textpointer ResistanceLessDamageText ; 0x0036
- textpointer Text0037 ; 0x0037
- textpointer Text0038 ; 0x0038
- textpointer ResistanceNoDamageText ; 0x0039
- textpointer AttackDamageText ; 0x003a
- textpointer NoDamageText ; 0x003b
- textpointer NoSelectableAttackText ; 0x003c
- textpointer UnableToRetreatText ; 0x003d
- textpointer MayOnlyAttachOneEnergyCardText ; 0x003e
- textpointer UseThisPokemonPowerText ; 0x003f
- textpointer PokemonPowerSelectNotRequiredText ; 0x0040
- textpointer DiscardDescription ; 0x0041
- textpointer WillDrawNPrizesText ; 0x0042
- textpointer DrewNPrizesText ; 0x0043
- textpointer DuelistPlacedACardText ; 0x0044
- textpointer Text0045 ; 0x0045
- textpointer Text0046 ; 0x0046
- textpointer Text0047 ; 0x0047
- textpointer Text0048 ; 0x0048
- textpointer Text0049 ; 0x0049
- textpointer Text004a ; 0x004a
- textpointer Text004b ; 0x004b
- textpointer Text004c ; 0x004c
- textpointer Text004d ; 0x004d
- textpointer KnockOutText ; 0x004e
- textpointer DamageToSelfDueToConfusionText ; 0x004f
- textpointer ChooseEnergyCardToDiscardText ; 0x0050
- textpointer ChooseNextActivePokemonText ; 0x0051
- textpointer PressStartWhenReadyText ; 0x0052
- textpointer YouPlayFirstText ; 0x0053
- textpointer YouPlaySecondText ; 0x0054
- textpointer TransmissionErrorText ; 0x0055
- textpointer ChooseTheCardYouWishToExamineText ; 0x0056
- textpointer TransmitingDataText ; 0x0057
- textpointer WaitingHandExamineText ; 0x0058
- textpointer SelectingBenchPokemonHandExamineBackText ; 0x0059
- textpointer RetreatedToTheBenchText ; 0x005a
- textpointer RetreatWasUnsuccessfulText ; 0x005b
- textpointer WillUseThePokemonPowerText ; 0x005c
- textpointer FinishedTurnWithoutAttackingText ; 0x005d
- textpointer DuelistTurnText ; 0x005e
- textpointer AttachedEnergyToPokemonText ; 0x005f
- textpointer PokemonEvolvedIntoPokemonText ; 0x0060
- textpointer PlacedOnTheBenchText ; 0x0061
- textpointer PlacedInTheArenaText ; 0x0062
- textpointer ShufflesTheDeckText ; 0x0063
- textpointer ThisIsJustPracticeDoNotShuffleText ; 0x0064
- textpointer EachPlayerShuffleOpponentsDeckText ; 0x0065
- textpointer EachPlayerDraw7CardsText ; 0x0066
- textpointer Drew7CardsText ; 0x0067
- textpointer DeckHasXCardsText ; 0x0068
- textpointer ChooseBasicPkmnToPlaceInArenaText ; 0x0069
- textpointer ThereAreNoBasicPokemonInHand ; 0x006a
- textpointer NeitherPlayerHasBasicPkmnText ; 0x006b
- textpointer ReturnCardsToDeckAndDrawAgainText ; 0x006c
- textpointer ChooseUpTo5BasicPkmnToPlaceOnBenchText ; 0x006d
- textpointer PleaseChooseAnActivePokemonText ; 0x006e
- textpointer ChooseYourBenchPokemonText ; 0x006f
- textpointer YouDrewText ; 0x0070
- textpointer YouCannotSelectThisCardText ; 0x0071
- textpointer PlacingThePrizesText ; 0x0072
- textpointer PleasePlacePrizesText ; 0x0073
- textpointer IfHeadsDuelistPlaysFirstText ; 0x0074
- textpointer CoinTossToDecideWhoPlaysFirstText ; 0x0075
- textpointer DecisionText ; 0x0076
- textpointer DuelWasADrawText ; 0x0077
- textpointer WonDuelText ; 0x0078
- textpointer LostDuelText ; 0x0079
- textpointer StartSuddenDeathMatchText ; 0x007a
- textpointer PrizesLeftActivePokemonCardsInDeckText ; 0x007b
- textpointer NoneText ; 0x007c
- textpointer YesText ; 0x007d
- textpointer CardsText ; 0x007e
- textpointer TookAllThePrizesText ; 0x007f
- textpointer ThereAreNoPokemonInPlayAreaText ; 0x0080
- textpointer WasKnockedOutText ; 0x0081
- textpointer HavePokemonPowerText ; 0x0082
- textpointer UnableToUsePkmnPowerDueToToxicGasText ; 0x0083
- textpointer PlayCheck1Text ; 0x0084
- textpointer PlayCheck2Text ; 0x0085
- textpointer SelectCheckText ; 0x0086
- textpointer Text0087 ; 0x0087
- textpointer DuelistIsThinkingText ; 0x0088
- textpointer Text0089 ; 0x0089
- textpointer SelectComputerOpponentText ; 0x008a
- textpointer Text008b ; 0x008b
- textpointer Text008c ; 0x008c
- textpointer Text008d ; 0x008d
- textpointer Text008e ; 0x008e
- textpointer Text008f ; 0x008f
- textpointer Text0090 ; 0x0090
- textpointer Text0091 ; 0x0091
- textpointer Player2Text ; 0x0092
- textpointer Text0093 ; 0x0093
- textpointer Text0094 ; 0x0094
- textpointer Text0095 ; 0x0095
- textpointer Text0096 ; 0x0096
- textpointer Text0097 ; 0x0097
- textpointer Text0098 ; 0x0098
- textpointer Text0099 ; 0x0099
- textpointer Text009a ; 0x009a
- textpointer Text009b ; 0x009b
- textpointer Text009c ; 0x009c
- textpointer Text009d ; 0x009d
- textpointer Text009e ; 0x009e
- textpointer Text009f ; 0x009f
- textpointer Text00a0 ; 0x00a0
- textpointer Text00a1 ; 0x00a1
- textpointer ResetBackUpRamText ; 0x00a2
- textpointer Text00a3 ; 0x00a3
- textpointer NoCardsInHandText ; 0x00a4
- textpointer TheDiscardPileHasNoCardsText ; 0x00a5
- textpointer PlayerDiscardPileText ; 0x00a6
- textpointer DuelistHandText ; 0x00a7
- textpointer DuelistPlayAreaText ; 0x00a8
- textpointer DuelistDeckText ; 0x00a9
- textpointer PleaseSelectHandText ; 0x00aa
- textpointer PleaseSelectCardText ; 0x00ab
- textpointer NoPokemonWithDamageCountersText ; 0x00ac
- textpointer NoDamageCountersText ; 0x00ad
- textpointer NoEnergyAttachedToOpponentsActiveText ; 0x00ae
- textpointer Text00af ; 0x00af
- textpointer Text00b0 ; 0x00b0
- textpointer Text00b1 ; 0x00b1
- textpointer NoSpaceOnTheBenchText ; 0x00b2
- textpointer NoPokemonCapableOfEvolvingText ; 0x00b3
- textpointer CantEvolvePokemonInSameTurnItsPlacedText ; 0x00b4
- textpointer Text00b5 ; 0x00b5
- textpointer Text00b6 ; 0x00b6
- textpointer Text00b7 ; 0x00b7
- textpointer Text00b8 ; 0x00b8
- textpointer Text00b9 ; 0x00b9
- textpointer Text00ba ; 0x00ba
- textpointer Text00bb ; 0x00bb
- textpointer Text00bc ; 0x00bc
- textpointer Text00bd ; 0x00bd
- textpointer Text00be ; 0x00be
- textpointer EnergyCardsRequiredToRetreatText ; 0x00bf
- textpointer NotEnoughEnergyCardsText ; 0x00c0
- textpointer Text00c1 ; 0x00c1
- textpointer Text00c2 ; 0x00c2
- textpointer Text00c3 ; 0x00c3
- textpointer Text00c4 ; 0x00c4
- textpointer Text00c5 ; 0x00c5
- textpointer Text00c6 ; 0x00c6
- textpointer Text00c7 ; 0x00c7
- textpointer Text00c8 ; 0x00c8
- textpointer Text00c9 ; 0x00c9
- textpointer Text00ca ; 0x00ca
- textpointer CannotUseDueToStatusText ; 0x00cb
- textpointer Text00cc ; 0x00cc
- textpointer Text00cd ; 0x00cd
- textpointer Text00ce ; 0x00ce
- textpointer Text00cf ; 0x00cf
- textpointer Text00d0 ; 0x00d0
- textpointer Text00d1 ; 0x00d1
- textpointer Text00d2 ; 0x00d2
- textpointer Text00d3 ; 0x00d3
- textpointer UnableDueToToxicGasText ; 0x00d4
- textpointer Text00d5 ; 0x00d5
- textpointer BackUpIsBrokenText ; 0x00d6
- textpointer Text00d7 ; 0x00d7
- textpointer Text00d8 ; 0x00d8
- textpointer Text00d9 ; 0x00d9
- textpointer Text00da ; 0x00da
- textpointer Text00db ; 0x00db
- textpointer Text00dc ; 0x00dc
- textpointer Text00dd ; 0x00dd
- textpointer SandAttackCheckText ; 0x00de
- textpointer SmokescreenCheckText ; 0x00df
- textpointer ParalysisCheckText ; 0x00e0
- textpointer SleepCheckText ; 0x00e1
- textpointer PoisonCheckText ; 0x00e2
- textpointer ConfusionCheckText ; 0x00e3
- textpointer VenomPowderCheckText ; 0x00e4
- textpointer Text00e5 ; 0x00e5
- textpointer Text00e6 ; 0x00e6
- textpointer Text00e7 ; 0x00e7
- textpointer Text00e8 ; 0x00e8
- textpointer IfHeadPlus10IfTails10ToYourselfText ; 0x00e9
- textpointer Text00ea ; 0x00ea
- textpointer Text00eb ; 0x00eb
- textpointer Text00ec ; 0x00ec
- textpointer Text00ed ; 0x00ed
- textpointer Text00ee ; 0x00ee
- textpointer Text00ef ; 0x00ef
- textpointer Text00f0 ; 0x00f0
- textpointer IfHeadsNoDamageNextTurnText ; 0x00f1
- textpointer Text00f2 ; 0x00f2
- textpointer DamageCheckIfHeadsPlusDamageText ; 0x00f3
- textpointer DamageCheckIfHeadsXDamageText ; 0x00f4
- textpointer AcidCheckText ; 0x00f5
- textpointer TransparencyCheckText ; 0x00f6
- textpointer ConfusionCheckDamageText ; 0x00f7
- textpointer ConfusionCheckRetreatText ; 0x00f8
- textpointer PokemonsSleepCheckText ; 0x00f9
- textpointer PoisonedIfHeadsConfusedIfTailsText ; 0x00fa
- textpointer Text00fb ; 0x00fb
- textpointer Text00fc ; 0x00fc
- textpointer AttackUnsuccessfulText ; 0x00fd
- textpointer UnableToRetreatDueToAcidText ; 0x00fe
- textpointer UnableToUseTrainerDueToHeadacheText ; 0x00ff
- textpointer UnableToAttackDueToTailWagText ; 0x0100
- textpointer UnableToAttackDueToLeerText ; 0x0101
- textpointer UnableToAttackDueToBoneAttackText ; 0x0102
- textpointer UnableToUseAttackDueToAmnesiaText ; 0x0103
- textpointer KnockedOutDueToDestinyBondText ; 0x0104
- textpointer ReceivesDamageDueToStrikesBackText ; 0x0105
- textpointer UnableToEvolveDueToPrehistoricPowerText ; 0x0106
- textpointer NoDamageOrEffectDueToFlyText ; 0x0107
- textpointer NoDamageOrEffectDueToBarrierText ; 0x0108
- textpointer NoDamageOrEffectDueToAgilityText ; 0x0109
- textpointer UnableToUseAttackDueToNShieldText ; 0x010a
- textpointer NoDamageOrEffectDueToNShieldText ; 0x010b
- textpointer NoDamageOrEffectDueToTransparencyText ; 0x010c
- textpointer Text010d ; 0x010d
- textpointer SelectPkmnOnBenchToSwitchWithActiveText ; 0x010e
- textpointer SelectPokemonToPlaceInTheArenaText ; 0x010f
- textpointer DuelistIsSelectingPokemonToPlaceInArenaText ; 0x0110
- textpointer Text0111 ; 0x0111
- textpointer Text0112 ; 0x0112
- textpointer Text0113 ; 0x0113
- textpointer Text0114 ; 0x0114
- textpointer Text0115 ; 0x0115
- textpointer Text0116 ; 0x0116
- textpointer Text0117 ; 0x0117
- textpointer DrawCardsFromTheDeckText ; 0x0118
- textpointer CannotDrawCardBecauseNoCardsInDeckText ; 0x0119
- textpointer Text011a ; 0x011a
- textpointer Text011b ; 0x011b
- textpointer Text011c ; 0x011c
- textpointer Text011d ; 0x011d
- textpointer Text011e ; 0x011e
- textpointer Text011f ; 0x011f
- textpointer Text0120 ; 0x0120
- textpointer Text0121 ; 0x0121
- textpointer Text0122 ; 0x0122
- textpointer Text0123 ; 0x0123
- textpointer Text0124 ; 0x0124
- textpointer Text0125 ; 0x0125
- textpointer Text0126 ; 0x0126
- textpointer Text0127 ; 0x0127
- textpointer Text0128 ; 0x0128
- textpointer Text0129 ; 0x0129
- textpointer Text012a ; 0x012a
- textpointer Text012b ; 0x012b
- textpointer Text012c ; 0x012c
- textpointer Text012d ; 0x012d
- textpointer Text012e ; 0x012e
- textpointer Text012f ; 0x012f
- textpointer Text0130 ; 0x0130
- textpointer Text0131 ; 0x0131
- textpointer Text0132 ; 0x0132
- textpointer Text0133 ; 0x0133
- textpointer Text0134 ; 0x0134
- textpointer Text0135 ; 0x0135
- textpointer Text0136 ; 0x0136
- textpointer Text0137 ; 0x0137
- textpointer Text0138 ; 0x0138
- textpointer Text0139 ; 0x0139
- textpointer Text013a ; 0x013a
- textpointer Text013b ; 0x013b
- textpointer Text013c ; 0x013c
- textpointer Text013d ; 0x013d
- textpointer Text013e ; 0x013e
- textpointer Text013f ; 0x013f
- textpointer Text0140 ; 0x0140
- textpointer Text0141 ; 0x0141
- textpointer Text0142 ; 0x0142
- textpointer Text0143 ; 0x0143
- textpointer Text0144 ; 0x0144
- textpointer Text0145 ; 0x0145
- textpointer Text0146 ; 0x0146
- textpointer Text0147 ; 0x0147
- textpointer Text0148 ; 0x0148
- textpointer Text0149 ; 0x0149
- textpointer WasUnsuccessfulText ; 0x014a
- textpointer ThereWasNoEffectFromTxRam2Text ; 0x014b
- textpointer Text014c ; 0x014c
- textpointer Text014d ; 0x014d
- textpointer Text014e ; 0x014e
- textpointer Text014f ; 0x014f
- textpointer Text0150 ; 0x0150
- textpointer Text0151 ; 0x0151
- textpointer Text0152 ; 0x0152
- textpointer Text0153 ; 0x0153
- textpointer Text0154 ; 0x0154
- textpointer Text0155 ; 0x0155
- textpointer Text0156 ; 0x0156
- textpointer Text0157 ; 0x0157
- textpointer Text0158 ; 0x0158
- textpointer Text0159 ; 0x0159
- textpointer Text015a ; 0x015a
- textpointer Text015b ; 0x015b
- textpointer Text015c ; 0x015c
- textpointer Text015d ; 0x015d
- textpointer Text015e ; 0x015e
- textpointer Text015f ; 0x015f
- textpointer Text0160 ; 0x0160
- textpointer Text0161 ; 0x0161
- textpointer Text0162 ; 0x0162
- textpointer Text0163 ; 0x0163
- textpointer Text0164 ; 0x0164
- textpointer Text0165 ; 0x0165
- textpointer Text0166 ; 0x0166
- textpointer Text0167 ; 0x0167
- textpointer Text0168 ; 0x0168
- textpointer Text0169 ; 0x0169
- textpointer Text016a ; 0x016a
- textpointer Text016b ; 0x016b
- textpointer Text016c ; 0x016c
- textpointer Text016d ; 0x016d
- textpointer Text016e ; 0x016e
- textpointer Text016f ; 0x016f
- textpointer TheCardYouReceivedText ; 0x0170
- textpointer YouReceivedTheseCardsText ; 0x0171
- textpointer Text0172 ; 0x0172
- textpointer Text0173 ; 0x0173
- textpointer Text0174 ; 0x0174
- textpointer Text0175 ; 0x0175
- textpointer Text0176 ; 0x0176
- textpointer Text0177 ; 0x0177
- textpointer Text0178 ; 0x0178
- textpointer Text0179 ; 0x0179
- textpointer Text017a ; 0x017a
- textpointer Text017b ; 0x017b
- textpointer Text017c ; 0x017c
- textpointer Text017d ; 0x017d
- textpointer ThereWasNoEffectFromToxicText ; 0x017e
- textpointer ThereWasNoEffectFromPoisonText ; 0x017f
- textpointer ThereWasNoEffectFromSleepText ; 0x0180
- textpointer ThereWasNoEffectFromParalysisText ; 0x0181
- textpointer ThereWasNoEffectFromConfusionText ; 0x0182
- textpointer ThereWasNoEffectFromPoisonConfusionText ; 0x0183
- textpointer Text0184 ; 0x0184
- textpointer Text0185 ; 0x0185
- textpointer Text0186 ; 0x0186
- textpointer Text0187 ; 0x0187
- textpointer Text0188 ; 0x0188
- textpointer Text0189 ; 0x0189
- textpointer Text018a ; 0x018a
- textpointer Text018b ; 0x018b
- textpointer Text018c ; 0x018c
- textpointer Text018d ; 0x018d
- textpointer Text018e ; 0x018e
- textpointer ReceivedCardText ; 0x018f
- textpointer ReceivedPromotionalCardText ; 0x0190
- textpointer ReceivedLegendaryCardText ; 0x0191
- textpointer ReceivedPromotionalFlyingPikachuText ; 0x0192
- textpointer ReceivedPromotionalSurfingPikachuText ; 0x0193
- textpointer Text0194 ; 0x0194
- textpointer Text0195 ; 0x0195
- textpointer Text0196 ; 0x0196
- textpointer Text0197 ; 0x0197
- textpointer Text0198 ; 0x0198
- textpointer Text0199 ; 0x0199
- textpointer Text019a ; 0x019a
- textpointer Text019b ; 0x019b
- textpointer Text019c ; 0x019c
- textpointer Text019d ; 0x019d
- textpointer Text019e ; 0x019e
- textpointer Text019f ; 0x019f
- textpointer Text01a0 ; 0x01a0
- textpointer Text01a1 ; 0x01a1
- textpointer Text01a2 ; 0x01a2
- textpointer DrMasonText ; 0x01a3
- textpointer DrawSevenCardsPracticeDuelText ; 0x01a4
- textpointer ChooseGoldeenPracticeDuelText ; 0x01a5
- textpointer PutPokemonOnBenchPracticeDuelText ; 0x01a6
- textpointer ChooseStaryuPracticeDuelText ; 0x01a7
- textpointer PressBToFinishPracticeDuelText ; 0x01a8
- textpointer Turn1Instr1PracticeDuelText ; 0x01a9
- textpointer Turn1Instr2PracticeDuelText ; 0x01aa
- textpointer Turn1Instr3PracticeDuelText ; 0x01ab
- textpointer Turn2Instr1PracticeDuelText ; 0x01ac
- textpointer Turn2Instr2PracticeDuelText ; 0x01ad
- textpointer Turn2Instr3PracticeDuelText ; 0x01ae
- textpointer Turn3Instr1PracticeDuelText ; 0x01af
- textpointer Turn3Instr2PracticeDuelText ; 0x01b0
- textpointer Turn3Instr3PracticeDuelText ; 0x01b1
- textpointer Turn4Instr1PracticeDuelText ; 0x01b2
- textpointer Turn4Instr2PracticeDuelText ; 0x01b3
- textpointer Turn4Instr3PracticeDuelText ; 0x01b4
- textpointer Turn5Instr1PracticeDuelText ; 0x01b5
- textpointer Turn5Instr2PracticeDuelText ; 0x01b6
- textpointer Turn6Instr1PracticeDuelText ; 0x01b7
- textpointer Turn6Instr2PracticeDuelText ; 0x01b8
- textpointer Turn6Instr3PracticeDuelText ; 0x01b9
- textpointer Turn7Instr1PracticeDuelText ; 0x01ba
- textpointer Turn7Instr2PracticeDuelText ; 0x01bb
- textpointer Turn8Instr1PracticeDuelText ; 0x01bc
- textpointer Turn8Instr2PracticeDuelText ; 0x01bd
- textpointer SamTurn4Instr1PracticeDuelText ; 0x01be
- textpointer SamTurn4Instr2PracticeDuelText ; 0x01bf
- textpointer Turn1DrMason1PracticeDuelText ; 0x01c0
- textpointer Turn1DrMason2PracticeDuelText ; 0x01c1
- textpointer Turn1DrMason3PracticeDuelText ; 0x01c2
- textpointer Turn2DrMason1PracticeDuelText ; 0x01c3
- textpointer Turn2DrMason2PracticeDuelText ; 0x01c4
- textpointer Turn2DrMason3PracticeDuelText ; 0x01c5
- textpointer Turn3DrMason1PracticeDuelText ; 0x01c6
- textpointer Turn3DrMason2PracticeDuelText ; 0x01c7
- textpointer Turn3DrMason3PracticeDuelText ; 0x01c8
- textpointer Turn4DrMason1PracticeDuelText ; 0x01c9
- textpointer Turn4DrMason2PracticeDuelText ; 0x01ca
- textpointer Turn4DrMason3PracticeDuelText ; 0x01cb
- textpointer Turn5DrMason1PracticeDuelText ; 0x01cc
- textpointer Turn5DrMason2PracticeDuelText ; 0x01cd
- textpointer Turn6DrMason1PracticeDuelText ; 0x01ce
- textpointer Turn6DrMason2PracticeDuelText ; 0x01cf
- textpointer Turn6DrMason3PracticeDuelText ; 0x01d0
- textpointer Turn7DrMason1PracticeDuelText ; 0x01d1
- textpointer Turn7DrMason2PracticeDuelText ; 0x01d2
- textpointer Turn8DrMason1PracticeDuelText ; 0x01d3
- textpointer Turn8DrMason2PracticeDuelText ; 0x01d4
- textpointer SamTurn4DrMason1PracticeDuelText ; 0x01d5
- textpointer SamTurn4DrMason2PracticeDuelText ; 0x01d6
- textpointer SelectStaryuPracticeDuelText ; 0x01d7
- textpointer LetsPlayTheGamePracticeDuelText ; 0x01d8
- textpointer NeedPracticeAgainPracticeDuelText ; 0x01d9
- textpointer FollowMyGuidancePracticeDuelText ; 0x01da
- textpointer PlayersTurnPracticeDuelText ; 0x01db
- textpointer ReplaceDueToKnockoutPracticeDuelText ; 0x01dc
- textpointer Text01dd ; 0x01dd
- textpointer PracticePlayerDeckName ; 0x01de
- textpointer SamsPracticeDeckName ; 0x01df
- textpointer CharmanderAndFriendsDeckName ; 0x01e0
- textpointer CharmanderExtraDeckName ; 0x01e1
- textpointer SquirtleAndFriendsDeckName ; 0x01e2
- textpointer SquirtleExtraDeckName ; 0x01e3
- textpointer BulbasaurAndFriendsDeckName ; 0x01e4
- textpointer BulbasaurExtraDeckName ; 0x01e5
- textpointer FirstStrikeDeckName ; 0x01e6
- textpointer RockCrusherDeckName ; 0x01e7
- textpointer GoGoRainDanceDeckName ; 0x01e8
- textpointer ZappingSelfdestructDeckName ; 0x01e9
- textpointer FlowerPowerDeckName ; 0x01ea
- textpointer StrangePsyshockDeckName ; 0x01eb
- textpointer WondersofScienceDeckName ; 0x01ec
- textpointer FireChargeDeckName ; 0x01ed
- textpointer LegendaryMoltresDeckName ; 0x01ee
- textpointer LegendaryZapdosDeckName ; 0x01ef
- textpointer LegendaryArticunoDeckName ; 0x01f0
- textpointer LegendaryDragoniteDeckName ; 0x01f1
- textpointer ImRonaldDeckName ; 0x01f2
- textpointer PowerfulRonaldDeckName ; 0x01f3
- textpointer InvincibleRonaldDeckName ; 0x01f4
- textpointer LegendaryRonaldDeckName ; 0x01f5
- textpointer WaterfrontPokemonDeckName ; 0x01f6
- textpointer LonelyFriendsDeckName ; 0x01f7
- textpointer SoundoftheWavesDeckName ; 0x01f8
- textpointer AngerDeckName ; 0x01f9
- textpointer FlamethrowerDeckName ; 0x01fa
- textpointer ReshuffleDeckName ; 0x01fb
- textpointer ExcavationDeckName ; 0x01fc
- textpointer BlisteringPokemonDeckName ; 0x01fd
- textpointer HardPokemonDeckName ; 0x01fe
- textpointer EtceteraDeckName ; 0x01ff
- textpointer FlowerGardenDeckName ; 0x0200
- textpointer KaleidoscopeDeckName ; 0x0201
- textpointer MusclesforBrainsDeckName ; 0x0202
- textpointer HeatedBattleDeckName ; 0x0203
- textpointer LovetoBattleDeckName ; 0x0204
- textpointer PikachuDeckName ; 0x0205
- textpointer BoomBoomSelfdestructDeckName ; 0x0206
- textpointer PowerGeneratorDeckName ; 0x0207
- textpointer GhostDeckName ; 0x0208
- textpointer NapTimeDeckName ; 0x0209
- textpointer StrangePowerDeckName ; 0x020a
- textpointer FlyinPokemonDeckName ; 0x020b
- textpointer LovelyNidoranDeckName ; 0x020c
- textpointer PoisonDeckName ; 0x020d
- textpointer ImakuniDeckName ; 0x020e
- textpointer LightningAndFireDeckName ; 0x020f
- textpointer WaterAndFightingDeckName ; 0x0210
- textpointer GrassAndPsychicDeckName ; 0x0211
- textpointer RetreatCostText ; 0x0212
- textpointer Text0213 ; 0x0213
- textpointer Text0214 ; 0x0214
- textpointer FeetText ; 0x0215
- textpointer InchesText ; 0x0216
- textpointer YourDiscardPileText ; 0x0217
- textpointer OpponentsDiscardPileText ; 0x0218
- textpointer Text0219 ; 0x0219
- textpointer Text021a ; 0x021a
- textpointer Text021b ; 0x021b
- textpointer Text021c ; 0x021c
- textpointer EndText ; 0x021d
- textpointer WhatIsYourNameText ; 0x021e
- textpointer Text021f ; 0x021f
- textpointer Text0220 ; 0x0220
- textpointer Text0221 ; 0x0221
- textpointer NamingScreenKeyboardText ; 0x0222
- textpointer NewDeckText ; 0x0223
- textpointer PleaseSelectDeckText ; 0x0224
- textpointer Text0225 ; 0x0225
- textpointer Text0226 ; 0x0226
- textpointer Text0227 ; 0x0227
- textpointer Text0228 ; 0x0228
- textpointer Text0229 ; 0x0229
- textpointer ChosenAsDuelingDeckText ; 0x022a
- textpointer Text022b ; 0x022b
- textpointer Text022c ; 0x022c
- textpointer Text022d ; 0x022d
- textpointer Text022e ; 0x022e
- textpointer ThereIsNoDeckHereText ; 0x022f
- textpointer Text0230 ; 0x0230
- textpointer Text0231 ; 0x0231
- textpointer Text0232 ; 0x0232
- textpointer Text0233 ; 0x0233
- textpointer Text0234 ; 0x0234
- textpointer Text0235 ; 0x0235
- textpointer Text0236 ; 0x0236
- textpointer Text0237 ; 0x0237
- textpointer Text0238 ; 0x0238
- textpointer Text0239 ; 0x0239
- textpointer Text023a ; 0x023a
- textpointer Text023b ; 0x023b
- textpointer Text023c ; 0x023c
- textpointer Text023d ; 0x023d
- textpointer Text023e ; 0x023e
- textpointer YourPokemonText ; 0x023f
- textpointer YourDiscardPileText2 ; 0x0240
- textpointer YourHandText ; 0x0241
- textpointer Text0242 ; 0x0242
- textpointer OpponentsPokemonText ; 0x0243
- textpointer OpponentsDiscardPileText2 ; 0x0244
- textpointer OpponentsHandText ; 0x0245
- textpointer Text0246 ; 0x0246
- textpointer DuelistsPlayAreaText ; 0x0247
- textpointer YourPlayAreaText ; 0x0248
- textpointer OppPlayAreaText ; 0x0249
- textpointer InPlayAreaText ; 0x024a
- textpointer GlossaryText ; 0x024b
- textpointer WhichCardWouldYouLikeToSeeText ; 0x024c
- textpointer Text024d ; 0x024d
- textpointer HandText_2 ; 0x024e
- textpointer DuelistHandText_2 ; 0x024f
- textpointer DuelistDiscardPileText ; 0x0250
- textpointer EmptyLineText ; 0x0251
- textpointer Text0252 ; 0x0252
- textpointer Text0253 ; 0x0253
- textpointer Text0254 ; 0x0254
- textpointer Text0255 ; 0x0255
- textpointer Text0256 ; 0x0256
- textpointer Text0257 ; 0x0257
- textpointer Text0258 ; 0x0258
- textpointer Text0259 ; 0x0259
- textpointer Text025a ; 0x025a
- textpointer Text025b ; 0x025b
- textpointer Text025c ; 0x025c
- textpointer Text025d ; 0x025d
- textpointer Text025e ; 0x025e
- textpointer Text025f ; 0x025f
- textpointer Text0260 ; 0x0260
- textpointer Text0261 ; 0x0261
- textpointer Text0262 ; 0x0262
- textpointer Text0263 ; 0x0263
- textpointer Text0264 ; 0x0264
- textpointer Text0265 ; 0x0265
- textpointer Text0266 ; 0x0266
- textpointer Text0267 ; 0x0267
- textpointer Text0268 ; 0x0268
- textpointer Text0269 ; 0x0269
- textpointer Text026a ; 0x026a
- textpointer Text026b ; 0x026b
- textpointer Text026c ; 0x026c
- textpointer Text026d ; 0x026d
- textpointer Text026e ; 0x026e
- textpointer Text026f ; 0x026f
- textpointer Text0270 ; 0x0270
- textpointer Text0271 ; 0x0271
- textpointer Text0272 ; 0x0272
- textpointer Text0273 ; 0x0273
- textpointer Text0274 ; 0x0274
- textpointer Text0275 ; 0x0275
- textpointer Text0276 ; 0x0276
- textpointer Text0277 ; 0x0277
- textpointer Text0278 ; 0x0278
- textpointer Text0279 ; 0x0279
- textpointer Text027a ; 0x027a
- textpointer Text027b ; 0x027b
- textpointer Text027c ; 0x027c
- textpointer Text027d ; 0x027d
- textpointer Text027e ; 0x027e
- textpointer Text027f ; 0x027f
- textpointer Text0280 ; 0x0280
- textpointer Text0281 ; 0x0281
- textpointer Text0282 ; 0x0282
- textpointer Text0283 ; 0x0283
- textpointer Text0284 ; 0x0284
- textpointer Text0285 ; 0x0285
- textpointer Text0286 ; 0x0286
- textpointer Text0287 ; 0x0287
- textpointer Text0288 ; 0x0288
- textpointer Text0289 ; 0x0289
- textpointer Text028a ; 0x028a
- textpointer Text028b ; 0x028b
- textpointer Text028c ; 0x028c
- textpointer Text028d ; 0x028d
- textpointer Text028e ; 0x028e
- textpointer Text028f ; 0x028f
- textpointer Text0290 ; 0x0290
- textpointer Text0291 ; 0x0291
- textpointer Text0292 ; 0x0292
- textpointer Text0293 ; 0x0293
- textpointer Text0294 ; 0x0294
- textpointer Text0295 ; 0x0295
- textpointer Text0296 ; 0x0296
- textpointer Text0297 ; 0x0297
- textpointer Text0298 ; 0x0298
- textpointer Text0299 ; 0x0299
- textpointer Text029a ; 0x029a
- textpointer Text029b ; 0x029b
- textpointer Text029c ; 0x029c
- textpointer Text029d ; 0x029d
- textpointer Text029e ; 0x029e
- textpointer Text029f ; 0x029f
- textpointer Text02a0 ; 0x02a0
- textpointer Text02a1 ; 0x02a1
- textpointer Text02a2 ; 0x02a2
- textpointer Text02a3 ; 0x02a3
- textpointer Text02a4 ; 0x02a4
- textpointer Text02a5 ; 0x02a5
- textpointer Text02a6 ; 0x02a6
- textpointer Text02a7 ; 0x02a7
- textpointer Text02a8 ; 0x02a8
- textpointer Text02a9 ; 0x02a9
- textpointer Text02aa ; 0x02aa
- textpointer Text02ab ; 0x02ab
- textpointer Text02ac ; 0x02ac
- textpointer Text02ad ; 0x02ad
- textpointer Text02ae ; 0x02ae
- textpointer Text02af ; 0x02af
- textpointer Text02b0 ; 0x02b0
- textpointer Text02b1 ; 0x02b1
- textpointer Text02b2 ; 0x02b2
- textpointer Text02b3 ; 0x02b3
- textpointer Text02b4 ; 0x02b4
- textpointer Text02b5 ; 0x02b5
- textpointer Text02b6 ; 0x02b6
- textpointer Text02b7 ; 0x02b7
- textpointer Text02b8 ; 0x02b8
- textpointer Text02b9 ; 0x02b9
- textpointer Text02ba ; 0x02ba
- textpointer Text02bb ; 0x02bb
- textpointer Text02bc ; 0x02bc
- textpointer Text02bd ; 0x02bd
- textpointer Text02be ; 0x02be
- textpointer Text02bf ; 0x02bf
- textpointer Text02c0 ; 0x02c0
- textpointer Text02c1 ; 0x02c1
- textpointer Text02c2 ; 0x02c2
- textpointer Text02c3 ; 0x02c3
- textpointer Text02c4 ; 0x02c4
- textpointer Text02c5 ; 0x02c5
- textpointer Text02c6 ; 0x02c6
- textpointer Text02c7 ; 0x02c7
- textpointer Text02c8 ; 0x02c8
- textpointer Text02c9 ; 0x02c9
- textpointer Text02ca ; 0x02ca
- textpointer Text02cb ; 0x02cb
- textpointer Text02cc ; 0x02cc
- textpointer Text02cd ; 0x02cd
- textpointer Text02ce ; 0x02ce
- textpointer Text02cf ; 0x02cf
- textpointer Text02d0 ; 0x02d0
- textpointer Text02d1 ; 0x02d1
- textpointer Text02d2 ; 0x02d2
- textpointer Text02d3 ; 0x02d3
- textpointer Text02d4 ; 0x02d4
- textpointer Text02d5 ; 0x02d5
- textpointer Text02d6 ; 0x02d6
- textpointer Text02d7 ; 0x02d7
- textpointer Text02d8 ; 0x02d8
- textpointer Text02d9 ; 0x02d9
- textpointer Text02da ; 0x02da
- textpointer Text02db ; 0x02db
- textpointer Text02dc ; 0x02dc
- textpointer Text02dd ; 0x02dd
- textpointer Text02de ; 0x02de
- textpointer Text02df ; 0x02df
- textpointer Text02e0 ; 0x02e0
- textpointer Text02e1 ; 0x02e1
- textpointer Text02e2 ; 0x02e2
- textpointer Text02e3 ; 0x02e3
- textpointer Text02e4 ; 0x02e4
- textpointer Text02e5 ; 0x02e5
- textpointer Text02e6 ; 0x02e6
- textpointer Text02e7 ; 0x02e7
- textpointer Text02e8 ; 0x02e8
- textpointer Text02e9 ; 0x02e9
- textpointer Text02ea ; 0x02ea
- textpointer Text02eb ; 0x02eb
- textpointer Text02ec ; 0x02ec
- textpointer Text02ed ; 0x02ed
- textpointer Text02ee ; 0x02ee
- textpointer Text02ef ; 0x02ef
- textpointer Text02f0 ; 0x02f0
- textpointer Text02f1 ; 0x02f1
- textpointer Text02f2 ; 0x02f2
- textpointer Text02f3 ; 0x02f3
- textpointer Text02f4 ; 0x02f4
- textpointer Text02f5 ; 0x02f5
- textpointer PokemonCardGlossaryText ; 0x02f6
- textpointer GlossaryMenuPage1Text ; 0x02f7
- textpointer GlossaryMenuPage2Text ; 0x02f8
- textpointer ChooseWordAndPressAButtonText ; 0x02f9
- textpointer Text02fa ; 0x02fa
- textpointer Text02fb ; 0x02fb
- textpointer Text02fc ; 0x02fc
- textpointer Text02fd ; 0x02fd
- textpointer Text02fe ; 0x02fe
- textpointer Text02ff ; 0x02ff
- textpointer Text0300 ; 0x0300
- textpointer Text0301 ; 0x0301
- textpointer Text0302 ; 0x0302
- textpointer Text0303 ; 0x0303
- textpointer Text0304 ; 0x0304
- textpointer Text0305 ; 0x0305
- textpointer Text0306 ; 0x0306
- textpointer Text0307 ; 0x0307
- textpointer Text0308 ; 0x0308
- textpointer Text0309 ; 0x0309
- textpointer Text030a ; 0x030a
- textpointer Text030b ; 0x030b
- textpointer Text030c ; 0x030c
- textpointer Text030d ; 0x030d
- textpointer Text030e ; 0x030e
- textpointer Text030f ; 0x030f
- textpointer Text0310 ; 0x0310
- textpointer Text0311 ; 0x0311
- textpointer Text0312 ; 0x0312
- textpointer Text0313 ; 0x0313
- textpointer Text0314 ; 0x0314
- textpointer Text0315 ; 0x0315
- textpointer Text0316 ; 0x0316
- textpointer Text0317 ; 0x0317
- textpointer Text0318 ; 0x0318
- textpointer Text0319 ; 0x0319
- textpointer Text031a ; 0x031a
- textpointer Text031b ; 0x031b
- textpointer Text031c ; 0x031c
- textpointer Text031d ; 0x031d
- textpointer Text031e ; 0x031e
- textpointer Text031f ; 0x031f
- textpointer Text0320 ; 0x0320
- textpointer Text0321 ; 0x0321
- textpointer Text0322 ; 0x0322
- textpointer Text0323 ; 0x0323
- textpointer Text0324 ; 0x0324
- textpointer Text0325 ; 0x0325
- textpointer Text0326 ; 0x0326
- textpointer Text0327 ; 0x0327
- textpointer Text0328 ; 0x0328
- textpointer Text0329 ; 0x0329
- textpointer Text032a ; 0x032a
- textpointer Text032b ; 0x032b
- textpointer Text032c ; 0x032c
- textpointer Text032d ; 0x032d
- textpointer Text032e ; 0x032e
- textpointer Text032f ; 0x032f
- textpointer Text0330 ; 0x0330
- textpointer Text0331 ; 0x0331
- textpointer Text0332 ; 0x0332
- textpointer Text0333 ; 0x0333
- textpointer Text0334 ; 0x0334
- textpointer Text0335 ; 0x0335
- textpointer Text0336 ; 0x0336
- textpointer Text0337 ; 0x0337
- textpointer Text0338 ; 0x0338
- textpointer Text0339 ; 0x0339
- textpointer Text033a ; 0x033a
- textpointer Text033b ; 0x033b
- textpointer Text033c ; 0x033c
- textpointer Text033d ; 0x033d
- textpointer Text033e ; 0x033e
- textpointer PlayerStatusNameText ; 0x033f
- textpointer PlayerStatusAlbumText ; 0x0340
- textpointer PlayerStatusPlayTimeText ; 0x0341
- textpointer PlayerDiaryTitleText ; 0x0342
- textpointer PlayerDiaryMedalsWonText ; 0x0343
- textpointer PlayerDiarySaveQuestionText ; 0x0344
- textpointer PlayerDiarySaveConfirmText ; 0x0345
- textpointer PlayerDiarySaveCancelText ; 0x0346
- textpointer PlayerStatusMedalsTitleText ; 0x0347
- textpointer ConfigMenuTitleText ; 0x0348
- textpointer ConfigMenuMessageSpeedText ; 0x0349
- textpointer ConfigMenuDuelAnimationText ; 0x034a
- textpointer ConfigMenuExitText ; 0x034b
- textpointer Text034c ; 0x034c
- textpointer Text034d ; 0x034d
- textpointer Text034e ; 0x034e
- textpointer Text034f ; 0x034f
- textpointer Text0350 ; 0x0350
- textpointer Text0351 ; 0x0351
- textpointer TurnedPCOnText ; 0x0352
- textpointer TurnedPCOffText ; 0x0353
- textpointer Text0354 ; 0x0354
- textpointer Text0355 ; 0x0355
- textpointer Text0356 ; 0x0356
- textpointer Text0357 ; 0x0357
- textpointer Text0358 ; 0x0358
- textpointer Text0359 ; 0x0359
- textpointer Text035a ; 0x035a
- textpointer Text035b ; 0x035b
- textpointer Text035c ; 0x035c
- textpointer Text035d ; 0x035d
- textpointer Text035e ; 0x035e
- textpointer Text035f ; 0x035f
- textpointer Text0360 ; 0x0360
- textpointer Text0361 ; 0x0361
- textpointer Text0362 ; 0x0362
- textpointer Text0363 ; 0x0363
- textpointer Text0364 ; 0x0364
- textpointer Text0365 ; 0x0365
- textpointer Text0366 ; 0x0366
- textpointer Text0367 ; 0x0367
- textpointer Text0368 ; 0x0368
- textpointer Text0369 ; 0x0369
- textpointer Text036a ; 0x036a
- textpointer Text036b ; 0x036b
- textpointer Text036c ; 0x036c
- textpointer Text036d ; 0x036d
- textpointer Text036e ; 0x036e
- textpointer Text036f ; 0x036f
- textpointer Text0370 ; 0x0370
- textpointer Text0371 ; 0x0371
- textpointer Text0372 ; 0x0372
- textpointer Text0373 ; 0x0373
- textpointer Text0374 ; 0x0374
- textpointer Text0375 ; 0x0375
- textpointer Text0376 ; 0x0376
- textpointer Text0377 ; 0x0377
- textpointer Text0378 ; 0x0378
- textpointer Text0379 ; 0x0379
- textpointer Text037a ; 0x037a
- textpointer Text037b ; 0x037b
- textpointer Text037c ; 0x037c
- textpointer Text037d ; 0x037d
- textpointer Text037e ; 0x037e
- textpointer Text037f ; 0x037f
- textpointer Text0380 ; 0x0380
- textpointer Text0381 ; 0x0381
- textpointer Text0382 ; 0x0382
- textpointer Text0383 ; 0x0383
- textpointer Text0384 ; 0x0384
- textpointer Text0385 ; 0x0385
- textpointer Text0386 ; 0x0386
- textpointer ReceivedBoosterPackText ; 0x0387
- textpointer AndAnotherBoosterPackText ; 0x0388
- textpointer CheckedCardsInBoosterPackText ; 0x0389
- textpointer Text038a ; 0x038a
- textpointer WonTheMedalText ; 0x038b
- textpointer Text038c ; 0x038c
- textpointer Text038d ; 0x038d
- textpointer Text038e ; 0x038e
- textpointer Text038f ; 0x038f
- textpointer Text0390 ; 0x0390
- textpointer Text0391 ; 0x0391
- textpointer Text0392 ; 0x0392
- textpointer Text0393 ; 0x0393
- textpointer Text0394 ; 0x0394
- textpointer Text0395 ; 0x0395
- textpointer Text0396 ; 0x0396
- textpointer Text0397 ; 0x0397
- textpointer Text0398 ; 0x0398
- textpointer Text0399 ; 0x0399
- textpointer Text039a ; 0x039a
- textpointer Text039b ; 0x039b
- textpointer Text039c ; 0x039c
- textpointer Text039d ; 0x039d
- textpointer Text039e ; 0x039e
- textpointer Text039f ; 0x039f
- textpointer Text03a0 ; 0x03a0
- textpointer Text03a1 ; 0x03a1
- textpointer Text03a2 ; 0x03a2
- textpointer Text03a3 ; 0x03a3
- textpointer Text03a4 ; 0x03a4
- textpointer Text03a5 ; 0x03a5
- textpointer Text03a6 ; 0x03a6
- textpointer Text03a7 ; 0x03a7
- textpointer Text03a8 ; 0x03a8
- textpointer Text03a9 ; 0x03a9
- textpointer Text03aa ; 0x03aa
- textpointer Text03ab ; 0x03ab
- textpointer Text03ac ; 0x03ac
- textpointer Text03ad ; 0x03ad
- textpointer Text03ae ; 0x03ae
- textpointer Text03af ; 0x03af
- textpointer Text03b0 ; 0x03b0
- textpointer Text03b1 ; 0x03b1
- textpointer Text03b2 ; 0x03b2
- textpointer Text03b3 ; 0x03b3
- textpointer Text03b4 ; 0x03b4
- textpointer Text03b5 ; 0x03b5
- textpointer Text03b6 ; 0x03b6
- textpointer Text03b7 ; 0x03b7
- textpointer Text03b8 ; 0x03b8
- textpointer Text03b9 ; 0x03b9
- textpointer Text03ba ; 0x03ba
- textpointer Text03bb ; 0x03bb
- textpointer Text03bc ; 0x03bc
- textpointer Text03bd ; 0x03bd
- textpointer Text03be ; 0x03be
- textpointer Text03bf ; 0x03bf
- textpointer Text03c0 ; 0x03c0
- textpointer Text03c1 ; 0x03c1
- textpointer Text03c2 ; 0x03c2
- textpointer Text03c3 ; 0x03c3
- textpointer Text03c4 ; 0x03c4
- textpointer Text03c5 ; 0x03c5
- textpointer Text03c6 ; 0x03c6
- textpointer Text03c7 ; 0x03c7
- textpointer Text03c8 ; 0x03c8
- textpointer Text03c9 ; 0x03c9
- textpointer Text03ca ; 0x03ca
- textpointer Text03cb ; 0x03cb
- textpointer Text03cc ; 0x03cc
- textpointer Text03cd ; 0x03cd
- textpointer Text03ce ; 0x03ce
- textpointer Text03cf ; 0x03cf
- textpointer Text03d0 ; 0x03d0
- textpointer Text03d1 ; 0x03d1
- textpointer Text03d2 ; 0x03d2
- textpointer Text03d3 ; 0x03d3
- textpointer Text03d4 ; 0x03d4
- textpointer Text03d5 ; 0x03d5
- textpointer Text03d6 ; 0x03d6
- textpointer Text03d7 ; 0x03d7
- textpointer Text03d8 ; 0x03d8
- textpointer Text03d9 ; 0x03d9
- textpointer Text03da ; 0x03da
- textpointer Text03db ; 0x03db
- textpointer Text03dc ; 0x03dc
- textpointer Text03dd ; 0x03dd
- textpointer Text03de ; 0x03de
- textpointer Text03df ; 0x03df
- textpointer Text03e0 ; 0x03e0
- textpointer Text03e1 ; 0x03e1
- textpointer Text03e2 ; 0x03e2
- textpointer Text03e3 ; 0x03e3
- textpointer Text03e4 ; 0x03e4
- textpointer Text03e5 ; 0x03e5
- textpointer Text03e6 ; 0x03e6
- textpointer Text03e7 ; 0x03e7
- textpointer Text03e8 ; 0x03e8
- textpointer Text03e9 ; 0x03e9
- textpointer Text03ea ; 0x03ea
- textpointer Text03eb ; 0x03eb
- textpointer Text03ec ; 0x03ec
- textpointer Text03ed ; 0x03ed
- textpointer Text03ee ; 0x03ee
- textpointer Text03ef ; 0x03ef
- textpointer Text03f0 ; 0x03f0
- textpointer Text03f1 ; 0x03f1
- textpointer Text03f2 ; 0x03f2
- textpointer Text03f3 ; 0x03f3
- textpointer Text03f4 ; 0x03f4
- textpointer Text03f5 ; 0x03f5
- textpointer Text03f6 ; 0x03f6
- textpointer Text03f7 ; 0x03f7
- textpointer Text03f8 ; 0x03f8
- textpointer Text03f9 ; 0x03f9
- textpointer Text03fa ; 0x03fa
- textpointer Text03fb ; 0x03fb
- textpointer Text03fc ; 0x03fc
- textpointer Text03fd ; 0x03fd
- textpointer Text03fe ; 0x03fe
- textpointer Text03ff ; 0x03ff
- textpointer Text0400 ; 0x0400
- textpointer Text0401 ; 0x0401
- textpointer Text0402 ; 0x0402
- textpointer Text0403 ; 0x0403
- textpointer Text0404 ; 0x0404
- textpointer Text0405 ; 0x0405
- textpointer Text0406 ; 0x0406
- textpointer Text0407 ; 0x0407
- textpointer Text0408 ; 0x0408
- textpointer Text0409 ; 0x0409
- textpointer Text040a ; 0x040a
- textpointer Text040b ; 0x040b
- textpointer Text040c ; 0x040c
- textpointer Text040d ; 0x040d
- textpointer Text040e ; 0x040e
- textpointer Text040f ; 0x040f
- textpointer Text0410 ; 0x0410
- textpointer Text0411 ; 0x0411
- textpointer Text0412 ; 0x0412
- textpointer Text0413 ; 0x0413
- textpointer Text0414 ; 0x0414
- textpointer Text0415 ; 0x0415
- textpointer Text0416 ; 0x0416
- textpointer Text0417 ; 0x0417
- textpointer Text0418 ; 0x0418
- textpointer Text0419 ; 0x0419
- textpointer Text041a ; 0x041a
- textpointer Text041b ; 0x041b
- textpointer Text041c ; 0x041c
- textpointer Text041d ; 0x041d
- textpointer Text041e ; 0x041e
- textpointer Text041f ; 0x041f
- textpointer Text0420 ; 0x0420
- textpointer Text0421 ; 0x0421
- textpointer Text0422 ; 0x0422
- textpointer Text0423 ; 0x0423
- textpointer Text0424 ; 0x0424
- textpointer Text0425 ; 0x0425
- textpointer Text0426 ; 0x0426
- textpointer Text0427 ; 0x0427
- textpointer Text0428 ; 0x0428
- textpointer Text0429 ; 0x0429
- textpointer Text042a ; 0x042a
- textpointer Text042b ; 0x042b
- textpointer Text042c ; 0x042c
- textpointer Text042d ; 0x042d
- textpointer Text042e ; 0x042e
- textpointer Text042f ; 0x042f
- textpointer Text0430 ; 0x0430
- textpointer Text0431 ; 0x0431
- textpointer Text0432 ; 0x0432
- textpointer Text0433 ; 0x0433
- textpointer Text0434 ; 0x0434
- textpointer Text0435 ; 0x0435
- textpointer Text0436 ; 0x0436
- textpointer Text0437 ; 0x0437
- textpointer Text0438 ; 0x0438
- textpointer Text0439 ; 0x0439
- textpointer Text043a ; 0x043a
- textpointer Text043b ; 0x043b
- textpointer Text043c ; 0x043c
- textpointer Text043d ; 0x043d
- textpointer Text043e ; 0x043e
- textpointer Text043f ; 0x043f
- textpointer Text0440 ; 0x0440
- textpointer Text0441 ; 0x0441
- textpointer Text0442 ; 0x0442
- textpointer Text0443 ; 0x0443
- textpointer Text0444 ; 0x0444
- textpointer Text0445 ; 0x0445
- textpointer Text0446 ; 0x0446
- textpointer Text0447 ; 0x0447
- textpointer Text0448 ; 0x0448
- textpointer Text0449 ; 0x0449
- textpointer Text044a ; 0x044a
- textpointer Text044b ; 0x044b
- textpointer Text044c ; 0x044c
- textpointer Text044d ; 0x044d
- textpointer Text044e ; 0x044e
- textpointer Text044f ; 0x044f
- textpointer Text0450 ; 0x0450
- textpointer Text0451 ; 0x0451
- textpointer Text0452 ; 0x0452
- textpointer Text0453 ; 0x0453
- textpointer Text0454 ; 0x0454
- textpointer Text0455 ; 0x0455
- textpointer Text0456 ; 0x0456
- textpointer Text0457 ; 0x0457
- textpointer Text0458 ; 0x0458
- textpointer Text0459 ; 0x0459
- textpointer Text045a ; 0x045a
- textpointer Text045b ; 0x045b
- textpointer Text045c ; 0x045c
- textpointer Text045d ; 0x045d
- textpointer Text045e ; 0x045e
- textpointer Text045f ; 0x045f
- textpointer Text0460 ; 0x0460
- textpointer Text0461 ; 0x0461
- textpointer Text0462 ; 0x0462
- textpointer Text0463 ; 0x0463
- textpointer Text0464 ; 0x0464
- textpointer Text0465 ; 0x0465
- textpointer Text0466 ; 0x0466
- textpointer Text0467 ; 0x0467
- textpointer Text0468 ; 0x0468
- textpointer Text0469 ; 0x0469
- textpointer Text046a ; 0x046a
- textpointer Text046b ; 0x046b
- textpointer Text046c ; 0x046c
- textpointer Text046d ; 0x046d
- textpointer Text046e ; 0x046e
- textpointer Text046f ; 0x046f
- textpointer Text0470 ; 0x0470
- textpointer Text0471 ; 0x0471
- textpointer Text0472 ; 0x0472
- textpointer Text0473 ; 0x0473
- textpointer Text0474 ; 0x0474
- textpointer Text0475 ; 0x0475
- textpointer Text0476 ; 0x0476
- textpointer Text0477 ; 0x0477
- textpointer Text0478 ; 0x0478
- textpointer Text0479 ; 0x0479
- textpointer Text047a ; 0x047a
- textpointer Text047b ; 0x047b
- textpointer Text047c ; 0x047c
- textpointer Text047d ; 0x047d
- textpointer Text047e ; 0x047e
- textpointer Text047f ; 0x047f
- textpointer Text0480 ; 0x0480
- textpointer Text0481 ; 0x0481
- textpointer Text0482 ; 0x0482
- textpointer Text0483 ; 0x0483
- textpointer Text0484 ; 0x0484
- textpointer Text0485 ; 0x0485
- textpointer Text0486 ; 0x0486
- textpointer Text0487 ; 0x0487
- textpointer Text0488 ; 0x0488
- textpointer Text0489 ; 0x0489
- textpointer Text048a ; 0x048a
- textpointer Text048b ; 0x048b
- textpointer Text048c ; 0x048c
- textpointer Text048d ; 0x048d
- textpointer Text048e ; 0x048e
- textpointer Text048f ; 0x048f
- textpointer Text0490 ; 0x0490
- textpointer Text0491 ; 0x0491
- textpointer Text0492 ; 0x0492
- textpointer Text0493 ; 0x0493
- textpointer Text0494 ; 0x0494
- textpointer Text0495 ; 0x0495
- textpointer Text0496 ; 0x0496
- textpointer Text0497 ; 0x0497
- textpointer Text0498 ; 0x0498
- textpointer Text0499 ; 0x0499
- textpointer Text049a ; 0x049a
- textpointer Text049b ; 0x049b
- textpointer Text049c ; 0x049c
- textpointer Text049d ; 0x049d
- textpointer Text049e ; 0x049e
- textpointer Text049f ; 0x049f
- textpointer Text04a0 ; 0x04a0
- textpointer Text04a1 ; 0x04a1
- textpointer Text04a2 ; 0x04a2
- textpointer Text04a3 ; 0x04a3
- textpointer Text04a4 ; 0x04a4
- textpointer Text04a5 ; 0x04a5
- textpointer Text04a6 ; 0x04a6
- textpointer Text04a7 ; 0x04a7
- textpointer Text04a8 ; 0x04a8
- textpointer Text04a9 ; 0x04a9
- textpointer Text04aa ; 0x04aa
- textpointer Text04ab ; 0x04ab
- textpointer Text04ac ; 0x04ac
- textpointer Text04ad ; 0x04ad
- textpointer Text04ae ; 0x04ae
- textpointer Text04af ; 0x04af
- textpointer Text04b0 ; 0x04b0
- textpointer Text04b1 ; 0x04b1
- textpointer Text04b2 ; 0x04b2
- textpointer Text04b3 ; 0x04b3
- textpointer Text04b4 ; 0x04b4
- textpointer Text04b5 ; 0x04b5
- textpointer Text04b6 ; 0x04b6
- textpointer Text04b7 ; 0x04b7
- textpointer Text04b8 ; 0x04b8
- textpointer Text04b9 ; 0x04b9
- textpointer Text04ba ; 0x04ba
- textpointer Text04bb ; 0x04bb
- textpointer Text04bc ; 0x04bc
- textpointer Text04bd ; 0x04bd
- textpointer Text04be ; 0x04be
- textpointer Text04bf ; 0x04bf
- textpointer Text04c0 ; 0x04c0
- textpointer Text04c1 ; 0x04c1
- textpointer Text04c2 ; 0x04c2
- textpointer Text04c3 ; 0x04c3
- textpointer Text04c4 ; 0x04c4
- textpointer Text04c5 ; 0x04c5
- textpointer Text04c6 ; 0x04c6
- textpointer Text04c7 ; 0x04c7
- textpointer Text04c8 ; 0x04c8
- textpointer Text04c9 ; 0x04c9
- textpointer Text04ca ; 0x04ca
- textpointer Text04cb ; 0x04cb
- textpointer Text04cc ; 0x04cc
- textpointer Text04cd ; 0x04cd
- textpointer Text04ce ; 0x04ce
- textpointer Text04cf ; 0x04cf
- textpointer Text04d0 ; 0x04d0
- textpointer Text04d1 ; 0x04d1
- textpointer Text04d2 ; 0x04d2
- textpointer Text04d3 ; 0x04d3
- textpointer Text04d4 ; 0x04d4
- textpointer Text04d5 ; 0x04d5
- textpointer Text04d6 ; 0x04d6
- textpointer Text04d7 ; 0x04d7
- textpointer Text04d8 ; 0x04d8
- textpointer Text04d9 ; 0x04d9
- textpointer Text04da ; 0x04da
- textpointer Text04db ; 0x04db
- textpointer Text04dc ; 0x04dc
- textpointer Text04dd ; 0x04dd
- textpointer Text04de ; 0x04de
- textpointer Text04df ; 0x04df
- textpointer Text04e0 ; 0x04e0
- textpointer Text04e1 ; 0x04e1
- textpointer Text04e2 ; 0x04e2
- textpointer Text04e3 ; 0x04e3
- textpointer Text04e4 ; 0x04e4
- textpointer Text04e5 ; 0x04e5
- textpointer Text04e6 ; 0x04e6
- textpointer Text04e7 ; 0x04e7
- textpointer Text04e8 ; 0x04e8
- textpointer Text04e9 ; 0x04e9
- textpointer Text04ea ; 0x04ea
- textpointer Text04eb ; 0x04eb
- textpointer Text04ec ; 0x04ec
- textpointer Text04ed ; 0x04ed
- textpointer Text04ee ; 0x04ee
- textpointer Text04ef ; 0x04ef
- textpointer Text04f0 ; 0x04f0
- textpointer Text04f1 ; 0x04f1
- textpointer Text04f2 ; 0x04f2
- textpointer Text04f3 ; 0x04f3
- textpointer Text04f4 ; 0x04f4
- textpointer Text04f5 ; 0x04f5
- textpointer Text04f6 ; 0x04f6
- textpointer Text04f7 ; 0x04f7
- textpointer Text04f8 ; 0x04f8
- textpointer Text04f9 ; 0x04f9
- textpointer Text04fa ; 0x04fa
- textpointer Text04fb ; 0x04fb
- textpointer Text04fc ; 0x04fc
- textpointer Text04fd ; 0x04fd
- textpointer Text04fe ; 0x04fe
- textpointer Text04ff ; 0x04ff
- textpointer Text0500 ; 0x0500
- textpointer Text0501 ; 0x0501
- textpointer Text0502 ; 0x0502
- textpointer Text0503 ; 0x0503
- textpointer Text0504 ; 0x0504
- textpointer Text0505 ; 0x0505
- textpointer Text0506 ; 0x0506
- textpointer Text0507 ; 0x0507
- textpointer Text0508 ; 0x0508
- textpointer Text0509 ; 0x0509
- textpointer Text050a ; 0x050a
- textpointer Text050b ; 0x050b
- textpointer Text050c ; 0x050c
- textpointer Text050d ; 0x050d
- textpointer Text050e ; 0x050e
- textpointer Text050f ; 0x050f
- textpointer Text0510 ; 0x0510
- textpointer Text0511 ; 0x0511
- textpointer Text0512 ; 0x0512
- textpointer Text0513 ; 0x0513
- textpointer Text0514 ; 0x0514
- textpointer Text0515 ; 0x0515
- textpointer Text0516 ; 0x0516
- textpointer Text0517 ; 0x0517
- textpointer Text0518 ; 0x0518
- textpointer Text0519 ; 0x0519
- textpointer Text051a ; 0x051a
- textpointer Text051b ; 0x051b
- textpointer Text051c ; 0x051c
- textpointer Text051d ; 0x051d
- textpointer Text051e ; 0x051e
- textpointer Text051f ; 0x051f
- textpointer Text0520 ; 0x0520
- textpointer Text0521 ; 0x0521
- textpointer Text0522 ; 0x0522
- textpointer Text0523 ; 0x0523
- textpointer Text0524 ; 0x0524
- textpointer Text0525 ; 0x0525
- textpointer Text0526 ; 0x0526
- textpointer Text0527 ; 0x0527
- textpointer Text0528 ; 0x0528
- textpointer Text0529 ; 0x0529
- textpointer Text052a ; 0x052a
- textpointer Text052b ; 0x052b
- textpointer Text052c ; 0x052c
- textpointer Text052d ; 0x052d
- textpointer Text052e ; 0x052e
- textpointer Text052f ; 0x052f
- textpointer Text0530 ; 0x0530
- textpointer Text0531 ; 0x0531
- textpointer Text0532 ; 0x0532
- textpointer Text0533 ; 0x0533
- textpointer Text0534 ; 0x0534
- textpointer Text0535 ; 0x0535
- textpointer Text0536 ; 0x0536
- textpointer Text0537 ; 0x0537
- textpointer Text0538 ; 0x0538
- textpointer Text0539 ; 0x0539
- textpointer Text053a ; 0x053a
- textpointer Text053b ; 0x053b
- textpointer Text053c ; 0x053c
- textpointer Text053d ; 0x053d
- textpointer Text053e ; 0x053e
- textpointer Text053f ; 0x053f
- textpointer Text0540 ; 0x0540
- textpointer Text0541 ; 0x0541
- textpointer Text0542 ; 0x0542
- textpointer Text0543 ; 0x0543
- textpointer Text0544 ; 0x0544
- textpointer Text0545 ; 0x0545
- textpointer Text0546 ; 0x0546
- textpointer Text0547 ; 0x0547
- textpointer Text0548 ; 0x0548
- textpointer Text0549 ; 0x0549
- textpointer Text054a ; 0x054a
- textpointer Text054b ; 0x054b
- textpointer Text054c ; 0x054c
- textpointer Text054d ; 0x054d
- textpointer Text054e ; 0x054e
- textpointer Text054f ; 0x054f
- textpointer Text0550 ; 0x0550
- textpointer Text0551 ; 0x0551
- textpointer Text0552 ; 0x0552
- textpointer Text0553 ; 0x0553
- textpointer Text0554 ; 0x0554
- textpointer Text0555 ; 0x0555
- textpointer Text0556 ; 0x0556
- textpointer Text0557 ; 0x0557
- textpointer Text0558 ; 0x0558
- textpointer Text0559 ; 0x0559
- textpointer Text055a ; 0x055a
- textpointer Text055b ; 0x055b
- textpointer Text055c ; 0x055c
- textpointer Text055d ; 0x055d
- textpointer Text055e ; 0x055e
- textpointer Text055f ; 0x055f
- textpointer Text0560 ; 0x0560
- textpointer Text0561 ; 0x0561
- textpointer Text0562 ; 0x0562
- textpointer Text0563 ; 0x0563
- textpointer Text0564 ; 0x0564
- textpointer Text0565 ; 0x0565
- textpointer Text0566 ; 0x0566
- textpointer Text0567 ; 0x0567
- textpointer Text0568 ; 0x0568
- textpointer Text0569 ; 0x0569
- textpointer Text056a ; 0x056a
- textpointer Text056b ; 0x056b
- textpointer Text056c ; 0x056c
- textpointer Text056d ; 0x056d
- textpointer Text056e ; 0x056e
- textpointer Text056f ; 0x056f
- textpointer Text0570 ; 0x0570
- textpointer Text0571 ; 0x0571
- textpointer Text0572 ; 0x0572
- textpointer Text0573 ; 0x0573
- textpointer Text0574 ; 0x0574
- textpointer Text0575 ; 0x0575
- textpointer Text0576 ; 0x0576
- textpointer Text0577 ; 0x0577
- textpointer Text0578 ; 0x0578
- textpointer Text0579 ; 0x0579
- textpointer Text057a ; 0x057a
- textpointer Text057b ; 0x057b
- textpointer Text057c ; 0x057c
- textpointer Text057d ; 0x057d
- textpointer Text057e ; 0x057e
- textpointer Text057f ; 0x057f
- textpointer Text0580 ; 0x0580
- textpointer Text0581 ; 0x0581
- textpointer Text0582 ; 0x0582
- textpointer Text0583 ; 0x0583
- textpointer Text0584 ; 0x0584
- textpointer Text0585 ; 0x0585
- textpointer Text0586 ; 0x0586
- textpointer Text0587 ; 0x0587
- textpointer Text0588 ; 0x0588
- textpointer Text0589 ; 0x0589
- textpointer Text058a ; 0x058a
- textpointer Text058b ; 0x058b
- textpointer Text058c ; 0x058c
- textpointer Text058d ; 0x058d
- textpointer Text058e ; 0x058e
- textpointer Text058f ; 0x058f
- textpointer Text0590 ; 0x0590
- textpointer Text0591 ; 0x0591
- textpointer Text0592 ; 0x0592
- textpointer Text0593 ; 0x0593
- textpointer Text0594 ; 0x0594
- textpointer Text0595 ; 0x0595
- textpointer Text0596 ; 0x0596
- textpointer Text0597 ; 0x0597
- textpointer Text0598 ; 0x0598
- textpointer Text0599 ; 0x0599
- textpointer Text059a ; 0x059a
- textpointer Text059b ; 0x059b
- textpointer Text059c ; 0x059c
- textpointer Text059d ; 0x059d
- textpointer Text059e ; 0x059e
- textpointer Text059f ; 0x059f
- textpointer Text05a0 ; 0x05a0
- textpointer Text05a1 ; 0x05a1
- textpointer Text05a2 ; 0x05a2
- textpointer Text05a3 ; 0x05a3
- textpointer Text05a4 ; 0x05a4
- textpointer Text05a5 ; 0x05a5
- textpointer Text05a6 ; 0x05a6
- textpointer Text05a7 ; 0x05a7
- textpointer Text05a8 ; 0x05a8
- textpointer Text05a9 ; 0x05a9
- textpointer Text05aa ; 0x05aa
- textpointer Text05ab ; 0x05ab
- textpointer Text05ac ; 0x05ac
- textpointer Text05ad ; 0x05ad
- textpointer Text05ae ; 0x05ae
- textpointer Text05af ; 0x05af
- textpointer Text05b0 ; 0x05b0
- textpointer Text05b1 ; 0x05b1
- textpointer Text05b2 ; 0x05b2
- textpointer Text05b3 ; 0x05b3
- textpointer Text05b4 ; 0x05b4
- textpointer Text05b5 ; 0x05b5
- textpointer Text05b6 ; 0x05b6
- textpointer Text05b7 ; 0x05b7
- textpointer Text05b8 ; 0x05b8
- textpointer Text05b9 ; 0x05b9
- textpointer Text05ba ; 0x05ba
- textpointer Text05bb ; 0x05bb
- textpointer Text05bc ; 0x05bc
- textpointer Text05bd ; 0x05bd
- textpointer Text05be ; 0x05be
- textpointer Text05bf ; 0x05bf
- textpointer Text05c0 ; 0x05c0
- textpointer Text05c1 ; 0x05c1
- textpointer Text05c2 ; 0x05c2
- textpointer Text05c3 ; 0x05c3
- textpointer Text05c4 ; 0x05c4
- textpointer Text05c5 ; 0x05c5
- textpointer Text05c6 ; 0x05c6
- textpointer Text05c7 ; 0x05c7
- textpointer Text05c8 ; 0x05c8
- textpointer Text05c9 ; 0x05c9
- textpointer Text05ca ; 0x05ca
- textpointer Text05cb ; 0x05cb
- textpointer Text05cc ; 0x05cc
- textpointer Text05cd ; 0x05cd
- textpointer Text05ce ; 0x05ce
- textpointer Text05cf ; 0x05cf
- textpointer Text05d0 ; 0x05d0
- textpointer Text05d1 ; 0x05d1
- textpointer Text05d2 ; 0x05d2
- textpointer Text05d3 ; 0x05d3
- textpointer Text05d4 ; 0x05d4
- textpointer Text05d5 ; 0x05d5
- textpointer Text05d6 ; 0x05d6
- textpointer Text05d7 ; 0x05d7
- textpointer Text05d8 ; 0x05d8
- textpointer Text05d9 ; 0x05d9
- textpointer Text05da ; 0x05da
- textpointer Text05db ; 0x05db
- textpointer Text05dc ; 0x05dc
- textpointer Text05dd ; 0x05dd
- textpointer Text05de ; 0x05de
- textpointer Text05df ; 0x05df
- textpointer Text05e0 ; 0x05e0
- textpointer Text05e1 ; 0x05e1
- textpointer Text05e2 ; 0x05e2
- textpointer Text05e3 ; 0x05e3
- textpointer Text05e4 ; 0x05e4
- textpointer Text05e5 ; 0x05e5
- textpointer Text05e6 ; 0x05e6
- textpointer Text05e7 ; 0x05e7
- textpointer Text05e8 ; 0x05e8
- textpointer Text05e9 ; 0x05e9
- textpointer Text05ea ; 0x05ea
- textpointer Text05eb ; 0x05eb
- textpointer Text05ec ; 0x05ec
- textpointer Text05ed ; 0x05ed
- textpointer Text05ee ; 0x05ee
- textpointer Text05ef ; 0x05ef
- textpointer Text05f0 ; 0x05f0
- textpointer Text05f1 ; 0x05f1
- textpointer Text05f2 ; 0x05f2
- textpointer Text05f3 ; 0x05f3
- textpointer Text05f4 ; 0x05f4
- textpointer Text05f5 ; 0x05f5
- textpointer Text05f6 ; 0x05f6
- textpointer Text05f7 ; 0x05f7
- textpointer Text05f8 ; 0x05f8
- textpointer Text05f9 ; 0x05f9
- textpointer Text05fa ; 0x05fa
- textpointer Text05fb ; 0x05fb
- textpointer Text05fc ; 0x05fc
- textpointer Text05fd ; 0x05fd
- textpointer Text05fe ; 0x05fe
- textpointer Text05ff ; 0x05ff
- textpointer Text0600 ; 0x0600
- textpointer Text0601 ; 0x0601
- textpointer Text0602 ; 0x0602
- textpointer Text0603 ; 0x0603
- textpointer Text0604 ; 0x0604
- textpointer Text0605 ; 0x0605
- textpointer Text0606 ; 0x0606
- textpointer Text0607 ; 0x0607
- textpointer Text0608 ; 0x0608
- textpointer Text0609 ; 0x0609
- textpointer Text060a ; 0x060a
- textpointer Text060b ; 0x060b
- textpointer Text060c ; 0x060c
- textpointer Text060d ; 0x060d
- textpointer Text060e ; 0x060e
- textpointer Text060f ; 0x060f
- textpointer Text0610 ; 0x0610
- textpointer Text0611 ; 0x0611
- textpointer Text0612 ; 0x0612
- textpointer Text0613 ; 0x0613
- textpointer Text0614 ; 0x0614
- textpointer Text0615 ; 0x0615
- textpointer Text0616 ; 0x0616
- textpointer Text0617 ; 0x0617
- textpointer Text0618 ; 0x0618
- textpointer Text0619 ; 0x0619
- textpointer Text061a ; 0x061a
- textpointer Text061b ; 0x061b
- textpointer Text061c ; 0x061c
- textpointer Text061d ; 0x061d
- textpointer Text061e ; 0x061e
- textpointer Text061f ; 0x061f
- textpointer Text0620 ; 0x0620
- textpointer Text0621 ; 0x0621
- textpointer Text0622 ; 0x0622
- textpointer Text0623 ; 0x0623
- textpointer Text0624 ; 0x0624
- textpointer Text0625 ; 0x0625
- textpointer Text0626 ; 0x0626
- textpointer Text0627 ; 0x0627
- textpointer Text0628 ; 0x0628
- textpointer Text0629 ; 0x0629
- textpointer Text062a ; 0x062a
- textpointer Text062b ; 0x062b
- textpointer Text062c ; 0x062c
- textpointer Text062d ; 0x062d
- textpointer Text062e ; 0x062e
- textpointer Text062f ; 0x062f
- textpointer Text0630 ; 0x0630
- textpointer Text0631 ; 0x0631
- textpointer Text0632 ; 0x0632
- textpointer Text0633 ; 0x0633
- textpointer Text0634 ; 0x0634
- textpointer Text0635 ; 0x0635
- textpointer Text0636 ; 0x0636
- textpointer Text0637 ; 0x0637
- textpointer Text0638 ; 0x0638
- textpointer Text0639 ; 0x0639
- textpointer Text063a ; 0x063a
- textpointer Text063b ; 0x063b
- textpointer Text063c ; 0x063c
- textpointer Text063d ; 0x063d
- textpointer Text063e ; 0x063e
- textpointer Text063f ; 0x063f
- textpointer Text0640 ; 0x0640
- textpointer Text0641 ; 0x0641
- textpointer Text0642 ; 0x0642
- textpointer Text0643 ; 0x0643
- textpointer Text0644 ; 0x0644
- textpointer Text0645 ; 0x0645
- textpointer Text0646 ; 0x0646
- textpointer Text0647 ; 0x0647
- textpointer Text0648 ; 0x0648
- textpointer Text0649 ; 0x0649
- textpointer Text064a ; 0x064a
- textpointer Text064b ; 0x064b
- textpointer Text064c ; 0x064c
- textpointer Text064d ; 0x064d
- textpointer Text064e ; 0x064e
- textpointer Text064f ; 0x064f
- textpointer Text0650 ; 0x0650
- textpointer Text0651 ; 0x0651
- textpointer Text0652 ; 0x0652
- textpointer Text0653 ; 0x0653
- textpointer Text0654 ; 0x0654
- textpointer Text0655 ; 0x0655
- textpointer Text0656 ; 0x0656
- textpointer Text0657 ; 0x0657
- textpointer Text0658 ; 0x0658
- textpointer Text0659 ; 0x0659
- textpointer Text065a ; 0x065a
- textpointer Text065b ; 0x065b
- textpointer Text065c ; 0x065c
- textpointer Text065d ; 0x065d
- textpointer Text065e ; 0x065e
- textpointer Text065f ; 0x065f
- textpointer Text0660 ; 0x0660
- textpointer Text0661 ; 0x0661
- textpointer Text0662 ; 0x0662
- textpointer Text0663 ; 0x0663
- textpointer Text0664 ; 0x0664
- textpointer Text0665 ; 0x0665
- textpointer Text0666 ; 0x0666
- textpointer Text0667 ; 0x0667
- textpointer Text0668 ; 0x0668
- textpointer Text0669 ; 0x0669
- textpointer Text066a ; 0x066a
- textpointer Text066b ; 0x066b
- textpointer Text066c ; 0x066c
- textpointer Text066d ; 0x066d
- textpointer Text066e ; 0x066e
- textpointer Text066f ; 0x066f
- textpointer Text0670 ; 0x0670
- textpointer Text0671 ; 0x0671
- textpointer Text0672 ; 0x0672
- textpointer Text0673 ; 0x0673
- textpointer Text0674 ; 0x0674
- textpointer Text0675 ; 0x0675
- textpointer Text0676 ; 0x0676
- textpointer Text0677 ; 0x0677
- textpointer Text0678 ; 0x0678
- textpointer Text0679 ; 0x0679
- textpointer Text067a ; 0x067a
- textpointer Text067b ; 0x067b
- textpointer Text067c ; 0x067c
- textpointer Text067d ; 0x067d
- textpointer Text067e ; 0x067e
- textpointer Text067f ; 0x067f
- textpointer Text0680 ; 0x0680
- textpointer Text0681 ; 0x0681
- textpointer Text0682 ; 0x0682
- textpointer Text0683 ; 0x0683
- textpointer Text0684 ; 0x0684
- textpointer Text0685 ; 0x0685
- textpointer Text0686 ; 0x0686
- textpointer Text0687 ; 0x0687
- textpointer Text0688 ; 0x0688
- textpointer Text0689 ; 0x0689
- textpointer Text068a ; 0x068a
- textpointer Text068b ; 0x068b
- textpointer Text068c ; 0x068c
- textpointer Text068d ; 0x068d
- textpointer Text068e ; 0x068e
- textpointer Text068f ; 0x068f
- textpointer Text0690 ; 0x0690
- textpointer Text0691 ; 0x0691
- textpointer Text0692 ; 0x0692
- textpointer Text0693 ; 0x0693
- textpointer Text0694 ; 0x0694
- textpointer Text0695 ; 0x0695
- textpointer Text0696 ; 0x0696
- textpointer Text0697 ; 0x0697
- textpointer Text0698 ; 0x0698
- textpointer Text0699 ; 0x0699
- textpointer Text069a ; 0x069a
- textpointer Text069b ; 0x069b
- textpointer Text069c ; 0x069c
- textpointer Text069d ; 0x069d
- textpointer Text069e ; 0x069e
- textpointer Text069f ; 0x069f
- textpointer Text06a0 ; 0x06a0
- textpointer Text06a1 ; 0x06a1
- textpointer Text06a2 ; 0x06a2
- textpointer Text06a3 ; 0x06a3
- textpointer Text06a4 ; 0x06a4
- textpointer Text06a5 ; 0x06a5
- textpointer Text06a6 ; 0x06a6
- textpointer Text06a7 ; 0x06a7
- textpointer Text06a8 ; 0x06a8
- textpointer Text06a9 ; 0x06a9
- textpointer Text06aa ; 0x06aa
- textpointer Text06ab ; 0x06ab
- textpointer Text06ac ; 0x06ac
- textpointer Text06ad ; 0x06ad
- textpointer Text06ae ; 0x06ae
- textpointer Text06af ; 0x06af
- textpointer Text06b0 ; 0x06b0
- textpointer Text06b1 ; 0x06b1
- textpointer Text06b2 ; 0x06b2
- textpointer Text06b3 ; 0x06b3
- textpointer Text06b4 ; 0x06b4
- textpointer Text06b5 ; 0x06b5
- textpointer Text06b6 ; 0x06b6
- textpointer Text06b7 ; 0x06b7
- textpointer Text06b8 ; 0x06b8
- textpointer Text06b9 ; 0x06b9
- textpointer Text06ba ; 0x06ba
- textpointer Text06bb ; 0x06bb
- textpointer Text06bc ; 0x06bc
- textpointer Text06bd ; 0x06bd
- textpointer Text06be ; 0x06be
- textpointer Text06bf ; 0x06bf
- textpointer Text06c0 ; 0x06c0
- textpointer Text06c1 ; 0x06c1
- textpointer Text06c2 ; 0x06c2
- textpointer Text06c3 ; 0x06c3
- textpointer Text06c4 ; 0x06c4
- textpointer Text06c5 ; 0x06c5
- textpointer Text06c6 ; 0x06c6
- textpointer Text06c7 ; 0x06c7
- textpointer Text06c8 ; 0x06c8
- textpointer Text06c9 ; 0x06c9
- textpointer Text06ca ; 0x06ca
- textpointer Text06cb ; 0x06cb
- textpointer Text06cc ; 0x06cc
- textpointer Text06cd ; 0x06cd
- textpointer Text06ce ; 0x06ce
- textpointer Text06cf ; 0x06cf
- textpointer Text06d0 ; 0x06d0
- textpointer Text06d1 ; 0x06d1
- textpointer Text06d2 ; 0x06d2
- textpointer Text06d3 ; 0x06d3
- textpointer Text06d4 ; 0x06d4
- textpointer Text06d5 ; 0x06d5
- textpointer Text06d6 ; 0x06d6
- textpointer Text06d7 ; 0x06d7
- textpointer Text06d8 ; 0x06d8
- textpointer Text06d9 ; 0x06d9
- textpointer Text06da ; 0x06da
- textpointer Text06db ; 0x06db
- textpointer Text06dc ; 0x06dc
- textpointer Text06dd ; 0x06dd
- textpointer Text06de ; 0x06de
- textpointer Text06df ; 0x06df
- textpointer Text06e0 ; 0x06e0
- textpointer Text06e1 ; 0x06e1
- textpointer Text06e2 ; 0x06e2
- textpointer Text06e3 ; 0x06e3
- textpointer Text06e4 ; 0x06e4
- textpointer Text06e5 ; 0x06e5
- textpointer Text06e6 ; 0x06e6
- textpointer Text06e7 ; 0x06e7
- textpointer Text06e8 ; 0x06e8
- textpointer Text06e9 ; 0x06e9
- textpointer Text06ea ; 0x06ea
- textpointer Text06eb ; 0x06eb
- textpointer Text06ec ; 0x06ec
- textpointer Text06ed ; 0x06ed
- textpointer Text06ee ; 0x06ee
- textpointer Text06ef ; 0x06ef
- textpointer Text06f0 ; 0x06f0
- textpointer Text06f1 ; 0x06f1
- textpointer Text06f2 ; 0x06f2
- textpointer Text06f3 ; 0x06f3
- textpointer Text06f4 ; 0x06f4
- textpointer Text06f5 ; 0x06f5
- textpointer Text06f6 ; 0x06f6
- textpointer Text06f7 ; 0x06f7
- textpointer Text06f8 ; 0x06f8
- textpointer Text06f9 ; 0x06f9
- textpointer Text06fa ; 0x06fa
- textpointer Text06fb ; 0x06fb
- textpointer Text06fc ; 0x06fc
- textpointer Text06fd ; 0x06fd
- textpointer Text06fe ; 0x06fe
- textpointer Text06ff ; 0x06ff
- textpointer Text0700 ; 0x0700
- textpointer Text0701 ; 0x0701
- textpointer Text0702 ; 0x0702
- textpointer Text0703 ; 0x0703
- textpointer Text0704 ; 0x0704
- textpointer Text0705 ; 0x0705
- textpointer Text0706 ; 0x0706
- textpointer Text0707 ; 0x0707
- textpointer Text0708 ; 0x0708
- textpointer Text0709 ; 0x0709
- textpointer Text070a ; 0x070a
- textpointer Text070b ; 0x070b
- textpointer Text070c ; 0x070c
- textpointer Text070d ; 0x070d
- textpointer Text070e ; 0x070e
- textpointer Text070f ; 0x070f
- textpointer Text0710 ; 0x0710
- textpointer Text0711 ; 0x0711
- textpointer Text0712 ; 0x0712
- textpointer Text0713 ; 0x0713
- textpointer Text0714 ; 0x0714
- textpointer Text0715 ; 0x0715
- textpointer Text0716 ; 0x0716
- textpointer Text0717 ; 0x0717
- textpointer Text0718 ; 0x0718
- textpointer Text0719 ; 0x0719
- textpointer Text071a ; 0x071a
- textpointer Text071b ; 0x071b
- textpointer Text071c ; 0x071c
- textpointer Text071d ; 0x071d
- textpointer Text071e ; 0x071e
- textpointer Text071f ; 0x071f
- textpointer Text0720 ; 0x0720
- textpointer Text0721 ; 0x0721
- textpointer Text0722 ; 0x0722
- textpointer Text0723 ; 0x0723
- textpointer Text0724 ; 0x0724
- textpointer Text0725 ; 0x0725
- textpointer Text0726 ; 0x0726
- textpointer Text0727 ; 0x0727
- textpointer Text0728 ; 0x0728
- textpointer Text0729 ; 0x0729
- textpointer Text072a ; 0x072a
- textpointer Text072b ; 0x072b
- textpointer Text072c ; 0x072c
- textpointer Text072d ; 0x072d
- textpointer Text072e ; 0x072e
- textpointer Text072f ; 0x072f
- textpointer Text0730 ; 0x0730
- textpointer Text0731 ; 0x0731
- textpointer Text0732 ; 0x0732
- textpointer Text0733 ; 0x0733
- textpointer Text0734 ; 0x0734
- textpointer Text0735 ; 0x0735
- textpointer Text0736 ; 0x0736
- textpointer Text0737 ; 0x0737
- textpointer Text0738 ; 0x0738
- textpointer Text0739 ; 0x0739
- textpointer Text073a ; 0x073a
- textpointer Text073b ; 0x073b
- textpointer Text073c ; 0x073c
- textpointer Text073d ; 0x073d
- textpointer Text073e ; 0x073e
- textpointer Text073f ; 0x073f
- textpointer Text0740 ; 0x0740
- textpointer Text0741 ; 0x0741
- textpointer Text0742 ; 0x0742
- textpointer Text0743 ; 0x0743
- textpointer Text0744 ; 0x0744
- textpointer Text0745 ; 0x0745
- textpointer Text0746 ; 0x0746
- textpointer Text0747 ; 0x0747
- textpointer Text0748 ; 0x0748
- textpointer Text0749 ; 0x0749
- textpointer Text074a ; 0x074a
- textpointer Text074b ; 0x074b
- textpointer Text074c ; 0x074c
- textpointer Text074d ; 0x074d
- textpointer Text074e ; 0x074e
- textpointer Text074f ; 0x074f
- textpointer Text0750 ; 0x0750
- textpointer Text0751 ; 0x0751
- textpointer Text0752 ; 0x0752
- textpointer Text0753 ; 0x0753
- textpointer Text0754 ; 0x0754
- textpointer Text0755 ; 0x0755
- textpointer Text0756 ; 0x0756
- textpointer Text0757 ; 0x0757
- textpointer Text0758 ; 0x0758
- textpointer Text0759 ; 0x0759
- textpointer Text075a ; 0x075a
- textpointer Text075b ; 0x075b
- textpointer Text075c ; 0x075c
- textpointer Text075d ; 0x075d
- textpointer Text075e ; 0x075e
- textpointer Text075f ; 0x075f
- textpointer Text0760 ; 0x0760
- textpointer Text0761 ; 0x0761
- textpointer Text0762 ; 0x0762
- textpointer Text0763 ; 0x0763
- textpointer Text0764 ; 0x0764
- textpointer Text0765 ; 0x0765
- textpointer Text0766 ; 0x0766
- textpointer Text0767 ; 0x0767
- textpointer Text0768 ; 0x0768
- textpointer Text0769 ; 0x0769
- textpointer Text076a ; 0x076a
- textpointer Text076b ; 0x076b
- textpointer Text076c ; 0x076c
- textpointer Text076d ; 0x076d
- textpointer Text076e ; 0x076e
- textpointer Text076f ; 0x076f
- textpointer Text0770 ; 0x0770
- textpointer Text0771 ; 0x0771
- textpointer Text0772 ; 0x0772
- textpointer Text0773 ; 0x0773
- textpointer Text0774 ; 0x0774
- textpointer Text0775 ; 0x0775
- textpointer Text0776 ; 0x0776
- textpointer Text0777 ; 0x0777
- textpointer Text0778 ; 0x0778
- textpointer Text0779 ; 0x0779
- textpointer Text077a ; 0x077a
- textpointer Text077b ; 0x077b
- textpointer Text077c ; 0x077c
- textpointer Text077d ; 0x077d
- textpointer Text077e ; 0x077e
- textpointer Text077f ; 0x077f
- textpointer Text0780 ; 0x0780
- textpointer Text0781 ; 0x0781
- textpointer Text0782 ; 0x0782
- textpointer Text0783 ; 0x0783
- textpointer Text0784 ; 0x0784
- textpointer Text0785 ; 0x0785
- textpointer Text0786 ; 0x0786
- textpointer Text0787 ; 0x0787
- textpointer Text0788 ; 0x0788
- textpointer Text0789 ; 0x0789
- textpointer Text078a ; 0x078a
- textpointer Text078b ; 0x078b
- textpointer Text078c ; 0x078c
- textpointer Text078d ; 0x078d
- textpointer Text078e ; 0x078e
- textpointer Text078f ; 0x078f
- textpointer Text0790 ; 0x0790
- textpointer Text0791 ; 0x0791
- textpointer Text0792 ; 0x0792
- textpointer Text0793 ; 0x0793
- textpointer Text0794 ; 0x0794
- textpointer Text0795 ; 0x0795
- textpointer Text0796 ; 0x0796
- textpointer Text0797 ; 0x0797
- textpointer Text0798 ; 0x0798
- textpointer Text0799 ; 0x0799
- textpointer Text079a ; 0x079a
- textpointer Text079b ; 0x079b
- textpointer Text079c ; 0x079c
- textpointer Text079d ; 0x079d
- textpointer Text079e ; 0x079e
- textpointer Text079f ; 0x079f
- textpointer Text07a0 ; 0x07a0
- textpointer Text07a1 ; 0x07a1
- textpointer Text07a2 ; 0x07a2
- textpointer Text07a3 ; 0x07a3
- textpointer Text07a4 ; 0x07a4
- textpointer Text07a5 ; 0x07a5
- textpointer Text07a6 ; 0x07a6
- textpointer Text07a7 ; 0x07a7
- textpointer Text07a8 ; 0x07a8
- textpointer Text07a9 ; 0x07a9
- textpointer Text07aa ; 0x07aa
- textpointer Text07ab ; 0x07ab
- textpointer Text07ac ; 0x07ac
- textpointer Text07ad ; 0x07ad
- textpointer Text07ae ; 0x07ae
- textpointer Text07af ; 0x07af
- textpointer Text07b0 ; 0x07b0
- textpointer Text07b1 ; 0x07b1
- textpointer Text07b2 ; 0x07b2
- textpointer Text07b3 ; 0x07b3
- textpointer Text07b4 ; 0x07b4
- textpointer Text07b5 ; 0x07b5
- textpointer Text07b6 ; 0x07b6
- textpointer Text07b7 ; 0x07b7
- textpointer Text07b8 ; 0x07b8
- textpointer Text07b9 ; 0x07b9
- textpointer Text07ba ; 0x07ba
- textpointer Text07bb ; 0x07bb
- textpointer Text07bc ; 0x07bc
- textpointer Text07bd ; 0x07bd
- textpointer Text07be ; 0x07be
- textpointer Text07bf ; 0x07bf
- textpointer Text07c0 ; 0x07c0
- textpointer Text07c1 ; 0x07c1
- textpointer Text07c2 ; 0x07c2
- textpointer Text07c3 ; 0x07c3
- textpointer Text07c4 ; 0x07c4
- textpointer Text07c5 ; 0x07c5
- textpointer Text07c6 ; 0x07c6
- textpointer Text07c7 ; 0x07c7
- textpointer Text07c8 ; 0x07c8
- textpointer Text07c9 ; 0x07c9
- textpointer Text07ca ; 0x07ca
- textpointer Text07cb ; 0x07cb
- textpointer Text07cc ; 0x07cc
- textpointer Text07cd ; 0x07cd
- textpointer Text07ce ; 0x07ce
- textpointer Text07cf ; 0x07cf
- textpointer Text07d0 ; 0x07d0
- textpointer Text07d1 ; 0x07d1
- textpointer Text07d2 ; 0x07d2
- textpointer Text07d3 ; 0x07d3
- textpointer Text07d4 ; 0x07d4
- textpointer Text07d5 ; 0x07d5
- textpointer Text07d6 ; 0x07d6
- textpointer Text07d7 ; 0x07d7
- textpointer Text07d8 ; 0x07d8
- textpointer Text07d9 ; 0x07d9
- textpointer Text07da ; 0x07da
- textpointer Text07db ; 0x07db
- textpointer Text07dc ; 0x07dc
- textpointer Text07dd ; 0x07dd
- textpointer Text07de ; 0x07de
- textpointer Text07df ; 0x07df
- textpointer Text07e0 ; 0x07e0
- textpointer Text07e1 ; 0x07e1
- textpointer Text07e2 ; 0x07e2
- textpointer Text07e3 ; 0x07e3
- textpointer Text07e4 ; 0x07e4
- textpointer Text07e5 ; 0x07e5
- textpointer DefeatedFiveOpponentsText ; 0x07e6
- textpointer Text07e7 ; 0x07e7
- textpointer ConsecutiveWinRecordIncreasedText ; 0x07e8
- textpointer Text07e9 ; 0x07e9
- textpointer Text07ea ; 0x07ea
- textpointer Text07eb ; 0x07eb
- textpointer Text07ec ; 0x07ec
- textpointer Text07ed ; 0x07ed
- textpointer Text07ee ; 0x07ee
- textpointer Text07ef ; 0x07ef
- textpointer Text07f0 ; 0x07f0
- textpointer Text07f1 ; 0x07f1
- textpointer Text07f2 ; 0x07f2
- textpointer Text07f3 ; 0x07f3
- textpointer Text07f4 ; 0x07f4
- textpointer Text07f5 ; 0x07f5
- textpointer Text07f6 ; 0x07f6
- textpointer Text07f7 ; 0x07f7
- textpointer Text07f8 ; 0x07f8
- textpointer Text07f9 ; 0x07f9
- textpointer Text07fa ; 0x07fa
- textpointer Text07fb ; 0x07fb
- textpointer GrassEnergyName ; 0x07fc
- textpointer GrassEnergyDescription ; 0x07fd
- textpointer FireEnergyName ; 0x07fe
- textpointer FireEnergyDescription ; 0x07ff
- textpointer WaterEnergyName ; 0x0800
- textpointer WaterEnergyDescription ; 0x0801
- textpointer LightningEnergyName ; 0x0802
- textpointer LightningEnergyDescription ; 0x0803
- textpointer FightingEnergyName ; 0x0804
- textpointer FightingEnergyDescription ; 0x0805
- textpointer PsychicEnergyName ; 0x0806
- textpointer PsychicEnergyDescription ; 0x0807
- textpointer DoubleColorlessEnergyName ; 0x0808
- textpointer DoubleColorlessEnergyDescription ; 0x0809
- textpointer BulbasaurName ; 0x080a
- textpointer LeechSeedName ; 0x080b
- textpointer BulbasaursLeechSeedDescription ; 0x080c
- textpointer SeedName ; 0x080d
- textpointer BulbasaurDescription ; 0x080e
- textpointer IvysaurName ; 0x080f
- textpointer VineWhipName ; 0x0810
- textpointer PoisonPowderName ; 0x0811
- textpointer InflictPoisonDescription ; 0x0812
- textpointer IvysaurDescription ; 0x0813
- textpointer VenusaurName ; 0x0814
- textpointer SolarPowerName ; 0x0815
- textpointer SolarPowerDescription ; 0x0816
- textpointer SolarPowerDescriptionCont ; 0x0817
- textpointer MegaDrainName ; 0x0818
- textpointer VenusaursMegaDrainDescription ; 0x0819
- textpointer VenusaursMegaDrainDescriptionCont ; 0x081a
- textpointer Venusaur1Description ; 0x081b
- textpointer EnergyTransName ; 0x081c
- textpointer EnergyTransDescription ; 0x081d
- textpointer SolarBeamName ; 0x081e
- textpointer Venusaur2Description ; 0x081f
- textpointer CaterpieName ; 0x0820
- textpointer StringShotName ; 0x0821
- textpointer MayInflictParalysisDescription ; 0x0822
- textpointer WormName ; 0x0823
- textpointer CaterpieDescription ; 0x0824
- textpointer MetapodName ; 0x0825
- textpointer StiffenName ; 0x0826
- textpointer MetapodsStiffenDescription ; 0x0827
- textpointer StunSporeName ; 0x0828
- textpointer CocoonName ; 0x0829
- textpointer MetapodDescription ; 0x082a
- textpointer ButterfreeName ; 0x082b
- textpointer WhirlwindName ; 0x082c
- textpointer WhirlwindDescription ; 0x082d
- textpointer ButterfreesMegaDrainDescription ; 0x082e
- textpointer ButterfreesMegaDrainDescriptionCont ; 0x082f
- textpointer ButterflyName ; 0x0830
- textpointer ButterfreeDescription ; 0x0831
- textpointer WeedleName ; 0x0832
- textpointer PoisonStingName ; 0x0833
- textpointer MayInflictPoisonDescription ; 0x0834
- textpointer HairyBugName ; 0x0835
- textpointer WeedleDescription ; 0x0836
- textpointer KakunaName ; 0x0837
- textpointer KakunasStiffenDescription ; 0x0838
- textpointer KakunaDescription ; 0x0839
- textpointer BeedrillName ; 0x083a
- textpointer TwineedleName ; 0x083b
- textpointer DoubleAttackX30Description ; 0x083c
- textpointer PoisonBeeName ; 0x083d
- textpointer BeedrillDescription ; 0x083e
- textpointer EkansName ; 0x083f
- textpointer SpitPoisonName ; 0x0840
- textpointer WrapName ; 0x0841
- textpointer SnakeName ; 0x0842
- textpointer EkansDescription ; 0x0843
- textpointer ArbokName ; 0x0844
- textpointer TerrorStrikeName ; 0x0845
- textpointer TerrorStrikeDescription ; 0x0846
- textpointer PoisonFangName ; 0x0847
- textpointer CobraName ; 0x0848
- textpointer ArbokDescription ; 0x0849
- textpointer NidoranFName ; 0x084a
- textpointer FurySweepesName ; 0x084b
- textpointer TripleAttackX10Description ; 0x084c
- textpointer CallForFamilyName ; 0x084d
- textpointer NidoranFsCallForFamilyDescription ; 0x084e
- textpointer PoisonPinName ; 0x084f
- textpointer NidoranFDescription ; 0x0850
- textpointer NidorinaName ; 0x0851
- textpointer SupersonicName ; 0x0852
- textpointer MayInflictConfusionDescription ; 0x0853
- textpointer DoubleKickName ; 0x0854
- textpointer NidorinaDescription ; 0x0855
- textpointer NidoqueenName ; 0x0856
- textpointer BoyfriendsName ; 0x0857
- textpointer BoyfriendsDescription ; 0x0858
- textpointer MegaPunchName ; 0x0859
- textpointer DrillName ; 0x085a
- textpointer NidoqueenDescription ; 0x085b
- textpointer NidoranMName ; 0x085c
- textpointer HornHazardName ; 0x085d
- textpointer MayDoNothingDescription ; 0x085e
- textpointer NidoranMDescription ; 0x085f
- textpointer NidorinoName ; 0x0860
- textpointer HornDrillName ; 0x0861
- textpointer NidorinoDescription ; 0x0862
- textpointer NidokingName ; 0x0863
- textpointer ThrashName ; 0x0864
- textpointer ThrashDescription ; 0x0865
- textpointer ToxicName ; 0x0866
- textpointer ToxicDescription ; 0x0867
- textpointer NidokingDescription ; 0x0868
- textpointer ZubatName ; 0x0869
- textpointer LeechLifeName ; 0x086a
- textpointer ZubatsLeechLifeDescription ; 0x086b
- textpointer BatName ; 0x086c
- textpointer ZubatDescription ; 0x086d
- textpointer GolbatName ; 0x086e
- textpointer WingAttackName ; 0x086f
- textpointer GolbatsLeechLifeDescription ; 0x0870
- textpointer GolbatDescription ; 0x0871
- textpointer OddishName ; 0x0872
- textpointer SproutName ; 0x0873
- textpointer SproutDescription ; 0x0874
- textpointer WeedName ; 0x0875
- textpointer OddishDescription ; 0x0876
- textpointer GloomName ; 0x0877
- textpointer FoulOdorName ; 0x0878
- textpointer FoulOdorDescription ; 0x0879
- textpointer GloomDescription ; 0x087a
- textpointer VileplumeName ; 0x087b
- textpointer HealName ; 0x087c
- textpointer HealDescription ; 0x087d
- textpointer PetalDanceName ; 0x087e
- textpointer PetalDanceDescription ; 0x087f
- textpointer FlowerName ; 0x0880
- textpointer VileplumeDescription ; 0x0881
- textpointer ParasName ; 0x0882
- textpointer ScratchName ; 0x0883
- textpointer SporeName ; 0x0884
- textpointer InflictSleepDescription ; 0x0885
- textpointer MushroomName ; 0x0886
- textpointer ParasDescription ; 0x0887
- textpointer ParasectName ; 0x0888
- textpointer SlashName ; 0x0889
- textpointer ParasectDescription ; 0x088a
- textpointer VenonatName ; 0x088b
- textpointer VenonatLeechLifeDescription ; 0x088c
- textpointer InsectName ; 0x088d
- textpointer VenonatDescription ; 0x088e
- textpointer VenomothName ; 0x088f
- textpointer ShiftName ; 0x0890
- textpointer ShiftDescription ; 0x0891
- textpointer VenomPowderName ; 0x0892
- textpointer VenomPowderDescription ; 0x0893
- textpointer PoisonmothName ; 0x0894
- textpointer VenomothDescription ; 0x0895
- textpointer BellsproutName ; 0x0896
- textpointer BellsproutsCallForFamilyDescription ; 0x0897
- textpointer BellsproutDescription ; 0x0898
- textpointer WeepinbellName ; 0x0899
- textpointer RazorLeafName ; 0x089a
- textpointer FlycatcherName ; 0x089b
- textpointer WeepinbellDescription ; 0x089c
- textpointer VictreebelName ; 0x089d
- textpointer LureName ; 0x089e
- textpointer VictreebelsLureDescription ; 0x089f
- textpointer AcidName ; 0x08a0
- textpointer VictreebelsAcidDescription ; 0x08a1
- textpointer VictreebelDescription ; 0x08a2
- textpointer GrimerName ; 0x08a3
- textpointer NastyGooName ; 0x08a4
- textpointer MinimizeName ; 0x08a5
- textpointer GrimersMinimizeDescription ; 0x08a6
- textpointer SludgeName ; 0x08a7
- textpointer GrimerDescription ; 0x08a8
- textpointer MukName ; 0x08a9
- textpointer ToxicGasName ; 0x08aa
- textpointer ToxicGasDescription ; 0x08ab
- textpointer MukDescription ; 0x08ac
- textpointer ExeggcuteName ; 0x08ad
- textpointer HypnosisName ; 0x08ae
- textpointer ExeggcutesLeechSeedDescription ; 0x08af
- textpointer EggName ; 0x08b0
- textpointer ExeggcuteDescription ; 0x08b1
- textpointer ExeggutorName ; 0x08b2
- textpointer TeleportName ; 0x08b3
- textpointer TeleportDescription ; 0x08b4
- textpointer BigEggsplosionName ; 0x08b5
- textpointer BigEggsplosionDescription ; 0x08b6
- textpointer CoconutName ; 0x08b7
- textpointer ExeggutorDescription ; 0x08b8
- textpointer KoffingName ; 0x08b9
- textpointer FoulGasName ; 0x08ba
- textpointer FoulGasDescription ; 0x08bb
- textpointer PoisonGasName ; 0x08bc
- textpointer KoffingDescription ; 0x08bd
- textpointer WeezingName ; 0x08be
- textpointer SmogName ; 0x08bf
- textpointer SelfdestructName ; 0x08c0
- textpointer WeezingsSelfdestructDescription ; 0x08c1
- textpointer WeezingDescription ; 0x08c2
- textpointer TangelaName ; 0x08c3
- textpointer BindName ; 0x08c4
- textpointer VineName ; 0x08c5
- textpointer Tangela1Description ; 0x08c6
- textpointer PoisonWhipName ; 0x08c7
- textpointer Tangela2Description ; 0x08c8
- textpointer ScytherName ; 0x08c9
- textpointer SwordsDanceName ; 0x08ca
- textpointer SwordsDanceDescription ; 0x08cb
- textpointer MantisName ; 0x08cc
- textpointer ScytherDescription ; 0x08cd
- textpointer PinsirName ; 0x08ce
- textpointer IronGripName ; 0x08cf
- textpointer GuillotineName ; 0x08d0
- textpointer StagbeetleName ; 0x08d1
- textpointer PinsirDescription ; 0x08d2
- textpointer CharmanderName ; 0x08d3
- textpointer EmberName ; 0x08d4
- textpointer EmberDescription ; 0x08d5
- textpointer LizardName ; 0x08d6
- textpointer CharmanderDescription ; 0x08d7
- textpointer CharmeleonName ; 0x08d8
- textpointer FlamethrowerName ; 0x08d9
- textpointer CharmeleonsFlamethrowerDescription ; 0x08da
- textpointer FlameName ; 0x08db
- textpointer CharmeleonDescription ; 0x08dc
- textpointer CharizardName ; 0x08dd
- textpointer EnergyBurnName ; 0x08de
- textpointer EnergyBurnDescription ; 0x08df
- textpointer FireSpinName ; 0x08e0
- textpointer FireSpinDescription ; 0x08e1
- textpointer CharizardDescription ; 0x08e2
- textpointer VulpixName ; 0x08e3
- textpointer ConfuseRayName ; 0x08e4
- textpointer FoxName ; 0x08e5
- textpointer VulpixDescription ; 0x08e6
- textpointer NinetailsName ; 0x08e7
- textpointer NinetailsLureDescription ; 0x08e8
- textpointer FireBlastName ; 0x08e9
- textpointer FireBlastDescription ; 0x08ea
- textpointer Ninetails1Description ; 0x08eb
- textpointer MixUpName ; 0x08ec
- textpointer MixUpDescription ; 0x08ed
- textpointer MixUpDescriptionCont ; 0x08ee
- textpointer DancingEmbersName ; 0x08ef
- textpointer DancingEmbersDescription ; 0x08f0
- textpointer Ninetails2Description ; 0x08f1
- textpointer GrowlitheName ; 0x08f2
- textpointer FlareName ; 0x08f3
- textpointer PuppyName ; 0x08f4
- textpointer GrowlitheDescription ; 0x08f5
- textpointer ArcanineName ; 0x08f6
- textpointer QuickAttackName ; 0x08f7
- textpointer QuickAttackDescription ; 0x08f8
- textpointer FlamesOfRageName ; 0x08f9
- textpointer FlamesOfRageDescription ; 0x08fa
- textpointer LegendaryName ; 0x08fb
- textpointer Arcanine1Description ; 0x08fc
- textpointer ArcaninesFlamethrowerDescription ; 0x08fd
- textpointer TakeDownName ; 0x08fe
- textpointer TakeDownDescription ; 0x08ff
- textpointer Arcanine2Description ; 0x0900
- textpointer PonytaName ; 0x0901
- textpointer SmashKickName ; 0x0902
- textpointer FlameTailName ; 0x0903
- textpointer FireHorseName ; 0x0904
- textpointer PonytaDescription ; 0x0905
- textpointer RapidashName ; 0x0906
- textpointer StompName ; 0x0907
- textpointer StompDescription ; 0x0908
- textpointer AgilityName ; 0x0909
- textpointer RapidashsAgilityDescription ; 0x090a
- textpointer RapidashDescription ; 0x090b
- textpointer MagmarName ; 0x090c
- textpointer FirePunchName ; 0x090d
- textpointer FirePunchDescription ; 0x090e
- textpointer SpitfireName ; 0x090f
- textpointer Magmar1Description ; 0x0910
- textpointer SmokescreenName ; 0x0911
- textpointer MagmarsSmokescreenDescription ; 0x0912
- textpointer Magmar2Description ; 0x0913
- textpointer FlareonName ; 0x0914
- textpointer EeveeName ; 0x0915
- textpointer BiteName ; 0x0916
- textpointer RageName ; 0x0917
- textpointer FlareonsRageDescription ; 0x0918
- textpointer Flareon1Description ; 0x0919
- textpointer FlareonsFlamethrowerDescription ; 0x091a
- textpointer Flareon2Description ; 0x091b
- textpointer MoltresName ; 0x091c
- textpointer WildfireName ; 0x091d
- textpointer WildfireDescription ; 0x091e
- textpointer DiveBombName ; 0x091f
- textpointer Moltres1Description ; 0x0920
- textpointer FiregiverName ; 0x0921
- textpointer FiregiverDescription ; 0x0922
- textpointer Moltres2Description ; 0x0923
- textpointer SquirtleName ; 0x0924
- textpointer BubbleName ; 0x0925
- textpointer WithdrawName ; 0x0926
- textpointer SquirtlesWithdrawDescription ; 0x0927
- textpointer TinyTurtleName ; 0x0928
- textpointer SquirtleDescription ; 0x0929
- textpointer WartortleName ; 0x092a
- textpointer WartortlesWithdrawDescription ; 0x092b
- textpointer TurtleName ; 0x092c
- textpointer WartortleDescription ; 0x092d
- textpointer BlastoiseName ; 0x092e
- textpointer RainDanceName ; 0x092f
- textpointer RainDanceDescription ; 0x0930
- textpointer RainDanceDescriptionCont ; 0x0931
- textpointer HydroPumpName ; 0x0932
- textpointer HydroPumpDescription ; 0x0933
- textpointer ShellfishName ; 0x0934
- textpointer BlastoiseDescription ; 0x0935
- textpointer PsyduckName ; 0x0936
- textpointer HeadacheName ; 0x0937
- textpointer HeadacheDescription ; 0x0938
- textpointer DuckName ; 0x0939
- textpointer PsyduckDescription ; 0x093a
- textpointer GolduckName ; 0x093b
- textpointer PsyshockName ; 0x093c
- textpointer HyperBeamName ; 0x093d
- textpointer Discard1EnergyFromTargetDescription ; 0x093e
- textpointer GolduckDescription ; 0x093f
- textpointer PoliwagName ; 0x0940
- textpointer WaterGunName ; 0x0941
- textpointer PoliwagsWaterGunDescription ; 0x0942
- textpointer TadpoleName ; 0x0943
- textpointer PoliwagDescription ; 0x0944
- textpointer PoliwhirlName ; 0x0945
- textpointer AmnesiaName ; 0x0946
- textpointer PoliwhirlsAmnesiaDescription ; 0x0947
- textpointer DoubleslapName ; 0x0948
- textpointer PoliwhirlsDescription ; 0x0949
- textpointer PoliwrathName ; 0x094a
- textpointer PoliwrathsWaterGunDescription ; 0x094b
- textpointer WhirlpoolName ; 0x094c
- textpointer PoliwrathDescription ; 0x094d
- textpointer TentacoolName ; 0x094e
- textpointer CowardiceName ; 0x094f
- textpointer CowardiceDescription ; 0x0950
- textpointer JellyfishName ; 0x0951
- textpointer TentacoolDescription ; 0x0952
- textpointer TentacruelName ; 0x0953
- textpointer JellyfishStingName ; 0x0954
- textpointer TentacruelDescription ; 0x0955
- textpointer SeelName ; 0x0956
- textpointer HeadbuttName ; 0x0957
- textpointer SeaLionName ; 0x0958
- textpointer SeelDescription ; 0x0959
- textpointer DewgongName ; 0x095a
- textpointer AuroraBeamName ; 0x095b
- textpointer IceBeamName ; 0x095c
- textpointer DewgongDescription ; 0x095d
- textpointer ShellderName ; 0x095e
- textpointer HideInShellName ; 0x095f
- textpointer HideInShellDescription ; 0x0960
- textpointer BivalveName ; 0x0961
- textpointer ShellderDescription ; 0x0962
- textpointer CloysterName ; 0x0963
- textpointer ClampName ; 0x0964
- textpointer ClampDescription ; 0x0965
- textpointer SpikeCannonName ; 0x0966
- textpointer CloysterDescription ; 0x0967
- textpointer KrabbyName ; 0x0968
- textpointer KrabbysCallForFamilyDescription ; 0x0969
- textpointer RiverCrabName ; 0x096a
- textpointer KrabbyDescription ; 0x096b
- textpointer KinglerName ; 0x096c
- textpointer FlailName ; 0x096d
- textpointer KinglersFlailDescription ; 0x096e
- textpointer CrabhammerName ; 0x096f
- textpointer PincerName ; 0x0970
- textpointer KinglerDescription ; 0x0971
- textpointer HorseaName ; 0x0972
- textpointer OpponentAttackMayDoNothingDescription ; 0x0973
- textpointer DragonName ; 0x0974
- textpointer HorseaDescription ; 0x0975
- textpointer SeadraName ; 0x0976
- textpointer SeadrasWaterGunDescription ; 0x0977
- textpointer SeadrasAgilityDescription ; 0x0978
- textpointer SeadraDescription ; 0x0979
- textpointer GoldeenName ; 0x097a
- textpointer HornAttackName ; 0x097b
- textpointer GoldfishName ; 0x097c
- textpointer GoldeenDescription ; 0x097d
- textpointer SeakingName ; 0x097e
- textpointer WaterfallName ; 0x097f
- textpointer SeakingDescription ; 0x0980
- textpointer StaryuName ; 0x0981
- textpointer SlapName ; 0x0982
- textpointer StarshapeName ; 0x0983
- textpointer StaryuDescription ; 0x0984
- textpointer StarmieName ; 0x0985
- textpointer RecoverName ; 0x0986
- textpointer StarmiesRecoverDescription ; 0x0987
- textpointer StarFreezeName ; 0x0988
- textpointer MysteriousName ; 0x0989
- textpointer StarmieDescription ; 0x098a
- textpointer MagikarpName ; 0x098b
- textpointer TackleName ; 0x098c
- textpointer MagikarpsFlailDescription ; 0x098d
- textpointer FishName ; 0x098e
- textpointer MagikarpDescription ; 0x098f
- textpointer GyaradosName ; 0x0990
- textpointer DragonRageName ; 0x0991
- textpointer BubblebeamName ; 0x0992
- textpointer AtrociousName ; 0x0993
- textpointer GyaradosDescription ; 0x0994
- textpointer LaprasName ; 0x0995
- textpointer LaprasWaterGunDescription ; 0x0996
- textpointer TransportName ; 0x0997
- textpointer LaprasDescription ; 0x0998
- textpointer VaporeonName ; 0x0999
- textpointer FocusEnergyName ; 0x099a
- textpointer FocusEnergyDescription ; 0x099b
- textpointer BubbleJetName ; 0x099c
- textpointer Vaporeon1Description ; 0x099d
- textpointer VaporeonsWaterGunDescription ; 0x099e
- textpointer Vaporeon2Description ; 0x099f
- textpointer OmanyteName ; 0x09a0
- textpointer MysteriousFossilName ; 0x09a1
- textpointer ClairvoyanceName ; 0x09a2
- textpointer ClairvoyanceDescription ; 0x09a3
- textpointer OmanytesWaterGunDescription ; 0x09a4
- textpointer SpiralName ; 0x09a5
- textpointer OmanyteDescription ; 0x09a6
- textpointer OmastarName ; 0x09a7
- textpointer OmastarsWaterGunDescription ; 0x09a8
- textpointer OmastarDescription ; 0x09a9
- textpointer ArticunoName ; 0x09aa
- textpointer FreezeDryName ; 0x09ab
- textpointer BlizzardName ; 0x09ac
- textpointer BlizzardDescription ; 0x09ad
- textpointer FreezeName ; 0x09ae
- textpointer Articuno1Description ; 0x09af
- textpointer QuickfreezeName ; 0x09b0
- textpointer QuickfreezeDescription ; 0x09b1
- textpointer IceBreathName ; 0x09b2
- textpointer IceBreathDescription ; 0x09b3
- textpointer Articuno2Description ; 0x09b4
- textpointer PikachuName ; 0x09b5
- textpointer GnawName ; 0x09b6
- textpointer ThunderJoltName ; 0x09b7
- textpointer ThunderJoltDescription ; 0x09b8
- textpointer MouseName ; 0x09b9
- textpointer Pikachu1Description ; 0x09ba
- textpointer SparkName ; 0x09bb
- textpointer SparkDescription ; 0x09bc
- textpointer Pikachu2Description ; 0x09bd
- textpointer GrowlName ; 0x09be
- textpointer GrowlDescription ; 0x09bf
- textpointer ThundershockName ; 0x09c0
- textpointer Pikachu3Description ; 0x09c1
- textpointer FlyingPikachuName ; 0x09c2
- textpointer FlyName ; 0x09c3
- textpointer FlyDescription ; 0x09c4
- textpointer FlyingPikachuDescription ; 0x09c5
- textpointer SurfingPikachuName ; 0x09c6
- textpointer SurfName ; 0x09c7
- textpointer SurfingPikachuDescription ; 0x09c8
- textpointer RaichuName ; 0x09c9
- textpointer RaichusAgilityDescription ; 0x09ca
- textpointer ThunderName ; 0x09cb
- textpointer RaichusThunderDescription ; 0x09cc
- textpointer Raichu1Description ; 0x09cd
- textpointer GigashockName ; 0x09ce
- textpointer GigashockDescription ; 0x09cf
- textpointer Raichu2Description ; 0x09d0
- textpointer MagnemiteName ; 0x09d1
- textpointer ThunderWaveName ; 0x09d2
- textpointer MagnemitesSelfdestructDescription ; 0x09d3
- textpointer MagnetName ; 0x09d4
- textpointer Magnemite1Description ; 0x09d5
- textpointer MagneticStormName ; 0x09d6
- textpointer MagneticStormDescription ; 0x09d7
- textpointer Magnemite2Description ; 0x09d8
- textpointer MagnetonName ; 0x09d9
- textpointer Magneton1sSelfdestructDescription ; 0x09da
- textpointer Magneton1Description ; 0x09db
- textpointer SonicboomName ; 0x09dc
- textpointer SonicboomDescription ; 0x09dd
- textpointer Magneton2sSelfdestructDescription ; 0x09de
- textpointer Magneton2Description ; 0x09df
- textpointer VoltorbName ; 0x09e0
- textpointer BallName ; 0x09e1
- textpointer VoltorbDescription ; 0x09e2
- textpointer ElectrodeName ; 0x09e3
- textpointer EnergySpikeName ; 0x09e4
- textpointer EnergySpikeDescription ; 0x09e5
- textpointer Electrode1Description ; 0x09e6
- textpointer ChainLightningName ; 0x09e7
- textpointer ChainLightningDescription ; 0x09e8
- textpointer Electrode2Description ; 0x09e9
- textpointer ElectabuzzName ; 0x09ea
- textpointer LightScreenName ; 0x09eb
- textpointer LightScreenDescription ; 0x09ec
- textpointer LightScreenDescriptionCont ; 0x09ed
- textpointer ElectabuzzsQuickAttackDescription ; 0x09ee
- textpointer ElectricName ; 0x09ef
- textpointer Electabuzz1Description ; 0x09f0
- textpointer ThunderpunchName ; 0x09f1
- textpointer ThunderpunchDescription ; 0x09f2
- textpointer Electabuzz2Description ; 0x09f3
- textpointer JolteonName ; 0x09f4
- textpointer DoubleAttackX20Description ; 0x09f5
- textpointer StunNeedleName ; 0x09f6
- textpointer LightningName ; 0x09f7
- textpointer Jolteon1Description ; 0x09f8
- textpointer PinMissileName ; 0x09f9
- textpointer QuadrupleAttackX20Description ; 0x09fa
- textpointer Jolteon2Description ; 0x09fb
- textpointer ZapdosName ; 0x09fc
- textpointer ThunderstormName ; 0x09fd
- textpointer ThunderstormDescription ; 0x09fe
- textpointer Zapdos1Description ; 0x09ff
- textpointer ZapdosThunderDescription ; 0x0a00
- textpointer ThunderboltName ; 0x0a01
- textpointer ThunderboltDescription ; 0x0a02
- textpointer Zapdos2Description ; 0x0a03
- textpointer PealOfThunderName ; 0x0a04
- textpointer PealOfThunderDescription ; 0x0a05
- textpointer BigThunderName ; 0x0a06
- textpointer BigThunderDescription ; 0x0a07
- textpointer Zapdos3Description ; 0x0a08
- textpointer SandshrewName ; 0x0a09
- textpointer SandAttackName ; 0x0a0a
- textpointer SandshrewDescription ; 0x0a0b
- textpointer SandslashName ; 0x0a0c
- textpointer TripleAttackX20Description ; 0x0a0d
- textpointer SandslashDescription ; 0x0a0e
- textpointer DiglettName ; 0x0a0f
- textpointer DigName ; 0x0a10
- textpointer MudSlapName ; 0x0a11
- textpointer MoleName ; 0x0a12
- textpointer DiglettDescription ; 0x0a13
- textpointer DugtrioName ; 0x0a14
- textpointer EarthquakeName ; 0x0a15
- textpointer EarthquakeDescription ; 0x0a16
- textpointer DugtrioDescription ; 0x0a17
- textpointer MankeyName ; 0x0a18
- textpointer PeekName ; 0x0a19
- textpointer PeekDescription ; 0x0a1a
- textpointer PeekDescriptionCont ; 0x0a1b
- textpointer PigMonkeyName ; 0x0a1c
- textpointer MankeyDescription ; 0x0a1d
- textpointer PrimeapeName ; 0x0a1e
- textpointer TantrumName ; 0x0a1f
- textpointer TantrumDescription ; 0x0a20
- textpointer PrimeapeDescription ; 0x0a21
- textpointer MachopName ; 0x0a22
- textpointer LowKickName ; 0x0a23
- textpointer SuperpowerName ; 0x0a24
- textpointer MachopDescription ; 0x0a25
- textpointer MachokeName ; 0x0a26
- textpointer KarateChopName ; 0x0a27
- textpointer KarateChopDescription ; 0x0a28
- textpointer SubmissionName ; 0x0a29
- textpointer SubmissionDescription ; 0x0a2a
- textpointer MachokeDescription ; 0x0a2b
- textpointer MachampName ; 0x0a2c
- textpointer StrikesBackName ; 0x0a2d
- textpointer StrikesBackDescription ; 0x0a2e
- textpointer StrikesBackDescriptionCont ; 0x0a2f
- textpointer SeismicTossName ; 0x0a30
- textpointer MachampDescription ; 0x0a31
- textpointer GeodudeName ; 0x0a32
- textpointer StoneBarrageName ; 0x0a33
- textpointer StoneBarrageDescription ; 0x0a34
- textpointer RockName ; 0x0a35
- textpointer GeodudeDescription ; 0x0a36
- textpointer GravelerName ; 0x0a37
- textpointer HardenName ; 0x0a38
- textpointer GravelersHardenDescription ; 0x0a39
- textpointer RockThrowName ; 0x0a3a
- textpointer GravelerDescription ; 0x0a3b
- textpointer GolemName ; 0x0a3c
- textpointer AvalancheName ; 0x0a3d
- textpointer GolemsSelfdestructDescription ; 0x0a3e
- textpointer MegatonName ; 0x0a3f
- textpointer GolemDescription ; 0x0a40
- textpointer OnixName ; 0x0a41
- textpointer OnixsHardenDescription ; 0x0a42
- textpointer RockSnakeName ; 0x0a43
- textpointer OnixDescription ; 0x0a44
- textpointer CuboneName ; 0x0a45
- textpointer SnivelName ; 0x0a46
- textpointer SnivelDescription ; 0x0a47
- textpointer CubonesRageDescription ; 0x0a48
- textpointer LonelyName ; 0x0a49
- textpointer CuboneDescription ; 0x0a4a
- textpointer MarowakName ; 0x0a4b
- textpointer BonemerangName ; 0x0a4c
- textpointer CallforFriendName ; 0x0a4d
- textpointer CallforFriendDescription ; 0x0a4e
- textpointer BonekeeperName ; 0x0a4f
- textpointer Marowak1Description ; 0x0a50
- textpointer BoneAttackName ; 0x0a51
- textpointer BoneAttackDescription ; 0x0a52
- textpointer WailName ; 0x0a53
- textpointer WailDescription ; 0x0a54
- textpointer Marowak2Description ; 0x0a55
- textpointer HitmonleeName ; 0x0a56
- textpointer StretchKickName ; 0x0a57
- textpointer StretchKickDescription ; 0x0a58
- textpointer HighJumpKickName ; 0x0a59
- textpointer KickingName ; 0x0a5a
- textpointer HitmonleeDescription ; 0x0a5b
- textpointer HitmonchanName ; 0x0a5c
- textpointer JabName ; 0x0a5d
- textpointer SpecialPunch ; 0x0a5e
- textpointer PunchingName ; 0x0a5f
- textpointer HitmonchanDescription ; 0x0a60
- textpointer RhyhornName ; 0x0a61
- textpointer LeerName ; 0x0a62
- textpointer LeerDescription ; 0x0a63
- textpointer SpikeName ; 0x0a64
- textpointer RhyhornDescription ; 0x0a65
- textpointer RhydonName ; 0x0a66
- textpointer RamName ; 0x0a67
- textpointer RamDescription ; 0x0a68
- textpointer RamDescriptionCont ; 0x0a69
- textpointer RhydonDescription ; 0x0a6a
- textpointer KabutoName ; 0x0a6b
- textpointer KabutoArmorName ; 0x0a6c
- textpointer KabutoArmorDescription ; 0x0a6d
- textpointer KabutoArmorDescriptionCont ; 0x0a6e
- textpointer KabutoDescription ; 0x0a6f
- textpointer KabutopsName ; 0x0a70
- textpointer SharpSickleName ; 0x0a71
- textpointer AbsorbName ; 0x0a72
- textpointer AbsorbDescription ; 0x0a73
- textpointer AbsorbDescriptionCont ; 0x0a74
- textpointer KabutopsDescription ; 0x0a75
- textpointer AerodactylName ; 0x0a76
- textpointer PrehistoricPowerName ; 0x0a77
- textpointer PrehistoricPowerDescription ; 0x0a78
- textpointer FossilName ; 0x0a79
- textpointer AerodactylDescription ; 0x0a7a
- textpointer AbraName ; 0x0a7b
- textpointer PsiName ; 0x0a7c
- textpointer AbraDescription ; 0x0a7d
- textpointer KadabraName ; 0x0a7e
- textpointer KadabrasRecoverDescription ; 0x0a7f
- textpointer SuperPsiName ; 0x0a80
- textpointer KadabraDescription ; 0x0a81
- textpointer AlakazamName ; 0x0a82
- textpointer DamageSwapName ; 0x0a83
- textpointer DamageSwapDescription ; 0x0a84
- textpointer AlakazamDescription ; 0x0a85
- textpointer SlowpokeName ; 0x0a86
- textpointer SlowpokesAmnesiaDescription ; 0x0a87
- textpointer DopeyName ; 0x0a88
- textpointer Slowpoke1Description ; 0x0a89
- textpointer SpacingOutName ; 0x0a8a
- textpointer SpacingOutDescription ; 0x0a8b
- textpointer ScavengeName ; 0x0a8c
- textpointer ScavengeDescription ; 0x0a8d
- textpointer SlowbroName ; 0x0a8e
- textpointer StrangeBehaviorName ; 0x0a8f
- textpointer StrangeBehaviorDescription ; 0x0a90
- textpointer HermitcrabName ; 0x0a91
- textpointer SlowbroDescription ; 0x0a92
- textpointer GastlyName ; 0x0a93
- textpointer SleepingGasName ; 0x0a94
- textpointer MayInflictSleepDescription ; 0x0a95
- textpointer DestinyBondName ; 0x0a96
- textpointer DestinyBondDescription ; 0x0a97
- textpointer GasName ; 0x0a98
- textpointer Gastly1Description ; 0x0a99
- textpointer LickName ; 0x0a9a
- textpointer EnergyConversionName ; 0x0a9b
- textpointer EnergyConversionDescription ; 0x0a9c
- textpointer Gastly2Description ; 0x0a9d
- textpointer HaunterName ; 0x0a9e
- textpointer TransparencyName ; 0x0a9f
- textpointer TransparencyDescription ; 0x0aa0
- textpointer NightmareName ; 0x0aa1
- textpointer HaunterDescription ; 0x0aa2
- textpointer DreamEaterName ; 0x0aa3
- textpointer DreamEaterDescription ; 0x0aa4
- textpointer GengarName ; 0x0aa5
- textpointer CurseName ; 0x0aa6
- textpointer CurseDescription ; 0x0aa7
- textpointer DarkMindName ; 0x0aa8
- textpointer DarkMindDescription ; 0x0aa9
- textpointer ShadowName ; 0x0aaa
- textpointer GengarDescription ; 0x0aab
- textpointer DrowzeeName ; 0x0aac
- textpointer PoundName ; 0x0aad
- textpointer DrowzeeDescription ; 0x0aae
- textpointer HypnoName ; 0x0aaf
- textpointer ProphecyName ; 0x0ab0
- textpointer ProphecyDescription ; 0x0ab1
- textpointer HypnoDescription ; 0x0ab2
- textpointer MrMimeName ; 0x0ab3
- textpointer InvisibleWallName ; 0x0ab4
- textpointer InvisibleWallDescription ; 0x0ab5
- textpointer InvisibleWallDescriptionCont ; 0x0ab6
- textpointer MeditateName ; 0x0ab7
- textpointer MrMimesMeditateDescription ; 0x0ab8
- textpointer BarrierName ; 0x0ab9
- textpointer MrMimeDescription ; 0x0aba
- textpointer JynxName ; 0x0abb
- textpointer DoubleAttackX10Description ; 0x0abc
- textpointer JynxsMeditateDescription ; 0x0abd
- textpointer HumanShapeName ; 0x0abe
- textpointer JynxDescription ; 0x0abf
- textpointer MewtwoName ; 0x0ac0
- textpointer PsychicName ; 0x0ac1
- textpointer PsychicDescription ; 0x0ac2
- textpointer BarrierDescription ; 0x0ac3
- textpointer GeneticName ; 0x0ac4
- textpointer Mewtwo1Description ; 0x0ac5
- textpointer EnergyAbsorptionName ; 0x0ac6
- textpointer EnergyAbsorptionDescription ; 0x0ac7
- textpointer PsyburnName ; 0x0ac8
- textpointer Mewtwo2Description ; 0x0ac9
- textpointer MewName ; 0x0aca
- textpointer NeutralizingShieldName ; 0x0acb
- textpointer NeutralizingShieldDescription ; 0x0acc
- textpointer NewSpeciesName ; 0x0acd
- textpointer Mew1Description ; 0x0ace
- textpointer MysteryAttackName ; 0x0acf
- textpointer MysteryAttackDescription ; 0x0ad0
- textpointer Mew2Description ; 0x0ad1
- textpointer PsywaveName ; 0x0ad2
- textpointer PsywaveDescription ; 0x0ad3
- textpointer DevolutionBeamName ; 0x0ad4
- textpointer DevolutionBeamDescription ; 0x0ad5
- textpointer PidgeyName ; 0x0ad6
- textpointer TinyBirdName ; 0x0ad7
- textpointer PidgeyDescription ; 0x0ad8
- textpointer PidgeottoName ; 0x0ad9
- textpointer MirrorMoveName ; 0x0ada
- textpointer PidgeottosMirrorMoveDescription ; 0x0adb
- textpointer BirdName ; 0x0adc
- textpointer PidgeottoDescription ; 0x0add
- textpointer PidgeotName ; 0x0ade
- textpointer SlicingWindName ; 0x0adf
- textpointer SlicingWildDescription ; 0x0ae0
- textpointer GaleName ; 0x0ae1
- textpointer GaleDescription ; 0x0ae2
- textpointer Pidgeot1Description ; 0x0ae3
- textpointer HurricaneName ; 0x0ae4
- textpointer HurricaneDescription ; 0x0ae5
- textpointer Pidgeot2Description ; 0x0ae6
- textpointer RattataName ; 0x0ae7
- textpointer RatName ; 0x0ae8
- textpointer RattataDescription ; 0x0ae9
- textpointer RaticateName ; 0x0aea
- textpointer SuperFangName ; 0x0aeb
- textpointer SuperFangDescription ; 0x0aec
- textpointer RaticateDescription ; 0x0aed
- textpointer SpearowName ; 0x0aee
- textpointer PeckName ; 0x0aef
- textpointer SpearowsMirrorMoveDescription ; 0x0af0
- textpointer SpearowDescription ; 0x0af1
- textpointer FearowName ; 0x0af2
- textpointer FearowsAgilityDescription ; 0x0af3
- textpointer DrillPeckName ; 0x0af4
- textpointer BeakName ; 0x0af5
- textpointer FearowDescription ; 0x0af6
- textpointer ClefairyName ; 0x0af7
- textpointer SingName ; 0x0af8
- textpointer MetronomeName ; 0x0af9
- textpointer ClefairysMetronomeDescription ; 0x0afa
- textpointer FairyName ; 0x0afb
- textpointer ClefairyDescription ; 0x0afc
- textpointer ClefableName ; 0x0afd
- textpointer ClefablesMetronomeDescription ; 0x0afe
- textpointer ClefablesMinimizeDescription ; 0x0aff
- textpointer ClefableDescription ; 0x0b00
- textpointer JigglypuffName ; 0x0b01
- textpointer FirstAidName ; 0x0b02
- textpointer FirstAidDescription ; 0x0b03
- textpointer DoubleEdgeName ; 0x0b04
- textpointer JigglypuffsDoubleEdgeDescription ; 0x0b05
- textpointer BalloonName ; 0x0b06
- textpointer Jigglypuff1Description ; 0x0b07
- textpointer FriendshipSongName ; 0x0b08
- textpointer FriendshipSongDescription ; 0x0b09
- textpointer ExpandName ; 0x0b0a
- textpointer ExpandDescription ; 0x0b0b
- textpointer Jigglypuff2Description ; 0x0b0c
- textpointer LullabyName ; 0x0b0d
- textpointer Jigglypuff3Description ; 0x0b0e
- textpointer WigglytuffName ; 0x0b0f
- textpointer DoTheWaveName ; 0x0b10
- textpointer DoTheWaveDescription ; 0x0b11
- textpointer WigglytuffDescription ; 0x0b12
- textpointer MeowthName ; 0x0b13
- textpointer CatPunchName ; 0x0b14
- textpointer CatPunchDescription ; 0x0b15
- textpointer ScratchCatName ; 0x0b16
- textpointer Meowth1Description ; 0x0b17
- textpointer PayDayName ; 0x0b18
- textpointer PayDayDescription ; 0x0b19
- textpointer Meowth2Description ; 0x0b1a
- textpointer PersianName ; 0x0b1b
- textpointer PounceName ; 0x0b1c
- textpointer PounceDescription ; 0x0b1d
- textpointer ClassyCatName ; 0x0b1e
- textpointer PersianDescription ; 0x0b1f
- textpointer FarfetchdName ; 0x0b20
- textpointer LeekSlapName ; 0x0b21
- textpointer LeekSlapDescription ; 0x0b22
- textpointer PotSmashName ; 0x0b23
- textpointer WildDuckName ; 0x0b24
- textpointer FarfetchdDescription ; 0x0b25
- textpointer DoduoName ; 0x0b26
- textpointer FuryAttackName ; 0x0b27
- textpointer TwinBirdName ; 0x0b28
- textpointer DoduoDescription ; 0x0b29
- textpointer DodrioName ; 0x0b2a
- textpointer RetreatAidName ; 0x0b2b
- textpointer RetreatAidDescription ; 0x0b2c
- textpointer DodriosRageDescription ; 0x0b2d
- textpointer TriplebirdName ; 0x0b2e
- textpointer DodrioDescription ; 0x0b2f
- textpointer LickitungName ; 0x0b30
- textpointer TongueWrapName ; 0x0b31
- textpointer LickingName ; 0x0b32
- textpointer LickitungDescription ; 0x0b33
- textpointer ChanseyName ; 0x0b34
- textpointer ScrunchName ; 0x0b35
- textpointer ScrunchDescription ; 0x0b36
- textpointer ChanseysDoubleEdgeDescription ; 0x0b37
- textpointer ChanseyDescription ; 0x0b38
- textpointer KangaskhanName ; 0x0b39
- textpointer FetchName ; 0x0b3a
- textpointer FetchDescription ; 0x0b3b
- textpointer CometPunchName ; 0x0b3c
- textpointer ParentName ; 0x0b3d
- textpointer KangaskhanDescription ; 0x0b3e
- textpointer TaurosName ; 0x0b3f
- textpointer RampageName ; 0x0b40
- textpointer RampageDescription ; 0x0b41
- textpointer WildBullName ; 0x0b42
- textpointer TaurosDescription ; 0x0b43
- textpointer DittoName ; 0x0b44
- textpointer MorphName ; 0x0b45
- textpointer MorphDescription ; 0x0b46
- textpointer MorphDescriptionCont ; 0x0b47
- textpointer TransformName ; 0x0b48
- textpointer DittoDescription ; 0x0b49
- textpointer TailWagName ; 0x0b4a
- textpointer TailWagDescription ; 0x0b4b
- textpointer EvolutionName ; 0x0b4c
- textpointer EeveeDescription ; 0x0b4d
- textpointer PorygonName ; 0x0b4e
- textpointer Conversion1Name ; 0x0b4f
- textpointer Conversion1Description ; 0x0b50
- textpointer Conversion2Name ; 0x0b51
- textpointer Conversion2Description ; 0x0b52
- textpointer VirtualName ; 0x0b53
- textpointer PorygonDescription ; 0x0b54
- textpointer SnorlaxName ; 0x0b55
- textpointer ThickSkinnedName ; 0x0b56
- textpointer ThickSkinnedDescription ; 0x0b57
- textpointer BodySlamName ; 0x0b58
- textpointer SleepingName ; 0x0b59
- textpointer SnorlaxDescription ; 0x0b5a
- textpointer DratiniName ; 0x0b5b
- textpointer DratiniDescription ; 0x0b5c
- textpointer DragonairName ; 0x0b5d
- textpointer SlamName ; 0x0b5e
- textpointer DragonairDescription ; 0x0b5f
- textpointer DragoniteName ; 0x0b60
- textpointer HealingWindName ; 0x0b61
- textpointer HealingWindDescription ; 0x0b62
- textpointer Dragonite1Description ; 0x0b63
- textpointer StepInName ; 0x0b64
- textpointer StepInDescription ; 0x0b65
- textpointer DoubleAttackX40Description ; 0x0b66
- textpointer DragoniteDescription ; 0x0b67
- textpointer ProfessorOakName ; 0x0b68
- textpointer ProfessorOakDescription ; 0x0b69
- textpointer ImposterProfessorOakName ; 0x0b6a
- textpointer ImposterProfessorOakDescription ; 0x0b6b
- textpointer BillName ; 0x0b6c
- textpointer BillDescription ; 0x0b6d
- textpointer MrFujiName ; 0x0b6e
- textpointer MrFujiDescription ; 0x0b6f
- textpointer LassName ; 0x0b70
- textpointer LassDescription ; 0x0b71
- textpointer ImakuniName ; 0x0b72
- textpointer ImakuniDescription ; 0x0b73
- textpointer PokemonTraderName ; 0x0b74
- textpointer PokemonTraderDescription ; 0x0b75
- textpointer PokemonBreederName ; 0x0b76
- textpointer PokemonBreederDescription ; 0x0b77
- textpointer ClefairyDollName ; 0x0b78
- textpointer ClefairyDollDescription ; 0x0b79
- textpointer ClefairyDollDescriptionCont ; 0x0b7a
- textpointer MysteriousFossilDescription ; 0x0b7b
- textpointer MysteriousFossilDescriptionCont ; 0x0b7c
- textpointer EnergyRetrievalName ; 0x0b7d
- textpointer EnergyRetrievalDescription ; 0x0b7e
- textpointer SuperEnergyRetrievalName ; 0x0b7f
- textpointer SuperEnergyRetrievalDescription ; 0x0b80
- textpointer EnergySearchName ; 0x0b81
- textpointer EnergySearchDescription ; 0x0b82
- textpointer EnergyRemovalName ; 0x0b83
- textpointer EnergyRemovalDescription ; 0x0b84
- textpointer SuperEnergyRemovalName ; 0x0b85
- textpointer SuperEnergyRemovalDescription ; 0x0b86
- textpointer SwitchName ; 0x0b87
- textpointer SwitchDescription ; 0x0b88
- textpointer PokemonCenterName ; 0x0b89
- textpointer PokemonCenterDescription ; 0x0b8a
- textpointer PokeBallName ; 0x0b8b
- textpointer PokeBallDescription ; 0x0b8c
- textpointer ScoopUpName ; 0x0b8d
- textpointer ScoopUpDescription ; 0x0b8e
- textpointer ComputerSearchName ; 0x0b8f
- textpointer ComputerSearchDescription ; 0x0b90
- textpointer PokedexName ; 0x0b91
- textpointer PokedexDescription ; 0x0b92
- textpointer PlusPowerName ; 0x0b93
- textpointer PlusPowerDescription ; 0x0b94
- textpointer DefenderName ; 0x0b95
- textpointer DefenderDescription ; 0x0b96
- textpointer ItemFinderName ; 0x0b97
- textpointer ItemFinderDescription ; 0x0b98
- textpointer GustOfWindName ; 0x0b99
- textpointer GustOfWindDescription ; 0x0b9a
- textpointer DevolutionSprayName ; 0x0b9b
- textpointer DevolutionSprayDescription ; 0x0b9c
- textpointer DevolutionSprayDescriptionCont ; 0x0b9d
- textpointer PotionName ; 0x0b9e
- textpointer PotionDescription ; 0x0b9f
- textpointer SuperPotionName ; 0x0ba0
- textpointer SuperPotionDescription ; 0x0ba1
- textpointer FullHealName ; 0x0ba2
- textpointer FullHealDescription ; 0x0ba3
- textpointer ReviveName ; 0x0ba4
- textpointer ReviveDescription ; 0x0ba5
- textpointer MaintenanceName ; 0x0ba6
- textpointer MaintenanceDescription ; 0x0ba7
- textpointer PokemonFluteName ; 0x0ba8
- textpointer PokemonFluteDescription ; 0x0ba9
- textpointer GamblerName ; 0x0baa
- textpointer GamblerDescription ; 0x0bab
- textpointer RecycleName ; 0x0bac
- textpointer RecycleDescription ; 0x0bad
+TextOffsets:: ; 34000 (d:4000)
+ dwb $0000, $00 ; 0x0000
+ textpointer HandText ; 0x0001
+ textpointer CheckText ; 0x0002
+ textpointer AttackText ; 0x0003
+ textpointer PKMNPowerText ; 0x0004
+ textpointer DoneText ; 0x0005
+ textpointer TypeText ; 0x0006
+ textpointer RetreatText ; 0x0007
+ textpointer WeaknessText ; 0x0008
+ textpointer ResistanceText ; 0x0009
+ textpointer PKMNPWRText ; 0x000a
+ textpointer Text000b ; 0x000b
+ textpointer LengthText ; 0x000c
+ textpointer WeightText ; 0x000d
+ textpointer PokemonText ; 0x000e
+ textpointer MetresText ; 0x000f
+ textpointer LbsText ; 0x0010
+ textpointer PromostarRarityText ; 0x0011
+ textpointer CircleRarityText ; 0x0012
+ textpointer DiamondRarityText ; 0x0013
+ textpointer StarRarityText ; 0x0014
+ textpointer AllCardsOwnedText ; 0x0015
+ textpointer TotalNumberOfCardsText ; 0x0016
+ textpointer TypesOfCardsText ; 0x0017
+ textpointer GrassPokemonText ; 0x0018
+ textpointer FirePokemonText ; 0x0019
+ textpointer WaterPokemonText ; 0x001a
+ textpointer LightningPokemonText ; 0x001b
+ textpointer FightingPokemonText ; 0x001c
+ textpointer PsychicPokemonText ; 0x001d
+ textpointer ColorlessPokemonText ; 0x001e
+ textpointer TrainerCardText ; 0x001f
+ textpointer EnergyCardText ; 0x0020
+ textpointer Text0021 ; 0x0021
+ textpointer Text0022 ; 0x0022
+ textpointer NoPokemonOnTheBenchText ; 0x0023
+ textpointer UnableDueToSleepText ; 0x0024
+ textpointer UnableDueToParalysisText ; 0x0025
+ textpointer Received10DamageDueToPoisonText ; 0x0026
+ textpointer Received20DamageDueToPoisonText ; 0x0027
+ textpointer IsStillAsleepText ; 0x0028
+ textpointer IsCuredOfSleepText ; 0x0029
+ textpointer IsCuredOfParalysisText ; 0x002a
+ textpointer BetweenTurnsText ; 0x002b
+ textpointer UnableToUseItText ; 0x002c
+ textpointer NoEnergyCardsText ; 0x002d
+ textpointer IsThisOKText ; 0x002e
+ textpointer YesOrNoText ; 0x002f
+ textpointer DiscardName ; 0x0030
+ textpointer IncompleteText ; 0x0031
+ textpointer Text0032 ; 0x0032
+ textpointer UsedText ; 0x0033
+ textpointer Text0034 ; 0x0034
+ textpointer PokemonsAttackText ; 0x0035
+ textpointer ResistanceLessDamageText ; 0x0036
+ textpointer Text0037 ; 0x0037
+ textpointer Text0038 ; 0x0038
+ textpointer ResistanceNoDamageText ; 0x0039
+ textpointer AttackDamageText ; 0x003a
+ textpointer NoDamageText ; 0x003b
+ textpointer NoSelectableAttackText ; 0x003c
+ textpointer UnableToRetreatText ; 0x003d
+ textpointer MayOnlyAttachOneEnergyCardText ; 0x003e
+ textpointer UseThisPokemonPowerText ; 0x003f
+ textpointer PokemonPowerSelectNotRequiredText ; 0x0040
+ textpointer DiscardDescription ; 0x0041
+ textpointer WillDrawNPrizesText ; 0x0042
+ textpointer DrewNPrizesText ; 0x0043
+ textpointer DuelistPlacedACardText ; 0x0044
+ textpointer Text0045 ; 0x0045
+ textpointer Text0046 ; 0x0046
+ textpointer Text0047 ; 0x0047
+ textpointer Text0048 ; 0x0048
+ textpointer Text0049 ; 0x0049
+ textpointer Text004a ; 0x004a
+ textpointer Text004b ; 0x004b
+ textpointer Text004c ; 0x004c
+ textpointer Text004d ; 0x004d
+ textpointer KnockOutText ; 0x004e
+ textpointer DamageToSelfDueToConfusionText ; 0x004f
+ textpointer ChooseEnergyCardToDiscardText ; 0x0050
+ textpointer ChooseNextActivePokemonText ; 0x0051
+ textpointer PressStartWhenReadyText ; 0x0052
+ textpointer YouPlayFirstText ; 0x0053
+ textpointer YouPlaySecondText ; 0x0054
+ textpointer TransmissionErrorText ; 0x0055
+ textpointer ChooseTheCardYouWishToExamineText ; 0x0056
+ textpointer TransmitingDataText ; 0x0057
+ textpointer WaitingHandExamineText ; 0x0058
+ textpointer SelectingBenchPokemonHandExamineBackText ; 0x0059
+ textpointer RetreatedToTheBenchText ; 0x005a
+ textpointer RetreatWasUnsuccessfulText ; 0x005b
+ textpointer WillUseThePokemonPowerText ; 0x005c
+ textpointer FinishedTurnWithoutAttackingText ; 0x005d
+ textpointer DuelistTurnText ; 0x005e
+ textpointer AttachedEnergyToPokemonText ; 0x005f
+ textpointer PokemonEvolvedIntoPokemonText ; 0x0060
+ textpointer PlacedOnTheBenchText ; 0x0061
+ textpointer PlacedInTheArenaText ; 0x0062
+ textpointer ShufflesTheDeckText ; 0x0063
+ textpointer ThisIsJustPracticeDoNotShuffleText ; 0x0064
+ textpointer EachPlayerShuffleOpponentsDeckText ; 0x0065
+ textpointer EachPlayerDraw7CardsText ; 0x0066
+ textpointer Drew7CardsText ; 0x0067
+ textpointer DeckHasXCardsText ; 0x0068
+ textpointer ChooseBasicPkmnToPlaceInArenaText ; 0x0069
+ textpointer ThereAreNoBasicPokemonInHand ; 0x006a
+ textpointer NeitherPlayerHasBasicPkmnText ; 0x006b
+ textpointer ReturnCardsToDeckAndDrawAgainText ; 0x006c
+ textpointer ChooseUpTo5BasicPkmnToPlaceOnBenchText ; 0x006d
+ textpointer PleaseChooseAnActivePokemonText ; 0x006e
+ textpointer ChooseYourBenchPokemonText ; 0x006f
+ textpointer YouDrewText ; 0x0070
+ textpointer YouCannotSelectThisCardText ; 0x0071
+ textpointer PlacingThePrizesText ; 0x0072
+ textpointer PleasePlacePrizesText ; 0x0073
+ textpointer IfHeadsDuelistPlaysFirstText ; 0x0074
+ textpointer CoinTossToDecideWhoPlaysFirstText ; 0x0075
+ textpointer DecisionText ; 0x0076
+ textpointer DuelWasADrawText ; 0x0077
+ textpointer WonDuelText ; 0x0078
+ textpointer LostDuelText ; 0x0079
+ textpointer StartSuddenDeathMatchText ; 0x007a
+ textpointer PrizesLeftActivePokemonCardsInDeckText ; 0x007b
+ textpointer NoneText ; 0x007c
+ textpointer YesText ; 0x007d
+ textpointer CardsText ; 0x007e
+ textpointer TookAllThePrizesText ; 0x007f
+ textpointer ThereAreNoPokemonInPlayAreaText ; 0x0080
+ textpointer WasKnockedOutText ; 0x0081
+ textpointer HavePokemonPowerText ; 0x0082
+ textpointer UnableToUsePkmnPowerDueToToxicGasText ; 0x0083
+ textpointer PlayCheck1Text ; 0x0084
+ textpointer PlayCheck2Text ; 0x0085
+ textpointer SelectCheckText ; 0x0086
+ textpointer Text0087 ; 0x0087
+ textpointer DuelistIsThinkingText ; 0x0088
+ textpointer Text0089 ; 0x0089
+ textpointer SelectComputerOpponentText ; 0x008a
+ textpointer Text008b ; 0x008b
+ textpointer Text008c ; 0x008c
+ textpointer Text008d ; 0x008d
+ textpointer Text008e ; 0x008e
+ textpointer Text008f ; 0x008f
+ textpointer Text0090 ; 0x0090
+ textpointer Text0091 ; 0x0091
+ textpointer Player2Text ; 0x0092
+ textpointer Text0093 ; 0x0093
+ textpointer Text0094 ; 0x0094
+ textpointer Text0095 ; 0x0095
+ textpointer Text0096 ; 0x0096
+ textpointer Text0097 ; 0x0097
+ textpointer Text0098 ; 0x0098
+ textpointer Text0099 ; 0x0099
+ textpointer Text009a ; 0x009a
+ textpointer Text009b ; 0x009b
+ textpointer Text009c ; 0x009c
+ textpointer Text009d ; 0x009d
+ textpointer Text009e ; 0x009e
+ textpointer Text009f ; 0x009f
+ textpointer Text00a0 ; 0x00a0
+ textpointer Text00a1 ; 0x00a1
+ textpointer ResetBackUpRamText ; 0x00a2
+ textpointer Text00a3 ; 0x00a3
+ textpointer NoCardsInHandText ; 0x00a4
+ textpointer TheDiscardPileHasNoCardsText ; 0x00a5
+ textpointer PlayerDiscardPileText ; 0x00a6
+ textpointer DuelistHandText ; 0x00a7
+ textpointer DuelistPlayAreaText ; 0x00a8
+ textpointer DuelistDeckText ; 0x00a9
+ textpointer PleaseSelectHandText ; 0x00aa
+ textpointer PleaseSelectCardText ; 0x00ab
+ textpointer NoPokemonWithDamageCountersText ; 0x00ac
+ textpointer NoDamageCountersText ; 0x00ad
+ textpointer NoEnergyAttachedToOpponentsActiveText ; 0x00ae
+ textpointer Text00af ; 0x00af
+ textpointer Text00b0 ; 0x00b0
+ textpointer Text00b1 ; 0x00b1
+ textpointer NoSpaceOnTheBenchText ; 0x00b2
+ textpointer NoPokemonCapableOfEvolvingText ; 0x00b3
+ textpointer CantEvolvePokemonInSameTurnItsPlacedText ; 0x00b4
+ textpointer Text00b5 ; 0x00b5
+ textpointer Text00b6 ; 0x00b6
+ textpointer Text00b7 ; 0x00b7
+ textpointer Text00b8 ; 0x00b8
+ textpointer Text00b9 ; 0x00b9
+ textpointer Text00ba ; 0x00ba
+ textpointer Text00bb ; 0x00bb
+ textpointer Text00bc ; 0x00bc
+ textpointer Text00bd ; 0x00bd
+ textpointer Text00be ; 0x00be
+ textpointer EnergyCardsRequiredToRetreatText ; 0x00bf
+ textpointer NotEnoughEnergyCardsText ; 0x00c0
+ textpointer Text00c1 ; 0x00c1
+ textpointer Text00c2 ; 0x00c2
+ textpointer Text00c3 ; 0x00c3
+ textpointer Text00c4 ; 0x00c4
+ textpointer Text00c5 ; 0x00c5
+ textpointer Text00c6 ; 0x00c6
+ textpointer Text00c7 ; 0x00c7
+ textpointer Text00c8 ; 0x00c8
+ textpointer Text00c9 ; 0x00c9
+ textpointer Text00ca ; 0x00ca
+ textpointer CannotUseDueToStatusText ; 0x00cb
+ textpointer Text00cc ; 0x00cc
+ textpointer Text00cd ; 0x00cd
+ textpointer Text00ce ; 0x00ce
+ textpointer Text00cf ; 0x00cf
+ textpointer Text00d0 ; 0x00d0
+ textpointer Text00d1 ; 0x00d1
+ textpointer Text00d2 ; 0x00d2
+ textpointer Text00d3 ; 0x00d3
+ textpointer UnableDueToToxicGasText ; 0x00d4
+ textpointer Text00d5 ; 0x00d5
+ textpointer BackUpIsBrokenText ; 0x00d6
+ textpointer Text00d7 ; 0x00d7
+ textpointer Text00d8 ; 0x00d8
+ textpointer Text00d9 ; 0x00d9
+ textpointer Text00da ; 0x00da
+ textpointer Text00db ; 0x00db
+ textpointer Text00dc ; 0x00dc
+ textpointer Text00dd ; 0x00dd
+ textpointer SandAttackCheckText ; 0x00de
+ textpointer SmokescreenCheckText ; 0x00df
+ textpointer ParalysisCheckText ; 0x00e0
+ textpointer SleepCheckText ; 0x00e1
+ textpointer PoisonCheckText ; 0x00e2
+ textpointer ConfusionCheckText ; 0x00e3
+ textpointer VenomPowderCheckText ; 0x00e4
+ textpointer Text00e5 ; 0x00e5
+ textpointer Text00e6 ; 0x00e6
+ textpointer Text00e7 ; 0x00e7
+ textpointer Text00e8 ; 0x00e8
+ textpointer IfHeadPlus10IfTails10ToYourselfText ; 0x00e9
+ textpointer Text00ea ; 0x00ea
+ textpointer Text00eb ; 0x00eb
+ textpointer Text00ec ; 0x00ec
+ textpointer Text00ed ; 0x00ed
+ textpointer Text00ee ; 0x00ee
+ textpointer TrainerCardSuccessCheckText ; 0x00ef
+ textpointer Text00f0 ; 0x00f0
+ textpointer IfHeadsNoDamageNextTurnText ; 0x00f1
+ textpointer Text00f2 ; 0x00f2
+ textpointer DamageCheckIfHeadsPlusDamageText ; 0x00f3
+ textpointer DamageCheckIfHeadsXDamageText ; 0x00f4
+ textpointer AcidCheckText ; 0x00f5
+ textpointer TransparencyCheckText ; 0x00f6
+ textpointer ConfusionCheckDamageText ; 0x00f7
+ textpointer ConfusionCheckRetreatText ; 0x00f8
+ textpointer PokemonsSleepCheckText ; 0x00f9
+ textpointer PoisonedIfHeadsConfusedIfTailsText ; 0x00fa
+ textpointer Text00fb ; 0x00fb
+ textpointer Text00fc ; 0x00fc
+ textpointer AttackUnsuccessfulText ; 0x00fd
+ textpointer UnableToRetreatDueToAcidText ; 0x00fe
+ textpointer UnableToUseTrainerDueToHeadacheText ; 0x00ff
+ textpointer UnableToAttackDueToTailWagText ; 0x0100
+ textpointer UnableToAttackDueToLeerText ; 0x0101
+ textpointer UnableToAttackDueToBoneAttackText ; 0x0102
+ textpointer UnableToUseAttackDueToAmnesiaText ; 0x0103
+ textpointer KnockedOutDueToDestinyBondText ; 0x0104
+ textpointer ReceivesDamageDueToStrikesBackText ; 0x0105
+ textpointer UnableToEvolveDueToPrehistoricPowerText ; 0x0106
+ textpointer NoDamageOrEffectDueToFlyText ; 0x0107
+ textpointer NoDamageOrEffectDueToBarrierText ; 0x0108
+ textpointer NoDamageOrEffectDueToAgilityText ; 0x0109
+ textpointer UnableToUseAttackDueToNShieldText ; 0x010a
+ textpointer NoDamageOrEffectDueToNShieldText ; 0x010b
+ textpointer NoDamageOrEffectDueToTransparencyText ; 0x010c
+ textpointer Text010d ; 0x010d
+ textpointer SelectPkmnOnBenchToSwitchWithActiveText ; 0x010e
+ textpointer SelectPokemonToPlaceInTheArenaText ; 0x010f
+ textpointer DuelistIsSelectingPokemonToPlaceInArenaText ; 0x0110
+ textpointer Text0111 ; 0x0111
+ textpointer Text0112 ; 0x0112
+ textpointer Text0113 ; 0x0113
+ textpointer Text0114 ; 0x0114
+ textpointer Text0115 ; 0x0115
+ textpointer Text0116 ; 0x0116
+ textpointer Text0117 ; 0x0117
+ textpointer DrawCardsFromTheDeckText ; 0x0118
+ textpointer CannotDrawCardBecauseNoCardsInDeckText ; 0x0119
+ textpointer Text011a ; 0x011a
+ textpointer Text011b ; 0x011b
+ textpointer Text011c ; 0x011c
+ textpointer Text011d ; 0x011d
+ textpointer Text011e ; 0x011e
+ textpointer Text011f ; 0x011f
+ textpointer Text0120 ; 0x0120
+ textpointer Text0121 ; 0x0121
+ textpointer Text0122 ; 0x0122
+ textpointer Text0123 ; 0x0123
+ textpointer Text0124 ; 0x0124
+ textpointer Text0125 ; 0x0125
+ textpointer Text0126 ; 0x0126
+ textpointer Text0127 ; 0x0127
+ textpointer Text0128 ; 0x0128
+ textpointer Text0129 ; 0x0129
+ textpointer Text012a ; 0x012a
+ textpointer Text012b ; 0x012b
+ textpointer Text012c ; 0x012c
+ textpointer Text012d ; 0x012d
+ textpointer Text012e ; 0x012e
+ textpointer Text012f ; 0x012f
+ textpointer Text0130 ; 0x0130
+ textpointer Text0131 ; 0x0131
+ textpointer Text0132 ; 0x0132
+ textpointer Text0133 ; 0x0133
+ textpointer Text0134 ; 0x0134
+ textpointer Text0135 ; 0x0135
+ textpointer Text0136 ; 0x0136
+ textpointer Text0137 ; 0x0137
+ textpointer Text0138 ; 0x0138
+ textpointer Text0139 ; 0x0139
+ textpointer Text013a ; 0x013a
+ textpointer Text013b ; 0x013b
+ textpointer Text013c ; 0x013c
+ textpointer Text013d ; 0x013d
+ textpointer Text013e ; 0x013e
+ textpointer Text013f ; 0x013f
+ textpointer Text0140 ; 0x0140
+ textpointer Text0141 ; 0x0141
+ textpointer Text0142 ; 0x0142
+ textpointer Text0143 ; 0x0143
+ textpointer Text0144 ; 0x0144
+ textpointer Text0145 ; 0x0145
+ textpointer Text0146 ; 0x0146
+ textpointer Text0147 ; 0x0147
+ textpointer Text0148 ; 0x0148
+ textpointer Text0149 ; 0x0149
+ textpointer WasUnsuccessfulText ; 0x014a
+ textpointer ThereWasNoEffectFromTxRam2Text ; 0x014b
+ textpointer Text014c ; 0x014c
+ textpointer Text014d ; 0x014d
+ textpointer Text014e ; 0x014e
+ textpointer Text014f ; 0x014f
+ textpointer Text0150 ; 0x0150
+ textpointer Text0151 ; 0x0151
+ textpointer Text0152 ; 0x0152
+ textpointer Text0153 ; 0x0153
+ textpointer Text0154 ; 0x0154
+ textpointer Text0155 ; 0x0155
+ textpointer Text0156 ; 0x0156
+ textpointer Text0157 ; 0x0157
+ textpointer Text0158 ; 0x0158
+ textpointer Text0159 ; 0x0159
+ textpointer Text015a ; 0x015a
+ textpointer Text015b ; 0x015b
+ textpointer Text015c ; 0x015c
+ textpointer Text015d ; 0x015d
+ textpointer Text015e ; 0x015e
+ textpointer Text015f ; 0x015f
+ textpointer Text0160 ; 0x0160
+ textpointer Text0161 ; 0x0161
+ textpointer Text0162 ; 0x0162
+ textpointer Text0163 ; 0x0163
+ textpointer Text0164 ; 0x0164
+ textpointer Text0165 ; 0x0165
+ textpointer Text0166 ; 0x0166
+ textpointer Text0167 ; 0x0167
+ textpointer Text0168 ; 0x0168
+ textpointer Text0169 ; 0x0169
+ textpointer Text016a ; 0x016a
+ textpointer Text016b ; 0x016b
+ textpointer Text016c ; 0x016c
+ textpointer Text016d ; 0x016d
+ textpointer Text016e ; 0x016e
+ textpointer Text016f ; 0x016f
+ textpointer TheCardYouReceivedText ; 0x0170
+ textpointer YouReceivedTheseCardsText ; 0x0171
+ textpointer Text0172 ; 0x0172
+ textpointer Text0173 ; 0x0173
+ textpointer Text0174 ; 0x0174
+ textpointer Text0175 ; 0x0175
+ textpointer Text0176 ; 0x0176
+ textpointer Text0177 ; 0x0177
+ textpointer Text0178 ; 0x0178
+ textpointer Text0179 ; 0x0179
+ textpointer Text017a ; 0x017a
+ textpointer Text017b ; 0x017b
+ textpointer Text017c ; 0x017c
+ textpointer Text017d ; 0x017d
+ textpointer ThereWasNoEffectFromToxicText ; 0x017e
+ textpointer ThereWasNoEffectFromPoisonText ; 0x017f
+ textpointer ThereWasNoEffectFromSleepText ; 0x0180
+ textpointer ThereWasNoEffectFromParalysisText ; 0x0181
+ textpointer ThereWasNoEffectFromConfusionText ; 0x0182
+ textpointer ThereWasNoEffectFromPoisonConfusionText ; 0x0183
+ textpointer Text0184 ; 0x0184
+ textpointer Text0185 ; 0x0185
+ textpointer Text0186 ; 0x0186
+ textpointer Text0187 ; 0x0187
+ textpointer Text0188 ; 0x0188
+ textpointer Text0189 ; 0x0189
+ textpointer Text018a ; 0x018a
+ textpointer Text018b ; 0x018b
+ textpointer Text018c ; 0x018c
+ textpointer Text018d ; 0x018d
+ textpointer Text018e ; 0x018e
+ textpointer ReceivedCardText ; 0x018f
+ textpointer ReceivedPromotionalCardText ; 0x0190
+ textpointer ReceivedLegendaryCardText ; 0x0191
+ textpointer ReceivedPromotionalFlyingPikachuText ; 0x0192
+ textpointer ReceivedPromotionalSurfingPikachuText ; 0x0193
+ textpointer Text0194 ; 0x0194
+ textpointer Text0195 ; 0x0195
+ textpointer Text0196 ; 0x0196
+ textpointer Text0197 ; 0x0197
+ textpointer Text0198 ; 0x0198
+ textpointer Text0199 ; 0x0199
+ textpointer Text019a ; 0x019a
+ textpointer Text019b ; 0x019b
+ textpointer Text019c ; 0x019c
+ textpointer Text019d ; 0x019d
+ textpointer Text019e ; 0x019e
+ textpointer Text019f ; 0x019f
+ textpointer Text01a0 ; 0x01a0
+ textpointer Text01a1 ; 0x01a1
+ textpointer Text01a2 ; 0x01a2
+ textpointer DrMasonText ; 0x01a3
+ textpointer DrawSevenCardsPracticeDuelText ; 0x01a4
+ textpointer ChooseGoldeenPracticeDuelText ; 0x01a5
+ textpointer PutPokemonOnBenchPracticeDuelText ; 0x01a6
+ textpointer ChooseStaryuPracticeDuelText ; 0x01a7
+ textpointer PressBToFinishPracticeDuelText ; 0x01a8
+ textpointer Turn1Instr1PracticeDuelText ; 0x01a9
+ textpointer Turn1Instr2PracticeDuelText ; 0x01aa
+ textpointer Turn1Instr3PracticeDuelText ; 0x01ab
+ textpointer Turn2Instr1PracticeDuelText ; 0x01ac
+ textpointer Turn2Instr2PracticeDuelText ; 0x01ad
+ textpointer Turn2Instr3PracticeDuelText ; 0x01ae
+ textpointer Turn3Instr1PracticeDuelText ; 0x01af
+ textpointer Turn3Instr2PracticeDuelText ; 0x01b0
+ textpointer Turn3Instr3PracticeDuelText ; 0x01b1
+ textpointer Turn4Instr1PracticeDuelText ; 0x01b2
+ textpointer Turn4Instr2PracticeDuelText ; 0x01b3
+ textpointer Turn4Instr3PracticeDuelText ; 0x01b4
+ textpointer Turn5Instr1PracticeDuelText ; 0x01b5
+ textpointer Turn5Instr2PracticeDuelText ; 0x01b6
+ textpointer Turn6Instr1PracticeDuelText ; 0x01b7
+ textpointer Turn6Instr2PracticeDuelText ; 0x01b8
+ textpointer Turn6Instr3PracticeDuelText ; 0x01b9
+ textpointer Turn7Instr1PracticeDuelText ; 0x01ba
+ textpointer Turn7Instr2PracticeDuelText ; 0x01bb
+ textpointer Turn8Instr1PracticeDuelText ; 0x01bc
+ textpointer Turn8Instr2PracticeDuelText ; 0x01bd
+ textpointer SamTurn4Instr1PracticeDuelText ; 0x01be
+ textpointer SamTurn4Instr2PracticeDuelText ; 0x01bf
+ textpointer Turn1DrMason1PracticeDuelText ; 0x01c0
+ textpointer Turn1DrMason2PracticeDuelText ; 0x01c1
+ textpointer Turn1DrMason3PracticeDuelText ; 0x01c2
+ textpointer Turn2DrMason1PracticeDuelText ; 0x01c3
+ textpointer Turn2DrMason2PracticeDuelText ; 0x01c4
+ textpointer Turn2DrMason3PracticeDuelText ; 0x01c5
+ textpointer Turn3DrMason1PracticeDuelText ; 0x01c6
+ textpointer Turn3DrMason2PracticeDuelText ; 0x01c7
+ textpointer Turn3DrMason3PracticeDuelText ; 0x01c8
+ textpointer Turn4DrMason1PracticeDuelText ; 0x01c9
+ textpointer Turn4DrMason2PracticeDuelText ; 0x01ca
+ textpointer Turn4DrMason3PracticeDuelText ; 0x01cb
+ textpointer Turn5DrMason1PracticeDuelText ; 0x01cc
+ textpointer Turn5DrMason2PracticeDuelText ; 0x01cd
+ textpointer Turn6DrMason1PracticeDuelText ; 0x01ce
+ textpointer Turn6DrMason2PracticeDuelText ; 0x01cf
+ textpointer Turn6DrMason3PracticeDuelText ; 0x01d0
+ textpointer Turn7DrMason1PracticeDuelText ; 0x01d1
+ textpointer Turn7DrMason2PracticeDuelText ; 0x01d2
+ textpointer Turn8DrMason1PracticeDuelText ; 0x01d3
+ textpointer Turn8DrMason2PracticeDuelText ; 0x01d4
+ textpointer SamTurn4DrMason1PracticeDuelText ; 0x01d5
+ textpointer SamTurn4DrMason2PracticeDuelText ; 0x01d6
+ textpointer SelectStaryuPracticeDuelText ; 0x01d7
+ textpointer LetsPlayTheGamePracticeDuelText ; 0x01d8
+ textpointer NeedPracticeAgainPracticeDuelText ; 0x01d9
+ textpointer FollowMyGuidancePracticeDuelText ; 0x01da
+ textpointer PlayersTurnPracticeDuelText ; 0x01db
+ textpointer ReplaceDueToKnockoutPracticeDuelText ; 0x01dc
+ textpointer Text01dd ; 0x01dd
+ textpointer PracticePlayerDeckName ; 0x01de
+ textpointer SamsPracticeDeckName ; 0x01df
+ textpointer CharmanderAndFriendsDeckName ; 0x01e0
+ textpointer CharmanderExtraDeckName ; 0x01e1
+ textpointer SquirtleAndFriendsDeckName ; 0x01e2
+ textpointer SquirtleExtraDeckName ; 0x01e3
+ textpointer BulbasaurAndFriendsDeckName ; 0x01e4
+ textpointer BulbasaurExtraDeckName ; 0x01e5
+ textpointer FirstStrikeDeckName ; 0x01e6
+ textpointer RockCrusherDeckName ; 0x01e7
+ textpointer GoGoRainDanceDeckName ; 0x01e8
+ textpointer ZappingSelfdestructDeckName ; 0x01e9
+ textpointer FlowerPowerDeckName ; 0x01ea
+ textpointer StrangePsyshockDeckName ; 0x01eb
+ textpointer WondersofScienceDeckName ; 0x01ec
+ textpointer FireChargeDeckName ; 0x01ed
+ textpointer LegendaryMoltresDeckName ; 0x01ee
+ textpointer LegendaryZapdosDeckName ; 0x01ef
+ textpointer LegendaryArticunoDeckName ; 0x01f0
+ textpointer LegendaryDragoniteDeckName ; 0x01f1
+ textpointer ImRonaldDeckName ; 0x01f2
+ textpointer PowerfulRonaldDeckName ; 0x01f3
+ textpointer InvincibleRonaldDeckName ; 0x01f4
+ textpointer LegendaryRonaldDeckName ; 0x01f5
+ textpointer WaterfrontPokemonDeckName ; 0x01f6
+ textpointer LonelyFriendsDeckName ; 0x01f7
+ textpointer SoundoftheWavesDeckName ; 0x01f8
+ textpointer AngerDeckName ; 0x01f9
+ textpointer FlamethrowerDeckName ; 0x01fa
+ textpointer ReshuffleDeckName ; 0x01fb
+ textpointer ExcavationDeckName ; 0x01fc
+ textpointer BlisteringPokemonDeckName ; 0x01fd
+ textpointer HardPokemonDeckName ; 0x01fe
+ textpointer EtceteraDeckName ; 0x01ff
+ textpointer FlowerGardenDeckName ; 0x0200
+ textpointer KaleidoscopeDeckName ; 0x0201
+ textpointer MusclesforBrainsDeckName ; 0x0202
+ textpointer HeatedBattleDeckName ; 0x0203
+ textpointer LovetoBattleDeckName ; 0x0204
+ textpointer PikachuDeckName ; 0x0205
+ textpointer BoomBoomSelfdestructDeckName ; 0x0206
+ textpointer PowerGeneratorDeckName ; 0x0207
+ textpointer GhostDeckName ; 0x0208
+ textpointer NapTimeDeckName ; 0x0209
+ textpointer StrangePowerDeckName ; 0x020a
+ textpointer FlyinPokemonDeckName ; 0x020b
+ textpointer LovelyNidoranDeckName ; 0x020c
+ textpointer PoisonDeckName ; 0x020d
+ textpointer ImakuniDeckName ; 0x020e
+ textpointer LightningAndFireDeckName ; 0x020f
+ textpointer WaterAndFightingDeckName ; 0x0210
+ textpointer GrassAndPsychicDeckName ; 0x0211
+ textpointer RetreatCostText ; 0x0212
+ textpointer Text0213 ; 0x0213
+ textpointer Text0214 ; 0x0214
+ textpointer FeetText ; 0x0215
+ textpointer InchesText ; 0x0216
+ textpointer YourDiscardPileText ; 0x0217
+ textpointer OpponentsDiscardPileText ; 0x0218
+ textpointer Text0219 ; 0x0219
+ textpointer Text021a ; 0x021a
+ textpointer Text021b ; 0x021b
+ textpointer Text021c ; 0x021c
+ textpointer EndText ; 0x021d
+ textpointer WhatIsYourNameText ; 0x021e
+ textpointer Text021f ; 0x021f
+ textpointer Text0220 ; 0x0220
+ textpointer Text0221 ; 0x0221
+ textpointer NamingScreenKeyboardText ; 0x0222
+ textpointer NewDeckText ; 0x0223
+ textpointer PleaseSelectDeckText ; 0x0224
+ textpointer Text0225 ; 0x0225
+ textpointer Text0226 ; 0x0226
+ textpointer Text0227 ; 0x0227
+ textpointer Text0228 ; 0x0228
+ textpointer Text0229 ; 0x0229
+ textpointer ChosenAsDuelingDeckText ; 0x022a
+ textpointer Text022b ; 0x022b
+ textpointer Text022c ; 0x022c
+ textpointer Text022d ; 0x022d
+ textpointer Text022e ; 0x022e
+ textpointer ThereIsNoDeckHereText ; 0x022f
+ textpointer Text0230 ; 0x0230
+ textpointer Text0231 ; 0x0231
+ textpointer Text0232 ; 0x0232
+ textpointer Text0233 ; 0x0233
+ textpointer Text0234 ; 0x0234
+ textpointer Text0235 ; 0x0235
+ textpointer Text0236 ; 0x0236
+ textpointer Text0237 ; 0x0237
+ textpointer Text0238 ; 0x0238
+ textpointer Text0239 ; 0x0239
+ textpointer Text023a ; 0x023a
+ textpointer Text023b ; 0x023b
+ textpointer Text023c ; 0x023c
+ textpointer Text023d ; 0x023d
+ textpointer Text023e ; 0x023e
+ textpointer YourPokemonText ; 0x023f
+ textpointer YourDiscardPileText2 ; 0x0240
+ textpointer YourHandText ; 0x0241
+ textpointer Text0242 ; 0x0242
+ textpointer OpponentsPokemonText ; 0x0243
+ textpointer OpponentsDiscardPileText2 ; 0x0244
+ textpointer OpponentsHandText ; 0x0245
+ textpointer Text0246 ; 0x0246
+ textpointer DuelistsPlayAreaText ; 0x0247
+ textpointer YourPlayAreaText ; 0x0248
+ textpointer OppPlayAreaText ; 0x0249
+ textpointer InPlayAreaText ; 0x024a
+ textpointer GlossaryText ; 0x024b
+ textpointer WhichCardWouldYouLikeToSeeText ; 0x024c
+ textpointer Text024d ; 0x024d
+ textpointer HandText_2 ; 0x024e
+ textpointer DuelistHandText_2 ; 0x024f
+ textpointer DuelistDiscardPileText ; 0x0250
+ textpointer EmptyLineText ; 0x0251
+ textpointer Text0252 ; 0x0252
+ textpointer Text0253 ; 0x0253
+ textpointer Text0254 ; 0x0254
+ textpointer Text0255 ; 0x0255
+ textpointer Text0256 ; 0x0256
+ textpointer Text0257 ; 0x0257
+ textpointer Text0258 ; 0x0258
+ textpointer Text0259 ; 0x0259
+ textpointer Text025a ; 0x025a
+ textpointer Text025b ; 0x025b
+ textpointer Text025c ; 0x025c
+ textpointer Text025d ; 0x025d
+ textpointer Text025e ; 0x025e
+ textpointer Text025f ; 0x025f
+ textpointer Text0260 ; 0x0260
+ textpointer Text0261 ; 0x0261
+ textpointer Text0262 ; 0x0262
+ textpointer Text0263 ; 0x0263
+ textpointer Text0264 ; 0x0264
+ textpointer Text0265 ; 0x0265
+ textpointer Text0266 ; 0x0266
+ textpointer Text0267 ; 0x0267
+ textpointer Text0268 ; 0x0268
+ textpointer Text0269 ; 0x0269
+ textpointer Text026a ; 0x026a
+ textpointer Text026b ; 0x026b
+ textpointer Text026c ; 0x026c
+ textpointer Text026d ; 0x026d
+ textpointer Text026e ; 0x026e
+ textpointer Text026f ; 0x026f
+ textpointer Text0270 ; 0x0270
+ textpointer Text0271 ; 0x0271
+ textpointer Text0272 ; 0x0272
+ textpointer Text0273 ; 0x0273
+ textpointer Text0274 ; 0x0274
+ textpointer Text0275 ; 0x0275
+ textpointer Text0276 ; 0x0276
+ textpointer Text0277 ; 0x0277
+ textpointer Text0278 ; 0x0278
+ textpointer Text0279 ; 0x0279
+ textpointer Text027a ; 0x027a
+ textpointer Text027b ; 0x027b
+ textpointer Text027c ; 0x027c
+ textpointer Text027d ; 0x027d
+ textpointer Text027e ; 0x027e
+ textpointer Text027f ; 0x027f
+ textpointer Text0280 ; 0x0280
+ textpointer Text0281 ; 0x0281
+ textpointer Text0282 ; 0x0282
+ textpointer Text0283 ; 0x0283
+ textpointer Text0284 ; 0x0284
+ textpointer Text0285 ; 0x0285
+ textpointer Text0286 ; 0x0286
+ textpointer Text0287 ; 0x0287
+ textpointer Text0288 ; 0x0288
+ textpointer Text0289 ; 0x0289
+ textpointer Text028a ; 0x028a
+ textpointer Text028b ; 0x028b
+ textpointer Text028c ; 0x028c
+ textpointer Text028d ; 0x028d
+ textpointer Text028e ; 0x028e
+ textpointer Text028f ; 0x028f
+ textpointer Text0290 ; 0x0290
+ textpointer Text0291 ; 0x0291
+ textpointer Text0292 ; 0x0292
+ textpointer Text0293 ; 0x0293
+ textpointer Text0294 ; 0x0294
+ textpointer Text0295 ; 0x0295
+ textpointer Text0296 ; 0x0296
+ textpointer Text0297 ; 0x0297
+ textpointer Text0298 ; 0x0298
+ textpointer Text0299 ; 0x0299
+ textpointer Text029a ; 0x029a
+ textpointer Text029b ; 0x029b
+ textpointer Text029c ; 0x029c
+ textpointer Text029d ; 0x029d
+ textpointer Text029e ; 0x029e
+ textpointer Text029f ; 0x029f
+ textpointer Text02a0 ; 0x02a0
+ textpointer Text02a1 ; 0x02a1
+ textpointer Text02a2 ; 0x02a2
+ textpointer Text02a3 ; 0x02a3
+ textpointer Text02a4 ; 0x02a4
+ textpointer Text02a5 ; 0x02a5
+ textpointer Text02a6 ; 0x02a6
+ textpointer Text02a7 ; 0x02a7
+ textpointer Text02a8 ; 0x02a8
+ textpointer Text02a9 ; 0x02a9
+ textpointer Text02aa ; 0x02aa
+ textpointer Text02ab ; 0x02ab
+ textpointer Text02ac ; 0x02ac
+ textpointer Text02ad ; 0x02ad
+ textpointer Text02ae ; 0x02ae
+ textpointer Text02af ; 0x02af
+ textpointer Text02b0 ; 0x02b0
+ textpointer Text02b1 ; 0x02b1
+ textpointer Text02b2 ; 0x02b2
+ textpointer Text02b3 ; 0x02b3
+ textpointer Text02b4 ; 0x02b4
+ textpointer Text02b5 ; 0x02b5
+ textpointer Text02b6 ; 0x02b6
+ textpointer Text02b7 ; 0x02b7
+ textpointer Text02b8 ; 0x02b8
+ textpointer Text02b9 ; 0x02b9
+ textpointer Text02ba ; 0x02ba
+ textpointer Text02bb ; 0x02bb
+ textpointer Text02bc ; 0x02bc
+ textpointer Text02bd ; 0x02bd
+ textpointer Text02be ; 0x02be
+ textpointer Text02bf ; 0x02bf
+ textpointer Text02c0 ; 0x02c0
+ textpointer Text02c1 ; 0x02c1
+ textpointer Text02c2 ; 0x02c2
+ textpointer Text02c3 ; 0x02c3
+ textpointer Text02c4 ; 0x02c4
+ textpointer Text02c5 ; 0x02c5
+ textpointer Text02c6 ; 0x02c6
+ textpointer Text02c7 ; 0x02c7
+ textpointer Text02c8 ; 0x02c8
+ textpointer Text02c9 ; 0x02c9
+ textpointer Text02ca ; 0x02ca
+ textpointer Text02cb ; 0x02cb
+ textpointer Text02cc ; 0x02cc
+ textpointer Text02cd ; 0x02cd
+ textpointer Text02ce ; 0x02ce
+ textpointer Text02cf ; 0x02cf
+ textpointer Text02d0 ; 0x02d0
+ textpointer Text02d1 ; 0x02d1
+ textpointer Text02d2 ; 0x02d2
+ textpointer Text02d3 ; 0x02d3
+ textpointer Text02d4 ; 0x02d4
+ textpointer Text02d5 ; 0x02d5
+ textpointer Text02d6 ; 0x02d6
+ textpointer Text02d7 ; 0x02d7
+ textpointer Text02d8 ; 0x02d8
+ textpointer Text02d9 ; 0x02d9
+ textpointer Text02da ; 0x02da
+ textpointer Text02db ; 0x02db
+ textpointer Text02dc ; 0x02dc
+ textpointer Text02dd ; 0x02dd
+ textpointer Text02de ; 0x02de
+ textpointer Text02df ; 0x02df
+ textpointer Text02e0 ; 0x02e0
+ textpointer Text02e1 ; 0x02e1
+ textpointer Text02e2 ; 0x02e2
+ textpointer Text02e3 ; 0x02e3
+ textpointer Text02e4 ; 0x02e4
+ textpointer Text02e5 ; 0x02e5
+ textpointer Text02e6 ; 0x02e6
+ textpointer Text02e7 ; 0x02e7
+ textpointer Text02e8 ; 0x02e8
+ textpointer Text02e9 ; 0x02e9
+ textpointer Text02ea ; 0x02ea
+ textpointer Text02eb ; 0x02eb
+ textpointer Text02ec ; 0x02ec
+ textpointer Text02ed ; 0x02ed
+ textpointer Text02ee ; 0x02ee
+ textpointer Text02ef ; 0x02ef
+ textpointer Text02f0 ; 0x02f0
+ textpointer Text02f1 ; 0x02f1
+ textpointer Text02f2 ; 0x02f2
+ textpointer Text02f3 ; 0x02f3
+ textpointer Text02f4 ; 0x02f4
+ textpointer Text02f5 ; 0x02f5
+ textpointer PokemonCardGlossaryText ; 0x02f6
+ textpointer GlossaryMenuPage1Text ; 0x02f7
+ textpointer GlossaryMenuPage2Text ; 0x02f8
+ textpointer ChooseWordAndPressAButtonText ; 0x02f9
+ textpointer Text02fa ; 0x02fa
+ textpointer Text02fb ; 0x02fb
+ textpointer Text02fc ; 0x02fc
+ textpointer Text02fd ; 0x02fd
+ textpointer Text02fe ; 0x02fe
+ textpointer Text02ff ; 0x02ff
+ textpointer Text0300 ; 0x0300
+ textpointer Text0301 ; 0x0301
+ textpointer Text0302 ; 0x0302
+ textpointer Text0303 ; 0x0303
+ textpointer Text0304 ; 0x0304
+ textpointer Text0305 ; 0x0305
+ textpointer Text0306 ; 0x0306
+ textpointer Text0307 ; 0x0307
+ textpointer Text0308 ; 0x0308
+ textpointer Text0309 ; 0x0309
+ textpointer Text030a ; 0x030a
+ textpointer Text030b ; 0x030b
+ textpointer Text030c ; 0x030c
+ textpointer Text030d ; 0x030d
+ textpointer Text030e ; 0x030e
+ textpointer Text030f ; 0x030f
+ textpointer Text0310 ; 0x0310
+ textpointer Text0311 ; 0x0311
+ textpointer Text0312 ; 0x0312
+ textpointer Text0313 ; 0x0313
+ textpointer Text0314 ; 0x0314
+ textpointer Text0315 ; 0x0315
+ textpointer Text0316 ; 0x0316
+ textpointer Text0317 ; 0x0317
+ textpointer Text0318 ; 0x0318
+ textpointer Text0319 ; 0x0319
+ textpointer Text031a ; 0x031a
+ textpointer Text031b ; 0x031b
+ textpointer Text031c ; 0x031c
+ textpointer Text031d ; 0x031d
+ textpointer Text031e ; 0x031e
+ textpointer Text031f ; 0x031f
+ textpointer Text0320 ; 0x0320
+ textpointer Text0321 ; 0x0321
+ textpointer Text0322 ; 0x0322
+ textpointer Text0323 ; 0x0323
+ textpointer Text0324 ; 0x0324
+ textpointer Text0325 ; 0x0325
+ textpointer Text0326 ; 0x0326
+ textpointer Text0327 ; 0x0327
+ textpointer Text0328 ; 0x0328
+ textpointer Text0329 ; 0x0329
+ textpointer Text032a ; 0x032a
+ textpointer Text032b ; 0x032b
+ textpointer Text032c ; 0x032c
+ textpointer Text032d ; 0x032d
+ textpointer Text032e ; 0x032e
+ textpointer Text032f ; 0x032f
+ textpointer Text0330 ; 0x0330
+ textpointer Text0331 ; 0x0331
+ textpointer Text0332 ; 0x0332
+ textpointer Text0333 ; 0x0333
+ textpointer Text0334 ; 0x0334
+ textpointer Text0335 ; 0x0335
+ textpointer Text0336 ; 0x0336
+ textpointer Text0337 ; 0x0337
+ textpointer Text0338 ; 0x0338
+ textpointer Text0339 ; 0x0339
+ textpointer Text033a ; 0x033a
+ textpointer Text033b ; 0x033b
+ textpointer Text033c ; 0x033c
+ textpointer Text033d ; 0x033d
+ textpointer Text033e ; 0x033e
+ textpointer PlayerStatusNameText ; 0x033f
+ textpointer PlayerStatusAlbumText ; 0x0340
+ textpointer PlayerStatusPlayTimeText ; 0x0341
+ textpointer PlayerDiaryTitleText ; 0x0342
+ textpointer PlayerDiaryMedalsWonText ; 0x0343
+ textpointer PlayerDiarySaveQuestionText ; 0x0344
+ textpointer PlayerDiarySaveConfirmText ; 0x0345
+ textpointer PlayerDiarySaveCancelText ; 0x0346
+ textpointer PlayerStatusMedalsTitleText ; 0x0347
+ textpointer ConfigMenuTitleText ; 0x0348
+ textpointer ConfigMenuMessageSpeedText ; 0x0349
+ textpointer ConfigMenuDuelAnimationText ; 0x034a
+ textpointer ConfigMenuExitText ; 0x034b
+ textpointer Text034c ; 0x034c
+ textpointer Text034d ; 0x034d
+ textpointer Text034e ; 0x034e
+ textpointer Text034f ; 0x034f
+ textpointer Text0350 ; 0x0350
+ textpointer Text0351 ; 0x0351
+ textpointer TurnedPCOnText ; 0x0352
+ textpointer TurnedPCOffText ; 0x0353
+ textpointer Text0354 ; 0x0354
+ textpointer Text0355 ; 0x0355
+ textpointer Text0356 ; 0x0356
+ textpointer Text0357 ; 0x0357
+ textpointer Text0358 ; 0x0358
+ textpointer Text0359 ; 0x0359
+ textpointer Text035a ; 0x035a
+ textpointer Text035b ; 0x035b
+ textpointer Text035c ; 0x035c
+ textpointer Text035d ; 0x035d
+ textpointer Text035e ; 0x035e
+ textpointer Text035f ; 0x035f
+ textpointer Text0360 ; 0x0360
+ textpointer Text0361 ; 0x0361
+ textpointer Text0362 ; 0x0362
+ textpointer Text0363 ; 0x0363
+ textpointer Text0364 ; 0x0364
+ textpointer Text0365 ; 0x0365
+ textpointer Text0366 ; 0x0366
+ textpointer Text0367 ; 0x0367
+ textpointer Text0368 ; 0x0368
+ textpointer Text0369 ; 0x0369
+ textpointer Text036a ; 0x036a
+ textpointer Text036b ; 0x036b
+ textpointer Text036c ; 0x036c
+ textpointer Text036d ; 0x036d
+ textpointer Text036e ; 0x036e
+ textpointer Text036f ; 0x036f
+ textpointer Text0370 ; 0x0370
+ textpointer Text0371 ; 0x0371
+ textpointer Text0372 ; 0x0372
+ textpointer Text0373 ; 0x0373
+ textpointer Text0374 ; 0x0374
+ textpointer Text0375 ; 0x0375
+ textpointer Text0376 ; 0x0376
+ textpointer Text0377 ; 0x0377
+ textpointer Text0378 ; 0x0378
+ textpointer Text0379 ; 0x0379
+ textpointer Text037a ; 0x037a
+ textpointer Text037b ; 0x037b
+ textpointer Text037c ; 0x037c
+ textpointer Text037d ; 0x037d
+ textpointer Text037e ; 0x037e
+ textpointer Text037f ; 0x037f
+ textpointer Text0380 ; 0x0380
+ textpointer Text0381 ; 0x0381
+ textpointer Text0382 ; 0x0382
+ textpointer Text0383 ; 0x0383
+ textpointer Text0384 ; 0x0384
+ textpointer Text0385 ; 0x0385
+ textpointer Text0386 ; 0x0386
+ textpointer ReceivedBoosterPackText ; 0x0387
+ textpointer AndAnotherBoosterPackText ; 0x0388
+ textpointer CheckedCardsInBoosterPackText ; 0x0389
+ textpointer Text038a ; 0x038a
+ textpointer WonTheMedalText ; 0x038b
+ textpointer Text038c ; 0x038c
+ textpointer Text038d ; 0x038d
+ textpointer Text038e ; 0x038e
+ textpointer Text038f ; 0x038f
+ textpointer Text0390 ; 0x0390
+ textpointer Text0391 ; 0x0391
+ textpointer Text0392 ; 0x0392
+ textpointer Text0393 ; 0x0393
+ textpointer Text0394 ; 0x0394
+ textpointer Text0395 ; 0x0395
+ textpointer Text0396 ; 0x0396
+ textpointer Text0397 ; 0x0397
+ textpointer Text0398 ; 0x0398
+ textpointer Text0399 ; 0x0399
+ textpointer Text039a ; 0x039a
+ textpointer Text039b ; 0x039b
+ textpointer Text039c ; 0x039c
+ textpointer Text039d ; 0x039d
+ textpointer Text039e ; 0x039e
+ textpointer Text039f ; 0x039f
+ textpointer Text03a0 ; 0x03a0
+ textpointer Text03a1 ; 0x03a1
+ textpointer Text03a2 ; 0x03a2
+ textpointer Text03a3 ; 0x03a3
+ textpointer Text03a4 ; 0x03a4
+ textpointer Text03a5 ; 0x03a5
+ textpointer Text03a6 ; 0x03a6
+ textpointer Text03a7 ; 0x03a7
+ textpointer Text03a8 ; 0x03a8
+ textpointer Text03a9 ; 0x03a9
+ textpointer Text03aa ; 0x03aa
+ textpointer Text03ab ; 0x03ab
+ textpointer Text03ac ; 0x03ac
+ textpointer Text03ad ; 0x03ad
+ textpointer Text03ae ; 0x03ae
+ textpointer Text03af ; 0x03af
+ textpointer Text03b0 ; 0x03b0
+ textpointer Text03b1 ; 0x03b1
+ textpointer Text03b2 ; 0x03b2
+ textpointer Text03b3 ; 0x03b3
+ textpointer Text03b4 ; 0x03b4
+ textpointer Text03b5 ; 0x03b5
+ textpointer Text03b6 ; 0x03b6
+ textpointer Text03b7 ; 0x03b7
+ textpointer Text03b8 ; 0x03b8
+ textpointer Text03b9 ; 0x03b9
+ textpointer Text03ba ; 0x03ba
+ textpointer Text03bb ; 0x03bb
+ textpointer Text03bc ; 0x03bc
+ textpointer Text03bd ; 0x03bd
+ textpointer Text03be ; 0x03be
+ textpointer Text03bf ; 0x03bf
+ textpointer Text03c0 ; 0x03c0
+ textpointer Text03c1 ; 0x03c1
+ textpointer Text03c2 ; 0x03c2
+ textpointer Text03c3 ; 0x03c3
+ textpointer Text03c4 ; 0x03c4
+ textpointer Text03c5 ; 0x03c5
+ textpointer Text03c6 ; 0x03c6
+ textpointer Text03c7 ; 0x03c7
+ textpointer Text03c8 ; 0x03c8
+ textpointer Text03c9 ; 0x03c9
+ textpointer Text03ca ; 0x03ca
+ textpointer Text03cb ; 0x03cb
+ textpointer Text03cc ; 0x03cc
+ textpointer Text03cd ; 0x03cd
+ textpointer Text03ce ; 0x03ce
+ textpointer Text03cf ; 0x03cf
+ textpointer Text03d0 ; 0x03d0
+ textpointer Text03d1 ; 0x03d1
+ textpointer Text03d2 ; 0x03d2
+ textpointer Text03d3 ; 0x03d3
+ textpointer Text03d4 ; 0x03d4
+ textpointer Text03d5 ; 0x03d5
+ textpointer Text03d6 ; 0x03d6
+ textpointer Text03d7 ; 0x03d7
+ textpointer Text03d8 ; 0x03d8
+ textpointer Text03d9 ; 0x03d9
+ textpointer Text03da ; 0x03da
+ textpointer Text03db ; 0x03db
+ textpointer Text03dc ; 0x03dc
+ textpointer Text03dd ; 0x03dd
+ textpointer Text03de ; 0x03de
+ textpointer Text03df ; 0x03df
+ textpointer Text03e0 ; 0x03e0
+ textpointer Text03e1 ; 0x03e1
+ textpointer Text03e2 ; 0x03e2
+ textpointer Text03e3 ; 0x03e3
+ textpointer Text03e4 ; 0x03e4
+ textpointer Text03e5 ; 0x03e5
+ textpointer Text03e6 ; 0x03e6
+ textpointer Text03e7 ; 0x03e7
+ textpointer Text03e8 ; 0x03e8
+ textpointer Text03e9 ; 0x03e9
+ textpointer Text03ea ; 0x03ea
+ textpointer Text03eb ; 0x03eb
+ textpointer Text03ec ; 0x03ec
+ textpointer Text03ed ; 0x03ed
+ textpointer Text03ee ; 0x03ee
+ textpointer Text03ef ; 0x03ef
+ textpointer Text03f0 ; 0x03f0
+ textpointer Text03f1 ; 0x03f1
+ textpointer Text03f2 ; 0x03f2
+ textpointer Text03f3 ; 0x03f3
+ textpointer Text03f4 ; 0x03f4
+ textpointer Text03f5 ; 0x03f5
+ textpointer Text03f6 ; 0x03f6
+ textpointer Text03f7 ; 0x03f7
+ textpointer Text03f8 ; 0x03f8
+ textpointer Text03f9 ; 0x03f9
+ textpointer Text03fa ; 0x03fa
+ textpointer Text03fb ; 0x03fb
+ textpointer Text03fc ; 0x03fc
+ textpointer Text03fd ; 0x03fd
+ textpointer Text03fe ; 0x03fe
+ textpointer Text03ff ; 0x03ff
+ textpointer Text0400 ; 0x0400
+ textpointer Text0401 ; 0x0401
+ textpointer Text0402 ; 0x0402
+ textpointer Text0403 ; 0x0403
+ textpointer Text0404 ; 0x0404
+ textpointer Text0405 ; 0x0405
+ textpointer Text0406 ; 0x0406
+ textpointer Text0407 ; 0x0407
+ textpointer Text0408 ; 0x0408
+ textpointer Text0409 ; 0x0409
+ textpointer Text040a ; 0x040a
+ textpointer Text040b ; 0x040b
+ textpointer Text040c ; 0x040c
+ textpointer Text040d ; 0x040d
+ textpointer Text040e ; 0x040e
+ textpointer Text040f ; 0x040f
+ textpointer Text0410 ; 0x0410
+ textpointer Text0411 ; 0x0411
+ textpointer Text0412 ; 0x0412
+ textpointer Text0413 ; 0x0413
+ textpointer Text0414 ; 0x0414
+ textpointer Text0415 ; 0x0415
+ textpointer Text0416 ; 0x0416
+ textpointer Text0417 ; 0x0417
+ textpointer Text0418 ; 0x0418
+ textpointer Text0419 ; 0x0419
+ textpointer Text041a ; 0x041a
+ textpointer Text041b ; 0x041b
+ textpointer Text041c ; 0x041c
+ textpointer Text041d ; 0x041d
+ textpointer Text041e ; 0x041e
+ textpointer Text041f ; 0x041f
+ textpointer Text0420 ; 0x0420
+ textpointer Text0421 ; 0x0421
+ textpointer Text0422 ; 0x0422
+ textpointer Text0423 ; 0x0423
+ textpointer Text0424 ; 0x0424
+ textpointer Text0425 ; 0x0425
+ textpointer Text0426 ; 0x0426
+ textpointer Text0427 ; 0x0427
+ textpointer Text0428 ; 0x0428
+ textpointer Text0429 ; 0x0429
+ textpointer Text042a ; 0x042a
+ textpointer Text042b ; 0x042b
+ textpointer Text042c ; 0x042c
+ textpointer Text042d ; 0x042d
+ textpointer Text042e ; 0x042e
+ textpointer Text042f ; 0x042f
+ textpointer Text0430 ; 0x0430
+ textpointer Text0431 ; 0x0431
+ textpointer Text0432 ; 0x0432
+ textpointer Text0433 ; 0x0433
+ textpointer Text0434 ; 0x0434
+ textpointer Text0435 ; 0x0435
+ textpointer Text0436 ; 0x0436
+ textpointer Text0437 ; 0x0437
+ textpointer Text0438 ; 0x0438
+ textpointer Text0439 ; 0x0439
+ textpointer Text043a ; 0x043a
+ textpointer Text043b ; 0x043b
+ textpointer Text043c ; 0x043c
+ textpointer Text043d ; 0x043d
+ textpointer Text043e ; 0x043e
+ textpointer Text043f ; 0x043f
+ textpointer Text0440 ; 0x0440
+ textpointer Text0441 ; 0x0441
+ textpointer Text0442 ; 0x0442
+ textpointer Text0443 ; 0x0443
+ textpointer Text0444 ; 0x0444
+ textpointer Text0445 ; 0x0445
+ textpointer Text0446 ; 0x0446
+ textpointer Text0447 ; 0x0447
+ textpointer Text0448 ; 0x0448
+ textpointer Text0449 ; 0x0449
+ textpointer Text044a ; 0x044a
+ textpointer Text044b ; 0x044b
+ textpointer Text044c ; 0x044c
+ textpointer Text044d ; 0x044d
+ textpointer Text044e ; 0x044e
+ textpointer Text044f ; 0x044f
+ textpointer Text0450 ; 0x0450
+ textpointer Text0451 ; 0x0451
+ textpointer Text0452 ; 0x0452
+ textpointer Text0453 ; 0x0453
+ textpointer Text0454 ; 0x0454
+ textpointer Text0455 ; 0x0455
+ textpointer Text0456 ; 0x0456
+ textpointer Text0457 ; 0x0457
+ textpointer Text0458 ; 0x0458
+ textpointer Text0459 ; 0x0459
+ textpointer Text045a ; 0x045a
+ textpointer Text045b ; 0x045b
+ textpointer Text045c ; 0x045c
+ textpointer Text045d ; 0x045d
+ textpointer Text045e ; 0x045e
+ textpointer Text045f ; 0x045f
+ textpointer Text0460 ; 0x0460
+ textpointer Text0461 ; 0x0461
+ textpointer Text0462 ; 0x0462
+ textpointer Text0463 ; 0x0463
+ textpointer Text0464 ; 0x0464
+ textpointer Text0465 ; 0x0465
+ textpointer Text0466 ; 0x0466
+ textpointer Text0467 ; 0x0467
+ textpointer Text0468 ; 0x0468
+ textpointer Text0469 ; 0x0469
+ textpointer Text046a ; 0x046a
+ textpointer Text046b ; 0x046b
+ textpointer Text046c ; 0x046c
+ textpointer Text046d ; 0x046d
+ textpointer Text046e ; 0x046e
+ textpointer Text046f ; 0x046f
+ textpointer Text0470 ; 0x0470
+ textpointer Text0471 ; 0x0471
+ textpointer Text0472 ; 0x0472
+ textpointer Text0473 ; 0x0473
+ textpointer Text0474 ; 0x0474
+ textpointer Text0475 ; 0x0475
+ textpointer Text0476 ; 0x0476
+ textpointer Text0477 ; 0x0477
+ textpointer Text0478 ; 0x0478
+ textpointer Text0479 ; 0x0479
+ textpointer Text047a ; 0x047a
+ textpointer Text047b ; 0x047b
+ textpointer Text047c ; 0x047c
+ textpointer Text047d ; 0x047d
+ textpointer Text047e ; 0x047e
+ textpointer Text047f ; 0x047f
+ textpointer Text0480 ; 0x0480
+ textpointer Text0481 ; 0x0481
+ textpointer Text0482 ; 0x0482
+ textpointer Text0483 ; 0x0483
+ textpointer Text0484 ; 0x0484
+ textpointer Text0485 ; 0x0485
+ textpointer Text0486 ; 0x0486
+ textpointer Text0487 ; 0x0487
+ textpointer Text0488 ; 0x0488
+ textpointer Text0489 ; 0x0489
+ textpointer Text048a ; 0x048a
+ textpointer Text048b ; 0x048b
+ textpointer Text048c ; 0x048c
+ textpointer Text048d ; 0x048d
+ textpointer Text048e ; 0x048e
+ textpointer Text048f ; 0x048f
+ textpointer Text0490 ; 0x0490
+ textpointer Text0491 ; 0x0491
+ textpointer Text0492 ; 0x0492
+ textpointer Text0493 ; 0x0493
+ textpointer Text0494 ; 0x0494
+ textpointer Text0495 ; 0x0495
+ textpointer Text0496 ; 0x0496
+ textpointer Text0497 ; 0x0497
+ textpointer Text0498 ; 0x0498
+ textpointer Text0499 ; 0x0499
+ textpointer Text049a ; 0x049a
+ textpointer Text049b ; 0x049b
+ textpointer Text049c ; 0x049c
+ textpointer Text049d ; 0x049d
+ textpointer Text049e ; 0x049e
+ textpointer Text049f ; 0x049f
+ textpointer Text04a0 ; 0x04a0
+ textpointer Text04a1 ; 0x04a1
+ textpointer Text04a2 ; 0x04a2
+ textpointer Text04a3 ; 0x04a3
+ textpointer Text04a4 ; 0x04a4
+ textpointer Text04a5 ; 0x04a5
+ textpointer Text04a6 ; 0x04a6
+ textpointer Text04a7 ; 0x04a7
+ textpointer Text04a8 ; 0x04a8
+ textpointer Text04a9 ; 0x04a9
+ textpointer Text04aa ; 0x04aa
+ textpointer Text04ab ; 0x04ab
+ textpointer Text04ac ; 0x04ac
+ textpointer Text04ad ; 0x04ad
+ textpointer Text04ae ; 0x04ae
+ textpointer Text04af ; 0x04af
+ textpointer Text04b0 ; 0x04b0
+ textpointer Text04b1 ; 0x04b1
+ textpointer Text04b2 ; 0x04b2
+ textpointer Text04b3 ; 0x04b3
+ textpointer Text04b4 ; 0x04b4
+ textpointer Text04b5 ; 0x04b5
+ textpointer Text04b6 ; 0x04b6
+ textpointer Text04b7 ; 0x04b7
+ textpointer Text04b8 ; 0x04b8
+ textpointer Text04b9 ; 0x04b9
+ textpointer Text04ba ; 0x04ba
+ textpointer Text04bb ; 0x04bb
+ textpointer Text04bc ; 0x04bc
+ textpointer Text04bd ; 0x04bd
+ textpointer Text04be ; 0x04be
+ textpointer Text04bf ; 0x04bf
+ textpointer Text04c0 ; 0x04c0
+ textpointer Text04c1 ; 0x04c1
+ textpointer Text04c2 ; 0x04c2
+ textpointer Text04c3 ; 0x04c3
+ textpointer Text04c4 ; 0x04c4
+ textpointer Text04c5 ; 0x04c5
+ textpointer Text04c6 ; 0x04c6
+ textpointer Text04c7 ; 0x04c7
+ textpointer Text04c8 ; 0x04c8
+ textpointer Text04c9 ; 0x04c9
+ textpointer Text04ca ; 0x04ca
+ textpointer Text04cb ; 0x04cb
+ textpointer Text04cc ; 0x04cc
+ textpointer Text04cd ; 0x04cd
+ textpointer Text04ce ; 0x04ce
+ textpointer Text04cf ; 0x04cf
+ textpointer Text04d0 ; 0x04d0
+ textpointer Text04d1 ; 0x04d1
+ textpointer Text04d2 ; 0x04d2
+ textpointer Text04d3 ; 0x04d3
+ textpointer Text04d4 ; 0x04d4
+ textpointer Text04d5 ; 0x04d5
+ textpointer Text04d6 ; 0x04d6
+ textpointer Text04d7 ; 0x04d7
+ textpointer Text04d8 ; 0x04d8
+ textpointer Text04d9 ; 0x04d9
+ textpointer Text04da ; 0x04da
+ textpointer Text04db ; 0x04db
+ textpointer Text04dc ; 0x04dc
+ textpointer Text04dd ; 0x04dd
+ textpointer Text04de ; 0x04de
+ textpointer Text04df ; 0x04df
+ textpointer Text04e0 ; 0x04e0
+ textpointer Text04e1 ; 0x04e1
+ textpointer Text04e2 ; 0x04e2
+ textpointer Text04e3 ; 0x04e3
+ textpointer Text04e4 ; 0x04e4
+ textpointer Text04e5 ; 0x04e5
+ textpointer Text04e6 ; 0x04e6
+ textpointer Text04e7 ; 0x04e7
+ textpointer Text04e8 ; 0x04e8
+ textpointer Text04e9 ; 0x04e9
+ textpointer Text04ea ; 0x04ea
+ textpointer Text04eb ; 0x04eb
+ textpointer Text04ec ; 0x04ec
+ textpointer Text04ed ; 0x04ed
+ textpointer Text04ee ; 0x04ee
+ textpointer Text04ef ; 0x04ef
+ textpointer Text04f0 ; 0x04f0
+ textpointer Text04f1 ; 0x04f1
+ textpointer Text04f2 ; 0x04f2
+ textpointer Text04f3 ; 0x04f3
+ textpointer Text04f4 ; 0x04f4
+ textpointer Text04f5 ; 0x04f5
+ textpointer Text04f6 ; 0x04f6
+ textpointer Text04f7 ; 0x04f7
+ textpointer Text04f8 ; 0x04f8
+ textpointer Text04f9 ; 0x04f9
+ textpointer Text04fa ; 0x04fa
+ textpointer Text04fb ; 0x04fb
+ textpointer Text04fc ; 0x04fc
+ textpointer Text04fd ; 0x04fd
+ textpointer Text04fe ; 0x04fe
+ textpointer Text04ff ; 0x04ff
+ textpointer Text0500 ; 0x0500
+ textpointer Text0501 ; 0x0501
+ textpointer Text0502 ; 0x0502
+ textpointer Text0503 ; 0x0503
+ textpointer Text0504 ; 0x0504
+ textpointer Text0505 ; 0x0505
+ textpointer Text0506 ; 0x0506
+ textpointer Text0507 ; 0x0507
+ textpointer Text0508 ; 0x0508
+ textpointer Text0509 ; 0x0509
+ textpointer Text050a ; 0x050a
+ textpointer Text050b ; 0x050b
+ textpointer Text050c ; 0x050c
+ textpointer Text050d ; 0x050d
+ textpointer Text050e ; 0x050e
+ textpointer Text050f ; 0x050f
+ textpointer Text0510 ; 0x0510
+ textpointer Text0511 ; 0x0511
+ textpointer Text0512 ; 0x0512
+ textpointer Text0513 ; 0x0513
+ textpointer Text0514 ; 0x0514
+ textpointer Text0515 ; 0x0515
+ textpointer Text0516 ; 0x0516
+ textpointer Text0517 ; 0x0517
+ textpointer Text0518 ; 0x0518
+ textpointer Text0519 ; 0x0519
+ textpointer Text051a ; 0x051a
+ textpointer Text051b ; 0x051b
+ textpointer Text051c ; 0x051c
+ textpointer Text051d ; 0x051d
+ textpointer Text051e ; 0x051e
+ textpointer Text051f ; 0x051f
+ textpointer Text0520 ; 0x0520
+ textpointer Text0521 ; 0x0521
+ textpointer Text0522 ; 0x0522
+ textpointer Text0523 ; 0x0523
+ textpointer Text0524 ; 0x0524
+ textpointer Text0525 ; 0x0525
+ textpointer Text0526 ; 0x0526
+ textpointer Text0527 ; 0x0527
+ textpointer Text0528 ; 0x0528
+ textpointer Text0529 ; 0x0529
+ textpointer Text052a ; 0x052a
+ textpointer Text052b ; 0x052b
+ textpointer Text052c ; 0x052c
+ textpointer Text052d ; 0x052d
+ textpointer Text052e ; 0x052e
+ textpointer Text052f ; 0x052f
+ textpointer Text0530 ; 0x0530
+ textpointer Text0531 ; 0x0531
+ textpointer Text0532 ; 0x0532
+ textpointer Text0533 ; 0x0533
+ textpointer Text0534 ; 0x0534
+ textpointer Text0535 ; 0x0535
+ textpointer Text0536 ; 0x0536
+ textpointer Text0537 ; 0x0537
+ textpointer Text0538 ; 0x0538
+ textpointer Text0539 ; 0x0539
+ textpointer Text053a ; 0x053a
+ textpointer Text053b ; 0x053b
+ textpointer Text053c ; 0x053c
+ textpointer Text053d ; 0x053d
+ textpointer Text053e ; 0x053e
+ textpointer Text053f ; 0x053f
+ textpointer Text0540 ; 0x0540
+ textpointer Text0541 ; 0x0541
+ textpointer Text0542 ; 0x0542
+ textpointer Text0543 ; 0x0543
+ textpointer Text0544 ; 0x0544
+ textpointer Text0545 ; 0x0545
+ textpointer Text0546 ; 0x0546
+ textpointer Text0547 ; 0x0547
+ textpointer Text0548 ; 0x0548
+ textpointer Text0549 ; 0x0549
+ textpointer Text054a ; 0x054a
+ textpointer Text054b ; 0x054b
+ textpointer Text054c ; 0x054c
+ textpointer Text054d ; 0x054d
+ textpointer Text054e ; 0x054e
+ textpointer Text054f ; 0x054f
+ textpointer Text0550 ; 0x0550
+ textpointer Text0551 ; 0x0551
+ textpointer Text0552 ; 0x0552
+ textpointer Text0553 ; 0x0553
+ textpointer Text0554 ; 0x0554
+ textpointer Text0555 ; 0x0555
+ textpointer Text0556 ; 0x0556
+ textpointer Text0557 ; 0x0557
+ textpointer Text0558 ; 0x0558
+ textpointer Text0559 ; 0x0559
+ textpointer Text055a ; 0x055a
+ textpointer Text055b ; 0x055b
+ textpointer Text055c ; 0x055c
+ textpointer Text055d ; 0x055d
+ textpointer Text055e ; 0x055e
+ textpointer Text055f ; 0x055f
+ textpointer Text0560 ; 0x0560
+ textpointer Text0561 ; 0x0561
+ textpointer Text0562 ; 0x0562
+ textpointer Text0563 ; 0x0563
+ textpointer Text0564 ; 0x0564
+ textpointer Text0565 ; 0x0565
+ textpointer Text0566 ; 0x0566
+ textpointer Text0567 ; 0x0567
+ textpointer Text0568 ; 0x0568
+ textpointer Text0569 ; 0x0569
+ textpointer Text056a ; 0x056a
+ textpointer Text056b ; 0x056b
+ textpointer Text056c ; 0x056c
+ textpointer Text056d ; 0x056d
+ textpointer Text056e ; 0x056e
+ textpointer Text056f ; 0x056f
+ textpointer Text0570 ; 0x0570
+ textpointer Text0571 ; 0x0571
+ textpointer Text0572 ; 0x0572
+ textpointer Text0573 ; 0x0573
+ textpointer Text0574 ; 0x0574
+ textpointer Text0575 ; 0x0575
+ textpointer Text0576 ; 0x0576
+ textpointer Text0577 ; 0x0577
+ textpointer Text0578 ; 0x0578
+ textpointer Text0579 ; 0x0579
+ textpointer Text057a ; 0x057a
+ textpointer Text057b ; 0x057b
+ textpointer Text057c ; 0x057c
+ textpointer Text057d ; 0x057d
+ textpointer Text057e ; 0x057e
+ textpointer Text057f ; 0x057f
+ textpointer Text0580 ; 0x0580
+ textpointer Text0581 ; 0x0581
+ textpointer Text0582 ; 0x0582
+ textpointer Text0583 ; 0x0583
+ textpointer Text0584 ; 0x0584
+ textpointer Text0585 ; 0x0585
+ textpointer Text0586 ; 0x0586
+ textpointer Text0587 ; 0x0587
+ textpointer Text0588 ; 0x0588
+ textpointer Text0589 ; 0x0589
+ textpointer Text058a ; 0x058a
+ textpointer Text058b ; 0x058b
+ textpointer Text058c ; 0x058c
+ textpointer Text058d ; 0x058d
+ textpointer Text058e ; 0x058e
+ textpointer Text058f ; 0x058f
+ textpointer Text0590 ; 0x0590
+ textpointer Text0591 ; 0x0591
+ textpointer Text0592 ; 0x0592
+ textpointer Text0593 ; 0x0593
+ textpointer Text0594 ; 0x0594
+ textpointer Text0595 ; 0x0595
+ textpointer Text0596 ; 0x0596
+ textpointer Text0597 ; 0x0597
+ textpointer Text0598 ; 0x0598
+ textpointer Text0599 ; 0x0599
+ textpointer Text059a ; 0x059a
+ textpointer Text059b ; 0x059b
+ textpointer Text059c ; 0x059c
+ textpointer Text059d ; 0x059d
+ textpointer Text059e ; 0x059e
+ textpointer Text059f ; 0x059f
+ textpointer Text05a0 ; 0x05a0
+ textpointer Text05a1 ; 0x05a1
+ textpointer Text05a2 ; 0x05a2
+ textpointer Text05a3 ; 0x05a3
+ textpointer Text05a4 ; 0x05a4
+ textpointer Text05a5 ; 0x05a5
+ textpointer Text05a6 ; 0x05a6
+ textpointer Text05a7 ; 0x05a7
+ textpointer Text05a8 ; 0x05a8
+ textpointer Text05a9 ; 0x05a9
+ textpointer Text05aa ; 0x05aa
+ textpointer Text05ab ; 0x05ab
+ textpointer Text05ac ; 0x05ac
+ textpointer Text05ad ; 0x05ad
+ textpointer Text05ae ; 0x05ae
+ textpointer Text05af ; 0x05af
+ textpointer Text05b0 ; 0x05b0
+ textpointer Text05b1 ; 0x05b1
+ textpointer Text05b2 ; 0x05b2
+ textpointer Text05b3 ; 0x05b3
+ textpointer Text05b4 ; 0x05b4
+ textpointer Text05b5 ; 0x05b5
+ textpointer Text05b6 ; 0x05b6
+ textpointer Text05b7 ; 0x05b7
+ textpointer Text05b8 ; 0x05b8
+ textpointer Text05b9 ; 0x05b9
+ textpointer Text05ba ; 0x05ba
+ textpointer Text05bb ; 0x05bb
+ textpointer Text05bc ; 0x05bc
+ textpointer Text05bd ; 0x05bd
+ textpointer Text05be ; 0x05be
+ textpointer Text05bf ; 0x05bf
+ textpointer Text05c0 ; 0x05c0
+ textpointer Text05c1 ; 0x05c1
+ textpointer Text05c2 ; 0x05c2
+ textpointer Text05c3 ; 0x05c3
+ textpointer Text05c4 ; 0x05c4
+ textpointer Text05c5 ; 0x05c5
+ textpointer Text05c6 ; 0x05c6
+ textpointer Text05c7 ; 0x05c7
+ textpointer Text05c8 ; 0x05c8
+ textpointer Text05c9 ; 0x05c9
+ textpointer Text05ca ; 0x05ca
+ textpointer Text05cb ; 0x05cb
+ textpointer Text05cc ; 0x05cc
+ textpointer Text05cd ; 0x05cd
+ textpointer Text05ce ; 0x05ce
+ textpointer Text05cf ; 0x05cf
+ textpointer Text05d0 ; 0x05d0
+ textpointer Text05d1 ; 0x05d1
+ textpointer Text05d2 ; 0x05d2
+ textpointer Text05d3 ; 0x05d3
+ textpointer Text05d4 ; 0x05d4
+ textpointer Text05d5 ; 0x05d5
+ textpointer Text05d6 ; 0x05d6
+ textpointer Text05d7 ; 0x05d7
+ textpointer Text05d8 ; 0x05d8
+ textpointer Text05d9 ; 0x05d9
+ textpointer Text05da ; 0x05da
+ textpointer Text05db ; 0x05db
+ textpointer Text05dc ; 0x05dc
+ textpointer Text05dd ; 0x05dd
+ textpointer Text05de ; 0x05de
+ textpointer Text05df ; 0x05df
+ textpointer Text05e0 ; 0x05e0
+ textpointer Text05e1 ; 0x05e1
+ textpointer Text05e2 ; 0x05e2
+ textpointer Text05e3 ; 0x05e3
+ textpointer Text05e4 ; 0x05e4
+ textpointer Text05e5 ; 0x05e5
+ textpointer Text05e6 ; 0x05e6
+ textpointer Text05e7 ; 0x05e7
+ textpointer Text05e8 ; 0x05e8
+ textpointer Text05e9 ; 0x05e9
+ textpointer Text05ea ; 0x05ea
+ textpointer Text05eb ; 0x05eb
+ textpointer Text05ec ; 0x05ec
+ textpointer Text05ed ; 0x05ed
+ textpointer Text05ee ; 0x05ee
+ textpointer Text05ef ; 0x05ef
+ textpointer Text05f0 ; 0x05f0
+ textpointer Text05f1 ; 0x05f1
+ textpointer Text05f2 ; 0x05f2
+ textpointer Text05f3 ; 0x05f3
+ textpointer Text05f4 ; 0x05f4
+ textpointer Text05f5 ; 0x05f5
+ textpointer Text05f6 ; 0x05f6
+ textpointer Text05f7 ; 0x05f7
+ textpointer Text05f8 ; 0x05f8
+ textpointer Text05f9 ; 0x05f9
+ textpointer Text05fa ; 0x05fa
+ textpointer Text05fb ; 0x05fb
+ textpointer Text05fc ; 0x05fc
+ textpointer Text05fd ; 0x05fd
+ textpointer Text05fe ; 0x05fe
+ textpointer Text05ff ; 0x05ff
+ textpointer Text0600 ; 0x0600
+ textpointer Text0601 ; 0x0601
+ textpointer Text0602 ; 0x0602
+ textpointer Text0603 ; 0x0603
+ textpointer Text0604 ; 0x0604
+ textpointer Text0605 ; 0x0605
+ textpointer Text0606 ; 0x0606
+ textpointer Text0607 ; 0x0607
+ textpointer Text0608 ; 0x0608
+ textpointer Text0609 ; 0x0609
+ textpointer Text060a ; 0x060a
+ textpointer Text060b ; 0x060b
+ textpointer Text060c ; 0x060c
+ textpointer Text060d ; 0x060d
+ textpointer Text060e ; 0x060e
+ textpointer Text060f ; 0x060f
+ textpointer Text0610 ; 0x0610
+ textpointer Text0611 ; 0x0611
+ textpointer Text0612 ; 0x0612
+ textpointer Text0613 ; 0x0613
+ textpointer Text0614 ; 0x0614
+ textpointer Text0615 ; 0x0615
+ textpointer Text0616 ; 0x0616
+ textpointer Text0617 ; 0x0617
+ textpointer Text0618 ; 0x0618
+ textpointer Text0619 ; 0x0619
+ textpointer Text061a ; 0x061a
+ textpointer Text061b ; 0x061b
+ textpointer Text061c ; 0x061c
+ textpointer Text061d ; 0x061d
+ textpointer Text061e ; 0x061e
+ textpointer Text061f ; 0x061f
+ textpointer Text0620 ; 0x0620
+ textpointer Text0621 ; 0x0621
+ textpointer Text0622 ; 0x0622
+ textpointer Text0623 ; 0x0623
+ textpointer Text0624 ; 0x0624
+ textpointer Text0625 ; 0x0625
+ textpointer Text0626 ; 0x0626
+ textpointer Text0627 ; 0x0627
+ textpointer Text0628 ; 0x0628
+ textpointer Text0629 ; 0x0629
+ textpointer Text062a ; 0x062a
+ textpointer Text062b ; 0x062b
+ textpointer Text062c ; 0x062c
+ textpointer Text062d ; 0x062d
+ textpointer Text062e ; 0x062e
+ textpointer Text062f ; 0x062f
+ textpointer Text0630 ; 0x0630
+ textpointer Text0631 ; 0x0631
+ textpointer Text0632 ; 0x0632
+ textpointer Text0633 ; 0x0633
+ textpointer Text0634 ; 0x0634
+ textpointer Text0635 ; 0x0635
+ textpointer Text0636 ; 0x0636
+ textpointer Text0637 ; 0x0637
+ textpointer Text0638 ; 0x0638
+ textpointer Text0639 ; 0x0639
+ textpointer Text063a ; 0x063a
+ textpointer Text063b ; 0x063b
+ textpointer Text063c ; 0x063c
+ textpointer Text063d ; 0x063d
+ textpointer Text063e ; 0x063e
+ textpointer Text063f ; 0x063f
+ textpointer Text0640 ; 0x0640
+ textpointer Text0641 ; 0x0641
+ textpointer Text0642 ; 0x0642
+ textpointer Text0643 ; 0x0643
+ textpointer Text0644 ; 0x0644
+ textpointer Text0645 ; 0x0645
+ textpointer Text0646 ; 0x0646
+ textpointer Text0647 ; 0x0647
+ textpointer Text0648 ; 0x0648
+ textpointer Text0649 ; 0x0649
+ textpointer Text064a ; 0x064a
+ textpointer Text064b ; 0x064b
+ textpointer Text064c ; 0x064c
+ textpointer Text064d ; 0x064d
+ textpointer Text064e ; 0x064e
+ textpointer Text064f ; 0x064f
+ textpointer Text0650 ; 0x0650
+ textpointer Text0651 ; 0x0651
+ textpointer Text0652 ; 0x0652
+ textpointer Text0653 ; 0x0653
+ textpointer Text0654 ; 0x0654
+ textpointer Text0655 ; 0x0655
+ textpointer Text0656 ; 0x0656
+ textpointer Text0657 ; 0x0657
+ textpointer Text0658 ; 0x0658
+ textpointer Text0659 ; 0x0659
+ textpointer Text065a ; 0x065a
+ textpointer Text065b ; 0x065b
+ textpointer Text065c ; 0x065c
+ textpointer Text065d ; 0x065d
+ textpointer Text065e ; 0x065e
+ textpointer Text065f ; 0x065f
+ textpointer Text0660 ; 0x0660
+ textpointer Text0661 ; 0x0661
+ textpointer Text0662 ; 0x0662
+ textpointer Text0663 ; 0x0663
+ textpointer Text0664 ; 0x0664
+ textpointer Text0665 ; 0x0665
+ textpointer Text0666 ; 0x0666
+ textpointer Text0667 ; 0x0667
+ textpointer Text0668 ; 0x0668
+ textpointer Text0669 ; 0x0669
+ textpointer Text066a ; 0x066a
+ textpointer Text066b ; 0x066b
+ textpointer Text066c ; 0x066c
+ textpointer Text066d ; 0x066d
+ textpointer Text066e ; 0x066e
+ textpointer Text066f ; 0x066f
+ textpointer Text0670 ; 0x0670
+ textpointer Text0671 ; 0x0671
+ textpointer Text0672 ; 0x0672
+ textpointer Text0673 ; 0x0673
+ textpointer Text0674 ; 0x0674
+ textpointer Text0675 ; 0x0675
+ textpointer Text0676 ; 0x0676
+ textpointer Text0677 ; 0x0677
+ textpointer Text0678 ; 0x0678
+ textpointer Text0679 ; 0x0679
+ textpointer Text067a ; 0x067a
+ textpointer Text067b ; 0x067b
+ textpointer Text067c ; 0x067c
+ textpointer Text067d ; 0x067d
+ textpointer Text067e ; 0x067e
+ textpointer Text067f ; 0x067f
+ textpointer Text0680 ; 0x0680
+ textpointer Text0681 ; 0x0681
+ textpointer Text0682 ; 0x0682
+ textpointer Text0683 ; 0x0683
+ textpointer Text0684 ; 0x0684
+ textpointer Text0685 ; 0x0685
+ textpointer Text0686 ; 0x0686
+ textpointer Text0687 ; 0x0687
+ textpointer Text0688 ; 0x0688
+ textpointer Text0689 ; 0x0689
+ textpointer Text068a ; 0x068a
+ textpointer Text068b ; 0x068b
+ textpointer Text068c ; 0x068c
+ textpointer Text068d ; 0x068d
+ textpointer Text068e ; 0x068e
+ textpointer Text068f ; 0x068f
+ textpointer Text0690 ; 0x0690
+ textpointer Text0691 ; 0x0691
+ textpointer Text0692 ; 0x0692
+ textpointer Text0693 ; 0x0693
+ textpointer Text0694 ; 0x0694
+ textpointer Text0695 ; 0x0695
+ textpointer Text0696 ; 0x0696
+ textpointer Text0697 ; 0x0697
+ textpointer Text0698 ; 0x0698
+ textpointer Text0699 ; 0x0699
+ textpointer Text069a ; 0x069a
+ textpointer Text069b ; 0x069b
+ textpointer Text069c ; 0x069c
+ textpointer Text069d ; 0x069d
+ textpointer Text069e ; 0x069e
+ textpointer Text069f ; 0x069f
+ textpointer Text06a0 ; 0x06a0
+ textpointer Text06a1 ; 0x06a1
+ textpointer Text06a2 ; 0x06a2
+ textpointer Text06a3 ; 0x06a3
+ textpointer Text06a4 ; 0x06a4
+ textpointer Text06a5 ; 0x06a5
+ textpointer Text06a6 ; 0x06a6
+ textpointer Text06a7 ; 0x06a7
+ textpointer Text06a8 ; 0x06a8
+ textpointer Text06a9 ; 0x06a9
+ textpointer Text06aa ; 0x06aa
+ textpointer Text06ab ; 0x06ab
+ textpointer Text06ac ; 0x06ac
+ textpointer Text06ad ; 0x06ad
+ textpointer Text06ae ; 0x06ae
+ textpointer Text06af ; 0x06af
+ textpointer Text06b0 ; 0x06b0
+ textpointer Text06b1 ; 0x06b1
+ textpointer Text06b2 ; 0x06b2
+ textpointer Text06b3 ; 0x06b3
+ textpointer Text06b4 ; 0x06b4
+ textpointer Text06b5 ; 0x06b5
+ textpointer Text06b6 ; 0x06b6
+ textpointer Text06b7 ; 0x06b7
+ textpointer Text06b8 ; 0x06b8
+ textpointer Text06b9 ; 0x06b9
+ textpointer Text06ba ; 0x06ba
+ textpointer Text06bb ; 0x06bb
+ textpointer Text06bc ; 0x06bc
+ textpointer Text06bd ; 0x06bd
+ textpointer Text06be ; 0x06be
+ textpointer Text06bf ; 0x06bf
+ textpointer Text06c0 ; 0x06c0
+ textpointer Text06c1 ; 0x06c1
+ textpointer Text06c2 ; 0x06c2
+ textpointer Text06c3 ; 0x06c3
+ textpointer Text06c4 ; 0x06c4
+ textpointer Text06c5 ; 0x06c5
+ textpointer Text06c6 ; 0x06c6
+ textpointer Text06c7 ; 0x06c7
+ textpointer Text06c8 ; 0x06c8
+ textpointer Text06c9 ; 0x06c9
+ textpointer Text06ca ; 0x06ca
+ textpointer Text06cb ; 0x06cb
+ textpointer Text06cc ; 0x06cc
+ textpointer Text06cd ; 0x06cd
+ textpointer Text06ce ; 0x06ce
+ textpointer Text06cf ; 0x06cf
+ textpointer Text06d0 ; 0x06d0
+ textpointer Text06d1 ; 0x06d1
+ textpointer Text06d2 ; 0x06d2
+ textpointer Text06d3 ; 0x06d3
+ textpointer Text06d4 ; 0x06d4
+ textpointer Text06d5 ; 0x06d5
+ textpointer Text06d6 ; 0x06d6
+ textpointer Text06d7 ; 0x06d7
+ textpointer Text06d8 ; 0x06d8
+ textpointer Text06d9 ; 0x06d9
+ textpointer Text06da ; 0x06da
+ textpointer Text06db ; 0x06db
+ textpointer Text06dc ; 0x06dc
+ textpointer Text06dd ; 0x06dd
+ textpointer Text06de ; 0x06de
+ textpointer Text06df ; 0x06df
+ textpointer Text06e0 ; 0x06e0
+ textpointer Text06e1 ; 0x06e1
+ textpointer Text06e2 ; 0x06e2
+ textpointer Text06e3 ; 0x06e3
+ textpointer Text06e4 ; 0x06e4
+ textpointer Text06e5 ; 0x06e5
+ textpointer Text06e6 ; 0x06e6
+ textpointer Text06e7 ; 0x06e7
+ textpointer Text06e8 ; 0x06e8
+ textpointer Text06e9 ; 0x06e9
+ textpointer Text06ea ; 0x06ea
+ textpointer Text06eb ; 0x06eb
+ textpointer Text06ec ; 0x06ec
+ textpointer Text06ed ; 0x06ed
+ textpointer Text06ee ; 0x06ee
+ textpointer Text06ef ; 0x06ef
+ textpointer Text06f0 ; 0x06f0
+ textpointer Text06f1 ; 0x06f1
+ textpointer Text06f2 ; 0x06f2
+ textpointer Text06f3 ; 0x06f3
+ textpointer Text06f4 ; 0x06f4
+ textpointer Text06f5 ; 0x06f5
+ textpointer Text06f6 ; 0x06f6
+ textpointer Text06f7 ; 0x06f7
+ textpointer Text06f8 ; 0x06f8
+ textpointer Text06f9 ; 0x06f9
+ textpointer Text06fa ; 0x06fa
+ textpointer Text06fb ; 0x06fb
+ textpointer Text06fc ; 0x06fc
+ textpointer Text06fd ; 0x06fd
+ textpointer Text06fe ; 0x06fe
+ textpointer Text06ff ; 0x06ff
+ textpointer Text0700 ; 0x0700
+ textpointer Text0701 ; 0x0701
+ textpointer Text0702 ; 0x0702
+ textpointer Text0703 ; 0x0703
+ textpointer Text0704 ; 0x0704
+ textpointer Text0705 ; 0x0705
+ textpointer Text0706 ; 0x0706
+ textpointer Text0707 ; 0x0707
+ textpointer Text0708 ; 0x0708
+ textpointer Text0709 ; 0x0709
+ textpointer Text070a ; 0x070a
+ textpointer Text070b ; 0x070b
+ textpointer Text070c ; 0x070c
+ textpointer Text070d ; 0x070d
+ textpointer Text070e ; 0x070e
+ textpointer Text070f ; 0x070f
+ textpointer Text0710 ; 0x0710
+ textpointer Text0711 ; 0x0711
+ textpointer Text0712 ; 0x0712
+ textpointer Text0713 ; 0x0713
+ textpointer Text0714 ; 0x0714
+ textpointer Text0715 ; 0x0715
+ textpointer Text0716 ; 0x0716
+ textpointer Text0717 ; 0x0717
+ textpointer Text0718 ; 0x0718
+ textpointer Text0719 ; 0x0719
+ textpointer Text071a ; 0x071a
+ textpointer Text071b ; 0x071b
+ textpointer Text071c ; 0x071c
+ textpointer Text071d ; 0x071d
+ textpointer Text071e ; 0x071e
+ textpointer Text071f ; 0x071f
+ textpointer Text0720 ; 0x0720
+ textpointer Text0721 ; 0x0721
+ textpointer Text0722 ; 0x0722
+ textpointer Text0723 ; 0x0723
+ textpointer Text0724 ; 0x0724
+ textpointer Text0725 ; 0x0725
+ textpointer Text0726 ; 0x0726
+ textpointer Text0727 ; 0x0727
+ textpointer Text0728 ; 0x0728
+ textpointer Text0729 ; 0x0729
+ textpointer Text072a ; 0x072a
+ textpointer Text072b ; 0x072b
+ textpointer Text072c ; 0x072c
+ textpointer Text072d ; 0x072d
+ textpointer Text072e ; 0x072e
+ textpointer Text072f ; 0x072f
+ textpointer Text0730 ; 0x0730
+ textpointer Text0731 ; 0x0731
+ textpointer Text0732 ; 0x0732
+ textpointer Text0733 ; 0x0733
+ textpointer Text0734 ; 0x0734
+ textpointer Text0735 ; 0x0735
+ textpointer Text0736 ; 0x0736
+ textpointer Text0737 ; 0x0737
+ textpointer Text0738 ; 0x0738
+ textpointer Text0739 ; 0x0739
+ textpointer Text073a ; 0x073a
+ textpointer Text073b ; 0x073b
+ textpointer Text073c ; 0x073c
+ textpointer Text073d ; 0x073d
+ textpointer Text073e ; 0x073e
+ textpointer Text073f ; 0x073f
+ textpointer Text0740 ; 0x0740
+ textpointer Text0741 ; 0x0741
+ textpointer Text0742 ; 0x0742
+ textpointer Text0743 ; 0x0743
+ textpointer Text0744 ; 0x0744
+ textpointer Text0745 ; 0x0745
+ textpointer Text0746 ; 0x0746
+ textpointer Text0747 ; 0x0747
+ textpointer Text0748 ; 0x0748
+ textpointer Text0749 ; 0x0749
+ textpointer Text074a ; 0x074a
+ textpointer Text074b ; 0x074b
+ textpointer Text074c ; 0x074c
+ textpointer Text074d ; 0x074d
+ textpointer Text074e ; 0x074e
+ textpointer Text074f ; 0x074f
+ textpointer Text0750 ; 0x0750
+ textpointer Text0751 ; 0x0751
+ textpointer Text0752 ; 0x0752
+ textpointer Text0753 ; 0x0753
+ textpointer Text0754 ; 0x0754
+ textpointer Text0755 ; 0x0755
+ textpointer Text0756 ; 0x0756
+ textpointer Text0757 ; 0x0757
+ textpointer Text0758 ; 0x0758
+ textpointer Text0759 ; 0x0759
+ textpointer Text075a ; 0x075a
+ textpointer Text075b ; 0x075b
+ textpointer Text075c ; 0x075c
+ textpointer Text075d ; 0x075d
+ textpointer Text075e ; 0x075e
+ textpointer Text075f ; 0x075f
+ textpointer Text0760 ; 0x0760
+ textpointer Text0761 ; 0x0761
+ textpointer Text0762 ; 0x0762
+ textpointer Text0763 ; 0x0763
+ textpointer Text0764 ; 0x0764
+ textpointer Text0765 ; 0x0765
+ textpointer Text0766 ; 0x0766
+ textpointer Text0767 ; 0x0767
+ textpointer Text0768 ; 0x0768
+ textpointer Text0769 ; 0x0769
+ textpointer Text076a ; 0x076a
+ textpointer Text076b ; 0x076b
+ textpointer Text076c ; 0x076c
+ textpointer Text076d ; 0x076d
+ textpointer Text076e ; 0x076e
+ textpointer Text076f ; 0x076f
+ textpointer Text0770 ; 0x0770
+ textpointer Text0771 ; 0x0771
+ textpointer Text0772 ; 0x0772
+ textpointer Text0773 ; 0x0773
+ textpointer Text0774 ; 0x0774
+ textpointer Text0775 ; 0x0775
+ textpointer Text0776 ; 0x0776
+ textpointer Text0777 ; 0x0777
+ textpointer Text0778 ; 0x0778
+ textpointer Text0779 ; 0x0779
+ textpointer Text077a ; 0x077a
+ textpointer Text077b ; 0x077b
+ textpointer Text077c ; 0x077c
+ textpointer Text077d ; 0x077d
+ textpointer Text077e ; 0x077e
+ textpointer Text077f ; 0x077f
+ textpointer Text0780 ; 0x0780
+ textpointer Text0781 ; 0x0781
+ textpointer Text0782 ; 0x0782
+ textpointer Text0783 ; 0x0783
+ textpointer Text0784 ; 0x0784
+ textpointer Text0785 ; 0x0785
+ textpointer Text0786 ; 0x0786
+ textpointer Text0787 ; 0x0787
+ textpointer Text0788 ; 0x0788
+ textpointer Text0789 ; 0x0789
+ textpointer Text078a ; 0x078a
+ textpointer Text078b ; 0x078b
+ textpointer Text078c ; 0x078c
+ textpointer Text078d ; 0x078d
+ textpointer Text078e ; 0x078e
+ textpointer Text078f ; 0x078f
+ textpointer Text0790 ; 0x0790
+ textpointer Text0791 ; 0x0791
+ textpointer Text0792 ; 0x0792
+ textpointer Text0793 ; 0x0793
+ textpointer Text0794 ; 0x0794
+ textpointer Text0795 ; 0x0795
+ textpointer Text0796 ; 0x0796
+ textpointer Text0797 ; 0x0797
+ textpointer Text0798 ; 0x0798
+ textpointer Text0799 ; 0x0799
+ textpointer Text079a ; 0x079a
+ textpointer Text079b ; 0x079b
+ textpointer Text079c ; 0x079c
+ textpointer Text079d ; 0x079d
+ textpointer Text079e ; 0x079e
+ textpointer Text079f ; 0x079f
+ textpointer Text07a0 ; 0x07a0
+ textpointer Text07a1 ; 0x07a1
+ textpointer Text07a2 ; 0x07a2
+ textpointer Text07a3 ; 0x07a3
+ textpointer Text07a4 ; 0x07a4
+ textpointer Text07a5 ; 0x07a5
+ textpointer Text07a6 ; 0x07a6
+ textpointer Text07a7 ; 0x07a7
+ textpointer Text07a8 ; 0x07a8
+ textpointer Text07a9 ; 0x07a9
+ textpointer Text07aa ; 0x07aa
+ textpointer Text07ab ; 0x07ab
+ textpointer Text07ac ; 0x07ac
+ textpointer Text07ad ; 0x07ad
+ textpointer Text07ae ; 0x07ae
+ textpointer Text07af ; 0x07af
+ textpointer Text07b0 ; 0x07b0
+ textpointer Text07b1 ; 0x07b1
+ textpointer Text07b2 ; 0x07b2
+ textpointer Text07b3 ; 0x07b3
+ textpointer Text07b4 ; 0x07b4
+ textpointer Text07b5 ; 0x07b5
+ textpointer Text07b6 ; 0x07b6
+ textpointer Text07b7 ; 0x07b7
+ textpointer Text07b8 ; 0x07b8
+ textpointer Text07b9 ; 0x07b9
+ textpointer Text07ba ; 0x07ba
+ textpointer Text07bb ; 0x07bb
+ textpointer Text07bc ; 0x07bc
+ textpointer Text07bd ; 0x07bd
+ textpointer Text07be ; 0x07be
+ textpointer Text07bf ; 0x07bf
+ textpointer Text07c0 ; 0x07c0
+ textpointer Text07c1 ; 0x07c1
+ textpointer Text07c2 ; 0x07c2
+ textpointer Text07c3 ; 0x07c3
+ textpointer Text07c4 ; 0x07c4
+ textpointer Text07c5 ; 0x07c5
+ textpointer Text07c6 ; 0x07c6
+ textpointer Text07c7 ; 0x07c7
+ textpointer Text07c8 ; 0x07c8
+ textpointer Text07c9 ; 0x07c9
+ textpointer Text07ca ; 0x07ca
+ textpointer Text07cb ; 0x07cb
+ textpointer Text07cc ; 0x07cc
+ textpointer Text07cd ; 0x07cd
+ textpointer Text07ce ; 0x07ce
+ textpointer Text07cf ; 0x07cf
+ textpointer Text07d0 ; 0x07d0
+ textpointer Text07d1 ; 0x07d1
+ textpointer Text07d2 ; 0x07d2
+ textpointer Text07d3 ; 0x07d3
+ textpointer Text07d4 ; 0x07d4
+ textpointer Text07d5 ; 0x07d5
+ textpointer Text07d6 ; 0x07d6
+ textpointer Text07d7 ; 0x07d7
+ textpointer Text07d8 ; 0x07d8
+ textpointer Text07d9 ; 0x07d9
+ textpointer Text07da ; 0x07da
+ textpointer Text07db ; 0x07db
+ textpointer Text07dc ; 0x07dc
+ textpointer Text07dd ; 0x07dd
+ textpointer Text07de ; 0x07de
+ textpointer Text07df ; 0x07df
+ textpointer Text07e0 ; 0x07e0
+ textpointer Text07e1 ; 0x07e1
+ textpointer Text07e2 ; 0x07e2
+ textpointer Text07e3 ; 0x07e3
+ textpointer Text07e4 ; 0x07e4
+ textpointer Text07e5 ; 0x07e5
+ textpointer DefeatedFiveOpponentsText ; 0x07e6
+ textpointer Text07e7 ; 0x07e7
+ textpointer ConsecutiveWinRecordIncreasedText ; 0x07e8
+ textpointer Text07e9 ; 0x07e9
+ textpointer Text07ea ; 0x07ea
+ textpointer Text07eb ; 0x07eb
+ textpointer Text07ec ; 0x07ec
+ textpointer Text07ed ; 0x07ed
+ textpointer Text07ee ; 0x07ee
+ textpointer Text07ef ; 0x07ef
+ textpointer Text07f0 ; 0x07f0
+ textpointer Text07f1 ; 0x07f1
+ textpointer Text07f2 ; 0x07f2
+ textpointer Text07f3 ; 0x07f3
+ textpointer Text07f4 ; 0x07f4
+ textpointer Text07f5 ; 0x07f5
+ textpointer Text07f6 ; 0x07f6
+ textpointer Text07f7 ; 0x07f7
+ textpointer Text07f8 ; 0x07f8
+ textpointer Text07f9 ; 0x07f9
+ textpointer Text07fa ; 0x07fa
+ textpointer Text07fb ; 0x07fb
+ textpointer GrassEnergyName ; 0x07fc
+ textpointer GrassEnergyDescription ; 0x07fd
+ textpointer FireEnergyName ; 0x07fe
+ textpointer FireEnergyDescription ; 0x07ff
+ textpointer WaterEnergyName ; 0x0800
+ textpointer WaterEnergyDescription ; 0x0801
+ textpointer LightningEnergyName ; 0x0802
+ textpointer LightningEnergyDescription ; 0x0803
+ textpointer FightingEnergyName ; 0x0804
+ textpointer FightingEnergyDescription ; 0x0805
+ textpointer PsychicEnergyName ; 0x0806
+ textpointer PsychicEnergyDescription ; 0x0807
+ textpointer DoubleColorlessEnergyName ; 0x0808
+ textpointer DoubleColorlessEnergyDescription ; 0x0809
+ textpointer BulbasaurName ; 0x080a
+ textpointer LeechSeedName ; 0x080b
+ textpointer BulbasaursLeechSeedDescription ; 0x080c
+ textpointer SeedName ; 0x080d
+ textpointer BulbasaurDescription ; 0x080e
+ textpointer IvysaurName ; 0x080f
+ textpointer VineWhipName ; 0x0810
+ textpointer PoisonPowderName ; 0x0811
+ textpointer InflictPoisonDescription ; 0x0812
+ textpointer IvysaurDescription ; 0x0813
+ textpointer VenusaurName ; 0x0814
+ textpointer SolarPowerName ; 0x0815
+ textpointer SolarPowerDescription ; 0x0816
+ textpointer SolarPowerDescriptionCont ; 0x0817
+ textpointer MegaDrainName ; 0x0818
+ textpointer VenusaursMegaDrainDescription ; 0x0819
+ textpointer VenusaursMegaDrainDescriptionCont ; 0x081a
+ textpointer Venusaur1Description ; 0x081b
+ textpointer EnergyTransName ; 0x081c
+ textpointer EnergyTransDescription ; 0x081d
+ textpointer SolarBeamName ; 0x081e
+ textpointer Venusaur2Description ; 0x081f
+ textpointer CaterpieName ; 0x0820
+ textpointer StringShotName ; 0x0821
+ textpointer MayInflictParalysisDescription ; 0x0822
+ textpointer WormName ; 0x0823
+ textpointer CaterpieDescription ; 0x0824
+ textpointer MetapodName ; 0x0825
+ textpointer StiffenName ; 0x0826
+ textpointer MetapodsStiffenDescription ; 0x0827
+ textpointer StunSporeName ; 0x0828
+ textpointer CocoonName ; 0x0829
+ textpointer MetapodDescription ; 0x082a
+ textpointer ButterfreeName ; 0x082b
+ textpointer WhirlwindName ; 0x082c
+ textpointer WhirlwindDescription ; 0x082d
+ textpointer ButterfreesMegaDrainDescription ; 0x082e
+ textpointer ButterfreesMegaDrainDescriptionCont ; 0x082f
+ textpointer ButterflyName ; 0x0830
+ textpointer ButterfreeDescription ; 0x0831
+ textpointer WeedleName ; 0x0832
+ textpointer PoisonStingName ; 0x0833
+ textpointer MayInflictPoisonDescription ; 0x0834
+ textpointer HairyBugName ; 0x0835
+ textpointer WeedleDescription ; 0x0836
+ textpointer KakunaName ; 0x0837
+ textpointer KakunasStiffenDescription ; 0x0838
+ textpointer KakunaDescription ; 0x0839
+ textpointer BeedrillName ; 0x083a
+ textpointer TwineedleName ; 0x083b
+ textpointer DoubleAttackX30Description ; 0x083c
+ textpointer PoisonBeeName ; 0x083d
+ textpointer BeedrillDescription ; 0x083e
+ textpointer EkansName ; 0x083f
+ textpointer SpitPoisonName ; 0x0840
+ textpointer WrapName ; 0x0841
+ textpointer SnakeName ; 0x0842
+ textpointer EkansDescription ; 0x0843
+ textpointer ArbokName ; 0x0844
+ textpointer TerrorStrikeName ; 0x0845
+ textpointer TerrorStrikeDescription ; 0x0846
+ textpointer PoisonFangName ; 0x0847
+ textpointer CobraName ; 0x0848
+ textpointer ArbokDescription ; 0x0849
+ textpointer NidoranFName ; 0x084a
+ textpointer FurySweepesName ; 0x084b
+ textpointer TripleAttackX10Description ; 0x084c
+ textpointer CallForFamilyName ; 0x084d
+ textpointer NidoranFsCallForFamilyDescription ; 0x084e
+ textpointer PoisonPinName ; 0x084f
+ textpointer NidoranFDescription ; 0x0850
+ textpointer NidorinaName ; 0x0851
+ textpointer SupersonicName ; 0x0852
+ textpointer MayInflictConfusionDescription ; 0x0853
+ textpointer DoubleKickName ; 0x0854
+ textpointer NidorinaDescription ; 0x0855
+ textpointer NidoqueenName ; 0x0856
+ textpointer BoyfriendsName ; 0x0857
+ textpointer BoyfriendsDescription ; 0x0858
+ textpointer MegaPunchName ; 0x0859
+ textpointer DrillName ; 0x085a
+ textpointer NidoqueenDescription ; 0x085b
+ textpointer NidoranMName ; 0x085c
+ textpointer HornHazardName ; 0x085d
+ textpointer MayDoNothingDescription ; 0x085e
+ textpointer NidoranMDescription ; 0x085f
+ textpointer NidorinoName ; 0x0860
+ textpointer HornDrillName ; 0x0861
+ textpointer NidorinoDescription ; 0x0862
+ textpointer NidokingName ; 0x0863
+ textpointer ThrashName ; 0x0864
+ textpointer ThrashDescription ; 0x0865
+ textpointer ToxicName ; 0x0866
+ textpointer ToxicDescription ; 0x0867
+ textpointer NidokingDescription ; 0x0868
+ textpointer ZubatName ; 0x0869
+ textpointer LeechLifeName ; 0x086a
+ textpointer ZubatsLeechLifeDescription ; 0x086b
+ textpointer BatName ; 0x086c
+ textpointer ZubatDescription ; 0x086d
+ textpointer GolbatName ; 0x086e
+ textpointer WingAttackName ; 0x086f
+ textpointer GolbatsLeechLifeDescription ; 0x0870
+ textpointer GolbatDescription ; 0x0871
+ textpointer OddishName ; 0x0872
+ textpointer SproutName ; 0x0873
+ textpointer SproutDescription ; 0x0874
+ textpointer WeedName ; 0x0875
+ textpointer OddishDescription ; 0x0876
+ textpointer GloomName ; 0x0877
+ textpointer FoulOdorName ; 0x0878
+ textpointer FoulOdorDescription ; 0x0879
+ textpointer GloomDescription ; 0x087a
+ textpointer VileplumeName ; 0x087b
+ textpointer HealName ; 0x087c
+ textpointer HealDescription ; 0x087d
+ textpointer PetalDanceName ; 0x087e
+ textpointer PetalDanceDescription ; 0x087f
+ textpointer FlowerName ; 0x0880
+ textpointer VileplumeDescription ; 0x0881
+ textpointer ParasName ; 0x0882
+ textpointer ScratchName ; 0x0883
+ textpointer SporeName ; 0x0884
+ textpointer InflictSleepDescription ; 0x0885
+ textpointer MushroomName ; 0x0886
+ textpointer ParasDescription ; 0x0887
+ textpointer ParasectName ; 0x0888
+ textpointer SlashName ; 0x0889
+ textpointer ParasectDescription ; 0x088a
+ textpointer VenonatName ; 0x088b
+ textpointer VenonatLeechLifeDescription ; 0x088c
+ textpointer InsectName ; 0x088d
+ textpointer VenonatDescription ; 0x088e
+ textpointer VenomothName ; 0x088f
+ textpointer ShiftName ; 0x0890
+ textpointer ShiftDescription ; 0x0891
+ textpointer VenomPowderName ; 0x0892
+ textpointer VenomPowderDescription ; 0x0893
+ textpointer PoisonmothName ; 0x0894
+ textpointer VenomothDescription ; 0x0895
+ textpointer BellsproutName ; 0x0896
+ textpointer BellsproutsCallForFamilyDescription ; 0x0897
+ textpointer BellsproutDescription ; 0x0898
+ textpointer WeepinbellName ; 0x0899
+ textpointer RazorLeafName ; 0x089a
+ textpointer FlycatcherName ; 0x089b
+ textpointer WeepinbellDescription ; 0x089c
+ textpointer VictreebelName ; 0x089d
+ textpointer LureName ; 0x089e
+ textpointer VictreebelsLureDescription ; 0x089f
+ textpointer AcidName ; 0x08a0
+ textpointer VictreebelsAcidDescription ; 0x08a1
+ textpointer VictreebelDescription ; 0x08a2
+ textpointer GrimerName ; 0x08a3
+ textpointer NastyGooName ; 0x08a4
+ textpointer MinimizeName ; 0x08a5
+ textpointer GrimersMinimizeDescription ; 0x08a6
+ textpointer SludgeName ; 0x08a7
+ textpointer GrimerDescription ; 0x08a8
+ textpointer MukName ; 0x08a9
+ textpointer ToxicGasName ; 0x08aa
+ textpointer ToxicGasDescription ; 0x08ab
+ textpointer MukDescription ; 0x08ac
+ textpointer ExeggcuteName ; 0x08ad
+ textpointer HypnosisName ; 0x08ae
+ textpointer ExeggcutesLeechSeedDescription ; 0x08af
+ textpointer EggName ; 0x08b0
+ textpointer ExeggcuteDescription ; 0x08b1
+ textpointer ExeggutorName ; 0x08b2
+ textpointer TeleportName ; 0x08b3
+ textpointer TeleportDescription ; 0x08b4
+ textpointer BigEggsplosionName ; 0x08b5
+ textpointer BigEggsplosionDescription ; 0x08b6
+ textpointer CoconutName ; 0x08b7
+ textpointer ExeggutorDescription ; 0x08b8
+ textpointer KoffingName ; 0x08b9
+ textpointer FoulGasName ; 0x08ba
+ textpointer FoulGasDescription ; 0x08bb
+ textpointer PoisonGasName ; 0x08bc
+ textpointer KoffingDescription ; 0x08bd
+ textpointer WeezingName ; 0x08be
+ textpointer SmogName ; 0x08bf
+ textpointer SelfdestructName ; 0x08c0
+ textpointer WeezingsSelfdestructDescription ; 0x08c1
+ textpointer WeezingDescription ; 0x08c2
+ textpointer TangelaName ; 0x08c3
+ textpointer BindName ; 0x08c4
+ textpointer VineName ; 0x08c5
+ textpointer Tangela1Description ; 0x08c6
+ textpointer PoisonWhipName ; 0x08c7
+ textpointer Tangela2Description ; 0x08c8
+ textpointer ScytherName ; 0x08c9
+ textpointer SwordsDanceName ; 0x08ca
+ textpointer SwordsDanceDescription ; 0x08cb
+ textpointer MantisName ; 0x08cc
+ textpointer ScytherDescription ; 0x08cd
+ textpointer PinsirName ; 0x08ce
+ textpointer IronGripName ; 0x08cf
+ textpointer GuillotineName ; 0x08d0
+ textpointer StagbeetleName ; 0x08d1
+ textpointer PinsirDescription ; 0x08d2
+ textpointer CharmanderName ; 0x08d3
+ textpointer EmberName ; 0x08d4
+ textpointer EmberDescription ; 0x08d5
+ textpointer LizardName ; 0x08d6
+ textpointer CharmanderDescription ; 0x08d7
+ textpointer CharmeleonName ; 0x08d8
+ textpointer FlamethrowerName ; 0x08d9
+ textpointer CharmeleonsFlamethrowerDescription ; 0x08da
+ textpointer FlameName ; 0x08db
+ textpointer CharmeleonDescription ; 0x08dc
+ textpointer CharizardName ; 0x08dd
+ textpointer EnergyBurnName ; 0x08de
+ textpointer EnergyBurnDescription ; 0x08df
+ textpointer FireSpinName ; 0x08e0
+ textpointer FireSpinDescription ; 0x08e1
+ textpointer CharizardDescription ; 0x08e2
+ textpointer VulpixName ; 0x08e3
+ textpointer ConfuseRayName ; 0x08e4
+ textpointer FoxName ; 0x08e5
+ textpointer VulpixDescription ; 0x08e6
+ textpointer NinetailsName ; 0x08e7
+ textpointer NinetailsLureDescription ; 0x08e8
+ textpointer FireBlastName ; 0x08e9
+ textpointer FireBlastDescription ; 0x08ea
+ textpointer Ninetails1Description ; 0x08eb
+ textpointer MixUpName ; 0x08ec
+ textpointer MixUpDescription ; 0x08ed
+ textpointer MixUpDescriptionCont ; 0x08ee
+ textpointer DancingEmbersName ; 0x08ef
+ textpointer DancingEmbersDescription ; 0x08f0
+ textpointer Ninetails2Description ; 0x08f1
+ textpointer GrowlitheName ; 0x08f2
+ textpointer FlareName ; 0x08f3
+ textpointer PuppyName ; 0x08f4
+ textpointer GrowlitheDescription ; 0x08f5
+ textpointer ArcanineName ; 0x08f6
+ textpointer QuickAttackName ; 0x08f7
+ textpointer QuickAttackDescription ; 0x08f8
+ textpointer FlamesOfRageName ; 0x08f9
+ textpointer FlamesOfRageDescription ; 0x08fa
+ textpointer LegendaryName ; 0x08fb
+ textpointer Arcanine1Description ; 0x08fc
+ textpointer ArcaninesFlamethrowerDescription ; 0x08fd
+ textpointer TakeDownName ; 0x08fe
+ textpointer TakeDownDescription ; 0x08ff
+ textpointer Arcanine2Description ; 0x0900
+ textpointer PonytaName ; 0x0901
+ textpointer SmashKickName ; 0x0902
+ textpointer FlameTailName ; 0x0903
+ textpointer FireHorseName ; 0x0904
+ textpointer PonytaDescription ; 0x0905
+ textpointer RapidashName ; 0x0906
+ textpointer StompName ; 0x0907
+ textpointer StompDescription ; 0x0908
+ textpointer AgilityName ; 0x0909
+ textpointer RapidashsAgilityDescription ; 0x090a
+ textpointer RapidashDescription ; 0x090b
+ textpointer MagmarName ; 0x090c
+ textpointer FirePunchName ; 0x090d
+ textpointer FirePunchDescription ; 0x090e
+ textpointer SpitfireName ; 0x090f
+ textpointer Magmar1Description ; 0x0910
+ textpointer SmokescreenName ; 0x0911
+ textpointer MagmarsSmokescreenDescription ; 0x0912
+ textpointer Magmar2Description ; 0x0913
+ textpointer FlareonName ; 0x0914
+ textpointer EeveeName ; 0x0915
+ textpointer BiteName ; 0x0916
+ textpointer RageName ; 0x0917
+ textpointer FlareonsRageDescription ; 0x0918
+ textpointer Flareon1Description ; 0x0919
+ textpointer FlareonsFlamethrowerDescription ; 0x091a
+ textpointer Flareon2Description ; 0x091b
+ textpointer MoltresName ; 0x091c
+ textpointer WildfireName ; 0x091d
+ textpointer WildfireDescription ; 0x091e
+ textpointer DiveBombName ; 0x091f
+ textpointer Moltres1Description ; 0x0920
+ textpointer FiregiverName ; 0x0921
+ textpointer FiregiverDescription ; 0x0922
+ textpointer Moltres2Description ; 0x0923
+ textpointer SquirtleName ; 0x0924
+ textpointer BubbleName ; 0x0925
+ textpointer WithdrawName ; 0x0926
+ textpointer SquirtlesWithdrawDescription ; 0x0927
+ textpointer TinyTurtleName ; 0x0928
+ textpointer SquirtleDescription ; 0x0929
+ textpointer WartortleName ; 0x092a
+ textpointer WartortlesWithdrawDescription ; 0x092b
+ textpointer TurtleName ; 0x092c
+ textpointer WartortleDescription ; 0x092d
+ textpointer BlastoiseName ; 0x092e
+ textpointer RainDanceName ; 0x092f
+ textpointer RainDanceDescription ; 0x0930
+ textpointer RainDanceDescriptionCont ; 0x0931
+ textpointer HydroPumpName ; 0x0932
+ textpointer HydroPumpDescription ; 0x0933
+ textpointer ShellfishName ; 0x0934
+ textpointer BlastoiseDescription ; 0x0935
+ textpointer PsyduckName ; 0x0936
+ textpointer HeadacheName ; 0x0937
+ textpointer HeadacheDescription ; 0x0938
+ textpointer DuckName ; 0x0939
+ textpointer PsyduckDescription ; 0x093a
+ textpointer GolduckName ; 0x093b
+ textpointer PsyshockName ; 0x093c
+ textpointer HyperBeamName ; 0x093d
+ textpointer Discard1EnergyFromTargetDescription ; 0x093e
+ textpointer GolduckDescription ; 0x093f
+ textpointer PoliwagName ; 0x0940
+ textpointer WaterGunName ; 0x0941
+ textpointer PoliwagsWaterGunDescription ; 0x0942
+ textpointer TadpoleName ; 0x0943
+ textpointer PoliwagDescription ; 0x0944
+ textpointer PoliwhirlName ; 0x0945
+ textpointer AmnesiaName ; 0x0946
+ textpointer PoliwhirlsAmnesiaDescription ; 0x0947
+ textpointer DoubleslapName ; 0x0948
+ textpointer PoliwhirlsDescription ; 0x0949
+ textpointer PoliwrathName ; 0x094a
+ textpointer PoliwrathsWaterGunDescription ; 0x094b
+ textpointer WhirlpoolName ; 0x094c
+ textpointer PoliwrathDescription ; 0x094d
+ textpointer TentacoolName ; 0x094e
+ textpointer CowardiceName ; 0x094f
+ textpointer CowardiceDescription ; 0x0950
+ textpointer JellyfishName ; 0x0951
+ textpointer TentacoolDescription ; 0x0952
+ textpointer TentacruelName ; 0x0953
+ textpointer JellyfishStingName ; 0x0954
+ textpointer TentacruelDescription ; 0x0955
+ textpointer SeelName ; 0x0956
+ textpointer HeadbuttName ; 0x0957
+ textpointer SeaLionName ; 0x0958
+ textpointer SeelDescription ; 0x0959
+ textpointer DewgongName ; 0x095a
+ textpointer AuroraBeamName ; 0x095b
+ textpointer IceBeamName ; 0x095c
+ textpointer DewgongDescription ; 0x095d
+ textpointer ShellderName ; 0x095e
+ textpointer HideInShellName ; 0x095f
+ textpointer HideInShellDescription ; 0x0960
+ textpointer BivalveName ; 0x0961
+ textpointer ShellderDescription ; 0x0962
+ textpointer CloysterName ; 0x0963
+ textpointer ClampName ; 0x0964
+ textpointer ClampDescription ; 0x0965
+ textpointer SpikeCannonName ; 0x0966
+ textpointer CloysterDescription ; 0x0967
+ textpointer KrabbyName ; 0x0968
+ textpointer KrabbysCallForFamilyDescription ; 0x0969
+ textpointer RiverCrabName ; 0x096a
+ textpointer KrabbyDescription ; 0x096b
+ textpointer KinglerName ; 0x096c
+ textpointer FlailName ; 0x096d
+ textpointer KinglersFlailDescription ; 0x096e
+ textpointer CrabhammerName ; 0x096f
+ textpointer PincerName ; 0x0970
+ textpointer KinglerDescription ; 0x0971
+ textpointer HorseaName ; 0x0972
+ textpointer OpponentAttackMayDoNothingDescription ; 0x0973
+ textpointer DragonName ; 0x0974
+ textpointer HorseaDescription ; 0x0975
+ textpointer SeadraName ; 0x0976
+ textpointer SeadrasWaterGunDescription ; 0x0977
+ textpointer SeadrasAgilityDescription ; 0x0978
+ textpointer SeadraDescription ; 0x0979
+ textpointer GoldeenName ; 0x097a
+ textpointer HornAttackName ; 0x097b
+ textpointer GoldfishName ; 0x097c
+ textpointer GoldeenDescription ; 0x097d
+ textpointer SeakingName ; 0x097e
+ textpointer WaterfallName ; 0x097f
+ textpointer SeakingDescription ; 0x0980
+ textpointer StaryuName ; 0x0981
+ textpointer SlapName ; 0x0982
+ textpointer StarshapeName ; 0x0983
+ textpointer StaryuDescription ; 0x0984
+ textpointer StarmieName ; 0x0985
+ textpointer RecoverName ; 0x0986
+ textpointer StarmiesRecoverDescription ; 0x0987
+ textpointer StarFreezeName ; 0x0988
+ textpointer MysteriousName ; 0x0989
+ textpointer StarmieDescription ; 0x098a
+ textpointer MagikarpName ; 0x098b
+ textpointer TackleName ; 0x098c
+ textpointer MagikarpsFlailDescription ; 0x098d
+ textpointer FishName ; 0x098e
+ textpointer MagikarpDescription ; 0x098f
+ textpointer GyaradosName ; 0x0990
+ textpointer DragonRageName ; 0x0991
+ textpointer BubblebeamName ; 0x0992
+ textpointer AtrociousName ; 0x0993
+ textpointer GyaradosDescription ; 0x0994
+ textpointer LaprasName ; 0x0995
+ textpointer LaprasWaterGunDescription ; 0x0996
+ textpointer TransportName ; 0x0997
+ textpointer LaprasDescription ; 0x0998
+ textpointer VaporeonName ; 0x0999
+ textpointer FocusEnergyName ; 0x099a
+ textpointer FocusEnergyDescription ; 0x099b
+ textpointer BubbleJetName ; 0x099c
+ textpointer Vaporeon1Description ; 0x099d
+ textpointer VaporeonsWaterGunDescription ; 0x099e
+ textpointer Vaporeon2Description ; 0x099f
+ textpointer OmanyteName ; 0x09a0
+ textpointer MysteriousFossilName ; 0x09a1
+ textpointer ClairvoyanceName ; 0x09a2
+ textpointer ClairvoyanceDescription ; 0x09a3
+ textpointer OmanytesWaterGunDescription ; 0x09a4
+ textpointer SpiralName ; 0x09a5
+ textpointer OmanyteDescription ; 0x09a6
+ textpointer OmastarName ; 0x09a7
+ textpointer OmastarsWaterGunDescription ; 0x09a8
+ textpointer OmastarDescription ; 0x09a9
+ textpointer ArticunoName ; 0x09aa
+ textpointer FreezeDryName ; 0x09ab
+ textpointer BlizzardName ; 0x09ac
+ textpointer BlizzardDescription ; 0x09ad
+ textpointer FreezeName ; 0x09ae
+ textpointer Articuno1Description ; 0x09af
+ textpointer QuickfreezeName ; 0x09b0
+ textpointer QuickfreezeDescription ; 0x09b1
+ textpointer IceBreathName ; 0x09b2
+ textpointer IceBreathDescription ; 0x09b3
+ textpointer Articuno2Description ; 0x09b4
+ textpointer PikachuName ; 0x09b5
+ textpointer GnawName ; 0x09b6
+ textpointer ThunderJoltName ; 0x09b7
+ textpointer ThunderJoltDescription ; 0x09b8
+ textpointer MouseName ; 0x09b9
+ textpointer Pikachu1Description ; 0x09ba
+ textpointer SparkName ; 0x09bb
+ textpointer SparkDescription ; 0x09bc
+ textpointer Pikachu2Description ; 0x09bd
+ textpointer GrowlName ; 0x09be
+ textpointer GrowlDescription ; 0x09bf
+ textpointer ThundershockName ; 0x09c0
+ textpointer Pikachu3Description ; 0x09c1
+ textpointer FlyingPikachuName ; 0x09c2
+ textpointer FlyName ; 0x09c3
+ textpointer FlyDescription ; 0x09c4
+ textpointer FlyingPikachuDescription ; 0x09c5
+ textpointer SurfingPikachuName ; 0x09c6
+ textpointer SurfName ; 0x09c7
+ textpointer SurfingPikachuDescription ; 0x09c8
+ textpointer RaichuName ; 0x09c9
+ textpointer RaichusAgilityDescription ; 0x09ca
+ textpointer ThunderName ; 0x09cb
+ textpointer RaichusThunderDescription ; 0x09cc
+ textpointer Raichu1Description ; 0x09cd
+ textpointer GigashockName ; 0x09ce
+ textpointer GigashockDescription ; 0x09cf
+ textpointer Raichu2Description ; 0x09d0
+ textpointer MagnemiteName ; 0x09d1
+ textpointer ThunderWaveName ; 0x09d2
+ textpointer MagnemitesSelfdestructDescription ; 0x09d3
+ textpointer MagnetName ; 0x09d4
+ textpointer Magnemite1Description ; 0x09d5
+ textpointer MagneticStormName ; 0x09d6
+ textpointer MagneticStormDescription ; 0x09d7
+ textpointer Magnemite2Description ; 0x09d8
+ textpointer MagnetonName ; 0x09d9
+ textpointer Magneton1sSelfdestructDescription ; 0x09da
+ textpointer Magneton1Description ; 0x09db
+ textpointer SonicboomName ; 0x09dc
+ textpointer SonicboomDescription ; 0x09dd
+ textpointer Magneton2sSelfdestructDescription ; 0x09de
+ textpointer Magneton2Description ; 0x09df
+ textpointer VoltorbName ; 0x09e0
+ textpointer BallName ; 0x09e1
+ textpointer VoltorbDescription ; 0x09e2
+ textpointer ElectrodeName ; 0x09e3
+ textpointer EnergySpikeName ; 0x09e4
+ textpointer EnergySpikeDescription ; 0x09e5
+ textpointer Electrode1Description ; 0x09e6
+ textpointer ChainLightningName ; 0x09e7
+ textpointer ChainLightningDescription ; 0x09e8
+ textpointer Electrode2Description ; 0x09e9
+ textpointer ElectabuzzName ; 0x09ea
+ textpointer LightScreenName ; 0x09eb
+ textpointer LightScreenDescription ; 0x09ec
+ textpointer LightScreenDescriptionCont ; 0x09ed
+ textpointer ElectabuzzsQuickAttackDescription ; 0x09ee
+ textpointer ElectricName ; 0x09ef
+ textpointer Electabuzz1Description ; 0x09f0
+ textpointer ThunderpunchName ; 0x09f1
+ textpointer ThunderpunchDescription ; 0x09f2
+ textpointer Electabuzz2Description ; 0x09f3
+ textpointer JolteonName ; 0x09f4
+ textpointer DoubleAttackX20Description ; 0x09f5
+ textpointer StunNeedleName ; 0x09f6
+ textpointer LightningName ; 0x09f7
+ textpointer Jolteon1Description ; 0x09f8
+ textpointer PinMissileName ; 0x09f9
+ textpointer QuadrupleAttackX20Description ; 0x09fa
+ textpointer Jolteon2Description ; 0x09fb
+ textpointer ZapdosName ; 0x09fc
+ textpointer ThunderstormName ; 0x09fd
+ textpointer ThunderstormDescription ; 0x09fe
+ textpointer Zapdos1Description ; 0x09ff
+ textpointer ZapdosThunderDescription ; 0x0a00
+ textpointer ThunderboltName ; 0x0a01
+ textpointer ThunderboltDescription ; 0x0a02
+ textpointer Zapdos2Description ; 0x0a03
+ textpointer PealOfThunderName ; 0x0a04
+ textpointer PealOfThunderDescription ; 0x0a05
+ textpointer BigThunderName ; 0x0a06
+ textpointer BigThunderDescription ; 0x0a07
+ textpointer Zapdos3Description ; 0x0a08
+ textpointer SandshrewName ; 0x0a09
+ textpointer SandAttackName ; 0x0a0a
+ textpointer SandshrewDescription ; 0x0a0b
+ textpointer SandslashName ; 0x0a0c
+ textpointer TripleAttackX20Description ; 0x0a0d
+ textpointer SandslashDescription ; 0x0a0e
+ textpointer DiglettName ; 0x0a0f
+ textpointer DigName ; 0x0a10
+ textpointer MudSlapName ; 0x0a11
+ textpointer MoleName ; 0x0a12
+ textpointer DiglettDescription ; 0x0a13
+ textpointer DugtrioName ; 0x0a14
+ textpointer EarthquakeName ; 0x0a15
+ textpointer EarthquakeDescription ; 0x0a16
+ textpointer DugtrioDescription ; 0x0a17
+ textpointer MankeyName ; 0x0a18
+ textpointer PeekName ; 0x0a19
+ textpointer PeekDescription ; 0x0a1a
+ textpointer PeekDescriptionCont ; 0x0a1b
+ textpointer PigMonkeyName ; 0x0a1c
+ textpointer MankeyDescription ; 0x0a1d
+ textpointer PrimeapeName ; 0x0a1e
+ textpointer TantrumName ; 0x0a1f
+ textpointer TantrumDescription ; 0x0a20
+ textpointer PrimeapeDescription ; 0x0a21
+ textpointer MachopName ; 0x0a22
+ textpointer LowKickName ; 0x0a23
+ textpointer SuperpowerName ; 0x0a24
+ textpointer MachopDescription ; 0x0a25
+ textpointer MachokeName ; 0x0a26
+ textpointer KarateChopName ; 0x0a27
+ textpointer KarateChopDescription ; 0x0a28
+ textpointer SubmissionName ; 0x0a29
+ textpointer SubmissionDescription ; 0x0a2a
+ textpointer MachokeDescription ; 0x0a2b
+ textpointer MachampName ; 0x0a2c
+ textpointer StrikesBackName ; 0x0a2d
+ textpointer StrikesBackDescription ; 0x0a2e
+ textpointer StrikesBackDescriptionCont ; 0x0a2f
+ textpointer SeismicTossName ; 0x0a30
+ textpointer MachampDescription ; 0x0a31
+ textpointer GeodudeName ; 0x0a32
+ textpointer StoneBarrageName ; 0x0a33
+ textpointer StoneBarrageDescription ; 0x0a34
+ textpointer RockName ; 0x0a35
+ textpointer GeodudeDescription ; 0x0a36
+ textpointer GravelerName ; 0x0a37
+ textpointer HardenName ; 0x0a38
+ textpointer GravelersHardenDescription ; 0x0a39
+ textpointer RockThrowName ; 0x0a3a
+ textpointer GravelerDescription ; 0x0a3b
+ textpointer GolemName ; 0x0a3c
+ textpointer AvalancheName ; 0x0a3d
+ textpointer GolemsSelfdestructDescription ; 0x0a3e
+ textpointer MegatonName ; 0x0a3f
+ textpointer GolemDescription ; 0x0a40
+ textpointer OnixName ; 0x0a41
+ textpointer OnixsHardenDescription ; 0x0a42
+ textpointer RockSnakeName ; 0x0a43
+ textpointer OnixDescription ; 0x0a44
+ textpointer CuboneName ; 0x0a45
+ textpointer SnivelName ; 0x0a46
+ textpointer SnivelDescription ; 0x0a47
+ textpointer CubonesRageDescription ; 0x0a48
+ textpointer LonelyName ; 0x0a49
+ textpointer CuboneDescription ; 0x0a4a
+ textpointer MarowakName ; 0x0a4b
+ textpointer BonemerangName ; 0x0a4c
+ textpointer CallforFriendName ; 0x0a4d
+ textpointer CallforFriendDescription ; 0x0a4e
+ textpointer BonekeeperName ; 0x0a4f
+ textpointer Marowak1Description ; 0x0a50
+ textpointer BoneAttackName ; 0x0a51
+ textpointer BoneAttackDescription ; 0x0a52
+ textpointer WailName ; 0x0a53
+ textpointer WailDescription ; 0x0a54
+ textpointer Marowak2Description ; 0x0a55
+ textpointer HitmonleeName ; 0x0a56
+ textpointer StretchKickName ; 0x0a57
+ textpointer StretchKickDescription ; 0x0a58
+ textpointer HighJumpKickName ; 0x0a59
+ textpointer KickingName ; 0x0a5a
+ textpointer HitmonleeDescription ; 0x0a5b
+ textpointer HitmonchanName ; 0x0a5c
+ textpointer JabName ; 0x0a5d
+ textpointer SpecialPunch ; 0x0a5e
+ textpointer PunchingName ; 0x0a5f
+ textpointer HitmonchanDescription ; 0x0a60
+ textpointer RhyhornName ; 0x0a61
+ textpointer LeerName ; 0x0a62
+ textpointer LeerDescription ; 0x0a63
+ textpointer SpikeName ; 0x0a64
+ textpointer RhyhornDescription ; 0x0a65
+ textpointer RhydonName ; 0x0a66
+ textpointer RamName ; 0x0a67
+ textpointer RamDescription ; 0x0a68
+ textpointer RamDescriptionCont ; 0x0a69
+ textpointer RhydonDescription ; 0x0a6a
+ textpointer KabutoName ; 0x0a6b
+ textpointer KabutoArmorName ; 0x0a6c
+ textpointer KabutoArmorDescription ; 0x0a6d
+ textpointer KabutoArmorDescriptionCont ; 0x0a6e
+ textpointer KabutoDescription ; 0x0a6f
+ textpointer KabutopsName ; 0x0a70
+ textpointer SharpSickleName ; 0x0a71
+ textpointer AbsorbName ; 0x0a72
+ textpointer AbsorbDescription ; 0x0a73
+ textpointer AbsorbDescriptionCont ; 0x0a74
+ textpointer KabutopsDescription ; 0x0a75
+ textpointer AerodactylName ; 0x0a76
+ textpointer PrehistoricPowerName ; 0x0a77
+ textpointer PrehistoricPowerDescription ; 0x0a78
+ textpointer FossilName ; 0x0a79
+ textpointer AerodactylDescription ; 0x0a7a
+ textpointer AbraName ; 0x0a7b
+ textpointer PsiName ; 0x0a7c
+ textpointer AbraDescription ; 0x0a7d
+ textpointer KadabraName ; 0x0a7e
+ textpointer KadabrasRecoverDescription ; 0x0a7f
+ textpointer SuperPsiName ; 0x0a80
+ textpointer KadabraDescription ; 0x0a81
+ textpointer AlakazamName ; 0x0a82
+ textpointer DamageSwapName ; 0x0a83
+ textpointer DamageSwapDescription ; 0x0a84
+ textpointer AlakazamDescription ; 0x0a85
+ textpointer SlowpokeName ; 0x0a86
+ textpointer SlowpokesAmnesiaDescription ; 0x0a87
+ textpointer DopeyName ; 0x0a88
+ textpointer Slowpoke1Description ; 0x0a89
+ textpointer SpacingOutName ; 0x0a8a
+ textpointer SpacingOutDescription ; 0x0a8b
+ textpointer ScavengeName ; 0x0a8c
+ textpointer ScavengeDescription ; 0x0a8d
+ textpointer SlowbroName ; 0x0a8e
+ textpointer StrangeBehaviorName ; 0x0a8f
+ textpointer StrangeBehaviorDescription ; 0x0a90
+ textpointer HermitcrabName ; 0x0a91
+ textpointer SlowbroDescription ; 0x0a92
+ textpointer GastlyName ; 0x0a93
+ textpointer SleepingGasName ; 0x0a94
+ textpointer MayInflictSleepDescription ; 0x0a95
+ textpointer DestinyBondName ; 0x0a96
+ textpointer DestinyBondDescription ; 0x0a97
+ textpointer GasName ; 0x0a98
+ textpointer Gastly1Description ; 0x0a99
+ textpointer LickName ; 0x0a9a
+ textpointer EnergyConversionName ; 0x0a9b
+ textpointer EnergyConversionDescription ; 0x0a9c
+ textpointer Gastly2Description ; 0x0a9d
+ textpointer HaunterName ; 0x0a9e
+ textpointer TransparencyName ; 0x0a9f
+ textpointer TransparencyDescription ; 0x0aa0
+ textpointer NightmareName ; 0x0aa1
+ textpointer HaunterDescription ; 0x0aa2
+ textpointer DreamEaterName ; 0x0aa3
+ textpointer DreamEaterDescription ; 0x0aa4
+ textpointer GengarName ; 0x0aa5
+ textpointer CurseName ; 0x0aa6
+ textpointer CurseDescription ; 0x0aa7
+ textpointer DarkMindName ; 0x0aa8
+ textpointer DarkMindDescription ; 0x0aa9
+ textpointer ShadowName ; 0x0aaa
+ textpointer GengarDescription ; 0x0aab
+ textpointer DrowzeeName ; 0x0aac
+ textpointer PoundName ; 0x0aad
+ textpointer DrowzeeDescription ; 0x0aae
+ textpointer HypnoName ; 0x0aaf
+ textpointer ProphecyName ; 0x0ab0
+ textpointer ProphecyDescription ; 0x0ab1
+ textpointer HypnoDescription ; 0x0ab2
+ textpointer MrMimeName ; 0x0ab3
+ textpointer InvisibleWallName ; 0x0ab4
+ textpointer InvisibleWallDescription ; 0x0ab5
+ textpointer InvisibleWallDescriptionCont ; 0x0ab6
+ textpointer MeditateName ; 0x0ab7
+ textpointer MrMimesMeditateDescription ; 0x0ab8
+ textpointer BarrierName ; 0x0ab9
+ textpointer MrMimeDescription ; 0x0aba
+ textpointer JynxName ; 0x0abb
+ textpointer DoubleAttackX10Description ; 0x0abc
+ textpointer JynxsMeditateDescription ; 0x0abd
+ textpointer HumanShapeName ; 0x0abe
+ textpointer JynxDescription ; 0x0abf
+ textpointer MewtwoName ; 0x0ac0
+ textpointer PsychicName ; 0x0ac1
+ textpointer PsychicDescription ; 0x0ac2
+ textpointer BarrierDescription ; 0x0ac3
+ textpointer GeneticName ; 0x0ac4
+ textpointer Mewtwo1Description ; 0x0ac5
+ textpointer EnergyAbsorptionName ; 0x0ac6
+ textpointer EnergyAbsorptionDescription ; 0x0ac7
+ textpointer PsyburnName ; 0x0ac8
+ textpointer Mewtwo2Description ; 0x0ac9
+ textpointer MewName ; 0x0aca
+ textpointer NeutralizingShieldName ; 0x0acb
+ textpointer NeutralizingShieldDescription ; 0x0acc
+ textpointer NewSpeciesName ; 0x0acd
+ textpointer Mew1Description ; 0x0ace
+ textpointer MysteryAttackName ; 0x0acf
+ textpointer MysteryAttackDescription ; 0x0ad0
+ textpointer Mew2Description ; 0x0ad1
+ textpointer PsywaveName ; 0x0ad2
+ textpointer PsywaveDescription ; 0x0ad3
+ textpointer DevolutionBeamName ; 0x0ad4
+ textpointer DevolutionBeamDescription ; 0x0ad5
+ textpointer PidgeyName ; 0x0ad6
+ textpointer TinyBirdName ; 0x0ad7
+ textpointer PidgeyDescription ; 0x0ad8
+ textpointer PidgeottoName ; 0x0ad9
+ textpointer MirrorMoveName ; 0x0ada
+ textpointer PidgeottosMirrorMoveDescription ; 0x0adb
+ textpointer BirdName ; 0x0adc
+ textpointer PidgeottoDescription ; 0x0add
+ textpointer PidgeotName ; 0x0ade
+ textpointer SlicingWindName ; 0x0adf
+ textpointer SlicingWildDescription ; 0x0ae0
+ textpointer GaleName ; 0x0ae1
+ textpointer GaleDescription ; 0x0ae2
+ textpointer Pidgeot1Description ; 0x0ae3
+ textpointer HurricaneName ; 0x0ae4
+ textpointer HurricaneDescription ; 0x0ae5
+ textpointer Pidgeot2Description ; 0x0ae6
+ textpointer RattataName ; 0x0ae7
+ textpointer RatName ; 0x0ae8
+ textpointer RattataDescription ; 0x0ae9
+ textpointer RaticateName ; 0x0aea
+ textpointer SuperFangName ; 0x0aeb
+ textpointer SuperFangDescription ; 0x0aec
+ textpointer RaticateDescription ; 0x0aed
+ textpointer SpearowName ; 0x0aee
+ textpointer PeckName ; 0x0aef
+ textpointer SpearowsMirrorMoveDescription ; 0x0af0
+ textpointer SpearowDescription ; 0x0af1
+ textpointer FearowName ; 0x0af2
+ textpointer FearowsAgilityDescription ; 0x0af3
+ textpointer DrillPeckName ; 0x0af4
+ textpointer BeakName ; 0x0af5
+ textpointer FearowDescription ; 0x0af6
+ textpointer ClefairyName ; 0x0af7
+ textpointer SingName ; 0x0af8
+ textpointer MetronomeName ; 0x0af9
+ textpointer ClefairysMetronomeDescription ; 0x0afa
+ textpointer FairyName ; 0x0afb
+ textpointer ClefairyDescription ; 0x0afc
+ textpointer ClefableName ; 0x0afd
+ textpointer ClefablesMetronomeDescription ; 0x0afe
+ textpointer ClefablesMinimizeDescription ; 0x0aff
+ textpointer ClefableDescription ; 0x0b00
+ textpointer JigglypuffName ; 0x0b01
+ textpointer FirstAidName ; 0x0b02
+ textpointer FirstAidDescription ; 0x0b03
+ textpointer DoubleEdgeName ; 0x0b04
+ textpointer JigglypuffsDoubleEdgeDescription ; 0x0b05
+ textpointer BalloonName ; 0x0b06
+ textpointer Jigglypuff1Description ; 0x0b07
+ textpointer FriendshipSongName ; 0x0b08
+ textpointer FriendshipSongDescription ; 0x0b09
+ textpointer ExpandName ; 0x0b0a
+ textpointer ExpandDescription ; 0x0b0b
+ textpointer Jigglypuff2Description ; 0x0b0c
+ textpointer LullabyName ; 0x0b0d
+ textpointer Jigglypuff3Description ; 0x0b0e
+ textpointer WigglytuffName ; 0x0b0f
+ textpointer DoTheWaveName ; 0x0b10
+ textpointer DoTheWaveDescription ; 0x0b11
+ textpointer WigglytuffDescription ; 0x0b12
+ textpointer MeowthName ; 0x0b13
+ textpointer CatPunchName ; 0x0b14
+ textpointer CatPunchDescription ; 0x0b15
+ textpointer ScratchCatName ; 0x0b16
+ textpointer Meowth1Description ; 0x0b17
+ textpointer PayDayName ; 0x0b18
+ textpointer PayDayDescription ; 0x0b19
+ textpointer Meowth2Description ; 0x0b1a
+ textpointer PersianName ; 0x0b1b
+ textpointer PounceName ; 0x0b1c
+ textpointer PounceDescription ; 0x0b1d
+ textpointer ClassyCatName ; 0x0b1e
+ textpointer PersianDescription ; 0x0b1f
+ textpointer FarfetchdName ; 0x0b20
+ textpointer LeekSlapName ; 0x0b21
+ textpointer LeekSlapDescription ; 0x0b22
+ textpointer PotSmashName ; 0x0b23
+ textpointer WildDuckName ; 0x0b24
+ textpointer FarfetchdDescription ; 0x0b25
+ textpointer DoduoName ; 0x0b26
+ textpointer FuryAttackName ; 0x0b27
+ textpointer TwinBirdName ; 0x0b28
+ textpointer DoduoDescription ; 0x0b29
+ textpointer DodrioName ; 0x0b2a
+ textpointer RetreatAidName ; 0x0b2b
+ textpointer RetreatAidDescription ; 0x0b2c
+ textpointer DodriosRageDescription ; 0x0b2d
+ textpointer TriplebirdName ; 0x0b2e
+ textpointer DodrioDescription ; 0x0b2f
+ textpointer LickitungName ; 0x0b30
+ textpointer TongueWrapName ; 0x0b31
+ textpointer LickingName ; 0x0b32
+ textpointer LickitungDescription ; 0x0b33
+ textpointer ChanseyName ; 0x0b34
+ textpointer ScrunchName ; 0x0b35
+ textpointer ScrunchDescription ; 0x0b36
+ textpointer ChanseysDoubleEdgeDescription ; 0x0b37
+ textpointer ChanseyDescription ; 0x0b38
+ textpointer KangaskhanName ; 0x0b39
+ textpointer FetchName ; 0x0b3a
+ textpointer FetchDescription ; 0x0b3b
+ textpointer CometPunchName ; 0x0b3c
+ textpointer ParentName ; 0x0b3d
+ textpointer KangaskhanDescription ; 0x0b3e
+ textpointer TaurosName ; 0x0b3f
+ textpointer RampageName ; 0x0b40
+ textpointer RampageDescription ; 0x0b41
+ textpointer WildBullName ; 0x0b42
+ textpointer TaurosDescription ; 0x0b43
+ textpointer DittoName ; 0x0b44
+ textpointer MorphName ; 0x0b45
+ textpointer MorphDescription ; 0x0b46
+ textpointer MorphDescriptionCont ; 0x0b47
+ textpointer TransformName ; 0x0b48
+ textpointer DittoDescription ; 0x0b49
+ textpointer TailWagName ; 0x0b4a
+ textpointer TailWagDescription ; 0x0b4b
+ textpointer EvolutionName ; 0x0b4c
+ textpointer EeveeDescription ; 0x0b4d
+ textpointer PorygonName ; 0x0b4e
+ textpointer Conversion1Name ; 0x0b4f
+ textpointer Conversion1Description ; 0x0b50
+ textpointer Conversion2Name ; 0x0b51
+ textpointer Conversion2Description ; 0x0b52
+ textpointer VirtualName ; 0x0b53
+ textpointer PorygonDescription ; 0x0b54
+ textpointer SnorlaxName ; 0x0b55
+ textpointer ThickSkinnedName ; 0x0b56
+ textpointer ThickSkinnedDescription ; 0x0b57
+ textpointer BodySlamName ; 0x0b58
+ textpointer SleepingName ; 0x0b59
+ textpointer SnorlaxDescription ; 0x0b5a
+ textpointer DratiniName ; 0x0b5b
+ textpointer DratiniDescription ; 0x0b5c
+ textpointer DragonairName ; 0x0b5d
+ textpointer SlamName ; 0x0b5e
+ textpointer DragonairDescription ; 0x0b5f
+ textpointer DragoniteName ; 0x0b60
+ textpointer HealingWindName ; 0x0b61
+ textpointer HealingWindDescription ; 0x0b62
+ textpointer Dragonite1Description ; 0x0b63
+ textpointer StepInName ; 0x0b64
+ textpointer StepInDescription ; 0x0b65
+ textpointer DoubleAttackX40Description ; 0x0b66
+ textpointer DragoniteDescription ; 0x0b67
+ textpointer ProfessorOakName ; 0x0b68
+ textpointer ProfessorOakDescription ; 0x0b69
+ textpointer ImposterProfessorOakName ; 0x0b6a
+ textpointer ImposterProfessorOakDescription ; 0x0b6b
+ textpointer BillName ; 0x0b6c
+ textpointer BillDescription ; 0x0b6d
+ textpointer MrFujiName ; 0x0b6e
+ textpointer MrFujiDescription ; 0x0b6f
+ textpointer LassName ; 0x0b70
+ textpointer LassDescription ; 0x0b71
+ textpointer ImakuniName ; 0x0b72
+ textpointer ImakuniDescription ; 0x0b73
+ textpointer PokemonTraderName ; 0x0b74
+ textpointer PokemonTraderDescription ; 0x0b75
+ textpointer PokemonBreederName ; 0x0b76
+ textpointer PokemonBreederDescription ; 0x0b77
+ textpointer ClefairyDollName ; 0x0b78
+ textpointer ClefairyDollDescription ; 0x0b79
+ textpointer ClefairyDollDescriptionCont ; 0x0b7a
+ textpointer MysteriousFossilDescription ; 0x0b7b
+ textpointer MysteriousFossilDescriptionCont ; 0x0b7c
+ textpointer EnergyRetrievalName ; 0x0b7d
+ textpointer EnergyRetrievalDescription ; 0x0b7e
+ textpointer SuperEnergyRetrievalName ; 0x0b7f
+ textpointer SuperEnergyRetrievalDescription ; 0x0b80
+ textpointer EnergySearchName ; 0x0b81
+ textpointer EnergySearchDescription ; 0x0b82
+ textpointer EnergyRemovalName ; 0x0b83
+ textpointer EnergyRemovalDescription ; 0x0b84
+ textpointer SuperEnergyRemovalName ; 0x0b85
+ textpointer SuperEnergyRemovalDescription ; 0x0b86
+ textpointer SwitchName ; 0x0b87
+ textpointer SwitchDescription ; 0x0b88
+ textpointer PokemonCenterName ; 0x0b89
+ textpointer PokemonCenterDescription ; 0x0b8a
+ textpointer PokeBallName ; 0x0b8b
+ textpointer PokeBallDescription ; 0x0b8c
+ textpointer ScoopUpName ; 0x0b8d
+ textpointer ScoopUpDescription ; 0x0b8e
+ textpointer ComputerSearchName ; 0x0b8f
+ textpointer ComputerSearchDescription ; 0x0b90
+ textpointer PokedexName ; 0x0b91
+ textpointer PokedexDescription ; 0x0b92
+ textpointer PlusPowerName ; 0x0b93
+ textpointer PlusPowerDescription ; 0x0b94
+ textpointer DefenderName ; 0x0b95
+ textpointer DefenderDescription ; 0x0b96
+ textpointer ItemFinderName ; 0x0b97
+ textpointer ItemFinderDescription ; 0x0b98
+ textpointer GustOfWindName ; 0x0b99
+ textpointer GustOfWindDescription ; 0x0b9a
+ textpointer DevolutionSprayName ; 0x0b9b
+ textpointer DevolutionSprayDescription ; 0x0b9c
+ textpointer DevolutionSprayDescriptionCont ; 0x0b9d
+ textpointer PotionName ; 0x0b9e
+ textpointer PotionDescription ; 0x0b9f
+ textpointer SuperPotionName ; 0x0ba0
+ textpointer SuperPotionDescription ; 0x0ba1
+ textpointer FullHealName ; 0x0ba2
+ textpointer FullHealDescription ; 0x0ba3
+ textpointer ReviveName ; 0x0ba4
+ textpointer ReviveDescription ; 0x0ba5
+ textpointer MaintenanceName ; 0x0ba6
+ textpointer MaintenanceDescription ; 0x0ba7
+ textpointer PokemonFluteName ; 0x0ba8
+ textpointer PokemonFluteDescription ; 0x0ba9
+ textpointer GamblerName ; 0x0baa
+ textpointer GamblerDescription ; 0x0bab
+ textpointer RecycleName ; 0x0bac
+ textpointer RecycleDescription ; 0x0bad
diff --git a/src/wram.asm b/src/wram.asm
index 20abcf6..e5fc9c6 100644
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -955,8 +955,10 @@ wTempNonTurnDuelistCardID:: ; ccc4
wccc5:: ; ccc5
ds $1
-; may contain 0 or 1 depending on which move was selected
-wSelectedMoveIndex:: ; ccc6
+; *_ATTACK constants for selected attack
+; 0 for the first attack (or PKMN Power)
+; 1 for the second attack
+wSelectedAttack:: ; ccc6
ds $1
; if affected by a no damage or effect substatus, this flag indicates what the cause was
@@ -1201,6 +1203,7 @@ wcdb2:: ; cdb2
wcdb3:: ; cdb3
ds $1
+wcdb4:: ; cdb4
ds $1
; information about various properties of
@@ -1259,7 +1262,9 @@ wTempCardIDToLook:: ; cdd4
wcdd5:: ; cdd5
ds $1
-wcdd6:: ; cdd6
+; the index of attack chosen by AI
+; to use with Pluspower.
+wAIPluspowerAttack:: ; cdd6
ds $1
; whether AI is allowed to play an energy card
@@ -1355,9 +1360,18 @@ wce03:: ; ce03
wce06:: ; ce06
ds $1
- ds $0f
+wce07:: ; ce07
+ ds $1
+
+wce08:: ; ce08
+ ds $7
+
+wce0f:: ; ce0f
+ ds $7
-wce16:: ; ce16
+; stores the deck index (0-59) of the Trainer card
+; the AI intends to play from hand.
+wAITrainerCardToPlay:: ; ce16
ds $1
wce17:: ; ce17
@@ -1366,15 +1380,34 @@ wce17:: ; ce17
wce18:: ; ce18
ds $1
-wce19:: ; ce19
+; parameters output by AI Trainer card logic routines
+; (e.g. what Pokemon in Play Area to use card on, etc)
+wAITrainerCardParameter:: ; ce19
ds $1
- ds $6
+wce1a:: ; ce1a
+ ds $1
+
+wce1b:: ; ce1b
+ ds $1
+
+wce1c:: ; ce1c
+ ds $1
+
+wce1d:: ; ce1d
+ ds $1
+
+wce1e:: ; ce1e
+ ds $1
-wce20:: ; ce20
+wce1f:: ; ce1f
ds $1
-wce21:: ; ce21
+; used to store previous/current flags of AI actions
+; see AI_FLAG_* constants
+wPreviousAIFlags:: ; ce20
+ ds $1
+wCurrentAIFlags:: ; ce21
ds $1
; During a duel, this is always $b after the first attack.
@@ -1676,7 +1709,7 @@ wcf17:: ; cf17
ds $15
-; used by Func_200e5, AI related
+; used by _AIProcessHandTrainerCards, AI related
wTempHandCardList:: ; cf68
ds DECK_SIZE