Beneath The Clouds Post Mortem

Posted by
May 2nd, 2014 7:00 pm

This was my first Ludum Dare (along with many others competing).  It was a fun experience, and I learned a lot even with tech I thought I already had a good handle on.

My entry was a little game I call Beneath The Clouds.

 

 

Overall, I’m moderately happy with how it came out. I ended up wasting a lot of time during the second day, and the game suffers for it. But even so, I’m happy that I have something that can at least be considered “playable.” 😛

Pre-Development

Right before the competition began, I started on an engine, and it was very good that I did. It allowed me to accomplish quite a lot of the preliminary work fairly quickly, and so I know for future competitions I’ll be using my existing code base.

Development

First thing I did when the theme was announced was take a walk. It helped me think and come up with ideas. Some of them included:

-A zombie game where you play as the zombie and you have to drag humans beneath the ground to turn them into zombies and you amass a zombie army in this way

-A platformer where you play as a little gnome who jumps from rain drop to rain drop to get above rainclouds

-A shooter/platformer game where you grow plants to get above the clouds

I ended up going with a combination of the last two.  Going with plants, I could work with  genetic algorithms. An idea that I was already familiar with and knew how to use. Plus it was something I wanted to do should Generations been the theme.

 

My first 24 hours of development were quite productive. I managed to get most of the art assets finished, get sound effects and the background “music” done, implement a particle system to handle rain, and get the plants growing according to genetic rules. By the time I had gone to bed after being awake for 36 hours, I really only needed to implement reproduction on the plants, AI, and collision detection.

 

The second 24 hours wasn’t so smooth. Due to going to bed, I lost 8 hours of possible development time. Additionally, I had agreed to go to lunch with some of my classmates and lost an additional 4 hours.  I was left with a narrow 5 hours to finish the rest of the game, plus two hours I had put in before lunch to implement reproduction. Those hours ended up playing by very quickly, and I had to cut out parts of the game, like certain plant types changing behaviour of enemies and such. Submitting the game and getting everything prepped was literally the last minute. Got it done, though.

Post-Development

The end result does suffer from time constraints. It functions well enough as a game, though I do agree with a lot of commentators in that the player doesn’t have a large amount of control over the world and how the plants grow. It is possible to win on a consistent basis, however I know I am able to do that because I have an understanding of how the plants work. Not so for anyone just playing the game, so it can be confusing if one doesn’t read the README or description.

 

On the positive side of things, a lot of people have been telling me that the idea behind my game is a really good done.  And that with a bit more polish and time in development, it could become a really good game. Additionally, it seems I created a good mood for the game. Instead of traditional music (which I have exactly 0 experience in making), I opted for just having rainfall. It’s a choice I’m glad I made, even with nearly giving myself a virus looking for a free rain generator.

What Went Right

I’m really happy with how the game looks. I have little experience with pixel art, but I feel I’m competent so long what I am working on is low res, like 16×16 as the game uses. I can honestly say, I did not expect the textures and such to turn out as well as they did.

I’m also happy with the rain effects plus the accompanying rain “music.” It really does feed into a relaxing atmosphere.

Finally, I’m happy with how the plants behave, for the most part. The way I handle the plants allows for a lot of emergent properties. For instance, a plant having a lot of flowers can help increase its chances of reproducing since it spawns off more seeds. Additionally, a plant with a lot of flowers is more likely to receive/provide pollen to other plants. While in the current system, this depth isn’t tapped into nearly as much as I would like it to be, it will be there for when I reinvent the game.

What Went Wrong

Beyond having to cut out features due to lack of time, a few other things ended up going awry or otherwise impacted development.

Throughout my development, one of my libraries (sfeMovie) required me to not only be limited to C++98 (and therefore VS2012), but also to develop in Release configuration. Running into the optimizer and having a lack of debugging information made fixing some bugs much more difficult than they should have been. Funny story, at one point in my debugging, I found that the optimizer made one of my for loops run in reverse.

I am also unhappy with some of the sound effects I made for the game. The jumping and shooting effects are a bit too loud and conflict with the calming atmosphere of the rest of the game.

I also ended up running into some of the nastier things that can happen with the C++ STD containers, like memory being reallocated and breaking pointers, iterators being thrown out of sync due to elements being removed, access violations…

What I Learned

I ended up learning quite a lot about C++ and how it handles things internally. I’ve been working with C++ for the last 5 years, so I already had a solid handle on the language and it’s quirks but Ludum Dare exposed me to a lot of areas I was unfamiliar with, such as how the linker works or some of the things the optimizer ends up doing. Coming out of this competition, I feel much more competent with the language than I already was.

I also uncovered some of the deficiencies in my engine, such as how animations are handled and the inefficient memory footprint the engine ends up making. It’s really shown me where i can improve on the code base and where I can make things easier to do, such as handling text drawn to the screen.

Planning for the Future

First thing I am going to do is improve my engine. I want to make it a generic game development engine that comes with a configuration using SFML, but can be ported easily to other libraries. This is simple in the MVC model it has, but in its current state it leads to tightly coupled code in some parts. I want to improve the engine to decouple as much as possible.

Beyond the simple code base, between now and next LD I am going to focus on learning music theory. Music is a part of games I have never explored and learned, and it very nearly ended up costing me dearly in my game.

 

Anyways, can’t wait for next Ludum Dare! 😀


2 Responses to “Beneath The Clouds Post Mortem”

  1. drnick says:

    It’s good to see you learned a lot with your experience with this game and that my suggestions were appreciated!

    I was hoping you’d do a post-mortem, as you seem to have original ideas and I wanted to hear you’ll continue advancing your gamedev skills.

    Here’s some tips:
    1) Either figure out how to use newer C++, with C++11 standards, abandoning obsolete libraries or
    2) Give up C++ altogether, as the memory management and class paradigm is annoying specially during limited time events like LD. I recommend a classless yet object-orientABLE (in the sense it doesn’t force you to use OO) language like Javascript or Lua.
    3) If you don’t want to give up on C++, perhaps developing on Linux would be interesting (I prefer to do C++ on Linux)
    4) Make a small codebase, but don’t make it too fancy (complex entity systems are a waste of time, keep it at the Draw() and Update() level)
    5) Your graphics look good, but if you don’t want to use them zoomed in, perhaps you should learn how to do non-pixel art graphics, like with GIMP, I now do all my sprites non-PA and I think they look very nice, see those timelapses of mine for example: https://www.youtube.com/watch?v=IeYpPhKKCq4 https://www.youtube.com/watch?v=8MoFDHfqO5A
    6) Learn to use a small set of tools very well
    7) On the sounds, I suggest you learn how to make more ambient sounds if you like moody games (games without proper “music” may sound very beautiful if they still are able to set the atmosphere). I particularly liked your use of rain sound, it’s better than most LD games music anyway. See my post-mortem for an example of successful usage of sound to set atmosphere: http://www.ludumdare.com/compo/2014/05/02/the-greatest-post-mortem-ever/
    8) If you still want to do music, I may suggest you look onto these things, in order: scales, chords, the circle of fifths, general techniques (arpeggios, glissandos, contrapuntos).
    9) About scales, learn how to form then, what they are, and how they help you pick chords that sound good together. Also, which scales are happy and which ones are sad, some may be more of the epic type. Examples: “Ode to joy” is written in the D major scale. “Moonlight sonata” is written in the C# minor scale.
    10) Learn about chord progressions, again, some sound sad, others sound happy.
    11) Arpeggios are the soul of classic NES game music, a great example is Bloody Tears from Castlevania II.
    12) The circle of fifths will help you pick two notes that sound good together to form a melody, then you remember that notes closer apart look sad and notes further apart sound happy.
    13) Last, disconsider all this and be true to yourself, find the kind of games you like to make and make them, for they are your art.

    • Skipi says:

      Thanks for the feedback ^_^

      It’s really ironic that the one library that prevented me from using C++11 and compiling in Debug mode, the library allowed me to play videos in SFML, was one that I ended up not having time to use! Getting it compatible with C++11 would have meant a recompile, which in turn would have meant building the ffmpeg libraries. Fortunately, there wasn’t too many features of C++11 that I didn’t already have access to (auto) or could just get from Boost (foreach, smart pointers, etc).

      I find C++ is easier to work with on Linux purely because Linux handles all your dependencies for you. It also configures those dependencies to make them easily compiled if you want to build them from source.

      Also, I do have a codebase/engine. You can see it here:

      https://sourceforge.net/projects/skipiengine/

      It helped quite a bit with development, and it’s very simple in its current state. 😀

Leave a Reply

You must be logged in to post a comment.

[cache: storing page]