summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-05 15:18:40 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-05 15:18:40 -0400
commitc9a3048c33b59e25775e90bb707630ddbf978f71 (patch)
treeb5ed448edbdbf130c4ced9e2a4cd90e16ae547b5
parent2f0305d80a0f64c093eabceb434a2fd0c122caa2 (diff)
Split bank 3e
-rw-r--r--constants/music_constants.asm3
-rwxr-xr-xdata/animated_objects_3e_1.asm361
-rwxr-xr-xdata/animated_objects_3e_2.asm236
-rw-r--r--engine/bank3e.asm4499
-rwxr-xr-xengine/surfing_minigame.asm2825
-rwxr-xr-xengine/yellow_intro.asm1072
-rwxr-xr-xwram.asm6
7 files changed, 4503 insertions, 4499 deletions
diff --git a/constants/music_constants.asm b/constants/music_constants.asm
index 6e34bc0d..74d747ba 100644
--- a/constants/music_constants.asm
+++ b/constants/music_constants.asm
@@ -276,9 +276,10 @@ ENDM
music_const SFX_SHOOTING_STAR, SFX_Shooting_Star
; AUDIO_4
+ music_const SFX_UNKNOWN_801B0_4, SFX_801b0_4
music_const SFX_UNKNOWN_801B3_4, SFX_801b3_4
music_const SFX_UNKNOWN_801B6_4, SFX_801b6_4
music_const SFX_UNKNOWN_801B9_4, SFX_801b9_4
music_const SFX_UNKNOWN_801BC_4, SFX_801bc_4
music_const SFX_UNKNOWN_801BF_4, SFX_801bf_4
- music_const SFX_UNKNOWN_GET_ITEM2_4_2, SFX_Get_Item2_4_2
+ music_const SFX_GET_ITEM2_4_2, SFX_Get_Item2_4_2
diff --git a/data/animated_objects_3e_1.asm b/data/animated_objects_3e_1.asm
new file mode 100755
index 00000000..2461c469
--- /dev/null
+++ b/data/animated_objects_3e_1.asm
@@ -0,0 +1,361 @@
+Unkn_f9405:
+ dw Unkn_f943d
+ dw Unkn_f9440
+ dw Unkn_f9445
+ dw Unkn_f944a
+ dw Unkn_f944f
+ dw Unkn_f9454
+ dw Unkn_f9459
+ dw Unkn_f945e
+ dw Unkn_f9463
+ dw Unkn_f9468
+ dw Unkn_f946d
+ dw Unkn_f9472
+ dw Unkn_f9477
+ dw Unkn_f947c
+ dw Unkn_f9481
+ dw Unkn_f9486
+ dw Unkn_f948b
+ dw Unkn_f9494
+ dw Unkn_f9499
+ dw Unkn_f949e
+ dw Unkn_f94fb
+ dw Unkn_f94a1
+ dw Unkn_f94b0
+ dw Unkn_f94bf
+ dw Unkn_f94ce
+ dw Unkn_f94dd
+ dw Unkn_f94ec
+ dw Unkn_f94fe
+
+Unkn_f943d:
+ frame $00, 32
+ endanim
+
+Unkn_f9440:
+ frame $01, 8
+ frame $02, 8
+ dorestart
+
+Unkn_f9445:
+ frame $03, 8
+ frame $04, 8
+ dorestart
+
+Unkn_f944a:
+ frame $05, 8
+ frame $06, 8
+ dorestart
+
+Unkn_f944f:
+ frame $07, 8
+ frame $08, 8
+ dorestart
+
+Unkn_f9454:
+ frame $09, 8
+ frame $0a, 8
+ dorestart
+
+Unkn_f9459:
+ frame $0b, 8
+ frame $0c, 8
+ dorestart
+
+Unkn_f945e:
+ frame $0d, 8
+ frame $0e, 8
+ dorestart
+
+Unkn_f9463:
+ frame $01, 8, OAM_HFLIP, OAM_VFLIP
+ frame $02, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f9468:
+ frame $03, 8, OAM_HFLIP, OAM_VFLIP
+ frame $04, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f946d:
+ frame $05, 8, OAM_HFLIP, OAM_VFLIP
+ frame $06, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f9472:
+ frame $07, 8, OAM_HFLIP, OAM_VFLIP
+ frame $08, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f9477:
+ frame $09, 8, OAM_HFLIP, OAM_VFLIP
+ frame $0a, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f947c:
+ frame $0b, 8, OAM_HFLIP, OAM_VFLIP
+ frame $0c, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f9481:
+ frame $0d, 8, OAM_HFLIP, OAM_VFLIP
+ frame $0e, 8, OAM_HFLIP, OAM_VFLIP
+ dorestart
+
+Unkn_f9486:
+ frame $11, 7
+ frame $12, 7
+ dorestart
+
+Unkn_f948b:
+ frame $13, 2
+ frame $14, 2
+ dorepeat 8
+ frame $15, 2
+ endanim
+
+Unkn_f9494:
+ frame $16, 32
+ frame $16, 32
+ delanim
+
+Unkn_f9499:
+ frame $17, 32
+ frame $17, 32
+ delanim
+
+Unkn_f949e:
+ frame $18, 32
+ endanim
+
+Unkn_f94a1:
+ frame $1a, 4
+ dorepeat 1
+ frame $1a, 3
+ dorepeat 1
+ frame $1a, 2
+ dorepeat 1
+ frame $1a, 1
+ delanim
+
+Unkn_f94b0:
+ frame $1b, 4
+ dorepeat 1
+ frame $1b, 3
+ dorepeat 1
+ frame $1b, 2
+ dorepeat 1
+ frame $1b, 1
+ delanim
+
+Unkn_f94bf:
+ frame $1c, 4
+ dorepeat 1
+ frame $1c, 3
+ dorepeat 1
+ frame $1c, 2
+ dorepeat 1
+ frame $1c, 1
+ delanim
+
+Unkn_f94ce:
+ frame $1d, 4
+ dorepeat 1
+ frame $1d, 3
+ dorepeat 1
+ frame $1d, 2
+ dorepeat 1
+ frame $1d, 1
+ delanim
+
+Unkn_f94dd:
+ frame $1e, 4
+ dorepeat 1
+ frame $1e, 3
+ dorepeat 1
+ frame $1e, 2
+ dorepeat 1
+ frame $1e, 1
+ delanim
+
+Unkn_f94ec:
+ frame $1f, 4
+ dorepeat 1
+ frame $1f, 3
+ dorepeat 1
+ frame $1f, 2
+ dorepeat 1
+ frame $1f, 1
+ delanim
+
+Unkn_f94fb:
+ frame $19, 1
+ delanim
+
+Unkn_f94fe:
+ frame $20, 7
+ frame $21, 7
+ frame $22, 7
+ frame $23, 7
+ dorestart
+
+Unkn_f9507:
+ dbw $00, Unkn_f9573
+ dbw $00, Unkn_f9578
+ dbw $36, Unkn_f9578
+ dbw $03, Unkn_f9578
+ dbw $39, Unkn_f9578
+ dbw $06, Unkn_f9578
+ dbw $3c, Unkn_f9578
+ dbw $09, Unkn_f9578
+ dbw $60, Unkn_f9578
+ dbw $0c, Unkn_f9578
+ dbw $63, Unkn_f9578
+ dbw $30, Unkn_f9578
+ dbw $66, Unkn_f9578
+ dbw $33, Unkn_f9578
+ dbw $69, Unkn_f9578
+ dbw $6c, Unkn_f9578
+ dbw $9c, Unkn_f9578
+ dbw $a0, Unkn_f9578
+ dbw $a3, Unkn_f9578
+ dbw $a7, Unkn_f95db
+ dbw $a8, Unkn_f95f4
+ dbw $98, Unkn_f9625
+ dbw $e0, Unkn_f959d
+ dbw $e6, Unkn_f959d
+ dbw $ca, Unkn_f959d
+ dbw $a7, Unkn_f95ce
+ dbw $00, Unkn_f9632
+ dbw $00, Unkn_f963f
+ dbw $00, Unkn_f9650
+ dbw $00, Unkn_f9661
+ dbw $00, Unkn_f9672
+ dbw $00, Unkn_f9683
+ dbw $80, Unkn_f9694
+ dbw $84, Unkn_f9694
+ dbw $88, Unkn_f9694
+ dbw $8c, Unkn_f9694
+
+Unkn_f9573:
+ db 1
+ db $fc, $fc, $00, $00
+
+Unkn_f9578:
+ db 9
+ db $f4, $f4, $00, $00
+ db $f4, $fc, $01, $00
+ db $f4, $04, $02, $00
+ db $fc, $f4, $10, $00
+ db $fc, $fc, $11, $00
+ db $fc, $04, $12, $00
+ db $04, $f4, $20, $00
+ db $04, $fc, $21, $00
+ db $04, $04, $22, $00
+
+Unkn_f959d:
+ db 12
+ db $f8, $e8, $00, $00
+ db $f8, $f0, $01, $00
+ db $f8, $f8, $02, $00
+ db $f8, $00, $03, $00
+ db $f8, $08, $04, $00
+ db $f8, $10, $05, $00
+ db $00, $e8, $10, $00
+ db $00, $f0, $11, $00
+ db $00, $f8, $12, $00
+ db $00, $00, $13, $00
+ db $00, $08, $14, $00
+ db $00, $10, $15, $00
+
+Unkn_f95ce:
+ db 3
+ db $fc, $0b, $00, $10
+ db $04, $03, $0f, $10
+ db $04, $0b, $10, $10
+
+Unkn_f95db:
+ db 6
+ db $fc, $f0, $00, $30
+ db $fc, $08, $00, $10
+ db $04, $f0, $10, $30
+ db $04, $f8, $0f, $30
+ db $04, $00, $0f, $10
+ db $04, $08, $10, $10
+
+Unkn_f95f4:
+ db 12
+ db $f4, $f0, $00, $10
+ db $f4, $f8, $01, $10
+ db $f4, $00, $01, $30
+ db $f4, $08, $00, $30
+ db $fc, $f0, $10, $10
+ db $fc, $f8, $11, $10
+ db $fc, $00, $11, $30
+ db $fc, $08, $10, $30
+ db $04, $f0, $20, $10
+ db $04, $f8, $21, $10
+ db $04, $00, $21, $30
+ db $04, $08, $20, $30
+
+Unkn_f9625:
+ db 3
+ db $04, $f4, $00, $00
+ db $04, $fc, $01, $00
+ db $04, $04, $02, $00
+
+Unkn_f9632:
+ db 3
+ db $fc, $f4, $bf, $00
+ db $fc, $fc, $d5, $00
+ db $fc, $04, $d0, $00
+
+Unkn_f963f:
+ db 4
+ db $fc, $f0, $bf, $00
+ db $fc, $f8, $d1, $00
+ db $fc, $00, $d5, $00
+ db $fc, $08, $d0, $00
+
+Unkn_f9650:
+ db 4
+ db $fc, $f0, $bf, $00
+ db $fc, $f8, $d3, $00
+ db $fc, $00, $d5, $00
+ db $fc, $08, $d0, $00
+
+Unkn_f9661:
+ db 4
+ db $fc, $f0, $bf, $00
+ db $fc, $f8, $d7, $00
+ db $fc, $00, $d5, $00
+ db $fc, $08, $d0, $00
+
+Unkn_f9672:
+ db 4
+ db $fc, $f0, $bf, $00
+ db $fc, $f8, $d1, $00
+ db $fc, $00, $d8, $00
+ db $fc, $08, $d0, $00
+
+Unkn_f9683:
+ db 4
+ db $fc, $f0, $bf, $00
+ db $fc, $f8, $d5, $00
+ db $fc, $00, $d0, $00
+ db $fc, $08, $d0, $00
+
+Unkn_f9694:
+ db 12
+ db $f4, $f0, $03, $20
+ db $f4, $f8, $02, $20
+ db $f4, $00, $01, $20
+ db $f4, $08, $00, $20
+ db $fc, $f0, $13, $20
+ db $fc, $f8, $12, $20
+ db $fc, $00, $11, $20
+ db $fc, $08, $10, $20
+ db $04, $f0, $23, $20
+ db $04, $f8, $22, $20
+ db $04, $00, $21, $20
+ db $04, $08, $20, $20
diff --git a/data/animated_objects_3e_2.asm b/data/animated_objects_3e_2.asm
new file mode 100755
index 00000000..4e9f5b3c
--- /dev/null
+++ b/data/animated_objects_3e_2.asm
@@ -0,0 +1,236 @@
+YellowIntro_AnimatedObjectFramesData:
+ dw Unkn_fa100
+ dw Unkn_fa103
+ dw Unkn_fa10a
+ dw Unkn_fa111
+ dw Unkn_fa118
+ dw Unkn_fa11b
+ dw Unkn_fa11e
+ dw Unkn_fa121
+ dw Unkn_fa124
+ dw Unkn_fa127
+ dw Unkn_fa138
+
+Unkn_fa100:
+ frame $00, 32
+ endanim
+
+Unkn_fa103:
+ frame $01, 4
+ frame $02, 4
+ frame $03, 4
+ dorestart
+
+Unkn_fa10a:
+ frame $04, 4
+ frame $05, 4
+ frame $06, 4
+ dorestart
+
+Unkn_fa111:
+ frame $07, 4
+ frame $08, 4
+ frame $09, 4
+ dorestart
+
+Unkn_fa118:
+ frame $0a, 32
+ endanim
+
+Unkn_fa11b:
+ frame $0b, 32
+ endanim
+
+Unkn_fa11e:
+ frame $0c, 32
+ endanim
+
+Unkn_fa121:
+ frame $0d, 32
+ endanim
+
+Unkn_fa124:
+ frame $0e, 32
+ endanim
+
+Unkn_fa127:
+ frame $0f, 31
+ frame $11, 2
+ frame $0f, 2
+ frame $11, 2
+ frame $0f, 31
+ frame $11, 2
+ frame $0f, 23
+ frame $10, 32
+ endanim
+
+Unkn_fa138:
+ frame $12, 4
+ frame $13, 4
+ dorestart
+
+YellowIntro_AnimatedObjectOAMData:
+ dbw $00, Unkn_fa179
+ dbw $96, Unkn_fa17e
+ dbw $98, Unkn_fa17e
+ dbw $9a, Unkn_fa17e
+ dbw $0c, Unkn_fa18f
+ dbw $0e, Unkn_fa18f
+ dbw $3c, Unkn_fa18f
+ dbw $60, Unkn_fa1b0
+ dbw $70, Unkn_fa1b0
+ dbw $80, Unkn_fa1b0
+ dbw $90, Unkn_fa201
+ dbw $00, Unkn_fa201
+ dbw $06, Unkn_fa201
+ dbw $c6, Unkn_fa292
+ dbw $6d, Unkn_fa2f7
+ dbw $f0, Unkn_fa308
+ dbw $f4, Unkn_fa308
+ dbw $f8, Unkn_fa308
+ dbw $9c, Unkn_fa329
+ dbw $ec, Unkn_fa329
+
+Unkn_fa179:
+ db 1
+ db $fc, $fc, $00, $00
+Unkn_fa17e:
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $01, $00
+ db $00, $f8, $10, $00
+ db $00, $00, $11, $00
+
+Unkn_fa18f:
+ db 8
+ db $f0, $f8, $00, $00
+ db $f0, $00, $01, $00
+ db $f8, $f8, $10, $00
+ db $f8, $00, $11, $00
+ db $00, $f8, $20, $00
+ db $00, $00, $20, $20
+ db $08, $f8, $21, $00
+ db $08, $00, $21, $20
+
+Unkn_fa1b0:
+ db 20
+ db $e8, $f8, $00, $00
+ db $e8, $00, $01, $00
+ db $f0, $f8, $02, $00
+ db $f0, $00, $03, $00
+ db $f8, $f0, $04, $00
+ db $f8, $f8, $05, $00
+ db $f8, $00, $06, $00
+ db $f8, $08, $04, $20
+ db $00, $f0, $07, $00
+ db $00, $f8, $08, $00
+ db $00, $00, $08, $20
+ db $00, $08, $07, $20
+ db $08, $f0, $09, $00
+ db $08, $f8, $0a, $00
+ db $08, $00, $0a, $20
+ db $08, $08, $09, $20
+ db $10, $f0, $0b, $00
+ db $10, $f8, $0c, $00
+ db $10, $00, $0c, $20
+ db $10, $08, $0b, $20
+
+Unkn_fa201:
+ db 36
+ db $e8, $e8, $00, $00
+ db $e8, $f0, $01, $00
+ db $e8, $f8, $02, $00
+ db $e8, $00, $03, $00
+ db $e8, $08, $04, $00
+ db $e8, $10, $05, $00
+ db $f0, $e8, $10, $00
+ db $f0, $f0, $11, $00
+ db $f0, $f8, $12, $00
+ db $f0, $00, $13, $00
+ db $f0, $08, $14, $00
+ db $f0, $10, $15, $00
+ db $f8, $e8, $20, $00
+ db $f8, $f0, $21, $00
+ db $f8, $f8, $22, $00
+ db $f8, $00, $23, $00
+ db $f8, $08, $24, $00
+ db $f8, $10, $25, $00
+ db $00, $e8, $30, $00
+ db $00, $f0, $31, $00
+ db $00, $f8, $32, $00
+ db $00, $00, $33, $00
+ db $00, $08, $34, $00
+ db $00, $10, $35, $00
+ db $08, $e8, $40, $00
+ db $08, $f0, $41, $00
+ db $08, $f8, $42, $00
+ db $08, $00, $43, $00
+ db $08, $08, $44, $00
+ db $08, $10, $45, $00
+ db $10, $e8, $50, $00
+ db $10, $f0, $51, $00
+ db $10, $f8, $52, $00
+ db $10, $00, $53, $00
+ db $10, $08, $54, $00
+ db $10, $10, $55, $00
+
+Unkn_fa292:
+ db 25
+ db $ec, $f0, $00, $00
+ db $ec, $f8, $01, $00
+ db $ec, $00, $02, $00
+ db $ec, $08, $03, $00
+ db $ec, $10, $04, $00
+ db $f4, $f0, $05, $00
+ db $f4, $f8, $06, $00
+ db $f4, $00, $07, $00
+ db $f4, $08, $08, $00
+ db $f4, $10, $09, $00
+ db $fc, $f0, $10, $00
+ db $fc, $f8, $11, $00
+ db $fc, $00, $12, $00
+ db $fc, $08, $13, $00
+ db $fc, $10, $14, $00
+ db $04, $f0, $15, $00
+ db $04, $f8, $16, $00
+ db $04, $00, $17, $00
+ db $04, $08, $18, $00
+ db $04, $10, $19, $00
+ db $0c, $f0, $20, $00
+ db $0c, $f8, $21, $00
+ db $0c, $00, $22, $00
+ db $0c, $08, $23, $00
+ db $0c, $10, $24, $00
+
+Unkn_fa2f7:
+ db 4
+ db $fc, $f0, $00, $00
+ db $fc, $f8, $01, $00
+ db $fc, $00, $01, $20
+ db $fc, $08, $00, $20
+
+Unkn_fa308:
+ db 8
+ db $f8, $e8, $00, $10
+ db $f8, $f0, $01, $10
+ db $00, $e8, $02, $10
+ db $00, $f0, $03, $10
+ db $f8, $08, $01, $30
+ db $f8, $10, $00, $30
+ db $00, $08, $03, $30
+ db $00, $10, $02, $30
+
+Unkn_fa329:
+ db 12
+ db $f8, $d8, $00, $10
+ db $f8, $e0, $01, $10
+ db $f8, $e8, $02, $10
+ db $00, $d8, $10, $10
+ db $00, $e0, $11, $10
+ db $00, $e8, $12, $10
+ db $f8, $10, $02, $30
+ db $f8, $18, $01, $30
+ db $f8, $20, $00, $30
+ db $00, $10, $12, $30
+ db $00, $18, $11, $30
+ db $00, $20, $10, $30
diff --git a/engine/bank3e.asm b/engine/bank3e.asm
index 023f9b20..32f5ebfd 100644
--- a/engine/bank3e.asm
+++ b/engine/bank3e.asm
@@ -1,4498 +1,5 @@
-SurfingPikachuMinigame:
- call SurfingPikachuMinigame_BlankPals
- call DelayFrame
- call DelayFrame
- call DelayFrame
- ld a, [hTilesetType]
- push af
- xor a
- ld [hTilesetType], a
- ld a, [wUpdateSpritesEnabled]
- push af
- ld a, $ff
- ld [wUpdateSpritesEnabled], a
- ld a, [rIE]
- push af
- xor a
- ld [rIF], a
- ld a, $f
- ld [rIE], a
- ld a, $8
- ld [rSTAT], a
- ld a, [H_AUTOBGTRANSFERDEST + 1]
- push af
- ld a, $98
- ld [H_AUTOBGTRANSFERDEST + 1], a
- call Func_f8fb3
- call Func_f807a
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- call ClearObjectAnimationBuffers
- call ClearSprites
- xor a
- ld [hLCDCPointer], a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $90
- ld [hWY], a
- call DelayFrame
- pop af
- ld [H_AUTOBGTRANSFERDEST + 1], a
- xor a
- ld [rIF], a
- pop af
- ld [rIE], a
- xor a
- ld [rSTAT], a
- call RunDefaultPaletteCommand
- call Func_0f16
- call PlayDefaultMusic
- call GBPalNormal
- pop af
- ld [wUpdateSpritesEnabled], a
- pop af
- ld [hTilesetType], a
- ret
-
-Func_f807a:
- call Func_f8116
- call DelayFrame
- ld b, $e
- call RunPaletteCommand
-.loop
- ld a, [wc5d1]
- bit 7, a
- ret nz
- call Func_f923f
- call Func_f80ac
- ret nz
- call Func_f8282
- ld a, $3c
- ld [wCurrentAnimatedObjectOAMBufferOffset], a
- call RunObjectAnimations
- call Func_f8848
- call Func_f80a8
- call Func_f80c4
- jr .loop
-
-Func_f80a8:
- call DelayFrame
- ret
-
-Func_f80ac:
- ld hl, wPreventBlackout
- bit 1, [hl]
- ret z
- ld a, [hJoyPressed]
- and $4
- ret
-
-Func_f80b7:
- ld a, [hJoyPressed]
- and $8
- ret z
- ld hl, wc5e2
- ld a, [hl]
- xor $1
- ld [hl], a
- ret
-
-Func_f80c4:
- ld a, [wc634]
- and a
- ret z
- ld hl, wChannelNoteDelayCounters
- ld a, $1
- cp [hl]
- ret nz
- inc hl
- cp [hl]
- ret nz
- inc hl
- cp [hl]
- ret nz
- ld a, [wc5e3]
- ld e, a
- ld a, [wc5e3 + 1]
- and $3
- ld d, a
- sla e
- rl d
- ld e, d
- ld d, $0
- ld hl, Unkn_f80f5
- add hl, de
- add hl, de
- ld a, [hli]
- ld [wMusicTempo + 1], a
- ld a, [hl]
- ld [wMusicTempo], a
- ret
-
-Unkn_f80f5:
- dw $75
- dw $6d
- dw $65
- dw $5d
- dw $55
-
-Func_f80ff:
- ld hl, wChannelNoteDelayCounters
- ld a, $1
- cp [hl]
- ret nz
- inc hl
- cp [hl]
- ret nz
- inc hl
- cp [hl]
- ret nz
- ld a, $75
- ld [wMusicTempo + 1], a
- xor a
- ld [wMusicTempo], a
- ret
-
-Func_f8116:
- call Func_f9279
- call ClearSprites
- call DisableLCD
- ld hl, wSerialEnemyMonsPatchList
- ld bc, $67
- xor a
- call FillMemory
- ld hl, wc700
- ld bc, $200
- xor a
- call FillMemory
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call ClearObjectAnimationBuffers
-
- ld hl, SurfingPikachu1Graphics
- ld de, $9000
- ld bc, $500
- ld a, BANK(SurfingPikachu1Graphics)
- call FarCopyData
-
- ld hl, SurfingPikachu1Graphics + $410
- ld de, $8000
- ld bc, $1000
- ld a, BANK(SurfingPikachu1Graphics)
- call FarCopyData
-
- ld a, Unkn_f93d3 % $100
- ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, Unkn_f93d3 / $100
- ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, Jumptable_f93fa % $100
- ld [wAnimatedObjectJumptablePointer], a
- ld a, Jumptable_f93fa / $100
- ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, Unkn_f9507 % $100
- ld [wAnimatedObjectOAMDataPointer], a
- ld a, Unkn_f9507 / $100
- ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, Unkn_f9405 % $100
- ld [wAnimatedObjectFramesDataPointer], a
- ld a, Unkn_f9405 / $100
- ld [wAnimatedObjectFramesDataPointer + 1], a
- ld hl, vBGMap0
- ld bc, $800
- ld a, $0
- call FillMemory
- ld hl, $98c0
- ld bc, $180
- ld a, $b
- call FillMemory
- ld a, $1
- lb de, $74, $58
- call SpawnAnimatedObject
- ld a, $74
- ld [wc5ea], a
- call Func_f9223
- xor a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $7e
- ld [hWY], a
- ld a, $42
- ld [hLCDCPointer], a
- ld a, $40
- ld [wc5e3], a
- xor a
- ld [wc5e3 + 1], a
- xor a
- ld [wc5d6], a
- ld a, $60
- ld [wc5d7], a
- ld hl, wc61a
- ld bc, $14
- ld a, $74
- call FillMemory
- call Func_f81ff
- call Func_f8256
- ld a, $e3
- ld [rLCDC], a
- call Func_f81e9
- ld a, $e4
- ld [rOBP0], a
- ld a, $e0
- ld [rOBP1], a
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-Func_f81e9:
- ld a, [wOnSGB]
- and a
- jr nz, .asm_f81f7
- ld a, $d0
- ld [rBGP], a
- call UpdateGBCPal_BGP
- ret
-
-.asm_f81f7
- ld a, $e4
- ld [rBGP], a
- call UpdateGBCPal_BGP
- ret
-
-Func_f81ff:
- ld hl, wSpriteDataEnd
- ld de, Unkn_f8249
- ld b, $97
- ld c, $80
- ld a, $4
- call Func_f8233
- ld de, Unkn_f8248
- ld b, $96
- ld c, $50
- ld a, $1
- call Func_f8233
- ld de, Unkn_f824d
- ld b, $14
- ld c, $20
- ld a, $5
- call Func_f8233
- ld de, Unkn_f8252
- ld b, $20
- ld c, $80
- ld a, $4
- call Func_f8233
- ret
-
-Func_f8233:
-.asm_f8233
- push af
- ld [hl], b
- inc hl
- ld [hl], c
- inc hl
- ld a, [de]
- ld [hl], a
- inc hl
- ld [hl], $0
- inc hl
- ld a, c
- add $8
- ld c, a
- inc de
- pop af
- dec a
- jr nz, .asm_f8233
- ret
-
-Unkn_f8248:
- db $fe
-
-Unkn_f8249:
- db $d0
- db $d0
- db $d0
- db $d0
-
-Unkn_f824d:
- db $ec
- db $ed
- db $ed
- db $ee
- db $ef
-
-Unkn_f8252:
- db $ec
- db $ed
- db $ee
- db $ef
-
-Func_f8256:
- ld de, $9c21
- ld hl, Unkn_f8279
- ld c, $9
-.asm_f825e
- ld a, [hli]
- ld [de], a
- inc de
- dec c
- jr nz, .asm_f825e
- ld hl, $9c01
- ld [hl], $15
- ld hl, $9c02
- ld [hl], $16
- ld hl, $9c2c
- ld [hl], $1b
- ld hl, $9c2d
- ld [hl], $1c
- ret
-
-Unkn_f8279:
- db $17
- db $18
- db $19
- db $19
- db $19
- db $19
- db $19
- db $19
- db $19
-
-Func_f8282:
- ld a, [wc5d1]
- ld e, a
- ld d, $0
- ld hl, Jumptable_f8291
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_f8291:
- dw Func_f82ab
- dw Func_f82bd
- dw Func_f8324
- dw Func_f835c
- dw Func_f838c
- dw Func_f8399
- dw Func_f83aa
- dw Func_f83bb
- dw Func_f83cc
- dw Func_f83e3
- dw Func_f8406
- dw Func_f840f
- dw Func_f841d
-
-Func_f82ab:
- ld a, $2
- lb de, $48, $e0
- call SpawnAnimatedObject
- ld hl, wc5d1
- inc [hl]
- ld a, $1
- ld [wc634], a
- ret
-
-Func_f82bd:
- ld a, [wc5e5]
- cp $18
- jr nc, .asm_f82e8
- ld hl, wc5d6
- ld a, [hli]
- or [hl]
- and a
- jr z, .asm_f82f6
- call Random
- ld [wc5d5], a
- call Func_f9210
- call Func_f88ae
- call Func_f886b
- call Func_f8cb0
- call Func_f844c
- call Func_f88e4
- call Func_f88fd
- ret
-
-.asm_f82e8
- ld hl, wc5d1
- inc [hl]
- xor a
- ld [wc634], a
- ld a, $c0
- ld [wc632], a
- ret
-
-.asm_f82f6
- ld a, $1
-Func_f82f8:
- ld [wc630], a
- ld a, $c
- ld [wc5d1], a
-Func_f8300:
- ld a, $80
- ld [wc631], a
- ld a, $b
- lb de, $88, $58
- call SpawnAnimatedObject
- ld hl, $7
- add hl, bc
- ld [hl], $80
- ld hl, $b
- add hl, bc
- ld [hl], $80
- ld hl, $c
- add hl, bc
- ld [hl], $30
- xor a
- ld [wc634], a
- ret
-
-Func_f8324:
- call Func_f8440
- jr c, .asm_f833d
- xor a
- ld [wc5d5], a
- call Func_f9210
- call Func_f88ae
- call Func_f886b
- call Func_f8c97
- call Func_f80ff
- ret
-
-.asm_f833d
- ld hl, wc5d1
- inc [hl]
- ld a, $90
- ld [hSCX], a
- ld a, $72
- ld [wc5d3], a
- ld a, $4
- ld [wc5d2], a
- xor a
- ld [hLCDCPointer], a
- ld [wc617], a
- ld [wc618], a
- ld [wc619], a
- ret
-
-Func_f835c:
- ld a, [hSCX]
- and a
- jr z, .asm_f837b
- call Func_f9210
- call Func_f88ae
- call Func_f886b
- ld a, [hSCX]
- dec a
- dec a
- dec a
- dec a
- ld [hSCX], a
- ld a, $e0
- ld [wc62e], a
- call Func_f8cc7
- ret
-
-.asm_f837b
- xor a
- ld [wc5e3], a
- ld [wc5e3 + 1], a
- ld hl, wc5d1
- inc [hl]
- ld a, $5
- ld [wc5d2], a
- ret
-
-Func_f838c:
- call Func_f891e
- ld a, $20
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f8399:
- call Func_f8440
- ret nc
- call Func_f8a92
- ld a, $40
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f83aa:
- call Func_f8440
- ret nc
- call Func_f8ae4
- ld a, $40
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f83bb:
- call Func_f8440
- ret nc
- call Func_f8b7a
- ld a, $40
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f83cc:
- call Func_f8440
- ret nc
- call Func_f8aa9
- push af
- call Func_f8b5d
- pop af
- ret nc
- ld a, $40
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f83e3:
- call Func_f8440
- ret nc
- call Func_f8afb
- push af
- call Func_f8b5d
- pop af
- ret nc
- ld a, $80
- ld [wc632], a
- ld hl, wc5d1
- inc [hl]
- call Func_f8b92
- ret nc
- call Func_f8a7c
-Func_f83ff:
- ld a, $6
- ld [wc5d2], a
- ret
-
-Func_f8406:
- call Func_f8440
-Func_f8408:
- ret nc
- ld hl, wc5d1
- inc [hl]
- ret
-
-Func_f840f:
- call Func_f9210
- ld a, [hJoyPressed]
- and $1
- ret z
- ld hl, wc5d1
- set 7, [hl]
- ret
-
-Func_f841d:
- call Func_f9210
- call Func_f88ae
- call Func_f886b
- call Func_f8cb0
- call Func_f80ff
- ld hl, wc631
- ld a, [hl]
- and a
- jr z, .asm_f8435
- dec [hl]
- ret
-
-.asm_f8435
- ld a, [hJoyPressed]
- and $1
- ret z
- ld hl, wc5d1
- set 7, [hl]
- ret
-
-Func_f8440:
- ld hl, wc632
- ld a, [hl]
- and a
- jr z, .asm_f844a
- dec [hl]
- and a
- ret
-
-.asm_f844a
- scf
- ret
-
-Func_f844c:
- ld a, [wc5e6]
- ld h, a
- ld a, [wc5e7]
- ld l, a
- ld a, [wc5e3]
- ld e, a
- ld a, [wc5e3 + 1]
- ld d, a
- add hl, de
- ld a, h
- ld [wc5e6], a
- ld a, l
- ld [wc5e7], a
- ret nc
- ld hl, wc5e5
- inc [hl]
- ld hl, wOAMBuffer + 4 * 4 + 1
- dec [hl]
- dec [hl]
- ret
-
-Func_f8470
- ld a, [wc5d2]
- ld e, a
- ld d, $0
- ld hl, Jumptable_f847f
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_f847f:
- dw Func_f848d
- dw Func_f84e2
- dw Func_f8516
- dw Func_f8545
- dw Func_f8561
- dw Func_f856d
- dw Func_f8579
-
-Func_f848d:
- ld a, [wc630]
- and a
- jr nz, .asm_f84d2
- call Func_f87b5
- ld a, [wc5ea]
- ld hl, $5
- add hl, bc
- ld [hl], a
- call Func_f871e
- jr c, .asm_f84aa
- call Func_f8742
- call Func_f86b8
- ret
-
-.asm_f84aa
- call Func_f8742
- ld a, $1
- ld [wc5d2], a
- xor a
- ld hl, $c
- add hl, bc
- ld [hl], a
- ld hl, $d
- add hl, bc
- ld [hl], a
- ld hl, $e
- add hl, bc
- ld [hl], a
- ld [wc5d9], a
- ld [wc62f], a
- xor a
- ld [wChannelSoundIDs + CH7], a
- ld a, $91
- call PlaySound
- ret
-
-.asm_f84d2
- xor a
- ld [wc5e3], a
- ld [wc5e3 + 1], a
- ld a, $4
- ld [wc5d2], a
- call Func_f8742
- ret
-
-Func_f84e2:
- call Func_f8598
- call Func_f928c
- ret nc
- call Func_f8606
- jr c, .asm_f84fd
- call Func_f8bed
- ld hl, $c
- add hl, bc
- ld [hl], $0
- ld a, $2
- ld [wc5d2], a
- ret
-
-.asm_f84fd
- ld a, $3
- ld [wc5d2], a
- ld a, $60
- ld [wc5e1], a
- ld a, $10
- call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
- xor a
- ld [wChannelSoundIDs + CH7], a
- ld a, $93
- call PlaySound
- ret
-
-Func_f8516:
- ld hl, $c
- add hl, bc
- ld a, [hl]
- cp $20
- jr nc, .asm_f8539
- inc [hl]
- inc [hl]
- inc [hl]
- inc [hl]
- ld d, $4
- call Func_f9362
- ld hl, $7
- add hl, bc
- ld [hl], a
- call Func_f87b5
- ld a, [wc5ea]
- ld hl, $5
- add hl, bc
- ld [hl], a
- ret
-
-.asm_f8539
- ld hl, $7
- add hl, bc
- ld [hl], $0
- ld a, $0
- ld [wc5d2], a
- ret
-
-Func_f8545:
- ld hl, wc5e1
- ld a, [hl]
- and a
- jr z, .asm_f8556
- dec [hl]
- ld a, [wc5ea]
- ld hl, $5
- add hl, bc
- ld [hl], a
- ret
-
-.asm_f8556
- ld a, $0
- ld [wc5d2], a
- ld a, $4
- call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
- ret
-
-Func_f8561:
- ld a, [wc5ea]
- ld hl, $5
- add hl, bc
- ld [hl], a
- call Func_f8742
- ret
-
-Func_f856d:
- ld a, $f
- call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
- ld hl, $c
- add hl, bc
- ld [hl], $0
- ret
-
-Func_f8579:
- ld hl, $c
- add hl, bc
- ld a, [hl]
- inc [hl]
- inc [hl]
- and $3f
- cp $20
- jr c, .asm_f8591
- ld d, $10
- call Func_f9362
- ld hl, $7
- add hl, bc
- ld [hl], a
- ret
-
-.asm_f8591
- ld hl, $7
- add hl, bc
- ld [hl], $0
- ret
-
-Func_f8598:
- ld de, hJoy5
- ld a, [de]
- and $20
- jr nz, .asm_f85a6
- ld a, [de]
- and $10
- jr nz, .asm_f85cc
- ret
-
-.asm_f85a6
- ld hl, $e
- add hl, bc
- ld [hl], $0
- ld hl, $d
- add hl, bc
- ld a, [hl]
- inc [hl]
- cp $b
- jr c, .asm_f85be
- call Func_f85f2
- ld hl, wc62f
- set 0, [hl]
-.asm_f85be
- ld hl, $1
- add hl, bc
- ld a, [hl]
- cp $e
- jr nc, .asm_f85c9
- inc [hl]
- ret
-
-.asm_f85c9
- ld [hl], $1
- ret
-
-.asm_f85cc
- ld hl, $d
- add hl, bc
- ld [hl], $0
- ld hl, $e
- add hl, bc
- ld a, [hl]
- inc [hl]
- cp $d
- jr c, .asm_f85e4
- call Func_f85f2
- ld hl, wc62f
- set 1, [hl]
-.asm_f85e4
- ld hl, $1
- add hl, bc
- ld a, [hl]
- cp $1
- jr z, .asm_f85ef
- dec [hl]
- ret
-
-.asm_f85ef
- ld [hl], $e
- ret
-
-Func_f85f2:
- call Func_f8bdf
- xor a
- ld hl, $d
- add hl, bc
- ld [hl], a
- ld hl, $e
- add hl, bc
- ld [hl], a
- ld a, $92
- call PlaySound
- ret
-
-Func_f8606:
- ld hl, $1
- add hl, bc
- ld a, [wc5ef]
- cp $6
- jr z, .asm_f863d
- cp $14
- jr z, .asm_f867b
- cp $12
- jr z, .asm_f867b
- cp $7
- jr z, .asm_f865c
- ld a, [hl]
- cp $1
- jp z, .asm_f86ad
- cp $2
- jr z, .asm_f869a
- cp $3
- jr z, .asm_f869f
- cp $4
- jr z, .asm_f86a2
- cp $5
- jr z, .asm_f869f
- cp $6
- jr z, .asm_f869a
- cp $7
- jr z, .asm_f86ad
- jr .asm_f86ad
-
-.asm_f863d
- ld a, [hl]
- cp $1
- jr z, .asm_f86ad
- cp $2
- jr z, .asm_f86ad
- cp $3
- jr z, .asm_f86ad
- cp $4
- jr z, .asm_f869a
- cp $5
- jr z, .asm_f869f
- cp $6
- jr z, .asm_f86a2
- cp $7
- jr z, .asm_f869f
- jr .asm_f86ad
-
-.asm_f865c
- ld a, [hl]
- cp $1
- jr z, .asm_f869f
- cp $2
- jr z, .asm_f86a2
- cp $3
- jr z, .asm_f869f
- cp $4
- jr z, .asm_f869a
- cp $5
- jr z, .asm_f86ad
- cp $6
- jr z, .asm_f86ad
- cp $7
- jr z, .asm_f86ad
- jr .asm_f86ad
-
-.asm_f867b
- ld a, [hl]
- cp $1
- jr z, .asm_f86ad
- cp $2
- jr z, .asm_f869a
- cp $3
- jr z, .asm_f869f
- cp $4
- jr z, .asm_f86a2
- cp $5
- jr z, .asm_f86a2
- cp $6
- jr z, .asm_f869f
- cp $7
- jr z, .asm_f869a
- jr .asm_f86ad
-
-.asm_f869a
- call Func_f86f7
- jr .asm_f86a2
-
-.asm_f869f
- call Func_f86d0
-.asm_f86a2
- xor a
- ld [wChannelSoundIDs + CH7], a
- ld a, $95
- call PlaySound
- and a
- ret
-
-.asm_f86ad
- ld a, $40
- ld [wc5e3], a
- xor a
- ld [wc5e3 + 1], a
- scf
- ret
-
-Func_f86b8:
- ld a, [wc5e3 + 1]
- cp $2
- ret nc
- ld h, a
- ld a, [wc5e3]
- ld l, a
- ld de, $2
- add hl, de
- ld a, h
- ld [wc5e3 + 1], a
- ld a, l
- ld [wc5e3], a
- ret
-
-Func_f86d0:
- ld a, [wc5e3 + 1]
- and a
- jr nz, .asm_f86e2
- ld a, [wc5e3]
- cp $40
- jr nc, .asm_f86e2
- xor a
- ld [wc5e3], a
- ret
-
-.asm_f86e2
- ld a, [wc5e3 + 1]
- ld h, a
- ld a, [wc5e3]
- ld l, a
- ld de, $ffc0
- add hl, de
- ld a, h
- ld [wc5e3 + 1], a
- ld a, l
- ld [wc5e3], a
- ret
-
-Func_f86f7:
- ld a, [wc5e3 + 1]
- and a
- jr nz, .asm_f8709
- ld a, [wc5e3]
- cp $80
- jr nc, .asm_f8709
- xor a
- ld [wc5e3], a
- ret
-
-.asm_f8709
- ld a, [wc5e3 + 1]
- ld h, a
- ld a, [wc5e3]
- ld l, a
- ld de, $ff80
- add hl, de
- ld a, h
- ld [wc5e3 + 1], a
- ld a, l
- ld [wc5e3], a
- ret
-
-Func_f871e:
- ld a, [hSCX]
- and $7
- cp $3
- jr c, .asm_f8740
- cp $5
- jr nc, .asm_f8740
- ld a, [wc5ef]
- cp $14
- jr nz, .asm_f8740
- call Func_f87a8
- cp $a
- jr c, .asm_f8740
- ld [wc5ec], a
- call Func_f9284
- scf
- ret
-
-.asm_f8740
- and a
- ret
-
-Func_f8742:
- ld a, [hSCX]
- and $7
- cp $3
- ret c
- cp $5
- ret nc
- ld a, [wc5ef]
- cp $6
- jr z, .asm_f8766
- cp $14
- jr z, .asm_f8766
- cp $7
- jr z, .asm_f876a
- call Func_f8778
- ld a, $4
- ld hl, $1
- add hl, bc
- ld [hl], a
- ret
-
-.asm_f8766
- ld a, $6
- jr .asm_f876c
-
-.asm_f876a
- ld a, $2
-.asm_f876c
- ld e, a
- ld a, [wc5de]
- dec a
- add e
- ld hl, $1
- add hl, bc
- ld [hl], a
- ret
-
-Func_f8778:
- ld hl, wc5e0
- ld a, [hl]
- inc [hl]
- and $7
- ret nz
- ld a, [wc5df]
- and a
- jr z, .asm_f8796
- ld a, [wc5de]
- and a
- jr z, .asm_f8791
- dec a
- ld [wc5de], a
- ret
-
-.asm_f8791
- xor a
- ld [wc5df], a
- ret
-
-.asm_f8796
- ld a, [wc5de]
- cp $2
- jr z, .asm_f87a2
- inc a
- ld [wc5de], a
- ret
-
-.asm_f87a2
- ld a, $1
- ld [wc5df], a
- ret
-
-Func_f87a8:
- ld a, [wc5e3]
- ld l, a
- ld a, [wc5e3 + 1]
- ld h, a
- add hl, hl
- add hl, hl
- add hl, hl
- ld a, h
- ret
-
-Func_f87b5:
- ld hl, wc5eb
- ld a, [hl]
- inc [hl]
- and $3
- ret nz
- call Func_f87ce
- ld d, a
- ld hl, $4
- add hl, bc
- ld e, [hl]
- ld a, $a
- push bc
- call SpawnAnimatedObject
- pop bc
- ret
-
-Func_f87ce:
- ld a, [hSCX]
- and $8
- jr nz, .asm_f87d9
- ld hl, wc622
- jr .asm_f87dc
-
-.asm_f87d9
- ld hl, wc623
-.asm_f87dc
- ld a, [wc5f0]
- cp $6
- jr z, .asm_f87ed
- cp $14
- jr z, .asm_f87ed
- cp $7
- jr z, .asm_f87f5
- ld a, [hl]
- ret
-
-.asm_f87ed
- ld a, [hSCX]
- and $7
- ld e, a
- ld a, [hl]
- sub e
- ret
-
-.asm_f87f5
- ld a, [hSCX]
- and $7
- add [hl]
- ret
-
-Func_f87fb:
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $58
- ret z
- add $4
- ld [hl], a
- ret
-
-Func_f8807:
- call MaskCurrentAnimatedObjectStruct
- ret
-
-Func_f880b:
- ld hl, $b
- add hl, bc
- ld a, [hl]
- and a
- ret z
- dec [hl]
- dec [hl]
- ld d, a
- ld hl, $c
- add hl, bc
- ld a, [hl]
- inc [hl]
- call Func_f9362
- cp $80
- jr nc, .asm_f8825
- xor $ff
- inc a
-.asm_f8825
- ld hl, $7
- add hl, bc
- ld [hl], a
- ret
-
-Func_f882b:
- ld hl, $b
- add hl, bc
- ld a, [hl]
- inc [hl]
- and $1
- ret z
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $c0
- jr z, .asm_f883f
- inc [hl]
- ret
-
-.asm_f883f
- ld a, $1
- ld [wc633], a
- call MaskCurrentAnimatedObjectStruct
- ret
-
-Func_f8848:
- ld a, [wc635]
- ld e, a
- ld d, $0
- ld a, [wc5e3]
- ld l, a
- ld a, [wc5e3 + 1]
- ld h, a
- add hl, de
- ld a, l
- ld [wc635], a
- ld d, h
- ld hl, wOAMBuffer + 5 * 4 + 1
- ld e, $9
-.asm_f8861
- ld a, [hl]
- add d
- ld [hli], a
- inc hl
- inc hl
- inc hl
- dec e
- jr nz, .asm_f8861
- ret
-
-Func_f886b:
- ld a, [wc5ef]
- ld a, [hSCX]
- add $48
- ld e, a
- srl e
- srl e
- srl e
- ld d, $0
- ld hl, vBGMap0
- add hl, de
- ld a, [wc5ea]
- srl a
- srl a
- srl a
- ld c, a
-.asm_f8889
- ld a, c
- and a
- jr z, .asm_f889a
- dec c
- ld de, $20
- add hl, de
- ld a, h
- and $3
- or $98
- ld h, a
- jr .asm_f8889
-
-.asm_f889a
- ld de, wc5ef
- ld a, e
- ld [H_VBCOPYDEST], a
- ld a, d
- ld [H_VBCOPYDEST + 1], a
- ld a, l
- ld [H_VBCOPYSRC], a
- ld a, h
- ld [H_VBCOPYSRC + 1], a
- ld a, $1
- ld [H_VBCOPYSIZE], a
- ret
-
-Func_f88ae:
- ld a, [hSCX]
- and $8
- jr nz, .asm_f88b9
- ld hl, wc621
- jr .asm_f88bc
-
-.asm_f88b9
- ld hl, wc622
-.asm_f88bc
- ld a, [wc5ef]
- cp $6
- jr z, .asm_f88d0
- cp $14
- jr z, .asm_f88d0
- cp $7
- jr z, .asm_f88db
- ld a, [hl]
- ld [wc5ea], a
- ret
-
-.asm_f88d0
- ld a, [hSCX]
- and $7
- ld e, a
- ld a, [hl]
- sub e
- ld [wc5ea], a
- ret
-
-.asm_f88db
- ld a, [hSCX]
- and $7
- add [hl]
- ld [wc5ea], a
- ret
-
-Func_f88e4:
- ld hl, wc5d6
- ld e, $99
- call Func_f88f0
- ret nc
- inc hl
- ld e, $99
-Func_f88f0:
- ld a, [hl]
- and a
- jr z, .asm_f88fa
- sub $1
- daa
- ld [hl], a
- and a
- ret
-
-.asm_f88fa
- ld [hl], e
- scf
- ret
-
-Func_f88fd:
- ld de, wc5d7
- ld hl, wOAMBuffer + 0 * 4 + 2
- ld a, [de]
- call Func_f890b
- ld hl, wOAMBuffer + 2 * 4 + 2
- ld a, [de]
-Func_f890b:
- ld c, a
- swap a
- and $f
- add $d0
- ld [hli], a
- inc hl
- inc hl
- inc hl
- ld a, c
- and $f
- add $d0
- ld [hl], a
- dec de
- ret
-
-Func_f891e:
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- xor a
- call FillMemory
- ld hl, Tilemap_f8946
- coord de, 0, 6
- ld bc, Tilemap_f8946End - Tilemap_f8946
- call CopyData
- call Func_f8a0e
- ld hl, wOAMBuffer + 5 * 4 + 1
- ld bc, $24
- xor a
- call FillMemory
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- ret
-
-Tilemap_f8946:
-INCBIN "gfx/unknown_f8946.map"
-Tilemap_f8946End:
-
-Func_f8a0e:
- coord hl, 1, 1
- lb de, $3b, $3c
- ld a, $40
- call Func_f8a72
- coord hl, 1, 2
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 3
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 4
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 5
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 6
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 7
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 8
- lb de, $3f, $3f
- ld a, $ff
- call Func_f8a72
- coord hl, 1, 9
- lb de, $3d, $3e
- ld a, $40
- call Func_f8a72
- ret
-
-Func_f8a72:
- ld [hl], d
- inc hl
- ld c, $10
-.asm_f8a76
- ld [hli], a
- dec c
- jr nz, .asm_f8a76
- ld [hl], e
- ret
-
-Func_f8a7c:
- ld hl, Tilemap_f8a89
- coord de, 6, 8
- ld bc, $9
- call CopyData
- ret
-
-Tilemap_f8a89:
- db $20,$2e,$2f,$30,$31,$2c,$32,$23,$33
-
-Func_f8a92:
- ld hl, Tilemap_f8aa2
- coord de, 2, 2
- ld bc, $7
- call CopyData
- call Func_f8aca
- ret
-
-Tilemap_f8aa2:
- db $20,$21,$ff,$22,$23,$24,$25
-
-Func_f8aa9:
- ld c, $63
-.asm_f8aab
- push bc
- ld hl, wc5d6
- ld a, [hli]
- or [hl]
- and a
- jr z, .asm_f8ac7
- call Func_f88e4
- ld e, $1
-.asm_f8ab9
- call Func_f8b42
- pop bc
- dec c
- jr nz, .asm_f8aab
-.asm_f8abf
- ld a, $90
- call PlaySound
-.asm_f8ac5
- and a
- ret
-
-.asm_f8ac7
- pop bc
- scf
- ret
-
-Func_f8aca:
- coord hl, 10, 2
- ld de, wc5d7
- ld a, [de]
- call Func_f9350
- inc hl
- ld a, [de]
- call Func_f9350
- inc hl
- inc hl
- ld [hl], $21
- inc hl
- ld [hl], $25
- inc hl
- ld [hl], $26
- ret
-
-Func_f8ae4:
- ld hl, Tilemap_f8af4
- coord de, 2, 4
- ld bc, $7
- call CopyData
- call Func_f8b25
- ret
-
-Tilemap_f8af4:
- db $27,$28,$29,$2a,$23,$26,$26
-
-Func_f8afb:
- ld c, $63
-.asm_f8afd
- push bc
- ld hl, wc5da
- ld a, [hli]
- ld e, a
- or [hl]
- jr z, .asm_f8b22
- ld d, [hl]
- ld a, e
- sub $1
- daa
- ld e, a
- ld a, d
- sbc $0
- daa
- ld [hld], a
- ld [hl], e
- ld e, $1
- call Func_f8b42
- pop bc
- dec c
- jr nz, .asm_f8afd
- ld a, $90
- call PlaySound
-.asm_f8b20
- and a
- ret
-
-.asm_f8b22
- pop bc
- scf
- ret
-
-Func_f8b25:
- ld a, [wc5db]
- coord hl, 10, 4
- call Func_f9350
- ld a, [wc5da]
- coord hl, 12, 4
- call Func_f9350
- inc hl
- inc hl
- ld [hl], $21
- inc hl
- ld [hl], $25
- inc hl
- ld [hl], $26
- ret
-
-Func_f8b42:
- ld a, [wc5dc]
- add e
- daa
- ld [wc5dc], a
- ld a, [wc5dd]
- adc $0
- daa
- ld [wc5dd], a
- ret nc
- ld a, $99
- ld [wc5dc], a
- ld [wc5dd], a
- ret
-
-Func_f8b5d:
- ld a, [wc5dd]
- coord hl, 10, 6
- call Func_f9350
- ld a, [wc5dc]
- coord hl, 12, 6
- call Func_f9350
- inc hl
- inc hl
- ld [hl], $21
- inc hl
- ld [hl], $25
- inc hl
- ld [hl], $26
- ret
-
-Func_f8b7a:
- ld hl, Tilemap_f8b8d
- coord de, 2, 6
- ld bc, $5
- call CopyData
- call Func_f8b25
- call Func_f8b5d
- ret
-
-Tilemap_f8b8d:
- db $2b,$2c,$25,$28,$2d
-
-Func_f8b92:
- ld hl, wd496
- ld a, [wc5dd]
- cp [hl]
- jr c, .asm_f8ba6
- jr nz, .asm_f8bb0
- dec hl
- ld a, [wc5dc]
- cp [hl]
- jr c, .asm_f8ba6
- jr nz, .asm_f8bb0
-.asm_f8ba6
- call WaitForSoundToFinish
- ld e, $1b
- call Func_f8bcb
- and a
- ret
-
-.asm_f8bb0
- ld a, [wc5dc]
- ld [wd495], a
- ld a, [wc5dd]
- ld [wd496], a
- call WaitForSoundToFinish
- ld e, $21
- call Func_f8bcb
- ld a, $96
- call PlaySound
- scf
- ret
-
-Func_f8bcb: ; f8bcb (3e:4bcb)
- push de
- callab IsSurfingPikachuInThePlayersParty
- pop de
- ret nc
- callab PlayPikachuSoundClip
- ret
-
-Func_f8bdf:
- ld a, [wc5d9]
- inc a
- cp $4
- jr c, .asm_f8be9
- ld a, $3
-.asm_f8be9
- ld [wc5d9], a
- ret
-
-Func_f8bed:
- ld a, [wc5d9]
- and a
- ret z
- ld a, [wc62f]
- and $3
- cp $3
- jr z, .asm_f8c2b
- ld a, [wc5d9]
- ld d, a
- ld e, $1
- ld a, $0
-.asm_f8c03
- add e
- sla e
- dec d
- jr nz, .asm_f8c03
-.asm_f8c09
- push af
- ld e, $50
- call Func_f8c7c
- pop af
- dec a
- jr nz, .asm_f8c09
- ld hl, $5
- add hl, bc
- ld a, [hl]
- sub $10
- ld d, a
- ld hl, $4
- add hl, bc
- ld e, [hl]
- ld a, [wc5d9]
- add $3
- push bc
- call SpawnAnimatedObject
- pop bc
- ret
-
-.asm_f8c2b
- ld a, [wc5d9]
- cp $3
- jr c, .asm_f8c53
- ld a, $a
-.asm_f8c34
- push af
- ld e, $50
- call Func_f8c7c
- pop af
- dec a
- jr nz, .asm_f8c34
- ld hl, $5
- add hl, bc
- ld a, [hl]
- sub $10
- ld d, a
- ld hl, $4
- add hl, bc
- ld e, [hl]
- ld a, $9
- push bc
- call SpawnAnimatedObject
- pop bc
- ret
-
-.asm_f8c53
- ld e, $50
- call Func_f8c7c
- ld e, $50
- call Func_f8c7c
- ld e, $50
- call Func_f8c7c
- ld e, $30
- call Func_f8c7c
- ld hl, $5
- add hl, bc
- ld a, [hl]
- sub $10
- ld d, a
- ld hl, $4
- add hl, bc
- ld e, [hl]
- ld a, $8
- push bc
- call SpawnAnimatedObject
- pop bc
- ret
-
-Func_f8c7c:
- ld a, [wc5da]
- add e
- daa
- ld [wc5da], a
- ld a, [wc5db]
- adc $0
- daa
- ld [wc5db], a
- ret nc
- ld a, $99
- ld [wc5da], a
- ld [wc5db], a
- ret
-
-Func_f8c97:
- ld a, $a0
- ld [wc62e], a
- ld a, [hSCX]
- ld h, a
- ld a, [wc617]
- ld l, a
- ld de, $900
- add hl, de
- ld a, l
- ld [wc617], a
- ld a, h
- ld [hSCX], a
- jr Func_f8cc7
-
-Func_f8cb0:
- ld a, $a0
- ld [wc62e], a
- ld a, [hSCX]
- ld h, a
- ld a, [wc617]
- ld l, a
- ld de, $180
- add hl, de
- ld a, l
- ld [wc617], a
- ld a, h
- ld [hSCX], a
-Func_f8cc7:
- ld hl, wc618
- ld a, [hSCX]
- cp [hl]
- ret z
- ld [hl], a
- and $f0
- ld hl, wc619
- cp [hl]
- ret z
- ld [hl], a
- call Func_f8d44
- ld a, b
- ld [wc5e8], a
- ld a, c
- ld [wc5e9], a
- push de
- ld hl, wc61a
- ld de, wc61c
- ld c, $12
-.asm_f8ceb
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .asm_f8ceb
- ld a, [wc5e8]
- ld [hli], a
- ld a, [wc5e9]
- ld [hl], a
- pop de
- ld hl, wRedrawRowOrColumnSrcTiles
- ld c, $8
-.asm_f8cff
- ld a, [de]
- call Func_f8d28
- inc de
- dec c
- jr nz, .asm_f8cff
- ld a, [wc62e]
- ld e, a
- ld a, [hSCX]
- add e
- and $f0
- srl a
- srl a
- srl a
- ld e, a
- ld d, $0
- ld hl, vBGMap0
- add hl, de
- ld a, l
- ld [hRedrawRowOrColumnDest], a
- ld a, h
- ld [hRedrawRowOrColumnDest + 1], a
- ld a, $1
- ld [hRedrawRowOrColumnMode], a
- ret
-
-Func_f8d28:
- push de
- push hl
- ld l, a
- ld h, $0
- ld de, Unkn_f96e5
- add hl, hl
- add hl, hl
- add hl, de
- ld e, l
- ld d, h
- pop hl
- ld a, [de]
- inc de
- ld [hli], a
- ld a, [de]
- inc de
- ld [hli], a
- ld a, [de]
- inc de
- ld [hli], a
- ld a, [de]
- inc de
- ld [hli], a
- pop de
- ret
-
-Func_f8d44:
- ld a, [wc5d3]
- ld e, a
- ld d, $0
- ld hl, Jumptable_f8d53
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_f8d53:
- dw Func_f8e4b
- dw Func_f8f28
- dw Func_f8f31
- dw Func_f8f3a
- dw Func_f8f43
- dw Func_f8e7d
- dw Func_f8f4c
- dw Func_f8f55
- dw Func_f8f5e
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8ec5
- dw Func_f8ece
- dw Func_f8ed7
- dw Func_f8ee0
- dw Func_f8ee9
- dw Func_f8ef2
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8efb
- dw Func_f8f04
- dw Func_f8f0d
- dw Func_f8f16
- dw Func_f8f1f
- dw Func_f8efb
- dw Func_f8f04
- dw Func_f8f0d
- dw Func_f8f16
- dw Func_f8f1f
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8f28
- dw Func_f8f31
- dw Func_f8f3a
- dw Func_f8f43
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8f4c
- dw Func_f8f55
- dw Func_f8f5e
- dw Func_f8f4c
- dw Func_f8f55
- dw Func_f8f5e
- dw Func_f8f4c
- dw Func_f8f55
- dw Func_f8f5e
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8f67
- dw Func_f8f70
- dw Func_f8efb
- dw Func_f8f04
- dw Func_f8f0d
- dw Func_f8f16
- dw Func_f8f1f
- dw Func_f8f67
- dw Func_f8f70
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8ec5
- dw Func_f8ece
- dw Func_f8ed7
- dw Func_f8ee0
- dw Func_f8ee9
- dw Func_f8ef2
- dw Func_f8e7d
- dw Func_f8f67
- dw Func_f8f70
- dw Func_f8f67
- dw Func_f8f70
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8efb
- dw Func_f8f04
- dw Func_f8f0d
- dw Func_f8f16
- dw Func_f8f1f
- dw Func_f8f28
- dw Func_f8f31
- dw Func_f8f3a
- dw Func_f8f43
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8e7d
- dw Func_f8f94
- dw Func_f8e86
- dw Func_f8e8f
- dw Func_f8e98
- dw Func_f8ea1
- dw Func_f8eaa
- dw Func_f8eb3
- dw Func_f8ebc
- dw Func_f8f9d
- dw Func_f8e7d
- dw Func_f8f79
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f82
- dw Func_f8f8b
-
-Func_f8e4b:
- ld a, [wc5e5]
- cp $16
- jr c, .asm_f8e5a
- jr z, .asm_f8e56
- jr nc, .asm_f8e6e
-.asm_f8e56
- ld a, $6a
- jr .asm_f8e6b
-
-.asm_f8e5a
- ld a, [wc5d5]
- and a
- jr z, .asm_f8e6e
- dec a
- and $7
- ld e, a
- ld d, $0
- ld hl, Unkn_f8e75
- add hl, de
- ld a, [hl]
-.asm_f8e6b
- ld [wc5d3], a
-.asm_f8e6e
- lb bc, $74, $74
- ld de, Unkn_f973d
- ret
-
-Unkn_f8e75:
- db $01,$0e,$1a,$29,$32,$40,$4d,$5c
-
-Func_f8e7d:
- lb bc, $74, $74
- ld de, Unkn_f973d
- jp Func_f8fa9
-
-Func_f8e86:
- lb bc, $74, $6c
- ld de, Unkn_f9745
- jp Func_f8fa9
-
-Func_f8e8f:
- lb bc, $64, $5c
- ld de, Unkn_f974d
- jp Func_f8fa9
-
-Func_f8e98:
- lb bc, $54, $4c
- ld de, Unkn_f9755
- jp Func_f8fa9
-
-Func_f8ea1:
- lb bc, $44, $44
- ld de, Unkn_f975d
- jp Func_f8fa9
-
-Func_f8eaa:
- lb bc, $44, $4c
- ld de, Unkn_f9765
- jp Func_f8fa9
-
-Func_f8eb3:
- lb bc, $54, $5c
- ld de, Unkn_f976d
- jp Func_f8fa9
-
-Func_f8ebc:
- lb bc, $64, $6c
- ld de, Unkn_f9775
- jp Func_f8fa9
-
-Func_f8ec5:
- lb bc, $74, $6c
- ld de, Unkn_f977d
- jp Func_f8fa9
-
-Func_f8ece:
- lb bc, $64, $5c
- ld de, Unkn_f9785
- jp Func_f8fa9
-
-Func_f8ed7:
- lb bc, $54, $4c
- ld de, Unkn_f978d
- jp Func_f8fa9
-
-Func_f8ee0:
- lb bc, $4c, $4c
- ld de, Unkn_f9795
- jp Func_f8fa9
-
-Func_f8ee9:
- lb bc, $54, $5c
- ld de, Unkn_f979d
- jp Func_f8fa9
-
-Func_f8ef2:
- lb bc, $64, $6c
- ld de, Unkn_f97a5
- jp Func_f8fa9
-
-Func_f8efb:
- lb bc, $74, $6c
- ld de, Unkn_f97ad
- jp Func_f8fa9
-
-Func_f8f04:
- lb bc, $64, $5c
- ld de, Unkn_f97b5
- jp Func_f8fa9
-
-Func_f8f0d:
- lb bc, $54, $54
- ld de, Unkn_f97bd
- jp Func_f8fa9
-
-Func_f8f16:
- lb bc, $54, $5c
- ld de, Unkn_f97c5
- jp Func_f8fa9
-
-Func_f8f1f:
- lb bc, $64, $6c
- ld de, Unkn_f97cd
- jp Func_f8fa9
-
-Func_f8f28:
- lb bc, $74, $6c
- ld de, Unkn_f97d5
- jp Func_f8fa9
-
-Func_f8f31:
- lb bc, $64, $5c
- ld de, Unkn_f97dd
- jp Func_f8fa9
-
-Func_f8f3a:
- lb bc, $5c, $5c
- ld de, Unkn_f97e5
- jp Func_f8fa9
-
-Func_f8f43:
- lb bc, $64, $6c
- ld de, Unkn_f97ed
- jp Func_f8fa9
-
-Func_f8f4c:
- lb bc, $74, $6c
- ld de, Unkn_f97f5
- jp Func_f8fa9
-
-Func_f8f55:
- lb bc, $64, $64
- ld de, Unkn_f97fd
- jp Func_f8fa9
-
-Func_f8f5e:
- lb bc, $64, $6c
- ld de, Unkn_f9805
- jp Func_f8fa9
-
-Func_f8f67:
- lb bc, $74, $6c
- ld de, Unkn_f980d
- jp Func_f8fa9
-
-Func_f8f70:
- lb bc, $6c, $6c
- ld de, Unkn_f9815
- jp Func_f8fa9
-
-Func_f8f79:
- lb bc, $74, $74
- ld de, Unkn_f981d
- jp Func_f8fa9
-
-Func_f8f82:
- lb bc, $74, $74
- ld de, Unkn_f9825
- jp Func_f8fa9
-
-Func_f8f8b:
- lb bc, $74, $74
- ld de, Unkn_f9825
- jp Func_f8fae
-
-Func_f8f94:
- lb bc, $74, $74
- ld de, Unkn_f973d
- jp Func_f8fae
-
-Func_f8f9d:
- lb bc, $74, $74
- ld de, Unkn_f973d
- ret
-
-Func_f8fa4:
- inc a
- ld [wc5d3], a
- ret
-
-Func_f8fa9:
- ld hl, wc5d3
- inc [hl]
- ret
-
-Func_f8fae:
- xor a
- ld [wc5d3], a
- ret
-
-Func_f8fb3:
- call Func_f9279
- call ClearSprites
- call DisableLCD
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- call ClearObjectAnimationBuffers
- ld hl, $6324
- ld de, $8800
- ld bc, $900
- ld a, $20
- call FarCopyData
- ld a, Unkn_f93d3 % $100
- ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, Unkn_f93d3 / $100
- ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, Jumptable_f93fa % $100
- ld [wAnimatedObjectJumptablePointer], a
- ld a, Jumptable_f93fa / $100
- ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, Unkn_f9507 % $100
- ld [wAnimatedObjectOAMDataPointer], a
- ld a, Unkn_f9507 / $100
- ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, Unkn_f9405 % $100
- ld [wAnimatedObjectFramesDataPointer], a
- ld a, Unkn_f9405 / $100
- ld [wAnimatedObjectFramesDataPointer + 1], a
- ld a, $c
- lb de, $74, $58
- call SpawnAnimatedObject
- call Func_f9053
- xor a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $90
- ld [hWY], a
- ld b, $f
- call RunPaletteCommand
- ld a, $e3
- ld [rLCDC], a
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- call DelayFrame
- call DelayFrame
- call DelayFrame
- call Func_f81e9
- ld a, $e4
- ld [rOBP0], a
- ld a, $e0
- ld [rOBP1], a
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- call DelayFrame
- ld a, $99
- ld c, $20
- call PlayMusic
- xor a
- ld [wc633], a
-.asm_f9041
- ld a, [wc633]
- and a
- ret nz
- ld a, $0
- ld [wCurrentAnimatedObjectOAMBufferOffset], a
- call RunObjectAnimations
- call DelayFrame
- jr .asm_f9041
-
-Func_f9053:
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- ld a, $ff
- call FillMemory
- ld hl, Tilemap_f90bc
- coord de, 0, 6
- ld bc, 12 * SCREEN_WIDTH
- call CopyData
- ld de, Tilemap_f91c8
- coord hl, 4, 0
- lb bc, 6, 12
- call .CopyBox
- coord hl, 3, 7
- lb bc, 3, 15
- call .FillBoxWithFF
- ld hl, Tilemap_f91ac
- coord de, 3, 7
- ld bc, 15
- call CopyData
- ld hl, Tilemap_f91bb
- coord de, 4, 9
- ld bc, 13
- call CopyData
- ret
-
-.CopyBox:
-.copy_row
- push bc
- push hl
-.copy_col
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .copy_col
- ld bc, SCREEN_WIDTH
- pop hl
- add hl, bc
- pop bc
- dec b
- jr nz, .copy_row
- ret
-
-.FillBoxWithFF:
-.fill_row
- push bc
- push hl
-.fill_col
- ld [hl], $ff
- inc hl
- dec c
- jr nz, .fill_col
- pop hl
- ld bc, SCREEN_WIDTH
- add hl, bc
- pop bc
- dec b
- jr nz, .fill_row
- ret
-
-Tilemap_f90bc: INCBIN "gfx/unknown_f90bc.map"
-Tilemap_f91ac: INCBIN "gfx/unknown_f91ac.map"
-Tilemap_f91bb: INCBIN "gfx/unknown_f91bb.map"
-Tilemap_f91c8: INCBIN "gfx/unknown_f91c8.map"
-
-Func_f9210:
- ld hl, wc710
- ld de, wc710 + 1
- ld c, $80
- ld a, [hl]
- push af
-.asm_f921a
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .asm_f921a
- pop af
- ld [hl], a
- ret
-
-Func_f9223:
- ld hl, wc700
- ld bc, $100
- ld de, $0
-.asm_f922c
- ld a, e
- and $1f
- ld e, a
- push hl
- ld hl, Unkn_f96c5
- add hl, de
- ld a, [hl]
- pop hl
- ld [hli], a
- inc e
- dec bc
- ld a, c
- or b
- jr nz, .asm_f922c
- ret
-
-Func_f923f:
- call Joypad
- ld a, [H_FRAMECOUNTER]
- and a
- jr nz, .asm_f9250
- ld a, [hJoyHeld]
- ld [hJoy5], a
- ld a, $2
- ld [H_FRAMECOUNTER], a
- ret
-
-.asm_f9250
- xor a
- ld [hJoy5], a
- ret
-
-SurfingPikachuMinigame_BlankPals:
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-SurfingPikachuMinigame_NormalPals:
- ld a, $e4
- ld [rBGP], a
- ld [rOBP0], a
- ld a, $e0
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-Func_f9279:
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- xor a
- call FillMemory
- ret
-
-Func_f9284:
- xor a
- ld [wc5ed], a
- ld [wc5ee], a
- ret
-
-Func_f928c:
- ld a, [wc5ed]
- and a
- jr nz, .asm_f92e4
- ld a, [wc5ec]
- ld d, a
- ld a, [wc5ee]
- or d
- jr z, .asm_f92dd
- ld a, [wc5ee]
- ld e, a
- ld hl, $ff80
- add hl, de
- ld a, l
- ld [wc5ee], a
- ld a, h
- ld [wc5ec], a
- ld e, a
- ld d, $0
- call Func_f9340
- ld e, l
- ld d, h
- ld a, $4
- call Func_f9340
- ld a, l
- xor $ff
- inc a
- ld l, a
- ld a, h
- xor $ff
- ld h, a
- push hl
- ld hl, $5
- add hl, bc
- ld d, [hl]
- ld hl, $c
- add hl, bc
- ld e, [hl]
- pop hl
- add hl, de
- ld e, l
- ld d, h
- ld hl, $5
- add hl, bc
- ld [hl], d
- ld hl, $c
- add hl, bc
- ld [hl], e
- and a
- ret
-
-.asm_f92dd
- ld a, $1
- ld [wc5ed], a
- and a
- ret
-
-.asm_f92e4
- ld a, [wc5ea]
- ld e, a
- ld hl, $5
- add hl, bc
- ld a, [hl]
- cp $90
- jr nc, .asm_f92f4
- cp e
- jr nc, .asm_f9330
-.asm_f92f4
- ld a, [wc5ec]
- ld d, a
- ld a, [wc5ee]
- ld e, a
- ld hl, $80
- add hl, de
- ld a, l
- ld [wc5ee], a
- ld a, h
- ld [wc5ec], a
- ld e, a
- ld d, $0
- call Func_f9340
- ld e, l
- ld d, h
- ld a, $4
- call Func_f9340
- push hl
- ld hl, $5
- add hl, bc
- ld d, [hl]
- ld hl, $c
- add hl, bc
- ld e, [hl]
- pop hl
- add hl, de
- ld e, l
- ld d, h
- ld hl, $5
- add hl, bc
- ld [hl], d
- ld hl, $c
- add hl, bc
- ld [hl], e
- and a
- ret
-
-.asm_f9330
- ld hl, $5
- add hl, bc
- ld a, [wc5ea]
- ld [hl], a
- ld hl, $c
- add hl, bc
- ld [hl], $0
- scf
- ret
-
-Func_f9340:
- ld hl, $0
-.asm_f9343
- srl a
- jr nc, .asm_f9348
- add hl, de
-.asm_f9348
- sla e
- rl d
- and a
- jr nz, .asm_f9343
- ret
-
-Func_f9350:
- ld c, a
- swap a
- and $f
- add $d0
- ld [hli], a
- ld a, c
- and $f
- add $d0
- ld [hl], a
- dec de
- ret
-
-Func_f9360: ; cosine
- add $10
-Func_f9362: ; sine
- and $3f
- cp $20
- jr nc, .asm_f936d
- call Func_f9377
- ld a, h
- ret
-
-.asm_f936d
- and $1f
- call Func_f9377
- ld a, h
- xor $ff
- inc a
- ret
-
-Func_f9377:
- ld e, a
- ld a, d
- ld d, $0
- ld hl, Unkn_f9393
- add hl, de
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld hl, $0
-.asm_f9386
- srl a
- jr nc, .asm_f938b
- add hl, de
-.asm_f938b
- sla e
- rl d
- and a
- jr nz, .asm_f9386
- ret
-
-Unkn_f9393:
- sine_wave $100
-
-Unkn_f93d3:
- db $00, $00, $00
- db $04, $01, $00
- db $11, $02, $00
- db $12, $02, $00
- db $15, $00, $00
- db $16, $00, $00
- db $17, $00, $00
- db $18, $00, $00
- db $19, $00, $00
- db $1a, $00, $00
- db $14, $00, $00
- db $13, $03, $00
- db $1b, $04, $00
-
-Jumptable_f93fa:
- dw Func_f9404
- dw Func_f8470
- dw Func_f87fb
- dw Func_f880b
- dw Func_f882b
-
-Func_f9404:
- ret
-
-Unkn_f9405:
- dw Unkn_f943d
- dw Unkn_f9440
- dw Unkn_f9445
- dw Unkn_f944a
- dw Unkn_f944f
- dw Unkn_f9454
- dw Unkn_f9459
- dw Unkn_f945e
- dw Unkn_f9463
- dw Unkn_f9468
- dw Unkn_f946d
- dw Unkn_f9472
- dw Unkn_f9477
- dw Unkn_f947c
- dw Unkn_f9481
- dw Unkn_f9486
- dw Unkn_f948b
- dw Unkn_f9494
- dw Unkn_f9499
- dw Unkn_f949e
- dw Unkn_f94fb
- dw Unkn_f94a1
- dw Unkn_f94b0
- dw Unkn_f94bf
- dw Unkn_f94ce
- dw Unkn_f94dd
- dw Unkn_f94ec
- dw Unkn_f94fe
-
-Unkn_f943d:
- frame $00, 32
- endanim
-
-Unkn_f9440:
- frame $01, 8
- frame $02, 8
- dorestart
-
-Unkn_f9445:
- frame $03, 8
- frame $04, 8
- dorestart
-
-Unkn_f944a:
- frame $05, 8
- frame $06, 8
- dorestart
-
-Unkn_f944f:
- frame $07, 8
- frame $08, 8
- dorestart
-
-Unkn_f9454:
- frame $09, 8
- frame $0a, 8
- dorestart
-
-Unkn_f9459:
- frame $0b, 8
- frame $0c, 8
- dorestart
-
-Unkn_f945e:
- frame $0d, 8
- frame $0e, 8
- dorestart
-
-Unkn_f9463:
- frame $01, 8, OAM_HFLIP, OAM_VFLIP
- frame $02, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f9468:
- frame $03, 8, OAM_HFLIP, OAM_VFLIP
- frame $04, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f946d:
- frame $05, 8, OAM_HFLIP, OAM_VFLIP
- frame $06, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f9472:
- frame $07, 8, OAM_HFLIP, OAM_VFLIP
- frame $08, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f9477:
- frame $09, 8, OAM_HFLIP, OAM_VFLIP
- frame $0a, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f947c:
- frame $0b, 8, OAM_HFLIP, OAM_VFLIP
- frame $0c, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f9481:
- frame $0d, 8, OAM_HFLIP, OAM_VFLIP
- frame $0e, 8, OAM_HFLIP, OAM_VFLIP
- dorestart
-
-Unkn_f9486:
- frame $11, 7
- frame $12, 7
- dorestart
-
-Unkn_f948b:
- frame $13, 2
- frame $14, 2
- dorepeat 8
- frame $15, 2
- endanim
-
-Unkn_f9494:
- frame $16, 32
- frame $16, 32
- delanim
-
-Unkn_f9499:
- frame $17, 32
- frame $17, 32
- delanim
-
-Unkn_f949e:
- frame $18, 32
- endanim
-
-Unkn_f94a1:
- frame $1a, 4
- dorepeat 1
- frame $1a, 3
- dorepeat 1
- frame $1a, 2
- dorepeat 1
- frame $1a, 1
- delanim
-
-Unkn_f94b0:
- frame $1b, 4
- dorepeat 1
- frame $1b, 3
- dorepeat 1
- frame $1b, 2
- dorepeat 1
- frame $1b, 1
- delanim
-
-Unkn_f94bf:
- frame $1c, 4
- dorepeat 1
- frame $1c, 3
- dorepeat 1
- frame $1c, 2
- dorepeat 1
- frame $1c, 1
- delanim
-
-Unkn_f94ce:
- frame $1d, 4
- dorepeat 1
- frame $1d, 3
- dorepeat 1
- frame $1d, 2
- dorepeat 1
- frame $1d, 1
- delanim
-
-Unkn_f94dd:
- frame $1e, 4
- dorepeat 1
- frame $1e, 3
- dorepeat 1
- frame $1e, 2
- dorepeat 1
- frame $1e, 1
- delanim
-
-Unkn_f94ec:
- frame $1f, 4
- dorepeat 1
- frame $1f, 3
- dorepeat 1
- frame $1f, 2
- dorepeat 1
- frame $1f, 1
- delanim
-
-Unkn_f94fb:
- frame $19, 1
- delanim
-
-Unkn_f94fe:
- frame $20, 7
- frame $21, 7
- frame $22, 7
- frame $23, 7
- dorestart
-
-Unkn_f9507:
- dbw $00, Unkn_f9573
- dbw $00, Unkn_f9578
- dbw $36, Unkn_f9578
- dbw $03, Unkn_f9578
- dbw $39, Unkn_f9578
- dbw $06, Unkn_f9578
- dbw $3c, Unkn_f9578
- dbw $09, Unkn_f9578
- dbw $60, Unkn_f9578
- dbw $0c, Unkn_f9578
- dbw $63, Unkn_f9578
- dbw $30, Unkn_f9578
- dbw $66, Unkn_f9578
- dbw $33, Unkn_f9578
- dbw $69, Unkn_f9578
- dbw $6c, Unkn_f9578
- dbw $9c, Unkn_f9578
- dbw $a0, Unkn_f9578
- dbw $a3, Unkn_f9578
- dbw $a7, Unkn_f95db
- dbw $a8, Unkn_f95f4
- dbw $98, Unkn_f9625
- dbw $e0, Unkn_f959d
- dbw $e6, Unkn_f959d
- dbw $ca, Unkn_f959d
- dbw $a7, Unkn_f95ce
- dbw $00, Unkn_f9632
- dbw $00, Unkn_f963f
- dbw $00, Unkn_f9650
- dbw $00, Unkn_f9661
- dbw $00, Unkn_f9672
- dbw $00, Unkn_f9683
- dbw $80, Unkn_f9694
- dbw $84, Unkn_f9694
- dbw $88, Unkn_f9694
- dbw $8c, Unkn_f9694
-
-Unkn_f9573:
- db 1
- db $fc, $fc, $00, $00
-
-Unkn_f9578:
- db 9
- db $f4, $f4, $00, $00
- db $f4, $fc, $01, $00
- db $f4, $04, $02, $00
- db $fc, $f4, $10, $00
- db $fc, $fc, $11, $00
- db $fc, $04, $12, $00
- db $04, $f4, $20, $00
- db $04, $fc, $21, $00
- db $04, $04, $22, $00
-
-Unkn_f959d:
- db 12
- db $f8, $e8, $00, $00
- db $f8, $f0, $01, $00
- db $f8, $f8, $02, $00
- db $f8, $00, $03, $00
- db $f8, $08, $04, $00
- db $f8, $10, $05, $00
- db $00, $e8, $10, $00
- db $00, $f0, $11, $00
- db $00, $f8, $12, $00
- db $00, $00, $13, $00
- db $00, $08, $14, $00
- db $00, $10, $15, $00
-
-Unkn_f95ce:
- db 3
- db $fc, $0b, $00, $10
- db $04, $03, $0f, $10
- db $04, $0b, $10, $10
-
-Unkn_f95db:
- db 6
- db $fc, $f0, $00, $30
- db $fc, $08, $00, $10
- db $04, $f0, $10, $30
- db $04, $f8, $0f, $30
- db $04, $00, $0f, $10
- db $04, $08, $10, $10
-
-Unkn_f95f4:
- db 12
- db $f4, $f0, $00, $10
- db $f4, $f8, $01, $10
- db $f4, $00, $01, $30
- db $f4, $08, $00, $30
- db $fc, $f0, $10, $10
- db $fc, $f8, $11, $10
- db $fc, $00, $11, $30
- db $fc, $08, $10, $30
- db $04, $f0, $20, $10
- db $04, $f8, $21, $10
- db $04, $00, $21, $30
- db $04, $08, $20, $30
-
-Unkn_f9625:
- db 3
- db $04, $f4, $00, $00
- db $04, $fc, $01, $00
- db $04, $04, $02, $00
-
-Unkn_f9632:
- db 3
- db $fc, $f4, $bf, $00
- db $fc, $fc, $d5, $00
- db $fc, $04, $d0, $00
-
-Unkn_f963f:
- db 4
- db $fc, $f0, $bf, $00
- db $fc, $f8, $d1, $00
- db $fc, $00, $d5, $00
- db $fc, $08, $d0, $00
-
-Unkn_f9650:
- db 4
- db $fc, $f0, $bf, $00
- db $fc, $f8, $d3, $00
- db $fc, $00, $d5, $00
- db $fc, $08, $d0, $00
-
-Unkn_f9661:
- db 4
- db $fc, $f0, $bf, $00
- db $fc, $f8, $d7, $00
- db $fc, $00, $d5, $00
- db $fc, $08, $d0, $00
-
-Unkn_f9672:
- db 4
- db $fc, $f0, $bf, $00
- db $fc, $f8, $d1, $00
- db $fc, $00, $d8, $00
- db $fc, $08, $d0, $00
-
-Unkn_f9683:
- db 4
- db $fc, $f0, $bf, $00
- db $fc, $f8, $d5, $00
- db $fc, $00, $d0, $00
- db $fc, $08, $d0, $00
-
-Unkn_f9694:
- db 12
- db $f4, $f0, $03, $20
- db $f4, $f8, $02, $20
- db $f4, $00, $01, $20
- db $f4, $08, $00, $20
- db $fc, $f0, $13, $20
- db $fc, $f8, $12, $20
- db $fc, $00, $11, $20
- db $fc, $08, $10, $20
- db $04, $f0, $23, $20
- db $04, $f8, $22, $20
- db $04, $00, $21, $20
- db $04, $08, $20, $20
-
-Unkn_f96c5:
- db 0, 0, 0, 1, 1, 1, 1, 2
- db 2, 2, 1, 1, 1, 1, 0, 0
- db 0, 0, 0, -1, -1, -1, -1, -2
- db -2, -2, -1, -1, -1, -1, 0, 0
-
-Unkn_f96e5:
- db $00, $00, $00, $00
- db $0b, $0b, $0b, $0b
- db $0b, $02, $02, $06
- db $03, $0b, $07, $03
- db $06, $06, $06, $06
- db $07, $07, $07, $07
- db $06, $04, $04, $08
- db $05, $07, $08, $05
- db $0b, $0b, $11, $12
- db $0b, $0b, $13, $03
- db $14, $12, $04, $08
- db $13, $07, $08, $05
- db $06, $14, $06, $14
- db $13, $07, $13, $07
- db $08, $08, $08, $08
- db $14, $12, $14, $12
- db $0b, $11, $02, $14
- db $06, $14, $06, $14
- db $0c, $0c, $0d, $0d
- db $0d, $0d, $0d, $0d
- db $0e, $0f, $10, $0b
- db $12, $13, $12, $13
-
-Unkn_f973d:
- db $00, $00, $00, $01, $01, $01, $01, $01
-Unkn_f9745:
- db $00, $00, $00, $01, $01, $02, $04, $06
-Unkn_f974d:
- db $00, $00, $00, $01, $02, $04, $06, $0e
-Unkn_f9755:
- db $00, $00, $00, $10, $11, $06, $0e, $0e
-Unkn_f975d:
- db $00, $00, $00, $15, $15, $0e, $0e, $0e
-Unkn_f9765:
- db $00, $00, $00, $03, $05, $07, $0e, $0e
-Unkn_f976d:
- db $00, $00, $00, $01, $03, $05, $07, $0e
-Unkn_f9775:
- db $00, $00, $00, $01, $01, $03, $05, $07
-Unkn_f977d:
- db $00, $00, $00, $01, $01, $02, $04, $06
-Unkn_f9785:
- db $00, $00, $00, $01, $02, $04, $06, $0e
-Unkn_f978d:
- db $00, $00, $00, $08, $0f, $0a, $0e, $0e
-Unkn_f9795:
- db $00, $00, $00, $09, $0d, $0b, $0e, $0e
-Unkn_f979d:
- db $00, $00, $00, $01, $03, $05, $07, $0e
-Unkn_f97a5:
- db $00, $00, $00, $01, $01, $03, $05, $07
-Unkn_f97ad:
- db $00, $00, $00, $01, $01, $02, $04, $06
-Unkn_f97b5:
- db $00, $00, $00, $01, $10, $11, $06, $0e
-Unkn_f97bd:
- db $00, $00, $00, $01, $15, $15, $0e, $0e
-Unkn_f97c5:
- db $00, $00, $00, $01, $03, $05, $07, $0e
-Unkn_f97cd:
- db $00, $00, $00, $01, $01, $03, $05, $07
-Unkn_f97d5:
- db $00, $00, $00, $01, $01, $02, $04, $06
-Unkn_f97dd:
- db $00, $00, $00, $01, $08, $0f, $0a, $0e
-Unkn_f97e5:
- db $00, $00, $00, $01, $09, $0d, $0b, $0e
-Unkn_f97ed:
- db $00, $00, $00, $01, $01, $03, $05, $07
-Unkn_f97f5:
- db $00, $00, $00, $01, $01, $10, $11, $06
-Unkn_f97fd:
- db $00, $00, $00, $01, $01, $15, $15, $0e
-Unkn_f9805:
- db $00, $00, $00, $01, $01, $03, $05, $07
-Unkn_f980d:
- db $00, $00, $00, $01, $01, $08, $0f, $0a
-Unkn_f9815:
- db $00, $00, $00, $01, $01, $09, $0d, $0b
-Unkn_f981d:
- db $00, $00, $00, $14, $14, $14, $14, $14
-Unkn_f9825:
- db $00, $00, $00, $12, $13, $13, $13, $13
-
-PlayIntroScene:
- ld a, [rIE]
- push af
- xor a
- ld [rIF], a
- ld a, $f
- ld [rIE], a
- ld a, $8
- ld [rSTAT], a
- call Func_f9f0d
- call DelayFrame
-.asm_f9841
- ld a, [wc634]
- bit 7, a
- jr nz, .asm_f986e
- call JoypadLowSensitivity
- ld a, [hJoyPressed]
- and $b
- jr nz, .asm_f986e
- call Func_f98fc
- ld a, $0
- ld [wCurrentAnimatedObjectOAMBufferOffset], a
- call RunObjectAnimations
- ld a, [wc634]
- cp $7
- call z, Func_f98a2
- cp $b
- call z, Func_f98cb
- call DelayFrame
- jr .asm_f9841
-
-.asm_f986e
- call Func_f9fc9
- xor a
- ld [hLCDCPointer], a
- call DelayFrame
- xor a
- ld [rIF], a
- pop af
- ld [rIE], a
- ld a, $90
- ld [hWY], a
- call ClearObjectAnimationBuffers
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- xor a
- call Func_f9fb3
- call Func_f9fbe
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- call DelayFrame
- call DelayFrame
- call DelayFrame
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ret
-
-Func_f98a2:
- ld a, [wOAMBuffer + 8 * 4 + 3]
- or $1
- ld [wOAMBuffer + 8 * 4 + 3], a
- ld a, [wOAMBuffer + 14 * 4 + 3]
- or $1
- ld [wOAMBuffer + 14 * 4 + 3], a
- ld a, [wOAMBuffer + 16 * 4 + 3]
- or $1
- ld [wOAMBuffer + 16 * 4 + 3], a
-Func_f98b8:
- ld a, [wOAMBuffer + 18 * 4 + 3]
- or $1
- ld [wOAMBuffer + 18 * 4 + 3], a
- ld a, [wOAMBuffer + 19 * 4 + 3]
- or $1
- ld [wOAMBuffer + 19 * 4 + 3], a
- ret
-
-Func_f98cb:
- ld a, [wOAMBuffer + 18 * 4 + 3]
- or $1
- ld [wOAMBuffer + 18 * 4 + 3], a
- ld a, [wOAMBuffer + 19 * 4 + 3]
- or $1
- ld [wOAMBuffer + 19 * 4 + 3], a
- ld a, [wOAMBuffer + 20 * 4 + 3]
- or $1
- ld [wOAMBuffer + 20 * 4 + 3], a
- ld a, [wOAMBuffer + 25 * 4 + 3]
- or $1
- ld [wOAMBuffer + 25 * 4 + 3], a
- ld a, [wOAMBuffer + 26 * 4 + 3]
- or $1
- ld [wOAMBuffer + 26 * 4 + 3], a
- ld a, [wOAMBuffer + 28 * 4 + 3]
- or $1
- ld [wOAMBuffer + 28 * 4 + 3], a
- ret
-
-Func_f98fc:
- ld a, [wc634]
- ld hl, Jumptable_f9906
- call Func_fa06e
- jp [hl]
-
-Jumptable_f9906:
- dw Func_f992f
- dw Func_f995f
- dw Func_f996a
- dw Func_f9a08
- dw Func_f9a1e
- dw Func_f9a60
- dw Func_f9a6b
- dw Func_f9ab1
- dw Func_f9ad8
- dw Func_f9af9
- dw Func_f9b04
- dw Func_f9bf6
- dw Func_f9cac
- dw Func_f9d12
- dw Func_f9d22
- dw Func_f9d8f
- dw Func_f9dbf
- dw Func_f9e12
-
-Func_f992a:
- ld hl, wc634
- inc [hl]
- ret
-
-Func_f992f:
- xor a
- ld [hLCDCPointer], a
- lb de, $58, $58
- ld a, $1
- call Func_f9e1d
- xor a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $90
- ld [hWY], a
- ld a, $e4
- ld [rBGP], a
- ld [rOBP0], a
- ld a, $c4
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ld a, $82
- ld [wc635], a
- call Func_f992a
- ret
-
-Func_f995f:
- call Func_f9e41
- ret nc
- call Func_f9e29
- call Func_f992a
- ret
-
-Func_f996a:
- call Func_f9e80
- ld c, $8
- call UpdateMusicCTimes
- xor a
- ld [hLCDCPointer], a
- ld hl, vBGMap0
- ld bc, $400
- xor a
- call Func_f9fb3
- call Func_f9996
- lb de, $58, $b8 ; overloaded
- ld a, $4 ; overloaded
- call Func_f99d2
- ld a, $1
- call Func_f9e9a
- call Func_f9e35
- call Func_f992a
- ret
-
-Func_f9996:
- ld hl, $98d4
- ld de, $20
- ld b, $6
- ld a, $90
-.asm_f99a0
- ld c, $6
- push af
- push hl
-.asm_f99a4
- ld [hli], a
- inc a
- dec c
- jr nz, .asm_f99a4
- pop hl
- add hl, de
- pop af
- add $10
- dec b
- jr nz, .asm_f99a0
- ld a, [hGBC]
- and a
- jr z, .asm_f99d1
- ld hl, $98d4
- ld de, $20
- ld b, $6
- ld a, $1
- ld [rVBK], a
-.asm_f99c2
- ld c, $6
- push hl
-.asm_f99c5
- ld [hli], a
- dec c
- jr nz, .asm_f99c5
- pop hl
- add hl, de
- dec b
- jr nz, .asm_f99c2
- xor a
- ld [rVBK], a
-.asm_f99d1
- ret
-
-Func_f99d2:
- ld hl, Unkn_f99f0
- ld a, $8
-.asm_f99d7
- push af
- ld e, [hl]
- inc hl
- ld d, [hl]
- inc hl
- ld a, [hli]
- push hl
- push af
- ld a, $8
- call SpawnAnimatedObject
- pop af
- ld hl, $b
- add hl, bc
- ld [hl], a
- pop hl
- pop af
- dec a
- jr nz, .asm_f99d7
- ret
-
-Unkn_f99f0:
- db $d0, $20, $02
- db $f0, $30, $04
- db $d0, $40, $06
- db $c0, $50, $08
- db $e0, $60, $08
- db $c0, $70, $06
- db $e0, $80, $04
- db $f0, $90, $02
-
-Func_f9a08:
- call Func_f9e41
- jr c, .asm_f9a17
- ld a, [hSCX]
- cp $68
- ret z
- add $4
- ld [hSCX], a
- ret
-
-.asm_f9a17
- call MaskAllAnimatedObjectStructs
- call Func_f992a
- ret
-
-Func_f9a1e:
- call Func_f9e80
- ld c, $5
- call UpdateMusicCTimes
- ld a, [hGBC]
- and a
- jr z, .asm_f9a47
- ld hl, $98d4
- ld de, $20
- ld b, $6
- ld a, $1
- ld [rVBK], a
- xor a
-.asm_f9a38
- ld c, $6
- push hl
-.asm_f9a3b
- ld [hli], a
- dec c
- jr nz, .asm_f9a3b
- pop hl
- add hl, de
- dec b
- jr nz, .asm_f9a38
- xor a
- ld [rVBK], a
-.asm_f9a47
- xor a
- ld [hLCDCPointer], a
- call Func_f9e5f
- lb de, $58, $58
- ld a, $2
- call Func_f9e1d
- xor a
- call Func_f9e9a
- call Func_f9e35
- call Func_f992a
- ret
-
-Func_f9a60:
- call Func_f9e41
- ret nc
- call Func_f9e29
- call Func_f992a
- ret
-
-Func_f9a6b:
- call Func_f9e80
- ld c, $5
- call UpdateMusicCTimes
- ld a, $42
- ld [hLCDCPointer], a
- call Func_f9ec4
- ld hl, vBGMap0
- ld bc, $60
- xor a
- call Func_f9fb3
- ld hl, $9860
- ld c, $10
- ld a, $20
-.asm_f9a8b
- ld [hli], a
- inc a
- ld [hli], a
- dec a
- dec c
- jr nz, .asm_f9a8b
- ld hl, $9880
- ld bc, $300
- ld a, $10
- call Func_f9fb3
- lb de, $40, $f8
- ld a, $5
- call Func_f9e1d
- ld a, $1
- call Func_f9e9a
- call Func_f9e3b
- call Func_f992a
- ret
-
-Func_f9ab1:
- call Func_f9e41
- jr c, .asm_f9ad1
- ld hl, hSCX
- inc [hl]
- inc [hl]
- ld hl, wc800
- ld de, wc800 + 1
- ld a, [hl]
- push af
- ld c, $ff
-.asm_f9ac5
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .asm_f9ac5
- pop af
- ld [hl], a
- call Func_f9ef8
- ret
-
-.asm_f9ad1
- call Func_f9e29
- call Func_f992a
- ret
-
-Func_f9ad8:
- call Func_f9e80
- ld c, $5
- call UpdateMusicCTimes
- xor a
- ld [hLCDCPointer], a
- call Func_f9e5f
- lb de, $58, $58
- ld a, $3
- call Func_f9e1d
- xor a
- call Func_f9e9a
- call Func_f9e35
- call Func_f992a
- ret
-
-Func_f9af9:
- call Func_f9e41
- ret nc
- call Func_f9e29
- call Func_f992a
- ret
-
-Func_f9b04:
- call Func_f9e80
- ld c, $5
- call UpdateMusicCTimes
- xor a
- ld [hLCDCPointer], a
- ld hl, vBGMap0
- ld bc, $400
- xor a
- call Func_f9fb3
- ld hl, vBGMap0
- ld bc, $100
- ld a, $2
- call Func_f9fb3
- ld hl, $9900
- ld de, Unkn_f9b6e
- lb bc, 6, 20
- call .FillBGMapBox
- ld hl, $988c
- ld de, Unkn_f9be6
- lb bc, 3, 4
- call .FillBGMapBox
- ld hl, $98e3
- ld de, Unkn_f9bf2
- lb bc, 2, 2
- call .FillBGMapBox
- lb de, $98, $58
- ld a, $6
- call Func_f9e1d
- ld a, $1
- call Func_f9e9a
- call Func_f9e35
- call Func_f992a
- ret
-
-.FillBGMapBox:
-.fill_row
- push bc
- push hl
-.fill_col
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .fill_col
- pop hl
- ld bc, $20
- add hl, bc
- pop bc
- dec b
- jr nz, .fill_row
- ret
-
-Unkn_f9b6e: INCBIN "gfx/unknown_f9b6e.map"
-Unkn_f9be6: INCBIN "gfx/unknown_f9be6.map"
-Unkn_f9bf2: INCBIN "gfx/unknown_f9bf2.map"
-
-Func_f9bf6:
- call Func_f9e41
- jr c, .asm_f9c25
- ld a, [wc635]
- and $7
- ret nz
- ld a, [wc635]
- and $8
- sla a
- sla a
- sla a
- ld e, a
- ld d, $0
- ld hl, GFX_f9c2c
- add hl, de
- ld a, l
- ld [H_VBCOPYSRC], a
- ld a, h
- ld [H_VBCOPYSRC + 1], a
- xor a
- ld [H_VBCOPYDEST], a
- ld a, $96
- ld [H_VBCOPYDEST + 1], a
- ld a, $4
- ld [H_VBCOPYSIZE], a
- ret
-
-.asm_f9c25
- call Func_f9e29
- call Func_f992a
- ret
-
-GFX_f9c2c: INCBIN "gfx/unknown_f9c2c.2bpp"
-GFX_f9c6c: INCBIN "gfx/unknown_f9c6c.2bpp" ; indirectly referenced
-
-Func_f9cac:
- call Func_f9e80
- ld c, $5
- call UpdateMusicCTimes
- xor a
- ld [hLCDCPointer], a
- ld hl, vBGMap0
- ld bc, $80
- ld a, $1
- call Func_f9fb3
- ld hl, $9880
- ld bc, $140
- xor a
- call Func_f9fb3
- ld hl, $99c0
- ld bc, $80
- ld a, $1
- call Func_f9fb3
- ld hl, $98c5
- ld de, $20
- ld a, $4
- ld b, $8
-.asm_f9ce1
- ld c, $c
- push hl
-.asm_f9ce4
- ld [hli], a
- inc a
- dec c
- jr nz, .asm_f9ce4
- pop hl
- add hl, de
- add $4
- dec b
- jr nz, .asm_f9ce1
- ld hl, $98c4
- ld [hl], $3
- ld hl, $98e4
- ld [hl], $74
- ld hl, $99a5
- ld [hl], $0
- lb de, $60, $58
- ld a, $9
- call Func_f9e1d
- xor a
- call Func_f9e9a
- call Func_f9e35
- call Func_f992a
- ret
-
-Func_f9d12:
- call Func_f9e41
- ret nc
- lb de, $68, $58
- ld a, $a
- call SpawnAnimatedObject
- call Func_f992a
- ret
-
-Func_f9d22:
- ld de, Unkn_f9dd6
- call Func_f9e4d
- jr c, .asm_f9d3c
- ld [rBGP], a
- ld [rOBP0], a
- and $f0
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-.asm_f9d3c
- call MaskAllAnimatedObjectStructs
- call Func_f9fbe
- ld hl, wTileMap
- ld bc, $50
- ld a, $1
- call Func_f9fb3
- coord hl, 0, 4
- ld bc, CopyVideoDataAlternate
- xor a
- call Func_f9fb3
- coord hl, 0, 14
- ld bc, $50
- ld a, $1
- call Func_f9fb3
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- call DelayFrame
- call DelayFrame
- call DelayFrame
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld a, $e4
- ld [rOBP0], a
- ld [rBGP], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- lb de, $58, $58
- ld a, $7
- call Func_f9e1d
- call Func_f992a
- ld a, $28
- ld [wc635], a
- ret
-
-Func_f9d8f:
- call Func_f9e41
- jr c, .asm_f9dad
- ld a, [wc635]
- and $3
- ret nz
- ld a, [rOBP0]
- xor $ff
- ld [rOBP0], a
- ld a, [rBGP]
- xor $3
- ld [rBGP], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- ret
-
-.asm_f9dad
- xor a
- ld [hLCDCPointer], a
- ld a, $e4
- ld [rBGP], a
- ld [rOBP0], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call Func_f992a
-Func_f9dbf:
- ld de, Unkn_f9e0a
- call Func_f9e4d
- jr c, .asm_f9dd2
- ld [rOBP0], a
- ld [rBGP], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- ret
-
-.asm_f9dd2
- call Func_f992a
- ret
-
-Unkn_f9dd6:
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $e4
- db $e4, $c0, $c0, $ff
-
-Unkn_f9e0a:
- db $e4, $90, $90, $40
- db $40, $00, $00, $ff
-
-Func_f9e12:
- ld c, 64
- call DelayFrames
- ld hl, wc634
- set 7, [hl]
- ret
-
-Func_f9e1d:
- call SpawnAnimatedObject
- ld a, c
- ld [wc636], a
- ld a, b
- ld [wc636 + 1], a
- ret
-
-Func_f9e29:
- ld a, [wc636]
- ld c, a
- ld a, [wc636 + 1]
- ld b, a
- call MaskCurrentAnimatedObjectStruct
- ret
-
-Func_f9e35:
- ld a, $80
- ld [wc635], a
- ret
-
-Func_f9e3b:
- ld a, $58
- ld [wc635], a
- ret
-
-Func_f9e41:
- ld hl, wc635
- ld a, [hl]
- and a
- jr z, .asm_f9e4b
- dec [hl]
- and a
- ret
-
-.asm_f9e4b
- scf
- ret
-
-Func_f9e4d:
- ld hl, wc635
- ld a, [hl]
- inc [hl]
- ld l, a
- ld h, $0
- add hl, de
- ld a, [hl]
- cp $ff
- jr z, .asm_f9e5d
- and a
- ret
-
-.asm_f9e5d
- scf
- ret
-
-Func_f9e5f:
- ld hl, vBGMap0
- ld bc, $80
- ld a, $1
- call Func_f9fb3
- ld hl, $9880
- ld bc, $140
- xor a
- call Func_f9fb3
- ld hl, $99c0
- ld bc, $80
- ld a, $1
- call Func_f9fb3
- ret
-
-Func_f9e80:
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- call DelayFrame
- call DelayFrame
- call DisableLCD
- ret
-
-Func_f9e9a:
- ld e, a
- callab Func_720ad
- xor a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $90
- ld [hWY], a
- ld a, $e3
- ld [rLCDC], a
- ld a, $e4
- ld [rBGP], a
- ld [rOBP0], a
- ld a, $e0
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-Func_f9ec4:
- ld de, wc800
- ld a, $8
-.asm_f9ec9
- push af
- ld hl, Unkn_f9ed8
- ld bc, $20
- call Func_f9faa
- pop af
- dec a
- jr nz, .asm_f9ec9
- ret
-
-Unkn_f9ed8:
- db 0, 0, 1, 2, 2, 3, 3, 3
- db 4, 3, 3, 3, 2, 2, 1, 0
- db 0, 0, -1, -2, -2, -3, -3, -3
- db -4, -3, -3, -3, -2, -2, -1, 0
-
-Func_f9ef8:
- ld a, $10
- ld [H_VBCOPYSRC], a
- ld a, $c8
- ld [H_VBCOPYSRC + 1], a
- ld a, $10
- ld [H_VBCOPYDEST], a
- ld a, $c7
- ld [H_VBCOPYDEST + 1], a
- ld a, $7
- ld [H_VBCOPYSIZE], a
- ret
-
-Func_f9f0d:
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld [hSCX], a
- ld [hSCY], a
- ld [H_AUTOBGTRANSFERDEST], a
- ld a, $98
- ld [H_AUTOBGTRANSFERDEST + 1], a
- call Func_f9f9e
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- ld a, $1
- call Func_f9fb3
- coord hl, 0, 4
- ld bc, CopyVideoDataAlternate
- xor a
- call Func_f9fb3
- ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a
- call DelayFrame
- call DelayFrame
- call DelayFrame
- xor a
- ld [H_AUTOBGTRANSFERENABLED], a
- ld de, $6b5a
- ld hl, $8000
- ld bc, $3eff
- call CopyVideoData
- ld de, $635a
- ld hl, $9000
- ld bc, $3e80
- call CopyVideoData
- call ClearObjectAnimationBuffers
- call Func_f9f75
- ld b, $8
- call RunPaletteCommand
- xor a
- ld hl, wc634
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld a, MUSIC_INTRO_BATTLE
- ld c, BANK(Music_IntroBattle)
- call PlayMusic
- ret
-
-Func_f9f75:
- ld a, Unkn_f9fda % $100
- ld [wAnimatedObjectSpawnStateDataPointer], a
- ld a, Unkn_f9fda / $100
- ld [wAnimatedObjectSpawnStateDataPointer + 1], a
- ld a, Jumptable_f9ffb % $100
- ld [wAnimatedObjectJumptablePointer], a
- ld a, Jumptable_f9ffb / $100
- ld [wAnimatedObjectJumptablePointer + 1], a
- ld a, Unkn_fa13d % $100
- ld [wAnimatedObjectOAMDataPointer], a
- ld a, Unkn_fa13d / $100
- ld [wAnimatedObjectOAMDataPointer + 1], a
- ld a, Unkn_fa0ea % $100
- ld [wAnimatedObjectFramesDataPointer], a
- ld a, Unkn_fa0ea / $100
- ld [wAnimatedObjectFramesDataPointer + 1], a
- ret
-
-Func_f9f9e:
- ld hl, wTileMap
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- ld a, $7f
- call Func_f9fb3
- ret
-
-Func_f9faa:
- ld a, [hli]
- ld [de], a
- inc de
- dec bc
- ld a, c
- or b
- jr nz, Func_f9faa
- ret
-
-Func_f9fb3:
- push de
- ld e, a
-.asm_f9fb5
- ld a, e
- ld [hli], a
- dec bc
- ld a, c
- or b
- jr nz, .asm_f9fb5
- pop de
- ret
-
-Func_f9fbe:
- ld hl, wSpriteDataEnd
- ld bc, $a0
- xor a
- call Func_f9fb3
- ret
-
-Func_f9fc9:
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- call UpdateGBCPal_BGP
- call UpdateGBCPal_OBP0
- call UpdateGBCPal_OBP1
- ret
-
-Unkn_f9fda:
- db $00, $00, $00
- db $01, $01, $00
- db $02, $01, $00
- db $03, $01, $00
- db $04, $02, $00
- db $05, $03, $00
- db $06, $04, $00
- db $07, $01, $00
- db $08, $05, $00
- db $09, $01, $00
- db $0a, $01, $00
-
-Jumptable_f9ffb:
- dw Func_fa007
- dw Func_fa007
- dw Func_fa008
- dw Func_fa014
- dw Func_fa02b
- dw Func_fa062
-
-Func_fa007:
- ret
-
-Func_fa008:
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $58
- ret z
- sub $4
- ld [hl], a
- ret
-
-Func_fa014:
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $58
- jr z, .asm_fa020
- add $4
- ld [hl], a
-.asm_fa020
- ld hl, $5
- add hl, bc
- cp $58
- ret z
- add $1
- ld [hl], a
- ret
-
-Func_fa02b:
- ld hl, $b
- add hl, bc
- ld e, [hl]
- ld d, $0
- ld hl, Jumptable_fa03b
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_fa03b:
- dw Func_fa03f
- dw Func_fa051
-
-Func_fa03f:
- ld hl, $5
- add hl, bc
- ld a, [hl]
- cp $58
- jr z, .asm_fa04c
- sub $2
- ld [hl], a
- ret
-
-.asm_fa04c
- ld hl, $b
- add hl, bc
- inc [hl]
-Func_fa051:
- ld hl, $c
- add hl, bc
- ld a, [hl]
- inc [hl]
- ld d, $8
- call Func_fa079
- ld hl, $7
- add hl, bc
- ld [hl], a
- ret
-
-Func_fa062:
- ld hl, $b
- add hl, bc
- ld a, [hl]
- ld hl, $4
- add hl, bc
- add [hl]
- ld [hl], a
- ret
-
-Func_fa06e:
- ld e, a
- ld d, $0
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ret
-
-Func_fa077: ; cosine
- add $10
-Func_fa079:
- and $3f
- cp $20
- jr nc, .asm_fa084
- call Func_fa08e
- ld a, h
- ret
-
-.asm_fa084
- and $1f
- call Func_fa08e
- ld a, h
- xor $ff
- inc a
- ret
-
-Func_fa08e:
- ld e, a
- ld a, d
- ld d, $0
- ld hl, Unkn_fa0aa
- add hl, de
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld hl, $0
-.asm_fa09d
- srl a
- jr nc, .asm_fa0a2
- add hl, de
-.asm_fa0a2
- sla e
- rl d
- and a
- jr nz, .asm_fa09d
- ret
-
-Unkn_fa0aa:
- sine_wave $100
-
-Unkn_fa0ea:
- dw Unkn_fa100
- dw Unkn_fa103
- dw Unkn_fa10a
- dw Unkn_fa111
- dw Unkn_fa118
- dw Unkn_fa11b
- dw Unkn_fa11e
- dw Unkn_fa121
- dw Unkn_fa124
- dw Unkn_fa127
- dw Unkn_fa138
-
-Unkn_fa100:
- frame $00, 32
- endanim
-
-Unkn_fa103:
- frame $01, 4
- frame $02, 4
- frame $03, 4
- dorestart
-
-Unkn_fa10a:
- frame $04, 4
- frame $05, 4
- frame $06, 4
- dorestart
-
-Unkn_fa111:
- frame $07, 4
- frame $08, 4
- frame $09, 4
- dorestart
-
-Unkn_fa118:
- frame $0a, 32
- endanim
-
-Unkn_fa11b:
- frame $0b, 32
- endanim
-
-Unkn_fa11e:
- frame $0c, 32
- endanim
-
-Unkn_fa121:
- frame $0d, 32
- endanim
-
-Unkn_fa124:
- frame $0e, 32
- endanim
-
-Unkn_fa127:
- frame $0f, 31
- frame $11, 2
- frame $0f, 2
- frame $11, 2
- frame $0f, 31
- frame $11, 2
- frame $0f, 23
- frame $10, 32
- endanim
-
-Unkn_fa138:
- frame $12, 4
- frame $13, 4
- dorestart
-
-Unkn_fa13d:
- dbw $00, Unkn_fa179
- dbw $96, Unkn_fa17e
- dbw $98, Unkn_fa17e
- dbw $9a, Unkn_fa17e
- dbw $0c, Unkn_fa18f
- dbw $0e, Unkn_fa18f
- dbw $3c, Unkn_fa18f
- dbw $60, Unkn_fa1b0
- dbw $70, Unkn_fa1b0
- dbw $80, Unkn_fa1b0
- dbw $90, Unkn_fa201
- dbw $00, Unkn_fa201
- dbw $06, Unkn_fa201
- dbw $c6, Unkn_fa292
- dbw $6d, Unkn_fa2f7
- dbw $f0, Unkn_fa308
- dbw $f4, Unkn_fa308
- dbw $f8, Unkn_fa308
- dbw $9c, Unkn_fa329
- dbw $ec, Unkn_fa329
-
-Unkn_fa179:
- db 1
- db $fc, $fc, $00, $00
-Unkn_fa17e:
- db 4
- db $f8, $f8, $00, $00
- db $f8, $00, $01, $00
- db $00, $f8, $10, $00
- db $00, $00, $11, $00
-
-Unkn_fa18f:
- db 8
- db $f0, $f8, $00, $00
- db $f0, $00, $01, $00
- db $f8, $f8, $10, $00
- db $f8, $00, $11, $00
- db $00, $f8, $20, $00
- db $00, $00, $20, $20
- db $08, $f8, $21, $00
- db $08, $00, $21, $20
-
-Unkn_fa1b0:
- db 20
- db $e8, $f8, $00, $00
- db $e8, $00, $01, $00
- db $f0, $f8, $02, $00
- db $f0, $00, $03, $00
- db $f8, $f0, $04, $00
- db $f8, $f8, $05, $00
- db $f8, $00, $06, $00
- db $f8, $08, $04, $20
- db $00, $f0, $07, $00
- db $00, $f8, $08, $00
- db $00, $00, $08, $20
- db $00, $08, $07, $20
- db $08, $f0, $09, $00
- db $08, $f8, $0a, $00
- db $08, $00, $0a, $20
- db $08, $08, $09, $20
- db $10, $f0, $0b, $00
- db $10, $f8, $0c, $00
- db $10, $00, $0c, $20
- db $10, $08, $0b, $20
-
-Unkn_fa201:
- db 36
- db $e8, $e8, $00, $00
- db $e8, $f0, $01, $00
- db $e8, $f8, $02, $00
- db $e8, $00, $03, $00
- db $e8, $08, $04, $00
- db $e8, $10, $05, $00
- db $f0, $e8, $10, $00
- db $f0, $f0, $11, $00
- db $f0, $f8, $12, $00
- db $f0, $00, $13, $00
- db $f0, $08, $14, $00
- db $f0, $10, $15, $00
- db $f8, $e8, $20, $00
- db $f8, $f0, $21, $00
- db $f8, $f8, $22, $00
- db $f8, $00, $23, $00
- db $f8, $08, $24, $00
- db $f8, $10, $25, $00
- db $00, $e8, $30, $00
- db $00, $f0, $31, $00
- db $00, $f8, $32, $00
- db $00, $00, $33, $00
- db $00, $08, $34, $00
- db $00, $10, $35, $00
- db $08, $e8, $40, $00
- db $08, $f0, $41, $00
- db $08, $f8, $42, $00
- db $08, $00, $43, $00
- db $08, $08, $44, $00
- db $08, $10, $45, $00
- db $10, $e8, $50, $00
- db $10, $f0, $51, $00
- db $10, $f8, $52, $00
- db $10, $00, $53, $00
- db $10, $08, $54, $00
- db $10, $10, $55, $00
-
-Unkn_fa292:
- db 25
- db $ec, $f0, $00, $00
- db $ec, $f8, $01, $00
- db $ec, $00, $02, $00
- db $ec, $08, $03, $00
- db $ec, $10, $04, $00
- db $f4, $f0, $05, $00
- db $f4, $f8, $06, $00
- db $f4, $00, $07, $00
- db $f4, $08, $08, $00
- db $f4, $10, $09, $00
- db $fc, $f0, $10, $00
- db $fc, $f8, $11, $00
- db $fc, $00, $12, $00
- db $fc, $08, $13, $00
- db $fc, $10, $14, $00
- db $04, $f0, $15, $00
- db $04, $f8, $16, $00
- db $04, $00, $17, $00
- db $04, $08, $18, $00
- db $04, $10, $19, $00
- db $0c, $f0, $20, $00
- db $0c, $f8, $21, $00
- db $0c, $00, $22, $00
- db $0c, $08, $23, $00
- db $0c, $10, $24, $00
-
-Unkn_fa2f7:
- db 4
- db $fc, $f0, $00, $00
- db $fc, $f8, $01, $00
- db $fc, $00, $01, $20
- db $fc, $08, $00, $20
-
-Unkn_fa308:
- db 8
- db $f8, $e8, $00, $10
- db $f8, $f0, $01, $10
- db $00, $e8, $02, $10
- db $00, $f0, $03, $10
- db $f8, $08, $01, $30
- db $f8, $10, $00, $30
- db $00, $08, $03, $30
- db $00, $10, $02, $30
-
-Unkn_fa329:
- db 12
- db $f8, $d8, $00, $10
- db $f8, $e0, $01, $10
- db $f8, $e8, $02, $10
- db $00, $d8, $10, $10
- db $00, $e0, $11, $10
- db $00, $e8, $12, $10
- db $f8, $10, $02, $30
- db $f8, $18, $01, $30
- db $f8, $20, $00, $30
- db $00, $10, $12, $30
- db $00, $18, $11, $30
- db $00, $20, $10, $30
-
+INCLUDE "engine/surfing_minigame.asm"
+INCLUDE "engine/yellow_intro.asm"
+INCLUDE "data/animated_objects_3e_2.asm"
YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp"
-
INCLUDE "engine/animated_objects_3e.asm"
diff --git a/engine/surfing_minigame.asm b/engine/surfing_minigame.asm
new file mode 100755
index 00000000..0e64444a
--- /dev/null
+++ b/engine/surfing_minigame.asm
@@ -0,0 +1,2825 @@
+SurfingPikachuMinigame:
+ call SurfingPikachuMinigame_BlankPals
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ ld a, [hTilesetType]
+ push af
+ xor a
+ ld [hTilesetType], a
+ ld a, [wUpdateSpritesEnabled]
+ push af
+ ld a, $ff
+ ld [wUpdateSpritesEnabled], a
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $f
+ ld [rIE], a
+ ld a, $8
+ ld [rSTAT], a
+ ld a, [H_AUTOBGTRANSFERDEST + 1]
+ push af
+ ld a, $98
+ ld [H_AUTOBGTRANSFERDEST + 1], a
+ call Func_f8fb3
+ call Func_f807a
+ xor a
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ call ClearObjectAnimationBuffers
+ call ClearSprites
+ xor a
+ ld [hLCDCPointer], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ call DelayFrame
+ pop af
+ ld [H_AUTOBGTRANSFERDEST + 1], a
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ xor a
+ ld [rSTAT], a
+ call RunDefaultPaletteCommand
+ call Func_0f16
+ call PlayDefaultMusic
+ call GBPalNormal
+ pop af
+ ld [wUpdateSpritesEnabled], a
+ pop af
+ ld [hTilesetType], a
+ ret
+
+Func_f807a:
+ call Func_f8116
+ call DelayFrame
+ ld b, $e
+ call RunPaletteCommand
+.loop
+ ld a, [wc5d1]
+ bit 7, a
+ ret nz
+ call Func_f923f
+ call Func_f80ac
+ ret nz
+ call Func_f8282
+ ld a, $3c
+ ld [wCurrentAnimatedObjectOAMBufferOffset], a
+ call RunObjectAnimations
+ call Func_f8848
+ call Func_f80a8
+ call Func_f80c4
+ jr .loop
+
+Func_f80a8:
+ call DelayFrame
+ ret
+
+Func_f80ac:
+ ld hl, wPreventBlackout
+ bit 1, [hl]
+ ret z
+ ld a, [hJoyPressed]
+ and $4
+ ret
+
+Func_f80b7:
+ ld a, [hJoyPressed]
+ and $8
+ ret z
+ ld hl, wc5e2
+ ld a, [hl]
+ xor $1
+ ld [hl], a
+ ret
+
+Func_f80c4:
+ ld a, [wc634]
+ and a
+ ret z
+ ld hl, wChannelNoteDelayCounters
+ ld a, $1
+ cp [hl]
+ ret nz
+ inc hl
+ cp [hl]
+ ret nz
+ inc hl
+ cp [hl]
+ ret nz
+ ld a, [wc5e3]
+ ld e, a
+ ld a, [wc5e3 + 1]
+ and $3
+ ld d, a
+ sla e
+ rl d
+ ld e, d
+ ld d, $0
+ ld hl, Unkn_f80f5
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld [wMusicTempo + 1], a
+ ld a, [hl]
+ ld [wMusicTempo], a
+ ret
+
+Unkn_f80f5:
+ dw $75
+ dw $6d
+ dw $65
+ dw $5d
+ dw $55
+
+Func_f80ff:
+ ld hl, wChannelNoteDelayCounters
+ ld a, $1
+ cp [hl]
+ ret nz
+ inc hl
+ cp [hl]
+ ret nz
+ inc hl
+ cp [hl]
+ ret nz
+ ld a, $75
+ ld [wMusicTempo + 1], a
+ xor a
+ ld [wMusicTempo], a
+ ret
+
+Func_f8116:
+ call Func_f9279
+ call ClearSprites
+ call DisableLCD
+ ld hl, wSerialEnemyMonsPatchList
+ ld bc, $67
+ xor a
+ call FillMemory
+ ld hl, wc700
+ ld bc, $200
+ xor a
+ call FillMemory
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call ClearObjectAnimationBuffers
+
+ ld hl, SurfingPikachu1Graphics
+ ld de, $9000
+ ld bc, $500
+ ld a, BANK(SurfingPikachu1Graphics)
+ call FarCopyData
+
+ ld hl, SurfingPikachu1Graphics + $410
+ ld de, $8000
+ ld bc, $1000
+ ld a, BANK(SurfingPikachu1Graphics)
+ call FarCopyData
+
+ ld a, Unkn_f93d3 % $100
+ ld [wAnimatedObjectSpawnStateDataPointer], a
+ ld a, Unkn_f93d3 / $100
+ ld [wAnimatedObjectSpawnStateDataPointer + 1], a
+ ld a, Jumptable_f93fa % $100
+ ld [wAnimatedObjectJumptablePointer], a
+ ld a, Jumptable_f93fa / $100
+ ld [wAnimatedObjectJumptablePointer + 1], a
+ ld a, Unkn_f9507 % $100
+ ld [wAnimatedObjectOAMDataPointer], a
+ ld a, Unkn_f9507 / $100
+ ld [wAnimatedObjectOAMDataPointer + 1], a
+ ld a, Unkn_f9405 % $100
+ ld [wAnimatedObjectFramesDataPointer], a
+ ld a, Unkn_f9405 / $100
+ ld [wAnimatedObjectFramesDataPointer + 1], a
+ ld hl, vBGMap0
+ ld bc, $800
+ ld a, $0
+ call FillMemory
+ ld hl, $98c0
+ ld bc, $180
+ ld a, $b
+ call FillMemory
+ ld a, $1
+ lb de, $74, $58
+ call SpawnAnimatedObject
+ ld a, $74
+ ld [wc5ea], a
+ call Func_f9223
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7e
+ ld [hWY], a
+ ld a, $42
+ ld [hLCDCPointer], a
+ ld a, $40
+ ld [wc5e3], a
+ xor a
+ ld [wc5e3 + 1], a
+ xor a
+ ld [wc5d6], a
+ ld a, $60
+ ld [wc5d7], a
+ ld hl, wc61a
+ ld bc, $14
+ ld a, $74
+ call FillMemory
+ call Func_f81ff
+ call Func_f8256
+ ld a, $e3
+ ld [rLCDC], a
+ call Func_f81e9
+ ld a, $e4
+ ld [rOBP0], a
+ ld a, $e0
+ ld [rOBP1], a
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+Func_f81e9:
+ ld a, [wOnSGB]
+ and a
+ jr nz, .asm_f81f7
+ ld a, $d0
+ ld [rBGP], a
+ call UpdateGBCPal_BGP
+ ret
+
+.asm_f81f7
+ ld a, $e4
+ ld [rBGP], a
+ call UpdateGBCPal_BGP
+ ret
+
+Func_f81ff:
+ ld hl, wSpriteDataEnd
+ ld de, Unkn_f8249
+ ld b, $97
+ ld c, $80
+ ld a, $4
+ call Func_f8233
+ ld de, Unkn_f8248
+ ld b, $96
+ ld c, $50
+ ld a, $1
+ call Func_f8233
+ ld de, Unkn_f824d
+ ld b, $14
+ ld c, $20
+ ld a, $5
+ call Func_f8233
+ ld de, Unkn_f8252
+ ld b, $20
+ ld c, $80
+ ld a, $4
+ call Func_f8233
+ ret
+
+Func_f8233:
+.asm_f8233
+ push af
+ ld [hl], b
+ inc hl
+ ld [hl], c
+ inc hl
+ ld a, [de]
+ ld [hl], a
+ inc hl
+ ld [hl], $0
+ inc hl
+ ld a, c
+ add $8
+ ld c, a
+ inc de
+ pop af
+ dec a
+ jr nz, .asm_f8233
+ ret
+
+Unkn_f8248:
+ db $fe
+
+Unkn_f8249:
+ db $d0
+ db $d0
+ db $d0
+ db $d0
+
+Unkn_f824d:
+ db $ec
+ db $ed
+ db $ed
+ db $ee
+ db $ef
+
+Unkn_f8252:
+ db $ec
+ db $ed
+ db $ee
+ db $ef
+
+Func_f8256:
+ ld de, $9c21
+ ld hl, Unkn_f8279
+ ld c, $9
+.asm_f825e
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_f825e
+ ld hl, $9c01
+ ld [hl], $15
+ ld hl, $9c02
+ ld [hl], $16
+ ld hl, $9c2c
+ ld [hl], $1b
+ ld hl, $9c2d
+ ld [hl], $1c
+ ret
+
+Unkn_f8279:
+ db $17
+ db $18
+ db $19
+ db $19
+ db $19
+ db $19
+ db $19
+ db $19
+ db $19
+
+Func_f8282:
+ ld a, [wc5d1]
+ ld e, a
+ ld d, $0
+ ld hl, Jumptable_f8291
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_f8291:
+ dw Func_f82ab
+ dw Func_f82bd
+ dw Func_f8324
+ dw Func_f835c
+ dw Func_f838c
+ dw Func_f8399
+ dw Func_f83aa
+ dw Func_f83bb
+ dw Func_f83cc
+ dw Func_f83e3
+ dw Func_f8406
+ dw Func_f840f
+ dw Func_f841d
+
+Func_f82ab:
+ ld a, $2
+ lb de, $48, $e0
+ call SpawnAnimatedObject
+ ld hl, wc5d1
+ inc [hl]
+ ld a, $1
+ ld [wc634], a
+ ret
+
+Func_f82bd:
+ ld a, [wc5e5]
+ cp $18
+ jr nc, .asm_f82e8
+ ld hl, wc5d6
+ ld a, [hli]
+ or [hl]
+ and a
+ jr z, .asm_f82f6
+ call Random
+ ld [wc5d5], a
+ call Func_f9210
+ call Func_f88ae
+ call Func_f886b
+ call Func_f8cb0
+ call Func_f844c
+ call Func_f88e4
+ call Func_f88fd
+ ret
+
+.asm_f82e8
+ ld hl, wc5d1
+ inc [hl]
+ xor a
+ ld [wc634], a
+ ld a, $c0
+ ld [wc632], a
+ ret
+
+.asm_f82f6
+ ld a, $1
+Func_f82f8:
+ ld [wc630], a
+ ld a, $c
+ ld [wc5d1], a
+Func_f8300:
+ ld a, $80
+ ld [wc631], a
+ ld a, $b
+ lb de, $88, $58
+ call SpawnAnimatedObject
+ ld hl, $7
+ add hl, bc
+ ld [hl], $80
+ ld hl, $b
+ add hl, bc
+ ld [hl], $80
+ ld hl, $c
+ add hl, bc
+ ld [hl], $30
+ xor a
+ ld [wc634], a
+ ret
+
+Func_f8324:
+ call Func_f8440
+ jr c, .asm_f833d
+ xor a
+ ld [wc5d5], a
+ call Func_f9210
+ call Func_f88ae
+ call Func_f886b
+ call Func_f8c97
+ call Func_f80ff
+ ret
+
+.asm_f833d
+ ld hl, wc5d1
+ inc [hl]
+ ld a, $90
+ ld [hSCX], a
+ ld a, $72
+ ld [wc5d3], a
+ ld a, $4
+ ld [wc5d2], a
+ xor a
+ ld [hLCDCPointer], a
+ ld [wc617], a
+ ld [wc618], a
+ ld [wc619], a
+ ret
+
+Func_f835c:
+ ld a, [hSCX]
+ and a
+ jr z, .asm_f837b
+ call Func_f9210
+ call Func_f88ae
+ call Func_f886b
+ ld a, [hSCX]
+ dec a
+ dec a
+ dec a
+ dec a
+ ld [hSCX], a
+ ld a, $e0
+ ld [wc62e], a
+ call Func_f8cc7
+ ret
+
+.asm_f837b
+ xor a
+ ld [wc5e3], a
+ ld [wc5e3 + 1], a
+ ld hl, wc5d1
+ inc [hl]
+ ld a, $5
+ ld [wc5d2], a
+ ret
+
+Func_f838c:
+ call Func_f891e
+ ld a, $20
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f8399:
+ call Func_f8440
+ ret nc
+ call Func_f8a92
+ ld a, $40
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f83aa:
+ call Func_f8440
+ ret nc
+ call Func_f8ae4
+ ld a, $40
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f83bb:
+ call Func_f8440
+ ret nc
+ call Func_f8b7a
+ ld a, $40
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f83cc:
+ call Func_f8440
+ ret nc
+ call Func_f8aa9
+ push af
+ call Func_f8b5d
+ pop af
+ ret nc
+ ld a, $40
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f83e3:
+ call Func_f8440
+ ret nc
+ call Func_f8afb
+ push af
+ call Func_f8b5d
+ pop af
+ ret nc
+ ld a, $80
+ ld [wc632], a
+ ld hl, wc5d1
+ inc [hl]
+ call Func_f8b92
+ ret nc
+ call Func_f8a7c
+Func_f83ff:
+ ld a, $6
+ ld [wc5d2], a
+ ret
+
+Func_f8406:
+ call Func_f8440
+Func_f8408:
+ ret nc
+ ld hl, wc5d1
+ inc [hl]
+ ret
+
+Func_f840f:
+ call Func_f9210
+ ld a, [hJoyPressed]
+ and $1
+ ret z
+ ld hl, wc5d1
+ set 7, [hl]
+ ret
+
+Func_f841d:
+ call Func_f9210
+ call Func_f88ae
+ call Func_f886b
+ call Func_f8cb0
+ call Func_f80ff
+ ld hl, wc631
+ ld a, [hl]
+ and a
+ jr z, .asm_f8435
+ dec [hl]
+ ret
+
+.asm_f8435
+ ld a, [hJoyPressed]
+ and $1
+ ret z
+ ld hl, wc5d1
+ set 7, [hl]
+ ret
+
+Func_f8440:
+ ld hl, wc632
+ ld a, [hl]
+ and a
+ jr z, .asm_f844a
+ dec [hl]
+ and a
+ ret
+
+.asm_f844a
+ scf
+ ret
+
+Func_f844c:
+ ld a, [wc5e6]
+ ld h, a
+ ld a, [wc5e7]
+ ld l, a
+ ld a, [wc5e3]
+ ld e, a
+ ld a, [wc5e3 + 1]
+ ld d, a
+ add hl, de
+ ld a, h
+ ld [wc5e6], a
+ ld a, l
+ ld [wc5e7], a
+ ret nc
+ ld hl, wc5e5
+ inc [hl]
+ ld hl, wOAMBuffer + 4 * 4 + 1
+ dec [hl]
+ dec [hl]
+ ret
+
+Func_f8470
+ ld a, [wc5d2]
+ ld e, a
+ ld d, $0
+ ld hl, Jumptable_f847f
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_f847f:
+ dw Func_f848d
+ dw Func_f84e2
+ dw Func_f8516
+ dw Func_f8545
+ dw Func_f8561
+ dw Func_f856d
+ dw Func_f8579
+
+Func_f848d:
+ ld a, [wc630]
+ and a
+ jr nz, .asm_f84d2
+ call Func_f87b5
+ ld a, [wc5ea]
+ ld hl, $5
+ add hl, bc
+ ld [hl], a
+ call Func_f871e
+ jr c, .asm_f84aa
+ call Func_f8742
+ call Func_f86b8
+ ret
+
+.asm_f84aa
+ call Func_f8742
+ ld a, $1
+ ld [wc5d2], a
+ xor a
+ ld hl, $c
+ add hl, bc
+ ld [hl], a
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ld hl, $e
+ add hl, bc
+ ld [hl], a
+ ld [wc5d9], a
+ ld [wc62f], a
+ xor a
+ ld [wChannelSoundIDs + CH7], a
+ ld a, SFX_UNKNOWN_801B3_4
+ call PlaySound
+ ret
+
+.asm_f84d2
+ xor a
+ ld [wc5e3], a
+ ld [wc5e3 + 1], a
+ ld a, $4
+ ld [wc5d2], a
+ call Func_f8742
+ ret
+
+Func_f84e2:
+ call Func_f8598
+ call Func_f928c
+ ret nc
+ call Func_f8606
+ jr c, .asm_f84fd
+ call Func_f8bed
+ ld hl, $c
+ add hl, bc
+ ld [hl], $0
+ ld a, $2
+ ld [wc5d2], a
+ ret
+
+.asm_f84fd
+ ld a, $3
+ ld [wc5d2], a
+ ld a, $60
+ ld [wc5e1], a
+ ld a, $10
+ call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
+ xor a
+ ld [wChannelSoundIDs + CH7], a
+ ld a, SFX_UNKNOWN_801B9_4
+ call PlaySound
+ ret
+
+Func_f8516:
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr nc, .asm_f8539
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ ld d, $4
+ call Func_f9362
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ call Func_f87b5
+ ld a, [wc5ea]
+ ld hl, $5
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_f8539
+ ld hl, $7
+ add hl, bc
+ ld [hl], $0
+ ld a, $0
+ ld [wc5d2], a
+ ret
+
+Func_f8545:
+ ld hl, wc5e1
+ ld a, [hl]
+ and a
+ jr z, .asm_f8556
+ dec [hl]
+ ld a, [wc5ea]
+ ld hl, $5
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_f8556
+ ld a, $0
+ ld [wc5d2], a
+ ld a, $4
+ call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
+ ret
+
+Func_f8561:
+ ld a, [wc5ea]
+ ld hl, $5
+ add hl, bc
+ ld [hl], a
+ call Func_f8742
+ ret
+
+Func_f856d:
+ ld a, $f
+ call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters
+ ld hl, $c
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Func_f8579:
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ and $3f
+ cp $20
+ jr c, .asm_f8591
+ ld d, $10
+ call Func_f9362
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_f8591
+ ld hl, $7
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Func_f8598:
+ ld de, hJoy5
+ ld a, [de]
+ and $20
+ jr nz, .asm_f85a6
+ ld a, [de]
+ and $10
+ jr nz, .asm_f85cc
+ ret
+
+.asm_f85a6
+ ld hl, $e
+ add hl, bc
+ ld [hl], $0
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ cp $b
+ jr c, .asm_f85be
+ call Func_f85f2
+ ld hl, wc62f
+ set 0, [hl]
+.asm_f85be
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ cp $e
+ jr nc, .asm_f85c9
+ inc [hl]
+ ret
+
+.asm_f85c9
+ ld [hl], $1
+ ret
+
+.asm_f85cc
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ cp $d
+ jr c, .asm_f85e4
+ call Func_f85f2
+ ld hl, wc62f
+ set 1, [hl]
+.asm_f85e4
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ cp $1
+ jr z, .asm_f85ef
+ dec [hl]
+ ret
+
+.asm_f85ef
+ ld [hl], $e
+ ret
+
+Func_f85f2:
+ call Func_f8bdf
+ xor a
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ld hl, $e
+ add hl, bc
+ ld [hl], a
+ ld a, SFX_UNKNOWN_801B6_4
+ call PlaySound
+ ret
+
+Func_f8606:
+ ld hl, $1
+ add hl, bc
+ ld a, [wc5ef]
+ cp $6
+ jr z, .asm_f863d
+ cp $14
+ jr z, .asm_f867b
+ cp $12
+ jr z, .asm_f867b
+ cp $7
+ jr z, .asm_f865c
+ ld a, [hl]
+ cp $1
+ jp z, .asm_f86ad
+ cp $2
+ jr z, .asm_f869a
+ cp $3
+ jr z, .asm_f869f
+ cp $4
+ jr z, .asm_f86a2
+ cp $5
+ jr z, .asm_f869f
+ cp $6
+ jr z, .asm_f869a
+ cp $7
+ jr z, .asm_f86ad
+ jr .asm_f86ad
+
+.asm_f863d
+ ld a, [hl]
+ cp $1
+ jr z, .asm_f86ad
+ cp $2
+ jr z, .asm_f86ad
+ cp $3
+ jr z, .asm_f86ad
+ cp $4
+ jr z, .asm_f869a
+ cp $5
+ jr z, .asm_f869f
+ cp $6
+ jr z, .asm_f86a2
+ cp $7
+ jr z, .asm_f869f
+ jr .asm_f86ad
+
+.asm_f865c
+ ld a, [hl]
+ cp $1
+ jr z, .asm_f869f
+ cp $2
+ jr z, .asm_f86a2
+ cp $3
+ jr z, .asm_f869f
+ cp $4
+ jr z, .asm_f869a
+ cp $5
+ jr z, .asm_f86ad
+ cp $6
+ jr z, .asm_f86ad
+ cp $7
+ jr z, .asm_f86ad
+ jr .asm_f86ad
+
+.asm_f867b
+ ld a, [hl]
+ cp $1
+ jr z, .asm_f86ad
+ cp $2
+ jr z, .asm_f869a
+ cp $3
+ jr z, .asm_f869f
+ cp $4
+ jr z, .asm_f86a2
+ cp $5
+ jr z, .asm_f86a2
+ cp $6
+ jr z, .asm_f869f
+ cp $7
+ jr z, .asm_f869a
+ jr .asm_f86ad
+
+.asm_f869a
+ call Func_f86f7
+ jr .asm_f86a2
+
+.asm_f869f
+ call Func_f86d0
+.asm_f86a2
+ xor a
+ ld [wChannelSoundIDs + CH7], a
+ ld a, SFX_UNKNOWN_801BF_4
+ call PlaySound
+ and a
+ ret
+
+.asm_f86ad
+ ld a, $40
+ ld [wc5e3], a
+ xor a
+ ld [wc5e3 + 1], a
+ scf
+ ret
+
+Func_f86b8:
+ ld a, [wc5e3 + 1]
+ cp $2
+ ret nc
+ ld h, a
+ ld a, [wc5e3]
+ ld l, a
+ ld de, $2
+ add hl, de
+ ld a, h
+ ld [wc5e3 + 1], a
+ ld a, l
+ ld [wc5e3], a
+ ret
+
+Func_f86d0:
+ ld a, [wc5e3 + 1]
+ and a
+ jr nz, .asm_f86e2
+ ld a, [wc5e3]
+ cp $40
+ jr nc, .asm_f86e2
+ xor a
+ ld [wc5e3], a
+ ret
+
+.asm_f86e2
+ ld a, [wc5e3 + 1]
+ ld h, a
+ ld a, [wc5e3]
+ ld l, a
+ ld de, $ffc0
+ add hl, de
+ ld a, h
+ ld [wc5e3 + 1], a
+ ld a, l
+ ld [wc5e3], a
+ ret
+
+Func_f86f7:
+ ld a, [wc5e3 + 1]
+ and a
+ jr nz, .asm_f8709
+ ld a, [wc5e3]
+ cp $80
+ jr nc, .asm_f8709
+ xor a
+ ld [wc5e3], a
+ ret
+
+.asm_f8709
+ ld a, [wc5e3 + 1]
+ ld h, a
+ ld a, [wc5e3]
+ ld l, a
+ ld de, $ff80
+ add hl, de
+ ld a, h
+ ld [wc5e3 + 1], a
+ ld a, l
+ ld [wc5e3], a
+ ret
+
+Func_f871e:
+ ld a, [hSCX]
+ and $7
+ cp $3
+ jr c, .asm_f8740
+ cp $5
+ jr nc, .asm_f8740
+ ld a, [wc5ef]
+ cp $14
+ jr nz, .asm_f8740
+ call Func_f87a8
+ cp $a
+ jr c, .asm_f8740
+ ld [wc5ec], a
+ call Func_f9284
+ scf
+ ret
+
+.asm_f8740
+ and a
+ ret
+
+Func_f8742:
+ ld a, [hSCX]
+ and $7
+ cp $3
+ ret c
+ cp $5
+ ret nc
+ ld a, [wc5ef]
+ cp $6
+ jr z, .asm_f8766
+ cp $14
+ jr z, .asm_f8766
+ cp $7
+ jr z, .asm_f876a
+ call Func_f8778
+ ld a, $4
+ ld hl, $1
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_f8766
+ ld a, $6
+ jr .asm_f876c
+
+.asm_f876a
+ ld a, $2
+.asm_f876c
+ ld e, a
+ ld a, [wc5de]
+ dec a
+ add e
+ ld hl, $1
+ add hl, bc
+ ld [hl], a
+ ret
+
+Func_f8778:
+ ld hl, wc5e0
+ ld a, [hl]
+ inc [hl]
+ and $7
+ ret nz
+ ld a, [wc5df]
+ and a
+ jr z, .asm_f8796
+ ld a, [wc5de]
+ and a
+ jr z, .asm_f8791
+ dec a
+ ld [wc5de], a
+ ret
+
+.asm_f8791
+ xor a
+ ld [wc5df], a
+ ret
+
+.asm_f8796
+ ld a, [wc5de]
+ cp $2
+ jr z, .asm_f87a2
+ inc a
+ ld [wc5de], a
+ ret
+
+.asm_f87a2
+ ld a, $1
+ ld [wc5df], a
+ ret
+
+Func_f87a8:
+ ld a, [wc5e3]
+ ld l, a
+ ld a, [wc5e3 + 1]
+ ld h, a
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld a, h
+ ret
+
+Func_f87b5:
+ ld hl, wc5eb
+ ld a, [hl]
+ inc [hl]
+ and $3
+ ret nz
+ call Func_f87ce
+ ld d, a
+ ld hl, $4
+ add hl, bc
+ ld e, [hl]
+ ld a, $a
+ push bc
+ call SpawnAnimatedObject
+ pop bc
+ ret
+
+Func_f87ce:
+ ld a, [hSCX]
+ and $8
+ jr nz, .asm_f87d9
+ ld hl, wc622
+ jr .asm_f87dc
+
+.asm_f87d9
+ ld hl, wc623
+.asm_f87dc
+ ld a, [wc5f0]
+ cp $6
+ jr z, .asm_f87ed
+ cp $14
+ jr z, .asm_f87ed
+ cp $7
+ jr z, .asm_f87f5
+ ld a, [hl]
+ ret
+
+.asm_f87ed
+ ld a, [hSCX]
+ and $7
+ ld e, a
+ ld a, [hl]
+ sub e
+ ret
+
+.asm_f87f5
+ ld a, [hSCX]
+ and $7
+ add [hl]
+ ret
+
+Func_f87fb:
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ ret z
+ add $4
+ ld [hl], a
+ ret
+
+Func_f8807:
+ call MaskCurrentAnimatedObjectStruct
+ ret
+
+Func_f880b:
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ dec [hl]
+ ld d, a
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call Func_f9362
+ cp $80
+ jr nc, .asm_f8825
+ xor $ff
+ inc a
+.asm_f8825
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
+
+Func_f882b:
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ and $1
+ ret z
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $c0
+ jr z, .asm_f883f
+ inc [hl]
+ ret
+
+.asm_f883f
+ ld a, $1
+ ld [wc633], a
+ call MaskCurrentAnimatedObjectStruct
+ ret
+
+Func_f8848:
+ ld a, [wc635]
+ ld e, a
+ ld d, $0
+ ld a, [wc5e3]
+ ld l, a
+ ld a, [wc5e3 + 1]
+ ld h, a
+ add hl, de
+ ld a, l
+ ld [wc635], a
+ ld d, h
+ ld hl, wOAMBuffer + 5 * 4 + 1
+ ld e, $9
+.asm_f8861
+ ld a, [hl]
+ add d
+ ld [hli], a
+ inc hl
+ inc hl
+ inc hl
+ dec e
+ jr nz, .asm_f8861
+ ret
+
+Func_f886b:
+ ld a, [wc5ef]
+ ld a, [hSCX]
+ add $48
+ ld e, a
+ srl e
+ srl e
+ srl e
+ ld d, $0
+ ld hl, vBGMap0
+ add hl, de
+ ld a, [wc5ea]
+ srl a
+ srl a
+ srl a
+ ld c, a
+.asm_f8889
+ ld a, c
+ and a
+ jr z, .asm_f889a
+ dec c
+ ld de, $20
+ add hl, de
+ ld a, h
+ and $3
+ or $98
+ ld h, a
+ jr .asm_f8889
+
+.asm_f889a
+ ld de, wc5ef
+ ld a, e
+ ld [H_VBCOPYDEST], a
+ ld a, d
+ ld [H_VBCOPYDEST + 1], a
+ ld a, l
+ ld [H_VBCOPYSRC], a
+ ld a, h
+ ld [H_VBCOPYSRC + 1], a
+ ld a, $1
+ ld [H_VBCOPYSIZE], a
+ ret
+
+Func_f88ae:
+ ld a, [hSCX]
+ and $8
+ jr nz, .asm_f88b9
+ ld hl, wc621
+ jr .asm_f88bc
+
+.asm_f88b9
+ ld hl, wc622
+.asm_f88bc
+ ld a, [wc5ef]
+ cp $6
+ jr z, .asm_f88d0
+ cp $14
+ jr z, .asm_f88d0
+ cp $7
+ jr z, .asm_f88db
+ ld a, [hl]
+ ld [wc5ea], a
+ ret
+
+.asm_f88d0
+ ld a, [hSCX]
+ and $7
+ ld e, a
+ ld a, [hl]
+ sub e
+ ld [wc5ea], a
+ ret
+
+.asm_f88db
+ ld a, [hSCX]
+ and $7
+ add [hl]
+ ld [wc5ea], a
+ ret
+
+Func_f88e4:
+ ld hl, wc5d6
+ ld e, $99
+ call Func_f88f0
+ ret nc
+ inc hl
+ ld e, $99
+Func_f88f0:
+ ld a, [hl]
+ and a
+ jr z, .asm_f88fa
+ sub $1
+ daa
+ ld [hl], a
+ and a
+ ret
+
+.asm_f88fa
+ ld [hl], e
+ scf
+ ret
+
+Func_f88fd:
+ ld de, wc5d7
+ ld hl, wOAMBuffer + 0 * 4 + 2
+ ld a, [de]
+ call Func_f890b
+ ld hl, wOAMBuffer + 2 * 4 + 2
+ ld a, [de]
+Func_f890b:
+ ld c, a
+ swap a
+ and $f
+ add $d0
+ ld [hli], a
+ inc hl
+ inc hl
+ inc hl
+ ld a, c
+ and $f
+ add $d0
+ ld [hl], a
+ dec de
+ ret
+
+Func_f891e:
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call FillMemory
+ ld hl, Tilemap_f8946
+ coord de, 0, 6
+ ld bc, Tilemap_f8946End - Tilemap_f8946
+ call CopyData
+ call Func_f8a0e
+ ld hl, wOAMBuffer + 5 * 4 + 1
+ ld bc, $24
+ xor a
+ call FillMemory
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ret
+
+Tilemap_f8946:
+INCBIN "gfx/unknown_f8946.map"
+Tilemap_f8946End:
+
+Func_f8a0e:
+ coord hl, 1, 1
+ lb de, $3b, $3c
+ ld a, $40
+ call Func_f8a72
+ coord hl, 1, 2
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 3
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 4
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 5
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 6
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 7
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 8
+ lb de, $3f, $3f
+ ld a, $ff
+ call Func_f8a72
+ coord hl, 1, 9
+ lb de, $3d, $3e
+ ld a, $40
+ call Func_f8a72
+ ret
+
+Func_f8a72:
+ ld [hl], d
+ inc hl
+ ld c, $10
+.asm_f8a76
+ ld [hli], a
+ dec c
+ jr nz, .asm_f8a76
+ ld [hl], e
+ ret
+
+Func_f8a7c:
+ ld hl, Tilemap_f8a89
+ coord de, 6, 8
+ ld bc, $9
+ call CopyData
+ ret
+
+Tilemap_f8a89:
+ db $20,$2e,$2f,$30,$31,$2c,$32,$23,$33
+
+Func_f8a92:
+ ld hl, Tilemap_f8aa2
+ coord de, 2, 2
+ ld bc, $7
+ call CopyData
+ call Func_f8aca
+ ret
+
+Tilemap_f8aa2:
+ db $20,$21,$ff,$22,$23,$24,$25
+
+Func_f8aa9:
+ ld c, $63
+.asm_f8aab
+ push bc
+ ld hl, wc5d6
+ ld a, [hli]
+ or [hl]
+ and a
+ jr z, .asm_f8ac7
+ call Func_f88e4
+ ld e, $1
+.asm_f8ab9
+ call Func_f8b42
+ pop bc
+ dec c
+ jr nz, .asm_f8aab
+.asm_f8abf
+ ld a, SFX_UNKNOWN_801B0_4
+ call PlaySound
+.asm_f8ac5
+ and a
+ ret
+
+.asm_f8ac7
+ pop bc
+ scf
+ ret
+
+Func_f8aca:
+ coord hl, 10, 2
+ ld de, wc5d7
+ ld a, [de]
+ call Func_f9350
+ inc hl
+ ld a, [de]
+ call Func_f9350
+ inc hl
+ inc hl
+ ld [hl], $21
+ inc hl
+ ld [hl], $25
+ inc hl
+ ld [hl], $26
+ ret
+
+Func_f8ae4:
+ ld hl, Tilemap_f8af4
+ coord de, 2, 4
+ ld bc, $7
+ call CopyData
+ call Func_f8b25
+ ret
+
+Tilemap_f8af4:
+ db $27,$28,$29,$2a,$23,$26,$26
+
+Func_f8afb:
+ ld c, $63
+.asm_f8afd
+ push bc
+ ld hl, wc5da
+ ld a, [hli]
+ ld e, a
+ or [hl]
+ jr z, .asm_f8b22
+ ld d, [hl]
+ ld a, e
+ sub $1
+ daa
+ ld e, a
+ ld a, d
+ sbc $0
+ daa
+ ld [hld], a
+ ld [hl], e
+ ld e, $1
+ call Func_f8b42
+ pop bc
+ dec c
+ jr nz, .asm_f8afd
+ ld a, SFX_UNKNOWN_801B0_4
+ call PlaySound
+.asm_f8b20
+ and a
+ ret
+
+.asm_f8b22
+ pop bc
+ scf
+ ret
+
+Func_f8b25:
+ ld a, [wc5db]
+ coord hl, 10, 4
+ call Func_f9350
+ ld a, [wc5da]
+ coord hl, 12, 4
+ call Func_f9350
+ inc hl
+ inc hl
+ ld [hl], $21
+ inc hl
+ ld [hl], $25
+ inc hl
+ ld [hl], $26
+ ret
+
+Func_f8b42:
+ ld a, [wc5dc]
+ add e
+ daa
+ ld [wc5dc], a
+ ld a, [wc5dd]
+ adc $0
+ daa
+ ld [wc5dd], a
+ ret nc
+ ld a, $99
+ ld [wc5dc], a
+ ld [wc5dd], a
+ ret
+
+Func_f8b5d:
+ ld a, [wc5dd]
+ coord hl, 10, 6
+ call Func_f9350
+ ld a, [wc5dc]
+ coord hl, 12, 6
+ call Func_f9350
+ inc hl
+ inc hl
+ ld [hl], $21
+ inc hl
+ ld [hl], $25
+ inc hl
+ ld [hl], $26
+ ret
+
+Func_f8b7a:
+ ld hl, Tilemap_f8b8d
+ coord de, 2, 6
+ ld bc, $5
+ call CopyData
+ call Func_f8b25
+ call Func_f8b5d
+ ret
+
+Tilemap_f8b8d:
+ db $2b,$2c,$25,$28,$2d
+
+Func_f8b92:
+ ld hl, wd496
+ ld a, [wc5dd]
+ cp [hl]
+ jr c, .asm_f8ba6
+ jr nz, .asm_f8bb0
+ dec hl
+ ld a, [wc5dc]
+ cp [hl]
+ jr c, .asm_f8ba6
+ jr nz, .asm_f8bb0
+.asm_f8ba6
+ call WaitForSoundToFinish
+ ld e, $1b
+ call Func_f8bcb
+ and a
+ ret
+
+.asm_f8bb0
+ ld a, [wc5dc]
+ ld [wd495], a
+ ld a, [wc5dd]
+ ld [wd496], a
+ call WaitForSoundToFinish
+ ld e, $21
+ call Func_f8bcb
+ ld a, SFX_GET_ITEM2_4_2
+ call PlaySound
+ scf
+ ret
+
+Func_f8bcb: ; f8bcb (3e:4bcb)
+ push de
+ callab IsSurfingPikachuInThePlayersParty
+ pop de
+ ret nc
+ callab PlayPikachuSoundClip
+ ret
+
+Func_f8bdf:
+ ld a, [wc5d9]
+ inc a
+ cp $4
+ jr c, .asm_f8be9
+ ld a, $3
+.asm_f8be9
+ ld [wc5d9], a
+ ret
+
+Func_f8bed:
+ ld a, [wc5d9]
+ and a
+ ret z
+ ld a, [wc62f]
+ and $3
+ cp $3
+ jr z, .asm_f8c2b
+ ld a, [wc5d9]
+ ld d, a
+ ld e, $1
+ ld a, $0
+.asm_f8c03
+ add e
+ sla e
+ dec d
+ jr nz, .asm_f8c03
+.asm_f8c09
+ push af
+ ld e, $50
+ call Func_f8c7c
+ pop af
+ dec a
+ jr nz, .asm_f8c09
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ sub $10
+ ld d, a
+ ld hl, $4
+ add hl, bc
+ ld e, [hl]
+ ld a, [wc5d9]
+ add $3
+ push bc
+ call SpawnAnimatedObject
+ pop bc
+ ret
+
+.asm_f8c2b
+ ld a, [wc5d9]
+ cp $3
+ jr c, .asm_f8c53
+ ld a, $a
+.asm_f8c34
+ push af
+ ld e, $50
+ call Func_f8c7c
+ pop af
+ dec a
+ jr nz, .asm_f8c34
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ sub $10
+ ld d, a
+ ld hl, $4
+ add hl, bc
+ ld e, [hl]
+ ld a, $9
+ push bc
+ call SpawnAnimatedObject
+ pop bc
+ ret
+
+.asm_f8c53
+ ld e, $50
+ call Func_f8c7c
+ ld e, $50
+ call Func_f8c7c
+ ld e, $50
+ call Func_f8c7c
+ ld e, $30
+ call Func_f8c7c
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ sub $10
+ ld d, a
+ ld hl, $4
+ add hl, bc
+ ld e, [hl]
+ ld a, $8
+ push bc
+ call SpawnAnimatedObject
+ pop bc
+ ret
+
+Func_f8c7c:
+ ld a, [wc5da]
+ add e
+ daa
+ ld [wc5da], a
+ ld a, [wc5db]
+ adc $0
+ daa
+ ld [wc5db], a
+ ret nc
+ ld a, $99
+ ld [wc5da], a
+ ld [wc5db], a
+ ret
+
+Func_f8c97:
+ ld a, $a0
+ ld [wc62e], a
+ ld a, [hSCX]
+ ld h, a
+ ld a, [wc617]
+ ld l, a
+ ld de, $900
+ add hl, de
+ ld a, l
+ ld [wc617], a
+ ld a, h
+ ld [hSCX], a
+ jr Func_f8cc7
+
+Func_f8cb0:
+ ld a, $a0
+ ld [wc62e], a
+ ld a, [hSCX]
+ ld h, a
+ ld a, [wc617]
+ ld l, a
+ ld de, $180
+ add hl, de
+ ld a, l
+ ld [wc617], a
+ ld a, h
+ ld [hSCX], a
+Func_f8cc7:
+ ld hl, wc618
+ ld a, [hSCX]
+ cp [hl]
+ ret z
+ ld [hl], a
+ and $f0
+ ld hl, wc619
+ cp [hl]
+ ret z
+ ld [hl], a
+ call Func_f8d44
+ ld a, b
+ ld [wc5e8], a
+ ld a, c
+ ld [wc5e9], a
+ push de
+ ld hl, wc61a
+ ld de, wc61c
+ ld c, $12
+.asm_f8ceb
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .asm_f8ceb
+ ld a, [wc5e8]
+ ld [hli], a
+ ld a, [wc5e9]
+ ld [hl], a
+ pop de
+ ld hl, wRedrawRowOrColumnSrcTiles
+ ld c, $8
+.asm_f8cff
+ ld a, [de]
+ call Func_f8d28
+ inc de
+ dec c
+ jr nz, .asm_f8cff
+ ld a, [wc62e]
+ ld e, a
+ ld a, [hSCX]
+ add e
+ and $f0
+ srl a
+ srl a
+ srl a
+ ld e, a
+ ld d, $0
+ ld hl, vBGMap0
+ add hl, de
+ ld a, l
+ ld [hRedrawRowOrColumnDest], a
+ ld a, h
+ ld [hRedrawRowOrColumnDest + 1], a
+ ld a, $1
+ ld [hRedrawRowOrColumnMode], a
+ ret
+
+Func_f8d28:
+ push de
+ push hl
+ ld l, a
+ ld h, $0
+ ld de, Unkn_f96e5
+ add hl, hl
+ add hl, hl
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ pop de
+ ret
+
+Func_f8d44:
+ ld a, [wc5d3]
+ ld e, a
+ ld d, $0
+ ld hl, Jumptable_f8d53
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_f8d53:
+ dw Func_f8e4b
+ dw Func_f8f28
+ dw Func_f8f31
+ dw Func_f8f3a
+ dw Func_f8f43
+ dw Func_f8e7d
+ dw Func_f8f4c
+ dw Func_f8f55
+ dw Func_f8f5e
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8ec5
+ dw Func_f8ece
+ dw Func_f8ed7
+ dw Func_f8ee0
+ dw Func_f8ee9
+ dw Func_f8ef2
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8efb
+ dw Func_f8f04
+ dw Func_f8f0d
+ dw Func_f8f16
+ dw Func_f8f1f
+ dw Func_f8efb
+ dw Func_f8f04
+ dw Func_f8f0d
+ dw Func_f8f16
+ dw Func_f8f1f
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8f28
+ dw Func_f8f31
+ dw Func_f8f3a
+ dw Func_f8f43
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8f4c
+ dw Func_f8f55
+ dw Func_f8f5e
+ dw Func_f8f4c
+ dw Func_f8f55
+ dw Func_f8f5e
+ dw Func_f8f4c
+ dw Func_f8f55
+ dw Func_f8f5e
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8f67
+ dw Func_f8f70
+ dw Func_f8efb
+ dw Func_f8f04
+ dw Func_f8f0d
+ dw Func_f8f16
+ dw Func_f8f1f
+ dw Func_f8f67
+ dw Func_f8f70
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8ec5
+ dw Func_f8ece
+ dw Func_f8ed7
+ dw Func_f8ee0
+ dw Func_f8ee9
+ dw Func_f8ef2
+ dw Func_f8e7d
+ dw Func_f8f67
+ dw Func_f8f70
+ dw Func_f8f67
+ dw Func_f8f70
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8efb
+ dw Func_f8f04
+ dw Func_f8f0d
+ dw Func_f8f16
+ dw Func_f8f1f
+ dw Func_f8f28
+ dw Func_f8f31
+ dw Func_f8f3a
+ dw Func_f8f43
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8e7d
+ dw Func_f8f94
+ dw Func_f8e86
+ dw Func_f8e8f
+ dw Func_f8e98
+ dw Func_f8ea1
+ dw Func_f8eaa
+ dw Func_f8eb3
+ dw Func_f8ebc
+ dw Func_f8f9d
+ dw Func_f8e7d
+ dw Func_f8f79
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f82
+ dw Func_f8f8b
+
+Func_f8e4b:
+ ld a, [wc5e5]
+ cp $16
+ jr c, .asm_f8e5a
+ jr z, .asm_f8e56
+ jr nc, .asm_f8e6e
+.asm_f8e56
+ ld a, $6a
+ jr .asm_f8e6b
+
+.asm_f8e5a
+ ld a, [wc5d5]
+ and a
+ jr z, .asm_f8e6e
+ dec a
+ and $7
+ ld e, a
+ ld d, $0
+ ld hl, Unkn_f8e75
+ add hl, de
+ ld a, [hl]
+.asm_f8e6b
+ ld [wc5d3], a
+.asm_f8e6e
+ lb bc, $74, $74
+ ld de, Unkn_f973d
+ ret
+
+Unkn_f8e75:
+ db $01,$0e,$1a,$29,$32,$40,$4d,$5c
+
+Func_f8e7d:
+ lb bc, $74, $74
+ ld de, Unkn_f973d
+ jp Func_f8fa9
+
+Func_f8e86:
+ lb bc, $74, $6c
+ ld de, Unkn_f9745
+ jp Func_f8fa9
+
+Func_f8e8f:
+ lb bc, $64, $5c
+ ld de, Unkn_f974d
+ jp Func_f8fa9
+
+Func_f8e98:
+ lb bc, $54, $4c
+ ld de, Unkn_f9755
+ jp Func_f8fa9
+
+Func_f8ea1:
+ lb bc, $44, $44
+ ld de, Unkn_f975d
+ jp Func_f8fa9
+
+Func_f8eaa:
+ lb bc, $44, $4c
+ ld de, Unkn_f9765
+ jp Func_f8fa9
+
+Func_f8eb3:
+ lb bc, $54, $5c
+ ld de, Unkn_f976d
+ jp Func_f8fa9
+
+Func_f8ebc:
+ lb bc, $64, $6c
+ ld de, Unkn_f9775
+ jp Func_f8fa9
+
+Func_f8ec5:
+ lb bc, $74, $6c
+ ld de, Unkn_f977d
+ jp Func_f8fa9
+
+Func_f8ece:
+ lb bc, $64, $5c
+ ld de, Unkn_f9785
+ jp Func_f8fa9
+
+Func_f8ed7:
+ lb bc, $54, $4c
+ ld de, Unkn_f978d
+ jp Func_f8fa9
+
+Func_f8ee0:
+ lb bc, $4c, $4c
+ ld de, Unkn_f9795
+ jp Func_f8fa9
+
+Func_f8ee9:
+ lb bc, $54, $5c
+ ld de, Unkn_f979d
+ jp Func_f8fa9
+
+Func_f8ef2:
+ lb bc, $64, $6c
+ ld de, Unkn_f97a5
+ jp Func_f8fa9
+
+Func_f8efb:
+ lb bc, $74, $6c
+ ld de, Unkn_f97ad
+ jp Func_f8fa9
+
+Func_f8f04:
+ lb bc, $64, $5c
+ ld de, Unkn_f97b5
+ jp Func_f8fa9
+
+Func_f8f0d:
+ lb bc, $54, $54
+ ld de, Unkn_f97bd
+ jp Func_f8fa9
+
+Func_f8f16:
+ lb bc, $54, $5c
+ ld de, Unkn_f97c5
+ jp Func_f8fa9
+
+Func_f8f1f:
+ lb bc, $64, $6c
+ ld de, Unkn_f97cd
+ jp Func_f8fa9
+
+Func_f8f28:
+ lb bc, $74, $6c
+ ld de, Unkn_f97d5
+ jp Func_f8fa9
+
+Func_f8f31:
+ lb bc, $64, $5c
+ ld de, Unkn_f97dd
+ jp Func_f8fa9
+
+Func_f8f3a:
+ lb bc, $5c, $5c
+ ld de, Unkn_f97e5
+ jp Func_f8fa9
+
+Func_f8f43:
+ lb bc, $64, $6c
+ ld de, Unkn_f97ed
+ jp Func_f8fa9
+
+Func_f8f4c:
+ lb bc, $74, $6c
+ ld de, Unkn_f97f5
+ jp Func_f8fa9
+
+Func_f8f55:
+ lb bc, $64, $64
+ ld de, Unkn_f97fd
+ jp Func_f8fa9
+
+Func_f8f5e:
+ lb bc, $64, $6c
+ ld de, Unkn_f9805
+ jp Func_f8fa9
+
+Func_f8f67:
+ lb bc, $74, $6c
+ ld de, Unkn_f980d
+ jp Func_f8fa9
+
+Func_f8f70:
+ lb bc, $6c, $6c
+ ld de, Unkn_f9815
+ jp Func_f8fa9
+
+Func_f8f79:
+ lb bc, $74, $74
+ ld de, Unkn_f981d
+ jp Func_f8fa9
+
+Func_f8f82:
+ lb bc, $74, $74
+ ld de, Unkn_f9825
+ jp Func_f8fa9
+
+Func_f8f8b:
+ lb bc, $74, $74
+ ld de, Unkn_f9825
+ jp Func_f8fae
+
+Func_f8f94:
+ lb bc, $74, $74
+ ld de, Unkn_f973d
+ jp Func_f8fae
+
+Func_f8f9d:
+ lb bc, $74, $74
+ ld de, Unkn_f973d
+ ret
+
+Func_f8fa4:
+ inc a
+ ld [wc5d3], a
+ ret
+
+Func_f8fa9:
+ ld hl, wc5d3
+ inc [hl]
+ ret
+
+Func_f8fae:
+ xor a
+ ld [wc5d3], a
+ ret
+
+Func_f8fb3:
+ call Func_f9279
+ call ClearSprites
+ call DisableLCD
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call ClearObjectAnimationBuffers
+ ld hl, $6324
+ ld de, $8800
+ ld bc, $900
+ ld a, $20
+ call FarCopyData
+ ld a, Unkn_f93d3 % $100
+ ld [wAnimatedObjectSpawnStateDataPointer], a
+ ld a, Unkn_f93d3 / $100
+ ld [wAnimatedObjectSpawnStateDataPointer + 1], a
+ ld a, Jumptable_f93fa % $100
+ ld [wAnimatedObjectJumptablePointer], a
+ ld a, Jumptable_f93fa / $100
+ ld [wAnimatedObjectJumptablePointer + 1], a
+ ld a, Unkn_f9507 % $100
+ ld [wAnimatedObjectOAMDataPointer], a
+ ld a, Unkn_f9507 / $100
+ ld [wAnimatedObjectOAMDataPointer + 1], a
+ ld a, Unkn_f9405 % $100
+ ld [wAnimatedObjectFramesDataPointer], a
+ ld a, Unkn_f9405 / $100
+ ld [wAnimatedObjectFramesDataPointer + 1], a
+ ld a, $c
+ lb de, $74, $58
+ call SpawnAnimatedObject
+ call Func_f9053
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ ld b, $f
+ call RunPaletteCommand
+ ld a, $e3
+ ld [rLCDC], a
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ call Func_f81e9
+ ld a, $e4
+ ld [rOBP0], a
+ ld a, $e0
+ ld [rOBP1], a
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ call DelayFrame
+ ld a, MUSIC_SURFING_PIKACHU
+ ld c, BANK(Music_SurfingPikachu)
+ call PlayMusic
+ xor a
+ ld [wc633], a
+.loop
+ ld a, [wc633]
+ and a
+ ret nz
+ ld a, $0
+ ld [wCurrentAnimatedObjectOAMBufferOffset], a
+ call RunObjectAnimations
+ call DelayFrame
+ jr .loop
+
+Func_f9053:
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $ff
+ call FillMemory
+ ld hl, Tilemap_f90bc
+ coord de, 0, 6
+ ld bc, 12 * SCREEN_WIDTH
+ call CopyData
+ ld de, Tilemap_f91c8
+ coord hl, 4, 0
+ lb bc, 6, 12
+ call .CopyBox
+ coord hl, 3, 7
+ lb bc, 3, 15
+ call .FillBoxWithFF
+ ld hl, Tilemap_f91ac
+ coord de, 3, 7
+ ld bc, 15
+ call CopyData
+ ld hl, Tilemap_f91bb
+ coord de, 4, 9
+ ld bc, 13
+ call CopyData
+ ret
+
+.CopyBox:
+.copy_row
+ push bc
+ push hl
+.copy_col
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .copy_col
+ ld bc, SCREEN_WIDTH
+ pop hl
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .copy_row
+ ret
+
+.FillBoxWithFF:
+.fill_row
+ push bc
+ push hl
+.fill_col
+ ld [hl], $ff
+ inc hl
+ dec c
+ jr nz, .fill_col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .fill_row
+ ret
+
+Tilemap_f90bc: INCBIN "gfx/unknown_f90bc.map"
+Tilemap_f91ac: INCBIN "gfx/unknown_f91ac.map"
+Tilemap_f91bb: INCBIN "gfx/unknown_f91bb.map"
+Tilemap_f91c8: INCBIN "gfx/unknown_f91c8.map"
+
+Func_f9210:
+ ld hl, wc710
+ ld de, wc710 + 1
+ ld c, $80
+ ld a, [hl]
+ push af
+.asm_f921a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .asm_f921a
+ pop af
+ ld [hl], a
+ ret
+
+Func_f9223:
+ ld hl, wc700
+ ld bc, $100
+ ld de, $0
+.asm_f922c
+ ld a, e
+ and $1f
+ ld e, a
+ push hl
+ ld hl, Unkn_f96c5
+ add hl, de
+ ld a, [hl]
+ pop hl
+ ld [hli], a
+ inc e
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_f922c
+ ret
+
+Func_f923f:
+ call Joypad
+ ld a, [H_FRAMECOUNTER]
+ and a
+ jr nz, .asm_f9250
+ ld a, [hJoyHeld]
+ ld [hJoy5], a
+ ld a, $2
+ ld [H_FRAMECOUNTER], a
+ ret
+
+.asm_f9250
+ xor a
+ ld [hJoy5], a
+ ret
+
+SurfingPikachuMinigame_BlankPals:
+ xor a
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+SurfingPikachuMinigame_NormalPals:
+ ld a, $e4
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld a, $e0
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+Func_f9279:
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call FillMemory
+ ret
+
+Func_f9284:
+ xor a
+ ld [wc5ed], a
+ ld [wc5ee], a
+ ret
+
+Func_f928c:
+ ld a, [wc5ed]
+ and a
+ jr nz, .asm_f92e4
+ ld a, [wc5ec]
+ ld d, a
+ ld a, [wc5ee]
+ or d
+ jr z, .asm_f92dd
+ ld a, [wc5ee]
+ ld e, a
+ ld hl, $ff80
+ add hl, de
+ ld a, l
+ ld [wc5ee], a
+ ld a, h
+ ld [wc5ec], a
+ ld e, a
+ ld d, $0
+ call Func_f9340
+ ld e, l
+ ld d, h
+ ld a, $4
+ call Func_f9340
+ ld a, l
+ xor $ff
+ inc a
+ ld l, a
+ ld a, h
+ xor $ff
+ ld h, a
+ push hl
+ ld hl, $5
+ add hl, bc
+ ld d, [hl]
+ ld hl, $c
+ add hl, bc
+ ld e, [hl]
+ pop hl
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $5
+ add hl, bc
+ ld [hl], d
+ ld hl, $c
+ add hl, bc
+ ld [hl], e
+ and a
+ ret
+
+.asm_f92dd
+ ld a, $1
+ ld [wc5ed], a
+ and a
+ ret
+
+.asm_f92e4
+ ld a, [wc5ea]
+ ld e, a
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ cp $90
+ jr nc, .asm_f92f4
+ cp e
+ jr nc, .asm_f9330
+.asm_f92f4
+ ld a, [wc5ec]
+ ld d, a
+ ld a, [wc5ee]
+ ld e, a
+ ld hl, $80
+ add hl, de
+ ld a, l
+ ld [wc5ee], a
+ ld a, h
+ ld [wc5ec], a
+ ld e, a
+ ld d, $0
+ call Func_f9340
+ ld e, l
+ ld d, h
+ ld a, $4
+ call Func_f9340
+ push hl
+ ld hl, $5
+ add hl, bc
+ ld d, [hl]
+ ld hl, $c
+ add hl, bc
+ ld e, [hl]
+ pop hl
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $5
+ add hl, bc
+ ld [hl], d
+ ld hl, $c
+ add hl, bc
+ ld [hl], e
+ and a
+ ret
+
+.asm_f9330
+ ld hl, $5
+ add hl, bc
+ ld a, [wc5ea]
+ ld [hl], a
+ ld hl, $c
+ add hl, bc
+ ld [hl], $0
+ scf
+ ret
+
+Func_f9340:
+ ld hl, $0
+.asm_f9343
+ srl a
+ jr nc, .asm_f9348
+ add hl, de
+.asm_f9348
+ sla e
+ rl d
+ and a
+ jr nz, .asm_f9343
+ ret
+
+Func_f9350:
+ ld c, a
+ swap a
+ and $f
+ add $d0
+ ld [hli], a
+ ld a, c
+ and $f
+ add $d0
+ ld [hl], a
+ dec de
+ ret
+
+Func_f9360: ; cosine
+ add $10
+Func_f9362: ; sine
+ and $3f
+ cp $20
+ jr nc, .asm_f936d
+ call Func_f9377
+ ld a, h
+ ret
+
+.asm_f936d
+ and $1f
+ call Func_f9377
+ ld a, h
+ xor $ff
+ inc a
+ ret
+
+Func_f9377:
+ ld e, a
+ ld a, d
+ ld d, $0
+ ld hl, Unkn_f9393
+ add hl, de
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $0
+.asm_f9386
+ srl a
+ jr nc, .asm_f938b
+ add hl, de
+.asm_f938b
+ sla e
+ rl d
+ and a
+ jr nz, .asm_f9386
+ ret
+
+Unkn_f9393:
+ sine_wave $100
+
+Unkn_f93d3:
+ db $00, $00, $00
+ db $04, $01, $00
+ db $11, $02, $00
+ db $12, $02, $00
+ db $15, $00, $00
+ db $16, $00, $00
+ db $17, $00, $00
+ db $18, $00, $00
+ db $19, $00, $00
+ db $1a, $00, $00
+ db $14, $00, $00
+ db $13, $03, $00
+ db $1b, $04, $00
+
+Jumptable_f93fa:
+ dw Func_f9404
+ dw Func_f8470
+ dw Func_f87fb
+ dw Func_f880b
+ dw Func_f882b
+
+Func_f9404:
+ ret
+
+INCLUDE "data/animated_objects_3e_1.asm"
+
+Unkn_f96c5:
+ db 0, 0, 0, 1, 1, 1, 1, 2
+ db 2, 2, 1, 1, 1, 1, 0, 0
+ db 0, 0, 0, -1, -1, -1, -1, -2
+ db -2, -2, -1, -1, -1, -1, 0, 0
+
+Unkn_f96e5:
+ db $00, $00, $00, $00
+ db $0b, $0b, $0b, $0b
+ db $0b, $02, $02, $06
+ db $03, $0b, $07, $03
+ db $06, $06, $06, $06
+ db $07, $07, $07, $07
+ db $06, $04, $04, $08
+ db $05, $07, $08, $05
+ db $0b, $0b, $11, $12
+ db $0b, $0b, $13, $03
+ db $14, $12, $04, $08
+ db $13, $07, $08, $05
+ db $06, $14, $06, $14
+ db $13, $07, $13, $07
+ db $08, $08, $08, $08
+ db $14, $12, $14, $12
+ db $0b, $11, $02, $14
+ db $06, $14, $06, $14
+ db $0c, $0c, $0d, $0d
+ db $0d, $0d, $0d, $0d
+ db $0e, $0f, $10, $0b
+ db $12, $13, $12, $13
+
+Unkn_f973d:
+ db $00, $00, $00, $01, $01, $01, $01, $01
+Unkn_f9745:
+ db $00, $00, $00, $01, $01, $02, $04, $06
+Unkn_f974d:
+ db $00, $00, $00, $01, $02, $04, $06, $0e
+Unkn_f9755:
+ db $00, $00, $00, $10, $11, $06, $0e, $0e
+Unkn_f975d:
+ db $00, $00, $00, $15, $15, $0e, $0e, $0e
+Unkn_f9765:
+ db $00, $00, $00, $03, $05, $07, $0e, $0e
+Unkn_f976d:
+ db $00, $00, $00, $01, $03, $05, $07, $0e
+Unkn_f9775:
+ db $00, $00, $00, $01, $01, $03, $05, $07
+Unkn_f977d:
+ db $00, $00, $00, $01, $01, $02, $04, $06
+Unkn_f9785:
+ db $00, $00, $00, $01, $02, $04, $06, $0e
+Unkn_f978d:
+ db $00, $00, $00, $08, $0f, $0a, $0e, $0e
+Unkn_f9795:
+ db $00, $00, $00, $09, $0d, $0b, $0e, $0e
+Unkn_f979d:
+ db $00, $00, $00, $01, $03, $05, $07, $0e
+Unkn_f97a5:
+ db $00, $00, $00, $01, $01, $03, $05, $07
+Unkn_f97ad:
+ db $00, $00, $00, $01, $01, $02, $04, $06
+Unkn_f97b5:
+ db $00, $00, $00, $01, $10, $11, $06, $0e
+Unkn_f97bd:
+ db $00, $00, $00, $01, $15, $15, $0e, $0e
+Unkn_f97c5:
+ db $00, $00, $00, $01, $03, $05, $07, $0e
+Unkn_f97cd:
+ db $00, $00, $00, $01, $01, $03, $05, $07
+Unkn_f97d5:
+ db $00, $00, $00, $01, $01, $02, $04, $06
+Unkn_f97dd:
+ db $00, $00, $00, $01, $08, $0f, $0a, $0e
+Unkn_f97e5:
+ db $00, $00, $00, $01, $09, $0d, $0b, $0e
+Unkn_f97ed:
+ db $00, $00, $00, $01, $01, $03, $05, $07
+Unkn_f97f5:
+ db $00, $00, $00, $01, $01, $10, $11, $06
+Unkn_f97fd:
+ db $00, $00, $00, $01, $01, $15, $15, $0e
+Unkn_f9805:
+ db $00, $00, $00, $01, $01, $03, $05, $07
+Unkn_f980d:
+ db $00, $00, $00, $01, $01, $08, $0f, $0a
+Unkn_f9815:
+ db $00, $00, $00, $01, $01, $09, $0d, $0b
+Unkn_f981d:
+ db $00, $00, $00, $14, $14, $14, $14, $14
+Unkn_f9825:
+ db $00, $00, $00, $12, $13, $13, $13, $13
diff --git a/engine/yellow_intro.asm b/engine/yellow_intro.asm
new file mode 100755
index 00000000..3e414319
--- /dev/null
+++ b/engine/yellow_intro.asm
@@ -0,0 +1,1072 @@
+PlayIntroScene:
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $f
+ ld [rIE], a
+ ld a, $8
+ ld [rSTAT], a
+ call InitYellowIntroGFXAndMusic
+ call DelayFrame
+.loop
+ ld a, [wc634]
+ bit 7, a
+ jr nz, .go_to_title_screen
+ call JoypadLowSensitivity
+ ld a, [hJoyPressed]
+ and A_BUTTON | B_BUTTON | START
+ jr nz, .go_to_title_screen
+ call Func_f98fc
+ ld a, $0
+ ld [wCurrentAnimatedObjectOAMBufferOffset], a
+ call RunObjectAnimations
+ ld a, [wc634]
+ cp $7
+ call z, Func_f98a2
+ cp $b
+ call z, Func_f98cb
+ call DelayFrame
+ jr .loop
+
+.go_to_title_screen
+ call YellowIntro_BlankPalettes
+ xor a
+ ld [hLCDCPointer], a
+ call DelayFrame
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ ld a, $90
+ ld [hWY], a
+ call ClearObjectAnimationBuffers
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call Bank3E_FillMemory
+ call YellowIntro_BlankOAMBuffer
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ret
+
+Func_f98a2:
+ ld a, [wOAMBuffer + 8 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 8 * 4 + 3], a
+ ld a, [wOAMBuffer + 14 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 14 * 4 + 3], a
+ ld a, [wOAMBuffer + 16 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 16 * 4 + 3], a
+Func_f98b8:
+ ld a, [wOAMBuffer + 18 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 18 * 4 + 3], a
+ ld a, [wOAMBuffer + 19 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 19 * 4 + 3], a
+ ret
+
+Func_f98cb:
+ ld a, [wOAMBuffer + 18 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 18 * 4 + 3], a
+ ld a, [wOAMBuffer + 19 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 19 * 4 + 3], a
+ ld a, [wOAMBuffer + 20 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 20 * 4 + 3], a
+ ld a, [wOAMBuffer + 25 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 25 * 4 + 3], a
+ ld a, [wOAMBuffer + 26 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 26 * 4 + 3], a
+ ld a, [wOAMBuffer + 28 * 4 + 3]
+ or $1
+ ld [wOAMBuffer + 28 * 4 + 3], a
+ ret
+
+Func_f98fc:
+ ld a, [wc634]
+ ld hl, Jumptable_f9906
+ call Func_fa06e
+ jp [hl]
+
+Jumptable_f9906:
+ dw Func_f992f
+ dw Func_f995f
+ dw Func_f996a
+ dw Func_f9a08
+ dw Func_f9a1e
+ dw Func_f9a60
+ dw Func_f9a6b
+ dw Func_f9ab1
+ dw Func_f9ad8
+ dw Func_f9af9
+ dw Func_f9b04
+ dw Func_f9bf6
+ dw Func_f9cac
+ dw Func_f9d12
+ dw Func_f9d22
+ dw Func_f9d8f
+ dw Func_f9dbf
+ dw Func_f9e12
+
+Func_f992a:
+ ld hl, wc634
+ inc [hl]
+ ret
+
+Func_f992f:
+ xor a
+ ld [hLCDCPointer], a
+ lb de, $58, $58
+ ld a, $1
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ ld a, $e4
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld a, $c4
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ld a, $82
+ ld [wc635], a
+ call Func_f992a
+ ret
+
+Func_f995f:
+ call Func_f9e41
+ ret nc
+ call YellowIntro_MaskCurrentAnimatedObjectStruct
+ call Func_f992a
+ ret
+
+Func_f996a:
+ call Func_f9e80
+ ld c, $8
+ call UpdateMusicCTimes
+ xor a
+ ld [hLCDCPointer], a
+ ld hl, vBGMap0
+ ld bc, $400
+ xor a
+ call Bank3E_FillMemory
+ call Func_f9996
+ lb de, $58, $b8 ; overloaded
+ ld a, $4 ; overloaded
+ call Func_f99d2
+ ld a, $1
+ call Func_f9e9a
+ call Func_f9e35
+ call Func_f992a
+ ret
+
+Func_f9996:
+ ld hl, $98d4
+ ld de, $20
+ ld b, $6
+ ld a, $90
+.asm_f99a0
+ ld c, $6
+ push af
+ push hl
+.asm_f99a4
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .asm_f99a4
+ pop hl
+ add hl, de
+ pop af
+ add $10
+ dec b
+ jr nz, .asm_f99a0
+ ld a, [hGBC]
+ and a
+ jr z, .asm_f99d1
+ ld hl, $98d4
+ ld de, $20
+ ld b, $6
+ ld a, $1
+ ld [rVBK], a
+.asm_f99c2
+ ld c, $6
+ push hl
+.asm_f99c5
+ ld [hli], a
+ dec c
+ jr nz, .asm_f99c5
+ pop hl
+ add hl, de
+ dec b
+ jr nz, .asm_f99c2
+ xor a
+ ld [rVBK], a
+.asm_f99d1
+ ret
+
+Func_f99d2:
+ ld hl, Unkn_f99f0
+ ld a, $8
+.asm_f99d7
+ push af
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+ ld a, [hli]
+ push hl
+ push af
+ ld a, $8
+ call SpawnAnimatedObject
+ pop af
+ ld hl, $b
+ add hl, bc
+ ld [hl], a
+ pop hl
+ pop af
+ dec a
+ jr nz, .asm_f99d7
+ ret
+
+Unkn_f99f0:
+ db $d0, $20, $02
+ db $f0, $30, $04
+ db $d0, $40, $06
+ db $c0, $50, $08
+ db $e0, $60, $08
+ db $c0, $70, $06
+ db $e0, $80, $04
+ db $f0, $90, $02
+
+Func_f9a08:
+ call Func_f9e41
+ jr c, .asm_f9a17
+ ld a, [hSCX]
+ cp $68
+ ret z
+ add $4
+ ld [hSCX], a
+ ret
+
+.asm_f9a17
+ call MaskAllAnimatedObjectStructs
+ call Func_f992a
+ ret
+
+Func_f9a1e:
+ call Func_f9e80
+ ld c, $5
+ call UpdateMusicCTimes
+ ld a, [hGBC]
+ and a
+ jr z, .asm_f9a47
+ ld hl, $98d4
+ ld de, $20
+ ld b, $6
+ ld a, $1
+ ld [rVBK], a
+ xor a
+.asm_f9a38
+ ld c, $6
+ push hl
+.asm_f9a3b
+ ld [hli], a
+ dec c
+ jr nz, .asm_f9a3b
+ pop hl
+ add hl, de
+ dec b
+ jr nz, .asm_f9a38
+ xor a
+ ld [rVBK], a
+.asm_f9a47
+ xor a
+ ld [hLCDCPointer], a
+ call Func_f9e5f
+ lb de, $58, $58
+ ld a, $2
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ xor a
+ call Func_f9e9a
+ call Func_f9e35
+ call Func_f992a
+ ret
+
+Func_f9a60:
+ call Func_f9e41
+ ret nc
+ call YellowIntro_MaskCurrentAnimatedObjectStruct
+ call Func_f992a
+ ret
+
+Func_f9a6b:
+ call Func_f9e80
+ ld c, $5
+ call UpdateMusicCTimes
+ ld a, $42
+ ld [hLCDCPointer], a
+ call Func_f9ec4
+ ld hl, vBGMap0
+ ld bc, $60
+ xor a
+ call Bank3E_FillMemory
+ ld hl, $9860
+ ld c, $10
+ ld a, $20
+.asm_f9a8b
+ ld [hli], a
+ inc a
+ ld [hli], a
+ dec a
+ dec c
+ jr nz, .asm_f9a8b
+ ld hl, $9880
+ ld bc, $300
+ ld a, $10
+ call Bank3E_FillMemory
+ lb de, $40, $f8
+ ld a, $5
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ ld a, $1
+ call Func_f9e9a
+ call Func_f9e3b
+ call Func_f992a
+ ret
+
+Func_f9ab1:
+ call Func_f9e41
+ jr c, .asm_f9ad1
+ ld hl, hSCX
+ inc [hl]
+ inc [hl]
+ ld hl, wc800
+ ld de, wc800 + 1
+ ld a, [hl]
+ push af
+ ld c, $ff
+.shift_loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .shift_loop
+ pop af
+ ld [hl], a
+ call Prep7TileTransferFromC810ToC710
+ ret
+
+.asm_f9ad1
+ call YellowIntro_MaskCurrentAnimatedObjectStruct
+ call Func_f992a
+ ret
+
+Func_f9ad8:
+ call Func_f9e80
+ ld c, $5
+ call UpdateMusicCTimes
+ xor a
+ ld [hLCDCPointer], a
+ call Func_f9e5f
+ lb de, $58, $58
+ ld a, $3
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ xor a
+ call Func_f9e9a
+ call Func_f9e35
+ call Func_f992a
+ ret
+
+Func_f9af9:
+ call Func_f9e41
+ ret nc
+ call YellowIntro_MaskCurrentAnimatedObjectStruct
+ call Func_f992a
+ ret
+
+Func_f9b04:
+ call Func_f9e80
+ ld c, $5
+ call UpdateMusicCTimes
+ xor a
+ ld [hLCDCPointer], a
+ ld hl, vBGMap0
+ ld bc, $400
+ xor a
+ call Bank3E_FillMemory
+ ld hl, vBGMap0
+ ld bc, $100
+ ld a, $2
+ call Bank3E_FillMemory
+ ld hl, $9900
+ ld de, Unkn_f9b6e
+ lb bc, 6, 20
+ call .FillBGMapBox
+ ld hl, $988c
+ ld de, Unkn_f9be6
+ lb bc, 3, 4
+ call .FillBGMapBox
+ ld hl, $98e3
+ ld de, Unkn_f9bf2
+ lb bc, 2, 2
+ call .FillBGMapBox
+ lb de, $98, $58
+ ld a, $6
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ ld a, $1
+ call Func_f9e9a
+ call Func_f9e35
+ call Func_f992a
+ ret
+
+.FillBGMapBox:
+.fill_row
+ push bc
+ push hl
+.fill_col
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .fill_col
+ pop hl
+ ld bc, $20
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .fill_row
+ ret
+
+Unkn_f9b6e: INCBIN "gfx/unknown_f9b6e.map"
+Unkn_f9be6: INCBIN "gfx/unknown_f9be6.map"
+Unkn_f9bf2: INCBIN "gfx/unknown_f9bf2.map"
+
+Func_f9bf6:
+ call Func_f9e41
+ jr c, .asm_f9c25
+ ld a, [wc635]
+ and $7
+ ret nz
+ ld a, [wc635]
+ and $8
+ sla a
+ sla a
+ sla a
+ ld e, a
+ ld d, $0
+ ld hl, GFX_f9c2c
+ add hl, de
+ ld a, l
+ ld [H_VBCOPYSRC], a
+ ld a, h
+ ld [H_VBCOPYSRC + 1], a
+ xor a
+ ld [H_VBCOPYDEST], a
+ ld a, $96
+ ld [H_VBCOPYDEST + 1], a
+ ld a, $4
+ ld [H_VBCOPYSIZE], a
+ ret
+
+.asm_f9c25
+ call YellowIntro_MaskCurrentAnimatedObjectStruct
+ call Func_f992a
+ ret
+
+GFX_f9c2c: INCBIN "gfx/unknown_f9c2c.2bpp"
+GFX_f9c6c: INCBIN "gfx/unknown_f9c6c.2bpp" ; indirectly referenced
+
+Func_f9cac:
+ call Func_f9e80
+ ld c, $5
+ call UpdateMusicCTimes
+ xor a
+ ld [hLCDCPointer], a
+ ld hl, vBGMap0
+ ld bc, $80
+ ld a, $1
+ call Bank3E_FillMemory
+ ld hl, $9880
+ ld bc, $140
+ xor a
+ call Bank3E_FillMemory
+ ld hl, $99c0
+ ld bc, $80
+ ld a, $1
+ call Bank3E_FillMemory
+ ld hl, $98c5
+ ld de, $20
+ ld a, $4
+ ld b, $8
+.asm_f9ce1
+ ld c, $c
+ push hl
+.asm_f9ce4
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .asm_f9ce4
+ pop hl
+ add hl, de
+ add $4
+ dec b
+ jr nz, .asm_f9ce1
+ ld hl, $98c4
+ ld [hl], $3
+ ld hl, $98e4
+ ld [hl], $74
+ ld hl, $99a5
+ ld [hl], $0
+ lb de, $60, $58
+ ld a, $9
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ xor a
+ call Func_f9e9a
+ call Func_f9e35
+ call Func_f992a
+ ret
+
+Func_f9d12:
+ call Func_f9e41
+ ret nc
+ lb de, $68, $58
+ ld a, $a
+ call SpawnAnimatedObject
+ call Func_f992a
+ ret
+
+Func_f9d22:
+ ld de, Unkn_f9dd6
+ call Func_f9e4d
+ jr c, .asm_f9d3c
+ ld [rBGP], a
+ ld [rOBP0], a
+ and $f0
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+.asm_f9d3c
+ call MaskAllAnimatedObjectStructs
+ call YellowIntro_BlankOAMBuffer
+ ld hl, wTileMap
+ ld bc, $50
+ ld a, $1
+ call Bank3E_FillMemory
+ coord hl, 0, 4
+ ld bc, CopyVideoDataAlternate
+ xor a
+ call Bank3E_FillMemory
+ coord hl, 0, 14
+ ld bc, $50
+ ld a, $1
+ call Bank3E_FillMemory
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld a, $e4
+ ld [rOBP0], a
+ ld [rBGP], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ lb de, $58, $58
+ ld a, $7
+ call YellowIntro_SpawnAnimatedObjectAndSavePointer
+ call Func_f992a
+ ld a, $28
+ ld [wc635], a
+ ret
+
+Func_f9d8f:
+ call Func_f9e41
+ jr c, .asm_f9dad
+ ld a, [wc635]
+ and $3
+ ret nz
+ ld a, [rOBP0]
+ xor $ff
+ ld [rOBP0], a
+ ld a, [rBGP]
+ xor $3
+ ld [rBGP], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ ret
+
+.asm_f9dad
+ xor a
+ ld [hLCDCPointer], a
+ ld a, $e4
+ ld [rBGP], a
+ ld [rOBP0], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call Func_f992a
+Func_f9dbf:
+ ld de, Unkn_f9e0a
+ call Func_f9e4d
+ jr c, .asm_f9dd2
+ ld [rOBP0], a
+ ld [rBGP], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ ret
+
+.asm_f9dd2
+ call Func_f992a
+ ret
+
+Unkn_f9dd6:
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $e4
+ db $e4, $c0, $c0, $ff
+
+Unkn_f9e0a:
+ db $e4, $90, $90, $40
+ db $40, $00, $00, $ff
+
+Func_f9e12:
+ ld c, 64
+ call DelayFrames
+ ld hl, wc634
+ set 7, [hl]
+ ret
+
+YellowIntro_SpawnAnimatedObjectAndSavePointer:
+ call SpawnAnimatedObject
+ ld a, c
+ ld [wYellowIntroAnimatedObjectStructPointer], a
+ ld a, b
+ ld [wYellowIntroAnimatedObjectStructPointer + 1], a
+ ret
+
+YellowIntro_MaskCurrentAnimatedObjectStruct:
+ ld a, [wYellowIntroAnimatedObjectStructPointer]
+ ld c, a
+ ld a, [wYellowIntroAnimatedObjectStructPointer + 1]
+ ld b, a
+ call MaskCurrentAnimatedObjectStruct
+ ret
+
+Func_f9e35:
+ ld a, $80
+ ld [wc635], a
+ ret
+
+Func_f9e3b:
+ ld a, $58
+ ld [wc635], a
+ ret
+
+Func_f9e41:
+ ld hl, wc635
+ ld a, [hl]
+ and a
+ jr z, .asm_f9e4b
+ dec [hl]
+ and a
+ ret
+
+.asm_f9e4b
+ scf
+ ret
+
+Func_f9e4d:
+ ld hl, wc635
+ ld a, [hl]
+ inc [hl]
+ ld l, a
+ ld h, $0
+ add hl, de
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_f9e5d
+ and a
+ ret
+
+.asm_f9e5d
+ scf
+ ret
+
+Func_f9e5f:
+ ld hl, vBGMap0
+ ld bc, $80
+ ld a, $1
+ call Bank3E_FillMemory
+ ld hl, $9880
+ ld bc, $140
+ xor a
+ call Bank3E_FillMemory
+ ld hl, $99c0
+ ld bc, $80
+ ld a, $1
+ call Bank3E_FillMemory
+ ret
+
+Func_f9e80:
+ xor a
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ call DelayFrame
+ call DelayFrame
+ call DisableLCD
+ ret
+
+Func_f9e9a:
+ ld e, a
+ callab Func_720ad
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ ld a, $e3
+ ld [rLCDC], a
+ ld a, $e4
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld a, $e0
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+Func_f9ec4:
+ ld de, wc800
+ ld a, $8
+.asm_f9ec9
+ push af
+ ld hl, Unkn_f9ed8
+ ld bc, $20
+ call Bank3E_CopyData
+ pop af
+ dec a
+ jr nz, .asm_f9ec9
+ ret
+
+Unkn_f9ed8:
+ db 0, 0, 1, 2, 2, 3, 3, 3
+ db 4, 3, 3, 3, 2, 2, 1, 0
+ db 0, 0, -1, -2, -2, -3, -3, -3
+ db -4, -3, -3, -3, -2, -2, -1, 0
+
+Prep7TileTransferFromC810ToC710:
+ ld a, wc810 % $100
+ ld [H_VBCOPYSRC], a
+ ld a, wc810 / $100
+ ld [H_VBCOPYSRC + 1], a
+ ld a, wc710 % $100
+ ld [H_VBCOPYDEST], a
+ ld a, wc710 / $100
+ ld [H_VBCOPYDEST + 1], a
+ ld a, $7
+ ld [H_VBCOPYSIZE], a
+ ret
+
+InitYellowIntroGFXAndMusic:
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld [H_AUTOBGTRANSFERDEST], a
+ ld a, $98
+ ld [H_AUTOBGTRANSFERDEST + 1], a
+ call YellowIntro_BlankTileMap
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $1
+ call Bank3E_FillMemory
+ coord hl, 0, 4
+ ld bc, CopyVideoDataAlternate
+ xor a
+ call Bank3E_FillMemory
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld de, $6b5a
+ ld hl, $8000
+ ld bc, $3eff
+ call CopyVideoData
+ ld de, $635a
+ ld hl, $9000
+ ld bc, $3e80
+ call CopyVideoData
+ call ClearObjectAnimationBuffers
+ call LoadYellowIntroObjectAnimationDataPointers
+ ld b, $8
+ call RunPaletteCommand
+ xor a
+ ld hl, wc634
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld a, MUSIC_INTRO_BATTLE
+ ld c, BANK(Music_IntroBattle)
+ call PlayMusic
+ ret
+
+LoadYellowIntroObjectAnimationDataPointers:
+ ld a, YellowIntro_AnimatedObjectSpawnStateData % $100
+ ld [wAnimatedObjectSpawnStateDataPointer], a
+ ld a, YellowIntro_AnimatedObjectSpawnStateData / $100
+ ld [wAnimatedObjectSpawnStateDataPointer + 1], a
+ ld a, YellowIntro_AnimatedObjectJumptable % $100
+ ld [wAnimatedObjectJumptablePointer], a
+ ld a, YellowIntro_AnimatedObjectJumptable / $100
+ ld [wAnimatedObjectJumptablePointer + 1], a
+ ld a, YellowIntro_AnimatedObjectOAMData % $100
+ ld [wAnimatedObjectOAMDataPointer], a
+ ld a, YellowIntro_AnimatedObjectOAMData / $100
+ ld [wAnimatedObjectOAMDataPointer + 1], a
+ ld a, YellowIntro_AnimatedObjectFramesData % $100
+ ld [wAnimatedObjectFramesDataPointer], a
+ ld a, YellowIntro_AnimatedObjectFramesData / $100
+ ld [wAnimatedObjectFramesDataPointer + 1], a
+ ret
+
+YellowIntro_BlankTileMap:
+ ld hl, wTileMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $7f
+ call Bank3E_FillMemory
+ ret
+
+Bank3E_CopyData:
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+ ret
+
+Bank3E_FillMemory:
+ push de
+ ld e, a
+.loop
+ ld a, e
+ ld [hli], a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+ pop de
+ ret
+
+YellowIntro_BlankOAMBuffer:
+ ld hl, wOAMBuffer
+ ld bc, wOAMBufferEnd - wOAMBuffer
+ xor a
+ call Bank3E_FillMemory
+ ret
+
+YellowIntro_BlankPalettes:
+ xor a
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld [rOBP1], a
+ call UpdateGBCPal_BGP
+ call UpdateGBCPal_OBP0
+ call UpdateGBCPal_OBP1
+ ret
+
+YellowIntro_AnimatedObjectSpawnStateData:
+ db $00, $00, $00
+ db $01, $01, $00
+ db $02, $01, $00
+ db $03, $01, $00
+ db $04, $02, $00
+ db $05, $03, $00
+ db $06, $04, $00
+ db $07, $01, $00
+ db $08, $05, $00
+ db $09, $01, $00
+ db $0a, $01, $00
+
+YellowIntro_AnimatedObjectJumptable:
+ dw Func_fa007
+ dw Func_fa007
+ dw Func_fa008
+ dw Func_fa014
+ dw Func_fa02b
+ dw Func_fa062
+
+Func_fa007:
+ ret
+
+Func_fa008:
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ ret z
+ sub $4
+ ld [hl], a
+ ret
+
+Func_fa014:
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ jr z, .asm_fa020
+ add $4
+ ld [hl], a
+.asm_fa020
+ ld hl, $5
+ add hl, bc
+ cp $58
+ ret z
+ add $1
+ ld [hl], a
+ ret
+
+Func_fa02b:
+ ld hl, $b
+ add hl, bc
+ ld e, [hl]
+ ld d, $0
+ ld hl, Jumptable_fa03b
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_fa03b:
+ dw Func_fa03f
+ dw Func_fa051
+
+Func_fa03f:
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ jr z, .asm_fa04c
+ sub $2
+ ld [hl], a
+ ret
+
+.asm_fa04c
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+Func_fa051:
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld d, $8
+ call Func_fa079
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
+
+Func_fa062:
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ ld hl, $4
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ret
+
+Func_fa06e:
+ ld e, a
+ ld d, $0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+Func_fa077: ; cosine
+ add $10
+Func_fa079:
+ and $3f
+ cp $20
+ jr nc, .asm_fa084
+ call Func_fa08e
+ ld a, h
+ ret
+
+.asm_fa084
+ and $1f
+ call Func_fa08e
+ ld a, h
+ xor $ff
+ inc a
+ ret
+
+Func_fa08e:
+ ld e, a
+ ld a, d
+ ld d, $0
+ ld hl, Unkn_fa0aa
+ add hl, de
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $0
+.asm_fa09d
+ srl a
+ jr nc, .asm_fa0a2
+ add hl, de
+.asm_fa0a2
+ sla e
+ rl d
+ and a
+ jr nz, .asm_fa09d
+ ret
+
+Unkn_fa0aa:
+ sine_wave $100
diff --git a/wram.asm b/wram.asm
index be995089..541397d1 100755
--- a/wram.asm
+++ b/wram.asm
@@ -408,7 +408,7 @@ wc634:: ; c634
ds 1
wc635:: ; c635
ds 1
-wc636:: ; c636
+wYellowIntroAnimatedObjectStructPointer:: ; c636
ds 2
; c638
@@ -426,7 +426,9 @@ wc700:: ; c700
wc710:: ; c710
ds $f0
wc800:: ; c800
- ds $178
+ ds $10
+wc810:: ; c810
+ ds $168
wPrinterTileBuffer:: ; c978
ds SCREEN_HEIGHT * SCREEN_WIDTH