Milo van Pelt - Tools Programmer
Tools Programmer
Wombat Engine
Created in Year 2 with other students at Breda University of Applied Sciences.
Wombat Engine is a custom engine. The engine was designed to handle the creation of a Quake-like first-person shooter (FPS) game. To edit our levels we used TrenchBroom as the level editor for designing Quake levels. The engine was configured to support two platforms: PS5 and Windows.
Engine/Tools programmer
7 Devs
16 weeks
C++
Responsibilities:
Component-based system & Editor (PS5 & PC)
Audio API, using FMOD (PS5 & PC)
AABB and Ray-cast collision (PS5 & PC)
FMOD
Component-based system & Editor
The project has a small component system focused on adding components to game objects and exposing certain properties to the in-game editor. Component data can be saved to JSON or the JSON itself could be edited, before starting the engine and loaded into the editor.
Skills Developed
C++ Development: Gained experience with component-based architecture, templates and managing data types.
IMGUI: Created an in-game editor for real time property adjustment using IMGUI.
Data Serialization: Used RapidJson to manage saving and loading of component data from and to JSON files.
Key Features
Component System Design
Adding Components to Game Objects
Editable Component Data with JSON
The showcase shown above in the video was created using ediitable components.
The component system was designed to differentiate between properties that should be exposed to the editor and those that should not.
I created a base Component class for general use and an EditorComponent class for properties that need to be modified within the in-game editor.
Component.h
The GameObject class includes an AddComponent function, that allows any component (editable or not) to be added to an game object. Each game objects maintains a list of its components and editable components. The function takes a prefix and any other arguments defined in the component constructor. The pefix ensures that properties in the editor are uniquely identified, preventing conflicts when multiple components share property names.
AddComponent function
Editable components support data serialization, allowing you to store and load component data from a JSON file using RapidJson. Data can be saved and loaded, making sure that you can continue where you left off.
EditableComponent.h
Editor in Action (Video)
Here's a short video showcasing the in-game editor. The video below demonstrates changing the assualt rifle component in the editor in real-time.
I start off with 30 bullets and I shoot to demonstrate the speed of the gun.
I then change values for the assault rifle component, in the editor.
I set the fire rate delay lower (0.2 -> 0.1). And set the magazine size to 500 bullets.
When I reload, I now have 500 bullets and I shoot faster, because of the changes made in the editor.
Example of how components are added to the gun game object:
Currently there is not GetComponent function, so to access a components values, you first need to call the component from the game object. For example:
Example of JSON data
Save editor data to JSON (Video)
Load JSON data in Editor (Video)
Editable components had properties set-up. The editor took those properties and dynamically created UI elements for them. In this case for either floats or ints types. This way I don't have to get specific variables , but I just have to see if the type exists.
I used IMGUI to create UI inputs and check if the inputs change, so I could set the data given as the new value of the component that was changed.
An example of data loaded to the editor from JSON and data being saved to JSON from the editor: