*_WNFy=1m$Q! i6Z.L&>8 02TvͫgE#2Tv2Tv?wxxwwݍ݈hh݈~w~ww興xw~~~燍؍x~x興興؈؍舆莍興興WUUWގވ؍}xw~舎舎h~ݎff興펎nfeLJuwwxx莎؍w~w݈}ގݎfގmefuuvfh~w~w~xvfh舎fX莈w{|U興nh݈؍~~݈舍ff舎莈UUUuUUugu舎~xww莈mhVe興XUxxww}{xx興莈؈荈؍}~舎興xxx莈x؎h戈ehXX戈WnjXxLJ莎興wػ݋{wwx興hhhn荈莈fXxňȌx~ڪywx莈莈莎莈舎ֈއwލnh舎Xhww}̻||w舎hVXx|x|x興x}ךکzzw|xxxxw~hxwww}www莈舎舎興xwxwwwwxwwxxݧfm٭w}興臈wxxLjxxX舅h舎興x{|{w興xXX莎n؎~舎wxwwwxwxxxwxxxwx}DIiiiwxxxxẍ莎舎xwxxwwxxxwwwww݈x~wxwxȇX興xxxwwwxwwwwwww׍wxw}xxwxxwxMdIMyMD}wx興wxw}}}zwwwxxx舎xwwww׈xxxxwww}wwwxxxxwxwxwwwxXŌw׻}}wwgzևxڗDy݇wx~xwwfFdV}y݈xwx~wwwxיךw|xxX舎興fWUwU\\||x{xXwzw莎|wii{舎ww|x̷{{ȅXUXxx|ݪ׷idهxxz}mFfׇww63333dzwxxxwxwxxתwwww莎莎興UxUuxXuxwǷxzz{wxxwx興ww|ww|ww׷}w}njWUXw\}׭wwٝ}w4wwxwwGTC36gw}wwק}gm٧zwzwwxxwwwwx}www݇wwwxxwwxx}w}xwxwxxwwwwwwwwwwxw莎wxwwxwwww}www}wwwxw}wwxםwMUFTUw}wwwwI}deYmDfMVg}mv{xx刈wwwxxwwxwxxwwwwxww}www}x&"233}}xxwwיm"Cc3CD33MDDFfi}wwwx興興xxxxwwwwwwwxׇxx興xחi׈wwxwwwתyǼwȅX興xxxwwxwx}wwwx}m}xw~xxw=RB$,d}ww݈wv}֙}454FIdDMcדyywzxLjw莎興xwwx}w}wwwww興ww}wxxww}www}w}ww}www|xXx{xxxxwxw؈}wxGcE=e56ezwwxx=U5mxwwww="cMfddetTebm}w}קz莌莎nnXwږjwwxw}FIdwwxwwwg֙ijiڙ}w{XȈn興xxx]2c6236"vׇw}x%2"&efw}xfR62b"23#cdSDvwz興莈舎莈xxٖIMDw}}wxxwDDDwwwwxwwMfMٙIٙ}wxȌLj興莎莎xww=cEMb2=bdww}wwm-Q!%f}w}=216%4%$%cbb3ݭwxwww興莈興wwww}wv}}wxwwwxw}w}www}}}wwwwwxxx舎Ȏ興x~w}}ؔ6eE7eUxw=&Umw}w}'\&=U67V}Mfvw}wwwxwxw舎^舎X舎臇xxwFMtDfwwwMMFDwwwwMFGFMtzwz׷wxwxx|xx莈興臈xw}w&!6Q%}}w" !lw}!&!-QGIf֝}xw}wxww}ww{ˌ舎興興x}MIIID}xxwwMDdwwwMIDIDM{zzwxwxxwxw莎舎xw}}wJ=a27Qsec}wwwm&Q!cwx}}Q1=a1-bvFׇw؇wׇׇx莎xxw}wmwxxwwxxfwwxwwm}}w}ww}wwxxwxxxxxxȎxxx~xwvFv=USU=tx}x}&,feem}w&V56dwmmmwwwwxwwwxxwwwxw莎Xx~xx~wwwwxf3d&!b!bf}}wwxm& %#em}dF}www}ww~爈舎莈莈wxxח=4D٧zwwwxw}MD4Fm}w}6Cv}xxwwwwx興興興xwwwm==R6cw}}Q!"&cf}mc&2m=w}w}xx~~莎莈莈wwxw}w}wwww}wgwxwxwww爈興莈Ȉ~wxxxxxm=RUfv}wf!mR%mmvwwׇwx~wxww燈^莎興xwwwwxdTddӭwxwMf6c}dCxwxww與舎hhn興xwx興w؇}w=V"!b`wwwm emV}wxwݍxxxwwxxw莈莎興興wxwwxm44DDdwwww}CUfw43vwwwwx興莈~wxw}wxxwݝ}#,}}}}fgf,vw}}www}ww}ww臈興xxwxxwׇggm}}wxwwmwwg}}xwwwwwwwxxxwww興xxw݇~xxxxwww}}=mmR\aR֔wwfU-m}f}w}}w=www؍w燈莈wxw|x興~xwwwwwmTd46ݩ}cccyx݈www{׈{xwxwxxw興興nxxywx}w}x}ww-V !`v}wfQ}}w׍}}w}www}wx與莎XU舎wxxx~xxwwz3Dd4C}ID4ԝw}}ww}}}}w׈xx莈興興wwwxwww}wwxwwwwwGm!R!&mfff6smmffmmmm}mfxwwwׇxx興wwxwxw爈wxwxwwv}d}g}}}f}}mg}m}wwxxxxx興興h興舎Έטxwwׇxxw}w}ffgfmf"Rw%--,UcRbSVcQRg}wx}莎舌Xxwwؗ}؍}xxwxx}}}w}m&&m}m& % aR!aR}}הwwwx舎X興xxLjx{x}xwwxw莈xxw}wMm6D3w}wwgD463C=C3M3D4IIDDIݩ}ݍxw莈莈~xxwxw}wwwwww}}}wwwmm"bPfm}m,Q &b%b,RRR=mgv}wwxx~W舎興xxww}}wxxwwxwwwxwx}m}m}}}wv}wm}}wׇwxw興舎興~興XΈwxxww}mםtxyׇww}w}mfUa}m6vfvmVfSe2V<7V,M2֝xw腈xh}펆莈̋wwzzzwxwwxwx}}TScxxww}xFDTdDFFFmyxxwhw~݈興zxwxw}I}mxwtw}w}wwx}}ww}}Q}wwwfa"!""&"#V"ewwwwwwxuh興xw}zz{}}}ww}}w׍w}w}D3d}x}xwxTMCDDDIM֧{x莈舎w~wwwwwwww}vffm}mffm bm}w}mmw}gc","R16RC=3ԝtxwwwxxh}興xx{}ק}}}}}}m}}fvf}ww}}wwwxݝyw}ww}}w舎舎xxxȈxwwGVs##}&6a7b,fUfmcf%#f%&U,]eefm=MdfUm}mmdf\f&fL=eD3ݪxwx{舌刈X~ff膎|XxȈzfMdDIVDMd6Midd4FF56iwwywmC4vw}}wmDzfzw{ȇXX؍~~݆hwxxxwxx}f"53V6,VS]bf"UM3fR"be"bm}}}w}wg \v}}ww&V2&"2&2b53fzx{wx׍؆V莈xxwwfٙf֔DDdFTFfimCC=DCݙdwxxwzFUC}wxwwxxwwfMMٚmw{x玎~؆UxwwwxxyMf32s%6&"!-R6&Rcm}%=P'Q"f}wi]fm}w}}wVB7SBGR93yݙ}wx興舎xwxw}w}v}}wxwwݩwwwxmw}www݇x؎xuwww{wxww3"dU3U5-e%6\RUlSmdmf7wt}-e=a,}www}ݝd=ftdVt݇wxx刈~݆wuŌx~x{xx}הg%#U3#!"&"&a"Qa}}}ygVw}ww64C3cdDٍwwww興hw~׍mfhhXxUݧ{ۙIDMMDDi94DD}ww}x}xzwww=44MTwwxwwxxxwzzwnj莈膈؈~؆x|xXwwww~~w$"463#&b1=Qb"%cc"}w}}mwywww6R=R&wwwwwwxMb4Eٖ}www膈與wwxww}wm}}mf}mv}wwxwwMmwwxwwvw}wxwwwxwwxwxww}ww}wwxw興vW|ẋxww}wfGbFmee&bwmfw}Rw$}=%ׇ}~wwwxw}}DfM׷{xxxX舅hhxmhXuueX|xw{wwz{iFmDGz}w}wxwwwdd}wwwwMFvwwwxxwxؚf{ȈxXn؍؍~݆VUǼw|ˈxwx{zwMD]2R-V2&"e64}m}}ww}w}R64}}%"uxww}}}xwwwm6Dٔٷxww|w臈hwmfhuuVx興xw{x|z{M֔Mi{z׈wxwxxx}3dwwww}FDݪ}wwwxwתz}XWލ؍~؍UXxxx興~wwxJwMR5#2Gcrmtff}}ww#cm}}ww=R!}ww݇wwxwxDmٝvxhx興xxxww}wݩwwwxwxwwf}wwxwwzwv}ׇwxxw}w}wwވvWX|xwẇwxwxxxxw}}fmwwwmffUsww݇x7\%FVw݇wwwwzݙwך׷{wȈX興hxgwUWuUxȈ^wwxwwz}}www}}wwxxxwݦٙiiwxݖMFwwxxww|ẅXxXވ؍~׍VUww||xxxxxwwxxxwx׈wwwww׍}wxwm32"}}w}w}6""&"ֈxxxwwxwwLj興XhhwmfXvxUuxwxwxwxwxw}}ٙiׇwwwx}MM}w玈wx{xxȈX莈؇~؍VX\|ẍxw臇wxwwxwww}}ww}wxwwwwf-dC#%cwwwwwm7bBF5݇ww}xxxxwwxwX؍x興wwxwxwwx~wxww}}wwwx}}}}wwxxxxxx興玍hX|Wx{wUwwxwwwww}xxwww}}w}=U5cVmwxMV6Feԝywwxxxxxxxwwwxxw^nhxwhvXwWxň{x舎x莈xxwׇ}ؗ&###2cwwxw&#"-Cwwwwxxxxwxwx̋莈臍hhvvWwwXe莎莈xwww}wxwx}ڽ{wx興wXX؍}hXuWw|wUww興興wx興臈xw}MFbC35xxwwםRDG6ԝ}xw興wxw興؍興莈興莈xwx}w}}}xw}www}興wވVuȅȌxȈȎ莈~~xxw}wםfFMVIׇwwxwwgSdMUtDew~~ȇxxxxW莈X舎؈݈hh^莈興xxx{wwwxwڪywwxh荎xwhxw舎臈~wwwxwx=D4633ݪwxwwxxww}mTdMcMDmwwxwLjwx舍~݈nh興xxxxx{ׇxxwwګwxh莎wގnhXuxXx舎xxxxwwwwwMdc}wxxwwx}gdԗyIwx興Ȉ舎އ؈舎舎xxxxxxw׍w}x}wxwxwwxx݇XLjX莈xwdFfFwwww~wwݗԖymf}wx莎x莎興~~؎nf舆h莎xx||xxwڽz{Ljhn݆n興x莈wwwxIMIׇxwxMfMzڝ}x^莈~hf舆x|wwwxw{{{ۈxn興X莈興wwwwwwwjii}xwxwx}٦zzw興興舎~莈wxׇxwx݇wxwww}x͌hX^Ȉ腈Ljwxwmjݦ}xxxwݪ{zfwnh興舎wxxxǻתڪwx興wwzڭx莎莎xWu̼|˷wlwww̋||莈xxw|wۻۺxxx莇w۸w興wxxxxwx莈xwwW掎XUwwwݍ|}|w}|xxuw||wX舎nfWvuWUu||uẆXhWXXuuunfXw\w||̌|wUWW|uU|hhmxVuWuUUuUhXXUx莈hfXUDžWUh興xxUhdžWUhhf興ލ؈興h݈~w~~x؍~}~~~ww~w~www~w~w莈莎 -- title: byte jam 4 -- author: evilpaul, @evilpaul_atebit@icosahedron.website -- desc: Coded live in an hour for FieldFxDemo bytejam -- license: MIT License -- version: 0.1 -- script: lua mPi=math.pi mRandom=math.random mSqrt=math.sqrt mSin=math.sin mCos=math.cos mAbs=math.abs mAtan=math.atan mFloor=math.floor mMin=math.min function mLerp(a,b,v) return a+(b-a)*v end function mClamp(a,min,max) if amax then return max end return a end function cheapAssBloom(limit,size,color) local i=0 for y=2,131+2,6 do for x=2,239+2,6 do if charBuffer[i]>limit then circ(x,y,size,color) end i=i+1 end end end -- charset magic charSetSrc=" `'->|=:{;!*x@XKq2#W" charSet={} for i=0,#charSetSrc-1 do charSet[i]=string.sub(charSetSrc,i+1,i+1) end charSetMod=#charSetSrc-1 -- palette for i=0,15 do local v=(i/15)^1.3 poke(0x3fc0+i*3+1,mClamp(mLerp(0,455,v),0,255)) poke(0x3fc0+i*3+0,mClamp(mLerp(0,205,v),0,255)) poke(0x3fc0+i*3+2,mClamp(mLerp(0,105,v),0,255)) end function TIC() cls(0) -- textmode fx local t=time()/1000 math.randomseed(t/10) local arcs=mRandom(1,10) local offX=mSin(5.451+t*0.82)*20+mSin(7.413+t*0.31)*20 local offY=mSin(8.953+t*0.99)*20+mSin(5.483+t*0.58)*20 local rot=mSin(2.321+t*0.32)*5 local travel=-t local twist=mSin(4.123+t*0.51)*.02 local bright=mSin(1.453+t*0.52)*.25+.25 local fade=mSin(mMin(mMin(t%10,5),mMin(-(t%10)+10,1))*mPi/2) for y=0,136,6 do local dy=136/2-y+offY for x=0,239,6 do local dx=239/2-x+offX local dist=mSqrt(dx*dx+dy*dy) local ang=mAtan(dx,dy)+rot+dist*twist local v=mSin(ang*arcs) v=v*mSin(dist*.025+travel) v=v+bright v=v*fade v=mClamp(v,0,1)^2 v=mFloor(v*charSetMod) print(charSet[v],x,y,1,true) end end -- greets text rect(3*6,3*6,13*6,3*6,0) print("Textmode <3",4*6,4*6,1,true) -- capture tet screenBuffer={} for i=0,136*240 do screenBuffer[i]=peek4(i) end -- blurred cells charBuffer={} local i=0 for y=0,136,6 do for x=0,239,6 do local v=0 for cy=y,y+5 do for cx=x,x+5 do v=v+pix(cx,cy) end end charBuffer[i]=v i=i+1 end end -- cheap-ass bloom cheapAssBloom(3,20,1) cheapAssBloom(5,10,2) cheapAssBloom(10,5,3) cheapAssBloom(12,3,4) cheapAssBloom(14,2,5) -- elements assemble! math.randomseed(time()) local i=0 for y=0,135,2 do local cy=mSin(y/135*mPi)^.4 for x=0,239 do local cx=mSin(x/239*mPi)^.4 local v=screenBuffer[i]*8 v=v+peek4(i)+mRandom()*2 pix(x,y,v*cx*cy) i=i+1 end y=y+1 for x=0,239 do local cx=mSin(x/239*mPi)^.4 local v=screenBuffer[i]*8 v=v+peek4(i)+mRandom()*2 pix(x,y,v*cx*cy*.8) i=i+1 end end end --lastT=0 --function OVR() --local newT=time() --print(1000/(newT-lastT),202,1,12) --lastT=newT --end