Fantasy Console Sizecoding: The development of Metropolis'90 and Marblelous

Introduction:

These two intros document our very first steps intro tiny intro development on Fantasy Consoles. The Fantasy Console Sizecoding scene had just started and upon release in January 2021, these two intros were the 4th and 5th Fantasy Console Tiny Intros ever to be released, after the very first Fantasy Console Tiny Intros: Exotic, Merry Christmas and Episode CCVLI just came out in the weeks before.

Metropolis'80 (128 Bytes, TIC-80/MicroW8):

Back in December 2020, we just got the very first TIC-80 compression packing-script to experiment with and I had just started to experiment with some Fantasy Console sizecoding. The Hogmanay party was coming up to close of the year 2020, so I figured i'll try to create something in 128 bytes, which was quite minimal at the time. The result was Metropolis'80.

The intro is ment to simulate a camera panning across a building and then moving downwards. It scans all pixels across the screen, extracts rough (distorted) uv-coordinates and uses that for a angle-distance calculation with the center point moving horizontally across the screen. At the same time the perspective is shifted to simulate a camera slowly tilting downwards over time.

It uses the original TIC-80 palette for its colors, before TIC-80 switched to the Sweetie16 palette.

Here is the code for the TIC-80 version of Metropolis'80 (not even using a TIC=load transform):

function TIC()t=time()/69+9 for o=0,3e4 do y=o/t+t x=o%240-99poke4(o,(((math.atan(x,y)*t+t)//6|(7^8/(x*x+y*y)+t)//6)&6)-3)end end

Marblelous (256 Bytes, TIC-80/PICO-8/MicroW8):

Right around the same time I had an idea for a 256 byte intro of a sphere moving bouncing on a perspective plane using a custom set palette for its blue-ish and copper-ish colors.

The first line of the intro sets up the copper-blue palette with code. After that the code of the intro basically walks across each pixel on screen, extracts u,v values and for each pixel calculates a colorvalues by combining an inverted polar-distort (z) for the sphere-distortion (u/z, v/z cutting everything with z<1 ) and overlay that onto a basic perspective plane (u/zplane, constant/zplane)

Here is the code for the TIC-80 version

for i=0,47 do poke(16320+i,math.sin(i/15)*255)end
function TIC()t=time()/499 for o=0,3e4 do v=o/1920-8u=(o%240)/8-15m=t<32 and t/8 or 4 b=math.sin(m+1)*16+9
s=math.sin(t/8)*9+4z=2-(u*u+v*v)/(12+s-b)w=v-math.abs(s+b)c=16-w/4 if(w>0)then c=(((s/2-u/w)//1~(16/w-t)//1)&3)+w end
if(z>1)then c=(((s+u/z)//1~(v/z-t)//1)&3)+12 end poke4(o,c)end end

And here for the PICO-8 port

cls()::f::n=t()/8for y=0,127,2do for x=0,127do
u=x/8-8v=y/8-8m=n<32and n/8or 4 b=sin(m+1)*16+9s=sin(n/8)*9+4
z=2-(u*u+v*v)/(12+s-b)w=v-abs(s+b)c=z>1and(((s+u/z)^^(v/z-n*8))&3)+4 or w>0and((s/2-u/w)^^(16/w-n))&3or -w/5&3
pset(x,y,({1,13,6,0,133,134,7})[c])end end flip()goto f

The intro was released one week after Metropolis'80 at Dihalt 2021.

Conclusion:

Looking back the code for these intros could be optimised and improved upon further with new things and tricks that have been discovered since. Furthermore packing has improved a lot over the years, so these days there is more to pack into the productions than we were able to do in these first intros back in early 2021.

For more information, you can check out the intros at demozoo: Metropolis'80 (2021) / Marblelous (2021)

Return to blog overview