alexthescott.bad portal alt

-- bad portal alt
-- alexthescott
-- 9/8/20

p={143,142,133,13,141,130,140,131,129}
pal(p,1)

function dist(x1,y1,x2,y2)
	return sqrt((x1-x2)^2+(y1-y2)^2)
end

function new_particle(c)
	p={}
	p.x=64
	p.y=64
	p.xt=64
	p.yt=64
	p.a=rnd(1)
	p.oc=c
	p.c=c
	p.dx=cos(p.a)/4
	p.dy=sin(p.a)/4
	
	p.update=function(self)
		self.x+=self.dx
		self.y+=self.dy
		
		self.xt+=self.dx*0.75
		self.yt+=self.dy*0.75
		
		self.dx*=1.075
		self.dy*=1.075
		
		d=dist(self.x,self.y,64,64)
		
		if d>52 then
			self.c=self.oc+2
		elseif d>=32 then
			self.c=self.oc+1
		end 
	end
	
	p.draw=function(self)
		line(self.x,self.y,self.xt,self.yt,self.c)
	end
	
	p.destroy=function(self)
		return self.xt<=0 or self.xt>=128 or
			self.yt<=0 or self.yt>=128
	end
	
	p.debug=function(self)
		rectfill(0,0,10,10,0)
		print(self.d,0,0,7)
	end
	
	return p
end

function new_orbit(c)
	o={}
	o.s=2
	o.show=90+rnd(20)\1
	o.r=100
	o.a=rnd(1)
	o.ac=rnd(1)
	o.av=0.005
	o.c=c
	o.x=64+cos(o.a)*o.r/2
	o.y=64+sin(o.a)*o.r/2
	
	o.update=function(self)
		self.a+=sin(self.ac)/200
		self.ac+=self.av
		
		if self.ac>=1 then
			self.tc=0
		end
		
		self.x=64+cos(self.a)*self.r/2
		self.y=64+sin(self.a)*self.r/2
	end
	
	o.draw=function(self)
		circfill(self.x,self.y,self.s,self.c)
	end
	
	o.new_c=function(self,c)
		self.c=c
	end
	
	return o
end

function burn()
	for i=1,1200 do
		x=rnd(128)\1
		y=rnd(128)\1
		pc=pget(x,y)
		if pc%3!=0 then
			nc=rnd(2)\1
			pset(x,y,pc+nc)
			pset(x,y-2,pc+nc)
			pset(x,y+2,pc+nc)
			pset(x-2,y,pc+nc)
			pset(x+2,y,pc+nc)
		end
		pset(x,y,0)
	end
end

global_color=7
fc=0

particles={}

orbits={}
for i=1,10 do
	add(orbits,new_orbit(global_color))
end

-- expanding lines, expanding circle
ring_r=50
border_r=10

cls()
::♥::
if t()<2 then
	print("bad portal alt",36,64,7)
else
	burn()
	
	if fc>=2000 then
		fc=0
	end
	
	fc+=1
	
	if fc%2==0 then
		for i=1,8 do
			add(particles,new_particle(global_color))
		end
	end
	
	if fc%500==0 then
		global_color+=3
		global_color%=9
		for o in all(orbits) do
			o:new_c(global_color)
		end
	end
	
	for p in all(particles) do
		p:update()
		p:draw()
		if p:destroy() then
			del(particles,p)
		end
	end
	
	for o in all(orbits) do
		o:update()
		if fc%o.show<=80 then
			o:draw()
		end
	end
	
	if fc%500>400 and fc%500<425 then
		circ(64,64,ring_r,global_color)
		ring_r+=0.25
	else
		ring_r=50
	end
	
	if fc%500>300 and fc%500<350 then
		-- top left
		line(4,4,4+border_r,4)
		line(4,4,4,4+border_r)
		
		-- top right
		line(124,4,124-border_r,4)
		line(124,4,124,4+border_r)
		
		-- bottom right
		line(124,124,124-border_r,124)
		line(124,124,124,124-border_r)
			
		-- bottom left
		line(4,124,4+border_r,124)
		line(4,124,4,124-border_r)
		
		border_r+=0.75
	else
		border_r=10
	end
	
	circfill(64,64,4,0)
end
flip()
goto ♥