shithub: pokecrystal

Download patch

ref: 9ae1cd6a1c5bdf73e426967264a61f1e55c61f9e
parent: 0ce5c4fe9327180aed48275d61c56e21eee473f7
author: yenatch <[email protected]>
date: Sun Sep 15 14:59:53 EDT 2013

split title screen functions into engine/title.asm

--- /dev/null
+++ b/engine/title.asm
@@ -1,0 +1,475 @@
+_TitleScreen: ; 10ed67
+
+	call WhiteBGMap
+	call ClearSprites
+	call ClearTileMap
+	
+; Turn BG Map update off
+	xor a
+	ld [hBGMapMode], a
+	
+; Reset timing variables
+	ld hl, $cf63
+	ld [hli], a ; cf63 ; Scene?
+	ld [hli], a ; cf64
+	ld [hli], a ; cf65 ; Timer lo
+	ld [hl], a  ; cf66 ; Timer hi
+	
+; Turn LCD off
+	call DisableLCD
+	
+	
+; VRAM bank 1
+	ld a, 1
+	ld [rVBK], a
+	
+	
+; Decompress running Suicune gfx
+	ld hl, TitleSuicuneGFX
+	ld de, VTiles1
+	call Decompress
+	
+	
+; Clear screen palettes
+	ld hl, VBGMap0
+	ld bc, $0280
+	xor a
+	call ByteFill
+	
+
+; Fill tile palettes:
+
+; BG Map 1:
+
+; line 0 (copyright)
+	ld hl, VBGMap1
+	ld bc, $0020 ; one row
+	ld a, 7 ; palette
+	call ByteFill
+
+
+; BG Map 0:
+
+; Apply logo gradient:
+
+; lines 3-4
+	ld hl, $9860 ; (0,3)
+	ld bc, $0040 ; 2 rows
+	ld a, 2
+	call ByteFill
+; line 5
+	ld hl, $98a0 ; (0,5)
+	ld bc, $0020 ; 1 row
+	ld a, 3
+	call ByteFill
+; line 6
+	ld hl, $98c0 ; (0,6)
+	ld bc, $0020 ; 1 row
+	ld a, 4
+	call ByteFill
+; line 7
+	ld hl, $98e0 ; (0,7)
+	ld bc, $0020 ; 1 row
+	ld a, 5
+	call ByteFill
+; lines 8-9
+	ld hl, $9900 ; (0,8)
+	ld bc, $0040 ; 2 rows
+	ld a, 6
+	call ByteFill
+	
+
+; 'CRYSTAL VERSION'
+	ld hl, $9925 ; (5,9)
+	ld bc, $000b ; length of version text
+	ld a, 1
+	call ByteFill
+	
+; Suicune gfx
+	ld hl, $9980 ; (0,12)
+	ld bc, $00c0 ; the rest of the screen
+	ld a, 8
+	call ByteFill
+	
+	
+; Back to VRAM bank 0
+	ld a, $0
+	ld [rVBK], a
+	
+	
+; Decompress logo
+	ld hl, TitleLogoGFX
+	ld de, VTiles1
+	call Decompress
+	
+; Decompress background crystal
+	ld hl, TitleCrystalGFX
+	ld de, VTiles0
+	call Decompress
+	
+	
+; Clear screen tiles
+	ld hl, VBGMap0
+	ld bc, $0800
+	ld a, $7f
+	call ByteFill
+	
+; Draw Pokemon logo
+	ld hl, $c4dc ; TileMap(0,3)
+	ld bc, $0714 ; 20x7
+	ld d, $80
+	ld e, $14
+	call DrawGraphic
+	
+; Draw copyright text
+	ld hl, $9c03 ; BGMap1(3,0)
+	ld bc, $010d ; 13x1
+	ld d, $c
+	ld e, $10
+	call DrawGraphic
+	
+; Initialize running Suicune?
+	ld d, $0
+	call Function10eed2
+	
+; Initialize background crystal
+	call Function10ef06
+	
+; Save WRAM bank
+	ld a, [rSVBK]
+	push af
+; WRAM bank 5
+	ld a, 5
+	ld [rSVBK], a
+	
+; Update palette colors
+	ld hl, TitleScreenPalettes
+	ld de, $d000
+	ld bc, $0080
+	call CopyBytes
+	
+	ld hl, TitleScreenPalettes
+	ld de, $d080
+	ld bc, $0080
+	call CopyBytes
+	
+; Restore WRAM bank
+	pop af
+	ld [rSVBK], a
+	
+	
+; LY/SCX trickery starts here
+	
+	ld a, [rSVBK]
+	push af
+	ld a, 5 ; BANK(LYOverrides)
+	ld [rSVBK], a
+	
+; Make alternating lines come in from opposite sides
+
+; ( This part is actually totally pointless, you can't
+;   see anything until these values are overwritten!  )
+
+	ld b, 80 / 2 ; alternate for 80 lines
+	ld hl, LYOverrides
+.loop
+; $00 is the middle position
+	ld [hl], +112 ; coming from the left
+	inc hl
+	ld [hl], -112 ; coming from the right
+	inc hl
+	dec b
+	jr nz, .loop
+	
+; Make sure the rest of the buffer is empty
+	ld hl, LYOverrides + 80
+	xor a
+	ld bc, LYOverridesEnd - (LYOverrides + 80)
+	call ByteFill
+	
+; Let LCD Stat know we're messing around with SCX
+	ld a, rSCX - rJOYP
+	ld [hLCDStatCustom], a
+	
+	pop af
+	ld [rSVBK], a
+	
+	
+; Reset audio
+	call ChannelsOff
+	call EnableLCD
+	
+; Set sprite size to 8x16
+	ld a, [rLCDC]
+	set 2, a
+	ld [rLCDC], a
+	
+	ld a, +112
+	ld [hSCX], a
+	ld a, 8
+	ld [hSCY], a
+	ld a, 7
+	ld [hWX], a
+	ld a, -112
+	ld [hWY], a
+	
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	
+; Update BG Map 0 (bank 0)
+	ld [hBGMapMode], a
+	
+	xor a
+	ld [DefaultFlypoint], a
+	
+; Play starting sound effect
+	call SFXChannelsOff
+	ld de, SFX_TITLE_SCREEN_ENTRANCE
+	call StartSFX
+	
+	ret
+; 10eea7
+
+Function10eea7: ; 10eea7
+	ld hl, DefaultFlypoint
+	ld a, [hl]
+	ld c, a
+	inc [hl]
+	and $7
+	ret nz
+	ld a, c
+	and $18
+	sla a
+	swap a
+	ld e, a
+	ld d, $0
+	ld hl, $6ece
+	add hl, de
+	ld d, [hl]
+	xor a
+	ld [hBGMapMode], a
+	call Function10eed2
+	ld a, $1
+	ld [hBGMapMode], a
+	ld a, $3
+	ld [hBGMapThird], a
+	ret
+; 10eece
+
+INCBIN "baserom.gbc", $10eece, $10eed2 - $10eece
+
+
+Function10eed2: ; 10eed2
+	ld hl, $c596
+	ld b, $6
+.asm_10eed7
+	ld c, $8
+.asm_10eed9
+	ld a, d
+	ld [hli], a
+	inc d
+	dec c
+	jr nz, .asm_10eed9
+	ld a, $c
+	add l
+	ld l, a
+	ld a, $0
+	adc h
+	ld h, a
+	ld a, $8
+	add d
+	ld d, a
+	dec b
+	jr nz, .asm_10eed7
+	ret
+; 10eeef
+
+Function10eeef: ; 10eeef
+.asm_10eeef
+	push de
+	push bc
+	push hl
+.asm_10eef2
+	ld a, d
+	ld [hli], a
+	inc d
+	dec c
+	jr nz, .asm_10eef2
+	pop hl
+	ld bc, $0014
+	add hl, bc
+	pop bc
+	pop de
+	ld a, e
+	add d
+	ld d, a
+	dec b
+	jr nz, .asm_10eeef
+	ret
+; 10ef06
+
+Function10ef06: ; 10ef06
+	ld hl, Sprites
+	ld d, $de
+	ld e, $0
+	ld c, $5
+.asm_10ef0f
+	push bc
+	call Function10ef1c
+	pop bc
+	ld a, $10
+	add d
+	ld d, a
+	dec c
+	jr nz, .asm_10ef0f
+	ret
+; 10ef1c
+
+Function10ef1c: ; 10ef1c
+	ld c, $6
+	ld b, $40
+.asm_10ef20
+	ld a, d
+	ld [hli], a
+	ld a, b
+	ld [hli], a
+	add $8
+	ld b, a
+	ld a, e
+	ld [hli], a
+	inc e
+	inc e
+	ld a, $80
+	ld [hli], a
+	dec c
+	jr nz, .asm_10ef20
+	ret
+; 10ef32
+
+
+AnimateTitleCrystal: ; 10ef32
+; Move the title screen crystal downward until it's fully visible
+
+; Stop at y=6
+; y is really from the bottom of the sprite, which is two tiles high
+	ld hl, Sprites
+	ld a, [hl]
+	cp 6 + 16
+	ret z
+	
+; Move all 30 parts of the crystal down by 2
+	ld c, 30
+.loop
+	ld a, [hl]
+	add 2
+	ld [hli], a
+	inc hl
+	inc hl
+	inc hl
+	dec c
+	jr nz, .loop
+	
+	ret
+; 10ef46
+
+TitleSuicuneGFX: ; 10ef46
+INCBIN "gfx/title/suicune.lz"
+; 10f31b
+
+INCBIN "baserom.gbc", $10f31b, $10f326 - $10f31b
+
+TitleLogoGFX: ; 10f326
+INCBIN "gfx/title/logo.lz"
+; 10fced
+
+INCBIN "baserom.gbc", $10fced, $10fcee - $10fced
+
+TitleCrystalGFX: ; 10fcee
+INCBIN "gfx/title/crystal.lz"
+; 10fed7
+
+INCBIN "baserom.gbc", $10fed7, $10fede - $10fed7
+
+TitleScreenPalettes:
+; BG
+	RGB 00, 00, 00
+	RGB 19, 00, 00
+	RGB 15, 08, 31
+	RGB 15, 08, 31
+	
+	RGB 00, 00, 00
+	RGB 31, 31, 31
+	RGB 15, 16, 31
+	RGB 31, 01, 13
+	
+	RGB 00, 00, 00
+	RGB 07, 07, 07
+	RGB 31, 31, 31
+	RGB 02, 03, 30
+	
+	RGB 00, 00, 00
+	RGB 13, 13, 13
+	RGB 31, 31, 18
+	RGB 02, 03, 30
+	
+	RGB 00, 00, 00
+	RGB 19, 19, 19
+	RGB 29, 28, 12
+	RGB 02, 03, 30
+	
+	RGB 00, 00, 00
+	RGB 25, 25, 25
+	RGB 28, 25, 06
+	RGB 02, 03, 30
+	
+	RGB 00, 00, 00
+	RGB 31, 31, 31
+	RGB 26, 21, 00
+	RGB 02, 03, 30
+	
+	RGB 00, 00, 00
+	RGB 11, 11, 19
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	
+; OBJ
+	RGB 00, 00, 00
+	RGB 10, 00, 15
+	RGB 17, 05, 22
+	RGB 19, 09, 31
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
--- a/main.asm
+++ b/main.asm
@@ -79205,480 +79205,8 @@
 
 INCBIN "baserom.gbc", $10c000, $10ed67 - $10c000
 
-_TitleScreen: ; 10ed67
+INCLUDE "engine/title.asm"
 
-	call WhiteBGMap
-	call ClearSprites
-	call ClearTileMap
-	
-; Turn BG Map update off
-	xor a
-	ld [hBGMapMode], a
-	
-; Reset timing variables
-	ld hl, $cf63
-	ld [hli], a ; cf63 ; Scene?
-	ld [hli], a ; cf64
-	ld [hli], a ; cf65 ; Timer lo
-	ld [hl], a  ; cf66 ; Timer hi
-	
-; Turn LCD off
-	call DisableLCD
-	
-	
-; VRAM bank 1
-	ld a, 1
-	ld [rVBK], a
-	
-	
-; Decompress running Suicune gfx
-	ld hl, TitleSuicuneGFX
-	ld de, VTiles1
-	call Decompress
-	
-	
-; Clear screen palettes
-	ld hl, VBGMap0
-	ld bc, $0280
-	xor a
-	call ByteFill
-	
-
-; Fill tile palettes:
-
-; BG Map 1:
-
-; line 0 (copyright)
-	ld hl, VBGMap1
-	ld bc, $0020 ; one row
-	ld a, 7 ; palette
-	call ByteFill
-
-
-; BG Map 0:
-
-; Apply logo gradient:
-
-; lines 3-4
-	ld hl, $9860 ; (0,3)
-	ld bc, $0040 ; 2 rows
-	ld a, 2
-	call ByteFill
-; line 5
-	ld hl, $98a0 ; (0,5)
-	ld bc, $0020 ; 1 row
-	ld a, 3
-	call ByteFill
-; line 6
-	ld hl, $98c0 ; (0,6)
-	ld bc, $0020 ; 1 row
-	ld a, 4
-	call ByteFill
-; line 7
-	ld hl, $98e0 ; (0,7)
-	ld bc, $0020 ; 1 row
-	ld a, 5
-	call ByteFill
-; lines 8-9
-	ld hl, $9900 ; (0,8)
-	ld bc, $0040 ; 2 rows
-	ld a, 6
-	call ByteFill
-	
-
-; 'CRYSTAL VERSION'
-	ld hl, $9925 ; (5,9)
-	ld bc, $000b ; length of version text
-	ld a, 1
-	call ByteFill
-	
-; Suicune gfx
-	ld hl, $9980 ; (0,12)
-	ld bc, $00c0 ; the rest of the screen
-	ld a, 8
-	call ByteFill
-	
-	
-; Back to VRAM bank 0
-	ld a, $0
-	ld [rVBK], a
-	
-	
-; Decompress logo
-	ld hl, TitleLogoGFX
-	ld de, VTiles1
-	call Decompress
-	
-; Decompress background crystal
-	ld hl, TitleCrystalGFX
-	ld de, VTiles0
-	call Decompress
-	
-	
-; Clear screen tiles
-	ld hl, VBGMap0
-	ld bc, $0800
-	ld a, $7f
-	call ByteFill
-	
-; Draw Pokemon logo
-	ld hl, $c4dc ; TileMap(0,3)
-	ld bc, $0714 ; 20x7
-	ld d, $80
-	ld e, $14
-	call DrawGraphic
-	
-; Draw copyright text
-	ld hl, $9c03 ; BGMap1(3,0)
-	ld bc, $010d ; 13x1
-	ld d, $c
-	ld e, $10
-	call DrawGraphic
-	
-; Initialize running Suicune?
-	ld d, $0
-	call Function10eed2
-	
-; Initialize background crystal
-	call Function10ef06
-	
-; Save WRAM bank
-	ld a, [rSVBK]
-	push af
-; WRAM bank 5
-	ld a, 5
-	ld [rSVBK], a
-	
-; Update palette colors
-	ld hl, TitleScreenPalettes
-	ld de, $d000
-	ld bc, $0080
-	call CopyBytes
-	
-	ld hl, TitleScreenPalettes
-	ld de, $d080
-	ld bc, $0080
-	call CopyBytes
-	
-; Restore WRAM bank
-	pop af
-	ld [rSVBK], a
-	
-	
-; LY/SCX trickery starts here
-	
-	ld a, [rSVBK]
-	push af
-	ld a, 5 ; BANK(LYOverrides)
-	ld [rSVBK], a
-	
-; Make alternating lines come in from opposite sides
-
-; ( This part is actually totally pointless, you can't
-;   see anything until these values are overwritten!  )
-
-	ld b, 80 / 2 ; alternate for 80 lines
-	ld hl, LYOverrides
-.loop
-; $00 is the middle position
-	ld [hl], +112 ; coming from the left
-	inc hl
-	ld [hl], -112 ; coming from the right
-	inc hl
-	dec b
-	jr nz, .loop
-	
-; Make sure the rest of the buffer is empty
-	ld hl, LYOverrides + 80
-	xor a
-	ld bc, LYOverridesEnd - (LYOverrides + 80)
-	call ByteFill
-	
-; Let LCD Stat know we're messing around with SCX
-	ld a, rSCX - rJOYP
-	ld [hLCDStatCustom], a
-	
-	pop af
-	ld [rSVBK], a
-	
-	
-; Reset audio
-	call ChannelsOff
-	call EnableLCD
-	
-; Set sprite size to 8x16
-	ld a, [rLCDC]
-	set 2, a
-	ld [rLCDC], a
-	
-	ld a, +112
-	ld [hSCX], a
-	ld a, 8
-	ld [hSCY], a
-	ld a, 7
-	ld [hWX], a
-	ld a, -112
-	ld [hWY], a
-	
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	
-; Update BG Map 0 (bank 0)
-	ld [hBGMapMode], a
-	
-	xor a
-	ld [DefaultFlypoint], a
-	
-; Play starting sound effect
-	call SFXChannelsOff
-	ld de, SFX_TITLE_SCREEN_ENTRANCE
-	call StartSFX
-	
-	ret
-; 10eea7
-
-Function10eea7: ; 10eea7
-	ld hl, DefaultFlypoint
-	ld a, [hl]
-	ld c, a
-	inc [hl]
-	and $7
-	ret nz
-	ld a, c
-	and $18
-	sla a
-	swap a
-	ld e, a
-	ld d, $0
-	ld hl, $6ece
-	add hl, de
-	ld d, [hl]
-	xor a
-	ld [hBGMapMode], a
-	call Function10eed2
-	ld a, $1
-	ld [hBGMapMode], a
-	ld a, $3
-	ld [hBGMapThird], a
-	ret
-; 10eece
-
-INCBIN "baserom.gbc", $10eece, $10eed2 - $10eece
-
-
-Function10eed2: ; 10eed2
-	ld hl, $c596
-	ld b, $6
-.asm_10eed7
-	ld c, $8
-.asm_10eed9
-	ld a, d
-	ld [hli], a
-	inc d
-	dec c
-	jr nz, .asm_10eed9
-	ld a, $c
-	add l
-	ld l, a
-	ld a, $0
-	adc h
-	ld h, a
-	ld a, $8
-	add d
-	ld d, a
-	dec b
-	jr nz, .asm_10eed7
-	ret
-; 10eeef
-
-Function10eeef: ; 10eeef
-.asm_10eeef
-	push de
-	push bc
-	push hl
-.asm_10eef2
-	ld a, d
-	ld [hli], a
-	inc d
-	dec c
-	jr nz, .asm_10eef2
-	pop hl
-	ld bc, $0014
-	add hl, bc
-	pop bc
-	pop de
-	ld a, e
-	add d
-	ld d, a
-	dec b
-	jr nz, .asm_10eeef
-	ret
-; 10ef06
-
-Function10ef06: ; 10ef06
-	ld hl, Sprites
-	ld d, $de
-	ld e, $0
-	ld c, $5
-.asm_10ef0f
-	push bc
-	call Function10ef1c
-	pop bc
-	ld a, $10
-	add d
-	ld d, a
-	dec c
-	jr nz, .asm_10ef0f
-	ret
-; 10ef1c
-
-Function10ef1c: ; 10ef1c
-	ld c, $6
-	ld b, $40
-.asm_10ef20
-	ld a, d
-	ld [hli], a
-	ld a, b
-	ld [hli], a
-	add $8
-	ld b, a
-	ld a, e
-	ld [hli], a
-	inc e
-	inc e
-	ld a, $80
-	ld [hli], a
-	dec c
-	jr nz, .asm_10ef20
-	ret
-; 10ef32
-
-
-AnimateTitleCrystal: ; 10ef32
-; Move the title screen crystal downward until it's fully visible
-
-; Stop at y=6
-; y is really from the bottom of the sprite, which is two tiles high
-	ld hl, Sprites
-	ld a, [hl]
-	cp 6 + 16
-	ret z
-	
-; Move all 30 parts of the crystal down by 2
-	ld c, 30
-.loop
-	ld a, [hl]
-	add 2
-	ld [hli], a
-	inc hl
-	inc hl
-	inc hl
-	dec c
-	jr nz, .loop
-	
-	ret
-; 10ef46
-
-TitleSuicuneGFX: ; 10ef46
-INCBIN "gfx/title/suicune.lz"
-; 10f31b
-
-INCBIN "baserom.gbc", $10f31b, $10f326 - $10f31b
-
-TitleLogoGFX: ; 10f326
-INCBIN "gfx/title/logo.lz"
-; 10fced
-
-INCBIN "baserom.gbc", $10fced, $10fcee - $10fced
-
-TitleCrystalGFX: ; 10fcee
-INCBIN "gfx/title/crystal.lz"
-; 10fed7
-
-INCBIN "baserom.gbc", $10fed7, $10fede - $10fed7
-
-TitleScreenPalettes:
-; BG
-	RGB 00, 00, 00
-	RGB 19, 00, 00
-	RGB 15, 08, 31
-	RGB 15, 08, 31
-	
-	RGB 00, 00, 00
-	RGB 31, 31, 31
-	RGB 15, 16, 31
-	RGB 31, 01, 13
-	
-	RGB 00, 00, 00
-	RGB 07, 07, 07
-	RGB 31, 31, 31
-	RGB 02, 03, 30
-	
-	RGB 00, 00, 00
-	RGB 13, 13, 13
-	RGB 31, 31, 18
-	RGB 02, 03, 30
-	
-	RGB 00, 00, 00
-	RGB 19, 19, 19
-	RGB 29, 28, 12
-	RGB 02, 03, 30
-	
-	RGB 00, 00, 00
-	RGB 25, 25, 25
-	RGB 28, 25, 06
-	RGB 02, 03, 30
-	
-	RGB 00, 00, 00
-	RGB 31, 31, 31
-	RGB 26, 21, 00
-	RGB 02, 03, 30
-	
-	RGB 00, 00, 00
-	RGB 11, 11, 19
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	
-; OBJ
-	RGB 00, 00, 00
-	RGB 10, 00, 15
-	RGB 17, 05, 22
-	RGB 19, 09, 31
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
 
 SECTION "bank44",ROMX,BANK[$44]