Partycoding @home: The development of Rush

Introduction:

After me and Blossom finished up our 128 byte entries for the Outline Demoparty. We suddenly got word that the organization received a lot of 256 byte entries and they were now adding a seperate 256 byte competition to the program.

Get Inspired, Quick!

Of course, we did not anticipate this and with the deadline just 3 days away, we were considering our options. We did not have any ideas planned so we had to come up with something on the spot.

After a whole day of going through many ideas and effects, as well as also having some family engagements in between now and the deadline, we still had nothing and were forced to either quit on this ridiculous idea or go to blindly plow through and see at the last moment if we have something or not.

Let there be sound!

Usually, I start these development pieces by writing something about the visuals first, but this production started with music first. Going through some of the small stuff we made for testing, we came across a piece of sound code I created when playing around with Midi. It consisted of the bass drum and tonal parts that ended up in the final intro. Blossom thought this would make a good basis for our intro. So I set about picking this piece of music apart into separate parts that we could time our intro to.

; ======================== music routine ======================
pusha
mov dx,330h
mov ax,bp
add si,byte (buzzdata-100h)
mov cl,5 ; num.notes
test ah,1
jnz drumlead
mov cl,3
test ah,2
jz drumlead
inc si
inc si
drumlead:
test al,7
jnz nodrum
add cl,3
jmp playnote
nodrum:
; lead cmp ah,3 ; start with beat only
jb nosound
test al,3
jnz nosound
mov si,lead
and al,06dh
mov byte [byte si+3],al ; 3 modify note
playnote:
rep outsb
nosound:
popa

Getting something on screen:

We still didn't have any clue where to take this project in terms of effects, so I asked Blossom to basically set up a bunch of things on the FPU that we could use to fiddle around with like an angle, distance, polar project coordinates around a moving center point.

Once this was done, we had some basic visuals up and running based on the polar projection coordinates with the set of colors changing each beat. At least we had something to work with.

Divide and Conquer:

Blossom went on to start experimenting with the main effect by rolling over the bit-wise representation of the coordinates over time, which resulted in a bunch of nice variation to the effect.

mov bx,bp ; bx = framecounter (duplicate)
mov cl,bh
and cl,3
dec cx
ror ax,cl ; ax = original polar coords
and al,ah ; and pattern

Meanwhile I was able to finish deconstructing the music piece into different elements that we could toggle independently to create a piece of music with a little more variation. Once this was done we added it to the project and started experimenting with the different data we had at our disposal, creating different effects to see if there was something that worked together with the polar projection effect..

Intervention:

So after a nightly coding session we had a family engagement to attend in the midst of our development. This required us to travel all across the country and basically not be working on the intro for a good 14-16 hours. So half-asleep we went off in our micro van to visit family, still not knowing if what we were building would ever work as an intro.

Four to the floor:

The next morning, we woke up, ready to leave for home again and continue development. Up until this point we knew we had made some progress, but we had far from what we would consider a viable product, seeing that most of the effects we tried didn't seem to work out very well.

However, Blossom had an idea of doing a moving perspective floor routine as she figured the motion would work well with the music, so she set of to redo the FPU code to include the stuff we needed to make the floor happen, whilst ditching a couple of other variables we didn't need anymore.

And she was right, the floor seemed to work very well with the music.

Making it cohesive:

So at this point we had 2 effects that kinda worked and things started to fall a bit more into place. To make things more cohesive, we wanted to do something that would evolve over time from something simple and turn into something more chaotic towards the end of the intro.

So sticking with the concept of switching colors on each beat, we started the music with just the bass part and build it out over time from there, adding the different effects. Starting with simple flashing colors, and adding floor and different polar effects later on in the intro. To drive this concept home, we extended the same idea to our colors and rendering details, by using different pattern masks for our colors over time.

Even though we didn't optimize a whole lot, we were still pretty good on space for the intro. So we went on to see if there was another effect we could add to the intro. But after trying different things, we finally ended up with our first choice of starting with just the simple flashing colors as this seemed to fit best with the music and concept of the intro.

The last mile:

After 2 long coding sessions and a trip across country, the intro finally seemed to be heading towards completion. Blossom was dead tired and crashed onto the couch, while I spent the last hours trying to make different color schemes work. I tried many different options, but in the end had to settle for just all purple/blue-ish tints. And then doing the whole screenshot / documenting /packaging everything up dance and sending it off to Outline and crashing at the finish line....

We... f*&king... made it! *Zzzzzzzzzzz*

Conclusion:

When we started this production, we honestly had little faith that we could deliver something before the tight deadline that we would feel good about. So to not only finish a product, but to see it win at outline was a great feeling for the both of us.

I also feel that this was the first production where me and Blossom were able to truly cooperate and work together on all levels, from inception to final product, which was awesome. I wanted to honor Enigma for our Revision entry because it inspired me to create demos myself in the 90s, and Blossom helped me with the FPU part to make it all happen. Blossom had the idea for the Outline Online invite and in turn I helped her out to make it happen.

But because of enormous time constraints we were under, I think working as a team was definitely an advantage for us. At different points during the development we had to encourage each other to keep plowing through. I honestly feel that this intro would not be completed in time if it was just one of us working on it.

But working with such a tight deadline also has its drawbacks. There simply wasn't any time for many rounds of iteration and tweaking the product after it was technically finished, so we weren't able to give it the amount of polish we would usually give.

All in all, i'm very proud what we were able to create in such a short timeframe and even though it was a lot of hard work, I am sure I will look back at its development with a smile...

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

Return to blog overview