Portal 2 Ingredients – Unreal Engine 5

In September 2023, I decided to challenge myself to remake as many ingredients from Portal 2 as I could in 2 days, using Unreal Engine 5.3.

Given this very short timeframe, my intent was not to focus on visuals or polish, but strictly on functionality.

Prod. Schedule

September 16-17, 2023

Engine

Unreal Engine 5.3

my role

Technical Designer

Platform

PC (Windows)

Intentions

I wanted to make prototypes of as many ingredients as I could within my timeframe. My plan was to come up with a way of creating and iterating on new ingredients in a quick and efficient manner. I started by making a list of ingredients, sorting them into two different categories : Interactables and Powerables.

Interactables vs Powerables

Interactables are objects that transmit power when interacted with, while powerables are objects that receive power from Interactables. Here are some examples of ingredients that belong to either class :

InteractablesPowerables
ButtonDoor
Laser receiversLight bridge
Light beam
Gel dispenser

Building a system that allows for fast iterations

Now that I determined the core functionality of these two types of ingredients, I could focus on building the ingredient creation pipeline.

Here’s a flowchart that shows how the system works :

Character abilities

I then started working on the character’s abilities, which would allow me to make the last ingredients I planned to create : buttons, and orange and blue gel dispensers. Making these required the character to be able to carry and drop objects, as well as recognize the type of surface it’s walking on.

Carrying and dropping objects

When the player presses E, the character draws a Box Trace in front of the camera, searching for cubes. If one is found, it gets moved to a target location in front of the player. Then, the cube rotates to match the player’s capsule’s rotation. This allows laser cubes to always land in the right orientation.

After that, the cube gets attached to the player through a Physics Constraint. If the player presses E again, that constraint gets broken and the cube is dropped.

Gels and buttons

To make the orange and blue gels, I decided to create new Physical Surfaces in the project’s settings. The character checks for these surfaces with a Line Trace checking the ground in front of it. Thanks to a switch on Surface Types, I was able to modify the character’s velocity or jump height through its Character Movement component.

All that was left to do was to create the dispensers. They are Powerables, and change the physical surface of the floor underneath them when they receive power.

Buttons are very simple Interactables, transmitting power to a target when they detect a cube being dropped on them.

Full Walkthrough