Parcels
Date: 2021-09-01
Last Updated: 03-04-2024
Parcels is a 2D Point and Click Adventure Game with Visual Novel elements. I was the technical lead of a team of 4 programmers in a group of 8 people (2 designers and 2 artists).
My main role was designing and implementing the core architecture of the game engine, other than assigning tasks and managing the overall state of the engine’s implementation, as well as serving as the communication bridge between the other teams in our group.
Architecture and Features
I was responsible for building the following systems.
Component System
Core object architecture system heavily inspired by Unity’s component system.
Implemented using good old inheritance, with some C++ templating and meta-programming tricks sprinkled in between.
Seemed to work well for a 2D game.
Scripting
C++ Native scripting inspired by Unity’s MonoBehaviour classes. This feature went through a few iterations due to changing requirements and time constraints: Starting with Lua, then transitioning to Mono C#, then finally C++ scripting.
Serialization
Binary Serialization system, there was an attempt at JSON serialization alongside, but the cost of maintaining two systems was eventually deemed to not be worth it.
In hindsight, we should have started with JSON, as visually inspecting scene files in binary format turned out to not be a very human-friendly prospect.
Reflection
To make things easier for everyone working with components and game objects, a reflection library was integrated with much effort, which you can find at: LIONant properties on GitLab. It makes heavy use of C++ macros, std::variant as well as std::visit to iterate through properties.
Message Bus
I like decoupling things, which is why I coupled the message bus into everything.
A simple global message bus/event system that I heavily abused and overused for convenience.
Debugging
The usual logging systems, frame time profiling, etc.