experiments-pico8/games/yoyodyne.p8
2023-04-16 15:13:45 -05:00

338 lines
23 KiB
Lua

pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
function _init()
yyl:init()
end
function _update60()
yyl:update()
end
function _draw()
cls()
yyl:draw()
end
-->8
-- yoyodyne intro v1
-- by yoyodyne
yyl = {
ps = {},
filled = {},
ex = 0,
ey = 128,
vx = 0,
vy = -1,
done = false,
maxt = 30,
}
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.vx = 0
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)+8)*self.vy,
vx=(rnd(2)+8)*self.vx}
)
end
-- fill it in?
if t() > self.maxt then
self:fill_it_in()
end
-- move emitter
if self.ey == 128 and self.ex < 128 then
self.ex += 1
self.vx = 0
self.vy = -1
elseif self.ex == 128 and self.ey > 0 then
self.ey -= 1
self.vx = -1
self.vy = 0
elseif self.ey == 0 and self.ex > 0 then
self.ex -= 1
self.vx = 0
self.vy = 1
else
self.ey += 1
self.vx = 1
self.vy = 0
end
end
-- update pixels
for i, p in pairs(self.ps) do
if p.vy != 0 or p.vx != 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
__label__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00c00c0000880000000000000000000000000000000000000000000000000cc0cc00cc000000000000000000000000000000000000000000000880008000c000
0000c0000008008000000000000000000000000000000000000000000c0c0000000000c000000000000000000000000000000000000000000800008000cc0000
000000c0c000880800000000000000000000000000000000000000000000c00000000c0000c000000000000000000000000000000000000000008000c0000000
000000000cc000088800000000000000000000000000000000000c0000000000000c000000000000000000000000000000000000000000000080000c00000000
0000000ccc00c0008800000000000000000000000000000000000c00000c0000b000000000000000000000000000000000000000000000088000800c00000000
0000000000cc0000880000000000000000000000000000000000000000cb000b00b000000c0000c00000000000000000000000000000080080880000c0000000
000000000cc0cc0880800000000000000000000000000000000000c000000000b00bb000c00ccc0000000000000000000000000000000888800c0ccc00000000
00000000000c0c008088000000000000000000000000000000c0000bb0b00b0bbb0000bb000c0000000000000000000000000000000088880800c00c00000000
0000000000c000cc080000000000000000000000000000000c0c0000bb0bb0000bb00bb00000c0c0c00000000000000000000000008080000000c00000000000
00000000000c00c0008080000000000000000000000000000cc0cb00000bbbbb000b000000b000c0c00000000000000000000000008880000000c00000000000
0000000000000000c0c0880880000000000000000000000000000000000b0000000000b0000000000c000000000000000000000080088000cc00000000000000
000000000000000000c08080800000000000000000000000000000000000000000000000b0b0000cc000000000000000000000000800080cc0c0000000000000
00000000000000000c000000080000000000000000000000000b000000000000000000000000b00c00000000000000000000000000088000c0c0000000000000
0000000000000000c0cc00808080000000000000000000000000bbb000000000000000000b00000c00c0000000000000000008088000c0c00000000000000000
00000000000000000c0c0c088800000000000000000000c000b0000b0000000000000000000000000000000000000000000000080000c00c0000000000000000
00000000000000000cc0c000008080000000000000000c0000000bb000000000000000000000000000000000000000000008808000c00c000000000000000000
000000000000000000cc000008008000000000000000000cc0bb0000000000000000000000bb00b0000000000000000000088008000000c00000000000000000
0000000000000000000c00c000080080000000000000000000b00000000000000000000000bbb0b00c0c000000000000008008880cc00c000000000000000000
00000000000000000000c0ccc008008080000000000000c00000b0b00000000000000000000b0bb0000000000000000080000880000cc0000000000000000000
000000000000000000000000c0c080880000000000000000c0bb0b00000000000000000000000000000000000000000008808800c00c00000000000000000000
000000000000000000000000000c00800080000000000000c00000000000000000000000000000b0000000000000000088088c00000000000000000000000000
0000000000000000000000000000c0000808000000000000000000b0000000000000000000b0b0bc0c0000000000080080080000000000000000000000000000
0000000000000000000000000cccc0c000800000000000000000b0b00000000000000000000bb00cc0000000000080800080c0cc00000000000000c000000000
00000000000000000000000000000ccc00000800000000000c000bb000000000000000000000b0b000000000000008888800c00c00000b8c0000000000000000
000000000000000000000000000c0c00c880800000000c000c00000000000000000000000b0b000000000000000808800000bcc0000000000000000000000000
000000000000000000000000000cc0000000000000000000000b0000000000000000000000bb0b0c00000000b80c0088cc0c0c00000000000000000000000000
0000000000000000000000000000cc00ccc8080800000000000bb00b0000000000000000bb000bb00c00c000808000000c0cc000000000000000000000000000
0000000000000000000000000000000c000080880800000c000c00b0b00000000000000000bb000000c0000008888000c0cc0000000000000000000000000000
00000000000000000000000000000000cc0000808000000cc0cc0bb00bbb0000c008000bb00b0000cc00000080800ccc00000000000000000000000000000000
0000000000000000000000000000000cc000000088880000c0000bbb0b0008000000b0bbbbb000c0000008888088cccc00000000000000000000000000000000
000000000000000000000000000000000000c00008088000c00000000b00b00000b0000bbb000c0c000080008000c00cc0000000000000000000000000000000
0000000000000000000000000000000000c0000c000880000000c0c0000000b000b0b00b000ccc0c00008808800cc0cc00000000000000000000000000000000
0000000000000000000080000000000000c0c0c0088008000cc0c0c000000bbb000b0b0b0000c0c000888088000000c000000000000000000000000000000000
0000000000000000000000000000000000000cc00c0080080000000cc000bb00bb000b0c00000000008808000cccc00000000000000000000000000000000000
080000000000000000000000000000000000c00cc0000880000000000000c00c000c00cccc000c00080888000ccc000000000000000000000000000000000000
0000b0000000000000000000000000000000000c0c00000800000000cc000000cccc0000000c0008000000000000000000000000000000000000000000000000
00b000000000000000000000000000000000000cc00000088800000cc0000c00000cc000ccc0008000000000c0c0000000000000000000000000000000000000
00000000000000000000000000000000000000000000c008008000000cc00cc0c0c000c0000008080080cccc0c00000000000000000000000000000000000000
0000000000000000000000000000000000000000c0c0000000000000000cc0cc0cc000c00000808080800000c000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000808800000000000000000000000008000c000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c0000008000000000000000000000000008800cc00000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c0000c0800000000000000000000000000008088c000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000008000000000000000000000000088000c0000000000000000000000000000000000000000000
000000000000000000000000000000000000000000ccc000800080000000000000000000000000008800cc000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c0c00008000000000000000000000000000880000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c00008808000000000000000000000000800000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00000000000000000000000000000000080000c0000c0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00c080080000000000000000000000000000080000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00000880080000000000000000000000800080000c000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c00000000000000000000000000000000000880000c0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c000008000000000000000000000000000080080c000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c00008000000000000000000000000000008800000cc0000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000800000000000000000000000000000008800c0000000000000000000000000000000000000000000
00000000000000000000000000000000000000000c0000c0800000000000000000000000000000000000c0000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000080000000000000000000000088000000c00c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c00080000000000000000000000000000000880000cc0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00000080000000000000000000000000000008cc00000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c000000000000000000000000000000000080080c0c0000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c00c000800000000000000000000000000000080c000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00000008000000000000000000000000088000000c000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000c00800000000000000000000000008000800c00c00000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c0000000000000000000000000000000000880000c000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c0000000008000000000000000000000008080000cc000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000c0000800000000000000000000000000880000c00c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c00000000800000000000000000000000000800800c00000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c000c0008000000000000000000000000080008000000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c0000000000000000000000000000000000000880c000c00000000000000000000000000000000000000000
00000000000000000000000000000000000000000000cc008000000000000000000000000000000008c000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000c0c0000080000000000000000000000000008008000c0000000000000000000000000000000000000000000
000000000000000000000000000000000000000000c0c00008000800000000000000000000000080000c000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c0008000000000000000000000000000000008c000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c0000000800000000000000000000000000000000c0000000000000000000000000000000000000000000
00000000000000000000000000000000000000000c000000080000000000000000000000000000008000000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c00c00000000000000000000000000000000008880000c00000000000000000000000000000000000000000
00000000000000000000000000000000000000000000c00000800000000000000000000000000808000c00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000cc00000080000000000000000000000008080000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c000c08000000000000000000000000000080000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c000000000000000000000000000000008080800000c00000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000c00000000000000000000000000000008080c000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c00000c00000000000000000000000000000880000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000cc0000080000000000000000000000000008000000c0cc0000000000000000000000000000000000000000
00000000000000000000000000000000000000000cc0000080088000000000000000000000008888080000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000c00c0c08880000000000000000000000000000008c0ccc00000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c0c0008808000000000000000000000008008000cc0c00000000000000000000000000000000000000000
00000000000000000000000000000000000000000c000cc080080800000000000000000000000880880c00cc0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c0c000008008000000000000000000000000008080c0c000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c00000800080000000000000000000000008000c0000c0000000000000000000000000000000000000000
00000000000000000000000000000000000000000c0000c0000080000000000000000000000000088000c0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000c000c0080080000000000000000000000080080000c0c0000000000000000000000000000000000000000
000000000000000000000000000000000000000000c0000c0800080000000000000000000000880088cccc000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__sfx__
000f041e00500005001d550225502255027550275502e5502e55027550275503055027550225501f5501b5501b5501f55022550275502c5502d5502d5502855026550255502655027550245501f5501b55016550