Development log for the game 99 Clones by FiveMedia for the libgdx game jam.
General game idea is a platformer puzzle game. You control a space rover (can only move left and right and fall), and a clone that can enter and exit the space rover. The clone you control can also jump and wall jump, plus drop bombs (that destroy certain squares in the level- or enemies) and build 1 short bridge at a time. Using these tools the clone can open up areas and build paths for the space rover to get to the level end. The goal is to save all three blue clones at the level end that have been kidnapped. Each clone as a bomb that goes off after a certain amount of time expires, so the faster you are, the more clones you save. The game play will be a mix of simple puzzles (what to blow up, when, and where to build bridges when) along with some fast platforming to execute on some of the puzzles as the clone. The game is called 99 clones as you start with 99 clones to complete the entire game. Death means one clone less, and a full level restart.
So far we have a few test levels in place. We have the clone entering and exiting the space rover, controls in place for the rover and the clone when exiting. The clone can drop bombs to open up areas of the level as well as build bridges across gaps so the rover can get to the end of the mission and rescue the 'blue' clone.
Next steps are add three clones to save rather than one and the bomb timers so the levels become timed. Also want to rework the 'Air' concept- idea is the clone when out of the ship has only 15 seconds of air. Air power ups can be found to extend this. After playing the test levels, I think this 15 seconds should be more like 20 to 30 seconds, or maybe even gone from the game. Watching my kids play I noticed it made them angry more than anything else! Maybe that's hard mode or something. We'll see! Also need to rework stage and level selection screens, along with adding dynamic enemies...then will come lots of level design work!
We're using Box2dLights for lighting- haven't done much with it yet, but hoping to have a few interesting light sources and elements in the game to add some ambience to the space theme. Basically we take a tile map built with Tiled and convert tiles into Box2d squares to build the world. Nothing else uses the physics as for a platformer I find physics engines a bit strange, so we wrote the physics ourselves (fairly basic platforming logic, translate Y, check for collisions adjust DY accordingly, then do some for X access). We put a few special cases in to handle wall jumping.
Add the three clones to save, each strapped to a bomb. Adds a nice game play mechanism - the first one explodes just after the fastest time possible to complete, etc. Saving all clones will unlock bonus levels, etc. Also added the end of level HUD for easy replay/next level advancement.
and the cheesy super great if you save all three ;)
Finished up adding vertical moving spike blocks.
This allows for lots of interesting puzzles between the space rover and the clone. The bridges you build can block them above or below. Plus some blocks repeatedly fall, others merge with the ground when they hit - so now puzzles with bombs are possible as well. These also can be hooked up to switches (next todo) which allow for adding some hard core platforming elements to augment the puzzles. Force the clone to run, jump and navigate something treacherous to get to a switch, to lower or raise a spike block and then back to the rover to move once the block is clear.
Also will add horizontal spike blocks for the 'boss' level at the end of the first world. This should force the player along a path and to move fast being constantly chased by a wall of moving spikes.
Used pretty basic collision detection for now. Basically check above and below the middle square for tiles on the platform layer, then reverse or stop depending on properties of the block (specified in Tiled). For those that stop, we added a block that has non-spikey top, so it becomes part of the terrain (basically when it stops moving permanently - ie hits the ground) it is made invisible, and instead a 3x3 grid of tiles is updated on the tile map.
Finished up slimes and seekers. Slimes move horizontal or vertical along blocks and kill you or your buggy. Explosives don't kill them, but you can make them fall into pits or use your insta-bridge to trap them getting your buggy through tough spots.
Also added Seekers which chase you around- these only chase the clone though, they stop moving once in your buggy...so they add a new puzzle element as well. Also worked in some more sound effects from our sound partner Village Sound. Games coming together. Did a play through with a steam controller through mission 1 - 11 levels...level 10 and 11 probably took us 80 tries to complete- might have to tone down the difficulty a notch ;)
Refined the seekers and adding some lighting effects- headlights, and glowing slimes and seekers. Darkened the second mission a bit to show them off.
Getting things wrapped up so I can publish code and the game this weekend!
Have three more levels to complete in Mission 2.
Added a simple game over when you expire all 99 lives...we decided to make the game a bit old school and you have to start all over. It's only 22 levels, with really only about 5 or 6 that are truly challenging- so those who like more challenging games should enjoy the challenge. We'll see ;)
Lastly we need to add a Victory screen, a little more play testing, and should be ready to go!
Finished all 22 levels (11 per mission - 10 + a bonus per).
Added giant slimes for the 'boss' on mission 2. And finished mission 2 levels up.
Final touches to be added tomorrow - 'you win' screen mainly, might give you a fresh 99 clones if you make it to mission 2 as after some more play testing (and the repeated urge to chuck my controller at the TV) I think difficulty might be a bit hard. I can never tell. Then publish the code and the game!
Just submitted the game. Source is up on github as well.
We're quite happy with the result. Some sacrifices in terms of art, animations, and the quantity of levels had to be made to fit the timelines of the jam. But after our last play through those that like hard platformers and puzzles should enjoy it.
Thanks to village sound (www.villagesound.ca) for providing all the music and sound effects- a great job as usual.
In terms of a post mortem, here's some things we learned:
1. We rolled our own Scene2d framework with some basic layers and animation support. Works reasonably well. But looking at Scene2d, I think we're rewriting more code than we need to! Next game will probably try to leverage scene2d.
2. Some performance issues (memory I think) show up after playing a level 50 times in a row or more. If we rework our existing game framework on top of libGDX will make better use of pooled entities. This should prevent some of these issues.
3. Down the road need to do a better job of splitting movement logic from the sprite itself so more can be re-used and leverage.
4. Too much coupling between main layer and sprites is starting to happen. Better separation there will make it easier to scale and add more to the game. The big game loop grows unwieldy.
The Android TV version is available on Google Play for those who want to try it with an Android TV device (a little easier to get loaded ;)