top of page

Project Details

Jetpack Joyings is a 3D Side-scroller endless Runner and was made using Unreal Engine, as an individual assignment for my Year 2 Game-Dev module. I originally wanted to create an endless runner similar to Subway Surfers, but with more features like guns and enemies, but I decided to stick with something old school. Jetpack Joyride has been my go-to game since young, and I was inspired by Fat-Dino's recreation of Jetpack Joyride in Unreal. I felt that it was a good opportunity to learn how to use a new game engine, as well as give myself a challenge as a game developer.

Mechanics

The one thing I had trouble figuring out was what mechanics I wanted to recreate, and how would I go about it. After much thinking, I decided to recreate all the obstacles(Zapper, Laser and Rocket), coins, as well as a simple magnet and shield power up.

Zapper

Zappers were these electrical beams that were placed around the game that would kill the player if they had contact with it. There were two main states for the Zapper obstacle: Static & Rotating.

Screenshot 2023-04-21 010718.png

I started off by working on the VFX for the Zapper. I learned how to use Unreal Engine's Niagara Particle System to create the electrical beams between the two spherical points. I was able to create electrical beams, that could change in width, as well as a jittery effect to make it seem like it's electricity.

Just like the game, I used different colors to represent the different states: Yellow for static, and Red for rotating.

 

In the blueprint, I was able to set the endpoint of the zapper so that the beam would fit perfectly between the two spherical balls. This allowed me to randomize the size of each zapper would be different throughout the game.
 

Screenshot 2023-04-21 011033.png

Laser

At random times of the game, there would be a random number of lasers spawned vertically at once and would fire the lasers randomly at different times.

NewPreparingLaser.png
Screenshot 2023-04-21 011848.png

Instead of randomizing the number of lasers that would spawn vertically, I decided to keep it at 5 and just randomized the laser that would fire. I used the electrical beam VFX from the zapper obstacle and tweak it a bit. I was able to make the beam gradually become thicker, creating the "laser fire" effect. 

In the blueprint, when the lasers spawned, a random number would generate from 1-5, and it will randomly choose which laser would fire. The lasers would charge up for 0.5 secs, before firing for 1 sec, and then getting destroyed. Unlike the original game, the lasers would just spawn on the screen instead of having an animation due to time constraints.

Rockets

At random times of the game, rockets will be shot from the side of the screen. There would be an exclamation mark as an indicator, and it will blink and track the player for 5 secs before firing at the last tracked position.

Screenshot 2023-04-21 012232.png

This obstacle was the hardest to replicate. The main challenge I had was tracking the player. Because I was using a perspective camera, the project screen to the world node did not work as how I would expect. This was due to the camera being projected outwards, unlike an orthographic camera, which it will directly follow the size of the screen. So when I spawned the rocket, the position of the rocket was not very accurate. I fixed this issue by having an actor follow the player in the real world and spawned the rocket at where the world rocket marker was.

I made the speed of the rocket dependant on the gameplay time. The longer the player played the game, the faster the rocket went.

Interactables

I had a few interactables in the game such as coins, magnets and shields. I used an interface that had a function OnCollected, which would be called each time Barry interacts with the interactables.

For the coins, I created different shapes just like in the original game, which ccould be spawned on the tile.

Having power ups in the game was a requirement for the assignment, so I made two power ups, a magnet and a shield.

The magnet would attract all the coins in a certain radius of Barry, and would last 10 seconds before it expires. 

For the shield, it could block any obstacle that would kill Barry, removing it instantly. If it doesnt hit anything, it will only last for 10 seconds. I used a fresnal effect for the shield power up to make it look glowy.

Combining all the mechanics together

I had to make all of these mechanics work together, and I had to make sure that they would not clash with each other and prevent the player from having fun.

I made a weighted probability manager, that would properly randomize which obstacle to spawn based on the weight. The heavier the weight, the higher the probability. The weighted probably manager contained a reference to the type of object that could be spawned, as well as the weight of the object. I also added an empty reference as I did not want every tile to contain an item. These items would then be spawned between a random X and Y value inside the tile. 

For the lasers and the rockets, they have a cooldown timer, that exponentially decreases after every cast. At the start, it will get a random number between 40 and 120 seconds, and use that as the starting countdown timing. Each time the rockets/lasers are spawned when they reset, the timings will decrease by .95, making each interval shorter as the game progresses.

Screenshot 2023-04-21 012601.png
Screenshot 2023-04-21 012232.png

I really enjoyed making this game as I could learn a new engine, as well as pick up visual programming. I loved planning out the systems and how to structure them so that they could work together, and I was really satisfied with the result that I got. 

This project helped me receive a Distinction for my module.

bottom of page