mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
0eb49d5941
Somehow, a title screen (bank 0x43) function had its label put in bank 1.
This caused changes to either bank to break the compiled rom.
fixes 61a3d145
478 lines
6.4 KiB
NASM
478 lines
6.4 KiB
NASM
_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 DrawTitleGraphic
|
|
|
|
; Draw copyright text
|
|
ld hl, $9c03 ; BGMap1(3,0)
|
|
ld bc, $010d ; 13x1
|
|
ld d, $c
|
|
ld e, $10
|
|
call DrawTitleGraphic
|
|
|
|
; 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 PlaySFX
|
|
|
|
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, Unknown_10eece
|
|
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
|
|
|
|
Unknown_10eece: ; 10eece
|
|
db $80, $88, $00, $08
|
|
; 10eed2
|
|
|
|
|
|
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
|
|
|
|
DrawTitleGraphic: ; 10eeef
|
|
; input:
|
|
; hl: draw location
|
|
; b: height
|
|
; c: width
|
|
; d: tile to start drawing from
|
|
; e: number of tiles to advance for each row
|
|
.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.w128.2bpp.lz"
|
|
; 10f326
|
|
|
|
TitleLogoGFX: ; 10f326
|
|
INCBIN "gfx/title/logo.w160.t4.2bpp.lz"
|
|
; 10fcee
|
|
|
|
TitleCrystalGFX: ; 10fcee
|
|
INCBIN "gfx/title/crystal.w48.interleave.2bpp.lz"
|
|
; 10fede
|
|
|
|
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
|
|
|