summaryrefslogtreecommitdiff
path: root/engine/anims/engine.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/anims/engine.asm')
-rwxr-xr-xengine/anims/engine.asm314
1 files changed, 314 insertions, 0 deletions
diff --git a/engine/anims/engine.asm b/engine/anims/engine.asm
new file mode 100755
index 000000000..ae3bdde28
--- /dev/null
+++ b/engine/anims/engine.asm
@@ -0,0 +1,314 @@
+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, HIGH(Sprites)
+.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
+ callfar ExecuteBGEffects
+ ret
+
+; ccb4f
+
+_QueueBGEffect: ; ccb4f (33:4b4f)
+ callfar QueueBGEffect
+ ret
+
+; ccb56 (33:4b56)