-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparticles.asm
227 lines (159 loc) · 4.33 KB
/
particles.asm
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
load_particles:
lda #MAX_PARTICLE_EFFECT_AMOUNT
sta CurrentEffect
load_particles_loop
dec CurrentEffect
jsr load_single_particle_effect
lda CurrentEffect
cmpa #0
bne load_particles_loop
rts
load_single_particle_effect
lda #SINGLE_PARTICLE_EFFECT_AMOUNT
sta CurrentParticle
load_particle_effect_loop
dec CurrentParticle
jsr load_single_particle
lda CurrentParticle
cmpa #0
bne load_particle_effect_loop
rts
load_single_particle
jsr get_particle_index_to_a
ldb #0
ldx #ParticleActive
stb a,x
rts
add_particle_effect
lda #SINGLE_PARTICLE_EFFECT_AMOUNT
sta CurrentParticle
add_particle_effect_loop
dec CurrentParticle
jsr add_single_particle
lda CurrentParticle
cmpa #0
bne add_particle_effect_loop
rts
add_single_particle
lda CurrentEnemy
ldx #EnemyPositionX
ldb a,x
jsr get_particle_index_to_a
ldx #ParticlePositionX
stb a,x
lda CurrentEnemy
ldx #EnemyPositionY
ldb a,x
jsr get_particle_index_to_a
ldx #ParticlePositionY
stb a,x
ldx #ParticleVelocityX
jsr set_random_particle_velocity
jsr get_particle_index_to_a
ldx #ParticleVelocityY
jsr set_random_particle_velocity
ldb #20
jsr get_particle_index_to_a
ldx #ParticleTime
stb a,x
ldb #1
ldx #ParticleActive
stb a,x
rts
; expects velocity array in x and index in a
set_random_particle_velocity
exg a,b
jsr Random
anda #3
cmpa #0
bne set_random_velocity_in_a
adda #1
set_random_velocity_in_a
jsr randomize_a_sign
sta b,x
rts
update_particles:
lda #MAX_PARTICLE_EFFECT_AMOUNT
sta CurrentEffect
lda #30
ldb #0
jsr Moveto_d
update_particles_loop
dec CurrentEffect
jsr update_single_particle_effect
lda CurrentEffect
cmpa #0
bne update_particles_loop
lda #-30
ldb #0
jsr Moveto_d
rts
update_single_particle_effect
lda #SINGLE_PARTICLE_EFFECT_AMOUNT
sta CurrentParticle
update_particle_effect_loop
dec CurrentParticle
jsr update_single_particle
lda CurrentParticle
cmpa #0
bne update_particle_effect_loop
rts
get_particle_index_to_a
lda CurrentEffect
ldx #particle_offset_list
lda a,x
adda CurrentParticle
rts
update_single_particle
jsr get_particle_index_to_a
ldx #ParticleActive
ldb a,x
cmpb #0
beq update_particle_over
ldx #ParticleTime
ldb a,x
decb
stb a,x
cmpb #0
bne remove_particle_over
ldb #0
ldx #ParticleActive
stb a,x
remove_particle_over
jsr move_single_particle
jsr draw_single_particle
update_particle_over
rts
move_single_particle
ldx #ParticleVelocityX
ldb a,x
stb TestPosition
ldx #ParticlePositionX
ldb a,x
addb TestPosition
stb a,x
ldx #ParticleVelocityY
ldb a,x
stb TestPosition
ldx #ParticlePositionY
ldb a,x
addb TestPosition
stb a,x
rts
draw_single_particle
ldx #ParticlePositionX
ldb a,x
ldx #ParticlePositionY
lda a,x
jsr Moveto_d
jsr Dot_here
jsr get_particle_index_to_a
ldx #ParticlePositionX
ldb a,x
ldx #ParticlePositionY
lda a,x
nega
negb
jsr Moveto_d
jsr get_particle_index_to_a
rts