Wombat Combat engine

A custom FPS engine that uses TrechBroom as its level editor.

The wombat combat engine is a first-person shooter game engine I and 6 other people worked on over the duration of 16 weeks. This engine was made to work on both Windows computers and the PlayStation 5. While working on the project I took on the specialization of engine programmer. My main contributions to this project are related to the loading of level geometry and entity data from TrenchBroom’s BSP files and the implementation of Bullet physics for this project.

My contributions

Quake BSP-level file loading

The TrenchBroom level editor was chosen as the level editor for this engine. This is because designers in our year were using it to create quake levels, this allowed us to make use of their levels to test our engine features. During the project it was my responsibility to implement the feature that allowed us to read the .bsp files that TrenchBroom outputs.

Quake and its levels have a lot of features, of these features the Wombat engine supports the following:

  • The loading and rendering of brush-based geometry
  • The rendering of textures applied to the brushes
  • The rendering of lightmaps applied to the brushes
  • The loading of custom entities as defined in Trenchbroom
  • The loading of brush-based entities as defined in TrenchBroom
  • The loading of trigger areas as defined in TrenchBroom
  • The loading and implementing of event triggers as defined in Trenchbroom

With the implementation of these features, the engine can run interesting and interactive levels in the style of the first Quake game.

Screen shot of a designer made level loaded into the engine

A quake version of sponza made with Trenchbroom playable in the engine

Bullet physics implementation

For the physics of the Wombat engine, the Bullet physics library was chosen. I had worked with this library before, because of this I worked on implementing the library after .bsp file loading was ready for use.

Using Bullet I implemented the following features:

  • The capsule collider for the player
  • The mesh collider for the Level loaded from a BSP
  • Raycasts
  • Trigger boxes that notify connected objects when they have been entered
  • Collision event callbacks to notify objects a collision occurred
  • Collision groups for enabling/disabling collisions between certain groups

Demonstration of debug lines and line traces in engine

Demonstration of door brushes using trigger boxes and the engine’s event system