ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿOoUô?ÿCCCÿ?4ÄÿÿÿÿõÿÿÿTÿÿÿDÿÿÿDÿÿVDô4dLDCôÌD4ÿÿÿCDÿÿ?DÿÿOCÿÿe4ÿÿVõÿoõÿÿÿÿÿÿÿÿÿLDóÿD4ÿÿCCÿÿ4Dõÿÿcõÿÿ?öÿÿÿÿÿÿÿÿÿ 000000000000>00000000000000000À?‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™‘™™™™™™™™™DD@DDDD@DD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@DDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™DDDDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@DDDDDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@@DDDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@DDDDDDDD@DD@@D‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@@DDD@DDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™DDDDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™@DDD@DDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™ DDDD@DDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™™™™™™™™™™™™™™™™ DDDDD@DDDÀÌ@DDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™@DDDDÌ DDÌÌ DDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™™@DDDDÀÌÌ@DÀÌÌÌ@DDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™ DDDDÌÌÌ DÀ ÌÌ@DDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™ DDDDÌ Ì DÀÌÌÌ@DDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™ DDDDÌÌÌ DÌÌ DDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™ DDDDDÀÌÌ@DDÀÌ@DDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™@DDDDDÌ DDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™@DDDDDD@DDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™@DDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™‘™™™™™™™™™‘™™™™‘™™™™™™™™@DDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™‘™™™™™™™™™™™™™™D‘™™™™™™™™™™™™™™@DDDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™ D@DDDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™ D@DDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™ D@DDDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™™DDDDDDDDDDDDDDDDDDD‘™™™™™™™™™™™™™™DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDD@DD@DDD@DDDDDD@DDDDDD&-- title: Fabracid (deeper meaning of a hypnoglow remix) -- author: TPOLM -- desc: intro for Black Valley 2023 -- license: MIT -- script: lua frame=0 -- filter ladder stage outputs a=0 b=0 c=0 d=0 -- filter feedback highpass output z=0 cutoff=0 pitch=1 kick=0 hat=0 snare=0 se={"deep","mean","ing","hypn","glow","acid","booz"} --tunnel,stars,text,balls,smiley r={ {0,1,1,0,1}, {0,1,1,0,1}, {0,1,1,1,1}, {0,0,1,0,0}, {1,1,0,1,0}, {1,1,1,0,0,0}, --reused for sound {1,0,0,1,0}, {0,0,1,0,0} } st=0 function green_guy(x,y,wt,ht,wb,hb,o) local guy_color = ({4,5,11})[math.random(1,4)] local guy_outline = 0 local eye_color = 12 local m1=math.random() -- left eye height local m2=math.random()*2 -- left hand ypos local m3=math.random()*2 -- right hand ypos local m4=math.random()*1.4 -- size of hand local m5=math.random()*.06 -- eye separation local m6=math.random() -- bellybutton -- left ear circ(x-wt*.5,y-o-ht*.7,wt*.3,guy_color) circb(x-wt*.5,y-o-ht*.7,wt*.3,guy_outline) circb(x-wt*.5,y-o-ht*.7,wt*.15,guy_outline) -- right ear circ(x+wt*.6,y-o-ht*.7,wt*.3,guy_color) circb(x+wt*.6,y-o-ht*.7,wt*.3,guy_outline) -- top / head clip(x-wt,y-ht*2-o,wt*2+2,ht*2+1) elli(x,y-o,wt,ht,guy_color) ellib(x,y-o,wt,ht,guy_outline) clip() line(x-wt+1,y-o,x+wt,y-o,guy_outline) -- rest of right ear circ(x+wt*.6,y-o-ht*.7,wt*.3-1,guy_color) circb(x+wt*.6,y-o-ht*.7,1,guy_outline) -- eyes -- left elli(x-wt*(.2+m5),y-o-ht*.3,wt*.2,ht*(.1+m1*.1),eye_color) ellib(x-wt*(.2+m5),y-o-ht*.3,wt*.2,ht*(.1+m1*.1),guy_outline) circ(x-wt*(.2+m5),y-o-ht*.3,0,guy_outline) --line(x-wt*.3,y-o-ht*(.55+m1*.1),x-wt*.15,y-o-ht*(.5+m1*.1),guy_outline) line(x-wt*(.2+m5),y-o-ht*(.4+m1*.1), x-wt*(.35+m5),y-o-ht*(.5+m1*.1),guy_outline) clip(x-wt*(.2+m5)-wt*.12,y-o-ht*(.5+m1*.1)-wt*.12, wt*.28,wt*.12) circb(x-wt*(.2+m5),y-o-ht*(.5+m1*.1), wt*.12,guy_outline) clip() -- right elli(x+wt*(.2+m5),y-o-ht*.35,wt*.2,ht*.2,eye_color) ellib(x+wt*(.2+m5),y-o-ht*.35,wt*.2,ht*.2,guy_outline) circ(x+wt*(.17+m5),y-o-ht*.34,0,guy_outline) --line(x+wt*.3,y-o-ht*.65,x+wt*.1,y-o-ht*.65,guy_outline) line(x+wt*(.2+m5),y-o-ht*.55, x+wt*(.2+m5),y-o-ht*.6,guy_outline) --clip(x+wt*(.2+m5)-wt*.12,y-o-ht*.6-wt*.12, -- wt*.28,wt*.22) circb(x+wt*(.15+m5),y-o-ht*.6, wt*.1,guy_outline) clip() -- bottom / body clip(x-wb,y,wb*2+2,hb*2) elli(x,y,wb,hb,guy_color) ellib(x,y,wb,hb,guy_outline) clip() line(x-wb+1,y,x+wb,y,guy_outline) -- hands -- left local whx=wt*.12+m4 -- radius of hand local lhx=x-wt*1.3 -- center pos local lhy=y+ht*(.18*m2) local lhx2=lhx-whx local lhy2=lhy-whx*1.4 --local lhx3=lhx local lhy3=lhy-whx local lhx4=lhx-whx*1.7 --local lhy4=lhy --local lhx5=lhx2 local lhy5=lhy+whx*1.4 --local lhx6=lhx local lhy6=lhy+whx -- palm of hand circ(lhx,lhy,whx,guy_color) circb(lhx,lhy,whx,guy_outline) -- right local rhx=x+wt*1.3+1 -- center pos local rhy=y+ht*(.18*m3) local rhx2=rhx+whx local rhy2=rhy-whx*1.4 --local lhx3=lhx local rhy3=rhy-whx local rhx4=rhx+whx*1.7 --local lhy4=lhy --local lhx5=lhx2 local rhy5=rhy+whx*1.4 --local lhx6=lhx local rhy6=rhy+whx -- palm of hand circ(rhx,rhy,whx,guy_color) circb(rhx,rhy,whx,guy_outline) -- feet --rect(x-w,y+w,w*2,w/3+1,4) clip(x-wb,y+hb*.8,wb*2,hb*.24+1) --left elli(x-wb*.3,y+hb,wb*.2,hb*.15,guy_color) ellib(x-wb*.3,y+hb,wb*.2,hb*.15,guy_outline) --right elli(x+wb*.5,y+hb,wb*.2,hb*.15,guy_color) ellib(x+wb*.5,y+hb,wb*.2,hb*.15,guy_outline) --line of soles on clipline clip() line(x-wb*.466,y+hb*1.04, x-wb*.13 ,y+hb*1.04,guy_outline) line(x+wb*.33,y+hb*1.04, x+wb*.66,y+hb*1.04,guy_outline) -- bellybutton --pix(x,y+hb*(.5+m6*.3),guy_outline) end function television(x,y,w) -- big box rect( x+1,y+1,w*1.2-2,w*.7-2,4) rectb(x+1,y-1,w*1.2-1,w*.7+2,0) rectb(x ,y ,w*1.2+1,w*.7, 0) -- buttons --[[for i=0,2 do for j=0,2 do rect(x+w*.96+i*w*.07,y+w*.1+j*w*.07,w*.05,w*.05,0) -- selected channel if i==1 and j==0 then rect(x+w*.96+i*w*.07,y+w*.1+j*w*.07,w*.05,w*.05,2) end end end --]] -- screen rect( x+1+w*.1,y+1+w*.1,w*.8-2,w*.5-2,3) rectb(x+1+w*.1,y-1+w*.1,w*.8-1,w*.5+2,0) rectb(x +w*.1,y +w*.1,w*.8+1,w*.5, 0) -- tv legs -- left rect(x+w*.1,y+w*.7,w*.08,w*.1,4) rectb(x+w*.1,y+w*.7,w*.08,w*.1,0) -- right rect(x+w*1.05,y+w*.7,w*.08,w*.1,4) rectb(x+w*1.05,y+w*.7,w*.08,w*.1,0) -- antena line(x+w*.5,y-w*.2,x+w*.7,y,0) line(x+w*.9,y-w*.2,x+w*.7,y,0) end function TIC() --{ -- hide mouse cursor poke(16379,1) -- scene tracker st=(frame//25600+hat//1%2+snare//1%2*2)%8 -- border color poke(0x3ff8,d) --} if r[st+1][1]>0 then -- tunnel effect, originally by pestis --for s=0,32640 do for s=time()%6,32640,6 do t=s%240-120 o=s/240-70 n=math.atan2(o,t) rs=(2+math.sin(3*n+time()/200))/(t*t+o*o)^.5*10 poke4(s,math.sin(n*6+math.sin(rs*20+snare))^2/rs) end else cls(d) end for x=1,11 do -- floating text if r[st+1][3]>0 then print(se[time()//200%7+1], 5, 40+st%3*20*math.sin(time()/500+x*d/50+st%3*x/2), x/2*d,0,10) end end if r[st+1][2]<1 then for sb=52,0,-1 do x = 108+math.sin(time()/500-10*sb/42+kick*.01)*100+snare y = 24+math.sin(time()/250-15*sb/42+kick*.01)*40 spr(1,x,86-y,15,1,0,0,2,2) end end -- audio --{ poke(0xff9d,0xd0) poke(0xff9c,60*pitch) poke(0xffaf,(15*(kick/500+.6)//1)<<4) poke(0xffae,kick) poke(0xffc1,((hat/28//1)<<4)+0xf) poke(0xffc0,0x80) poke(0xffd3,((snare/28//1)<<4)) poke(0xffd2,0x80) -- filter decay, LFO for subtle variation cutoff=cutoff*(.88-.04*math.sin(frame/7e3)) --} -- percussion envelopes -- kick pitch and amplitude env are the same var --{ kick=kick*.8 hat=hat*.6 snare=snare*.8 --} for i=0,31 do if frame%200==0 then step=frame//200 bar=step//16 phase=bar//8 section=(phase//2)%4 phase=phase%2 next_pitch=(({.9,.9,1,1,1,1,1,1.05,1.8,2,2,2,2,2.1,3,3.6,4,4.2})[math.random(18)])*(r[6][math.random(4+2*(step&1))]) --[[ next_pitch=({ 1,2,0,1,1,0,.9,0, 2,0,1,0,4,0,2.1,0, 1,1.05,0,2,1,0,.9,0, 2,0,1,0,4.2,0,3,0 })[step%((step%256<112 and step%256>96) and 8 or 32)+1] --]] if next_pitch>0 then cutoff=.011*(7+2*section)-.05*math.sin(frame*6.2832/48640) pitch=next_pitch end if step%4==0 and step//16%8<7 then kick=200 end if section>1 and step%2==1 and step//128%2==1 then hat=80 end if ((step%4==2) ~= (math.random(40-2*section)==1)) and step//128%2==1 then hat=255 end if (step%8==4 or math.random(80-4*section)==1) and section>0 and phase>0 then snare=200 end end v=frame%32/16-1 -- ridiculous 32x oversampling for j=0,31 do -- constant below is the filter resonance a=a+cutoff/pitch*(v-(2.3+.1*section)*(d-z-v)-a) b=b+cutoff/pitch*(a-b) c=c+cutoff/pitch*(b-c) d=d+cutoff/pitch*(c-d) z=z+((d-z)/64) end --{ -- set bass waveform poke4(0xff9e*2+i, math.max(0,math.min(d*6+8,15))) -- set kick waveform (could be done elssewhere) poke4(0xffb0*2+i, 8+8*math.sin(6.2832*i/32)) frame=frame+1 --} -- twirl balls if r[st+1][4]>0 then television(110+math.sin(time()/500+i*10)*120, (i*6-time()/10)%150-10, math.sin(time()/500+i)*5*(st%2)+5+kick*.2) end -- circles from center --[[ if r[st+1][5]>0 then circb(120, 68+math.sin(time()//200%9)*10*r[st+1][3], i/math.sin(time()/3e4)*4,math.sin(i+time()/200)) end --]] end -- smiley if r[st+1][5]>0 then x=math.sin(time()/1e3+kick/200*st%3)*80+120 y=math.cos(time()/3e3*pitch)*30+70 green_guy(x,y,20+pitch,20+kick,20+kick*.5,20+pitch,3) end vbank(1) rect(208,126,30,8,0) print("tpolm",209,127,12) rect(224,126,14,8,12) clip(224,126,14,8) print("tpolm",209,127,0) clip() vbank(0) end function BDR(l) poke(0x3ffa,math.sin(time()/800+l/32)*math.sin(time()/400+l/64)*snare) poke(0x3ff9,math.sin(time()/1e3+l/32)*math.sin(time()/1e3)*snare) end