top of page

Wombat Engine

Project Type: Team/University Project

Software: C++, ImGui, FMOD 
Platform: PS5, PC

Role: Engine/Tools programmer​

Team Size: 18

Duration: 16 weeks

Project Overview

Wombat Engine is a custom engine. Created in year 2 at BUAS. The engine was designed to handle the creation of a Quake-like first-person shooter (FPS) game. The engine was configured to support two platforms: PS5 and Windows.

My main contribution was designing and implementing a real-time editor that allowed developers to inspect and modify game objects while the game was running. I also worked on the audio system, using FMOD for audio playback, and developed collision detection using AABB and ray-casting.

tools.png

Skills Developed

  • C++ : Worked with component-based architecture, templates and managing data types.

  • ImGui: Built an in-game editor for editing components in real-time.

  • Data Serialization (RapidJson): Implemented saving and loading of component data to/from JSON files.

  • Collision: Developed AABB and ray-casting collision detection for both PC and PS5.

  • Audio (FMOD): Implement audio API with FMOD for audio playback.

cog.png

Highlighted Feature

Real-Time Editor

Using ImGui, I built a user interface that exposes game object components and their properties in-engine.

This allows engine users to quickly modify variables in real time, and save or share values. Developers can:

  • Add and remove components trough code.​

  • Modify component values during runtime.

  • Save component data to JSON file.

  • Load component data from JSON file.

Screenshot 2025-07-25 212653.png

Editor in action: changing fire rate and bullet amount is instantly updated 

Object Editor UI: Shows editable components of the chosen game object. As well as an option to save or load JSON data to a file.

Component System Design

Wombat Engine uses two component classes. One for base components for regular components that aren't exposed to the editor, and an editable component for properties that can be modified in-game. This keeps editor specific logic separated.

Code: Base Component

Code: Editor Component

Adding Components to Game Objects

To simplify adding new functionality, each game object includes a AddComponent function.
This allows developers to attach any component, while keeping names unique trough prefixes, preventing conflicts when multiple components share similar attributes.

Code: Add Component Function

Code: Adding component to game objects

Editable Component Data with JSON

Editable components support data serialization, allowing component data to be stored and loaded from a JSON file using RapidJson. JSON was chosen for its easy readable format, making it easy for potential developers (and me) to inspect, modify and test component values.

Changing JSON data and Loading JSON data in Editor

Changing editor data and saving it to JSON file

Code: JSON data example (file )

bottom of page