Merge pull request #95 from ZoomTen/super-gameboy

Some work on SGB functions (bank $02)
This commit is contained in:
Rangi 2021-06-20 12:32:51 -04:00 committed by GitHub
commit f917febffb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 1394 additions and 1226 deletions

View File

@ -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 $@

View File

@ -1,3 +1,4 @@
; SuperPalettes indexes (see data/sgb/super_palettes.inc)
const_def
const PAL_ROUTE ; 00
const PAL_TOWN_01 ; 01

View File

@ -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_MOVE_LIST
const SGB_BETA_PIKACHU_MINIGAME
const SGB_POKEDEX_SEARCH_OPTION
const SGB_BETA_POKER
const SGB_POKEPIC
const SGB_TRAINER_GEAR
const SGB_PACKPALS
const SGB_GF_INTRO
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_MOVE_LIST
const SGB_PIKACHU_MINIGAME
const SGB_POKEDEX_SELECTION
const SGB_POKER
const SGB_POKEPIC
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

View File

@ -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

73
data/sgb/blk_packets.inc Normal file
View File

@ -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

128
data/sgb/ctrl_packets.inc Normal file
View File

@ -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

57
data/sgb/pal_packets.inc Normal file
View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -1,6 +1,6 @@
INCLUDE "constants.asm"
SECTION "engine/gfx.asm", ROMX
SECTION "engine/gfx/load_gfx.asm", ROMX
LoadFontGraphics::
ld de, FontGFX

View File

@ -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

896
engine/gfx/sgb_layouts.asm Normal file
View File

@ -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"

View File

@ -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

View File

@ -118,7 +118,7 @@ TitleSequenceInit::
ld a, " "
call ByteFill
ld b, $06
ld b, SGB_TITLE_SCREEN
call GetSGBLayout
call EnableLCD
ld a, $01

View File

@ -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

View File

@ -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)

BIN
gfx/sgb/sgb_border.bin Normal file

Binary file not shown.

80
gfx/sgb/sgb_border.pal Normal file
View File

@ -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

BIN
gfx/sgb/sgb_border_alt.bin Normal file

Binary file not shown.

View File

@ -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

View File

@ -42,7 +42,7 @@ GetSGBLayout::
ld a, [wSGB]
and a
ret z
predef_jump Function928b
predef_jump LoadSGBLayout
SetHPPal::
ld a, e

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -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