Friday, 2 May 2014

My games - Ground control to major Tomashevsky (Ludum Dare 29)

This last weekend (days 25-27th April) saw the 29th iteration of the Ludum Dare 48h game development competition. And it was the third time I took part in Ludum Dare. The first time, I didn't finish my game on time, a game I have yet to speak about here, and so the only thing left from that distant event in 2012 is this warmup game (the week before a Ludum Dare event is the "warmup week" where people create games to test their tools and abilities). The second time I was rather disappointed by my dull submission that can barely be called a "game". At least I had some fun trolling with other people's entries. This time, however, I finally achieved success in both submitting a game and being satisfied with what I had developed.

I recently left my favored combination of C++ and Allegro to focus on HTML5 and Javascript, as I have been thinking and I realized I might be more productive developing games with Javascript's paradigms. Using entity systems based on classes, inheritance and polymorphism in C++ isn't as productive as coding them with the more liberal Javascript syntax. The weekend before I had made my warmup game where I tested those new tools, finding them to be most appreciable. I also compiled a small, that yet turned to be very useful, codebase.

But let's talk about my submission.

The theme, and my interpretation of it

The chosen theme this LD was "Beneath the surface". This was a good thing, as everyone was expecting "Break the rules" and I think "Break the rules" would suck. I was also in the expectation for "Night & Day" (I was thinking of making a game where you are the vampire: WHAT A HORRIBLE MORNING TO HAVE A CURSE) or "You control more than one" (in which case I'd be forced to make something similar to my warmup game).

Since I wasn't expecting "Beneath the surface" I went looking in Google Images for "Beneath the surface" results. They were mostly submarine photography, sunken ships, divers and petroleum well diagrams. None of those interested me. However, I remembered a distant information from this xkcd What if:

However I didn't recall immediately from where I was recalling this information and I started reading Wikipedia's articles on random planets and I saw myself with this:

So I had decided: I was going to make a game about Neptune, and the surface beneath which something would stand would be it's ammonia ocean. In the end, it was good I went with Neptune and not with Jupiter, as it's way more beautiful than Jupiter.

Implementing the theme, or, the plot of the game

As soon as I decided to make a game about Neptune I decided that the player character would be an astronaut. While making his sprite, I decided to make him a cosmonaut instead, i.e. to put a red CCCP on his helmet and make him a spaceman from the Soviet Union. Not only this would make the whole thematic more interesting, it would let me to add russian voices and faux cyrillic.

And thinking of space I started humming Space Oddity by David Bowie, a song I like very much. It was a matter of time before I decided to make it into the plot. Specially the ending of the song:

Ground control to Major Tom
Your circuit's dead, there's something wrong
Can you hear me Major Tom?
Can you hear me Major Tom?
Can you hear me Major Tom?
Can you...
Here am I floating round my tin can
Far above the moon
Planet Earth is blue, and there's nothing I can do....
With this in mind, the cosmonaut would be stranded to Neptune after his communications with Earth (with the Motherland!) failed. Why, if I was using Space Oddity, not to use David Bowie's inspiration too, 2001: A space odyssey? Specially, I was inspired by this scene:

How this appears into the game I shall not reveal, for spoilers. The last effect those sources had on my game is the name, that I changed just before the submission: before that I thought of "Ice giant" in a reference to Neptune and "Red eagle above the blue skies" in a reference to the soviet cosmonaut and the color of such planet. Now that I think of it, those names suck.

Creating the graphics, or, shaping the ideas into the face of the game

As it can be seen on the game creation's timelapse, the sprites and images were all done using very simple GIMP tools, and aren't that great in style: they are quite shallow, in fact. They look good, however, and represent very well what I tried to accomplish.

Some things I learned how to make on the spot. Among them, the space backgrounds, like the one below:

I learned to make those backgrounds in GIMP using this tutorial. Thanks to chickenbellyfin for the game's astonishing visuals.

On one of the game's sprites, to achieve a 3D effect, I used this GIF making tool. It was simple to use and easy to learn on the spot. I think this kind of creativity on making assets is of great use in Ludum Dare, and a great skill to have for one-man-army game development.

Making the game's sounds, or, raising the voice of the game

This was something I saw as an obstacle. Working with sounds is an skill I don't have. Even though I know some music theory, I can't write music. And most sounds and musics that can be generated procedurally are too generic, videogameish or non-serious sounding to complement my game's atmosphere. I decided to go with a minimum usage of sound, and to hope that this would help setting the game's feeling of loneliness and despair.

As fair as sound effects go, there's only the sound you make as your feet hit the ground, the sound of your space suit rupturing when you die and the sound of your jackhammer hitting the ground when you use it.

There's also some amount of  "music", perhaps we should say small musical pieces, on the game's ending. To create them I downloaded and installed the program below from sourcefourge (also on spot!), a simple MIDI keyboard and synthesizer, and hit random chords on the C-major scale until I found something that sounded good. I then used Audacity to record this by setting it's source to Stereo Mix. Again using of that asset creation creativity I said to be useful on Ludum Dare and single guy team game development.

Creating the introduction's communication with ground control was the most challenging and most interesting aspect of the game's sound art. First, I wrote the ground control's dialog in english, and translated it to russian using Google's Translator. Then I went looking for a russian speech synthesizer. This was turned out to be harder than I thought. I though of Acapela, but they took out some of the voices available in it's demo, including the russian male voices. I eventually settled with eSpeak, "originally known as speak and originally written for Acorn/RISC_OS computers starting in 1995", i.e. a piece of prehistoric software. The synthesized speech was ridiculously monotonous and artificial, but this was good as it somehow sounds closer to the stoic words of a ground control operator. Then I opened the speech .wav file in Audacity and edited it to look like a radio transmission, following these two posts in Audacity's forums and this post in OpenGameArt's forum. In synthesis, this is how to make a radio transmission similar to the introduction sounds:

  1. Write some dialog in english
  2. Translate it to russian using Google's Translator
  3. Synthesize it into speech using eSpeak
  4. Open it in Audacity
  5. Apply the equalizer to cut out frequencies above ~2500-3000Hz and below ~150-200Hz
  6. Apply the leveler two times to make the sound "harsh"
  7. Add white noise in another track, same duration as the voice
  8. Apply steps 6 and 7 to the white noise, so it looks like it come from the same source
  9. Adjust the white noise's volume so that you can still hear the voice
The level design, or, creating a solid experience

I built the one big playable level using my own level editor I had created two days before the compo started. It has some minor bugs and annoyances I had to correct on the spot. The saving and loading of levels through JSON in the editor didn't work for some reason. Still, it was a valuable tool, as I could create different levels to test new objects as I was coding them. And when the time had come, I made a good and solid level design in it. The complete level, seemed from far away in the editor, looked like this:

The game's ending quote, or, closing the game with a golden key

I was thinking of using J. Robert Oppenheimer's quotation of the Bhagavad GitaI am become Death, the destroyer of worlds. However, something from the Manhattan project was too american to be used in a soviet themed game (except perhaps the honorable Klaus Fuchs). 2001: A space odyssey famously both starts and ends with a rendition of Also sprach Zarathustra by Richard Strauss. Why, it was obvious: I should use a quote from Thus spoke Zarathustra! (Thus spoke Zarathustra is the title in modern english of the famous book by Friedrich Nietzche, while the song has kept the archaic spelling).

The timelapse, or, my memories of this great experience

By analyzing the timelapse, I made a "time spent on each activity" pie chart, that shows how much work went into each aspect of the game:


Thus was, out of the most intellectually pretentious inspiration, born my LD entry. May you consider this post as it's post-partum (for it's not a post-mortem, for art never dies). Thus we must examine two most important aspects of it's anatomy:

What went right

  • The introduction, that everyone seems to love:
  • The 2001/David Bowie/soviet thematic:
  • The varied gameplay:
  • Amazingly, the level design that I made hastly in the last hours with a shitty level editor:
What went wrong
  • There were some minor annoyances with my untested level editor in the competition.
  • Just when I was finishing the level design, I found some minor bugs I had to correct with a filthy workaround:
  • I had a lot of problems with hosting:
  • There was a bug making the game unplayable in Firefox:
  • People didn't know they had to press "D" to skip dialog, so they either A) Thought they were stuck or the game had crashed; or even worse, B) Thought the game ended after the landing part. This was even though I had took the time to write all controls in the instructions screen, thus proving that people rating LD games have very little will to attempt to find the controls on their own or to look for the instructions:
  • Due to the way checkpoints are implemented, they can leave the player in an unwinnable situation:
  • Players felt annoying to play the game with the keyboard and yet have to use the mouse to click on "Continue" in the death screen:
  • Players didn't like the lighting effects, which were badly implemented, and some didn't perceive that the light affects the worm's behavior:
  • In the chart below, you can see how many times the links for my games have been clicked so far, statistics gathered through the link stats option. Still, my game has 39 ratings so far, so it has been accessed much more than rated. This is ridiculous and denotative of lack of will from the Ludum Dare community.
All in all, it was a great experience. I rarely have the opportunity to feel like an artist, but I think this game really is a sincere art form. I am looking forward to making more art in the next Ludum Dare events.

P.S. do not forget to check out the game itself!

Thursday, 1 May 2014

My games - Ludum Dare 29's warmup game, Ye lost viking

This is the second time I made a warmup game in preparation for the Ludum Dare 48h game development competition. The first time was 2 years ago, in 2012. Interesting to see how much time has passed since. Click on the images to play the game:

It's basically a small game you make in the week before the compo so you can test your tools and abilities.

In 2012's LD23 I simply made a extremely generic platformer without any theme in mind. This time I went through a different paradigm.

I frequent the #ludumdare IRC channel at AfterNET, where Ludum Dare's folks meet to discuss interesting issues like programming, game development, and when I can completely derail the channel's topic, cultural, geopolitical and medical topics. While I (drnick) was discussing the themes (topics to whom Ludum Dare entries must be related) with hdon, awsumpwner27 and Wonkyth, hdon had the idea to use the themes database he had to make a sort of a "simulated" voting where 100 of the themes were selected randomly from the database and each one of us had to "slaughter" an equal share of those 100 themes, leaving only one remaining theme. I then suggested we all did our warmups based on this single theme. I don't know if they followed my suggestion, but I did, on the selected theme of "You control two".

With this theme the idea of multicharacter player control immediately come to my mind, and with which the image of The lost vikings, an old, DOS and Amiga game where you control three vikings that are lost in time and must cooperate with their abilities to advance to the next level and hopefully find their way back to their native Norway.

But since it's "You control two" and not "You control three", the idea was that one of the vikings is lost and the other two have to rescue him. This was actually suggested by Wonkyth. Thanks, Wonkyth.

I decided to change a little each viking's abilities. The differences are:

  • I completely removed the viking with the ability to run faster than the others and kill enemies with a head bash, and replaced him with a viking with a sword.
  • The viking with the bow doesn't have a sword.
  • The viking with the shield can't use his shield as a hang glider.
  • Additionally the vikings didn't keep their names or original hair and clothing colours.
See all the vikings in the image below:

Also, I planned 3 scenarios, which I believe is less than the amount found in the original game:
  1. Prehistorical
  2. WWII
  3. Alien spaceship
Due to self-imposed time constraints to better mimic the main LD's compo experience, I didn't
 finish the game completely, i.e. I didn't implement everything as planned. Below is a list of things I had time to implement:
  • Each one of the three vikings, and their abilities
  • The first scenario
  • Two enemies (a spear throwing and a bat-mashing cavemen)
  • A pterodactyl usable as a moving platform
  • The flying saucer that brings you to the next level
  • Two levels for the purpose of testing
  • Password system to continue playing after interruption
  • Instructions screen
  • A static palm tree
To comparison, below is a list of things I didn't have time to implement:
  • The last two scenarios
  • More enemies (dinosaurs, carnivorous plants)
  • Gates that can be opened by moving switches
  • Actual level design
  • Targets for the archer viking that could do actions like opening passages
  • Keys, bombs, other items like in the original game
  • Sounds
  • Music (not that I can actually write music)
  • Coconuts that fall upon your head from the top of the palm trees
Also, with respect to time usage, I later made the following analysis:
This analysis I built upon the timelapse I recorded while I was making the game, you can watch it below:
This is all I have to say about my tiny warmup game. I may expand it later. I may also upload to this post a scan of the paper sheet where I drawn the game's design.