2015-12-01 18:54:11 -08:00
|
|
|
ClearSpriteAnims: ; 8cf53
|
|
|
|
ld hl, wSpriteAnimDict
|
|
|
|
ld bc, wSpriteAnimsEnd - wSpriteAnimDict
|
2015-11-12 21:49:27 -08:00
|
|
|
.loop
|
|
|
|
ld [hl], $0
|
|
|
|
inc hl
|
|
|
|
dec bc
|
|
|
|
ld a, c
|
|
|
|
or b
|
|
|
|
jr nz, .loop
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8cf62
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-10 19:26:31 -08:00
|
|
|
PlaySpriteAnimationsAndDelayFrame: ; 8cf62
|
2015-11-28 12:13:40 -08:00
|
|
|
call PlaySpriteAnimations
|
2015-11-12 21:49:27 -08:00
|
|
|
call DelayFrame
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8cf69
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-28 12:13:40 -08:00
|
|
|
PlaySpriteAnimations: ; 8cf69
|
2015-11-12 21:49:27 -08:00
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
2015-11-04 17:20:14 -08:00
|
|
|
push af
|
|
|
|
|
2015-12-10 19:26:31 -08:00
|
|
|
ld a, Sprites % $100
|
2015-12-05 12:38:25 -08:00
|
|
|
ld [wCurrSpriteOAMAddr], a
|
2015-12-01 12:35:28 -08:00
|
|
|
call DoNextFrameForAllSprites
|
2015-11-12 21:49:27 -08:00
|
|
|
|
2015-11-04 17:20:14 -08:00
|
|
|
pop af
|
2015-11-12 21:49:27 -08:00
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8cf7a
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-01 12:35:28 -08:00
|
|
|
DoNextFrameForAllSprites: ; 8cf7a
|
2015-11-28 12:13:40 -08:00
|
|
|
ld hl, wSpriteAnimationStructs
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, 10 ; There are 10 structs here.
|
2015-11-04 17:20:14 -08:00
|
|
|
|
|
|
|
.loop
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr z, .next ; This struct is deinitialized.
|
|
|
|
ld c, l
|
|
|
|
ld b, h
|
|
|
|
push hl
|
|
|
|
push de
|
2015-12-26 18:59:03 -08:00
|
|
|
call DoAnimFrame ; Uses a massive dw
|
2015-12-05 12:38:25 -08:00
|
|
|
call UpdateAnimFrame
|
2015-11-12 21:49:27 -08:00
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
jr c, .done
|
|
|
|
|
|
|
|
.next
|
|
|
|
ld bc, $10
|
|
|
|
add hl, bc
|
|
|
|
dec e
|
2015-11-04 17:20:14 -08:00
|
|
|
jr nz, .loop
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
ld a, [wCurrSpriteOAMAddr]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld l, a
|
2015-12-10 19:26:31 -08:00
|
|
|
ld h, Sprites / $100
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
.loop2 ; Clear (Sprites + [wCurrSpriteOAMAddr] --> SpritesEnd)
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, l
|
|
|
|
cp SpritesEnd % $100
|
|
|
|
jr nc, .done
|
|
|
|
xor a
|
|
|
|
ld [hli], a
|
|
|
|
jr .loop2
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.done
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8cfa8
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-01 18:54:11 -08:00
|
|
|
DoNextFrameForFirst16Sprites: ; 8cfa8 (23:4fa8)
|
2015-11-13 15:59:49 -08:00
|
|
|
ld hl, wSpriteAnimationStructs
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, 10
|
|
|
|
|
|
|
|
.loop
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr z, .next
|
|
|
|
ld c, l
|
|
|
|
ld b, h
|
|
|
|
push hl
|
|
|
|
push de
|
2015-12-26 18:59:03 -08:00
|
|
|
call DoAnimFrame ; Uses a massive dw
|
2015-12-05 12:38:25 -08:00
|
|
|
call UpdateAnimFrame
|
2015-11-12 21:49:27 -08:00
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
jr c, .done
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.next
|
|
|
|
ld bc, $10
|
|
|
|
add hl, bc
|
|
|
|
dec e
|
|
|
|
jr nz, .loop
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
ld a, [wCurrSpriteOAMAddr]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld l, a
|
|
|
|
ld h, (Sprites + $40) / $100
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
.loop2 ; Clear (Sprites + [wCurrSpriteOAMAddr] --> Sprites + $40)
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, l
|
2015-12-01 18:54:11 -08:00
|
|
|
cp (Sprites + 16 * 4) % $100
|
2015-11-12 21:49:27 -08:00
|
|
|
jr nc, .done
|
|
|
|
xor a
|
|
|
|
ld [hli], a
|
|
|
|
jr .loop2
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.done
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
|
|
|
|
2015-11-13 07:48:49 -08:00
|
|
|
InitSpriteAnimStruct:: ; 8cfd6
|
2015-12-04 05:46:11 -08:00
|
|
|
; Initialize animation a at pixel x=e, y=d
|
2015-11-28 12:13:40 -08:00
|
|
|
; Find if there's any room in the wSpriteAnimationStructs array, which is 10x16
|
2015-11-12 21:49:27 -08:00
|
|
|
push de
|
2015-11-04 17:20:14 -08:00
|
|
|
push af
|
2015-11-28 12:13:40 -08:00
|
|
|
ld hl, wSpriteAnimationStructs
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, 10
|
|
|
|
.loop
|
2015-11-04 17:20:14 -08:00
|
|
|
ld a, [hl]
|
2015-11-12 21:49:27 -08:00
|
|
|
and a
|
|
|
|
jr z, .found
|
|
|
|
ld bc, $10
|
|
|
|
add hl, bc
|
|
|
|
dec e
|
2015-11-04 17:20:14 -08:00
|
|
|
jr nz, .loop
|
2015-11-12 21:49:27 -08:00
|
|
|
; We've reached the end. There is no more room here.
|
|
|
|
; Return carry.
|
|
|
|
pop af
|
|
|
|
pop de
|
|
|
|
scf
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.found
|
|
|
|
; Back up the structure address to bc.
|
|
|
|
ld c, l
|
|
|
|
ld b, h
|
2015-12-10 19:26:31 -08:00
|
|
|
; Value [wSpriteAnimCount] is initially set to -1. Set it to
|
2015-11-12 21:49:27 -08:00
|
|
|
; the number of objects loaded into this array.
|
2015-12-10 19:26:31 -08:00
|
|
|
ld hl, wSpriteAnimCount
|
2015-11-12 21:49:27 -08:00
|
|
|
inc [hl]
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr nz, .initialized
|
|
|
|
inc [hl]
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.initialized
|
2015-12-05 12:38:25 -08:00
|
|
|
; Get row a of SpriteAnimSeqData, copy the pointer into de
|
2015-11-12 21:49:27 -08:00
|
|
|
pop af
|
|
|
|
ld e, a
|
|
|
|
ld d, 0
|
2015-12-05 12:38:25 -08:00
|
|
|
ld hl, SpriteAnimSeqData
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
2016-05-10 09:31:49 -07:00
|
|
|
add hl, de
|
|
|
|
add hl, de
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, l
|
|
|
|
ld d, h
|
|
|
|
; Set hl to the first field (field 0) in the current structure.
|
2015-12-04 05:46:11 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_INDEX
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
; Load the index.
|
2015-12-10 19:26:31 -08:00
|
|
|
ld a, [wSpriteAnimCount]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld [hli], a
|
|
|
|
; Copy the table entry to the next two fields.
|
|
|
|
ld a, [de]
|
|
|
|
ld [hli], a
|
|
|
|
inc de
|
|
|
|
ld a, [de]
|
|
|
|
ld [hli], a
|
|
|
|
inc de
|
2015-12-10 19:26:31 -08:00
|
|
|
; Look up the third field from the table in the wSpriteAnimDict array (10x2).
|
2016-04-10 11:42:14 -07:00
|
|
|
; Take the value and load it in
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [de]
|
2015-12-04 05:46:11 -08:00
|
|
|
call GetSpriteAnimVTile
|
2015-11-12 21:49:27 -08:00
|
|
|
ld [hli], a
|
|
|
|
pop de
|
2015-12-04 05:46:11 -08:00
|
|
|
; Set hl to field 4 (X coordinate). Kinda pointless, because we're presumably already here.
|
|
|
|
ld hl, SPRITEANIMSTRUCT_XCOORD
|
2015-11-04 17:20:14 -08:00
|
|
|
add hl, bc
|
2015-11-12 21:49:27 -08:00
|
|
|
; Load the original value of de into here.
|
|
|
|
ld a, e
|
|
|
|
ld [hli], a
|
|
|
|
ld a, d
|
|
|
|
ld [hli], a
|
|
|
|
; load 0 into the next four fields
|
|
|
|
xor a
|
|
|
|
ld [hli], a
|
2015-12-26 18:59:03 -08:00
|
|
|
ld [hli], a
|
2015-11-12 21:49:27 -08:00
|
|
|
xor a
|
|
|
|
ld [hli], a
|
2015-12-26 18:59:03 -08:00
|
|
|
ld [hli], a
|
2015-11-12 21:49:27 -08:00
|
|
|
; load -1 into the next field
|
|
|
|
dec a
|
|
|
|
ld [hli], a
|
|
|
|
; load 0 into the last five fields
|
|
|
|
xor a
|
|
|
|
rept 4
|
|
|
|
ld [hli], a
|
|
|
|
endr
|
|
|
|
ld [hl], a
|
2015-12-04 05:46:11 -08:00
|
|
|
; back up the address of the first field to wSpriteAnimAddrBackup
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, c
|
2015-12-04 05:46:11 -08:00
|
|
|
ld [wSpriteAnimAddrBackup], a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, b
|
2015-12-04 05:46:11 -08:00
|
|
|
ld [wSpriteAnimAddrBackup + 1], a
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d036
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
DeinitializeSprite: ; 8d036
|
2015-11-12 21:49:27 -08:00
|
|
|
; Clear the index field of the struct in bc.
|
2015-12-02 10:24:18 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_INDEX
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], $0
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d03d
|
2015-11-04 17:20:14 -08:00
|
|
|
|
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
DeinitializeAllSprites: ; 8d03d (23:503d)
|
2015-11-28 12:13:40 -08:00
|
|
|
; Clear the index field of every struct in the wSpriteAnimationStructs array.
|
|
|
|
ld hl, wSpriteAnimationStructs
|
2015-11-12 21:49:27 -08:00
|
|
|
ld bc, $10
|
|
|
|
ld e, 10
|
|
|
|
xor a
|
|
|
|
.loop
|
|
|
|
ld [hl], a
|
|
|
|
add hl, bc
|
|
|
|
dec e
|
|
|
|
jr nz, .loop
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
|
|
|
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
UpdateAnimFrame: ; 8d04c
|
2015-12-04 05:46:11 -08:00
|
|
|
call InitSpriteAnimBuffer ; init WRAM
|
2015-12-05 12:38:25 -08:00
|
|
|
call GetSpriteAnimFrame ; read from a memory array
|
2015-11-12 21:49:27 -08:00
|
|
|
cp -3
|
|
|
|
jr z, .done
|
|
|
|
cp -4
|
2015-12-02 10:24:18 -08:00
|
|
|
jr z, .delete
|
2015-12-05 12:38:25 -08:00
|
|
|
call GetFrameOAMPointer
|
2015-12-02 10:24:18 -08:00
|
|
|
; add byte to [wCurrAnimVTile]
|
|
|
|
ld a, [wCurrAnimVTile]
|
2015-11-12 21:49:27 -08:00
|
|
|
add [hl]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimVTile], a
|
2015-11-12 21:49:27 -08:00
|
|
|
inc hl
|
2015-12-02 10:24:18 -08:00
|
|
|
; load pointer into hl
|
2015-11-04 17:20:14 -08:00
|
|
|
ld a, [hli]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld h, [hl]
|
|
|
|
ld l, a
|
|
|
|
push bc
|
2015-12-05 12:38:25 -08:00
|
|
|
ld a, [wCurrSpriteOAMAddr]
|
2015-11-04 17:20:14 -08:00
|
|
|
ld e, a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld d, Sprites / $100
|
2015-11-04 17:20:14 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld c, a ; number of objects
|
2015-11-12 21:49:27 -08:00
|
|
|
.loop
|
2015-12-02 10:24:18 -08:00
|
|
|
; first byte: y (px)
|
2015-12-04 05:46:11 -08:00
|
|
|
; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + AddOrSubtractY([hl])
|
2015-12-02 10:24:18 -08:00
|
|
|
ld a, [wCurrAnimYCoord]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld b, a
|
2015-12-02 10:24:18 -08:00
|
|
|
ld a, [wCurrAnimYOffset]
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld b, a
|
2015-12-02 14:59:05 -08:00
|
|
|
ld a, [wGlobalAnimYOffset]
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld b, a
|
2015-12-04 05:46:11 -08:00
|
|
|
call AddOrSubtractY
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld [de], a
|
|
|
|
inc hl
|
|
|
|
inc de
|
2015-12-02 10:24:18 -08:00
|
|
|
; second byte: x (px)
|
2015-12-04 05:46:11 -08:00
|
|
|
; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + AddOrSubtractX([hl])
|
2015-12-02 10:24:18 -08:00
|
|
|
ld a, [wCurrAnimXCoord]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld b, a
|
2015-12-02 10:24:18 -08:00
|
|
|
ld a, [wCurrAnimXOffset]
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld b, a
|
2015-12-02 14:59:05 -08:00
|
|
|
ld a, [wGlobalAnimXOffset]
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld b, a
|
2015-12-04 05:46:11 -08:00
|
|
|
call AddOrSubtractX
|
2015-11-12 21:49:27 -08:00
|
|
|
add b
|
|
|
|
ld [de], a
|
|
|
|
inc hl
|
|
|
|
inc de
|
2015-12-02 10:24:18 -08:00
|
|
|
; third byte: vtile
|
|
|
|
; [de] = [wCurrAnimVTile] + [hl]
|
|
|
|
ld a, [wCurrAnimVTile]
|
2015-11-12 21:49:27 -08:00
|
|
|
add [hl]
|
|
|
|
ld [de], a
|
|
|
|
inc hl
|
|
|
|
inc de
|
2015-12-02 10:24:18 -08:00
|
|
|
; fourth byte: attributes
|
2015-12-05 12:38:25 -08:00
|
|
|
; [de] = GetSpriteOAMAttr([hl])
|
|
|
|
call GetSpriteOAMAttr
|
2015-11-12 21:49:27 -08:00
|
|
|
ld [de], a
|
|
|
|
inc hl
|
|
|
|
inc de
|
|
|
|
ld a, e
|
2015-12-05 12:38:25 -08:00
|
|
|
ld [wCurrSpriteOAMAddr], a
|
2015-11-12 21:49:27 -08:00
|
|
|
cp SpritesEnd % $100
|
2015-12-02 10:24:18 -08:00
|
|
|
jr nc, .reached_the_end
|
2015-11-12 21:49:27 -08:00
|
|
|
dec c
|
|
|
|
jr nz, .loop
|
|
|
|
pop bc
|
|
|
|
jr .done
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-02 10:24:18 -08:00
|
|
|
.delete
|
2015-12-04 05:46:11 -08:00
|
|
|
call DeinitializeSprite
|
2015-11-12 21:49:27 -08:00
|
|
|
.done
|
2015-11-04 17:20:14 -08:00
|
|
|
and a
|
|
|
|
ret
|
|
|
|
|
2015-12-02 10:24:18 -08:00
|
|
|
.reached_the_end
|
2015-11-12 21:49:27 -08:00
|
|
|
pop bc
|
2015-11-04 17:20:14 -08:00
|
|
|
scf
|
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d0be
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
AddOrSubtractY: ; 8d0be
|
2015-11-12 21:49:27 -08:00
|
|
|
push hl
|
2015-11-04 17:20:14 -08:00
|
|
|
ld a, [hl]
|
2015-12-04 05:46:11 -08:00
|
|
|
ld hl, wCurrSpriteAddSubFlags
|
2015-11-12 21:49:27 -08:00
|
|
|
bit 6, [hl]
|
|
|
|
jr z, .ok
|
2015-12-04 05:46:11 -08:00
|
|
|
; 8 - a
|
2015-11-12 21:49:27 -08:00
|
|
|
add $8
|
|
|
|
xor $ff
|
|
|
|
inc a
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.ok
|
|
|
|
pop hl
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d0ce
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
AddOrSubtractX: ; 8d0ce
|
2015-11-04 17:20:14 -08:00
|
|
|
push hl
|
|
|
|
ld a, [hl]
|
2015-12-04 05:46:11 -08:00
|
|
|
ld hl, wCurrSpriteAddSubFlags
|
2016-04-30 18:20:12 -07:00
|
|
|
bit 5, [hl] ; x flip
|
2015-11-12 21:49:27 -08:00
|
|
|
jr z, .ok
|
2015-12-04 05:46:11 -08:00
|
|
|
; 8 - a
|
2015-11-12 21:49:27 -08:00
|
|
|
add $8
|
|
|
|
xor $ff
|
|
|
|
inc a
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.ok
|
|
|
|
pop hl
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d0de
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
GetSpriteOAMAttr: ; 8d0de
|
2015-12-04 05:46:11 -08:00
|
|
|
ld a, [wCurrSpriteAddSubFlags]
|
2015-11-12 21:49:27 -08:00
|
|
|
ld b, a
|
|
|
|
ld a, [hl]
|
|
|
|
xor b
|
|
|
|
and $e0
|
|
|
|
ld b, a
|
|
|
|
ld a, [hl]
|
|
|
|
and $1f
|
|
|
|
or b
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d0ec
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
InitSpriteAnimBuffer: ; 8d0ec
|
2015-11-04 17:20:14 -08:00
|
|
|
xor a
|
2015-12-04 05:46:11 -08:00
|
|
|
ld [wCurrSpriteAddSubFlags], a
|
2015-12-02 10:24:18 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimVTile], a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimXCoord], a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimYCoord], a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimXOffset], a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
ld [wCurrAnimYOffset], a
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d109
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-04 05:46:11 -08:00
|
|
|
GetSpriteAnimVTile: ; 8d109
|
2015-11-19 15:07:20 -08:00
|
|
|
; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0
|
2015-12-04 05:46:11 -08:00
|
|
|
; VTiles offset
|
2015-11-04 17:20:14 -08:00
|
|
|
push hl
|
|
|
|
push bc
|
2015-11-19 15:07:20 -08:00
|
|
|
ld hl, wSpriteAnimDict
|
2015-11-04 17:20:14 -08:00
|
|
|
ld b, a
|
2015-11-12 21:49:27 -08:00
|
|
|
ld c, 10
|
2015-11-04 17:20:14 -08:00
|
|
|
.loop
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-11-04 17:20:14 -08:00
|
|
|
cp b
|
2015-11-12 21:49:27 -08:00
|
|
|
jr z, .ok
|
2015-11-04 17:20:14 -08:00
|
|
|
inc hl
|
|
|
|
dec c
|
|
|
|
jr nz, .loop
|
2015-11-12 21:49:27 -08:00
|
|
|
xor a
|
|
|
|
jr .done
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.ok
|
|
|
|
ld a, [hl]
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
.done
|
2015-11-04 17:20:14 -08:00
|
|
|
pop bc
|
|
|
|
pop hl
|
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d120
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
_ReinitSpriteAnimFrame:: ; 8d120
|
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-12-02 14:59:05 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATION
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
2015-12-02 14:59:05 -08:00
|
|
|
ld [hl], 0
|
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAME
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
2015-12-02 14:59:05 -08:00
|
|
|
ld [hl], -1
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d132
|
2015-11-04 17:20:14 -08:00
|
|
|
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
GetSpriteAnimFrame: ; 8d132
|
2015-11-04 17:20:14 -08:00
|
|
|
.loop
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATION
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
2015-11-04 17:20:14 -08:00
|
|
|
and a
|
2015-12-02 10:24:18 -08:00
|
|
|
jr z, .next_frame ; finished the current sequence
|
2015-11-12 21:49:27 -08:00
|
|
|
dec [hl]
|
2015-12-23 14:10:50 -08:00
|
|
|
call .GetPointer ; load pointer from SpriteAnimFrameData
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
|
|
|
push af
|
2015-12-01 12:35:28 -08:00
|
|
|
jr .okay
|
2015-11-12 21:49:27 -08:00
|
|
|
|
2015-12-02 10:24:18 -08:00
|
|
|
.next_frame
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAME
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
inc [hl]
|
2015-12-23 14:10:50 -08:00
|
|
|
call .GetPointer ; load pointer from SpriteAnimFrameData
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hli]
|
2015-12-02 10:24:18 -08:00
|
|
|
cp -2
|
2015-12-05 12:38:25 -08:00
|
|
|
jr z, .restart
|
2015-12-02 10:24:18 -08:00
|
|
|
cp -1
|
2015-12-05 12:38:25 -08:00
|
|
|
jr z, .repeat_last
|
2015-12-01 12:35:28 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
push af
|
|
|
|
ld a, [hl]
|
2015-11-04 17:20:14 -08:00
|
|
|
push hl
|
2015-11-12 21:49:27 -08:00
|
|
|
and $3f
|
2015-12-04 05:46:11 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
add [hl]
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATION
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-11-04 17:20:14 -08:00
|
|
|
pop hl
|
2015-12-01 12:35:28 -08:00
|
|
|
.okay
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, [hl]
|
|
|
|
and $c0
|
|
|
|
srl a
|
2015-12-04 05:46:11 -08:00
|
|
|
ld [wCurrSpriteAddSubFlags], a
|
2015-11-12 21:49:27 -08:00
|
|
|
pop af
|
2015-11-04 17:20:14 -08:00
|
|
|
ret
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
.repeat_last
|
2015-11-12 21:49:27 -08:00
|
|
|
xor a
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATION
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-12-01 12:35:28 -08:00
|
|
|
|
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAME
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
dec [hl]
|
2015-12-26 18:59:03 -08:00
|
|
|
dec [hl]
|
2015-11-12 21:49:27 -08:00
|
|
|
jr .loop
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
.restart
|
2015-11-12 21:49:27 -08:00
|
|
|
xor a
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_DURATION
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-12-01 12:35:28 -08:00
|
|
|
|
2015-11-12 21:49:27 -08:00
|
|
|
dec a
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAME
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
|
|
|
jr .loop
|
|
|
|
; 8d189
|
|
|
|
|
2015-12-23 14:10:50 -08:00
|
|
|
.GetPointer: ; 8d189
|
2015-12-01 12:35:28 -08:00
|
|
|
; Get the data for the current frame for the current animation sequence
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
; SpriteAnimFrameData[SpriteAnim[SPRITEANIMSTRUCT_FRAMESET_ID]][SpriteAnim[SPRITEANIMSTRUCT_FRAME]]
|
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld e, [hl]
|
|
|
|
ld d, 0
|
2015-12-05 12:38:25 -08:00
|
|
|
ld hl, SpriteAnimFrameData
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
2015-12-26 18:59:03 -08:00
|
|
|
add hl, de
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
2015-12-01 12:35:28 -08:00
|
|
|
ld hl, SPRITEANIMSTRUCT_FRAME
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, bc
|
|
|
|
ld l, [hl]
|
|
|
|
ld h, 0
|
|
|
|
add hl, hl
|
|
|
|
add hl, de
|
|
|
|
ret
|
|
|
|
; 8d1a2
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
GetFrameOAMPointer: ; 8d1a2
|
2015-12-02 10:24:18 -08:00
|
|
|
; Load OAM data pointer
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, a
|
|
|
|
ld d, 0
|
2015-12-05 12:38:25 -08:00
|
|
|
ld hl, SpriteAnimOAMData
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
2016-05-10 09:31:49 -07:00
|
|
|
add hl, de
|
|
|
|
add hl, de
|
2015-11-12 21:49:27 -08:00
|
|
|
ret
|
|
|
|
; 8d1ac
|
2015-11-04 17:20:14 -08:00
|
|
|
|
2015-12-10 19:26:31 -08:00
|
|
|
BrokenGetStdGraphics: ; 8d1ac
|
|
|
|
; dummied out
|
2015-11-12 21:49:27 -08:00
|
|
|
push hl
|
|
|
|
ld l, a
|
|
|
|
ld h, 0
|
|
|
|
add hl, hl
|
2015-12-26 18:59:03 -08:00
|
|
|
add hl, hl
|
2015-12-10 19:26:31 -08:00
|
|
|
ld de, BrokenStdGFXPointers ; broken 2bpp pointers
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
|
|
|
ld c, [hl]
|
|
|
|
inc hl
|
|
|
|
ld b, [hl]
|
|
|
|
inc hl
|
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
|
|
|
pop hl
|
|
|
|
push bc
|
|
|
|
call Request2bpp
|
|
|
|
pop bc
|
|
|
|
ret
|
|
|
|
; 8d1c4
|
|
|
|
|
2015-12-05 12:38:25 -08:00
|
|
|
SpriteAnimSeqData: ; 8d1c4
|
2017-12-08 21:50:59 -08:00
|
|
|
; entries correspond to SPRITE_ANIM_INDEX_* constants
|
2015-12-10 19:26:31 -08:00
|
|
|
; frameset sequence, tile
|
2017-12-08 21:50:59 -08:00
|
|
|
; SPRITE_ANIM_INDEX_PARTY_MON
|
|
|
|
db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_SEQ_PARTY_MON, $00
|
|
|
|
; SPRITE_ANIM_INDEX_01
|
|
|
|
db SPRITE_ANIM_FRAMESET_07, SPRITE_ANIM_SEQ_04, $00
|
|
|
|
; SPRITE_ANIM_INDEX_NAMING_SCREEN_CURSOR
|
|
|
|
db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_NAMING_SCREEN_CURSOR, $05
|
|
|
|
; SPRITE_ANIM_INDEX_GAMEFREAK_LOGO
|
|
|
|
db SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO, SPRITE_ANIM_SEQ_GAMEFREAK_LOGO, $00
|
|
|
|
; SPRITE_ANIM_INDEX_GS_INTRO_STAR
|
|
|
|
db SPRITE_ANIM_FRAMESET_GS_INTRO_STAR, SPRITE_ANIM_SEQ_GS_INTRO_STAR, $06
|
|
|
|
; SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE
|
|
|
|
db SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE, SPRITE_ANIM_SEQ_GS_INTRO_SPARKLE, $06
|
|
|
|
; SPRITE_ANIM_INDEX_SLOTS_GOLEM
|
|
|
|
db SPRITE_ANIM_FRAMESET_SLOTS_GOLEM, SPRITE_ANIM_SEQ_SLOTS_GOLEM, $07
|
|
|
|
; SPRITE_ANIM_INDEX_SLOTS_CHANSEY
|
|
|
|
db SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY, SPRITE_ANIM_SEQ_SLOTS_CHANSEY, $07
|
|
|
|
; SPRITE_ANIM_INDEX_SLOTS_EGG
|
|
|
|
db SPRITE_ANIM_FRAMESET_SLOTS_EGG, SPRITE_ANIM_SEQ_SLOTS_EGG, $07
|
|
|
|
; SPRITE_ANIM_INDEX_COMPOSE_MAIL_CURSOR
|
|
|
|
db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_MAIL_CURSOR, $05
|
|
|
|
; SPRITE_ANIM_INDEX_RED_WALK
|
|
|
|
db SPRITE_ANIM_FRAMESET_RED_WALK, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_0B
|
|
|
|
db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0D, $08
|
|
|
|
; SPRITE_ANIM_INDEX_DUMMY_GAME
|
|
|
|
db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0E, $08
|
|
|
|
; SPRITE_ANIM_INDEX_0D
|
|
|
|
db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0F, $08
|
|
|
|
; SPRITE_ANIM_INDEX_TRADE_POKE_BALL
|
|
|
|
db SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL, SPRITE_ANIM_SEQ_TRADE_POKE_BALL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_TRADE_POOF
|
|
|
|
db SPRITE_ANIM_FRAMESET_TRADE_POOF, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE
|
|
|
|
db SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE, SPRITE_ANIM_SEQ_TRADE_TUBE_BULGE, $00
|
|
|
|
; SPRITE_ANIM_INDEX_TRADEMON_ICON
|
|
|
|
db SPRITE_ANIM_FRAMESET_TRADEMON_ICON, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
|
|
|
|
; SPRITE_ANIM_INDEX_TRADEMON_BUBBLE
|
|
|
|
db SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
|
|
|
|
; SPRITE_ANIM_INDEX_EVOLUTION_BALL_OF_LIGHT
|
|
|
|
db SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
|
|
|
|
; SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB
|
|
|
|
db SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB, SPRITE_ANIM_SEQ_RADIO_TUNING_KNOB, $00
|
|
|
|
; SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED
|
|
|
|
db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_LEAF
|
|
|
|
db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_CUT_LEAVES, $00
|
|
|
|
; SPRITE_ANIM_INDEX_CUT_TREE
|
|
|
|
db SPRITE_ANIM_FRAMESET_CUT_TREE, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_FLY_LEAF
|
|
|
|
db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_FLY_LEAF, $00
|
|
|
|
; SPRITE_ANIM_INDEX_EGG_CRACK
|
|
|
|
db SPRITE_ANIM_FRAMESET_EGG_CRACK, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_1A
|
|
|
|
db SPRITE_ANIM_FRAMESET_24, SPRITE_ANIM_SEQ_19, $00
|
|
|
|
; SPRITE_ANIM_INDEX_HEADBUTT
|
|
|
|
db SPRITE_ANIM_FRAMESET_HEADBUTT, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_EGG_HATCH
|
|
|
|
db SPRITE_ANIM_FRAMESET_EGG_HATCH, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
|
|
|
|
; SPRITE_ANIM_INDEX_1D
|
|
|
|
db SPRITE_ANIM_FRAMESET_26, SPRITE_ANIM_SEQ_1A, $00
|
|
|
|
; SPRITE_ANIM_INDEX_BLUE_WALK
|
|
|
|
db SPRITE_ANIM_FRAMESET_BLUE_WALK, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_MAGNET_TRAIN_BLUE
|
|
|
|
db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_BLUE, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_20
|
|
|
|
db SPRITE_ANIM_FRAMESET_2F, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_21
|
|
|
|
db SPRITE_ANIM_FRAMESET_30, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_22
|
|
|
|
db SPRITE_ANIM_FRAMESET_31, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_23
|
|
|
|
db SPRITE_ANIM_FRAMESET_32, SPRITE_ANIM_SEQ_1B, $00
|
|
|
|
; SPRITE_ANIM_INDEX_24
|
|
|
|
db SPRITE_ANIM_FRAMESET_33, SPRITE_ANIM_SEQ_1C, $00
|
|
|
|
; SPRITE_ANIM_INDEX_25
|
|
|
|
db SPRITE_ANIM_FRAMESET_34, SPRITE_ANIM_SEQ_NULL, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_SUICUNE
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE, SPRITE_ANIM_SEQ_INTRO_SUICUNE, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_PICHU
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_PICHU, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_WOOPER
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_WOOPER, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_UNOWN
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_1, SPRITE_ANIM_SEQ_INTRO_UNOWN, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_UNOWN_F
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F, SPRITE_ANIM_SEQ_INTRO_UNOWN_F, $00
|
|
|
|
; SPRITE_ANIM_INDEX_INTRO_SUICUNE_AWAY
|
|
|
|
db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_AWAY, SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY, $00
|
|
|
|
; SPRITE_ANIM_INDEX_CELEBI
|
2017-11-29 11:24:19 -08:00
|
|
|
db SPRITE_ANIM_FRAMESET_CELEBI_LEFT, SPRITE_ANIM_SEQ_NULL, $00 ; 2c
|
2015-11-12 21:49:27 -08:00
|
|
|
; 8d24b
|
|
|
|
|
2015-12-01 18:54:11 -08:00
|
|
|
INCLUDE "engine/sprite_anims.asm" ; DoAnimFrame
|
2015-11-12 21:49:27 -08:00
|
|
|
|
2015-12-01 18:54:11 -08:00
|
|
|
INCLUDE "data/sprite_engine.asm"
|
2015-12-05 12:38:25 -08:00
|
|
|
; SpriteAnimFrameData
|
|
|
|
; SpriteAnimOAMData
|
2015-11-12 21:49:27 -08:00
|
|
|
|
2015-12-04 11:33:29 -08:00
|
|
|
Sprites_Cosine: ; 8e72a
|
2015-11-12 21:49:27 -08:00
|
|
|
add $10
|
2015-12-04 11:33:29 -08:00
|
|
|
Sprites_Sine: ; 8e72c
|
2015-12-05 12:38:25 -08:00
|
|
|
; floor(d * sin(a * pi/32))
|
2015-11-12 21:49:27 -08:00
|
|
|
and $3f
|
|
|
|
cp $20
|
2015-12-04 11:33:29 -08:00
|
|
|
jr nc, .negative
|
|
|
|
call .ApplySineWave
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, h
|
|
|
|
ret
|
|
|
|
|
2015-12-04 11:33:29 -08:00
|
|
|
.negative
|
2015-11-12 21:49:27 -08:00
|
|
|
and $1f
|
2015-12-04 11:33:29 -08:00
|
|
|
call .ApplySineWave
|
2015-11-12 21:49:27 -08:00
|
|
|
ld a, h
|
|
|
|
xor $ff ; cpl
|
|
|
|
inc a
|
|
|
|
ret
|
|
|
|
; 8e741
|
|
|
|
|
2015-12-04 11:33:29 -08:00
|
|
|
.ApplySineWave: ; 8e741
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
ld d, 0
|
2015-11-28 12:13:40 -08:00
|
|
|
ld hl, .sinewave
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
2015-12-26 18:59:03 -08:00
|
|
|
add hl, de
|
2015-11-12 21:49:27 -08:00
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
|
|
|
ld hl, 0
|
2015-12-04 11:33:29 -08:00
|
|
|
.multiply
|
2015-11-12 21:49:27 -08:00
|
|
|
srl a
|
2015-12-04 11:33:29 -08:00
|
|
|
jr nc, .even
|
2015-11-12 21:49:27 -08:00
|
|
|
add hl, de
|
|
|
|
|
2015-12-04 11:33:29 -08:00
|
|
|
.even
|
2015-11-12 21:49:27 -08:00
|
|
|
sla e
|
|
|
|
rl d
|
2015-11-04 17:20:14 -08:00
|
|
|
and a
|
2015-12-04 11:33:29 -08:00
|
|
|
jr nz, .multiply
|
2015-11-12 21:49:27 -08:00
|
|
|
ret
|
|
|
|
; 8e75d
|
|
|
|
|
2016-04-10 12:01:49 -07:00
|
|
|
.sinewave ; 8e75d
|
2015-11-12 21:49:27 -08:00
|
|
|
sine_wave $100
|
2015-11-19 15:07:20 -08:00
|
|
|
|
|
|
|
|
2015-11-28 12:13:40 -08:00
|
|
|
AnimateEndOfExpBar: ; 8e79d
|
2015-11-19 15:07:20 -08:00
|
|
|
ld a, [hSGB]
|
2015-11-28 12:13:40 -08:00
|
|
|
ld de, EndOfExpBarGFX
|
2015-11-19 15:07:20 -08:00
|
|
|
and a
|
2015-11-28 12:13:40 -08:00
|
|
|
jr z, .load
|
|
|
|
ld de, SGBEndOfExpBarGFX
|
2015-11-19 15:07:20 -08:00
|
|
|
|
2015-11-28 12:13:40 -08:00
|
|
|
.load
|
|
|
|
ld hl, VTiles0 tile $00
|
|
|
|
lb bc, BANK(EndOfExpBarGFX), 1
|
2015-11-19 15:07:20 -08:00
|
|
|
call Request2bpp
|
2015-12-05 12:38:25 -08:00
|
|
|
ld c, 8
|
|
|
|
ld d, 0
|
2015-11-28 12:13:40 -08:00
|
|
|
.loop
|
2015-11-19 15:07:20 -08:00
|
|
|
push bc
|
2015-11-28 12:13:40 -08:00
|
|
|
call .AnimateFrame
|
2015-11-19 15:07:20 -08:00
|
|
|
call DelayFrame
|
|
|
|
pop bc
|
|
|
|
inc d
|
2015-12-26 18:59:03 -08:00
|
|
|
inc d
|
2015-11-19 15:07:20 -08:00
|
|
|
dec c
|
2015-11-28 12:13:40 -08:00
|
|
|
jr nz, .loop
|
2015-11-19 15:07:20 -08:00
|
|
|
call ClearSprites
|
|
|
|
ret
|
|
|
|
; 8e7c6
|
|
|
|
|
2015-11-28 12:13:40 -08:00
|
|
|
.AnimateFrame: ; 8e7c6
|
2015-11-19 15:07:20 -08:00
|
|
|
ld hl, Sprites
|
|
|
|
ld c, $8
|
2015-11-28 12:13:40 -08:00
|
|
|
.anim_loop
|
2015-11-19 15:07:20 -08:00
|
|
|
ld a, c
|
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
dec c
|
|
|
|
ld a, c
|
2015-12-05 12:38:25 -08:00
|
|
|
; multiply by 8
|
2015-11-19 15:07:20 -08:00
|
|
|
sla a
|
|
|
|
sla a
|
|
|
|
sla a
|
|
|
|
push af
|
2015-11-28 12:13:40 -08:00
|
|
|
|
2015-11-19 15:07:20 -08:00
|
|
|
push de
|
|
|
|
push hl
|
2015-12-04 11:33:29 -08:00
|
|
|
call Sprites_Sine
|
2015-11-19 15:07:20 -08:00
|
|
|
pop hl
|
|
|
|
pop de
|
2015-11-28 12:13:40 -08:00
|
|
|
add 13 * 8
|
2015-11-19 15:07:20 -08:00
|
|
|
ld [hli], a
|
2015-11-28 12:13:40 -08:00
|
|
|
|
2015-11-19 15:07:20 -08:00
|
|
|
pop af
|
|
|
|
push de
|
|
|
|
push hl
|
2015-12-04 11:33:29 -08:00
|
|
|
call Sprites_Cosine
|
2015-11-19 15:07:20 -08:00
|
|
|
pop hl
|
|
|
|
pop de
|
2015-11-28 12:13:40 -08:00
|
|
|
add 10 * 8 + 4
|
2015-11-19 15:07:20 -08:00
|
|
|
ld [hli], a
|
2015-11-28 12:13:40 -08:00
|
|
|
|
2015-11-19 15:07:20 -08:00
|
|
|
ld a, $0
|
|
|
|
ld [hli], a
|
2015-11-28 12:13:40 -08:00
|
|
|
ld a, $6 ; OBJ 6
|
2015-11-19 15:07:20 -08:00
|
|
|
ld [hli], a
|
2015-11-28 12:13:40 -08:00
|
|
|
jr .anim_loop
|
2015-11-19 15:07:20 -08:00
|
|
|
; 8e7f4
|
|
|
|
|
2015-11-28 12:13:40 -08:00
|
|
|
EndOfExpBarGFX: ; 8e7f4
|
|
|
|
INCBIN "gfx/battle/expbarend.2bpp"
|
|
|
|
SGBEndOfExpBarGFX: ; 8e804
|
|
|
|
INCBIN "gfx/battle/expbarend_sgb.2bpp"
|
2015-11-19 15:07:20 -08:00
|
|
|
|
2015-12-01 18:54:11 -08:00
|
|
|
ClearSpriteAnims2: ; 8e814
|
2015-11-19 15:07:20 -08:00
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
|
|
|
push af
|
|
|
|
ld hl, wSpriteAnimDict
|
|
|
|
ld bc, wSpriteAnimsEnd - wSpriteAnimDict
|
|
|
|
.loop
|
|
|
|
ld [hl], $0
|
|
|
|
inc hl
|
|
|
|
dec bc
|
|
|
|
ld a, c
|
|
|
|
or b
|
|
|
|
jr nz, .loop
|
|
|
|
pop af
|
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
ret
|
|
|
|
; 8e82b
|