mirror of https://github.com/pret/pokecrystal.git
commit
d2fabc3b15
432
main.asm
432
main.asm
|
@ -140,6 +140,9 @@ IncGradGBPalTable_01: ; 52f
|
|||
INCBIN "baserom.gbc",$547,$568 - $547
|
||||
|
||||
DisableLCD: ; 568
|
||||
; Turn the LCD off
|
||||
; Most of this is just going through the motions
|
||||
|
||||
; don't need to do anything if lcd is already off
|
||||
ld a, [$ff40] ; LCDC
|
||||
bit 7, a ; lcd enable
|
||||
|
@ -782,7 +785,23 @@ FarCopyBytesDouble: ; e9b
|
|||
; 0xeba
|
||||
|
||||
|
||||
INCBIN "baserom.gbc",$eba,$ff1 - $eba
|
||||
INCBIN "baserom.gbc",$eba,$fc8 - $eba
|
||||
|
||||
ClearTileMap: ; fc8
|
||||
; Fill the tile map with blank tiles
|
||||
ld hl, TileMap
|
||||
ld a, $7f ; blank tile
|
||||
ld bc, 360 ; length of TileMap
|
||||
call ByteFill
|
||||
|
||||
; We aren't done if the LCD is on
|
||||
ld a, [$ff40] ; LCDC
|
||||
bit 7, a
|
||||
ret z
|
||||
jp WaitBGMap
|
||||
; fdb
|
||||
|
||||
INCBIN "baserom.gbc",$fdb,$ff1 - $fdb
|
||||
|
||||
TextBoxBorder: ; ff1
|
||||
; draw a text box
|
||||
|
@ -1475,9 +1494,34 @@ CloseSRAM: ; 2fe1
|
|||
ld [$0000], a
|
||||
pop af
|
||||
ret
|
||||
; 2fef
|
||||
; 2fec
|
||||
|
||||
INCBIN "baserom.gbc",$2fec,$3026-$2fec
|
||||
INCBIN "baserom.gbc",$2fec,$300b-$2fec
|
||||
|
||||
ClearSprites: ; 300b
|
||||
ld hl, Sprites
|
||||
ld b, TileMap - Sprites
|
||||
xor a
|
||||
.loop
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
; 3016
|
||||
|
||||
HideSprites: ; 3016
|
||||
; Set all OBJ y-positions to 160 to hide them offscreen
|
||||
ld hl, Sprites
|
||||
ld de, $0004 ; length of an OBJ struct
|
||||
ld b, $28 ; number of OBJ structs
|
||||
ld a, 160 ; y-position
|
||||
.loop
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
; 3026
|
||||
|
||||
CopyBytes: ; 0x3026
|
||||
; copy bc bytes from hl to de
|
||||
|
@ -1779,10 +1823,62 @@ StringCmp: ; 31db
|
|||
ret
|
||||
; 0x31e4
|
||||
|
||||
INCBIN "baserom.gbc",$31e4,$3340 - $31e4
|
||||
INCBIN "baserom.gbc",$31e4,$31f3 - $31e4
|
||||
|
||||
WhiteBGMap: ; 31f3
|
||||
call ClearPalettes
|
||||
WaitBGMap: ; 31f6
|
||||
; Tell VBlank to update BG Map
|
||||
ld a, 1 ; BG Map 0 tiles
|
||||
ld [$ffd4], a
|
||||
; Wait for it to do its magic
|
||||
ld c, 4
|
||||
call DelayFrames
|
||||
ret
|
||||
; 3200
|
||||
|
||||
INCBIN "baserom.gbc",$3200,$3317 - $3200
|
||||
|
||||
ClearPalettes: ; 3317
|
||||
; Make all palettes white
|
||||
|
||||
; For CGB we make all the palette colors white
|
||||
ld a, [$ffe6]
|
||||
and a
|
||||
jr nz, .cgb
|
||||
|
||||
; In DMG mode, we can just change palettes to 0 (white)
|
||||
xor a
|
||||
ld [$ff47], a ; BGP
|
||||
ld [$ff48], a ; OBP0
|
||||
ld [$ff49], a ; OBP1
|
||||
ret
|
||||
|
||||
.cgb
|
||||
; Save WRAM bank
|
||||
ld a, [$ff70]
|
||||
push af
|
||||
; WRAM bank 5
|
||||
ld a, 5
|
||||
ld [$ff70], a
|
||||
; Fill BGPals and OBPals with $ffff (white)
|
||||
ld hl, BGPals
|
||||
ld bc, $0080
|
||||
ld a, $ff
|
||||
call ByteFill
|
||||
; Restore WRAM bank
|
||||
pop af
|
||||
ld [$ff70], a
|
||||
; Request palette update
|
||||
ld a, 1
|
||||
ld [$ffe5], a
|
||||
ret
|
||||
; 333e
|
||||
|
||||
ClearSGB: ; 333e
|
||||
ld b, $ff
|
||||
GetSGBLayout: ; 3340
|
||||
; load sgb packets unless gb
|
||||
; load sgb packets unless dmg
|
||||
|
||||
; check cgb
|
||||
ld a, [$ffe6]
|
||||
|
@ -1875,7 +1971,7 @@ GetName: ; 33c3
|
|||
call GetNthString
|
||||
ld de, $d073
|
||||
ld bc, $000d
|
||||
call $3026
|
||||
call CopyBytes
|
||||
.asm_3403
|
||||
ld a, e
|
||||
ld [$d102], a
|
||||
|
@ -2279,7 +2375,31 @@ CheckSFX: ; 3dde
|
|||
ret
|
||||
; 3dfe
|
||||
|
||||
INCBIN "baserom.gbc",$3dfe,$4000 - $3dfe
|
||||
INCBIN "baserom.gbc",$3dfe,$3e10 - $3dfe
|
||||
|
||||
ChannelsOff: ; 3e10
|
||||
; Quickly turn off music channels
|
||||
xor a
|
||||
ld [$c104], a
|
||||
ld [$c136], a
|
||||
ld [$c168], a
|
||||
ld [$c19a], a
|
||||
ld [$c29c], a
|
||||
ret
|
||||
; 3e21
|
||||
|
||||
SFXChannelsOff: ; 3e21
|
||||
; Quickly turn off sound effect channels
|
||||
xor a
|
||||
ld [$c1cc], a
|
||||
ld [$c1fe], a
|
||||
ld [$c230], a
|
||||
ld [$c262], a
|
||||
ld [$c29c], a
|
||||
ret
|
||||
; 3e32
|
||||
|
||||
INCBIN "baserom.gbc",$3e32,$4000 - $3e32
|
||||
|
||||
SECTION "bank1",DATA,BANK[$1]
|
||||
|
||||
|
@ -2374,7 +2494,35 @@ CheckNickErrors: ; 669f
|
|||
db $ff ; end
|
||||
; 66de
|
||||
|
||||
INCBIN "baserom.gbc",$66de,$8000 - $66de
|
||||
INCBIN "baserom.gbc",$66de,$6eef - $66de
|
||||
|
||||
DrawGraphic: ; 6eef
|
||||
; input:
|
||||
; hl: draw location
|
||||
; b: height
|
||||
; c: width
|
||||
; d: tile to start drawing from
|
||||
; e: number of tiles to advance for each row
|
||||
call $7009
|
||||
pop bc
|
||||
pop hl
|
||||
ret c
|
||||
bit 5, [hl]
|
||||
jr nz, .asm_6f05
|
||||
push hl
|
||||
call $70a4
|
||||
pop hl
|
||||
ret c
|
||||
push hl
|
||||
call $70ed
|
||||
pop hl
|
||||
ret c
|
||||
.asm_6f05
|
||||
and a
|
||||
ret
|
||||
; 6f07
|
||||
|
||||
INCBIN "baserom.gbc",$6f07,$8000 - $6f07
|
||||
|
||||
SECTION "bank2",DATA,BANK[$2]
|
||||
|
||||
|
@ -88482,7 +88630,7 @@ SFX: ; e927c
|
|||
dbw $3c, $4a22 ; tap
|
||||
dbw $3c, $4a25 ; tap
|
||||
dbw $3c, $4a28 ; burn ; that is not a burn
|
||||
dbw $3c, $4a2b ;
|
||||
dbw $3c, $4a2b ; title screen sound
|
||||
dbw $3c, $4a2e ; similar to $60
|
||||
dbw $3c, $4a31 ; get coin from slots
|
||||
dbw $3c, $4a34 ; pay day
|
||||
|
@ -89238,7 +89386,245 @@ INCBIN "baserom.gbc", $10983f, $10c000 - $10983f
|
|||
|
||||
SECTION "bank43",DATA,BANK[$43]
|
||||
|
||||
INCBIN "baserom.gbc", $10c000, $10ef46 - $10c000
|
||||
INCBIN "baserom.gbc", $10c000, $10ed67 - $10c000
|
||||
|
||||
TitleScreen: ; 10ed67
|
||||
|
||||
call WhiteBGMap
|
||||
call ClearSprites
|
||||
call ClearTileMap
|
||||
|
||||
; Turn BG Map update off
|
||||
xor a
|
||||
ld [$ffd4], 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 [$ff4f], a
|
||||
|
||||
|
||||
; Decompress running Suicune gfx
|
||||
ld hl, TitleSuicuneGFX
|
||||
ld de, $8800
|
||||
call $0b50
|
||||
|
||||
|
||||
; Clear screen palettes
|
||||
ld hl, $9800
|
||||
ld bc, $0280
|
||||
xor a
|
||||
call ByteFill
|
||||
|
||||
|
||||
; Fill tile palettes:
|
||||
|
||||
; BG Map 1:
|
||||
|
||||
; line 0 (copyright)
|
||||
ld hl, $9c00
|
||||
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 [$ff4f], a
|
||||
|
||||
|
||||
; Decompress logo
|
||||
ld hl, TitleLogoGFX
|
||||
ld de, $8800
|
||||
call $0b50
|
||||
|
||||
; Decompress background crystal
|
||||
ld hl, TitleCrystalGFX
|
||||
ld de, $8000
|
||||
call $0b50
|
||||
|
||||
|
||||
; Clear screen tiles
|
||||
ld hl, $9800
|
||||
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 ; BG Map 1 (3,0)
|
||||
ld bc, $010d ; 13x1
|
||||
ld d, $c
|
||||
ld e, $10
|
||||
call DrawGraphic
|
||||
|
||||
; Initialize running Suicune?
|
||||
ld d, $0
|
||||
call $6ed2
|
||||
|
||||
; Initialize background crystal
|
||||
call $6f06
|
||||
|
||||
; Save WRAM bank
|
||||
ld a, [$ff70]
|
||||
push af
|
||||
; WRAM bank 5
|
||||
ld a, 5
|
||||
ld [$ff70], 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 [$ff70], a
|
||||
|
||||
|
||||
; LY/SCX trickery starts here
|
||||
|
||||
; Save WRAM bank
|
||||
ld a, [$ff70]
|
||||
push af
|
||||
; WRAM bank 5
|
||||
ld a, 5
|
||||
ld [$ff70], 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, 40 ; alternate for 80 lines
|
||||
ld hl, $d100 ; LY buffer
|
||||
.loop
|
||||
; $00 is the middle position
|
||||
ld [hl], $70 ; coming from the left
|
||||
inc hl
|
||||
ld [hl], $90 ; coming from the right
|
||||
inc hl
|
||||
dec b
|
||||
jr nz, .loop
|
||||
|
||||
; Make sure the rest of the buffer is empty
|
||||
ld hl, $d150
|
||||
xor a
|
||||
ld bc, $0040
|
||||
call ByteFill
|
||||
|
||||
; Let LCD Stat know we're messing around with SCX
|
||||
ld a, $43 ; ff43 ; SCX
|
||||
ld [$ffc6], a
|
||||
|
||||
; Restore WRAM bank
|
||||
pop af
|
||||
ld [$ff70], a
|
||||
|
||||
|
||||
; Reset audio
|
||||
call ChannelsOff
|
||||
call $058a
|
||||
|
||||
; Set sprite size to 8x16
|
||||
ld a, [$ff40] ; LCDC
|
||||
set 2, a
|
||||
ld [$ff40], a ; LCDC
|
||||
|
||||
;
|
||||
ld a, $70
|
||||
ld [$ffcf], a
|
||||
ld a, $8
|
||||
ld [$ffd0], a
|
||||
ld a, $7
|
||||
ld [$ffd1], a
|
||||
ld a, $90
|
||||
ld [$ffd2], a
|
||||
|
||||
ld a, $1
|
||||
ld [$ffe5], a
|
||||
|
||||
; Update BG Map 0 (bank 0)
|
||||
ld [$ffd4], a
|
||||
|
||||
xor a
|
||||
ld [$d002], a
|
||||
|
||||
; Play starting sound effect
|
||||
call SFXChannelsOff
|
||||
ld de, $0065
|
||||
call StartSFX
|
||||
|
||||
ret
|
||||
; 10eea7
|
||||
|
||||
INCBIN "baserom.gbc", $10eea7, $10ef46 - $10eea7
|
||||
|
||||
TitleSuicuneGFX: ; 10ef46
|
||||
INCBIN "gfx/title/lz/suicune.lz"
|
||||
|
@ -89256,7 +89642,29 @@ TitleCrystalGFX: ; 10fcee
|
|||
INCBIN "gfx/title/lz/crystal.lz"
|
||||
; 10fed7
|
||||
|
||||
INCBIN "baserom.gbc", $10fed7, $110000 - $10fed7
|
||||
INCBIN "baserom.gbc", $10fed7, $10fede - $10fed7
|
||||
|
||||
TitleScreenPalettes:
|
||||
; BG
|
||||
dw $0000, $0013, $7D0F, $7D0F
|
||||
dw $0000, $7FFF, $7E0F, $343F
|
||||
dw $0000, $1CE7, $7FFF, $7862
|
||||
dw $0000, $35AD, $4BFF, $7862
|
||||
dw $0000, $4E73, $339D, $7862
|
||||
dw $0000, $6739, $1B3C, $7862
|
||||
dw $0000, $7FFF, $02BA, $7862
|
||||
dw $0000, $4D6B, $7FFF, $0000
|
||||
; OBJ
|
||||
dw $0000, $3C0A, $58B1, $7D33
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
dw $7FFF, $0000, $0000, $0000
|
||||
|
||||
INCBIN "baserom.gbc", $10ff5e, $110000 - $10ff5e
|
||||
|
||||
|
||||
SECTION "bank44",DATA,BANK[$44]
|
||||
|
@ -89521,7 +89929,7 @@ Function117bb6:
|
|||
ld hl, $d002
|
||||
ld de, $b000
|
||||
ld bc, $1000
|
||||
call $3026
|
||||
call CopyBytes
|
||||
call CloseSRAM
|
||||
pop af
|
||||
ld [$ff70], a
|
||||
|
|
Loading…
Reference in New Issue