-
Notifications
You must be signed in to change notification settings - Fork 0
/
particle.p8
356 lines (328 loc) · 20.1 KB
/
particle.p8
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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
pico-8 cartridge // http://www.pico-8.com
version 33
__lua__
--particle explosion
--by wiiasd
poke(0x5f5d,255)
p_rnd=true --random position
p_auto=false --auto explosion
p_auto_freq=10 --frequency of auto explosion, up to 30/s
p_x=64
p_y=64
p_num=100 --# of p each explosion
p_max_num=1000 --# of p allow in the pool before resuing
p_r=20 --radius
p_vx=2
p_vy=2
p_life=1 --life time
p_style=0 -- 0=>fill 1=>wire
plt_num=1 --palete using (1-#plt)
--palette of explosion.
--randomly pick a color
--from the selected subtables
plt={{9,10},
{8,9,10},
{2,8},
{2,8,14},
{6,7},
{5,6,7},
{1,12},
{1,12,13},
{3,11},
{3,11,12}}
function _init()
sparks_add(p_max_num)
end
function _update()
sparks_update()
if p_auto then auto() end
control()
end
function _draw()
cls()
sparks_draw()
show_stat()
end
function control()
if btnp(5) then
x=p_x
y=p_y
if p_rnd then
x=rnd(127)
y=rnd(127)
end
explode(x,y,p_vx,p_vy,
p_r,p_life,
p_num,plt_num)
end
if btnp(4) then
plt_num+=1
if plt_num>#plt then
plt_num=1
end
end
end
function show_stat()
cpu=stat(1)
clr=7
if cpu>0.333 then clr=9 end
if cpu>0.666 then clr=8 end
active_p=0
for s in all(sparks) do
if s.active then
active_p+=1
end
end
print("p's:"..active_p
.."/"..#sparks,5,10,7)
print("cpu:"..(flr(cpu*100)).."%",
5,19,clr)
print("plt:"..plt_num,5,117,7)
end
tps_c=0 --counter for wait frame
function auto()
w_frame=30/p_auto_freq
x=p_x
y=p_y
if p_rnd then
x=rnd(127)
y=rnd(127)
end
tps_c+=1
if tps_c > w_frame then
tps_c=0
explode(x,y,p_vx,p_vy,
p_r,p_life,
p_num,plt_num)
end
end
-->8
sparks={}
function sparks_add(num)
if #sparks+num > p_max_num then
num=p_max_num-#sparks
end
for i=1,num do
add(sparks,{
x=0,
y=0,
vx=0,
vy=0,
r=0,
clr=9,
life=0,
shrink=0,
active=false,
})
end
end
function sparks_update()
for s in all(sparks) do
if s.active then
s.x += s.vx
s.y += s.vy
s.r -= s.shrink
if s.r <= 0.001 or
s.x < 0-s.r or
s.x > 128+s.r or
s.y < 0-s.r or
s.y > 128+s.r then
--del(sparks,s)
s.active=false
end
end
end
end
function sparks_draw()
for s in all(sparks) do
if s.active then
if p_style==0 then
circfill(s.x,s.y,s.r,s.clr)
elseif p_style==1 then
circ(s.x,s.y,s.r,s.clr)
end
end
end
end
--try best to return num of
--unactive sparks from the table
function reusable(num)
index={}
for s_i=1,#sparks do
s=sparks[s_i]
if not s.active then
add(index,s_i)
end
if #index==num then
break
end
end
if #index<num then
for s_i=1,#sparks do
s=sparks[s_i]
if s.active then
add(index,s_i)
end
if #index==num then
break
end
end
end
return index
end
-->8
function explode(x,y,
vx,vy,
r,life,
num,plt_num)
clr=plt[plt_num]
p_index=reusable(num)
for i=1,#p_index do
s=sparks[p_index[i]]
s.active = true
s.x = x
s.y = y
s.clr = rnd(clr)
s.r = r * rnd(1)
s.life = life
s.shrink = s.r / (life * stat(7))
s.vx = vx * (rnd(2)-1)
s.vy = vy * (rnd(2)-1)
end
end
__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__label__
0000000000000000000000000000000000000000000000999999990000000aaaa88888880000000000000000000000aaaaa0000aaa0000000000000000000800
00000000000000000000000000000000000888000000009999999900000000aaaa8888880000000000090000000000aaaaa00aaaaaaa0000000000000000888a
000000000000000000000000000000000a888880000000999999988800008880aaa8888800000000000900000000000aaa000aaaaaaa0000000080099900a8aa
00000000000000000000000000000000aa8888800000008999999988800888888a8888800000000000000000000000000000aaaaaaaaa000000000999990aaaa
000000000000000000000000000000000a88888000000888000898888888888888888800000000000aaa00000aaaaaa00000a999aaaaa000000009999999aaaa
000000000000000000000000000000000008880000aa888880088888888888888888880000000000aaaaa000aaaaaaaaa99099999aaaa080000009999999aaaa
0000000000000000000000000000000000000000aaa8888888888888888888888888880000000000aaaaa00aaaaaaaaaa999999999aa0888000009999999aaaa
0000000000000000000000000000000000000900aaa8888888888888888888880888880000000000aaaaa00aaaaa999aaa99999999aa008000000099999aa888
000000000000000000000000000000000000999aaaa88888888888888888888008888800000000009aaa00aaaa9999999a999999998880000000000999aa8888
00000000000000000000000000000000000009aaaaaa888889088808888888000888880000000099999990aaaa9999999a9999999888800000000000000a8888
000007770070007700000707077707770000aaaaaa88888888000000889990000888880000000099999990aaa999999999008999888880000000000000008888
000007070700070000700707070707000000aaaaa8888888888008880999990008888800000009999999990aa9999999990aaaaaaa8800000000000000000888
000007770000077700000777077707770000aa8a88888888888088888999999009888900000009999999990809999999999aaaaaaa8000000000000000008880
0000070000000007007000070707000700000aaa888888888880888889999990099999000000099999999990aa999999999aaaaaaaa000000000000000088888
00000700000007700000000707770777000000aa8888888888008888899999909999900000000099999a99990a999999999aaaaaaaa000000000000000888889
000000000000000000000000000000000000000008888888800008880999990099999000000000999999999900999999999aaaaaaaa0000000aaa00080888889
000000000000000000000000000000000000000000888000000000089999900099999000000000009999999900a9999999aaaaaaaa00000a0aaaaa0888888889
00000000000000000000000000000000000000000000000000000088890000000999a00000000000009999908889999999aaaaaa9a0000000aaaaa0080088888
0000000000000000000000000000000000000a0000000000000009989000000800000000000000000009998888888999aaaaaaaa900000000aaaaa0000008880
0000007707770707000007700777000007770777077707770707009999000000000000000000000000000088888a8aaaaaaaaa990000000000aaa00999000888
0000070007070707007000700007000099870007000700070007990090888000000000000000000000800888888888aaaaaaa9aa000000000000099999998888
0000070007770707000000700007000998870077a77707770079999008888800000000000000000008889888888888aaaaaaaaaaa00000000008889998888888
0000070007000707007000700007000999870007a7aa07000799999908888800000000000000000000899888888888aaaaaaaaaa000000000088888988888888
0000007707000077000007770007007999970777a7770777079799990888880aaa000000000000000099998888888aaaaa9a9a00000000000888888888888888
000000000000000000000000000000009990009aaaaa000009999999008880aa9aa0000000000000009999888888899999999900000000999888888888888888
0000000000000000000000000000000000000999aaa900000099999000000aa999aa000000000000009999998889999999aa9a00000009999888888888888888
00000000000000000000000000000000000009999999000aaa09990000000aaa9aaa000000000000000999990009999999aaaa00aaa0999889888a8988888000
0000000000000000000000000000000000009999999900aaaaa0000000000aaaaaaa000000000000000099900000099999aaa00aaaaa9998899aaa999888aaa0
000000000000000000000000000000000009999999900aaaaaaa00000000a0aaaaa0000000000000000080000000099999aa000aaaaa998889aaaaa9aaaaaaa0
00000000000000000000000000000000000090099900aaaaaaaaa000000aaa0aaa0000000000000000088800000009999900000aaaaa898888aaaaaaaaaaaaaa
00000000000000000000000000000000000000000000aaaaaaaaaa000000a0000aaa000000000000000080000000009990000008aaa8888888aaaaaaaaaa99aa
00000000000000000000000000000000000000000000aaaaaaaaaa0000000000aaaaa0000000000000000000000000000000000888888808888aaaaaaaaa99aa
000000000000000000000000000000000000000000000a9aaaaaaa8000000000aaaaa00000000000000000000000000999000000888880088888889aaaaa99a0
00000000000000000000000000000000000000000000009999aaa88800000999aaaaa00000000000000000000000099999900000088800000888999999a99aa0
00000000000000000000000000000000000000000000009999900080008099999aaa00000000000000000000000099999a99000000000000009999999999a000
00000000000000000000000000000000000000000000000999000000000099999000000000000000000000000000099999990000000000000009999999990000
00000000000000000000000000000000000000000000000000000000000099999000000000000000000000000000099999990000000000000000999999900000
00000000000000000000000000000000000000000000000000000000000009990000000000000000aaa000000000009999900000000000000000000999000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000aaaaa00000000009999000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000888000000000000aaaaaaa0000000099999000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000008888800000000000aaaaaaa0000000099999000000000000000000000000000909
00000000aaa0000000000000000000000000000000000000000000000000088888880000000000aaaaaaa0000000099999000000000000000000000000009999
0000000aaaaa000000000000000000000000000008000000000088800000088888880000aaa0000aaaaa00008880009990800000000000000000000000000999
000000aaa999a000000000000000000000000000000000000008888800a008888888000aaaaa0000aaa000888888800008888000000000000000000000000999
000000aa9999900000000000000000000000000000000000008888888aaa00888880000aaaaa0000000000888888808888888880000000000000000000000999
880090a9999999000000000000000000000000000000000000888888808000088a00000aaaaa0009990008888888888888888880000000000000000000000099
888a00099999998000000000000000000000000000000000008888888000000000000000aaa00099999008888888888888888888800000000000000000000009
a8aaa009999999000000000000000000000000000000000000088888a00000000000000000000999999908999888888888888888800000000000000000000000
888a800099999900000000000000000000000000000000000000888a00000aaa0000000000000999999989999988888888888888880000000000000000000000
888999000999900000000000000000000000000000000000000000000000aaaaa000000000000999999999999998888888888888880000000000000000000000
889999900000000000000000000000000000000000000088800000000000aaaaa000000000000099999899999999998888888888880000000000000000000000
889999900000000000000000000000000000000000000888880000000000aaaaa000000000000009990899999aaa99a988888888800000000000000000000000
8899999000000000000000000000000000000000000088888880000000000aaa000000000000000000008999aaaaaa9988888888800000000000000000000000
888999aaa9990999000000000000000000000000000088888880000000000000000000000000000000000899aaaaaaa988888888000000000000000000000000
88aa888a99999999900000000000000000000000000088888880000000000000000000000000000000000888aaaaaaa888888888000000000000000000000000
88a998aa999999999900000000000000000000000000088888000000000000000000000a00000000000008888aaaaaa8888888a0000000000000000000000000
8999999999999999990000000000000000000000000000888000000000000000000000aaa000aaa000008888888aaa88888888a0000000000000000000000000
09999999a999899999000000000000000000000000000000000a0000a00000000000900a000aaaaa00008888888aa88888888aa0000000000000000000000000
9999999999a88899900000000000000000000000000000000000000aaa00000000099900000aaaaa0000888888aaa8888888aa00000000000000000000000000
999999999aaa8999aa00000000000000000000000000000080000000a000000000009000000aaaaa0000088888aaaa888a800000000000000000000000000000
999999999aaaaaaaaa00000000000000000000000000000888000000000aaa00000000000000aaa00000088888aaaaaaaa800000000000000000000000000000
099999999aaaaaaaaa9000000000000000000000000000008000000000aaaaa0000000000000000000000098889aaaaaa8000000000000000000000000000000
0999999999aaaaaaa9900000000000000000000000000000000000000aaaaaaa0000000000000000000000999999aaaa00000000000000000000000000000000
000999999aaaaaaaa9900000000000000000000000000090000000000aaaaaaa0000000000000000000000009990999000000000000000000000000000000000
0000000888aaaaaa99000000000000000000000000000000000000000aaaaaaa0000000000000000000000000000000000000000000000000000000000000000
09000888aaaaaaaa900000000000000000000000000000000000000000aaaaa00000000000000000000000000000000000000000000000000000000000000000
89909888aaaaaaa00000000000000000000000000000000000000000000aaa000000000000000000000000000000000000000000000000000000000000000000
89aa888aaaaaaaaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999000000
8aaa888aaaaaaaaa80000000000000000000000000000000000000000aaa00000000000000000000000000000000000000000000000000000000009999900000
aaaa888aaaaaaaaa880000000000000000000000000000000000000aaaaaaa000000000000000000000000000000000000000000000000000000009999900000
aaaaa888aaaaaaa88800000000000000000000000000000000000aaaa9aaaa00000000000000000000000000000000000008000000000000a00000999990aaa0
aaaaa888aaaaaaa8880000000000000000000000000088800aaaaaaaa99aaaa000000000000000000000000000000000000000000000000000000009990aaaaa
aaaaa9a888aaa88880000000000000000000000000088888aaaaaaaa999aaaa000000000000000000000000000000000000000000000000000000000000aaaaa
aaaaaaa00000088800000000000000000000000008888888aaa8aaaaa9aaaaa0000000000000000000000000000000000000000000000000000000000aaaaaaa
aaaaaa000000000000000000000000000000000088888888a999aaaaaaaaaa0000000000000000000000000000000000000000000000009000000000aaaaaaa0
aaaaaa00000000000000000000000000000000888888888889999aaaaaaaaa000000000000000000000000000000000000000000000000000000000aaaaaaa00
0aaa00000000000000000000000000000000008888888888899998aaa8aa80000000000000000000000000000000000000000000000000000000000aaaaaaa00
00000000000000000000000000000000000008888888888889999888888880000000000000000000000000000000000000009999000000000000000aaaaaaa00
000000000000000000000000000000000000088888888888999988888888880000000000000000000000000000000000000999999000000000000000aaaaa009
0000000000000000000000000000000000000888888888899999888888888800000000000000000000000000000000000009999900000000000000000aaa0099
00000000000000000000000000000000000000888888888899aaa988888888000000000000000000000000000000000000099999000000000000000000000009
0000000000000000000000000000000000000088888888888aaaaa88a88880000000000000000000000000000000000000009990000000000000000000000000
0000000000000000000000000000000000000000888998888aaaaa9aaa8880000000000000000000000000000000000000000000000000000000000000a00000
0000000000000000000000000000000000000000899999888aaaaa98aa8800000000000000000000000000000000000000000000000000000000000000900000
00000000000000000000000000000000000000009999999889aaa998aaa88000000000000000000000000000000000000000000000000000a000000009990000
00000000000000000000000000000000000000009999999899999999888880000000000000000000000000000000000000090000000000000000000000900000
00000000000000000000000000000000000000099999999999999998888880000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000089999998888999988888880000000000000000000000000000000000000000000000000000000009000000000
000000000000000000000000000000000000000888999888889999888888800000000000000000000000000000000000000000000a0000000000099900a00000
00000000000000000000000000000000000000008888888988899988888880000000000000000000000000000000000000000000aaa00000000000900aaa0000
000000000000000000000000000000000000000088888888888899988888000000000000000000000000000000000000000000000a0000000000000000a00000
00000000000000000000000000000000000000000888888898888888888000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000aaa00000008889999888888000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000aaaaa00000099999990000000000000000000000000000000000000000000000000000000000000000000000000aaa00
00000000000000000000000000000000aaaaa00000009999900000000000aaa00000000000000000000000000000000000000000000000000000000000aaaaa0
00000000000000000000000000000000aaaaa0000000099900000000000aaaaa0000000000000000000000000000000000000000000000008000099900aaaaa8
000000000000000000000000000000000aaa0000000000000000999000aaaaaaa000000000000000000000000000000000000000000000088800999990aaaa88
00000000000000000000000000000000000000000000000000099999aaaaaaaaa0000000000000000000000000000000000000000000000a99999999900aa888
0000000000000000000000000000000000aaa00000000000000999888aaaaaaaa000000000000000000000000000000000000000000088aaa999999990000888
000000000000000000000000000000000aaaaa00000000000009988888aaaaaa00000000000000000000000000000000000000000008889a9999999900000888
000000000000000000000000000000000aaaaa000000000000008888888aaaa00000000000000000000000000000000000000000000888999999999000888088
000000000000000000000000000000000aaaaa000000000000008888888000000000000000000000000000000000000000000000088988999999999908888808
0000000000000000000000000000088800aaa0000000000000008888888000000000000000000000000000000000000000000000889998999999999998888880
00000000000000000000000000088888880000000000000000000888880000000000000000000000000000000000000000000aaa888988099999999998888880
0000000000000000000000000008888888900000080000000000008880000000000000000000000000000000000000000000aaaaa88888099999999998888880
0000000000000000000000000088888888890000000000000000000000000000000000000000000000000000000000000000aaaaa88899999999899908888800
00000000000000000000000a0a888888888900000000000000aaa00000000000000000000000000000000000000000000000aaaaa99999999999888000888000
0000000000000000000000aaa088888889890000000000000aaaaa000aaa00000000000000000000000000000000000000000aaa999999999998888800000000
00000000000000000000000a00088888999000000000000888aaaa00aaaaa0000000000000000000000000000000000000000099999999999888988800000009
00000000000000000000000000088888890000000999008a888aaa00aaaaa000000000000000000000000000000000000000009999999999888888aaa0000099
0000000000000000000900000000088800000000999990aaa88aa000aaaaa00000000000000000000000000000000000000000999999999888888aaaaa008889
00000000000000000000000000000000000000099999998a888000000aaa00000000000000000000000000000000000000000009999999998aa88aaaaa088888
0000000000000000000000000000000000000009999999a888a0000aaa0000000000000000000000000000000000000000088800999099999aaaaaaaaa08888a
00000000000000000000000000000008000000099999990aaa000aaaaaaa000000000000000000000000000000000000008888800089999999aaaaaaa00888aa
0000000000000000000000000000000000a000009989900000000aaaaaaa000000000000000000000000000000000000088888880009888999aaaa0000008aaa
000000000000000000000000000000008aaaa000099900000000aaaaaaaaa00000000000000000000000000000000000088888880088888889aaaa0000000aaa
0000000000000000000000000000000888aaaaa0000900000000aaaaaaaaa0000000000000000000000000000000000008888888008888888aaaa00000000aaa
000000000000000000000000000000008aaaaaa0000000000000aaaaaaaaa00000000000000000000000000000000000008888800888888888aaa000000000aa
0000000000000000000000000000000aaaaaaaaa0000000000000aaaaaaa0000000000000000000000000000000000000008880008888888888000000000000a
0000000000000000000000000000000aaaaaaaaa0000000000000aaaaaaa00000000000000000000000000000000000000000000088888888880000000000000
0000000000000000000000000009990888aaaaaa000888000000000aaa0000000000000000000000000000000000000000000000008888888880000008000000
000000000000000000000000009998888888aaa00088888000000000000088800000000000000000000000000000000000000000008888888800000000000000
000000000000000000000000009998888888aaa000888880000000000008888800000000000000000000000000000000000000000088888a8000000000000000
0000000000000000000000000099888888888000008888800000000000888888800000000000000000000000000000000000000008888888a00a000000900000
0000000000000000000800000009888888888a0000088800000000000aaa88888000000000000000000000000000000000000000088888880800000009aaa000
0000000000000000008880000000888888888aa00000000000088800aaaaa888800000000000000000000000000000000000000008888888888000000aaaaa00
000000000000000000a8a000000008888888aaa0000000000088888aaaaaaa88000000000000000000000000000000000000000000888880080000000aaaaa00
00000000000000000aaaaa00000008888888aaa0000000000088888aaaaaaa80000000000000000000000000000000000000000000088800900000000aaaaa0a