Wombat Engine: Custom C++ Engine
University Project | C++, ImGui, Fmod | PC & PS5 | 6 programmers | 16 weeks
-
Audio API, using FMOD
-
AABB & Ray-cast collision
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.
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.

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 )