Introduction:
Once a year, the dutch demoscene puts everything they do aside and visits Outline Demoparty for a weekend of outdoorsey demoscening with Hiking Trails, Floppy Disk Throwing, Great DJ Sets, Great Compos and amazing chill vibes! Because we usually try to do a larger (demo) production with the Trepaan team, mostly all my spare time in the 3 months before the party went to the big demo (Trepaan's Kablam! which ended up winning the super competitive demo competition this year).
That ment that any sizecoding related stuff either has to be done before or at the party place, but after deliving the demo there was no energy left to do anything else, so I decided to submit an older prod that was alerady finished but didn't make it for Deadline to the 256 byte intro compo instead.
Design:
The general idea for this intro was to see if I could create something that had a good chunk of its sizebudget (about half) dedicated to generating sound, whilst still retaining somewhat interesting visuals to go along with it. Whereas I normally start with reserving about 25% of the intro to the sound which should leave enough for the progression and visuals of the intro. This time around it was much more of a juggling act to not loose too much of the ambition on either end. Obviously there is no free lunch, so this is what I ended up with:
Visuals:
To make sure I would stay somewhat in the ballpark for my original ambitions, I started developing the visuals for this intro as making a 128 byte intro with interesting visuals, so thats exactly what I did:
Make a 128 byte intro and optimize it to the point that it fits within the 128 byte sizelimit whilst still retaining interesting visuals.
Since I had some experience with 128 byte intros on MicroW8, I could get a CPU non-scalar raymarcher going pretty quickly, meaning your typical loops for scanning across the width and height of the screen as well as a loop for travelling along the ray-direction (u,v). I usually use the variable z for indication the total distance travelled (z=z+d*factor).
The real challenge is generating an interesting looking 3D World in such a small footprint. So after some thinking I figured I would just start with a camera moving upwards through a repeting cosgrid shape (d=cos(px)+cos(py-t)+cos(pz)) that sort of acts like an elevator shaft,
and then deforming the cosgrid in an interesting way that would make it interesting and unique to the audience.

CORE:RISE 128 byte Prototype
To make the visuals more interesting i've added horizontal mirror, tilt and distort the general shape, as well as distort the thickness and shape of the different elements that are further away from the the center of the camera, giving it that matrix pod type of look. Furthermore I've added and element that further distorts the shape over time, adding a form of progression.
From here on out is was some further optimisations and tweaking so that I had finally delivered my intermediate 128 byte intro that I could use as the base for the rest of the thing.
Assymetrical Rendering:
Often times stock palettes on many system either aren't that great or are very recognisable to the audience. Since I didnt want to run into color fatique because all tiny intros for a particular platform (from Atari to TIC-80, from DOS to MicroW8) tend to converge to the same colorschemes after a while. So then you are left with either setting a custom palette for your production, or finding other creative ways to tweak the coloring.
So all through the year 2025, I've been experimenting with generating RGB-color like visuals using different types of RGB blots with the release of RE:FORM (winner of the fantasy demo competition at Revision 2025) as well as its portable 512 byte companion EN:CORE later that year for Nordlicht 2025, both under the Rivals label with teadrinker.
For the 512-byte productions I used a more compact method that I coined "Asymmetrical Rendering", because it only uses 2-pairs of asymmetrical colors instead of 4 for the full RGB blot. This concept is somewhat based on how TV signals store their color information in seperate signals for luma (Y), redshift (Cr) and blueshift (Cb). By using two (small) color ramps for even/odd pixels you can then decide what part of the rendering goes to the first channel and what goes to the second. This can be based on material properties, light properties or any other property you can think of that will the divide the scene in two distinct layers.
As a visual reference, here is the asymmetrical layer split for CORE:RISE.
So for this particular intro I decided to split it up between a 'glow' layer for nearby objects and a detailed depth layer for the background and mixing those together to form the total picture.
Audio:
This intro uses a custom softsynth in the snd function callback. Since the music for this production was relative complex for it size, i'll try to break it apart into its different elements.
Anyone who has dabbled in some somesynth knows that whilst a sawtooth or kick are pretty basic, the snaredrums are one of the more trickier sounds to pull off and mix, hence the snaredrum sound being pretty shit because of the size limitations,
but I did think it added some overall flair and depth to the total sound output.
Since I try to bring new approaches / ways of explaining things for each blog, I figured I tried to structure the audio bit below as more of an method explainer tutorial-esque thing on how you can layer different types of sounds in minimalistic type of sound callback, since these techniques are applicable to different programming languages and size categories.
// Given t as sampleoffset
notetime = t / noteDivider;
freq = t / frequencyDivider;
// Setup the 'instruments' we are going to use
sawtooth = fmod(freq,2.0)-1.0;
snare = (1.0-pow(fmod(freq,1.0),0.096));
kick = pow(sawtooth, 0.33333);
// Melody line
melody = (whatever melody from formula or notetable based on notetime) * sawtooth;
// hard switch between kick and melody (its a choice)
kickMelodyMix = select(fmod(freq,2.0)>1.0, kick, melody);
// very cheap mix to add in some 'snare' and hihat to the kickMelodyMix
output = fmod(kickMelodyMix * 32.0, 2.0) - snare*randomf();
Conclusion:
Visiting Outline Demoparty each year has always been a great experience for me. Had a blast talking to sizecoders like Hellmood and Plex as well as meeting old friends that haven't been demoscening in 25 years making their return. The competitions had lots of amazing high quality entries so they were a blast to watch as well. Also congratulations to Hellmood for delivering both an amazing 16 byte intro with Wake Up! as well as a somewhat fresh 32 byte intro with Metaballs 32b in the same compo!. Be sure to check them out, as well as the other demos and tiny intros at outline in the link below.
You can check out the releases from Outline 2026 at Demozoo