Genuary 2023 Day 31 - Remix one of your previous works

January 31, 2023
pico-8 open-source
Genuary 2023 Day 31 - Remix one of your previous works
-- genuary #31 2023
-- remix one of your previous works
-- by carson kompon
gridw=22
gridh=22
dotsize=2
angle=0
spinam=2/(60*16)

hgw=gridw\2
hgh=gridh\2

pal({[0]=143,15,8,137,9,139,3,131,1,140,12},1)

camera(-64,-64)
::_::
	cls(1)
	local gridspacing=4+(sin(t()/16)+1)*4
	local pts={}
	for i=-hgw,hgw do
		for j=-hgh,hgh do
			local px=i*gridspacing
			local py=j*gridspacing
			local dist=sqrt((px*px)+(py*py))
			local dir=atan2(px,py)+angle
			add(pts,{
				x=cos(dir)*dist,
				y=sin(dir)*dist/2,
				z=4+sin(t()+(i-j)/16+(j-i)/5)*4
			})
		end
	end
	local lwr=flr(#pts/2)+1
	local upr=#pts
	local i,j,tmp
	while true do
		if lwr>1 then
			lwr-=1
			tmp=pts[lwr]
		else
			tmp=pts[upr]
			pts[upr]=pts[1]
			upr-=1
			if upr==1 then
				pts[1]=tmp
				break
			end
		end
		
		i=lwr
		j=lwr*2
		while j<=upr do
			if j<upr and pts[j].y<pts[j+1].y then
				j+=1
			end
			if tmp.y<pts[j].y then
				pts[i] = pts[j]
				i=j
				j+=i
			else
				j=upr+1
			end
		end
		pts[i]=tmp
	end
	for i=1,#pts do
		pt=pts[i]
		fillp()
		circfill(pt.x,pt.y,dotsize+(gridspacing-4)/4,0)
		fillp()
		circfill(pt.x,pt.y-pt.z,dotsize,flr(2.5+pt.z))
	end
	angle+=spinam
	flip()
goto _