pokecrystal/mobile/mobile_45_sprite_engine.asm

887 lines
13 KiB
NASM

Function115d99:
ld de, GFX_11601a
ld hl, vTiles0 tile $60
lb bc, BANK(GFX_11601a), 20
call Get2bpp
xor a
ld [wc305], a
ld [wc306], a
ld [wc309], a
ld [wc30a], a
ld [wc30b], a
ld [wc30c], a
ld a, $10
ld [wc307], a
ld a, $18
ld [wc308], a
ret
Function115dc3:
xor a
ld [wc305], a
ld a, $a0
ld hl, wVirtualOAMSprite31
ld bc, 8 * SPRITEOAMSTRUCT_LENGTH
call ByteFill
ret
Function115dd3:
ld a, [wc305]
and a
ret z
ld a, $a0
ld hl, wVirtualOAMSprite31
ld bc, 8 * SPRITEOAMSTRUCT_LENGTH
call ByteFill
call Function115e22
ld a, [wc309]
sla a
ld c, a
ld b, 0
ld hl, Unknown_115e86
add hl, bc
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
push de
pop hl
ld de, wVirtualOAMSprite31
ld a, [wc307]
ld c, a
ld a, [wc308]
ld b, a
ld a, [hli]
.asm_115e04
push af
ld a, [hli]
add b
ld [de], a ; y
inc de
ld a, [hli]
add c
ld [de], a ; x
inc de
ld a, [hli]
ld [de], a ; tile id
inc de
ld a, [hli]
ld [de], a ; attributes
inc de
pop af
dec a
jr nz, .asm_115e04
ret
Function115e18:
ld a, c
ld [wc30a], a
xor a
ld [wc30b], a
jr Function115e2b
Function115e22:
ld hl, wc30c
dec [hl]
ret nz
ld hl, wc30b
inc [hl]
Function115e2b:
ld a, [wc30a]
sla a
ld c, a
ld b, 0
ld hl, Unknown_115e59
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
push de
pop hl
ld a, [wc30b]
sla a
ld c, a
ld b, $0
add hl, bc
ld a, [hli]
cp $ff
jr nz, .not_end
xor a
ld [wc30b], a
jr Function115e2b
.not_end
ld [wc309], a
ld a, [hl]
ld [wc30c], a
ret
Unknown_115e59:
dw Unknown_115e61
dw Unknown_115e6c
dw Unknown_115e76
dw Unknown_115e79
; OAM idx (see Unknown_115e86), flip flags/duration
Unknown_115e61:
db $04, $08
db $05, $08
db $06, $08
db $07, $08
db $08, $08
db -1
Unknown_115e6c:
db $01, $08
db $02, $08
db $03, $08
db $09, $08
db $0a, $08
Unknown_115e76:
db $00, $08
db -1
Unknown_115e79:
db $0b, $08
db $0c, $08
db $0d, $08
db $0e, $08
db $0f, $08
db $00, $08
db -1
Unknown_115e86:
dw Unknown_115ea6
dw Unknown_115eb7
dw Unknown_115ecc
dw Unknown_115ee1
dw Unknown_115ef6
dw Unknown_115f13
dw Unknown_115f30
dw Unknown_115f4d
dw Unknown_115f6a
dw Unknown_115f87
dw Unknown_115f9c
dw Unknown_115fb1
dw Unknown_115fc6
dw Unknown_115fdb
dw Unknown_115ff0
dw Unknown_116005
Unknown_115ea6:
db 4
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115eb7:
db 5
dsprite 0, 0, 1, 0, $64, $00
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115ecc:
db 5
dsprite 0, 0, 1, 0, $65, $00
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115ee1:
db 5
dsprite 0, 0, 1, 0, $66, $00
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115ef6:
db 7
dsprite 0, 0, 0, 0, $67, $01
dsprite 1, 0, 0, 0, $68, $01
dsprite 2, 0, 0, 0, $6d, $00
dsprite 2, 0, 1, 0, $69, $00
dsprite 2, 0, 2, 0, $6a, $00
dsprite 3, 0, 1, 0, $6b, $00
dsprite 3, 0, 2, 0, $6c, $00
Unknown_115f13:
db 7
dsprite 0, 0, 0, 0, $67, $01
dsprite 1, 0, 0, 0, $68, $01
dsprite 2, 0, 0, 0, $6e, $00
dsprite 2, 0, 1, 0, $69, $00
dsprite 2, 0, 2, 0, $6a, $00
dsprite 3, 0, 1, 0, $6b, $00
dsprite 3, 0, 2, 0, $6c, $00
Unknown_115f30:
db 7
dsprite 0, 0, 0, 0, $67, $01
dsprite 1, 0, 0, 0, $68, $01
dsprite 2, 0, 0, 0, $6f, $00
dsprite 2, 0, 1, 0, $69, $00
dsprite 2, 0, 2, 0, $6a, $00
dsprite 3, 0, 1, 0, $6b, $00
dsprite 3, 0, 2, 0, $6c, $00
Unknown_115f4d:
db 7
dsprite 0, 0, 0, 0, $67, $01
dsprite 1, 0, 0, 0, $68, $01
dsprite 2, 0, 0, 0, $70, $00
dsprite 2, 0, 1, 0, $69, $00
dsprite 2, 0, 2, 0, $6a, $00
dsprite 3, 0, 1, 0, $6b, $00
dsprite 3, 0, 2, 0, $6c, $00
Unknown_115f6a:
db 7
dsprite 0, 0, 0, 0, $67, $01
dsprite 1, 0, 0, 0, $68, $01
dsprite 2, 0, 0, 0, $71, $00
dsprite 2, 0, 1, 0, $69, $00
dsprite 2, 0, 2, 0, $6a, $00
dsprite 3, 0, 1, 0, $6b, $00
dsprite 3, 0, 2, 0, $6c, $00
Unknown_115f87:
db 5
dsprite 0, 0, 1, 0, $72, $00
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115f9c:
db 5
dsprite 0, 0, 1, 0, $73, $00
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115fb1:
db 5
dsprite 0, 1, 1, 0, $64, $60
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115fc6:
db 5
dsprite 0, 1, 1, 0, $65, $60
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115fdb:
db 5
dsprite 0, 1, 1, 0, $66, $60
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_115ff0:
db 5
dsprite 0, 1, 1, 0, $72, $60
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
Unknown_116005:
db 5
dsprite 0, 1, 1, 0, $73, $60
dsprite 1, 0, 0, 0, $60, $01
dsprite 1, 0, 1, 0, $61, $01
dsprite 2, 0, 0, 0, $62, $01
dsprite 2, 0, 1, 0, $63, $01
GFX_11601a::
INCBIN "gfx/unknown/11601a.2bpp"
Function11615a:
xor a
ld [wc30d], a
ld [$c319], a
ld [wc310], a
ld [wc311], a
ld [wc312], a
ld [wc313], a
ld [wc314], a
ld [wc314 + 1], a
ld [wc314 + 4], a
ld [wc3f6], a
ld [wc3f8], a
ld [wc3f2], a
ld [wc3f4], a
ld a, $24
ld [wc3f5], a
ld a, $7
ld [wc3f7], a
ld a, $b0
ld [wc30e], a
ld [wc3f1], a
ld a, $48
ld [wc30f], a
ld [wc3f3], a
ret
Function11619d:
ld a, [wc30d]
and a
ret z
ld a, [$c319]
cp $2
jr c, .asm_1161b4
ld a, $a0
ld hl, wVirtualOAM
ld bc, 25 * SPRITEOAMSTRUCT_LENGTH
call ByteFill
.asm_1161b4
call Function1161b8
ret
Function1161b8:
ld a, [$c319]
ld e, a
ld d, 0
ld hl, .Jumptable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.Jumptable:
dw Function1161d5
dw Function116294
dw Function1162cb
dw Function1162f2
dw Function1163c0
dw Function11636e
dw Function116441
Function1161d5:
ldh a, [rSVBK]
push af
ld a, $6
ldh [rSVBK], a
ld hl, Unknown_117356
ld de, wDecompressScratch
ld bc, $0300
call CopyBytes
di
.wait_for_vblank
; Wait until a vblank would occur had interrupts not just been disabled.
ldh a, [rLY]
cp LY_VBLANK + 1
jr nz, .wait_for_vblank
ld a, $d0
ldh [rHDMA1], a
ld a, $0
ldh [rHDMA2], a
ld a, $1c
ldh [rHDMA3], a
xor a
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
ld a, $d0
ldh [rHDMA1], a
ld a, $80
ldh [rHDMA2], a
ld a, $1c
ldh [rHDMA3], a
ld a, $80
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
ld a, $d1
ldh [rHDMA1], a
ld a, $0
ldh [rHDMA2], a
ld a, $1d
ldh [rHDMA3], a
xor a
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
ld a, $1
ldh [rVBK], a
ld a, $d1
ldh [rHDMA1], a
ld a, $80
ldh [rHDMA2], a
ld a, $1c
ldh [rHDMA3], a
xor a
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
ld a, $d2
ldh [rHDMA1], a
ld a, $0
ldh [rHDMA2], a
ld a, $1c
ldh [rHDMA3], a
ld a, $80
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
ld a, $d2
ldh [rHDMA1], a
ld a, $80
ldh [rHDMA2], a
ld a, $1d
ldh [rHDMA3], a
xor a
ldh [rHDMA4], a
ld a, $8
ldh [rHDMA5], a
xor a
ldh [rVBK], a
ei
pop af
ldh [rSVBK], a
farcall ReloadMapPart
ld a, $8
ld [wMusicFade], a
ld de, MUSIC_MOBILE_ADAPTER
ld a, e
ld [wMusicFadeID], a
ld a, d
ld [wMusicFadeID + 1], a
ld a, [$c319]
inc a
ld [$c319], a
ret
MenuHeader_11628c:
db MENU_BACKUP_TILES ; flags
menu_coords 0, 6, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw NULL
db 0 ; default option
Function116294:
farcall Function170d02
ld a, [$c319]
inc a
ld [$c319], a
ldh a, [rSVBK]
push af
ld a, $5
ldh [rSVBK], a
ld hl, wBGPals1 palette 6
ld de, $c320
ld bc, 2 palettes
call CopyBytes
ld hl, Palette_11734e
ld de, wBGPals1 palette 7
ld bc, 1 palettes
call CopyBytes
call SetPalettes
pop af
ldh [rSVBK], a
ld a, $30
ldh [hWY], a
ret
Function1162cb:
farcall Function170cc6
ld a, [$c319]
inc a
ld [$c319], a
ldh a, [rSVBK]
push af
ld a, $5
ldh [rSVBK], a
ld hl, Palette_11730e
ld de, wOBPals1 + 2 palettes
ld bc, 6 palettes
call CopyBytes
call SetPalettes
pop af
ldh [rSVBK], a
ret
Function1162f2:
call Function11659d
call Function116758
call Function1167a6
ld a, [wc310]
cp EGG
ret z
sla a
ld c, a
ld b, 0
ld hl, Unknown_1168c5
add hl, bc
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
push de
pop hl
ld a, [wc30e]
ld c, a
ld a, [wc30f]
ld b, a
ld a, [wc314 + 4]
ld e, a
ld a, [hli]
sub e
ld de, wVirtualOAMSprite09
.asm_116321
push af
ld a, [hli]
add b
ld [de], a ; y
inc de
ld a, [hli]
add c
ld [de], a ; x
inc de
ld a, [hli]
ld [de], a ; tile id
inc de
ld a, [hli]
ld [de], a ; attributes
inc de
pop af
dec a
jr nz, .asm_116321
call Function116468
ld a, [wc3f5]
sla a
ld c, a
ld b, 0
ld hl, Unknown_1168c5
add hl, bc
ld a, [hli]
ld e, a
ld a, [hl]
ld d, a
push de
pop hl
ld a, [wc3f1]
ld c, a
ld a, [wc3f3]
ld b, a
ld a, [wc3f8]
ld e, a
ld a, [hli]
sub e
ld de, wVirtualOAMSprite00
.asm_11635a
push af
ld a, [hli]
add b
ld [de], a ; y
inc de
ld a, [hli]
add c
ld [de], a ; x
inc de
ld a, [hli]
ld [de], a ; tile id
inc de
ld a, [hli]
ld [de], a ; attributes
inc de
pop af
dec a
jr nz, .asm_11635a
ret
Function11636e:
ldh a, [rSVBK]
push af
ld a, $5
ldh [rSVBK], a
ld hl, wBGPals2
ld de, wBGPals1
ld bc, 8 palettes
call CopyBytes
pop af
ldh [rSVBK], a
call SetPalettes
ldh a, [rSVBK]
push af
ld a, $1
ldh [rSVBK], a
ld a, $a0
ld hl, wVirtualOAM
ld bc, 16 * SPRITEOAMSTRUCT_LENGTH
call ByteFill
ld a, $90
ldh [hWY], a
call UpdateSprites
pop af
ldh [rSVBK], a
farcall ReloadMapPart
ld a, $8
ld [wMusicFade], a
ld a, [wMapMusic]
ld [wMusicFadeID], a
xor a
ld [wMusicFadeID + 1], a
xor a
ld [$c319], a
ld [wc30d], a
ret
Function1163c0:
ldh a, [rSVBK]
push af
ld a, $1
ldh [rSVBK], a
ld a, $a0
ld hl, wVirtualOAM
ld bc, 16 * SPRITEOAMSTRUCT_LENGTH
call ByteFill
call DelayFrame
farcall Function14146
ld b, SCGB_MAPPALS
call GetSGBLayout
ldh a, [rSVBK]
push af
ld a, $5
ldh [rSVBK], a
ld hl, $c320
ld de, wd030
ld bc, $0010
call CopyBytes
pop af
ldh [rSVBK], a
call SetPalettes
call DelayFrame
ld a, $90
ldh [hWY], a
call UpdateSprites
farcall Function14157
pop af
ldh [rSVBK], a
farcall ReloadMapPart
ld a, [wLinkMode]
cp $4
jr z, .asm_11642a
ld a, $8
ld [wMusicFade], a
ld a, [wMapMusic]
ld [wMusicFadeID], a
xor a
ld [wMusicFadeID + 1], a
jr .asm_116439
.asm_11642a
ld a, $8
ld [wMusicFade], a
ld a, $0
ld [wMusicFadeID], a
ld a, $0
ld [wMusicFadeID + 1], a
.asm_116439
xor a
ld [$c319], a
ld [wc30d], a
ret
Function116441:
farcall Function17d405
ld a, $90
ldh [hWY], a
farcall ReloadMapPart
ld a, $8
ld [wMusicFade], a
ld a, [wMapMusic]
ld [wMusicFadeID], a
xor a
ld [wMusicFadeID + 1], a
xor a
ld [$c319], a
ld [wc30d], a
ret
Function116468:
call Function116567
ld a, [wc314]
cp $d
jr nz, .asm_1164a8
ld hl, wc30e
ld a, [hl]
cp $50
jr nc, .asm_116484
ld a, $50
sub [hl]
add $50
ld [wc3f1], a
jr .asm_11648d
.asm_116484
sub $50
ld c, a
ld a, $50
sub c
ld [wc3f1], a
.asm_11648d
ld hl, wc30f
ld a, [hl]
cp $60
jr nc, .asm_11649e
ld a, $60
sub [hl]
add $60
ld [wc3f3], a
ret
.asm_11649e
sub $60
ld c, a
ld a, $60
sub c
ld [wc3f3], a
ret
.asm_1164a8
ld hl, wc30e
ld a, $b0
cp [hl]
jr nc, .asm_1164b8
ld a, [wc3f1]
and a
jr z, .asm_11650b
jr .asm_1164f2
.asm_1164b8
ld a, [wc3f1]
sub [hl]
jr nc, .asm_1164c1
xor $ff
inc a
.asm_1164c1
ld b, a
ld c, $0
ld a, $5
.asm_1164c6
srl b
rr c
dec a
jr nz, .asm_1164c6
ld a, c
ld [wc3fa], a
ld a, b
ld [wc3f9], a
ld a, [wc3f1]
sub [hl]
jr c, .asm_1164f2
ld c, $0
ld a, [wc3fa]
xor $ff
add $1
rl c
ld [wc3fa], a
ld a, [wc3f9]
xor $ff
add c
ld [wc3f9], a
.asm_1164f2
ld a, [wc3f2]
ld l, a
ld a, [wc3f1]
ld h, a
ld a, [wc3fa]
ld e, a
ld a, [wc3f9]
ld d, a
add hl, de
ld a, l
ld [wc3f2], a
ld a, h
ld [wc3f1], a
.asm_11650b
ld hl, wc30f
ld a, $b0
cp [hl]
jr c, .asm_11654d
ld a, [wc3f3]
sub [hl]
jr nc, .asm_11651c
xor $ff
inc a
.asm_11651c
ld b, a
ld c, $0
ld a, $5
.asm_116521
srl b
rr c
dec a
jr nz, .asm_116521
ld a, c
ld [wc3fc], a
ld a, b
ld [wc3fb], a
ld a, [wc3f3]
sub [hl]
jr c, .asm_11654d
ld c, $0
ld a, [wc3fc]
xor $ff
add $1
rl c
ld [wc3fc], a
ld a, [wc3fb]
xor $ff
add c
ld [wc3fb], a
.asm_11654d
ld a, [wc3f4]
ld l, a
ld a, [wc3f3]
ld h, a
ld a, [wc3fc]
ld e, a
ld a, [wc3fb]
ld d, a
add hl, de
ld a, l
ld [wc3f4], a
ld a, h
ld [wc3f3], a
ret