summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rwxr-xr-xconstants/palette_constants.asm1
-rw-r--r--constants/sgb_constants.asm114
-rw-r--r--data/predef_pointers.inc2
-rw-r--r--data/sgb/blk_packets.inc73
-rw-r--r--data/sgb/ctrl_packets.inc128
-rw-r--r--data/sgb/pal_packets.inc57
-rw-r--r--data/sgb/super_palettes.inc (renamed from data/super_palettes.inc)0
-rwxr-xr-xengine/dumps/bank01.asm4
-rwxr-xr-xengine/dumps/bank02.asm1094
-rw-r--r--engine/dumps/bank09.asm8
-rw-r--r--engine/games/pikachu_minigame.asm2
-rw-r--r--engine/gfx/load_gfx.asm (renamed from engine/gfx.asm)2
-rw-r--r--engine/gfx/set_title_decoration.asm33
-rw-r--r--engine/gfx/sgb_layouts.asm896
-rw-r--r--engine/movie/game_freak_intro.asm2
-rw-r--r--engine/movie/title.asm2
-rw-r--r--engine/trainer_gear.asm8
-rw-r--r--gfx/gfx.asm18
-rw-r--r--gfx/sgb/sgb_border.binbin0 -> 1792 bytes
-rw-r--r--gfx/sgb/sgb_border.pal80
-rw-r--r--gfx/sgb/sgb_border_alt.binbin0 -> 1792 bytes
-rw-r--r--gfx/sgb/sgb_border_alt.pal80
-rw-r--r--home/tilemap.asm2
-rw-r--r--layout.link6
-rw-r--r--slack/corrupted_9e1c.pngbin1661 -> 0 bytes
-rw-r--r--slack/corrupted_a66c.pngbin1230 -> 0 bytes
-rw-r--r--slack/slack.mk2
28 files changed, 1393 insertions, 1225 deletions
diff --git a/Makefile b/Makefile
index 903f5db..af03e9f 100644
--- a/Makefile
+++ b/Makefile
@@ -124,6 +124,10 @@ $(BUILD)/%.1bpp: %.1bpp.png tools/gfx | $$(dir $$@)
$(BUILD)/%.tilemap: %.png | $$(dir $$@)
$(RGBGFX) -t $@ $<
+.PRECIOUS: $(BUILD)/%.sgb.tilemap
+$(BUILD)/%.sgb.tilemap: %.bin | $$(dir $$@)
+ tr < $< -d '\000' > $@
+
.PRECIOUS: %/
%/:
mkdir -p $@
diff --git a/constants/palette_constants.asm b/constants/palette_constants.asm
index 4453f18..248a40c 100755
--- a/constants/palette_constants.asm
+++ b/constants/palette_constants.asm
@@ -1,3 +1,4 @@
+; SuperPalettes indexes (see data/sgb/super_palettes.inc)
const_def
const PAL_ROUTE ; 00
const PAL_TOWN_01 ; 01
diff --git a/constants/sgb_constants.asm b/constants/sgb_constants.asm
index 31cdeb6..dfe0d51 100644
--- a/constants/sgb_constants.asm
+++ b/constants/sgb_constants.asm
@@ -2,122 +2,30 @@
const_def
const SGB_BATTLE_GRAYSCALE
const SGB_BATTLE_COLORS
- const SGB_TRAINER_GEAR_PALS
+ const SGB_TOWN_MAP
const SGB_STATS_SCREEN_HP_PALS
const SGB_POKEDEX
const SGB_SLOT_MACHINE
- const SGB_06
+ const SGB_TITLE_SCREEN
const SGB_GS_INTRO
const SGB_DIPLOMA
- const SGB_MAPPALS
+ const SGB_MAP_PALS
const SGB_PARTY_MENU
const SGB_EVOLUTION
- const SGB_GS_TITLE_SCREEN
- const SGB_0D
+ const SGB_GF_INTRO
+ const SGB_TRAINER_CARD
const SGB_MOVE_LIST
- const SGB_BETA_PIKACHU_MINIGAME
- const SGB_POKEDEX_SEARCH_OPTION
- const SGB_BETA_POKER
+ const SGB_PIKACHU_MINIGAME
+ const SGB_POKEDEX_SELECTION
+ const SGB_POKER
const SGB_POKEPIC
- const SGB_TRAINER_GEAR
- const SGB_PACKPALS
- const SGB_TRAINER_CARD
- const SGB_POKEDEX_UNOWN_MODE
- const SGB_BILLS_PC
- const SGB_UNOWN_PUZZLE
- const SGB_GAMEFREAK_LOGO
- const SGB_PLAYER_OR_MON_FRONTPIC_PALS
- const SGB_TRADE_TUBE
- const SGB_TRAINER_OR_MON_FRONTPIC_PALS
- const SGB_MYSTERY_GIFT
- const SGB_1E
+ const SGB_TRAINERGEAR
+ const SGB_TRAINERGEAR_MAP
+ const SGB_TRAINERGEAR_RADIO
SGB_PARTY_MENU_HP_PALS EQU -4
SGB_RAM EQU -1
-; PredefPals indexes (see gfx/sgb/predef.pal)
-; GetPredefPal arguments (see engine/gfx/color.asm)
- const_def
- const PREDEFPAL_00
- const PREDEFPAL_PALLET
- const PREDEFPAL_VIRIDIAN
- const PREDEFPAL_PEWTER
- const PREDEFPAL_CERULEAN
- const PREDEFPAL_LAVENDER
- const PREDEFPAL_VERMILION
- const PREDEFPAL_CELADON
- const PREDEFPAL_FUCHSIA
- const PREDEFPAL_CINNABAR
- const PREDEFPAL_SAFFRON
- const PREDEFPAL_INDIGO
- const PREDEFPAL_NEW_BARK
- const PREDEFPAL_CHERRYGROVE
- const PREDEFPAL_VIOLET
- const PREDEFPAL_AZALEA
- const PREDEFPAL_GOLDENROD
- const PREDEFPAL_ECRUTEAK
- const PREDEFPAL_OLIVINE
- const PREDEFPAL_CIANWOOD
- const PREDEFPAL_MAHOGANY
- const PREDEFPAL_BLACKTHORN
- const PREDEFPAL_LAKE_OF_RAGE
- const PREDEFPAL_SILVER_CAVE
- const PREDEFPAL_DUNGEONS
- const PREDEFPAL_NITE
- const PREDEFPAL_BLACKOUT
- const PREDEFPAL_DIPLOMA ; RB_MEWMON
- const PREDEFPAL_TRADE_TUBE ; RB_BLUEMON
- const PREDEFPAL_POKEDEX ; RB_REDMON
- const PREDEFPAL_RB_CYANMON
- const PREDEFPAL_RB_PURPLEMON
- const PREDEFPAL_RB_BROWNMON
- const PREDEFPAL_RB_GREENMON
- const PREDEFPAL_RB_PINKMON
- const PREDEFPAL_RB_YELLOWMON
- const PREDEFPAL_CGB_BADGE ; RB_GRAYMON
- const PREDEFPAL_BETA_SHINY_MEWMON
- const PREDEFPAL_BETA_SHINY_BLUEMON
- const PREDEFPAL_BETA_SHINY_REDMON
- const PREDEFPAL_BETA_SHINY_CYANMON
- const PREDEFPAL_BETA_SHINY_PURPLEMON
- const PREDEFPAL_BETA_SHINY_BROWNMON
- const PREDEFPAL_BETA_SHINY_GREENMON
- const PREDEFPAL_BETA_SHINY_PINKMON
- const PREDEFPAL_BETA_SHINY_YELLOWMON
- const PREDEFPAL_PARTY_ICON ; BETA_SHINY_GRAYMON
- const PREDEFPAL_HP_GREEN
- const PREDEFPAL_HP_YELLOW
- const PREDEFPAL_HP_RED
- const PREDEFPAL_TRAINER_GEAR
- const PREDEFPAL_BETA_LOGO_1
- const PREDEFPAL_BETA_LOGO_2
- const PREDEFPAL_GS_INTRO_GAMEFREAK_LOGO
- const PREDEFPAL_GS_INTRO_SHELLDER_LAPRAS
- const PREDEFPAL_BETA_INTRO_LAPRAS
- const PREDEFPAL_GS_INTRO_JIGGLYPUFF_PIKACHU_BG
- const PREDEFPAL_GS_INTRO_JIGGLYPUFF_PIKACHU_OB
- const PREDEFPAL_GS_INTRO_STARTERS_TRANSITION
- const PREDEFPAL_BETA_INTRO_VENUSAUR
- const PREDEFPAL_PACK ; GS_INTRO_CHARIZARD
- const PREDEFPAL_SLOT_MACHINE_0
- const PREDEFPAL_SLOT_MACHINE_1
- const PREDEFPAL_SLOT_MACHINE_2
- const PREDEFPAL_SLOT_MACHINE_3
- const PREDEFPAL_BETA_POKER_0
- const PREDEFPAL_BETA_POKER_1
- const PREDEFPAL_BETA_POKER_2
- const PREDEFPAL_BETA_POKER_3
- const PREDEFPAL_BETA_RADIO
- const PREDEFPAL_BETA_TRAINER_GEAR
- const PREDEFPAL_47
- const PREDEFPAL_GS_TITLE_SCREEN_0
- const PREDEFPAL_GS_TITLE_SCREEN_1
- const PREDEFPAL_GS_TITLE_SCREEN_2
- const PREDEFPAL_GS_TITLE_SCREEN_3
- const PREDEFPAL_UNOWN_PUZZLE
- const PREDEFPAL_4D
- const PREDEFPAL_GAMEFREAK_LOGO
-
; SGB system command codes
; http://gbdev.gg8.se/wiki/articles/SGB_Functions#SGB_System_Command_Table
const_def
diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc
index d71e4d7..8b0d143 100644
--- a/data/predef_pointers.inc
+++ b/data/predef_pointers.inc
@@ -88,7 +88,7 @@ GiveItemPredef::
add_predef Function1457a
add_predef Function143e0
add_predef CheckSGB
- add_predef Function928b
+ add_predef LoadSGBLayout
add_predef Function8786
add_predef DoBattleTransition
add_predef Function8c9c6
diff --git a/data/sgb/blk_packets.inc b/data/sgb/blk_packets.inc
new file mode 100644
index 0000000..1ca8e34
--- /dev/null
+++ b/data/sgb/blk_packets.inc
@@ -0,0 +1,73 @@
+attr_blk: MACRO
+ db (SGB_ATTR_BLK << 3) + ((\1 * 6) / 16 + 1)
+ db \1
+ENDM
+
+attr_blk_data: MACRO
+ db \1 ; which regions are affected
+ db \2 + (\3 << 2) + (\4 << 4) ; palette for each region
+ db \5, \6, \7, \8 ; x1, y1, x2, y2
+ENDM
+
+BlkPacket_986c:
+ attr_blk 1
+ attr_blk_data %011, 0,0,0, 00,00, 19,17
+ ds 8
+
+BlkPacket_GSIntroJigglypuffPikachu:
+ attr_blk 1
+ attr_blk_data %111, 1,1,0, 00,10, 19,13
+ ds 8
+
+BlkPacket_Battle:
+ attr_blk 5
+ attr_blk_data %111, 2,2,0, 00,12, 19,17
+ attr_blk_data %011, 1,1,0, 01,00, 10,03
+ attr_blk_data %011, 0,0,0, 10,08, 19,10
+ attr_blk_data %011, 2,2,0, 00,04, 08,11
+ attr_blk_data %011, 3,3,0, 11,00, 19,07
+
+BlkPacket_StatsScreen:
+ attr_blk 1
+ attr_blk_data %111, 1,1,0, 00,01, 07,07
+ ds 8
+
+BlkPacket_MoveList:
+ attr_blk 1
+ attr_blk_data %111, 1,1,0, 11,01, 19,02
+ ds 8
+
+BlkPacket_Pokedex:
+ attr_blk 1
+ attr_blk_data %111, 1,1,0, 01,01, 08,08
+ ds 8
+
+BlkPacket_SlotMachine:
+ attr_blk 5
+ attr_blk_data %011, 1,1,0, 00,00, 19,11
+ attr_blk_data %011, 2,2,0, 00,04, 19,09
+ attr_blk_data %010, 3,3,0, 00,06, 19,07
+ attr_blk_data %011, 0,0,0, 04,04, 15,09
+ attr_blk_data %011, 0,0,0, 00,12, 19,17
+
+BlkPacket_98fc:
+ attr_blk 7
+ attr_blk_data %111, 0,0,1, 00,00, 02,12
+ attr_blk_data %010, 0,0,0, 12,00, 18,01
+ attr_blk_data %010, 0,0,0, 12,02, 18,03
+ attr_blk_data %010, 0,0,0, 12,04, 18,05
+ attr_blk_data %010, 0,0,0, 12,06, 18,07
+ attr_blk_data %010, 0,0,0, 12,08, 18,09
+ attr_blk_data %010, 0,0,0, 12,10, 18,11
+ ds 4
+
+BlkPacket_TrainerGear:
+ attr_blk 1
+ attr_blk_data %111, 0,0,1, 00,00, 19,02
+ ds 8
+
+BlkPacket_TitleScreen:
+ attr_blk 1
+ attr_blk_data %111, 0,0,1, 00,00, 19,05
+ ds 8
+
diff --git a/data/sgb/ctrl_packets.inc b/data/sgb/ctrl_packets.inc
new file mode 100644
index 0000000..b613e7d
--- /dev/null
+++ b/data/sgb/ctrl_packets.inc
@@ -0,0 +1,128 @@
+sgb_pal_trn: MACRO
+ db (SGB_PAL_TRN << 3) + 1
+ ds 15
+ENDM
+
+sgb_mlt_req: MACRO
+ db (SGB_MLT_REG << 3) + 1
+ db \1 - 1
+ ds 14
+ENDM
+
+sgb_chr_trn: MACRO
+ db (SGB_CHR_TRN << 3) + 1
+ db \1 + (\2 << 1)
+ ds 14
+ENDM
+
+sgb_pct_trn: MACRO
+ db (SGB_PCT_TRN << 3) + 1
+ ds 15
+ENDM
+
+sgb_mask_en: MACRO
+ db (SGB_MASK_EN << 3) + 1
+ db \1
+ ds 14
+ENDM
+
+sgb_data_snd: MACRO
+ db (SGB_DATA_SND << 3) + 1
+ dw \1 ; address
+ db \2 ; bank
+ db \3 ; length (1-11)
+ENDM
+
+PalTrnPacket: sgb_pal_trn
+MltReq1Packet: sgb_mlt_req 1
+MltReq2Packet: sgb_mlt_req 2
+ChrTrnPacket: sgb_chr_trn 0, 0
+PctTrnPacket: sgb_pct_trn
+
+MaskEnFreezePacket: sgb_mask_en 1
+MaskEnCancelPacket: sgb_mask_en 0
+
+; These are packets containing SNES code.
+; This set of packets is found in several Japanese SGB-compatible titles.
+; It appears to be part of NCL's SGB devkit.
+
+DataSndPacket1:
+ sgb_data_snd $085d, $0, 11
+ db $8c ; cpx #$8c (2)
+ db $d0, $f4 ; bne -$0c
+ db $60 ; rts
+ ds 7
+
+DataSndPacket2:
+ sgb_data_snd $0852, $0, 11
+ db $a9, $e7 ; lda #$e7
+ db $9f, $01, $c0, $7e ; sta $7ec001, x
+ db $e8 ; inx
+ db $e8 ; inx
+ db $e8 ; inx
+ db $e8 ; inx
+ db $e0 ; cpx #$8c (1)
+
+DataSndPacket3:
+ sgb_data_snd $0847, $0, 11
+ db $c4 ; cmp #$c4 (2)
+ db $d0, $16 ; bne +$16
+ db $a5 ; lda dp
+ db $cb ; wai
+ db $c9, $05 ; cmp #$05
+ db $d0, $10 ; bne +$10
+ db $a2, $28 ; ldx #$28
+
+DataSndPacket4:
+ sgb_data_snd $083c, $0, 11
+ db $f0, $12 ; beq +$12
+ db $a5 ; lda dp
+ db $c9, $c9 ; cmp #$c9
+ db $c8 ; iny
+ db $d0, $1c ; bne +$1c
+ db $a5 ; lda dp
+ db $ca ; dex
+ db $c9 ; cmp #$c4 (1)
+
+DataSndPacket5:
+ sgb_data_snd $0831, $0, 11
+ dbw $0c, $caa5 ; tsb $caa5
+ db $c9, $7e ; cmp #$7e
+ db $d0, $06 ; bne +$06
+ db $a5 ; lda dp
+ db $cb ; wai
+ db $c9, $7e ; cmp #$7e
+
+DataSndPacket6:
+ sgb_data_snd $0826, $0, 11
+ db $39 ; bne +$39 (2)
+ dbw $cd, $0c48 ; cmp $0c48
+ db $d0, $34 ; bne +$34
+ db $a5 ; lda dp
+ db $c9, $c9 ; cmp #$c9
+ db $80, $d0 ; bra -$30
+
+DataSndPacket7:
+ sgb_data_snd $081b, $0, 11
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ ; $0820:
+ db $a9, $01 ; lda #01
+ dbw $cd, $0c4f ; cmp $c4f
+ db $d0 ; bne +$39 (1)
+
+DataSndPacket8:
+ sgb_data_snd $0810, $0, 11
+ dbw $4c, $0820 ; jmp $0820
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ db $ea ; nop
+ db $60 ; rts
+ db $ea ; nop
+ db $ea ; nop
+
diff --git a/data/sgb/pal_packets.inc b/data/sgb/pal_packets.inc
new file mode 100644
index 0000000..510cc04
--- /dev/null
+++ b/data/sgb/pal_packets.inc
@@ -0,0 +1,57 @@
+sgb_pal_set: MACRO
+ db (SGB_PAL_SET << 3) + 1
+ dw PAL_\1, PAL_\2, PAL_\3, PAL_\4
+ ds 7
+ENDM
+
+PalPacket_Poker:
+ sgb_pal_set POKER_1, POKER_2, POKER_3, POKER_4
+
+PalPacket_995c:
+ sgb_pal_set ROUTE, ROUTE, ROUTE, ROUTE
+
+PalPacket_GSIntroShellderLapras:
+ sgb_pal_set INTRO_WATER, ROUTE, ROUTE, ROUTE
+
+PalPacket_MagikarpIntro:
+ sgb_pal_set INTRO_LAPRAS, ROUTE, ROUTE, ROUTE
+
+PalPacket_GSIntroJigglypuffPikachu:
+ sgb_pal_set INTRO_FOREST, INTRO_JIGGLYPUFF_PIKACHU, ROUTE, ROUTE
+
+PalPacket_GSIntroBlastoise:
+ sgb_pal_set INTRO_BLASTOISE, ROUTE, ROUTE, ROUTE
+
+PalPacket_GSIntroVenusaur:
+ sgb_pal_set INTRO_VENUSAUR, ROUTE, ROUTE, ROUTE
+
+PalPacket_GSIntroCharizard:
+ sgb_pal_set INTRO_CHARIZARD, ROUTE, ROUTE, ROUTE
+
+PalPacket_PikachuMinigame:
+ sgb_pal_set INTRO_JIGGLYPUFF_PIKACHU, ROUTE, ROUTE, ROUTE
+
+PalPacket_PartyMenu:
+ sgb_pal_set SHINY_GRAYMON, GREEN_BAR, YELLOW_BAR, RED_BAR
+
+PalPacket_BattleGrayscale:
+ sgb_pal_set BLACK, BLACK, BLACK, BLACK
+
+PalPacket_TownMap:
+ sgb_pal_set TOWN_MAP, ROUTE, ROUTE, ROUTE
+
+PalPacket_Pokedex:
+ sgb_pal_set INTRO_CHARIZARD, ROUTE, ROUTE, ROUTE
+
+PalPacket_SlotMachine:
+ sgb_pal_set SLOTS_1, SLOTS_2, SLOTS_3, SLOTS_4
+
+PalPacket_TitleScreen:
+ sgb_pal_set LOGO_1, LOGO_2, MEWMON, PURPLEMON
+
+PalPacket_9a3c:
+ sgb_pal_set MEWMON, ROUTE, ROUTE, ROUTE
+
+PalPacket_GFIntro:
+ sgb_pal_set GAME_FREAK, ROUTE, ROUTE, ROUTE
+
diff --git a/data/super_palettes.inc b/data/sgb/super_palettes.inc
index 5dba6d8..5dba6d8 100644
--- a/data/super_palettes.inc
+++ b/data/sgb/super_palettes.inc
diff --git a/engine/dumps/bank01.asm b/engine/dumps/bank01.asm
index 01f36da..03c93ba 100755
--- a/engine/dumps/bank01.asm
+++ b/engine/dumps/bank01.asm
@@ -3741,9 +3741,7 @@ Function78f0:
ld a, [hl]
xor $08
ld [hl], a
- ld hl, Function96eb
- ld a, BANK(Function96eb)
- call FarCall_hl
+ callab UpdateSGBBorder
call LoadFont
call LoadFontExtra
ld c, $70
diff --git a/engine/dumps/bank02.asm b/engine/dumps/bank02.asm
index 38042a4..bb1528c 100755
--- a/engine/dumps/bank02.asm
+++ b/engine/dumps/bank02.asm
@@ -1252,1097 +1252,3 @@ Data8a53:
db $3c, $14, $3c, $20, $48, $14, $54, $1c
db $54, $2c, $54, $38, $3c, $44, $48, $2c
-SECTION "engine/dumps/bank02.asm@SetTitleBGDecorationBorder", ROMX
-
-SetTitleBGDecorationBorder:
- ld de, TitleBGDecorationBorder
- ld hl, vChars2 + $500
- lb bc, BANK(TitleBGDecorationBorder), $09
- call Request2bpp
- coord hl, 0, 8
- ld b, $50
- call Function91ef
- coord hl, 0, 16
- ld b, $54
- call Function91ef
- ret
-
-Function91ef:
- xor a
- ld c, $14
-.sub_91f2
- and $03
- or b
- ld [hli], a
- inc a
- dec c
- jr nz, .sub_91f2
- ret
-
-SECTION "engine/dumps/bank02.asm@Function928b", ROMX
-
-Function928b:
- ld a, b
- cp $ff
- jr nz, .sub_9293
- ld a, [wccd0]
-.sub_9293
- cp $fc
- jp z, Function9604
- ld l, a
- ld h, $00
- add hl, hl
- ld de, Table92a8
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, Function955f
- push de
- jp hl
-
-Table92a8:
- dw Function92d4
- dw Function92db
- dw Function934b
- dw Function9352
- dw Function9382
- dw Function93a6
- dw Function93ad
- dw Function93bb
- dw Function93b4
- dw Function93fe
- dw Function937b
- dw Function941a
- dw Function93d8
- dw Function9441
- dw Function932b
- dw Function93e4
- dw Function939f
- dw Function93eb
- dw Function9448
- dw Function948e
- dw Function94ab
- dw Function94c8
-
-Function92d4:
- ld hl, Data99ec
- ld de, Data988c
- ret
-
-Function92db:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, [wca3f]
- ld hl, wca02
- call Function9567
- jr c, .sub_92f7
- ld e, $00
- call Function9599
-.sub_92f7
- ld b, a
- ld a, [wca44]
- ld hl, wcdd7
- call Function9567
- jr c, .sub_9308
- ld e, $01
- call Function9599
-.sub_9308
- ld c, a
- ld hl, wcce2
- ld a, [wccd1]
- add $23
- ld [hli], a
- inc hl
- ld a, [wccd2]
- add $23
- ld [hli], a
- inc hl
- ld a, b
- ld [hli], a
- inc hl
- ld a, c
- ld [hl], a
- ld hl, wcce1
- ld de, Data988c
- ld a, $01
- ld [wccd0], a
- ret
-
-Function932b:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld hl, wcce2
- ld [hl], $10
- inc hl
- inc hl
- ld a, [wccd1]
- add $23
- ld [hl], a
- ld hl, wcce1
- ld de, Data98bc
- ret
-
-Function934b:
- ld hl, Data99fc
- ld de, Data986c
- ret
-
-Function9352:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, [wMonDexIndex]
- call Function956d
- call Function957e
- push af
- ld hl, wcce2
- ld a, [wccd9]
- add $23
- ld [hli], a
- inc hl
- pop af
- ld [hl], a
- ld hl, wcce1
- ld de, Data98ac
- ret
-
-Function937b:
- ld hl, Data99dc
- ld de, wcce2
- ret
-
-Function9382:
- ld hl, Data9a0c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, [wMonDexIndex]
- call Function956d
- ld hl, wcce4
- ld [hl], a
- ld hl, wcce1
- ld de, Data98cc
- ret
-
-Function939f:
- ld hl, Data99bc
- ld de, Data986c
- ret
-
-Function93a6:
- ld hl, Data9a1c
- ld de, Data98dc
- ret
-
-Function93ad:
- ld hl, Data9a2c
- ld de, Data993c
- ret
-
-Function93b4:
- ld hl, Data9a3c
- ld de, Data986c
- ret
-
-Function93bb:
- ld b, $00
- ld hl, Table93cc
- add hl, bc
- add hl, bc
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- inc hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ret
-
-Table93cc:
- dw Data986c
- dw Data996c
-
- dw Data987c
- dw Data998c
-
- dw Data986c
- dw Data999c
-
-Function93d8:
- ld hl, Data9a4c
- ld de, Data986c
- ld a, $08
- ld [wccd0], a
- ret
-
-Function93e4:
- ld hl, Data99cc
- ld de, Data986c
- ret
-
-Function93eb:
- ld hl, Data986c
- ld de, wc51a
- ld bc, $0010
- call CopyBytes
- ld hl, Data994c
- ld de, Data986c
- ret
-
-Function93fe:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- call Function94e5
- ld hl, wcce2
- ld [hld], a
- ld de, Data986c
- ld a, $09
- ld [wccd0], a
- ret
-
-Function941a:
- push bc
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- pop bc
- ld a, c
- and a
- ld a, $0e
- jr nz, .sub_9437
- ld a, [wccd1]
- call Function956d
- call Function957e
-.sub_9437
- ld [wcce2], a
- ld hl, wcce1
- ld de, Data986c
- ret
-
-Function9441:
- ld hl, Data9a3c
- ld de, Data986c
- ret
-
-Function9448:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld hl, Data986c
- ld de, wccf1
- ld bc, $0010
- call CopyBytes
- call Function94e5
- ld hl, wcce2
- ld [hl], a
- ld a, [wMonDexIndex]
- call Function956d
- ld hl, wcce4
- ld [hl], a
- ld hl, wccf4
- ld a, $05
- ld [hli], a
- ld a, [wMenuBorderLeftCoord]
- ld [hli], a
- ld a, [wMenuBorderTopCoord]
- ld [hli], a
- ld a, [wMenuBorderRightCoord]
- ld [hli], a
- ld a, [wMenuBorderBottomCoord]
- ld [hl], a
- ld hl, wcce1
- ld de, wccf1
- ret
-
-Function948e:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, $16
- ld [wcce2], a
- ld a, $30
- ld [wcce4], a
- ld hl, wcce1
- ld de, Data992c
- ret
-
-Function94ab:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, $16
- ld [wcce2], a
- ld a, $26
- ld [wcce4], a
- ld hl, wcce1
- ld de, Data992c
- ret
-
-Function94c8:
- ld hl, Data995c
- ld de, wcce1
- ld bc, $0010
- call CopyBytes
- ld a, $16
- ld [wcce2], a
- ld a, $39
- ld [wcce4], a
- ld hl, wcce1
- ld de, Data992c
- ret
-
-Function94e5:
- ld a, [wMapPermissions]
- cp $02
- jr z, .sub_950e
- cp $04
- jr z, .sub_9516
- cp $06
- jr z, .sub_951e
- cp $05
- jr z, .sub_9521
- cp $03
- jr z, .sub_9505
- call Function9527
- jr c, .sub_9524
- call Function9543
- ret
-.sub_9505
- call Function9536
- jr c, .sub_9524
- call Function9543
- ret
-.sub_950e
- call Function9527
- jr c, .sub_9524
- ld a, $00
- ret
-.sub_9516
- call Function9527
- jr c, .sub_9524
- ld a, $0c
- ret
-.sub_951e
- ld a, $03
- ret
-.sub_9521
- ld a, $04
- ret
-.sub_9524
- ld a, $0d
- ret
-
-Function9527:
- ld a, [wTimeOfDay]
- and $03
- jr z, .sub_9534
- cp $03
- jr z, .sub_9534
- scf
- ret
-.sub_9534
- and a
- ret
-
-Function9536:
- ld a, [wTimeOfDay]
- and $03
- cp $02
- jr nz, .sub_9541
- scf
- ret
-.sub_9541
- and a
- ret
-
-Function9543:
- ld a, [wMapGroup]
- ld e, a
- ld d, $00
- ld hl, Data954f
- add hl, de
- ld a, [hl]
- ret
-
-Data954f:
- db $01, $07, $0c, $03, $08, $06, $0b, $04
- db $05, $0a, $02, $03, $02, $02, $09, $01
-
-Function955f:
- push de
- call Function964b
- pop hl
- jp Function964b
-
-Function9567:
- bit 3, a
- ld a, $18
- ret nz
- ld a, [hl]
-
-Function956d:
- and a
- jr z, .sub_957a
- ld e, a
- ld d, $00
- ld hl, PokemonPalettes
- add hl, de
- ld a, [hl]
- and a
- ret
-.sub_957a
- ld a, $0f
- scf
- ret
-
-Function957e:
- push bc
- push af
- ld hl, wPartyMon1DVs
- ld a, [wWhichPokemon]
- ld bc, $0030
- call AddNTimes
- call Function95b0
- ld b, $00
- jr nc, .sub_9595
- ld b, $0a
-.sub_9595
- pop af
- add b
- pop bc
- ret
-
-Function9599:
- push bc
- push af
- ld a, e
- and a
- ld a, [wcae1]
- jr z, .sub_95a4
- srl a
-.sub_95a4
- srl a
- ld b, $00
- jr nc, .sub_95ac
- ld b, $0a
-.sub_95ac
- pop af
- add b
- pop bc
- ret
-
-Function95b0:
- ld a, [hl]
- cp $a0
- jr c, .sub_95ca
- ld a, [hli]
- and $0f
- cp $0a
- jr c, .sub_95ca
- ld a, [hl]
- cp $a0
- jr c, .sub_95ca
- ld a, [hl]
- and $0f
- cp $0a
- jr c, .sub_95ca
- scf
- ret
-.sub_95ca
- and a
- ret
-
-Function95cc:
- ld hl, wcddf
- ldh a, [hBattleTurn]
- and a
- jr nz, .sub_95d7
- ld hl, wca08
-.sub_95d7
- call Function95b0
- ld hl, wcae1
- jr nc, .sub_95ec
- ldh a, [hBattleTurn]
- and a
- jr nz, .sub_95e8
- set 0, [hl]
- jr .sub_95f7
-.sub_95e8
- set 1, [hl]
- jr .sub_95f7
-.sub_95ec
- ldh a, [hBattleTurn]
- and a
- jr nz, .sub_95f5
- res 0, [hl]
- jr .sub_95f7
-.sub_95f5
- res 1, [hl]
-.sub_95f7
- ret
-
-Function95f8:
- ld hl, Data98fc
- ld de, wcce2
- ld bc, $0030
- jp CopyBytes
-
-Function9604:
- ld hl, wccd3
- ld a, [wcce1]
- ld e, a
- ld d, $00
- add hl, de
- ld e, l
- ld d, h
- ld a, [de]
- and a
- ld e, $05
- jr z, .sub_961d
- dec a
- ld e, $0a
- jr z, .sub_961d
- ld e, $0f
-.sub_961d
- push de
- ld hl, wcceb
- ld bc, $0006
- ld a, [wcce1]
- call AddNTimes
- pop de
- ld [hl], e
- ret
-
-LoadMagikarpPalettes_Intro:
- ld hl, Data997c
- jp Function964b
-
-LoadForestPalettes2_Intro:
- ld hl, Data986c
- jp Function964b
-
-LoadVenusaurPalettes_Intro:
- ld hl, Data99ac
- jp Function964b
-
-LoadCharizardPalettes_Intro:
- ld hl, Data99bc
- jp Function964b
-
-Function9645:
- ld hl, wc51a
- jp Function964b
-
-Function964b:
- ld a, [wJoypadFlags]
- push af
- set 7, a
- ld [wJoypadFlags], a
- call Function965c
- pop af
- ld [wJoypadFlags], a
- ret
-
-Function965c:
- ld a, [hl]
- and $07
- ret z
- ld b, a
-.sub_9661
- push bc
- xor a
- ldh [rJOYP], a
- ld a, $30
- ldh [rJOYP], a
- ld b, $10
-.sub_966b
- ld e, $08
- ld a, [hli]
- ld d, a
-.sub_966f
- bit 0, d
- ld a, $10
- jr nz, .sub_9677
- ld a, $20
-.sub_9677
- ldh [rJOYP], a
- ld a, $30
- ldh [rJOYP], a
- rr d
- dec e
- jr nz, .sub_966f
- dec b
- jr nz, .sub_966b
- ld a, $20
- ldh [rJOYP], a
- ld a, $30
- ldh [rJOYP], a
- call Function9860
- pop bc
- dec b
- jr nz, .sub_9661
- ret
-
-CheckSGB:
- ld a, [wJoypadFlags]
- push af
- set 7, a
- ld [wJoypadFlags], a
- xor a
- ldh [rJOYP], a
- ld [wSGB], a
- call Function9730
- jr nc, .sub_96c0
- ld a, $01
- ld [wSGB], a
- call .sub_96c5
- call Function9704
- call Function979a
- call Function9725
- ld hl, Data9abc
- call Function965c
-.sub_96c0
- pop af
- ld [wJoypadFlags], a
- ret
-.sub_96c5
- ld hl, Table96d9
- ld c, $09
-.sub_96ca
- push bc
- ld a, [hli]
- push hl
- ld h, [hl]
- ld l, a
- call Function965c
- pop hl
- inc hl
- pop bc
- dec c
- jr nz, .sub_96ca
- ret
-
-Table96d9:
- dw Data9aac
- dw Data9acc
- dw Data9adc
- dw Data9aec
- dw Data9afc
- dw Data9b0c
- dw Data9b1c
- dw Data9b2c
- dw Data9b3c
-
-Function96eb:
- ld a, [wSGB]
- ret z
- di
- xor a
- ldh [rJOYP], a
- ld hl, Data9aac
- call Function965c
- call Function9704
- ld hl, Data9abc
- call Function965c
- ei
- ret
-
-Function9704:
- call Function9710
- push de
- call Function980a
- pop hl
- call Function97be
- ret
-
-Function9710:
- ld a, [wce5f]
- bit 3, a
- jr nz, .sub_971e
- ld hl, UnusedSGBBorderGFX
- ld de, Corrupted9e1cGFX
- ret
-.sub_971e
- ld hl, SGBBorderGFX
- ld de, Corrupteda66cGFX
- ret
-
-Function9725:
- ld hl, vChars0
- ld bc, $2000
- xor a
- call ByteFill
- ret
-
-Function9730:
- ld hl, Data9a7c
- call Function965c
- call Function9860
- ldh a, [rJOYP]
- and $03
- cp $03
- jr nz, .sub_978c
- ld a, $20
- ldh [rJOYP], a
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- call Function9860
- call Function9860
- ld a, $30
- ldh [rJOYP], a
- call Function9860
- call Function9860
- ld a, $10
- ldh [rJOYP], a
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- call Function9860
- call Function9860
- ld a, $30
- ldh [rJOYP], a
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- ldh a, [rJOYP]
- call Function9860
- call Function9860
- ldh a, [rJOYP]
- and $03
- cp $03
- jr nz, .sub_978c
- call .sub_9791
- and a
- ret
-.sub_978c
- call .sub_9791
- scf
- ret
-.sub_9791
- ld hl, Data9a6c
- call Function965c
- jp Function9860
-
-Function979a:
- call DisableLCD
- ld a, $e4
- ldh [rBGP], a
- ld hl, SuperPalettes
- ld de, vChars1
- ld bc, $1000
- call Function9838
- call Function984a
- ld a, $e3
- ldh [rLCDC], a
- ld hl, Data9a5c
- call Function965c
- xor a
- ldh [rBGP], a
- ret
-
-Function97be:
- call DisableLCD
- ld a, $e4
- ldh [rBGP], a
- ld de, vChars1
- ld bc, $0140
- call Function9838
- ld b, $12
-.sub_97d0
- push bc
- ld bc, $000c
- call Function9838
- ld bc, $0028
- call Function9841
- ld bc, $000c
- call Function9838
- pop bc
- dec b
- jr nz, .sub_97d0
- ld bc, $0140
- call Function9838
- ld bc, $0100
- call Function9841
- ld bc, $0080
- call Function9838
- call Function984a
- ld a, $e3
- ldh [rLCDC], a
- ld hl, Data9a9c
- call Function965c
- xor a
- ldh [rBGP], a
- ret
-
-Function980a:
- call DisableLCD
- ld a, $e4
- ldh [rBGP], a
- ld de, vChars1
- ld b, $80
-.sub_9816
- push bc
- ld bc, $0010
- call Function9838
- ld bc, $0010
- call Function9841
- pop bc
- dec b
- jr nz, .sub_9816
- call Function984a
- ld a, $e3
- ldh [rLCDC], a
- ld hl, Data9a8c
- call Function965c
- xor a
- ldh [rBGP], a
- ret
-
-Function9838:
- ld a, [hli]
- ld [de], a
- inc de
- dec bc
- ld a, c
- or b
- jr nz, Function9838
- ret
-
-Function9841:
- xor a
- ld [de], a
- inc de
- dec bc
- ld a, c
- or b
- jr nz, Function9841
- ret
-
-Function984a:
- ld hl, vBGMap0
- ld de, $000c
- ld a, $80
- ld c, $0d
-.sub_9854
- ld b, $14
-.sub_9856
- ld [hli], a
- inc a
- dec b
- jr nz, .sub_9856
- add hl, de
- dec c
- jr nz, .sub_9854
- ret
-
-Function9860:
- ld de, $1b58
-.sub_9863
- nop
- nop
- nop
- dec de
- ld a, d
- or e
- jr nz, .sub_9863
- ret
-
-Data986c:
- db $21, $01, $03, $00, $00, $00, $13, $11
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data987c:
- db $21, $01, $07, $05, $00, $0a, $13, $0d
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data988c:
- db $22, $05, $07, $0a, $00, $0c, $13, $11
- db $03, $05, $01, $00, $0a, $03, $03, $00
-
-Data989c:
- db $0a, $08, $13, $0a, $03, $0a, $00, $04
- db $08, $0b, $03, $0f, $0b, $00, $13, $07
-
-Data98ac:
- db $21, $01, $07, $05, $00, $01, $07, $07
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data98bc:
- db $21, $01, $07, $05, $0b, $01, $13, $02
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data98cc:
- db $21, $01, $07, $05, $01, $01, $08, $08
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data98dc:
- db $22, $05, $03, $05, $00, $00, $13, $0b
- db $03, $0a, $00, $04, $13, $09, $02, $0f
-
-Data98ec:
- db $00, $06, $13, $07, $03, $00, $04, $04
- db $0f, $09, $03, $00, $00, $0c, $13, $11
-
-Data98fc:
- db $23, $07, $07, $10, $00, $00, $02, $0c
- db $02, $00, $0c, $00, $12, $01, $02, $00
-
-Data990c:
- db $0c, $02, $12, $03, $02, $00, $0c, $04
- db $12, $05, $02, $00, $0c, $06, $12, $07
-
-Data991c:
- db $02, $00, $0c, $08, $12, $09, $02, $00
- db $0c, $0a, $12, $0b, $00, $00, $00, $00
-
-Data992c:
- db $21, $01, $07, $10, $00, $00, $13, $02
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data993c:
- db $21, $01, $07, $10, $00, $00, $13, $05
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data994c:
- db $51, $35, $00, $36, $00, $37, $00, $38
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data995c:
- db $51, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data996c:
- db $51, $2a, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data997c:
- db $51, $2b, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data998c:
- db $51, $2c, $00, $2d, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data999c:
- db $51, $2e, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99ac:
- db $51, $2f, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99bc:
- db $51, $30, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99cc:
- db $51, $2d, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99dc:
- db $51, $22, $00, $23, $00, $24, $00, $25
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99ec:
- db $51, $0e, $00, $0e, $00, $0e, $00, $0e
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data99fc:
- db $51, $26, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a0c:
- db $51, $30, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a1c:
- db $51, $31, $00, $32, $00, $33, $00, $34
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a2c:
- db $51, $27, $00, $28, $00, $0f, $00, $13
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a3c:
- db $51, $0f, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a4c:
- db $51, $29, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a5c:
- db $59, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a6c:
- db $89, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a7c:
- db $89, $01, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a8c:
- db $99, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9a9c:
- db $a1, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9aac:
- db $b9, $01, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9abc:
- db $b9, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00
-
-Data9acc:
- db $79, $5d, $08, $00, $0b, $8c, $d0, $f4
- db $60, $00, $00, $00, $00, $00, $00, $00
-
-Data9adc:
- db $79, $52, $08, $00, $0b, $a9, $e7, $9f
- db $01, $c0, $7e, $e8, $e8, $e8, $e8, $e0
-
-Data9aec:
- db $79, $47, $08, $00, $0b, $c4, $d0, $16
- db $a5, $cb, $c9, $05, $d0, $10, $a2, $28
-
-Data9afc:
- db $79, $3c, $08, $00, $0b, $f0, $12, $a5
- db $c9, $c9, $c8, $d0, $1c, $a5, $ca, $c9
-
-Data9b0c:
- db $79, $31, $08, $00, $0b, $0c, $a5, $ca
- db $c9, $7e, $d0, $06, $a5, $cb, $c9, $7e
-
-Data9b1c:
- db $79, $26, $08, $00, $0b, $39, $cd, $48
- db $0c, $d0, $34, $a5, $c9, $c9, $80, $d0
-
-Data9b2c:
- db $79, $1b, $08, $00, $0b, $ea, $ea, $ea
- db $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0
-
-Data9b3c:
- db $79, $10, $08, $00, $0b, $4c, $20, $08
- db $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea
diff --git a/engine/dumps/bank09.asm b/engine/dumps/bank09.asm
index 39d902e..5466c79 100644
--- a/engine/dumps/bank09.asm
+++ b/engine/dumps/bank09.asm
@@ -347,10 +347,10 @@ UpdateItemDescription::
callab ShowItemDescription
ret
-Function2420b:
+Pokepic:
ld a, $01
ldh [hBGMapMode], a
- ld hl, .MenuHeader24262
+ ld hl, .PokepicMenuHeader
call LoadMenuHeader
call MenuBox
call UpdateSprites
@@ -372,7 +372,7 @@ Function2420b:
call Coord2Tile
ld a, $80
ldh [hGraphicStartTile], a
- ld bc, $0707
+ lb bc, 7, 7
predef PlaceGraphic
ld a, $01
ldh [hBGMapMode], a
@@ -384,7 +384,7 @@ Function2420b:
call LoadFont
ret
-.MenuHeader24262:
+.PokepicMenuHeader:
db MENU_BACKUP_TILES
menu_coords 6, 4, $e, $d
dw 0
diff --git a/engine/games/pikachu_minigame.asm b/engine/games/pikachu_minigame.asm
index de930da..4230771 100644
--- a/engine/games/pikachu_minigame.asm
+++ b/engine/games/pikachu_minigame.asm
@@ -36,7 +36,7 @@ PikachuMiniGame::
.Init:
call DisableLCD
- ld b, SGB_BETA_PIKACHU_MINIGAME
+ ld b, SGB_PIKACHU_MINIGAME
call GetSGBLayout
callab InitEffectObject
call PikachuMiniGame_ClearBothTilemaps
diff --git a/engine/gfx.asm b/engine/gfx/load_gfx.asm
index 5700904..c628c67 100644
--- a/engine/gfx.asm
+++ b/engine/gfx/load_gfx.asm
@@ -1,6 +1,6 @@
INCLUDE "constants.asm"
-SECTION "engine/gfx.asm", ROMX
+SECTION "engine/gfx/load_gfx.asm", ROMX
LoadFontGraphics::
ld de, FontGFX
diff --git a/engine/gfx/set_title_decoration.asm b/engine/gfx/set_title_decoration.asm
new file mode 100644
index 0000000..1a4f2fe
--- /dev/null
+++ b/engine/gfx/set_title_decoration.asm
@@ -0,0 +1,33 @@
+INCLUDE "constants.asm"
+
+SECTION "engine/gfx/set_title_decoration.asm", ROMX
+
+SetTitleBGDecorationBorder:
+ ld de, TitleBGDecorationBorder
+ ld hl, vChars2 + $500
+ lb bc, BANK(TitleBGDecorationBorder), 9
+ call Request2bpp
+
+; top row
+ coord hl, 0, 8
+ ld b, $50
+ call .PlaceRow
+
+; bottom row
+ coord hl, 0, 16
+ ld b, $54
+ call .PlaceRow
+ ret
+
+.PlaceRow:
+ xor a
+ ld c, SCREEN_WIDTH
+.loop
+ and $03
+ or b
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .loop
+ ret
+
diff --git a/engine/gfx/sgb_layouts.asm b/engine/gfx/sgb_layouts.asm
new file mode 100644
index 0000000..a4faf2a
--- /dev/null
+++ b/engine/gfx/sgb_layouts.asm
@@ -0,0 +1,896 @@
+INCLUDE "constants.asm"
+
+SECTION "engine/gfx/sgb_layouts.asm", ROMX
+
+LoadSGBLayout:
+ ld a, b
+ cp SGB_RAM
+ jr nz, .not_ram
+ ld a, [wccd0]
+.not_ram
+ cp SGB_PARTY_MENU_HP_PALS
+ jp z, SGB_ApplyPartyMenuHPPals
+ ld l, a
+ ld h, 0
+ add hl, hl
+ ld de, .Jumptable
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, _LoadSGBLayout_ReturnFromJumpTable
+ push de
+ jp hl
+
+.Jumptable:
+ dw SGB_BattleGrayscale
+ dw SGB_BattleColors
+ dw SGB_TownMap
+ dw SGB_StatsScreenHPPals
+ dw SGB_Pokedex
+ dw SGB_SlotMachine
+ dw SGB_TitleScreen
+ dw SGB_GSIntro
+ dw SGB_Diploma
+ dw SGB_MapPals
+ dw SGB_PartyMenu
+ dw SGB_Evolution
+ dw SGB_GFIntro
+ dw SGB_TrainerCard
+ dw SGB_MoveList
+ dw SGB_PikachuMinigame
+ dw SGB_PokedexSelection
+ dw SGB_Poker
+ dw SGB12
+ dw SGB_TrainerGear
+ dw SGB_TrainerGearMap
+ dw SGB_TrainerGearRadio
+
+SGB_BattleGrayscale:
+ ld hl, PalPacket_BattleGrayscale
+ ld de, BlkPacket_Battle
+ ret
+
+SGB_BattleColors:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+
+ ld a, [wca3f]
+ ld hl, wca02
+ call Function9567
+ jr c, .sub_92f7
+
+ ld e, $00
+ call Function9599
+.sub_92f7
+ ld b, a
+ ld a, [wca44]
+ ld hl, wcdd7
+ call Function9567
+ jr c, .sub_9308
+ ld e, $01
+ call Function9599
+.sub_9308
+ ld c, a
+ ld hl, wcce2
+ ld a, [wccd1]
+ add $23
+ ld [hli], a
+ inc hl
+ ld a, [wccd2]
+ add $23
+ ld [hli], a
+ inc hl
+ ld a, b
+ ld [hli], a
+ inc hl
+ ld a, c
+ ld [hl], a
+ ld hl, wcce1
+ ld de, BlkPacket_Battle
+ ld a, $01
+ ld [wccd0], a
+ ret
+
+SGB_MoveList:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld hl, wcce2
+ ld [hl], $10
+ inc hl
+ inc hl
+ ld a, [wccd1]
+ add $23
+ ld [hl], a
+ ld hl, wcce1
+ ld de, BlkPacket_MoveList
+ ret
+
+SGB_TownMap:
+ ld hl, PalPacket_TownMap
+ ld de, BlkPacket_986c
+ ret
+
+SGB_StatsScreenHPPals:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld a, [wMonDexIndex]
+ call Function956d
+ call Function957e
+ push af
+ ld hl, wcce2
+ ld a, [wccd9]
+ add $23
+ ld [hli], a
+ inc hl
+ pop af
+ ld [hl], a
+ ld hl, wcce1
+ ld de, BlkPacket_StatsScreen
+ ret
+
+SGB_PartyMenu:
+ ld hl, PalPacket_PartyMenu
+ ld de, wcce2
+ ret
+
+SGB_Pokedex:
+ ld hl, PalPacket_Pokedex
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld a, [wMonDexIndex]
+ call Function956d
+ ld hl, wcce4
+ ld [hl], a
+ ld hl, wcce1
+ ld de, BlkPacket_Pokedex
+ ret
+
+SGB_PokedexSelection:
+ ld hl, PalPacket_GSIntroCharizard
+ ld de, BlkPacket_986c
+ ret
+
+SGB_SlotMachine:
+ ld hl, PalPacket_SlotMachine
+ ld de, BlkPacket_SlotMachine
+ ret
+
+SGB_TitleScreen:
+ ld hl, PalPacket_TitleScreen
+ ld de, BlkPacket_TitleScreen
+ ret
+
+SGB_Diploma:
+ ld hl, PalPacket_9a3c
+ ld de, BlkPacket_986c
+ ret
+
+SGB_GSIntro:
+ ld b, 0
+ ld hl, .BlkPacketTable
+rept 4
+ add hl, bc
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+.BlkPacketTable:
+ dw BlkPacket_986c, PalPacket_GSIntroShellderLapras
+ dw BlkPacket_GSIntroJigglypuffPikachu, PalPacket_GSIntroJigglypuffPikachu
+ dw BlkPacket_986c, PalPacket_GSIntroBlastoise
+
+SGB_GFIntro:
+ ld hl, PalPacket_GFIntro
+ ld de, BlkPacket_986c
+ ld a, $08
+ ld [wccd0], a
+ ret
+
+SGB_PikachuMinigame:
+ ld hl, PalPacket_PikachuMinigame
+ ld de, BlkPacket_986c
+ ret
+
+SGB_Poker:
+ ld hl, BlkPacket_986c
+ ld de, wc51a
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld hl, PalPacket_Poker
+ ld de, BlkPacket_986c
+ ret
+
+SGB_MapPals:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ call GetMapPalsIndex
+ ld hl, wcce2
+ ld [hld], a
+ ld de, BlkPacket_986c
+ ld a, $09
+ ld [wccd0], a
+ ret
+
+SGB_Evolution:
+ push bc
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ pop bc
+ ld a, c
+ and a
+ ld a, $0e
+ jr nz, .sub_9437
+ ld a, [wccd1]
+ call Function956d
+ call Function957e
+.sub_9437
+ ld [wcce2], a
+ ld hl, wcce1
+ ld de, BlkPacket_986c
+ ret
+
+SGB_TrainerCard:
+ ld hl, PalPacket_9a3c
+ ld de, BlkPacket_986c
+ ret
+
+SGB12:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld hl, BlkPacket_986c
+ ld de, wccf1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ call GetMapPalsIndex
+ ld hl, wcce2
+ ld [hl], a
+ ld a, [wMonDexIndex]
+ call Function956d
+ ld hl, wcce4
+ ld [hl], a
+ ld hl, wccf4
+ ld a, $05
+ ld [hli], a
+ ld a, [wMenuBorderLeftCoord]
+ ld [hli], a
+ ld a, [wMenuBorderTopCoord]
+ ld [hli], a
+ ld a, [wMenuBorderRightCoord]
+ ld [hli], a
+ ld a, [wMenuBorderBottomCoord]
+ ld [hl], a
+ ld hl, wcce1
+ ld de, wccf1
+ ret
+
+SGB_TrainerGear:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld a, $16
+ ld [wcce2], a
+ ld a, $30
+ ld [wcce4], a
+ ld hl, wcce1
+ ld de, BlkPacket_TrainerGear
+ ret
+
+SGB_TrainerGearMap:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld a, $16
+ ld [wcce2], a
+ ld a, $26
+ ld [wcce4], a
+ ld hl, wcce1
+ ld de, BlkPacket_TrainerGear
+ ret
+
+SGB_TrainerGearRadio:
+ ld hl, PalPacket_995c
+ ld de, wcce1
+ ld bc, PALPACKET_LENGTH
+ call CopyBytes
+ ld a, $16
+ ld [wcce2], a
+ ld a, $39
+ ld [wcce4], a
+ ld hl, wcce1
+ ld de, BlkPacket_TrainerGear
+ ret
+
+GetMapPalsIndex:
+ ld a, [wMapPermissions]
+ cp ROUTE
+ jr z, .is_route
+ cp CAVE
+ jr z, .is_cave
+ cp GATE
+ jr z, .is_gate
+ cp ENVIRONMENT_5
+ jr z, .env5
+ cp INDOOR
+ jr z, .indoors
+ call Function9527
+ jr c, .sub_9524
+ call Function9543
+ ret
+
+.indoors
+ call Function9536
+ jr c, .sub_9524
+ call Function9543
+ ret
+
+.is_route
+ call Function9527
+ jr c, .sub_9524
+ ld a, $00
+ ret
+
+.is_cave
+ call Function9527
+ jr c, .sub_9524
+ ld a, $0c
+ ret
+
+.is_gate
+ ld a, $03
+ ret
+
+.env5
+ ld a, $04
+ ret
+
+.sub_9524
+ ld a, $0d
+ ret
+
+Function9527:
+ ld a, [wTimeOfDay]
+ and $03
+ jr z, .sub_9534
+ cp $03
+ jr z, .sub_9534
+ scf
+ ret
+.sub_9534
+ and a
+ ret
+
+Function9536:
+ ld a, [wTimeOfDay]
+ and $03
+ cp $02
+ jr nz, .sub_9541
+ scf
+ ret
+.sub_9541
+ and a
+ ret
+
+Function9543:
+ ld a, [wMapGroup]
+ ld e, a
+ ld d, $00
+ ld hl, Data954f
+ add hl, de
+ ld a, [hl]
+ ret
+
+Data954f:
+ db $01, $07, $0c, $03, $08, $06, $0b, $04
+ db $05, $0a, $02, $03, $02, $02, $09, $01
+
+_LoadSGBLayout_ReturnFromJumpTable:
+ push de
+ call PushSGBPals
+ pop hl
+ jp PushSGBPals
+
+Function9567:
+ bit 3, a
+ ld a, $18
+ ret nz
+ ld a, [hl]
+
+Function956d:
+ and a
+ jr z, .sub_957a
+ ld e, a
+ ld d, $00
+ ld hl, PokemonPalettes
+ add hl, de
+ ld a, [hl]
+ and a
+ ret
+.sub_957a
+ ld a, $0f
+ scf
+ ret
+
+Function957e:
+ push bc
+ push af
+ ld hl, wPartyMon1DVs
+ ld a, [wWhichPokemon]
+ ld bc, $0030
+ call AddNTimes
+ call Function95b0
+ ld b, $00
+ jr nc, .sub_9595
+ ld b, $0a
+.sub_9595
+ pop af
+ add b
+ pop bc
+ ret
+
+Function9599:
+ push bc
+ push af
+ ld a, e
+ and a
+ ld a, [wcae1]
+ jr z, .sub_95a4
+ srl a
+.sub_95a4
+ srl a
+ ld b, $00
+ jr nc, .sub_95ac
+ ld b, $0a
+.sub_95ac
+ pop af
+ add b
+ pop bc
+ ret
+
+Function95b0:
+ ld a, [hl]
+ cp $a0
+ jr c, .sub_95ca
+ ld a, [hli]
+ and $0f
+ cp $0a
+ jr c, .sub_95ca
+ ld a, [hl]
+ cp $a0
+ jr c, .sub_95ca
+ ld a, [hl]
+ and $0f
+ cp $0a
+ jr c, .sub_95ca
+ scf
+ ret
+.sub_95ca
+ and a
+ ret
+
+Function95cc:
+ ld hl, wcddf
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .sub_95d7
+ ld hl, wca08
+.sub_95d7
+ call Function95b0
+ ld hl, wcae1
+ jr nc, .sub_95ec
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .sub_95e8
+ set 0, [hl]
+ jr .sub_95f7
+.sub_95e8
+ set 1, [hl]
+ jr .sub_95f7
+.sub_95ec
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .sub_95f5
+ res 0, [hl]
+ jr .sub_95f7
+.sub_95f5
+ res 1, [hl]
+.sub_95f7
+ ret
+
+Function95f8:
+ ld hl, BlkPacket_98fc
+ ld de, wcce2
+ ld bc, $0030
+ jp CopyBytes
+
+SGB_ApplyPartyMenuHPPals:
+ ld hl, wccd3
+ ld a, [wcce1]
+ ld e, a
+ ld d, $00
+ add hl, de
+ ld e, l
+ ld d, h
+ ld a, [de]
+ and a
+ ld e, $05
+ jr z, .sub_961d
+ dec a
+ ld e, $0a
+ jr z, .sub_961d
+ ld e, $0f
+.sub_961d
+ push de
+ ld hl, wcceb
+ ld bc, $0006
+ ld a, [wcce1]
+ call AddNTimes
+ pop de
+ ld [hl], e
+ ret
+
+LoadMagikarpPalettes_Intro:
+ ld hl, PalPacket_MagikarpIntro
+ jp PushSGBPals
+
+LoadForestPalettes2_Intro:
+ ld hl, BlkPacket_986c
+ jp PushSGBPals
+
+LoadVenusaurPalettes_Intro:
+ ld hl, PalPacket_GSIntroVenusaur
+ jp PushSGBPals
+
+LoadCharizardPalettes_Intro:
+ ld hl, PalPacket_GSIntroCharizard
+ jp PushSGBPals
+
+Function9645:
+ ld hl, wc51a
+ jp PushSGBPals
+
+PushSGBPals:
+ ld a, [wJoypadFlags]
+ push af
+ set 7, a
+ ld [wJoypadFlags], a
+ call _PushSGBPals
+ pop af
+ ld [wJoypadFlags], a
+ ret
+
+_PushSGBPals:
+ ld a, [hl]
+ and $7
+ ret z
+ ld b, a
+.loop
+ push bc
+ xor a
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ ld b, $10
+.loop2
+ ld e, $08
+ ld a, [hli]
+ ld d, a
+.loop3
+ bit 0, d
+ ld a, $10
+ jr nz, .ok
+ ld a, $20
+.ok
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ rr d
+ dec e
+ jr nz, .loop3
+ dec b
+ jr nz, .loop2
+ ld a, $20
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ call SGBDelayCycles
+ pop bc
+ dec b
+ jr nz, .loop
+ ret
+
+CheckSGB:
+ ld a, [wJoypadFlags]
+ push af
+ set 7, a
+ ld [wJoypadFlags], a
+
+ xor a
+ ldh [rJOYP], a
+ ld [wSGB], a
+ call PushSGBBorderPalsAndWait
+ jr nc, .skip
+ ld a, 1
+ ld [wSGB], a
+ call _InitSGBBorderPals
+ call PushSGBBorder
+ call SGBBorder_PushBGPals
+ call SGB_ClearVRAM
+ ld hl, MaskEnCancelPacket
+ call _PushSGBPals
+.skip
+ pop af
+ ld [wJoypadFlags], a
+ ret
+
+_InitSGBBorderPals:
+ ld hl, .PacketPointerTable
+ ld c, 9
+
+.loop
+ push bc
+ ld a, [hli]
+ push hl
+ ld h, [hl]
+ ld l, a
+ call _PushSGBPals
+ pop hl
+ inc hl
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+
+.PacketPointerTable:
+ dw MaskEnFreezePacket
+ dw DataSndPacket1
+ dw DataSndPacket2
+ dw DataSndPacket3
+ dw DataSndPacket4
+ dw DataSndPacket5
+ dw DataSndPacket6
+ dw DataSndPacket7
+ dw DataSndPacket8
+
+UpdateSGBBorder:
+ ld a, [wSGB]
+ ret z
+ di
+ xor a
+ ldh [rJOYP], a
+ ld hl, MaskEnFreezePacket
+ call _PushSGBPals
+ call PushSGBBorder
+ ld hl, MaskEnCancelPacket
+ call _PushSGBPals
+ ei
+ ret
+
+PushSGBBorder:
+ call .LoadSGBBorderPointers
+ push de
+ call SGBBorder_YetMorePalPushing
+ pop hl
+ call SGBBorder_MorePalPushing
+ ret
+
+.LoadSGBBorderPointers:
+ ld a, [wce5f]
+ bit 3, a
+ jr nz, .spaceworld_border
+
+; load alternate border
+ ld hl, AlternateSGBBorderGFX
+ ld de, AlternateSGBBorderTilemap
+ ret
+
+.spaceworld_border
+ ld hl, SGBBorderGFX
+ ld de, SGBBorderTilemap
+ ret
+
+SGB_ClearVRAM:
+ ld hl, vChars0
+ ld bc, $2000
+ xor a
+ call ByteFill
+ ret
+
+PushSGBBorderPalsAndWait:
+ ld hl, MltReq2Packet
+ call _PushSGBPals
+ call SGBDelayCycles
+ ldh a, [rJOYP]
+ and $3
+ cp $3
+ jr nz, .carry
+ ld a, $20
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ call SGBDelayCycles
+ call SGBDelayCycles
+ ld a, $30
+ ldh [rJOYP], a
+ call SGBDelayCycles
+ call SGBDelayCycles
+ ld a, $10
+ ldh [rJOYP], a
+rept 6
+ ldh a, [rJOYP]
+endr
+ call SGBDelayCycles
+ call SGBDelayCycles
+ ld a, $30
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ call SGBDelayCycles
+ call SGBDelayCycles
+ ldh a, [rJOYP]
+ and $3
+ cp $3
+ jr nz, .carry
+ call .FinalPush
+ and a
+ ret
+
+.carry
+ call .FinalPush
+ scf
+ ret
+
+.FinalPush:
+ ld hl, MltReq1Packet
+ call _PushSGBPals
+ jp SGBDelayCycles
+
+SGBBorder_PushBGPals:
+ call DisableLCD
+ ld a, %11100100
+ ldh [rBGP], a
+ ld hl, SuperPalettes
+ ld de, vChars1
+ ld bc, $1000
+ call CopyData
+ call DrawDefaultTiles
+ ld a, $e3
+ ldh [rLCDC], a
+ ld hl, PalTrnPacket
+ call _PushSGBPals
+ xor a
+ ldh [rBGP], a
+ ret
+
+SGBBorder_MorePalPushing:
+ call DisableLCD
+ ld a, %11100100
+ ldh [rBGP], a
+ ld de, vChars1
+ ld bc, (6 + SCREEN_WIDTH + 6) * 5 * 2
+ call CopyData
+ ld b, SCREEN_HEIGHT
+.loop
+ push bc
+ ld bc, 6 * 2
+ call CopyData
+ ld bc, SCREEN_WIDTH * 2
+ call ClearBytes
+ ld bc, 6 * 2
+ call CopyData
+ pop bc
+ dec b
+ jr nz, .loop
+ ld bc, (6 + SCREEN_WIDTH + 6) * 5 * 2
+ call CopyData
+ ld bc, $100
+ call ClearBytes
+ ld bc, $80
+ call CopyData
+ call DrawDefaultTiles
+ ld a, $e3
+ ldh [rLCDC], a
+ ld hl, PctTrnPacket
+ call _PushSGBPals
+ xor a
+ ldh [rBGP], a
+ ret
+
+SGBBorder_YetMorePalPushing:
+ call DisableLCD
+ ld a, $e4
+ ldh [rBGP], a
+ ld de, vChars1
+ ld b, $80
+.loop
+ push bc
+ ld bc, $10
+ call CopyData
+ ld bc, $10
+ call ClearBytes
+ pop bc
+ dec b
+ jr nz, .loop
+ call DrawDefaultTiles
+ ld a, $e3
+ ldh [rLCDC], a
+ ld hl, ChrTrnPacket
+ call _PushSGBPals
+ xor a
+ ldh [rBGP], a
+ ret
+
+CopyData:
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, CopyData
+ ret
+
+ClearBytes:
+ xor a
+ ld [de], a
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, ClearBytes
+ ret
+
+DrawDefaultTiles:
+ hlbgcoord 0, 0
+ ld de, BG_MAP_WIDTH - SCREEN_WIDTH
+ ld a, $80
+ ld c, 12 + 1
+.line
+ ld b, SCREEN_WIDTH
+.tile
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .tile
+ add hl, de
+ dec c
+ jr nz, .line
+ ret
+
+SGBDelayCycles:
+ ld de, 7000
+.wait
+ nop
+ nop
+ nop
+ dec de
+ ld a, d
+ or e
+ jr nz, .wait
+ ret
+
+INCLUDE "data/sgb/blk_packets.inc"
+INCLUDE "data/sgb/pal_packets.inc"
+INCLUDE "data/sgb/ctrl_packets.inc"
diff --git a/engine/movie/game_freak_intro.asm b/engine/movie/game_freak_intro.asm
index 9ae95c9..e3474a2 100644
--- a/engine/movie/game_freak_intro.asm
+++ b/engine/movie/game_freak_intro.asm
@@ -23,7 +23,7 @@ GameFreakIntro::
ld c, 10
call DelayFrames
- ld b, SGB_GS_TITLE_SCREEN
+ ld b, SGB_GF_INTRO
call GetSGBLayout
callab IntroCopyRightInfo
diff --git a/engine/movie/title.asm b/engine/movie/title.asm
index 2323d38..8ddf260 100644
--- a/engine/movie/title.asm
+++ b/engine/movie/title.asm
@@ -118,7 +118,7 @@ TitleSequenceInit::
ld a, " "
call ByteFill
- ld b, $06
+ ld b, SGB_TITLE_SCREEN
call GetSGBLayout
call EnableLCD
ld a, $01
diff --git a/engine/trainer_gear.asm b/engine/trainer_gear.asm
index 32e3a91..e7ef0db 100644
--- a/engine/trainer_gear.asm
+++ b/engine/trainer_gear.asm
@@ -89,7 +89,7 @@ TrainerGear_Init:
call ClearBGPalettes
call DisableLCD
call ClearSprites
- ld b, SGB_TRAINER_GEAR
+ ld b, SGB_TRAINERGEAR
call GetSGBLayout
ld hl, TrainerGearGFX
@@ -282,7 +282,7 @@ TrainerGear_Map:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
- ld b, SGB_PACKPALS
+ ld b, SGB_TRAINERGEAR_MAP
call GetSGBLayout
ld de, TownMapGFX
ld hl, vTilesetEnd
@@ -312,7 +312,7 @@ TrainerGear_Radio:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
- ld b, SGB_TRAINER_CARD
+ ld b, SGB_TRAINERGEAR_RADIO
call GetSGBLayout
ld de, RadioGFX
@@ -595,7 +595,7 @@ TrainerGear_Phone:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
- ld b, SGB_TRAINER_GEAR
+ ld b, SGB_TRAINERGEAR
call GetSGBLayout
call LoadFontExtra
ld de, .OutOfRangeText
diff --git a/gfx/gfx.asm b/gfx/gfx.asm
index 6af0a86..6e00551 100644
--- a/gfx/gfx.asm
+++ b/gfx/gfx.asm
@@ -33,16 +33,22 @@ INCBIN "gfx/title/titlebgdecoration.2bpp"
SECTION "gfx.asm@SGB GFX", ROMX
INCLUDE "data/pokemon/palettes.inc"
-INCLUDE "data/super_palettes.inc"
+INCLUDE "data/sgb/super_palettes.inc"
-Corrupted9e1cGFX:
-INCBIN "slack/corrupted_9e1c.2bpp"
+AlternateSGBBorderTilemap::
+INCBIN "gfx/sgb/sgb_border_alt.sgb.tilemap"
-UnusedSGBBorderGFX::
+AlternateSGBBorderPalettes:
+INCLUDE "gfx/sgb/sgb_border_alt.pal"
+
+AlternateSGBBorderGFX::
INCBIN "gfx/sgb/sgb_border_alt.2bpp"
-Corrupteda66cGFX:
-INCBIN "slack/corrupted_a66c.2bpp"
+SGBBorderTilemap::
+INCBIN "gfx/sgb/sgb_border.sgb.tilemap"
+
+SGBBorderPalettes:
+INCLUDE "gfx/sgb/sgb_border.pal"
SGBBorderGFX::
if DEF(GOLD)
diff --git a/gfx/sgb/sgb_border.bin b/gfx/sgb/sgb_border.bin
new file mode 100644
index 0000000..8223c68
--- /dev/null
+++ b/gfx/sgb/sgb_border.bin
Binary files differ
diff --git a/gfx/sgb/sgb_border.pal b/gfx/sgb/sgb_border.pal
new file mode 100644
index 0000000..a2613db
--- /dev/null
+++ b/gfx/sgb/sgb_border.pal
@@ -0,0 +1,80 @@
+ RGB 24, 6, 6
+ RGB 0, 0, 0
+ RGB 31, 31, 29
+ RGB 31, 26, 15
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 31, 26, 15
+ RGB 31, 12, 0
+ RGB 0, 0, 0
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 6, 31
+ RGB 26, 28, 31
+ RGB 19, 20, 23
+ RGB 0, 0, 0
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 12, 31, 6
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+ RGB 18, 24, 18
+
diff --git a/gfx/sgb/sgb_border_alt.bin b/gfx/sgb/sgb_border_alt.bin
new file mode 100644
index 0000000..5ad4fb0
--- /dev/null
+++ b/gfx/sgb/sgb_border_alt.bin
Binary files differ
diff --git a/gfx/sgb/sgb_border_alt.pal b/gfx/sgb/sgb_border_alt.pal
new file mode 100644
index 0000000..acae6d6
--- /dev/null
+++ b/gfx/sgb/sgb_border_alt.pal
@@ -0,0 +1,80 @@
+ RGB 24, 6, 6
+ RGB 24, 24, 26
+ RGB 14, 15, 20
+ RGB 4, 7, 10
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 18, 24, 18
+ RGB 31, 26, 15
+ RGB 26, 19, 10
+ RGB 12, 7, 5
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 18, 6, 31
+ RGB 31, 31, 29
+ RGB 31, 12, 0
+ RGB 0, 0, 0
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 12, 31, 6
+ RGB 22, 26, 30
+ RGB 16, 17, 21
+ RGB 0, 3, 0
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+ RGB 31, 31, 25
+
diff --git a/home/tilemap.asm b/home/tilemap.asm
index 3146db1..c9b5ae1 100644
--- a/home/tilemap.asm
+++ b/home/tilemap.asm
@@ -42,7 +42,7 @@ GetSGBLayout::
ld a, [wSGB]
and a
ret z
- predef_jump Function928b
+ predef_jump LoadSGBLayout
SetHPPal::
ld a, e
diff --git a/layout.link b/layout.link
index 077f313..ed3c411 100644
--- a/layout.link
+++ b/layout.link
@@ -127,9 +127,9 @@ ROMX $02
"engine/trainer_gear.asm@OpenTrainerGear"
"gfx.asm@Trainer Gear GFX"
"engine/trainer_gear.asm@TrainerGear_RadioText"
- "engine/dumps/bank02.asm@SetTitleBGDecorationBorder"
+ "engine/gfx/set_title_decoration.asm"
"gfx.asm@Title Screen BG Decoration Border"
- "engine/dumps/bank02.asm@Function928b"
+ "engine/gfx/sgb_layouts.asm"
"gfx.asm@SGB GFX"
"slack.asm@Unknownaebc"
"slack.asm@Corrupted SGB GFX"
@@ -940,7 +940,7 @@ ROMX $3c
ROMX $3e
org $4000
- "engine/gfx.asm"
+ "engine/gfx/load_gfx.asm"
"gfx.asm@Misc GFX"
ROMX $3f
diff --git a/slack/corrupted_9e1c.png b/slack/corrupted_9e1c.png
deleted file mode 100644
index f124031..0000000
--- a/slack/corrupted_9e1c.png
+++ /dev/null
Binary files differ
diff --git a/slack/corrupted_a66c.png b/slack/corrupted_a66c.png
deleted file mode 100644
index a8bab25..0000000
--- a/slack/corrupted_a66c.png
+++ /dev/null
Binary files differ
diff --git a/slack/slack.mk b/slack/slack.mk
index 0a752c7..6cfced8 100644
--- a/slack/slack.mk
+++ b/slack/slack.mk
@@ -1,4 +1,2 @@
-$(BUILD)/slack/corrupted_9e1c.2bpp: tools/gfx += --trim-whitespace
-$(BUILD)/slack/corrupted_a66c.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/slack/corrupted_b1e3.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/slack/sgb_border_gold_corrupted.2bpp: tools/gfx += --trim-whitespace