summaryrefslogtreecommitdiff
path: root/engine/palettes.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/palettes.asm')
-rwxr-xr-xengine/palettes.asm384
1 files changed, 200 insertions, 184 deletions
diff --git a/engine/palettes.asm b/engine/palettes.asm
index 2536fefc..810f8e77 100755
--- a/engine/palettes.asm
+++ b/engine/palettes.asm
@@ -1,33 +1,33 @@
-Func_71eb3: ; 71eb3 (1c:5eb3)
+_RunPaletteCommand: ; 71ddf (1c:5ddf)
call GetPredefRegisters
ld a, b
cp $ff
- jr nz, .asm_71ebe
- ld a, [wcf1c]
-.asm_71ebe
- cp $fc
- jp z, Func_7218b
+ jr nz, .next
+ ld a, [wDefaultPaletteCommand] ; use default command if command ID is $ff
+.next
+ cp UPDATE_PARTY_MENU_BLK_PACKET
+ jp z, UpdatePartyMenuBlkPacket
ld l, a
- ld h, $0
+ ld h, 0
add hl, hl
- ld de, PointerTable_7206b
+ ld de, SetPalFunctions
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, Func_72328
+ ld de, SendSGBPackets
push de
jp [hl]
-SendPalPacket_Black: ; 71ed3 (1c:5ed3)
+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
-BuildBattlePalPacket: ; 71eda (1c:5eda)
+SetPal_Battle: ; 71eda (1c:5eda)
ld hl, PalPacket_Empty
- ld de, wcf2d
+ ld de, wPalPacket
ld bc, $10
call CopyData
;ld a, [W_PLAYERBATTSTATUS3]
@@ -46,12 +46,12 @@ BuildBattlePalPacket: ; 71eda (1c:5eda)
ld hl, wEnemyMonSpecies2
call DeterminePaletteID
ld c, a
- ld hl, wcf2e
- ld a, [wcf1d]
+ ld hl, wPalPacket + 1
+ ld a, [wPlayerHPBarColor]
add PAL_GREENBAR
ld [hli], a
inc hl
- ld a, [wcf1e]
+ ld a, [wEnemyHPBarColor]
add PAL_GREENBAR
ld [hli], a
inc hl
@@ -60,21 +60,21 @@ BuildBattlePalPacket: ; 71eda (1c:5eda)
inc hl
ld a, c
ld [hl], a
- ld hl, wcf2d
+ ld hl, wPalPacket
ld de, BlkPacket_Battle
- ld a, $1
- ld [wcf1c], a
+ ld a, SET_PAL_BATTLE
+ ld [wDefaultPaletteCommand], a
ret
-SendPalPacket_TownMap: ; 71f26 (1c:5f26)
+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
-BuildStatusScreenPalPacket: ; 71f2d (1c:5f2d)
+SetPal_StatusScreen: ; 71f2d (1c:5f2d)
ld hl, PalPacket_Empty
- ld de, wcf2d
+ ld de, wPalPacket
ld bc, $10
call CopyData
ld a, [wcf91]
@@ -84,67 +84,67 @@ BuildStatusScreenPalPacket: ; 71f2d (1c:5f2d)
.pokemon
call DeterminePaletteIDOutOfBattle
push af
- ld hl, wcf2e
- ld a, [wcf25]
- add $1f
+ ld hl, wPalPacket + 1
+ ld a, [wStatusScreenHPBarColor]
+ add PAL_GREENBAR
ld [hli], a
inc hl
pop af
ld [hl], a
- ld hl, wcf2d
+ ld hl, wPalPacket
ld de, BlkPacket_StatusScreen
ret
-SendPalPacket_PartyMenu: ; 71f59 (1c:5f59)
+SetPal_PartyMenu: ; 71f59 (1c:5f59)
ld hl, PalPacket_PartyMenu
- ld de, wcf2e
+ ld de, wPartyMenuBlkPacket
ret
-SendPalPacket_Pokedex: ; 71f60 (1c:5f60)
+SetPal_Pokedex: ; 71f60 (1c:5f60)
ld hl, PalPacket_Pokedex
- ld de, wcf2d
+ ld de, wPalPacket
ld bc, $10
call CopyData
ld a, [wcf91]
call DeterminePaletteIDOutOfBattle
- ld hl, wcf30
+ ld hl, wPalPacket + 3
ld [hl], a
- ld hl, wcf2d
+ ld hl, wPalPacket
ld de, BlkPacket_Pokedex
ret
-SendPalPacket_Slots: ; 71f7d (1c:5f7d)
+SetPal_Slots: ; 71f7d (1c:5f7d)
ld hl, PalPacket_Slots
ld de, BlkPacket_Slots
ret
-SendPalPacket_Titlescreen: ; 71f84 (1c:5f84)
+SetPal_Titlescreen: ; 71f84 (1c:5f84)
ld hl, PalPacket_Titlescreen
ld de, BlkPacket_Titlescreen
ret
; used mostly for menus and the Oak intro
-SendPalPacket_Generic: ; 71f8b (1c:5f8b)
+SetPal_Generic: ; 71f8b (1c:5f8b)
ld hl, PalPacket_Generic
ld de, BlkPacket_WholeScreen
ret
-SendPalPacket_NidorinoIntro: ; 71f92 (1c:5f92)
+SetPal_NidorinoIntro: ; 71f92 (1c:5f92)
ld hl, PalPacket_NidorinoIntro
ld de, BlkPacket_NidorinoIntro
ret
-SendPalPacket_GameFreakIntro: ; 71f99 (1c:5f99)
+SetPal_GameFreakIntro: ; 71f99 (1c:5f99)
ld hl, PalPacket_GameFreakIntro
ld de, BlkPacket_GameFreakIntro
- ld a, $8
- ld [wcf1c], a
+ ld a, SET_PAL_GENERIC
+ ld [wDefaultPaletteCommand], a
ret
; uses PalPacket_Empty to build a packet based on the current map
-BuildOverworldPalPacket: ; 71fa5 (1c:5fa5)
+SetPal_Overworld: ; 71fa5 (1c:5fa5)
ld hl, PalPacket_Empty
- ld de, wcf2d
+ ld de, wPalPacket
ld bc, $10
call CopyData
ld a, [W_CURMAPTILESET]
@@ -174,12 +174,12 @@ BuildOverworldPalPacket: ; 71fa5 (1c:5fa5)
jr c, .town
ld a, PAL_ROUTE - 1
.town
- inc a ; a town's pallete ID is its map ID + 1
- ld hl, wcf2e
+ inc a ; a town's palette ID is its map ID + 1
+ ld hl, wPalPacket + 1
ld [hld], a
ld de, BlkPacket_WholeScreen
- ld a, $9
- ld [wcf1c], a
+ ld a, SET_PAL_OVERWORLD
+ ld [wDefaultPaletteCommand], a
ret
.PokemonTowerOrAgatha
ld a, PAL_GREYMON - 1
@@ -196,61 +196,63 @@ BuildOverworldPalPacket: ; 71fa5 (1c:5fa5)
; used when a Pokemon is the only thing on the screen
; such as evolution, trading and the Hall of Fame
-SendPokemonPalette_WholeScreen: ; 72001 (1c:6001)
+SetPal_PokemonWholeScreen: ; 72001 (1c:6001)
push bc
ld hl, PalPacket_Empty
- ld de, wcf2d
+ ld de, wPalPacket
ld bc, $10
call CopyData
pop bc
ld a, c
and a
- ld a, $1e
- jr nz, .asm_7201b
- ld a, [wcf1d]
+ ld a, PAL_BLACK
+ jr nz, .next
+ ld a, [wWholeScreenPaletteMonSpecies]
call DeterminePaletteIDOutOfBattle
-.asm_7201b
- ld [wcf2e], a
- ld hl, wcf2d
+.next
+ ld [wPalPacket + 1], a
+ ld hl, wPalPacket
ld de, BlkPacket_WholeScreen
ret
-BuildTrainerCardPalPacket: ; 72025 (1c:6025)
+SetPal_TrainerCard: ; 72025 (1c:6025)
ld hl, BlkPacket_TrainerCard
- ld de, wcc5b
+ ld de, wTrainerCardBlkPacket
ld bc, $40
call CopyData
- ld de, LoopCounts_7208b
- ld hl, wcc5d
+ ld de, BadgeBlkDataLengths
+ ld hl, wTrainerCardBlkPacket + 2
ld a, [W_OBTAINEDBADGES]
- ld c, $8
-.asm_7203c
+ ld c, 8
+.badgeLoop
srl a
push af
- jr c, .asm_7204c
+ jr c, .haveBadge
+; The player doens't have the badge, so zero the badge's blk data.
push bc
ld a, [de]
ld c, a
xor a
-.asm_72045
+.zeroBadgeDataLoop
ld [hli], a
dec c
- jr nz, .asm_72045
+ jr nz, .zeroBadgeDataLoop
pop bc
- jr .asm_72051
-.asm_7204c
+ jr .nextBadge
+.haveBadge
+; The player does have the badge, so skip past the badge's blk data.
ld a, [de]
-.asm_7204d
+.skipBadgeDataLoop
inc hl
dec a
- jr nz, .asm_7204d
-.asm_72051
+ jr nz, .skipBadgeDataLoop
+.nextBadge
pop af
inc de
dec c
- jr nz, .asm_7203c
+ jr nz, .badgeLoop
ld hl, PalPacket_TrainerCard
- ld de, wcc5b
+ ld de, wTrainerCardBlkPacket
ret
SendUnknownPalPacket_7205d:: ; 7205d (1c:605d)
@@ -263,46 +265,50 @@ SendUnknownPalPacket_72064:: ; 72064 (1c:6064)
ld de,UnknownPacket_72751
ret
-PointerTable_7206b: ; 7206b (1c:606b)
- dw SendPalPacket_Black
- dw BuildBattlePalPacket
- dw SendPalPacket_TownMap
- dw BuildStatusScreenPalPacket
- dw SendPalPacket_Pokedex
- dw SendPalPacket_Slots
- dw SendPalPacket_Titlescreen
- dw SendPalPacket_NidorinoIntro
- dw SendPalPacket_Generic
- dw BuildOverworldPalPacket
- dw SendPalPacket_PartyMenu
- dw SendPokemonPalette_WholeScreen
- dw SendPalPacket_GameFreakIntro
- dw BuildTrainerCardPalPacket
+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_NidorinoIntro
+ dw SetPal_Generic
+ dw SetPal_Overworld
+ dw SetPal_PartyMenu
+ dw SetPal_PokemonWholeScreen
+ dw SetPal_GameFreakIntro
+ dw SetPal_TrainerCard
dw SendUnknownPalPacket_7205d
dw SendUnknownPalPacket_72064
-; each byte is the number of loops to make in .asm_71f5b for each badge
-LoopCounts_7208b: ; 7208b (1c:608b)
- db $06,$06,$06,$12,$06,$06,$06,$06
+; 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: ; 7208b (1c:608b)
+ db 6 ; Boulder Badge
+ db 6 ; Cascade Badge
+ db 6 ; Thunder Badge
+ db 6 * 3 ; Rainbow Badge
+ db 6 ; Soul Badge
+ db 6 ; Marsh Badge
+ db 6 ; Volcano Badge
+ db 6 ; Earth Badge
-;DeterminePaletteID: ; 71f97 (1c:5f97)
- ;bit 3, a ; bit 3 of battle status 3, set if ;current Pokemon is transformed
- ;ld a, PAL_GREYMON ; if yes, use Ditto's palette
- ;ret nz
DeterminePaletteID: ; 72093 (1c:6093)
ld a, [hl]
DeterminePaletteIDOutOfBattle: ; 72094 (1c:6094)
ld [wd11e], a
- and a
- jr z, .idZero
+ and a ; is the mon index 0?
+ jr z, .skipDexNumConversion
push bc
- predef IndexToPokedex ; turn Pokemon ID number into Pokedex number
+ predef IndexToPokedex
pop bc
ld a, [wd11e]
-.idZero
+.skipDexNumConversion
ld e, a
- ld d, $00
- ld hl, MonsterPalettes ; not just for Pokemon, Trainers use it too
+ ld d, 0
+ ld hl, MonsterPalettes ; not just for Pokemon, Trainers use it too
add hl, de
ld a, [hl]
ret
@@ -384,7 +390,7 @@ Func_720e3:: ; 720e3 (1c:60e3)
ret
Func_7213b:: ; 7213b (1c:613b)
-; similar to BuildOverworldPalPacket
+; similar to SetPal_Overworld
ld a, [W_CURMAPTILESET]
cp CEMETERY
jr z, .PokemonTowerOrAgatha
@@ -427,33 +433,35 @@ Func_7213b:: ; 7213b (1c:613b)
ld a,$18
jr .town
-SendBlkPacket_PartyMenu: ; 7217f (1c:617f)
- ld hl, BlkPacket_PartyMenu ; $62f4
- ld de, wcf2e
+InitPartyMenuBlkPacket: ; 7217f (1c:617f)
+ ld hl, BlkPacket_PartyMenu
+ ld de, wPartyMenuBlkPacket
ld bc, $30
jp CopyData
-Func_7218b: ; 7218b (1c:618b)
- ld hl, wcf1f
- ld a, [wcf2d]
+UpdatePartyMenuBlkPacket: ; 7218b (1c:618b)
+; Update the blk packet with the palette of the HP bar that is
+; specified in [wWhichPartyMenuHPBar].
+ ld hl, wPartyMenuHPBarColors
+ ld a, [wWhichPartyMenuHPBar]
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
ld e, l
ld d, h
ld a, [de]
and a
- ld e, $5
- jr z, .asm_721a4
+ ld e, (1 << 2) | 1 ; green
+ jr z, .next
dec a
- ld e, $a
- jr z, .asm_721a4
- ld e, $f
-.asm_721a4
+ ld e, (2 << 2) | 2 ; yellow
+ jr z, .next
+ ld e, (3 << 2) | 3 ; red
+.next
push de
- ld hl, wcf37
- ld bc, $6
- ld a, [wcf2d]
+ ld hl, wPartyMenuBlkPacket + 8 + 1
+ ld bc, 6
+ ld a, [wWhichPartyMenuHPBar]
call AddNTimes
pop de
ld [hl], e
@@ -482,10 +490,10 @@ SendSGBPacket: ; 71feb (1c:5feb)
push bc
; send RESET signal (P14=LOW, P15=LOW)
xor a
- ld [$ff00],a
+ ld [rJOYP],a
; set P14=HIGH, P15=HIGH
ld a,$30
- ld [$ff00],a
+ ld [rJOYP],a
;load length of packets (16 bytes)
ld b,$10
.nextByte
@@ -502,10 +510,10 @@ SendSGBPacket: ; 71feb (1c:5feb)
; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
ld a,$20
.next0
- ld [$ff00],a
+ ld [rJOYP],a
; must set P14=HIGH,P15=HIGH between each "pulse"
ld a,$30
- ld [$ff00],a
+ ld [rJOYP],a
; rotation will put next bit in 0th position (so we can always use command
; "bit 0,d" to fetch the bit that has to be sent)
rr d
@@ -516,13 +524,11 @@ SendSGBPacket: ; 71feb (1c:5feb)
jr nz,.nextByte
; send bit 1 as a "stop bit" (end of parameter data)
ld a,$20
- ld [$ff00],a
+ ld [rJOYP],a
; set P14=HIGH,P15=HIGH
ld a,$30
- ld [$ff00],a
+ ld [rJOYP],a
call Wait7000
-; xor a
-; ld [$fff9],a
; wait for about 70000 cycles
; call Wait7000
; restore (previously pushed) number of packets
@@ -549,30 +555,30 @@ LoadSGB: ; 721f8 (1c:61f8)
ld a, $1
ld [wOnSGB], a
di
- call Func_72247
+ call PrepareSuperNintendoVRAMTransfer
ei
- ld a, $1
- ld [wcf2d], a
+ ld a, 1
+ ld [wCopyingSGBTileData], a
ld de, ChrTrnPacket
ld hl, SGBBorderGraphics
- call Func_722d7
+ call CopyGfxToSuperNintendoVRAM
xor a
- ld [wcf2d], a
+ ld [wCopyingSGBTileData], a
ld de, PctTrnPacket
ld hl, BorderPalettes
- call Func_722d7
+ call CopyGfxToSuperNintendoVRAM
xor a
- ld [wcf2d], a
+ ld [wCopyingSGBTileData], a
ld de, PalTrnPacket
ld hl, SuperPalettes
- call Func_722d7
+ call CopyGfxToSuperNintendoVRAM
call ClearVram
ld hl, MaskEnCancelPacket
jp Func_721b4
-Func_72247: ; 72247 (1c:6247)
- ld hl, PointerTable_7225b
- ld c, $9
+PrepareSuperNintendoVRAMTransfer: ; 72247 (1c:6247)
+ ld hl, .packetPointers
+ ld c, 9
.loop
push bc
ld a, [hli]
@@ -587,7 +593,8 @@ Func_72247: ; 72247 (1c:6247)
jr nz, .loop
ret
-PointerTable_7225b: ; 7225b (1c:625b)
+.packetPointers ; 7225b (1c:625b)
+; Only the first packet is needed.
dw MaskEnFreezePacket
dw DataSnd_728a1
dw DataSnd_728b1
@@ -602,55 +609,55 @@ CheckSGB: ; 7226d (1c:626d)
ld hl, MltReq2Packet
call Func_721b4
call Wait7000
- ld a, [rJOYP] ; $ff0
+ ld a, [rJOYP]
and $3
cp $3
- jr nz, .asm_722c9
+ jr nz, .isSGB
ld a, $20
- ld [rJOYP], a ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
+ ld [rJOYP], a
+ ld a, [rJOYP]
+ ld a, [rJOYP]
call Wait7000
call Wait7000
ld a, $30
- ld [rJOYP], a ; $ff0
+ ld [rJOYP], a
call Wait7000
call Wait7000
ld a, $10
- ld [rJOYP], a ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
+ ld [rJOYP], a
+ ld a, [rJOYP]
+ ld a, [rJOYP]
+ ld a, [rJOYP]
+ ld a, [rJOYP]
+ ld a, [rJOYP]
+ ld a, [rJOYP]
call Wait7000
call Wait7000
ld a, $30
- ld [rJOYP], a ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
- ld a, [rJOYP] ; $ff0
+ ld [rJOYP], a
+ ld a, [rJOYP]
+ ld a, [rJOYP]
+ ld a, [rJOYP]
call Wait7000
call Wait7000
- ld a, [rJOYP] ; $ff0
+ ld a, [rJOYP]
and $3
cp $3
- jr nz, .asm_722c9
- call Func_722ce
+ jr nz, .isSGB
+ call SendMltReq1Packet
and a
ret
-.asm_722c9
- call Func_722ce
+.isSGB
+ call SendMltReq1Packet
scf
ret
-Func_722ce: ; 722ce (1c:62ce)
+SendMltReq1Packet: ; 722ce (1c:62ce)
ld hl, MltReq1Packet
call Func_721b4
jp Wait7000
-Func_722d7: ; 722d7 (1c:62d7)
+CopyGfxToSuperNintendoVRAM: ; 722d7 (1c:62d7)
di
push de
call DisableLCD
@@ -658,31 +665,31 @@ Func_722d7: ; 722d7 (1c:62d7)
ld [rBGP], a ; $ff47
call Func_72520
ld de, vChars1
- ld a, [wcf2d]
+ ld a, [wCopyingSGBTileData]
and a
- jr z, .asm_722f1
- call Func_725fb
- jr .asm_722f7
-.asm_722f1
+ jr z, .notCopyingTileData
+ call CopySGBBorderTiles
+ jr .next
+.notCopyingTileData
ld bc, $1000
call CopyData
-.asm_722f7
+.next
ld hl, vBGMap0
ld de, $c
ld a, $80
ld c, $d
-.asm_72301
+.loop
ld b, $14
-.asm_72303
+.innerLoop
ld [hli], a
inc a
dec b
- jr nz, .asm_72303
+ jr nz, .innerLoop
add hl, de
dec c
- jr nz, .asm_72301
+ jr nz, .loop
ld a, $e3
- ld [rLCDC], a ; $ff40
+ ld [rLCDC], a
pop hl
call Func_721b4
xor a
@@ -704,26 +711,26 @@ Wait7000: ; 7231c (1c:631c)
jr nz, .loop
ret
-Func_72328: ; 72328 (1c:6328)
+SendSGBPackets: ; 72328 (1c:6328)
ld a, [hGBC]
and a
- jr z, .asm_7233e
+ jr z, .notGBC
push de
- call Func_72346
+ call InitGBCPalettes
pop hl
- call Func_72346
+ call InitGBCPalettes
ld a,[rLCDC]
and rLCDC_ENABLE_MASK
ret z
call Delay3
ret
-.asm_7233e
+.notGBC
push de
call Func_721b4
pop hl
jp Func_721b4
-Func_72346: ; 72346 (1c:6346)
+InitGBCPalettes: ; 72346 (1c:6346)
ld a,[hl]
and $f8
cp $20
@@ -1140,25 +1147,34 @@ 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
-Func_725fb: ; 725fb (1c:65fb)
- ld b, $80
-.loop
- ld c, $10
-.asm_725ff
+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
+; Copy bit planes 1 and 2 of the tile data.
+ ld c, 16
+.copyLoop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_725ff
- ld c, $10
+ jr nz, .copyLoop
+
+; Zero bit planes 3 and 4.
+ ld c, 16
xor a
-.asm_72608
+.zeroLoop
ld [de], a
inc de
dec c
- jr nz, .asm_72608
+ jr nz, .zeroLoop
+
dec b
- jr nz, .loop
+ jr nz, .tileLoop
ret
;dr $725e2,$734b9