Bound Postmortem

I came into the competition with a pretty good idea of what I wanted to achieve this time, but as usual spent most of the first day researching and struggling to get a prototype working. My initial idea was that I would create a split screen game with one side being a Sokoban-style game where you push coloured blocks into a specific configuration. On the other side of the screen you would control a platform game made up of level chunks of the same colours, with those chunks moving around as they’re pushed around on the other side. The idea would have been that in order to reach subsequent blocks in the pushing game you would need to collect matching keys in the platform game.

Then I decided I’d go for procedural generation…

The first day was spent building a modular procedural platform level generator, the results of which can be seen below:

boundlevelgen

Each block is generated from a random template selected from a pre-defined pool, with the overall level layout also being random. Openings are made between the blocks to allow the player to progress.

While I was pleased with the results, I realised on Sunday that the shapes of the levels were just too random and non-uniform, making generation of the block pushing levels extremely difficult. I also realised part way through the day that I’d spent far too long on the level generation and almost no time on the game itself!

After a bit more research I realised that generation of Sokoban-style levels was just too complex and computationally expensive to make it viable – also nobody had really generated Sokoban levels with locked doors and a final configuration where specific blocks would sit on specific pads. I therefore needed to come up with an alternative approach.

While I started work on the platforming mechanics, I came up with an idea of the block pushing part of the game actually being a sliding tile puzzle. Unfortunately Castlevania got there first. So my second choice was a tile-swapping mechanic similar to Bejewelled, but with the ability to freely swap any two adjacent tiles. This would make it possible to navigate through the level in a variety of different ways, but would require that all levels were square or rectangular in configuration. I therefore spent a bit more time on the level generation code and came up with a system which always generates a rectangular grid of blocks, with a clear start-to-end path and occasional side rooms to fill the gaps.

Unfortunately time was running out, so I focussed on the platforming mechanics for most of the evening and ended up struggling with working on them until around an hour before the deadline. I ended up with some pretty solid mechanics, but still had a static level configuration and no clear way to progress. Thankfully I’d already written the level code in a way that made it easy to just randomly swap blocks every so often. I quickly put together a coin collecting game, where collecting all coins would move to the next level and threw in a title screen. The end result is Bound, which you can play here.

(Please excuse the poor quality of these GIFs… the game looks slightly better!)

I’m pretty pleased with the final game, even if it’s not quite what I had in mind. The platforming mechanics are solid and, despite some frustrating pauses as you wait for the level to reconfigure itself so you can progress, I feel it’s pretty fun to play. This is the first platform game I’ve ever made, and I basically made the engine from scratch without using any of the built-in tile drawing or level collision code of HaxeFlixel. Yet again I find myself in a position where I want to continue working on my game after the competition has ended! I’d especially like to get the split screen stuff working and get rid of the randomness of the block switching.

Source: ludumdare.com archive

Found a bug?
Tell us on Discord