The Time Villa
TPS | Made with Unreal Engine 5

This level is a personal project inspired by the Remedy Connected Universe games, such as Alan Wake 2 and Control. You play as a Federal Bureau of Control agent investigating a villa caught in a time anomaly, split between the past and present. Portals let you switch timelines, but only from present to past, and past to present. To escape, you must uncover the correct room sequence while dealing with hostile ghosts trapped inside the villa.

I used Third Person Shooter Kit for basic game mechanics.
Trailer
Software I Used
  • Unreal Engine 5 (Blueprints)
  • Miro
  • Blender
  • Procreate
  • Adobe Illustrator
  • Adobe Premiere Pro
Walkthrough
Work Scope
  • Level design documentation (LDD)
  • Quest flow design
  • Level layout
  • Metrics research & development
  • Blockout development
  • Timeline switch mechanic
  • Encounter design
Screenshots
Design Process
I wanted to create a short narrative game inspired by Remedy’s Connected Universe, especially Alan Wake 2 and Control. The core concept centered on time travel, with different sections of a house existing in two distinct timelines: past and present. To make this work, I designed a looping path that would allow the player to revisit the same spaces across different time periods.
A looping path in the level. Each loop presents the rooms in a different state.
R

The game takes place in an Italian villa. To ground the design in a believable space, I started by gathering extensive references, both from games and real-world architecture. I analyzed levels like Sapienza in Hitman and the "Visiting rich people with poor English" mission in Mafia: Definitive Edition. I also explored pictures of villas build a couple of centuries ago found through auction listings. After reviewing a wide range of images, I narrowed them down and created a top-down layout, linking each room to specific visual references.
An approximate level map with references for each room
R

Next, I focused on the core mechanic, timeline switching. I implemented a system in Unreal that detected when the player entered the past or present, then dynamically loaded the corresponding environment using Data Layers. When the player entered a specific area, the blueprint would load the corresponding timeline and unload what wasn’t needed. Dying would load the previous room and teleport the player there.
Blueprints

Timeline System Blueprint:

This Blueprint tracks when the player enters the past or present, and dynamically loads the corresponding environment using Data Layers. This is the core logic that triggers when the player enters a portal. The Blueprint keeps track of the timeline the player is in and determines which version of the room to load. The appropriate room Data Layer is determined based on an enum sent by the portal Blueprint.

Timeline System Blueprint – Select Data Layer:

I'm using structs and have manually set up an array with the Data Layers for each room. Each room is assigned a number corresponding to its index in the array.

This is the first prototype in a testing level. Its only purpose is to showcase the functionality.
Timeline Mechanic Demo

Timeline Portal:

This Blueprint handles the main portal logic. Each portal is shared between two rooms. It determines which room the player is currently in and what timeline they’re in. Based on that, it loads the corresponding alternate room in the opposite timeline.

Timeline Portal – Determine Next Room:

This function determines which of the two connected rooms to load by reversing the current room data, essentially selecting the other room. It then creates the appropriate struct to pass into the UpdateRoom function in the main Timeline Manager.

Whitebox
I began constructing the level by blocking out spaces without walls. This might seem counterintuitive, but it allowed me to experiment with room layout and player flow without being confined by early decisions. While the open layout looked messy at first, it made it easier to focus on gameplay pacing and spatial relationships.

Once I was happy with the layout, I whiteboxed the level and furnished it with assets. One challenge I ran into was that not all cover objects matched the required 120 cm height, some fit perfectly, while others looked odd when scaled to match.