Nano Poetry: The development of Haiku


After our release at Outline demoparty, both me and Blossom were pretty busy with our day to day things. So when AtParty 2020 came around, both me and Blossom had nothing to submit. So I decided to take a day free from work to see if I could get an entry ready for the 256 byte intro competition.


So I wanted to do something with this in the form of a Haiku poem combined with an interesting effect.

For our earlier productions, me and blossom always had discussions about including some kind of text in our intros. Her argument being that the default BIOS text doesn't look that good and that the bytes needed for displaying are better spent elsewhere, and I kinda agree. So one of the things I did experiment with before starting this intro, is to see if it is possible to do some text rendering that doesn't look like sh*t.

My previous stint with text rendering in Nanorail I was just rendering text to the visual screen and just skipping certain pixels when rendering the effect to not touch these pixels. However this method doesn't scale well. So this time i'm copying the text to a backbuffer upon startup and then reading back the data in a slightly different way and xor-ing it over the original image when rendering each frame.

Nano Poetry:

Given that such a poem would take quite a bit of space, I had to figure out a poem that was in theme with the rest of the intro, adheres to the Haiku structure and isn't too long. So in the end we settled on this poem:

New Technology
False Sense of Security
Where Will It Take Us?
- 1984

Given that the size of the text data, special formatting characters and at the custom font rendering routines do take up quite a bit of space, I had to approach this intro as if it was a 128byte intro with the remaining bytes spent on text data and text rendering.

Plane Bending:

So for the actual background effect, I started experimenting with a tilted perspective plane routine that I mirrored across the center. Then mapping the end result to 2 colors so that everything was It did take some careful tweaking and polish to get the planes moving exactly in the way I liked so that it would form interesting shapes that I liked.

fild word [bx-14] ; calculate t from framecounter
fidiv word [bx-16]
fadd dword [eeneneenhalf-3]
fild word [bx-9]
fmulp st2
fimul word [bx-8]
fidiv word [scalevalue] ; z = rp/scale
fild word [bx-8] ; x
fdiv st1 ; x/z
fistp word [bx-4] ; ax
fild word [floorval] ; 127<<8
fdiv st1 ; 127<<8 / z
fistp word [bx-5] ; ah

As you can see i'm using the AX register for both the U and V part of the plane to save some registers later on.

Drop the beat:

In the final hours before the deadline I started to work on the sound of the project. I wanted to do something in the vain of rush in terms of having some sort of beat supported with strings and made a sound routine accordingly. However I just couldn't get the sound right to match the visuals.

Blossom kept telling me to just drop the beat. But I had my music routine set up to support a simple beat, and was stubornly searching for a sound that would match this setup. Then when I finally did drop the beat (by simply setting some data to 0 instead of a complete music routine rewrite) I too found out that the intro works so much better without a beat. So I quickly rewrote the music routine to not have a beat and spent the remaining bytes on a slightly better version of the poem (the one listed above) than the version I had up to that point.


Let's be honest: Its a common thing in the demoscene that a lot of productions still need to be developed relatively short before the deadline, which means that you cannot always put the amount of polish in them as you would have liked to.

For example with something like Rush (which was very very last minute) I still think to this day that it only 1 day of extra time would have improved the intro a lot.

However, I found the development of this intro was very quick and concise, with the right amount of polish. The theme, the haiku, the color-scheme that is purposely a bit off to invoke discomfort, the visuals and the sound really work well together to make for a cohesive and polished end product.

For more information, you can down the intro complete with sourcecode at:

Return to blog overview