Introduction:
End of summer is usually the time we are the least productive with Holidays and family gatherings taking precedent over our demoscene activities. This make september parties like Flash and Function always tricky to support, especially when you have no finished productions on the shelf.
Prototype:
If I remember correctly Function 2020 was held right on the tail end of our holiday and there was almost no time to submit something. But I guess back then we were eager to still try to support the party in some way anyhow because of its history with sizecoding.
Since we had no finished code ready at the time, we went through various prototypes we'd been working on in our prototype framework that we had developed for Enigma and expanded on since. The only effect that looked somewhat decent was a 3D type of tunnel/cave thing that we had developed as one part of a larger 512 byte intro concept.
We haven't been able to use this framework a lot as not all types of effects will need this aproach, but
we have been able to use it on Enigma and on Kharon. By using this in-between prototype language we can sort of fiddle with float calculations using C whilst still adhering
to the overall structure and register usage of X86 assembly. We later also added support for various Z80 and 6502 platforms.
We started by having Blossom take this prototype code and convert it to FPU code as-is, which would serve as the base for our intro. She is pretty good with X87 FPU code, so she was able to get the thing working pretty quickly.
Prototype Code: | Final X87 FPU Code: |
---|---|
#define UVSCALE 32767
|
pusha
|
We didn't want to use the default XOR/OR/AND patterns here, so a simple texture was generated by still doing and XOR/AND pattern, but counting the number individual bits for each value instead and storing that into memory, which gives us that liney-texture pattern.
Adding the concept:
In the final hours before the deadline we just had the overall thing working within the size limit. Just like the original prototype it had colors and a bit of sound going, but it still felt a bit flat.
I had been experimenting with some typography on DOS, so Blossom came up with a concept of using it for the 5 stages of grief, which would add a nice concept to the thing without textdata taking up half the intro.
denial
anger
bargain
depression
acceptance
However adding the text data and drawing routines ofcourse still added quite a bit to the size and we had to find some clever optimisations. One of the things I was kind of proud of is stacking 4 or 5 overlapping float constants at the very start of the intro (SI=100h) without breaking the code.
db 168 ; +0 distscale
dw 2800h ; +1 mul128
db 128 ; +3 uvscale
dw 5
Once we had the text and concept in, we settled on the title of Kharon, which ofcourse is a reference to the figure with the same name in greek mythology who carries souls across the rivers Acheron and Styx.
Conclusion:
Even though some work on the tunnel effect was already done prior, this was a very much rushed overall production and therefore was missing a bit of the polish we'd normally like to give our productions. I remember we still had color in the intro right before the compo started and the stress of sending updates in the very last minutes. Something we hope to never have to experience again. The plus side that this was one of those intros that me and Blossom were able to work on together, with each of us bringing equal amount of code and design to the table.
For more information, you can down the intro complete with sourcecode at: demozoo