summaryrefslogtreecommitdiff
path: root/engine/crystal_intro.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/crystal_intro.asm')
-rwxr-xr-xengine/crystal_intro.asm2531
1 files changed, 2531 insertions, 0 deletions
diff --git a/engine/crystal_intro.asm b/engine/crystal_intro.asm
new file mode 100755
index 000000000..7849a9f48
--- /dev/null
+++ b/engine/crystal_intro.asm
@@ -0,0 +1,2531 @@
+Functione455c: ; e455c
+ hlcoord 1, 1
+ ld de, SCREEN_WIDTH
+ ld c, $10
+.asm_e4564
+ ld [hl], $7f
+ add hl, de
+ dec c
+ jr nz, .asm_e4564
+ hlcoord 1, 2
+ ld bc, $28
+ ld a, [wJumptableIndex]
+ call AddNTimes
+ ld [hl], $ed
+ ret
+; e4579
+
+
+Functione4579: ; e4579
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call ClearBGPalettes
+ call ClearTileMap
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ xor a
+ ld [hBGMapAddress], a
+ ld [hJoyDown], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ call WaitBGMap
+ ld b, SCGB_19
+ call GetSGBLayout
+ call SetPalettes
+ ld c, 10
+ call DelayFrames
+ callab Copyright
+ call WaitBGMap
+ ld c, 100
+ call DelayFrames
+ call ClearTileMap
+ callba GBCOnlyScreen
+ call Functione45e8
+.joy_loop
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and BUTTONS
+ jr nz, .pressed_button
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .finish
+ call PlaceGameFreakPresents
+ callba Function8cf69
+ call DelayFrame
+ jr .joy_loop
+
+.pressed_button
+ call Functione465e
+ scf
+ ret
+
+.finish
+ call Functione465e
+ and a
+ ret
+; e45e8
+
+Functione45e8: ; e45e8
+ ld de, GameFreakLogo
+ ld hl, VTiles2
+ lb bc, BANK(GameFreakLogo), $1c
+ call Get1bpp
+
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+
+ ld hl, IntroLogoGFX
+ ld de, w6_d000
+ ld a, BANK(IntroLogoGFX)
+ call FarDecompress
+
+ ld hl, VTiles0
+ ld de, w6_d000
+ lb bc, 1, 8 tiles
+ call Request2bpp
+
+ ld hl, VTiles1
+ ld de, w6_d000 + $80 tiles
+ lb bc, 1, 8 tiles
+ call Request2bpp
+
+ pop af
+ ld [rSVBK], a
+
+ callba Function8cf53
+ depixel 10, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_03
+ call _InitSpriteAnimStruct
+ ld hl, $7
+ add hl, bc
+ ld [hl], $a0
+ ld hl, $c
+ add hl, bc
+ ld [hl], $60
+ ld hl, $d
+ add hl, bc
+ ld [hl], $30
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, $90
+ ld [hWY], a
+ ld de, $e4e4
+ call DmgToCgbObjPals
+ ret
+; e465e
+
+Functione465e: ; e465e
+ callba Function8cf53
+ call ClearTileMap
+ call ClearSprites
+ ld c, 16
+ call DelayFrames
+ ret
+; e4670
+
+PlaceGameFreakPresents: ; e4670
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; e467f
+
+.jumptable: ; e467f
+ dw PlaceGameFreakPresents_0
+ dw PlaceGameFreakPresents_1
+ dw PlaceGameFreakPresents_2
+ dw PlaceGameFreakPresents_3
+; e4687
+
+PlaceGameFreakPresents_AdvanceIndex: ; e4687
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+; e468c
+
+PlaceGameFreakPresents_0: ; e468c
+ ret
+; e468d
+
+PlaceGameFreakPresents_1: ; e468d
+ ld hl, wcf65
+ ld a, [hl]
+ cp $20
+ jr nc, .PlaceGameFreak
+ inc [hl]
+ ret
+
+.PlaceGameFreak
+ ld [hl], 0
+ ld hl, .GAME_FREAK
+ decoord 5, 10
+ ld bc, .end - .GAME_FREAK
+ call CopyBytes
+ call PlaceGameFreakPresents_AdvanceIndex
+ ld de, SFX_GAME_FREAK_PRESENTS
+ call PlaySFX
+ ret
+; e46af
+
+.GAME_FREAK
+ ; G A M E _ F R E A K
+ db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6
+.end
+ db "@"
+; e46ba
+
+PlaceGameFreakPresents_2: ; e46ba
+ ld hl, wcf65
+ ld a, [hl]
+ cp $40
+ jr nc, .place_presents
+ inc [hl]
+ ret
+
+.place_presents
+ ld [hl], 0
+ ld hl, .presents
+ decoord 7,11
+ ld bc, .end - .presents
+ call CopyBytes
+ call PlaceGameFreakPresents_AdvanceIndex
+ ret
+; e46d6
+
+.presents
+ db 7, 8, 9, 10, 11, 12
+.end
+ db "@"
+; e46dd
+
+PlaceGameFreakPresents_3: ; e46dd
+ ld hl, wcf65
+ ld a, [hl]
+ cp $80
+ jr nc, .finish
+ inc [hl]
+ ret
+
+.finish
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; e46ed
+
+
+
+GameFreakLogoJumper: ; e46ed (39:46ed)
+ ld hl, $b
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, GameFreakLogoScenes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+GameFreakLogoScenes: ; e46fd (39:46fd)
+ dw GameFreakLogoScene1
+ dw GameFreakLogoScene2
+ dw GameFreakLogoScene3
+ dw GameFreakLogoScene4
+ dw GameFreakLogoScene5
+
+
+GameFreakLogoScene1: ; e4707 (39:4707)
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ret
+
+GameFreakLogoScene2: ; e470d (39:470d)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_e4747
+ ld d, a
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ cp $20
+ jr nc, .asm_e4723
+ add $20
+.asm_e4723
+ ld e, a
+ callba Functionce765
+ ld hl, $7
+ add hl, bc
+ ld [hl], e
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ and $1f
+ ret nz
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ sub $30
+ ld [hl], a
+ ld de, SFX_DITTO_BOUNCE
+ call PlaySFX
+ ret
+.asm_e4747
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ld de, SFX_DITTO_POP_UP
+ call PlaySFX
+ ret
+
+GameFreakLogoScene3: ; e4759 (39:4759)
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr nc, .asm_e4764
+ inc [hl]
+ ret
+.asm_e4764
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ld de, SFX_DITTO_TRANSFORM
+ call PlaySFX
+ ret
+
+GameFreakLogoScene4: ; e4776 (39:4776)
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $40
+ jr z, .asm_e47a3
+ inc [hl]
+ srl a
+ srl a
+ ld e, a
+ ld d, $0
+ ld hl, GameFreakLogoPalettes
+rept 2
+ add hl, de
+endr
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld a, [hli]
+ ld [OBPals + 12], a
+ ld a, [hli]
+ ld [OBPals + 13], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+.asm_e47a3
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ call PlaceGameFreakPresents_AdvanceIndex
+
+GameFreakLogoScene5: ; e47ab (39:47ab)
+ ret
+; e47ac (39:47ac)
+
+GameFreakLogoPalettes: ; e47ac
+; Ditto's color as it turns into the Game Freak logo.
+; Fade from pink to orange.
+; One color per step.
+ RGB 23, 12, 28
+ RGB 23, 12, 27
+ RGB 23, 13, 26
+ RGB 23, 13, 24
+ RGB 24, 14, 22
+ RGB 24, 14, 20
+ RGB 24, 15, 18
+ RGB 24, 15, 16
+ RGB 25, 16, 14
+ RGB 25, 16, 12
+ RGB 25, 17, 10
+ RGB 25, 17, 08
+ RGB 26, 18, 06
+ RGB 26, 18, 04
+ RGB 26, 19, 02
+ RGB 26, 19, 00
+;' e47cc
+
+GameFreakLogo: ; e47cc
+INCBIN "gfx/splash/logo.1bpp"
+; e48ac
+
+CrystalIntro: ; e48ac
+ ld a, [rSVBK]
+ push af
+ ld a, 5
+ ld [rSVBK], a
+ ld a, [hInMenu]
+ push af
+ ld a, [hVBlank]
+ push af
+ call Functione4901
+.loop: ; e48bc
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and BUTTONS
+ jr nz, .ShutOffMusic
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call IntroSceneJumper
+ callba Function8cf69
+ call DelayFrame
+ jp .loop
+
+.ShutOffMusic
+ ld de, MUSIC_NONE
+ call PlayMusic
+
+.done
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ pop af
+ ld [hVBlank], a
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [rSVBK], a
+ ret
+; e4901
+
+Functione4901: ; e4901
+ xor a
+ ld [hVBlank], a
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [hMapAnims], a
+ ld [wJumptableIndex], a
+ ret
+; e490f
+
+IntroSceneJumper: ; e490f
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, IntroScenes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; e491e
+
+
+IntroScenes: ; e491e (39:491e)
+ dw IntroScene1
+ dw IntroScene2
+ dw IntroScene3
+ dw IntroScene4
+ dw IntroScene5
+ dw IntroScene6
+ dw IntroScene7
+ dw IntroScene8
+ dw IntroScene9
+ dw IntroScene10
+ dw IntroScene11
+ dw IntroScene12
+ dw IntroScene13
+ dw IntroScene14
+ dw IntroScene15
+ dw IntroScene16
+ dw IntroScene17
+ dw IntroScene18
+ dw IntroScene19
+ dw IntroScene20
+ dw IntroScene21
+ dw IntroScene22
+ dw IntroScene23
+ dw IntroScene24
+ dw IntroScene25
+ dw IntroScene26
+ dw IntroScene27
+ dw IntroScene28
+
+
+NextIntroScene: ; e4956 (39:4956)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+IntroScene1: ; e495b (39:495b)
+; Setup the next scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap001
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroPulseGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap002
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene2: ; e49d6 (39:49d6)
+; First Unown (A) fades in, pulses, then fades out.
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .endscene
+ cp $60
+ jr nz, .DontPlaySound
+ push af
+ ld de, $5858
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_1
+ call PlaySFX
+ pop af
+.DontPlaySound
+ ld [wcf65], a
+ xor a
+ call Functione5223
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene3: ; e49fd (39:49fd)
+; More setup. Transition to the outdoor scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call Functione5516
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ call NextIntroScene
+ ret
+
+IntroScene4: ; e4a69 (39:4a69)
+; Scroll the outdoor panorama for a bit.
+ call Functione552f
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ cp $80
+ jr z, .endscene
+ inc [hl]
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene5: ; e4a7a (39:4a7a)
+; Go back to the Unown.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hLCDStatCustom], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap005
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroPulseGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap006
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene6: ; e4af7 (39:4af7)
+; Two more Unown (I, H) fade in.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .endscene
+ cp $60
+ jr z, .SecondUnown
+ cp $40
+ jr nc, .StopUnown
+ cp $20
+ jr z, .FirstUnown
+ jr .NoUnown
+.FirstUnown
+ push af
+ ld de, $3878
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_2
+ call PlaySFX
+ pop af
+.NoUnown
+ ld [wcf65], a
+ xor a
+ call Functione5223
+ ret
+.SecondUnown
+ push af
+ ld de, $7030
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_1
+ call PlaySFX
+ pop af
+.StopUnown
+ ld [wcf65], a
+ ld a, $1
+ call Functione5223
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene7: ; e4b3f (39:4b3f)
+; Back to the outdoor scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld hl, IntroPichuWooperGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneRunGFX
+ ld de, VTiles0 tile $00
+ call Functione54de
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call Functione5516
+ callba Function8cf53
+ depixel 13, 27, 4, 0
+ ld a, SPRITE_ANIM_INDEX_26
+ call _InitSpriteAnimStruct
+ ld a, $f0
+ ld [wc3c0], a
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene8: ; e4bd3 (39:4bd3)
+; Scroll the scene, then show Suicune running across the screen.
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $40
+ jr z, .asm_e4be2
+ jr nc, .asm_e4be8
+ call Functione552f
+ ret
+.asm_e4be2
+ ld de, SFX_INTRO_SUICUNE_3
+ call PlaySFX
+.asm_e4be8
+ ld a, [wc3c0]
+ and a
+ jr z, .asm_e4bf4
+ sub $8
+ ld [wc3c0], a
+ ret
+.asm_e4bf4
+ ld de, SFX_INTRO_SUICUNE_2
+ call PlaySFX
+ callba Function8d03d
+ call NextIntroScene
+ ret
+
+IntroScene9: ; e4c04 (39:4c04)
+; Set up the next scene (same bg).
+ xor a
+ ld [hLCDStatCustom], a
+ call ClearSprites
+ hlcoord 0, 0, AttrMap
+ ld bc, $f0
+ ld a, $1
+ call ByteFill
+ ld bc, $3c
+ ld a, $2
+ call ByteFill
+ ld bc, $3c
+ ld a, $3
+ call ByteFill
+ ld a, $2
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ ld a, $c
+ ld [hBGMapAddress], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a
+ ld [hBGMapAddress], a
+ ld [wc3c0], a
+ xor a
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene10: ; e4c4f (39:4c4f)
+; Wooper and Pichu enter.
+ call Functione546d
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $c0
+ jr z, .done
+ cp $20
+ jr z, .wooper
+ cp $40
+ jr z, .pichu
+ ret
+
+.pichu
+ depixel 21, 16, 1, 0
+ ld a, SPRITE_ANIM_INDEX_27
+ call _InitSpriteAnimStruct
+ ld de, SFX_INTRO_PICHU
+ call PlaySFX
+ ret
+
+.wooper
+ depixel 22, 6
+ ld a, SPRITE_ANIM_INDEX_28
+ call _InitSpriteAnimStruct
+ ld de, SFX_INTRO_PICHU
+ call PlaySFX
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene11: ; e4c86 (39:4c86)
+; Back to Unown again.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hLCDStatCustom], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap007
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap008
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene12: ; e4cfa (39:4cfa)
+; Even more Unown.
+ call Functione4d36
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $c0
+ jr nc, .asm_e4d32
+ cp $80
+ jr nc, .asm_e4d1d
+ ld c, a
+ and $1f
+ sla a
+ ld [wcf65], a
+ ld a, c
+ and $e0
+ srl a
+ swap a
+ call Functione5223
+ ret
+.asm_e4d1d
+ ld c, a
+ and $f
+ sla a
+ sla a
+ ld [wcf65], a
+ ld a, c
+ and $70
+ or $40
+ swap a
+ call Functione5223
+ ret
+.asm_e4d32
+ call NextIntroScene
+ ret
+
+Functione4d36: ; e4d36 (39:4d36)
+ ld a, [wIntroSceneFrameCounter]
+ ld c, a
+ ld hl, .UnownSounds
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ cp c
+ jr z, .playsound
+rept 2
+ inc hl
+endr
+ jr .loop
+.playsound
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ push de
+ call SFXChannelsOff
+ pop de
+ call PlaySFX
+ ret
+; e4d54 (39:4d54)
+
+.UnownSounds: ; e4d54
+ dbw $00, SFX_INTRO_UNOWN_3
+ dbw $20, SFX_INTRO_UNOWN_2
+ dbw $40, SFX_INTRO_UNOWN_1
+ dbw $60, SFX_INTRO_UNOWN_2
+ dbw $80, SFX_INTRO_UNOWN_3
+ dbw $90, SFX_INTRO_UNOWN_2
+ dbw $a0, SFX_INTRO_UNOWN_1
+ dbw $b0, SFX_INTRO_UNOWN_2
+ db $ff
+; e4d6d
+
+IntroScene13: ; e4d6d (39:4d6d)
+; Switch scenes again.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneRunGFX
+ ld de, VTiles0 tile $00
+ call Functione54de
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ depixel 13, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_26
+ call _InitSpriteAnimStruct
+ ld de, MUSIC_CRYSTAL_OPENING
+ call PlayMusic
+ xor a
+ ld [wc3c0], a
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene14: ; e4dfa (39:4dfa)
+; Suicune runs then jumps.
+ ld a, [hSCX]
+ sub 10
+ ld [hSCX], a
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr z, .done
+ cp $60
+ jr z, .jump
+ jr nc, .asm_e4e1a
+ cp $40
+ jr nc, .asm_e4e33
+ ret
+
+.jump
+ ld de, SFX_INTRO_SUICUNE_4
+ call PlaySFX
+
+.asm_e4e1a
+ ld a, $1
+ ld [wcf65], a
+ ld a, [wc3c0]
+ cp $88
+ jr c, .asm_e4e2c
+ sub $8
+ ld [wc3c0], a
+ ret
+
+.asm_e4e2c
+ callba Function8d03d
+ ret
+
+.asm_e4e33
+ ld a, [wc3c0]
+ sub $2
+ ld [wc3c0], a
+ ret
+
+.done
+ call NextIntroScene
+ ret
+
+IntroScene15: ; e4e40 (39:4e40)
+; Transition to a new scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap009
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneJumpGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroUnownBackGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld de, GFX_e7a5d
+ ld hl, VTiles1 tile $00
+ lb bc, BANK(GFX_e7a5d), 1
+ call Request2bpp
+ ld hl, IntroTilemap010
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ call Functione541b
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e77dd
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e77dd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld a, $90
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ depixel 8, 5
+ ld a, SPRITE_ANIM_INDEX_2A
+ call _InitSpriteAnimStruct
+ depixel 12, 0
+ ld a, SPRITE_ANIM_INDEX_2B
+ call _InitSpriteAnimStruct
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene16: ; e4edc (39:4edc)
+; Suicune shows its face. An Unown appears in front.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .done
+ call Functione5441
+ ld a, [hSCY]
+ and a
+ ret z
+ add 8
+ ld [hSCY], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene17: ; e4ef5 (39:4ef5)
+; ...
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap011
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneCloseGFX
+ ld de, VTiles1 tile $00
+ call Functione54de
+ ld hl, IntroTilemap012
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e6d6d
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e6d6d
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene18: ; e4f67 (39:4f67)
+; Suicune close up.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $60
+ jr nc, .done
+ ld a, [hSCX]
+ cp $60
+ ret z
+ add 8
+ ld [hSCX], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene19: ; e4f7e (39:4f7e)
+; More setup.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap013
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneBackGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroUnownsGFX
+ ld de, VTiles1 tile $00
+ call Functione54c2
+ ld de, GFX_e7a5d
+ ld hl, VTiles1 tile $7f
+ lb bc, BANK(GFX_e7a5d), 1
+ call Request2bpp
+ ld hl, IntroTilemap014
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ call Functione541b
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e77dd
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e77dd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld a, $d8
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ ld hl, wc300
+ xor a
+ ld [hli], a
+ ld [hl], $7f
+ call Functione549e
+ depixel 12, 0
+ ld a, SPRITE_ANIM_INDEX_2B
+ call _InitSpriteAnimStruct
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene20: ; e5019 (39:5019)
+; Suicune running away. A bunch of Unown appear.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $98
+ jr nc, .asm_e5059
+ cp $58
+ ret nc
+ cp $40
+ jr nc, .asm_e5032
+ cp $28
+ ret nc
+ ld a, [hSCY]
+ inc a
+ ld [hSCY], a
+ ret
+
+.asm_e5032
+ sub $18
+ ld c, a
+ and $3
+ cp $3
+ ret nz
+ ld a, c
+ and $1c
+ srl a
+ srl a
+ ld [wcf65], a
+ xor a
+ call Functione5348
+ ret
+; e5049 (39:5049)
+
+ ld a, c
+ and $1c
+ srl a
+ srl a
+ ld [wcf65], a
+ ld a, 1
+ call Functione5348
+ ret
+
+.asm_e5059
+ call NextIntroScene
+ ret
+
+IntroScene21: ; e505d (39:505d)
+; Suicune gets more distant and turns black.
+ call Functione5451
+ ld c, 3
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene22: ; e5072 (39:5072)
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $8
+ jr nc, .done
+ ret
+.done
+ callba Function8d03d
+ call NextIntroScene
+ ret
+
+IntroScene23: ; e5086 (39:5086)
+ xor a
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene24: ; e508e (39:508e)
+; Fade to white.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $20
+ jr nc, .done
+
+ ld c, a
+ and $3
+ ret nz
+ ld a, c
+ and $1c
+ sla a
+ call Functione5172
+ ret
+
+.done
+ ld a, $40
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene25: ; e50ad (39:50ad)
+; Wait around a bit.
+ ld a, [wcf64]
+ dec a
+ jr z, .done
+ ld [wcf64], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene26: ; e50bb (39:50bb)
+; Load the final scene.
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap015
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroCrystalUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap017
+ ld de, VBGMap0 tile $00
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e679d
+ ld de, wMapPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e679d
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene27: ; e512d (39:512d)
+; Spell out C R Y S T A L with Unown.
+ ld hl, wcf65
+ inc [hl]
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .done
+
+ ld c, a
+ and $f
+ ld [wcf65], a
+ ld a, c
+ and $70
+ swap a
+ call Functione539d
+ ret
+
+.done
+ call NextIntroScene
+ ld a, $80
+ ld [wcf64], a
+ ret
+
+IntroScene28: ; e5152 (39:5152)
+; Cut out when the music ends, and lead into the title screen.
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ cp $18
+ jr z, .clear
+ cp $8
+ ret nz
+
+ ld de, SFX_UNKNOWN_CB
+ call PlaySFX
+ ret
+
+.clear
+ call ClearBGPalettes
+ ret
+
+.done
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+
+Functione5172: ; e5172 (39:5172)
+ ld hl, Unknown_e519c
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld de, BGPals
+ ld b, $8
+.asm_e5187
+ push hl
+ ld c, $8
+.asm_e518a
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_e518a
+ pop hl
+ dec b
+ jr nz, .asm_e5187
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e519c (39:519c)
+
+Unknown_e519c: ; e519c
+; Fade to white.
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 12, 00, 31
+ RGB 00, 00, 00
+
+ RGB 31, 19, 05
+ RGB 31, 31, 31
+ RGB 15, 05, 31
+ RGB 07, 07, 07
+
+ RGB 31, 21, 09
+ RGB 31, 31, 31
+ RGB 18, 09, 31
+ RGB 11, 11, 11
+
+ RGB 31, 23, 13
+ RGB 31, 31, 31
+ RGB 21, 13, 31
+ RGB 15, 15, 15
+
+ RGB 31, 25, 17
+ RGB 31, 31, 31
+ RGB 25, 17, 31
+ RGB 19, 19, 19
+
+ RGB 31, 27, 21
+ RGB 31, 31, 31
+ RGB 27, 21, 31
+ RGB 23, 23, 23
+
+ RGB 31, 29, 25
+ RGB 31, 31, 31
+ RGB 29, 26, 31
+ RGB 27, 27, 27
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+; e51dc
+
+Functione51dc: ; e51dc (39:51dc)
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $8
+ ld a, $3c
+ call Function3b3c
+ pop de
+
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $18
+ ld a, $3b
+ call Function3b3c
+ pop de
+
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $28
+ ld a, $39
+ call Function3b3c
+ pop de
+
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $38
+ ld a, $3a
+ call Function3b3c
+ ret
+
+Functione5223: ; e5223 (39:5223)
+rept 3
+ add a
+endr
+ ld e, a
+ ld d, $0
+ ld hl, BGPals
+ add hl, de
+rept 2
+ inc hl
+endr
+ ld a, [wcf65]
+ and $3f
+ cp $1f
+ jr z, .asm_e523e
+ jr c, .asm_e523e
+ ld c, a
+ ld a, $3f
+ sub c
+.asm_e523e
+ ld c, a
+ ld b, $0
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push hl
+ push bc
+ ld hl, BGPals
+ ld bc, $40
+ xor a
+ call ByteFill
+ pop bc
+ pop hl
+ push hl
+ ld hl, Unknown_e5288
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Unknown_e52c8
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Unknown_e5308
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e5288 (39:5288)
+
+Unknown_e5288: ; e5288
+; Fade between black and white.
+hue = 0
+rept 32
+ RGB hue, hue, hue
+hue = hue + 1
+endr
+; e52c8
+
+Unknown_e52c8: ; e52c8
+; Fade between black and light blue.
+hue = 0
+rept 32
+ RGB 0, hue / 2, hue
+hue = hue + 1
+endr
+; e5308
+
+Unknown_e5308: ; e5308
+; Fade between black and blue.
+hue = 0
+rept 32
+ RGB 0, 0, hue
+hue = hue + 1
+endr
+; e5348
+
+Functione5348: ; e5348 (39:5348)
+ and a
+ jr nz, .asm_e5350
+ ld hl, Palette_e538d
+ jr .asm_e5353
+.asm_e5350
+ ld hl, Palette_e5395
+.asm_e5353
+ ld a, [wcf65]
+ and $7
+rept 3
+ add a
+endr
+ ld c, a
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push bc
+ ld de, BGPals
+ ld a, c
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ ld d, a
+ ld bc, $8
+ call CopyBytes
+ pop bc
+ ld de, wMapPals
+ ld a, c
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ ld d, a
+ ld bc, $8
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e538d (39:538d)
+
+Palette_e538d: ; e538d
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 12, 00, 31
+ RGB 00, 00, 00
+; e5395
+
+Palette_e5395: ; e5395
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+; e539d
+
+Functione539d: ; e539d (39:539d)
+rept 3
+ add a
+endr
+ ld e, a
+ ld d, $0
+ ld hl, BGPals
+ add hl, de
+rept 4
+ inc hl
+endr
+ ld a, [wcf65]
+ add a
+ ld c, a
+ ld b, $0
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push hl
+ ld hl, Palette_e53db
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Palette_e53fb
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e53db (39:53db)
+
+Palette_e53db: ; e53db
+hue = 31
+rept 8
+ RGB hue, hue, hue
+hue = hue + -1
+ RGB hue, hue, hue
+hue = hue + -2
+endr
+; e53fb
+
+Palette_e53fb: ; e53fb
+hue = 31
+rept 16
+ RGB hue, hue, hue
+hue = hue + -1
+endr
+; e541b
+
+Functione541b: ; e541b (39:541b)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, w6_d000
+ decoord 0, 0
+ ld b, SCREEN_HEIGHT
+.asm_e542a
+ ld c, SCREEN_WIDTH
+.asm_e542c
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_e542c
+ ld a, $c
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+ dec b
+ jr nz, .asm_e542a
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione5441: ; e5441 (39:5441)
+ ld a, [wcf64]
+ and $3
+ jr z, Functione5451
+ cp $3
+ jr z, .asm_e544d
+ ret
+.asm_e544d
+ xor a
+ ld [hBGMapMode], a
+ ret
+
+Functione5451: ; e5451 (39:5451)
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+.asm_e5457
+ ld a, [hl]
+ and a
+ jr z, .asm_e5462
+ cp $80
+ jr nc, .asm_e5462
+ xor $8
+ ld [hl], a
+.asm_e5462
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_e5457
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+Functione546d: ; e546d (39:546d)
+ ld a, [wcf64]
+ cp $24
+ ret nc
+ and $c
+ srl a
+ ld e, a
+ ld d, $0
+ ld hl, Unknown_e5496
+ add hl, de
+ ld a, [hli]
+ ld [Requested2bppSource], a
+ ld a, [hli]
+ ld [Requested2bppSource + 1], a
+ ld a, (VTiles2 tile $09) % $100
+ ld [Requested2bppDest], a
+ ld a, (VTiles2 tile $09) / $100
+ ld [Requested2bppDest + 1], a
+ ld a, $4
+ ld [Requested2bpp], a
+ ret
+; e5496 (39:5496)
+
+Unknown_e5496: ; e5496
+ dw GFX_e799d
+ dw GFX_e79dd
+ dw GFX_e7a1d
+ dw GFX_e79dd
+; e549e
+
+Functione549e: ; e549e (39:549e)
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+
+Functione54a3: ; e54a3 (39:54a3)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld bc, $80
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ call DelayFrame
+ call DelayFrame
+ ret
+
+Functione54c2: ; e54c2 (39:54c2)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $180
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione54de: ; e54de (39:54de)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $1ff
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione54fa: ; e54fa (39:54fa)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $140
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione5516: ; e5516 (39:5516)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, LYOverrides
+ ld bc, $90
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, $43
+ ld [hLCDStatCustom], a
+ ret
+
+Functione552f: ; e552f (39:552f)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld a, [wcf64]
+ and $1
+ jr z, .asm_e5548
+ ld hl, LYOverrides
+ ld a, [hl]
+ inc a
+ ld bc, $5f
+ call ByteFill
+.asm_e5548
+ ld hl, LYOverrides + $5f
+ ld a, [hl]
+rept 2
+ inc a
+endr
+ ld bc, $31
+ call ByteFill
+ ld a, [LYOverrides + 0]
+ ld [hSCX], a
+ pop af
+ ld [rSVBK], a
+ ret
+
+IntroSuicuneRunGFX: ; e555d
+INCBIN "gfx/intro/suicune_run.2bpp.lz"
+; e592d
+
+IntroPichuWooperGFX: ; e592d
+INCBIN "gfx/intro/pichu_wooper.2bpp.lz"
+; e5c7d
+
+IntroBackgroundGFX: ; e5c7d
+INCBIN "gfx/intro/background.2bpp.lz"
+; e5e6d
+
+IntroTilemap004: ; e5e6d
+INCBIN "gfx/intro/004.tilemap.lz"
+; e5ecd
+
+IntroTilemap003: ; e5ecd
+INCBIN "gfx/intro/003.tilemap.lz"
+; e5edd
+
+Palette_e5edd: ; e5edd
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 0, 4, 5
+ RGB 1, 8, 5
+ RGB 4, 12, 9
+ RGB 24, 12, 9
+ RGB 0, 4, 5
+ RGB 9, 6, 8
+ RGB 8, 16, 5
+ RGB 5, 10, 4
+ RGB 31, 31, 31
+ RGB 9, 6, 8
+ RGB 18, 9, 9
+ RGB 13, 8, 9
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 2, 5, 22
+ RGB 1, 5, 12
+ RGB 31, 31, 31
+ RGB 31, 10, 25
+ RGB 31, 21, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 21, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroUnownsGFX: ; e5f5d
+INCBIN "gfx/intro/unowns.2bpp.lz"
+; e634d
+
+IntroPulseGFX: ; e634d
+INCBIN "gfx/intro/pulse.2bpp.lz"
+; e63dd
+
+IntroTilemap002: ; e63dd
+INCBIN "gfx/intro/002.tilemap.lz"
+; e641d
+
+IntroTilemap001: ; e641d
+INCBIN "gfx/intro/001.tilemap.lz"
+; e642d
+
+IntroTilemap006: ; e642d
+INCBIN "gfx/intro/006.tilemap.lz"
+; e647d
+
+IntroTilemap005: ; e647d
+INCBIN "gfx/intro/005.tilemap.lz"
+; e649d
+
+IntroTilemap008: ; e649d
+INCBIN "gfx/intro/008.tilemap.lz"
+; e655d
+
+IntroTilemap007: ; e655d
+INCBIN "gfx/intro/007.tilemap.lz"
+; e65ad
+
+Palette_365ad: ; e65ad
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 10, 0, 10
+ RGB 19, 0, 19
+ RGB 31, 0, 31
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroCrystalUnownsGFX: ; e662d
+INCBIN "gfx/intro/crystal_unowns.2bpp.lz"
+; e672d
+
+IntroTilemap017: ; e672d
+INCBIN "gfx/intro/017.tilemap.lz"
+; e676d
+
+IntroTilemap015: ; e676d
+INCBIN "gfx/intro/015.tilemap.lz"
+; e679d
+
+Palette_e679d: ; e679d
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroSuicuneCloseGFX: ; e681d
+INCBIN "gfx/intro/suicune_close.2bpp.lz"
+; e6c3d
+
+IntroTilemap012: ; e6c3d
+INCBIN "gfx/intro/012.tilemap.lz"
+; e6d0d
+
+IntroTilemap011: ; e6d0d
+INCBIN "gfx/intro/011.tilemap.lz"
+; e6d6d
+
+Palette_e6d6d: ; e6d6d
+ RGB 24, 12, 9
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 12, 20, 31
+ RGB 19, 8, 31
+ RGB 0, 0, 0
+ RGB 12, 20, 31
+ RGB 8, 9, 31
+ RGB 19, 8, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 12, 20, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroSuicuneJumpGFX: ; e6ded
+INCBIN "gfx/intro/suicune_jump.2bpp.lz"
+; e72ad
+
+IntroSuicuneBackGFX: ; e72ad
+INCBIN "gfx/intro/suicune_back.2bpp.lz"
+; e764d
+
+IntroTilemap010: ; e764d
+INCBIN "gfx/intro/010.tilemap.lz"
+; e76ad
+
+IntroTilemap009: ; e76ad
+INCBIN "gfx/intro/009.tilemap.lz"
+; e76bd
+
+IntroTilemap014: ; e76bd
+INCBIN "gfx/intro/014.tilemap.lz"
+; e778d
+
+IntroTilemap013: ; e778d
+INCBIN "gfx/intro/013.tilemap.lz"
+; e77dd
+
+Palette_e77dd: ; e77dd
+ RGB 24, 12, 9
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 12, 0, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 21, 9, 0
+ RGB 21, 9, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroUnownBackGFX: ; e785d
+INCBIN "gfx/intro/unown_back.2bpp.lz"
+; e799d
+
+GFX_e799d: ; e799d
+INCBIN "gfx/unknown/0e799d.2bpp"
+GFX_e79dd: ; e79dd
+INCBIN "gfx/unknown/0e79dd.2bpp"
+GFX_e7a1d: ; e7a1d
+INCBIN "gfx/unknown/0e7a1d.2bpp"
+
+GFX_e7a5d: ; e7a5d
+INCBIN "gfx/unknown/0e7a5d.2bpp"
+
+