Wombat Engine
-
Audio API, using FMOD
-
AABB & Ray-cast collision
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.
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.
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.

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 )