summaryrefslogtreecommitdiff
path: root/engine/palettes.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/palettes.asm')
-rwxr-xr-xengine/palettes.asm735
1 files changed, 642 insertions, 93 deletions
diff --git a/engine/palettes.asm b/engine/palettes.asm
index 55d488aa..080998ff 100755
--- a/engine/palettes.asm
+++ b/engine/palettes.asm
@@ -19,22 +19,30 @@ _RunPaletteCommand: ; 71ddf (1c:5ddf)
push de
jp [hl]
-SetPal_BattleBlack: ; 71dff (1c:5dff)
+SetPal_Black: ; 71ed3 (1c:5ed3)
ld hl, PalPacket_Black
ld de, BlkPacket_Battle
ret
; uses PalPacket_Empty to build a packet based on mon IDs and health color
-SetPal_Battle: ; 71e06 (1c:5e06)
+SetPal_Battle: ; 71eda (1c:5eda)
ld hl, PalPacket_Empty
ld de, wPalPacket
ld bc, $10
call CopyData
- ld a, [W_PLAYERBATTSTATUS3]
+ ;ld a, [W_PLAYERBATTSTATUS3]
ld hl, wBattleMonSpecies
+ ld a, [hl]
+ and a
+ jr z, .asm_71ef9
+ ld hl, wPartyMon1
+ ld a, [wPlayerMonNumber]
+ ld bc, wPartyMon2 - wPartyMon1
+ call AddNTimes
+.asm_71ef9
call DeterminePaletteID
ld b, a
- ld a, [W_ENEMYBATTSTATUS3]
+ ;ld a, [W_ENEMYBATTSTATUS3]
ld hl, wEnemyMonSpecies2
call DeterminePaletteID
ld c, a
@@ -58,13 +66,13 @@ SetPal_Battle: ; 71e06 (1c:5e06)
ld [wDefaultPaletteCommand], a
ret
-SetPal_TownMap: ; 71e48 (1c:5e48)
+SetPal_TownMap: ; 71f26 (1c:5f26)
ld hl, PalPacket_TownMap
ld de, BlkPacket_WholeScreen
ret
; uses PalPacket_Empty to build a packet based the mon ID
-SetPal_StatusScreen: ; 71e4f (1c:5e4f)
+SetPal_StatusScreen: ; 71f2d (1c:5f2d)
ld hl, PalPacket_Empty
ld de, wPalPacket
ld bc, $10
@@ -87,12 +95,12 @@ SetPal_StatusScreen: ; 71e4f (1c:5e4f)
ld de, BlkPacket_StatusScreen
ret
-SetPal_PartyMenu: ; 71e7b (1c:5e7b)
+SetPal_PartyMenu: ; 71f59 (1c:5f59)
ld hl, PalPacket_PartyMenu
ld de, wPartyMenuBlkPacket
ret
-SetPal_Pokedex: ; 71e82 (1c:5e82)
+SetPal_Pokedex: ; 71f60 (1c:5f60)
ld hl, PalPacket_Pokedex
ld de, wPalPacket
ld bc, $10
@@ -105,28 +113,28 @@ SetPal_Pokedex: ; 71e82 (1c:5e82)
ld de, BlkPacket_Pokedex
ret
-SetPal_Slots: ; 71e9f (1c:5e9f)
+SetPal_Slots: ; 71f7d (1c:5f7d)
ld hl, PalPacket_Slots
ld de, BlkPacket_Slots
ret
-SetPal_TitleScreen: ; 71ea6 (1c:5ea6)
+SetPal_Titlescreen: ; 71f84 (1c:5f84)
ld hl, PalPacket_Titlescreen
ld de, BlkPacket_Titlescreen
ret
; used mostly for menus and the Oak intro
-SetPal_Generic: ; 71ead (1c:5ead)
+SetPal_Generic: ; 71f8b (1c:5f8b)
ld hl, PalPacket_Generic
ld de, BlkPacket_WholeScreen
ret
-SetPal_NidorinoIntro: ; 71eb4 (1c:5eb4)
+SetPal_NidorinoIntro: ; 71f92 (1c:5f92)
ld hl, PalPacket_NidorinoIntro
ld de, BlkPacket_NidorinoIntro
ret
-SetPal_GameFreakIntro: ; 71ebb (1c:5ebb)
+SetPal_GameFreakIntro: ; 71f99 (1c:5f99)
ld hl, PalPacket_GameFreakIntro
ld de, BlkPacket_GameFreakIntro
ld a, SET_PAL_GENERIC
@@ -134,7 +142,7 @@ SetPal_GameFreakIntro: ; 71ebb (1c:5ebb)
ret
; uses PalPacket_Empty to build a packet based on the current map
-SetPal_Overworld: ; 71ec7 (1c:5ec7)
+SetPal_Overworld: ; 71fa5 (1c:5fa5)
ld hl, PalPacket_Empty
ld de, wPalPacket
ld bc, $10
@@ -155,6 +163,10 @@ SetPal_Overworld: ; 71ec7 (1c:5ec7)
jr z, .Lorelei
cp BRUNOS_ROOM
jr z, .caveOrBruno
+ cp BATTLE_CENTER
+ jr z,.asm_71ffd
+ cp TRADE_CENTER
+ jr z,.asm_71ffd
.normalDungeonOrBuilding
ld a, [wLastMap] ; town or route that current dungeon or building is located
.townOrRoute
@@ -178,10 +190,13 @@ SetPal_Overworld: ; 71ec7 (1c:5ec7)
.Lorelei
xor a
jr .town
-
+.asm_71ffd
+ ld a,$18
+ jr .town
+
; used when a Pokemon is the only thing on the screen
; such as evolution, trading and the Hall of Fame
-SetPal_PokemonWholeScreen: ; 71f17 (1c:5f17)
+SetPal_PokemonWholeScreen: ; 72001 (1c:6001)
push bc
ld hl, PalPacket_Empty
ld de, wPalPacket
@@ -200,7 +215,7 @@ SetPal_PokemonWholeScreen: ; 71f17 (1c:5f17)
ld de, BlkPacket_WholeScreen
ret
-SetPal_TrainerCard: ; 71f3b (1c:5f3b)
+SetPal_TrainerCard: ; 72025 (1c:6025)
ld hl, BlkPacket_TrainerCard
ld de, wTrainerCardBlkPacket
ld bc, $40
@@ -240,14 +255,25 @@ SetPal_TrainerCard: ; 71f3b (1c:5f3b)
ld de, wTrainerCardBlkPacket
ret
-SetPalFunctions: ; 71f73 (1c:5f73)
- dw SetPal_BattleBlack
+<<<<<<< HEAD
+SendUnknownPalPacket_7205d:: ; 7205d (1c:605d)
+ ld hl,UnknownPalPacket_72811
+ ld de,BlkPacket_WholeScreen
+ ret
+
+SendUnknownPalPacket_72064:: ; 72064 (1c:6064)
+ ld hl,UnknownPalPacket_72821
+ ld de,UnknownPacket_72751
+ ret
+
+SetPalFunctions: ; 7206b (1c:606b)
+ dw SetPal_Black
dw SetPal_Battle
dw SetPal_TownMap
dw SetPal_StatusScreen
dw SetPal_Pokedex
dw SetPal_Slots
- dw SetPal_TitleScreen
+ dw SetPal_Titlescreen
dw SetPal_NidorinoIntro
dw SetPal_Generic
dw SetPal_Overworld
@@ -255,10 +281,12 @@ SetPalFunctions: ; 71f73 (1c:5f73)
dw SetPal_PokemonWholeScreen
dw SetPal_GameFreakIntro
dw SetPal_TrainerCard
+ dw SendUnknownPalPacket_7205d
+ dw SendUnknownPalPacket_72064
; The length of the blk data of each badge on the Trainer Card.
; The Rainbow Badge has 3 entries because of its many colors.
-BadgeBlkDataLengths: ; 71f8f (1c:5f8f)
+BadgeBlkDataLengths: ; 7208b (1c:608b)
db 6 ; Boulder Badge
db 6 ; Cascade Badge
db 6 ; Thunder Badge
@@ -268,12 +296,9 @@ BadgeBlkDataLengths: ; 71f8f (1c:5f8f)
db 6 ; Volcano Badge
db 6 ; Earth Badge
-DeterminePaletteID: ; 71f97 (1c:5f97)
- bit Transformed, a ; a is battle status 3
- ld a, PAL_GREYMON ; if the mon has used Transform, use Ditto's palette
- ret nz
+DeterminePaletteID: ; 72093 (1c:6093)
ld a, [hl]
-DeterminePaletteIDOutOfBattle: ; 71f9d (1c:5f9d)
+DeterminePaletteIDOutOfBattle: ; 72094 (1c:6094)
ld [wd11e], a
and a ; is the mon index 0?
jr z, .skipDexNumConversion
@@ -289,13 +314,134 @@ DeterminePaletteIDOutOfBattle: ; 71f9d (1c:5f9d)
ld a, [hl]
ret
-InitPartyMenuBlkPacket: ; 71fb6 (1c:5fb6)
+<<<<<<< HEAD
+Func_720ad:: ; 720ad (1c:60ad)
+ ld a,e
+ and a
+ jr nz,Func_720bd
+ ld hl,PalPacket_Generic
+ ld a,[hGBC]
+ and a
+ jp z,Func_721b4
+ jp Func_72346
+
+Func_720bd:: ; 720bd (1c:60bd)
+ ld hl,UnknownPalPacket_72811
+ ld a,[hGBC]
+ and a
+ jp z,Func_721b4
+ call Func_72346
+ ld hl,PalPacket_Generic
+ inc hl
+ ld a,[hli]
+ call Func_723fe
+ ld a,e
+ ld [wdee4],a
+ ld a,d
+ ld [wdee5],a
+ xor a
+ call Func_7240f
+ ld a,$1
+ call Func_72470
+ ret
+
+Func_720e3:: ; 720e3 (1c:60e3)
+ ld hl,PalPacket_Empty
+ ld de,wcf2d
+ ld bc,$10
+ call CopyData
+ call Func_7213b
+ ld hl,wcf2e
+ ld [hl],a
+ ld hl,wcf30
+ ld a,$26
+ ld [hl],a
+ ld hl,wcf2d
+ ld a,[hGBC]
+ and a
+ jr nz,.asm_72109
+ call Func_721b4
+ jr .asm_7210c
+.asm_72109
+ call Func_72346
+.asm_7210c
+ ld hl,BlkPacket_WholeScreen
+ ld de,wcf2d
+ ld bc,$10
+ call CopyData
+ ld hl,wcf30
+ ld a,$5
+ ld [hli],a
+ ld a,$7
+ ld [hli],a
+ ld a,$6
+ ld [hli],a
+ ld a,$b
+ ld [hli],a
+ ld a,$a
+ ld [hl],a
+ ld hl,wcf2d
+ ld a,[hGBC]
+ and a
+ jr nz,.asm_72137
+ call Func_721b4
+ jr .asm_7213a
+.asm_72137
+ call Func_72346
+.asm_7213a
+ ret
+
+Func_7213b:: ; 7213b (1c:613b)
+; similar to SetPal_Overworld
+ ld a, [W_CURMAPTILESET]
+ cp CEMETERY
+ jr z, .PokemonTowerOrAgatha
+ cp CAVERN
+ jr z, .caveOrBruno
+ ld a, [W_CURMAP]
+ cp REDS_HOUSE_1F
+ jr c, .townOrRoute
+ cp UNKNOWN_DUNGEON_2
+ jr c, .normalDungeonOrBuilding
+ cp NAME_RATERS_HOUSE
+ jr c, .caveOrBruno
+ cp LORELEIS_ROOM
+ jr z, .Lorelei
+ cp BRUNOS_ROOM
+ jr z, .caveOrBruno
+ cp BATTLE_CENTER
+ jr z,.battleOrTradeCenter
+ cp TRADE_CENTER
+ jr z,.battleOrTradeCenter
+.normalDungeonOrBuilding
+ ld a, [wLastMap] ; town or route that current dungeon or building is located
+.townOrRoute
+ cp SAFFRON_CITY + 1
+ jr c, .town
+ ld a, PAL_ROUTE - 1
+.town
+ inc a ; a town's pallete ID is its map ID + 1
+ ret
+.PokemonTowerOrAgatha
+ ld a, PAL_GREYMON - 1
+ jr .town
+.caveOrBruno
+ ld a, PAL_CAVE - 1
+ jr .town
+.Lorelei
+ xor a
+ jr .town
+.battleOrTradeCenter
+ ld a,$18
+ jr .town
+
+InitPartyMenuBlkPacket: ; 7217f (1c:617f)
ld hl, BlkPacket_PartyMenu
ld de, wPartyMenuBlkPacket
ld bc, $30
jp CopyData
-UpdatePartyMenuBlkPacket: ; 71fc2 (1c:5fc2)
+UpdatePartyMenuBlkPacket: ; 7218b (1c:618b)
; Update the blk packet with the palette of the HP bar that is
; specified in [wWhichPartyMenuHPBar].
ld hl, wPartyMenuHPBarColors
@@ -323,6 +469,17 @@ UpdatePartyMenuBlkPacket: ; 71fc2 (1c:5fc2)
ld [hl], e
ret
+Func_721b4: ; 721b4 (1c:61b4)
+ ld a,$1
+; load a non-zero value in $fff9 to disable the routine that checks actual
+; joypad input (said routine, located at $15f, does nothing if $fff9 is not
+; zero)
+ ld [hReadJoypad],a
+ call SendSGBPacket
+ xor a
+ ld [hReadJoypad],a
+ ret
+
SendSGBPacket: ; 71feb (1c:5feb)
;check number of packets
ld a,[hl]
@@ -333,9 +490,6 @@ SendSGBPacket: ; 71feb (1c:5feb)
.loop2
; save B for later use
push bc
-; disable ReadJoypad to prevent it from interfering with sending the packet
- ld a, 1
- ld [hDisableJoypadPolling], a
; send RESET signal (P14=LOW, P15=LOW)
xor a
ld [rJOYP],a
@@ -376,10 +530,9 @@ SendSGBPacket: ; 71feb (1c:5feb)
; set P14=HIGH,P15=HIGH
ld a,$30
ld [rJOYP],a
- xor a
- ld [hDisableJoypadPolling],a
+ call Wait7000
; wait for about 70000 cycles
- call Wait7000
+; call Wait7000
; restore (previously pushed) number of packets
pop bc
dec b
@@ -388,18 +541,21 @@ SendSGBPacket: ; 71feb (1c:5feb)
; else send 16 more bytes
jr .loop2
-LoadSGB: ; 7202b (1c:602b)
+LoadSGB: ; 721f8 (1c:61f8)
xor a
ld [wOnSGB], a
call CheckSGB
- ret nc
- ld a, 1
- ld [wOnSGB], a
- ld a, [wGBC]
+ jr c, .onSGB
+ ld a, [hGBC]
and a
- jr z, .notGBC
+ jr z, .onDMG
+ ld a, $1
+ ld [wOnSGB], a
+.onDMG
ret
-.notGBC
+.onSGB
+ ld a, $1
+ ld [wOnSGB], a
di
call PrepareSuperNintendoVRAMTransfer
ei
@@ -420,9 +576,9 @@ LoadSGB: ; 7202b (1c:602b)
call CopyGfxToSuperNintendoVRAM
call ClearVram
ld hl, MaskEnCancelPacket
- jp SendSGBPacket
+ jp Func_721b4
-PrepareSuperNintendoVRAMTransfer: ; 72075 (1c:6075)
+PrepareSuperNintendoVRAMTransfer: ; 72247 (1c:6247)
ld hl, .packetPointers
ld c, 9
.loop
@@ -431,7 +587,7 @@ PrepareSuperNintendoVRAMTransfer: ; 72075 (1c:6075)
push hl
ld h, [hl]
ld l, a
- call SendSGBPacket
+ call Func_721b4
pop hl
inc hl
pop bc
@@ -439,26 +595,21 @@ PrepareSuperNintendoVRAMTransfer: ; 72075 (1c:6075)
jr nz, .loop
ret
-.packetPointers
+.packetPointers ; 7225b (1c:625b)
; Only the first packet is needed.
dw MaskEnFreezePacket
- dw DataSnd_72548
- dw DataSnd_72558
- dw DataSnd_72568
- dw DataSnd_72578
- dw DataSnd_72588
- dw DataSnd_72598
- dw DataSnd_725a8
- dw DataSnd_725b8
-
-CheckSGB: ; 7209b (1c:609b)
-; Returns whether the game is running on an SGB in carry.
+ dw DataSnd_728a1
+ dw DataSnd_728b1
+ dw DataSnd_728c1
+ dw DataSnd_728d1
+ dw DataSnd_728e1
+ dw DataSnd_728f1
+ dw DataSnd_72901
+ dw DataSnd_72911
+
+CheckSGB: ; 7226d (1c:626d)
ld hl, MltReq2Packet
- di
- call SendSGBPacket
- ld a, 1
- ld [hDisableJoypadPolling], a
- ei
+ call Func_721b4
call Wait7000
ld a, [rJOYP]
and $3
@@ -503,17 +654,18 @@ CheckSGB: ; 7209b (1c:609b)
scf
ret
-SendMltReq1Packet: ; 72102 (1c:6102)
+SendMltReq1Packet: ; 722ce (1c:62ce)
ld hl, MltReq1Packet
- call SendSGBPacket
+ call Func_721b4
jp Wait7000
-CopyGfxToSuperNintendoVRAM: ; 7210b (1c:610b)
+CopyGfxToSuperNintendoVRAM: ; 722d7 (1c:62d7)
di
push de
call DisableLCD
ld a, $e4
- ld [rBGP], a
+ ld [rBGP], a ; $ff47
+ call Func_72520
ld de, vChars1
ld a, [wCopyingSGBTileData]
and a
@@ -541,13 +693,14 @@ CopyGfxToSuperNintendoVRAM: ; 7210b (1c:610b)
ld a, $e3
ld [rLCDC], a
pop hl
- call SendSGBPacket
+ call Func_721b4
xor a
- ld [rBGP], a
+ ld [rBGP], a ; $ff47
+ call Func_72520
ei
ret
-Wait7000: ; 7214a (1c:614a)
+Wait7000: ; 7231c (1c:631c)
; Each loop takes 9 cycles so this routine actually waits 63000 cycles.
ld de, 7000
.loop
@@ -560,56 +713,451 @@ Wait7000: ; 7214a (1c:614a)
jr nz, .loop
ret
-SendSGBPackets: ; 72156 (1c:6156)
- ld a, [wGBC]
+SendSGBPackets: ; 72328 (1c:6328)
+ ld a, [hGBC]
and a
jr z, .notGBC
push de
call InitGBCPalettes
pop hl
- call EmptyFunc5
+ call InitGBCPalettes
+ ld a,[rLCDC]
+ and rLCDC_ENABLE_MASK
+ ret z
+ call Delay3
ret
.notGBC
push de
- call SendSGBPacket
+ call Func_721b4
pop hl
- jp SendSGBPacket
+ jp Func_721b4
-InitGBCPalettes: ; 7216d (1c:616d)
- ld a, $80 ; index 0 with auto-increment
- ld [rBGPI], a
+InitGBCPalettes: ; 72346 (1c:6346)
+ ld a,[hl]
+ and $f8
+ cp $20
+ jp z,Func_725be
inc hl
- ld c, $20
-.loop
- ld a, [hli]
+ ld a,[hli]
+ inc hl
+ push hl
+ call Func_723fe
+ ld a,e
+ ld [wdee2],a
+ ld a,d
+ ld [wdee3],a
+
+ xor a
+ call Func_7240f
+ ld a,$0
+ call Func_72470
+ ld a,$1
+ call Func_7240f
+ ld a,$0
+ call Func_724df
+ ld a,$2
+ call Func_7240f
+ ld a,$4
+ call Func_724df
+
+ pop hl
+ ld a,[hli]
+ inc hl
+ push hl
+ call Func_723fe
+ ld a,e
+ ld [wdee4],a
+ ld a,d
+ ld [wdee5],a
+
+ xor a
+ call Func_7240f
+ ld a,$1
+ call Func_72470
+ ld a,$1
+ call Func_7240f
+ ld a,$1
+ call Func_724df
+ ld a,$2
+ call Func_7240f
+ ld a,$5
+ call Func_724df
+
+ pop hl
+ ld a,[hli]
+ inc hl
+ push hl
+ call Func_723fe
+ ld a,e
+ ld [wdee6],a
+ ld a,d
+ ld [wdee7],a
+
+ xor a
+ call Func_7240f
+ ld a,$2
+ call Func_72470
+ ld a,$1
+ call Func_7240f
+ ld a,$2
+ call Func_724df
+ ld a,$2
+ call Func_7240f
+ ld a,$6
+ call Func_724df
+
+ pop hl
+ ld a,[hli]
inc hl
+ call Func_723fe
+ ld a,e
+ ld [wdee8],a
+ ld a,d
+ ld [wdee9],a
+
+ xor a
+ call Func_7240f
+ ld a,$3
+ call Func_72470
+ ld a,$1
+ call Func_7240f
+ ld a,$3
+ call Func_724df
+ ld a,$2
+ call Func_7240f
+ ld a,$7
+ call Func_724df
+
+ ret
+
+Func_723fe:: ; 723fe (1c:63fe)
+ push hl
+ ld l,a
+ xor a
+ ld h,a
+ add hl,hl
+ add hl,hl
+ add hl,hl
+ ld de,Pointer_72af9 ; not exactly sure if actually super palettes
+ add hl,de
+ ld a,l
+ ld e,a
+ ld a,h
+ ld d,a
+ pop hl
+ ret
+
+Func_7240f:: ; 7240f (1c:640f)
+ and a
+ jr nz,.asm_72419
+ ld a,[rBGP]
+ ld [wdef2],a
+ jr .asm_72428
+.asm_72419
+ dec a
+ jr nz,.asm_72423
+ ld a,[rOBP0]
+ ld [wdef3],a
+ jr .asm_72428
+.asm_72423
+ ld a,[rOBP1]
+ ld [wdef4],a
+.asm_72428
+ ld b,a
+ and $3
+ call Func_7246a
+ ld a,[hli]
+ ld [wdeea],a
+ ld a,[hl]
+ ld [wdeeb],a
+ ld a,b
+ rrca
+ rrca
+ ld b,a
+ and $3
+ call Func_7246a
+ ld a,[hli]
+ ld [wdeec],a
+ ld a,[hl]
+ ld [wdeed],a
+ ld a,b
+ rrca
+ rrca
+ ld b,a
+ and $3
+ call Func_7246a
+ ld a,[hli]
+ ld [wdeee],a
+ ld a,[hl]
+ ld [wdeef],a
+ ld a,b
+ rrca
+ rrca
+ ld b,a
+ and $3
+ call Func_7246a
+ ld a,[hli]
+ ld [wdef0],a
+ ld a,[hl]
+ ld [wdef1],a
+ ret
+
+Func_7246a:: ; 7246a (1c:646a)
add a
+ ld l,a
+ xor a
+ ld h,a
+ add hl,de
+ ret
+
+Func_72470:: ; 72470 (1c:6470)
+ push de
add a
add a
- ld de, SuperPalettes
- add e
- jr nc, .noCarry
- inc d
-.noCarry
- ld a, [de]
- ld [rBGPD], a
+<<<<<<< HEAD
+ add a
+ or $80
+ ld [rBGPI],a
+ ld de,rBGPD
+ ld hl,wdeea
+ ld b,$2
+ ld a,[rLCDC]
+ and rLCDC_ENABLE_MASK
+ jr nz,.lcdenabled
+ rept 4
+ call Func_7251b
+ endr
+ jr .done
+.lcdenabled
+ rept 4
+ call Func_72511
+ endr
+.done
+ pop de
+ ret
+
+Func_724a2:: ; 724a2 (1c:64a2)
+ push de
+ add a
+ add a
+ add a
+ ld l,a
+ xor a
+ ld h,a
+ ld de,wdef6
+ add hl,de
+ ld de,wdeea
+ ld c,$8
+.loop
+ ld a,[de]
+ ld [hli],a
+ inc de
dec c
- jr nz, .loop
+ jr nz,.loop
+ pop de
ret
-EmptyFunc5: ; 72187 (1c:6187)
+PreparePalDataTransfer:: ; 724ba (1c:64ba)
+; wait for vblank period unless LCD is disabled
+ ld a,[rLCDC]
+ and rLCDC_ENABLE_MASK
+ jr z,.lcddisabled
+ di
+.waitloop
+ ld a,[rLY]
+ cp 144
+ jr c,.waitloop
+.lcddisabled
+ call TransferPalData
+ ei
ret
-CopySGBBorderTiles: ; 72188 (1c:6188)
+TransferPalData: ; 724cc (1c:64cc)
+ xor a
+ or $80
+ ld [rBGPI], a
+ ld de,rBGPD
+ ld hl,wdef6
+ ld c,$20
+.loop
+ ld a,[hli]
+ ld [de],a
+ dec c
+ jr nz,.loop
+ ret
+
+Func_724df: ; 724df (1c:64df)
+ push de
+ add a
+ add a
+ add a
+ or $80
+ ld [rOBPI],a
+ ld de,rOBPD
+ ld hl,wdeea
+ ld b,$2 ; searching oam STAT mode
+ ld a,[rLCDC]
+ and rLCDC_ENABLE_MASK
+ jr nz,.lcdenabled
+ rept 4
+ call Func_7251b
+ endr
+ jr .done
+.lcdenabled
+ rept 4
+ call Func_72511
+ endr
+.done
+ pop de
+ ret
+
+Func_72511: ; 72511 (1c:6511)
+ ld a,[rSTAT]
+ and b
+ jr z,Func_72511 ; wait if either in hblank or vblank period
+.notinhblank
+ ld a,[rSTAT]
+ and b
+ jr nz,.notinhblank ; wait if transferring oam or data to lcd driver
+Func_7251b: ; 7251b (1c:651b)
+ ld a,[hli]
+ ld [de],a
+ ld a,[hli]
+ ld [de],a
+ ret
+
+Func_72520:: ; 72520 (1c:6520)
+ ld a,[hGBC]
+ and a
+ ret z
+; fallthrough
+Func_72524:: ; 72524 (1c:6524)
+ ld a,[wdee2]
+ ld e,a
+ ld a,[wdee3]
+ ld d,a
+ xor a
+ call Func_7240f
+ ld a,$0
+ call Func_724a2
+ ld a,[wdee4]
+ ld e,a
+ ld a,[wdee5]
+ ld d,a
+ xor a
+ call Func_7240f
+ ld a,$1
+ call Func_724a2
+ ld a,[wdee6]
+ ld e,a
+ ld a,[wdee7]
+ ld d,a
+ xor a
+ call Func_7240f
+ ld a,$2
+ call Func_724a2
+ ld a,[wdee8]
+ ld e,a
+ ld a,[wdee9]
+ ld d,a
+ xor a
+ call Func_7240f
+ ld a,$3
+ call Func_724a2
+ call PreparePalDataTransfer
+ ret
+
+Func_7256c:: ; 7256c (1c:656c)
+ ld a,[wdee2]
+ ld e,a
+ ld a,[wdee3]
+ ld d,a
+ ld a,c
+ call Func_7240f
+ ld a,c
+ dec a
+ rlca
+ rlca
+ call Func_724df
+ ld a,[wdee4]
+ ld e,a
+ ld a,[wdee5]
+ ld d,a
+ ld a,c
+ call Func_7240f
+ ld a,c
+ dec a
+ rlca
+ rlca
+ inc a
+ call Func_724df
+ ld a,[wdee6]
+ ld e,a
+ ld a,[wdee7]
+ ld d,a
+ ld a,c
+ call Func_7240f
+ ld a,c
+ dec a
+ rlca
+ rlca
+ add $2
+ call Func_724df
+ ld a,[wdee8]
+ ld e,a
+ ld a,[wdee9]
+ ld d,a
+ ld a,c
+ call Func_7240f
+ ld a,c
+ dec a
+ rlca
+ rlca
+ add $3
+ call Func_724df
+ ret
+
+Func_725be:: ; 725be (1c:65be)
+ push hl
+ pop de
+ ld hl,Pointer_725e2
+ ld a,[hli]
+ ld c,a
+.asm_725c5
+ ld a,e
+.loop
+ cp [hl]
+ jr z,.asm_725cf
+ inc hl
+ inc hl
+ dec c
+ jr nz,.loop
+ ret
+.asm_725cf
+ inc hl
+ ld a,d
+ cp [hl]
+ jr z,.asm_725d9
+ inc hl
+ dec c
+ jr nz,.asm_725c5
+ ret
+.asm_725d9
+ callba Func_bf450 ; 2f:7250
+ ret
+
+Pointer_725e2:: ; 725e2 (1c:65e2)
+ db $0c,$11,$66,$21,$66,$41,$66,$51,$66,$61,$66,$81,$66,$a1,$66,$2d
+ db $cf,$5b,$cc,$31,$67,$2c,$cf,$51,$67
+
+CopySGBBorderTiles: ; 725fb (1c:65fb)
; SGB tile data is stored in a 4BPP planar format.
; Each tile is 32 bytes. The first 16 bytes contain bit planes 1 and 2, while
; the second 16 bytes contain bit planes 3 and 4.
; This function converts 2BPP planar data into this format by mapping
; 2BPP colors 0-3 to 4BPP colors 0-3. 4BPP colors 4-15 are not used.
ld b, 128
-
-.tileLoop
-
+.loop
; Copy bit planes 1 and 2 of the tile data.
ld c, 16
.copyLoop
@@ -632,10 +1180,11 @@ CopySGBBorderTiles: ; 72188 (1c:6188)
jr nz, .tileLoop
ret
+ ;dr $725e2,$734b9
INCLUDE "data/sgb_packets.asm"
INCLUDE "data/mon_palettes.asm"
INCLUDE "data/super_palettes.asm"
-INCLUDE "data/sgb_border.asm"
+INCLUDE "data/sgb_border.asm" \ No newline at end of file