summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElectroDeoxys <ElectroDeoxys@gmail.com>2020-12-23 00:38:06 +0000
committerElectroDeoxys <ElectroDeoxys@gmail.com>2020-12-24 17:52:51 +0000
commit4d5fd88d6071465267818b31a77f0fb6e86d9140 (patch)
treea0c00ddd1978c3a3998302f925a574d180db1f9b /src
parent9fab715759ddf919b0c4bb9a01095c4c225fcac0 (diff)
Initial disasm of banks 7 and 20
Diffstat (limited to 'src')
-rw-r--r--src/constants/gfx_constants.asm3
-rw-r--r--src/engine/bank01.asm82
-rw-r--r--src/engine/bank03.asm2
-rw-r--r--src/engine/bank04.asm150
-rw-r--r--src/engine/bank07.asm705
-rw-r--r--src/engine/bank20.asm897
-rw-r--r--src/engine/home.asm29
-rw-r--r--src/macros/wram.asm7
-rw-r--r--src/wram.asm80
9 files changed, 1795 insertions, 160 deletions
diff --git a/src/constants/gfx_constants.asm b/src/constants/gfx_constants.asm
index 61f49b8..0e82519 100644
--- a/src/constants/gfx_constants.asm
+++ b/src/constants/gfx_constants.asm
@@ -10,6 +10,9 @@ BG_MAP_HEIGHT EQU 32 ; tiles
CGB_PAL_SIZE EQU 8 ; bytes
palettes EQUS "* CGB_PAL_SIZE"
+NUM_BACKGROUND_PALETTES EQU 8
+NUM_OBJECT_PALETTES EQU 8
+
; tile size
TILE_SIZE EQU 16 ; bytes
tiles EQUS "* TILE_SIZE"
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm
index a7184a6..9f54bb1 100644
--- a/src/engine/bank01.asm
+++ b/src/engine/bank01.asm
@@ -7714,19 +7714,20 @@ Func_7195: ; 7195 (1:7195)
ret
_TossCoin: ; 71ad (1:71ad)
- ld [wcd9c], a
+ ld [wCoinTossTotalNum], a
ld a, [wDuelDisplayedScreen]
cp COIN_TOSS
- jr z, .asm_71c1
+ jr z, .print_text
xor a
- ld [wcd9f], a
+ ld [wCoinTossNumTossed], a
call EmptyScreen
call LoadDuelCoinTossResultTiles
-.asm_71c1
- ld a, [wcd9f]
+.print_text
+; no need to print text if this is not the first coin toss
+ ld a, [wCoinTossNumTossed]
or a
- jr nz, .asm_71ec
+ jr nz, .clear_text_pointer
ld a, COIN_TOSS
ld [wDuelDisplayedScreen], a
lb de, 0, 12
@@ -7743,47 +7744,53 @@ _TossCoin: ; 71ad (1:71ad)
ld l, a
call PrintText
-.asm_71ec
+.clear_text_pointer
ld hl, wCoinTossScreenTextID
xor a
ld [hli], a
ld [hl], a
+
+; store duelist type and reset number of heads
call EnableLCD
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
- ld [wcd9e], a
+ ld [wCoinTossDuelistType], a
call ExchangeRNG
xor a
ld [wCoinTossNumHeads], a
-.asm_7204
- ld a, [wcd9c]
- cp $2
+.print_coin_tally
+; skip printing text if it's only one coin toss
+ ld a, [wCoinTossTotalNum]
+ cp 2
jr c, .asm_7223
+
+; write "#coin/#total coins"
lb bc, 15, 11
- ld a, [wcd9f]
- inc a
+ ld a, [wCoinTossNumTossed]
+ inc a ; current coin number is wCoinTossNumTossed + 1
call WriteTwoDigitNumberInTxSymbolFormat
ld b, 17
ld a, SYM_SLASH
call WriteByteToBGMap0
inc b
- ld a, [wcd9c]
+ ld a, [wCoinTossTotalNum]
call WriteTwoDigitNumberInTxSymbolFormat
.asm_7223
call Func_3b21
ld a, $58
call Func_3b6a
- ld a, [wcd9e]
+
+ ld a, [wCoinTossDuelistType]
or a
jr z, .asm_7236
- call $7324
+ call Func_7324
jr .asm_723c
.asm_7236
call WaitForWideTextBoxInput
- call $72ff
+ call Func_72ff
.asm_723c
call Func_3b21
@@ -7798,11 +7805,11 @@ _TossCoin: ; 71ad (1:71ad)
.asm_724d
ld a, d
call Func_3b6a
- ld a, [wcd9e]
+ ld a, [wCoinTossDuelistType]
or a
jr z, .asm_725e
ld a, e
- call $7310
+ call Func_7310
ld e, a
jr .asm_726c
@@ -7813,7 +7820,7 @@ _TossCoin: ; 71ad (1:71ad)
pop de
jr c, .asm_725e
ld a, e
- call $72ff
+ call Func_72ff
.asm_726c
ld b, $5c
@@ -7829,7 +7836,7 @@ _TossCoin: ; 71ad (1:71ad)
.asm_727c
ld a, b
call Func_3b6a
- ld a, [wcd9e]
+ ld a, [wCoinTossDuelistType]
or a
jr z, .asm_728a
ld a, $1
@@ -7846,13 +7853,13 @@ _TossCoin: ; 71ad (1:71ad)
.asm_7292
ld a, d
call PlaySFX
- ld a, [wcd9c]
+ ld a, [wCoinTossTotalNum]
dec a
jr z, .asm_72b9
ld a, c
push af
ld e, $0
- ld a, [wcd9f]
+ ld a, [wCoinTossNumTossed]
.asm_72a3
cp $a
jr c, .asm_72ad
@@ -7870,17 +7877,17 @@ _TossCoin: ; 71ad (1:71ad)
call FillRectangle
.asm_72b9
- ld hl, wcd9f
+ ld hl, wCoinTossNumTossed
inc [hl]
- ld a, [wcd9e]
+ ld a, [wCoinTossDuelistType]
or a
jr z, .asm_72dc
ld a, [hl]
- ld hl, wcd9c
+ ld hl, wCoinTossTotalNum
cp [hl]
call z, WaitForWideTextBoxInput
- call $7324
- ld a, [wcd9c]
+ call Func_7324
+ ld a, [wCoinTossTotalNum]
ld hl, wCoinTossNumHeads
or [hl]
jr nz, .asm_72e2
@@ -7889,14 +7896,14 @@ _TossCoin: ; 71ad (1:71ad)
.asm_72dc
call WaitForWideTextBoxInput
- call $72ff
+ call Func_72ff
.asm_72e2
call Func_3b31
- ld a, [wcd9f]
- ld hl, wcd9c
+ ld a, [wCoinTossNumTossed]
+ ld hl, wCoinTossTotalNum
cp [hl]
- jp c, .asm_7204
+ jp c, .print_coin_tally
call ExchangeRNG
call Func_3b31
call Func_3b21
@@ -7922,17 +7929,19 @@ Func_7310: ; 7310 (1:7310)
ldh [hff96], a
ld a, [wDuelType]
cp DUELTYPE_LINK
- jr z, .asm_7338
+ jr z, Func_7338
.asm_7319
call DoFrame
call CheckAnyAnimationPlaying
jr c, .asm_7319
ldh a, [hff96]
ret
+
+Func_7324: ; 7324 (1:7324)
ldh [hff96], a
ld a, [wDuelType]
cp DUELTYPE_LINK
- jr z, .asm_7338
+ jr z, Func_7338
ld a, 30
.asm_732f
call DoFrame
@@ -7940,10 +7949,11 @@ Func_7310: ; 7310 (1:7310)
jr nz, .asm_732f
ldh a, [hff96]
ret
-.asm_7338
+
+Func_7338: ; 7338 (1:7338)
call DoFrame
call SerialRecvByte
- jr c, .asm_7338
+ jr c, Func_7338
call Func_7344
ret
; 0x7344
diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm
index 37e09c2..1b5d5f1 100644
--- a/src/engine/bank03.asm
+++ b/src/engine/bank03.asm
@@ -567,7 +567,7 @@ Func_c49c: ; c49c (3:449c)
Func_c4b9: ; c4b9 (3:44b9)
xor a
- ld [wd4ca], a
+ ld [wVRAMTileOffset], a
ld [wd4cb], a
ld a, $1d
farcall Func_80418
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm
index e3f65f0..e67216b 100644
--- a/src/engine/bank04.asm
+++ b/src/engine/bank04.asm
@@ -1288,8 +1288,44 @@ endr
Unknown_128fb: ; 128fb
INCROM $128fb, $1296e
+; disables all sprite animations
+; and clears memory related to sprites
Func_1296e: ; 1296e (4:696e)
- INCROM $1296e, $1299f
+ push af
+ ld a, [wd5d7]
+ or a
+ jr z, .asm_12977
+ pop af
+ ret
+
+.asm_12977
+ pop af
+ push bc
+ push hl
+ xor a
+ ld [wWhichSprite], a
+ call GetFirstSpriteAnimBufferProperty
+ lb bc, 0, SPRITE_ANIM_LENGTH
+
+; disable all sprite animations
+.loop_sprites
+ xor a
+ ld [hl], a ; set SPRITE_ANIM_ENABLED to 0
+ add hl, bc
+ ld a, [wWhichSprite]
+ inc a
+ ld [wWhichSprite], a
+ cp SPRITE_ANIM_BUFFER_CAPACITY
+ jr nz, .loop_sprites
+
+ call Func_12bf3
+ call ZeroObjectPositions
+ ld hl, wVBlankOAMCopyToggle
+ inc [hl]
+ pop hl
+ pop bc
+ ret
+; 0x1299f
; creates a new entry in SpriteAnimBuffer, else loads the sprite if need be
CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f)
@@ -1359,7 +1395,37 @@ FillNewSpriteAnimBufferEntry: ; 129d9 (4:69d9)
ret
; 0x129fa
- INCROM $129fa, $12a21
+Func_129fa: ; 129fa (4:69fa)
+ ld a, [wWhichSprite]
+ push af
+ ld a, [wd5d7]
+ or a
+ jr z, .asm_12a06
+ pop af
+ ret
+.asm_12a06
+ pop af
+ push hl
+ push bc
+ ld c, SPRITE_ANIM_ENABLED
+ call GetSpriteAnimBufferProperty_SpriteInA
+ ld [hl], $00
+ pop bc
+ pop hl
+ ret
+; 0x12a13
+
+Func_12a13: ; 12a13 (4:6a13)
+ ld a, [wWhichSprite]
+ push hl
+ push bc
+ ld c, SPRITE_ANIM_COUNTER
+ call GetSpriteAnimBufferProperty_SpriteInA
+ ld a, [hl]
+ pop bc
+ pop hl
+ ret
+; 0x12a21
HandleAllSpriteAnimations: ; 12a21 (4:6a21)
push af
@@ -1475,6 +1541,9 @@ StartNewSpriteAnimation: ; 12ab5 (4:6ab5)
cp [hl]
pop hl
ret z
+ ; fallthrough
+
+StartSpriteAnimation: ; 12ac0 (4:6ac0)
push hl
call LoadSpriteAnimPointers
call HandleAnimationFrame
@@ -1482,7 +1551,26 @@ StartNewSpriteAnimation: ; 12ab5 (4:6ab5)
ret
; 0x12ac9
- INCROM $12ac9, $12ae2
+Func_12ac9: ; 12ac9 (4:6ac9)
+ push bc
+ ld b, a
+ ld a, c
+ or a
+ ld a, b
+ pop bc
+ jr z, StartSpriteAnimation
+
+ push hl
+ push bc
+ call LoadSpriteAnimPointers
+ ld a, $ff
+ call GetAnimFramePointerFromOffset
+ pop bc
+ ld a, c
+ call SetAnimationCounterAndLoop
+ pop hl
+ ret
+; 0x12ae2
; Given an animation ID, fills the current sprite's Animation Pointer and Frame Offset Pointer
; a - Animation ID for current sprite
@@ -1582,11 +1670,12 @@ HandleAnimationFrame: ; 12b13 (4:6b13)
pop bc
ret
-; Calls GetAnimationFramePointer after setting up wTempPointerBank and wd4ca
+; Calls GetAnimationFramePointer after setting up wTempPointerBank
+; and wVRAMTileOffset
; a - frame offset from Animation Data
; hl - beginning of Sprite Anim Buffer
GetAnimFramePointerFromOffset: ; 12b6a (4:6b6a)
- ld [wd4ca], a
+ ld [wVRAMTileOffset], a
push hl
push bc
push de
@@ -1638,9 +1727,26 @@ Func_12ba7: ; 12ba7 (4:6ba7)
INCROM $12ba7, $12bcd
Func_12bcd: ; 12bcd (4:6bcd)
- INCROM $12bcd, $12c05
+ INCROM $12bcd, $12bf3
+
+; clears wSpriteVRAMBufferSize and wSpriteVRAMBuffer
+Func_12bf3: ; 12bf3 (4:6bf3)
+ push hl
+ push bc
+ xor a
+ ld [wSpriteVRAMBufferSize], a
+ ld c, $40
+ ld hl, wSpriteVRAMBuffer
+.asm_12bfe
+ ld [hli], a
+ dec c
+ jr nz, .asm_12bfe
+ pop bc
+ pop hl
+ ret
+; 0x12c05
-; gets some value based on the sprite in b and wd5d8
+; gets some value based on the sprite in a and wSpriteVRAMBuffer
; loads the sprites data if it doesn't already exist
Func_12c05: ; 12c05 (4:6c05)
push hl
@@ -1648,9 +1754,9 @@ Func_12c05: ; 12c05 (4:6c05)
push de
ld b, a
ld d, $0
- ld a, [wd618]
+ ld a, [wSpriteVRAMBufferSize]
ld c, a
- ld hl, wd5d8
+ ld hl, wSpriteVRAMBuffer
or a
jr z, .tryToAddSprite
@@ -1661,40 +1767,43 @@ Func_12c05: ; 12c05 (4:6c05)
jr z, .foundSpriteMatch
inc hl
ld a, [hli]
- add [hl]
+ add [hl] ; add tile size to tile offset
ld d, a
inc hl
dec c
jr nz, .findSpriteMatchLoop
+
.tryToAddSprite
- ld a, [wd618]
+ ld a, [wSpriteVRAMBufferSize]
cp $10
jr nc, .quitFail
inc a
- ld [wd618], a
+ ld [wSpriteVRAMBufferSize], a ; increase number of entries by 1
inc hl
push hl
ld a, b
- ld [hli], a
+ ld [hli], a ; store sprite index
call Func_12c4f
push af
ld a, d
- ld [hli], a
+ ld [hli], a ; store tile offset
pop af
- ld [hl], a
+ ld [hl], a ; store tile size
pop hl
+
.foundSpriteMatch
dec hl
- inc [hl]
+ inc [hl] ; mark this entry as valid
inc hl
inc hl
ld a, [hli]
add [hl]
cp $81
- jr nc, .quitFail
+ jr nc, .quitFail ; exceeds total tile size
ld a, d
or a
jr .quitSucceed
+
.quitFail
debug_ret
xor a
@@ -1705,12 +1814,17 @@ Func_12c05: ; 12c05 (4:6c05)
pop hl
ret
+; input:
+; a = sprite index within the data map
+; d = tile offset in VRAM
+; output:
+; a = number of tiles in sprite
Func_12c4f: ; 12c4f (4:6c4f)
push af
xor a
ld [wd4cb], a
ld a, d
- ld [wd4ca], a
+ ld [wVRAMTileOffset], a
pop af
farcall Func_8025b
ret
diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm
index 375a161..a8fe73a 100644
--- a/src/engine/bank07.asm
+++ b/src/engine/bank07.asm
@@ -598,7 +598,8 @@ Func_1c8ef: ; 1c8ef (7:48ef)
ld a, [wTempAnimation]
ld [wd4bf], a
cp $61
- jp nc, $4b5e ; asm_007_4b5e
+ jp nc, Func_1cb5e
+
push hl
push bc
push de
@@ -632,7 +633,7 @@ Func_1c8ef: ; 1c8ef (7:48ef)
add hl, bc
ld a, [hl]
rlca
- add $48
+ add LOW(.address) ; $48
ld l, a ; LO
ld a, HIGH(.address) ; $49
adc 0
@@ -654,6 +655,7 @@ Func_1c8ef: ; 1c8ef (7:48ef)
dw Func_1c94a
Func_1c94a: ; 1c94a (7:494a)
+; if any of the first 3 bytes is $00, return carry
ld e, l
ld d, h
ld c, 3
@@ -664,23 +666,25 @@ Func_1c94a: ; 1c94a (7:494a)
inc de
dec c
jr nz, .loop
+
ld a, [hli]
farcall CreateSpriteAndAnimBufferEntry
ld a, [wWhichSprite]
ld [wAnimationQueue], a ; push an animation to the queue
+
xor a
- ld [wd4ca], a
+ ld [wVRAMTileOffset], a
ld [wd4cb], a
+
ld a, [hli]
- farcall $20, $4418
- ld a, [hli]
+ farcall Func_80418
+ ld a, [hli]
push af
ld a, [hli]
ld [wd42b], a
call Func_1c980
pop af
-
farcall StartNewSpriteAnimation
or a
jr .return
@@ -703,11 +707,11 @@ Func_1c980: ; 1c980 (7:4980)
or [hl]
ld [hli], a
ld a, b
- ld [hli], a
- ld [hl], c
+ ld [hli], a ; SPRITE_ANIM_COORD_X
+ ld [hl], c ; SPRITE_ANIM_COORD_Y
pop af
- ld bc, $000c
+ lb bc, 0, SPRITE_ANIM_FLAGS - SPRITE_ANIM_COORD_Y
add hl, bc
ld c, a
and %00000011
@@ -717,6 +721,10 @@ Func_1c980: ; 1c980 (7:4980)
pop hl
ret
+; output:
+; a = anim flags
+; b = x coordinate
+; c = y coordinate
Func_1c9a2: ; 1c9a2 (7:49a2)
push hl
ld c, 0
@@ -725,17 +733,18 @@ Func_1c9a2: ; 1c9a2 (7:49a2)
jr nz, .calc_addr
ld a, [wd4ae]
- add a
+ add a ; 2 * [wd4ae]
ld c, a
- add a
- add c
- add a
+ add a ; 4 * [wd4ae]
+ add c ; 6 * [wd4ae]
+ add a ; 12 * [wd4ae]
ld c, a
+
ld a, [wd4af]
cp PLAYER_TURN
jr z, .player_turn
- ld a, $06
+ ld a, 6
add c
ld c, a
.player_turn
@@ -746,6 +755,7 @@ Func_1c9a2: ; 1c9a2 (7:49a2)
ld hl, Data_1c9e0
add hl, bc
ld c, [hl]
+
.calc_addr
ld a, c
add a ; a = c * 2
@@ -802,29 +812,30 @@ Data_1c9e0:
db $0e
macro_1ca04: MACRO
- dw \1
+ db \1
db \2
+ db \3
ENDM
Data_1ca04:
-; value(2), flag(1)
- macro_1ca04 $5858, $08
- macro_1ca04 $5028, $00
- macro_1ca04 $3088, $63
- macro_1ca04 $4858, $00
- macro_1ca04 $6018, $00
- macro_1ca04 $6038, $00
- macro_1ca04 $6058, $00
- macro_1ca04 $6078, $00
- macro_1ca04 $6098, $00
- macro_1ca04 $5058, $00
- macro_1ca04 $2898, $00
- macro_1ca04 $2878, $00
- macro_1ca04 $2858, $00
- macro_1ca04 $2838, $00
- macro_1ca04 $2818, $00
-
-Func_1ca31: ; 1ca31 (7:4a6b)
+; x coord, y coord, animation flags
+ macro_1ca04 $58, $58, %00001000
+ macro_1ca04 $28, $50, %00000000
+ macro_1ca04 $88, $30, %01100011
+ macro_1ca04 $58, $48, %00000000
+ macro_1ca04 $18, $60, %00000000
+ macro_1ca04 $38, $60, %00000000
+ macro_1ca04 $58, $60, %00000000
+ macro_1ca04 $78, $60, %00000000
+ macro_1ca04 $98, $60, %00000000
+ macro_1ca04 $58, $50, %00000000
+ macro_1ca04 $98, $28, %00000000
+ macro_1ca04 $78, $28, %00000000
+ macro_1ca04 $58, $28, %00000000
+ macro_1ca04 $38, $28, %00000000
+ macro_1ca04 $18, $28, %00000000
+
+Func_1ca31: ; 1ca31 (7:4a31)
push hl
push bc
ld a, [wd4ac]
@@ -837,8 +848,9 @@ Func_1ca31: ; 1ca31 (7:4a6b)
cp b
jp z, .asm_007_4a6b
ld [hl], a
- ld b, 0
- ld hl, $d42c
+
+ ld b, $00
+ ld hl, wd42c
add hl, bc
ld a, [wTempAnimation]
ld [hli], a
@@ -848,20 +860,64 @@ Func_1ca31: ; 1ca31 (7:4a6b)
ld [hli], a
ld a, [wd4b0]
ld [hli], a
- ld a, [$d4b1]
+ ld a, [wd4b1]
ld [hli], a
- ld a, [$d4b2]
+ ld a, [wd4b2]
ld [hli], a
- ld a, [$d4b3]
+ ld a, [wd4b3]
ld [hli], a
ld a, [wd4be]
ld [hl], a
+
.asm_007_4a6b
pop bc
pop hl
ret
- INCROM $1ca6e, $1cab3
+Func_1ca6e: ; 1ca6e (7:4a6e)
+ push hl
+ push bc
+.asm_1ca70
+ ld a, [wd4ad]
+ ld b, a
+ ld a, [wd4ac]
+ cp b
+ jr z, .asm_1cab0
+
+ ld c, a
+ add $08
+ and $7f
+ ld [wd4ac], a
+
+ ld b, $00
+ ld hl, wd42c
+ add hl, bc
+ ld a, [hli]
+ ld [wTempAnimation], a
+ ld a, [hli]
+ ld [wd4ae], a
+ ld a, [hli]
+ ld [wd4af], a
+ ld a, [hli]
+ ld [wd4b0], a
+ ld a, [hli]
+ ld [wd4b1], a
+ ld a, [hli]
+ ld [wd4b2], a
+ ld a, [hli]
+ ld [wd4b3], a
+ ld a, [hl]
+ ld [wd4be], a
+
+ call Func_1c8ef
+ call CheckAnyAnimationPlaying
+ jr nc, .asm_1ca70
+
+.asm_1cab0
+ pop bc
+ pop hl
+ ret
+; 0x1cab3
Func_1cab3: ; 1cab3 (7:4ab3)
push bc
@@ -873,12 +929,64 @@ Func_1cab3: ; 1cab3 (7:4ab3)
ld c, l
add hl, hl ; hl = anim * 4
add hl, bc ; hl = anim * 6
- ld bc, $4e32
+ ld bc, Data_1ce32
add hl, bc
pop bc
ret
- INCROM $1cac5, $1cb18
+Func_1cac5: ; 1cac5 (7:4ac5)
+ ld a, [wd42a]
+ cp $ff
+ jr nz, .asm_1cb03
+
+ ld a, [wd4c0]
+ or a
+ jr z, .asm_1cafb
+ cp $80
+ jr z, .asm_1cb11
+ ld hl, wAnimationQueue
+ ld c, $07
+.asm_1cadb
+ push af
+ push bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_1caf4
+ ld [wWhichSprite], a
+ farcall Func_12a13
+ cp $ff
+ jr nz, .asm_1caf4
+ farcall Func_129fa
+ ld a, $ff
+ ld [hl], a
+.asm_1caf4
+ pop bc
+ pop af
+ and [hl]
+ inc hl
+ dec c
+ jr nz, .asm_1cadb
+.asm_1cafb
+ cp $ff
+ jr nz, .asm_1cb02
+ call Func_1ca6e
+.asm_1cb02
+ ret
+
+.asm_1cb03
+ ld hl, wd4b9
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call CallHL2
+ ld a, [wd42a]
+ jr .asm_1cafb
+
+.asm_1cb11
+ ld a, $ff
+ ld [wd4c0], a
+ jr .asm_1cafb
+; 0x1cb18
Func_1cb18: ; 1cb18 (7:4b18)
push hl
@@ -924,7 +1032,236 @@ Func_1cb18: ; 1cb18 (7:4b18)
jr .asm_1cb57
; 0x1cb5e
- INCROM $1cb5e, $1ccbc
+Func_1cb5e: ; 1cb5e (7:4b5e)
+ cp $96
+ jp nc, Func_1ce03
+ cp $8c
+ jp nz, Func_1cc76
+ jr .asm_1cb6a ; redundant
+.asm_1cb6a
+ ld a, [wd4b2]
+ cp $03
+ jr nz, .asm_1cb76
+ ld a, [wd4b1]
+ cp $e8
+.asm_1cb76
+ ret nc
+
+ xor a
+ ld [wd4b8], a
+ ld [wVRAMTileOffset], a
+ ld [wd4cb], a
+
+ ld a, $25
+ farcall Func_80418
+ call Func_1cba6
+
+ ld hl, wd4b3
+ bit 0, [hl]
+ call nz, Func_1cc3e
+
+ ld a, $12
+ ld [wd4b8], a
+ bit 1, [hl]
+ call nz, Func_1cc4e
+
+ bit 2, [hl]
+ call nz, Func_1cc66
+
+ xor a
+ ld [wd4b3], a
+ ret
+; 0x1cba6
+
+Func_1cba6: ; 1cba6 (7:4ba6)
+ call Func_1cc03
+ xor a
+ ld [wd4b7], a
+
+ ld hl, wd4b4
+ ld de, wAnimationQueue + 1
+.asm_1cbb3
+ push hl
+ push de
+ ld a, [hl]
+ or a
+ jr z, .asm_1cbbc
+ call Func_1cbcc
+
+.asm_1cbbc
+ pop de
+ pop hl
+ inc hl
+ inc de
+ ld a, [wd4b7]
+ inc a
+ ld [wd4b7], a
+ cp $03
+ jr c, .asm_1cbb3
+ ret
+; 0x1cbcc
+
+Func_1cbcc: ; 1cbcc (7:4bcc)
+ push af
+ ld a, $2e
+ farcall CreateSpriteAndAnimBufferEntry
+ ld a, [wWhichSprite]
+ ld [de], a
+ ld a, $80
+ ld [wd42b], a
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
+ call Func_1c9a2
+
+ ld a, [wd4b7]
+ add $fd
+ ld e, a
+ ld a, $4b
+ adc 0
+ ld d, a
+ ld a, [de]
+ add b
+
+ ld [hli], a ; SPRITE_ANIM_COORD_X
+ ld [hl], c ; SPRITE_ANIM_COORD_Y
+
+ ld a, [wd4b8]
+ ld c, a
+ pop af
+ farcall Func_12ac9
+ ret
+; 0x1cbfd
+
+ INCROM $1cbfd, $1cc03
+
+Func_1cc03: ; 1cc03 (7:4c03)
+ ld a, [wd4b1]
+ ld l, a
+ ld a, [wd4b2]
+ ld h, a
+
+ ld de, wd4b4
+ ld bc, -100
+ call .Func_1cc2f
+ ld bc, -10
+ call .Func_1cc2f
+
+ ld a, l
+ add $4f
+ ld [de], a
+ ld hl, wd4b4
+ ld c, 2
+.asm_1cc23
+ ld a, [hl]
+ cp $4f
+ jr nz, .asm_1cc2e
+ ld [hl], $00
+ inc hl
+ dec c
+ jr nz, .asm_1cc23
+.asm_1cc2e
+ ret
+; 0x1cc2f
+
+.Func_1cc2f
+ ld a, $4e
+.loop
+ inc a
+ add hl, bc
+ jr c, .loop
+
+ ld [de], a
+ inc de
+ ld a, l
+ sub c
+ ld l, a
+ ld a, h
+ sbc b
+ ld h, a
+ ret
+; 0x1cc3e
+
+Func_1cc3e: ; 1cc3e (7:4c3e)
+ push hl
+ ld a, $03
+ ld [wd4b7], a
+ ld de, wAnimationQueue + 4
+ ld a, $5b
+ call Func_1cbcc
+ pop hl
+ ret
+; 0x1cc4e
+
+Func_1cc4e: ; 1cc4e (7:4c4e)
+ push hl
+ ld a, $04
+ ld [wd4b7], a
+ ld de, wAnimationQueue + 5
+ ld a, $5a
+ call Func_1cbcc
+ ld a, [wd4b8]
+ add $12
+ ld [wd4b8], a
+ pop hl
+ ret
+; 0x1cc66
+
+Func_1cc66: ; 1cc66 (7:4c66)
+ push hl
+ ld a, $05
+ ld [wd4b7], a
+ ld de, wAnimationQueue + 6
+ ld a, $59
+ call Func_1cbcc
+ pop hl
+ ret
+; 0x1cc76
+
+Func_1cc76: ; 1cc76 (7:4c76)
+ ld a, [wd421]
+ or a
+ jr nz, .asm_1cc9e
+ ld a, [wTempAnimation]
+ ld [wd42a], a
+ sub $61
+ add a
+ add a
+ ld c, a
+ ld b, $00
+ ld hl, Data_1cc9f
+ add hl, bc
+ ld a, [hli]
+ ld [wd4b9], a
+ ld c, a
+ ld a, [hli]
+ ld [wd4b9 + 1], a
+ ld b, a
+ ld a, [hl]
+ ld [wd4bb], a
+ call CallBC
+.asm_1cc9e
+ ret
+; 0x1cc9f
+
+macro_1cc9f: MACRO
+ dw \1
+ db \2
+ db \3
+ENDM
+
+Data_1cc9f: ; 1cc9f (7:4c9f)
+ macro_1cc9f Func_1cce4, $18, $00
+ macro_1cc9f Func_1cce9, $20, $00
+ macro_1cc9f Func_1cd10, $18, $00
+ macro_1cc9f Func_1cd15, $20, $00
+ macro_1cc9f Func_1cd76, $08, $00
+ macro_1cc9f Func_1cdc3, $3f, $00
+
+Func_1ccb7: ; 1ccb7 (7:4cb7)
+ ld a, [wd4bb]
+ or a
+ ret nz
+ ; fallthrough
Func_1ccbc: ; 1ccbc (7:4cbc)
ld a, $ff
@@ -941,7 +1278,289 @@ Func_1ccbc: ; 1ccbc (7:4cbc)
ret
; 0x1ccd4
- INCROM $1ccd4, $1d078
+ INCROM $1ccd4, $1cce4
+
+Func_1cce4: ; 1cce4 (7:4ce4)
+ ld hl, $4d55
+ jr Func_1ccee
+
+Func_1cce9: ; 1cce9 (7:4ce9)
+ ld hl, $4d61
+ jr Func_1ccee
+
+Func_1ccee: ; 1ccee (7:4cee)
+ ld a, l
+ ld [wd4bc], a
+ ld a, h
+ ld [wd4bc + 1], a
+
+ ld hl, wd4b9
+ ld [hl], LOW(.asm_1ccff)
+ inc hl
+ ld [hl], HIGH(.asm_1ccff)
+ ret
+
+.asm_1ccff
+ call Func_1cd71
+ call Func_1cd3c
+ jp nc, Func_1ccb7
+ ldh a, [hSCX]
+ add [hl]
+ ldh [hSCX], a
+ jp Func_1ccb7
+; 0x1cd10
+
+Func_1cd10: ; 1cd10 (7:4d10)
+ ld hl, $4d55
+ jr Func_1cd1a
+
+Func_1cd15: ; 1cd15 (7:4d15)
+ ld hl, $4d61
+ jr Func_1cd1a
+
+Func_1cd1a: ; 1cd1a (7:4d1a)
+ ld a, l
+ ld [wd4bc], a
+ ld a, h
+ ld [wd4bc + 1], a
+ ld hl, wd4b9
+ ld [hl], LOW(.asm_1cd2b)
+ inc hl
+ ld [hl], HIGH(.asm_1cd2b)
+ ret
+
+.asm_1cd2b
+ call Func_1cd71
+ call Func_1cd3c
+ jp nc, Func_1ccb7
+ ldh a, [hSCY]
+ add [hl]
+ ldh [hSCY], a
+ jp Func_1ccb7
+; 0x1cd3c
+
+Func_1cd3c: ; 1cd3c (7:4d3c)
+ ld hl, wd4bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wd4bb]
+ cp [hl]
+ ret nc
+ inc hl
+ push hl
+ inc hl
+ ld a, l
+ ld [wd4bc], a
+ ld a, h
+ ld [wd4bc + 1], a
+ pop hl
+ scf
+ ret
+; 0x1cd55
+
+ INCROM $1cd55, $1cd71
+
+Func_1cd71: ; 1cd71 (7:4d71)
+ ld hl, wd4bb
+ dec [hl]
+ ret
+; 0x1cd76
+
+Func_1cd76: ; 1cd76 (7:4d76)
+ ld hl, wd4b9
+ ld [hl], $a3
+ inc hl
+ ld [hl], $4d
+ ld a, [wBGP]
+ ld [wd4bc], a
+ ld hl, wBackgroundPalettesCGB
+ ld de, wd297
+ ld bc, 8 palettes
+ call CopyDataHLtoDE_SaveRegisters
+ ld de, $7fff
+ ld hl, wBackgroundPalettesCGB
+ ld bc, $20
+ call FillMemoryWithDE
+ xor a
+ call SetBGP
+ call FlushAllPalettes
+ call Func_1cd71
+ ld a, [wd4bb]
+ or a
+ ret nz
+ ld hl, wd297
+ ld de, wBackgroundPalettesCGB
+ ld bc, 8 palettes
+ call CopyDataHLtoDE_SaveRegisters
+ ld a, [wd4bc]
+ call SetBGP
+ call FlushAllPalettes
+ jp Func_1ccbc
+; 0x1cdc3
+
+Func_1cdc3: ; 1cdc3 (7:4dc3)
+ ld hl, wd4b9
+ ld [hl], $df
+ inc hl
+ ld [hl], $4d
+ xor a
+ ld [wApplyBGScroll], a
+ ld hl, $cace
+ ld [hl], $a6
+ inc hl
+ ld [hl], $3e
+ ld a, $01
+ ld [wBGScrollMod], a
+ call EnableInt_LYCoincidence
+ ld a, [$d4bb]
+ srl a
+ srl a
+ srl a
+ and $07
+ ld c, a
+ ld b, $00
+ ld hl, $4dfb
+ add hl, bc
+ ld a, [hl]
+ ld [wBGScrollMod], a
+ call Func_1cd71
+ jp Func_1ccb7
+; 0x1cdfb
+
+ INCROM $1cdfb, $1ce03
+
+Func_1ce03: ; 1ce03 (7:4e03)
+ cp $9e
+ jr z, .asm_1ce17
+ sub $96
+ add a
+ ld c, a
+ ld b, $00
+ ld hl, $4e22
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp Func_3bb5
+.asm_1ce17
+ ld a, [wd4b1]
+ ld l, a
+ ld a, [wd4b2]
+ ld h, a
+ jp Func_3bb5
+; 0x1ce22
+
+ INCROM $1ce22, $1ce32
+
+macro_1ce32: MACRO
+ db \1
+ db \2
+ db \3
+ db \4
+ db \5
+ db \6
+ENDM
+
+Data_1ce32: ; 1ce32 (7:4e32)
+ macro_1ce32 $00, $00, $00, $00, $00, $00
+ macro_1ce32 $28, $1f, $47, %10000000, $11, $00
+ macro_1ce32 $29, $20, $48, %10000000, $12, $00
+ macro_1ce32 $2a, $21, $49, %10000000, $13, $00
+ macro_1ce32 $2b, $22, $4a, %10000000, $14, $00
+ macro_1ce32 $2c, $23, $4b, %10000000, $15, $00
+ macro_1ce32 $2d, $24, $4c, %10000000, $16, $00
+ macro_1ce32 $2d, $24, $4d, %10000000, $16, $00
+ macro_1ce32 $2d, $24, $4e, %10000000, $17, $00
+ macro_1ce32 $2e, $25, $00, $00, $00, $00
+ macro_1ce32 $2f, $26, $5c, $00, $18, $00
+ macro_1ce32 $30, $27, $5e, $00, $19, $00
+ macro_1ce32 $31, $28, $5f, $00, $1a, $00
+ macro_1ce32 $32, $29, $60, %00000100, $1b, $00
+ macro_1ce32 $33, $2a, $61, $00, $1c, $00
+ macro_1ce32 $33, $2a, $62, $00, $1d, $00
+ macro_1ce32 $34, $2b, $63, %00000100, $1e, $00
+ macro_1ce32 $35, $2c, $64, $00, $1f, $00
+ macro_1ce32 $36, $2d, $69, %00000100, $20, $00
+ macro_1ce32 $37, $2e, $6a, $00, $21, $00
+ macro_1ce32 $38, $2f, $6b, %00000100, $22, $00
+ macro_1ce32 $39, $30, $6c, $00, $23, $00
+ macro_1ce32 $3a, $31, $6d, %00000100, $24, $00
+ macro_1ce32 $3b, $32, $6e, $00, $25, $00
+ macro_1ce32 $3c, $33, $6f, $00, $26, $00
+ macro_1ce32 $3d, $34, $70, %01000000 | %00000010, $27, $00
+ macro_1ce32 $3e, $35, $71, %01000000 | %00000010, $28, $00
+ macro_1ce32 $3f, $36, $72, $00, $29, $00
+ macro_1ce32 $3f, $36, $73, $00, $2a, $00
+ macro_1ce32 $40, $37, $74, $00, $2b, $00
+ macro_1ce32 $40, $37, $75, $00, $52, $00
+ macro_1ce32 $40, $37, $76, $00, $53, $00
+ macro_1ce32 $41, $38, $77, %00100000 | %00000001, $2c, $00
+ macro_1ce32 $42, $39, $78, $00, $2d, $00
+ macro_1ce32 $43, $3a, $7a, $00, $2d, $00
+ macro_1ce32 $44, $3b, $7b, $00, $2e, $00
+ macro_1ce32 $42, $39, $79, $00, $2f, $00
+ macro_1ce32 $45, $3c, $7c, %00100000 | %00000001, $30, $00
+ macro_1ce32 $46, $3d, $7d, $00, $31, $00
+ macro_1ce32 $47, $3e, $7e, $00, $32, $00
+ macro_1ce32 $48, $3f, $7f, $00, $33, $00
+ macro_1ce32 $49, $40, $80, $00, $34, $00
+ macro_1ce32 $4a, $41, $81, $00, $35, $00
+ macro_1ce32 $4b, $42, $82, $00, $36, $00
+ macro_1ce32 $4c, $43, $83, $00, $37, $00
+ macro_1ce32 $4d, $44, $84, $00, $38, $00
+ macro_1ce32 $4e, $45, $85, $00, $39, $00
+ macro_1ce32 $4f, $46, $86, $00, $3a, $00
+ macro_1ce32 $50, $47, $87, %00100000 | %00000001, $3b, $00
+ macro_1ce32 $51, $48, $88, $00, $3c, $00
+ macro_1ce32 $52, $49, $89, $00, $3d, $00
+ macro_1ce32 $53, $4a, $8a, $00, $3e, $00
+ macro_1ce32 $54, $4b, $8b, $00, $3f, $00
+ macro_1ce32 $55, $4c, $8c, %00000100, $40, $00
+ macro_1ce32 $56, $4d, $8d, $00, $41, $00
+ macro_1ce32 $57, $4e, $8e, $00, $42, $00
+ macro_1ce32 $58, $4f, $8f, %00000100, $43, $00
+ macro_1ce32 $59, $50, $90, $00, $44, $00
+ macro_1ce32 $5a, $51, $92, $00, $45, $00
+ macro_1ce32 $5b, $52, $93, $00, $46, $00
+ macro_1ce32 $5c, $53, $94, $00, $47, $00
+ macro_1ce32 $5c, $53, $95, $00, $48, $00
+ macro_1ce32 $5d, $54, $97, $00, $49, $00
+ macro_1ce32 $5e, $55, $99, $00, $4a, $00
+ macro_1ce32 $4a, $56, $81, $00, $4b, $00
+ macro_1ce32 $5c, $53, $96, $00, $47, $00
+ macro_1ce32 $2d, $24, $4d, %10000000, $16, $00
+ macro_1ce32 $2d, $24, $4e, %10000000, $17, $00
+ macro_1ce32 $2f, $26, $5c, $00, $18, $00
+ macro_1ce32 $3a, $31, $6d, %00000100, $24, $00
+ macro_1ce32 $5f, $57, $9a, %10000000, $11, $00
+ macro_1ce32 $35, $2c, $65, %00000100, $5c, $00
+ macro_1ce32 $35, $2c, $66, %00000100, $00, $00
+ macro_1ce32 $5d, $54, $98, %00000100, $4c, $00
+ macro_1ce32 $59, $50, $91, %00000100, $4d, $00
+ macro_1ce32 $60, $58, $9b, $00, $4e, $00
+ macro_1ce32 $61, $59, $9c, $00, $4f, $00
+ macro_1ce32 $62, $5a, $9d, $00, $50, $00
+ macro_1ce32 $35, $2c, $67, %0000100, $51, $00
+ macro_1ce32 $35, $2c, $68, %0000100, $51, $00
+ macro_1ce32 $63, $5b, $9e, %10000000 | %00001000 | %00000100, $00, $00
+ macro_1ce32 $63, $5b, $9f, %10000000 | %00001000 | %00000100, $07, $00
+ macro_1ce32 $63, $5b, $a0, %10000000 | %00001000 | %00000100, $07, $00
+ macro_1ce32 $63, $5b, $a1, %10000000 | %00001000 | %00000100, $07, $00
+ macro_1ce32 $63, $5b, $a2, %10000000 | %00000100, $00, $00
+ macro_1ce32 $63, $5b, $a3, %10000000 | %00001000 | %00000100, $00, $00
+ macro_1ce32 $63, $5b, $a4, %10000000 | %00001000 | %00000100, $00, $00
+ macro_1ce32 $63, $5b, $a5, %10000000 | %00001000 | %00000100, $00, $00
+ macro_1ce32 $64, $5c, $a7, %10000000 | %00001000 | %00000100, $00, $00
+ macro_1ce32 $64, $5c, $a8, %10000000 | %00001000 | %00000100, $0b, $00
+ macro_1ce32 $64, $5c, $a9, %10000000 | %00001000 | %00000100, $0b, $00
+ macro_1ce32 $64, $5c, $aa, %10000000 | %00000100, $00, $00
+ macro_1ce32 $64, $5c, $ab, %10000000 | %00000100, $00, $00
+ macro_1ce32 $65, $5d, $ac, %10000000 | %00000100, $00, $00
+ macro_1ce32 $65, $5d, $ad, %10000000 | %00000100, $00, $00
+ macro_1ce32 $65, $5d, $ae, %10000000 | %00000100, $00, $00
+ macro_1ce32 $63, $5b, $a6, %10000000 | %00000100, $00, $00
+; 0x1d078
Func_1d078: ; 1d078 (7:5078)
ld a, [wd627]
diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm
index 14292f9..9594926 100644
--- a/src/engine/bank20.asm
+++ b/src/engine/bank20.asm
@@ -26,7 +26,7 @@ Func_80077: ; 80077 (20:4077)
push bc
push de
call BCCoordToBGMap0Address
- ld hl, wd4c2
+ ld hl, wVRAMPointer
ld [hl], e
inc hl
ld [hl], d
@@ -66,9 +66,9 @@ Func_800bd: ; 800bd (20:40bd)
ld d, a
ld b, $c0
call Func_08bf
- ld a, [wd4c2]
+ ld a, [wVRAMPointer]
ld e, a
- ld a, [wd4c3]
+ ld a, [wVRAMPointer + 1]
ld d, a
call Func_800e0
pop de
@@ -311,36 +311,46 @@ LoadGraphicsPointerFromHL: ; 80229 (20:4229)
INCROM $80238, $8025b
+; loads graphics data from third map data pointers
+; input:
+; a = sprite index within the data map
+; output:
+; a = number of tiles in sprite
Func_8025b: ; 8025b (20:425b)
push hl
ld l, $4
call GetMapDataPointer
call LoadGraphicsPointerFromHL
- ld a, [hl]
+ ld a, [hl] ; tile size
push af
- ld [wd4c8], a
- ld a, $10
- ld [wd4c7], a
- call Func_80274
+ ld [wCurSpriteNumTiles], a
+ ld a, TILE_SIZE
+ ld [wCurSpriteTileSize], a
+ call LoadGfxDataFromTempPointerToVRAMBank
pop af
pop hl
ret
-Func_80274: ; 80274 (20:4274)
- call Func_8029f
- jr asm_8027c
+; loads graphics data pointed by wTempPointer in wTempPointerBank
+; to the VRAM bank according to wd4cb, in address pointed by wVRAMPointer
+LoadGfxDataFromTempPointerToVRAMBank: ; 80274 (20:4274)
+ call GetTileOffsetPointerAndSwitchVRAM
+ jr LoadGfxDataFromTempPointer
Func_80279: ; 80279 (20:4279)
call Func_802bb
-asm_8027c:
+
+; loads graphics data pointed by wTempPointer in wTempPointerBank
+; to wVRAMPointer
+LoadGfxDataFromTempPointer:
push hl
push bc
push de
- ld a, [wd4c8]
+ ld a, [wCurSpriteNumTiles]
ld b, a
- ld a, [wd4c7]
+ ld a, [wCurSpriteTileSize]
ld c, a
- ld hl, wd4c2
+ ld hl, wVRAMPointer
ld e, [hl]
inc hl
ld d, [hl]
@@ -350,23 +360,30 @@ asm_8027c:
ld l, a
inc hl
inc hl
- call Func_395a
+ call CopyGfxDataFromTempBank
call BankswitchVRAM0
pop de
pop bc
pop hl
ret
-Func_8029f: ; 8029f (20:429f)
- ld a, [wd4ca]
+; convert wVRAMTileOffset to address in VRAM
+; and stores it in wVRAMPointer
+; switches VRAM according to wd4cb
+GetTileOffsetPointerAndSwitchVRAM: ; 8029f (20:429f)
+; address of the tile offset is wVRAMTileOffset * $10 + $8000
+ ld a, [wVRAMTileOffset]
swap a
push af
and $f0
- ld [wd4c2], a
+ ld [wVRAMPointer], a
pop af
and $f
- add $80
- ld [wd4c3], a
+ add HIGH(v0Tiles0) ; $80
+ ld [wVRAMPointer + 1], a
+
+; if bottom bit in wd4cb is not set = VRAM0
+; if bottom bit in wd4cb is set = VRAM1
ld a, [wd4cb]
and $1
call BankswitchVRAM
@@ -377,10 +394,10 @@ Func_802bb: ; 802bb (20:42bb)
push af
xor $80
ld [wd4ca], a
- call Func_8029f
- ld a, [wd4c3]
+ call GetTileOffsetPointerAndSwitchVRAM
+ ld a, [wVRAMPointer + 1]
add $8
- ld [wd4c3], a
+ ld [wVRAMPointer + 1], a
pop af
ld [wd4ca], a
ret
@@ -398,10 +415,145 @@ Func_803b9: ; 803b9 (20:43b9)
ret
; 0x803c9
- INCROM $803c9, $80418
+ INCROM $803c9, $803ec
+
+; copies from palette data in hl c bytes to palette index b
+; in WRAM, starting from wBackgroundPalettesCGB
+; b = palette index
+; c = palette size
+; hl = palette data to copy
+LoadPaletteData: ; 803ec (20:43ec)
+ push hl
+ push bc
+ push de
+ ld a, b
+ cp NUM_BACKGROUND_PALETTES + NUM_OBJECT_PALETTES ; total palettes available
+ jr nc, .fail_return
+
+ add a ; 2 * index
+ add a ; 4 * index
+ add a ; 8 * index
+ add LOW(wBackgroundPalettesCGB)
+ ld e, a
+ ld a, HIGH(wBackgroundPalettesCGB)
+ adc 0
+ ld d, a
+
+ ld a, c
+ cp $09
+ jr nc, .fail_return
+
+ add a ; 2 * size
+ add a ; 4 * size
+ add a ; 8 * size
+ ld c, a
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+ call FlushAllPalettes
+ jr .success_return
+
+.fail_return
+ debug_ret
+
+.success_return
+ pop de
+ pop bc
+ pop hl
+ ret
+; 0x80418
Func_80418: ; 80418 (20:4418)
- INCROM $80418, $80480
+ push hl
+ push bc
+ push de
+ call CopyPaletteDataToBuffer
+
+ ld hl, wd23e
+ ld a, [hli] ; number palettes
+ ld c, a
+ or a
+ jr z, .check_palette_size
+
+ ld a, [wd4ca]
+ cp $01
+ jr z, .obp1
+
+ ld a, [hli] ; pallete for OBP0
+ push hl
+ push bc
+ call SetOBP0
+ pop bc
+ pop hl
+ dec c
+ jr z, .check_palette_size
+
+.obp1
+ ld a, [hli]
+ push hl
+ push bc
+ call SetOBP1 ; pallete for OBP1
+ pop bc
+ pop hl
+ dec c
+ jr z, .check_palette_size
+ inc hl
+
+.check_palette_size
+ ld a, [hli]
+ or a
+ jr z, .done
+
+; non-zero size, so load it from data
+ ld c, a
+ ld a, [wd4cb]
+ ; ensure it's a palette index starting from wObjectPalettesCGB
+ or NUM_BACKGROUND_PALETTES
+ ld b, a
+ call LoadPaletteData
+
+.done
+ pop de
+ pop bc
+ pop hl
+ ret
+; 0x80456
+
+; copies palette data of index in a to wd23e
+CopyPaletteDataToBuffer: ; 80456 (20:4456)
+ push hl
+ push bc
+ push de
+ ld l, $08
+ call GetMapDataPointer
+ call LoadGraphicsPointerFromHL
+
+; size parameter
+ ld a, [hl]
+ ld b, a
+ and $0f
+ inc a
+ ld c, a
+ ld a, b
+ and $f0
+ srl a
+ inc a
+ add c
+ ld c, a
+ ld b, $00
+
+ ld de, wd23e
+ call CopyBankedDataToDE
+ pop de
+ pop bc
+ pop hl
+ ret
+; 0x8047b
+
+ INCROM $8047b, $80480
Func_80480: ; 80480 (20:4480)
INCROM $80480, $804d8
@@ -524,7 +676,6 @@ SpriteNullAnimationFrame:
db 0
; might be closer to "screen specific data" than map data
-; data in each section is 4 bytes long.
MapDataPointers: ; 80e5d (20:4e5d)
dw MapDataPointers_80e67
dw MapDataPointers_8100f
@@ -533,17 +684,699 @@ MapDataPointers: ; 80e5d (20:4e5d)
dw MapDataPointers_81697
MapDataPointers_80e67: ; 80e67 (20:4e67)
- INCROM $80e67, $8100f
+ db $1b, $59, $00, $00
+ db $22, $5a, $00, $00
+ db $13, $5c, $00, $01
+ db $2e, $5d, $00, $01
+ db $d1, $5e, $00, $01
+ db $f5, $5e, $00, $01
+ db $26, $5f, $00, $01
+ db $eb, $5f, $00, $01
+ db $43, $61, $00, $01
+ db $50, $61, $00, $01
+ db $60, $61, $00, $02
+ db $22, $62, $00, $02
+ db $36, $63, $00, $03
+ db $00, $64, $00, $03
+ db $1d, $65, $00, $03
+ db $e7, $65, $00, $03
+ db $04, $67, $00, $03
+ db $ce, $67, $00, $03
+ db $eb, $68, $00, $03
+ db $b5, $69, $00, $03
+ db $d2, $6a, $00, $03
+ db $9c, $6b, $00, $03
+ db $b9, $6c, $00, $03
+ db $83, $6d, $00, $03
+ db $a0, $6e, $00, $03
+ db $6a, $6f, $00, $03
+ db $87, $70, $00, $03
+ db $51, $71, $00, $03
+ db $6e, $72, $00, $03
+ db $21, $73, $00, $03
+ db $24, $74, $00, $04
+ db $45, $75, $00, $04
+ db $db, $76, $00, $05
+ db $8c, $77, $00, $05
+ db $8d, $78, $00, $06
+ db $d6, $79, $00, $06
+ db $00, $40, $01, $07
+ db $88, $41, $01, $07
+ db $bb, $43, $01, $08
+ db $33, $45, $01, $08
+ db $2e, $47, $01, $09
+ db $d8, $48, $01, $09
+ db $73, $4b, $01, $0a
+ db $6f, $4c, $01, $0a
+ db $fe, $4d, $01, $0b
+ db $1d, $4f, $01, $0b
+ db $b6, $50, $01, $0c
+ db $91, $51, $01, $0c
+ db $15, $53, $01, $0d
+ db $b3, $54, $01, $0d
+ db $0a, $57, $01, $0e
+ db $ce, $57, $01, $0e
+ db $f1, $7b, $00, $0e
+ db $03, $7c, $00, $0e
+ db $ef, $58, $01, $0f
+ db $79, $5a, $01, $0f
+ db $1a, $7c, $00, $0f
+ db $26, $7c, $00, $0f
+ db $e2, $5c, $01, $10
+ db $f4, $5d, $01, $10
+ db $7c, $5f, $01, $11
+ db $7f, $60, $01, $11
+ db $36, $7c, $00, $12
+ db $7d, $61, $01, $12
+ db $93, $61, $01, $12
+ db $a9, $61, $01, $12
+ db $bf, $61, $01, $12
+ db $d5, $61, $01, $12
+ db $eb, $61, $01, $12
+ db $01, $62, $01, $12
+ db $17, $62, $01, $13
+ db $da, $62, $01, $13
+ db $64, $63, $01, $13
+ db $43, $64, $01, $13
+ db $df, $64, $01, $14
+ db $b5, $65, $01, $14
+ db $47, $66, $01, $15
+ db $b8, $66, $01, $16
+ db $3e, $67, $01, $17
+ db $af, $67, $01, $18
+ db $33, $68, $01, $19
+ db $a4, $68, $01, $1a
+ db $25, $69, $01, $1b
+ db $96, $69, $01, $1c
+ db $14, $6a, $01, $1d
+ db $85, $6a, $01, $1e
+ db $28, $6b, $01, $1f
+ db $99, $6b, $01, $20
+ db $34, $6c, $01, $21
+ db $a5, $6c, $01, $22
+ db $37, $6d, $01, $23
+ db $cc, $6d, $01, $24
+ db $8a, $6e, $01, $25
+ db $18, $6f, $01, $25
+ db $c0, $6f, $01, $25
+ db $4f, $70, $01, $26
+ db $a5, $71, $01, $27
+ db $97, $73, $01, $28
+ db $b7, $73, $01, $29
+ db $e5, $73, $01, $2a
+ db $13, $74, $01, $2b
+ db $38, $75, $01, $2c
+ db $9f, $76, $01, $2d
+ db $f6, $76, $01, $2d
+ db $7c, $77, $01, $2e
+ db $c4, $77, $01, $2f
MapDataPointers_8100f: ; 8100f (20:500f)
- INCROM $8100f, $8116b
+ db $00, $40, $02, $c1
+ db $12, $4c, $02, $97
+ db $28, $78, $01, $4d
+ db $84, $55, $02, $81
+ db $96, $5d, $02, $78
+ db $18, $65, $02, $63
+ db $4a, $6b, $02, $3c
+ db $0c, $6f, $02, $a1
+ db $00, $40, $03, $83
+ db $1e, $79, $02, $57
+ db $32, $48, $03, $3a
+ db $d4, $4b, $03, $52
+ db $f6, $50, $03, $57
+ db $68, $56, $03, $9d
+ db $3a, $60, $03, $4e
+ db $1c, $65, $03, $cf
+ db $0e, $72, $03, $79
+ db $00, $40, $04, $bd
+ db $a0, $79, $03, $48
+ db $d2, $4b, $04, $6d
+ db $a4, $52, $04, $5d
+ db $76, $58, $04, $60
+ db $78, $5e, $04, $56
+ db $da, $63, $04, $60
+ db $dc, $69, $04, $56
+ db $3e, $6f, $04, $60
+ db $40, $75, $04, $56
+ db $00, $40, $05, $60
+ db $02, $46, $05, $56
+ db $64, $4b, $05, $60
+ db $66, $51, $05, $60
+ db $68, $57, $05, $60
+ db $6a, $5d, $05, $60
+ db $6c, $63, $05, $60
+ db $6e, $69, $05, $60
+ db $70, $6f, $05, $61
+ db $82, $75, $05, $61
+ db $fa, $7c, $01, $04
+ db $00, $40, $06, $f4
+ db $42, $4f, $06, $3b
+ db $3c, $7d, $01, $04
+ db $7e, $7d, $01, $24
+ db $a2, $7a, $04, $24
+ db $f4, $62, $06, $dc
+ db $b6, $70, $06, $d4
+ db $e4, $7c, $04, $24
+ db $22, $7e, $03, $18
+ db $94, $7b, $05, $31
+ db $00, $40, $07, $24
+ db $42, $42, $07, $24
+ db $84, $44, $07, $24
+ db $c6, $46, $07, $24
+ db $08, $49, $07, $24
+ db $4a, $4b, $07, $24
+ db $8c, $4d, $07, $24
+ db $ce, $4f, $07, $24
+ db $10, $52, $07, $24
+ db $52, $54, $07, $24
+ db $94, $56, $07, $24
+ db $d6, $58, $07, $24
+ db $18, $5b, $07, $24
+ db $5a, $5d, $07, $24
+ db $9c, $5f, $07, $24
+ db $de, $61, $07, $24
+ db $20, $64, $07, $24
+ db $62, $66, $07, $24
+ db $a4, $68, $07, $24
+ db $e6, $6a, $07, $24
+ db $28, $6d, $07, $24
+ db $6a, $6f, $07, $24
+ db $ac, $71, $07, $24
+ db $ee, $73, $07, $24
+ db $30, $76, $07, $24
+ db $72, $78, $07, $24
+ db $b4, $7a, $07, $24
+ db $f6, $7c, $07, $24
+ db $00, $40, $08, $24
+ db $42, $42, $08, $24
+ db $84, $44, $08, $24
+ db $c6, $46, $08, $24
+ db $08, $49, $08, $24
+ db $4a, $4b, $08, $24
+ db $8c, $4d, $08, $24
+ db $ce, $4f, $08, $24
+ db $10, $52, $08, $24
+ db $52, $54, $08, $24
+ db $94, $56, $08, $24
MapDataPointers_8116b: ; 8116b (20:516b)
- INCROM $8116b, $81333
+ db $90, $7e, $02, $14
+ db $a6, $7e, $05, $14
+ db $f8, $7d, $06, $14
+ db $d6, $58, $08, $14
+ db $18, $5a, $08, $14
+ db $5a, $5b, $08, $14
+ db $9c, $5c, $08, $14
+ db $de, $5d, $08, $14
+ db $20, $5f, $08, $1b
+ db $d2, $60, $08, $14
+ db $14, $62, $08, $14
+ db $56, $63, $08, $14
+ db $98, $64, $08, $14
+ db $da, $65, $08, $14
+ db $1c, $67, $08, $14
+ db $5e, $68, $08, $14
+ db $a0, $69, $08, $14
+ db $e2, $6a, $08, $14
+ db $24, $6c, $08, $14
+ db $66, $6d, $08, $14
+ db $a8, $6e, $08, $14
+ db $ea, $6f, $08, $14
+ db $2c, $71, $08, $14
+ db $6e, $72, $08, $14
+ db $b0, $73, $08, $14
+ db $f2, $74, $08, $14
+ db $34, $76, $08, $14
+ db $76, $77, $08, $14
+ db $b8, $78, $08, $14
+ db $fa, $79, $08, $14
+ db $3c, $7b, $08, $14
+ db $7e, $7c, $08, $14
+ db $c0, $7d, $08, $14
+ db $26, $7f, $04, $08
+ db $00, $40, $09, $14
+ db $42, $41, $09, $14
+ db $84, $42, $09, $14
+ db $3a, $7f, $06, $08
+ db $c6, $43, $09, $16
+ db $38, $7f, $07, $0a
+ db $02, $7f, $08, $0b
+ db $28, $45, $09, $06
+ db $8a, $45, $09, $08
+ db $c0, $7f, $01, $02
+ db $a4, $7f, $03, $04
+ db $0c, $46, $09, $09
+ db $9e, $46, $09, $12
+ db $c0, $47, $09, $09
+ db $52, $48, $09, $11
+ db $a8, $7f, $04, $03
+ db $64, $49, $09, $2d
+ db $36, $4c, $09, $0d
+ db $08, $4d, $09, $1c
+ db $ca, $4e, $09, $4c
+ db $bc, $7f, $06, $03
+ db $8c, $53, $09, $1b
+ db $3e, $55, $09, $07
+ db $b0, $55, $09, $0c
+ db $ee, $7f, $06, $01
+ db $72, $56, $09, $22
+ db $94, $58, $09, $20
+ db $96, $5a, $09, $0a
+ db $38, $5b, $09, $25
+ db $8a, $5d, $09, $18
+ db $0c, $5f, $09, $1b
+ db $be, $60, $09, $08
+ db $40, $61, $09, $0d
+ db $12, $62, $09, $22
+ db $34, $64, $09, $0c
+ db $f6, $64, $09, $25
+ db $48, $67, $09, $22
+ db $6a, $69, $09, $0c
+ db $2c, $6a, $09, $4c
+ db $ee, $6e, $09, $08
+ db $70, $6f, $09, $07
+ db $e2, $7f, $01, $01
+ db $e2, $6f, $09, $1a
+ db $84, $71, $09, $0a
+ db $26, $72, $09, $2e
+ db $08, $75, $09, $08
+ db $8a, $75, $09, $07
+ db $fc, $75, $09, $1c
+ db $b4, $7f, $08, $04
+ db $be, $77, $09, $08
+ db $40, $78, $09, $0b
+ db $d2, $7f, $02, $01
+ db $f2, $78, $09, $1c
+ db $b4, $7a, $09, $16
+ db $16, $7c, $09, $10
+ db $18, $7d, $09, $0f
+ db $0a, $7e, $09, $07
+ db $7c, $7e, $09, $0a
+ db $1e, $7f, $09, $09
+ db $da, $7f, $04, $02
+ db $da, $7f, $07, $02
+ db $b0, $7f, $09, $03
+ db $00, $40, $0a, $08
+ db $82, $40, $0a, $0f
+ db $74, $41, $0a, $03
+ db $a6, $41, $0a, $05
+ db $f8, $41, $0a, $17
+ db $6a, $43, $0a, $36
+ db $cc, $46, $0a, $0b
+ db $7e, $47, $0a, $06
+ db $e0, $47, $0a, $16
+ db $42, $49, $0a, $20
+ db $44, $4b, $0a, $14
+ db $86, $4c, $0a, $04
+ db $c8, $4c, $0a, $04
+ db $0a, $4d, $0a, $04
+ db $4c, $4d, $0a, $04
+ db $8e, $4d, $0a, $04
+ db $d0, $4d, $0a, $04
+ db $12, $4e, $0a, $04
; pointer low, pointer high, bank (minus $20), unknown
SpriteAnimationPointers: ; 81333 (20:5333)
- INCROM $81333, $81697
+ db $54, $4e, $0a, $00
+ db $4c, $7c, $00, $00
+ db $e4, $7f, $02, $00
+ db $e6, $7f, $03, $00
+ db $29, $4f, $0a, $00
+ db $e8, $7f, $05, $00
+ db $e2, $7f, $09, $00
+ db $fe, $4f, $0a, $00
+ db $0d, $50, $0a, $00
+ db $64, $50, $0a, $00
+ db $7b, $50, $0a, $00
+ db $f5, $7f, $03, $00
+ db $f4, $7f, $01, $00
+ db $d2, $50, $0a, $00
+ db $dd, $50, $0a, $00
+ db $b2, $51, $0a, $00
+ db $c1, $51, $0a, $00
+ db $d8, $51, $0a, $00
+ db $e7, $51, $0a, $00
+ db $bc, $52, $0a, $00
+ db $cb, $52, $0a, $00
+ db $e2, $52, $0a, $00
+ db $f1, $52, $0a, $00
+ db $c6, $53, $0a, $00
+ db $d5, $53, $0a, $00
+ db $ec, $53, $0a, $00
+ db $fb, $53, $0a, $00
+ db $d0, $54, $0a, $00
+ db $df, $54, $0a, $00
+ db $f6, $54, $0a, $00
+ db $05, $55, $0a, $00
+ db $da, $55, $0a, $00
+ db $e9, $55, $0a, $00
+ db $00, $56, $0a, $00
+ db $0f, $56, $0a, $00
+ db $e4, $56, $0a, $00
+ db $f3, $56, $0a, $00
+ db $0a, $57, $0a, $00
+ db $19, $57, $0a, $00
+ db $ee, $57, $0a, $00
+ db $fd, $57, $0a, $00
+ db $14, $58, $0a, $00
+ db $23, $58, $0a, $00
+ db $f8, $58, $0a, $00
+ db $07, $59, $0a, $00
+ db $1e, $59, $0a, $00
+ db $2d, $59, $0a, $00
+ db $84, $59, $0a, $00
+ db $9b, $59, $0a, $00
+ db $f2, $59, $0a, $00
+ db $fd, $59, $0a, $00
+ db $08, $5a, $0a, $00
+ db $13, $5a, $0a, $00
+ db $71, $5a, $0a, $00
+ db $80, $5a, $0a, $00
+ db $8f, $5a, $0a, $00
+ db $ed, $5a, $0a, $00
+ db $fc, $5a, $0a, $00
+ db $0b, $5b, $0a, $00
+ db $6e, $5b, $0a, $00
+ db $13, $5d, $0a, $00
+ db $6a, $5d, $0a, $00
+ db $c1, $5d, $0a, $00
+ db $18, $5e, $0a, $00
+ db $6f, $5e, $0a, $00
+ db $c6, $5e, $0a, $00
+ db $6b, $60, $0a, $00
+ db $c2, $60, $0a, $00
+ db $19, $61, $0a, $00
+ db $70, $61, $0a, $00
+ db $c7, $61, $0a, $00
+ db $1e, $62, $0a, $00
+ db $06, $63, $0a, $00
+ db $e7, $63, $0a, $00
+ db $d5, $64, $0a, $00
+ db $18, $66, $0a, $00
+ db $0f, $67, $0a, $00
+ db $9b, $68, $0a, $00
+ db $ba, $68, $0a, $00
+ db $e1, $68, $0a, $00
+ db $d7, $69, $0a, $00
+ db $5e, $6a, $0a, $00
+ db $e5, $6a, $0a, $00
+ db $6c, $6b, $0a, $00
+ db $f3, $6b, $0a, $00
+ db $7a, $6c, $0a, $00
+ db $01, $6d, $0a, $00
+ db $88, $6d, $0a, $00
+ db $0f, $6e, $0a, $00
+ db $96, $6e, $0a, $00
+ db $1d, $6f, $0a, $00
+ db $a4, $6f, $0a, $00
+ db $2b, $70, $0a, $00
+ db $fb, $70, $0a, $00
+ db $06, $71, $0a, $00
+ db $bb, $72, $0a, $00
+ db $05, $74, $0a, $00
+ db $6e, $76, $0a, $00
+ db $c1, $79, $0a, $00
+ db $0c, $7a, $0a, $00
+ db $00, $40, $0b, $00
+ db $cf, $7b, $0a, $00
+ db $fe, $7b, $0a, $00
+ db $11, $7c, $0a, $00
+ db $78, $7c, $0a, $00
+ db $eb, $7c, $0a, $00
+ db $a6, $7e, $0a, $00
+ db $03, $48, $0b, $00
+ db $16, $4a, $0b, $00
+ db $4c, $4b, $0b, $00
+ db $b6, $50, $0b, $00
+ db $64, $53, $0b, $00
+ db $c1, $54, $0b, $00
+ db $29, $58, $0b, $00
+ db $eb, $5a, $0b, $00
+ db $c5, $5d, $0b, $00
+ db $0c, $5e, $0b, $00
+ db $ee, $5f, $0b, $00
+ db $59, $60, $0b, $00
+ db $d4, $60, $0b, $00
+ db $bb, $62, $0b, $00
+ db $86, $65, $0b, $00
+ db $d9, $65, $0b, $00
+ db $7f, $67, $0b, $00
+ db $db, $6d, $0b, $00
+ db $f0, $6f, $0b, $00
+ db $1b, $71, $0b, $00
+ db $36, $73, $0b, $00
+ db $29, $78, $0b, $00
+ db $9f, $79, $0b, $00
+ db $8e, $7e, $0b, $00
+ db $00, $40, $0c, $00
+ db $b4, $41, $0c, $00
+ db $b6, $45, $0c, $00
+ db $d5, $49, $0c, $00
+ db $7b, $4c, $0c, $00
+ db $c6, $4d, $0c, $00
+ db $fd, $4e, $0c, $00
+ db $e2, $4f, $0c, $00
+ db $45, $51, $0c, $00
+ db $21, $54, $0c, $00
+ db $01, $57, $0c, $00
+ db $a0, $5a, $0c, $00
+ db $bc, $5c, $0c, $00
+ db $b1, $5d, $0c, $00
+ db $51, $5e, $0c, $00
+ db $d4, $5e, $0c, $00
+ db $7c, $60, $0c, $00
+ db $e3, $62, $0c, $00
+ db $ec, $7f, $0a, $00
+ db $c1, $7f, $0b, $00
+ db $d2, $64, $0c, $00
+ db $f4, $65, $0c, $00
+ db $63, $66, $0c, $00
+ db $17, $67, $0c, $00
+ db $7f, $67, $0c, $00
+ db $63, $69, $0c, $00
+ db $ea, $69, $0c, $00
+ db $e7, $6d, $0c, $00
+ db $f3, $73, $0c, $00
+ db $1e, $74, $0c, $00
+ db $49, $74, $0c, $00
+ db $dc, $7f, $0b, $00
+ db $74, $74, $0c, $00
+ db $97, $74, $0c, $00
+ db $ba, $74, $0c, $00
+ db $f3, $7f, $0b, $00
+ db $dd, $74, $0c, $00
+ db $cd, $75, $0c, $00
+ db $5c, $76, $0c, $00
+ db $eb, $76, $0c, $00
+ db $f6, $76, $0c, $00
+ db $01, $77, $0c, $00
+ db $e9, $78, $0c, $00
+ db $f8, $78, $0c, $00
+ db $07, $79, $0c, $00
+ db $34, $7d, $0c, $00
+ db $c3, $7d, $0c, $00
+ db $00, $40, $0d, $00
+ db $d2, $7d, $0c, $00
+ db $61, $7e, $0c, $00
+ db $2d, $44, $0d, $00
+ db $70, $7e, $0c, $00
+ db $41, $4a, $0d, $00
+ db $7f, $7e, $0c, $00
+ db $55, $50, $0d, $00
+ db $8e, $7e, $0c, $00
+ db $6f, $52, $0d, $00
+ db $9d, $7e, $0c, $00
+ db $ac, $7e, $0c, $00
+ db $3e, $7f, $0c, $00
+ db $89, $54, $0d, $00
+ db $eb, $54, $0d, $00
+ db $69, $56, $0d, $00
+ db $d4, $57, $0d, $00
+ db $ca, $59, $0d, $00
+ db $a0, $7f, $0c, $00
+ db $91, $5a, $0d, $00
+ db $cf, $5c, $0d, $00
+ db $d2, $5d, $0d, $00
+ db $f5, $5d, $0d, $00
+ db $0b, $60, $0d, $00
+ db $d2, $60, $0d, $00
+ db $1d, $61, $0d, $00
+ db $ab, $62, $0d, $00
+ db $d6, $63, $0d, $00
+ db $09, $64, $0d, $00
+ db $b7, $65, $0d, $00
+ db $e2, $66, $0d, $00
+ db $15, $67, $0d, $00
+ db $33, $69, $0d, $00
+ db $36, $6a, $0d, $00
+ db $59, $6a, $0d, $00
+ db $e7, $6b, $0d, $00
+ db $ae, $6c, $0d, $00
+ db $31, $6d, $0d, $00
+ db $67, $70, $0d, $00
MapDataPointers_81697: ; 81697 (20:5697)
- INCROM $81697, $84000
+ db $8a, $73, $0d, $81
+ db $cd, $73, $0d, $80
+ db $0f, $74, $0d, $80
+ db $51, $74, $0d, $80
+ db $93, $74, $0d, $80
+ db $d5, $74, $0d, $80
+ db $17, $75, $0d, $80
+ db $59, $75, $0d, $80
+ db $9b, $75, $0d, $80
+ db $dd, $75, $0d, $80
+ db $1f, $76, $0d, $80
+ db $61, $76, $0d, $80
+ db $a3, $76, $0d, $80
+ db $e5, $76, $0d, $80
+ db $27, $77, $0d, $80
+ db $69, $77, $0d, $80
+ db $ab, $77, $0d, $80
+ db $ed, $77, $0d, $80
+ db $2f, $78, $0d, $80
+ db $71, $78, $0d, $80
+ db $b3, $78, $0d, $80
+ db $f5, $78, $0d, $80
+ db $37, $79, $0d, $80
+ db $79, $79, $0d, $80
+ db $bb, $79, $0d, $80
+ db $fd, $79, $0d, $80
+ db $3f, $7a, $0d, $80
+ db $81, $7a, $0d, $80
+ db $c3, $7a, $0d, $80
+ db $05, $7b, $0d, $82
+ db $49, $7b, $0d, $82
+ db $eb, $7f, $0c, $11
+ db $8d, $7b, $0d, $11
+ db $98, $7b, $0d, $11
+ db $a3, $7b, $0d, $11
+ db $ae, $7b, $0d, $11
+ db $b9, $7b, $0d, $11
+ db $c4, $7b, $0d, $11
+ db $cf, $7b, $0d, $11
+ db $da, $7b, $0d, $11
+ db $e5, $7b, $0d, $11
+ db $f0, $7b, $0d, $11
+ db $fb, $7b, $0d, $11
+ db $06, $7c, $0d, $11
+ db $11, $7c, $0d, $11
+ db $1c, $7c, $0d, $11
+ db $27, $7c, $0d, $11
+ db $32, $7c, $0d, $11
+ db $3d, $7c, $0d, $11
+ db $48, $7c, $0d, $11
+ db $53, $7c, $0d, $11
+ db $5e, $7c, $0d, $11
+ db $69, $7c, $0d, $11
+ db $74, $7c, $0d, $11
+ db $7f, $7c, $0d, $11
+ db $8a, $7c, $0d, $11
+ db $95, $7c, $0d, $11
+ db $a0, $7c, $0d, $11
+ db $ab, $7c, $0d, $11
+ db $b6, $7c, $0d, $11
+ db $c1, $7c, $0d, $11
+ db $cc, $7c, $0d, $11
+ db $d7, $7c, $0d, $11
+ db $e2, $7c, $0d, $11
+ db $ed, $7c, $0d, $11
+ db $f8, $7c, $0d, $11
+ db $03, $7d, $0d, $11
+ db $0e, $7d, $0d, $11
+ db $19, $7d, $0d, $11
+ db $24, $7d, $0d, $11
+ db $2f, $7d, $0d, $11
+ db $3a, $7d, $0d, $11
+ db $45, $7d, $0d, $11
+ db $50, $7d, $0d, $11
+ db $5b, $7d, $0d, $11
+ db $66, $7d, $0d, $11
+ db $71, $7d, $0d, $11
+ db $7c, $7d, $0d, $11
+ db $87, $7d, $0d, $11
+ db $92, $7d, $0d, $11
+ db $9d, $7d, $0d, $11
+ db $a8, $7d, $0d, $11
+ db $b3, $7d, $0d, $11
+ db $be, $7d, $0d, $11
+ db $c9, $7d, $0d, $11
+ db $d4, $7d, $0d, $11
+ db $df, $7d, $0d, $11
+ db $ea, $7d, $0d, $11
+ db $f5, $7d, $0d, $11
+ db $00, $7e, $0d, $11
+ db $0b, $7e, $0d, $11
+ db $16, $7e, $0d, $11
+ db $21, $7e, $0d, $11
+ db $2c, $7e, $0d, $11
+ db $37, $7e, $0d, $80
+ db $79, $7e, $0d, $80
+ db $bb, $7e, $0d, $80
+ db $fd, $7e, $0d, $80
+ db $3f, $7f, $0d, $80
+ db $81, $7f, $0d, $80
+ db $00, $40, $0e, $80
+ db $c3, $7f, $0d, $70
+ db $42, $40, $0e, $70
+ db $7c, $40, $0e, $70
+ db $b6, $40, $0e, $70
+ db $f0, $40, $0e, $70
+ db $2a, $41, $0e, $70
+ db $64, $41, $0e, $70
+ db $fd, $7f, $0d, $01
+ db $fb, $7f, $02, $01
+ db $5b, $7c, $00, $00
+ db $9e, $41, $0e, $81
+ db $e1, $41, $0e, $81
+ db $24, $42, $0e, $81
+ db $67, $42, $0e, $42
+ db $8b, $42, $0e, $42
+ db $af, $42, $0e, $42
+ db $f6, $7f, $08, $10
+ db $d3, $42, $0e, $60
+ db $f6, $7f, $0c, $10
+ db $05, $43, $0e, $10
+ db $0f, $43, $0e, $10
+ db $19, $43, $0e, $10
+ db $23, $43, $0e, $10
+ db $2d, $43, $0e, $10
+ db $37, $43, $0e, $10
+ db $41, $43, $0e, $10
+ db $4b, $43, $0e, $10
+ db $55, $43, $0e, $10
+ db $5f, $43, $0e, $10
+ db $69, $43, $0e, $10
+ db $73, $43, $0e, $10
+ db $7d, $43, $0e, $10
+ db $87, $43, $0e, $10
+ db $91, $43, $0e, $10
+ db $9b, $43, $0e, $10
+ db $a5, $43, $0e, $10
+ db $af, $43, $0e, $10
+ db $b9, $43, $0e, $10
+ db $c3, $43, $0e, $10
+ db $cd, $43, $0e, $10
+ db $d7, $43, $0e, $10
+ db $e1, $43, $0e, $10
+ db $eb, $43, $0e, $10
+ db $f5, $43, $0e, $10
+ db $ff, $43, $0e, $10
+ db $09, $44, $0e, $10
+ db $13, $44, $0e, $10
+ db $1d, $44, $0e, $10
+ db $27, $44, $0e, $10
+ db $31, $44, $0e, $10
+ db $3b, $44, $0e, $10
+ db $45, $44, $0e, $10
+ db $4f, $44, $0e, $10
+ db $59, $44, $0e, $10
+ db $63, $44, $0e, $10
+ db $6d, $44, $0e, $10
+ db $77, $44, $0e, $10
+ db $81, $44, $0e, $10
+ db $8b, $44, $0e, $10
+ db $95, $44, $0e, $10
+
+ INCROM $8191b, $84000
diff --git a/src/engine/home.asm b/src/engine/home.asm
index a5125c4..ac9e9c0 100644
--- a/src/engine/home.asm
+++ b/src/engine/home.asm
@@ -10739,7 +10739,8 @@ GetPermissionByteOfMapPosition: ; 3946 (0:3946)
pop bc
ret
-Func_395a: ; 395a (0:395a)
+; copy c bytes of data from hl in bank wTempPointerBank to de, b times.
+CopyGfxDataFromTempBank: ; 395a (0:395a)
ldh a, [hBankROM]
push af
ld a, [wTempPointerBank]
@@ -11072,7 +11073,6 @@ Func_3b21: ; 3b21 (0:3b21)
ld a, BANK(Func_1c8bc)
call BankswitchROM
call Func_1c8bc
-
pop af
call BankswitchROM
ret
@@ -11115,32 +11115,39 @@ CheckAnyAnimationPlaying: ; 3b52 (0:3b52)
pop hl
ret
+; input:
+; - a = animation index
Func_3b6a: ; 3b6a (0:3b6a)
ld [wTempAnimation], a ; hold an animation temporarily
ldh a, [hBankROM]
push af
ld [wd4be], a
+
push hl
push bc
push de
- ld a, $07
+ ld a, BANK(Func_1ca31)
call BankswitchROM
ld a, [wTempAnimation]
cp $61
jr nc, .asm_3b90
+
ld hl, wd4ad
ld a, [wd4ac]
cp [hl]
jr nz, .asm_3b90
call CheckAnyAnimationPlaying
jr nc, .asm_3b95
+
.asm_3b90
- call $4a31
- jr .asm_3b9a
+ call Func_1ca31
+ jr .done
+
.asm_3b95
- call $48ef
- jr .asm_3b9a
-.asm_3b9a
+ call Func_1c8ef
+ jr .done
+
+.done
pop de
pop bc
pop hl
@@ -11151,9 +11158,9 @@ Func_3b6a: ; 3b6a (0:3b6a)
Func_3ba2: ; 3ba2 (0:3ba2)
ldh a, [hBankROM]
push af
- ld a, $07
+ ld a, BANK(Func_1cac5)
call BankswitchROM
- call $4ac5
+ call Func_1cac5
call Func_3cb4
pop af
call BankswitchROM
@@ -11535,6 +11542,8 @@ GetAnimationFramePointer: ; 3d72 (0:3d72)
call BankswitchROM
ret
+; return hl pointing to the start of a sprite in wSpriteAnimBuffer.
+; the sprite is identified by its index in wWhichSprite.
GetFirstSpriteAnimBufferProperty: ; 3db7 (0:3db7)
push bc
ld c, SPRITE_ANIM_ENABLED
diff --git a/src/macros/wram.asm b/src/macros/wram.asm
index 8545972..7b8456b 100644
--- a/src/macros/wram.asm
+++ b/src/macros/wram.asm
@@ -76,3 +76,10 @@ loaded_npc_struct: MACRO
\1Field0x0a:: ds 1
\1Field0x0b:: ds 1
ENDM
+
+sprite_vram_struct: MACRO
+\1Valid:: ds 1
+\1ID:: ds 1
+\1TileOffset:: ds 1
+\1TileSize:: ds 1
+ENDM
diff --git a/src/wram.asm b/src/wram.asm
index dc1d91f..4670637 100644
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -571,11 +571,11 @@ wTempSGBPacket:: ; cae0
; temporary CGB palette data buffer to eventually save into BGPD registers.
wBackgroundPalettesCGB:: ; caf0
- ds 8 palettes
+ ds NUM_BACKGROUND_PALETTES palettes
; temporary CGB palette data buffer to eventually save into OBPD registers.
wObjectPalettesCGB:: ; cb30
- ds 8 palettes
+ ds NUM_OBJECT_PALETTES palettes
ds $2
@@ -1203,17 +1203,20 @@ wDefaultYesOrNo:: ; cd9a
wcd9b:: ; cd9b
ds $1
-wcd9c:: ; cd9c
+; stores the total number of coins to flip
+wCoinTossTotalNum:: ; cd9c
ds $1
; this stores the result from a coin toss (number of heads)
wCoinTossNumHeads:: ; cd9d
ds $1
-wcd9e:: ; cd9e
+; stores type of the duelist that is tossing coins
+wCoinTossDuelistType:: ; cd9e
ds $1
-wcd9f:: ; cd9f
+; holds the number of coins that have already been tossed
+wCoinTossNumTossed:: ; cd9f
ds $1
ds $5
@@ -2143,7 +2146,12 @@ wd291:: ; d291
wd292:: ; d292
ds $1
- ds $90
+ ds $4
+
+wd297:: ; d297
+ ds 8 palettes
+
+ ds $4c
wd323:: ; d323
ds $1
@@ -2354,6 +2362,7 @@ wd42a:: ; d42a
wd42b:: ; d42b
ds $1
+wd42c:: ; d42c
ds $80
wd4ac:: ; d4ac
@@ -2380,12 +2389,25 @@ wd4b2:: ; d4b2
wd4b3:: ; d4b3
ds $1
- ds $5
+wd4b4:: ; d4b4
+ ds $1
+
+ ds $2
+
+wd4b7:: ; d4b7
+ ds $1
+
+wd4b8:: ; d4b8
+ ds $1
wd4b9:: ; d4b9
+ ds $2
+
+wd4bb:: ; d4bb
ds $1
- ds $4
+wd4bc:: ; d4bc
+ ds $2
wd4be:: ; d4be
ds $1
@@ -2398,11 +2420,9 @@ wd4c0:: ; d4c0
ds $1
-wd4c2:: ; d4c2
- ds $1
-
-wd4c3:: ; d4c3
- ds $1
+; pointer to address in VRAM
+wVRAMPointer:: ; d4c2
+ ds $2
; these next 3 seem to be an address (bank @ end) for copying bg data
wTempPointer:: ; d4c4
@@ -2411,14 +2431,19 @@ wTempPointer:: ; d4c4
wTempPointerBank:: ; d4c6
ds $1
-wd4c7:: ; d4c7
+; stores number of bytes per tile for current sprite
+wCurSpriteTileSize:: ; d4c7
ds $1
-wd4c8:: ; d4c8
+; stores number of tiles that current sprite has
+wCurSpriteNumTiles:: ; d4c8
ds $1
ds $1
+; stores tile offset in VRAM
+wVRAMTileOffset:: ; d4ca
+
wd4ca:: ; d4ca
ds $1
@@ -2474,11 +2499,26 @@ wd5d6:: ; d5d6
wd5d7:: ; d5d7
ds $1
-wd5d8:: ; d5d8
- ds $40
-
-; seems to be the amount of entries in wd5d8
-wd618:: ; d618
+wSpriteVRAMBuffer:: ; d5d8
+ sprite_vram_struct wSpriteVRAM1
+ sprite_vram_struct wSpriteVRAM2
+ sprite_vram_struct wSpriteVRAM3
+ sprite_vram_struct wSpriteVRAM4
+ sprite_vram_struct wSpriteVRAM5
+ sprite_vram_struct wSpriteVRAM6
+ sprite_vram_struct wSpriteVRAM7
+ sprite_vram_struct wSpriteVRAM8
+ sprite_vram_struct wSpriteVRAM9
+ sprite_vram_struct wSpriteVRAM10
+ sprite_vram_struct wSpriteVRAM11
+ sprite_vram_struct wSpriteVRAM12
+ sprite_vram_struct wSpriteVRAM13
+ sprite_vram_struct wSpriteVRAM14
+ sprite_vram_struct wSpriteVRAM15
+ sprite_vram_struct wSpriteVRAM16
+
+; seems to be the amount of entries in wSpriteVRAMBuffer
+wSpriteVRAMBufferSize:: ; d618
ds $1
ds $2