├── scario2.tic ├── fake-fft ├── fake-fft.tic ├── readme.md └── fake-fft.lua ├── sizecode-20230405 ├── dna.tic └── dna.packed.tic ├── fauxjiboink ├── screenshot.gif └── readme.md ├── jelly-hearts ├── jelly-hearts.tic └── readme.md ├── bytejam-20230313 └── robot-conveyor.tic ├── outline-2023 ├── jtruk-unicorn_blend_256.zip ├── unicorn-blend-256.packed.tic └── unicorn-blend-256.lua ├── eye-of-the-machine ├── eye-of-the-machine.tic └── readme.md ├── snippets ├── fft-test.lua ├── anaglyph.lua └── minimal-3d.lua ├── dotcube ├── readme.md └── dotcube.tic ├── bytejam-20230828 ├── bytejam-20230828-preshow.lua ├── bytejam-20230828.lua └── bytejam-20230828-directors.lua ├── lytejam-20230316 └── stencil-circles.tic ├── bytejam-20230814 ├── bytejam-20230814-preshow.lua └── bytejam-20230814.lua ├── martian-madrigal ├── readme.md └── martian-madrigal.lua ├── bytejam-20230220 └── robot-disco.tic ├── bytejam-20230515 └── bytejam-20230515-jtruk.lua ├── bytejam-20230501 ├── jam.lua └── directors.lua ├── lytejam-20230315 └── tube-worms.tic ├── lytejam-20230324 └── code.lua ├── lytejam-20230330 └── orbital.tic ├── bytejam-20230417 ├── directors.lua └── jam.lua ├── readme.md └── readyerrorone └── readyerrorone.lua /scario2.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/scario2.tic -------------------------------------------------------------------------------- /fake-fft/fake-fft.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/fake-fft/fake-fft.tic -------------------------------------------------------------------------------- /sizecode-20230405/dna.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/sizecode-20230405/dna.tic -------------------------------------------------------------------------------- /fauxjiboink/screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/fauxjiboink/screenshot.gif -------------------------------------------------------------------------------- /jelly-hearts/jelly-hearts.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/jelly-hearts/jelly-hearts.tic -------------------------------------------------------------------------------- /sizecode-20230405/dna.packed.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/sizecode-20230405/dna.packed.tic -------------------------------------------------------------------------------- /bytejam-20230313/robot-conveyor.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/bytejam-20230313/robot-conveyor.tic -------------------------------------------------------------------------------- /outline-2023/jtruk-unicorn_blend_256.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/outline-2023/jtruk-unicorn_blend_256.zip -------------------------------------------------------------------------------- /eye-of-the-machine/eye-of-the-machine.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/eye-of-the-machine/eye-of-the-machine.tic -------------------------------------------------------------------------------- /outline-2023/unicorn-blend-256.packed.tic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativenucleus/tic-80-sketches/HEAD/outline-2023/unicorn-blend-256.packed.tic -------------------------------------------------------------------------------- /snippets/fft-test.lua: -------------------------------------------------------------------------------- 1 | -- For testing FFT builds of TIC (jtruk) 2 | -- 3 | -- This will error out on 4 | -- non-FFT builds 5 | -- Also, FFTS is a modern addition 6 | -- so that will error out on 7 | -- earlier FFT builds 8 | function TIC() 9 | cls() 10 | for i=0,1023 do 11 | local x=i/1023*240 12 | 13 | local fftv=fft(i) 14 | print("FFT",220,10,12) 15 | line(x,0,x,fftv*68,1) 16 | 17 | local fftsv=ffts(i) 18 | print("FFTS",215,120,12) 19 | line(x,135,x,135-fftsv*68,3) 20 | 21 | local diff=fftv-fftsv 22 | print("DIFF",215,72,12) 23 | line(x,68,x,68+diff*100,5) 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /fauxjiboink/readme.md: -------------------------------------------------------------------------------- 1 | # FauxjiBoink! (TIC-80) 2 | 3 | (Still rebuilding/commenting - timing's a bit broke!) 4 | 5 | ## Overview 6 | 7 | A modern take on an old classic. 8 | 9 | Original by Michael Park (for Xanth F/X) [[DemoZoo](https://demozoo.org/productions/98557/)] [[YouTube](https://www.youtube.com/watch?v=b2asVg4kBuI)] 10 | 11 | ## History 12 | 13 | Released at [Lovebyte 2023](https://demozoo.org/productions/319318/) 14 | 15 | ## Play! 16 | 17 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 18 | 19 | ## Thanks 20 | 21 | - [TIC-80](https://tic80.com/) 22 | - [Veikko Sariola / Pakettic contributors](https://github.com/vsariola/pakettic) 23 | - [Lovebyte team](https://lovebyte.party/) 24 | -------------------------------------------------------------------------------- /dotcube/readme.md: -------------------------------------------------------------------------------- 1 | # Dotcube (TIC-80) 2 | 3 | FFT-enhanced colourful effect. 4 | 5 | ## Overview 6 | 7 | This features a rotating dot cube with jazzy background (though it'll just be blank without music). 8 | 9 | - The palette is split between the cube - brighter the closer it is - and the background. 10 | - The background has a 'copper' style recolouring each scanline. 11 | - There's a post-processing effect that dissolves some of the cube's pixels if they are further away. 12 | 13 | Code hasn't been cleaned up for presentation, and probably won't be. 14 | 15 | Ensure you run on the [TIC-80 with FFT hack](https://github.com/glastonbridge/TIC-80/releases), otherwise the `fft()` calls will not be recognised. 16 | 17 | ## History 18 | 19 | Released (Just for fun): 10 Mar 2023 20 | 21 | ## Play! 22 | 23 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 24 | 25 | ## Thanks 26 | 27 | - [TIC-80](https://tic80.com/) -------------------------------------------------------------------------------- /jelly-hearts/readme.md: -------------------------------------------------------------------------------- 1 | # Jelly Hearts 2 | 3 | A sort of light-bend effect. 4 | 5 | ## Overview 6 | 7 | This was crunched to <=256 bytes, but expanded again for clarity. 8 | 9 | The technique I'm most pleased with is the compression of a [Lovebyte heart logo](https://lovebyte.party/). I tried a few different ways and this one shaved the most bytes. 10 | 11 | The hearts whirl around screen, scaling up and down. The bigger they are, the further away the pixel they shift- so as they get closer to the viewer, they appear to have a bigger magnification effect. 12 | 13 | ## History 14 | 15 | Released at [Lovebyte (New Talent) 2023](https://demozoo.org/productions/317939/) 16 | 17 | ## Play! 18 | 19 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 20 | 21 | ## Thanks 22 | 23 | - [TIC-80](https://tic80.com/) 24 | - [Veikko Sariola / Pakettic contributors](https://github.com/vsariola/pakettic) 25 | - [Lovebyte team](https://lovebyte.party/) 26 | -------------------------------------------------------------------------------- /bytejam-20230828/bytejam-20230828-preshow.lua: -------------------------------------------------------------------------------- 1 | function TIC() 2 | cls() 3 | T=time()//32 4 | print("BYTE JAM",14+math.sin(T/12)*10,30,2,false,5) 5 | for y=0,136 do 6 | for x=0,240 do 7 | p=pix(x,y) 8 | c=p+((x+y-T>>5)%2==0 and 6 or 9) 9 | pix(x,y,c) 10 | end 11 | end 12 | 13 | circ(120,60,60,3) 14 | rect(90,55,60,68,4) 15 | elli(110,75,10,5,12) 16 | elli(130,75,10,5,12) 17 | circ(110,75,3,0) 18 | circ(130,75,3,0) 19 | rect(100,65-math.abs(math.sin(T/5))*10,15,3,3) 20 | rect(125,65-math.abs(math.sin(T/5+1))*10,15,3,3) 21 | elli(115,95,3,2,0) 22 | elli(125,95,3,2,0) 23 | elli(120,115,30,10,3) 24 | elli(120,115,15,3,12) 25 | elli(120,112,15,3,3) 26 | 27 | local y=math.sin(T/8)*10 28 | rect(200,70+y,20,5,T//10) 29 | rect(200,75+y,20,20,0) 30 | rect(200,90+y,20,5,2) 31 | rect(205,90+y,10,25,2) 32 | circ(210,110+y,10,4) 33 | end 34 | 35 | -- 36 | -- 000:00000000ffffffff00000000ffffffff 37 | -- 001:0123456789abcdeffedcba9876543210 38 | -- 002:0123456789abcdef0123456789abcdef 39 | -- 40 | 41 | -- 42 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 43 | -- 44 | 45 | -------------------------------------------------------------------------------- /snippets/anaglyph.lua: -------------------------------------------------------------------------------- 1 | -- anaglyph (unfinished) 2 | -- Mixes two colour planes 3 | -- Could be improved by having a fixed focal plane (colors are red-cyan infront of it and cyan-red behind it) 4 | 5 | local GRAB={} 6 | local T=0 7 | local CAMX,CAMY,CAMZ=0,0,0 8 | 9 | function rgb(i,r,g,b) 10 | local a=16320+i*3 11 | poke(a,r) 12 | poke(a+1,g) 13 | poke(a+2,b) 14 | end 15 | 16 | function BOOT() 17 | rgb(0,0,0,0) 18 | rgb(1,255,0,0) 19 | rgb(2,0,255,255) 20 | rgb(3,255,255,255) 21 | end 22 | 23 | function TIC() 24 | poke(0x3ffb,0) 25 | draw(1) 26 | grabScreen() 27 | 28 | vbank(0) 29 | cls() 30 | draw(0) 31 | mixScreen() 32 | 33 | vbank(1) 34 | cls() 35 | 36 | T=T+1 37 | end 38 | 39 | function draw(side) 40 | local off=side*10 41 | local c=side+1 42 | for i=0,10 do 43 | local a=i*.5+T*.02 44 | local x=math.sin(a*.6) 45 | local y=math.cos(a) 46 | local z=5+math.sin(T*.02-i*.4+T*.02)*4.5 47 | local p=proj({x=x,y=y,z=z}) 48 | if p.z>0 then 49 | local s=math.min(100,p.z*10) 50 | circ(p.x+off*(1/z),p.y,s,c) 51 | end 52 | end 53 | end 54 | 55 | function grabScreen() 56 | for i=0,32640 do 57 | GRAB[i]=peek4(i) 58 | end 59 | end 60 | 61 | function mixScreen() 62 | for i=0,32640 do 63 | poke4(i,peek4(i)|GRAB[i]) 64 | end 65 | end 66 | 67 | function proj(p) 68 | local projScale=2 69 | local zD=projScale/(p.z-CAMZ) 70 | local pixScale=30 71 | return { 72 | x=120+(p.x-CAMX)*zD*pixScale, 73 | y=68+(p.y-CAMY)*zD*pixScale, 74 | z=zD, 75 | } 76 | end 77 | -------------------------------------------------------------------------------- /lytejam-20230316/stencil-circles.tic: -------------------------------------------------------------------------------- 1 | nT=0 2 | mCos=math.cos 3 | mSin=math.sin 4 | mPi=math.pi 5 | local buf={} 6 | for y=0,136 do 7 | for x=0,240 do 8 | buf[y*240+x]=0 9 | end 10 | end 11 | 12 | function BDR(n) 13 | for i=0,7 do 14 | local p=(255/7*i) 15 | local o1=.5+mSin(T*.1+n/20)*.5 16 | local o2=.5+mSin(T*.12+n/22)*.5 17 | local o3=.5+mSin(T*.17+n/18)*.5 18 | 19 | local lowPal=0x3fc0+i*3 20 | poke(lowPal+0,p*o1) 21 | poke(lowPal+1,p*o2) 22 | poke(lowPal+2,p*o3) 23 | 24 | local highPal=0x3fc0+(i+8)*3 25 | poke(highPal,p*o2) 26 | poke(highPal+1,p*o3) 27 | poke(highPal+2,p*o1) 28 | end 29 | 30 | ofs=(mSin(T*.09+n*.02)*40) 31 | +(mCos(T*.07+n*.03)*40) 32 | poke(0x3FF9,ofs//1) 33 | end 34 | 35 | function TIC() 36 | cls() 37 | for i=0,150 do 38 | ang=i+T*.05 39 | d=i+8+mSin(i+T*.08)*20 40 | x=120+mCos(ang)*d 41 | y=68+mSin(ang)*d 42 | w=d/8 43 | circ(x,y,w,7) 44 | end 45 | 46 | for y=0,136 do 47 | for x=0,240 do 48 | buf[y*240+x]=pix(x,y) 49 | end 50 | end 51 | 52 | cls() 53 | 54 | for y=0,136 do 55 | for x=0,240 do 56 | local powfac=.15+math.abs(.25*mSin(T*.03)) 57 | local xC=120+mSin(T*.04)*70 58 | local yC=68+mSin(T*.06)*60 59 | c=(4+mSin(((xC-x)^2+(yC-y)^2)^powfac)*4)//1 60 | pix(x,y,c) 61 | end 62 | end 63 | 64 | for y=0,136 do 65 | for x=0,240 do 66 | c=pix(x,y) 67 | pix(x,y,buf[y*240+x]+c) 68 | end 69 | end 70 | 71 | print("jtruk",120,129,0) 72 | print("jtruk",119,128,15) 73 | 74 | T=T+1 75 | end -------------------------------------------------------------------------------- /bytejam-20230814/bytejam-20230814-preshow.lua: -------------------------------------------------------------------------------- 1 | -- Greetz to: Aldroid, The Wolf, 2 | -- Ferris, Mantratronic, 3 | -- Alia, Gasman 4 | -- Byte Jam Viewers! 5 | 6 | function TIC() 7 | t=time()//32 8 | for y=0,136 do 9 | for x=0,240 do 10 | pix(239-x,y,(x+y+t)>>3) 11 | end 12 | end 13 | 14 | local word1s={"BYTE","NIGHT","ZEIT","MITE","BOAT","BOOT","KITE","BAIT","FLIGHT"} 15 | local word1=word1s[(t//37)%#word1s+1] 16 | 17 | local word2s={"JAM","HAM","CAN","CLAM","SPAM","FLAN","TRAM","JAAAAM"} 18 | local word2=word2s[(t//50)%#word2s+1] 19 | 20 | local w=print(word1,240,0,0,false,3) 21 | local y1=20+math.sin(t*.2)*10 22 | local y2=20+math.sin(t*.24)*10 23 | print(word1,115-w+1,y1+1,0,false,3) 24 | print(word1,115-w,y1,12,false,3) 25 | print(word2,125+1,y2+1,0,false,3) 26 | print(word2,125,y2,12,false,3) 27 | 28 | elli(120,80,25,20,2) 29 | print("jtruk",106,70+1,0) 30 | print("dialling",100,80+1,0) 31 | print("in",116,90+1,0) 32 | print("jtruk",106,70,12) 33 | print("dialling",100,80,12) 34 | print("in",116,90,12) 35 | 36 | l="Greetz to: Aldroid, The Wolf, Ferris, Mantratronic, Alia, Gasman, YOOU" 37 | w=print(l,240,0,0) 38 | local x=120-w/2+math.sin(t*.04)*70 39 | local y=110 40 | print(l,x+1,y+1,0) 41 | print(l,x,y,12) 42 | end 43 | 44 | -- 45 | -- 000:00000000ffffffff00000000ffffffff 46 | -- 001:0123456789abcdeffedcba9876543210 47 | -- 002:0123456789abcdef0123456789abcdef 48 | -- 49 | 50 | -- 51 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 52 | -- 53 | 54 | -------------------------------------------------------------------------------- /martian-madrigal/readme.md: -------------------------------------------------------------------------------- 1 | # Martian Madrigal 2 | 3 | An experiment with sound, personality, and sizecoding. 4 | 5 | ## Overview 6 | 7 | Code should be pretty easy to follow. 8 | 9 | - Four alien characters, one for each sound channel, each configured by two arrays (V: volume, N: note frequency) 10 | - A conditional statement that (1) keeps a sync beat (2) triggers off the voices in an interesting pattern. 11 | - Some maths that makes sounds that trigger on a particular beat have harmonic frequency (hat-tip: a whiplash [YouTube music theory tutorial](https://www.youtube.com/watch?v=_eKTOMhpy2w)!) 12 | - Poking of memory to get sound. Needs to be done every frame- frequency, wave form (just 1 nybble out of a possible 32), and volume. 13 | - Drawing the aliens (right/back to left/front), shifting them around to respect the voice volume. 14 | - Decay the volume for each alien. 15 | 16 | ## History 17 | 18 | Released at [Lovebyte 2023](https://demozoo.org/productions/319383/) 19 | 20 | ## Play! 21 | 22 | If you pick this up, you could try: 23 | 24 | - Mixing in the amazing [TIC-80 FFT hack](https://github.com/glastonbridge/TIC-80/releases) 25 | - Different sound waves - this was not possible (I don't think!) for the 256 byte compo, but square, sin, sawtooth, noise and blends all give nice character differentiation. 26 | - Different harmonies 27 | - Other character styles 28 | 29 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 30 | 31 | ## Thanks 32 | 33 | - [TIC-80](https://tic80.com/) 34 | - [Veikko Sariola / Pakettic contributors](https://github.com/vsariola/pakettic) 35 | - [Lovebyte team](https://lovebyte.party/) 36 | -------------------------------------------------------------------------------- /eye-of-the-machine/readme.md: -------------------------------------------------------------------------------- 1 | # Eye of the Machine (TIC-80) 2 | 3 | The Machine awakens. Don't make direct eye contact! 4 | 5 | ## Overview 6 | 7 | A dynamic, chaotic effect, using TTRI and VBANK to create a kaliedoscope and screen feedback effect that looks a bit like a cyber/organic eyeball. 8 | 9 | It's a beast to tame. I don't think the version I entered hit the heights of some of the visuals I got when developing it... I got lost down the size-squeezing rabbit hole and lost sight of the result. Still, it's pretty close, and tinkering within this framework is very rewarding while you blast some music. I might release a Director's Cut if I find some good parameters again :) 10 | 11 | ## History 12 | 13 | Released at [Lovebyte 2023](https://demozoo.org/productions/319384/) 14 | 15 | ## Play! 16 | 17 | There are lots of numbers to mess around with in this one. 18 | 19 | You could try: 20 | 21 | - Changing the colour selection. 22 | - Changing the way colour pixels are added to the kaliedoscope. 23 | - Changing the way the kaliedoscope step size is chosen. 24 | - Changing the size of the source texture triangle so that it maps onto the rendered triangle differently (affects how the colours bleed) 25 | - Mixing in the amazing [TIC-80 FFT hack](https://github.com/glastonbridge/TIC-80/releases) 26 | 27 | Beware: The video output is not very compression friendly, so it'll mash broadcast codecs and make large MP4 recordings, etc. 28 | 29 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 30 | 31 | ## Thanks 32 | 33 | - [TIC-80](https://tic80.com/) 34 | - [Veikko Sariola / Pakettic contributors](https://github.com/vsariola/pakettic) 35 | - [Lovebyte team](https://lovebyte.party/) 36 | -------------------------------------------------------------------------------- /bytejam-20230220/robot-disco.tic: -------------------------------------------------------------------------------- 1 | Mt=0 2 | M=math 3 | S=M.sin 4 | C=M.cos 5 | R=M.random 6 | 7 | T=0 8 | m1=0 9 | m2=0 10 | m3=0 11 | m4=0 12 | function TIC() 13 | cls() 14 | 15 | for r=3,0,-1 do 16 | for i=0,3 do 17 | x=((r+i)*47)%240 18 | y=100-M.abs(S(i+m1))*5 19 | h=(20+i*10)*(r+1) 20 | hH=20+S(T*i)*10 21 | lH=10+(10*(r+i)%40) 22 | c=4+i*2 23 | drawRobot(x,y,h,hH,lH,c*2,x*y*.001) 24 | end 25 | end 26 | 27 | xOfs=m1 28 | yOfs=m2 29 | for y=0,136 do 30 | for x=0,239 do 31 | p=pix(x,y) 32 | if((x+xOfs)%20<4 and ((y+yOfs)%20<4))then 33 | pix(x,y,p+1) 34 | end 35 | end 36 | end 37 | 38 | for c=0,10 do 39 | print("Discooo",10+C(m2+c)*10,5+S(m1+c)*5,c,1,5) 40 | end 41 | print("I have no idea what this is",50+S(T*.3)*40,120,12) 42 | 43 | T=T+0.1 44 | 45 | m1=m1+fft(0)*.6 46 | m2=m2+fft(1)*.6 47 | m3=m3+fft(1)*.3 48 | m4=m4+fft(0)*0.2 49 | end 50 | 51 | function drawRobot(x,y,h,headH,legH,c,ofs) 52 | c1=(c%15)+1 53 | c2=((c+1)%15)+1 54 | bodyX=x-legH+S(m1+ofs)*20 55 | waistY=y 56 | bodyH=h/2 57 | bodyW=40+S(m1*10)*10 58 | headY=waistY-bodyH 59 | headX=bodyX 60 | headW=20 61 | headH=headH 62 | feetY=waistY+legH 63 | -- body 64 | rect(bodyX-bodyW/2,waistY-bodyH,bodyW,bodyH,c1) 65 | 66 | -- head 67 | rect(bodyX-headW/2,headY-headH,headW,headH,c2) 68 | 69 | -- leye 70 | lEyeY=headY-headH/2+S(T*1.2)*3 71 | elli(headX-10,lEyeY,5,3,12) 72 | circ(headX-10+S(T),lEyeY,3,0) 73 | 74 | -- reye 75 | rEyeY=headY-headH/2+S(T)*3 76 | elli(headX+10,rEyeY,5,3,12) 77 | circ(headX+10+S(T),rEyeY,3,0) 78 | 79 | lFootX=x-10+S(m2)*5 80 | rFootX=x+10+S(m3)*5 81 | tri(bodyX-10,waistY,bodyX-15,waistY,lFootX,feetY,12) 82 | tri(bodyX+10,waistY,bodyX+15,waistY,rFootX,feetY,12) 83 | 84 | lShoulderX=bodyX-bodyW/2 85 | lShoulderY=headY 86 | lArmX=lShoulderX+C(m4)*20 87 | lArmY=lShoulderY+S(m4)*20 88 | tri(lShoulderX,lShoulderY,lShoulderX,lShoulderY+2,lArmX,lArmY,12) 89 | 90 | lHandX=lArmX+C(m3)*10 91 | lHandY=lArmY+S(m3)*10 92 | tri(lArmX,lArmY,lArmX,lArmY+4,lHandX,lHandY,12) 93 | 94 | rShoulderX=bodyX+bodyW/2 95 | rShoulderY=headY 96 | rArmX=rShoulderX-C(m4)*20 97 | rArmY=rShoulderY-S(m4)*20 98 | tri(rShoulderX,rShoulderY,rShoulderX,rShoulderY+4,rArmX,rArmY,12) 99 | 100 | rHandX=rArmX+C(m2)*10 101 | rHandY=rArmY+S(m2)*10 102 | tri(rArmX,rArmY,rArmX,rArmY+4,rHandX,rHandY,12) 103 | end 104 | -------------------------------------------------------------------------------- /bytejam-20230515/bytejam-20230515-jtruk.lua: -------------------------------------------------------------------------------- 1 | S,C,PI=math.sin,math.cos,math.pi 2 | SECY0=20 3 | SECY1=40 4 | 5 | function BDR(y) 6 | vbank(0) 7 | doRGBLine(y,SECY0,0) 8 | 9 | local r=S(y*.03+T*.031)*.2+.2 10 | local g=S(y*.03-T*.023)*.2+.2 11 | local b=S(y*.03+T*.027)*.2+.2 12 | setRGB(0,r,g,b) 13 | 14 | vbank(1) 15 | doRGBLine(y,SECY1,1) 16 | setRGB(15,1,1,1) 17 | end 18 | 19 | T=0 20 | function TIC() 21 | vbank(0) 22 | cls() 23 | draw(SECY0,SECY0/2,T//10,7,28) 24 | 25 | vbank(1) 26 | cls() 27 | draw(SECY1,SECY1/2,T//4,4,14) 28 | 29 | lines={ 30 | "Gentle", 31 | "Cubey", 32 | "Greetz", 33 | "To", 34 | "Aldroid", 35 | "Alia", 36 | "Nusan", 37 | "Mantratronic", 38 | "Synesthesia", 39 | } 40 | for i=1,#lines do 41 | local ln=lines[i] 42 | local x=i*12+S(T*.1+i)*4 43 | local y=i*13+S(T*.04+i)*2 44 | local cx=x 45 | print(ln,cx+1,y+1,1,false,2) 46 | print(ln,cx,y,15,false,2) 47 | end 48 | 49 | T=T+1 50 | end 51 | 52 | function draw(space,sz,ofs,ys,xs) 53 | for y=0,ys-1 do 54 | local yp=(space*y)%140 55 | for x=0,xs-1 do 56 | local dir=(y%2==0)and 1 or -1 57 | local xp=(x*sz+ofs*dir)%280-sz*2 58 | local a=x-T*.01 59 | local c=(x%14)+1 60 | drawShape(xp+space/2,yp+space/2,sz,c,a) 61 | drawShape(xp+space/2,yp+space/2,sz,(c+6)%14+1,a+.1) 62 | drawShape(xp+space/2,yp+space/2,sz,(c+12)%14+1,a+.2) 63 | end 64 | end 65 | end 66 | 67 | function drawShape(x,y,sp,c,a) 68 | local sz=sp/2 69 | y=y-math.abs(S(T*.1+a))*sz 70 | x0,y0=ang(x,y,a,sz) 71 | x1,y1=ang(x,y,a+PI/2,sz) 72 | x2,y2=ang(x,y,a+PI,sz) 73 | x3,y3=ang(x,y,a+PI*1.5,sz) 74 | 75 | tri(x0,y0,x1,y1,x,y,c) 76 | tri(x1,y1,x2,y2,x,y,c) 77 | tri(x2,y2,x3,y3,x,y,c) 78 | tri(x3,y3,x0,y0,x,y,c) 79 | end 80 | 81 | function ang(x,y,a,d) 82 | return x+S(a)*d,y+C(a)*d 83 | end 84 | 85 | function doRGBLine(y,space,shift) 86 | local s=(y-4)//space 87 | for i=1,15 do 88 | local o=s*2+i*.1+shift+y*.02+T*.004 89 | local r=math.sin(o)*.5+.5 90 | local g=math.sin(o*2)*.5+.5 91 | local b=math.sin(o*3)*.5+.5 92 | setRGB(i,r,g,b) 93 | end 94 | end 95 | 96 | function setRGB(i,r,g,b) 97 | local addr=0x3fc0+i*3 98 | poke(addr,(r*255)//1) 99 | poke(addr+1,(g*255)//1) 100 | poke(addr+2,(b*255)//1) 101 | end 102 | 103 | -- 104 | -- 000:00000000ffffffff00000000ffffffff 105 | -- 001:0123456789abcdeffedcba9876543210 106 | -- 002:0123456789abcdef0123456789abcdef 107 | -- 108 | 109 | -- 110 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 111 | -- 112 | 113 | -------------------------------------------------------------------------------- /fake-fft/readme.md: -------------------------------------------------------------------------------- 1 | # Fake FFT (TIC-80) 2 | 3 | A crack at a fake `fft(n)` function for non-modified builds of TIC-80. 4 | 5 | This sounds a bit back to front, but bear with me... 6 | 7 | ## Overview 8 | 9 | Since I got started with TIC-80, one of my favourite things is noodling some visual effect into existence over an hour. The most entertaining way of doing that is playing some background music (usually breakbeat here, please) and using a special build of [TIC-80 with a FFT hack that does some sound spectrum analysis](https://github.com/glastonbridge/TIC-80/releases). This adds a `fft(n)` function for your code to use. Bliss-state follows. 10 | 11 | There are some environments that won't have `fft` available. You can download a Windows build with a click from the page linked above, but Mac users will need to build it for themselves, and it won't be possible in the [browser version](https://tic80.com/create) without some elegant pyramid of human engineering. 12 | 13 | So I thought I'd have a stab at making a fake `fft` function - then, when I put code for my sketches online and someone wants to try one it'll run without errors, and look close-ish to what was intended, irrespective of how they run it. 14 | 15 | This takes advantage of the way Lua treats function stubs as variables, so you can query if a function exists and also easily assign / reassign them e.g.: 16 | 17 | ``` 18 | if not fft then 19 | fft=function(n) 20 | return math.random() 21 | end 22 | end 23 | ``` 24 | 25 | That structure could sit at the top of any code and TIC-80 would either use the built-in `fft` or, if not available, this default. 26 | 27 | The code in this repo is a bit more complicated than just inserting an fft function - it has a harness that allows you to switch between fake and real FFT responses to compare them. You can run it on a non-FFT build of TIC-80 and it won't fail (but the FFT:Real option won't do anything). 28 | 29 | ## History 30 | 31 | - 26 Mar 2023: Released (Just for fun) 32 | - 3 Apr 2023: Some improvement to the FFT function 33 | 34 | ## Play! 35 | 36 | The function at the moment is super rough. The individual response values and curve don't look like real music, other than it has a periodic beat (adjustable with a local `bpm` variable) and it decays off as you head towards the high end... lots of room for improvement! 37 | 38 | There's *plenty* of scope for improvement. I'd also like to ensure it stays small. Suggestions / forks welcome! 39 | 40 | *DO* Get in touch and show me if you make anything! Contact details [here](https://github.com/creativenucleus/tic-80-sketches/blob/main/readme.md#contact) 41 | 42 | ## Thanks 43 | 44 | - [TIC-80](https://tic80.com/) 45 | - Aldroid, Gasman [FFT hack](https://github.com/glastonbridge/TIC-80/releases) 46 | -------------------------------------------------------------------------------- /bytejam-20230501/jam.lua: -------------------------------------------------------------------------------- 1 | -- A Byte Jam return for the Martian Madrigal 2 | -- Requires FFT build of TIC-80, or the FFT shim 3 | 4 | S,C,A=math.sin,math.cos,math.atan2 5 | 6 | T=0 7 | M={ 8 | {v=0,f=0,x=70,w=50,h=20}, 9 | {v=0,f=0,x=140,w=30,h=30}, 10 | {v=0,f=0,x=180,w=20,h=40}, 11 | {v=0,f=0,x=205,w=15,h=48}, 12 | } 13 | MSGS={ 14 | "Hey", 15 | "There", 16 | "Trust", 17 | "Your", 18 | "Fellow", 19 | "Martians", 20 | "To", 21 | "Sing", 22 | "A", 23 | "Groovy", 24 | "Song", 25 | "", 26 | "Greetz", 27 | "To", 28 | "Alia", 29 | "Mantratronic", 30 | "ToBach", 31 | "Synesthesia", 32 | "Aldroid", 33 | "You All! =)", 34 | "", 35 | } 36 | MSG=1 37 | MINT=70 38 | 39 | function BDR(y) 40 | vbank(0) 41 | local o=T*.01 42 | for i=1,15 do 43 | local addr=0x3fc0+i*3 44 | r=S(o+i*.1)*.5+.5 45 | g=S(o*.7-i*.13)*.5+.5 46 | b=S(o*.6+i*.07)*.5+.5 47 | poke(addr,(r*255)//1) 48 | poke(addr+1,(g*255)//1) 49 | poke(addr+2,(b*255)//1) 50 | end 51 | end 52 | 53 | function TIC() 54 | vbank(1) 55 | cls() 56 | M[1].f=aveFFT(0,4,15) 57 | M[2].f=aveFFT(60,4,150) 58 | M[3].f=aveFFT(100,4,300) 59 | M[4].f=aveFFT(200,4,600) 60 | 61 | for i=1,4 do 62 | openV(M[i]) 63 | end 64 | 65 | elli(120,125,150,20,1) 66 | 67 | for i=4,1,-1 do 68 | m=M[i] 69 | local bounce=M[i].v*10 70 | local h=m.h+bounce 71 | local y=135-m.h-bounce/2-i*5 72 | local ym=y+h/3 73 | local ye=y-h 74 | local es=11-i 75 | elli(m.x+1,y+1,m.w,h,i*2-1) 76 | elli(m.x,y,m.w,h,i*2) 77 | elli(m.x,ym,m.w*.8,M[i].v*15,i*2-1) 78 | elli(m.x,ym,m.w*.8,M[i].v*12,12) 79 | circ(m.x+1,ye+1,es,i*2-1) 80 | circ(m.x,ye,es,12) 81 | circ(m.x,ye,es-5,15) 82 | end 83 | 84 | local msg=MSGS[1+(T//MINT)%(#MSGS)] 85 | local y=60-T%MINT 86 | local x=30+S(T*.1)*10 87 | print(msg,x+1,y+1,15) 88 | print(msg,x,y,12) 89 | 90 | vbank(0) 91 | cls() 92 | 93 | for x=0,240 do 94 | for y=0,136 do 95 | local p=S(x*.1)+C(y*.1)+T*0.01 96 | local a=A(x,y) 97 | p=8+math.sin(p*.5+a+S(T*0.005))*7 98 | pix(x,y,p) 99 | end 100 | end 101 | 102 | for i=0,10 do 103 | for s=10,0,-1 do 104 | a=(math.pi*2*i/10-T*.01+s*.05) 105 | x=120+C(a)*200 106 | y=150+S(a)*110+S(s-T*.1)*20 107 | col=1+s%15 108 | circ(x+1,y+1,15-s,1+(col+5)%15) 109 | circ(x,y,15-s,col) 110 | end 111 | end 112 | 113 | T=T+1 114 | --[[ 115 | rect(0,0,32,fft1*136,12) 116 | rect(60,0,32,fft2*136,12) 117 | rect(120,0,32,fft3*136,12) 118 | rect(180,0,32,fft4*136,12) 119 | --]] 120 | end 121 | 122 | function aveFFT(st,c,m) 123 | local acc=0 124 | for i=st,st+c do 125 | acc=acc+fft(i) 126 | end 127 | return math.max(0,math.min(1,(m*acc/c))) 128 | end 129 | 130 | function openV(m) 131 | if m.f>(m.v)*2 then 132 | m.v=m.f 133 | else 134 | m.v=m.v*.94 135 | end 136 | end 137 | -------------------------------------------------------------------------------- /lytejam-20230315/tube-worms.tic: -------------------------------------------------------------------------------- 1 | @-- If this is set to true, snake width 2 | -- changes to match the music 3 | DO_FFT=false 4 | 5 | -- If this is set to true then we 6 | -- slowly clear the screen with dots 7 | DO_DECAY=false 8 | 9 | -- A snake spawns every TIME_TO_SNAKE 10 | -- frames 11 | TIME_TO_SNAKE=10 12 | 13 | C=math.cos 14 | S=math.sin 15 | R=math.random 16 | PI=math.pi 17 | 18 | snakes={} 19 | 20 | function makeSnake() 21 | side=R(0,4)//1 22 | 23 | if side==0 then 24 | x=-10 25 | y=R(-10,136+10) 26 | a=R()*PI-PI/2 27 | elseif side==1 then 28 | x=250 29 | y=R(-10,136+10) 30 | a=R()*PI-PI/2+PI 31 | elseif side==2 then 32 | x=R(-10,250) 33 | y=-10 34 | a=R()*PI-PI/2+PI/2 35 | else 36 | x=R(-10,250) 37 | y=146 38 | a=R()*PI-PI/2-PI/2 39 | end 40 | 41 | return { 42 | x=x, 43 | y=y, 44 | c=R(1,10), 45 | ang=a, 46 | aim=a+math.random()*.5, 47 | w=math.random(3,10), 48 | m=2, 49 | lastP0x=0, 50 | lastP0y=0, 51 | lastP1x=0, 52 | lastP1y=0, 53 | t=0, 54 | live=true, 55 | } 56 | end 57 | 58 | cls() 59 | 60 | T=0 61 | COUNTDOWN=0 62 | snakes[1]=makeSnake() 63 | function TIC() 64 | if DO_DECAY then 65 | for i=0,200 do 66 | pix(R(0,240),R(0,136),0) 67 | end 68 | end 69 | 70 | if COUNTDOWN<=0 then 71 | index=getNewSnakeI() 72 | snakes[#snakes+1]=makeSnake() 73 | COUNTDOWN=TIME_TO_SNAKE 74 | end 75 | 76 | for i=1,#snakes do 77 | doSnake(snakes[i]) 78 | end 79 | T=T+.1 80 | COUNTDOWN=COUNTDOWN-1 81 | end 82 | 83 | function doSnake(sn) 84 | sn.x=sn.x+C(sn.ang)*sn.m 85 | sn.y=sn.y+S(sn.ang)*sn.m 86 | 87 | local e=getExtent(sn,sn.w) 88 | if(sn.t>0)then 89 | tri(sn.lastP0x,sn.lastP0y,e.p0x,e.p0y,e.p1x,e.p1y,sn.c) 90 | tri(sn.lastP0x,sn.lastP0y,sn.lastP1x,sn.lastP1y,e.p1x,e.p1y,sn.c) 91 | line(e.p0x,e.p0y,sn.lastP0x,sn.lastP0y,sn.c-1) 92 | line(e.p1x,e.p1y,sn.lastP1x,sn.lastP1y,sn.c+1) 93 | end 94 | sn.lastP0x=e.p0x 95 | sn.lastP0y=e.p0y 96 | sn.lastP1x=e.p1x 97 | sn.lastP1y=e.p1y 98 | 99 | if(R()<.03)then 100 | sn.aim=math.random()*PI*2 101 | end 102 | 103 | homing=.1 104 | aDiff=angleDiff(sn) 105 | sn.ang=sn.ang+aDiff*homing 106 | sn.t=sn.t+1 107 | 108 | if(sn.x<-20 or sn.x>260 109 | or sn.y<-20 or sn.y>156)then 110 | sn.live=false 111 | end 112 | end 113 | 114 | function getExtent(sn,w) 115 | w=2 116 | if DO_FFT then 117 | w=w+w*fft(0)*15 118 | end 119 | 120 | a0=sn.ang-PI/2 121 | a1=a0+PI 122 | return{ 123 | p0x=sn.x+C(a0)*w, 124 | p0y=sn.y+S(a0)*w, 125 | p1x=sn.x+C(a1)*w, 126 | p1y=sn.y+S(a1)*w, 127 | } 128 | end 129 | 130 | function angleDiff(sn) 131 | ch1=sn.aim-sn.ang 132 | -- ch2=sn.ang-sn.aim 133 | return ch1 134 | end 135 | 136 | function getNewSnakeI() 137 | for i=1,#snakes do 138 | if not snakes[i].live then 139 | return i 140 | end 141 | end 142 | return #snakes+1 143 | end 144 | 145 | -------------------------------------------------------------------------------- /lytejam-20230324/code.lua: -------------------------------------------------------------------------------- 1 | -- Lyte Jam (a personal Byte Jam) 2 | -- Needs the fft build of TIC80 to run 3 | 4 | mCos=math.cos 5 | mSin=math.sin 6 | mAtan=math.atan2 7 | mPi=math.pi 8 | mPi2=mPi*2 9 | mMin=math.min 10 | mMax=math.max 11 | T=0 12 | FFT={} 13 | FFT[1]=0 14 | FFT[2]=0 15 | FFT[3]=0 16 | FFT[4]=0 17 | 18 | function fftGet(start,count) 19 | local acc=0 20 | for i=0,count do 21 | acc=acc+fft(start+i) 22 | end 23 | return acc/count 24 | end 25 | 26 | function SCN(n) 27 | rgb1=127+64+mSin(T*.01+n*.012)*64 28 | rgb2=127+64+mCos(T*.012-n*.023)*64 29 | rgb3=127+64+mSin(T*.023-n*.014)*64 30 | for c=1,15 do 31 | local addr=0x3fc0+c*3 32 | local p1=0.5+mSin(c*.2+T*.05)*0.5 33 | local p2=0.5+mSin(c*.23+T*.07)*0.5 34 | local p3=0.5+mSin(c*.19+T*.06)*0.5 35 | poke(addr,p1*rgb1) 36 | poke(addr+1,p2*rgb2) 37 | poke(addr+2,p3*rgb3) 38 | end 39 | local wibble=( 40 | mSin(n*.01+T*.03) 41 | +mCos(n*.014+T*.021) 42 | )/2 43 | poke(0x3FF9,wibble*50) 44 | end 45 | 46 | function TIC() 47 | FFT[1]=fftGet(0,6) 48 | FFT[2]=fftGet(40,6)*10 49 | FFT[3]=fftGet(100,6)*30 50 | FFT[4]=fftGet(200,6)*80 51 | 52 | vbank(1) 53 | cls(12) 54 | 55 | for i=1,100,.02 do 56 | x=120+( 57 | mCos(T*.02+i*.1) 58 | +mSin(T*.04+i*.17) 59 | )/2*180 60 | y=68+( 61 | mSin(T*.03+i*.1) 62 | +mCos(T*.05+i*.2) 63 | )/2*80 64 | s=15+mSin(i*.12+T*.05)*10 65 | circ(x,y,s,i*.4//1) 66 | end 67 | 68 | vbank(0) 69 | cls() 70 | steps=10 71 | for i=0,steps do 72 | srcXC=120+mCos(T*.12)*20 73 | srcYC=68+mSin(T*.13)*20 74 | destXC=120+mCos(T*.1)*100 75 | destYC=68+mSin(T*.17)*100 76 | srcA0=i*(mPi2/steps) 77 | srcA1=(i+1)*(mPi2/steps) 78 | ofs=( 79 | mCos(T*.010) 80 | +mSin(T*.017) 81 | )/2*4 82 | destA0=srcA0+ofs--+T*.01+i*.2 83 | destA1=srcA1+ofs--+T*.01+i*.2 84 | srcExtent=150--+mSin(T*.1)*60 85 | destExtent=500+mSin(T*.012)*500 86 | srcX0=120+mCos(srcA0)*srcExtent 87 | srcY0=68+mSin(srcA0)*srcExtent 88 | srcX1=120+mCos(srcA1)*srcExtent 89 | srcY1=68+mSin(srcA1)*srcExtent 90 | destX0=120+mCos(destA0)*destExtent 91 | destY0=68+mSin(destA0)*destExtent 92 | destX1=120+mCos(destA1)*destExtent 93 | destY1=68+mSin(destA1)*destExtent 94 | ttri( 95 | srcXC,srcYC, 96 | srcX0,srcY0, 97 | srcX1,srcY1, 98 | destXC,destYC, 99 | destX0,destY0, 100 | destX1,destY1, 101 | 2 102 | ) 103 | end 104 | 105 | vbank(1) 106 | cls() 107 | 108 | vbank(0) 109 | 110 | for y=0,136 do 111 | fftIndex=(T*.03+(y/(34)))//1%4 112 | local str=FFT[fftIndex+1]*200 113 | for x=0,240 do 114 | c=0 115 | if(x<120)then 116 | if(120-x>str)then 117 | c=(y+x)/2//1>>4 118 | end 119 | else 120 | if(x-120>str)then 121 | c=(y+x)/2//1>>4 122 | end 123 | end 124 | 125 | pix(x,y,(pix(x,y)+c)%15+1) 126 | end 127 | end 128 | 129 | T=T+1 130 | end 131 | -------------------------------------------------------------------------------- /lytejam-20230330/orbital.tic: -------------------------------------------------------------------------------- 1 | lmSin=math.sin 2 | mCos=math.cos 3 | mPi=math.pi 4 | mPi2=mPi*2 5 | mRandom=math.random 6 | mMax=math.max 7 | mMin=math.min 8 | FAR_DIST=200 9 | 10 | SHAPES={} 11 | 12 | function SCN(n) 13 | for c=0,15 do 14 | local addr=0x3fc0+c*3 15 | p=c*255/15 16 | r=c==0 and 0 or .6+mSin(T*.013+n*.0044)*.4 17 | g=c==0 and 0 or .6+mSin(T*.02+n*.0024)*.4 18 | b=c==0 and 0 or .6+mSin(T*.017+n*.0054)*.4 19 | poke(addr,r*p) 20 | poke(addr+1,g*p) 21 | poke(addr+2,b*p) 22 | end 23 | end 24 | 25 | T=0 26 | function TIC() 27 | cls(0) 28 | 29 | if(T%40==0)then 30 | createShape() 31 | end 32 | 33 | table.sort(SHAPES,function(a,b) 34 | return a.spawnT=240) 67 | end 68 | 69 | print("jtruk",208,128,0) 70 | print("jtruk",207,127,5) 71 | 72 | T=T+1 73 | end 74 | 75 | function drawShape(shape) 76 | z=(((shape.spawnT+FAR_DIST-T)*.0015)*100)%FAR_DIST 77 | 78 | sizeOuter=100 79 | keepAlive=drawPoly(shape.x,shape.y, 80 | z,sizeOuter,shape.nSides,false 81 | ) 82 | 83 | sizeInner=sizeOuter*shape.hole 84 | drawPoly(shape.x,shape.y, 85 | z,sizeInner,shape.nSides,true 86 | ) 87 | 88 | if(not keepAlive)then 89 | shape.isAlive=false 90 | end 91 | end 92 | 93 | function drawPoly(xC,yC,z,size,nSides,isBlack) 94 | for i=0,nSides-1 do 95 | a1=i*mPi2/nSides 96 | a2=(i+1)*mPi2/nSides 97 | p1x=mSin(a1)*size+xC 98 | p1y=-mCos(a1)*size+yC 99 | p2x=mSin(a2)*size+xC 100 | p2y=-mCos(a2)*size+yC 101 | p0=proj(xC,yC,z) 102 | p1=proj(p1x,p1y,z) 103 | p2=proj(p2x,p2y,z) 104 | if(p0.z>-20)then 105 | c=isBlack and 0 or mMax(1,(15*(30-z)/30)^.7) 106 | tri(p0.x,p0.y,p1.x,p1.y,p2.x,p2.y,c) 107 | else 108 | return false 109 | end 110 | end 111 | 112 | return true 113 | end 114 | 115 | function proj(x,y,z) 116 | return { 117 | x=120+x/z, 118 | y=68+y/z, 119 | z=z/z, 120 | } 121 | end 122 | 123 | function createShape() 124 | SHAPES[getFreeShape()]={ 125 | isAlive=true, 126 | spawnT=T, 127 | x=60*(mRandom()-.5), 128 | y=60*(mRandom()-.5), 129 | nSides=(mRandom()<.5) 130 | and 100 131 | or mRandom(3,7), 132 | c=mRandom(1,11), 133 | hole=0.76+mRandom()*.2 134 | } 135 | end 136 | 137 | function getFreeShape() 138 | for i=1,#SHAPES do 139 | if not SHAPES[i].isAlive then 140 | return i 141 | end 142 | end 143 | 144 | return #SHAPES+1 145 | end -------------------------------------------------------------------------------- /dotcube/dotcube.tic: -------------------------------------------------------------------------------- 1 | ' -- @jtruk / Mar 2023 2 | -- Release: For fun! 3 | -- Code: JTRUK 4 | -- Group: Hex Heroes 5 | -- License: Code Credit License v1.1.0 6 | 7 | sin=math.sin 8 | cos=math.cos 9 | xCam=0 10 | yCam=0 11 | zCam=0 12 | T=0 13 | 14 | -- Grouping FFT results into buckets 15 | function jfft(start) 16 | acc=0 17 | for i=0,8 do 18 | acc=acc+fft(start+i)/8 19 | end 20 | 21 | return acc 22 | end 23 | 24 | -- Hacky-ish update to half the palette 25 | function doPalette8(start,seed) 26 | rmin=32+cos(seed+T*.27)*32 27 | gmin=32+cos(seed+T*.10)*32 28 | bmin=32+cos(seed+T*.34)*32 29 | rmax=192+cos(seed+T*.17)*63 30 | gmax=192+cos(seed+T*.30)*63 31 | bmax=192+cos(seed+T*.24)*63 32 | for index=0,7 do 33 | c=start+index 34 | mem=0x03FC0+c*3 35 | intensity=index/7 36 | poke(mem+0,scale(rmin,rmax,intensity)) 37 | poke(mem+1,scale(gmin,gmax,intensity)) 38 | poke(mem+2,scale(bmin,bmax,intensity)) 39 | end 40 | end 41 | 42 | function SCN(l) 43 | doPalette8(1,l*.04+T) 44 | end 45 | 46 | function doPalette() 47 | doPalette8(8,2) 48 | end 49 | 50 | function scale(low,high,intensity) 51 | return low+(high-low)*intensity 52 | end 53 | 54 | function TIC() 55 | doPalette() 56 | cls(0) 57 | 58 | xCam=sin(T/5.1) 59 | yCam=sin(T/4.2) 60 | zCam=sin(T/3.3)*3-4 61 | 62 | points={} 63 | for z=-1,1,.5 do 64 | for y=-1,1,.5 do 65 | for x=-1,1,.5 do 66 | p={x=x,y=y,z=z} 67 | p=rotX(p,sin(T/6.1)*2) 68 | p=rotY(p,sin(T/3.2)*2) 69 | p=rotZ(p,sin(T/4.3)*2) 70 | p=persp(p) 71 | if p.z<0 then 72 | points[#points+1]=p 73 | end 74 | end 75 | end 76 | end 77 | 78 | table.sort( 79 | points, 80 | function(a,b) 81 | return a.z-16 then 75 | print(msg,x+1,y+1,15,true,2) 76 | print(msg,x,y,12,true,2) 77 | end 78 | end 79 | 80 | elli(120,125,150,20,1) 81 | 82 | for i=4,1,-1 do 83 | m=M[i] 84 | local bounce=M[i].v*10 85 | local h=m.h+bounce 86 | local y=135-m.h-bounce/2-i*5 87 | local ym=y+h/3 88 | local ye=y-h 89 | local es=11-i 90 | elli(m.x+1,y+1,m.w,h,i*2-1) 91 | elli(m.x,y,m.w,h,i*2) 92 | elli(m.x,ym,m.w*.8,M[i].v*15,i*2-1) 93 | elli(m.x,ym,m.w*.8,M[i].v*15-2,12) 94 | elli(m.x,ym,m.w*.8,M[i].v*9,15) 95 | circ(m.x+1,ye+1,es,i*2-1) 96 | circ(m.x,ye,es,12) 97 | circ(m.x,ye,es-5,15) 98 | end 99 | 100 | vbank(0) 101 | cls() 102 | 103 | for x=0,240 do 104 | for y=0,136 do 105 | local p=S(x*.1)+C(y*.1)+T*0.01 106 | local a=A(x,y) 107 | p=8+math.sin(p*.5+a+S(T*0.005))*7 108 | pix(x,y,p) 109 | end 110 | end 111 | 112 | for i=0,10 do 113 | for s=10,0,-1 do 114 | a=(math.pi*2*i/10-T*.01+s*.05) 115 | d=110+S(s*.4+T*.05)*40 116 | x=120+C(a)*160 117 | y=150+S(a)*d+S(s-T*.1)*20 118 | col=1+s%15 119 | circ(x+1,y+1,15-s,1+(col+5)%15) 120 | circ(x,y,15-s,col) 121 | end 122 | end 123 | 124 | T=T+1 125 | --[[ 126 | rect(0,0,32,fft1*136,12) 127 | rect(60,0,32,fft2*136,12) 128 | rect(120,0,32,fft3*136,12) 129 | rect(180,0,32,fft4*136,12) 130 | --]] 131 | end 132 | 133 | function aveFFT(st,c,m) 134 | local acc=0 135 | for i=st,st+c do 136 | acc=acc+fft(i) 137 | end 138 | return math.max(0,math.min(1,(m*acc/c))) 139 | end 140 | 141 | function openV(m) 142 | if m.f>m.v*.8 then 143 | m.v=m.f 144 | else 145 | m.v=m.v*.95 146 | end 147 | if m.v>.3 then 148 | m.v=m.v*(1+math.sin(T*.1+m.f*.2)*.1) 149 | end 150 | end 151 | -------------------------------------------------------------------------------- /bytejam-20230814/bytejam-20230814.lua: -------------------------------------------------------------------------------- 1 | -- Greetz to: Aldroid, The Wolf, 2 | -- Ferris, Mantratronic, 3 | -- Alia, Gasman 4 | -- Byte Jam Viewers! 5 | 6 | SIN,COS=math.sin,math.cos 7 | 8 | T=0 9 | VINES={} 10 | 11 | function BDR(y) 12 | for i=0,4 do 13 | for s=0,2 do 14 | local addr=0x3FC3+(i*3+s)*3 15 | local r=.5+SIN(i+s*.2+y*.02+T*.03)*.5 16 | local g=.5+SIN(1+i+s*.2+y*.022+T*.03)*.5 17 | local b=.5+SIN(2+i+s*.2+y*.023+T*.03)*.5 18 | poke(addr,r*255//1) 19 | poke(addr+1,g*255//1) 20 | poke(addr+2,b*255//1) 21 | end 22 | end 23 | end 24 | 25 | function BOOT() 26 | startVine() 27 | end 28 | 29 | function startVine() 30 | if #VINES==50 then 31 | VINES={} 32 | end 33 | 34 | local r=math.random(3) 35 | if r==0 then 36 | x,y=math.random(-20,239+20),-20 37 | a=math.pi/2 38 | elseif r==1 then 39 | x,y=239+20,math.random(-20,135+20) 40 | a=math.pi 41 | elseif r==2 then 42 | x,y=math.random(-20,239+20),139+20 43 | a=math.pi*1.5 44 | else 45 | x,y=-20,math.random(-20,135+20) 46 | a=0 47 | end 48 | a=a+math.random()-.5 49 | makeVine(x,y,a) 50 | end 51 | 52 | function TIC() 53 | cls() 54 | 55 | for i=1,#VINES do 56 | local v=VINES[i] 57 | if v.active and T%5==1 then 58 | addSeg(v) 59 | end 60 | 61 | local offScreen=doVine(v,4) 62 | if v.active and offScreen then 63 | v.active=false 64 | startVine() 65 | end 66 | end 67 | 68 | print("VINE JAM",190,2,4) 69 | 70 | T=T+1 71 | end 72 | 73 | function makeVine(x,y,a) 74 | VINES[#VINES+1]={ 75 | x=x, 76 | y=y, 77 | c=math.random(1,15), 78 | a={a}, 79 | aim=a, 80 | active=true, 81 | age=0, 82 | } 83 | end 84 | 85 | function addSeg(v) 86 | local lastA=v.a[#v.a] 87 | local dA=v.aim-lastA 88 | 89 | v.a[#v.a+1]=lastA+dA*.3 90 | end 91 | 92 | function doVine(v,wSrc) 93 | local xl0,yl0=v.x,v.y 94 | xl0=xl0+math.sin(T*.02+v.age*.03)*10 95 | yl0=yl0+math.sin(T*.01+v.age*.04)*10 96 | for i=1,#v.a do 97 | w=((#v.a-i)*.2)*wSrc*(v.age^.7)/100 98 | w=math.min(w,10) 99 | local a=v.a[i] 100 | local ls=SIN(a) 101 | local lc=COS(a) 102 | local xl1=xl0+lc*10 103 | local yl1=yl0+ls*10 104 | 105 | local fx00=xl0-ls*w 106 | local fy00=yl0+lc*w 107 | local fx01=xl0+ls*w 108 | local fy01=yl0-lc*w 109 | 110 | local fx10=xl1-ls*w 111 | local fy10=yl1+lc*w 112 | local fx11=xl1+ls*w 113 | local fy11=yl1-lc*w 114 | 115 | tri(fx00,fy00,fx01,fy01,fx10,fy10,v.c) 116 | tri(fx10,fy10,fx11,fy11,fx01,fy01,v.c) 117 | 118 | if i%2==0 then 119 | local lx1=fx11+ls*w 120 | local ly1=fy11-lc*w 121 | tri(fx11,fy11,lx1,ly1,fx01,fy01,v.c-1) 122 | else 123 | local lx1=fx10-ls*w 124 | local ly1=fy10+lc*w 125 | tri(fx10,fy10,lx1,ly1,fx00,fy00,v.c-1) 126 | end 127 | 128 | xl0,yl0=xl1,yl1 129 | 130 | if xl0<-50 or xl0>=240+50 or 131 | yl0<-50 or yl0>=136+50 then 132 | return true 133 | end 134 | end 135 | 136 | v.age=v.age+1 137 | 138 | if math.random()<.03 then 139 | v.aim=math.random()*math.pi*2 140 | end 141 | 142 | return false 143 | end 144 | 145 | -- 146 | -- 000:00000000ffffffff00000000ffffffff 147 | -- 001:0123456789abcdeffedcba9876543210 148 | -- 002:0123456789abcdef0123456789abcdef 149 | -- 150 | 151 | -- 152 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 153 | -- 154 | 155 | -------------------------------------------------------------------------------- /bytejam-20230417/directors.lua: -------------------------------------------------------------------------------- 1 | S=math.sin 2 | C=math.cos 3 | A=math.atan2 4 | PI=math.pi 5 | PI2=PI*2 6 | T=0 7 | 8 | DOTS={} 9 | function addDot(xc,yc,a) 10 | getIFreeDot=function() 11 | for i=1,#DOTS do 12 | local dot=DOTS[i] 13 | if dot.life<0 then 14 | return i 15 | end 16 | end 17 | return #DOTS+1 18 | end 19 | 20 | nextFree=getIFreeDot() 21 | DOTS[nextFree]={ 22 | x=xc, 23 | y=yc, 24 | a=a, 25 | life=100, 26 | } 27 | end 28 | 29 | function doDot(dot) 30 | if dot.life>=0 then 31 | local aliveness=dot.life/100 32 | local size=1+aliveness*4 33 | circ(dot.x,dot.y,size,aliveness*15) 34 | dot.life=dot.life-1 35 | dot.x=dot.x+S(dot.a)*1 36 | dot.y=dot.y+C(dot.a)*1 37 | end 38 | end 39 | 40 | 41 | -- COLOURS!!! 42 | function BDR(y) 43 | vbank(0) 44 | for c=0,14 do 45 | local addr=0x3FC0+(1+c)*3 46 | local i=c/14 47 | local r=0.5+S(i*.2)*.25+S(T*.012+y*.007)*.25 48 | local g=0.5+S(i*.3)*.25+S(T*.013+y*.009)*.25 49 | local b=0.5+S(i*.4)*.25+S(T*.015+y*.012)*.25 50 | poke(addr,(r*255)//1) 51 | poke(addr+1,(g*255)//1) 52 | poke(addr+2,(b*255)/1) 53 | end 54 | 55 | vbank(1) 56 | poke(0x3FC0+3,128) 57 | poke(0x3FC0+4,128) 58 | poke(0x3FC0+5,128) 59 | for c=0,13 do 60 | local addr=0x3FC0+(c+2)*3 61 | local i=c/14 62 | local r=.5+S(1+i*.9+T*.02+y*.010)*.5 63 | local g=.5+S(2+i*.8+T*.017+y*.012)*.5 64 | local b=.5+S(i*.7+T*.015+y*.03)*.5 65 | poke(addr,r*255//1) 66 | poke(addr+1,g*255//1) 67 | poke(addr+2,b*255//1) 68 | end 69 | 70 | local maxOfs=C(((y-68)/68)*(PI2))*30 71 | local stripe=(T*2+y)%300 72 | local ofs=stripe<50 and S(stripe/50*PI2)*20 or 0 73 | 74 | poke(0x3ff9,ofs) 75 | end 76 | 77 | function TIC() 78 | vbank(1) 79 | cls() 80 | 81 | for i=1,#DOTS do 82 | doDot(DOTS[i]) 83 | end 84 | 85 | for s=0,30 do 86 | local ox=s*.8+T*.023 87 | local oy=s*.6+T*.012 88 | local oz=s*1.1+T*.019 89 | local xc=S(ox)*800 90 | local yc=C(oy)*600 91 | local zc=10+S(oz)*20 92 | local xst,yst,ast=drawStar(xc,yc,zc,T*.1,s) 93 | 94 | if T%15==s then 95 | addDot(xst,yst,ast) 96 | end 97 | end 98 | 99 | local lastp=0 100 | for y=0,136 do 101 | for x=0,240 do 102 | p=pix(x,y) 103 | if p>0 then 104 | local dx,dy=x-120,y-68 105 | local d=(dx^2+dy^2)^0.7 106 | local a=A(dx,dy) 107 | local p=p*5+ 108 | S(a^2)+S(d*.05+T*.1) 109 | pix(x,y,2+(p%14)) 110 | elseif(lastp>0)then 111 | pix(x,y,1) 112 | end 113 | lastp=p 114 | end 115 | end 116 | 117 | print("jtruk",209,129,1) 118 | print("jtruk",208,128,15) 119 | 120 | vbank(0) 121 | for y=0,136 do 122 | for x=0,240 do 123 | local dx,dy=x-120,y-68 124 | local d=(dx^2+dy^2)^0.7 125 | local a=A(dx,dy) 126 | local p= 127 | 8 128 | +S( 129 | d*.03 130 | -T*.2 131 | +d*.005+a 132 | )*7 133 | pix(x,y,p) 134 | end 135 | end 136 | 137 | T=T+1 138 | end 139 | 140 | function drawStar(xc,yc,zc,a,c) 141 | local xcp,ycp,zcp=proj(xc,yc,zc) 142 | local size=100/zcp 143 | 144 | for p=0,4 do 145 | local a0=p/5*PI2+a 146 | local xi0=xcp+S(a0)*size 147 | local yi0=ycp+C(a0)*size 148 | local a1=(p+1)/5*PI2+a 149 | local xi1=xcp+S(a1)*size 150 | local yi1=ycp+C(a1)*size 151 | 152 | local a2=(p+.5)/5*PI2+a 153 | local xo=xcp+S(a2)*size*2 154 | local yo=ycp+C(a2)*size*2 155 | 156 | tri(xcp,ycp,xi0,yi0,xi1,yi1,1+c%15) 157 | tri(xi0,yi0,xi1,yi1,xo,yo,1+c%15) 158 | end 159 | 160 | return xcp,ycp,a 161 | end 162 | 163 | function proj(x,y,z) 164 | return 165 | 120+(x/z), 166 | 68+(y/z), 167 | z 168 | end 169 | -- 170 | -- 000:00000000ffffffff00000000ffffffff 171 | -- 001:0123456789abcdeffedcba9876543210 172 | -- 002:0123456789abcdef0123456789abcdef 173 | -- 174 | 175 | -- 176 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 177 | -- 178 | 179 | -------------------------------------------------------------------------------- /snippets/minimal-3d.lua: -------------------------------------------------------------------------------- 1 | -- A smallish code snippet to draw 2 | -- a 3D checkerboard (jtruk) 3 | -- 4 | -- This doesn't do any z-sorting, so 5 | -- the triangles will fight 6 | -- Before drawing, we could either 7 | -- table.sort the triangles on z 8 | -- or we could use ttri, which employs 9 | -- a z-buffer 10 | 11 | -- make some local aliases - for clean code and speed! 12 | local SIN,COS,PI=math.sin,math.cos,math.pi 13 | local MIN,MAX=math.min,math.max 14 | 15 | -- 0-TAU is a full circle for SIN/COS 16 | local TAU=2*PI 17 | 18 | local CAMX,CAMY,CAMZ=0,0,0 19 | 20 | function TIC() 21 | T=time()*.03 22 | 23 | cls() 24 | 25 | -- +ve is right,down,into-screen 26 | CAMZ=-9 27 | CAMY=-1.5 28 | 29 | drawFloor() 30 | drawSpheres({x=0,y=-2,z=0},3,T*.05) 31 | end 32 | 33 | function drawSpheres(centre,radius,t) 34 | local nSpheres=5 35 | for i=1,nSpheres do 36 | local angle=(i/nSpheres)*TAU 37 | local a=angle+t 38 | local p={ 39 | x=COS(a)*radius, 40 | y=SIN(angle+t*2), -- a little tilt! 41 | z=SIN(a)*radius, 42 | } 43 | 44 | p=trans(p,centre) 45 | p=proj(p) 46 | 47 | -- max so that circles are always drawn 48 | -- min so that they don't get ridiculously big 49 | local size=MIN(MAX(20*p.z,.1),40) 50 | circ(p.x,p.y,size,12) 51 | end 52 | end 53 | 54 | function drawFloor() 55 | -- mr? = model rotation in world 56 | local mrX=0 --T*.02 57 | local mrY=0 --T*.025 58 | local mrZ=0 --T*.03 59 | 60 | -- mt? = model transform in world 61 | local mtX=0 --SIN(T*.1) 62 | local mtY=0 --SIN(T*.07) 63 | local mtZ=0 --SIN(T*.08) 64 | 65 | -- lt? = local transform of tile within model 66 | for ltX=-3,3 do 67 | for ltZ=-3,3 do 68 | local ltY=0 --SIN(ltX+ltZ+T*.1) 69 | 70 | -- lr? = local rotation of tile in model 71 | local lrX=0 --T*.05 72 | local lrY=0 --T*.03 73 | local lrZ=0 --T*.08 74 | 75 | -- c = colour (checkerboard) 76 | local c=1+(ltX+ltZ)%2 77 | 78 | drawTile( 79 | {x=lrX,y=lrY,z=lrZ}, 80 | {x=ltX,y=ltY,z=ltZ}, 81 | {x=mrX,y=mrY,z=mrZ}, 82 | {x=mtX,y=mtY,z=mtZ}, 83 | c 84 | ) 85 | end 86 | end 87 | end 88 | 89 | -- lr = local rotate 90 | -- lt = local transform 91 | -- mr = model rotate 92 | -- mt = model transform 93 | function drawTile(lr,lt,mr,mt, c) 94 | -- Four corners of a 1x1 square... 95 | local ps={ 96 | {x=-.5, y=0, z=-.5}, 97 | {x=.5, y=0, z=-.5}, 98 | {x=-.5, y=0, z=.5}, 99 | {x=.5, y=0, z=.5}, 100 | } 101 | 102 | -- Move these points... 103 | for ip=1,#ps do 104 | local p=ps[ip] 105 | 106 | -- rotate tile point around the tile origin 107 | p.x,p.y=rot(p.x,p.y,lr.z) 108 | p.x,p.z=rot(p.x,p.z,lr.y) 109 | p.y,p.z=rot(p.y,p.z,lr.x) 110 | 111 | -- transform tile point within the model 112 | p=trans(p,lt) 113 | 114 | -- rotate model in world 115 | p.x,p.y=rot(p.x,p.y,mr.z) 116 | p.x,p.z=rot(p.x,p.z,mr.y) 117 | p.y,p.z=rot(p.y,p.z,mr.x) 118 | 119 | -- transform model in world 120 | p=trans(p,mt) 121 | 122 | ps[ip]=proj(p) 123 | end 124 | 125 | drawTri(ps[1],ps[2],ps[3],c) 126 | drawTri(ps[2],ps[3],ps[4],c) 127 | end 128 | 129 | function drawTri(ps1,ps2,ps3,c) 130 | tri( 131 | ps1.x,ps1.y, 132 | ps2.x,ps2.y, 133 | ps3.x,ps3.y, 134 | c 135 | ) 136 | end 137 | 138 | -- Translate point p(x,y,z) by t(x,y,z) 139 | function trans(p,t) 140 | return { 141 | x=p.x+t.x, 142 | y=p.y+t.y, 143 | z=p.z+t.z 144 | } 145 | end 146 | 147 | -- Rotate coords (a,b) around r 148 | -- See Tiny Code Christmas Day 11 149 | -- for the expanded version 150 | function rot(a,b,r) 151 | return 152 | a*COS(r)-b*SIN(r), 153 | a*SIN(r)+b*COS(r) 154 | end 155 | 156 | -- Project a point p(x,y,z) in 3D space 157 | -- 120,68 is the pixel centre of the screen 158 | -- All the rest are magic numbers 159 | -- As the distance from the camera gets bigger 160 | -- zD gets smaller, but by diminishing amounts 161 | -- which means x and y get closer to the 162 | -- screen centre, but by diminishing amounts 163 | -- as the object gets further away. 164 | function proj(p) 165 | local projScale=2 166 | local zD=projScale/(p.z-CAMZ) 167 | local pixScale=80 168 | return { 169 | x=120+(p.x-CAMX)*zD*pixScale, 170 | y=68+(p.y-CAMY)*zD*pixScale, 171 | z=zD, 172 | } 173 | end 174 | -------------------------------------------------------------------------------- /bytejam-20230828/bytejam-20230828.lua: -------------------------------------------------------------------------------- 1 | -- Greetz: 2 | -- Aldroid, Synesthesia 3 | -- T^Bach, Alia, Totetmatt 4 | -- Sofa Jam watchers! 5 | 6 | T=0 7 | 8 | -- The mouse button state on last TIC 9 | -- (used for debouncing input) 10 | MOUSE_LAST_B=false 11 | 12 | -- Trifan polygons 13 | -- (colour) ((x),(y),...) 14 | TF={ 15 | -- jacket 16 | {9,116,83,44,102,32,138,206,135,197,105,116,83}, 17 | -- shirt 18 | {13,117,83,86,90,95,137,152,137,146,91,117,83}, 19 | -- shirt neck (for prison outfit) 20 | {10,117,95,117,86,102,86,86,90,87,102,117,106,146,101,144,90,131,85,117,85}, 21 | -- tie 22 | {14,118,114,117,103,108,107,113,115,110,137,129,137,122,113,125,106,117,103}, 23 | -- face 24 | {3,116,50,109,93,132,92,152,70,157,40,149,18,112,11,80,20,81,55,101,88,109,93}, 25 | -- hair 26 | {4,98,24,118,38,144,39,157,34,159,22,136,15,115,8,84,14,78,39,92,40,97,24}, 27 | -- nose 28 | {4,118,60,119,52,123,52,123,61,125,65,117,65,116,59,118,52}, 29 | -- eye mask 30 | {3,118,47,117,51,105,52,91,49,92,42,105,41,118,46,127,42,144,42,147,48,142,52,125,53,117,51}, 31 | -- hair white streak 32 | {12,135,20,125,13,119,15,133,23,150,26,150,22,137,18}, 33 | -- right eye 34 | {12,137,49,143,46,132,46,129,52,139,52,145,48,142,46}, 35 | -- right iris 36 | {0,136,49,136,46,132,48,135,51,135,51,138,49,136,46}, 37 | -- right eyebrow 38 | {4,134,44,130,47,128,44,139,42,140,45}, 39 | -- left eye 40 | {12,105,48,110,47,104,44,98,45,96,48,105,50,109,50,110,47}, 41 | -- left eyeball 42 | {0,104,47,104,45,102,48,104,49,106,48,105,45,103,44}, 43 | -- left eyebrow 44 | {4,111,46,112,42,100,40,100,43}, 45 | -- mouth 46 | {2,121,79,120,77,111,77,108,80,109,82,121,81,130,81,131,79,130,76,124,77,120,77}, 47 | -- ear 48 | {2,85,49,84,46,84,53,86,54,85,49}, 49 | } 50 | 51 | -- A table for drawing the next polygon 52 | SCRATCH={} 53 | 54 | function setCol(c,r,g,b) 55 | poke(0x3fc0+c*3,r) 56 | poke(0x3fc0+c*3+1,g) 57 | poke(0x3fc0+c*3+2,b) 58 | end 59 | 60 | function TIC() 61 | vbank(0) 62 | cls() 63 | for i=1,#TF do 64 | draw(TF[i],i) 65 | end 66 | 67 | drawScratch() 68 | 69 | local mx,my,lb,mb,rb,msx,msy=mouse() 70 | if lb and MOUSE_LAST_B==false then 71 | SCRATCH[#SCRATCH+1]=mx 72 | SCRATCH[#SCRATCH+1]=my 73 | 74 | local str="" 75 | for i=1,#SCRATCH do 76 | if i==1 then 77 | str=string.format("%d",SCRATCH[i]) 78 | else 79 | str=string.format("%s,%d",str,SCRATCH[i]) 80 | end 81 | end 82 | str=string.format("{%s}",str) 83 | trace(str) 84 | end 85 | MOUSE_LAST_B=lb 86 | 87 | -- colour fades... 88 | fade=.5+math.cos(T/80)*.5 89 | r=0*fade+(1-fade)*200 90 | g=0*fade+(1-fade)*100 91 | b=120*fade 92 | setCol(9,r,g,b) 93 | r=255 94 | g=255 95 | b=255 96 | setCol(10,r,g,b) 97 | r=255*fade+(1-fade)*200 98 | g=255*fade+(1-fade)*100 99 | b=255*fade 100 | setCol(13,r,g,b) 101 | r=255*fade+(1-fade)*200 102 | g=0*fade+(1-fade)*100 103 | b=0*fade 104 | setCol(14,r,g,b) 105 | 106 | -- Bars and hands (small) 107 | vbank(1) 108 | cls() 109 | local xofs=math.sin(T/20)*20 110 | for x=-20,300,40 do 111 | rect(x+xofs,0,10,137,15) 112 | rect(x+xofs+2,0,3,137,14) 113 | end 114 | 115 | elli(xofs+12,120,10,20,9) 116 | elli(xofs+190,120,10,20,9) 117 | elli(xofs+12,110,5,13,3) 118 | elli(xofs+190,110,5,13,3) 119 | for y=0,3 do 120 | elli(xofs+20,100+y*6,12,2,3) 121 | elli(182+xofs,100+y*6,12,2,3) 122 | end 123 | r=0*fade+(1-fade)*200 124 | g=0*fade+(1-fade)*100 125 | b=120*fade 126 | setCol(9,r,g,b) 127 | 128 | T=T+1 129 | end 130 | 131 | -- bump can be set to give each trifan 132 | -- a bit of wobble- makes it look more 133 | -- dynamic/trippy 134 | function draw(trifan,bump) 135 | local c=trifan[1] 136 | local x0,y0=trifan[2],trifan[3] 137 | local xL,yL=trifan[4],trifan[5] 138 | 139 | local bx=math.sin(T/10+bump) 140 | local by=math.cos(T/10+bump) 141 | for i=6,#trifan,2 do 142 | local x,y=trifan[i],trifan[i+1] 143 | tri(x0+bx,y0+by,xL+bx,yL+by,x+bx,y+by,c) 144 | xL,yL=x,y 145 | end 146 | end 147 | 148 | function drawScratch() 149 | for i=1,#SCRATCH,2 do 150 | local x,y=SCRATCH[i],SCRATCH[i+1] 151 | pix(x,y,12) 152 | end 153 | end 154 | -- 155 | -- 000:00000000ffffffff00000000ffffffff 156 | -- 001:0123456789abcdeffedcba9876543210 157 | -- 002:0123456789abcdef0123456789abcdef 158 | -- 159 | 160 | -- 161 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 162 | -- 163 | 164 | -------------------------------------------------------------------------------- /bytejam-20230417/jam.lua: -------------------------------------------------------------------------------- 1 | S=math.sin 2 | C=math.cos 3 | A=math.atan2 4 | PI=math.pi 5 | PI2=PI*2 6 | T=0 7 | 8 | DOTS={} 9 | function addDot(xc,yc) 10 | getIFreeDot=function() 11 | for i=1,#DOTS do 12 | local dot=DOTS[i] 13 | if dot.life<0 then 14 | return i 15 | end 16 | end 17 | return #DOTS+1 18 | end 19 | 20 | nextFree=getIFreeDot() 21 | DOTS[nextFree]={ 22 | x=xc, 23 | y=yc, 24 | life=100, 25 | } 26 | end 27 | 28 | function doDot(dot) 29 | if dot.life>=0 then 30 | local size=1+(dot.life/100)*5 31 | circ(dot.x,dot.y,size,15) 32 | dot.life=dot.life-1 33 | dot.y=dot.y+1 34 | end 35 | end 36 | 37 | 38 | -- COLOURS!!! 39 | function BDR(y) 40 | vbank(0) 41 | for c=0,14 do 42 | local addr=0x3FC0+(1+c)*3 43 | local i=c/14 44 | -- local r=0.5+S(i)*.25+S(T*.05+y*.08)*.25 45 | -- local g=0.5+S(.3+i)*.25+S(T*.06+y*.1)*.25 46 | -- local b=0.5+S(.6+i)*.25+S(T*.07+y*.12)*.25 47 | local r=0.5+S(.3+i)*.25+S(T*.04+y*.05)*.25 48 | local g=0.5+S(.2+i)*.25+S(T*.06+y*.04)*.25 49 | local b=0.5+S(.5+i)*.25+S(T*.07+y*.06)*.25 50 | poke(addr,(r*255)//1) 51 | poke(addr+1,(g*255)//1) 52 | poke(addr+2,(b*255)/1) 53 | end 54 | 55 | vbank(1) 56 | for c=1,15 do 57 | local addr=0x3FC0+c*3 58 | local i=c/15 59 | local r=0.5-S(i)*.25+S(T*.05+y*.08)*.25 60 | local g=0.5-S(.3+i)*.25+S(T*.06+y*.1)*.25 61 | local b=0.5-S(.6+i)*.25+S(T*.07+y*.12)*.25 62 | poke(addr,(r*255)//1) 63 | poke(addr+1,(g*255)//1) 64 | poke(addr+2,(b*255)/1) 65 | end 66 | 67 | local ofs= 68 | ((S(T*.09+y*.05)*10) 69 | +(S(T*.04+y*.03)*10) 70 | )//1 71 | poke(0x3ff9,ofs) 72 | end 73 | 74 | function TIC() 75 | cls(0) 76 | 77 | vbank(1) 78 | for i=1,#DOTS do 79 | doDot(DOTS[i]) 80 | end 81 | 82 | for s=0,10 do 83 | local ox=(s^2)*.03+T*.05 84 | local oy=(s^2)*.034+T*.032 85 | local oz=(s^2)*.034+T*.032 86 | -- local xc=120+S(ox)*100 87 | -- local yc=68+C(oy)*50 88 | local xc=S(ox)*8 89 | local yc=C(oy)*2 90 | local zc=C(oz)*500+500 91 | xc,yc=drawStar(xc,yc,zc,T*.1,1+(s%15)) 92 | end 93 | 94 | if T%3==1 then 95 | local x=S(T*.02)*120+120 96 | local y=C(T*4)*30+30 97 | addDot(x,y) 98 | end 99 | 100 | for y=0,136 do 101 | for x=0,240 do 102 | if pix(x,y)>0 then 103 | local dx,dy=x-120,y-68 104 | local d=(dx^2+dy^2)^0.7 105 | local a=A(dx,dy) 106 | local p= 107 | 8+ 108 | S(a^2+T*.01+S(d*.1))*7 109 | pix(x,y,p) 110 | end 111 | end 112 | end 113 | 114 | vbank(0) 115 | for y=0,136 do 116 | for x=0,240 do 117 | local dx,dy=x-120,y-68 118 | local d=(dx^2+dy^2)^0.7 119 | local a=A(dx,dy) 120 | -- local p=1+C(T*.1)+d^1.1*(C(T*.01+a/PI2)*.2) 121 | local p= 122 | 8+ 123 | C(d*.1+T*S(T*.03))*.5+S(a^2+T*.01+d*.01+C(a^2))*3 124 | pix(x,y,p) 125 | end 126 | end 127 | 128 | T=T+1 129 | end 130 | 131 | function drawStar(xc,yc,zc,a,c) 132 | for p=0,4 do 133 | local a0=p/5*PI2+a 134 | xc,yc,zc=proj(xc,yc,zc) 135 | local size=zc^.5 136 | local xi0=xc+S(a0)*size 137 | local yi0=yc+C(a0)*size 138 | local a1=(p+1)/5*PI2+a 139 | local xi1=xc+S(a1)*size 140 | local yi1=yc+C(a1)*size 141 | 142 | local a2=(p+.5)/5*PI2+a 143 | local xo=xc+S(a2)*size*2 144 | local yo=yc+C(a2)*size*2 145 | 146 | -- xi0,yi0,z0=proj(xi0,yi0,z) 147 | -- xi1,yi1,z1=proj(xi1,yi1,z) 148 | -- xo,yo,zo=proj(xo,yo,z) 149 | 150 | tri(xc,yc,xi0,yi0,xi1,yi1,c) 151 | tri(xi0,yi0,xi1,yi1,xo,yo,c) 152 | end 153 | 154 | return xc,yc 155 | end 156 | 157 | function proj(x,y,z) 158 | pz=z/100 159 | return 160 | 120+(x/pz), 161 | 68+(y/pz), 162 | z 163 | end 164 | -- 165 | -- 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc 166 | -- 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c 167 | -- 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc 168 | -- 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c 169 | -- 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 170 | -- 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 171 | -- 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 172 | -- 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 173 | -- 174 | 175 | -- 176 | -- 000:00000000ffffffff00000000ffffffff 177 | -- 001:0123456789abcdeffedcba9876543210 178 | -- 002:0123456789abcdef0123456789abcdef 179 | -- 180 | 181 | -- 182 | -- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000 183 | -- 184 | 185 | -- 186 | -- 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 187 | -- 188 | 189 | -- 190 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 191 | -- 192 | 193 | -------------------------------------------------------------------------------- /bytejam-20230828/bytejam-20230828-directors.lua: -------------------------------------------------------------------------------- 1 | -- Greetz: 2 | -- Aldroid, Synesthesia 3 | -- T^Bach, Alia, Totetmatt 4 | -- Sofa Jam watchers! 5 | 6 | T=0 7 | 8 | -- The mouse button state on last TIC 9 | -- (used for debouncing input) 10 | MOUSE_LAST_B=false 11 | 12 | -- Trifan polygons 13 | -- (colour) ((x),(y),...) 14 | TF={ 15 | -- jacket 16 | {c=9,p={116,83,44,102,32,138,206,138,197,105,116,83}}, 17 | -- shirt 18 | {c=13,p={117,83,86,90,95,137,152,137,146,91,117,83}}, 19 | -- shirt neck (for prison outfit) 20 | {c=10,p={117,95,117,86,102,86,86,90,87,95,117,103,146,95,144,90,131,85,117,85}}, 21 | -- tie 22 | {c=14,p={118,114,117,103,108,107,113,115,110,137,129,137,122,113,125,106,117,103}}, 23 | -- head 24 | {c=3,p={116,50,109,93,132,92,152,70,157,40,149,18,112,11,80,35,81,55,101,88,109,93}}, 25 | -- hair 26 | {c=4,p={98,24,118,38,144,39,157,34,159,22,136,15,115,8,84,14,78,39,92,40,97,24}}, 27 | -- nose 28 | {c=4,p={118,60,119,52,123,52,123,61,125,65,117,65,116,59,118,52}}, 29 | -- eye mask 30 | {c=5,p={118,47,117,51,105,52,91,49,92,42,105,41,118,46,127,42,144,42,147,48,142,52,125,53,117,51}}, 31 | -- hair white streak 32 | {c=12,p={135,20,125,13,119,15,133,23,150,26,150,22,137,18}}, 33 | -- right eye 34 | {c=12,p={137,49,143,46,132,46,129,52,139,52,145,48,142,46}}, 35 | -- right iris 36 | {c=0,p={136,49,136,46,132,48,135,51,135,51,138,49,136,46}}, 37 | -- right eyebrow 38 | {c=4,p={134,44,130,47,128,44,139,42,140,45}}, 39 | -- left eye 40 | {c=12,p={105,48,110,47,104,44,98,45,96,48,105,50,109,50,110,47}}, 41 | -- left eyeball 42 | {c=0,p={104,47,104,45,102,48,104,49,106,48,105,45,103,44}}, 43 | -- left eyebrow 44 | {c=4,p={111,46,112,42,100,40,100,43}}, 45 | -- mouth 46 | {c=2,p={121,79,120,77,111,77,108,80,109,82,121,81,130,81,131,79,130,76,124,77,120,77}}, 47 | -- ear 48 | {c=2,p={85,49,84,46,84,53,86,54,85,49}}, 49 | } 50 | 51 | -- A table for drawing the next polygon 52 | SCRATCH={} 53 | 54 | function setCol(c,r,g,b) 55 | poke(0x3fc0+c*3,r) 56 | poke(0x3fc0+c*3+1,g) 57 | poke(0x3fc0+c*3+2,b) 58 | end 59 | 60 | function TIC() 61 | local move=math.sin(T/20) 62 | local fade=(.5+math.cos(T/200-math.pi/8)*.5)^2 63 | 64 | vbank(0) 65 | cls() 66 | for i=1,#TF do 67 | drawTrifan(TF[i],i,-move*14*(1-fade)) 68 | end 69 | 70 | drawScratch() 71 | 72 | local mx,my,lb,mb,rb,msx,msy=mouse() 73 | if lb and MOUSE_LAST_B==false then 74 | SCRATCH[#SCRATCH+1]=mx 75 | SCRATCH[#SCRATCH+1]=my 76 | 77 | local str="" 78 | for i=1,#SCRATCH do 79 | if i==1 then 80 | str=string.format("%d",SCRATCH[i]) 81 | else 82 | str=string.format("%s,%d",str,SCRATCH[i]) 83 | end 84 | end 85 | str=string.format("{p=15,c={%s}}",str) 86 | trace(str) 87 | end 88 | MOUSE_LAST_B=lb 89 | 90 | -- colour fades... 91 | setCol(5,255,150,93) 92 | r=0*fade+(1-fade)*200 93 | g=0*fade+(1-fade)*100 94 | b=120*fade 95 | setCol(9,r,g,b) 96 | r=255 97 | g=255 98 | b=255 99 | setCol(10,r,g,b) 100 | r=255*fade+(1-fade)*200 101 | g=255*fade+(1-fade)*100 102 | b=255*fade 103 | setCol(13,r,g,b) 104 | r=255*fade+(1-fade)*200 105 | g=0*fade+(1-fade)*100 106 | b=0*fade 107 | setCol(14,r,g,b) 108 | 109 | -- Bars and hands (small) 110 | vbank(1) 111 | cls() 112 | if fade<.5 then 113 | local xofs=20+move*8 114 | 115 | for x=-20,240,40 do 116 | rect(x+xofs,0,10,137,15) 117 | rect(x+xofs+2,0,3,137,14) 118 | end 119 | 120 | elli(xofs+10,134,10,30,9) 121 | elli(xofs+192,134,10,30,9) 122 | elli(xofs+12,110,5,13,3) 123 | elli(xofs+190,110,5,13,3) 124 | for y=0,3 do 125 | elli(xofs+20,98+y*6,10,2,3) 126 | elli(182+xofs,98+y*6,10,2,3) 127 | end 128 | 129 | for y=0,135 do 130 | for x=0,239 do 131 | if math.random() 172 | -- 000:00000000ffffffff00000000ffffffff 173 | -- 001:0123456789abcdeffedcba9876543210 174 | -- 002:0123456789abcdef0123456789abcdef 175 | -- 176 | 177 | -- 178 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 179 | -- 180 | 181 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # @JTRUK TIC-80 Sketches 2 | 3 | Source and explanations. 4 | 5 | All licensed permissively as [Code Credit v1.1.0](https://codecreditlicense.com/license/1.1.0) unless otherwise stated. 6 | 7 | Please play, and please let me know if you enjoy, or build anything neat based upon them :) 8 | 9 | Open for collabs if you're into these kind of effects. 10 | 11 | ## Contact 12 | 13 | - [@jtruk@mastodon.social / Mastodon](https://mastodon.social/@jtruk) 14 | - [@jtruk / Twitter](https://twitter.com/jtruk) 15 | - [Hire me!](https://www.creativenucleus.com) 16 | 17 | ## Sketches 18 | 19 | ### August 2023: Byte Jam / August 28 (Study #P01135809) 20 | 21 | A recreation of this week's most famous photo - the Trump mug shot. 22 | 23 | https://github.com/creativenucleus/tic-80-sketches/assets/567996/8c230f8d-5cd5-4fe5-b5cf-934e6aa70832 24 | 25 | I wanted to do something a bit different and hacked together a bootstrapping bit of code that allowed me to click around the screen a few times to make a polygon shape, which would then dump to the trace log, so I could copy+paste it back into the code. The Byte Jam version of TIC doesn't send mouse actions to the server, so this technique was a bit invisible to viewers. 26 | 27 | I try to avoid being too political - partly because it can be divisive and partly because it's hard to say anything new... but everyone loves a wobbly Trump, and many like the look of prison bars. 28 | 29 | Bonus: A pre-jam holding page featuring a sketchy recreation of jazz-painter Bob Ross. 30 | 31 | ![bob-ross](https://github.com/creativenucleus/tic-80-sketches/assets/567996/3e3e3200-5504-49d6-844e-56b27b53d70c) 32 | 33 | - [Project / Code](./bytejam-20230828) 34 | 35 | 36 | ### August 2023: Byte Jam / August 14 37 | 38 | A colourful, building vine/tentacle effect made from triangles. 39 | 40 | This worked quite well. The colour effect was a last minute addition and I think I could do more with movement, but overall happy with that! 41 | 42 | Bonus: A pre-jam holding page featuring mix-ups of the words 'Byte' and 'Jam'. 43 | 44 | - [Project / Code](./bytejam-20230814) 45 | 46 | https://github.com/creativenucleus/tic-80-sketches/assets/567996/0a1589bb-9899-4024-967b-b74b4c534eda 47 | 48 | ### May 2023: Unicorn Blend #256 (Outline 23) / May 18 49 | 50 | Placed 3rd in the [256b Newskool Competition](https://demozoo.org/parties/4627/#competition_17919). 51 | 52 | - [Project / Code](./outline-2023) 53 | - [On tic80.com](https://tic80.com/play?cart=3367) 54 | 55 | https://github.com/creativenucleus/tic-80-sketches/assets/567996/62d848ba-31e9-4fda-9582-e457890556f7 56 | 57 | ### May 2023: Byte Jam / May 15 58 | 59 | Some bouncy cubes. 60 | 61 | This was an attempt to do some structured palette switching. Usually I do some gradient colourwash, but this has bands across the screen in vbank0 and vbank1. 62 | 63 | The technique works, and I think can be tuned and explored. 64 | Your periodic reminder that TIC-80 allows 16 colours on screen at once. Double that if you use vbank1, and you can have 16 per line if you mess with the palette in the BDR() call. 65 | 66 | - [Project / Code](./bytejam-20230515) 67 | 68 | https://github.com/creativenucleus/tic-80-sketches/assets/567996/4a42aaae-d11a-43ff-8ac8-bbd4388213a9 69 | 70 | ### May 2023: Byte Jam / May 1 71 | 72 | A Byte Jam return for the [Martian Madrigal](#feb-2023-martian-madrigal). 73 | 74 | Pretty happy with this one, so no major Director's Cut re-edit. Requires the FFT build of TIC-80, or the [Fake FFT shim](#mar-2023-fake-fft). 75 | 76 | There are a few variables that may benefit from tweaking if you need to match it to music (the FFT ranges, boosting, voice decay, etc). 77 | 78 | - [Project / Code](./bytejam-20230501) 79 | 80 | https://user-images.githubusercontent.com/567996/235526238-fc20caa7-9e65-4c0a-a6b0-a7a564a6a87f.mp4 81 | 82 | ### April 2023: Byte Jam / Apr 17 83 | 84 | Some stars on top of a colourful background. Uses both vbanks and some smooth colouring. 85 | 86 | I broke the Byte Jam version when I tried to make it 3D, and also made a big error in the final pass effect, but spent another hour or so polishing it into the thing that was in my head, so there's a jam version and a director's cut here! 87 | 88 | - [Project / Code](./bytejam-20230417) 89 | 90 | https://user-images.githubusercontent.com/567996/232861072-2fe2d2dc-3f6e-4b8f-bed7-1d9586f05373.mp4 91 | 92 | ### April 2023: Livecoding Experiment / Apr 17 93 | 94 | Inspired by some livecoded visuals/music I've seen, I've coaxed TIC-80 into showing an effect underneath the code that's running it. 95 | 96 | - [Project / Code](./livecoding) 97 | - [On tic80.com](https://tic80.com/play?cart=3320) 98 | 99 | ![livecoding](https://user-images.githubusercontent.com/567996/232860774-6438e9d5-e595-4644-aa39-4e1f4644c4db.gif) 100 | 101 | ### April 2023: Ready Error One / Apr 8 102 | 103 | An entry into Revision 2023 demoparty's Wild competition. Music by Mantratronic. 104 | 105 | - [Project / Code](./readyerrorone) 106 | 107 | Click to watch on YouTube: 108 | [![Watch the video](https://user-images.githubusercontent.com/567996/232862033-fec86f63-e95a-482b-ad75-3cd9c2cbec8b.jpg)](https://www.youtube.com/watch?v=jBA7xwnnrWs) 109 | 110 | ### April 2023: Size Coding / Apr 5 111 | 112 | A DNA twisting effect. Fits into 255 bytes when compressed. 113 | 114 | - [Project / Code](./sizecode-20230405) 115 | 116 | https://user-images.githubusercontent.com/567996/230115294-3601745c-677a-40eb-aee8-4d736e5e4d77.mp4 117 | 118 | ### Mar 2023: Lyte Jam / Mar 30 119 | 120 | Inspired by [Orbital](https://www.orbitalofficial.com/) - a flying shapes tunnel. 121 | 122 | - [Project / Code](./lytejam-20230330) 123 | 124 | [![Orbital effect](https://user-images.githubusercontent.com/567996/229347340-7081dcad-9775-44ce-92cf-0ee5b595bc2d.gif) Click for video](https://user-images.githubusercontent.com/567996/229346989-8b02d147-87be-4ce4-b083-6ff42f24c749.mp4 "Orbital effect") 125 | 126 | ### Mar 2023: Fake FFT 127 | 128 | A fake `fft` function as a fallback for versions of TIC-80 that don't have it. 129 | 130 | - [Project / Code](./fake-fft) 131 | 132 | https://user-images.githubusercontent.com/567996/229523790-7f747fc5-dcfc-45e5-966d-29fd51584818.mp4 133 | 134 | ### Mar 2023: Lyte Jam / Mar 24 135 | 136 | A wobbly fake-rotozoom effect with FFT bars and trippy colours. 137 | 138 | - [Project / Code](./lytejam-20230324) 139 | 140 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229347708-82b6e99d-e2d2-4ec2-966b-dd4e2c63fdfa.gif) Click for video](https://user-images.githubusercontent.com/567996/229347709-3a8b916e-d5bc-46fa-97e7-81eba3f4e634.mp4 "TIC-80 effect") 141 | 142 | ### Mar 2023: Lyte Jam / Mar 16 143 | 144 | Small circles stencilled on top of a zooming concentric circle, with wobble and palette shift. 145 | 146 | - [Project / Code](./lytejam-20230316) 147 | 148 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229347928-0e0684af-a1a7-4c71-bc43-252aa400e861.gif) Click for video](https://user-images.githubusercontent.com/567996/229347925-fd087022-3d54-4c31-abb5-d544f23b8f92.mp4 "TIC-80 effect") 149 | 150 | ### Mar 2023: Lyte Jam / Mar 15 151 | 152 | Colourful tube worms. They look so purposeful! 153 | 154 | - [Project / Code](./lytejam-20230315) 155 | 156 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229349479-324d2fe4-4bd2-494a-9a31-437bec5ac883.gif) Click for video](https://user-images.githubusercontent.com/567996/229349482-5dfc852c-5202-48cf-a974-fa2ecd34d410.mp4 "TIC-80 effect") 157 | 158 | 159 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229349485-99723048-5aa6-43ac-9dda-d7363919ddb5.gif) Click for video](https://user-images.githubusercontent.com/567996/229349489-01e1f5a0-922f-4a26-a976-299be5e8c843.mp4 "TIC-80 effect") 160 | 161 | ### Mar 2023: Byte Jam / Mar 13 162 | 163 | Robot conveyor. 164 | 165 | - [Project / Code](./bytejam-20230313) 166 | 167 | ### Mar 2023: Dotcube 168 | 169 | A floating 3D dot cube, with jazzy background (needs the FFT build of TIC-80). 170 | 171 | - [Project / Code](./dotcube) 172 | 173 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229348163-49509aa9-3ce2-46ca-b24d-0189857fcd7c.gif) Click for video](https://user-images.githubusercontent.com/567996/229348165-fdf58819-0ef0-40ca-9aef-01fa34a387fd.mp4 "TIC-80 effect") 174 | 175 | ### Feb 2023: Byte Jam / Feb 20 176 | 177 | Robot disco. 178 | 179 | - [Project / Code](./bytejam-20230220) 180 | 181 | ### Feb 2023: Martian Madrigal 182 | 183 | - [Project / Code](./martian-madrigal) 184 | - [On tic80.com](https://tic80.com/play?cart=3296) 185 | 186 | An alien barbershop quartet. 187 | 188 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229348437-e101b924-4e0c-41a1-8849-db61d6dd1156.gif) Click for video](https://user-images.githubusercontent.com/567996/229348340-32c04a6f-b1a0-402b-aec6-b599357effde.mp4 "TIC-80 effect") 189 | 190 | ### Feb 2023: Eye of the Machine 191 | 192 | A chaotic cyber/organic eyeball. 193 | 194 | - [Project / Code](./eye-of-the-machine) 195 | 196 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229348650-14026e85-b8dd-44e6-be8a-f28150934831.gif) Click for video](https://user-images.githubusercontent.com/567996/229348655-dd771a85-1641-440b-a00f-0166472ff6df.mp4 "TIC-80 effect") 197 | 198 | ### Feb 2023: FauxjiBoink! 199 | 200 | A modern take on the classic Atari FujiBoink demo. 201 | 202 | - [Project / Code](./fauxjiboink) 203 | - [On tic80.com](https://tic80.com/play?cart=3297) 204 | 205 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229348932-f57722dc-c2cf-4163-bc48-58f130c59269.gif) Click for video](https://user-images.githubusercontent.com/567996/229349144-263a0816-ca38-4442-830c-a9c3c231b8bd.mp4 "TIC-80 effect") 206 | 207 | ### Jan 2023: Jelly Hearts 208 | 209 | Glassy zooming sprites. 210 | 211 | - [Project / Code](./jelly-hearts) 212 | 213 | [![TIC-80 effect](https://user-images.githubusercontent.com/567996/229349245-e323b741-3c6d-4315-8fae-6b14970c2f56.gif) Click for video](https://user-images.githubusercontent.com/567996/229349246-e709c4c8-2783-4802-8a84-09213d2192de.mp4 "TIC-80 effect") 214 | -------------------------------------------------------------------------------- /fake-fft/fake-fft.lua: -------------------------------------------------------------------------------- 1 | -- title: Fake FFT 2 | -- author: @jtruk 3 | -- desc: A shim to run effects that use the TIC-80 FFT fork on non-FFT builds 4 | -- script: lua 5 | -- group: Hex Heroes 6 | -- date: Apr 2023 7 | -- license: Code Credit License v1.1.0 8 | 9 | -- Feel welcome to use this function 10 | -- Explanation/send improvements via: 11 | -- https://github.com/creativenucleus/tic-80-sketches/tree/main/fake-fft 12 | fakeFft=function(n) 13 | local bpm=100 14 | local cycle=(60*1000)/bpm 15 | 16 | local peaks={} 17 | peaks={{ 18 | pos=3, 19 | t=1-(time()%cycle)/cycle 20 | },{ 21 | pos=50, 22 | t=1-((time()+cycle/4)%cycle)/cycle 23 | },{ 24 | pos=90, 25 | t=1-((time()+cycle/2)%cycle)/cycle 26 | },{ 27 | pos=130, 28 | t=1-((2*time()+cycle/8)%cycle)/cycle 29 | },{ 30 | pos=230, 31 | t=1-((2*time()+cycle/4)%cycle)/cycle 32 | }} 33 | 34 | local d=0 35 | for p=1,#peaks do 36 | peak=peaks[p] 37 | d=d+math.max(0,peak.t*(1-math.abs((n-peak.pos)/10^0.4))) 38 | end 39 | 40 | d=math.max(0,d+math.random()*.3) 41 | 42 | return math.min(1,d/(n+1)^.4) 43 | end 44 | 45 | EQ={} 46 | function BOOT() 47 | for i=0,255 do 48 | EQ[i]=0 49 | end 50 | end 51 | 52 | useRealFftFn=true 53 | function TIC() 54 | if btnp(4) then 55 | useRealFftFn=not useRealFftFn 56 | end 57 | 58 | cls() 59 | for n=0,255 do 60 | local fftval=0 61 | if useRealFftFn then 62 | fftval=fft and fft(n) or 0 63 | else 64 | fftval=fakeFft(n) 65 | end 66 | 67 | local x=(n//64)*60 68 | local y=60+n%64 69 | 70 | line(x,y,x+EQ[n]*50,y,1) 71 | line(x,y,x+fftval*50,y,2+(n%10)) 72 | if(fftval>EQ[n])then 73 | EQ[n]=fftval 74 | else 75 | -- decay 76 | EQ[n]=EQ[n]*.995 77 | end 78 | end 79 | 80 | print("Fake FFT generator",0,0,12,false,2) 81 | print("Press button A (keyboard: Z) to toggle",0,15,12) 82 | local str="FFT: " 83 | if(useRealFftFn)then 84 | if fft then 85 | str=str.."Real" 86 | else 87 | str=str.."[!Real is not available]" 88 | end 89 | else 90 | str=str.."Fake" 91 | end 92 | print(str,0,50,12) 93 | end 94 | 95 | -- 96 | -- 000:00000000ffffffff00000000ffffffff 97 | -- 001:0123456789abcdeffedcba9876543210 98 | -- 002:0123456789abcdef0123456789abcdef 99 | -- 100 | 101 | -- 102 | -- 000:cccccccccc00000000000000cccc0000000000000000000000000000cccccccccc00cccccccccc00cccccccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccc0000000000000000000000000000000000000000000000000000000000000000 103 | -- 001:cccccccccc00000000000000cccc0000000000000000000000000000cccccccccc00cccccccccc00cccccccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccc0000000000000000000000000000000000000000000000000000000000000000 104 | -- 002:cccc0000000000cccccccc00cccc0000cc0000cccccc000000000000cccc00000000cccc0000000000cccc00000000000000cccccc000000cccccc0000cccccccc000000cccccc0000cccccccc000000cccccccc00cccccccccc0000cccccc0000cccccccc00000000000000000000000000000000000000 105 | -- 003:cccc0000000000cccccccc00cccc0000cc0000cccccc000000000000cccc00000000cccc0000000000cccc00000000000000cccccc000000cccccc0000cccccccc000000cccccc0000cccccccc000000cccccccc00cccccccccc0000cccccc0000cccccccc00000000000000000000000000000000000000 106 | -- 004:cccccccc0000cc0000cccc00cccccccc0000cccc00cccc0000000000cccccccc0000cccccccc000000cccc000000000000cc0000cccc00cccc00cccc00cccc0000cc00cccc00cccc00cccc0000cc00cc0000cccc0000cccc000000cccc0000cc00cccc0000cc000000000000000000000000000000000000 107 | -- 005:cccccccc0000cc0000cccc00cccccccc0000cccc00cccc0000000000cccccccc0000cccccccc000000cccc000000000000cc0000cccc00cccc00cccc00cccc0000cc00cccc00cccc00cccc0000cc00cc0000cccc0000cccc000000cccc0000cc00cccc0000cc000000000000000000000000000000000000 108 | -- 006:cccc00000000cc0000cccc00cccc0000cc00cccccc00000000000000cccc00000000cccc0000000000cccc000000000000cccccccccc00cccccc000000cccc0000cc00cccccc000000cccc00000000cc0000cccc0000cccc000000cccc0000cc00cccc000000000000000000000000000000000000000000 109 | -- 007:cccc00000000cc0000cccc00cccc0000cc00cccccc00000000000000cccc00000000cccc0000000000cccc000000000000cccccccccc00cccccc000000cccc0000cc00cccccc000000cccc00000000cc0000cccc0000cccc000000cccc0000cc00cccc000000000000000000000000000000000000000000 110 | -- 008:cccc0000000000cccccccc00cccc0000cc0000cccccc000000000000cccc00000000cccc0000000000cccc000000000000000000cccc0000cccccc0000cccc0000cc0000cccccc0000cccc0000000000cccccccc000000cccccc0000cccccc0000cccc000000000000000000000000000000000000000000 111 | -- 009:cccc0000000000cccccccc00cccc0000cc0000cccccc000000000000cccc00000000cccc0000000000cccc000000000000000000cccc0000cccccc0000cccc0000cc0000cccccc0000cccc0000000000cccccccc000000cccccc0000cccccc0000cccc000000000000000000000000000000000000000000 112 | -- 010:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 113 | -- 011:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 114 | -- 015:cccc000000000000000000000000000000cc00000000000cc0000cc00000000000000000000ccc0000000c0cc0000000000000000cc0000000000000000000000000cc0cc00000ccccc0c0000000cc00000000000000cc000000000000000000000cc0000000000000000000000000000000000000000000 115 | -- 016:cc00c0cccc000ccc000cccc00cccc00000cccc00cc00c0ccccc0ccccc00ccc00cccc000000cc00c00000c00cc00c00ccc00c00cc0cccc000ccc000cccc0cccc000cccc0cc0000000cc000c00000ccccc00ccc000000ccccc00ccc000ccc000ccc00cc0000ccc000000000000000000000000000000000000 116 | -- 017:cc00c0cc00c0cc0cc0ccc000ccc0000000cc00c0cc00c00cc0000cc000cc00c0cc00c00000cc00c00000c00cccc00cc0cc0c00cc0cc00c0cc00c0c00cc0cc00c0c00cc000000000cc0000c000000cc000cc00c000000cc000cc00c0c00cc0c00cc0cc000cc0cc00000000000000000000000000000000000 117 | -- 018:cccc00cc0000ccc00000ccc000ccc00000cc00c0cc00c00cc0000cc000cc00c0cc00c00000ccccc00000c00cc00c0ccc0000cccc0cc00c0cc00c0c00cc0cc0000c00cc0cc00000cc00000c000000cc000cc00c000000cc000cc00c0ccccc0ccccc0cc000ccc0000000000000000000000000000000000000 118 | -- 019:cc0000cc00000ccc00cccc00cccc000000cccc000ccc0000ccc000ccc00ccc00cc00c00000cc00c000000c0cc00c00ccc00000cc0cccc000ccc000cccc0cc00000cccc0cc00000ccccc0c00000000ccc00ccc00000000ccc00ccc00000cc0000cc00ccc00ccc000000000000000000000000000000000000 119 | -- 020:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccc000000000000000000000000000000000000000000000000000000000000000000000000000000000ccc000ccc00000000000000000000000000000000000000000000000 120 | -- 050:ccccc0ccccc0cccc0cc00000ccccc0000000cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 121 | -- 051:cc0000cc00000cc00cc00000cc00000cccc0cc00c00ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 122 | -- 052:cccc00cccc000cc000000000cccc00c00cc0cccc00cc0cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 123 | -- 053:cc0000cc00000cc00cc00000cc0000c00cc0cc00c0ccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 124 | -- 054:cc0000cc00000cc00cc00000cc00000cccc0cc00c00ccc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 125 | -- 060:222222211111110000000000000000000000000000000000000000000000661000000000000000000000000000000000000000000000000000000000aa1100000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000 126 | -- 061:333333333333333311000000000000000000000000000000000000000000711000000000000000000000000000000000000000000000000000000000bb1111000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000 127 | -- 062:444444444444444411111111110000000000000000000000000000000000811000000000000000000000000000000000000000000000000000000000222111110000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 128 | -- 063:555555555555555555555555555111111000000000000000000000000000911000000000000000000000000000000000000000000000000000000000333111000000000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000000000000000 129 | -- 064:666666666666666666611000000000000000000000000000000000000000a11000000000000000000000000000000000000000000000000000000000441000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000 130 | -- 065:777777771110000000000000000000000000000000000000000000000000bbb000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000 131 | -- 066:888811100000000000000000000000000000000000000000000000000000211000000000000000000000000000000000000000000000000000000000666000000000000000000000000000000000000000000000000000000000aa0000000000000000000000000000000000000000000000000000000000 132 | -- 067:911111000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000771000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000 133 | -- 068:aaaaa1000000000000000000000000000000000000000000000000000000441000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000 134 | -- 069:bbbb11000000000000000000000000000000000000000000000000000000511000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000 135 | -- 070:221111000000000000000000000000000000000000000000000000000000611000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000 136 | -- 071:333331000000000000000000000000000000000000000000000000000000771000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000 137 | -- 072:444440000000000000000000000000000000000000000000000000000000811000000000000000000000000000000000000000000000000000000000221000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 138 | -- 073:555510000000000000000000000000000000000000000000000000000000911000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000 139 | -- 074:661110000000000000000000000000000000000000000000000000000000a11000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000 140 | -- 075:711110000000000000000000000000000000000000000000000000000000b11000000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000 141 | -- 076:811110000000000000000000000000000000000000000000000000000000222000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000aa0000000000000000000000000000000000000000000000000000000000 142 | -- 077:999910000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000 143 | -- 078:a11100000000000000000000000000000000000000000000000000000000441000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000 144 | -- 079:bbbb10000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000 145 | -- 080:211100000000000000000000000000000000000000000000000000000000611000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000 146 | -- 081:333300000000000000000000000000000000000000000000000000000000711000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000 147 | -- 082:444440000000000000000000000000000000000000000000000000000000881000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 148 | -- 083:555100000000000000000000000000000000000000000000000000000000911000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000000000000000 149 | -- 084:666110000000000000000000000000000000000000000000000000000000aa1100000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000 150 | -- 085:771100000000000000000000000000000000000000000000000000000000bbb111100000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000 151 | -- 086:811100000000000000000000000000000000000000000000000000000000222111111000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000 152 | -- 087:911100000000000000000000000000000000000000000000000000000000331111000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000 153 | -- 088:a11100000000000000000000000000000000000000000000000000000000444100000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000 154 | -- 089:bb1100000000000000000000000000000000000000000000000000000000511000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000 155 | -- 090:222100000000000000000000000000000000000000000000000000000000611000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000 156 | -- 091:311100000000000000000000000000000000000000000000000000000000711000000000000000000000000000000000000000000000000000000000bb0000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000 157 | -- 092:441100000000000000000000000000000000000000000000000000000000881000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000 158 | -- 093:551100000000000000000000000000000000000000000000000000000000991000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000 159 | -- 094:666100000000000000000000000000000000000000000000000000000000aa1000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000 160 | -- 095:711100000000000000000000000000000000000000000000000000000000b11000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000 161 | -- 096:888100000000000000000000000000000000000000000000000000000000222000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000aa1000000000000000000000000000000000000000000000000000000000 162 | -- 097:911100000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000bb1100000000000000000000000000000000000000000000000000000000 163 | -- 098:a11100000000000000000000000000000000000000000000000000000000444000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000221111100000000000000000000000000000000000000000000000000000 164 | -- 099:b11100000000000000000000000000000000000000000000000000000000511000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000311110000000000000000000000000000000000000000000000000000000 165 | -- 100:211000000000000000000000000000000000000000000000000000000000611000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000441000000000000000000000000000000000000000000000000000000000 166 | -- 101:311100000000000000000000000000000000000000000000000000000000771000000000000000000000000000000000000000000000000000000000bb0000000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000 167 | -- 102:411000000000000000000000000000000000000000000000000000000000881000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000 168 | -- 103:555500000000000000000000000000000000000000000000000000000000991000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000 169 | -- 104:666600000000000000000000000000000000000000000000000000000000aa1000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000 170 | -- 105:777000000000000000000000000000000000000000000000000000000000bb1000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000 171 | -- 106:881000000000000000000000000000000000000000000000000000000000221000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000 172 | -- 107:911100000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000bb0000000000000000000000000000000000000000000000000000000000 173 | -- 108:aaaa10000000000000000000000000000000000000000000000000000000441000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000 174 | -- 109:bbbbbbb11000000000000000000000000000000000000000000000000000511000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000 175 | -- 110:222222211111100000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000 176 | -- 111:333333111000000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000000000000000bb0000000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000 177 | -- 112:441110000000000000000000000000000000000000000000000000000000888000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 178 | -- 113:551000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000 179 | -- 114:661000000000000000000000000000000000000000000000000000000000aaa000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000 180 | -- 115:771000000000000000000000000000000000000000000000000000000000bb0000000000000000000000000000000000000000000000000000000000510000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000 181 | -- 116:811000000000000000000000000000000000000000000000000000000000211000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000aa0000000000000000000000000000000000000000000000000000000000 182 | -- 117:991000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000 183 | -- 118:a11000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000 184 | -- 119:bbb000000000000000000000000000000000000000000000000000000000551000000000000000000000000000000000000000000000000000000000910000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000 185 | -- 120:221000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000a10000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000 186 | -- 121:333000000000000000000000000000000000000000000000000000000000770000000000000000000000000000000000000000000000000000000000b10000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000 187 | -- 122:411000000000000000000000000000000000000000000000000000000000881000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 188 | -- 123:511000000000000000000000000000000000000000000000000000000000999000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000 189 | -- 190 | 191 | -- 192 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 193 | -- 194 | 195 | -------------------------------------------------------------------------------- /outline-2023/unicorn-blend-256.lua: -------------------------------------------------------------------------------- 1 | -- title: Unicorn Blend 256 2 | -- author: jtruk 3 | -- date: 2023-05-18 4 | -- release: Outline 2023 5 | C,T=math.cos,0 6 | 7 | function BDR(y) 8 | for i=3,47 do 9 | poke(16320+i,127+C(i%3*(C(T*.002)*2.4)+i/(70+C(T*.003)*30)-y*.008)*127) 10 | end 11 | end 12 | 13 | function TIC() 14 | cls(1) 15 | for i=0,99 do 16 | A=C(T*.013)/2-i*(C(T*.0027)+3) 17 | L=220*C(i/63) 18 | j,k,l=D(0),D(.3),D(.6) 19 | tri( 20 | j.x,j.y,k.x,k.y,l.x,l.y, 21 | 8+C(i*C(T*.003))*7 22 | ) 23 | end 24 | T=T+1 25 | end 26 | 27 | function D(a) 28 | a=A/3+a*(6.2-C(T*.008)*3) 29 | x,y=C(a)*L,C(a-11)*L 30 | return {x=120+x+y*C(T*.02),y=68+y} 31 | end 32 | 33 | -- 34 | -- 000:333333333333bbbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecccccccccccceeeeeeeeeeedddddddddddddddddddddddddd888888888881111111111111111111111111111addddddddddddddddeeeeeeeeeeeeeee33333333333333333333333333333333333dddd9999999999999999999999 35 | -- 001:333333333333bbbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeccccccccccccceeeeeeeeeeeedddddddddddddddddddddddd8888888888881111111111111111111111111111aaaaddddddddddddeeeeeeeeeeeeeeee3333333333333333333333333333333333ddddd999999999999999999999 36 | -- 002:3333333333333bbbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeccccccccccccccceeeeeeeeeeeedddddddddddddddddddddddd8888888888881111111111111111111111111111aaaaaaddddddddeeeeeeeeeeeeeeeee33333333333333333333333333333333333dddd999999999999999999999 37 | -- 003:3333333333333bbbbbbbbbbbbbbbbeeeeeeeeeee7eeeeeeeeeeeeeeeeeccccccccccccccceeeeeeeeeeeeeed99ddddddddddddddddddd88888888888881111111111111111111111111111aaaaaaaadddddeeeeeeeeeeeeeeeeee3333333333333333333333333333333333ddddd99999999999999999999 38 | -- 004:33333333333333bbbbbbbbbbbbbbbeeeeeeeeeeee777eeeeeeeeeeeeeecccccccccccccccceeeeeeeeeeeee9999ddddddddddddddddddd8888888888888331111111111111111111111111aaaaaaaaaaaadeee1eeeeeeeeeeeeeee3333333333333333333333333333333333ddddd9999999999999999999 39 | -- 005:33333333333333bbbbbbbbbbbbbbbeeeeeeeeeeeee7777eeeeeeeeeeecccccccccccccccccceeeeeeeeeee999999dddddddddddddddddd88888888888888333333111111111111111111111aaaaaaaaaaaaaa111eeeeeeeeeeeeeee333333333333333333333333333333333ddddd9999999999999999999 40 | -- 006:eeeeeeeeeeeeeeeeebbbbbbbbbbbbbbbbeeeeeeeeee777777eeeeeeeeccccccccccccccccccceeeeeeee999999999ddddddddddddddddd888888888888888333333333311111111111111111aaaaaaaaaaa11111aeeeeeeeeeeeeee33333333333333333333333333333333335dddd999999999999999999 41 | -- 007:eeeeeeeeeeeeeeeeeeeeeeeebbbbbbbbbbbbbeeeeeee77777777eeeeecccccccccccccccccccceeeeee999999999999dddddddddddddddd888888888888888333333333333333111111111111aaaaaaaaa1111111aaaeeeeeeeeeeee333333333333333333333333333333333555dd999999999999999999 42 | -- 008:eeeeeeeeeeeeeeeeeeeeeeeeebbbbbbbbbbbbbbbbeeee777777777eecccccccccccccccccccccceeee99999999999999ddddddddddddddd8888888888888888333333333333333333311111111aaaaaaa11111111aaaaaaaeeeeeeeee3333333333333333333333333333333335555599999999999999999 43 | -- 009:3eeeeeeeeeeeeeeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbe77777777777cccccccccccccccccccccce99999999999999999eeeeeeeeeeeeeeeeeeeeeeeeee88888333333333333333333333331111aaaa11111111111aaaaaaaaaeeeeee3333333333333333333333333333333335555555599999999999999 44 | -- 010:333eeeeedeeeeeeeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbb777777777777cccccccccccccccccccc9999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee333333333333333333333a1111111111111aaaaaaaaaaaaeee333333333333333333333333333333333555555555599999999999 45 | -- 011:3333eeeeeddeeeeeeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbbb7777777777777cccccccccccccccc9999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333111111111aaaaaaaaaaaaaaae33333333333333333333333333333333555555555555599999999 46 | -- 012:333333eeeeddddeeeeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbbb77727777777777cccccccccccc9999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333333311111aaaaaaaaaaaaaaaaaa33333333333333333333333333333355555555555555599999 47 | -- 013:33333333eeedddddeeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbbbb7722777777777777cccccccc999999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee33333333333333333333333333333333111aaaaaaaaaaaaaaaaaaaa33333333333333333333333333355555555555555555599 48 | -- 014:3333333333eeddddddeeeeeeeeeeebbbbbbbbbbbbbbbbbbbbbbb77227777777777777ccccc99999999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333333331111aaaaaaaaaaaaaaaaaaaaaaaa3333333333333333333333335555555555555555555 49 | -- 015:333333333ddeedddddddeeeeeeeeeebbbbbbbbbbbbbbbbbbbbbbb7222277777777777777999999999999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333333311111aaaaaaaaaaaaaaaaaaaaaaaaaa3333333333333333333335555555555555555555 50 | -- 016:333333dddddddedddddddddeeeeeeeebbbbbbbbbbbbbbbbbbbbbbb2222277777777777777799999999999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee333333333333333333333333333311111aaaaaaaaaaaaaaaaaaaaaaaaaaaaa3333333333333333333555555555555555555 51 | -- 017:33dddddddddddddddddddddddeeeeeebbbbbbbbbbbbbbbbbbbbbbbb2222227777777777117777999999999999999999999999999999eeeeee5eeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333331111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa333333333333333555555555555555555 52 | -- 018:dddddddddddddddddddddddddddeeeeebbbbbbbbbbbbbbbbbbbbbbb22222227777777771111777799999999999999999999999999999eeeee5eeeeeeeeeeeeeeeeeeeeeeeeeeee3333333333333333333333333311111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa333333333333355555555555555555 53 | -- 019:dddddddddddddddddddddddddddddeeeebbbbbbbbbbbbbbbbbbbbbbb22222227777777711111177777999999999999999999999999999eeee55eeeeeeeeeeeeeeeeeeeeeeeeeeee333333333333333333333333111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3333333333355555555555555555 54 | -- 020:dddddddddddddddddddddddddddddddeeebbbbbbbbbbbbbbbbbbbbbb2222222227777771111111177777999999999999999999999999999ee555eeeeeeeeeeeeeeeeeeeeeeeeeeee333333333333333333333331111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3333333333335555555555555555 55 | -- 021:ddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbbbb2222222227777711111111117777779999999999999999999999999e5555eeeeeeeeeeeeeeeeeeeeeeeeeeee333333333333333333333111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa333333333335555555555555555 56 | -- 022:dddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbbb2222222222777711111111111777777779999999999999999999999955555eeeeeeeeeeeeeeeeeeeeeeeeeee663333333333333333333111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa333333333333555555555555555 57 | -- 023:ddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbb22222222222277711111111111177777777999999999999999999999555555eeeeeeeeeeeeeeeeeeeeeeeeeee666633333333333333331111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa33333333333555555555555555 58 | -- 024:dddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbb22222222222277111111111111117777777779999999999999999995555555eeeeeeeeeeeeeeeeeeeeeeeeeee66666633333333333311111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa33333333333355555555555555 59 | -- 025:dddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbb222222222222271111111111111111771777777999999999999999955555555eeeeeeeeeeeeeeeeeeeeeeeeeee66666666333333333111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacc333333333355555555555555 60 | -- 026:ddddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbb9222222222222211111111111111111171177777779999999999995555555555eeeeeeeeeeeeeeeeeeeeeeeeee666666666663333311111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccc3333333335555555555555 61 | -- 027:dddddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbb9992222222222222111111111111111111111177777777999999999951111155555eeeeeeeeeeeeeeeeeeeeeeeeee66666666666663311111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccc3333335555555555555 62 | -- 028:ddddddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbbbb999992222222222221111111111111111111111117777777779111111111111555555eeeeeeeeeeeeeeeeeeeeeeeeee66666666666666611111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccc33333555555555555 63 | -- 029:5dddddddddddddddddddddddddddddddddddddddbbbbbbbbbbbbb999999922222222222211111111111111111111111117711111111111111111115555555eeeeeeeeeeeeeeeeeeeeeeeeee6666666666666666611111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc33555555555555 64 | -- 030:555ddddddddddddddddddddddddddddddddddddddbbbbbbbbbbb99999999222222222222111111111111111111111111111111111111111111111115555555bbbeeeeeeeeeeeeeeeeeeeeeee6666666666666666666111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc325555555555 65 | -- 031:5555ddddddddddddddddddddddddddddddddddddddbbbbbbbbb9999999999222222222221111111111111111111111111111111111111111111111155555555bbbbbbeeeeeeeeeeeeeeeeeee66666666666666666666661111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccc255555555 66 | -- 032:55555ddddddddddddddddddddddddddddddddddddddbbbbbb9999991111992222222222211111111111111111111111111111111111111111111111555555555bbbbbbbbbeeeeeeeeeeeeeeee6666666eee666666666666661111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccc2555555 67 | -- 033:555555dddddddddddddddddddddddddddddddddddddbbbbb999999991111111111112211111111111111111111111111111111111111111111111111555555555bbbbbbbbbbbbeeeeeeeeeeeee6666eeeee66666666666666661111112aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccc5555 68 | -- 034:55555555ddddddddddddddddddddddddddddddddddddbbb99999999999111111111111111111111111111111111111111111111111111111111111115555555555bbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeee666666666666666666111122aaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccc55 69 | -- 035:555555555dddddddddddddddddddddddddddddddddddd99999999999111111111111111111111111111111111111111111411111111111111111111155555555555bbbbbbbbbbbbbbbbbbeeeeeeeeeeeeeee66666666666666666666612222aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccc 70 | -- 036:5555555555dddddddddddddddddddddddddddddddddd9999911111111111111111111111111111111111111111111111144411111111111111111111555555555555bbbbbbbbbbbbbbbbbbbbbeeeeeeeeeeee666666666666666666666662222aaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccc 71 | -- 037:555555555555ddddddddddddddddddddddddddddddd999111111111111111111111111111111111111111111111111111444411111111111111111111555555555555bbbbbbbbbbbbbbbbbbbbbbbbeeeeeeee66666666666666666666666666222aaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccc 72 | -- 038:5555555555555dddddddddddddddddddddddddddd999999111111111111111111111111111111111111111111111111144444111111111111111111115555555555555bbbbbbbbbbbbbbbbbbbbbbbbbbbeeeee6666666666666666666666666666222aaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccc 73 | -- 039:55555555555555dddddddddddddddddddddddddd99999999111111111111111111111311111111111111111111111114444444111111111111111111111555555555555bbbbbbbbbbbbbbbbbbbbbbbbbbeeeee666666666666666666666666666666622aaaaaaaaaaaaaaaaaaaaacccccccccccccccccccc 74 | -- 040:5555555555555555ddddddddddddddddddddded9999999999111111111111111111111331111111166111111111111144444444111111111111111111111111111115555bbbbbbbbbbbbbbbbbbbbbbbbeeeeeee6666666666666666666666666666666662aaaaaaaaaaaaaaaaaaacccccccccccccccccccc 75 | -- 041:55555555555555555dddddddddddddddddddd99999999999991111111111111111111113331111111666661111111144444444441111111111111111111111111111111557bbbbbbbbbbbbbbbbbbbbbeeeeeeee666666666666666666666666666666666622aaaaaaaaaaaaaaaaacccccccccccccccccccc 76 | -- 042:aaaa55555555555555dddddddddddddddddd99999999999999991111111111111111111133331111116666666111114444444444411111111111111111111111111111155577bbbbbbbbbbbbbbbbbbeeeeeeeeee6666666666666666666666666666666662222aaaaaaaaaaaaaaaaccccccccccccccccccc 77 | -- 043:aaaaaaaaaaaaa5555555ddddddddddddddd999999999999999999111111111111111111113333311116666666666144444444444411111111111111111111111111111115557777bbbbbbbbbbbbbbbeeeeeeeeee6666666666666666666666666666666666222222aaaaaaaaaaaaaccccccccccccccccccc 78 | -- 044:aaaaaaaaaaaaaaaaaaaaadddddddddddd9999999999999999999991111111111111111111333333311166666666666644444444444111118111111111111111111111111155577777bbbbbbbbbbbbeeeeeeeeeeee66666666666666666666666666666666622222222aaaaaaaaaaaacccccccccccccccccc 79 | -- 045:5aaaaaaaaaaaaaaaaaaaaadddddddddd99999999999999999999999111111111111111111133333333116666666666996664444444411888811111111111111111111111155557777777bbbbbbbbeeeeeeeeeeeee6666666666666666666666666666666662222222222aaaaaaaaaaeccccccccccccccccc 80 | -- 046:555aaaaaaaaaaaaaaaaaaaaddddddddd9999999999999999999999999111111111111111111333333333666666666669996666444448888888111111111111111111111111555577777777bbbbbeeeeeeeeeeeeeee66666666666666666666666666666666222222222222aaaaaaaaeeeccccccccccccccc 81 | -- 047:5555aaaaaaaaaaaaaaaaaaaaadddddddddd9999999944499999999999911111111111111111133333333366666666666999966668888888888811111111111111111111111155557777777777bbeeeeeeeeeeeeeee66666666666666666666666666666666622222222222222aaaaaaeeeeccccccccccccc 82 | -- 048:333355aaaaaaaaaaaaaaaaaaaadddddddddddd999999444444499999999111111111111111111333333333666666666669999988888888888888111111111111111111111111555577777777777eeeeeeeeeeeeeeeee66666666666666666666666666666662222222222222222aaaaeeeeeeccccccccccc 83 | -- 049:33333332aaaaaaaaaaaaaaaaaaaddddddddddddee999994444444444499911111111111111111133333333666666666666999999988888888888881111111111111111111111555557777777777777eeeeeeeeeeeeeeee66666666666666666666666666666222222222222222222aaaeeeeeeeccccccccc 84 | -- 050:333333322aaaaaaaaaaaaaaaaaaaaddddddddddeeecc99944444444444444111111111111111111333333336666666666689999999988888888888811111111111111111111115555577777777777777eeeeeeeeeeeeeeee66666666666666666666666666622222222222222222222aeeeeeeeeeccccccc 85 | -- 051:33333332222aaaaaaaaaaaaaaaaaaaddddddddddecccccc99444444444444441111111111111111133333333666666668888999999999888888888881111111111111111111111555557777777777777777eeeeeeeeeeeeeee66666666666666666666666666222222222222222222222eeeeeeeeeeccccc 86 | -- 052:333333322222aaaaaaaaaaaaaaaaaaadddddddddeccccccccc4444444444444411111111111111111333333466666688888889999999999888888888811111111111111111111155555577777777777777777eeeeeeeeeeeeeee666666666666666666666666222222222222222222222222eeeeeeeeeccc 87 | -- 053:33333332222222aaaaaaaaaaaaaaaaaaadddddddcccccccccccc44444444444441111111111111111133333446668888888888999999999999888888b86661111111111111111115555557777777777777777777eeeeeeeeeeeeee666666666666666666666622222222222222222222222222eeeeeeeee7 88 | -- 054:7733333222222222aaaaaaaaaaaaaaaaaaddddddccccccccccccc4444444444444111111111111111113334444888888888888899999999999998888bb8666661111111111111122225555777777777777777777777eeeeeeeeeeeee66666666666666666666222222222222222222222222222277777777 89 | -- 055:77733332222222222aaaaaaaaaaaaaaaaaadddddccccccccccccccc44444444444411111111111111113344488888888888888889e99999999999988bbb86666666111111112222222555557777777777777777777777eeeeeeeeeeeee666666666666666666622222222222222222222222222222777777 90 | -- 056:7777732222222222222aaaaaaaaaaaaaaaaaaddccccccccccccccccc44444444444441111111111111113488888888888888888889ee99999999999bbbbb8866666666122222222222255555777777777777777777777777eeeeeeeeeeee6666666666666666611222222222222222222222222222222777 91 | -- 057:777777222222222222222aaaaaaaaaaaaaaaaadccccccccccccccccccc444444444444111111111111114888888888888888888888eee9999999999bbbbb888666666666662222222225555557777777777777777777777777eeeeeeeeeeee66666666666666611122222222222222222222222222222227 92 | -- 058:7777772222222222222222aaaaaaaaaaaaaaaaacccccccccccccccccccc44444444444411111111111144444888888888888888888eeee999999999bbbbbb88866666666666662222221555555777777777777777777777777eeeeeeeeeeeeee666666666666611111222222222222222222222222222222 93 | -- 059:777777222222222222222222aaaaaaaaaaaaaaccccccccccccccccccccccc4444444444411111111111444444488888888888888888eeee9999999bbbbbbbb9886666666666622222222115555577777777777777777777777eeeeeeeeeeeeeeee6666666666661111112222222222222222222222222222 94 | -- 060:7777772222222222222222222aaaaaaaaaaaaacccccccccccccccccccccccc444444444441111111114444444444488888888888888eeeeee99999bbbbbbbbb998666666662222222222111155557777777777777777777777eeeeeeeeeeeeeeeeee66666666661111111222222222222222222222222222 95 | -- 061:777777222222222222222222222aaaaaaaaaaacccccccccccccccccccccccccc44444444441111111444444444444466888dd88888eeeeeeeeeeeeeeebbbbbbb99996666622222222222211111555777777777777777777777eeeeeeeeeeeeeeeeeeee666666661111111112222222222222222222222222 96 | -- 062:77777722222222222222222222222aaaaaaaacccccccccccccccccccccccccccc44444444411111114444444444444466688ddddd88eeeeeeeeeeeeeebbbbbbbb9999966222222222222211111155577777777777777777777eeeeeeeeeeeeeeeeeeeeee6666661111111111122222222222222222222227 97 | -- 063:777772222222222222222222222222aaaaaaaaccccccccccccccccccccccccccccb4444444111111114444444444444466666dddddddeeeeeeeeeeeeebbbbbbbbb999999222222222222211111111557777777777777777777eeeeeeeeeeeeeeeeeeeeeeee66666111111111111222222222222222277777 98 | -- 064:77777222222222222222222222222222aaaaaaaacccccccccccccccccccccccccccb44444411111111114444444444446666666dddddeeeeeeeeeeeeebbbbbbbbbb99999992222222222221111111115777777777777777777eeeeeeeeeeeeeeeeeeeeeeeeee666111111111111122222222227777777777 99 | -- 065:7777722222222222222222222222222222aaaaaaaaccccccccccccccccccccccccccbb4444411111111111444444444446666666ddddeeeeeeeeeeeeebbbbbbbbbb99999999992222222221111111111177777777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeee6111111111111111222277777777777777 100 | -- 066:77777222222222222222222222222222222aaaaaaaaeccccccccccccccccccccccccbbb44441111111111111444444444466666666dddeeeeeeeeeeeeeebbbbbbbbb99999999999222222221111111111117777777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaa1111111117777777777777777 101 | -- 067:7777722222222222222222222222222222222aaaaaaeeecccccccccccccccccccccccbbbb4411111111111111444444444666666666ddeeeeeeeeeeeeeeeebbbbbbbb9999999999222222221111111111111777777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaa11177777777777777 102 | -- 068:e7777222222222222222222222222222222222aaaaaeeeeeccccccccccccccccccccccbbbb4111111111111111144444444666666666deeeeeeeeeeeeeeeeedddbbbbb999999999222222221111111111111117777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaa11117777777777777 103 | -- 069:ee77722222222222222222222222222222222222aaaaeeeeeecccccccccccccccccccccbbbb11111111111111122244444446666666666eeeeeeeeeeeeeeddddddddddb99999999222222222111111111111111177777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaa11111177777777777 104 | -- 070:eeee72222222222222222222222222222222222222aaeeeeeeeeccccccccccccccccccccbbb11111111111222222222444446666666666eeeeeeeeeeeeeeeddddddddddddd99992222222222111111111111111111477777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaa11111111777777777 105 | -- 071:eeeee22222222222222222222222222222222222222aeeeeeeeeeeccccccccccccccccccbbb11111111222222222222244444666666666eeeeeeeeeeeeeeeedddddddddddddd998222222222211111111111111111114444777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaa11111111177777777 106 | -- 072:eeeeeee2222222222222222222222222222222222222eeeeeeeeeeeccccccccccccccccccbb1111111112222222222222244446666666666eeeeeeeeeeeeeeedddddddddddd9998822222222211111111111111111111144444444eeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaa111111111111777777 107 | -- 073:eeeeeeeee22222222222222222222222222222222222eeeeeeeeeeeeecccccccccccccccccb111111111112222222222222244666666666666beeeeeeeeeeeeeedddddddddb999888222222221111111111111111111111444444444444eeeeeeeeeeeeeaaaaaaaaaaaaaaaaaaaaaa111111111111117777 108 | -- 074:eeeeeeeeeee2222222222222222222222222222222222eeeeeeeeeeeeeecccccccccccccccc11111111111111222222222222346666666666bbbbddeeeeeeeeeeedddddddbb99988882222222211111111111111111111111444444444eeeeeeeeeeeeeaaaaaaaaaaaaaaaaaaaaaaa111111111111111177 109 | -- 075:eeeeeeeeeeeee22222222222222222222222222222222eeeeeeeeeeeeeeeeccccccccccccccbbbbb222222222222222222222233666666666bbbbbdddeeeeeeeeeeddddddbbb9988888222222211111111114444444444444444444444eeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaaaaaa111111111111111117 110 | -- 076:eeeeeeeeeeeeeee222222222222222222222222222222eeeeeeeeeeeeeeeeeecccccccccccccbbbb222222222222222222222223666666666bbbbbbddddddeeeeeeeddddbbbbb98888882222222111111111114444444444444444444eeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaaaaa111111111111111111 111 | -- 077:eeeeeeeeeeeeeeeee2222222222222222222222222222eeeeeeeeeeeeeeeeeeeeccccccccccccbbbb2222222222222112222222236666666bbbbbbbbbdddddddeeeeeedbbbbbbb8888888222222111111111111444444444444444444eeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaa1111111111111111111 112 | -- 078:eeeeeeeeeeeeeeeeee7722222222222222222222222222eeeeeeeeeeeeeeeeeeeeecccccccccccbbb2222222222222211122222233666666bbbbbbbbbbdddddddddeeeebbbbbbbb888888882222111111111111114444444444444444eeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaa1111111111111111111 113 | -- 079:eeeeeeeeeeeeeeeeeeee77222222222222222222222222eeeeeeeeeeeeeeeeeeeeeeecccccccccbbbb222222222222221111222223666666666644bbbbbdddddddddddeebbbbbbbb8888888822221111111111111144444444444444eeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaa1111111111111111111 114 | -- 080:eeeeeeeeeeeeeeeeeeeeee222222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeccccccccbbb222222222222222211111222366666666444444444bddddddddbbbbbbbbbbbb3888888822211111111111111114444444444449eeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaa1111111111111111111 115 | -- 081:eeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeecccccccbbb2222222222222222111111223666666444444444444ddddddbbbbbbbbbbbbbb3338888832211111111111111114444444444999eeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaa1111111111111111111 116 | -- 082:eeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeccccccbb222222222222222221111111266666333444444444444dddd99999bbbbbbbbbb3333888833111111111111111114444444449999eeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaa1111111111111111111 117 | -- 083:eeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeccccbb2222222222222222221111111166333333344444444444dd499999999993bbbb33333338833311111111111111111444444999999eeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaa51111111111111111111 118 | -- 084:eeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecccbb2222222222222222221111111133333333334444444444444999999999333333333333338333311111111111111114444499999999eeeeeeeeeeeeeeeeeeeeeeeeeaaaaa55111111111111111111 119 | -- 085:eeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeccb22222222222222222222111111133333333334444444444444999999993333333333333333333331111111111111444444999999999eeeeeeeeeeeeeeeeeeeeeeeeeeaaa55511111111111111111 120 | -- 086:eeeeeeeeeeeeeeeeeeeeeeeee2222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecb22222222222222222222111111133333333333444444444444999999933333333333333333333333111111111444444499999999999eeeeeeeeeeeeeeeeeeeeeeeeeeaa55555111111111111111 121 | -- 087:eeeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb222222222222222222222111111133333333333344444444444499999333333333333333333333333311111444444444599999999999eeeeeeeeeeeeeeeeeeeeeeeeeee55555511111111111111 122 | -- 088:eeeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222eeeeee222222bbbbbeeeeeeeeeeeeeeeeeeeeb2222222222222222222221111111333333333333344444444444999333333333333333333333333333314444444444555999999999999eeeeeeeeeeeeeeeeeeeeeeeeee5555551111111111111 123 | -- 089:eeeeeeeeeeeeeeeeeeeeeeeeee2222222222222222222222222222222222bbbbbbbeeeeeeeeeeeeeeeeeee22222222222222222222221111111333333333333334444444444994333333333333333333333333333334444444445555999999999999eeeeeeeeeeeeeeeeeeeeeeeeeee55555511111111111 124 | -- 090:eeeeeeeeeeeeeeeeeeeeeeeeee22222222222222222222222222222222222bbbbbbbbbeeeeeeeeeeeeeeeeebb222222222222222222222111113333333333333334444444444943333333333333333333333333334444444444455555999999999999eeeeeeeeeeeeeeeeeeeeeeeeeee5555551111111111 125 | -- 091:eeeeeeeeeeeeeeeeeeeeeeeeee22222222222222222222112222222222222bbbbbbbbbbbeeeeeeeeeeeeeeebbbbbb222222222222222222111113333333333333333444444444443333333333333333221111111144444444445555555999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeee55555111111111 126 | -- 092:eeeeeeeeeeeeeeeeeeeeeeeeeee22222222222222222211111222222222222bbbbbbbbbbbbbeeeeeeeeeeeeebbbbbbbbb222222222222222111113333333333333333344444444443333332222222222211111111144444444455555555999999999999eeeeeeeeeeeeeeeeeeeeeeeeeeeee555551111111 127 | -- 093:1eeeeeeeeeeeeeeeeeeeeeeeeee22222222222222221111111112222222222bbbbbbbbbbbbbbbbeeeeeeeeeeebbbbbbbbbbbb2222222222221111133333333333333333344444444422222222222222221111111114444444455555555559999999999999eeeeeeeeeeeeeeeeeeeeeeeeee5555555111111 128 | -- 094:111eeeeeeeeeeeeeeeeeeeeeeee222222222222222111111111111222222222bbbbbbbbbbbbbbbbbeeeeeeeeeebbbbbbbbbbbbbb22222222221111133333333333331112244444444422222222222222221111111114444444555555555559999999999999eeeeeeeeeeeeeeeeeeeeeeee55555555511111 129 | -- 095:111111eeeeeeeeeeeeeeeeeeeeee22222222222211111111111111112222222bbbbbbbbbbbbbbbbbbbbeeeeeeebbbbbbbbbbbbbb555522222222111133311111111111111224444444222222222222222211111111114444455555555555559999999999999eeeeeeeeeeeeeeeeeeeee5555555555555111 130 | -- 096:11111111eeeeeeeeeeeeeeeeeeee222222222221111111111111111111222222bbbbbbbbbbbbbbbbbbbbbbeeeeebbbbbbbbbbbbb5555555522222111111111111111111111112444444222222222222222211111111144444555555555555559999999999999eeeeeeeeeeeeeeeeeee55555555555555511 131 | -- 097:11111111111eeeeeeeeeeeeeeeee2222222222111111111111111111111112222bbbbbbbbbbbbbbbbbbbbbbbeeeebbbbbbbbbbbb555555555555221111111111111111111111112444442222222222222221111111111444455555555555555599999999999999eeeeeeeeeeeeeeee855555555555555551 132 | -- 098:1111111111111eeeeeeeeeeeeeeee222222211111111111111111111111111122bbbbbbbbbbbbbbbbbbbbbbbbbbeebbbbbbbbbbb5555555555555551111111111111111111111111244442222222222222211111111111445555555555555555599999999999999eeeeeeeeeeeeee8885555555555555555 133 | -- 099:11111111111111ceeeeeeeeeeeeee2222221111111111111111111111111111112bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb555555555555555511111111111111111111111111444222222222222222111111111114555555555555555555d9999999999999eeeeeeeeeeee88888555555555555555 134 | -- 100:11111111111111cccceeeeeeeeeeee222111111111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb5555555555555555551111111111111111111111111144222222222222222111111111155555555555555555555ddd99999999999deeeeeeee8888888855555555555555 135 | -- 101:111111111111111ccccceeeeeeeeee2211111111111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb555555555555555555551111111111111111111111122224222222222222222211111111155555555555555555555ddddd9999999999deeeee88888888885555555555555 136 | -- 102:111111111111111cccccccceeeeeee2222111111111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb5555555555555555555551111111111111111111122222222222222222222222211111111155555555555555555555ddddddd99999999dddea88888888888555555555555 137 | -- 103:1111111111111111ccccccccceeeeee2222221111111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555555555555555555551111111111111111122222222222222222222222222221111111555555555555555555555ddddddddd999999dddd88888888888855555555555 138 | -- 104:1111111111111111cccccccccccceee2222222221111111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb555555555555555555555551111111111111144222222222222222222222222222222111111555555555555555555555ddddddddddd9999ddddd888888888885555555555 139 | -- 105:11111111111111111ccccccccccccce22222222222211111111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb5555555555555555555555555111111111114444444222222222222222222222222222111111555555555555555555555ddddddddddddd99dddddd8888888888555555555 140 | -- 106:11111111111111111ccccccccccccccc2222222222222211111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb555555555555555555555111111111144444444444222222222222222222222222211112555555555555555555555ddddddddddddddd9ddddddd8888888855555555 141 | -- 107:11111111111111111ccccccccccccccc2222222222eeeeeee111111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddd5555555555111111111444444444444442222222222222222222222221112555555555555555555555dddddddddddddddddddddddd88888885555555 142 | -- 108:111111111111111111cccccccccccccc22222eeeeeeeeeeeeee51111111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddccccc111111111444444444444444442222222222222222222221112255555555555555555555ddddddddddddddddddddddddd888888555555 143 | -- 109:111111111111111111ccccccccccccccccccccceeeeeeeeeeeee5551111111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddddddddddddddddddddccccc11111114444444444444444444442222222222222222222122255555555555555555555dddddddddddddddddddddddd888888885555 144 | -- 110:1111111111111111111ccccccccccccccccccceeeeeeeeeeeeee55555551111111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddddddddddddddddddddddcccc11111144444444444444444444444442222222222222222122255555555555555555555ddddddddddddddddddd8888888888888555 145 | -- 111:1111111111111111111cccccccccccccccccceeeeeeeeeeeeeeee5555555551111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddddddddddddddddddddddddccc11111444444444444444444444444444422222222222222222225555555555555555555dddddddddddddd88888888888888888855 146 | -- 112:11111111111111111111cccccccccccccccceeeeeeeeeeeeeeeee55555555555511111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddddddddddddddddddddddddcc11111444444444444444444444444444447722222222222222225555555555555555555dddddddde888888888888888888888881 147 | -- 113:11111111111111111111ccccccccccccccceeeeeeeeeeeeeeeeeee5555555555555511111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddddddddddddddddddddddddcc11114444444444444444444444444444477777722222222222225555555555555555555dddeeeeee88888888888888888888888 148 | -- 114:111111111111111111111cccccccccccccceeeeeeeeeeeeeeeeeeee55555555555555551111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddddcc11cc444444444444444444444444447777777777722222222222ddddddd55555555555eeeeeeee88888888888888888888888 149 | -- 115:ee1111111111111111111ccccccccccccceeeeeeeeeeeeeeeeeeeee5555555555555555555111111111bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddddc1ccc444444444444444444444444477777777777777222222222dddddddddddeeeeee5eeeeeeee8888888888888888888888 150 | -- 116:eeee111111111111111111ccccccccccceeeeeeeeeeeeeeeeeeeeeee5555555555555555555551111111133bbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddddd1cccc44444444444444444444444777777777777777ddd222222dddddeeeeeeeeeeeeeeeeeeeee888888888888888888888 151 | -- 117:eeeeeee111111111111111cccccccccceeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555111113333333bbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddddddcccc4444444444444444444447777777777777777ddddddd2222eeeeeeeeeeeeeeeeeeeeeeeee88888888888888888888 152 | -- 118:eeeeeeeeee1111111111111cccccccceeeeeeeeeeeeeeeeeeeeeeeeee5555555555555555555555555511133333333333bbbbbbbbbbbbbbbbbbbbddddddddddddddddddddddddddddcccc44444444444444444447777777777777777ddddddeeeee2eeeeeeeeeeeeeeeeeeeeeeee88888888888888888888 153 | -- 119:eeeeeeeeeeeee1111111111ccccccceeeeeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555555551333333333333333bbbbbbbbbbbbbbbbdddddddddddddddddddddddddddddccc44444444444444444c77777777777777777deeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8888888888888888888 154 | -- 120:eeeeeeeeeeeeeee111111111ccccceeeeeeeeeeeeeeeeeeeeeeeeeeeeee555555555555555555555555555553333333333333333888bbbbbbbbbbbbddddddddddddddddddddddddddddddccc444444444444444cc7777777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888888888888888888 155 | -- 121:eeeeeeeeeeeeeeee55111111cccceeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555555555533333333333333388888888bbbbbbbbdddddddddddddddddddddddddddddddcc44444444444444ccc777777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee88888888888888888 156 | -- 122:eeeeeeeeeeeeeeeee55551111cceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee555555555555555555555555555555333333333333333888888888888bbbbddddddddddddddddddddddddddddddddcc44444444444ccccc77777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8888888888888888 157 | -- 123:eeeeeeeeeeeeeeeee55555551ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee555555555555555555555555555555333333333333338888888888888888bdddddddddddddddddddddddddddddddddc4444444444cccccc7777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8888888888888888 158 | -- 124:eeeeeeeeeeeeeeeeee5555555ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555555555533333333333333888888888888888888ddddddddddddddddddddddddddddddddddc4444444cccccccc777777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888888888888888 159 | -- 125:eeeeeeeeeeeeeeeeeee5555555ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555555555533333333333338888888888888888888ddddddddddddddddddddddddddddddddddd444444ccccccccc77777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee88888888888888 160 | -- 126:eeeeeeeeeeeeeeeeeee5555555ccccceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555555555555555555555555533333333333388888888888888888888dddddddddddddddddddddddddddddddeeeee444ccccccccccc7777777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8888888888888 161 | -- 127:eeeeeeeeeeeeeeeeeeee5555555cccccccceeeeeeeeeeeeeeeeeeeeeeeeeeee555555555555555555555555555555533333333333888888888888888888888ddddddddddddddddddddddddddeeeeeeeeee44ccccccccccccc77777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888888888888 162 | -- 128:eeeeeeeeeeeeeeeeeeee5555555ccccccccccceeeeeeeeeeeeeeeeeeeeeeeeee555555555555555555555555555555533333333338888888888888888888888dddddddddddddddddddddeeeeeeeeeeeeeeeeeccccccccccccc77777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888888888888 163 | -- 129:eeeeeeeeeeeeeeeeeeeee5555555cccccccccccccceeeeeeeeeeeeeeeeeeeeee5555555555555555555555555555555533333333388888888888888888888888ddddddddddddddddddddeeeeeeeeeeeeeeeeeeecccccccccccc7777777eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee88888888888 164 | -- 130:eeeeeeeeeeeeeeeeeeeee5555555ccccccccccc551111eeeeeeeeeeeeeeeeeeee5555555555555555555555555555555533333333888888888888888888888888ddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeccccccccccc777777eeeeeeeeeeeeeeeeeeeeeeeeeeebbeeeeeeeeeeeeeee8888888888 165 | -- 131:eeeeeeeeeeeeeeeeeeeeee5555555cccccccc555511111111eeeeeeeeeeeeeeeee5555555555555555555555555555555333333338888888888888888888888888dddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeecccccccccc77777eeeeeeeeeeeeeeeeeeeeeeeeeeeebbbeeeeeeeeeeeeee888888888 166 | -- 132:eeeeeeeeeeeeeeeeeeeeeee555555ccccc5555551111111111111eeeeeeeeeeeee5555555555555555555555555555555533333338888888888888888888888888888888ddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeccccccccc7777ceeeeeeeeeeeeeeeeeeeeeeeeeeebbbbbeeeeeeeeeeee888888888 167 | -- 133:eeeeeeeeeeeeeeeeeeeeeee5555555cc555555551111111111111199eeeeeeeeeee5555555555555555555555555555555533333388888888888888888888888888888888ddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeccccccccc777cceeeeeeeeeeeeeeeeeeeeeeeeeeebbbbbeeeeeeeeeeee88888888 168 | -- 134:eeeeeeeeeeeeeeeeeeeeeeee555555555555555111111111111111199999eeeeeeee55555555555555555555555555555555333338888888888888888888888888888888888ddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeecccccccc77ccceeeeeeeeeeeeeeeeeeeeeeeeeebbbbbbbeeeeeeeeeee8888888 169 | -- 135:111eeeeeeeeeeeeeeeeeeeee5555555555555551111111111111111199999999eeee555555555555555555555555555555555333388888888888888888888888888888888888ddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeaaccccccc7cccceeeeeeeeeeeeeeeeeeeeeeeeeebbbbbbbbeeeeeeeeee888888 170 | -- 171 | 172 | -- 173 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 174 | -- 175 | -------------------------------------------------------------------------------- /martian-madrigal/martian-madrigal.lua: -------------------------------------------------------------------------------- 1 | -- title: Martian Madrigal 2 | -- author: @jtruk 3 | -- desc: Four alien singers. Compressed: <256 bytes 4 | -- script: lua 5 | -- group: Hex Heroes 6 | -- date: Feb 2023 7 | -- release: Lovebyte Feb 2023 8 | -- license: Code Credit License v1.1.0 9 | 10 | V={} -- voice volume (0-1) 11 | N={} -- note frequency 12 | function TIC() 13 | cls(9) 14 | 15 | T=time()//22 16 | 17 | -- Monsters 1-4/voice channels 18 | -- Iterate backwards for correct 19 | -- draw order 20 | for ch=4,1,-1 do 21 | -- 1)MAKING SOUND 22 | 23 | -- Magic mem address for sfx stuff 24 | P=130838+ch*36 25 | 26 | -- First term determines beat structure 27 | -- Second term triggers the unusual 28 | -- pattern 29 | if 1>T%7 and ch>T^ch*1.9%10 then 30 | -- Set a monster to vocalise 31 | V[ch]=1 32 | 33 | -- Set a note that's sort-of harmonic 34 | -- ch multiplier gives each martian 35 | -- a different start 36 | -- The T term hits notes that are 37 | -- spread across time, but each 38 | -- monster should be harmonic within 39 | -- that beat 40 | N[ch]=ch*8+T^1.5//1%7 41 | end 42 | 43 | -- If this one is vocalising 44 | if V[ch]>0 then 45 | -- Poke frequency on a chromatic scale 46 | f=50*2^(N[ch]/12)//1 47 | poke(65418+ch*18,f) 48 | poke4(P,f>>8) 49 | 50 | -- Poke a nybble into the waveform 51 | -- (this is the minimum to get sound) 52 | poke4(P+2,15) 53 | 54 | -- Poke volume (V -> 0-15) 55 | poke4(P+1,V[ch]*15) 56 | end 57 | 58 | -- DRAW MONSTERS 59 | -- Spread across screen/different heights 60 | x=ch^0.7*75+V[ch]*9 61 | y=140-x/4 62 | 63 | z=5-ch 64 | -- Bounce factor, determined by volume 65 | h=30*V[ch] 66 | 67 | -- Body 68 | elli(x,y,z*16,70+h,ch) 69 | -- Mouth 70 | elli(x,y-15+h/3,z*12,h,0) 71 | -- Eye 72 | e=60-h*2 73 | circ(x,e,13-ch,12) 74 | circ(x,e,7-ch,0) 75 | 76 | -- Decay the voice volume/mouth size 77 | V[ch]=V[ch]*.95 78 | end 79 | end 80 | -- 81 | -- 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc 82 | -- 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c 83 | -- 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc 84 | -- 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c 85 | -- 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 86 | -- 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 87 | -- 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 88 | -- 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 89 | -- 90 | 91 | -- 92 | -- 000:00000000ffffffff00000000ffffffff 93 | -- 001:0123456789abcdeffedcba9876543210 94 | -- 002:0123456789abcdef0123456789abcdef 95 | -- 96 | 97 | -- 98 | -- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000 99 | -- 100 | 101 | -- 102 | -- 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 103 | -- 104 | 105 | -- 106 | -- 000:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 107 | -- 001:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 108 | -- 002:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 109 | -- 003:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 110 | -- 004:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 111 | -- 005:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 112 | -- 006:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 113 | -- 007:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 114 | -- 008:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 115 | -- 009:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 116 | -- 010:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 117 | -- 011:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 118 | -- 012:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999933333339999999999999999999999999999999999999999999999999999999999999999999999 119 | -- 013:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333333399999999999999999999999999999999999999999999999999999999999999999999 120 | -- 014:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333333333333999999999999999999999999999999999999999999999999999999999999999999 121 | -- 015:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999933333333333333333339999999999999999999999999999999999999999999999999999999999999999 122 | -- 016:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333333333333333333999999999999999999999999999999999999999999999999999999999999999 123 | -- 017:9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999933333333ccccccc3333333399999999999999999999444999999999999999999999999999999999999999 124 | -- 018:99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333ccccccccccc33333339999999999999999944444449999999999999999999999999999999999999 125 | -- 019:9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333ccccccccccccc3333333999999999999999444444444999999999999999999999999999999999999 126 | -- 020:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333ccccccccccccccc333333999999999999994444444444499999999999999999999999999999999999 127 | -- 021:99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333ccccccccccccccccc33333399999999999994444444444499999999999999999999999999999999999 128 | -- 022:9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333ccccccccccccccccccc3333339999999999944444444444449999999999999999999999999999999999 129 | -- 023:9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333cccccccc000cccccccc3333333999999999944444444444449999999999999999999999999999999999 130 | -- 024:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999333333cccccccc00000cccccccc333333999999999444444444444444999999999999999999999999999999999 131 | -- 025:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333ccccccc0000000ccccccc333333399999999444444444444444999999999999999999999999999999999 132 | -- 026:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993333333cccccc000000000cccccc333333399999994444444444444444499999999999999999999999999999999 133 | -- 027:999999999999999999999999999999999999999999999999999999999999999999999999999ccccccc99999999999999999999999999999999999999999999999999999999999999999933333333cccccc000000000cccccc333333339999994444444444444444499999999999999999999999999999999 134 | -- 028:9999999999999999999999999999999999999999999999999999999999999999999999999ccccccccccc999999999999999999999999999999999999999999999999999999999999999333333333cccccc000000000cccccc333333333999994444444444444444499999999999999999999999999999999 135 | -- 029:99999999999999999999999999999999999999999999999999999999999999999999999ccccccccccccccc9999999999999999999999999999999999999999999999999999999999999333333333ccccccc0000000ccccccc333333333999944444444444444444449999999999999999999999999999999 136 | -- 030:9999999999999999999999999999999999999999999999999999999999999999999999ccccccccccccccccc999999999999999999999999999999999999999999999999999999999993333333333cccccccc00000cccccccc333333333399944444444444444444449999999999999999999999999999999 137 | -- 031:999999999999999999999999999999999999999999999999999999999999999999999ccccccccccccccccccc999999999999999999999999999999999999999999999999999999999933333333333cccccccc000cccccccc3333333333399944444444444444444449999999999999999999999999999999 138 | -- 032:99999999999999999999999999999999999999999999999999999999999999999999ccccccccccccccccccccc99999999999999999999999999999999999999999999999999999999333333333333ccccccccccccccccccc3333333333339444444444444444444444999999999999999999999999999999 139 | -- 033:99999999999999999999999999999999999999999999999999999999999999999999cccccccc00000cccccccc999999999999999999999999999992222222222299999999999999993333333333333ccccccccccccccccc33333333333339444444444444444444444999999999999999999999999999999 140 | -- 034:9999999999999999999999999999999999999999999999999999999999999999999cccccccc0000000cccccccc999999999999999999999999222222222222222222299999999999933333333333333ccccccccccccccc333333333333339444444444444444444444999999999999999999999999999999 141 | -- 035:9999999999999999999999999999999999999999999999999999999999999999999ccccccc000000000ccccccc9999999999999999999992222222222222222222222222999999993333333333333333ccccccccccccc3333333333333333444444444444444444444499999999999999999999999999999 142 | -- 036:999999999999999999999999999999999999999999999999999999999999999999ccccccc00000000000ccccccc99999999999999999922222222222ccccccc2222222222299999933333333333333333ccccccccccc33333333333333333444444444444444444444499999999999999999999999999999 143 | -- 037:999999999999999999999999999999999999999999999999999999999999999999cccccc0000000000000cccccc999999999999999922222222222ccccccccccc2222222222299933333333333333333333ccccccc3333333333333333333344444444444444444444499999999999999999999999999999 144 | -- 038:999999999999999999999999999999999999999999999999999999999999999999cccccc0000000000000cccccc99999999999999922222222222ccccccccccccc22222222222993333333333333333333333333333333333333333333333344444444444444444444499999999999999999999999999999 145 | -- 039:999999999999999999999999999999999999999999999999999999999999999999cccccc0000000000000cccccc9999999999999222222222222ccccccccccccccc2222222222223333333333333333333333333333333333333333333333344444444444444444444499999999999999999999999999999 146 | -- 040:999999999999999999999999999999999999999999999999999999999999999999cccccc0000000000000cccccc999999999999222222222222ccccccccccccccccc222222222222333333333333333333333333333333333333333333333334444444444444444444449999999999999999999999999999 147 | -- 041:999999999999999999999999999999999999999999999999999999999999999999cccccc0000000000000cccccc99999999992222222222222ccccccccccccccccccc22222222222223333333333333333333333333333333333333333333334444444444444444444449999999999999999999999999999 148 | -- 042:999999999999999999999999999999999999999999999999999999999999999111ccccccc00000000000ccccccc1119999992222222222222cccccccc00000cccccccc2222222222222333333333333333333333333333333333333333333334444444444444444444449999999999999999999999999999 149 | -- 043:9999999999999999999999999999999999999999999999999999999999991111111ccccccc000000000ccccccc11111119922222222222222ccccccc0000000ccccccc222222222222223333333333333333333333333333333333333333333344444ccccc44444444449999999999999999999999999999 150 | -- 044:9999999999999999999999999999999999999999999999999999999991111111111cccccccc0000000cccccccc1111111111222222222222ccccccc000000000ccccccc222222222222223333333333333333333333333333333333333333333444ccccccccc444444449999999999999999999999999999 151 | -- 045:99999999999999999999999999999999999999999999999999999991111111111111cccccccc00000cccccccc11111111111112222222222cccccc00000000000cccccc2222222222222223333333333333333333333333333333333333333334ccccccccccccc4444444999999999999999999999999999 152 | -- 046:99999999999999999999999999999999999999999999999999999111111111111111ccccccccccccccccccccc11111111111111122222222cccccc00000000000cccccc222222222222222233333333333333333333333333333333333333333ccccccccccccccc444444999999999999999999999999999 153 | -- 047:999999999999999999999999999999999999999999999999999111111111111111111ccccccccccccccccccc111111111111111111222222cccccc00000000000cccccc2222222222222222233333333333333333333333333333333333333333cccccccccccccc444444999999999999999999999999999 154 | -- 048:9999999999999999999999999999999999999999999999999911111111111111111111ccccccccccccccccc1111111111111111111122222cccccc00000000000cccccc2222222222222222223333333333333333333333333333333333333333ccccccccccccccc44444999999999999999999999999999 155 | -- 049:99999999999999999999999999999999999999999999999911111111111111111111111ccccccccccccccc11111111111111111111111222cccccc00000000000cccccc2222222222222222223333333333333333333333333333333333333333ccccc000ccccccc44444999999999999999999999999999 156 | -- 050:9999999999999999999999999999999999999999999999911111111111111111111111111ccccccccccc1111111111111111111111111122ccccccc000000000ccccccc22222222222222222223333333333333333333333333333333333333333ccc00000ccccccc4444999999999999999999999999999 157 | -- 051:999999999999999999999999999999999999999999999111111111111111111111111111111ccccccc1111111111111111111111111111112ccccccc0000000ccccccc222222222222222222222333333333333333333333333333333333333333cc0000000cccccc4444499999999999999999999999999 158 | -- 052:99999999999999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111cccccccc00000cccccccc222222222222222222222233333333333333333333333333333333333333cc0000000cccccc4444499999999999999999999999999 159 | -- 053:999999999999999999999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111ccccccccccccccccccc2222222222222222222222233333333333333333333333333333333333333cc0000000cccccc4444499999999999999999999999999 160 | -- 054:9999999999999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111ccccccccccccccccc22222222222222222222222223333333333333333333333333333333333333ccc00000ccccccc4444499999999999999999999999999 161 | -- 055:99999999999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111ccccccccccccccc2222222222222222222222222223333333333333333333333333333333333333ccc000ccccccc44444499999999999999999999999999 162 | -- 056:999999999999999999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111ccccccccccccc22222222222222222222222222223333333333333333333333333333333333333ccccccccccccc44444499999999999999999999999999 163 | -- 057:9999999999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111ccccccccccc222222222222222222222222222222333333333333333333333333333333333333cccccccccccc444444499999999999999999999999999 164 | -- 058:999999999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111112ccccccc22222222222222222222222222222222233333333333333333333333333333333333cccccccccccc444444499999999999999999999999999 165 | -- 059:9999999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222333333333333333333333333333333333333cccccccccc4444444499999999999999999999999999 166 | -- 060:9999999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222233333333333333333333333333333333333cccccccc444444444449999999999999999999999999 167 | -- 061:99999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222333333333333333333333333333333333334ccccc44444444444449999999999999999999999999 168 | -- 062:999999999999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222333333333333333333333333333333333344444444444444444449999999999999999999999999 169 | -- 063:999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222333333333333333333333333333333333344444444444444444449999999999999999999999999 170 | -- 064:999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222233333333333333333333333333333333344444444444444444449999999999999999999999999 171 | -- 065:999999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222233333333333333333333333333333333334444444444444444449999999999999999999999999 172 | -- 066:999999999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222223333333333333333333333333333333334444444444444444449999999999999999999999999 173 | -- 067:999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222223333333333333333333333333333333334444444444444444449999999999999999999999999 174 | -- 068:999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222223333333333333333333333333333333334444444444444444449999999999999999999999999 175 | -- 069:999999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222333333333333333333333333333333334444444444444444449999999999999999999999999 176 | -- 070:999999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222333333333333333333333333333333334444444444444444449999999999999999999999999 177 | -- 071:999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222233333333333333333333333333333334444444444444444449999999999999999999999999 178 | -- 072:999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222200000033333333333333333333333334444444444444444449999999999999999999999999 179 | -- 073:999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222200000000000333333333333333333333000000004444444444999999999999999999999999 180 | -- 074:999999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222220000000000003333333333333333333000000000000444444999999999999999999999999 181 | -- 075:999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222220000000000000033333333333333333000000000000044444999999999999999999999999 182 | -- 076:999999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222220000000000000000333333333333333000000000000004444999999999999999999999999 183 | -- 077:999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222000000000000000003333333333333000000000000044444999999999999999999999999 184 | -- 078:999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222000000000000000000333333333333000000000000444444999999999999999999999999 185 | -- 079:999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222000000000000000000033333333333000000004444444444999999999999999999999999 186 | -- 080:999999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222000000000000000000003333333333444444444444444444999999999999999999999999 187 | -- 081:999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222200000000000000000000333333333444444444444444444999999999999999999999999 188 | -- 082:999999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222200000000000000000000333333333444444444444444444999999999999999999999999 189 | -- 083:999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222200000000000000000000033333333344444444444444444999999999999999999999999 190 | -- 084:999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222200000000000000000000033333333344444444444444444999999999999999999999999 191 | -- 085:999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 192 | -- 086:999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 193 | -- 087:999999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 194 | -- 088:999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 195 | -- 089:999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 196 | -- 090:999999999999999999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222220000000000000000000003333333344444444444444444999999999999999999999999 197 | -- 091:999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000222222222222222222222222000000000000000000003333333344444444444444444999999999999999999999999 198 | -- 092:999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000222222222222222222000000000000000000033333333344444444444444444999999999999999999999999 199 | -- 093:999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000222222222222222000000000000000000033333333344444444444444444999999999999999999999999 200 | -- 094:999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000002222222222222000000000000000000333333333344444444444444444999999999999999999999999 201 | -- 095:999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000222222222222000000000000000000333333333344444444444444444999999999999999999999999 202 | -- 096:999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000022222222222000000000000000003333333333344444444444444444999999999999999999999999 203 | -- 097:999999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000222222222222000000000000000033333333333344444444444444444999999999999999999999999 204 | -- 098:999999999999999911111111111111111111111111111111111111111111111100000000000000000000000000000111111111111111111111111111111111111111111111111000000000000000002222222222222000000000000000333333333333344444444444444444999999999999999999999999 205 | -- 099:999999999999999911111111111111111111111111111111111110000000000000000000000000000000000000000000000000001111111111111111111111111111111111111000000000000000222222222222222200000000000003333333333333344444444444444444999999999999999999999999 206 | -- 100:999999999999999911111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111000000000000222222222222222222200000000000333333333333333344444444444444444999999999999999999999999 207 | -- 101:999999999999999911111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111000000222222222222222222222222200000000033333333333333333344444444444444444999999999999999999999999 208 | -- 102:999999999999999911111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111222222222222222222222222222222200000003333333333333333333344444444444444444999999999999999999999999 209 | -- 103:999999999999999111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111122222222222222222222222222222200000333333333333333333333344444444444444444999999999999999999999999 210 | -- 104:999999999999999111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111122222222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999 211 | -- 105:999999999999999111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111122222222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999 212 | -- 106:999999999999999111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111122222222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999 213 | -- 107:999999999999999111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111122222222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999 214 | -- 108:999999999999999111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111122222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 215 | -- 109:999999999999999111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111122222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 216 | -- 110:999999999999999111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111122222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 217 | -- 111:999999999999991111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111112222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 218 | -- 112:999999999999991111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111112222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 219 | -- 113:999999999999991111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111112222222222222222222222222222233333333333333333333333333344444444444444449999999999999999999999999 220 | -- 114:999999999999991111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 221 | -- 115:999999999999991111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 222 | -- 116:999999999999991111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 223 | -- 117:999999999999991111111111111111111111111111111111111110000000000000000000000000000000000000000000000000001111111111111111111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 224 | -- 118:999999999999991111111111111111111111111111111111111111111111111100000000000000000000000000000111111111111111111111111111111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 225 | -- 119:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222233333333333333333333333333444444444444444449999999999999999999999999 226 | -- 120:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333333444444444444444449999999999999999999999999 227 | -- 121:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333333444444444444444499999999999999999999999999 228 | -- 122:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333333444444444444444499999999999999999999999999 229 | -- 123:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333333444444444444444499999999999999999999999999 230 | -- 124:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333334444444444444444499999999999999999999999999 231 | -- 125:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333334444444444444444499999999999999999999999999 232 | -- 126:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333334444444444444444499999999999999999999999999 233 | -- 127:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222333333333333333333333333334444444444444444499999999999999999999999999 234 | -- 128:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222223333333333333333333333333334444444444444444499999999999999999999999999 235 | -- 129:999999999999991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222223333333333333333333333333334444444444444444499999999999999999999999999 236 | -- 130:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222223333333333333333333333333334444444444444444999999999999999999999999999 237 | -- 131:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222223333333333333333333333333334444444444444444999999999999999999999999999 238 | -- 132:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222223333333333333333333333333344444444444444444999999999999999999999999999 239 | -- 133:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222223333333333333333333333333344444444444444444999999999999999999999999999 240 | -- 134:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999999 241 | -- 135:999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222233333333333333333333333333344444444444444444999999999999999999999999999 242 | -- 243 | 244 | -- 245 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 246 | -- 247 | 248 | -------------------------------------------------------------------------------- /readyerrorone/readyerrorone.lua: -------------------------------------------------------------------------------- 1 | MUSIC=true 2 | TIMER=false 3 | PART=0 4 | 5 | GREETS={ 6 | "Revision", 7 | "Field-FX", 8 | "Lovebyte/TCC", 9 | "Team Bytejam", 10 | "TIC-80 sceners", 11 | "TIC-80 lovers", 12 | "Rift", 13 | "Slipstream", 14 | "gotbadger", 15 | "coldclimate", 16 | "YOU!", 17 | } 18 | 19 | mS=math.sin 20 | mC=math.cos 21 | mA=math.atan2 22 | mMn=math.min 23 | mMx=math.max 24 | mPi=math.pi 25 | mPi2=mPi*2 26 | mR=math.random 27 | mF=math.floor 28 | 29 | TIME=0 30 | PART_START=0 31 | function getPartTime() 32 | return TIME-PART_START 33 | end 34 | 35 | function TIC() 36 | poke(0x3FFB,1) -- remove mouse! 37 | local fn="part"..PART 38 | local t=getPartTime() 39 | init=(t==0) 40 | moveOn=_G[fn](init,t) 41 | 42 | TIME=TIME+1 43 | 44 | if(moveOn)then 45 | PART=PART+1 46 | PART_START=TIME 47 | end 48 | 49 | if(TIMER)then 50 | local elapsed=time()/1000 51 | print(elapsed,1,128,0) 52 | print(elapsed,3,130,0) 53 | print(elapsed,2,129,12) 54 | end 55 | end 56 | 57 | function part0(init,t) 58 | cls(12) 59 | print("jtruk x mantratronic",126,121,0) 60 | print("Ready Error One / TIC-80",107,129,0) 61 | return t>300 62 | end 63 | 64 | function part1(init,t) 65 | local T_IN=380 66 | local T_HOLD=200 67 | local T_OUT=165 68 | if(init)then 69 | if(MUSIC)then 70 | music(0) 71 | end 72 | 73 | BDR=function(y) 74 | vbank(0) 75 | local t=getPartTime() 76 | local f=1 77 | local fadeT=T_IN+T_HOLD+T_OUT-150 78 | if(t<150)then 79 | f=t/150 80 | elseif(t>fadeT)then 81 | f=1-(t-fadeT)/150 82 | end 83 | 84 | local rgbs={} 85 | rgbs[1]=makeRgb(0,0,0) 86 | rgbs[2]=makeRgb(.7,0,.7) 87 | rgbs[3]=makeRgb(1,1,1) 88 | rgbs[4]=makeRgb(.7,.7,.7) 89 | rgbs[5]=makeRgb(1,0,0) 90 | rgbs[6]=makeRgb(1,0,0) 91 | rgbs[7]=makeRgb(1,0,0) 92 | rgbs[8]=makeRgb(0,1,0) 93 | rgbs[9]=makeRgb(0,1,0) 94 | rgbs[10]=makeRgb(0,1,0) 95 | rgbs[11]=makeRgb(0,0,1) 96 | rgbs[12]=makeRgb(0,0,1) 97 | rgbs[13]=makeRgb(0,0,1) 98 | rgbs[14]=makeRgb(0,0,0) 99 | rgbs[15]=makeRgb(0,0,0) 100 | rgbs[16]=makeRgb(0,0,0) 101 | 102 | for i=2,#rgbs do 103 | rgbs[i].r=f*rgbs[i].r+(1-f)*1 104 | rgbs[i].g=f*rgbs[i].g+(1-f)*1 105 | rgbs[i].b=f*rgbs[i].b+(1-f)*1 106 | end 107 | 108 | setPalette(rgbs) 109 | end 110 | end 111 | 112 | return dotPhosphor(1,init,t, 113 | T_IN,T_HOLD,T_OUT) 114 | end 115 | 116 | function part2(init,t) 117 | local T_TOTAL=765 118 | if(init)then 119 | BDR=function(y) 120 | vbank(0) 121 | t=getPartTime() 122 | local FADE_IN=200 123 | local FADE_OUT=80 124 | local rgbs={} 125 | local f=1 126 | if(tT_TOTAL-FADE_OUT)then 129 | f=1-((t-(T_TOTAL-FADE_OUT))/FADE_OUT) 130 | end 131 | f=mMx(mMn(1,f),0) 132 | 133 | for c=2,16 do 134 | local i=c/16 135 | local r=i*(0.5+mS(t*.061+y*.02)*0.5) 136 | local g=i*(0.5+mS(t*.053+y*.013)*0.5) 137 | local b=i*(0.5+mS(t*.045+y*.017)*0.5) 138 | rgbs[c]=makeRgb(r,g,b) 139 | end 140 | rgbs[1]=makeRgb(0,0,0) 141 | rgbs[2]=makeRgb(1,1,1) 142 | 143 | for i=2,16 do 144 | rgbs[i].r=f*rgbs[i].r+(1-f) 145 | rgbs[i].g=f*rgbs[i].g+(1-f) 146 | rgbs[i].b=f*rgbs[i].b+(1-f) 147 | end 148 | 149 | setPalette(rgbs) 150 | end 151 | end 152 | 153 | cls(1) 154 | local doMoveOn=orbitalTunnel(1,init,t,T_TOTAL) 155 | vbank(1) 156 | cls() 157 | 158 | vbank(1) 159 | cls() 160 | 161 | return doMoveOn 162 | end 163 | 164 | function part3(init,t) 165 | local T_ARRIVE=600 166 | local T_RUMBLE=500 167 | local T_EXPL_IN=50 168 | local T_EXPL_OUT=150 169 | local T_HOLD=980 170 | 171 | if(init)then 172 | BDR=function(y) 173 | vbank(0) 174 | local t=getPartTime() 175 | local moment=getMoment(t,{ 176 | T_ARRIVE,T_RUMBLE,T_EXPL_IN,T_EXPL_OUT,T_HOLD 177 | }) 178 | 179 | local rgbs={} 180 | rgbs[1]=makeRgb(0,0,0) 181 | if(moment.s<=3)then 182 | for c=1,15 do 183 | local i=c/15 184 | rgbs[c+1]=makeRgb( 185 | 0.5+mS(t*.017+c*.065)*.5, 186 | 0.5+mS(t*.020+c*.056)*.5, 187 | 0.5+mS(t*.013+c*.045)*.5 188 | ) 189 | end 190 | else 191 | for c=1,15 do 192 | local i=c/15 193 | local v=0.5+mS(t*.01+c*.25)*.5 194 | rgbs[c+1]=makeRgb(v,0,(1-v)/2) 195 | end 196 | end 197 | 198 | local f=1 199 | local rAim=1 200 | local gAim=1 201 | local bAim=1 202 | if(moment.s==1)then 203 | f=(moment.f<.2)and moment.f*5 or 1 204 | elseif(moment.s==3 or moment.s==4)then 205 | f=1-moment.f 206 | if(moment.s==4)then 207 | f=1-f 208 | end 209 | elseif(moment.s==5)then 210 | local finv=1-moment.f 211 | f=(finv<.1)and finv*10 or 1 212 | end 213 | f=mMx(0,mMn(1,f)) 214 | 215 | for c=2,16 do 216 | rgb=rgbs[c] 217 | rgbs[c].r=f*rgb.r+(1-f)*rAim 218 | rgbs[c].g=f*rgb.g+(1-f)*gAim 219 | rgbs[c].b=f*rgb.b+(1-f)*bAim 220 | end 221 | 222 | vbank(0) 223 | setPalette(rgbs) 224 | 225 | vbank(1) 226 | for c=0,15 do 227 | rgb=rgbs[c+1] 228 | rgbs[c+1]=makeRgb(1-rgb.r,1-rgb.g,1-rgb.b) 229 | end 230 | 231 | for c=2,16 do 232 | rgb=rgbs[c] 233 | rgbs[c].r=f*rgb.r+(1-f)*1 234 | rgbs[c].g=f*rgb.g+(1-f)*1 235 | rgbs[c].b=f*rgb.b+(1-f)*1 236 | end 237 | setPalette(rgbs) 238 | end 239 | end 240 | 241 | local moment=getMoment(t,{ 242 | T_ARRIVE,T_RUMBLE,T_EXPL_IN,T_EXPL_OUT,T_HOLD 243 | }) 244 | 245 | vbank(1) 246 | local w=48 247 | local h=48 248 | for y=0,w do 249 | for x=0,h do 250 | pix(x,y,8+mS(x^1.3*.01+y^1.3*.02+t*.1)*7//1) 251 | end 252 | end 253 | 254 | vbank(0) 255 | 256 | local segs=26 257 | local oldRingP 258 | for ring=0,3 do 259 | local ringP={} 260 | for i=0,segs do 261 | a=i/segs*mPi2 262 | 263 | local extent=ring*1.8 264 | local p=makeP3( 265 | mC(a)*extent, 266 | mS(a)*extent, 267 | 4-ring^2 268 | ) 269 | 270 | if(moment.s>=2)then 271 | local f=moment.s==2 and moment.f or 1 272 | p.x=p.x+mR()*f*.5 273 | p.y=p.y+mR()*f*.5 274 | p.z=p.z+mR()*f*2 275 | end 276 | 277 | local spinF=moment.s==1 and moment.f or 1 278 | p=rotP3X(p,mC(t*.01)*(1-spinF)*.5) 279 | p=rotP3Y(p,mS(t*.01)*(1-spinF)*.5) 280 | 281 | p=transP3(p,0,0,7) 282 | ringP[i]=projP3(p) 283 | 284 | if(ring>0 and i>0)then 285 | p={ 286 | ringP[i-1], 287 | ringP[i%segs], 288 | oldRingP[i%segs], 289 | oldRingP[i-1], 290 | } 291 | 292 | local s0=makeP2(0,0) 293 | local s1=makeP2(w,0) 294 | local s2=makeP2(w,h) 295 | local s3=makeP2(0,h) 296 | if(i%2==0)then 297 | s0,s1=s1,s0 298 | s2,s3=s3,s2 299 | end 300 | if(ring%2==0)then 301 | s0,s3=s3,s0 302 | s1,s2=s2,s1 303 | end 304 | drawTQuad(p[1],p[2],p[3],p[4],s0,s1,s2,s3) 305 | end 306 | end 307 | oldRingP=ringP 308 | end 309 | 310 | if(moment.s>=4)then 311 | -- Yuk! 312 | if(not greet)then 313 | if(not greetCount)then 314 | greetCount=1 315 | else 316 | greetCount=greetCount+1 317 | end 318 | 319 | if(greetCount<=#GREETS)then 320 | greet={ 321 | text=GREETS[greetCount], 322 | t=t, 323 | } 324 | end 325 | end 326 | end 327 | 328 | if(greet)then 329 | vbank(1) 330 | cls() 331 | local greetH=8 332 | rect(0,0,120,10,8) 333 | local greetW=print(greet.text,2,2,4)+2 334 | print(greet.text,1,1,15) 335 | 336 | vbank(0) 337 | local p={} 338 | local quadW=greetW*.01 339 | local quadH=greetH*.01 340 | p[1]=makeP3(-quadW,-quadH,0) 341 | p[2]=makeP3(quadW,-quadH,0) 342 | p[3]=makeP3(quadW,quadH,0) 343 | p[4]=makeP3(-quadW,quadH,0) 344 | 345 | for i=1,4 do 346 | local greetT=greet.t-t 347 | p[i]=rotP3X(p[i],greetT*.0001) 348 | rotZ=greetT*.004 349 | if(greetCount==#GREETS)then 350 | rotZ=0 351 | elseif(greetCount%2==1)then 352 | rotZ=-rotZ 353 | end 354 | 355 | p[i]=rotP3Z(p[i],rotZ) 356 | p[i]=transP3(p[i], 357 | 0, 358 | 0, 359 | 3+greetT*.0315) 360 | end 361 | 362 | drawTQuad2(projTQuad(makeTQuad( 363 | makeP3T(p[1],makeP2(0,0)), 364 | makeP3T(p[2],makeP2(greetW,0)), 365 | makeP3T(p[3],makeP2(greetW,greetH)), 366 | makeP3T(p[4],makeP2(0,greetH)) 367 | ))) 368 | 369 | if(p[1].z<0)then 370 | greet=nil 371 | end 372 | end 373 | 374 | vbank(1) 375 | cls() 376 | 377 | for i=0,40 do 378 | mX=((60+t)//200) 379 | mY=(t//200) 380 | x=mS(.2+i*mX+t*.024)*.5 381 | y=mS(.2+i*mY+t*.032)*.1 382 | z=1.5+mS(i+t*.023)*1.4 383 | 384 | -- hacky! 385 | if(moment.s>2)then 386 | local shift=(moment.s-3)+moment.f 387 | z=z-shift*4 388 | end 389 | 390 | p=makeP3(x,y,z) 391 | 392 | if(moment.s>=2)then 393 | local wobbleF=moment.s==2 and moment.f or 1 394 | p=transP3(p, 395 | mR()*wobbleF*.1, 396 | mR()*wobbleF*.1, 397 | mR()*wobbleF*.1 398 | ) 399 | end 400 | 401 | p=projP3(p) 402 | c=15-p.z^2 403 | sh=.5/p.z 404 | p2=makeP3(p.x+sh,p.y+sh,p.z+.1) 405 | if(p2.z>.1)then 406 | drawPoly(p2,3,3+i%4,t*.1,1) 407 | drawPoly(p,3,3+i%4,t*.1,c+1) 408 | end 409 | end 410 | 411 | vbank(0) 412 | 413 | return moment.f>=1 414 | end 415 | 416 | function part4(init,t) 417 | local T_TOTAL=765 418 | if(init)then 419 | BDR=function(y) 420 | vbank(0) 421 | t=getPartTime() 422 | local FADE_IN=200 423 | local FADE_OUT=50 424 | 425 | local f=1 426 | local fStage=0 427 | if(tT_TOTAL-FADE_OUT)then 431 | f=1-((t-(T_TOTAL-FADE_OUT))/FADE_OUT) 432 | fStage=2 433 | end 434 | f=mMx(mMn(1,f),0) 435 | 436 | local rgbs={} 437 | fade=mMn(1,t/FADE_IN) 438 | for c=2,15 do 439 | local i=c/16 440 | local r=i*(0.75+mS(t*.061+y*.02)*0.25) 441 | rgbs[c+1]=makeRgb(r,0,0) 442 | end 443 | rgbs[1]=makeRgb(0,0,0) 444 | rgbs[2]=makeRgb(1,0,0) 445 | 446 | local rAim,gAim,bAim=1,1,1 447 | if(fStage==2)then 448 | gAim,bAim=0,0 449 | end 450 | 451 | for i=2,16 do 452 | rgbs[i].r=f*rgbs[i].r+(1-f)*rAim 453 | rgbs[i].g=f*rgbs[i].g+(1-f)*gAim 454 | rgbs[i].b=f*rgbs[i].b+(1-f)*bAim 455 | end 456 | 457 | setPalette(rgbs) 458 | end 459 | end 460 | 461 | vbank(0) 462 | cls(1) 463 | local doMoveOn=orbitalTunnel(2,init,t,T_TOTAL) 464 | 465 | vbank(1) 466 | cls() 467 | 468 | return doMoveOn 469 | end 470 | 471 | function part5(init,t) 472 | local T_IN=380 473 | local T_HOLD=200 474 | local T_OUT=225 475 | 476 | if(init)then 477 | BDR=function(y) 478 | vbank(0) 479 | local rgbs={} 480 | local t=getPartTime() 481 | local f=1 482 | local fadeT=T_IN+T_HOLD+T_OUT-150 483 | if(t>fadeT)then 484 | f=1-(t-fadeT)/150 485 | end 486 | 487 | for c=0,15 do 488 | local i=c/15 489 | rgbs[c+1]=makeRgb(i,0,0) 490 | end 491 | 492 | for i=2,#rgbs do 493 | rgbs[i].r=f*rgbs[i].r+(1-f)*1 494 | rgbs[i].g=f*rgbs[i].g+(1-f)*1 495 | rgbs[i].b=f*rgbs[i].b+(1-f)*1 496 | end 497 | 498 | setPalette(rgbs) 499 | end 500 | end 501 | 502 | return dotPhosphor(2,init,t, 503 | T_IN,T_HOLD,T_OUT) 504 | end 505 | 506 | function part6(init,t) 507 | if(init)then 508 | music() 509 | BDR=function(y) 510 | local rgbs={} 511 | for c=0,15 do 512 | local i=c/15 513 | rgbs[c+1]=makeRgb(i,i,i) 514 | end 515 | 516 | setPalette(rgbs) 517 | end 518 | end 519 | 520 | cls(15) 521 | print("Fantasy Console competition",45,50,8) 522 | print("in Revision 2024, please ;)",55,60,8) 523 | print("Sound: Mantratronic",133,113,0) 524 | print("Code: jtruk",178,121,0) 525 | print("Released at Revision 2023",102,129,0) 526 | 527 | return false 528 | end 529 | 530 | -- input: t and steps{t1,t2,t3} 531 | -- returns: step and fraction through 532 | function getMoment(t,times) 533 | for i=1,#times do 534 | local thisT=times[i] 535 | if(t READY"..cursor,0,0,2) 558 | else 559 | print(" ERROR!",0,0,14) 560 | end 561 | pixB=pixToBuf(0,0,pixBW,pixBH) 562 | cls() 563 | 564 | local moment=getMoment(t,{ 565 | T_ZOOM_OUT,T_ZOOM_HOLD,T_ZOOM_IN 566 | }) 567 | 568 | if(moment.s==1)then 569 | z=0.93-mC(mPi*moment.f)*.92 570 | elseif(moment.s==2)then 571 | z=0.93+.92 572 | else 573 | z=0.93+mC(mPi*moment.f)*.92 574 | end 575 | 576 | for y=0,pixBH-1 do 577 | for x=0,pixBW-1 do 578 | local pcol=pixB[y*pixBW+x] 579 | 580 | draw=(stage==1) or mR()<.7 581 | if(draw and pcol>0)then 582 | p=makeP3(x*.1-2,y*.1-.2,0) 583 | 584 | if(moment.s==3)then 585 | p=rotP3X(p,moment.f*.3) 586 | p=rotP3Y(p,-moment.f*.4) 587 | p=rotP3Z(p,moment.f^2*.6) 588 | end 589 | 590 | p=transP3(p,0,0,z) 591 | 592 | p=projP3(p) 593 | 594 | if(p.z>0)then 595 | local size=3.7 596 | local sides=20 597 | local rotate=.2 598 | 599 | if(stage==2)then 600 | sides=mR(3,20) 601 | rotate=mR() 602 | p=transP3(p,0,0,mR()*.2) 603 | end 604 | 605 | if(moment.s==3)then 606 | local abber=moment.f^2/p.z 607 | p2=transP3(p,-abber,-abber,0) 608 | p3=transP3(p,abber,abber,0) 609 | drawPoly(p2,size,sides,rotate,6) 610 | drawPoly(p3,size,sides,rotate,12) 611 | end 612 | 613 | drawPoly(p,size,sides,rotate,pcol) 614 | end 615 | end 616 | end 617 | end 618 | 619 | for y=0,136,2 do 620 | for x=0,240,2 do 621 | pix(x,y,pix(x,y)+mR(2)-1) 622 | end 623 | end 624 | 625 | return moment.f>=1 626 | end 627 | 628 | function orbitalTunnel(stage,init,t,T_TOTAL) 629 | local ZFAR=200 630 | if(init)then 631 | SHAPES={} 632 | end 633 | 634 | local rot=mS(t*.01)*.2 635 | if(stage==2)then 636 | rot=rot+mC(t*.02)*1.4 637 | +mS(t*.05)*0.7 638 | end 639 | 640 | local camera= 641 | makeP3( 642 | 0, 643 | 0, 644 | (stage==1) and t or -t 645 | ) 646 | 647 | for z=1,6,.5 do 648 | for x=-6,6,.5 do 649 | zT=t*.1 650 | if(stage==2)then 651 | zT=-zT 652 | camera.x=mS(t*.007)*.02 653 | camera.y=mS(t*.01)*.02 654 | end 655 | zT=zT//1-zT 656 | p=makeP3(x,.1,z) 657 | p=transP3(p,0,0,zT) 658 | p=rotP3Z(p,rot) 659 | p=projP3(p) 660 | pix(p.x,p.y,12) 661 | end 662 | end 663 | 664 | if(stage==1)then 665 | if(( 666 | (t+26)%24==0 667 | and t//24<21 668 | )or 669 | (t==535 or t==570) 670 | )then 671 | addShape(camera.z+ZFAR,mR(3,10)) 672 | end 673 | else 674 | if((t+27)%24==0)then 675 | addShape(camera.z,mR(3,10)) 676 | end 677 | end 678 | 679 | table.sort(SHAPES, 680 | function(a,b) 681 | return a.zZFAR)then 695 | shape.alive=false 696 | else 697 | p=makeP3(0,0,z) 698 | if(stage==2)then 699 | p=transP3(p,mR()*.005, 700 | camera.y+mR()*.005, 701 | mR()*.005) 702 | shape.rot=shape.rot+mS(s)*.1 703 | end 704 | 705 | radii={.025,.03} 706 | ringTQs=makeRingTQs(p,shape.sides,radii,rot+shape.rot,15) 707 | 708 | if(stage==2)then 709 | for i=1,#ringTQs do 710 | local dx=ringTQs[i].p0.p.x 711 | local dy=ringTQs[i].p0.p.y 712 | local d=((dx^2+dy^2)^.5)*((p.z^2)*16) 713 | local a=mA(dx,dy) 714 | 715 | -- Ugly, but needs a code refactor 716 | -- to make not ugly! 717 | ringTQs[i].p0.p=transP3(ringTQs[i].p0.p, 718 | mS(a)*d, 719 | mC(a)*d, 720 | 0 721 | ) 722 | ringTQs[i].p1.p=transP3(ringTQs[i].p1.p, 723 | mS(a)*d, 724 | mC(a)*d, 725 | 0 726 | ) 727 | ringTQs[i].p2.p=transP3(ringTQs[i].p2.p, 728 | mS(a)*d, 729 | mC(a)*d, 730 | 0 731 | ) 732 | ringTQs[i].p3.p=transP3(ringTQs[i].p3.p, 733 | mS(a)*d, 734 | mC(a)*d, 735 | 0 736 | ) 737 | end 738 | end 739 | 740 | vbank(1) 741 | cls(12) 742 | 743 | vbank(0) 744 | for i=1,#ringTQs do 745 | drawTQuad2(projTQuad(ringTQs[i])) 746 | end 747 | end 748 | end 749 | 750 | return t>T_TOTAL 751 | end 752 | 753 | function addShape(z,sides) 754 | local getFree=function() 755 | for i=1,#SHAPES do 756 | if(not SHAPES[i].alive)then 757 | return i 758 | end 759 | end 760 | 761 | return #SHAPES+1 762 | end 763 | 764 | SHAPES[getFree()]={ 765 | z=z, 766 | rot=0, 767 | sides=sides, 768 | alive=true, 769 | } 770 | end 771 | 772 | function pixToBuf(x0,y0,w,h) 773 | local buf={} 774 | for y=0,h do 775 | for x=0,w do 776 | buf[y*w+x]=pix(x0+x,y0+y) 777 | end 778 | end 779 | return buf 780 | end 781 | 782 | function makeRgb(r,g,b) 783 | return{ 784 | r=r, 785 | g=g, 786 | b=b, 787 | } 788 | end 789 | 790 | -- Takes a table of rgbs 791 | -- .r,.g,.b are 0-1 792 | function setPalette(rgbs) 793 | for i=0,15 do 794 | local rgb=rgbs[i+1] 795 | local addr=0x3fc0+i*3 796 | poke(addr,(rgb.r*255)//1) 797 | poke(addr+1,(rgb.g*255)//1) 798 | poke(addr+2,(rgb.b*255)//1) 799 | end 800 | end 801 | 802 | function makeP3(x,y,z) 803 | return { 804 | x=x, 805 | y=y, 806 | z=z, 807 | } 808 | end 809 | 810 | function projP3(p) 811 | return { 812 | x=120+100*(p.x/p.z), 813 | y=68+100*(p.y/p.z), 814 | z=p.z, 815 | } 816 | end 817 | 818 | function transP3(p,x,y,z) 819 | return { 820 | x=p.x+x, 821 | y=p.y+y, 822 | z=p.z+z, 823 | } 824 | end 825 | 826 | function rotP3X(p,a) 827 | return { 828 | x=p.x, 829 | y=p.y*mC(a)-p.z*mS(a), 830 | z=p.y*mS(a)+p.z*mC(a), 831 | } 832 | end 833 | 834 | function rotP3Y(p,a) 835 | return { 836 | x=p.x*mC(a)-p.z*mS(a), 837 | y=p.y, 838 | z=p.x*mS(a)+p.z*mC(a), 839 | } 840 | end 841 | 842 | function rotP3Z(p,a) 843 | return { 844 | x=p.x*mC(a)-p.y*mS(a), 845 | y=p.x*mS(a)+p.y*mC(a), 846 | z=p.z, 847 | } 848 | end 849 | 850 | function makeP2(x,y) 851 | return { 852 | x=x, 853 | y=y, 854 | } 855 | end 856 | 857 | -- p: point 858 | -- t: texture 859 | function makeP3T(p,t) 860 | return { 861 | p=p, 862 | t=t, 863 | } 864 | end 865 | 866 | function makeTri(p0,p1,p2,c) 867 | return { 868 | p0=p0, 869 | p1=p1, 870 | p2=p2, 871 | c=c 872 | } 873 | end 874 | 875 | function makeTTri(p0,p1,p2) 876 | return { 877 | p0=p0, 878 | p1=p1, 879 | p2=p2, 880 | c=-1 881 | } 882 | end 883 | 884 | function makeQuad(p0,p1,p2,p3,c) 885 | return { 886 | p0=p0, 887 | p1=p1, 888 | p2=p2, 889 | p3=p3, 890 | c=c 891 | } 892 | end 893 | 894 | function makeTQuad(pt0,pt1,pt2,pt3) 895 | return { 896 | p0=pt0, 897 | p1=pt1, 898 | p2=pt2, 899 | p3=pt3, 900 | c=-1 901 | } 902 | end 903 | 904 | -- radii array of extents 905 | function makeRingTQs(pC,segs,radii,rot,col) 906 | local quads={} 907 | 908 | local s0=makeP2(0,0) 909 | local s1=makeP2(w,0) 910 | local s2=makeP2(w,h) 911 | local s3=makeP2(0,h) 912 | 913 | local p={} 914 | local lastP 915 | for r=1,#radii do 916 | local radius=radii[r] 917 | 918 | for i=1,segs+1 do 919 | local a=(i-1)/segs*mPi2+rot 920 | p[i]=transP3(pC, 921 | mS(a)*radius, 922 | mC(a)*radius, 923 | 0 924 | ) 925 | 926 | if(r>1 and i>1)then 927 | quads[#quads+1]=makeQuad( 928 | makeP3T(p[i-1]), 929 | makeP3T(p[i]), 930 | makeP3T(lastP[i]), 931 | makeP3T(lastP[i-1]), 932 | mMx(1,15-(z*16)) 933 | ) 934 | end 935 | end 936 | lastP={} 937 | for i=1,#p do 938 | lastP[i]=p[i] 939 | end 940 | end 941 | 942 | return quads 943 | end 944 | 945 | function drawPoly(p,size,segs,rot,c) 946 | size=size/p.z 947 | 948 | for i=0,segs-1 do 949 | local a1=i/segs*mPi2+rot 950 | local a2=(i+1)/segs*mPi2+rot 951 | tri( 952 | p.x,p.y, 953 | p.x+mC(a1)*size,p.y+mS(a1)*size, 954 | p.x+mC(a2)*size,p.y+mS(a2)*size, 955 | c 956 | ) 957 | end 958 | end 959 | 960 | function drawTQuad(p0,p1,p2,p3,s0,s1,s2,s3) 961 | drawTTri(p0,p1,p2,s0,s1,s2) 962 | drawTTri(p2,p3,p0,s2,s3,s0) 963 | end 964 | 965 | function projTQuad(t) 966 | t.p0.p=projP3(t.p0.p) 967 | t.p1.p=projP3(t.p1.p) 968 | t.p2.p=projP3(t.p2.p) 969 | t.p3.p=projP3(t.p3.p) 970 | return t 971 | end 972 | 973 | function drawTQuad2(t) 974 | drawTTriPrim(t.p0,t.p1,t.p2,t.c) 975 | drawTTriPrim(t.p2,t.p3,t.p0,t.c) 976 | end 977 | 978 | function projTTri(t) 979 | t.p0.p=projP3(t.p0.p) 980 | t.p1.p=projP3(t.p1.p) 981 | t.p2.p=projP3(t.p2.p) 982 | return t 983 | end 984 | 985 | function drawTTri2(t) 986 | drawTTriPrim(t.p0,t.p1,t.p2,t.c) 987 | end 988 | 989 | function drawTTriPrim(p0,p1,p2,c) 990 | if(c~=-1)then 991 | tri( 992 | p0.p.x,p0.p.y, 993 | p1.p.x,p1.p.y, 994 | p2.p.x,p2.p.y, 995 | c 996 | ) 997 | else 998 | ttri( 999 | p0.p.x,p0.p.y, 1000 | p1.p.x,p1.p.y, 1001 | p2.p.x,p2.p.y, 1002 | p0.t.x,p0.t.y, 1003 | p1.t.x,p1.t.y, 1004 | p2.t.x,p2.t.y, 1005 | 2, 1006 | 0, 1007 | p0.p.z,p1.p.z,p2.p.z 1008 | ) 1009 | end 1010 | end 1011 | 1012 | function drawTTri(p0,p1,p2,s0,s1,s2) 1013 | ttri( 1014 | p0.x,p0.y,p1.x,p1.y,p2.x,p2.y, 1015 | s0.x,s0.y,s1.x,s1.y,s2.x,s2.y, 1016 | 2, 1017 | 0, 1018 | p0.z,p1.z,p2.z 1019 | ) 1020 | end 1021 | -- 1022 | -- 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc 1023 | -- 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c 1024 | -- 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc 1025 | -- 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c 1026 | -- 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 1027 | -- 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 1028 | -- 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec 1029 | -- 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee 1030 | -- 1031 | 1032 | -- 1033 | -- 000:00112233445566778899aabbccddeeff 1034 | -- 001:100123344556677778899aabbccdeffe 1035 | -- 002:210011234455667778899aabcdeeffed 1036 | -- 003:43211012344566778899abbcdefeedcb 1037 | -- 004:6542100112345677889abcdeeffedba9 1038 | -- 005:6543210012345677889abcdeffedcba9 1039 | -- 006:642110000001112346acdeefffeedca8 1040 | -- 008:fffffffffffffffff000000000000000 1041 | -- 009:efffffffffffffffe100000000000001 1042 | -- 010:cefffffffffffffeb410000000000013 1043 | -- 011:9cefffffffffffec9741000000000136 1044 | -- 1045 | 1046 | -- 1047 | -- 000:380009002a0049004a004b004a00690088009900b900c900c900d900fa00fa00fa00fa00fa00fa00fa00fa00fb00fb00fb00fb00fb00fb00fb00fb00132008000000 1048 | -- 001:2100000021004200630073009400a400b500c500d500e600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600202000000000 1049 | -- 008:19055902aa0fba0dcb0bdb0adb09eb08eb08eb08eb08fb00fb00fa00fa00f900f900f900f900f900f900f900f900f900f900f900f900f900f900f900137000000000 1050 | -- 009:b700e700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700522000000000 1051 | -- 010:d700e70ee70ce70cf700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700622000000000 1052 | -- 011:0700b700f7000700b700c700d700e700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700f700329000000000 1053 | -- 012:f700e700e700d700d700c700c700c700b700b700a700a700a700a700a70097009700970087008700970097009700970097008700770077007700f700272000000000 1054 | -- 016:0100200031004200630073008400b400c500e500e600e600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1055 | -- 017:02000100220033004300540074009500c500d600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1056 | -- 018:23000200130024004400650075009500a600b600c600d600e600e600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1057 | -- 019:240003000400140035005500650086009600a600b600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1058 | -- 020:1500240035004500660086009600a600b600c600d600d600e600e600e600e600e600e600e600e600e600e600e600e600e600e600e600e600e600e600302000000000 1059 | -- 021:2600050015002600360046005600660076009600b600c600e600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1060 | -- 022:260016002600360056006600760086009600a600c600d600e600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600000000000000 1061 | -- 032:1100000021004200520073009300a400b400c500c500d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1062 | -- 033:1200010022004200530073009400a400b500c500c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1063 | -- 034:1300020023004300540074009400a500b500c500c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1064 | -- 035:1400030023004400540074009500a500b500c500c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1065 | -- 036:1400040025004500550075009600a600b600c600c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1066 | -- 037:1500050025004500560076009600a600b600c600c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1067 | -- 038:1600050026004600560076009600a600b600c600c600d600e600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600f600302000000000 1068 | -- 048:e000d000c100a1009200720063006300540054004500350036003600350025002400240023003300320042005100610060007000800080009000b00030205f000000 1069 | -- 049:e000d000c130a1309270727063006300540054004500350036003600350025002400240023003300320042005100610060007000800080009000b00040205f000600 1070 | -- 050:e000d000c140a1409270727063006300540054004500350036003600350025002400240023003300320042005100610060007000800080009000b00030505f000600 1071 | -- 053:e000d000c130a1309270727061006100520052004300330034003400330023002200220021003100320042005100610060007000800080009000b00041205f000600 1072 | -- 054:e000d000c140a1409270727061006100520052004300330034003400330023002200220021003100320042005100610060007000800080009000b00041205f000600 1073 | -- 057:e000d000c130a1309270727063006300520052004100310030003000310021002200220023003300320042005100610060007000800080009000b00041205f000600 1074 | -- 058:e000d000c140a1409270727063006300520052004100310030003000310021002200220023003300320042005100610060007000800080009000b00041205f000600 1075 | -- 1076 | 1077 | -- 1078 | -- 000:000000600012000000000000000000600012000000000000000000600012000000000000000000600012600014600016000000600012000000000000000000600012000000000000000000600014000000600014000000600012000000000000000000600012000000000000000000600012000000000000000000600014000000000000000000600012000000000000000000600012000000000000600012000000000000000000600012000000000000000000000000600012000000000000 1079 | -- 001:b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000000000000000b00082000000000000000000000000000000b00082000000000000000000 1080 | -- 002:c0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000ac 1081 | -- 003:60000660000860000a60000c90000660000860000a60000c00000000000000000000000000000000000000000000000090000490000690000890000a60000690000890000a90000c00000000000000000000000000000000000000000000000060000660000860000a60000c90000660000860000a60000c00000000000000000000000000000000000000000000000090000490000690000890000a60000690000890000a90000c000000000000000000000000000000000000000000000000 1082 | -- 004:00000060000500000060005700000060001500000060004700000060002500000060004760000960003500000060005700000060006500000000000000000060005500000060003900000060000500000060003760002b600025000000900057000000900005000000900027000000900055000000900027000000900015000000900037000000900045900049900027000000900055000000900029900055000000900029000000900055000000900027000000900029900055000000000000 1083 | -- 005:60080660080860081a60082c90081660082860083a60083c00000000000000000000000000000000000000000000000090083490083690084890084a60085690085890084a90084c00000000000000000000000000000000000000000000000060083660083860082a60082c90081660081860080a60080c00000000000000000000000000000000000000000000000090080490080690081890082a60082690081890081a90080c000000000000000000000000000000000000000000000000 1084 | -- 006:600809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1085 | -- 007:000000000000900809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1086 | -- 008:000000000000000000000000d0080900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060080b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1087 | -- 009:d00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1088 | -- 010:00000000000040080b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1089 | -- 011:00000000000000000000000080080b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060080b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1090 | -- 012:600819000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900829000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1091 | -- 013:b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b000ba000000b00082000000b000b8b000ba000000000000b00082000000b000b8000000 1092 | -- 014:b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000b00082000000000000000000 1093 | -- 015:b00082000000b000ba000000b00082000000000000000000b00082000000b000ba000000b00082000000000000000000b00082000000b000bab000bab00082000000b000ba000000b00082000000000000000000b00082000000b000ba000000b00082000000000000b00082b00082000000000000000000b00082000000b000ba000000b00082000000000000000000b00082000000000000000000b000ba000000b00082000000b000b8b000ba000000000000b00082000000b000b8000000 1094 | -- 016:60080660080860081a60082c90081660082860083a60083c60081900000000000000000000000000000000000000000090083490083690084890084a60085690085890084a90084c90082900000000000000000000000000000000000000000060083660083860082a60082c90081660081860080a60080c60081b00000000000000000000000000000000000000000090080490080690081890082a60082690081890081a90080c90082d000000000000000000000000000000000000000000 1095 | -- 017:60080660080860081a60082c90081660082860083a60083c60085700000000000000000000000000000000000000000090083490083690084890084a60085690085890084a90084c90086700000000000000000000000000000000000000000060083660083860082a60082c90081660081860080a60080c60089900000000000000000000000000000000000000000090080490080690081890082a60082690081890081a90080c9008ab000000000000000000000000000000000000000000 1096 | -- 018:60080c400808600816d0080690081c60082840080660083600000000000060080600000000000070080600000000000090083c70080890080840080660085690085cd0080890084600000000000000000000000000000000000000000000000060083640083860082ad0083a90081660081840083a60080c000000000000600838000000000000600818000000000000900804d0083690081840083a700836900818d0081890080c000000000000000000000000000000000000000000000000 1097 | -- 019:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000c4000000000000000000000000000000000000000000 1098 | -- 020:c0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acb00012c0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acb00012c0009cc000acc000acb00012c0009cc000acc000acb00012c000acc0009cc000ac 1099 | -- 021:b00012c000acc0009cc000acb00012c0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acb00012c0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acb00012c0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acb00012c0009cc000acc0009cb00012c0009cc000acc000acb00012c000acc0009cc000acc0009cc000acb00012c000acc0009cc000acc0009cc000acb00012c000acc0009cc000ac 1100 | -- 022:60080b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff1000000000ee1000000000dd1000000000cc1000000000bb1000000000aa100000000099100000000088100000000077100000000066100000000055100000000044100000000033100000000022100000000011100000000000100000000 1101 | -- 023:600819000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900867000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1102 | -- 024:6008990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009008a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1103 | -- 025:00000060006500000060005700000060004500000060004700000060003500000060003760002960003500000060002700000060002500000000000000000060001500000060001900000060000500000060000760000b600005000000900017000000900005000000900017000000900025000000900027000000900035000000900037000000900045900049900057000000900055000000900069900055000000900069000000900065000000900057000000900049900045000000000000 1104 | -- 026:00000060005500000060005700000060005500000060006700000060006500000060006760005960005500000060005700000060004500000000000000000060004500000060003900000060003500000060003760002b600025000000900027000000900015000000900017000000900015000000900007000000900005000000900007000000900005900009900007000000900005000000900009900005000000900009000000900005000000900007000000900009900005000000000000 1105 | -- 027:c0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000acc0009cc000acc000acc0009cc000acc0009cc000acc0009cc0009cc000acc0009cc000aac0009ac000aac000aac0009ac000aac0009ac000aac00098c00098c000a8c00098c000a8c00098c000a8c000a89000ccc000a6c00096c000a66000ccc00096c000a6c000966000c89804c0000000000000000000000000000000000000 1106 | -- 057:000000000000000000000000d009090111000221000331000441000551000661000771000881000991000aa1000bb1000cc1000dd1000ee1000ff10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060080b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1107 | -- 058:0000000000009009090111000221000331000441000551000661000771000881000991000aa1000bb1000cc1000dd1000ee1000ff100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1108 | -- 059:6009090111000221000331000441000551000661000771000881000991000aa1000bb1000cc1000dd1000ee1000ff100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1109 | -- 1110 | 1111 | -- 1112 | -- 000:cfea30492b035d1842692b035c3343ad3306bd3c565833445043445043845043c45043845c30c10000c5000000000000000000 1113 | -- 1114 | 1115 | -- 1116 | -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 1117 | -- 1118 | 1119 | --------------------------------------------------------------------------------