Home || About/Contact || Resume || Articles || LinkedIn
Tools: Unreal Engine 4, Blueprint Visual Scripting, Google Docs, Google Draw, GIT, SVN
Roles: Level Designer, Technical Designer, Scripter, Enemy Designer
Producers: Zachary Saxe, Kyle Patterson, Paul Scardera
Designers: Myself, Chris Johnson, Scott Beecher
Artists: Nicholas Comeau, Angelo Person
Programmers: Vincent Loignon, Hughes Ross, Jason Sidor, Jesse McKinley
Development Period: December 2015 – April 2016
Overview: The Last Light is a horror game surrounding a light-sensitive antagonist that has devoured the majority of people inhabiting a subway complex. Needing to traverse this area, the player can thwart the creature through the use of a shake-powered flashlight, emergency flares found in the area, and the lighting of the environment itself. I was brought on after the game’s pre-production phase, largely because an article I wrote about level design in horror games attracted the attention of the team. The brunt of my work time was spent on re-designing Level 1, designing and scripting Level 2, and communicating with the team’s AI programmer in order to redefine the principal enemy’s behavior.
- Design Sketches, Layout, and Documentation: As usual, I started creating levels by making rough sketches on graph paper of the layout and gameplay obstacles, then transferring those to a digital format and writing supporting documentation for team members to reference. This time around, though, I needed to take into account the existing intent and teaching objectives of the levels, and creating areas that would introduce the player to an entirely new game.This was more of an issue in the first level, which I was tasked with redesigning. Though a level was created for the game’s vertical slice in November, it was designed around the player taking damage when standing in dark areas, as opposed to facing off against an enemy that was adverse to light. After this shift, I was able to create a layout that had a more relaxed pace while introducing the new creature’s behavior, while still teaching the rules that the old layout set out to.
The document I created outlining my redesigned layout of Level 1
I had more creative liberty in the creation of Level 2, including the introduction of a car battery system that lets the player operate electrical systems throughout the game. At the very beginning of the level, the player is introduced to carrying a battery in a safe area and plugging it into a powered door before being asked to solve a more complex puzzle under pressure from the creature. The goal for this puzzle is to power a subway train that will take the player to the next area, which contains a chase sequence that tops off the level.
The document I created detailing the layout and gameplay of Level 2. Major features included the introduction of a battery system, and a chase sequence at the end of the level.
- Blockout and Gameplay Scripting: After discussing with the artists on the team how we wanted to approach the creation of layouts, we decided that the use of modular assets would be the easiest in terms of asset generation and scope. Using these pieces, I created blockouts for both Level 1 and Level 2. The assets created for Level 1 also fueled the layout of Level 2, with Level 2 reusing a lot of the same room types and props in the interest of keeping the art scope as minimal as possible.I also took it upon myself to learn Blueprint, Unreal Engine 4’s visual scripting system, in order to be able to implement Level 2’s gameplay logic myself. During this process, I would ask programmers on the team, as well as our design lead, about best practices when creating blueprints, as well as the best approach for some problems. For example, I needed to be able to check when a battery was placed on or removed from a terminal; after asking a programmer about this, he walked me through how to set up Event Dispatchers in the battery terminal blueprint, allowing me to implement what I was looking for.
A section of a blueprint I created using the battery event dispatchers. This opens a door when at least one of two attached terminals have a battery in them, and closes it when neither terminal has a battery.
- Application of Horror Analysis: I wanted a chance to be able to apply what I wrote about in my article on horror and level design, and proposed to the team that Level 2 end in a chase sequence that serves as a setpiece. Since the setting of the level was a subway command center, I suggested that the chase take place on a moving subway train, with sliding doors between cars serving as obstacles the player would need to clear, and having the whole thing end by having the player uncouple a bunch of train cars behind them. With this clear plan, I was able to convince everyone that this idea was in scope and worthwhile.
This still took a lot of communication with team members and planning to pull off. While train meshes were planned, it was vital to this that the interior of the trains be modeled and traversable. This added to the art asset list, which was still being worked through at the time. In order for them to create this, I had to minimize the number of other assets that needed to be created for Level 2. The artists were also helpful in telling us that we could have scrolling textures applied to meshes, which would help with the illusion that the train was moving during the chase.When the chase in the level occurs, I actually teleport the player to a different train that contains the triggers, scrolling tunnel assets, and navmesh for the monster. In order to make the transition as smooth as possible, I talked with the team’s programmers about the best way to do this. The answer was using a combination of matinee, Unreal’s cutscene creator, to make the train the player boarded move out of the station, and a blueprint that teleported the player once the station was out of sight.
The blueprint I made for the train transition. At a specific point in the matinee, I teleport the player by adding the difference in position between their current train car and the chase train car. This allows the switch to happen without any giveaway shifts in position relative to either car.
Lastly, I needed to talk with our AI programmer about getting some behaviors for the monster implemented for the chase sequence to work. I asked him about getting the monster to be able to slip under the doors of the subway car if they were closed; to accomplish this, he created a volume called a “MonsterLink” for me to place between the cars, which would have the monster crawl along the ground. With his permission, I added a bool to the blueprint, allowing me to enable and disable the volume when the appropriate doors were opened or closed.
The section of the level blueprint I made to enable and disable a MonsterLink volume. If either one of the two doors reference is closed, the volume is enabled, slowing the enemy down. If both are open, the volume is disabled.