summaryrefslogtreecommitdiff
path: root/src/home/play_animation.asm
blob: b81786288c4c873016fb80d3b580276e9265ffd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
; return nc if wd42a, wd4c0, and wAnimationQueue[] are all equal to $ff
; nc means no animation is playing (or animation(s) has/have ended)
CheckAnyAnimationPlaying:
	push hl
	push bc
	ld a, [wd42a]
	ld hl, wd4c0
	and [hl]
	ld hl, wAnimationQueue
	ld c, ANIMATION_QUEUE_LENGTH
.loop
	and [hl]
	inc hl
	dec c
	jr nz, .loop
	cp $ff
	pop bc
	pop hl
	ret

; plays duel animation
; the animations are loaded to a buffer
; and played in order, so they can be stacked
; input:
; - a = animation index
PlayDuelAnimation:
	ld [wTempAnimation], a ; hold an animation temporarily
	ldh a, [hBankROM]
	push af
	ld [wDuelAnimReturnBank], a

	push hl
	push bc
	push de
	ld a, BANK(LoadDuelAnimationToBuffer)
	call BankswitchROM
	ld a, [wTempAnimation]
	cp DUEL_SPECIAL_ANIMS
	jr nc, .load_buffer

	ld hl, wDuelAnimBufferSize
	ld a, [wDuelAnimBufferCurPos]
	cp [hl]
	jr nz, .load_buffer
	call CheckAnyAnimationPlaying
	jr nc, .play_anim

.load_buffer
	call LoadDuelAnimationToBuffer
	jr .done

.play_anim
	call PlayLoadedDuelAnimation
	jr .done

.done
	pop de
	pop bc
	pop hl
	pop af
	call BankswitchROM
	ret

Func_3ba2:
	ldh a, [hBankROM]
	push af
	ld a, BANK(Func_1cac5)
	call BankswitchROM
	call Func_1cac5
	call HandleAllSpriteAnimations
	pop af
	call BankswitchROM
	ret

Func_3bb5:
	xor a
	ld [wd4c0], a
	ldh a, [hBankROM]
	push af
	ld a, [wDuelAnimReturnBank]
	call BankswitchROM
	call HandleAllSpriteAnimations
	call CallHL2
	pop af
	call BankswitchROM
	ld a, $80
	ld [wd4c0], a
	ret

; writes from hl the pointer to the function to be called by DoFrame
SetDoFrameFunction:
	ld a, l
	ld [wDoFrameFunction], a
	ld a, h
	ld [wDoFrameFunction + 1], a
	ret

ResetDoFrameFunction:
	push hl
	ld hl, NULL
	call SetDoFrameFunction
	pop hl
	ret