From 7c228fb2bf103d6a87bca3f2e969aea8ddb06c02 Mon Sep 17 00:00:00 2001 From: earthoul Date: Thu, 2 Jul 2026 01:52:09 +0900 Subject: [PATCH] Refactor GFX offsets --- CONTRIBUTING.md | 2 +- src/constants/card_data_constants.asm | 15 ++- src/constants/duel_interface_constants.asm | 14 +- src/constants/gfx_constants.asm | 121 +++++++++++++++--- src/engine/bank02.asm | 14 +- src/gfx.asm | 26 ++-- ...deck_discard_icons.png => setup_icons.png} | Bin src/home/menus.asm | 30 ++--- src/home/tiles.asm | 72 +++++------ tools/extract_card_gfx.py | 2 +- 10 files changed, 195 insertions(+), 101 deletions(-) rename src/gfx/duel/{deck_discard_icons.png => setup_icons.png} (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 78996f7..8479789 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -400,7 +400,7 @@ DEF GRASS_F EQU $1 << GRASS ; $02 Bit mask constants are also useful if they are used multiple times. Palette colors are an example to illustrate this: ```asm -DEF PALRGB_WHITE EQU (31 << B_COLOR_BLUE) | (31 << B_COLOR_GREEN) | (31 << B_COLOR_RED) +DEF PALRGB_WHITE EQU (COLOR_CH_MAX << B_COLOR_BLUE) | (COLOR_CH_MAX << B_COLOR_GREEN) | (COLOR_CH_MAX << B_COLOR_RED) ``` Finally, note that constants that are exclusive to a specific feature or function should generally be local, and thus placed above the code that uses them. This is usually not the case, however, so you should usually be looking to declare them inside the constants/ directory as mentioned before. This kind of refactoring is also more appropriate when the disassembly is in a more advanced state as well. diff --git a/src/constants/card_data_constants.asm b/src/constants/card_data_constants.asm index 348fef3..9f8cfa2 100644 --- a/src/constants/card_data_constants.asm +++ b/src/constants/card_data_constants.asm @@ -146,6 +146,9 @@ DEF TYPE_PKMN EQU %111 DEF TYPE_ENERGY_F EQU 3 DEF TYPE_TRAINER_F EQU 4 +; TYPE_ENERGY_* -> generic type +DEF ENERGY_TYPE_MASK EQU %111 + ; CARD_DATA_RARITY constants DEF CIRCLE EQU $0 DEF DIAMOND EQU $1 @@ -169,11 +172,11 @@ DEF CARDPOP_ENERGY EQU $ff const SKY_FLYING_POKEMON ; $04 const WE_ARE_TEAM_ROCKET ; $05 const TEAM_ROCKETS_AMBITION ; $06 +DEF PRESENT_PACK EQU const_value ; $07 const PROMOTIONAL ; $07 DEF NUM_CARD_SETS EQU const_value const ENERGY ; $08 -DEF PRESENT_PACK EQU 7 ; booster pack constants const_def @@ -185,17 +188,17 @@ DEF PRESENT_PACK EQU 7 const BOOSTER_WE_ARE_TEAM_ROCKET ; $5 const BOOSTER_TEAM_ROCKETS_AMBITION ; $6 const BOOSTER_DEBUG_10_STAR ; $7 -DEF BOOSTERS_PRESENT_START EQU const_value + +DEF BOOSTERS_PRESENT_START EQU const_value ; $8 const BOOSTER_PRESENT_10_ENERGY ; $8 -DEF BOOSTERS_PRESENT_REGULAR_START EQU const_value +DEF BOOSTERS_PRESENT_REGULAR_START EQU const_value ; $9 const BOOSTER_PRESENT_FROM_ALL_SETS ; $9 const BOOSTER_PRESENT_FROM_NON_ROCKET_SETS ; $a const BOOSTER_PRESENT_FROM_LATTER_4_SETS ; $b const BOOSTER_PRESENT_FROM_ROCKET_SETS ; $c -DEF BOOSTERS_PRESENT_END EQU const_value - const BOOSTER_DEBUG_2_STAR ; $d +DEF NUM_BOOSTERS_PRESENT_REGULAR EQU const_value - BOOSTERS_PRESENT_REGULAR_START ; 4 -DEF NUM_BOOSTERS_PRESENT_REGULAR EQU BOOSTERS_PRESENT_END - BOOSTERS_PRESENT_REGULAR_START ; 4 + const BOOSTER_DEBUG_2_STAR ; $d ; real card set constants const_def diff --git a/src/constants/duel_interface_constants.asm b/src/constants/duel_interface_constants.asm index 80a5d3b..73f681f 100644 --- a/src/constants/duel_interface_constants.asm +++ b/src/constants/duel_interface_constants.asm @@ -27,13 +27,13 @@ DEF HEADER_POKEMON EQU $02 ; Box message id's const_def - const BOXMSG_PLAYERS_TURN - const BOXMSG_OPPONENTS_TURN - const BOXMSG_BETWEEN_TURNS - const BOXMSG_DECISION - const BOXMSG_BENCH_POKEMON - const BOXMSG_ARENA_POKEMON - const BOXMSG_COIN_TOSS + const BOXMSG_PLAYERS_TURN ; $0 + const BOXMSG_OPPONENTS_TURN ; $1 + const BOXMSG_BETWEEN_TURNS ; $2 + const BOXMSG_DECISION ; $3 + const BOXMSG_BENCH_POKEMON ; $4 + const BOXMSG_ARENA_POKEMON ; $5 + const BOXMSG_COIN_TOSS ; $6 ; wDuelDisplayedScreen constants DEF DUEL_MAIN_SCENE EQU $01 diff --git a/src/constants/gfx_constants.asm b/src/constants/gfx_constants.asm index 2c3c653..95e4a2c 100644 --- a/src/constants/gfx_constants.asm +++ b/src/constants/gfx_constants.asm @@ -4,7 +4,7 @@ DEF palettes EQUS "* PAL_SIZE" DEF NUM_BACKGROUND_PALETTES EQU 8 DEF NUM_OBJECT_PALETTES EQU 8 -DEF PALRGB_WHITE EQU (31 << B_COLOR_BLUE) | (31 << B_COLOR_GREEN) | (31 << B_COLOR_RED) +DEF PALRGB_WHITE EQU (COLOR_CH_MAX << B_COLOR_BLUE) | (COLOR_CH_MAX << B_COLOR_GREEN) | (COLOR_CH_MAX << B_COLOR_RED) ; tile size DEF tiles EQUS "* TILE_SIZE" @@ -12,25 +12,114 @@ DEF tiles EQUS "* TILE_SIZE" DEF TILE_SIZE_1BPP EQU 8 ; bytes DEF tiles_1bpp EQUS "* TILE_SIZE_1BPP" -; icon tile offsets -DEF ICON_TILE_BASIC_POKEMON EQU $d0 -DEF ICON_TILE_STAGE_1_POKEMON EQU $d4 -DEF ICON_TILE_STAGE_2_POKEMON EQU $d8 -DEF ICON_TILE_TRAINER EQU $dc +DEF CARD_HEADER_TILE_SIZE EQU 8 * 2 ; tiles +DEF REGULAR_ICON_TILE_SIZE EQU 4 ; tiles -DEF ICON_TILE_FIRE EQU $e0 -DEF ICON_TILE_GRASS EQU $e4 -DEF ICON_TILE_LIGHTNING EQU $e8 -DEF ICON_TILE_WATER EQU $ec -DEF ICON_TILE_FIGHTING EQU $f0 -DEF ICON_TILE_PSYCHIC EQU $f4 -DEF ICON_TILE_COLORLESS EQU $f8 -DEF ICON_TILE_ENERGY EQU $fc +DEF NUM_CARD_OR_DUEL_BORDER_TILES EQU 8 ; tiles + +; icon tile offsets +DEF CARD_TYPE_ICON_TILE_START EQU $d0 + +RSSET CARD_TYPE_ICON_TILE_START +DEF ICON_TILE_BASIC_POKEMON RL ; $d0 + +DEF ICON_TILE_EVO_OR_TRAINER_OFFSET EQU _RS - ICON_TILE_BASIC_POKEMON ; $04 +DEF ICON_TILE_STAGE_1_POKEMON RL ; $d4 +DEF ICON_TILE_STAGE_2_POKEMON RL ; $d8 +DEF ICON_TILE_TRAINER RL ; $dc +DEF NUM_EVO_OR_TRAINER_ICON_TILES EQU _RS - ICON_TILE_STAGE_1_POKEMON ; $0c + +DEF ICON_TILE_POKEMON_TYPES EQU _RS ; $e0 +DEF ICON_TILE_FIRE RL ; $e0 +DEF ICON_TILE_GRASS RL ; $e4 +DEF ICON_TILE_LIGHTNING RL ; $e8 +DEF ICON_TILE_WATER RL ; $ec +DEF ICON_TILE_FIGHTING RL ; $f0 +DEF ICON_TILE_PSYCHIC RL ; $f4 +DEF ICON_TILE_COLORLESS RL ; $f8 +DEF ICON_TILE_ENERGY RL ; $fc + +DEF NUM_CARD_TYPE_ICON_TILES EQU _RS - CARD_TYPE_ICON_TILE_START ; $30 + +; CardSymbolTable uses different order + const_def + const CARD_SYMBOL_FIRE ; $0 + const CARD_SYMBOL_GRASS ; $1 + const CARD_SYMBOL_LIGHTNING ; $2 + const CARD_SYMBOL_WATER ; $3 + const CARD_SYMBOL_FIGHTING ; $4 + const CARD_SYMBOL_PSYCHIC ; $5 + const CARD_SYMBOL_COLORLESS ; $6 + const CARD_SYMBOL_ENERGY ; $7 + const CARD_SYMBOL_BASIC_POKEMON ; $8 + const CARD_SYMBOL_STAGE_1_POKEMON ; $9 + const CARD_SYMBOL_STAGE_2_POKEMON ; $a + const CARD_SYMBOL_TRAINER ; $b + +; real-set icon tile offsets +RSRESET +DEF ICON_TILE_JUNGLE RL ; $00 +DEF ICON_TILE_FOSSIL RL ; $04 +DEF ICON_TILE_GB RL ; $08 +DEF ICON_TILE_TEAM_ROCKET RL ; $0c +DEF ICON_TILE_EXPANSION_SHEET RL ; $10 +DEF ICON_TILE_GYM_HEROES RL ; $14 +DEF ICON_TILE_BULBASAUR_DECK RL ; $18 +DEF ICON_TILE_SQUIRTLE_DECK RL ; $1c + +; check pokemon screen icon tile offsets +RSRESET +DEF ICON_TILE_CHECK_POKEMON_SCREEN_BASIC RL ; $00 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_STAGE1 RL ; $04 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_STAGE2 RL ; $08 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_STAGE2_WITHOUT_STAGE1 RL ; $0c +DEF NUM_CHECK_POKEMON_SCREEN_STAGE_ICON_TILES EQU _RS ; $10 + +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_ACT RB 3 ; $10 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BPX RW ; $13 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BP1 RB ; $15 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BP2 RB ; $16 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BP3 RB ; $17 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BP4 RB ; $18 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_PLAYER_BP5 RB ; $19 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_ACT RB 3 ; $1a +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BPX RW ; $1d +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BP1 RB ; $1f +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BP2 RB ; $20 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BP3 RB ; $21 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BP4 RB ; $22 +DEF ICON_TILE_CHECK_POKEMON_SCREEN_OPPONENT_BP5 RB ; $23 + +DEF NUM_CHECK_POKEMON_SCREEN_ICON_TILES EQU _RS ; $24 + +; setup icon tile offsets +RSRESET +DEF ICON_TILE_SETUP_FACEDOWN_ARENA RB 12 ; $00 +DEF ICON_TILE_SETUP_FACEDOWN_PRIZE RB ; $0c + +DEF NUM_SETUP_ICON_TILES EQU _RS ; $0d + +; play area screen icon tile offsets +RSRESET +DEF ICON_TILE_PLAY_AREA_SCREEN_HAND RL ; $00 +DEF ICON_TILE_PLAY_AREA_SCREEN_DECK RL ; $04 +DEF ICON_TILE_PLAY_AREA_SCREEN_DISCARD_PILE RL ; $08 +DEF ICON_TILE_PLAY_AREA_SCREEN_PRIZE RL ; $0c +DEF ICON_TILE_PLAY_AREA_SCREEN_PRIZE_EMPTY RL ; $10 +DEF ICON_TILE_PLAY_AREA_SCREEN_BENCH_BASIC RL ; $14 +DEF ICON_TILE_PLAY_AREA_SCREEN_BENCH_STAGE1 RL ; $18 +DEF ICON_TILE_PLAY_AREA_SCREEN_BENCH_STAGE2 RL ; $1c +DEF ICON_TILE_PLAY_AREA_SCREEN_BENCH_STAGE2_WITHOUT_STAGE1 RL ; $20 +DEF ICON_TILE_PLAY_AREA_SCREEN_BENCH_EMPTY RL ; $24 +DEF ICON_TILE_PLAY_AREA_SCREEN_TARGET_ARROW RB ; $28 +DEF ICON_TILE_PLAY_AREA_SCREEN_29 RL ; $29 + +DEF NUM_PLAY_AREA_SCREEN_ICON_TILES EQU _RS ; $2d ; card gfx ; see LoadCardGfx, CardGraphics -DEF CARD_GFX_WIDTH EQU 8 ; in tiles -DEF CARD_GFX_HEIGHT EQU 6 ; in tiles +DEF CARD_GFX_WIDTH EQU 8 ; tiles +DEF CARD_GFX_HEIGHT EQU 6 ; tiles DEF NUM_CARD_GFX_TILES EQU CARD_GFX_WIDTH * CARD_GFX_HEIGHT ; 48 RSRESET diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm index 333d679..ace0460 100644 --- a/src/engine/bank02.asm +++ b/src/engine/bank02.asm @@ -2205,7 +2205,7 @@ _DrawPlayAreaToPlacePrizeCards:: call ZeroObjectPositions call EmptyScreen call LoadSymbolsFont - call LoadDeckAndDiscardPileIcons + call LoadDuelPlayAreaScreenTiles_Setup bank1call SetDefaultPalettes ldh a, [hWhoseTurn] @@ -6243,10 +6243,10 @@ PrintConfirmationCardList: ; pokemon card ld a, [wLoadedCard1Stage] ld b, a +REPT 3 ; *= 4 add b - add b - add b ; *4 - add ICON_TILE_BASIC_POKEMON +ENDR + add CARD_TYPE_ICON_TILE_START jr .got_tile .not_pkmn_card @@ -6256,10 +6256,10 @@ PrintConfirmationCardList: ; energy card sub TYPE_ENERGY ld b, a +REPT 3 ; *= 4 add b - add b - add b ; *4 - add ICON_TILE_FIRE +ENDR + add ICON_TILE_POKEMON_TYPES jr .got_tile .trainer_card diff --git a/src/gfx.asm b/src/gfx.asm index 56a6be6..9ef52a6 100644 --- a/src/gfx.asm +++ b/src/gfx.asm @@ -77,49 +77,51 @@ Pals_6f0f0:: rgb 28, 12, 0 rgb 13, 9, 0 -Pals_6f108:: +DuelCoinTossResultPalette:: rgb 31, 31, 31 rgb 0, 0, 0 rgb 0, 0, 0 - rgb 0, 10, 28 + rgb 0, 10, 28 ; [X] -Pals_6f110:: +DuelBoxMessagePalettes:: + ; BOXMSG_PLAYERS_TURN rgb 31, 31, 31 rgb 31, 22, 9 rgb 27, 9, 4 rgb 18, 0, 0 - + ; BOXMSG_OPPONENTS_TURN rgb 31, 31, 31 rgb 16, 24, 29 rgb 6, 11, 24 rgb 0, 0, 16 - + ; BOXMSG_BETWEEN_TURNS rgb 31, 31, 31 rgb 21, 27, 13 rgb 7, 16, 0 rgb 0, 7, 0 - + ; BOXMSG_DECISION rgb 31, 31, 31 rgb 26, 22, 7 rgb 19, 13, 0 rgb 6, 2, 0 - + ; BOXMSG_BENCH_POKEMON rgb 31, 31, 31 rgb 31, 16, 20 rgb 21, 6, 14 rgb 10, 0, 4 - + ; BOXMSG_ARENA_POKEMON rgb 31, 31, 31 rgb 20, 29, 0 rgb 11, 18, 0 rgb 7, 6, 0 - + ; BOXMSG_COIN_TOSS rgb 31, 31, 31 rgb 18, 30, 31 rgb 8, 20, 27 rgb 0, 7, 14 -Pals_6f148:: +; back of the card +DuelSetupPalette:: rgb 31, 31, 31 rgb 0, 0, 31 rgb 31, 0, 0 @@ -155,8 +157,8 @@ DuelPlayAreaScreenGfx:: DuelPlayAreaScreenGfxDMG:: INCBIN "gfx/duel/play_area_screen_dmg.2bpp" -DuelDeckAndDiscardPileIcons:: - INCBIN "gfx/duel/deck_discard_icons.2bpp" +DuelSetupGraphics:: + INCBIN "gfx/duel/setup_icons.2bpp" DuelCoinTossResultTiles:: INCBIN "gfx/duel/coin_toss_result_symbols.2bpp" diff --git a/src/gfx/duel/deck_discard_icons.png b/src/gfx/duel/setup_icons.png similarity index 100% rename from src/gfx/duel/deck_discard_icons.png rename to src/gfx/duel/setup_icons.png diff --git a/src/home/menus.asm b/src/home/menus.asm index 8601cc9..faf88b3 100644 --- a/src/home/menus.asm +++ b/src/home/menus.asm @@ -627,14 +627,14 @@ CardTypeToSymbolID:: cp TYPE_ENERGY jr c, .pokemon_card ; energy card - and 7 ; convert energy constant to type constant + and ENERGY_TYPE_MASK ret .trainer_card - ld a, 11 + ld a, CARD_SYMBOL_TRAINER ret .pokemon_card ld a, [wLoadedCard1Stage] ; different symbol for each evolution stage - add 8 + add CARD_SYMBOL_BASIC_POKEMON ret ; return the entry in CardSymbolTable of the TYPE_* constant in wLoadedCard1Type @@ -683,18 +683,18 @@ DrawCardSymbol:: CardSymbolTable:: ; starting tile number, cgb palette (grey, yellow/red, green/blue, pink/orange) - db $e0, $02 ; TYPE_ENERGY_FIRE - db $e4, $03 ; TYPE_ENERGY_GRASS - db $e8, $02 ; TYPE_ENERGY_LIGHTNING - db $ec, $03 ; TYPE_ENERGY_WATER - db $f0, $04 ; TYPE_ENERGY_PSYCHIC - db $f4, $04 ; TYPE_ENERGY_FIGHTING - db $f8, $00 ; TYPE_ENERGY_DOUBLE_COLORLESS - db $fc, $03 ; TYPE_ENERGY_UNUSED - db $d0, $03 ; TYPE_PKMN_*, Basic - db $d4, $03 ; TYPE_PKMN_*, Stage 1 - db $d8, $02 ; TYPE_PKMN_*, Stage 2 - db $dc, $03 ; TYPE_TRAINER + db ICON_TILE_FIRE, 2 ; CARD_SYMBOL_FIRE + db ICON_TILE_GRASS, 3 ; CARD_SYMBOL_GRASS + db ICON_TILE_LIGHTNING, 2 ; CARD_SYMBOL_LIGHTNING + db ICON_TILE_WATER, 3 ; CARD_SYMBOL_WATER + db ICON_TILE_FIGHTING, 4 ; CARD_SYMBOL_FIGHTING + db ICON_TILE_PSYCHIC, 4 ; CARD_SYMBOL_PSYCHIC + db ICON_TILE_COLORLESS, 0 ; CARD_SYMBOL_COLORLESS + db ICON_TILE_ENERGY, 3 ; CARD_SYMBOL_ENERGY + db ICON_TILE_BASIC_POKEMON, 3 ; CARD_SYMBOL_BASIC_POKEMON + db ICON_TILE_STAGE_1_POKEMON, 3 ; CARD_SYMBOL_STAGE_1_POKEMON + db ICON_TILE_STAGE_2_POKEMON, 2 ; CARD_SYMBOL_STAGE_2_POKEMON + db ICON_TILE_TRAINER, 3 ; CARD_SYMBOL_TRAINER ; copy the name and level of the card at wLoadedCard1 to wDefaultText ; a = length in number of tiles (the resulting string will be padded with spaces to match it) diff --git a/src/home/tiles.asm b/src/home/tiles.asm index e9c8db8..7f2d183 100644 --- a/src/home/tiles.asm +++ b/src/home/tiles.asm @@ -66,38 +66,38 @@ ENDR ld de, RealCardSetSymbolGraphics - $4000 add hl, de ld de, v0Tiles1 + $7c tiles - ld b, $04 + ld b, REGULAR_ICON_TILE_SIZE call CopyFontsOrDuelGraphicsTiles or a ret .tile_offsets - db 8 ; GB - db -1 ; PRO - db -1 ; BASE_SET - db 0 ; JUNGLE - db 4 ; FOSSIL - db 12 ; TEAM_ROCKET - db 16 ; EXPANSION_SHEET - db 20 ; GYM_HEROES - db 24 ; BULBASAUR_DECK - db 28 ; SQUIRTLE_DECK + db ICON_TILE_GB ; GB + db -1 ; PRO + db -1 ; BASE_SET + db ICON_TILE_JUNGLE ; JUNGLE + db ICON_TILE_FOSSIL ; FOSSIL + db ICON_TILE_TEAM_ROCKET ; TEAM_ROCKET + db ICON_TILE_EXPANSION_SHEET ; EXPANSION_SHEET + db ICON_TILE_GYM_HEROES ; GYM_HEROES + db ICON_TILE_BULBASAUR_DECK ; BULBASAUR_DECK + db ICON_TILE_SQUIRTLE_DECK ; SQUIRTLE_DECK ; loads the Deck and Hand icons for the "Draw X card(s) from the deck." screen LoadDuelDrawCardsScreenTiles:: ld hl, DuelDrawCardsScreenIcons ld de, v0Tiles1 + $74 tiles - ld b, $08 + ld b, 2 * REGULAR_ICON_TILE_SIZE jp CopyFontsOrDuelGraphicsTiles ; load the face down basic / stage1 / stage2 card images shown in the check Pokemon screens LoadDuelFaceDownCardTiles:: - ld b, $10 + ld b, NUM_CHECK_POKEMON_SCREEN_STAGE_ICON_TILES jr LoadDuelCheckPokemonScreenTiles.got_num_tiles ; same as LoadDuelFaceDownCardTiles, plus also load the ACT / BPx tiles LoadDuelCheckPokemonScreenTiles:: - ld b, $24 + ld b, NUM_CHECK_POKEMON_SCREEN_ICON_TILES ; fallthrough .got_num_tiles @@ -112,7 +112,7 @@ LoadDuelCheckPokemonScreenTiles:: LoadCardOrDuelMenuBorderTiles:: ld hl, DuelMenuAndCardPicBorderTiles ld de, v0Tiles1 + $50 tiles - ld b, $08 + ld b, NUM_CARD_OR_DUEL_BORDER_TILES jr CopyFontsOrDuelGraphicsTiles ; loads the graphics of a card type header, used to display a picture of a card after drawing it @@ -123,7 +123,7 @@ LoadCardTypeHeaderTiles:: ld hl, DuelCardHeaderGraphics - $4000 add hl, de ld de, v0Tiles1 + $60 tiles - ld b, $10 + ld b, CARD_HEADER_TILE_SIZE call CopyFontsOrDuelGraphicsTiles bank1call LoadCardPictureBGPalettes ret @@ -132,26 +132,26 @@ LoadCardTypeHeaderTiles:: LoadDuelCardSymbolTiles:: ld hl, DuelCgbSymbolGraphics - $4000 ld de, v0Tiles1 + $50 tiles - ld b, $30 + ld b, NUM_CARD_TYPE_ICON_TILES jr CopyFontsOrDuelGraphicsTiles ; loads the symbols for Stage 1 Pkmn card, Stage 2 Pkmn card, and Trainer card. ; unlike LoadDuelCardSymbolTiles excludes the symbols for Basic Pkmn and all energies. LoadDuelCardSymbolTiles2:: - ld hl, DuelCgbSymbolGraphics + $4 tiles - $4000 + ld hl, DuelCgbSymbolGraphics + ICON_TILE_EVO_OR_TRAINER_OFFSET tiles - $4000 ld de, v0Tiles1 + $54 tiles - ld b, $c + ld b, NUM_EVO_OR_TRAINER_ICON_TILES jr CopyFontsOrDuelGraphicsTiles -; load the Deck and the Discard Pile icons -LoadDeckAndDiscardPileIcons:: - ld hl, Pals_6f148 - $4000 +; LoadDuelPlayAreaScreenTiles plus face-down arena cards and prize cards +LoadDuelPlayAreaScreenTiles_Setup:: + ld hl, DuelSetupPalette - $4000 ld de, wBackgroundPalettesCGB + 5 palettes ld c, PAL_SIZE call CopyFontsOrDuelGraphicsBytes - ld hl, DuelDeckAndDiscardPileIcons + ld hl, DuelSetupGraphics ld de, v0Tiles1 + $20 tiles - ld b, $0d + ld b, NUM_SETUP_ICON_TILES call CopyFontsOrDuelGraphicsTiles ; fallthrough @@ -165,25 +165,25 @@ LoadDuelPlayAreaScreenTiles:: ld hl, DuelPlayAreaScreenGfxDMG .copy ld de, v0Tiles1 + $50 tiles - ld b, $30 + ld b, NUM_PLAY_AREA_SCREEN_ICON_TILES + 3 jr CopyFontsOrDuelGraphicsTiles ; load the tiles for the [O] and [X] symbols used to display the results of a coin toss LoadDuelCoinTossResultTiles:: - ld hl, Pals_6f108 - $4000 + ld hl, DuelCoinTossResultPalette - $4000 ld de, wBackgroundPalettesCGB + 2 palettes ld c, PAL_SIZE call CopyFontsOrDuelGraphicsBytes ld hl, DuelCoinTossResultTiles ld de, v0Tiles2 + $30 tiles - ld b, $08 + ld b, 2 * REGULAR_ICON_TILE_SIZE jr CopyFontsOrDuelGraphicsTiles ; load the tiles of the text characters used with TX_SYMBOL LoadSymbolsFont:: ld hl, SymbolsFont - $4000 ld de, v0Tiles2 ; destination - ld b, $38 ; (DuelCardHeaderGraphics - SymbolsFont) / TILE_SIZE ; number of tiles + ld b, (DuelCardHeaderGraphics - SymbolsFont) / TILE_SIZE ; number of tiles ; fallthrough ; if hl ≤ $3fff @@ -210,34 +210,34 @@ LoadCardSymbolFontTilesToSRAM:: ; text box frame tiles ld hl, DuelMenuAndCardPicBorderTiles ld de, sGfxBuffer1 + $30 tiles - ld b, $8 + ld b, NUM_CARD_OR_DUEL_BORDER_TILES call CopyFontsOrDuelGraphicsTiles call GetCardSymbolData - sub $d0 + sub CARD_TYPE_ICON_TILE_START ld l, a ld h, $00 -REPT 4 ; *TILE_SIZE +REPT 4 ; *= TILE_SIZE add hl, hl ENDR ld de, DuelDmgSgbSymbolGraphics - $4000 add hl, de ld de, sGfxBuffer1 + $38 tiles - ld b, $4 + ld b, REGULAR_ICON_TILE_SIZE call CopyFontsOrDuelGraphicsTiles ld hl, DuelDmgSgbSymbolGraphics - $4000 ld de, sGfxBuffer4 + $10 tiles - ld b, $30 + ld b, NUM_CARD_TYPE_ICON_TILES jr CopyFontsOrDuelGraphicsTiles ; load the graphics and draw the duel box message given a BOXMSG_* constant in a DrawDuelBoxMessage:: push af +REPT 3 ; *= PAL_SIZE add a - add a - add a +ENDR ld e, a ld d, 0 - ld hl, Pals_6f110 - $4000 + ld hl, DuelBoxMessagePalettes - $4000 add hl, de ld de, wBackgroundPalettesCGB + 2 palettes ld c, PAL_SIZE diff --git a/tools/extract_card_gfx.py b/tools/extract_card_gfx.py index 22d994f..b197f91 100644 --- a/tools/extract_card_gfx.py +++ b/tools/extract_card_gfx.py @@ -57,7 +57,7 @@ KNOWN_PRE = [ (0x70000, 36*16, 'DuelCheckPokemonScreenGfx', 'gfx/duel/check_pokemon_screen', 6), # face-down cards + ACT/BPx (LoadDuelCheckPokemonScreenTiles) (0x70240, 45*16, 'DuelPlayAreaScreenGfx', 'gfx/duel/play_area_screen', 9), # CGB play-area screen (Func_1dff) (0x70510, 45*16, 'DuelPlayAreaScreenGfxDMG', 'gfx/duel/play_area_screen_dmg', 9), # DMG/SGB variant - (0x707e0, 13*16, 'DuelDeckAndDiscardPileIcons', 'gfx/duel/deck_discard_icons', 13), # LoadDeckAndDiscardPileIcons + (0x707e0, 13*16, 'DuelSetupGraphics', 'gfx/duel/setup_icons', 13), # LoadDuelPlayAreaScreenTiles_Setup (0x708b0, 8*16, 'DuelCoinTossResultTiles', 'gfx/duel/coin_toss_result_symbols', 4), # [O]/[X] (LoadDuelCoinTossResultTiles); distinct from CoinTossResultGfx (0x70930, 8*16, 'DuelMenuAndCardPicBorderTiles', 'gfx/duel/menu_card_pic_border', 8), # LoadCardOrDuelMenuBorderTiles (0x709b0, 8*16, 'DuelDrawCardsScreenIcons', 'gfx/duel/draw_cards_icons', 4), # Deck/Hand (LoadDuelDrawCardsScreenTiles)