diff options
author | Zumi Daxuya <daxuya.zumi+code@protonmail.com> | 2021-05-17 17:59:29 +0700 |
---|---|---|
committer | Zumi Daxuya <daxuya.zumi+code@protonmail.com> | 2021-05-17 18:09:43 +0700 |
commit | 437e556b3dd0d37609e1a629aed473f88c068be3 (patch) | |
tree | c6482d75999eb0a1408605460b12058baf1c95c4 /engine | |
parent | 3384ac5d7a7c8118d6701576680ea1e71624983c (diff) |
Split GFX routines
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/dumps/bank02.asm | 921 | ||||
-rw-r--r-- | engine/gfx/load_gfx.asm (renamed from engine/gfx.asm) | 2 | ||||
-rw-r--r-- | engine/gfx/set_title_decoration.asm | 33 | ||||
-rw-r--r-- | engine/gfx/sgb_layouts.asm | 897 |
4 files changed, 931 insertions, 922 deletions
diff --git a/engine/dumps/bank02.asm b/engine/dumps/bank02.asm index 3afdd61..bb1528c 100755 --- a/engine/dumps/bank02.asm +++ b/engine/dumps/bank02.asm @@ -1252,924 +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 - -LoadSGBLayout: - ld a, b - cp $ff - jr nz, .not_ram - ld a, [wccd0] -.not_ram - cp $fc - 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 SGB0e - 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 - -SGB0e: - 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_98bc - ret - -SGB_TownMap: - ld hl, Data99fc - 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_99bc - 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_GSIntroStartersTransition - -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_VenusaurIntro - jp PushSGBPals - -LoadCharizardPalettes_Intro: - ld hl, PalPacket_99bc - 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, UnusedSGBBorderGFX - ld de, UnusedSGBBorderTilemap - 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/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..f825127 --- /dev/null +++ b/engine/gfx/sgb_layouts.asm @@ -0,0 +1,897 @@ +INCLUDE "constants.asm" + +SECTION "engine/gfx/sgb_layouts.asm", ROMX + +LoadSGBLayout: + ld a, b + cp $ff + jr nz, .not_ram + ld a, [wccd0] +.not_ram + cp $fc + 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 SGB0e + 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 + +SGB0e: + 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_98bc + ret + +SGB_TownMap: + ld hl, Data99fc + 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_99bc + 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_GSIntroStartersTransition + +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_VenusaurIntro + jp PushSGBPals + +LoadCharizardPalettes_Intro: + ld hl, PalPacket_99bc + 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, UnusedSGBBorderGFX + ld de, UnusedSGBBorderTilemap + 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" + |