*Finally* by Titan, a making-of-the-demo write up

category: general [glöplog]
Here’s a little extra info on this production for those interested, as best I can find in my hazy memory :)

BB Image
Liranuna started demo coding on the Wonderswan Color platform in 2006 shortly before the first WSC demo was released (WonderProject Intro by Orion).

Quoting Liran from the pouet thread: "DAMN IT! Good job - I wanted to release one too at tUM. WSC is a bitch to code to. Be sure to see another WSC demo soon ;) ".

The WSC is a handheld console released by Bandai in 2000, designed by Gunpei Yokoi (who also designed the original Gameboy). The machine specs are:

  • 3 MHz 16-bit NEC V30MZ cpu (80186 instruction set)
  • 512KB shared RAM/VRAM
  • 241 colours displayable at once from a palette of 4096 possible colours (no back lighting)
  • 128 hardware sprites, 2 layers
  • Four digital audio channels which can play sequences of up to 32 4 bit samples
  • One of the audio channels can be configured to output noise, one channel (a different one) can be configured to output PCM
  • Mono speaker (no headphone port)
  • Expansion port for various accessories
  • Takes 1x AA battery which lasts for around 20 hours :)

There was no API, all that existed was a pretty basic techdoc (wstech24.txt).

Liran achieved the first demo effect:

BB ImageBB Image
BB ImageRainbow Jumpman effect! (it didn't survive into final demo though)

strager soon jumped in and coded the Qube effect:

BB ImageBB Image
BB ImageQube displaying pacman (also didn't survive in the final demo)

Next strager coded a music player using the WSM spec designed by Saxxon, who also created a soundtrack and a converter from XM to WSM. Now we had the first ever WSC demo with music! The track can be heard here. It didn’t survive to the final demo, but it's a wonderful track. Next Liranuna and strager coded the twister (this remained!). The twister scrolltext was originally a greetings list, which later became "TITAN AT EVOKE2010 PARTY", which was updated as each year passed ;)

BB ImageBB Image
BB ImageTwister scrollers!

BB Image
At this time Liranuna became busy with real life and in 2009 strager took on the project, targetting for Evoke 2009. Irokos created a new demo design and pixelled gfx for the opening scenes, coded by strager:

BB ImageBB Image
BB ImageThe demo was now titled ‘Amour’ (which didn’t survive into the final demo)

At Strobe’s request strager and Saxxon worked further on the WSM format, adding PCM channel support. With the new format Strobe composed our demo soundtrack. In case you couldn’t make them out, the lyrics are: "Ohhhh yeahh, this is the wonderswan, we will make sooome craaaaap, juust for you..... ouu ohhho." ;D. I (alk) managed to buy a Wondermagic Color flashcart and now we could show the demo on real hardware at the party. Evoke arrived and we were still working on the demo! strager worked remotely, with myself and some other members attending the party to release it. But unfortunately it wasn’t ready and we made the decision to pull the plug and re-aim for Evoke 2010.

BB Image
Once again life got busy (of course) and we arrived at a month before Evoke 2010 … :D Focussed on the Wonderswan demo once more, a new effect was created:

BB ImageBB Image
BB ImageHeart-cubes (didn't survive into final edit)

Botty (the singing mecha) was pixelled by Alien with animations coded by strager. Now another coder, jix, joined the team, and in the days before Evoke he began to work on a new effect: 3D engine. We realized that since Liranuna was busy there was no coder in the team who could test on real hardware so I posted the Wondermagic to jix. To his dismay jix discovered that the flashing software provided with the Wondermagic only worked in Windows 98, and only with a real parallel port. Since he developed with a laptop this made testing on the hardware a PITA (and relying on an emulator was not an option). So, with just over a week left, jix decided to reverse engineer the flashing software :D. He converted it to USB with the help of an Atmega and an FTDI, and wrote a new portable version of the software. It worked very well but now there was only a few days left to complete the demo. The deadline streaked towards us again and we were party-coding once more! As the deadline became minutes away the decision was taken. It wasn’t ready D:! After the party the Wonderswan project dissipated...

BB Image
Some time before Evoke 2011, the team regrouped and once again we became determined to complete the demo. We still had a problem: the Wonderswan doesn't have a headphone port, and only a crappy mono speaker. An official headphone adapter was released but is unavailable nowadays. However we came across an ascii diagram of the circuit used in the adapter. In the week before Evoke 2011 jix built a microcontroller device which plugged into the Wonderswan expansion port, capturing the audio data and exporting it in non-realtime to his laptop via USB. When this audio capturing system was completed, with several days before the party, jix picked up his effect code once more. Now we arrived at the party, with a complete audio recording system but an unfinished demo... Over the period from Friday at 4pm till Saturday 4pm, with no sleep jix finished the new effect, 3D engine!

BB ImageBB Image
BB Image3D Engine: do you recognise this object?

To my knowledge, this was the first time 3D had been done on Wonderswan :)

Work continued at the party (jix was surely sleepy by this time) and remotely on IRC. Now the demo received its name from Alien: 'finally'. Alien produced the walking-fag animation and Lilibox produced the lazah-eyes dude. After re-ordering all code and data, which involved changing all hardcoded segment values to make space for the animations, we got the demo completed by 10pm, only 3 hours after the deadline :D. The compo would start at 11pm. We went to a quiet room for video recording with our Swancrystal console in hand, along with a Microsoft HD webcam (uh oh...).

BB ImageBB Image
BB ImageAlien's title graphics

Due to the audio capture system, video and audio was recorded separately, and after doing this we returned to hall to sync the files. The compo start time had arrived but the Evoke compo orga (cheers Alexander!) kindly delayed the compo to give us some time extension. Our friend Alex of Nerdarzt offered to help us with the video syncing, and we loaded the files onto his computer.

Now our hearts sunk... we discovered that the Microsoft webcam had produced a video file which didn't keep a consistant time sync, and trying to sync the audio and video was impossible! We spent some time trying to do this by time-stretching, but it became apparent that it was really a lost cause. So, we took the same decision. So near but so far! A difficult few moments passed, and then we promised ourselves, we would be back, at Evoke 2012 with a finished and polished demo, recorded *ahead of time* to release :) It was some compensation for us that we agreed that there were improvements that could be made to the music/effect sync and that there were unwanted glitches present in effects of the demo.

BB Image
Work started on finally again in 2012, after the Nordlicht demo party (since jix and neoman were working on a 1K for this party). This left approximately three weeks remaining till Evoke :D. This time jix planned to finally overcome the problems we had while completing the demo at Evoke 2011 by:

  1. patching yasm (the assembler we were using, a nasm clone) so that it had better support for segmented addressing (no more hardcoded segments \o/) and
  2. building a scripting engine to allow for easy syncing and moving of the demo parts, which had previously been a slow and laborious task.

Now there was just a few days left again. The old demo effects were slotted into the new scripting engine one by one, while getting an overhaul to remove the glitches. Testing was very time consuming since writing to the flash cart took a bit over 6 minutes. Luckily when half of the effects had been added, jix had an idea: modify the flashing software to only rewrite parts of the ROM that had changed. This worked and now flashing most code changes took ~8 seconds, giving us a better chance to tackle the remaining effects. Finally, late on Friday evening at Evoke, the demo was running in the same state as the previous year, but glitch free, with scripted effects and Saturday remaining for polishing \o/

On a more relaxed Saturday than previously, lilibox provided the EVOKE text explosion animation while jix worked on syncing, and Cerror provided bitmaps for the credits scene. At the same time I needed to edit Strobe’s soundtrack to fit the new effects layout. However the streaming compo was on at this time and I literally couldn’t hear anything from my headphones so I went to the only quiet place available in the hall to track, which was the seminar room. When I arrived someone was already sitting at the front, as I took my seat beside him I was surprised to see that it was Chris Hülsbeck who was also taking refuge from the noise to get some work done :). Thankfully I managed to finish my tracking and brought the XM back to the hall and presented it to jix.

We needed one last effect to complete the demo, and there was an idea floating in my mind during this day. I’d recently bought a Megadrive and had been playing Sonic, the effect that we could use was the well known SEEEGAAAAA intro animation. Now the 7pm deadline had arrived and we had just one effect left to code! Feeling more confident I visited the Evoke orga area, and this time Pandur the compo orga kindly let us deliver our demo file after the deadline, as long as it was ready before the compo started at 11pm.

As I walked down the steps towards the party hall I noticed someone walking in carrying a huge video rig. I blinked twice, and introduced myself :D It turned out that Mark (cheers!) aka TheMark was a local from Cologne who had his own video production company, and was visiting Evoke to record some video. I asked if he could help us to capture the demo, and he agreed! I guess his rig was worth at least €25K, with tripod, DSLR video recorder, lights and so on. Over the next hour jix coded the final effect and then we were ready for recording! But one more surprise awaited us... jix plugged in his microcontroller audio hardware, ran the software to retrieve the audio data, and a message flashed on screen “buffer overrun, buffer overrun”. We looked at each other, and jix powered off his hardware, unplugged it, plugged it in again, and switched it on. He ran the software again and was confronted with more buffer overrun messages. A slight moment of panic later, we decided to fallback to using audio output from the emulator, and hoped that it would match the sync of the hardware video.

I didn’t feel very confident in my ability to sync the audio and video under such time pressure so I decided to look about for someone with Adobe Premiere skills. I spoke to kb who made a great suggestion, JCO was in attendance! I certainly would be happy to find him - and fortunately he shortly appeared outside the hall and accepted the challenge! Now it was out of our hands, with 1 hour 30 mins left before the compo started, and two great professionals involved for recording and video syncing I could relax, time for a beer :)

BB ImageBB Image
BB Imagealk and TheMark outside of Evoke party

We met in the seminar room and TheMark set up his video equipment. The Wonderswan has no backlighting so it was quite challenging to get a good capture. jix, JCO and TheMark chattered in German as I watched, with Johanes quietly giving me translations of what was happening, and keeping TheMark’s beer safe from harm ;D. With the room lights off, the camera was positioned on a tripod facing downwards, with rig lights illuminating the Wonderswan screen. TheMark used an android tablet plugged into his camera as a video readout and control system. I couldn’t believe the quality it produced, each pixel was lit up and visible in huge contrast. Recording finished around 10:25pm...

We moved to JCO’s desk and copied the files onto his workstation laptop, 30 minutes remained until the compo would start. JCO grumbled about the time left and the encoding time that it would need, but worked quickly. Then we found out... the emulator was in no way synced with the hardware video. But if anyone could solve it JCO could, and by 10:55 he had produced a video file! For the last time I walked to the Orga area and proudly delivered our demo. Shortly afterwards the compo started and it turned out to be IMO the most awesome compo of the party. Each time an entry’s slide was displayed my heart skipped a beat, when would ours be shown! Finally, shown 11th in the compo, ‘finally’ by Titan appeared. The crowd cheered and with shouts of “Titten!” and “Schwonderwanz!” jix’s Wonderswan appeared on the big screen. It was truly an awesome experience, the reception from the crowd was as intense as the feelings we had from finally seeing our demo on the screen, as Strobe’s massive soundtrack sirens began to sound across the PA system.

Words can’t quite describe, but my life is now measured in before and after ‘finally’ was released: http://pouet.net/prod.php?which=59699. You can see this moment captured on film thanks to m0d's youtube(live) link!! :)

BB ImageBB Image
BB ImageTitan @ Evoke 2012, from the left: nebulah, sunspire, irokos, alk, icedragon, xylo, cerror, laeila, eviljoker, moqui, jix.

Thanks again to m0d for the group photo :)

added on the 2012-08-25 00:05:57 by alk alk
Great story, always nice to read about all the work that goes into a demo, especially when choosing a not-so-common hardware!
added on the 2012-08-25 00:21:30 by Sdw Sdw
brb, plastering this post all over the internets.
added on the 2012-08-25 00:21:40 by m0d m0d
Mwoar, so nuts - you guys rock, a lot! <3
added on the 2012-08-25 00:30:50 by mog mog
great story, and powerfull platform as well, unknown, but gg!
added on the 2012-08-25 00:33:58 by skarab skarab
Nice story, and we're all lucky about the outcome, aren't we. :D
A good read, thanks for sharing!
added on the 2012-08-25 00:37:20 by CONS CONS
BB Image
added on the 2012-08-25 01:29:05 by Defiance Defiance
That was a great read. Kudos for the hard work, especially for having to jump through all those hoops to get the demo done :)
added on the 2012-08-25 02:41:28 by Alpha C Alpha C
BB Image
added on the 2012-08-25 02:58:27 by LiraNuna LiraNuna
Stupid hotlink protections.
BB Image
added on the 2012-08-25 02:59:19 by LiraNuna LiraNuna
Very cool writeup :) It was great to be a part of this.
cool report :)
added on the 2012-08-25 07:44:57 by psenough psenough
I just remembered, that old tune is on ModArchive now:
fuckings to all "fuckings to titan" shouters! this stuff is epic <3
added on the 2012-08-25 09:38:34 by xTr1m xTr1m
Nice story. For such stories we have diskmags.
added on the 2012-08-25 10:39:00 by Adok Adok
\o/ thanks for the nice comments dudes :) @adok diskmags sure have their place in the scene, and really thanks for your effort there! *appreciates* In our case we thought about where felt right to publish this write up, and well pouet felt best, so I did :)
added on the 2012-08-25 10:54:03 by alk alk
Yeah, I also think pouet could be used as a platform for publishing articles. But the problem with pouet is that everybody can post there and so interesting articles will be less visible among all the masses of less interesting postings.
added on the 2012-08-25 12:45:52 by Adok Adok
titan sucks!
added on the 2012-08-25 13:11:14 by wysiwtf wysiwtf
Nice writeup, I know the difficulties of getting releases done in time :-)

Btw, what about adding a link back from the release to this article? I've added a request for that, I let the admins decide what to do with it :D
added on the 2012-08-25 13:40:23 by Kabuto Kabuto
BB Image
added on the 2012-08-25 14:49:15 by すすれ すすれ
leave it up to Adok to ruin yet another thread with hugi spam. Such discussions belong to a different thread.
added on the 2012-08-25 15:23:57 by xTr1m xTr1m
Nothing ruined xTr1m :) Even Maali's fuckings are sweetish <3<3<3
added on the 2012-08-25 15:29:29 by alk alk
alk: you know i love you and that im just joking with the pic ;)