Last month I started a personal coding challenge, dedicating thirty minutes a day for the next thirty days.

I decided to build a platformer game for my son (five years old), inspired by Crystal Caves by Apogee Software (3D Realms).

Earlier this month, I shared an update, covering the first fifteen (non-consecutive) days, accounting for approximately six hours of development.

I selected GameMaker Studio 2 as my development environment, which includes a cross-platform 2D game engine, with the game logic being written in GameMaker Language (GML).

GML is an imperative, dynamically typed language commonly likened to JavaScript and C, which can be exported to run on a wide range of platforms (Windows, macOS, Linux, iOS, Android, PlayStation, Xbox, Switch, etc.)

Popular 2D games such as Spelunky and Hotline Miami were developed using GameMaker Studio.

Minimum Viable Product (MVP)

I have now passed the thirty-day milestone and am pleased to report that I have achieved a minimum viable product.

The video below demonstrates the core mechanics of the game. However, the visuals and level designs are for testing purposes only, using freely available assets from Kenney.

Showcased in the video is a basic menu system, player and enemy movement, pick-ups, story narrative, player and enemy shooting, scoring, destructible objects, enemy types, saving, loading, and end credits.

My son has been helping to test the game, providing feedback on the controls, etc. It has been fun watching him explore the game mechanics on the big screen.

30 Days of Code

One area that has been a point of concern is shooting, which is currently achieved using the classic “right analogue stick + trigger” combination found in most shooting video games.

However, my son has found this combination difficult to grasp (literally), due to his small hands. Therefore, I am actively exploring two mitigations.

The first was to remove the need to press the trigger to shoot, instead, the shooting action would be automatic, based on the direction of the right analogue stick.

The second option was to try a different controller, specifically the 8BitDo N30pro, which supports Windows, macOS, iOS, Android and Switch.

30 Days of Code

I can see a combination of the two options being the best outcome.


If you would like to review the thirty days of development history, the YouTube playlist below provides a glimpse into my daily progress.

The codebase, which can be viewed on GitHub, should provide a solid foundation for a 2D platformer game.

It includes numerous re-usable functions, which should make the game reasonable extensible, with options for new collectables, enemy types, destructible objects, etc.

I also included a few “secret” game mechanics. For example, the shooter can be used to provide a small amount of vertical population, which allows the player to jump higher and longer. Although not immediately obvious, once discovered, it could provide an interesting option to be used within the level design.

If you would like to build/test my game from the source, I would recommend the following GitHub commit, found in the master branch.

You will need a copy of GameMaker Studio 2 to build the game.

Next Steps

Although I have reached the end of my thirty-day challenge, I plan to continue developisng the game. The next phase will be to focus on art, story, and level design, which I can already tell will be more complex than the code itself.

If you are interested, you can view my current backlog and all enhancements on GitHub (develop-x branches).

I will also upload all of my art assets, which I plan to create using Aseprite (Windows, macOS, Linux) and Pixaki (iPadOS).

30 Days of Code

My son has informed me that he would like the game to be “ninja” themed, based on his current love for Lego Ninjago.


I am pleased with my progress over the past thirty days and the challenge accomplished its goal of forcing me to get “hands-on keyboard”.

As with any coding, I stood on the shoulders of giants, leveraging the amazing work from the community, specifically Kenney, Gamesfromscratch, AdamCYounis, Shaun Spalding, Vimlark, DevDuck, HeartBeast, Ric, and