More work on animations

This commit is contained in:
PikalaxALT
2015-12-04 08:46:11 -05:00
parent 2f14f3a669
commit 5b94d54a6c
24 changed files with 908 additions and 795 deletions

View File

@@ -114,6 +114,7 @@ DoNextFrameForFirst16Sprites: ; 8cfa8 (23:4fa8)
ret
InitSpriteAnimStruct:: ; 8cfd6
; Initialize animation a at pixel x=e, y=d
; Find if there's any room in the wSpriteAnimationStructs array, which is 10x16
push de
push af
@@ -159,7 +160,7 @@ endr
ld e, l
ld d, h
; Set hl to the first field (field 0) in the current structure.
ld hl, 0
ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc
; Load the index.
ld a, [wc3b4]
@@ -174,11 +175,11 @@ endr
; Look up the third field from the table in the wc300 array (10x2).
; Take the value and load it in
ld a, [de]
call LookUpInwSpriteAnimDict
call GetSpriteAnimVTile
ld [hli], a
pop de
; Set hl to field 4. Kinda pointless, because we're presumably already here.
ld hl, $4
; Set hl to field 4 (X coordinate). Kinda pointless, because we're presumably already here.
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
; Load the original value of de into here.
ld a, e
@@ -203,15 +204,15 @@ rept 4
ld [hli], a
endr
ld [hl], a
; back up the address of the first field to wc3b8
; back up the address of the first field to wSpriteAnimAddrBackup
ld a, c
ld [wc3b8], a
ld [wSpriteAnimAddrBackup], a
ld a, b
ld [wc3b8 + 1], a
ld [wSpriteAnimAddrBackup + 1], a
ret
; 8d036
Function8d036: ; 8d036
DeinitializeSprite: ; 8d036
; Clear the index field of the struct in bc.
ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc
@@ -220,7 +221,7 @@ Function8d036: ; 8d036
; 8d03d
Function8d03d: ; 8d03d (23:503d)
DeinitializeAllSprites: ; 8d03d (23:503d)
; Clear the index field of every struct in the wSpriteAnimationStructs array.
ld hl, wSpriteAnimationStructs
ld bc, $10
@@ -235,7 +236,7 @@ Function8d03d: ; 8d03d (23:503d)
Function8d04c: ; 8d04c
call Function8d0ec ; init WRAM
call InitSpriteAnimBuffer ; init WRAM
call Function8d132 ; read from a memory array
cp -3
jr z, .done
@@ -259,7 +260,7 @@ Function8d04c: ; 8d04c
ld c, a ; number of objects
.loop
; first byte: y (px)
; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + Function8d0be([hl])
; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + AddOrSubtractY([hl])
ld a, [wCurrAnimYCoord]
ld b, a
ld a, [wCurrAnimYOffset]
@@ -268,13 +269,13 @@ Function8d04c: ; 8d04c
ld a, [wGlobalAnimYOffset]
add b
ld b, a
call Function8d0be
call AddOrSubtractY
add b
ld [de], a
inc hl
inc de
; second byte: x (px)
; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + Function8d0ce([hl])
; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + AddOrSubtractX([hl])
ld a, [wCurrAnimXCoord]
ld b, a
ld a, [wCurrAnimXOffset]
@@ -283,7 +284,7 @@ Function8d04c: ; 8d04c
ld a, [wGlobalAnimXOffset]
add b
ld b, a
call Function8d0ce
call AddOrSubtractX
add b
ld [de], a
inc hl
@@ -311,7 +312,7 @@ Function8d04c: ; 8d04c
jr .done
.delete
call Function8d036
call DeinitializeSprite
.done
and a
@@ -323,12 +324,13 @@ Function8d04c: ; 8d04c
ret
; 8d0be
Function8d0be: ; 8d0be
AddOrSubtractY: ; 8d0be
push hl
ld a, [hl]
ld hl, wc3b8
ld hl, wCurrSpriteAddSubFlags
bit 6, [hl]
jr z, .ok
; 8 - a
add $8
xor $ff
inc a
@@ -338,12 +340,13 @@ Function8d0be: ; 8d0be
ret
; 8d0ce
Function8d0ce: ; 8d0ce
AddOrSubtractX: ; 8d0ce
push hl
ld a, [hl]
ld hl, wc3b8
ld hl, wCurrSpriteAddSubFlags
bit 5, [hl]
jr z, .ok
; 8 - a
add $8
xor $ff
inc a
@@ -354,7 +357,7 @@ Function8d0ce: ; 8d0ce
; 8d0de
Function8d0de: ; 8d0de
ld a, [wc3b8]
ld a, [wCurrSpriteAddSubFlags]
ld b, a
ld a, [hl]
xor b
@@ -366,9 +369,9 @@ Function8d0de: ; 8d0de
ret
; 8d0ec
Function8d0ec: ; 8d0ec
InitSpriteAnimBuffer: ; 8d0ec
xor a
ld [wc3b8], a
ld [wCurrSpriteAddSubFlags], a
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld a, [hli]
@@ -384,8 +387,9 @@ Function8d0ec: ; 8d0ec
ret
; 8d109
LookUpInwSpriteAnimDict: ; 8d109
GetSpriteAnimVTile: ; 8d109
; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0
; VTiles offset
push hl
push bc
ld hl, wSpriteAnimDict
@@ -452,7 +456,7 @@ Function8d132: ; 8d132
ld a, [hl]
push hl
and $3f
ld hl, SPRITEANIMSTRUCT_09
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
add hl, bc
add [hl]
ld hl, SPRITEANIMSTRUCT_DURATION
@@ -463,7 +467,7 @@ Function8d132: ; 8d132
ld a, [hl]
and $c0
srl a
ld [wc3b8], a
ld [wCurrSpriteAddSubFlags], a
pop af
ret
@@ -552,6 +556,7 @@ endr
; 8d1c4
Unknown_8d1c4: ; 8d1c4
; ??, sequence, tile
db $01, SPRITE_ANIM_SEQ_01, $00 ; 00
db $07, SPRITE_ANIM_SEQ_04, $00 ; 01
db $08, SPRITE_ANIM_SEQ_05, $05 ; 02
@@ -562,7 +567,7 @@ Unknown_8d1c4: ; 8d1c4
db $0e, SPRITE_ANIM_SEQ_0A, $07 ; 07
db $10, SPRITE_ANIM_SEQ_0B, $07 ; 08
db $08, SPRITE_ANIM_SEQ_0C, $05 ; 09
db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a
db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a flying sprite
db $12, SPRITE_ANIM_SEQ_0D, $08 ; 0b
db $12, SPRITE_ANIM_SEQ_0E, $08 ; 0c
db $12, SPRITE_ANIM_SEQ_0F, $08 ; 0d
@@ -572,11 +577,11 @@ Unknown_8d1c4: ; 8d1c4
db $17, SPRITE_ANIM_SEQ_12, $00 ; 11
db $18, SPRITE_ANIM_SEQ_12, $00 ; 12
db $19, SPRITE_ANIM_SEQ_13, $00 ; 13
db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14
db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14 radio tuning knob
db $1b, SPRITE_ANIM_SEQ_00, $00 ; 15
db $1d, SPRITE_ANIM_SEQ_15, $00 ; 16
db $1e, SPRITE_ANIM_SEQ_00, $00 ; 17
db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18
db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18 flying leaves
db $1f, SPRITE_ANIM_SEQ_00, $00 ; 19
db $24, SPRITE_ANIM_SEQ_19, $00 ; 1a
db $25, SPRITE_ANIM_SEQ_00, $00 ; 1b
@@ -605,26 +610,26 @@ INCLUDE "data/sprite_engine.asm"
; Unknown_8d6e6
; Unknown_8d94d
ApplyXOffset: ; 8e72a
ApplySineWaveX: ; 8e72a
add $10
ApplyYOffset: ; 8e72c
ApplySineWaveY: ; 8e72c
and $3f
cp $20
jr nc, .xflip
call Function8e741
jr nc, .flip
call .ApplyOffset
ld a, h
ret
.xflip
.flip
and $1f
call Function8e741
call .ApplyOffset
ld a, h
xor $ff ; cpl
inc a
ret
; 8e741
Function8e741: ; 8e741
.ApplyOffset: ; 8e741
ld e, a
ld a, d
ld d, 0
@@ -696,7 +701,7 @@ endr
push de
push hl
call ApplyYOffset
call ApplySineWaveY
pop hl
pop de
add 13 * 8
@@ -705,7 +710,7 @@ endr
pop af
push de
push hl
call ApplyXOffset
call ApplySineWaveX
pop hl
pop de
add 10 * 8 + 4
@@ -743,451 +748,3 @@ ClearSpriteAnims2: ; 8e814
pop hl
ret
; 8e82b
Function8e82b: ; 8e82b
ld a, e
call ReadMonMenuIcon
ld l, a
ld h, 0
add hl, hl
ld de, IconPointers
add hl, de
ld a, [hli]
ld e, a
ld d, [hl]
ld b, BANK(Icons)
ld c, 8
ret
; 8e83f
Function8e83f: ; 8e83f
push hl
push de
push bc
call Function8e849
pop bc
pop de
pop hl
ret
; 8e849
Function8e849: ; 8e849
ld d, 0
ld hl, Jumptable_8e854
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 8e854
Jumptable_8e854: ; 8e854 (23:6854)
dw Function8e8d5
dw Function8e961
dw Function8e97d
dw Function8e99a
dw Function8e898
dw Function8e8b1
dw Function8e862
Function8e862: ; 8e862 (23:6862)
call Function8e908
call Function8e86c
call Function8e936
ret
Function8e86c: ; 8e86c (23:686c)
push bc
ld a, [hObjectStructIndexBuffer]
ld hl, PartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop bc
ld a, [hl]
and a
jr z, .asm_8e890
push hl
push bc
ld d, a
callab ItemIsMail
pop bc
pop hl
jr c, .asm_8e88e
ld a, $6
jr .asm_8e892
.asm_8e88e
ld a, $5
.asm_8e890
ld a, $4
.asm_8e892
ld hl, $1
add hl, bc
ld [hl], a
ret
Function8e898: ; 8e898 (23:6898)
call Function8e8d5
ld hl, $2
add hl, bc
ld a, $0
ld [hl], a
ld hl, $4
add hl, bc
ld a, $48
ld [hl], a
ld hl, $5
add hl, bc
ld a, $48
ld [hl], a
ret
Function8e8b1: ; 8e8b1 (23:68b1)
call Function8e908
call Function8e936
ld hl, $2
add hl, bc
ld a, $0
ld [hl], a
ld hl, $4
add hl, bc
ld a, $18
ld [hl], a
ld hl, $5
add hl, bc
ld a, $60
ld [hl], a
ld a, c
ld [wc608], a
ld a, b
ld [wc608 + 1], a
ret
Function8e8d5: ; 8e8d5 (23:68d5)
call Function8e908
call Function8e8df
call Function8e936
ret
Function8e8df: ; 8e8df (23:68df)
push bc
ld a, [hObjectStructIndexBuffer]
ld hl, PartyMon1Item
ld bc, $30
call AddNTimes
pop bc
ld a, [hl]
and a
ret z
push hl
push bc
ld d, a
callab ItemIsMail
pop bc
pop hl
jr c, .asm_8e900
ld a, $3
jr .asm_8e902
.asm_8e900
ld a, $2
.asm_8e902
ld hl, $1
add hl, bc
ld [hl], a
ret
Function8e908: ; 8e908 (23:6908)
ld a, [wc3b7]
push af
ld a, [hObjectStructIndexBuffer]
ld hl, PartySpecies
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call ReadMonMenuIcon
ld [CurIcon], a
call Function8e9db
ld a, [hObjectStructIndexBuffer]
; y coord
rept 4
add a
endr
add $1c
ld d, a
; x coord
ld e, $10
; type is partymon icon
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
pop af
ld hl, $3
add hl, bc
ld [hl], a
ret
Function8e936: ; 8e936 (23:6936)
push bc
ld a, [hObjectStructIndexBuffer]
ld b, a
call Function8e94c
ld a, b
pop bc
ld hl, $9
add hl, bc
ld [hl], a
rlca
rlca
ld hl, $d
add hl, bc
ld [hl], a
ret
Function8e94c: ; 8e94c (23:694c)
callba PlacePartymonHPBar
call GetHPPal
ld e, d
ld d, 0
ld hl, Unknown_8e95e
add hl, de
ld b, [hl]
ret
; 8e95e (23:695e)
Unknown_8e95e: ; 8e95e
db $00, $40, $80
; 8e961
Function8e961: ; 8e961 (23:6961)
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
xor a
call GetIconGFX
lb de, $24, $20
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
ld hl, $2
add hl, bc
ld [hl], $0
ret
Function8e97d: ; 8e97d (23:697d)
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
xor a
call GetIconGFX
ld d, $1a
ld e, $24
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
ld hl, $2
add hl, bc
ld [hl], $0
ret
Function8e99a: ; 8e99a (23:699a)
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
ld a, $62
ld [wc3b7], a
call Function8e9db
ret
GetSpeciesIcon: ; 8e9ac
; Load species icon into VRAM at tile a
push de
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
pop de
ld a, e
call GetIconGFX
ret
; 8e9bc
Function8e9bc: ; 8e9bc (23:69bc)
push de
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
pop de
ld a, e
call GetIcon_a
ret
; 8e9cc (23:69cc)
Function8e9cc: ; 8e9cc
push de
ld a, [wd265]
call ReadMonMenuIcon
ld [CurIcon], a
pop de
call GetIcon_de
ret
; 8e9db
Function8e9db: ; 8e9db (23:69db)
ld a, [wc3b7]
GetIconGFX: ; 8e9de
call GetIcon_a
ld de, $80 ; 8 tiles
add hl, de
ld de, HeldItemIcons
lb bc, BANK(HeldItemIcons), 2
call GetGFXUnlessMobile
ld a, [wc3b7]
add 10
ld [wc3b7], a
ret
HeldItemIcons:
INCBIN "gfx/icon/mail.2bpp"
INCBIN "gfx/icon/item.2bpp"
; 8ea17
GetIcon_de: ; 8ea17
; Load icon graphics into VRAM starting from tile de.
ld l, e
ld h, d
jr GetIcon
GetIcon_a: ; 8ea1b
; Load icon graphics into VRAM starting from tile a.
ld l, a
ld h, 0
GetIcon: ; 8ea1e
; Load icon graphics into VRAM starting from tile hl.
; One tile is 16 bytes long.
rept 4
add hl, hl
endr
ld de, VTiles0
add hl, de
push hl
; The icons are contiguous, in order and of the same
; size, so the pointer table is somewhat redundant.
ld a, [CurIcon]
push hl
ld l, a
ld h, 0
add hl, hl
ld de, IconPointers
add hl, de
ld a, [hli]
ld e, a
ld d, [hl]
pop hl
lb bc, BANK(Icons), 8
call GetGFXUnlessMobile
pop hl
ret
; 8ea3f
GetGFXUnlessMobile: ; 8ea3f
ld a, [wLinkMode]
cp LINK_MOBILE
jp nz, Request2bpp
jp Get2bpp_2
; 8ea4a
Function8ea4a: ; 8ea4a
ld hl, wSpriteAnimationStructs
ld e, $6
ld a, [MenuSelection2]
ld d, a
.loop
ld a, [hl]
and a
jr z, .next
cp d
jr z, .loadwithtwo
ld a, $0
jr .ok
.loadwithtwo
ld a, $2
.ok
push hl
ld c, l
ld b, h
ld hl, $2
add hl, bc
ld [hl], a
pop hl
.next
ld bc, $10
add hl, bc
dec e
jr nz, .loop
ret
; 8ea71
Function8ea71: ; 8ea71
ld hl, wSpriteAnimationStructs
ld e, $6
.loop
ld a, [hl]
and a
jr z, .zero
push hl
ld c, l
ld b, h
ld hl, $2
add hl, bc
ld [hl], $1
pop hl
.zero
ld bc, $10
add hl, bc
dec e
jr nz, .loop
ret
; 8ea8c (23:6a8c)
Function8ea8c: ; 8ea8c
ld hl, wSpriteAnimationStructs
ld e, $6
ld a, [wd0e3]
ld d, a
.asm_8ea95
ld a, [hl]
and a
jr z, .asm_8eaab
cp d
jr z, .asm_8eaa0
ld a, $3
jr .asm_8eaa2
.asm_8eaa0
ld a, $2
.asm_8eaa2
push hl
ld c, l
ld b, h
ld hl, $2
add hl, bc
ld [hl], a
pop hl
.asm_8eaab
ld bc, $10
add hl, bc
dec e
jr nz, .asm_8ea95
ret
INCLUDE "menu/mon_icons.asm"