pokecrystal-board/battle/objects/engine.asm
2017-12-09 22:00:36 -05:00

315 lines
4.3 KiB
NASM
Executable File

QueueBattleAnimation: ; cc9a1 (33:49a1)
ld hl, ActiveAnimObjects
ld e, 10
.loop
ld a, [hl]
and a
jr z, .done
ld bc, BATTLEANIMSTRUCT_LENGTH
add hl, bc
dec e
jr nz, .loop
scf
ret
.done
ld c, l
ld b, h
ld hl, wNumActiveBattleAnims
inc [hl]
call InitBattleAnimation
ret
DeinitBattleAnimation: ; cc9bd
ld hl, BATTLEANIMSTRUCT_INDEX
add hl, bc
ld [hl], $0
ret
; cc9c4
InitBattleAnimation: ; cc9c4 (33:49c4)
ld a, [wBattleAnimTemp0]
ld e, a
ld d, 0
ld hl, BattleAnimObjects
rept 6
add hl, de
endr
ld e, l
ld d, h
ld hl, BATTLEANIMSTRUCT_INDEX
add hl, bc
ld a, [wNumActiveBattleAnims]
ld [hli], a ; Index
ld a, [de]
inc de
ld [hli], a ; 01
ld a, [de]
inc de
ld [hli], a ; 02
ld a, [de]
inc de
ld [hli], a ; Frameset ID
ld a, [de]
inc de
ld [hli], a ; Function
ld a, [de]
inc de
ld [hli], a ; 05
ld a, [de]
call GetBattleAnimTileOffset
ld [hli], a ; Tile ID
ld a, [wBattleAnimTemp1]
ld [hli], a ; X Coord
ld a, [wBattleAnimTemp2]
ld [hli], a ; Y Coord
xor a
ld [hli], a ; X Offset
ld [hli], a ; Y Offset
ld a, [wBattleAnimTemp3]
ld [hli], a ; 0b
xor a
ld [hli], a ; 0c
dec a
ld [hli], a ; 0d
xor a
ld [hli], a ; 0e
ld [hli], a ; 0f
ld [hl], a ; 10
ret
BattleAnimOAMUpdate: ; cca09
call InitBattleAnimBuffer
call GetBattleAnimFrame
cp -3
jp z, .done
cp -4
jp z, .delete
push af
ld hl, wBattleAnimTempOAMFlags
ld a, [wBattleAnimTemp7]
xor [hl]
and $e0
ld [hl], a
pop af
push bc
call GetBattleAnimOAMPointer
ld a, [wBattleAnimTempTileID]
add [hl]
ld [wBattleAnimTempTileID], a
inc hl
ld a, [hli]
ld c, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wBattleAnimOAMPointerLo]
ld e, a
ld d, Sprites / $100
.loop
ld a, [wBattleAnimTempYCoord]
ld b, a
ld a, [wBattleAnimTempYOffset]
add b
ld b, a
push hl
ld a, [hl]
ld hl, wBattleAnimTempOAMFlags
bit 6, [hl]
jr z, .no_yflip
add $8
xor $ff
inc a
.no_yflip
pop hl
add b
ld [de], a
inc hl
inc de
ld a, [wBattleAnimTempXCoord]
ld b, a
ld a, [wBattleAnimTempXOffset]
add b
ld b, a
push hl
ld a, [hl]
ld hl, wBattleAnimTempOAMFlags
bit 5, [hl]
jr z, .no_xflip
add $8
xor $ff
inc a
.no_xflip
pop hl
add b
ld [de], a
inc hl
inc de
ld a, [wBattleAnimTempTileID]
add $31
add [hl]
ld [de], a
inc hl
inc de
ld a, [wBattleAnimTempOAMFlags]
ld b, a
ld a, [hl]
xor b
and $e0
ld b, a
ld a, [hl]
and $10
or b
ld b, a
ld a, [wBattleAnimTempPalette]
and $f
or b
ld [de], a
inc hl
inc de
ld a, e
ld [wBattleAnimOAMPointerLo], a
cp $a0
jr nc, .exit_set_carry
dec c
jr nz, .loop
pop bc
jr .done
.delete
call DeinitBattleAnimation
.done
and a
ret
.exit_set_carry
pop bc
scf
ret
; ccaaa
InitBattleAnimBuffer: ; ccaaa
ld hl, BATTLEANIMSTRUCT_01
add hl, bc
ld a, [hl]
and %10000000
ld [wBattleAnimTempOAMFlags], a
xor a
ld [wBattleAnimTemp7], a
ld hl, BATTLEANIMSTRUCT_PALETTE
add hl, bc
ld a, [hl]
ld [wBattleAnimTempPalette], a
ld hl, BATTLEANIMSTRUCT_02
add hl, bc
ld a, [hl]
ld [wBattleAnimTemp1], a
ld hl, BATTLEANIMSTRUCT_TILEID
add hl, bc
ld a, [hli]
ld [wBattleAnimTempTileID], a
ld a, [hli]
ld [wBattleAnimTempXCoord], a
ld a, [hli]
ld [wBattleAnimTempYCoord], a
ld a, [hli]
ld [wBattleAnimTempXOffset], a
ld a, [hli]
ld [wBattleAnimTempYOffset], a
ld a, [hBattleTurn]
and a
ret z
ld hl, BATTLEANIMSTRUCT_01
add hl, bc
ld a, [hl]
ld [wBattleAnimTempOAMFlags], a
bit 0, [hl]
ret z
ld hl, BATTLEANIMSTRUCT_XCOORD
add hl, bc
ld a, [hli]
ld d, a
ld a, (-10 * 8) + 4
sub d
ld [wBattleAnimTempXCoord], a
ld a, [hli]
ld d, a
ld a, [wBattleAnimTemp1]
cp $ff
jr nz, .check_kinesis_softboiled_milkdrink
ld a, 5 * 8
add d
jr .done
.check_kinesis_softboiled_milkdrink
sub d
push af
ld a, [FXAnimID + 1]
or a
jr nz, .no_sub
ld a, [FXAnimID]
cp KINESIS
jr z, .kinesis
cp SOFTBOILED
jr z, .softboiled
cp MILK_DRINK
jr nz, .no_sub
.kinesis
.softboiled
.milk_drink
pop af
sub 1 * 8
jr .done
.no_sub
pop af
.done
ld [wBattleAnimTempYCoord], a
ld a, [hli]
xor $ff
inc a
ld [wBattleAnimTempXOffset], a
ret
; ccb31
GetBattleAnimTileOffset: ; ccb31 (33:4b31)
push hl
push bc
ld hl, wBattleAnimTileDict
ld b, a
ld c, 10 / 2
.loop
ld a, [hli]
cp b
jr z, .load
inc hl
dec c
jr nz, .loop
xor a
jr .done
.load
ld a, [hl]
.done
pop bc
pop hl
ret
_ExecuteBGEffects: ; ccb48
callab ExecuteBGEffects
ret
; ccb4f
_QueueBGEffect: ; ccb4f (33:4b4f)
callab QueueBGEffect
ret
; ccb56 (33:4b56)