If you haven’t yet, I recommend you to play the game first. This article contains a few spoilers.
This game was developped in 48h for the Ludum Dare 29. The theme was “Beneath the Surface“.
The video timelapse
If you want to see the full 48h making of Beneath the City, here it is :) You should switch the player to HD if you want to be able to read the code.
What went wrong
- isometric 3D: at first, I wanted to use a Isometric projection for this game. Three major problems forced me to fallback to a more classic top-down view. Of course, these problems could probably be solved with enough time, but time is what I’m usually lacking during a Ludum Dare :)
- controls: the mouse proved to be quite unpleasant for a turn-based game, where you typically move one cell at a time.
- rendering cost: iso 3D implies to sort game entities and scenery elements which adds additional costs to the main loop.
- fog of war: the rendering of a top-down fog of war is rather easy. It only implies a opaque mask in which you dig square holes (which is very fast in Flash). In isometric view, you have to “dig” isometric shapes in the fog, which is much slower in Flash. The same problem applies to lighting rendering.
- turn-based game: I have absolutely no experience in rogue-like development. I have spent 6 to 8 hours to simply write a decent and stable turn-based system. I even restarted from scratch 3 times. It reminded me a LOT my previous experience with my first point’n’click engine. This kind of engine seems pretty simple at first, but to write something usable and stable, it really takes a lot of careful preparation and time. In this kind of game, you have to write an engine.
- balancing: there is a tacit rule when creating a stealth game. Players who like stealth games want to play it without any kind of “cheat”. That’s the reason you usually try to finish a level without resorting on any item or gadget. You want to play it “the pure way”. Even knowing that, I implemented 3 gadgets in my game.
- water arrow: useful, but not really required. Also, the way I select the “closest” torch leads to some miss-uses,
- dash: sometime useful, but not really required too,
- bell: almost useless because you make the noise where you stand.
- different guards: the game clearly lacks variety in term of enemies, and I quickly found myself in a dead-end during the level-design phase.
- sounds: I couldn’t create any sfx for this game. There is a music though, but a few sounds would have been great to emphasize important feedbacks (like when being spotted).
- story: no time, no story :(
What went right
- music: I composed my own music for this LD using Bosca Ceoil (from Terry Cavanagh) and I’m really proud of it :)
- infiltration: I absolutely love stealth based games (like Thief 1-3, or Trilby: the Art of Theft) and creating this kind of game was a real pleasure. Also, the fact that the turn-based aspect works is a great proof-of-concept that I will definitely use as soon as possible. Expect some kind of turn-based Thief with System Shock bits and a pure core gameplay. More about that later.
- Bresenham algorithm: this algorithm is a life saver. It fuels the pathfinder, the sight checks, the lighting and the fog of war of my game.
- friends: I participated this Ludum Dare along with 10 other friends at Motion Twin office, and even though it was sometime hard to concentrate, it was really really fun :)