by sebbert
First post, woo!
tl;dr We decided last-minute to make this thing at Revision this year.
We made a sort of last-minute decision to go to Revision this year, with some very loose plans to submit a 4k intro. Fast forward a couple of weeks, we arrive at the party with two severely unfinished scenes, and no music.
Now, at practically every demoparty we've gone to, we've ended up doing 90% of the work at the party itself. Knowing the sheer level of insanity that can be achieved by the human brain attempting to tweak the physics so that the cubes not clip into the goddamn camera while not having slept for over 24 hours, we realized we weren't too keen on the idea of doing a 4k after all.
But not having anything to work on at the party is super boring – so we decided to reduce our scope quite a bit, and spend the next ~20 hours making a quick 1k intro to enter in the 8k compo.
So we're trying to repurpose our 4k/8k engine for 1k, which means a lot of stuff has to go. First and foremost is music. We've been using 4klang for our intros, which is an excellent synth, but completely overkill for a 1k. So we stripped out anything 4klang, which also had the neat side benefit of making our decompressor taking up less space (whoop).
But, a demo needs music. I had previously read seecce's awesome writeup on how they did their 64k for last year's Revision, and got inspired by their decision to use Paulstretch for music. In short, paulstretch is an awesome algorithm that takes a sound sample, and time-stretches it into this huuuuge ambient drone track that sounds like christ himself cradling you to sleep (seriously, go play with that thing right now). So we shamelessly copied a (public domain) paulstretch implementation, which we then stripped it down to its bare minimum in terms of code size.
Now the question is, what sound sample do we feed through paulstretch? The initial idea was to throw together some dank general MIDI sounds, but we couldn't find a way to render a midi file in a tiny amount of space. Also, the midi data itself would probably have taken up a decent chunk of space as well.
Our current intro toolchain targets macOS, and we generally try to squeeze as many dirty hacks out of the platform as possible. This time was no exception. We started searching around our system directories, until we finally hit the mother lode – iPhone ringtones. These were perfect for our use case, since a lot of them are short music snippets. We must have spent several hours going back and forth, before finally settling on this one.
Now, we needed some graphics. We tried a bunch of different approaches, including a shader generously donated by Ferris, but ultimately settled for a particle effect that struck a good balance between wow-factor and code size. The rest of the time leading up to (and beyond) the compo deadline was spent chopping away at the final 30 bytes that stood between us and the 1k size limit we had set for ourselves. We finally managed to deliver just in time for the organizers not to come yelling at us.
All in all, I'm super happy with what we managed hack together in less than 24 hours. Not going full-on hyper crunch mode made the party so much more enjoyable :) We ended up placing 7th – which was very much deserved given our time frame, the high bar of quality in the compo, as well as the other contestants having an extra 7 kilobytes to work with (or 3, in the case of LJ & Virgill's excellent production). Everyone kicked ass this year :D
Cheers!
Last Edited on Wed Apr 04 2018 18:10:24 GMT-0400 (EDT)