Genuary 2023 Day 6 - Steal Like An Artist

January 06, 2023
pico-8 open-source
Genuary 2023 Day 6 - Steal Like An Artist
-- genuary #6 2023
-- steal like an artist
-- by carson kompon
frain={}
fsmile=0
pal({[0]=0,7,5,128,2,136,8,137,9,10,138,11,139,131,140,129},1)
cls()
function colcycle(z,l)
	z=z or 0
	l=l or 1
	return 3+((t()/16+z)*13*l)%13
end
::_::
	t4=t()*4
	
	-- top left pump
	clip(0,0,54,7)
	for i=1,16do
		x=rnd(54)y=rnd(7)
		circfill(x,y,1,colcycle((x+y)/20/16))
	end
	rectfill(0,0,35,2,0)
	rectfill(11,3,16,3,0)
	rectfill(0,3,6,5,0)
	rectfill(53-(sin(t())+.5)/2*5,3,53,4,1)
	
	-- frog rain
	clip(62,69,4,49)
	if(fsmile>0)fsmile-=1
	for i=1,8 do
		circ(62+rnd(4),69+rnd(49),1,0)
	end
	if flr(t()*60)%20==0 then
		add(frain,{
			x=62+rnd(4),
			y=69,
			c=14+rnd()\1,
			hs=0
		})
	end
	for o in all(frain) do
		o.hs+=0.1
		o.y+=o.hs
		pset(o.x,o.y,o.c)
		if(o.y>=118)del(frain,o)fsmile=4
	end
	
	-- top left square
	clip(14,14,41,41)
	rectfill(14,14,55,55,0)
	for i=1,16 do
		for j=1,16 do
			pset(
				14+((i*6)+((j+i+rnd()%2)*3)+t4)%41,
				14+((j*6)+t4)%41,
				2
			)
		end
	end
	for i=1,8 do
		for j=1,4 do
			tt=t()+i/8
			x=34
			y=48-i*3
			s=8+sin(tt)*5
			line(
				x+cos(tt)*s,
				y+sin(tt)*s/2,
				x+cos(tt+(j/8))*s,
				y+sin(tt+(j/8))*s/2,
				colcycle(i/8)
			)
		end
	end
	
	-- top right square
	clip(69,10,49,49)
	for i=1,200 do
		x=rnd(2)-1
		y=rnd(2)-1
		if(x*x+y*y>1)circfill(93+x*24,34+y*24,1,0)
	end
	circfill(93+cos(t())*24,34+sin(t())*24,1,5)
	circfill(93+cos(-t())*22,34+sin(-t())*22,1,14)
	for i=1,200 do
		x=rnd(2)-1
		y=rnd(2)-1
		c=8+rnd(2)
		if(x*x+y*y>.7)c=0
		xx=93+x*24
		yy=34+y*24
		xd=xx-90
		yd=yy-31
		if(xd*xd+yd*yd>18^2)circfill(xx,yy,1,c)
	end
	for i=1,200 do
		x=rnd(2)-1
		y=rnd(2)-1
		c=4+(atan2(y,x)*11+t())%11
		if(x*x+y*y<=.8)circfill(90+x*15,31+y*15,1,c)
	end
	-- bottom right square
	clip(69,69,49,49)
	for i=1,100 do
		circfill(69+rnd(49),69+rnd(49),1,0)
	end
	for i=1,3 do
		d=t()/2+i/3+(t()/8)
		h=18+sin(t()*4+i/3)*6
		circfill(
			93+cos(d)*h,
			93+sin(d)*h,
			4,
			mid(colcycle(i/3),4,14)
		)
	end
	
	-- bottom left square
	clip(10,69,49,49)
	for i=1,9 do
		circ(34,93,rnd(20),0)
	end
	for i=1,4 do
		circ(34,93,(i*4+t()*20)%20,colcycle(0,16))
	end
	
	-- water in middle
	clip(60,10,8,58)
	rectfill(60,10,68,68,0)
	for i=0,8 do
		l=30+sin(t())*4+sin(t()+i/8)
		line(60+i,68-l,60+i,68,14)
	end
	
	-- water at bottom
	clip(0,118,128,10)
	rectfill(0,118,128,128,0)
	for i=0,127 do
		l=3+sin(t()+i/32)*2
		line(i,128-l,i,128,14)
	end
	
	--== full screen clip ==--
	clip(0,0,128,128)
	
	-- moving tractor beams on left
	rectfill(1,70,7,90,0)
	rectfill(1,99,7,116,0)
	for i=0,3 do
		for j=0,4 do
			tt=t()*32
			if(i%2==0)tt*=-1
			pset(1+i*2,70+(j*4+tt)%18,2)
			tt*=-1
			pset(1+i*2,99+(j*4+tt)%18,2)
		end
	end
	
	-- character screen on right
	rectfill(121,33,125,38,0)
	print(chr(16+flr(t())%212),122,34,colcycle(1,16))
	for i=1,4 do
		for j=1,6 do
			c=rnd({0,0,0,0,0,0,0,4+rnd(10)})
			pset(120+((i-1)*2),42+((j-1)*2),c)
		end
	end
	
	-- falling dots on the left
	line(3,25,3,44,0)
	for i=1,4 do
		pset(3,25+((i*5)+t()*16)%19,1)
	end
	
	-- frog eyes
	rectfill(58,123,69,126,0)
	rectfill(57,124,70,125,0)
	rectfill(59,121,68,122,0)
	rectfill(60,120,67,120,0)
	if fsmile > 0 then
		pset(61,121,1)
		pset(66,121,1)
	else
		line(61,121,61,120,1)
		line(66,121,66,120,1)
	end
	
	-- draw main sprite
	pal(7,1)
	sspr(0,0,128,128,0,0)
	pal(7,7)
	flip()
goto _