top of page
The Test, July 2023
Project Overview & Responsbilities

The Test is a personal project, it is a first-person puzzle game that focuses on the usage of teleportation to maneuver through spaces. I made the mechanic and the level myself over the course of a month using Unreal Engine blueprints.

What I did
  • Designed and implemented a throwable teleportation mechanic for a first person puzzle game.

  • Created gadgets with various functions allowing for more dynamic gameplay.

  • Iterated on a mechanic over the course of three weeks using references.

  • Took a level from top-down to implementation.

Mechanic Overview
Teleportation

Teleportation occurs under two circumstances. One, the player teleports to projectiles impact point. Two, the player can teleports via an input while the projectile is in flight. Doing so makes the character inherit the projectile's velocity and slows down the player for about two seconds.​

Chaining together teleportation

Interactables

There is a door, a button, a pressure plate, and a coin. The coins act as a collectible for the player to pursue during gameplay. Doors have multiple settings; broken, auto-open/closed, and also be opened using another interaction. Buttons and pressure plates have the same functionality but buttons require input while pressure plates require the player to walk onto them.

A door interaction

A pressure plate interaction

A button interaction

What was the desired experience

My main goal for this project was to make a fun-to-use mechanic. I referenced the Ender Pearl from Minecraft because it fit this criteria. The Ender Pearl has one input to throw and teleports the player when it collides with another object. I recreated the mechanic using blueprints and tweaked it to meet my goal. The biggest addition was the player being able to teleport to a projectile using an input. The result was a simple, fun-to-use mechanic that meaningfully iterated on my reference.

Example of Raze's satchel

How charges are displayed to the player

Teleportation Iteration

The first iteration of the mechanic had the character move to wherever they shot. The goal was to figure out if the mechanic was fun. This prototype revealed a couple of things to me. First, when moving the player they can go through walls very easily depending on where they shot second, the mechanic had some fun but lacked depth.

First iteration

The second iteration I modeled after the ender pearl from Minecraft. I made it a projectile that the player threw and when it hit a surface the player was teleported to that hit location. To add more depth to the mechanic I made is so that, upon input, the projectile would fly towards the ground. From this iteration I took the idea of the player having some control over where they teleport.

Second Iteration

The final iteration of the mechanic I made three changes with the goal of pursuing the feeling of Razes Satchel. The first thing I did was allow the player to teleport to the projectile mid flight, with that change I had to add charges to the mechanic to avoid removing the challenge of gameplay. The final change was adding slow-mo when the player teleported. Since the player was now teleporting mid flight, I thought it would be fun to make it so they could chain together teleports. 

Third iteration

How do we teleport?

This is the base logic for how we teleport the player. We first perform a collision check to see if any objects are in the location that the player will be teleported to. If so we teleport the player, if not we pass out the boolean "Did trace hit" value and continue calling the function until we get a usable location. Once that boolean value reads as false we assume the player is able to teleport without getting stuck in anything so we move the player.

The base logic for teleporting the player

Below is how I get the start and end of the collision check. At the start of this function I perform a trace wherever the projectile was when this function got called. From that trace I get impact normals which I scale for my hit locations and then turn the hit actors into an array. When it comes time to do the collision check I get the start location by adding all my hit locations and wherever the projectile was when this function got called. The end is the sum of all the previous addition plus/minus the capsules half height. 

Using the variables from the initial trace to get the start and end of the collision check

Setting variables from the initial trace

bottom of page