experiments-pico8/yoyodyne.p8

193 lines
6.6 KiB
Plaintext
Raw Normal View History

2023-03-08 01:29:31 +00:00
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
function _init()
yyl:init()
end
function _update()
yyl:update()
end
function _draw()
cls()
yyl:draw()
end
-->8
-- yoyodyne logo
yyl = {
ps = {},
filled = {},
ex = 0,
ey = 128,
vx = 0,
vy = -1,
done = false,
maxt = 60,
}
function dist(x1, y1, x2, y2)
return sqrt(
(x2-x1)^2 + (y2-y1)^2
)
end
function yyl:init()
for x=0,128 do
for y=0,100 do
seq = 128*y + x
-- y stem
if y >= 50 and x < 54 and x > 46 then
self.filled[seq] = 8
self.filled[seq-6] = 12
end
if y >= 50 and x > 75 and x < 82 then
self.filled[seq] = 8
self.filled[seq+6] = 12
end
-- arms of y
if y < 50 and y > 10 then
if abs(x-y) < 4 then
self.filled[seq] = 8
self.filled[seq-6] = 12
end
if abs(128-x-y) < 4 then
self.filled[seq] = 8
self.filled[seq+6] = 12
end
end
-- green o
local od = dist(x, y, 64, 30)
if od > 10 and od <= 15 then
self.filled[seq] = 11
end
-- blue o
if od > 15 and od < 20 then
self.filled[seq] = 12
end
end
end
end
function yyl:chk_stop(p)
-- round to nearest whole
seq = 128*flr(p.y+0.5) + flr(p.x+0.5)
if self.filled[seq] == p.c then
p.vy = 0
p.x = flr(p.x+0.5)
p.y = flr(p.y+0.5)
self.filled[seq] = true
-- note! there is a bug
-- nearby, filled is set
-- incorrectly sometimes
-- not sure why
end
end
function yyl:fill_it_in()
-- reset filled as workaround
-- for chk_stop bug
yyl:init()
for i,c in pairs(self.filled) do
y = flr(i/128)
x = i-(128*y)
add(self.ps, {x=x, y=y, c=c, vy=0,vx=0})
end
self.done = true
end
function yyl:update()
if not self.done then
-- emit pixels
for c in all{8, 11, 12} do
add(self.ps,
{x=self.ex, y=self.ey, c=c,
vy=rnd(2)+2*self.vy,
vx=rnd(2)+2*self.vx}
)
end
-- fill it in?
if t() > self.maxt then
self:fill_it_in()
end
-- move emitter
if self.ex < 128 then
self.ex += 1
elseif self.ex == 128 then
self.ey += 1
end
end
-- update pixels
for i, p in pairs(self.ps) do
if p.vy > 0 then
p.x += p.vx
p.y += p.vy
self:chk_stop(p)
if p.y < 0 or p.y > 128 or p.x < 0 or p.x > 128 then
deli(self.ps, i)
end
end
end
end
function yyl:draw()
for p in all(self.ps) do
pset(p.x, p.y, p.c)
end
if self.done then
print("d", 64, 52, 11)
print("y", 64, 58, 11)
print("n", 64, 64, 11)
print("e", 64, 70, 11)
end
end
__gfx__
00000000000000bbbbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000bbcccccbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000bcccccccccb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
8000000000bccc88888cccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
c80000000bccc8000008cccb00000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
cc8000000bcc800000008ccb0000008c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ccc800000bcc800000008ccb000008cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
cccc80000bcc800000008ccb00008ccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
bcccc8000bccc8000008cccb0008cccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0bcccc8000bccc88888cccb0008ccccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00bcccc8000bcccccccccb0008ccccb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000bcccc8000bbcccccbb0008ccccb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000bcccc80000bbbbb00008ccccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000bcccc8000000000008ccccb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000bcccc80000000008ccccb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000bcccc800000008ccccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000bcccc8000008ccccb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000bccc8000008cccb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000bcc8000008ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__sfx__
000f041e00500005001d550225502255027550275502e5502e55027550275503055027550225501f5501b5501b5501f55022550275502c5502d5502d5502855026550255502655027550245501f5501b55016550