Ludum Dare is an online competition that happens every four months. Developers join in from all over the world in order to create a game from scratch in 48 hours, all by themselves. The game must follow a theme, decided previously by 5 rounds of community voting.
You can use any libraries and any tools, as long as they are easily available to others. But any assets (graphics, audio and music) must be created just for the event. The definitions are a bit fuzzy on this, but nevermind about that.
The last Ludum Dare had an incredibly amount of activity, resulting in almost 600 games total. This is a huge success in comparison to previous years.
I did attempt to make a game, but there was no time to finish it. While I failed the deadline by a mile, it was an interesting experience and I had a lot to learn from it.
Here's a video of some of it:
I also have an older version you can play online.
Since I couldn't make it in time for Ludum Dare, I decided to keep working on the idea anyway. Here's the experience so far.
The general concept I'm going for this game is now this: a comedy-horror adventure platformer game where you have a large haunted mansion to explore, and mysteries to solve.
Engine and gameplay
Like in the Ludum Dare attempt, the game will be in oblique perspective, and divided into rooms. But this time, each room will be made out of blocks, as opposed to being hand-drawn individually.
Inside each room, I'll have entities. Entities are any moving and/or interactive object, one of which is the player character.
Entities will collide with blocks and other entities (all AABB vs. AABB based, which is easy and fast), which gives me the vertical freedom to design a large amount of different scenarios and related mechanics: staircases, multiple floors in a single room, moving platforms, lifts, slopes, water, etc.
Gameplay will focus on exploration and solving physical puzzles.
I decided to avoid any sort of combat, as I think the mechanic is distracting in this case. There won't be damage or health-bars, but the character can die in traps or by falling into pits or from a large height.
I'm also going to try to avoid using any sort of user interface, except for text pop-ups. I have a solid idea on how this will work, but I'm not sure how well it'll work in practice yet.
I'll develop on this topic once I get to that point in the development.
The level editor
For starters, I fired up PyGame and developed a simple level editor for creating the rooms. So far, it handles basic block placing, saving and loading rooms, etc. It still needs to handle placing entities and a few other features.
Here are a few videos on the development of the editor:
At first, I was going to make this game in Flash. It's easy, I'm familiar with the language and it's web-friendly, which means a larger audience.
But after some thinking, I decided to change platforms. For a while now I've been trying to pick up a new platform and language to learn, and C#+XNA have been on my list for a while. I decided, then, to give it a shot.
It's been surprisingly easy to learn XNA, and the excellent GPU-accelerated performance lets me do all kinds of special effects that would just be annoying to implement reliably in Flash.
In under 24 hours, I was able to have this basic functionality up and running:
This is a very naive implementation that renders all blocks and entities every frame. Even so, I'm getting a solid 60 FPS. Flash wouldn't be able to handle this without some heavy optimization.
As you can see, everything is being depth-sorted properly. This was a bit of a headache to figure out, and the literature on the Internet is *ridiculously* limited on the subject, so in my next post I'll detail the solution for this problem, which also works for isometric perspective. I'm sure it'll help a lot of people out there.
I also made a quick experiment with shading blocks by their distance to the player, creating a sort of light radius. It works surprisingly well. I'm definitely going to try a proper light engine in there somewhere.
And that's what I've got so far. It's been an interesting experience, and the challenges ahead are exciting.
I'll be keeping this blog updated from now on. Wish me luck!