top of page

Wombat Engine: Custom C++ Engine    

University Project | C++, ImGui,  Fmod | PC & PS5 6 programmers | 16 weeks

Project Overview

Wombat Engine is a custom C++ engine built to run a Quake inspired first-person shooter on both PC and PS5.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, and save or load those values to JSON. 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.

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.

ImGuiUtils: A utility file for building the real-time editor. Common ImGui elements like tabs, dropdowns, and collapsing sections are each wrapped into a single function call, so editor code stays clean and the setup logic doesn't need to be repeated every time a new section is added.

Code: ImGuiUtils (ImGui Utility functions)

Example of ImGuiUtils being used to create collapsing header for the name of the component. 

Code: DisplayEditableComponents

Code for generating editable component data. Reads the editable properties of a component (based on the component chosen in the collapsible header) and automatically builds the correct input fields for them in the editor. When a value is changed, it updates both the component and the saved data file straight away.

Code: Generate Editable Component Content

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 )

  • LinkedIn
  • GitHub
bottom of page