summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/constants/menu_constants.asm12
-rw-r--r--src/data/auto_deck_card_lists.asm1159
-rw-r--r--src/data/auto_deck_machines.asm82
-rw-r--r--src/engine/bank02.asm1026
-rw-r--r--src/engine/bank03.asm6
-rw-r--r--src/engine/bank06.asm166
-rw-r--r--src/sram.asm22
-rw-r--r--src/text/text3.asm202
-rw-r--r--src/text/text_offsets.asm202
-rw-r--r--src/wram.asm60
10 files changed, 2198 insertions, 739 deletions
diff --git a/src/constants/menu_constants.asm b/src/constants/menu_constants.asm
index ab60293..86df8bf 100644
--- a/src/constants/menu_constants.asm
+++ b/src/constants/menu_constants.asm
@@ -13,9 +13,10 @@ FILTER_ENERGY EQU $20
NUM_FILTERS EQU 9
-MAX_DECK_CONFIRMATION_VISIBLE_CARDS EQU 7
-MAX_CARD_ALBUM_VISIBLE_CARDS EQU 7
-MAX_FILTERED_LIST_VISIBLE_CARDS EQU 6
+NUM_DECK_CONFIRMATION_VISIBLE_CARDS EQU 7
+NUM_CARD_ALBUM_VISIBLE_CARDS EQU 7
+NUM_FILTERED_LIST_VISIBLE_CARDS EQU 6
+NUM_DECK_MACHINE_VISIBLE_DECKS EQU 5
; deck flags
const_def
@@ -24,6 +25,11 @@ MAX_FILTERED_LIST_VISIBLE_CARDS EQU 6
const DECK_3_F ; $2
const DECK_4_F ; $3
+DECK_1 EQU 1 << DECK_1_F ; $1
+DECK_2 EQU 1 << DECK_2_F ; $2
+DECK_3 EQU 1 << DECK_3_F ; $4
+DECK_4 EQU 1 << DECK_4_F ; $8
+
ALL_DECKS EQU $ff
NUM_DECK_SAVE_MACHINE_SLOTS EQU 60
diff --git a/src/data/auto_deck_card_lists.asm b/src/data/auto_deck_card_lists.asm
new file mode 100644
index 0000000..8dbf6e5
--- /dev/null
+++ b/src/data/auto_deck_card_lists.asm
@@ -0,0 +1,1159 @@
+; card lists read by AutoDeckMachineEntries
+; each list entry is a card count and card ID pair
+
+AllFightingPokemonCardList: ; 1b0da (6:70da)
+ db 26, FIGHTING_ENERGY
+ db 2, SANDSHREW
+ db 1, SANDSLASH
+ db 2, DIGLETT
+ db 1, DUGTRIO
+ db 2, MANKEY
+ db 1, PRIMEAPE
+ db 3, MACHOP
+ db 2, MACHOKE
+ db 1, MACHAMP
+ db 2, GEODUDE
+ db 1, GRAVELER
+ db 1, GOLEM
+ db 1, ONIX
+ db 2, CUBONE
+ db 1, MAROWAK1
+ db 1, HITMONLEE
+ db 1, HITMONCHAN
+ db 2, RHYHORN
+ db 1, RHYDON
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, SWITCH
+ db 2, POTION
+ db 0 ; end of list
+
+BenchAttackCardList: ; 1b10b (6:710b)
+ db 12, LIGHTNING_ENERGY
+ db 14, FIGHTING_ENERGY
+ db 4, VOLTORB
+ db 2, ELECTRODE2
+ db 2, ZAPDOS1
+ db 4, HITMONLEE
+ db 2, HITMONCHAN
+ db 4, MEOWTH1
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, MR_FUJI
+ db 2, ENERGY_RETRIEVAL
+ db 2, SWITCH
+ db 1, SCOOP_UP
+ db 2, PLUSPOWER
+ db 2, DEFENDER
+ db 1, ITEM_FINDER
+ db 1, GUST_OF_WIND
+ db 1, MAINTENANCE
+ db 0 ; end of list
+
+BattleContestCardList: ; 1b132 (6:7132)
+ db 24, FIGHTING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 3, MANKEY
+ db 4, MACHOP
+ db 3, MACHOKE
+ db 2, HITMONLEE
+ db 2, HITMONCHAN
+ db 3, MEOWTH1
+ db 2, PERSIAN
+ db 3, DRATINI
+ db 2, DRAGONAIR
+ db 1, DRAGONITE2
+ db 1, PROFESSOR_OAK
+ db 3, PLUSPOWER
+ db 3, DEFENDER
+ db 2, POTION
+ db 0 ; end of list
+
+HeatedBattleCardList: ; 1b153 (6:7153)
+ db 8, FIRE_ENERGY
+ db 4, LIGHTNING_ENERGY
+ db 15, FIGHTING_ENERGY
+ db 4, MAGMAR1
+ db 2, ELECTABUZZ2
+ db 3, MANKEY
+ db 2, PRIMEAPE
+ db 3, HITMONLEE
+ db 3, HITMONCHAN
+ db 2, KANGASKHAN
+ db 2, ENERGY_SEARCH
+ db 2, SCOOP_UP
+ db 3, PLUSPOWER
+ db 2, DEFENDER
+ db 3, POTION
+ db 2, FULL_HEAL
+ db 0 ; end of list
+
+FirstStrikeCardList: ; 1b174 (6:7174)
+ db 25, FIGHTING_ENERGY
+ db 4, MACHOP
+ db 3, MACHOKE
+ db 2, MACHAMP
+ db 2, HITMONCHAN
+ db 4, HITMONLEE
+ db 4, MANKEY
+ db 1, PRIMEAPE
+ db 2, POTION
+ db 2, DEFENDER
+ db 2, PLUSPOWER
+ db 2, SWITCH
+ db 3, GUST_OF_WIND
+ db 4, BILL
+ db 0 ; end of list
+
+SqueakingMouseCardList: ; 1b191 (6:7191)
+ db 8, LIGHTNING_ENERGY
+ db 15, FIGHTING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 2, PIKACHU1
+ db 2, PIKACHU2
+ db 1, RAICHU1
+ db 1, RAICHU2
+ db 4, SANDSHREW
+ db 3, SANDSLASH
+ db 4, RATTATA
+ db 3, RATICATE
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, POKEMON_TRADER
+ db 2, ENERGY_RETRIEVAL
+ db 1, COMPUTER_SEARCH
+ db 3, PLUSPOWER
+ db 2, DEFENDER
+ db 2, POTION
+ db 1, SUPER_POTION
+ db 0 ; end of list
+
+GreatQuakeCardList: ; 1b1ba (6:71ba)
+ db 25, FIGHTING_ENERGY
+ db 4, DIGLETT
+ db 3, DUGTRIO
+ db 4, ONIX
+ db 3, RHYHORN
+ db 2, RHYDON
+ db 2, KANGASKHAN
+ db 1, TAUROS
+ db 1, SNORLAX
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 2, POKEMON_TRADER
+ db 3, SWITCH
+ db 4, DEFENDER
+ db 3, POTION
+ db 0 ; end of list
+
+BoneAttackCardList: ; 1b1d9 (6:71d9)
+ db 24, FIGHTING_ENERGY
+ db 3, SANDSHREW
+ db 2, SANDSLASH
+ db 3, GEODUDE
+ db 2, GRAVELER
+ db 1, GOLEM
+ db 4, ONIX
+ db 4, CUBONE
+ db 1, MAROWAK1
+ db 2, MAROWAK2
+ db 2, RHYHORN
+ db 1, RHYDON
+ db 2, BILL
+ db 1, MR_FUJI
+ db 2, POKE_BALL
+ db 1, POKEDEX
+ db 3, DEFENDER
+ db 2, POKEMON_FLUTE
+ db 0 ; end of list
+
+ExcavationCardList: ; 1b1fe (6:71fe)
+ db 15, FIGHTING_ENERGY
+ db 8, WATER_ENERGY
+ db 3, SHELLDER
+ db 1, CLOYSTER
+ db 3, OMANYTE
+ db 2, OMASTAR
+ db 4, SANDSHREW
+ db 2, SANDSLASH
+ db 3, CUBONE
+ db 1, MAROWAK2
+ db 3, HITMONCHAN
+ db 2, KABUTO
+ db 1, KABUTOPS
+ db 2, AERODACTYL
+ db 2, PROFESSOR_OAK
+ db 2, BILL
+ db 2, POKEMON_BREEDER
+ db 4, MYSTERIOUS_FOSSIL
+ db 0 ; end of list
+
+RockCrusherCardList: ; 1b223 (6:7223)
+ db 24, FIGHTING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 4, DIGLETT
+ db 2, DUGTRIO
+ db 4, GEODUDE
+ db 3, GRAVELER
+ db 2, GOLEM
+ db 3, ONIX
+ db 3, RHYHORN
+ db 2, PROFESSOR_OAK
+ db 1, POKEMON_BREEDER
+ db 2, ENERGY_REMOVAL
+ db 2, SWITCH
+ db 1, COMPUTER_SEARCH
+ db 2, DEFENDER
+ db 1, SUPER_POTION
+ db 2, POTION
+ db 0 ; end of list
+
+BlueWaterCardList: ; 1b246 (6:7246)
+ db 25, WATER_ENERGY
+ db 2, PSYDUCK
+ db 1, GOLDUCK
+ db 2, POLIWAG
+ db 1, POLIWHIRL
+ db 1, POLIWRATH
+ db 2, SEEL
+ db 1, DEWGONG
+ db 2, SHELLDER
+ db 1, CLOYSTER
+ db 2, KRABBY
+ db 1, KINGLER
+ db 2, HORSEA
+ db 1, SEADRA
+ db 1, MAGIKARP
+ db 1, GYARADOS
+ db 1, LAPRAS
+ db 1, OMANYTE
+ db 1, OMASTAR
+ db 1, ARTICUNO1
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, POKEMON_TRADER
+ db 2, MYSTERIOUS_FOSSIL
+ db 1, ENERGY_SEARCH
+ db 1, POKE_BALL
+ db 1, POTION
+ db 1, SUPER_POTION
+ db 0 ; end of list
+
+OnTheBeachCardList: ; 1b27f (6:727f)
+ db 16, WATER_ENERGY
+ db 10, FIGHTING_ENERGY
+ db 2, SEEL
+ db 1, DEWGONG
+ db 3, SHELLDER
+ db 2, CLOYSTER
+ db 3, KRABBY
+ db 2, KINGLER
+ db 3, STARYU
+ db 2, STARMIE
+ db 3, SANDSHREW
+ db 2, SANDSLASH
+ db 2, BILL
+ db 2, ENERGY_RETRIEVAL
+ db 2, ENERGY_REMOVAL
+ db 2, GUST_OF_WIND
+ db 3, POTION
+ db 0 ; end of list
+
+ParalyzeCardList: ; 1b2a2 (6:72a2)
+ db 8, GRASS_ENERGY
+ db 14, WATER_ENERGY
+ db 4, DOUBLE_COLORLESS_ENERGY
+ db 3, CATERPIE
+ db 2, METAPOD
+ db 3, SQUIRTLE
+ db 2, WARTORTLE
+ db 3, SHELLDER
+ db 2, CLOYSTER
+ db 4, STARYU
+ db 3, STARMIE
+ db 2, PROFESSOR_OAK
+ db 2, BILL
+ db 2, PLUSPOWER
+ db 2, DEFENDER
+ db 4, POTION
+ db 0 ; end of list
+
+EnergyRemovalCardList: ; 1b2c3 (6:72c3)
+ db 15, WATER_ENERGY
+ db 8, PSYCHIC_ENERGY
+ db 3, DOUBLE_COLORLESS_ENERGY
+ db 3, PSYDUCK
+ db 2, GOLDUCK
+ db 4, POLIWAG
+ db 3, POLIWHIRL
+ db 2, POLIWRATH
+ db 4, GASTLY2
+ db 3, HAUNTER1
+ db 3, DRATINI
+ db 2, DRAGONAIR
+ db 1, PROFESSOR_OAK
+ db 1, BILL
+ db 1, LASS
+ db 2, ENERGY_SEARCH
+ db 2, ENERGY_REMOVAL
+ db 1, SUPER_ENERGY_REMOVAL
+ db 0 ; end of list
+
+RainDancerCardList: ; 1b2e8 (6:72e8)
+ db 24, WATER_ENERGY
+ db 4, SQUIRTLE
+ db 3, WARTORTLE
+ db 2, BLASTOISE
+ db 4, GOLDEEN
+ db 3, SEAKING
+ db 3, HORSEA
+ db 2, SEADRA
+ db 2, LAPRAS
+ db 2, PROFESSOR_OAK
+ db 1, POKEMON_BREEDER
+ db 1, ENERGY_RETRIEVAL
+ db 1, SUPER_ENERGY_RETRIEVAL
+ db 2, ENERGY_REMOVAL
+ db 1, SUPER_ENERGY_REMOVAL
+ db 2, SWITCH
+ db 2, POTION
+ db 1, GAMBLER
+ db 0 ; end of list
+
+CutePokemonCardList: ; 1b30d (6:730d)
+ db 4, FIRE_ENERGY
+ db 6, WATER_ENERGY
+ db 8, LIGHTNING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 1, FLAREON2
+ db 1, VAPOREON2
+ db 1, PIKACHU1
+ db 1, PIKACHU2
+ db 1, PIKACHU3
+ db 1, PIKACHU4
+ db 1, FLYING_PIKACHU
+ db 1, SURFING_PIKACHU1
+ db 1, SURFING_PIKACHU2
+ db 1, RAICHU1
+ db 1, RAICHU2
+ db 1, JOLTEON2
+ db 2, CLEFAIRY
+ db 1, CLEFABLE
+ db 1, JIGGLYPUFF1
+ db 2, JIGGLYPUFF2
+ db 1, JIGGLYPUFF3
+ db 2, WIGGLYTUFF
+ db 4, EEVEE
+ db 2, PROFESSOR_OAK
+ db 3, BILL
+ db 2, CLEFAIRY_DOLL
+ db 2, SCOOP_UP
+ db 1, COMPUTER_SEARCH
+ db 1, PLUSPOWER
+ db 1, DEFENDER
+ db 3, POTION
+ db 0 ; end of list
+
+PokemonFluteCardList: ; 1b34c (6:734c)
+ db 9, WATER_ENERGY
+ db 12, LIGHTNING_ENERGY
+ db 2, STARYU
+ db 2, LAPRAS
+ db 3, PIKACHU1
+ db 1, RAICHU1
+ db 2, MAGNEMITE1
+ db 3, ELECTABUZZ2
+ db 2, RATTATA
+ db 1, RATICATE
+ db 2, PROFESSOR_OAK
+ db 4, BILL
+ db 3, ENERGY_REMOVAL
+ db 1, COMPUTER_SEARCH
+ db 3, PLUSPOWER
+ db 2, ITEM_FINDER
+ db 4, GUST_OF_WIND
+ db 4, POKEMON_FLUTE
+ db 0 ; end of list
+
+YellowFlashCardList: ; 1b371 (6:7371)
+ db 26, LIGHTNING_ENERGY
+ db 2, PIKACHU1
+ db 1, PIKACHU2
+ db 1, RAICHU1
+ db 1, RAICHU2
+ db 2, MAGNEMITE1
+ db 1, MAGNEMITE2
+ db 1, MAGNETON1
+ db 1, MAGNETON2
+ db 3, VOLTORB
+ db 1, ELECTRODE1
+ db 1, ELECTRODE2
+ db 1, ELECTABUZZ1
+ db 1, ELECTABUZZ2
+ db 1, JOLTEON1
+ db 1, JOLTEON2
+ db 1, ZAPDOS1
+ db 1, ZAPDOS2
+ db 3, EEVEE
+ db 1, ENERGY_RETRIEVAL
+ db 2, ENERGY_REMOVAL
+ db 2, POKE_BALL
+ db 2, PLUSPOWER
+ db 2, DEFENDER
+ db 1, GUST_OF_WIND
+ db 0 ; end of list
+
+ElectricShockCardList: ; 1b3a4 (6:73a4)
+ db 24, LIGHTNING_ENERGY
+ db 1, DOUBLE_COLORLESS_ENERGY
+ db 2, PIKACHU2
+ db 1, PIKACHU3
+ db 1, PIKACHU4
+ db 2, RAICHU1
+ db 2, MAGNEMITE1
+ db 2, MAGNEMITE2
+ db 2, MAGNETON1
+ db 4, VOLTORB
+ db 3, ELECTRODE2
+ db 1, ZAPDOS2
+ db 3, PORYGON
+ db 2, ENERGY_RETRIEVAL
+ db 2, PLUSPOWER
+ db 3, DEFENDER
+ db 2, ITEM_FINDER
+ db 3, GUST_OF_WIND
+ db 0 ; end of list
+
+ZappingSelfdestructCardList: ; 1b3c9 (6:73c9)
+ db 24, LIGHTNING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 4, MAGNEMITE1
+ db 3, MAGNETON1
+ db 4, VOLTORB
+ db 2, ELECTRODE1
+ db 4, ELECTABUZZ2
+ db 2, KANGASKHAN
+ db 1, TAUROS
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 2, SWITCH
+ db 4, DEFENDER
+ db 1, GUST_OF_WIND
+ db 4, POTION
+ db 0 ; end of list
+
+InsectCollectionCardList: ; 1b3e8 (6:73e8)
+ db 24, GRASS_ENERGY
+ db 3, CATERPIE
+ db 2, METAPOD
+ db 1, BUTTERFREE
+ db 3, WEEDLE
+ db 2, KAKUNA
+ db 1, BEEDRILL
+ db 4, PARAS
+ db 3, PARASECT
+ db 2, VENONAT
+ db 1, VENOMOTH
+ db 1, SCYTHER
+ db 1, PINSIR
+ db 2, BILL
+ db 2, POKEMON_BREEDER
+ db 2, SWITCH
+ db 2, POKE_BALL
+ db 2, POKEDEX
+ db 2, POTION
+ db 0 ; end of list
+
+JungleCardList: ; 1b40f (6:740f)
+ db 25, GRASS_ENERGY
+ db 1, DOUBLE_COLORLESS_ENERGY
+ db 2, EKANS
+ db 1, ARBOK
+ db 2, ZUBAT
+ db 1, GOLBAT
+ db 2, ODDISH
+ db 1, GLOOM
+ db 1, VILEPLUME
+ db 2, PARAS
+ db 1, PARASECT
+ db 2, VENONAT
+ db 1, VENOMOTH
+ db 2, BELLSPROUT
+ db 1, WEEPINBELL
+ db 1, VICTREEBEL
+ db 1, PINSIR
+ db 1, LICKITUNG
+ db 1, KANGASKHAN
+ db 2, BILL
+ db 1, SWITCH
+ db 1, POKE_BALL
+ db 2, PLUSPOWER
+ db 2, DEFENDER
+ db 2, POTION
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+FlowerGardenCardList: ; 1b444 (6:7444)
+ db 24, GRASS_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 3, BULBASAUR
+ db 2, IVYSAUR
+ db 2, VENUSAUR2
+ db 3, ODDISH
+ db 2, GLOOM
+ db 2, VILEPLUME
+ db 2, BELLSPROUT
+ db 1, WEEPINBELL
+ db 1, VICTREEBEL
+ db 2, TANGELA1
+ db 1, TANGELA2
+ db 2, LICKITUNG
+ db 2, POKEMON_TRADER
+ db 3, POKEMON_BREEDER
+ db 1, ENERGY_SEARCH
+ db 2, SWITCH
+ db 2, POTION
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+KaleidoscopeCardList: ; 1b46d (6:746d)
+ db 10, GRASS_ENERGY
+ db 4, FIRE_ENERGY
+ db 4, WATER_ENERGY
+ db 4, LIGHTNING_ENERGY
+ db 3, DOUBLE_COLORLESS_ENERGY
+ db 3, VENONAT
+ db 2, VENOMOTH
+ db 1, FLAREON1
+ db 1, FLAREON2
+ db 1, VAPOREON1
+ db 1, VAPOREON2
+ db 1, JOLTEON1
+ db 1, JOLTEON2
+ db 4, DITTO
+ db 4, EEVEE
+ db 4, PORYGON
+ db 2, BILL
+ db 2, MR_FUJI
+ db 2, ENERGY_SEARCH
+ db 4, SWITCH
+ db 2, GUST_OF_WIND
+ db 0 ; end of list
+
+FlowerPowerCardList: ; 1b498 (6:7498)
+ db 18, GRASS_ENERGY
+ db 4, PSYCHIC_ENERGY
+ db 4, BULBASAUR
+ db 3, IVYSAUR
+ db 2, VENUSAUR2
+ db 4, ODDISH
+ db 3, GLOOM
+ db 2, VILEPLUME
+ db 4, EXEGGCUTE
+ db 3, EXEGGUTOR
+ db 2, PROFESSOR_OAK
+ db 3, BILL
+ db 2, POKEMON_BREEDER
+ db 2, ENERGY_RETRIEVAL
+ db 2, SWITCH
+ db 2, POTION
+ db 0 ; end of list
+
+PsychicPowerCardList: ; 1b4b9 (6:74b9)
+ db 25, PSYCHIC_ENERGY
+ db 3, ABRA
+ db 2, KADABRA
+ db 1, ALAKAZAM
+ db 2, SLOWPOKE2
+ db 1, SLOWBRO
+ db 1, GASTLY1
+ db 2, GASTLY2
+ db 1, HAUNTER1
+ db 1, HAUNTER2
+ db 1, GENGAR
+ db 2, DROWZEE
+ db 1, HYPNO
+ db 1, MR_MIME
+ db 1, JYNX
+ db 1, MEWTWO1
+ db 1, MEW3
+ db 1, CLEFAIRY
+ db 1, CLEFABLE
+ db 1, SNORLAX
+ db 2, PROFESSOR_OAK
+ db 1, POKEMON_TRADER
+ db 1, POKEMON_BREEDER
+ db 2, SWITCH
+ db 1, POKEMON_CENTER
+ db 2, PLUSPOWER
+ db 1, DEVOLUTION_SPRAY
+ db 0 ; end of list
+
+DreamEaterHaunterCardList: ; 1b40f (6:740f)
+ db 7, GRASS_ENERGY
+ db 17, PSYCHIC_ENERGY
+ db 3, ZUBAT
+ db 2, GOLBAT
+ db 4, GASTLY1
+ db 1, HAUNTER1
+ db 2, HAUNTER2
+ db 2, GENGAR
+ db 3, DROWZEE
+ db 2, HYPNO
+ db 2, JIGGLYPUFF3
+ db 2, MEOWTH2
+ db 2, PROFESSOR_OAK
+ db 2, BILL
+ db 2, ENERGY_RETRIEVAL
+ db 1, SUPER_ENERGY_RETRIEVAL
+ db 2, SWITCH
+ db 1, COMPUTER_SEARCH
+ db 3, REVIVE
+ db 0 ; end of list
+
+ScavengingSlowbroCardList: ; 1b517 (6:7517)
+ db 23, PSYCHIC_ENERGY
+ db 4, SLOWPOKE2
+ db 3, SLOWBRO
+ db 3, JYNX
+ db 2, MEWTWO1
+ db 2, MEW3
+ db 2, JIGGLYPUFF2
+ db 2, JIGGLYPUFF3
+ db 2, EEVEE
+ db 2, ENERGY_RETRIEVAL
+ db 3, ENERGY_REMOVAL
+ db 2, PLUSPOWER
+ db 3, DEFENDER
+ db 3, POTION
+ db 4, RECYCLE
+ db 0 ; end of list
+
+StrangePowerCardList: ; 1b536 (6:7536)
+ db 25, PSYCHIC_ENERGY
+ db 1, DOUBLE_COLORLESS_ENERGY
+ db 3, SLOWPOKE1
+ db 2, SLOWBRO
+ db 4, DROWZEE
+ db 3, HYPNO
+ db 2, MR_MIME
+ db 2, JYNX
+ db 1, MEW1
+ db 2, MEW3
+ db 2, LICKITUNG
+ db 1, SNORLAX
+ db 2, POKEMON_TRADER
+ db 2, ENERGY_RETRIEVAL
+ db 2, ENERGY_REMOVAL
+ db 1, SUPER_ENERGY_REMOVAL
+ db 2, PLUSPOWER
+ db 1, ITEM_FINDER
+ db 1, GUST_OF_WIND
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+StrangePsyshockCardList: ; 1b55f (6:755f)
+ db 22, PSYCHIC_ENERGY
+ db 4, ABRA
+ db 3, KADABRA
+ db 2, ALAKAZAM
+ db 2, MR_MIME
+ db 3, CHANSEY
+ db 3, KANGASKHAN
+ db 2, SNORLAX
+ db 2, PROFESSOR_OAK
+ db 2, POKEMON_CENTER
+ db 3, ENERGY_REMOVAL
+ db 3, GUST_OF_WIND
+ db 4, SCOOP_UP
+ db 4, SWITCH
+ db 1, GAMBLER
+ db 0 ; end of list
+
+LovelyNidoranCardList: ; 1b57e (6:757e)
+ db 20, GRASS_ENERGY
+ db 4, NIDORANF
+ db 3, NIDORINA
+ db 2, NIDOQUEEN
+ db 4, NIDORANM
+ db 4, NIDORINO
+ db 4, NIDOKING
+ db 3, LICKITUNG
+ db 2, PROFESSOR_OAK
+ db 3, POKEMON_TRADER
+ db 3, POKEMON_BREEDER
+ db 2, ENERGY_RETRIEVAL
+ db 3, SWITCH
+ db 1, COMPUTER_SEARCH
+ db 2, ITEM_FINDER
+ db 0 ; end of list
+
+ScienceCorpsCardList: ; 1b59d (6:759d)
+ db 26, GRASS_ENERGY
+ db 2, EKANS
+ db 1, ARBOK
+ db 2, NIDORANF
+ db 1, NIDORINA
+ db 1, NIDOQUEEN
+ db 3, NIDORANM
+ db 2, NIDORINO
+ db 1, NIDOKING
+ db 2, ZUBAT
+ db 1, GOLBAT
+ db 2, GRIMER
+ db 1, MUK
+ db 2, KOFFING
+ db 1, WEEZING
+ db 2, MEOWTH2
+ db 1, PERSIAN
+ db 1, PROFESSOR_OAK
+ db 1, BILL
+ db 1, POKEMON_TRADER
+ db 1, POKEMON_BREEDER
+ db 1, POTION
+ db 1, FULL_HEAL
+ db 1, MAINTENANCE
+ db 1, GAMBLER
+ db 1, RECYCLE
+ db 0 ; end of list
+
+FlyinPokemonCardList: ; 1b5d2 (6:75d2)
+ db 13, GRASS_ENERGY
+ db 10, LIGHTNING_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 4, ZUBAT
+ db 3, GOLBAT
+ db 2, FLYING_PIKACHU
+ db 4, PIDGEY
+ db 3, PIDGEOTTO
+ db 1, PIDGEOT1
+ db 1, PIDGEOT2
+ db 4, SPEAROW
+ db 3, FEAROW
+ db 2, IMPOSTER_PROFESSOR_OAK
+ db 2, LASS
+ db 2, BILL
+ db 4, POTION
+ db 0 ; end of list
+
+PoisonCardList: ; 1b5f3 (6:75f3)
+ db 24, GRASS_ENERGY
+ db 3, WEEDLE
+ db 2, KAKUNA
+ db 1, BEEDRILL
+ db 4, EKANS
+ db 3, ARBOK
+ db 4, NIDORANM
+ db 3, NIDORINO
+ db 2, NIDOKING
+ db 3, KOFFING
+ db 2, WEEZING
+ db 1, PROFESSOR_OAK
+ db 2, IMPOSTER_PROFESSOR_OAK
+ db 1, POKEMON_BREEDER
+ db 2, POTION
+ db 2, FULL_HEAL
+ db 1, GAMBLER
+ db 0 ; end of list
+
+WondersOfScienceCardList: ; 1b616 (6:7616)
+ db 15, GRASS_ENERGY
+ db 8, PSYCHIC_ENERGY
+ db 4, GRIMER
+ db 3, MUK
+ db 4, KOFFING
+ db 3, WEEZING
+ db 2, MEWTWO1
+ db 1, MEWTWO3
+ db 1, MEWTWO2
+ db 2, PORYGON
+ db 1, IMPOSTER_PROFESSOR_OAK
+ db 2, PROFESSOR_OAK
+ db 2, BILL
+ db 2, ENERGY_SEARCH
+ db 2, SWITCH
+ db 2, COMPUTER_SEARCH
+ db 2, POKEDEX
+ db 2, MAINTENANCE
+ db 2, FULL_HEAL
+ db 0 ; end of list
+
+ReplaceEmAllCardList: ; 1b63d (6:763d)
+ db 24, FIRE_ENERGY
+ db 4, VULPIX
+ db 2, NINETAILS1
+ db 1, NINETAILS2
+ db 4, GROWLITHE
+ db 1, ARCANINE1
+ db 1, ARCANINE2
+ db 4, PIDGEY
+ db 3, PIDGEOTTO
+ db 1, PIDGEOT1
+ db 1, PIDGEOT2
+ db 3, DODUO
+ db 2, DODRIO
+ db 2, PROFESSOR_OAK
+ db 2, IMPOSTER_PROFESSOR_OAK
+ db 2, LASS
+ db 3, GUST_OF_WIND
+ db 0 ; end of list
+
+ChariSaurCardList: ; 1b660 (6:7660)
+ db 12, GRASS_ENERGY
+ db 10, FIRE_ENERGY
+ db 4, BULBASAUR
+ db 3, IVYSAUR
+ db 2, VENUSAUR2
+ db 4, CHARMANDER
+ db 3, CHARMELEON
+ db 2, CHARIZARD
+ db 3, FLAREON1
+ db 4, EEVEE
+ db 2, BILL
+ db 3, POKEMON_TRADER
+ db 3, POKEMON_BREEDER
+ db 2, ENERGY_RETRIEVAL
+ db 1, ENERGY_REMOVAL
+ db 2, POTION
+ db 0 ; end of list
+
+TrafficLightCardList: ; 1b681 (6:7681)
+ db 10, FIRE_ENERGY
+ db 8, WATER_ENERGY
+ db 8, LIGHTNING_ENERGY
+ db 3, CHARMANDER
+ db 2, CHARMELEON
+ db 3, PONYTA
+ db 2, RAPIDASH
+ db 2, FLAREON1
+ db 2, VAPOREON1
+ db 2, PIKACHU1
+ db 3, VOLTORB
+ db 2, ELECTRODE2
+ db 2, JOLTEON1
+ db 4, EEVEE
+ db 2, ENERGY_SEARCH
+ db 2, SWITCH
+ db 3, PLUSPOWER
+ db 0 ; end of list
+
+FirePokemonCardList: ; 1b6a4 (6:76a4)
+ db 24, FIRE_ENERGY
+ db 2, DOUBLE_COLORLESS_ENERGY
+ db 3, CHARMANDER
+ db 2, CHARMELEON
+ db 1, CHARIZARD
+ db 3, VULPIX
+ db 1, NINETAILS1
+ db 1, NINETAILS2
+ db 2, GROWLITHE
+ db 1, ARCANINE2
+ db 2, PONYTA
+ db 1, RAPIDASH
+ db 1, MAGMAR1
+ db 1, MAGMAR2
+ db 1, FLAREON1
+ db 1, FLAREON2
+ db 1, MOLTRES1
+ db 3, EEVEE
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, POKEMON_TRADER
+ db 1, POKEMON_BREEDER
+ db 1, ENERGY_RETRIEVAL
+ db 1, SUPER_ENERGY_RETRIEVAL
+ db 1, SWITCH
+ db 1, GUST_OF_WIND
+ db 0 ; end of list
+
+FireChargeCardList: ; 1b6d9 (6:76d9)
+ db 21, FIRE_ENERGY
+ db 4, DOUBLE_COLORLESS_ENERGY
+ db 4, GROWLITHE
+ db 3, ARCANINE2
+ db 2, MAGMAR1
+ db 3, JIGGLYPUFF1
+ db 1, JIGGLYPUFF3
+ db 1, WIGGLYTUFF
+ db 2, CHANSEY
+ db 2, TAUROS
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 2, ENERGY_RETRIEVAL
+ db 1, POKE_BALL
+ db 1, COMPUTER_SEARCH
+ db 2, DEFENDER
+ db 3, POTION
+ db 1, FULL_HEAL
+ db 3, RECYCLE
+ db 1, GAMBLER
+ db 0 ; end of list
+
+CharmanderAndFriendsCardList: ; 1b702 (6:7702)
+ db 8, GRASS_ENERGY
+ db 10, FIRE_ENERGY
+ db 6, WATER_ENERGY
+ db 2, CATERPIE
+ db 1, METAPOD
+ db 2, NIDORANF
+ db 1, NIDORANM
+ db 1, PINSIR
+ db 2, CHARMANDER
+ db 1, CHARMELEON
+ db 1, CHARIZARD
+ db 2, GROWLITHE
+ db 1, ARCANINE2
+ db 2, PONYTA
+ db 1, MAGMAR1
+ db 2, SEEL
+ db 1, DEWGONG
+ db 2, GOLDEEN
+ db 1, SEAKING
+ db 2, RATTATA
+ db 1, RATICATE
+ db 1, MEOWTH1
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, SWITCH
+ db 1, COMPUTER_SEARCH
+ db 1, PLUSPOWER
+ db 2, POTION
+ db 2, FULL_HEAL
+ db 0 ; end of list
+
+SquirtleAndFriendsCardList: ; 1b73d (6:773d)
+ db 8, FIRE_ENERGY
+ db 11, WATER_ENERGY
+ db 6, LIGHTNING_ENERGY
+ db 2, CHARMANDER
+ db 1, CHARMELEON
+ db 1, GROWLITHE
+ db 1, ARCANINE2
+ db 1, MAGMAR1
+ db 2, SQUIRTLE
+ db 1, WARTORTLE
+ db 1, BLASTOISE
+ db 2, SEEL
+ db 1, DEWGONG
+ db 1, GOLDEEN
+ db 1, SEAKING
+ db 1, STARYU
+ db 1, STARMIE
+ db 1, LAPRAS
+ db 2, PIKACHU1
+ db 1, MAGNEMITE1
+ db 1, MAGNETON1
+ db 1, ELECTABUZZ2
+ db 2, RATTATA
+ db 1, RATICATE
+ db 1, MEOWTH1
+ db 1, PROFESSOR_OAK
+ db 1, BILL
+ db 1, SWITCH
+ db 1, POKE_BALL
+ db 1, SCOOP_UP
+ db 1, ITEM_FINDER
+ db 1, POTION
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+BulbasaurAndFriendsCardList: ; 1b780 (6:7780)
+ db 9, GRASS_ENERGY
+ db 8, LIGHTNING_ENERGY
+ db 6, PSYCHIC_ENERGY
+ db 2, BULBASAUR
+ db 1, IVYSAUR
+ db 1, VENUSAUR2
+ db 2, NIDORANF
+ db 2, NIDORANM
+ db 1, NIDORINO
+ db 1, TANGELA2
+ db 2, PIKACHU1
+ db 1, RAICHU1
+ db 1, MAGNEMITE1
+ db 1, ELECTABUZZ2
+ db 2, ABRA
+ db 1, KADABRA
+ db 2, GASTLY1
+ db 1, HAUNTER2
+ db 1, JYNX
+ db 1, JIGGLYPUFF3
+ db 1, MEOWTH1
+ db 1, KANGASKHAN
+ db 1, PROFESSOR_OAK
+ db 1, BILL
+ db 1, SWITCH
+ db 1, POKE_BALL
+ db 2, PLUSPOWER
+ db 1, DEFENDER
+ db 1, GUST_OF_WIND
+ db 2, POTION
+ db 2, FULL_HEAL
+ db 0 ; end of list
+
+PsychicMachampCardList: ; 1b7b (6:77b)
+ db 12, FIGHTING_ENERGY
+ db 12, PSYCHIC_ENERGY
+ db 2, DIGLETT
+ db 1, DUGTRIO
+ db 2, MACHOP
+ db 1, MACHOKE
+ db 1, MACHAMP
+ db 1, ONIX
+ db 1, HITMONLEE
+ db 1, HITMONCHAN
+ db 2, ABRA
+ db 1, KADABRA
+ db 1, ALAKAZAM
+ db 2, GASTLY1
+ db 1, HAUNTER2
+ db 1, GENGAR
+ db 1, MR_MIME
+ db 1, JYNX
+ db 1, MEW3
+ db 2, PIDGEY
+ db 1, PIDGEOTTO
+ db 1, PIDGEOT2
+ db 2, RATTATA
+ db 1, RATICATE
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, SWITCH
+ db 1, GUST_OF_WIND
+ db 2, POTION
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+WaterBeetleCardList: ; 1b7fc (6:77fc)
+ db 14, GRASS_ENERGY
+ db 10, WATER_ENERGY
+ db 2, WEEDLE
+ db 1, KAKUNA
+ db 1, BEEDRILL
+ db 2, NIDORANM
+ db 1, NIDORINO
+ db 1, NIDOKING
+ db 2, BELLSPROUT
+ db 1, WEEPINBELL
+ db 1, VICTREEBEL
+ db 1, SCYTHER
+ db 2, POLIWAG
+ db 1, POLIWHIRL
+ db 1, POLIWRATH
+ db 2, KRABBY
+ db 1, KINGLER
+ db 2, MAGIKARP
+ db 1, GYARADOS
+ db 1, LAPRAS
+ db 1, ARTICUNO1
+ db 1, LICKITUNG
+ db 1, KANGASKHAN
+ db 1, TAUROS
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 1, ENERGY_RETRIEVAL
+ db 1, ENERGY_SEARCH
+ db 1, SWITCH
+ db 1, PLUSPOWER
+ db 1, FULL_HEAL
+ db 0 ; end of list
+
+LegendaryMoltresCardList: ; 1b83b (6:783b)
+ db 25, FIRE_ENERGY
+ db 4, VULPIX
+ db 3, NINETAILS2
+ db 4, GROWLITHE
+ db 2, ARCANINE2
+ db 2, MAGMAR1
+ db 2, MAGMAR2
+ db 2, MOLTRES1
+ db 2, MOLTRES2
+ db 3, BILL
+ db 2, LASS
+ db 1, POKEMON_TRADER
+ db 1, ENERGY_RETRIEVAL
+ db 1, SUPER_ENERGY_RETRIEVAL
+ db 2, ENERGY_REMOVAL
+ db 2, SWITCH
+ db 1, POTION
+ db 1, SUPER_POTION
+ db 0 ; end of list
+
+LegendaryZapdosCardList: ; 1b860 (6:7860)
+ db 25, LIGHTNING_ENERGY
+ db 4, VOLTORB
+ db 3, ELECTRODE1
+ db 4, ELECTABUZZ2
+ db 2, JOLTEON2
+ db 1, ZAPDOS1
+ db 1, ZAPDOS2
+ db 2, ZAPDOS3
+ db 3, EEVEE
+ db 4, BILL
+ db 2, ENERGY_RETRIEVAL
+ db 2, SWITCH
+ db 3, PLUSPOWER
+ db 3, POTION
+ db 1, GAMBLER
+ db 0 ; end of list
+
+LegendaryArticunoCardList: ; 1b87f (6:787f)
+ db 25, WATER_ENERGY
+ db 4, SEEL
+ db 3, DEWGONG
+ db 4, LAPRAS
+ db 2, ARTICUNO2
+ db 2, ARTICUNO1
+ db 3, CHANSEY
+ db 2, DITTO
+ db 2, PROFESSOR_OAK
+ db 2, POKEMON_TRADER
+ db 3, ENERGY_RETRIEVAL
+ db 3, SWITCH
+ db 4, SCOOP_UP
+ db 1, GAMBLER
+ db 0 ; end of list
+
+LegendaryDragoniteCardList: ; 1b89c (6:789c)
+ db 20, WATER_ENERGY
+ db 4, DOUBLE_COLORLESS_ENERGY
+ db 3, CHARMANDER
+ db 2, CHARMELEON
+ db 2, CHARIZARD
+ db 3, MAGIKARP
+ db 2, GYARADOS
+ db 2, LAPRAS
+ db 2, KANGASKHAN
+ db 4, DRATINI
+ db 3, DRAGONAIR
+ db 2, DRAGONITE1
+ db 2, PROFESSOR_OAK
+ db 2, POKEMON_TRADER
+ db 2, POKEMON_BREEDER
+ db 1, ENERGY_RETRIEVAL
+ db 1, SUPER_ENERGY_RETRIEVAL
+ db 2, SWITCH
+ db 1, GAMBLER
+ db 0 ; end of list
+
+MysteriousPokemonCardList: ; 1b8c3 (6:78c3)
+ db 12, GRASS_ENERGY
+ db 14, PSYCHIC_ENERGY
+ db 4, BULBASAUR
+ db 3, IVYSAUR
+ db 2, VENUSAUR1
+ db 2, SCYTHER
+ db 4, ABRA
+ db 3, KADABRA
+ db 2, ALAKAZAM
+ db 2, MR_MIME
+ db 1, MEW1
+ db 2, MEW2
+ db 1, PROFESSOR_OAK
+ db 2, BILL
+ db 2, POKEMON_BREEDER
+ db 1, ENERGY_REMOVAL
+ db 2, SWITCH
+ db 1, POKEMON_CENTER
+ db 0 ; end of list
+; 0x1b8e8
diff --git a/src/data/auto_deck_machines.asm b/src/data/auto_deck_machines.asm
new file mode 100644
index 0000000..17ca823
--- /dev/null
+++ b/src/data/auto_deck_machines.asm
@@ -0,0 +1,82 @@
+; each Auto Deck Machine has 5 slots for deck configurations
+; each entry in an Auto Deck Machine consists of a card list
+; (see data/auto_deck_card_lists.asm) and two text IDs
+; for the corresponding deck name and description/flavor text
+
+auto_deck: MACRO
+ dw \1 ; deck card list
+ tx \2 ; deck name text ID
+ tx \3 ; deck description text ID
+ENDM
+
+AutoDeckMachineEntries: ; 1b8e8 (6:78e8)
+; Fighting Auto Deck Machine
+ auto_deck AllFightingPokemonCardList, AllFightingPokemonText, AllFightingPokemonDescriptionText
+ auto_deck BenchAttackCardList, BenchAttackText, BenchAttackDescriptionText
+ auto_deck BattleContestCardList, BattleContestText, BattleContestDescriptionText
+ auto_deck HeatedBattleCardList, HeatedBattleText, HeatedBattleDescriptionText
+ auto_deck FirstStrikeCardList, FirstStrikeText, FirstStrikeDescriptionText
+
+; Rock Auto Deck Machine
+ auto_deck SqueakingMouseCardList, SqueakingMouseText, SqueakingMouseDescriptionText
+ auto_deck GreatQuakeCardList, GreatQuakeText, GreatQuakeDescriptionText
+ auto_deck BoneAttackCardList, BoneAttackText, BoneAttackDescriptionText
+ auto_deck ExcavationCardList, ExcavationText, ExcavationDescriptionText
+ auto_deck RockCrusherCardList, RockCrusherText, RockCrusherDescriptionText
+
+; Water Auto Deck Machine
+ auto_deck BlueWaterCardList, BlueWaterText, BlueWaterDescriptionText
+ auto_deck OnTheBeachCardList, OnTheBeachText, OnTheBeachDescriptionText
+ auto_deck ParalyzeCardList, ParalyzeText, ParalyzeDescriptionText
+ auto_deck EnergyRemovalCardList, EnergyRemovalText, EnergyRemovalDescriptionText
+ auto_deck RainDancerCardList, RainDancerText, RainDancerDescriptionText
+
+; Lightning Auto Deck Machine
+ auto_deck CutePokemonCardList, CutePokemonText, CutePokemonDescriptionText
+ auto_deck PokemonFluteCardList, PokemonFluteText, PokemonFluteDescriptionText
+ auto_deck YellowFlashCardList, YellowFlashText, YellowFlashDescriptionText
+ auto_deck ElectricShockCardList, ElectricShockText, ElectricShockDescriptionText
+ auto_deck ZappingSelfdestructCardList, ZappingSelfdestructText, ZappingSelfdestructDescriptionText
+
+; Grass Auto Deck Machine
+ auto_deck InsectCollectionCardList, InsectCollectionText, InsectCollectionDescriptionText
+ auto_deck JungleCardList, JungleText, JungleDescriptionText
+ auto_deck FlowerGardenCardList, FlowerGardenText, FlowerGardenDescriptionText
+ auto_deck KaleidoscopeCardList, KaleidoscopeText, KaleidoscopeDescriptionText
+ auto_deck FlowerPowerCardList, FlowerPowerText, FlowerPowerDescriptionText
+
+; Psychic Auto Deck Machine
+ auto_deck PsychicPowerCardList, PsychicPowerText, PsychicPowerDescriptionText
+ auto_deck DreamEaterHaunterCardList, DreamEaterHaunterText, DreamEaterHaunterDescriptionText
+ auto_deck ScavengingSlowbroCardList, ScavengingSlowbroText, ScavengingSlowbroDescriptionText
+ auto_deck StrangePowerCardList, StrangePowerText, StrangePowerDescriptionText
+ auto_deck StrangePsyshockCardList, StrangePsyshockText, StrangePsyshockDescriptionText
+
+; Science Auto Deck Machine
+ auto_deck LovelyNidoranCardList, LovelyNidoranText, LovelyNidoranDescriptionText
+ auto_deck ScienceCorpsCardList, ScienceCorpsText, ScienceCorpsDescriptionText
+ auto_deck FlyinPokemonCardList, FlyinPokemonText, FlyinPokemonDescriptionText
+ auto_deck PoisonCardList, PoisonText, PoisonDescriptionText
+ auto_deck WondersOfScienceCardList, WondersOfScienceText, WondersOfScienceDescriptionText
+
+; Fire Auto Deck Machine
+ auto_deck ReplaceEmAllCardList, ReplaceEmAllText, ReplaceEmAllDescriptionText
+ auto_deck ChariSaurCardList, ChariSaurText, ChariSaurDescriptionText
+ auto_deck TrafficLightCardList, TrafficLightText, TrafficLightDescriptionText
+ auto_deck FirePokemonCardList, FirePokemonDeckText, FirePokemonDescriptionText
+ auto_deck FireChargeCardList, FireChargeText, FireChargeDescriptionText
+
+; Auto Deck Machine
+ auto_deck CharmanderAndFriendsCardList, CharmanderAndFriendsText, CharmanderAndFriendsDescriptionText
+ auto_deck SquirtleAndFriendsCardList, SquirtleAndFriendsText, SquirtleAndFriendsDescriptionText
+ auto_deck BulbasaurAndFriendsCardList, BulbasaurAndFriendsText, BulbasaurAndFriendsDescriptionText
+ auto_deck PsychicMachampCardList, PsychicMachampText, PsychicMachampDescriptionText
+ auto_deck WaterBeetleCardList, WaterBeetleText, WaterBeetleDescriptionText
+
+; Legendary Auto Deck Machine
+ auto_deck LegendaryMoltresCardList, LegendaryMoltresText, LegendaryMoltresDescriptionText
+ auto_deck LegendaryZapdosCardList, LegendaryZapdosText, LegendaryZapdosDescriptionText
+ auto_deck LegendaryArticunoCardList, LegendaryArticunoText, LegendaryArticunoDescriptionText
+ auto_deck LegendaryDragoniteCardList, LegendaryDragoniteText, LegendaryDragoniteDescriptionText
+ auto_deck MysteriousPokemonCardList, MysteriousPokemonText, MysteriousPokemonDescriptionText
+; 0x1ba14
diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm
index 8680139..46df6f6 100644
--- a/src/engine/bank02.asm
+++ b/src/engine/bank02.asm
@@ -2260,7 +2260,7 @@ DeckBuildingParams: ; 8da9 (2:4da9)
DeckSelectionMenu: ; 8db0 (2:4db0)
ld hl, DeckBuildingParams
call InitDeckBuildingParams
- ld a, $ff
+ ld a, ALL_DECKS
call DrawDecksScreen
xor a
@@ -2321,7 +2321,7 @@ HandleStartButtonInDeckSelectionMenu: ; 8dea (2:4dea)
call GetPointerToDeckName
pop de
call OpenDeckConfirmationMenu
- ld a, $ff
+ ld a, ALL_DECKS
call DrawDecksScreen
ld a, [wCurDeck]
scf
@@ -2421,7 +2421,7 @@ DeckSelectionSubMenu: ; 8e42 (2:4e42)
or a
jr z, .get_input_deck_name
.asm_8ec4
- ld a, $ff
+ ld a, ALL_DECKS
call DrawDecksScreen
ld a, [wCurDeck]
jp DeckSelectionMenu.init_menu_params
@@ -2444,7 +2444,7 @@ DeckSelectionSubMenu: ; 8e42 (2:4e42)
ld e, l
ld hl, wCurDeckName
call CopyListFromHLToDEInSRAM
- ld a, $ff
+ ld a, ALL_DECKS
call DrawDecksScreen
ld a, [wCurDeck]
jp DeckSelectionMenu.init_menu_params
@@ -2637,7 +2637,7 @@ DeckSelectionData: ; 9027 (2:5027)
GetPointerToDeckName: ; 9038 (2:5038)
ld a, [wCurDeck]
ld h, a
- ld l, sDeck2Name - sDeck1Name
+ ld l, DECK_STRUCT_SIZE
call HtimesL
push de
ld de, sDeck1Name
@@ -2906,7 +2906,7 @@ AddDeckToCollection: ; 9152 (2:5152)
; draws the screen which shows the player's current
; deck configurations
-; a = some flags to pick which deck names to show
+; a = DECK_* flags to pick which deck names to show
DrawDecksScreen: ; 9168 (2:5168)
ld [hffb5], a
call EmptyScreenAndLoadFontDuelAndHandCardsIcons
@@ -3704,7 +3704,7 @@ FilteredCardListSelectionParams: ; 9670 (2:5670)
db 7 ; y pos
db 2 ; y spacing
db 0 ; x spacing
- db MAX_FILTERED_LIST_VISIBLE_CARDS ; num entries
+ db NUM_FILTERED_LIST_VISIBLE_CARDS ; num entries
db SYM_CURSOR_R ; visible cursor tile
db SYM_SPACE ; invisible cursor tile
dw NULL ; wCardListHandlerFunction
@@ -4294,7 +4294,7 @@ PrintFilteredCardList: ; 993d (2:593d)
pop af
call CreateFilteredCardList
- ld a, MAX_FILTERED_LIST_VISIBLE_CARDS
+ ld a, NUM_FILTERED_LIST_VISIBLE_CARDS
ld [wNumVisibleCardListEntries], a
lb de, 1, 7
ld hl, wCardListCoords
@@ -4431,14 +4431,14 @@ PrintDeckBuildingCardList: ; 99b0 (2:59b0)
; draw down cursor because
; there are still more cards
; to be scrolled down
- xor a
- ld [wcecd], a
+ xor a ; FALSE
+ ld [wUnableToScrollDown], a
ld a, SYM_CURSOR_D
jr .draw_cursor
.cannot_scroll
pop de
- ld a, $01
- ld [wcecd], a
+ ld a, TRUE
+ ld [wUnableToScrollDown], a
ld a, SYM_SPACE
.draw_cursor
ld b, 19 ; x coord
@@ -4728,9 +4728,9 @@ HandleDeckCardSelectionList: ; 9b25 (2:5b25)
cp c
jr c, .asm_9b8f
push af
- ld a, [wcecd]
+ ld a, [wUnableToScrollDown]
or a
- jr nz, .asm_9b87
+ jr nz, .cannot_scroll_down
ld a, [wCardListVisibleOffset]
inc a
ld [wCardListVisibleOffset], a
@@ -4740,7 +4740,7 @@ HandleDeckCardSelectionList: ; 9b25 (2:5b25)
dec a
jr .asm_9b8f
-.asm_9b87
+.cannot_scroll_down
pop af
dec a
push af
@@ -5260,9 +5260,9 @@ HandleDeckConfirmationMenu: ; 9e41 (2:5e41)
call InitCardSelectionParams
ld a, [wNumUniqueCards]
ld [wNumCardListEntries], a
- cp MAX_DECK_CONFIRMATION_VISIBLE_CARDS
+ cp NUM_DECK_CONFIRMATION_VISIBLE_CARDS
jr c, .no_cap
- ld a, MAX_DECK_CONFIRMATION_VISIBLE_CARDS
+ ld a, NUM_DECK_CONFIRMATION_VISIBLE_CARDS
.no_cap
ld [wCardListNumCursorPositions], a
ld [wNumVisibleCardListEntries], a
@@ -5629,14 +5629,14 @@ SortCurDeckCardsByID: ; a028 (2:6028)
; 0xa06e
; goes through list in wCurDeckCards, and for each card in it
-; creates list in wTempHandCardList of all unique cards
+; creates list in wUniqueDeckCardList of all unique cards
; it finds (assuming wCurDeckCards is sorted by ID)
-; also counts the number of the different cards
+; also counts the total number of the different cards
CreateCurDeckUniqueCardList: ; a06e (2:606e)
ld b, 0
ld c, $0
ld hl, wCurDeckCards
- ld de, wTempHandCardList
+ ld de, wUniqueDeckCardList
.loop
ld a, [hli]
cp c
@@ -5726,15 +5726,15 @@ PrintConfirmationCardList: ; a08a (2:608a)
or a
jr z, .no_more_cards
pop de
- xor a
- ld [wcecd], a
+ xor a ; FALSE
+ ld [wUnableToScrollDown], a
ld a, SYM_CURSOR_D
jr .got_cursor_tile_2
.no_more_cards
pop de
- ld a, $01
- ld [wcecd], a
+ ld a, TRUE
+ ld [wUnableToScrollDown], a
ld a, SYM_SPACE
.got_cursor_tile_2
ld b, 19 ; x coord
@@ -6147,7 +6147,7 @@ PrintFilteredCardSelectionList: ; a39f (2:639f)
pop af
call CreateFilteredCardList
- ld a, MAX_DECK_CONFIRMATION_VISIBLE_CARDS
+ ld a, NUM_DECK_CONFIRMATION_VISIBLE_CARDS
ld [wNumVisibleCardListEntries], a
lb de, 2, 5
ld hl, wCardListCoords
@@ -6308,14 +6308,14 @@ PrintCardSelectionList: ; a42d (2:642d)
; draw down cursor because
; there are still more cards
; to be scrolled down
- xor a
- ld [wcecd], a
+ xor a ; FALSE
+ ld [wUnableToScrollDown], a
ld a, SYM_CURSOR_D
jr .got_cursor_tile_2
.cannot_scroll
pop de
- ld a, $01
- ld [wcecd], a
+ ld a, TRUE
+ ld [wUnableToScrollDown], a
ld a, [wCursorAlternateTile]
.got_cursor_tile_2
ld b, 19 ; x coord
@@ -6714,7 +6714,7 @@ CreateCardSetListAndInitListCoords: ; a6a0 (2:66a0)
push af
call .GetEntryPrefix
call CreateCardSetList
- ld a, MAX_CARD_ALBUM_VISIBLE_CARDS
+ ld a, NUM_CARD_ALBUM_VISIBLE_CARDS
ld [wNumVisibleCardListEntries], a
lb de, 2, 4
ld hl, wCardListCoords
@@ -6853,14 +6853,14 @@ PrintCardSetListEntries: ; a6fa (2:66fa)
or a
jr z, .no_down_cursor
pop de
- xor a
- ld [wcecd], a
+ xor a ; FALSE
+ ld [wUnableToScrollDown], a
ld a, SYM_CURSOR_D
jr .got_down_cursor_tile
.no_down_cursor
pop de
- ld a, $01
- ld [wcecd], a
+ ld a, TRUE
+ ld [wUnableToScrollDown], a
ld a, SYM_BOX_BTM_R
.got_down_cursor_tile
ld b, 19
@@ -7258,7 +7258,7 @@ HandleCardAlbumScreen: ; a913 (2:6913)
db 4 ; y pos
db 2 ; y spacing
db 0 ; x spacing
- db MAX_CARD_ALBUM_VISIBLE_CARDS ; num entries
+ db NUM_CARD_ALBUM_VISIBLE_CARDS ; num entries
db SYM_CURSOR_R ; visible cursor tile
db SYM_SPACE ; invisible cursor tile
dw NULL ; wCardListHandlerFunction
@@ -7783,15 +7783,20 @@ Data_adf5: ; adf5 (2:6df5)
dw NULL ; wCardListHandlerFunction
; 0xadfe
-; hl = ?
-; de = deck
-Func_adfe: ; adfe (2:6dfe)
+; handles printing and player input
+; in the card confirmation list shown
+; when cards are missing for some deck configuration
+; hl = deck name
+; de = deck cards
+HandleDeckMissingCardsList: ; adfe (2:6dfe)
+; read deck name from hl and cards from de
push de
ld de, wCurDeckName
call CopyListFromHLToDEInSRAM
pop de
ld hl, wCurDeckCards
call CopyDeckFromSRAM
+
ld a, NUM_FILTERS
ld hl, wCardFilterCounts
call ClearNBytesFromHL
@@ -7799,33 +7804,34 @@ Func_adfe: ; adfe (2:6dfe)
ld [wTotalCardCount], a
ld hl, wCardFilterCounts
ld [hl], a
- call .Func_ae21
+ call .HandleList ; can skip call and fallthrough instead
ret
-.Func_ae21
+.HandleList
call SortCurDeckCardsByID
call CreateCurDeckUniqueCardList
xor a
ld [wCardListVisibleOffset], a
.loop
- ld hl, .Data_ae91
+ ld hl, .DeckConfirmationCardSelectionParams
call InitCardSelectionParams
ld a, [wNumUniqueCards]
ld [wNumCardListEntries], a
cp $05
- jr c, .asm_ae3d
+ jr c, .got_num_positions
ld a, $05
-.asm_ae3d
+.got_num_positions
ld [wCardListNumCursorPositions], a
ld [wNumVisibleCardListEntries], a
- call .Func_aeb9
- ld hl, wcfda
+ call .PrintTitleAndList
+ ld hl, wCardConfirmationText
ld a, [hli]
ld h, [hl]
ld l, a
call DrawWideTextBox_PrintText
- ld hl, .Func_ae9a
+; set card update function
+ ld hl, .CardListUpdateFunction
ld d, h
ld a, l
ld hl, wCardListUpdateFunction
@@ -7837,13 +7843,14 @@ Func_adfe: ; adfe (2:6dfe)
.loop_input
call DoFrame
call HandleDeckCardSelectionList
- jr c, .asm_ae89
+ jr c, .selection_made
call HandleLeftRightInCardList
jr c, .loop_input
ldh a, [hDPadHeld]
and START
jr z, .loop_input
-.asm_ae70
+
+.open_card_pge
ld a, $01
call PlaySFXConfirmOrCancel
ld a, [wCardListCursorPos]
@@ -7859,13 +7866,13 @@ Func_adfe: ; adfe (2:6dfe)
call OpenCardPageFromCardList
jr .loop
-.asm_ae89
+.selection_made
ld a, [hffb3]
cp $ff
ret z
- jr .asm_ae70
+ jr .open_card_pge
-.Data_ae91
+.DeckConfirmationCardSelectionParams
db 0 ; x pos
db 3 ; y pos
db 2 ; y spacing
@@ -7875,13 +7882,13 @@ Func_adfe: ; adfe (2:6dfe)
db SYM_SPACE ; invisible cursor tile
dw NULL ; wCardListHandlerFunction
-.Func_ae9a
+.CardListUpdateFunction
ld hl, hffb0
ld [hl], $01
- call .Func_aed3
+ call .PrintDeckIndexAndName
ld de, $10e
call InitTextPrinting
- ld hl, wcfda
+ ld hl, wCardConfirmationText
ld a, [hli]
ld h, [hl]
ld l, a
@@ -7890,8 +7897,8 @@ Func_adfe: ; adfe (2:6dfe)
ld [hl], $00
jp PrintConfirmationCardList
-.Func_aeb9
- call .Func_aec9
+.PrintTitleAndList
+ call .ClearScreenAndPrintDeckTitle
lb de, 3, 3
ld hl, wCardListCoords
ld [hl], e
@@ -7900,16 +7907,18 @@ Func_adfe: ; adfe (2:6dfe)
call PrintConfirmationCardList
ret
-.Func_aec9
+.ClearScreenAndPrintDeckTitle
call EmptyScreenAndLoadFontDuelAndHandCardsIcons
- call .Func_aed3
+ call .PrintDeckIndexAndName
call EnableLCD
ret
-.Func_aed3
+; prints text in the form "X.<DECK NAME> deck"
+; where X is the deck index in the list
+.PrintDeckIndexAndName
ld a, [wCurDeckName]
or a
- ret z
+ ret z ; not a valid deck
ld de, $1
call InitTextPrinting
ld a, [wCurDeck]
@@ -7927,7 +7936,7 @@ Func_adfe: ; adfe (2:6dfe)
call CopyListFromHLToDE
ld hl, wDefaultText
call GetTextLengthInTiles
- ld b, $00
+ ld b, $0
ld hl, wDefaultText
add hl, bc
ld d, h
@@ -8288,124 +8297,138 @@ Func_b177: ; b177 (2:7177)
dw Func_bc7a
; 0xb19d
-Func_b19d: ; b19d (2:719d)
+HandleDeckSaveMachineMenu: ; b19d (2:719d)
xor a
ld [wCardListVisibleOffset], a
ldtx de, DeckSaveMachineText
- ld hl, wd0a2
+ ld hl, wDeckMachineTitleText
ld [hl], e
inc hl
ld [hl], d
- call Func_b379
- ld a, $3c
- ld [wd0a5], a
+ call ClearScreenAndDrawDeckMachineScreen
+ ld a, NUM_DECK_SAVE_MACHINE_SLOTS
+ ld [wNumDeckMachineEntries], a
+
xor a
-.asm_b1b3
- ld hl, Data_b6fb
+.wait_input
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
- call Func_b704
+ call DrawListScrollArrows
call PrintNumSavedDecks
ldtx hl, PleaseSelectDeckText
call DrawWideTextBox_PrintText
ldtx de, PleaseSelectDeckText
- call Func_b285
- call Func_b29f
- jr c, .asm_b1b3
+ call InitDeckMachineDrawingParams
+ call HandleDeckMachineSelection
+ jr c, .wait_input
cp $ff
- ret z
+ ret z ; operation cancelled
+ ; get the index of selected deck
ld b, a
ld a, [wCardListVisibleOffset]
add b
- ld [wd088], a
+ ld [wSelectedDeckMachineEntry], a
+
call ResetCheckMenuCursorPositionAndBlink
call DrawWideTextBox
- ld hl, Unknown_b274
+ ld hl, .DeckMachineMenuData
call PlaceTextItems
-.asm_b1e7
+.wait_input_submenu
call DoFrame
call HandleCheckMenuInput
- jp nc, .asm_b1e7
+ jp nc, .wait_input_submenu
cp $ff
- jr nz, .asm_b1fa
- ld a, [wd086]
- jp .asm_b1b3
+ jr nz, .submenu_option_selected
+ ; return from submenu
+ ld a, [wTempDeckMachineCursorPos]
+ jp .wait_input
-.asm_b1fa
+.submenu_option_selected
ld a, [wCheckMenuCursorYPosition]
sla a
ld hl, wCheckMenuCursorXPosition
add [hl]
or a
- jr nz, .asm_b22c
- call Func_b35b
- jr nc, .asm_b216
- call Func_b592
- ld a, [wd086]
- jp c, .asm_b1b3
- jr .asm_b25e
+ jr nz, .ok_1
-.asm_b216
+; Save a Deck
+ call CheckIfSelectedDeckMachineEntryIsEmpty
+ jr nc, .prompt_ok_if_deleted
+ call SaveDeckInDeckSaveMachine
+ ld a, [wTempDeckMachineCursorPos]
+ jp c, .wait_input
+ jr .return_to_list
+.prompt_ok_if_deleted
ldtx hl, OKIfFileDeletedText
call YesOrNoMenuWithText
- ld a, [wd086]
- jr c, .asm_b1b3
- call Func_b592
- ld a, [wd086]
- jp c, .asm_b1b3
- jr .asm_b25e
-
-.asm_b22c
+ ld a, [wTempDeckMachineCursorPos]
+ jr c, .wait_input
+ call SaveDeckInDeckSaveMachine
+ ld a, [wTempDeckMachineCursorPos]
+ jp c, .wait_input
+ jr .return_to_list
+
+.ok_1
cp $1
- jr nz, .asm_b24c
- call Func_b35b
- jr c, .asm_b240
+ jr nz, .ok_2
+
+; Delete a Deck
+ call CheckIfSelectedDeckMachineEntryIsEmpty
+ jr c, .is_empty
call TryDeleteSavedDeck
- ld a, [wd086]
- jp c, .asm_b1b3
- jr .asm_b25e
+ ld a, [wTempDeckMachineCursorPos]
+ jp c, .wait_input
+ jr .return_to_list
-.asm_b240
+.is_empty
ld hl, WaitForVBlank
call DrawWideTextBox_WaitForInput
- ld a, [wd086]
- jp .asm_b1b3
+ ld a, [wTempDeckMachineCursorPos]
+ jp .wait_input
-.asm_b24c
+.ok_2
cp $2
- jr nz, .asm_b273
- call Func_b35b
- jr c, .asm_b240
- call Func_b7c6
- ld a, [wd086]
- jp nc, .asm_b1b3
-
-.asm_b25e
- ld a, [wd087]
+ jr nz, .cancel
+
+; Build a Deck
+ call CheckIfSelectedDeckMachineEntryIsEmpty
+ jr c, .is_empty
+ call TryBuildDeckMachineDeck
+ ld a, [wTempDeckMachineCursorPos]
+ jp nc, .wait_input
+
+.return_to_list
+ ld a, [wTempCardListVisibleOffset]
ld [wCardListVisibleOffset], a
- call Func_b379
- call Func_b704
+ call ClearScreenAndDrawDeckMachineScreen
+ call DrawListScrollArrows
call PrintNumSavedDecks
- ld a, [wd086]
- jp .asm_b1b3
+ ld a, [wTempDeckMachineCursorPos]
+ jp .wait_input
-.asm_b273
+.cancel
ret
-Unknown_b274: ; b274 (2:7274)
+.DeckMachineMenuData
textitem 2, 14, SaveADeckText
textitem 12, 14, DeleteADeckText
textitem 2, 16, BuildADeckText
textitem 12, 16, CancelText
db $ff
+; 0xb285
-Func_b285: ; b285 (2:7285)
- ld a, $05
+; sets the number of cursor positions for deck machine menu,
+; sets the text ID to show given by de
+; and sets DrawDeckMachineScreen as the update function
+; de = text ID
+InitDeckMachineDrawingParams: ; b285 (2:7285)
+ ld a, NUM_DECK_MACHINE_SLOTS
ld [wCardListNumCursorPositions], a
- ld hl, wd0a7
+ ld hl, wDeckMachineText
ld [hl], e
inc hl
ld [hl], d
- ld hl, Func_b403
+ ld hl, DrawDeckMachineScreen
ld d, h
ld a, l
ld hl, wCardListUpdateFunction
@@ -8416,36 +8439,44 @@ Func_b285: ; b285 (2:7285)
ret
; 0xb29f
-Func_b29f: ; b29f (2:729f)
+; handles player input inside the Deck Machine screen
+; the Start button opens up the deck confirmation menu
+; and returns carry
+; otherwise, returns no carry and selection made in a
+HandleDeckMachineSelection: ; b29f (2:729f)
call DoFrame
call HandleDeckCardSelectionList
- jr c, .asm_b303
- call .Func_b317
- jr c, Func_b29f ; loop back to start
+ jr c, .selection_made
+
+ call .HandleListJumps
+ jr c, HandleDeckMachineSelection ; jump back to start
ldh a, [hDPadHeld]
and START
- jr z, Func_b29f ; loop back to start
+ jr z, HandleDeckMachineSelection ; jump back to start
; start btn
ld a, [wCardListVisibleOffset]
- ld [wd087], a
+ ld [wTempCardListVisibleOffset], a
ld b, a
ld a, [wCardListCursorPos]
- ld [wd086], a
+ ld [wTempDeckMachineCursorPos], a
add b
ld c, a
inc a
or $80
ld [wCurDeck], a
+
+ ; get pointer to selected deck cards
+ ; and if it's an empty deck, jump to start
sla c
- ld b, $00
+ ld b, $0
ld hl, wMachineDeckPtrs
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
push hl
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
ld d, h
ld e, l
@@ -8454,32 +8485,36 @@ Func_b29f: ; b29f (2:729f)
call DisableSRAM
pop hl
or a
- jr z, Func_b29f ; loop back to start
+ jr z, HandleDeckMachineSelection ; jump back to start
+; show deck confirmation screen with deck cards
+; and return carry set
ld a, $01
call PlaySFXConfirmOrCancel
call OpenDeckConfirmationMenu
- ld a, [wd087]
+ ld a, [wTempCardListVisibleOffset]
ld [wCardListVisibleOffset], a
- call Func_b379
- call Func_b704
+ call ClearScreenAndDrawDeckMachineScreen
+ call DrawListScrollArrows
call PrintNumSavedDecks
- ld a, [wd086]
+ ld a, [wTempDeckMachineCursorPos]
ld [wCardListCursorPos], a
scf
ret
-.asm_b303
+.selection_made
call DrawListCursor_Visible
ld a, [wCardListVisibleOffset]
- ld [wd087], a
+ ld [wTempCardListVisibleOffset], a
ld a, [wCardListCursorPos]
- ld [wd086], a
+ ld [wTempDeckMachineCursorPos], a
ld a, [hffb3]
or a
ret
-.Func_b317
+; handles right and left input for jumping several entries at once
+; returns carry if jump was made
+.HandleListJumps
ld a, [wCardListVisibleOffset]
ld c, a
ldh a, [hDPadHeld]
@@ -8492,60 +8527,64 @@ Func_b29f: ; b29f (2:729f)
.d_right
ld a, [wCardListVisibleOffset]
- add $05
+ add NUM_DECK_MACHINE_SLOTS
ld b, a
- add $05
- ld hl, wd0a5
+ add NUM_DECK_MACHINE_SLOTS
+ ld hl, wNumDeckMachineEntries
cp [hl]
- jr c, .asm_b347
- ld a, [wd0a5]
- sub $05
+ jr c, .got_new_pos
+ ld a, [wNumDeckMachineEntries]
+ sub NUM_DECK_MACHINE_SLOTS
ld b, a
- jr .asm_b347
+ jr .got_new_pos
.d_left
ld a, [wCardListVisibleOffset]
- sub $05
+ sub NUM_DECK_MACHINE_SLOTS
ld b, a
- jr nc, .asm_b347
- ld b, $00
+ jr nc, .got_new_pos
+ ld b, 0 ; first entry
-.asm_b347
+.got_new_pos
ld a, b
ld [wCardListVisibleOffset], a
cp c
- jr z, .asm_b359
+ jr z, .set_carry
+ ; play SFX if jump was made
+ ; and update UI
ld a, SFX_01
call PlaySFX
- call Func_b403
+ call DrawDeckMachineScreen
call PrintNumSavedDecks
-.asm_b359
+.set_carry
scf
ret
; 0xb35b
-Func_b35b: ; b35b (2:735b)
- ld a, [wd088]
+; returns carry if deck corresponding to the
+; entry selected in the Deck Machine menu is empty
+CheckIfSelectedDeckMachineEntryIsEmpty: ; b35b (2:735b)
+ ld a, [wSelectedDeckMachineEntry]
sla a
ld l, a
- ld h, $00
+ ld h, $0
ld bc, wMachineDeckPtrs
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
call EnableSRAM
ld a, [hl]
call DisableSRAM
or a
- ret nz
+ ret nz ; is valid
scf
- ret
+ ret; is empty
; 0xb379
-Func_b379: ; b379 (2:7379)
+ClearScreenAndDrawDeckMachineScreen: ; b379 (2:7379)
call Set_OBJ_8x8
xor a
ld [wTileMapFill], a
@@ -8561,18 +8600,19 @@ Func_b379: ; b379 (2:7379)
lb de, 0, 0
lb bc, 20, 13
call DrawRegularTextBox
- call Func_b3b3
+ call SetDeckMachineTitleText
call GetSavedDeckPointers
- call Func_b3e5
+ call PrintVisibleDeckMachineEntries
call GetSavedDeckCount
call EnableLCD
ret
; 0xb3b3
-Func_b3b3: ; b3b3 (2:73b3)
+; prints wDeckMachineTitleText as title text
+SetDeckMachineTitleText: ; b3b3 (2:73b3)
lb de, 1, 0
call InitTextPrinting
- ld hl, wd0a2
+ ld hl, wDeckMachineTitleText
ld a, [hli]
ld h, [hl]
ld l, a
@@ -8605,50 +8645,57 @@ GetSavedDeckPointers: ; b3c3 (2:73c3)
ret
; 0xb3e5
-Func_b3e5: ; b3e5 (2:73e5)
+; given the cursor position in the deck machine menu
+; prints the deck names of all entries that are visible
+PrintVisibleDeckMachineEntries: ; b3e5 (2:73e5)
ld a, [wCardListVisibleOffset]
- ld de, $202
- ld b, $05
-.asm_b3ed
+ lb de, 2, 2
+ ld b, NUM_DECK_MACHINE_VISIBLE_DECKS
+.loop
push af
push bc
push de
- call Func_b424
+ call PrintDeckMachineEntry
pop de
pop bc
pop af
- ret c
+ ret c ; jump never made?
dec b
- ret z
+ ret z ; no more entries
inc a
inc e
inc e
- jr .asm_b3ed
+ jr .loop
; 0xb3fe
-Func_b3fe: ; b3fe (2:73fe)
- call Func_b704
- jr Func_b3e5
+UpdateDeckMachineScrollArrowsAndEntries: ; b3fe (2:73fe)
+ call DrawListScrollArrows
+ jr PrintVisibleDeckMachineEntries
; 0xb403
-Func_b403: ; b403 (2:7403)
- call Func_b704
+DrawDeckMachineScreen: ; b403 (2:7403)
+ call DrawListScrollArrows
ld hl, hffb0
ld [hl], $01
- call Func_b3b3
+ call SetDeckMachineTitleText
lb de, 1, 14
call InitTextPrinting
- ld hl, wd0a7
+ ld hl, wDeckMachineText
ld a, [hli]
ld h, [hl]
ld l, a
call ProcessTextFromID
ld hl, hffb0
ld [hl], $00
- jr Func_b3e5
+ jr PrintVisibleDeckMachineEntries
; 0xb424
-Func_b424: ; b424 (2:7424)
+; prints the deck name of the deck corresponding
+; to index in register a, from wMachineDeckPtrs
+; also checks whether the deck can be built
+; either by dismantling other decks or not,
+; and places the corresponding symbol next to the name
+PrintDeckMachineEntry: ; b424 (2:7424)
ld b, a
push bc
ld hl, wDefaultText
@@ -8661,10 +8708,13 @@ Func_b424: ; b424 (2:7424)
ld hl, wDefaultText
call ProcessText
pop af
+
+; get the deck corresponding to input index
+; and append its name to wDefaultText
push af
sla a
ld l, a
- ld h, $00
+ ld h, $0
ld bc, wMachineDeckPtrs
add hl, bc
ld a, [hli]
@@ -8687,7 +8737,7 @@ Func_b424: ; b424 (2:7424)
ld d, 13
inc e
call InitTextPrinting
- ld hl, Text_b4d4
+ ld hl, .text
call ProcessText
scf
ret
@@ -8697,34 +8747,39 @@ Func_b424: ; b424 (2:7424)
push bc
ld d, 18
call InitTextPrinting
- ld a, $0
+
+; print the symbol hat symbolizes whether the deck can
+; be built, or if another deck has to be dismantled to build it
+ ld a, $0 ; no decks dismantled
call CheckIfCanBuildSavedDeck
pop bc
ld hl, wDefaultText
- jr c, .asm_b482
- lb de, 3, "FW3_○"
+ jr c, .cannot_build
+ lb de, 3, "FW3_○" ; can build
jr .asm_b4c2
-
-.asm_b482
+.cannot_build
push bc
ld a, ALL_DECKS
call CheckIfCanBuildSavedDeck
- jr c, .asm_b490
+ jr c, .cannot_build_at_all
pop bc
- lb de, 3, "FW3_❄"
+ lb de, 3, "FW3_❄" ; can build by dismantling
jr .asm_b4c2
-.asm_b490
- lb de, 0, "FW0_✕"
+.cannot_build_at_all
+ lb de, 0, "FW0_✕" ; cannot build even by dismantling
call Func_22ca
pop bc
pop de
+
+; place in wDefaultText the number of cards
+; that are needed in order to build the deck
push bc
ld d, 17
inc e
call InitTextPrinting
pop bc
- call Func_b4e1
+ call .GetNumCardsMissingToBuildDeck
call CalculateOnesAndTensDigits
ld hl, wOnesAndTensPlace
ld a, [hli]
@@ -8750,13 +8805,12 @@ Func_b424: ; b424 (2:7424)
ld d, 13
inc e
call InitTextPrinting
- ld hl, Text_b4d4
+ ld hl, .text
call ProcessText
or a
ret
-; 0xb4d4
-Text_b4d4: ; b4d4 (2:74d4)
+.text
db TX_SYMBOL, TX_END
db TX_SYMBOL, TX_END
db TX_SYMBOL, TX_END
@@ -8764,14 +8818,18 @@ Text_b4d4: ; b4d4 (2:74d4)
db TX_SYMBOL, TX_END
db TX_SYMBOL, TX_END
done
-; 0xb4e1
-Func_b4e1: ; b4e1 (2:74e1)
+; outputs in a the number of cards that the player does not own
+; in order to build the deck entry from wMachineDeckPtrs
+; given in register b
+.GetNumCardsMissingToBuildDeck
push bc
call SafelySwitchToSRAM0
call CreateCardCollectionListWithDeckCards
call SafelySwitchToTempSRAMBank
pop bc
+
+; get address to cards for the corresponding deck entry
sla b
ld c, b
ld b, $00
@@ -8780,34 +8838,35 @@ Func_b4e1: ; b4e1 (2:74e1)
ld a, [hli]
ld h, [hl]
ld l, a
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
+
call EnableSRAM
ld de, wTempCardCollection
- ld bc, $0
-.asm_b505
+ lb bc, 0, 0
+.loop
inc b
ld a, DECK_SIZE
cp b
- jr c, .asm_b520
+ jr c, .done
ld a, [hli]
push hl
ld l, a
ld h, $00
add hl, de
ld a, [hl]
- and $7f
+ and CARD_COUNT_MASK
or a
- jr z, .asm_b51c
+ jr z, .none
dec a
ld [hl], a
pop hl
- jr .asm_b505
-.asm_b51c
+ jr .loop
+.none
inc c
pop hl
- jr .asm_b505
-.asm_b520
+ jr .loop
+.done
ld a, c
call DisableSRAM
ret
@@ -8859,43 +8918,53 @@ PrintNumSavedDecks: ; b545 (2:7545)
INCROM $b568, $b592
-Func_b592: ; b592 (2:7592)
- ld a, $ff
+; handles player choice in what deck to save
+; in the Deck Save Machine
+; assumes the slot to save was selected and
+; is stored in wSelectedDeckMachineEntry
+; if operation was successful, return carry
+SaveDeckInDeckSaveMachine: ; b592 (2:7592)
+ ld a, ALL_DECKS
call DrawDecksScreen
xor a
-.asm_b598
+.wait_input
ld hl, DeckMachineMenuParameters
call InitializeMenuParameters
ldtx hl, ChooseADeckToSaveText
call DrawWideTextBox_PrintText
-.loop_input
+.wait_submenu_input
call DoFrame
call HandleStartButtonInDeckSelectionMenu
- jr c, .asm_b598
+ jr c, .wait_input
call HandleMenuInput
- jp nc, .loop_input ; can be jr
+ jp nc, .wait_submenu_input ; can be jr
ldh a, [hCurMenuItem]
cp $ff
- ret z
+ ret z ; operation cancelled
ld [wCurDeck], a
call CheckIfCurDeckIsValid
- jp nc, .Func_b5c8
+ jp nc, .SaveDeckInSelectedEntry ; can be jr
+ ; is an empty deck
call PrintThereIsNoDeckHereText
ld a, [wCurDeck]
- jr .asm_b598
+ jr .wait_input
-.Func_b5c8
+; overwrites data in the selected deck in SRAM
+; with the deck that was chosen, in wCurDeck
+; then returns carry
+.SaveDeckInSelectedEntry
call GetPointerToDeckName
call GetSelectedSavedDeckPtr
ld b, DECK_STRUCT_SIZE
call EnableSRAM
call CopyNBytesFromHLToDE
call DisableSRAM
- call Func_b379
- call Func_b704
+
+ call ClearScreenAndDrawDeckMachineScreen
+ call DrawListScrollArrows
call PrintNumSavedDecks
- ld a, [wd086]
- ld hl, Data_b6fb
+ ld a, [wTempDeckMachineCursorPos]
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
call DrawListCursor_Visible
call GetPointerToDeckName
@@ -8921,11 +8990,11 @@ DeckMachineMenuParameters: ; b609 (2:7609)
; 0xb611
; outputs in de pointer of saved deck
-; corresponding to index in wd088
+; corresponding to index in wSelectedDeckMachineEntry
GetSelectedSavedDeckPtr: ; b611 (2:7611)
push af
push hl
- ld a, [wd088]
+ ld a, [wSelectedDeckMachineEntry]
sla a
ld e, a
ld d, $00
@@ -9119,7 +9188,7 @@ TryDeleteSavedDeck: ; b6ca (2:76ca)
ret
; 0xb6fb
-Data_b6fb: ; b6fb (2:76fb)
+DeckMachineSelectionParams: ; b6fb (2:76fb)
db 1 ; x pos
db 2 ; y pos
db 2 ; y spacing
@@ -9129,31 +9198,31 @@ Data_b6fb: ; b6fb (2:76fb)
db SYM_SPACE ; invisible cursor tile
dw NULL ; wCardListHandlerFunction
-Func_b704: ; b704 (2:7704)
+DrawListScrollArrows: ; b704 (2:7704)
ld a, [wCardListVisibleOffset]
or a
- jr z, .asm_b70e
+ jr z, .no_up_cursor
ld a, SYM_CURSOR_U
jr .got_tile_1
-.asm_b70e
+.no_up_cursor
ld a, SYM_BOX_RIGHT
.got_tile_1
lb bc, 19, 1
call WriteByteToBGMap0
ld a, [wCardListVisibleOffset]
- add $06
+ add NUM_DECK_MACHINE_VISIBLE_DECKS + 1
ld b, a
- ld a, [wd0a5]
+ ld a, [wNumDeckMachineEntries]
cp b
- jr c, .asm_b72a
- xor a
- ld [wcecd], a
+ jr c, .no_down_cursor
+ xor a ; FALSE
+ ld [wUnableToScrollDown], a
ld a, SYM_CURSOR_D
jr .got_tile_2
-.asm_b72a
- ld a, $01
- ld [wcecd], a
+.no_down_cursor
+ ld a, TRUE
+ ld [wUnableToScrollDown], a
ld a, SYM_BOX_RIGHT
.got_tile_2
lb bc, 19, 11
@@ -9161,11 +9230,13 @@ Func_b704: ; b704 (2:7704)
ret
; 0xb738
-Func_b738: ; b738 (2:7738)
+; handles the deck menu for when the player
+; needs to make space for new deck to build
+HandleDismantleDeckToMakeSpace: ; b738 (2:7738)
ldtx hl, YouMayOnlyCarry4DecksText
call DrawWideTextBox_WaitForInput
call SafelySwitchToSRAM0
- ld a, $ff
+ ld a, ALL_DECKS
call DrawDecksScreen
xor a
.init_menu_params
@@ -9181,12 +9252,13 @@ Func_b738: ; b738 (2:7738)
jp nc, .loop_input ; can be jr
ldh a, [hCurMenuItem]
cp $ff
- jr nz, .asm_b76c
+ jr nz, .selected_deck
+ ; operation was cancelled
call SafelySwitchToTempSRAMBank
scf
ret
-.asm_b76c
+.selected_deck
ld [wCurDeck], a
ldtx hl, DismantleThisDeckText
call YesOrNoMenuWithText
@@ -9197,26 +9269,28 @@ Func_b738: ; b738 (2:7738)
.dismantle
call GetPointerToDeckName
push hl
- ld de, wd089
+ ld de, wDismantledDeckName
call EnableSRAM
call CopyListFromHLToDE
pop hl
push hl
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
call AddDeckToCollection
pop hl
ld a, DECK_STRUCT_SIZE
call ClearNBytesFromHL
call DisableSRAM
- ld a, $ff
+
+ ; redraw deck screen
+ ld a, ALL_DECKS
call DrawDecksScreen
ld a, [wCurDeck]
ld hl, DeckMachineMenuParameters
call InitializeMenuParameters
call DrawCursor2
call SafelySwitchToTempSRAMBank
- ld hl, wd089
+ ld hl, wDismantledDeckName
call CopyDeckName
xor a
ld [wTxRam2 + 0], a
@@ -9227,79 +9301,92 @@ Func_b738: ; b738 (2:7738)
ret
; 0xb7c6
-Func_b7c6: ; b7c6 (2:77c6)
- ld a, [wd088]
+; tries to build the deck in wSelectedDeckMachineEntry
+; will check if can be built with or without dismantling
+; prompts the player in case a deck has to be dismantled
+; or, if it's impossible to build deck, shows missing cards list
+TryBuildDeckMachineDeck: ; b7c6 (2:77c6)
+ ld a, [wSelectedDeckMachineEntry]
ld b, a
push bc
ld a, $0
call CheckIfCanBuildSavedDeck
pop bc
- jr nc, .asm_b7f3
+ jr nc, .build_deck
ld a, ALL_DECKS
call CheckIfCanBuildSavedDeck
- jr c, .asm_b7ea
+ jr c, .do_not_own_all_cards_needed
+ ; can only be built by dismantling some deck
ldtx hl, ThisDeckCanOnlyBeBuiltIfYouDismantleText
call DrawWideTextBox_WaitForInput
- call Func_b87d
- jr nc, .asm_b7f3
+ call .DismantleDecksNeededToBuild
+ jr nc, .build_deck
+ ; player chose not to dismantle
-.asm_b7e5
+.set_carry_and_return
ld a, [wCardListCursorPos]
scf
ret
-.asm_b7ea
+.do_not_own_all_cards_needed
ldtx hl, YouDoNotOwnAllCardsNeededToBuildThisDeckText
call DrawWideTextBox_WaitForInput
- jp Func_b8f4
+ jp .ShowMissingCardList
-.asm_b7f3
+.build_deck
call EnableSRAM
call SafelySwitchToSRAM0
call FindFirstEmptyDeckSlot
call SafelySwitchToTempSRAMBank
call DisableSRAM
- jr nc, .asm_b80b
- call Func_b738
- jr nc, .asm_b80b
+ jr nc, .got_deck_slot
+ call HandleDismantleDeckToMakeSpace
+ jr nc, .got_deck_slot
scf
ret
-.asm_b80b
- ld [wd08a + $17], a
- ld a, [wd088]
+.got_deck_slot
+ ld [wDeckSlotForNewDeck], a
+ ld a, [wSelectedDeckMachineEntry]
ld c, a
- ld b, $00
+ ld b, $0
sla c
ld hl, wMachineDeckPtrs
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wc000
+
+ ; copy deck to buffer
+ ld de, wDeckToBuild
ld b, DECK_STRUCT_SIZE
call EnableSRAM
call CopyNBytesFromHLToDE
- ld hl, wc000 + $18
+ ; remove the needed cards from collection
+ ld hl, wDeckToBuild + DECK_NAME_SIZE
call SafelySwitchToSRAM0
call DecrementDeckCardsInCollection
- ld a, [wd08a + $17]
+
+ ; copy the deck cards from the buffer
+ ; to the deck slot that was chosen
+ ld a, [wDeckSlotForNewDeck]
ld l, a
ld h, DECK_STRUCT_SIZE
call HtimesL
- ld bc, sDeck1Name
+ ld bc, sBuiltDecks
add hl, bc
ld d, h
ld e, l
- ld hl, wc000
+ ld hl, wDeckToBuild
ld b, DECK_STRUCT_SIZE
call CopyNBytesFromHLToDE
call DisableSRAM
- ld a, $ff
+ ; draw Decks screen
+ ld a, ALL_DECKS
call DrawDecksScreen
- ld a, [wd08a + $17]
+ ld a, [wDeckSlotForNewDeck]
ld [wCurDeck], a
ld hl, DeckMachineMenuParameters
call InitializeMenuParameters
@@ -9309,7 +9396,6 @@ Func_b7c6: ; b7c6 (2:77c6)
call CopyDeckName
call DisableSRAM
call SafelySwitchToTempSRAMBank
-
xor a
ld [wTxRam2 + 0], a
ld [wTxRam2 + 1], a
@@ -9317,10 +9403,15 @@ Func_b7c6: ; b7c6 (2:77c6)
call DrawWideTextBox_WaitForInput
scf
ret
-; 0xb87d
-Func_b87d: ; b87d (2:787d)
- farcall Func_1ba9a
+; asks the player for confirmation to dismantle decks
+; needed to build the selected deck from the Deck Save Machine
+; returns carry set if player selected "no"
+; if player selected "yes", dismantle decks
+.DismantleDecksNeededToBuild
+; shows Decks screen with the names
+; of the decks to be dismantled
+ farcall CheckWhichDecksToDismantleToBuildSavedDeck
call SafelySwitchToSRAM0
call DrawDecksScreen
ldtx hl, DismantleTheseDecksText
@@ -9333,32 +9424,33 @@ Func_b87d: ; b87d (2:787d)
.yes
call EnableSRAM
- ld a, [wd0a6]
- bit 0, a
- jr z, .asm_b8a3
- ld a, $00
- call .Func_b8db
-.asm_b8a3
- ld a, [wd0a6]
- bit 1, a
- jr z, .asm_b8af
- ld a, $01
- call .Func_b8db
-.asm_b8af
- ld a, [wd0a6]
- bit 2, a
- jr z, .asm_b8bb
- ld a, $02
- call .Func_b8db
-.asm_b8bb
- ld a, [wd0a6]
- bit 3, a
- jr z, .asm_b8c7
- ld a, $03
- call .Func_b8db
-.asm_b8c7
+ ld a, [wDecksToBeDismantled]
+ bit DECK_1_F, a
+ jr z, .deck_2
+ ld a, DECK_1_F
+ call .DismantleDeck
+.deck_2
+ ld a, [wDecksToBeDismantled]
+ bit DECK_2_F, a
+ jr z, .deck_3
+ ld a, DECK_2_F
+ call .DismantleDeck
+.deck_3
+ ld a, [wDecksToBeDismantled]
+ bit DECK_3_F, a
+ jr z, .deck_4
+ ld a, DECK_3_F
+ call .DismantleDeck
+.deck_4
+ ld a, [wDecksToBeDismantled]
+ bit DECK_4_F, a
+ jr z, .done_dismantling
+ ld a, DECK_4_F
+ call .DismantleDeck
+
+.done_dismantling
call DisableSRAM
- ld a, [wd0a6]
+ ld a, [wDecksToBeDismantled]
call DrawDecksScreen
call SafelySwitchToTempSRAMBank
ldtx hl, DismantledTheDeckText
@@ -9366,27 +9458,33 @@ Func_b87d: ; b87d (2:787d)
or a
ret
-.Func_b8db
+; dismantles built deck given by a
+; and adds its cards to the collection
+; a = DECK_*_F to dismantle
+.DismantleDeck
ld l, a
ld h, DECK_STRUCT_SIZE
call HtimesL
- ld bc, sDeck1Name
+ ld bc, sBuiltDecks
add hl, bc
push hl
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
call AddDeckToCollection
pop hl
ld a, DECK_STRUCT_SIZE
call ClearNBytesFromHL
ret
-; 0xb8f4
-Func_b8f4: ; b8f4 (2:78f4)
- ld a, [wd088]
+; collects cards missing from player's collection
+; and shows its confirmation list
+.ShowMissingCardList
+; copy saved deck card from SRAM to wCurDeckCards
+; and make unique card list sorted by ID
+ ld a, [wSelectedDeckMachineEntry]
ld [wCurDeck], a
call GetSelectedSavedDeckPtr
- ld hl, $18
+ ld hl, DECK_NAME_SIZE
add hl, de
ld de, wCurDeckCards
ld b, DECK_SIZE
@@ -9397,92 +9495,122 @@ Func_b8f4: ; b8f4 (2:78f4)
ld [wCurDeckCards + DECK_SIZE], a
call SortCurDeckCardsByID
call CreateCurDeckUniqueCardList
+
+; create collection card list, including
+; the cards from all built decks
ld a, ALL_DECKS
call SafelySwitchToSRAM0
call CreateCardCollectionListWithDeckCards
call SafelySwitchToTempSRAMBank
- ld hl, wTempHandCardList
+
+; creates list in wFilteredCardList with
+; cards that are missing to build this deck
+ ld hl, wUniqueDeckCardList
ld de, wFilteredCardList
-.asm_b92a
+.loop_deck_configuration
ld a, [hli]
or a
- jr z, .asm_b946
+ jr z, .finish_missing_card_list
ld b, a
push bc
push de
push hl
ld hl, wCurDeckCards
- call Func_b960
+ call .CheckIfCardIsMissing
pop hl
pop de
pop bc
- jr nc, .asm_b92a
+ jr nc, .loop_deck_configuration
+ ; this card is missing
+ ; store in wFilteredCardList this card ID
+ ; a number of times equal to the amount still needed
ld c, a
ld a, b
-.asm_b93f
+.loop_number_missing
ld [de], a
inc de
dec c
- jr nz, .asm_b93f
- jr .asm_b92a
-.asm_b946
- xor a
+ jr nz, .loop_number_missing
+ jr .loop_deck_configuration
+
+.finish_missing_card_list
+ xor a ; terminator byte
ld [de], a
+
ldtx bc, TheseCardsAreNeededToBuildThisDeckText
- ld hl, wcfda
+ ld hl, wCardConfirmationText
ld a, c
ld [hli], a
ld a, b
ld [hl], a
+
call GetSelectedSavedDeckPtr
ld h, d
ld l, e
ld de, wFilteredCardList
- call Func_adfe
- jp Func_b7c6.asm_b7e5
-; 0xb960
-
-Func_b960: ; b960 (2:7960)
- call .Func_b976
- ld hl, wc000
+ call HandleDeckMissingCardsList
+ jp .set_carry_and_return
+
+; checks if player has enough cards with ID given in register a
+; in the collection to build the deck and, if not, returns
+; carry set and outputs in a the difference
+; a = card ID
+; hl = deck cards
+.CheckIfCardIsMissing
+ call .GetCardCountFromDeck
+ ld hl, wTempCardCollection
push de
- call .Func_b986
+ call .GetCardCountFromCollection
ld a, e
pop de
+
+ ; d = card count in deck
+ ; a = card count in collection
cp d
- jr c, .asm_b971
+ jr c, .not_enough
or a
ret
-.asm_b971
+
+.not_enough
+; needs more cards than player owns in collection
+; return carry set and the number of cards needed
ld e, a
ld a, d
sub e
scf
ret z
-.Func_b976
+; returns in d the card count of card ID given in register a
+; that is found in the card list in hl
+; a = card ID
+; hl = deck cards
+.GetCardCountFromDeck
push af
ld e, a
- ld d, $00
-.loop
+ ld d, 0
+.loop_deck_cards
ld a, [hli]
or a
- jr z, .asm_b984
+ jr z, .done_deck_cards
cp e
- jr nz, .loop
+ jr nz, .loop_deck_cards
inc d
- jr .loop
-.asm_b984
+ jr .loop_deck_cards
+.done_deck_cards
pop af
ret
-.Func_b986
+; returns in e the card count of card ID given in register a
+; that is found in the card collection
+; a = card ID
+; hl = card collection
+.GetCardCountFromCollection
push af
ld e, a
- ld d, $00
+ ld d, $0
add hl, de
ld a, [hl]
- and $7f
+ and CARD_COUNT_MASK
ld e, a
pop af
ret
@@ -9491,22 +9619,22 @@ Func_b960: ; b960 (2:7960)
PrinterMenu_DeckConfiguration: ; b991 (2:7991)
xor a
ld [wCardListVisibleOffset], a
- call Func_b379
+ call ClearScreenAndDrawDeckMachineScreen
ld a, DECK_SIZE
- ld [wd0a5], a
+ ld [wNumDeckMachineEntries], a
xor a
.asm_b99e
- ld hl, Data_b6fb
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
- call Func_b704
+ call DrawListScrollArrows
call PrintNumSavedDecks
- ld hl, WaitForVBlank.lcd_off
+ ldtx hl, PleaseChooseDeckConfigurationToPrintText
call DrawWideTextBox_PrintText
- ld de, WaitForVBlank.lcd_off
- call Func_b285
+ ldtx de, PleaseChooseDeckConfigurationToPrintText
+ call InitDeckMachineDrawingParams
.asm_b9b6
- call Func_b29f
+ call HandleDeckMachineSelection
jr c, .asm_b99e
cp $ff
ret z
@@ -9514,8 +9642,8 @@ PrinterMenu_DeckConfiguration: ; b991 (2:7991)
ld b, a
ld a, [wCardListVisibleOffset]
add b
- ld [wd088], a
- call Func_b35b
+ ld [wSelectedDeckMachineEntry], a
+ call CheckIfSelectedDeckMachineEntryIsEmpty
jr c, .asm_b9b6
call DrawWideTextBox
ldtx hl, PrintThisDeckText
@@ -9532,24 +9660,24 @@ PrinterMenu_DeckConfiguration: ; b991 (2:7991)
xor a ; terminator byte for deck
ld [wCurDeckCards + DECK_SIZE], a
call SortCurDeckCardsByID
- ld a, [wd088]
+ ld a, [wSelectedDeckMachineEntry]
bank1call Func_7580
- call Func_b379
+ call ClearScreenAndDrawDeckMachineScreen
.no
- ld a, [wd086]
+ ld a, [wTempDeckMachineCursorPos]
ld [wCardListCursorPos], a
jp .asm_b99e
; 0xba04
-Func_ba04: ; ba04 (2:7a04)
- ld a, [wd0a9]
- ld hl, Data_bb83
+HandleAutoDeckMenu: ; ba04 (2:7a04)
+ ld a, [wCurAutoDeckMachine]
+ ld hl, .DeckMachineTitleTextList
sla a
ld c, a
ld b, $0
add hl, bc
- ld de, wd0a2
+ ld de, wDeckMachineTitleText
ld a, [hli]
ld [de], a
inc de
@@ -9557,42 +9685,45 @@ Func_ba04: ; ba04 (2:7a04)
ld [de], a
xor a
ld [wCardListVisibleOffset], a
- call Func_bb97
- ld a, $5
- ld [wd0a5], a
+ call .InitAutoDeckMenu
+ ld a, NUM_DECK_MACHINE_SLOTS
+ ld [wNumDeckMachineEntries], a
xor a
- ; fallthrough
-Func_ba25: ; ba25 (2:7a25)
+.please_select_deck
ld hl, .MenuParameters
call InitializeMenuParameters
ldtx hl, PleaseSelectDeckText
call DrawWideTextBox_PrintText
- ld a, $5
+ ld a, NUM_DECK_MACHINE_SLOTS
ld [wCardListNumCursorPositions], a
- ld hl, Func_b3fe
+ ld hl, UpdateDeckMachineScrollArrowsAndEntries
ld d, h
ld a, l
ld hl, wCardListUpdateFunction
ld [hli], a
ld [hl], d
-.asm_ba40
+.wait_input
call DoFrame
call HandleMenuInput
- jr c, .asm_baa3
+ jr c, .deck_selection_made
+
+; the following lines do nothing
ldh a, [hDPadHeld]
and D_UP | D_DOWN
jr z, .asm_ba4e
-
.asm_ba4e
+
+; check whether to show deck confirmation list
ldh a, [hDPadHeld]
and START
- jr z, .asm_ba40
+ jr z, .wait_input
+
ld a, [wCardListVisibleOffset]
- ld [wd087], a
+ ld [wTempCardListVisibleOffset], a
ld b, a
ld a, [wCurMenuItem]
- ld [wd086], a
+ ld [wTempDeckMachineCursorPos], a
add b
ld c, a
inc a
@@ -9607,7 +9738,7 @@ Func_ba25: ; ba25 (2:7a25)
ld h, [hl]
ld l, a
push hl
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
ld d, h
ld e, l
@@ -9615,75 +9746,80 @@ Func_ba25: ; ba25 (2:7a25)
pop hl
call SafelySwitchToSRAM0
or a
- jr z, .asm_ba40
+ jr z, .wait_input ; invalid deck
+
+ ; show confirmation list
ld a, $1
call PlaySFXConfirmOrCancel
call SafelySwitchToSRAM1
call OpenDeckConfirmationMenu
call SafelySwitchToSRAM0
- ld a, [wd087]
+ ld a, [wTempCardListVisibleOffset]
ld [wCardListVisibleOffset], a
- call Func_bb97
- ld a, [wd086]
- jp Func_ba25
+ call .InitAutoDeckMenu
+ ld a, [wTempDeckMachineCursorPos]
+ jp .please_select_deck
-.asm_baa3
+.deck_selection_made
call DrawCursor2
ld a, [wCardListVisibleOffset]
- ld [wd087], a
+ ld [wTempCardListVisibleOffset], a
ld a, [wCurMenuItem]
- ld [wd086], a
+ ld [wTempDeckMachineCursorPos], a
ldh a, [hCurMenuItem]
cp $ff
- jp z, .asm_bb0d
- ld [wd088], a
+ jp z, .exit ; operation cancelled
+ ld [wSelectedDeckMachineEntry], a
call ResetCheckMenuCursorPositionAndBlink
xor a
ld [wce5e], a
call DrawWideTextBox
- ld hl, Data_bb76
+ ld hl, .DeckMachineMenuData
call PlaceTextItems
-.asm_bacc
+.wait_submenu_input
call DoFrame
call HandleCheckMenuInput_YourOrOppPlayArea
- jp nc, .asm_bacc
+ jp nc, .wait_submenu_input
cp $ff
- jr nz, .asm_badf
- ld a, [wd086]
- jp Func_ba25
+ jr nz, .submenu_option_selected
+ ld a, [wTempDeckMachineCursorPos]
+ jp .please_select_deck
-.asm_badf
+.submenu_option_selected
ld a, [wCheckMenuCursorYPosition]
sla a
ld hl, wCheckMenuCursorXPosition
add [hl]
or a
jr nz, .asm_bb09
+
+; Build a Deck
call SafelySwitchToSRAM1
- call Func_b7c6
+ call TryBuildDeckMachineDeck
call SafelySwitchToSRAM0
- ld a, [wd086]
- jp nc, Func_ba25
- ld a, [wd087]
+ ld a, [wTempDeckMachineCursorPos]
+ jp nc, .please_select_deck
+ ld a, [wTempCardListVisibleOffset]
ld [wCardListVisibleOffset], a
- call Func_bb97
- ld a, [wd086]
- jp Func_ba25
+ call .InitAutoDeckMenu
+ ld a, [wTempDeckMachineCursorPos]
+ jp .please_select_deck
.asm_bb09
cp $1
- jr nz, .asm_bb12
-.asm_bb0d
+ jr nz, .read_the_instructions
+.exit
xor a
ld [wTempBankSRAM], a
ret
-.asm_bb12
+.read_the_instructions
+; show card confirmation list
ld a, [wCardListVisibleOffset]
- ld [wd087], a
+ ld [wTempCardListVisibleOffset], a
ld b, a
ld a, [wCurMenuItem]
- ld [wd086], a
+ ld [wTempDeckMachineCursorPos], a
add b
ld c, a
ld [wCurDeck], a
@@ -9691,22 +9827,25 @@ Func_ba25: ; ba25 (2:7a25)
ld b, $0
ld hl, wMachineDeckPtrs
add hl, bc
+
+ ; set the description text in text box
push hl
- ld hl, wd0aa
+ ld hl, wAutoDeckMachineTextDescriptions
add hl, bc
- ld bc, wcfda
+ ld bc, wCardConfirmationText
ld a, [hli]
ld [bc], a
inc bc
ld a, [hl]
ld [bc], a
pop hl
+
call SafelySwitchToSRAM1
ld a, [hli]
ld h, [hl]
ld l, a
push hl
- ld bc, $18
+ ld bc, DECK_NAME_SIZE
add hl, bc
ld d, h
ld e, l
@@ -9714,18 +9853,20 @@ Func_ba25: ; ba25 (2:7a25)
pop hl
call SafelySwitchToSRAM0
or a
- jp z, .asm_ba40
+ jp z, .wait_input ; invalid deck
+
+ ; show confirmation list
ld a, $1
call PlaySFXConfirmOrCancel
call SafelySwitchToSRAM1
xor a
- call Func_adfe
+ call HandleDeckMissingCardsList
call SafelySwitchToSRAM0
- ld a, [wd087]
+ ld a, [wTempCardListVisibleOffset]
ld [wCardListVisibleOffset], a
- call Func_bb97
- ld a, [wd086]
- jp Func_ba25
+ call .InitAutoDeckMenu
+ ld a, [wTempDeckMachineCursorPos]
+ jp .please_select_deck
.MenuParameters
db 1, 2 ; cursor x, cursor y
@@ -9734,15 +9875,14 @@ Func_ba25: ; ba25 (2:7a25)
db SYM_CURSOR_R ; cursor tile number
db SYM_SPACE ; tile behind cursor
dw NULL ; function pointer if non-0
-; 0xbb76
-Data_bb76: ; bb76 (2:7b76)
+.DeckMachineMenuData
textitem 2, 14, BuildADeckText
textitem 12, 14, CancelText
textitem 2, 16, ReadTheInstructionsText
db $ff
-Data_bb83: ; bb83 (2:7b83)
+.DeckMachineTitleTextList
tx FightingMachineText
tx RockMachineText
tx WaterMachineText
@@ -9754,7 +9894,10 @@ Data_bb83: ; bb83 (2:7b83)
tx AutoMachineText
tx LegendaryMachineText
-Func_bb97: ; bb97 (2:7b97)
+; clears screen, loads the proper tiles
+; prints the Auto Deck title and deck entries
+; and creates the auto deck configurations
+.InitAutoDeckMenu
call Set_OBJ_8x8
xor a
ld [wTileMapFill], a
@@ -9772,26 +9915,27 @@ Func_bb97: ; bb97 (2:7b97)
call DrawRegularTextBox
ld de, $100
call InitTextPrinting
- ld hl, wd0a2
+ ld hl, wDeckMachineTitleText
ld a, [hli]
ld h, [hl]
ld l, a
call ProcessTextFromID
call SafelySwitchToSRAM1
- farcall Func_1ba14
- call Func_bbe4
- call Func_b3e5
+ farcall ReadAutoDeckConfiguration
+ call .CreateAutoDeckPointerList
+ call PrintVisibleDeckMachineEntries
call SafelySwitchToSRAM0
call EnableLCD
ret
-; 0xbbe4
-Func_bbe4: ; bbe4 (2:7be4)
+; writes to wMachineDeckPtrs the pointers
+; to the Auto Decks in sAutoDecks
+.CreateAutoDeckPointerList
ld a, 2 * NUM_DECK_MACHINE_SLOTS
ld hl, wMachineDeckPtrs
call ClearNBytesFromHL
ld de, wMachineDeckPtrs
- ld hl, sSavedDecks
+ ld hl, sAutoDecks
ld bc, DECK_STRUCT_SIZE
ld a, NUM_DECK_MACHINE_SLOTS
.loop
@@ -9813,25 +9957,25 @@ Func_bc04: ; bc04 (2:7c04)
xor a
ld [wCardListVisibleOffset], a
ldtx de, DeckSaveMachineText
- ld hl, wd0a2
+ ld hl, wDeckMachineTitleText
ld [hl], e
inc hl
ld [hl], d
- call Func_b379
+ call ClearScreenAndDrawDeckMachineScreen
ld a, DECK_SIZE
- ld [wd0a5], a
+ ld [wNumDeckMachineEntries], a
xor a
.asm_bc1a
- ld hl, Data_b6fb
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
- call Func_b704
+ call DrawListScrollArrows
call PrintNumSavedDecks
ldtx hl, PleaseChooseADeckConfigurationToSendText
call DrawWideTextBox_PrintText
ldtx de, PleaseChooseADeckConfigurationToSendText
- call Func_b285
+ call InitDeckMachineDrawingParams
.asm_bc32
- call Func_b29f
+ call HandleDeckMachineSelection
jr c, .asm_bc1a
cp $ff
jr nz, .asm_bc3f
@@ -9842,8 +9986,8 @@ Func_bc04: ; bc04 (2:7c04)
ld b, a
ld a, [wCardListVisibleOffset]
add b
- ld [wd088], a
- call Func_b35b
+ ld [wSelectedDeckMachineEntry], a
+ call CheckIfSelectedDeckMachineEntryIsEmpty
jr c, .asm_bc32
call GetSelectedSavedDeckPtr
@@ -9875,24 +10019,24 @@ Func_bc7a: ; bc7a (2:7c7a)
xor a
ld [wCardListVisibleOffset], a
ldtx de, DeckSaveMachineText
- ld hl, wd0a2
+ ld hl, wDeckMachineTitleText
ld [hl], e
inc hl
ld [hl], d
- call Func_b379
+ call ClearScreenAndDrawDeckMachineScreen
ld a, DECK_SIZE
- ld [wd0a5], a
+ ld [wNumDeckMachineEntries], a
xor a
.asm_bc90
- ld hl, Data_b6fb
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
- call Func_b704
+ call DrawListScrollArrows
call PrintNumSavedDecks
ldtx hl, PleaseChooseASaveSlotText
call DrawWideTextBox_PrintText
ldtx de, PleaseChooseASaveSlotText
- call Func_b285
- call Func_b29f
+ call InitDeckMachineDrawingParams
+ call HandleDeckMachineSelection
jr c, .asm_bc90
cp $ff
jr nz, .asm_bcb5
@@ -9903,8 +10047,8 @@ Func_bc7a: ; bc7a (2:7c7a)
ld b, a
ld a, [wCardListVisibleOffset]
add b
- ld [wd088], a
- call Func_b35b
+ ld [wSelectedDeckMachineEntry], a
+ call CheckIfSelectedDeckMachineEntryIsEmpty
jr nc, .asm_bcc4
jr .asm_bcd1
.asm_bcc4
@@ -9926,11 +10070,11 @@ Func_bc7a: ; bc7a (2:7c7a)
call CopyNBytesFromHLToDE
call DisableSRAM
call SaveGame
- call Func_b379
+ call ClearScreenAndDrawDeckMachineScreen
ld a, [wCardListCursorPos]
- ld hl, Data_b6fb
+ ld hl, DeckMachineSelectionParams
call InitCardSelectionParams
- call Func_b704
+ call DrawListScrollArrows
call PrintNumSavedDecks
call DrawListCursor_Visible
ld hl, wNameBuffer
diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm
index 5a9b86f..75e3081 100644
--- a/src/engine/bank03.asm
+++ b/src/engine/bank03.asm
@@ -3124,11 +3124,11 @@ ScriptCommand_OpenDeckMachine: ; d336 (3:5336)
or a
jr z, .asm_d360
dec a
- ld [wd0a9], a
- farcall Func_ba04
+ ld [wCurAutoDeckMachine], a
+ farcall HandleAutoDeckMenu
jr .asm_d364
.asm_d360
- farcall Func_b19d
+ farcall HandleDeckSaveMachineMenu
.asm_d364
call ResumeSong
call Func_c2d4
diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm
index 89d7093..467af8c 100644
--- a/src/engine/bank06.asm
+++ b/src/engine/bank06.asm
@@ -4925,28 +4925,32 @@ KeyboardData_Deck: ; 1b019 (6:7019)
db $0e, $12, $02
db $10, $0f, $01
-; unknown data.
-; needs analyze.
-; (6:70d6)
- INCROM $1b0d6, $1ba14
+ ds 4 ; empty
-Func_1ba14: ; 1ba14 (6:7a14)
+INCLUDE "data/auto_deck_card_lists.asm"
+INCLUDE "data/auto_deck_machines.asm"
+
+; writes to sAutoDecks all the deck configurations
+; from the Auto Deck Machine in wCurAutoDeckMachine
+ReadAutoDeckConfiguration: ; 1ba14 (6:7a14)
call EnableSRAM
- ld a, [wd0a9]
+ ld a, [wCurAutoDeckMachine]
ld l, a
- ld h, $1e
+ ld h, 6 * NUM_DECK_MACHINE_SLOTS
call HtimesL
- ld bc, $78e8
+ ld bc, AutoDeckMachineEntries
add hl, bc
- ld b, $00
-.asm_7a26
- call Func_1ba4c
- call Func_1ba5b
- call Func_1ba7d
+ ld b, 0
+.loop_decks
+ call .GetPointerToSRAMAutoDeck
+ call .ReadDeckConfiguration
+ call .ReadDeckName
+
+ ; store deck description text ID
push hl
- ld de, wd0aa
+ ld de, wAutoDeckMachineTextDescriptions
ld h, b
- ld l, $02
+ ld l, 2
call HtimesL
add hl, de
ld d, h
@@ -4959,24 +4963,27 @@ Func_1ba14: ; 1ba14 (6:7a14)
ld [de], a
inc b
ld a, b
- cp $05
- jr nz, .asm_7a26
+ cp NUM_DECK_MACHINE_SLOTS
+ jr nz, .loop_decks
call DisableSRAM
ret
-Func_1ba4c: ; 1ba4c (6:7a4c)
+; outputs in de the saved deck with index b
+.GetPointerToSRAMAutoDeck
push hl
ld l, b
ld h, DECK_STRUCT_SIZE
call HtimesL
- ld de, sSavedDecks
+ ld de, sAutoDecks
add hl, de
ld d, h
ld e, l
pop hl
ret
-Func_1ba5b: ; 1ba5b (6:7a5b)
+; writes the deck configuration in SRAM
+; by reading the given deck card list
+.ReadDeckConfiguration
push hl
push bc
push de
@@ -4985,24 +4992,24 @@ Func_1ba5b: ; 1ba5b (6:7a5b)
inc hl
ld d, [hl]
pop hl
- ld bc, $0018
+ ld bc, DECK_NAME_SIZE
add hl, bc
-.asm_7a67
+.loop_create_deck
ld a, [de]
inc de
- ld b, a
+ ld b, a ; card count
or a
- jr z, .asm_7a77
+ jr z, .done_create_deck
ld a, [de]
inc de
- ld c, a
-.asm_7a70
+ ld c, a ; card ID
+.loop_card_count
ld [hl], c
inc hl
dec b
- jr nz, .asm_7a70
- jr .asm_7a67
-.asm_7a77
+ jr nz, .loop_card_count
+ jr .loop_create_deck
+.done_create_deck
pop de
pop bc
pop hl
@@ -5010,87 +5017,104 @@ Func_1ba5b: ; 1ba5b (6:7a5b)
inc hl
ret
-Func_1ba7d: ; 1ba7d (6:7a7d)
+.ReadDeckName
push hl
push bc
push de
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wd089
+ ld de, wDismantledDeckName
call CopyText
pop hl
- ld de, wd089
-.asm_7a8d
+ ld de, wDismantledDeckName
+.loop_copy_name
ld a, [de]
ld [hli], a
or a
- jr z, .asm_7a95
+ jr z, .done_copy_name
inc de
- jr .asm_7a8d
-.asm_7a95
+ jr .loop_copy_name
+.done_copy_name
pop bc
pop hl
inc hl
inc hl
ret
-; farcall from 0xb87e(2:787d): [EF|06|9A|7A]
-Func_1ba9a: ; 1ba9a (6:7a9a)
+; tries out all combinations of dismantling the player's decks
+; in order to build the deck in wSelectedDeckMachineEntry
+; if none of the combinations work, return carry set
+; otherwise, return in a which deck flags should be dismantled
+CheckWhichDecksToDismantleToBuildSavedDeck: ; 1ba9a (6:7a9a)
xor a
- ld [wd0a6], a
- ld a, $01
-.asm_7aa0
- call Func_1bae4
+ ld [wDecksToBeDismantled], a
+
+; first check if it can be built by
+; only dismantling a single deck
+ ld a, DECK_1
+.loop_single_built_decks
+ call .CheckIfCanBuild
ret nc
- sla a
- cp $10
- jr z, .asm_7aac
- jr .asm_7aa0
-.asm_7aac
- ld a, $03
- call Func_1bae4
+ sla a ; next deck
+ cp (1 << NUM_DECKS)
+ jr z, .two_deck_combinations
+ jr .loop_single_built_decks
+
+.two_deck_combinations
+; next check all two deck combinations
+ ld a, DECK_1 | DECK_2
+ call .CheckIfCanBuild
ret nc
- ld a, $05
- call Func_1bae4
+ ld a, DECK_1 | DECK_3
+ call .CheckIfCanBuild
ret nc
- ld a, $09
- call Func_1bae4
+ ld a, DECK_1 | DECK_4
+ call .CheckIfCanBuild
ret nc
- ld a, $06
- call Func_1bae4
+ ld a, DECK_2 | DECK_3
+ call .CheckIfCanBuild
ret nc
- ld a, $0a
- call Func_1bae4
+ ld a, DECK_2 | DECK_4
+ call .CheckIfCanBuild
ret nc
- ld a, $0c
- call Func_1bae4
+ ld a, DECK_3 | DECK_4
+ call .CheckIfCanBuild
ret nc
- ld a, $f7
-.asm_7ad2
- call Func_1bae4
+
+; all but one deck combinations
+ ld a, $ff ^ DECK_4
+.loop_three_deck_combinations
+ call .CheckIfCanBuild
ret nc
sra a
cp $ff
- jr z, .asm_7ade
- jr .asm_7ad2
-.asm_7ade
- call Func_1bae4
+ jr z, .all_decks
+ jr .loop_three_deck_combinations
+
+.all_decks
+; finally check if can be built by dismantling all decks
+ call .CheckIfCanBuild
ret nc
+
+; none of the combinations work
scf
ret
-Func_1bae4: ; 1bae4 (6:7ae4)
+; returns cary if wSelectedDeckMachineEntry cannot be built
+; by dismantling the decks given by register a
+; a = DECK_* flags
+.CheckIfCanBuild
push af
- ld hl, wd088
+ ld hl, wSelectedDeckMachineEntry
ld b, [hl]
farcall CheckIfCanBuildSavedDeck
- jr c, .asm_7af5
+ jr c, .cannot_build
pop af
- ld [wd0a6], a
+ ld [wDecksToBeDismantled], a
or a
ret
-.asm_7af5
+.cannot_build
pop af
scf
ret
diff --git a/src/sram.asm b/src/sram.asm
index a26c7b5..3b2b83c 100644
--- a/src/sram.asm
+++ b/src/sram.asm
@@ -44,6 +44,7 @@ sPlayerName:: ; a010
sCardCollection:: ; a100
ds $100
+sBuiltDecks::
sDeck1:: deck_struct sDeck1 ; a200
sDeck2:: deck_struct sDeck2 ; a254
sDeck3:: deck_struct sDeck3 ; a2a8
@@ -257,6 +258,8 @@ sCardPopNameList:: ; bb00
SECTION "SRAM1", SRAM
+UNION
+
; buffers used to temporary store gfx related data
; such as tiles or BG maps
sGfxBuffer0:: ; a000
@@ -277,6 +280,25 @@ sGfxBuffer4:: ; b000
sGfxBuffer5:: ; b400
ds $400
+NEXTU
+
+ ds $350
+
+; buffer used to store the deck configuration
+; from the Auto Deck Machines
+; intentionally uses the same address as sSavedDecks
+; since TryBuildDeckMachineDeck uses the same
+; address in SRAM whether it's an auto deck or a saved deck
+; the difference is whether SRAM0 or SRAM1 are loaded
+sAutoDecks::
+sAutoDeck1:: deck_struct sAutoDeck1 ; a350
+sAutoDeck2:: deck_struct sAutoDeck2 ; a3a4
+sAutoDeck3:: deck_struct sAutoDeck3 ; a3f8
+sAutoDeck4:: deck_struct sAutoDeck4 ; a44c
+sAutoDeck5:: deck_struct sAutoDeck5 ; a4a0
+
+ENDU
+
SECTION "SRAM2", SRAM
ds $18fe
diff --git a/src/text/text3.asm b/src/text/text3.asm
index bf23e60..ffe0f59 100644
--- a/src/text/text3.asm
+++ b/src/text/text3.asm
@@ -34,7 +34,7 @@ PrintThisCardYesNoText: ; 3c0cc (f:40cc)
line " Yes No"
done
-Text0275: ; 3c0ef (f:40ef)
+PleaseChooseDeckConfigurationToPrintText: ; 3c0ef (f:40ef)
text "Please choose a Deck configuration"
line "to print."
done
@@ -169,452 +169,452 @@ LegendaryMachineText: ; 3c4cb (f:44cb)
text " Legendary Machine "
done
-Text0292: ; 3c4e3 (f:44e3)
+AllFightingPokemonText: ; 3c4e3 (f:44e3)
text "All Fighting Pokémon"
done
-Text0293: ; 3c4f9 (f:44f9)
+BenchAttackText: ; 3c4f9 (f:44f9)
text "Bench Attack"
done
-Text0294: ; 3c507 (f:4507)
+BattleContestText: ; 3c507 (f:4507)
text "Battle Contest"
done
-Text0295: ; 3c517 (f:4517)
+HeatedBattleText: ; 3c517 (f:4517)
text "Heated Battle"
done
-Text0296: ; 3c526 (f:4526)
+FirstStrikeText: ; 3c526 (f:4526)
text "First-Strike"
done
-Text0297: ; 3c534 (f:4534)
+SqueakingMouseText: ; 3c534 (f:4534)
text "Squeaking Mouse"
done
-Text0298: ; 3c545 (f:4545)
+GreatQuakeText: ; 3c545 (f:4545)
text "Great Quake"
done
-Text0299: ; 3c552 (f:4552)
+BoneAttackText: ; 3c552 (f:4552)
text "Bone Attack"
done
-Text029a: ; 3c55f (f:455f)
+ExcavationText: ; 3c55f (f:455f)
text "Excavation"
done
-Text029b: ; 3c56b (f:456b)
+RockCrusherText: ; 3c56b (f:456b)
text "Rock Crusher"
done
-Text029c: ; 3c579 (f:4579)
+BlueWaterText: ; 3c579 (f:4579)
text "Blue Water"
done
-Text029d: ; 3c585 (f:4585)
+OnTheBeachText: ; 3c585 (f:4585)
text "On the Beach"
done
-Text029e: ; 3c593 (f:4593)
+ParalyzeText: ; 3c593 (f:4593)
text "Paralyze!"
done
-Text029f: ; 3c59e (f:459e)
+EnergyRemovalText: ; 3c59e (f:459e)
text "Energy Removal"
done
-Text02a0: ; 3c5ae (f:45ae)
+RainDancerText: ; 3c5ae (f:45ae)
text "Rain Dancer"
done
-Text02a1: ; 3c5bb (f:45bb)
+CutePokemonText: ; 3c5bb (f:45bb)
text "Cute Pokémon"
done
-Text02a2: ; 3c5c9 (f:45c9)
+PokemonFluteText: ; 3c5c9 (f:45c9)
text "Pokémon Flute"
done
-Text02a3: ; 3c5d8 (f:45d8)
+YellowFlashText: ; 3c5d8 (f:45d8)
text "Yellow Flash"
done
-Text02a4: ; 3c5e6 (f:45e6)
+ElectricShockText: ; 3c5e6 (f:45e6)
text "Electric Shock"
done
-Text02a5: ; 3c5f6 (f:45f6)
+ZappingSelfdestructText: ; 3c5f6 (f:45f6)
text "Zapping Selfdestruct"
done
-Text02a6: ; 3c60c (f:460c)
+InsectCollectionText: ; 3c60c (f:460c)
text "Insect Collection"
done
-Text02a7: ; 3c61f (f:461f)
+JungleText: ; 3c61f (f:461f)
text "Jungle"
done
-Text02a8: ; 3c627 (f:4627)
+FlowerGardenText: ; 3c627 (f:4627)
text "Flower Garden"
done
-Text02a9: ; 3c636 (f:4636)
+KaleidoscopeText: ; 3c636 (f:4636)
text "Kaleidoscope"
done
-Text02aa: ; 3c644 (f:4644)
+FlowerPowerText: ; 3c644 (f:4644)
text "Flower Power"
done
-Text02ab: ; 3c652 (f:4652)
+PsychicPowerText: ; 3c652 (f:4652)
text "Psychic Power"
done
-Text02ac: ; 3c661 (f:4661)
+DreamEaterHaunterText: ; 3c661 (f:4661)
text "Dream Eater Haunter"
done
-Text02ad: ; 3c676 (f:4676)
+ScavengingSlowbroText: ; 3c676 (f:4676)
text "Scavenging Slowbro"
done
-Text02ae: ; 3c68a (f:468a)
+StrangePowerText: ; 3c68a (f:468a)
text "Strange Power"
done
-Text02af: ; 3c699 (f:4699)
+StrangePsyshockText: ; 3c699 (f:4699)
text "Strange Psyshock"
done
-Text02b0: ; 3c6ab (f:46ab)
+LovelyNidoranText: ; 3c6ab (f:46ab)
text "Lovely Nidoran"
done
-Text02b1: ; 3c6bb (f:46bb)
+ScienceCorpsText: ; 3c6bb (f:46bb)
text "Science Corps"
done
-Text02b2: ; 3c6ca (f:46ca)
+FlyinPokemonText: ; 3c6ca (f:46ca)
text "Flyin' Pokémon"
done
-Text02b3: ; 3c6da (f:46da)
+PoisonText: ; 3c6da (f:46da)
text "Poison"
done
-Text02b4: ; 3c6e2 (f:46e2)
+WondersOfScienceText: ; 3c6e2 (f:46e2)
text "Wonders of Science"
done
-Text02b5: ; 3c6f6 (f:46f6)
+ReplaceEmAllText: ; 3c6f6 (f:46f6)
text "Replace 'Em All"
done
-Text02b6: ; 3c707 (f:4707)
+ChariSaurText: ; 3c707 (f:4707)
text "Chari-Saur"
done
-Text02b7: ; 3c713 (f:4713)
+TrafficLightText: ; 3c713 (f:4713)
text "Traffic Light"
done
-Text02b8: ; 3c722 (f:4722)
+FirePokemonDeckText: ; 3c722 (f:4722)
text "Fire Pokémon"
done
-Text02b9: ; 3c730 (f:4730)
+FireChargeText: ; 3c730 (f:4730)
text "Fire Charge"
done
-Text02ba: ; 3c73d (f:473d)
+CharmanderAndFriendsText: ; 3c73d (f:473d)
text "Charmander & Friends"
done
-Text02bb: ; 3c753 (f:4753)
+SquirtleAndFriendsText: ; 3c753 (f:4753)
text "Squirtle & Friends"
done
-Text02bc: ; 3c767 (f:4767)
+BulbasaurAndFriendsText: ; 3c767 (f:4767)
text "Bulbasaur & Friends"
done
-Text02bd: ; 3c77c (f:477c)
+PsychicMachampText: ; 3c77c (f:477c)
text "Psychic Machamp"
done
-Text02be: ; 3c78d (f:478d)
+WaterBeetleText: ; 3c78d (f:478d)
text "Water Beetle"
done
-Text02bf: ; 3c79b (f:479b)
+LegendaryMoltresText: ; 3c79b (f:479b)
text "Legendary Moltres"
done
-Text02c0: ; 3c7ae (f:47ae)
+LegendaryZapdosText: ; 3c7ae (f:47ae)
text "Legendary Zapdos"
done
-Text02c1: ; 3c7c0 (f:47c0)
+LegendaryArticunoText: ; 3c7c0 (f:47c0)
text "Legendary Articuno"
done
-Text02c2: ; 3c7d4 (f:47d4)
+LegendaryDragoniteText: ; 3c7d4 (f:47d4)
text "Legendary Dragonite"
done
-Text02c3: ; 3c7e9 (f:47e9)
+MysteriousPokemonText: ; 3c7e9 (f:47e9)
text "Mysterious Pokémon"
done
-Text02c4: ; 3c7fd (f:47fd)
+AllFightingPokemonDescriptionText: ; 3c7fd (f:47fd)
text "A Deck of Fighting Pokémon:"
line "Feel their Fighting power!"
done
-Text02c5: ; 3c835 (f:4835)
+BenchAttackDescriptionText: ; 3c835 (f:4835)
text "A Deck of Pokémon that can"
line "attack the Bench."
done
-Text02c6: ; 3c863 (f:4863)
+BattleContestDescriptionText: ; 3c863 (f:4863)
text "A Deck which uses Fighting Attacks"
line "such as Slash and Punch."
done
-Text02c7: ; 3c8a0 (f:48a0)
+HeatedBattleDescriptionText: ; 3c8a0 (f:48a0)
text "A powerful Deck with both Fire"
line "and Fighting Pokémon."
done
-Text02c8: ; 3c8d6 (f:48d6)
+FirstStrikeDescriptionText: ; 3c8d6 (f:48d6)
text "A Deck for fast and furious "
line "attacks."
done
-Text02c9: ; 3c8fd (f:48fd)
+SqueakingMouseDescriptionText: ; 3c8fd (f:48fd)
text "A Deck made of Mouse Pokémon."
line "Uses PlusPower to Power up!"
done
-Text02ca: ; 3c938 (f:4938)
+GreatQuakeDescriptionText: ; 3c938 (f:4938)
text "Use Dugtrio's Earthquake"
line "to cause great damage."
done
-Text02cb: ; 3c969 (f:4969)
+BoneAttackDescriptionText: ; 3c969 (f:4969)
text "A Deck of Cubone and Marowak - "
line "A call for help."
done
-Text02cc: ; 3c99b (f:499b)
+ExcavationDescriptionText: ; 3c99b (f:499b)
text "A Deck which creates Pokémon by"
line "evolving Mysterious Fossils."
done
-Text02cd: ; 3c9d9 (f:49d9)
+RockCrusherDescriptionText: ; 3c9d9 (f:49d9)
text "A Deck of Rock Pokémon. It's"
line "Strong against Lightning Pokémon."
done
-Text02ce: ; 3ca19 (f:4a19)
+BlueWaterDescriptionText: ; 3ca19 (f:4a19)
text "A Deck of Water Pokémon: Their"
line "Blue Horror washes over enemies."
done
-Text02cf: ; 3ca5a (f:4a5a)
+OnTheBeachDescriptionText: ; 3ca5a (f:4a5a)
text "A well balanced Deck"
line "of Sandshrew and Water Pokémon!"
done
-Text02d0: ; 3ca90 (f:4a90)
+ParalyzeDescriptionText: ; 3ca90 (f:4a90)
text "Paralyze the opponent's Pokémon:"
line "Stop 'em and drop 'em!"
done
-Text02d1: ; 3cac9 (f:4ac9)
+EnergyRemovalDescriptionText: ; 3cac9 (f:4ac9)
text "Uses Whirlpool and Hyper Beam to"
line "remove opponents' Energy cards."
done
-Text02d2: ; 3cb0b (f:4b0b)
+RainDancerDescriptionText: ; 3cb0b (f:4b0b)
text "Use Rain Dance to attach Water"
line "Energy for powerful Attacks!"
done
-Text02d3: ; 3cb48 (f:4b48)
+CutePokemonDescriptionText: ; 3cb48 (f:4b48)
text "A Deck of cute Pokémon such as"
line "Pikachu and Eevee."
done
-Text02d4: ; 3cb7b (f:4b7b)
+PokemonFluteDescriptionText: ; 3cb7b (f:4b7b)
text "Use the Pokémon Flute to revive"
line "opponents' Pokémon and Attack!"
done
-Text02d5: ; 3cbbb (f:4bbb)
+YellowFlashDescriptionText: ; 3cbbb (f:4bbb)
text "A deck of Pokémon that use Lightning"
line "Energy to zap opponents."
done
-Text02d6: ; 3cbfa (f:4bfa)
+ElectricShockDescriptionText: ; 3cbfa (f:4bfa)
text "A Deck which Shocks and Paralyzes"
line "opponents with its Attacks."
done
-Text02d7: ; 3cc39 (f:4c39)
+ZappingSelfdestructDescriptionText: ; 3cc39 (f:4c39)
text "Selfdestruct causes great damage "
line "- even to the opponent's Bench."
done
-Text02d8: ; 3cc7c (f:4c7c)
+InsectCollectionDescriptionText: ; 3cc7c (f:4c7c)
text "A Deck made of Insect Pokémon"
line "Go Bug Power!"
done
-Text02d9: ; 3cca9 (f:4ca9)
+JungleDescriptionText: ; 3cca9 (f:4ca9)
text "A Deck of Grass Pokémon: There "
line "are many dangers in the Jungle."
done
-Text02da: ; 3ccea (f:4cea)
+FlowerGardenDescriptionText: ; 3ccea (f:4cea)
text "A Deck of Flower Pokémon:"
line "Beautiful but Dangerous"
done
-Text02db: ; 3cd1d (f:4d1d)
+KaleidoscopeDescriptionText: ; 3cd1d (f:4d1d)
text "Uses Venomoth's Pokémon Power to"
line "change the opponent's Weakness."
done
-Text02dc: ; 3cd5f (f:4d5f)
+FlowerPowerDescriptionText: ; 3cd5f (f:4d5f)
text "A powerful Big Eggsplosion "
line "and Energy Transfer combo!"
done
-Text02dd: ; 3cd97 (f:4d97)
+PsychicPowerDescriptionText: ; 3cd97 (f:4d97)
text "Use the Psychic power of the"
line "Psychic Pokémon to Attack!"
done
-Text02de: ; 3cdd0 (f:4dd0)
+DreamEaterHaunterDescriptionText: ; 3cdd0 (f:4dd0)
text "Uses Haunter's Dream Eater"
line "to cause great damage!"
done
-Text02df: ; 3ce03 (f:4e03)
+ScavengingSlowbroDescriptionText: ; 3ce03 (f:4e03)
text "Continually draw Trainer "
line "Cards from the Discard Pile!"
done
-Text02e0: ; 3ce3b (f:4e3b)
+StrangePowerDescriptionText: ; 3ce3b (f:4e3b)
text "Confuse opponents with"
line "mysterious power!"
done
-Text02e1: ; 3ce65 (f:4e65)
+StrangePsyshockDescriptionText: ; 3ce65 (f:4e65)
text "Use Alakazam's Damage Swap"
line "to move damage counters!"
done
-Text02e2: ; 3ce9a (f:4e9a)
+LovelyNidoranDescriptionText: ; 3ce9a (f:4e9a)
text "Uses Nidoqueen's Boyfriends to cause"
line "great damage to the opponent."
done
-Text02e3: ; 3cede (f:4ede)
+ScienceCorpsDescriptionText: ; 3cede (f:4ede)
text "The march of the Science Corps!"
line "Attack with the power of science!"
done
-Text02e4: ; 3cf21 (f:4f21)
+FlyinPokemonDescriptionText: ; 3cf21 (f:4f21)
text "Pokémon with feathers flock "
line "together! Retreating is easy!"
done
-Text02e5: ; 3cf5d (f:4f5d)
+PoisonDescriptionText: ; 3cf5d (f:4f5d)
text "A Deck that uses Poison to "
line "slowly Knock Out the opponent."
done
-Text02e6: ; 3cf99 (f:4f99)
+WondersOfScienceDescriptionText: ; 3cf99 (f:4f99)
text "Block Pokémon Powers with "
line "Muk and attack with Mewtwo!"
done
-Text02e7: ; 3cfd1 (f:4fd1)
+ReplaceEmAllDescriptionText: ; 3cfd1 (f:4fd1)
text "A Deck that shuffles"
line "the opponent's cards"
done
-Text02e8: ; 3cffc (f:4ffc)
+ChariSaurDescriptionText: ; 3cffc (f:4ffc)
text "Attack with Charizard - with "
line "just a few Fire Energy cards!"
done
-Text02e9: ; 3d039 (f:5039)
+TrafficLightDescriptionText: ; 3d039 (f:5039)
text "Pokémon that can Attack with"
line "Fire, Water or Lightning Energy!"
done
-Text02ea: ; 3d078 (f:5078)
+FirePokemonDescriptionText: ; 3d078 (f:5078)
text "With Fire Pokémon like Charizard, "
line "Rapidash and Magmar, it's hot!"
done
-Text02eb: ; 3d0bb (f:50bb)
+FireChargeDescriptionText: ; 3d0bb (f:50bb)
text "Desperate attacks Damage your "
line "opponent and you!"
done
-Text02ec: ; 3d0ed (f:50ed)
+CharmanderAndFriendsDescriptionText: ; 3d0ed (f:50ed)
text "A Fire, Grass and Water Deck:"
line "Charmander, Pinsir and Seel"
done
-Text02ed: ; 3d128 (f:5128)
+SquirtleAndFriendsDescriptionText: ; 3d128 (f:5128)
text "A Water, Fire, and Lightning Deck:"
line "Squirtle, Charmander and Pikachu"
done
-Text02ee: ; 3d16d (f:516d)
+BulbasaurAndFriendsDescriptionText: ; 3d16d (f:516d)
text "A Grass, Lightning and Psychic Deck:"
line "Bulbasaur, Pikachu and Abra"
done
-Text02ef: ; 3d1af (f:51af)
+PsychicMachampDescriptionText: ; 3d1af (f:51af)
text "Machamp, Hitmonlee, Hitmonchan"
line "Gengar and Alakazam are furious!"
done
-Text02f0: ; 3d1f0 (f:51f0)
+WaterBeetleDescriptionText: ; 3d1f0 (f:51f0)
text "An Evolution Deck with Weedle, "
line "Nidoran♂ and Bellsprout."
done
-Text02f1: ; 3d22a (f:522a)
+LegendaryMoltresDescriptionText: ; 3d22a (f:522a)
text "Gather Fire Energy with the"
line "Legendary Moltres!"
done
-Text02f2: ; 3d25a (f:525a)
+LegendaryZapdosDescriptionText: ; 3d25a (f:525a)
text "Zap opponents with the"
line "Legandary Zapdos!"
done
-Text02f3: ; 3d284 (f:5284)
+LegendaryArticunoDescriptionText: ; 3d284 (f:5284)
text "Paralyze opponents with the"
line "Legendary Articuno!"
done
-Text02f4: ; 3d2b5 (f:52b5)
+LegendaryDragoniteDescriptionText: ; 3d2b5 (f:52b5)
text "Heal your Pokémon with the"
line "Legendary Dragonite!"
done
-Text02f5: ; 3d2e6 (f:52e6)
+MysteriousPokemonDescriptionText: ; 3d2e6 (f:52e6)
text "A very special Deck made of"
line "very rare Pokémon cards!"
done
diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm
index 9f50d9d..b9d2561 100644
--- a/src/text/text_offsets.asm
+++ b/src/text/text_offsets.asm
@@ -630,7 +630,7 @@ TextOffsets:: ; 34000 (d:4000)
textpointer OKIfFileDeletedText ; 0x0272
textpointer ReadTheInstructionsText ; 0x0273
textpointer PrintThisCardYesNoText ; 0x0274
- textpointer Text0275 ; 0x0275
+ textpointer PleaseChooseDeckConfigurationToPrintText ; 0x0275
textpointer PrintThisDeckText ; 0x0276
textpointer Text0277 ; 0x0277
textpointer PrintMenuItemsText ; 0x0278
@@ -659,106 +659,106 @@ TextOffsets:: ; 34000 (d:4000)
textpointer FireMachineText ; 0x028f
textpointer AutoMachineText ; 0x0290
textpointer LegendaryMachineText ; 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 AllFightingPokemonText ; 0x0292
+ textpointer BenchAttackText ; 0x0293
+ textpointer BattleContestText ; 0x0294
+ textpointer HeatedBattleText ; 0x0295
+ textpointer FirstStrikeText ; 0x0296
+ textpointer SqueakingMouseText ; 0x0297
+ textpointer GreatQuakeText ; 0x0298
+ textpointer BoneAttackText ; 0x0299
+ textpointer ExcavationText ; 0x029a
+ textpointer RockCrusherText ; 0x029b
+ textpointer BlueWaterText ; 0x029c
+ textpointer OnTheBeachText ; 0x029d
+ textpointer ParalyzeText ; 0x029e
+ textpointer EnergyRemovalText ; 0x029f
+ textpointer RainDancerText ; 0x02a0
+ textpointer CutePokemonText ; 0x02a1
+ textpointer PokemonFluteText ; 0x02a2
+ textpointer YellowFlashText ; 0x02a3
+ textpointer ElectricShockText ; 0x02a4
+ textpointer ZappingSelfdestructText ; 0x02a5
+ textpointer InsectCollectionText ; 0x02a6
+ textpointer JungleText ; 0x02a7
+ textpointer FlowerGardenText ; 0x02a8
+ textpointer KaleidoscopeText ; 0x02a9
+ textpointer FlowerPowerText ; 0x02aa
+ textpointer PsychicPowerText ; 0x02ab
+ textpointer DreamEaterHaunterText ; 0x02ac
+ textpointer ScavengingSlowbroText ; 0x02ad
+ textpointer StrangePowerText ; 0x02ae
+ textpointer StrangePsyshockText ; 0x02af
+ textpointer LovelyNidoranText ; 0x02b0
+ textpointer ScienceCorpsText ; 0x02b1
+ textpointer FlyinPokemonText ; 0x02b2
+ textpointer PoisonText ; 0x02b3
+ textpointer WondersOfScienceText ; 0x02b4
+ textpointer ReplaceEmAllText ; 0x02b5
+ textpointer ChariSaurText ; 0x02b6
+ textpointer TrafficLightText ; 0x02b7
+ textpointer FirePokemonDeckText ; 0x02b8
+ textpointer FireChargeText ; 0x02b9
+ textpointer CharmanderAndFriendsText ; 0x02ba
+ textpointer SquirtleAndFriendsText ; 0x02bb
+ textpointer BulbasaurAndFriendsText ; 0x02bc
+ textpointer PsychicMachampText ; 0x02bd
+ textpointer WaterBeetleText ; 0x02be
+ textpointer LegendaryMoltresText ; 0x02bf
+ textpointer LegendaryZapdosText ; 0x02c0
+ textpointer LegendaryArticunoText ; 0x02c1
+ textpointer LegendaryDragoniteText ; 0x02c2
+ textpointer MysteriousPokemonText ; 0x02c3
+ textpointer AllFightingPokemonDescriptionText ; 0x02c4
+ textpointer BenchAttackDescriptionText ; 0x02c5
+ textpointer BattleContestDescriptionText ; 0x02c6
+ textpointer HeatedBattleDescriptionText ; 0x02c7
+ textpointer FirstStrikeDescriptionText ; 0x02c8
+ textpointer SqueakingMouseDescriptionText ; 0x02c9
+ textpointer GreatQuakeDescriptionText ; 0x02ca
+ textpointer BoneAttackDescriptionText ; 0x02cb
+ textpointer ExcavationDescriptionText ; 0x02cc
+ textpointer RockCrusherDescriptionText ; 0x02cd
+ textpointer BlueWaterDescriptionText ; 0x02ce
+ textpointer OnTheBeachDescriptionText ; 0x02cf
+ textpointer ParalyzeDescriptionText ; 0x02d0
+ textpointer EnergyRemovalDescriptionText ; 0x02d1
+ textpointer RainDancerDescriptionText ; 0x02d2
+ textpointer CutePokemonDescriptionText ; 0x02d3
+ textpointer PokemonFluteDescriptionText ; 0x02d4
+ textpointer YellowFlashDescriptionText ; 0x02d5
+ textpointer ElectricShockDescriptionText ; 0x02d6
+ textpointer ZappingSelfdestructDescriptionText ; 0x02d7
+ textpointer InsectCollectionDescriptionText ; 0x02d8
+ textpointer JungleDescriptionText ; 0x02d9
+ textpointer FlowerGardenDescriptionText ; 0x02da
+ textpointer KaleidoscopeDescriptionText ; 0x02db
+ textpointer FlowerPowerDescriptionText ; 0x02dc
+ textpointer PsychicPowerDescriptionText ; 0x02dd
+ textpointer DreamEaterHaunterDescriptionText ; 0x02de
+ textpointer ScavengingSlowbroDescriptionText ; 0x02df
+ textpointer StrangePowerDescriptionText ; 0x02e0
+ textpointer StrangePsyshockDescriptionText ; 0x02e1
+ textpointer LovelyNidoranDescriptionText ; 0x02e2
+ textpointer ScienceCorpsDescriptionText ; 0x02e3
+ textpointer FlyinPokemonDescriptionText ; 0x02e4
+ textpointer PoisonDescriptionText ; 0x02e5
+ textpointer WondersOfScienceDescriptionText ; 0x02e6
+ textpointer ReplaceEmAllDescriptionText ; 0x02e7
+ textpointer ChariSaurDescriptionText ; 0x02e8
+ textpointer TrafficLightDescriptionText ; 0x02e9
+ textpointer FirePokemonDescriptionText ; 0x02ea
+ textpointer FireChargeDescriptionText ; 0x02eb
+ textpointer CharmanderAndFriendsDescriptionText ; 0x02ec
+ textpointer SquirtleAndFriendsDescriptionText ; 0x02ed
+ textpointer BulbasaurAndFriendsDescriptionText ; 0x02ee
+ textpointer PsychicMachampDescriptionText ; 0x02ef
+ textpointer WaterBeetleDescriptionText ; 0x02f0
+ textpointer LegendaryMoltresDescriptionText ; 0x02f1
+ textpointer LegendaryZapdosDescriptionText ; 0x02f2
+ textpointer LegendaryArticunoDescriptionText ; 0x02f3
+ textpointer LegendaryDragoniteDescriptionText ; 0x02f4
+ textpointer MysteriousPokemonDescriptionText ; 0x02f5
textpointer PokemonCardGlossaryText ; 0x02f6
textpointer GlossaryMenuPage1Text ; 0x02f7
textpointer GlossaryMenuPage2Text ; 0x02f8
diff --git a/src/wram.asm b/src/wram.asm
index 7944c9a..621b985 100644
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -38,6 +38,12 @@ NEXTU
wCardPopNameList:: ; c000
ds CARDPOP_NAME_LIST_SIZE
+NEXTU
+
+; buffer used to store a deck that will be built
+wDeckToBuild:: ; c000
+ ds DECK_STRUCT_SIZE
+
ENDU
ds $100
@@ -1993,7 +1999,7 @@ UNION
; buffer used to show which card IDs
; are visible in a given list
wVisibleListCardIDs:: ; cec4
- ds MAX_DECK_CONFIRMATION_VISIBLE_CARDS
+ ds NUM_DECK_CONFIRMATION_VISIBLE_CARDS
NEXTU
@@ -2013,7 +2019,9 @@ wNumVisibleCardListEntries:: ; cecb
wTotalCardCount:: ; cecc
ds $1
-wcecd:: ; cecd
+; is TRUE if list cannot be scrolled down
+; past the last visible entry
+wUnableToScrollDown:: ; cecd
ds $1
; pointer to a function that should be called
@@ -2077,6 +2085,10 @@ wCurDeckCardsTerminator:: ; cf67
ds $1
wCurDeckCardsEnd::
+
+; list of all the different cards in a deck configuration
+wUniqueDeckCardList:: ; cf68
+
; stores the count number of cards owned
; can be 0 in the case that a card is not available
; i.e. already inside a built deck
@@ -2125,7 +2137,8 @@ wDeckConfigurationMenuTransitionTable:: ; cfd6
wCurCardListPtr:: ; cfd8
ds $2
-wcfda:: ; cfda
+; text ID to print in the card confirmation screen text box
+wCardConfirmationText:: ; cfda
ds $2
ds $2
@@ -2206,43 +2219,52 @@ wMachineDeckPtrs:: ; d00d
wNumSavedDecks:: ; d085
ds $1
-wd086:: ; d086
+; temporarily holds value of wCardListCursorPos
+wTempDeckMachineCursorPos:: ; d086
ds $1
-wd087:: ; d087
+; temporarily holds value of wCardListVisibleOffset
+wTempCardListVisibleOffset:: ; d087
ds $1
-wd088:: ; d088
+; which list entry was selected in the Deck Machine screen
+wSelectedDeckMachineEntry:: ; d088
ds $1
-wd089:: ; d089
- ds $1
+wDismantledDeckName:: ; d089
+ ds DECK_NAME_SIZE
-wd08a:: ; d08a
- ds $18
+; which deck slot to be used to
+; build a new deck
+wDeckSlotForNewDeck:: ; d0a1
+ ds $1
-wd0a2:: ; d0a2
+wDeckMachineTitleText:: ; d0a2
ds $2
wTempBankSRAM:: ; d0a4
ds $1
-wd0a5:: ; d0a5
+wNumDeckMachineEntries:: ; d0a5
ds $1
-wd0a6:: ; d0a6
+; DECK_* flags to be dismantled to build a given deck
+wDecksToBeDismantled:: ; d0a6
ds $1
-wd0a7:: ; d0a7
+; text ID to print in the text box when
+; inside the Deck Machine menu
+wDeckMachineText:: ; d0a7
ds $2
-wd0a9:: ; d0a9
+; which deck machine is being used
+wCurAutoDeckMachine:: ; d0a9
ds $1
-wd0aa:: ; d0aa
- ds $1
-
- ds $9
+; text IDs for each deck descriptions of the
+; Ato Deck Machine currently being shown
+wAutoDeckMachineTextDescriptions:: ; d0aa
+ ds 2 * NUM_DECK_MACHINE_SLOTS
wd0b4:: ; d0b4
ds $1