*0аppp```PPP@@@000  02TvͫgE#2Tv2Tv̬̬̬̈̬̬̬̬̈̬̬̬̬̬̪쬪̬̬̬̪쬪 >?3>3~wDND>3DDNDf3333333>3DNDf>3333333DDDDDDNDf3333333>3333333DDDDDDDNDDDDDDDfff3n>3~~DD~NDDDDDDDfn>3wD~~DNDDDDfffff3n>3~~D~Nfffff63wwwwwD~wwww~DNDfffff3nffff>3~wwww~wwwD~wwwwNn >3wD~~wwDtNf fn~{wNnfw~{f fn~{w wwwwwުޙwwwwwwwwwww~wwwwwwwwwwwwnw~w~wwwwwwwwwnwwwfnw~wwwww~wwwwwwwwwn~ww~wwww~wwwwfnwwwww~wwwwwwwwwwwwwwwfff~wwwwfffnffffw~wwwwwwwwwwn~wNDDfnw~wwwwwwwwwDn~DNDDfn>3DwwwwwwwwD3DNDNDDDDDD>3>DwwwwwwwDD3DNDDDDDDNDDDDD>3>NDDDDDDtwwwwwwDDDDDD3DDDDDDDNDNDD>3>33333DDDDDDDDtwwwwwD=333333DNDD=3333333>3333CDD~wwwwwwD=>DND=3333333>DwwwwwwD>D>3>Dwwwww>>3>~wwwww>3wwwwwwwwww~wwwwwwww~wwww.""~~wwww.""w~wwww~w(""ww~wwwwww~~wwwww.""fw~wwww~~wwwww.""f~wwww~wwww~w"""""""""""""nfnvwwwnfff~"""""""""""""ffffww""""""""ffff+""f"""""vw""fnvww""UfffffwwwUffffNDffwwwwD^UUUUfffffNDffwwwwwDUUUUUUfff`fNDNDfvpwwwDDDDDDD^UffffNDNDDDDDDfwppwDDDDDDD^Ufff``DNDNDvwwwwwwwwwDDDDDDNDffffffDNDDDDDDNDwwwwwpwDDDDDDDHDffffDNNDwwwwwwpp@Dffff`f0NDDDDDD~N~wwwwwwwwwwwwNDDDDDDDfff`ff`3@DDDwwwwHwwpp~Dffffff`>3Dw~wwwwpppw~nff``fff>333wDwwwwwwwwwwwwwwwwwwwwwwwww~D~wwwfwwwwwwwwwwwwwwwwwwwww~ffffffffffffwwww~>~wwww~wwwwwwwwwwwww~wwwwwwwwwwwwwwwww~~wnfffffffffffwwwwww~w7w~wwwwwwwwwwwwwww~wwwwwwwwwwwwwwwwwww~~www-- title: test until -- author: evilpaul, @evilpaul_atebit@icosahedron.website -- desc: Travelling through space and time. -- license: MIT License (change this to your license of choice) -- version: 0.2 -- script: lua fpsLastT=0 function fps() t=time() d=t-fpsLastT fpsLastT=t print(math.floor(1000/d),0,0,15) end sqrt=math.sqrt atan2=math.atan2 sin=math.sin rand=math.random function clamp(a,min,max) if amax then return max else return a end --return math.max(math.min(a,max),min) end function lerp(a,b,alpha) return a+alpha*(b-a) end function v_cross(a,b) ax=a[1] ay=a[2] az=a[3] bx=b[1] by=b[2] bz=b[3] return {ay*bz-az*by,az*bx-ax*bz,ax*by-ay*bx} end function v_norm(a) x=a[1] y=a[2] z=a[3] l=math.sqrt(x*x+y*y+z*z) return {x/l,y/l,z/l} end function v_dot(a,b) return a[1]*b[1]+a[2]*b[2]+a[3]*b[3] end function v_minus(a,b) return {a[1]-b[1],a[2]-b[2],a[3]-b[3]} end function v_add(a,b) return {a[1]+b[1],a[2]+b[2],a[3]+b[3]} end function v_mult(a,s) return {a[1]*s,a[2]*s,a[3]*s} end function intersectPlane(pos,rayOrigin,rayDir) --denom=v_dot(normal,rayDir) denom=rayDir[3] --if math.abs(denom)>0.0001 then --t=v_dot(v_minus(pos,rayOrigin),normal)/denom t=v_minus(pos,rayOrigin)[3]/denom if t>=0 then --uax={normal[3],normal[1],normal[2]} --vax={normal[2],normal[3],normal[1]} --uax={1,0,0} --vax={0,1,0} hpos=v_add(rayOrigin,v_mult(rayDir,t)) --u=v_dot(v_add(hpos,pos),uax) --v=v_dot(v_add(hpos,pos),vax) u=v_add(hpos,pos)[1] v=v_add(hpos,pos)[2] return true,u,v,t end --end return false end for i=0,15 do poke(0x3fc0+i*3+0,i<<4) poke(0x3fc0+i*3+1,i<<4) poke(0x3fc0+i*3+2,i<<4) end ys=0 function TIC() ys=(ys+1)%2 for y=ys,135,2 do line(0,y,240,y,0) end hdg=math.sin(time()*0.000041)*.3 dist=20 height=math.sin(time()*0.00023)*4 from={-math.sin(hdg)*dist,height,-math.cos(hdg)*dist} at={0,0,0} fwd=v_norm(v_minus(at,from)) up={0,1,0} right=v_cross(up,fwd) up=v_cross(fwd,right) t=time()*0.0125 tz=t%10 td=math.floor(t/10) function dc() return (1-clamp(t-10,0,50)/50)*15.99 end for d=0,5,1 do dd=41-d*10-tz local ry0=(0-136/2)/240/2*1.5 local ry1=(136-136/2)/240/2*1.5 local rx0=(0-240/2)/240/2*1.5 local rx1=(240-240/2)/240/2*1.5 local ray ray=v_norm(v_add(fwd,v_add(v_mult(right,rx0),v_mult(up,ry0)))) local hit,u00,v00,t00=intersectPlane( {0,0,dd}, from, ray) ray=v_norm(v_add(fwd,v_add(v_mult(right,rx0),v_mult(up,ry1)))) local hit,u01,v01,t01=intersectPlane( {0,0,dd}, from, ray) ray=v_norm(v_add(fwd,v_add(v_mult(right,rx1),v_mult(up,ry0)))) local hit,u10,v10,t10=intersectPlane( {0,0,dd}, from, ray) ray=v_norm(v_add(fwd,v_add(v_mult(right,rx1),v_mult(up,ry1)))) local hit,u11,v11,t11=intersectPlane( {0,0,dd}, from, ray) local tdd=math.abs(td-d)%20 for y=ys,135,2 do local ya=y/135 local u0=lerp(u00,u01,ya) local v0=lerp(v00,v01,ya) local t0=lerp(t00,t01,ya) local u1=lerp(u10,u11,ya) local v1=lerp(v10,v11,ya) local t1=lerp(t10,t11,ya) local aud=(u1-u0)/239 local au=u0 local avd=(v1-v0)/239 local av=v0 local td=(t1-t0)/239 local t=t0 for x=0,239 do local su=au%4 local sv=av%4 if ((sv<0.1 or sv>3.9) and (su<0.5 or su>3.5)) then pix(x,y,dc()) elseif ((su<0.1 or su>3.9) and (sv<0.5 or sv>3.5)) then pix(x,y,dc()) else if tdd==3 then local di=av*av+au*au if di>5^2 and di<7^2 and (di<5.5^2 or di>6.5^2) then pix(x,y,dc()) end elseif tdd==14 then local di=av*av+au*au if di>2^2 and di<10^2 then local an=atan2(au,av) if sin(an*20+t/5)<.025 then pix(x,y,dc()) end end elseif tdd==7 then local di=av*av+au*au if di>7^2 and di<9^2 then local an=atan2(au,av) if sin(an*6-t/10)<.025 then pix(x,y,dc()) end end end end au=au+aud av=av+avd t=t+td end end end end function OVR() poke(0x3fc0+15*3+0,8<<4) poke(0x3fc0+15*3+1,15<<4) poke(0x3fc0+15*3+2,3<<4) rectb(5,5,230,126,15) rectb(223,7,10,122,15) for y=9,126 do if rand()>0.7 then line(225,y,230,y,15) end end rectb(7,7,20,20,15) for x=9,24 do y=sin(time()*0.0027+x*.12)+ sin(time()*0.0013+x*.02) y=y*4 pix(x,17+y,15) end rectb(7,28,20,8,15) if rand()>.9 then rect(9,30,16,4,15) end print(fwd[1],7,112,15) print(dd,7,118,15) print(t,7,124,15) --fps() end