├── 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 | n T=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 | M t=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 | l mSin=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 | 
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 | 
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 | [](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 | [ 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 | [ 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 | [ 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 | [ Click for video](https://user-images.githubusercontent.com/567996/229349482-5dfc852c-5202-48cf-a974-fa2ecd34d410.mp4 "TIC-80 effect")
157 |
158 |
159 | [ 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 | [ 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 | [ 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 | [ 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 | [ 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 | [ 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 |
--------------------------------------------------------------------------------