TRAUMA Beta is out

It is done. The beta is out. I have sent out a batch of invitations to various people. If I promised you a beta invite and haven’t send you anything yet, please contact me!

Sadly, the beta is not public. So I can’t post any public links just yet. The good news is that I will accept some random beta requests for now. Just contact me and I will see if I can get you in. Should I not respond, please don’t feel sad. I might get too many requests from this post after all. You could help your chances if you tell me up-front if you use a PC or a Mac.

Please don’t spread this on news websites just yet. If you want to help me getting the word out, there will be plenty of opportunities later.

In other news, I was able to fix some very last old glitches. I tried tweaking the gesture recognition but didn’t do anything drastic. Most of my attempts caused unreliable recognition of some of the gestures. I will never be able to prevent people from finding out gestures by brute force anyway. So I decided to concentrate on having the game work well for those who genuinely try.

I’m eager to hear the feedback. I’m bracing for a flood of bugs and content criticism. Mmmhm, I love the smell of criticism in the morning.

Monster Hunter Podcast Episode 19

On this episode of the Monster Hunter Podcast: Christmas Freedom Unite. As a Christmas surpise we deicded to record a play session with the three of us on Monster Hunter Freedom Unite. This is the video version of this episode. The video starts 10 minutes in.

Get the mp3 of the episode here.
Get the iPod mp4 of the episode here.
Get the PSP mp4 of the episode here.
The RSS Feed is here.
Get us in iTunes here.

The Tumblr Blog here.

Enjoy!

TRAUMA – Heisenberg Boss Bug

It seems like this project has a life of it’s own. It stubbornly refuses to get finished. It resists with all it’s might. And it delivered an overwhelming last blow today.

I started work on the image loading system. The system I was about to replace was one of the oldest bits of code in the project. I realized I was about to take out a vital organ out of my program and replace it with a new one. The problem with that organ is that it is attached to a lot of other organs. Some attachments aren’t even obvious or logical. So by removing it, I could accidentally rip out all of the guts in the process.

And this is exactly what happened.

After a hefty rewrite the program wouldn’t load things correctly anymore. If I did manage to load a level, some of the images didn’t display properly. It would throw all sorts of errors at me. But the worst thing happened when I went into Debug Mode to figure out what the errors mean. A very nasty bug appeared. A bug I have never seen before. One that couldn’t be localized and one that only appeared in Debug Mode. Even laboriously stepping through the code line by line didn’t help. The bug wouldn’t appear if I did that. A Heisenberg Bug if you want.

I did what every reasonable person would do in such case. I panicked and flipped out. After destroying two pens and a pair of headphones I stared trying things randomly. I thought about restoring an older version of the sourcecode but that seemed futile on a second thought. I would need to re-do a lot of work. I didn’t even have a clue what the old code would be missing. With my spirit shattered I desperately continued trying out random things. I found and fixed some other nasty bugs but they didn’t seem to be the problem. After a while I discovered I was able to make some assumptions about the Heisenberg Bug after all. It seemed to have something to do with the video loading system, not with the new image loading system. And sure enough, that horrible video API was the problem yet AGAIN.

I don’t want to go too much into details. Basically, some information of the video arrived much later than expected, didn’t arrive at all or arrived too many times. It also arrived in a very complicated, unusual manner. I had a system in place meant to deal with the case where the same information would arrive too many times. Because of the complicated API, it created an error within the API, not my own code. The problem was tripped due to a very minor change I did some time during my work on the image loader. I decided to just completely ignore that information and to implement workarounds so the game doesn’t need it. The result was profound. All the bug were gone at once and the levels even load much more quickly now.

It truly felt like the final boss of the entire project. I’m mentally and emotionally exhausted but as of now, Trauma working off my web server. It flawlessly loads all files from it on Mac and PC. The loading times are well within my expectations too.

I will do some tweaks, set up a bare-bone beta website over Christmas and begin sending out beta invitations this Weekend. Stay tuned!

TRAUMA – Are We There Yet?

Short update on the beta crunch. I think I have the video loading system down. It needs to be quite robust if you consider that the game has 80MB of videos. At this point it’s loading videos just fine. It even has it’s own progress bar in case a cut-scene can’t be delivered in time.

I spend a long time today dealing with a particularly annoying bug. Again, this is because of the unnecessarily complex video system in Flash. You see, the video contains mostly the actual video data but also at some point during the load, it also loads so-called meta-data. That contains useful information such as the length or the size of the video. The weird thing is that especially in videos, which are already in cache or loaded directly from the drive, the meta-data seems to arrive AFTER the actual video. This is something I have discovered just today and I had to rewrite some of the code to take this into account.

This was already weird. But then some videos would trigger a bizarre effect where the meta-data would be delivered over and over again. It would cause all sorts of troubles, eventually even slowing down the game. Again, this is yet again some really silly bug caused by the complexity of the API and I’m quite upset that I lost so much time because of it.

But on the bright side, I got it under control and I’m moving on to the last part of this loading system now – the images. I would say that the hardest part is over but I had way too many setbacks now to say something silly like that. Wish me luck.

TRAUMA – Entangled in API

Sometimes I want to strangle the people, who made the Flash API. I’m imagining a long conveyor belt with all the Adobe employees on it waiting for their turn to receive their deserved treatment. Loading sounds and images is relatively easy and carefree. Here, let me prove it. Here is what you need to write in order to load an image.

var myLoader:Loader = new Loader();
myLoader.load( new URLRequest("lolcat.jpg") )

Cool. Just two lines. One where we create object that loads our stuff, the second to tell the object to actually load the stuff. It works this was for images, sound files and even entire flash movies. Of course there is a lot more code you need to add in order to keep track of how the loading is progressing but the core idea is simple and easy.

But then for no apparent reason the Flash API throws you a curve-ball and decides to make things different for flash video. Loading a Flash video requires this kind of code:

connection = new NetConnection();
connection.connect(null);
stream = new NetStream(connection);
var customClient:Object = new Object();
customClient["onCuePoint"] = cuePointHandler;
customClient["onMetaData"] = metaDataHandler;
stream.client = customClient;
var video:Video = new Video();
video.attachNetStream(stream);
 stream.play(videoURL);

I’m not kidding. You actually need to create 4 different objects just to play 1 video. And then it doesn’t actually even really load it. Instead it “plays” it. You see, the entire setup is made to be also compatible with video streams. So the video is not actually being loaded but “streamed” from the file. This is a cool feature but TOTALLY not what I need most of the time. Most of the time, I just want to load a video completely into memory so I can be sure it will play without stopping when requested. The API doesn’t deliver even the most basic tools for doing that like giving a simple, distinct signal that the video is completely loaded for example. And if that’s not annoying enough, just wait for all the exotic errors and the cryptic documentation this API has in store for you. Want a taste? This is taken verbatim from the Flash Help:

asyncError - Dispatched when an exception is thrown asynchronously - that is, from native asynchronous code.

Meaningless tautology is meaningless. Thanks Mr. Programmer Nerd who wrote this crap. I guess the deadline for the documentation was looming and you just didn’t have the time not to pull out something out your ass, huh?

So as you probably picked up by now, I’m in there and fighting. I didn’t quite manage to finish the video loading system today, which is a major downturn for me. After a lot of struggle, I got it running but it’s not yet fully integrated and it’s missing some less vital features. I postponed the cleanup for tomorrow.

I guess I could have made it all today but my girlfriend came back from a weekend trip and because I think she is awesome I decided to spend some quality time with her. We went to see Tangled together.

Take note, games industry: this how you crunch Indie-style.

Day9 Flip

Taking it DOWN!

P.S.: I was blown away by the visuals and animation quality of Tangled. It’s such a cute and well-made movie. And balls-out-cheesy, too. You know, the best kind of cheese.

TRAUMA – Beta Crunch Continues

Quick update on how TRAUMA is coming along. It now loads sounds.

Ok, it kinda was loading sounds before but now it also keeps track of them. Warning! Technical explanation: As you might remember, the game really just loads 4 different kinds of files: XMLs, images, sounds and videos. I already had taken care of XMLs. Today I took care of sounds. As always, each step has it’s own unique challenges. In case of sounds, it was the fact that they are loaded at 3 different places. Each of the 3 places wasn’t even remotely keeping track of them. So I basically wrote the same feature 3 times today.

Flash is really deceptive especially when it comes to sound. It treats each sound file as a stream. So especially when the sound files are stored locally, you can just haphazardly load and play sounds without keeping track of the loading progress whatsoever. Even if the file is only partially loaded, it will start playing just fine. This encourages a very sloppy approach to sound data management which comes back to haunt me now, when I’m moving things to the Web. TRAUMA has 18MB of sound data. It is entirely plausible that some files may simply not load in time, especially when there is other data coming in at the same time.

And of course things get complicated when there are 3 different places where sounds are being loaded. There are what I call “System Sounds” which are general sound effects associated with the interface. Those need to be loaded even before the main menu shows up. But I didn’t want to include them in the game file in order to be able to easily swap out sounds with different quality for different versions. Next, there is background music. It is level-specific and really only needs to load when a certain level requires it. After all, this makes up almost half of the entire sound data in volume. Finally, there are the voice-overs. Again, those are level-specific. Surprisingly, they are only 5MB in total but there are 80 different files. If only one of them fails, the program needs to react accordingly.

As always, it took more time than I thought. But building on the previous work I had already done I was able to implement solid solutions for all 3 cases. As an added benefit, the loading is much more smoother now as the game doesn’t try to load ALL sound files at once anymore. The game loads all the sound files from the web now and the loading time is not noticeable so far. Tomorrow I will be moving to the images and the video files. Not quite sure yet which ones I do first but I’ll let you know soon enough. ;)

TRAUMA – Go Go Beta Crunch

The last week was a bit crazy. But now I have the rest of the year free to work 100% on TRAUMA. Except for that Christmas things everybody seems to make such a fuzz about.

I’m powering trough. Today, I was finally able to check the subtitles I have gathered. They look great and I have implemented them all. The game now has subtitles in 3 languages: English, German and Polish. I wrote the English and German ones and my Girlfriend checked them for spelling. My mum helped me out with the Polish ones (yes, I’m THAT Indie) as my Polish is a bit rusty. I added some corrections where I things got lost in translation. Reading the script in Polish kinda hit me emotionally. Maybe it’s because I’m so used to reading it in German and English. On the other hand, I have this theory that your first language has deeper emotional attachment. For example, I like to think that it’s easier to lie in a foreign language.

But that’s not all. I also implemented a cute error message box:

Error Box

If things go well you will never ever see this

The error box is the other end of my new loader handling system. It’s good to tie the first loose ends together. I can’t wait to make it report all the other wonderful errors. But more on that tomorrow.

Technically what I’m doing right now is not a ‘Crunch’ but you can expect daily updates on the state of the game from now until beta.

Monster Hunter Podcast Episode 18

monster hunter podcast

On this episode of the Monster Hunter Podcast: Legal and on the Internet. We turn 18 and spend the entire show discussing Monster Hunter Portable 3rd, Monster Hunter Freedom Unite and all sorts of other topics.

Get the Episode here.
The RSS Feed is here.
Get us in iTunes here.

The Tumblr Blog here.

Enjoy!

Humble Indie Bundle 2

No real updates from me as the last 3 days, I have been working 12 hours a day or more. More on that later. Until then, here is some important Indie News: The Humble Indie Bundle 2 is out!

You might remember the original Humble Indie Bundle on from earlier this year. If you missed it – it’s back. The selection of games is smaller. But it’s still very good, it’s as cheap as you want it and it’s for charity. There is hardly anything you can do wrong with it, even if you have some of the games in it. Do it!

Global Game Jam 2011

If you live in or anywhere remotely near Cologne and you are at least vaguely interested in game development and design, I strongly encourage you to join me/us in the next Global Game Jam!

Global Game Jam 2011

BOOM BABY!

Like last year, the Cologne Game Lab will host a big Global Gam Jam event. We will provide workspace, Wi-Fi, energy drinks, rest areas and distractions. And it’s all for free!!

This time I decided to not only help hosting the event but also to participate. I never did one of those 48 hour challenges and it will be a welcome break from huge projects like TRAUMA. I’m completely dedicated to actually finish my game too!

The Jam will start in the evening of the 28th January and will last for exactly 48 hours. You can register here. Join us. It will be awesome.

About

The Game Design Scrapbook is a second blog of group of three game designers from Germany. On our first blog, Game Design Reviews we describe some games we played and point out various interesting details. Unfortunately, we found out that we also need some place to collect quick and dirty ideas that pop into our minds. Hence, welcome to Game Design Scrapbook. You will encounter wild, random rantings. Many of then incoherent. Some of them maybe even in German. If you don't like it, you might enjoy Game Design Reviews more.

Twitter

follow Krystian on Twitter
follow Yu-Chung on Twitter
follow Daniel on Twitter