shithub: pokecrystal

Download patch

ref: 2cdca754410fc97878b99a673eeaa9cfad49ed9e
parent: be082943ed8fa746ae345b9f93783e5993550373
author: PikalaxALT <PikalaxALT@gmail.com>
date: Wed Dec 2 12:59:05 EST 2015

Crystal Intro

--- a/data/sprite_engine.asm
+++ b/data/sprite_engine.asm
@@ -56,10 +56,10 @@
 	dw Unknown_8d907 ; 36
 	dw Unknown_8d90c ; 37
 	dw Unknown_8d913 ; 38
-	dw Unknown_8d916 ; 39
-	dw Unknown_8d91d ; 3a
-	dw Unknown_8d924 ; 3b
-	dw Unknown_8d92b ; 3c
+	dw Unknown_8d916 ; 39 unown in intro
+	dw Unknown_8d91d ; 3a unown in intro
+	dw Unknown_8d924 ; 3b unown in intro
+	dw Unknown_8d92b ; 3c unown in intro
 	dw Unknown_8d932 ; 3d
 	dw Unknown_8d93d ; 3e
 	dw Unknown_8d940 ; 3f
--- a/engine/breeding/egg.asm
+++ b/engine/breeding/egg.asm
@@ -731,7 +731,7 @@
 	ld a, 2
 	ld [hSCX], a
 	ld a, -2
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	call EggHatch_DoAnimFrame
 	ld c, 2
 	call DelayFrames
@@ -738,7 +738,7 @@
 	ld a, -2
 	ld [hSCX], a
 	ld a, 2
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	call EggHatch_DoAnimFrame
 	ld c, 2
 	call DelayFrames
@@ -754,7 +754,7 @@
 	call PlaySFX
 	xor a
 	ld [hSCX], a
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	call ClearSprites
 	call Function173b3
 	hlcoord 6, 3
--- a/engine/crystal_intro.asm
+++ b/engine/crystal_intro.asm
@@ -1,21 +1,3 @@
-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
@@ -111,7 +93,7 @@
 	ld [hl], $30
 	xor a
 	ld [wJumptableIndex], a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	ld [hSCX], a
 	ld [hSCY], a
@@ -230,7 +212,6 @@
 ; e46ed
 
 
-
 GameFreakLogoJumper: ; e46ed (39:46ed)
 	ld hl, $b
 	add hl, bc
@@ -252,7 +233,6 @@
 	dw GameFreakLogoScene4
 	dw GameFreakLogoScene5
 
-
 GameFreakLogoScene1: ; e4707 (39:4707)
 	ld hl, $b
 	add hl, bc
@@ -369,20 +349,24 @@
 	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
 
+; e47cc
+
 GameFreakLogo: ; e47cc
 INCBIN "gfx/splash/logo.1bpp"
 ; e48ac
@@ -459,7 +443,6 @@
 	jp [hl]
 ; e491e
 
-
 IntroScenes: ; e491e (39:491e)
 	dw IntroScene1
 	dw IntroScene2
@@ -490,7 +473,6 @@
 	dw IntroScene27
 	dw IntroScene28
 
-
 NextIntroScene: ; e4956 (39:4956)
 	ld hl, wJumptableIndex
 	inc [hl]
@@ -498,7 +480,7 @@
 
 IntroScene1: ; e495b (39:495b)
 ; Setup the next scene.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -507,18 +489,18 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap001
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroUnownsGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroPulseGFX
 	ld de, VTiles0 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap002
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -541,7 +523,7 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	xor a
 	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
@@ -558,8 +540,8 @@
 	cp $60
 	jr nz, .DontPlaySound
 	push af
-	ld de, $5858
-	call Functione51dc
+	depixel 11, 11
+	call CrystalIntro_InitUnownAnim
 	ld de, SFX_INTRO_UNOWN_1
 	call PlaySFX
 	pop af
@@ -566,7 +548,7 @@
 .DontPlaySound
 	ld [wcf65], a
 	xor a
-	call Functione5223
+	call CrystalIntro_UnownFade
 	ret
 .endscene
 	call NextIntroScene
@@ -574,7 +556,7 @@
 
 IntroScene3: ; e49fd (39:49fd)
 ; More setup. Transition to the outdoor scene.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -583,15 +565,15 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap003
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroBackgroundGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap004
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -613,8 +595,8 @@
 	ld [hWX], a
 	ld a, $90
 	ld [hWY], a
-	call Functione5516
-	call Functione549e
+	call Intro_ResetLYOverrides
+	call Intro_SetCGBPalUpdate
 	xor a
 	ld [wIntroSceneFrameCounter], a
 	call NextIntroScene
@@ -622,7 +604,7 @@
 
 IntroScene4: ; e4a69 (39:4a69)
 ; Scroll the outdoor panorama for a bit.
-	call Functione552f
+	call Intro_PerspectiveScrollBG
 	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	cp $80
@@ -629,6 +611,7 @@
 	jr z, .endscene
 	inc [hl]
 	ret
+
 .endscene
 	call NextIntroScene
 	ret
@@ -635,7 +618,7 @@
 
 IntroScene5: ; e4a7a (39:4a7a)
 ; Go back to the Unown.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -645,18 +628,18 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap005
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroUnownsGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroPulseGFX
 	ld de, VTiles0 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap006
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -679,9 +662,9 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -688,7 +671,7 @@
 
 IntroScene6: ; e4af7 (39:4af7)
 ; Two more Unown (I, H) fade in.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $80
@@ -700,10 +683,11 @@
 	cp $20
 	jr z, .FirstUnown
 	jr .NoUnown
+
 .FirstUnown
 	push af
-	ld de, $3878
-	call Functione51dc
+	depixel 7, 15
+	call CrystalIntro_InitUnownAnim
 	ld de, SFX_INTRO_UNOWN_2
 	call PlaySFX
 	pop af
@@ -710,12 +694,13 @@
 .NoUnown
 	ld [wcf65], a
 	xor a
-	call Functione5223
+	call CrystalIntro_UnownFade
 	ret
+
 .SecondUnown
 	push af
-	ld de, $7030
-	call Functione51dc
+	depixel 14, 6
+	call CrystalIntro_InitUnownAnim
 	ld de, SFX_INTRO_UNOWN_1
 	call PlaySFX
 	pop af
@@ -722,8 +707,9 @@
 .StopUnown
 	ld [wcf65], a
 	ld a, $1
-	call Functione5223
+	call CrystalIntro_UnownFade
 	ret
+
 .endscene
 	call NextIntroScene
 	ret
@@ -730,44 +716,54 @@
 
 IntroScene7: ; e4b3f (39:4b3f)
 ; Back to the outdoor scene.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
 	ld [hBGMapMode], a
+
 	ld a, $1
 	ld [rVBK], a
 	ld hl, IntroTilemap003
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
+
 	ld hl, IntroPichuWooperGFX
 	ld de, VTiles0 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
+
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroSuicuneRunGFX
 	ld de, VTiles0 tile $00
-	call Functione54de
+	call Intro_DecompressRequest2bpp_255Tiles
+
 	ld hl, IntroBackgroundGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
+
 	ld hl, IntroTilemap004
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
+
 	ld a, [rSVBK]
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	ld hl, Palette_e5edd
 	ld de, UnknBGPals
 	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
@@ -775,14 +771,14 @@
 	ld [hWX], a
 	ld a, $90
 	ld [hWY], a
-	call Functione5516
+	call Intro_ResetLYOverrides
 	callba ClearSpriteAnims
 	depixel 13, 27, 4, 0
 	ld a, SPRITE_ANIM_INDEX_26
 	call _InitSpriteAnimStruct
 	ld a, $f0
-	ld [wc3c0], a
-	call Functione549e
+	ld [wGlobalAnimXOffset], a
+	call Intro_SetCGBPalUpdate
 	xor a
 	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
@@ -795,21 +791,23 @@
 	ld a, [hl]
 	inc [hl]
 	cp $40
-	jr z, .asm_e4be2
-	jr nc, .asm_e4be8
-	call Functione552f
+	jr z, .suicune_sound
+	jr nc, .animate_suicune
+	call Intro_PerspectiveScrollBG
 	ret
-.asm_e4be2
+
+.suicune_sound
 	ld de, SFX_INTRO_SUICUNE_3
 	call PlaySFX
-.asm_e4be8
-	ld a, [wc3c0]
+.animate_suicune
+	ld a, [wGlobalAnimXOffset]
 	and a
-	jr z, .asm_e4bf4
+	jr z, .finish
 	sub $8
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	ret
-.asm_e4bf4
+
+.finish
 	ld de, SFX_INTRO_SUICUNE_2
 	call PlaySFX
 	callba Function8d03d
@@ -822,13 +820,16 @@
 	ld [hLCDStatCustom], a
 	call ClearSprites
 	hlcoord 0, 0, AttrMap
-	ld bc, $f0
+	; first 12 rows have palette 1
+	ld bc, 12 * SCREEN_WIDTH
 	ld a, $1
 	call ByteFill
-	ld bc, $3c
+	; middle 3 rows have palette 2
+	ld bc, 3 * SCREEN_WIDTH
 	ld a, $2
 	call ByteFill
-	ld bc, $3c
+	; last three rows have palette 3
+	ld bc, 3 * SCREEN_WIDTH
 	ld a, $3
 	call ByteFill
 	ld a, $2
@@ -836,7 +837,7 @@
 	call DelayFrame
 	call DelayFrame
 	call DelayFrame
-	ld a, $c
+	ld a, $c ; $980c
 	ld [hBGMapAddress], a
 	call DelayFrame
 	call DelayFrame
@@ -844,16 +845,16 @@
 	xor a
 	ld [hBGMapMode], a
 	ld [hBGMapAddress], a
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	call NextIntroScene
 	ret
 
 IntroScene10: ; e4c4f (39:4c4f)
 ; Wooper and Pichu enter.
-	call Functione546d
-	ld hl, wcf64
+	call Intro_RustleGrass
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $c0
@@ -885,7 +886,7 @@
 
 IntroScene11: ; e4c86 (39:4c86)
 ; Back to Unown again.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -895,15 +896,15 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap007
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroUnownsGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap008
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -926,7 +927,7 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	xor a
 	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
@@ -935,14 +936,15 @@
 
 IntroScene12: ; e4cfa (39:4cfa)
 ; Even more Unown.
-	call Functione4d36
+	call .PlayUnownSound
 	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $c0
-	jr nc, .asm_e4d32
+	jr nc, .done
 	cp $80
-	jr nc, .asm_e4d1d
+	jr nc, .second_half
+; first half
 	ld c, a
 	and $1f
 	sla a
@@ -951,9 +953,11 @@
 	and $e0
 	srl a
 	swap a
-	call Functione5223
+	call CrystalIntro_UnownFade
 	ret
-.asm_e4d1d
+
+.second_half
+; double speed
 	ld c, a
 	and $f
 	sla a
@@ -963,13 +967,14 @@
 	and $70
 	or $40
 	swap a
-	call Functione5223
+	call CrystalIntro_UnownFade
 	ret
-.asm_e4d32
+
+.done
 	call NextIntroScene
 	ret
 
-Functione4d36: ; e4d36 (39:4d36)
+.PlayUnownSound: ; e4d36 (39:4d36)
 	ld a, [wIntroSceneFrameCounter]
 	ld c, a
 	ld hl, .UnownSounds
@@ -1003,12 +1008,11 @@
 	dbw $90, SFX_INTRO_UNOWN_2
 	dbw $a0, SFX_INTRO_UNOWN_1
 	dbw $b0, SFX_INTRO_UNOWN_2
-	db $ff
-; e4d6d
+	db -1 ; e4d6d
 
 IntroScene13: ; e4d6d (39:4d6d)
 ; Switch scenes again.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -1017,18 +1021,18 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap003
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroSuicuneRunGFX
 	ld de, VTiles0 tile $00
-	call Functione54de
+	call Intro_DecompressRequest2bpp_255Tiles
 	ld hl, IntroBackgroundGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap004
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -1057,10 +1061,10 @@
 	ld de, MUSIC_CRYSTAL_OPENING
 	call PlayMusic
 	xor a
-	ld [wc3c0], a
-	call Functione549e
+	ld [wGlobalAnimXOffset], a
+	call Intro_SetCGBPalUpdate
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -1070,7 +1074,7 @@
 	ld a, [hSCX]
 	sub 10
 	ld [hSCX], a
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $80
@@ -1089,11 +1093,11 @@
 .asm_e4e1a
 	ld a, $1
 	ld [wcf65], a
-	ld a, [wc3c0]
+	ld a, [wGlobalAnimXOffset]
 	cp $88
 	jr c, .asm_e4e2c
 	sub $8
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	ret
 
 .asm_e4e2c
@@ -1101,9 +1105,9 @@
 	ret
 
 .asm_e4e33
-	ld a, [wc3c0]
+	ld a, [wGlobalAnimXOffset]
 	sub $2
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	ret
 
 .done
@@ -1112,7 +1116,7 @@
 
 IntroScene15: ; e4e40 (39:4e40)
 ; Transition to a new scene.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -1121,23 +1125,23 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap009
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroSuicuneJumpGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroUnownBackGFX
 	ld de, VTiles0 tile $00
-	call Functione54c2
-	ld de, GFX_e7a5d
+	call Intro_DecompressRequest2bpp_128Tiles
+	ld de, IntroGrass4GFX
 	ld hl, VTiles1 tile $00
-	lb bc, BANK(GFX_e7a5d), 1
+	lb bc, BANK(IntroGrass4GFX), 1
 	call Request2bpp
 	ld hl, IntroTilemap010
 	debgcoord 0, 0
-	call Functione54fa
-	call Functione541b
+	call Intro_DecompressRequest2bpp_64Tiles
+	call Intro_LoadTilemap
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -1161,7 +1165,7 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	depixel 8, 5
 	ld a, SPRITE_ANIM_INDEX_2A
 	call _InitSpriteAnimStruct
@@ -1169,7 +1173,7 @@
 	ld a, SPRITE_ANIM_INDEX_2B
 	call _InitSpriteAnimStruct
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -1176,12 +1180,12 @@
 
 IntroScene16: ; e4edc (39:4edc)
 ; Suicune shows its face. An Unown appears in front.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $80
 	jr nc, .done
-	call Functione5441
+	call Intro_Scene16_AnimateSuicune
 	ld a, [hSCY]
 	and a
 	ret z
@@ -1194,7 +1198,7 @@
 
 IntroScene17: ; e4ef5 (39:4ef5)
 ; ...
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -1203,15 +1207,15 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap011
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroSuicuneCloseGFX
 	ld de, VTiles1 tile $00
-	call Functione54de
+	call Intro_DecompressRequest2bpp_255Tiles
 	ld hl, IntroTilemap012
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -1234,9 +1238,9 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -1243,7 +1247,7 @@
 
 IntroScene18: ; e4f67 (39:4f67)
 ; Suicune close up.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $60
@@ -1260,7 +1264,7 @@
 
 IntroScene19: ; e4f7e (39:4f7e)
 ; More setup.
-	call Functione54a3
+	call Intro_ClearBGPals
 	call ClearSprites
 	call ClearTileMap
 	xor a
@@ -1269,23 +1273,23 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap013
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroSuicuneBackGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroUnownsGFX
 	ld de, VTiles1 tile $00
-	call Functione54c2
-	ld de, GFX_e7a5d
+	call Intro_DecompressRequest2bpp_128Tiles
+	ld de, IntroGrass4GFX
 	ld hl, VTiles1 tile $7f
-	lb bc, BANK(GFX_e7a5d), 1
+	lb bc, BANK(IntroGrass4GFX), 1
 	call Request2bpp
 	ld hl, IntroTilemap014
 	debgcoord 0, 0
-	call Functione54fa
-	call Functione541b
+	call Intro_DecompressRequest2bpp_64Tiles
+	call Intro_LoadTilemap
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -1313,12 +1317,12 @@
 	xor a
 	ld [hli], a
 	ld [hl], $7f
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	depixel 12, 0
 	ld a, SPRITE_ANIM_INDEX_2B
 	call _InitSpriteAnimStruct
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -1325,15 +1329,15 @@
 
 IntroScene20: ; e5019 (39:5019)
 ; Suicune running away. A bunch of Unown appear.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $98
-	jr nc, .asm_e5059
+	jr nc, .finished
 	cp $58
 	ret nc
 	cp $40
-	jr nc, .asm_e5032
+	jr nc, .AppearUnown
 	cp $28
 	ret nc
 	ld a, [hSCY]
@@ -1341,7 +1345,7 @@
 	ld [hSCY], a
 	ret
 
-.asm_e5032
+.AppearUnown
 	sub $18
 	ld c, a
 	and $3
@@ -1353,10 +1357,10 @@
 	srl a
 	ld [wcf65], a
 	xor a
-	call Functione5348
+	call Intro_Scene20_AppearUnown
 	ret
 ; e5049 (39:5049)
-
+; unused
 	ld a, c
 	and $1c
 	srl a
@@ -1363,27 +1367,27 @@
 	srl a
 	ld [wcf65], a
 	ld a, 1
-	call Functione5348
+	call Intro_Scene20_AppearUnown
 	ret
 
-.asm_e5059
+.finished
 	call NextIntroScene
 	ret
 
 IntroScene21: ; e505d (39:505d)
 ; Suicune gets more distant and turns black.
-	call Functione5451
+	call Intro_ColoredSuicuneFrameSwap
 	ld c, 3
 	call DelayFrames
 	xor a
 	ld [hBGMapMode], a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
 
 IntroScene22: ; e5072 (39:5072)
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $8
@@ -1396,13 +1400,13 @@
 
 IntroScene23: ; e5086 (39:5086)
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	call NextIntroScene
 	ret
 
 IntroScene24: ; e508e (39:508e)
 ; Fade to white.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $20
@@ -1411,25 +1415,27 @@
 	ld c, a
 	and $3
 	ret nz
+
 	ld a, c
 	and $1c
 	sla a
-	call Functione5172
+	call Intro_Scene24_ApplyPaletteFade
 	ret
 
 .done
 	ld a, $40
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	call NextIntroScene
 	ret
 
 IntroScene25: ; e50ad (39:50ad)
 ; Wait around a bit.
-	ld a, [wcf64]
+	ld a, [wIntroSceneFrameCounter]
 	dec a
 	jr z, .done
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ret
+
 .done
 	call NextIntroScene
 	ret
@@ -1445,15 +1451,15 @@
 	ld [rVBK], a
 	ld hl, IntroTilemap015
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, $0
 	ld [rVBK], a
 	ld hl, IntroCrystalUnownsGFX
 	ld de, VTiles2 tile $00
-	call Functione54c2
+	call Intro_DecompressRequest2bpp_128Tiles
 	ld hl, IntroTilemap017
 	debgcoord 0, 0
-	call Functione54fa
+	call Intro_DecompressRequest2bpp_64Tiles
 	ld a, [rSVBK]
 	push af
 	ld a, $5
@@ -1476,9 +1482,9 @@
 	ld a, $90
 	ld [hWY], a
 	callba ClearSpriteAnims
-	call Functione549e
+	call Intro_SetCGBPalUpdate
 	xor a
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ld [wcf65], a
 	call NextIntroScene
 	ret
@@ -1487,7 +1493,7 @@
 ; Spell out C R Y S T A L with Unown.
 	ld hl, wcf65
 	inc [hl]
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	inc [hl]
 	cp $80
@@ -1499,18 +1505,18 @@
 	ld a, c
 	and $70
 	swap a
-	call Functione539d
+	call Intro_FadeUnownWordPals
 	ret
 
 .done
 	call NextIntroScene
 	ld a, $80
-	ld [wcf64], a
+	ld [wIntroSceneFrameCounter], a
 	ret
 
 IntroScene28: ; e5152 (39:5152)
 ; Cut out when the music ends, and lead into the title screen.
-	ld hl, wcf64
+	ld hl, wIntroSceneFrameCounter
 	ld a, [hl]
 	and a
 	jr z, .done
@@ -1533,32 +1539,33 @@
 	set 7, [hl]
 	ret
 
-
-Functione5172: ; e5172 (39:5172)
-	ld hl, Unknown_e519c
+Intro_Scene24_ApplyPaletteFade: ; e5172 (39:5172)
+; load the (a)th palette from .FadePals to all BGPals
+	ld hl, .FadePals
 	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
+	ld b, 8 ; number of BG pals
+.loop1
 	push hl
-	ld c, $8
-.asm_e518a
+	ld c, 8 ; number of bytes per pal
+.loop2
 	ld a, [hli]
 	ld [de], a
 	inc de
 	dec c
-	jr nz, .asm_e518a
+	jr nz, .loop2
 	pop hl
 	dec b
-	jr nz, .asm_e5187
+	jr nz, .loop1
 	pop af
 	ld [rSVBK], a
 	ld a, $1
@@ -1566,7 +1573,7 @@
 	ret
 ; e519c (39:519c)
 
-Unknown_e519c: ; e519c
+.FadePals: ; e519c
 ; Fade to white.
 	RGB 24, 12, 09
 	RGB 31, 31, 31
@@ -1607,13 +1614,14 @@
 	RGB 31, 31, 31
 	RGB 31, 31, 31
 	RGB 31, 31, 31
+
 ; e51dc
 
-Functione51dc: ; e51dc (39:51dc)
+CrystalIntro_InitUnownAnim: ; e51dc (39:51dc)
 	push de
 	ld a, SPRITE_ANIM_INDEX_29
 	call _InitSpriteAnimStruct
-	ld hl, $c
+	ld hl, SPRITEANIMSTRUCT_0C
 	add hl, bc
 	ld [hl], $8
 	ld a, $3c
@@ -1623,7 +1631,7 @@
 	push de
 	ld a, SPRITE_ANIM_INDEX_29
 	call _InitSpriteAnimStruct
-	ld hl, $c
+	ld hl, SPRITEANIMSTRUCT_0C
 	add hl, bc
 	ld [hl], $18
 	ld a, $3b
@@ -1633,7 +1641,7 @@
 	push de
 	ld a, SPRITE_ANIM_INDEX_29
 	call _InitSpriteAnimStruct
-	ld hl, $c
+	ld hl, SPRITEANIMSTRUCT_0C
 	add hl, bc
 	ld [hl], $28
 	ld a, $39
@@ -1642,7 +1650,7 @@
 
 	ld a, SPRITE_ANIM_INDEX_29
 	call _InitSpriteAnimStruct
-	ld hl, $c
+	ld hl, SPRITEANIMSTRUCT_0C
 	add hl, bc
 	ld [hl], $38
 	ld a, $3a
@@ -1649,7 +1657,7 @@
 	call Function3b3c
 	ret
 
-Functione5223: ; e5223 (39:5223)
+CrystalIntro_UnownFade: ; e5223 (39:5223)
 rept 3
 	add a
 endr
@@ -1663,12 +1671,13 @@
 	ld a, [wcf65]
 	and $3f
 	cp $1f
-	jr z, .asm_e523e
-	jr c, .asm_e523e
+	jr z, .okay
+	jr c, .okay
 	ld c, a
 	ld a, $3f
 	sub c
-.asm_e523e
+.okay
+
 	ld c, a
 	ld b, $0
 	ld a, [rSVBK]
@@ -1675,16 +1684,18 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	push hl
 	push bc
 	ld hl, BGPals
-	ld bc, $40
+	ld bc, 4 * 16
 	xor a
 	call ByteFill
 	pop bc
 	pop hl
+
 	push hl
-	ld hl, Unknown_e5288
+	ld hl, .BWFade
 rept 2
 	add hl, bc
 endr
@@ -1696,8 +1707,9 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
+
 	push hl
-	ld hl, Unknown_e52c8
+	ld hl, .BlackLBlueFade
 rept 2
 	add hl, bc
 endr
@@ -1709,8 +1721,9 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
+
 	push hl
-	ld hl, Unknown_e5308
+	ld hl, .BlackBlueFade
 rept 2
 	add hl, bc
 endr
@@ -1722,6 +1735,7 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
+
 	pop af
 	ld [rSVBK], a
 	ld a, $1
@@ -1729,7 +1743,7 @@
 	ret
 ; e5288 (39:5288)
 
-Unknown_e5288: ; e5288
+.BWFade: ; e5288
 ; Fade between black and white.
 hue = 0
 rept 32
@@ -1738,7 +1752,7 @@
 endr
 ; e52c8
 
-Unknown_e52c8: ; e52c8
+.BlackLBlueFade: ; e52c8
 ; Fade between black and light blue.
 hue = 0
 rept 32
@@ -1747,7 +1761,7 @@
 endr
 ; e5308
 
-Unknown_e5308: ; e5308
+.BlackBlueFade: ; e5308
 ; Fade between black and blue.
 hue = 0
 rept 32
@@ -1756,14 +1770,18 @@
 endr
 ; e5348
 
-Functione5348: ; e5348 (39:5348)
+Intro_Scene20_AppearUnown: ; e5348 (39:5348)
+; Spawn the palette for the nth Unown
 	and a
-	jr nz, .asm_e5350
-	ld hl, Palette_e538d
-	jr .asm_e5353
-.asm_e5350
-	ld hl, Palette_e5395
-.asm_e5353
+	jr nz, .load_pal_2
+
+	ld hl, .pal1
+	jr .got_pointer
+
+.load_pal_2
+	ld hl, .pal2
+
+.got_pointer
 	ld a, [wcf65]
 	and $7
 rept 3
@@ -1774,8 +1792,10 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	push bc
 	ld de, BGPals
+
 	ld a, c
 	add e
 	ld e, a
@@ -1782,9 +1802,11 @@
 	ld a, $0
 	adc d
 	ld d, a
-	ld bc, $8
+
+	ld bc, 8
 	call CopyBytes
 	pop bc
+
 	ld de, UnknBGPals
 	ld a, c
 	add e
@@ -1792,8 +1814,10 @@
 	ld a, $0
 	adc d
 	ld d, a
-	ld bc, $8
+
+	ld bc, 8
 	call CopyBytes
+
 	pop af
 	ld [rSVBK], a
 	ld a, $1
@@ -1801,21 +1825,23 @@
 	ret
 ; e538d (39:538d)
 
-Palette_e538d: ; e538d
+.pal1: ; e538d
 	RGB 24, 12, 09
 	RGB 31, 31, 31
 	RGB 12, 00, 31
 	RGB 00, 00, 00
+
 ; e5395
 
-Palette_e5395: ; e5395
+.pal2: ; e5395
 	RGB 24, 12, 09
 	RGB 31, 31, 31
 	RGB 31, 31, 31
 	RGB 31, 31, 31
+
 ; e539d
 
-Functione539d: ; e539d (39:539d)
+Intro_FadeUnownWordPals: ; e539d (39:539d)
 rept 3
 	add a
 endr
@@ -1830,12 +1856,14 @@
 	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
+	ld hl, .FastFadePalettes
 	add hl, bc
 	ld a, [hli]
 	ld d, [hl]
@@ -1845,8 +1873,9 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
+
 	push hl
-	ld hl, Palette_e53fb
+	ld hl, .SlowFadePalettes
 	add hl, bc
 	ld a, [hli]
 	ld d, [hl]
@@ -1856,6 +1885,7 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
+
 	pop af
 	ld [rSVBK], a
 	ld a, $1
@@ -1863,7 +1893,7 @@
 	ret
 ; e53db (39:53db)
 
-Palette_e53db: ; e53db
+.FastFadePalettes: ; e53db
 hue = 31
 rept 8
 	RGB hue, hue, hue
@@ -1873,7 +1903,7 @@
 endr
 ; e53fb
 
-Palette_e53fb: ; e53fb
+.SlowFadePalettes: ; e53fb
 hue = 31
 rept 16
 	RGB hue, hue, hue
@@ -1881,23 +1911,25 @@
 endr
 ; e541b
 
-Functione541b: ; e541b (39:541b)
+Intro_LoadTilemap: ; e541b (39:541b)
 	ld a, [rSVBK]
 	push af
 	ld a, $6
 	ld [rSVBK], a
+
 	ld hl, wBackupTilemap
 	decoord 0, 0
 	ld b, SCREEN_HEIGHT
-.asm_e542a
+.row
 	ld c, SCREEN_WIDTH
-.asm_e542c
+.col
 	ld a, [hli]
 	ld [de], a
 	inc de
 	dec c
-	jr nz, .asm_e542c
-	ld a, $c
+	jr nz, .col
+	; add hl, $20 - SCREEN_WIDTH
+	ld a, $20 - SCREEN_WIDTH
 	add l
 	ld l, a
 	ld a, $0
@@ -1904,53 +1936,55 @@
 	adc h
 	ld h, a
 	dec b
-	jr nz, .asm_e542a
+	jr nz, .row
+
 	pop af
 	ld [rSVBK], a
 	ret
 
-Functione5441: ; e5441 (39:5441)
-	ld a, [wcf64]
+Intro_Scene16_AnimateSuicune: ; e5441 (39:5441)
+	ld a, [wIntroSceneFrameCounter]
 	and $3
-	jr z, Functione5451
+	jr z, Intro_ColoredSuicuneFrameSwap
 	cp $3
-	jr z, .asm_e544d
+	jr z, .PrepareForSuicuneSwap
 	ret
-.asm_e544d
+
+.PrepareForSuicuneSwap
 	xor a
 	ld [hBGMapMode], a
 	ret
 
-Functione5451: ; e5451 (39:5451)
+Intro_ColoredSuicuneFrameSwap: ; e5451 (39:5451)
 	hlcoord 0, 0
 	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-.asm_e5457
+.loop
 	ld a, [hl]
 	and a
-	jr z, .asm_e5462
+	jr z, .skip
 	cp $80
-	jr nc, .asm_e5462
+	jr nc, .skip
 	xor $8
 	ld [hl], a
-.asm_e5462
+.skip
 	inc hl
 	dec bc
 	ld a, c
 	or b
-	jr nz, .asm_e5457
+	jr nz, .loop
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
 
-Functione546d: ; e546d (39:546d)
-	ld a, [wcf64]
-	cp $24
+Intro_RustleGrass: ; e546d (39:546d)
+	ld a, [wIntroSceneFrameCounter]
+	cp 36
 	ret nc
 	and $c
 	srl a
 	ld e, a
 	ld d, $0
-	ld hl, Unknown_e5496
+	ld hl, .RustlingGrassPointers
 	add hl, de
 	ld a, [hli]
 	ld [Requested2bppSource], a
@@ -1960,32 +1994,34 @@
 	ld [Requested2bppDest], a
 	ld a, (VTiles2 tile $09) / $100
 	ld [Requested2bppDest + 1], a
-	ld a, $4
-	ld [Requested2bpp], a
+	ld a, 4
+	ld [Requested2bppSize], a
 	ret
 ; e5496 (39:5496)
 
-Unknown_e5496: ; e5496
-	dw GFX_e799d
-	dw GFX_e79dd
-	dw GFX_e7a1d
-	dw GFX_e79dd
+.RustlingGrassPointers: ; e5496
+	dw IntroGrass1GFX
+	dw IntroGrass2GFX
+	dw IntroGrass3GFX
+	dw IntroGrass2GFX
 ; e549e
 
-Functione549e: ; e549e (39:549e)
+Intro_SetCGBPalUpdate: ; e549e (39:549e)
 	ld a, $1
 	ld [hCGBPalUpdate], a
 	ret
 
-Functione54a3: ; e54a3 (39:54a3)
+Intro_ClearBGPals: ; e54a3 (39:54a3)
 	ld a, [rSVBK]
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	ld hl, BGPals
-	ld bc, $80
+	ld bc, 16 * 8
 	xor a
 	call ByteFill
+
 	pop af
 	ld [rSVBK], a
 	ld a, $1
@@ -1994,63 +2030,74 @@
 	call DelayFrame
 	ret
 
-Functione54c2: ; e54c2 (39:54c2)
+Intro_DecompressRequest2bpp_128Tiles: ; e54c2 (39:54c2)
 	ld a, [rSVBK]
 	push af
 	ld a, $6
 	ld [rSVBK], a
+
 	push de
 	ld de, wBackupTilemap
 	call Decompress
 	pop hl
+
 	ld de, wBackupTilemap
-	ld bc, $180
+	lb bc, $01, $80
 	call Request2bpp
+
 	pop af
 	ld [rSVBK], a
 	ret
 
-Functione54de: ; e54de (39:54de)
+Intro_DecompressRequest2bpp_255Tiles: ; e54de (39:54de)
 	ld a, [rSVBK]
 	push af
 	ld a, $6
 	ld [rSVBK], a
+
 	push de
 	ld de, wBackupTilemap
 	call Decompress
 	pop hl
+
 	ld de, wBackupTilemap
-	ld bc, $1ff
+	lb bc, $01, $ff
 	call Request2bpp
+
 	pop af
 	ld [rSVBK], a
 	ret
 
-Functione54fa: ; e54fa (39:54fa)
+Intro_DecompressRequest2bpp_64Tiles: ; e54fa (39:54fa)
 	ld a, [rSVBK]
 	push af
 	ld a, $6
 	ld [rSVBK], a
+
 	push de
 	ld de, wBackupTilemap
 	call Decompress
 	pop hl
+
 	ld de, wBackupTilemap
-	ld bc, $140
+	lb bc, $01, $40
 	call Request2bpp
+
 	pop af
 	ld [rSVBK], a
 	ret
 
-Functione5516: ; e5516 (39:5516)
+Intro_ResetLYOverrides: ; e5516 (39:5516)
 	ld a, [rSVBK]
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	ld hl, LYOverrides
-	ld bc, $90
+	ld bc, LYOverridesEnd - LYOverrides
 	xor a
 	call ByteFill
+
 	pop af
 	ld [rSVBK], a
 	ld a, $43
@@ -2057,20 +2104,25 @@
 	ld [hLCDStatCustom], a
 	ret
 
-Functione552f: ; e552f (39:552f)
+Intro_PerspectiveScrollBG: ; e552f (39:552f)
 	ld a, [rSVBK]
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld a, [wcf64]
+	; Scroll the grass every frame.
+	; Scroll the trees every other frame and at half speed.
+	; This creates an illusion of perspective.
+	ld a, [wIntroSceneFrameCounter]
 	and $1
-	jr z, .asm_e5548
+	jr z, .skip
+	; trees in the back
 	ld hl, LYOverrides
 	ld a, [hl]
 	inc a
 	ld bc, $5f
 	call ByteFill
-.asm_e5548
+.skip
+	; grass in the front
 	ld hl, LYOverrides + $5f
 	ld a, [hl]
 rept 2
@@ -2109,62 +2161,77 @@
 	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
@@ -2207,62 +2274,77 @@
 	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
@@ -2285,62 +2367,77 @@
 	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
@@ -2363,62 +2460,77 @@
 	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
@@ -2453,62 +2565,77 @@
 	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
@@ -2518,14 +2645,12 @@
 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"
-
+IntroGrass1GFX: ; e799d
+INCBIN "gfx/intro/grass1.2bpp"
+IntroGrass2GFX: ; e79dd
+INCBIN "gfx/intro/grass2.2bpp"
+IntroGrass3GFX: ; e7a1d
+INCBIN "gfx/intro/grass3.2bpp"
+IntroGrass4GFX: ; e7a5d
+INCBIN "gfx/intro/grass4.2bpp"
 
--- a/engine/intro_menu.asm
+++ b/engine/intro_menu.asm
@@ -7,7 +7,7 @@
 	ld [wMapMusic], a
 	call PlayMusic
 	callba MainMenu
-	jp Function6219
+	jp StartTitleScreen
 ; 5b04
 
 ; unreferenced
@@ -1003,19 +1003,19 @@
 
 .sprites ; 61fe
 	db 4
-	db $4c, $48, 0
-	db $4c, $50, 1
-	db $54, $48, 2
-	db $54, $50, 3
+	db  9 * 8 + 4,  9 * 8, 0
+	db  9 * 8 + 4, 10 * 8, 1
+	db 10 * 8 + 4,  9 * 8, 2
+	db 10 * 8 + 4, 10 * 8, 3
 ; 620b
 
 
 Function620b: ; 620b
 	callab Functione4579
-	jr c, Function6219
+	jr c, StartTitleScreen
 	callba CrystalIntro
 
-Function6219: ; 6219
+StartTitleScreen: ; 6219
 	ld a, [rSVBK]
 	push af
 	ld a, $5
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -898,9 +898,9 @@
 	ld [hl], $7e
 	xor a
 	ld [hSCY], a
-	ld [wc3bf], a
+	ld [wGlobalAnimYOffset], a
 	ld [hSCX], a
-	ld [wc3c0], a
+	ld [wGlobalAnimXOffset], a
 	ld [wJumptableIndex], a
 	ld [wcf64], a
 	ld [hBGMapMode], a
--- a/engine/options_menu.asm
+++ b/engine/options_menu.asm
@@ -47,7 +47,7 @@
 	jr c, .ExitOptions
 
 .dpad
-	call Functione455c
+	call Options_UpdateCursorPosition
 	ld c, 3
 	call DelayFrames
 	jr .joypad_loop
@@ -563,3 +563,20 @@
 	scf
 	ret
 ; e455c
+
+Options_UpdateCursorPosition: ; e455c
+	hlcoord 1, 1
+	ld de, SCREEN_WIDTH
+	ld c, $10
+.loop
+	ld [hl], " "
+	add hl, de
+	dec c
+	jr nz, .loop
+	hlcoord 1, 2
+	ld bc, 2 * SCREEN_WIDTH
+	ld a, [wJumptableIndex]
+	call AddNTimes
+	ld [hl], "▶"
+	ret
+; e4579
--- a/engine/sprites.asm
+++ b/engine/sprites.asm
@@ -259,13 +259,13 @@
 	ld c, a ; number of objects
 .loop
 	; first byte: y (px)
-	; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wc3bf] + Function8d0be([hl])
+	; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + Function8d0be([hl])
 	ld a, [wCurrAnimYCoord]
 	ld b, a
 	ld a, [wCurrAnimYOffset]
 	add b
 	ld b, a
-	ld a, [wc3bf]
+	ld a, [wGlobalAnimYOffset]
 	add b
 	ld b, a
 	call Function8d0be
@@ -274,13 +274,13 @@
 	inc hl
 	inc de
 	; second byte: x (px)
-	; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wc3c0] + Function8d0ce([hl])
+	; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + Function8d0ce([hl])
 	ld a, [wCurrAnimXCoord]
 	ld b, a
 	ld a, [wCurrAnimXOffset]
 	add b
 	ld b, a
-	ld a, [wc3c0]
+	ld a, [wGlobalAnimXOffset]
 	add b
 	ld b, a
 	call Function8d0ce
@@ -411,15 +411,15 @@
 ; 8d120
 
 Function8d120:: ; 8d120
-	ld hl, $1
+	ld hl, SPRITEANIMSTRUCT_01
 	add hl, bc
 	ld [hl], a
-	ld hl, $8
+	ld hl, SPRITEANIMSTRUCT_DURATION
 	add hl, bc
-	ld [hl], $0
-	ld hl, $a
+	ld [hl], 0
+	ld hl, SPRITEANIMSTRUCT_FRAME
 	add hl, bc
-	ld [hl], $ff
+	ld [hl], -1
 	ret
 ; 8d132
 
@@ -593,7 +593,7 @@
 	db $35, SPRITE_ANIM_SEQ_1D, $00 ; 26
 	db $37, SPRITE_ANIM_SEQ_1E, $00 ; 27
 	db $38, SPRITE_ANIM_SEQ_1E, $00 ; 28
-	db $39, SPRITE_ANIM_SEQ_20, $00 ; 29
+	db $39, SPRITE_ANIM_SEQ_20, $00 ; 29 intro unown
 	db $3f, SPRITE_ANIM_SEQ_21, $00 ; 2a
 	db $3e, SPRITE_ANIM_SEQ_22, $00 ; 2b
 	db $40, SPRITE_ANIM_SEQ_00, $00 ; 2c
--- a/event/magnet_train.asm
+++ b/event/magnet_train.asm
@@ -359,7 +359,7 @@
 	inc a
 	add e
 	ld [wcf65], a
-	ld hl, wc3c0
+	ld hl, wGlobalAnimXOffset
 	ld a, [wd191]
 	add [hl]
 	ld [hl], a
@@ -400,7 +400,7 @@
 	add d
 endr
 	ld [wcf65], a
-	ld hl, wc3c0
+	ld hl, wGlobalAnimXOffset
 	ld a, [wd191]
 	ld d, a
 	ld a, [hl]
binary files /dev/null b/gfx/intro/grass1.2bpp differ
binary files /dev/null b/gfx/intro/grass2.2bpp differ
binary files /dev/null b/gfx/intro/grass3.2bpp differ
binary files /dev/null b/gfx/intro/grass4.2bpp differ
binary files a/gfx/unknown/0e799d.2bpp /dev/null differ
binary files a/gfx/unknown/0e79dd.2bpp /dev/null differ
binary files a/gfx/unknown/0e7a1d.2bpp /dev/null differ
binary files a/gfx/unknown/0e7a5d.2bpp /dev/null differ
--- a/wram.asm
+++ b/wram.asm
@@ -476,8 +476,8 @@
 wCurrAnimYCoord:: ds 1
 wCurrAnimXOffset:: ds 1
 wCurrAnimYOffset:: ds 1
-wc3bf:: ds 1
-wc3c0:: ds 1
+wGlobalAnimYOffset:: ds 1
+wGlobalAnimXOffset:: ds 1
 wSpriteAnimsEnd::
 
 wc3c1:: ds 11
@@ -1365,6 +1365,7 @@
 wcf66:: ds 1
 
 Requested2bpp:: ; cf67
+Requested2bppSize::
 	ds 1
 Requested2bppSource:: ; cf68
 	ds 2
@@ -1372,6 +1373,7 @@
 	ds 2
 
 Requested1bpp:: ; cf6c
+Requested1bppSize::
 	ds 1
 Requested1bppSource:: ; cf6d
 	ds 2
@@ -2170,6 +2172,8 @@
 	ds 1
 
 	ds 1
+
+SECTION "Enemy Party", WRAMX, BANK [1]
 wPokedexShowPointerAddr::
 wd26b:: ds 1
 wd26c:: ds 1
@@ -2180,7 +2184,8 @@
 wd276:: ds 10
 	ds wd26b - @
 
-SECTION "Enemy Party", WRAMX, BANK [1]
+
+; SECTION "Enemy Party", WRAMX, BANK [1]
 OTPlayerName:: ds NAME_LENGTH
 OTPlayerID:: ds 2
 	ds 8