Introduction:
This intro was specifically made and designed for the Lost Party 2023 in Poland. An 8-bit focussed demoparty that, like Forever Party, I had always appreciated for their Atari output and dedication to supporting the smaller sized intro categories. So I really tried my very best to make something special that they didn't see done in that size before.
Visuals:
As one can imagine doing any trigometry or atan and stuff on an atari 8bit either requires large tables or is very hard to do in small sizes, so I needed a different base shape that was kinda tunnelish in nature but didnt require any complex math to calculate. After some experimentation i finally settles on a Triangular tunnel shape accomplished by 3-way mirroring a perspective plane calculation.
Whereas a basic perspective plane calculation for each pixel looks something like:
Z = abs(Y-horizon)
X'= (x-center)*multiplier / Z
Y'= constant / Z
So to do some fancy mirroring we want to have a ground floor with 2 angled planes on top of that.
AX = ABS(x-center)
CX = ABS((y-horizon)-AX)
Z = CX+AX
And from there its the same thing as the perspective plane:
X'= CX * multiplier / Z
Y'= constant / Z
These are calculations that can be done on an Atari 8-bit without too much hassle. The only tricky bit is the division, for which I used a minimal/dedicated variant that just uses the quotient, which by all means isn't perfect (and you can even see that in the final intro) and only serves this one specific purpose.
div:
STX divisor
LDY #0
SEC
div1:
SBC divisor
BCC div2
INY
BNE div1
div2:
TYA
RTS
From here we'll do small precalc phase where we precalculate 8 frames of pixeldata in Graphics 7 mode (160 x 96 x 4 colors
) by moving the MEMTOP
a few pages along each time, reinitialising the graphics mode init and storing the current displaylist ($231
) into a table.
Then once the intro starts we cycle through the different display_lists from the table. From here we can add some variation to the visuals by swapping out colors. So I opted for a grayscale base-color, augmented by various accent colors that would change over time.
Audio:
The Audio of this intro actually takes quite a bit of size budget and includes 28 bytes of sounddata on top of the player code.
- 16 bytes of register data for the drums
- 8 bytes of drum sequence
- 4 basenotes
The player itself is of the same vain as I did for Spare Parts with fready. It starts by basically indexing a small drum-sequence and then pass the different register values for each frameupdate to the sound registers. On top of that a global masking is done for turning the bass part on and off, to give the music a little variation towards the halfway point of the intro and hopefully create another small 'oh!' moment for the audience.
Conclusion:
I was happy with how the intro turned out and the fact that I was able to squeeze a little more advance piece of sound into a 256 byte intro for the Atari XE/XL. I thought it would be a worthwhile entry and was glad to see it win the 256 byte intro competition at one of my favorite 8-bit parties out there.
For more information, you can check out the intros at demozoo: Wayward (2023)