top of page
  • Role: Level Designer

  • Game: Half Life 2 - Episode 2

  • Engine: Source SDK/Hammer

  • Genre: Flying Shooter

  • Development Time: 3 months/2015

  • Game Type: Single-player

  • Designed and built the level to shippable quality, focusing on “pushing the envelope of Half Life gameplay"

  • Heavily focused on scripting (Hammer’s Entity-based, visual scripting)

  • Documented and conducted playtests sessions for iterative evaluation

Level Overview

“Ride the Shark” is a single-player level for the game Half-Life 2, where players experience a 3D flying shooter, controlling Gordon Freeman on board of the airship recently created by Black Mesa: Space-shark. It takes place during the timeframe of Half-Life 2: Episode 2, following its setting (countryside, mountains, pinewood forest). In “Ride the Shark”, players must use the flying vehicle to defend Black Mesa’s research facilities, fighting against Combine units and avoiding obstacles such as cliffs and bridges. They must destroy waves of the enemies that come to the area, guaranteeing its safety.

  • Create a different kind of gameplay – 3rd person-perspective, flying shooter – than Half-Life 2, while keeping the same action-oriented, fast-paced style of the original title

  • Create a dynamic gameplay through challenges that involved avoiding obstacles, dodging enemy fire, and shooting enemy units

  • Reuse the same playable space under different perspectives, making it feel and play different, while giving the player a sense of progression


The map overview shows the circular aspect of this level: players fly through different heights, circulating the environment, while avoiding obstacles and fighting waves of enemies. Each wave has a certain number of enemies that players must kill in order to progress (goal). Moreover, waves have a random spawn system, guaranteeing that, for every cycle, it is not possible to predict with 100% of certainty where enemies will come from

Click on the map for more information about the waves 

Flying Shooter Gameplay

Creating an action-oriented flying shooter game (on rails) that gives players the sensation of empowerment and excitement (thrill of the ride) moving across different path heights was very challenging. Half-Life 2 does not really have any native support for that kind of gameplay. Thus, I had to build several different features in order to accomplish the intended gameplay, such as the flying and shooting systems, the wave system, as well as, enemies’ behavior and reactions to player’s gunfire

Feedback for shooting:


A major goal for this level was to make shooting and flying feel good within the editor/game restrictions. Regarding that, playtests showed it was not possible to trust completely the shooting radical (crosshair), as it did not seem to correspond to the actual direction of the bullets. Moreover, the editor did not provide the resources to fix that properly in the given amount of time. To around that issue, I added two crosshairs indicating a closer and longer distance, as well as, a ‘target in range’ feedback, signaling when enemies resided within range – crosshair turned to red.

Flight control: 


I also added the possibility of toggling between low/high speed, allowing players to better control their movement throughout the level. In terms of flying, playtesters complained about the ship movement’s vertical limits, pointing out they felt artificial – it is not possible to go all the way down, when in the high path, neither all the way up, when in the bottom path. Although the designer acknowledged those issues, that limitation was necessary to add to the variety as it forced player to experience the same areas from different perspectives.

Player Communication:


Building this level involved a big challenge related to player communication: the subtlety of Half Life 2 feedback system for enemies damage was not enough to provide players enough information about their actions in a flying shooter context. They could not tell whether they were hitting enemies or not. Hence, I added a blinking red feedback for both player’s ships and enemies, indicating damage. On top of that, gunships start smoking once they reach low health, while striders catch on fire, under the same circumstances.

Reusing Playable Space

One of the biggest challenges of this level was to create a compelling experience, with the right balance between sense of progression and difficulty curve. Given the project’s scope, it was not possible to create a linear level that could encompass the needed gameplay time – it would have to be huge to accommodate the right difficulty progression. Because of that, I decided to create a circular path (‘8’-like shape) which allowed players fly through the same space several times, while having the same experience in different ways – different obstacles. Moreover, the chosen aesthetics (countryside, mountains, pinewood forest) also provided enough freedom to design different obstacles that made sense in the environment.

8-shaped Map - Gameplay

8-shaped Map - Gameplay

8-shaped Map - RTM

8-shaped Map - RTM

Double edged sword:


Although the circular level layout solved the flow issue, it also created new challenges: reusing the environment, while making loops that were different enough from each other, as well as, giving players a sense of progression in terms of both story and gameplay. That led to a map with two different path heights, combining players flying through the space in both directions (similar to clockwise and counter-clockwise). 

Mixing different heights with both flying directions gave players a variety of approaches, making the same environment be a different experience as players flew across it. WOW moments of transition also entertained players while giving them a better sense of reward and variety.

Difficulty Curve

In terms of gameplay difficulty, I defined an increasing challenge curve, tied to story progression, using short dialogs, enemies, and obstacles. As playtest sessions revealed, initially, players did not know if they were doing right and progressing through the level. In order to fix that, I added “Dr. Kleiner” (an original character from Half Life 2) to the story, talking to players via radio. His dialog lines served the purpose of both giving instructions, as well as, providing a sense of progression, by telling story bits. These story beats worked as rewards (positive feedback), giving players background and indicating advance in the level. “Dr. Kleiner” had lines for every wave, pointing out when a new wave would start, its midpoint, as well as, its end.

Mini Postmortem
  • Fun final product

  • Pushed the box successfully

  • Professor guidance

  • Level performance/framerate was very high

  • Initial analysis paralysis

  • Overscoped project and, consequently, crunch

  • Early playtests did not contribute much to the project

  • Level difficulty curve is still steep

  • The importance of well scoping your project

  • Hammer powerful visual scripting tool

  • Make decisions early and go with it

bottom of page