Since March, I have been building a platformer game for my son (six years old), inspired by Crystal Caves, using GameMaker Studio 2.

I have been documenting my progress across a series of articles.

Today I released version 1.0.7 across for Windows, macOS and iPadOS.

The release includes new levels, features and bug fixes. The video below highlights a recent playtest, providing an insight into the first seven levels, including some of the new features.

I have outlined some of the new features below, which continue to be inspired by legendary platformer games from the past.

  • Abilities: New abilities, which can be collected on specific levels and last for the duration of the level. For example, super jump and glide, which provide new methods to navigate the terrain.

  • Equipment: The player can now equip a torch instead of the Ninja Stars, which can be used to light dark areas. The torch is connected to the right analogue stick and/or mouse, allowing the light to be directed.

  • Explosives: New obstacles (rocks), which cannot be destroyed using the Ninja Stars. However, dynamite can be used to destroy the objects via a TNT blasting machine (like from Looney Toons).

  • Weather: New weather effects, including fog and wind. The fog appears close to the ground, with subtle movement, while the wind blows horizontally across the entire level. The weather effects do not (currently) have an impact on the gameplay, but add to the atmosphere of the game.

The weather effects use the game engines embedded particle system, which enabled a surprisingly simple implementation, requiring only two custom events.

The code below was taken from the “create” event, defining the parameters of the required particle effect.

time = 30;
alarm[0] = time;

particle_system = part_system_create();

particle_fog = part_type_create();

part_type_shape(particle_fog, pt_shape_cloud);
part_type_size(particle_fog, 1, 1, 0, 0);
part_type_direction(particle_fog, 180, 180, 0, 0);
part_type_speed(particle_fog, 0.01, 0.02, 0, 0);
part_type_alpha3(particle_fog, 0.03, 0.1, 0.03);
part_type_life(particle_fog, 240, 240);

The code below was taken from the “alarm” event, which triggers the particle effect.

alarm_set(0, time);

var camera_x = camera_get_view_x(view_camera[0]);
var camera_y = camera_get_view_y(view_camera[0]);

var camera_width = camera_get_view_width(view_camera[0]);
var camera_height = camera_get_view_height(view_camera[0]);

repeat(20) {
    var random_y = irandom_range(0, 200);
    var random_x = irandom_range(0, camera_width); 

    part_particles_create(particle_system, camera_x + random_x, camera_y + camera_height - random_y, particle_fog, 1);

Based on my current implementation, the in-game effect is subtle but provides the foundation for more impressive particle effects in the future.

The photo below is of my son and daughter playtesting the new levels and features.

Ninja Caves

In an upcoming release, I plan to overhaul the menu system, recognising my current implementation is very rudimentary.