top of page
Half-Life2Screenshot1.png

Half-Life 2
A Prisoner's Misadventure

Project Summary

Game: Half-Life 2 

Engine: Hammer (Source Engine)

Development Time:1 month

Team Size: Solo

Playtime: 15 min

This single-player level is set in an alternate Half-Life 2 universe where Gordon Freeman is captured by the Combine after escaping Ravenholm. Gordon must find his way out of an abandoned apartment complex area controlled by the Combine army.

Gradient Background

Map Overview

Gradient Background

Design Goals

Gradient Background

Goal 1: Encourage Player Interaction with the Environment

The clever use of environmental object is an a recuring gameplay theme from the original game. In this level, I created a similar experience by encouraging player interaction with the environment.

# 1 Enviromental Puzzle 

Shoot down hanging platform and use it as a bridge to reach another area.

This first environmental puzzle requires the player to shoot down a hanging metal plank to bridge a gap between buildings, introducing the core mechanic of shooting breakable joints to create crossing points.
HangingObject.png

# 2 Combat/Environmental Puzzle 

Shoot down hanging objects and use them as covers

This 2nd puzzle builds on the hanging object mechanic from the previous puzzle, combining it with a combat encounter. The area is purposefully designed with a few small covers to begin with. Players must create their own cover by shooting down hanging containers, which permanently changes the layout of this battlefield and turns a unfavorable situation into an advantage. 
HangingObjectAsCovers.png

# 3 Combat/Traversal Puzzle 

Control moving platform on a battlefield & use it to gain positional advanatge

This controllable moving platform (shipping container) allows players to access the yellow building by using it as a bridge. It also provides cover when approaching the sniper window on the building's upper floor.
MovingObject.png
Gradient Background

Goal 2: Provide interesting ways to flow through space

Maps from Valve games, especially Half-Life and L4D, excel at encouraging exploration and providing memorable wayfinding challenges. I wanted to follow this design principle and create a memorable layout that is fun to explore and play through.

Here are some techniques I used to achieve this goal: 

# 1 Elevation

Creating elevation is a very basic but very effective way to make the flow of the level feels interesting. In this image, I made the player go through multiple floors with 6 elevational changes in a 3-minute puzzle. Looking at the core puzzle loop it’s rather simple – disable forcefield 1 (start at E1) to enter the building’s upper floor (E4), get to the rooftop (E5) to use control terminal 2 & disable forcefield 2, and finally enter the building behind E6. Without elevational changes this whole experience of walking from one control terminal to another could be tedious, but thanks to elevation, wayfinding and mapping a complex environment becomes a challenging and rewarding experience.
elevation.png

# 2 Unconventional Path 

The path to a destination doesn’t need to be a conventional straight road or corridor. In Valve games, it could be anything from a window to a moving train or a hole between walls. In this level I also added a few nonconventional paths to make the traversal experience feel more like a Valve map.
Example #1: An elevated vent that requires stacking crate to reach. Exiting the vent allows the player to ambush the  enemies.
UnconventionalPath-1.png
UnconventionalPath.png
UnconventionalPath-2.png
UnconventionalPath-4.png
Example #2: Break the glass window and jumping out of a seemingly inescapable room.
Example #3: Crossing a narrow wood plank.

Example 4: Stealth attack the enemies using a hole on the ceiling.

UnconventionalPath-5.png

# 3 Loops and Alternative paths

Though Half-life 2 is a very linear game, the game world almost never feel linear while we’re playing through it. One way to break the sense of linearity is to provide players with various alternative paths that allow them to loop around an area through small circles and large circles.

 

AlternativePath.png

Breaking spaces into smaller sections creates more paths and loop, giving players the opportunity to adopt different strategies during a fight. Circling around to find good covers, observing the environment for good position, and attacking from different angles -all of these combat strategies are supported by a layout with loops and alternative paths.

AlternativePath3.png
Gradient Background

Goal 3: Scripted combat encounter that feels like it’s a part of the story

Half-life 2 is full of surprise and memorable combat encounters. In this level, I aimed to create similarly memorable combat moments that surprise and engage the player.

 I managed to achieve this goal by using following elements:

# 1 Use Patrolling AIs to tell a backstory

Here I placed patrolling scanners visible to the player before they enter the combat. They helped with level narrative by telling the story of what happened in this space before the player’s arrival.

Without any text or cinematic moment, the player immediately understands that this location is monitored and controlled by the Combine army after seeing the scanners. 

Patrolling.Scanner2.png

# 2 Smart AI that appears to have agency

Make AIs cooperate as a team

To make enemy AI seem smarter, I put enemies with complementary roles into the same squad. For example, in this area, a scanner and a sniper work together. Scanner is a flying melee enemy that could only blind you instead of doing any real damage. The sniper, on the other hand, is a long ranged heavy hitter, but since he is immobile, he doesn’t pose any threat unless the player has moved out of the cover.

 

As a team, the scanner forces the player out of cover, while the sniper deals damage from long range. This cooperation gives the impression of intelligent AI with strategic agency.

sniper2.png

Make AI "react" to the player’s action

EnemySpawn2.png
Aside from patrolling enemies, most of the enemies are spawned after a trigger condition. I placed the triggers in a way that makes the player see exactly when and where the enemies appear.
 
In this image (Left), the Combine soldiers rush out after the player activates the moving platform, the control terminal is placed in a position allowing the player to see enemy coming out from the opposite building. 
I aimed to make the AI's reactions feel natural rather than scripted. This image (Right) shows enemies rushing to attack after the player deactivates the forcefield, giving the impression they've been alerted.
EnemySpawn.png
Gradient Background

Other Level Design Techniques

Landmark.png

Landmark

This is the final building, designed as a tall, visually distinct landmark. It remains visible from section 1 & 2 of the level, guiding players towards it as their goal. 

Leading Lines

In this area, the wall & fences, the graffiti and the floor trims are all leading lines that point the player’s eye towards the next objective - the ladder.

LeadingLines.png
EnviromentalStory.png

 

Enviromental Storytelling

 I added decorations to make the level feel more alive. Empty corners like this could be used to tell the backstory. The messy trash can and the table with newspaper hint at the location's history before the player's arrival.

Use Lighting to highlight important objects

I used cool and warm lighting contrasts to highlight key entrances and objects. The blue and orange lights enhance visibility by creating a strong color contrast.

Lighting.png
Gradient Background

Postmortem

What went well?

Sucessful implementation

The whitebox was easy to build because the LDD and initial map design were clear. It closely matches my initial vision, requiring no major structural changes or difficult implementations.

Good communication with the stakeholder

I met with my professor weekly, which helped clarify design issues and concerns. These discussions boosted my confidence, allowing me to implement changes more effectively.

What went wrong?

Prioritized narrative over gameplay, leading to overscope

I initially prioritized narrative, aiming to tell a story about Gordon escaping with fellow prisoners. I only abandoned this narrative when I realized there wasn't enough time to script companion AI & design a good combat layout for the NPC squad. Cutting the story earlier would have prevented this overscope.

Optimization starts too late 

I delayed optimization despite its importance, only starting to make func_detail during the aesthetic pass when build times exceeded 30 minutes. I should have prioritized optimization earlier instead of waiting for long compile times.

What I learned?

Letting go of good ideas is fine

If a good idea doesn’t fit the level, I should let it go. A cohesive level with a few strong ideas is better than an unfocused one with many unrelated ideas.

Fix things early so I can test early 

Fix issues early instead of postponing them, even minor ones. Early changes allow for testing and iteration, whereas late changes may have to be accepted due to time constraints.

Do not filter out feedbacks that I don’t agree with

When stakeholders or testers suggest changes I disagree with, I shouldn’t ignore them. Instead, I should understand why they made the suggestion and address the underlying issue even if I choose a different solution. 

bottom of page