Jetpack Journey

Short gameplay cinematic for the project 🎥

Play Jetpack Journey (Windows)

How to install & play

  1. Download the ZIP file using the button below.
  2. Right-click the file and choose “Extract All…”.
  3. Open the extracted folder and run Jetpack.exe.
  4. If Windows shows a warning, click “More info” → “Run anyway”.

Multiple platforms, one trigger

The pressure plate serves as a reusable trigger for activating one or more gameplay objects. Each instance stores an array of target actors, allowing designers to connect any number of platforms without modifying the Blueprint.

When activated by the player, the pressure plate iterates through the array and sends an activation message using a Blueprint Interface.

Each moving platform defines a target position using a Billboard Component. Upon receiving the activation message, the platform interpolates to its destination, making the system flexible and easily reusable across different levels.

Pressure plate activating floating platforms
Checkpoint being activated by a character

The frustration of starting over

One of the levels I have made for the game is long. In order to maintain a sense of progression, I decided to implement some checkpoints along the way.

When the player reaches and overlaps with a checkpoint, a message plays saying “Checkpoint activated”. Behind the scenes a variable called “CurrentCheckpoint” updates to match the location of the checkpoint, with which the player overlapped.

If the player should fall of the map and trigger the lose sequence, they will subsequently respawn at the currently active checkpoint.

In order to avoid several messages, an instance editable bool has been added to the checkpoint, to ensure it only activates once and stays active until another is activated.

Keeping movement patterns interesting

After playtesting the initial level a couple of times, I experienced that platforms going in a straight line either diagonally, horizontally og vertically got slightly tedious to look at.

To combat this issue, I made a new type of platform with an instance editable enumeration (enum). Using UE5’s built-in math library, I defined each enums movement pattern; Sinuisoidal, Orbiting and Figure 8.

Because the movement type is instance-editable, a designer can select a movement pattern directly from the Details panel without writing any code. This makes the system highly reusable while increasing gameplay variety throughout the level.

blueprint logic for moving platform switch statements
kix hitting a hazard mid flight

A shocking development

One issue with providing a jetpack to the player, is that it makes jumping challenges much hard to design. That is why, I decided to add hazards.

The Blueprint uses an enumeration to define the hazard type, while Blueprint Interfaces handle communication with the player. This makes it easy to expand the system with new hazards while reusing the same underlying logic.

I wanted the hazards to feel alive. Electrical wires are brought to life using Niagara ribbon effects, dynamic lighting, randomized ambient MetaSounds, and impact sound effects. To keep performance under control, ambient audio is only activated when the player is nearby.

Keeping the music playing

Without ambience and music, the game felt empty. However, Jetpack Journey frequently restarts levels when the player fails. Restarting the soundtrack every time quickly became distracting, while each level also required its own ambience and music.

To solve this, I created an Audio Level Manager Blueprint. Each iteration exposes instance-editable soundtrack and ambience variables, allowing designers to assign unique audio without modifying any code.

The actual playback logic is handled by the Game Instance, allowing music and ambience to persist across level transitions and restarts. Separating configuration from playback keeps the system modular while ensuring a seamless audio experience for the player.

Blueprint logic for a level audio manager