hesperus 3D Game Engine

hesperus is a 3D game engine I wrote to complement the Shipwreck map editor. Technology-wise, it is based on binary space partitioning (BSP) trees, and makes use of a variety of techniques that were popularised by id Sofware’s Quake series of games in the mid to late 1990s.

  • A complete level compilation toolchain (BSP compiler, portal generator, visibility calculator, lightmap calculator, brush beveller, collision tree compiler and automatic navigation mesh generator).
  • Continuous collision detection between (a) objects with extent and the world (using a Quake III-style collision BSP approach) and (b) pairs of objects (using the XenoCollide algorithm).
  • Proper player movement that makes appropriate use of the navigation mesh and its links and reacquires the player’s position on the mesh after jumps.
  • Animated non-player characters that can carry other objects. The modelling, rigging, skinning and animation was done in Blender. Interpolation of rotations (represented as quaternions) between keyframes was implemented using spherical linear interpolation (slerp).
  • Pathfinding for non-player characters. (I was starting to implement local steering control when the writing up of my DPhil intervened.)
  • Scripting language integration. (I wrote a small wrapper library to make it easier to use a relevant subset of AngelScript from C++.)
  • Haunting homemade menu music. (Its haunting nature was unintentional. I’m not a composer.)
Other Screenshots

Relevant Articles
  • Object-Environment Collision Detection using Onion BSPs. Overload 118, pages 10-15, December 2013.
  • Automatic Navigation Mesh Generation in Configuration Space. Overload 117, pages 22-27, October 2013.
  • Simplifying the C++/AngelScript Binding Process. Overload 95, pages 19-23, February 2010.
  • If You Can’t See Me, I Can’t See You. Overload 90, pages 12-17, April 2009.
  • Through the Looking Glass. Overload 89, pages 14-19, February 2009.
  • Divide and Conquer: Partition Trees and Their Uses. Overload 86, pages 24-28, August 2008.
Source Code


University of Oxford