Monday, 15 January 2018

After-Action Review: An Overview of the Making of LuftrauserZ

After releasing LuftrauserZ last month, a few people asked for a post-mortem on how Paul Koller created his opus, the demake that many thought was improbable -if not impossible- to achieve on the modest 8-bit breadbin. A brief making of both Luftrausers and LuftrauserZ is included within the game manual, but with a limited page count a great deal of info was missed. So, to rectify this and fill in the blanks, Paul has helpfully written the following blog post on the creation of LuftrauserZ.

Of course, it would be foolish of me not to remind you that the game is (currently) available to buy again on cartridge and as a download. The cartridges don't tend to stay in stock for long though!

Shortly after having finished Micro Hexagon in 2013, I wanted to try my hands on implementing a high-speed full-screen all-directional scrolling engine on the C64. I quickly had an engine running which supported up to 8 pixels/frame. Only after finishing the engine did I begin to look for a suitable game to use the engine in. At that time (early 2014) I knew of the imminent release of the high-speed arcade-shooter Luftrausers by Vlambeer. Having previously ported Super Crate Box to the C64, I knew their games have designs that would also work quite well on more limited hardware.

So even before the original release of Luftrausers, I decided to try and port the game to the humble C64. I knew that I wanted to have the game running as smooth as possible, so that means running at 50 fps (in PAL land :)). To have sufficient time for the general game logic, while also supporting high-speed scrolling, I knew I had to compromise somewhere. The nice thing with Luftrausers is that it was designed around a limited colour palette, while also the in-game background graphics are based on silhouettes. The C64 supports a so-called Enhanced Background Mode (EBM) that supports 4 different background colours at the cost of only supporting 64 different background characters. I knew that this graphics mode would be ideal for this game, since it removes the need to scroll the colour-RAM! However, with this EBM mode, it took some imagination to fit all different background graphics into only 64 different 8x8 pixel definitions! I think I succeeded quite well in the end...

Since the screen resolution of the c64 is much lower than the original game, I first tried to scale down all the graphics, such that the game gives you a similar field of view. However, I quickly realised that I would not be able to get all the different player sprite configurations nicely into the game in this way. And maybe even more important, with a more zoomed-out image it would be more difficult to get a high enough density of enemy planes on screen to give the player enough to worry about. In the end I chose to keep the same detail as the original and thus give a more zoomed-in view. Since there are no real obstacles in the game, this more zoomed-in view does not impact gameplay that much...

The c64 only supports 8 sprites on screen at the same time. I knew this would not be enough for the player, enemies, bullets, as well as the score indicator. In principle this 8 sprite limit can be overcome by using a sprite multiplexor, however I knew it would not be ideal for this game, since one can only have 8 sprites on a horizontal line. Also, I wanted to support lots of bullets as well. In the end I decided to go for character based bullets, and only multiplex the player and score sprites. Since bullets travel quite fast, it would not be that noticeable that they only move in steps of 8 pixels. It does mean that even less characters would be available for the ingame graphics! The c64 also supports expanding a sprite image through hardware. This meant that the big aces could be implemented as expanded fighter images, removing the need for additional sprite graphics!

The different weapon systems were relatively easy to implement. Only the laserbeam caused me some headaches. I knew it would be impossible to have a large solid beam on screen together with all the other graphics. In the end, the best compromise I came up with was a shorter, but fast moving laser beam.

Another crucial graphics element that would be difficult to port over was the damage indicator. In the original game a large circle is drawn around your plane, whose radius indicates the amount of health you have left. I tried different approaches here, but all of them were not large enough for you to notice in the thick of the action. Showing the remaining health as border color worked quite well, since it does not need special attention to notice while in the thick of the action!

The original game is also known for its dynamic soundtrack, which changes depending on the plane configuration that you selected. I wanted to include something similar in my c64 port. However, having 125 different soundtracks would be a bit too much. In the end we decided to go for the 5 variations that are featured on the Kozilek OST (BandCamp link). Stein Pedersen succeeded incredibly well in porting these to three-voice SID-tracks. By linking these to the 5 different weapon systems, some nice variation in the soundtrack has been realised!

Although I wanted to have as much of the original game in there as possible, some things had to go because of technical reasons. The obvious one is that the amount of enemy planes and bullets on screen at the same time had to be reduced. I tried to have the enemy submarines in the game, but I couldn't have them rising out of the water together with the fast scrolling. In the end I decided to remove them completely. Also the laser aces were not possible due to needing additional sprites for the laser beams. Still, the most important enemies, including the blimp, did make it into the game!

During coding of the game I quickly realised that having all the different player sprites in RAM would not be possible. Even with building the player sprites from 3x5 different parts, and only having the 90deg rotation images stored, I needed additional memory to store them all! Having worked with RGCD in the past, I decided that my Luftrausers port would also be exclusive the cartridge format. This enabled me to quickly copy the required player sprite images over from ROM, without interfering with the game flow!

Around the same time Individual Computers were developing a low-cost cartridge that would enable saving to an eeprom chip. Since Luftrausers is based on continuously unlocking new parts, we needed some way to save your progress. In the end we decided to use this new cartridge format, enabling people to enjoy the game without the need for additional tape or disk storage systems. However, at that time no generic flash-software existed to burn the ROM images themselves, so this also needed to be written.

During the development there were quite some ups and downs motivation wise. After having written the bulk of the engine, you realise all the less fun parts that still need to be coded before having a finished game. Because of this, the development of the port took more than 3 years to finish! However, by showcasing the game at several events (including GamesCom in 2016), enough motivation came back to put the finishing touches to the game.

At the beginning of 2017 my c64 port of Luftrausers (titled LuftrauserZ to distinguish itself from the original game) was essentially finished. However, commisioning of the package design, as well as personal issues, lead to multiple significant delays. In the end it took until the beginning of December till we could release the game, just in time to ship for Christmas. James decided to release the game in batches of about 30-40 copies to keep it all manageable and avoid delays in shipping. However, this did lead to the fact that many people only heard about the release after the carts were already sold out! In the end it only took a few weeks to reach 100 sales, making it quite a successful launch (122-and-counting at the time of writing). The response from the community was overwhelming. In the end we scored 4th in the Reset magazine C64 2017 GOTY award. Which is very good if you see what other amazing C64 games came out that year!

In the meantime I'm already working hard on a new C64 game. Follow me on twitter if you want to keep up with the latest news!

(Paul Koller, 15/01/17)