Download the game from itch.io here: https://pyman.itch.io/planet-lander
Planet Lander was my first fully developed, stand-alone game. It was created in GameMaker and based on the Atari classic, Lunar Lander.
All code, art and animation was created by me.
The game uses the original's design and adds features such as take-off, refuelling, and a bonus objective to collect supplies.
GameMaker was a great introduction to programming for me. It taught me a lot of the core concepts without overwhelming me with technical knowledge that would have been beyond the level of a beginner.
I wanted to create something simple, particularly as this was my first full coding project. Inevitably though I wanted to add more features and polish to the game which took more time than anticipated.
Development started by prototyping the movement of the ship. This was mostly because I wanted to get the weight and feel right before I moved on to level design. The level design itself would be informed by the ship's movement mechanics and so it was important to get this right first.
While the movement and control of the ship would lend itself well to a physics system (and GameMaker does have the ability to employ physics in the form of Box2D), I didn't use physics for this game for a number of reasons.
One was that physics was more of an advanced topic for GameMaker and not too widely discussed and therefore it seemed more easier to go with a non-physics system. Secondly, physics can produce unpredictable outcomes for object motion and I wanted to make sure the player felt like they were in complete control of the ship. Thirdly, as a beginner programmer, I wanted to learn the traditional methods of coding motion in games to give me a solid grounding that would benefit me in subsequent projects.
It took a while before I was happy with the ship motion, but when it was I felt ready to start experimenting with level design. I built this by blocking out rough shapes of what I wanted, adding collision to them, and testing them out in game. The actual construction methods of the levels, and how they were implemented in to GameMaker, went through a few different iterations. This was mostly a case of trying to strike a balance between fast prototyping, performance, and aesthetics. I went through all sorts of ideas, including the possibility of procedurally generated levels. Utimately I wanted to create levels that were interesting, challenging but achievable, and followed a steady learning curve. The main problem I faced was that creating any levels that weren't a block construction, i.e. multiple square sections, was difficult for both performance reasons and the time spent creating the art for them. Collision meshes for example, needed to be simple so they could be reused easily, and for performance reasons as using collision that didn't rely on right angles meant using precise, pixel-based collisions which are expensive in terms of performance.
Art passes were only done once I was happy with the levels along with the parallax scrolling backgrounds, which I feel were one of the strongest features of the general aesthetics of the game.
UI and Lessons Learned
Some of the UI elements and menu systems came later in development but in retrospect they should have been developed much earlier. Apart from the fact that the UI took a lot longer than expected, I soon realised that establishing the UI early part on would have helped me solidify the game's mechanics and general structure. It would also have helped me realise which aspects of the game were more difficult to achieve than others.
As for the levels, I believe I would have been better forgoing the concept of utilising interesting shapes and/or curved surfaces and gone instead for simple block-like design. This would have increased both performance of the game and development of new levels considerably, without too much of a hit on creating interesting level architecture. There are currently only five levels and I could have created many more if I'd let go of the idea of making each one unique architecturally. The game itself seemed difficult for some too, a fact which I've talked about in a blog post here. I'd like to go back and revisit a lot of these problems, and perhaps re-purpose the whole game in to something like Unity, as that engine has very fast methods for UI creation for example, but I only have so much time in the day. ;)
Despite some of the shortcomings, I do think the game achieved a good sense of atmosphere, and that the ship motion was solid, albeit difficult for some new players.