Back to Home

About the Project

This mod was developed for a second year uni project, the mod involved adding a new puzzle mechanic and adding to the existing train system in Half Life. This mod involved creating a level using Jack Hammer, working in the GoldSrc engine and directly modifying Half Life 1s source code.

The core idea was to extend Half Life’s rail sequences with a fuel-gated progression loop. Players must restore power to a train by sourcing fuel, routing pipes and interacting with valves in order to depart. The work combined level scripting in the J.A.C.K. editor along side engine-side changes compiled into custom DLLs.

Demo Video

Goals and Features

  • The primary goal was to create a 5 minute level that introduces the puzzle mechanic in a way that would feel seamless within the existing gameplay.
  • The puzzle loop was a Fuel-gated train system integrated with existing GoldSrc path_track and func_train logic.
  • There was a secondary focus on diegetic and environmental signage for guidance, allowing me to experience Level Design from a developer's perspective.

Technical Work

  • GoldSrc Engine (Half-Life 1) — Custom C/C++ changes built into client/server DLLs.
  • Level design using J.A.C.K. editor — Entity I/O wiring, optimisation and light pass. The level features scripted events using Half Life's built in entity system.
  • Gameplay - State machine for train power, interacting with fuel sources and classic Half-Life mechanics like enemies, puzzles and environmental storytelling.

On the code side I introduced a series of additions. Starting with tracking the fuel state of the train and introducing a system for managing pipe interactions. The train uses the built in func_train entity to move along a path, meaning my system could be implemented into the base game easily.

Challenges and Solutions

  • The technical limitations of the GoldSrc engine and J.A.C.K editor meant I had to get creative with the mechanics set-up. A lack of built-in support for certain interactions, such as pipe rotations, required a lot of custom scripting and workarounds. Coming up with a method to chain pipes together, allowing the game to know when the puzzle was solved, was a key challenge.
  • Implementing save and load logic with the puzzle mechanics was also challenging as I had to ensure the state of the train and the pipe puzzles persisted correctly using a system I was not familiar with.
  • The most significant challenge and point of failure was working with the limited debugging tools available, meaning I had to work around the lack of real-time feedback and logging. It proved an interesting challenge that required a lot of trial and error.

Role and Responsibilities

  • Gameplay programming in the Half-Life SDK (C/C++).
  • Level scripting and entity logic in J.A.C.K.
  • Blockout, greybox-to-art pass, lighting and iteration.
  • Playtesting and balancing puzzle flow.

Screenshots