Oct 16 2014

Ludum Dare 30: Trapped Between Worlds

Theme: Connected Worlds

Showdown: tiny red ninja vs. huge moose boss!

The game (flash):
The timelapse:
Ludum Dare page:
Post about our meetup:
Steves’ soundtrack:

This time I had decided beforehand that I wanted to do something more ambitious, and I decided to make a 2D platformer game with its main focus on boss fights! That’s a lot of ambition, something I got painfully aware of… I did however manage to finish it on time for the jam.

Except having an ambitious idea, I also hosted a Real World Gathering at my office at Isotop.

Read on if you want to know more about the event and the process behind the game…


Before I start the long rant: here are the result (out of a total of 1045 jam entries)

The Real World Gathering

If you (for some strange reason) don’t know what Ludum Dare is I’ll keep it really short: it’s a online event where people world wide gather to create a game on a given theme during 48 hours.

During these compos you most often work alone. Probably from your home. But in some places people organize meetups at a physical location, which is called a Real World Gathering. This time, me and a co-worker and fellow participant of LD, Nilstastic, decided to host such a meetup in our office here in Stockholm.

About 15-17 people showed up during the two day event, and I had a great time. However, coding under extreme pressure doesn’t give you a whole lot of time to socialize. Still, just hanging toghether with talented and creative people was a great deal of fun, and good both for helping each other out with code or ideas around the theme, and for boosting creativity.

A huge thanks to Isotop who allowed us to use the office (and buying us soda, snacks and pizza).

The Idea

My initial idea was to make a 2d action platformer. I usually avoid platformers in jams with short time-span due to their complexity, but this time I had decided to go with an existing engine (Haxepunk) instead of building everything myself from scratch.

With the heavy burden of platforming removed from the equation I wanted to focus on gameplay and game design. My main goal was to include bosses (as many as possible) in the game, which is another thing I usually try do scope out when time is limited.

I decided to go with quite similar game style as Ripple Dot Zero, but more combat-heavy, and with the ability to upgrade your stats as you played the game.
Upgrading your stats would make it easier to defeat the bosses, and you could choose to upgrade according to your preferred play style. However, completing the game should be possible (but really really hard) even without any stat updates.

So, as you can see, I was aware from the start that I had greatly overscoped my project. I knew this perfecly well, but you gotta try to win! And to compensate I invested a great amount of time to learn and experiment with the open source engine Haxepunk.

What Went Right?

My first good choice was to team up with Steve (meaning I could not enter the main compo, but rather the jam, that runs at the same time but with some slightly modified rules).
Not only did Steve build an amazing 8-bit mega man-inspired soundtrack and help me with sound effects, but he helped me (probably a lot more than he realized) with scoping down the project when the time was about to run out.

I knew I wanted to do a platformer, and spent a lot of time familiarizing with Haxepunk. I even modified the engine a bit to better suite my needs. Without these preparations there is no way I would had been able to finish at all.

I’m happy with how the bosses turned out.
There are two bosses, and I tried to keep them simple but still boss-y.
The big brown square in the forrest world is supposed to be an elk (but I had to scope out making the graphics for the antlers so I guess it’s a cow and not a bull). When I added the jumping behaviour to it and realized that it could actually stand in the tree crowns – like a totally badass kung fu elk – I couldn’t help but giggle out aloud. Awesome moment!

Overall, I think that the game is fun to play. Even though the controls are not perfect on a keyboard (they are with a controller though) the basic battle mechanics feels very solid, and could absolutely be imporoved into something really interesting.

I’m also quite satisfied with the final score.
Out of 1.045 jam entries I got on place 105 in the Audio category (thanks Steve!) and on place 153 in the Fun category. Overall the game placed 176.
I’m very happy with placing so high on Fun, and also the feedback I got from the other players was very positive.

What went wrong?

Running out of time
Even though I knew I overscoped (and planned for it) I ran out of time.
Even though jam entries has 72 hours to finish their game I still intended to finish my game within the usual 48 hours. But what I had after 48 hours was very far from being good enough to submit. I had to use 12 hours after work on monday to finish it up (with some precious help to prioritize from Steve).

Hunting bugs in the engine
Even though I had prepared a lot by experimenting with Haxepunk, it wasn’t enough. I ran into strange bugs and had to spend precious time making bug fixes in the engine code. Like mirroring a clipped image worked on c++ but not in flash (cliprect did not mirror). Or setting the background color worked in flash but not c++.

Vauge connection to the theme
The theme was “Connected Worlds”. I decided to build the game as levels, or “worlds” connected with lines and dots from a “hub world”. When you complete a world it’s connection will light up, and show you part of the location to the exit of the game.
It was a vauge take on the theme to begin with, and due to time constraints it became even less obvious.

I had an idea to use square rectangles as the main body and then paint details on it in layers.
It did not turn out as well as I had hoped. And also the actual levels looks very very boring, consisting of mostly just colored rectangles.
If I want to place better I have to put more effort into the graphics!

Developer difficulty
I wanted the game to be very difficult (but not impossible) to complete, even without any stat upgrades.
However I think I fell back on the old developer difficulty mode. The elk-boss is really mean (although there is a trick to defeat it super easy).

Lessons learned

What’s your purpose?
For me I enter the LD for one of two purposes. Either to learn (new tool, new language, or just practice making games) or to score high. This time I wanted to score high!
So what conclusions have I made from this? How could I have scored higher?

1. Know your tools!
You need to be very familiar with your tools and engine. You should try and build several games with them, learn their quirks and shortcuts.
For example I had not been experimenting with bitmap graphics in haxepunk before the compo, which led to a lot of wasted time and bug hunting when trying to flip the sprites as one example. Also, I had to do some dirty tricks to animate the sprites as I hadn’t studied anything about how to handle sprite animations.
So choose your tool/engine, and build an actual game with it. Not just short experiments. There are lots of gamejams at any given time. Spend a day or two and make a few simple games.

2. Difficulty and restarts!
I have done this mistake before, and it’s time to learn this lesson now.
It’s ok to make your game difficult as hell, but if you do: make sure it’s super fast coming back into the game again! Not more than one click! And a click on the keyboard is better than the mouse so you can get right back into the action fast!
In this game when you die (and you die a lot) you have to click past two splash screens, and then start all over from the tutorial level again. That’s cruel, and people will not stand dying more than a few times (in best case).

3. Graphics and design!
I believe the graphics will make people start playing your game, and the gameplay will keep them playing it.
But in this case I believe the quality of the graphics was just to low.
Also the overall design was too low, especially the level design. This is something I will have to keep working with.

4. Cross platform compatibility
Haxe is really great when it comes to cross platform output. Especially desktop and mobile.
However, it’s support for consoles is very limited – and I would soooo much love to play this game on my Playstation Vita.
That’s why I will change my tools until next time. I’m currently looking a lot on the Unity platform which also has great cross platform support. I’m also considering MonoGame, but for starters it will be Unity.

What’s next?

First of all, I have been working a bit more on the game.
I currently have a version running on windows/c++ target, and using an xbox controller as input (which is great).
I also started on new, deeper and nested worlds. With new enemy types and experimenting with behavior trees as AI. The project has however been put on hold as I’m planning to switch my tools.

I had such a good time this Ludum Dare that I immidiately afterwards wanted more!
We have not decided if we should have another Real World Gathering or not at this time. But it’s absolutely a possibility.
In any case! More games. And more jams!

If you think it sounds interesting you should join too!