The Final Solution – Postmortem

This article was originally posted on Ludum Dare Compo site about my entry for LD#14 with the theme “Advancing Wall of Doom”. If you did not play my game “The Final Solution”, you can get its win32 binaries and source code from my previous post.

This is my first LD.

I recently attended Global Game Jam [1], which was another 48-hour game competition held in 53 places around the world. We were 48 developers in Ankara divided into 13 teams/individuals, working like bees in our cubicles. My two friends joined separate groups and I started to make a game myself.

Having people around to test your game really changes the development process, as in the case of Itchy! in GGJ [2]. However, as LD is a solo competition, and I wanted to allocate my full attention to it, I did not see anyone during LD, and did not go outside except for getting food.

To mention a few lessons learned in LD;

  1. A designer’s perspective conflicts with a programmer’s perspective. If you focus predominantly on subjective game experience (which I did), you acquire a less objective mode of thought that prevents you from rigorously perfecting your code. Thus, you’ll either make elegant classes/interfaces and end up with a regular game, or you can tweak and play with the game elements until it becomes something unique and consistent, and end up with a spaghetti of enums and ifs.
  2. You should keep a journal to keep track of your development, and be open to comments to keep your development on track; especially if you are alone (like me).
  3. Tools and tech can be reused, generators are okay, but the content is part of the art. So you must use original content (and sound, as I had to).

In the beginning was void

I woke up a few hours after the theme was announced. I tried to think of ideas. I joined #ludumdare, briefly looked at the blog posts of the first hours, and I was surprised to see how early people started prototyping and sending screenshots. One of the first posts by Comtemno was about magma [3], which reminded me of this fluid dynamics code [4] I wanted to use in a game.

At first, there was just a piece of smoke that grew and filled the screen. I painted it red, and it reminded me the flood of blood filling the hallway in The Shining [5]. I put new tiles to form a container, and modified the fluid simulation to make the blood fill it and pour out of it, adding gravity. This required me to modify the simulation so that the walls bounded the fluid. I had no idea of the gameplay, but this seemed to be a good direction for the theme. However, the code did not simulate a liquid but a gas, so I had to find a compatible scenario.

Gas, walls and agents

Gas and “wall of doom” reminded me of gas chambers. So, the container became the topdown view of a corridor instead, and the gas diffused from one direction to the other through the corridor. There was also people inside, and they had a basic AI that allows them to flee from the gas if they smell it, i.e. the gas density gets over a critical threshold. It took me some time to implement the agent behaviour and collision detection. Agents approximate the gas density gradient from a few grid cells around them, and then flee in the inverse direction. Agent positions are floating point coordinates, but walls and gas densities are based on an underlying grid, so is the collision detection, and that’s why the collisions seem a bit wrong.

As I was programming the agents, the game felt like going out of control. I had no idea where would the player fit in this picture. I was playing with the gas by adding/removing walls, so I thought this could be what gameplay is about. The player would be changing the wall structure to kill some agents and rescue others. I even added a sink object that could be put to suck the gas. At this point, I released the prototype and asked for ideas from friends and LD community.

You can escape the gas, but not its connotations

Then, I saw ManTis’ comment in favor of the “political incorrectness” the game acquired, and also one of my friends wondered if we would be “playing Hitler trying to build the most efficient gas chamber?” Eventhough making a simulation of genocide did not really pass my mind, my prototype had evolved into one before my eyes (I’m serious. Well, I know about Hitler and fascism from movies, but it’s not like being taught about it in history lessons). The holocaust connotation was so strong that it required no explaining. In fact, there was only a poisonous gas and some living beings escaping it. It could as well be fish escaping pollution, vampires escaping light, fairies escaping a dark cloud, etc. Whether it was the poverty of my imagination, the strength of the connotation (see Godwin’s law [6]), or the non-existing artwork to suggest an alternative interpretation; I was actually facing the necessity to finish and submit a game that eventually presented itself as the simulation of genocide.

The big decision was putting the player in the shoes of a regular agent, i.e. a prisoner escaping the gas. This introduced a huge emotional load to deal with, so I needed a soundtrack to capture the atmosphere. There was an ambient audio file I previously saw on freesound.org when we were looking for a background sound for Itchy [7]. I did not know original sounds were required, so I picked this sound for the game, and put it on VLC player in loop mode until I finished the game. I like these kinds of atmospheres, like in Dungeon Keeper or Thief. I wish someone had made an ambient sound generator that I could play with (though I’m not sure to what degree generated sounds can be considered original). I know some pd, and I’ll be playing with supercollider, so I may come up with a generator some time.

Seeking meaning in despair

Anyway, there was this little problem about the game: What meaningful aim could a holocaust victim possibly have? Rescuing other people would clearly be an unrealistic fantasy. Achieving some kind of score would be ridiculous… So, it could not be an aim of collecting or winning, but only of simple exploration. This reminded me Mirror Stage [8], where you lit up places by walking around and touching boxes to complete a level. I decided to adopt this as touching people, other prisoners. The idea was the player having the courage to get close and see people just before they died. In the beginning, other prisoners were colored identical to the walls, so they were the part of the prison around you until you got close to them and each of them lit up, as a person like you. The color metaphor triggered other ideas, like randomly generating a particular color and name [9] for the player, which was elaborated further while writing the story.

The game obviously required no explanation for the context and the gas, but the little colored boxes needed some meaning to relate to. I chose a font from GLUT’s functions, and began writing sentences on a black background. I changed the level#.txt files to include an explanation for the level and two ending messages in addition to the map. About my decision on narration, my example was Judith [10], in which all the story was told in first person, the gameplay did not involve a challenge other than exploration and collecting pieces of the story, yet managed well to put the player in the shoes of the character(s).

A rejoice in death

In this framework, I now needed an actual storyline that spanned a few levels, was compatible with the social-historical facts and meaningful enough for the player to pursue. I wandered in pages about the gas chambers in Auschwitz, looked at pictures taken in former chambers [11], searching for something that I can represent in my game. The best I could find was a report about prisoners’ lives in Auschwitz by Witold Pilecki [12], the only person known to go there as a volunteer. He organized prisoners to improve their life. Anyway, it’s a long story. Here is a passage from that report that felt like the key to make a meaningful game [13]:

“Many prisoners, while going to the gas in a car, cried to his friend recognized in the row: ‘Hello Johnny, hold out!’ He waved his cap, he waved his hand, he was going in cheerful spirit.

All in the camp knew where they were going to. So, why did he rejoice? It can be supposed, he was so fed up with what he had seen and suffered, that he did not expect to see anything worse after his death.”

Thus, the title, “Final Solution” primarily refers to Endlösung [14], but it has a secondary reference to the death as a final relief for the prisoner.

The variations in story

When you start the game, four things are generated for the character: A color, a name, a number, a daily activity (“..when they got me”), and a close relation to the person that is being looked for (mother, daughter etc.). Other than these, the story is identical. What the game switches is only who the story belongs to, not the story itself. I avoided major variations, because the story was already about the fading of these particularities of the subjects in their shared fate.

As the game evolved into what it came to be, I played it many many times in all its stages of development. To me as its developer, the game gave a weird feeling that it lived in a separate reality, condemned to an endless repetition. It went on and on, like the ambient sound in the background, each time about the similar fate of a different person. The game stubbornly held these made-up stories against me, as if it acquired an attitude of its own. Every time, the story began like this with a new name:

Story of Peter
-I was reading the paper
when they got me.
It was not unexpected,
but still a surprise.
They brought me here,
to this building.
Shown this door,
where can I go?

And after each time it started, it demanded the player to direct the character’s actions to what must happen.

Character as mind, player as body

I believe that, in the game, there is a divide between the player who determines the actions of the character’s body, and the character’s mind facing and interpreting the consequences of these actions. This divide is emphasized by the duality between story and action. The player either controls the character, or follows the story through his/her mind. This looks like the common conflict of immersion: What does the player want? A character to relate, or an avatar to embody? I think you don’t have to solve this conflict, you can directly incorporate it to enhance immersion. After all, there are times when we feel a divide between our mind and body. Especially in the extreme circumstances of a unpreventable fatal threat, we can imagine a body that cannot help but feel a useless anxiety about being there, and a mind that frees itself from self-worries. In the game, despite the obviously desperate conditions, the character (as the mind) rarely uses negative words and never mentions the gas directly. This avoidance inversely effects the player (as the body), forcing her to undertake the anxiety that is missing from the character’s mind.

To conclude

I owe to everyone that played my game, found it interesting, dramatic, depressing, not-fun, or any other adjective that bears a strong meaning, as it was what I sought to achieve.

fidaner

~~ References ~~

  1. Global Game Jam
  2. Itchy! The adventures of a bug fleeing the very creature it is walking on!
  3. Comtemn’s post
  4. I used Jos Stam’s fluid simulation code
  5. The Shining by Stanley Kubrick
  6. Godwin’s Law @ Wikipedia
  7. archi_soundscape_cavern2.wav by Argitoth
  8. Mirror Stage by increpare
  9. I used name list for 2009 in this page
  10. Judith by increpare & Terry
  11. Auschwitz Scrapbook on Gas Chamber
  12. Witold Pilecki @ Wikipedia
  13. Witold Pilecki’s Auschwitz report
  14. Final Solution (Endlösung) @ Wikipedia
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s