Top  Previous  Next

The AckCon 2014 Team is the proud winner of the latest AUM contest, and they have kindly agreed to share some of their wisdom with us.


Q: Please tell us a few words about Ackmania (Operation Deadnex). How would you describe the game?

A: As we do it every year, we tried to make up an imaginary, funny game about JCL and his fellows over the weekend. Or, as some might say, we tried to explore the psyche of JCL, recontextualizing the paradigms of an engine developer. Remember Prince of Lotteria? You know what I mean.


We were sure that we could not deliver much more than this extraordinary piece of gaming history due to lack of time, but it went surprisingly well, thanks to SVN, talented graphics artists and a strong will to make again an outstanding game.


This time we wanted to celebrate the dying of the engine (hence the codename "Deadnex"). But, suddenly out of nothing, it turned out to be an isometric fun racer! Like Mario Kart!! With four levels, many items and weapons and four AI enemies! Maybe the most streamlined game we ever made.



Q: Who are the team members and what are their roles?

A: The AckCon 2014 team consists of eleven members.


Marius Kappes (mk.1) and Michael Schwarz (Michael_Schwarz) produced the credits song and additional JCL voice overs. While Marius was recording the music, Michael took the part of the lead singer and he also did some level design (desert and ice level). CocaCola, a newbie to Gamestudio, gladly supported him.


Simon Trümpler has absolutely no background with Gamestudio, but he heard from Marius that there is an extraordinary game jam taking place each year in Bielefeld, where all the crazy ones come together. Simon was our lead graphics artist and did a really amazing job. He's a pro, he works at Egosoft as 3D artist on X:Rebirth and worked beforehand on Sacred 2 - so cool! He developed the art style of the game, created the karts and the drivers and produced two tracks (AckPlains and the bridge level).


Robert Jäger (Firoball) was responsible for the camera code, the HUD and the minimap programming.


Patrick Jendral (jenGS) and Jonas Freiknecht (PadMalcolm) worked on the items, whereas Patrick did the modeling and Jonas the coding. Patrick also filmed the event with his camera and works on a documentary.


Felix Pohl (Superku) wrote the kart driving mechanics, the lap counting and the AI enemy behaviour. He did an amazing job!


Felix Queißner (MasterQ32) coded the main menu and produced together with Andreas Schmidt (Lemming) the credits sequence.


I (HeelX) organized the team and took the programming lead. I took the bits and pieces of everyone and put them together, added some tiny things and prepared the game for the release(s).



Q: What are the most complex parts of the code when you are developing a game like AOD? Why?


The sky code is actually an example of superior engineering! No, really, the lap detection, AI and position calculation. All is based on paths, which is pretty amazing. We all think that Felix Pohl had the most challenging code part with kart movement, driver ranking and lap detection. He wrote the entire movement code as well as the AI. It is so incredible since the AI drivers just follow paths and go various ways around the map. Realizing that in two days is absolutely professional.



Q: What went wrong with the game and how did you fix it?


Although the decision to use only 2D player movement was simplifying many things, it also introduced some problems. For example, we were forced to put a lot of visible and invisible rails into the levels to prevent the player from entering actual 3D terrain. Since that would have bugged out our entire movement system, we had to do this manually.


For Jonas, the most annoying thing was that his rockets exploded randomly when hitting the track. He overengineered the code from the start, using as litte c_trace and c_move calls as possible. As it turned out, this was actually not a good idea. So, he put back the calls and everything worked as expected, even with 3D terrain.


Another great issue made Robert introduce a mysterious hack. In fact, - and that is true - he had to add a "wait(0);" call to fix some odd behaviour when switching view visibilities. For unknown reasons this was not necessary anymore for the contest version and we are frightened that we still do not know why we had it to use before. Scary. I guess this will become one of our favorite Gamestudio tales of all time. At least for Firo ;)


The last oddity we encountered was about the driving sounds: Originally, I brought in a small trick from previous projects of how to deal with engine sounds. Because it sounds simply "wrong" to re-start the engine loop sound over and over again (e.g., when you stand still and start driving), it sounds better, if you play the sound as a loop and make it mute at the beginning. Then, you smoothly tune the sound's frequency and volume depending on your speed or acceleration - which makes it sound more natural. The problem was, that I forgot to release the sounds and that they kept playing even after level change (I used snd_loop rather than ent_playloop). So, before releasing the contest version, Robert noticed that after some time the sounds became broken - and after checking the code, he found out that my engine sounds were created over and over again. This way, we reached the maximum number of simultaneously playing sounds very fast - which leaded very soon to an engine crash.



Q: Please tell us something funny / interesting about the credit sequence.


Before AckCon took place, we did a lot of brainstorming beforehand. Out of this, Michael wrote three anime intro songs beforehand that we could have chosen from depending on the theme of the game - but as soon as we decided to make a fun racer he had to throw everything away. So, the credits song was written, composed and recorded from scratch during the weekend. He also had a horrible time keeping up with the beat and tempo of Pharell's "Happy" and - as all of us can attest to - he had to re-record and re-re-record the same lines over and over and over again ... he still apologizes today to Marius for him being a saint as he was so patient with Michael.


From a code point of view, the credit scene kept reporting a script crash without any impact on anything. It turned out that you should not use ent_animate() on non animated entities. However, the animation sequence in which the Lottis are headbanging is in fact a puke animation I did for Infinite Lottery Adventure 2 (AckCon 2011).



Q: What are some of the best game development tools that you are using on a regular basis?


Since the answer to this question is very subjective, I let some of the members speak by themselves:


Michael: Wings3D specifically for game development. It may not be very good for organic modeling, but it is a great tool for everything else. Very intuitive! Outside of game development I just love Visual Studio, I could not live without that program.


Robert: I code in different IDE's. Besides that I started using Blender and have always used an old Photoshop release. But for sure I cannot live without Total Commander anymore.


Jonas: For a few weeks I am using the FBX SDK to generate models by code that vary on several parameters. Although it is only a simple SDK you can achieve great looking results with only a few lines of code.


Christian: I switched to Eclipse as programming IDE for Gamestudio and started my own programming framework for Gamestudio (I call it Avalanche). For modeling I use Cinema 4D R13 Broadcast and for all other graphics tasks Corel X5. For procedural texture generation I recommend Filter Forge 2 and for normal maps PixPlant2. For sound related stuff I rely on Audacity and Magix Music Maker 2013. I write a lot of tools by myself using Java 7.



Q: Since (obviously) you’ve gotten a talented team, have you considered the idea of starting to implement some of your ideas commercially?


We are quite confident that we can do amazing stuff as a team in a short time span. However, when we meet, it has not much in common with professional game development at all.


Last year we were a bit unsatisfied with our game (Prince of Lotteria), because we did not finished it as we wanted to. So, we decided to keep on developing afterwards with the goal to make it complete to enter last year's AUM contest. It went not so well, from the original team only a few remained that had enough discipline and power to make it through 'til the end.


This experience clearly showed that such an endeavour requires a huge commitment from everybody. Throw in personal life and regular work and this becomes soon a big issue, if you want to develop a game in your free time. And as soon as money comes in, no matter if we talk about investments or sharing profit, the whole situation changes - and the spirit that drives our free, unconditional and crazy kind of development... vanishes.


Some of us indeed have some serious ideas. Some of use even have projects in the pipeline that eventually go commercial some day, but we will see, what the future brings.



Q: Could each one of you share a tip for the beginners to game development?


Michael: The manual is your best friend. Google too! 99% of all problems and questions you have can be answered by applying common sense to a search box. Don't be afraid to use it, you won't break anything. In the long run you will have to learn to be self-sufficient in terms of finding solutions to your problems, so try not to rely on other people giving you a helping hand. Of course there is nothing wrong with asking, but before you do, try to solve it on your own. Then show what you tried to do when you ask the question, so others can tell you where your thinking took a wrong turn and they can help you understand why.


Robert: Kitchen lesson: clean up after yourself. When you dynamically load and create stuff on level change, make sure to remove it again after loading another level, or you will run into hard to nail down memory leaks and other problems once you load this level again. We ran into this problem in both "Prince of Lotteria" and "Ackmania". And: If your script doesn't seem to work, try putting a wait(1) somewhere.


Michael in response: That's the ultimate fix. Don't use it lightly! With big wait(1) comes big wait(-1)!


Jonas: Buy a good book about game programming  No seriously, my first step is to figure out where to get help. In Gamestudio it is clearly the manual first, then the community. In Unreal Engine 4 it would be the video tutorial section on youtube. In any kind of C++ development it would be to ask JustSid  So the ways differ from engine to engine. Find out who can help you before beginning to write code!


Christian: Do not develop in a never-ending fashion, work with self-contained and completed development cycles. For each cycle, take a single sheet of paper and write down all stuff with short sentences in simple english, that you want to have in the next development iteration. Give the sheet a number and a cool codename. Estimate how much days it will take, tripple it and write it down. Each time you finished a feature, strike it through with the date of accomplishment. Celebrate, when you finished the cycle. Scale up the next time schedule with the factor you overrun your last cycle. Take a week afterwards to throw things away that didn't worked out and do not hesitate to re-design and re-code things for the sake of polish. Repeat.