High school capstone project · 2020

Lutsip LS3D Editor

A custom level editor for Hidden & Dangerous 2, powered by my own C# OpenGL-based 3D engine, developed as part of my high school capstone project.

The project required an in-depth analysis and partial reimplementation of the original game engine, as no official modding tools or documentation were available. Over the course of a year, I reverse engineered most relevant file formats and built an editor for creating and complete editing of game levels.

While some tools already existed, they lacked a 3D view and supported only a limited subset of features, making it effectively impossible to create new levels or significantly modify existing ones. The editor significantly improves the modding workflow, allowing creators to design levels in a more intuitive and efficient way. Its release marked a new era for Hidden & Dangerous 2 modding.

Technical insight

Working on Lutsip provided practical experience with real-time rendering techniques used in older game engines, such as the LS3D Engine.

The project involved implementing and understanding core concepts such as:

  • Scene graph
  • Gouraud/Phong shading
  • View frustum culling
  • Sector/portal/occluder occlusion culling
  • Uniform spatial grids for collision detection
  • Lightmapping
  • Morph target animation

Many modern rendering systems still rely on these techniques, often in evolved forms.

Key features

Editing workflows

  • Scene editing Models, lights, sounds, particle effects, and other objects, including collider creation or creation of animated paths for cameras and aircrafts
  • Actors and AI Assigning 25+ actor types, including characters and vehicles; editing character inventories and AI navigation waypoint grids
  • Graphics effects Configuring animated water, volumetric lighting, vegetation, and other special effects

Tech stack

Tools and their roles

  • C# Implementation language
  • OpenGL Rendering
  • OpenTK OpenGL bindings for C#
  • Windows Forms User interface with mostly custom-drawn components using GDI+