Prefab Service
Need: Create towers, upgrades, and behavior combinations without duplicating C++ setup.
System: Register and instantiate reflected prefabs directly from JSON, including game objects and composable Actions.
Bloons TD5 is a tower defense game where players place and upgrade monkey towers to stop increasingly difficult waves of Bloons. Success comes from placement, timing, upgrade choices, and adapting to new enemy types.
This recreation was made by a team of six on the custom, data driven C++ engine I built. I personally owned the systems that turned familiar design needs such as tower placement, targeting, paths, and upgrades into reusable content authored through JSON.

Each system started with a practical design question, then became a reusable part of the engine rather than a one-off solution.
Need: Create towers, upgrades, and behavior combinations without duplicating C++ setup.
System: Register and instantiate reflected prefabs directly from JSON, including game objects and composable Actions.
Need: Make tower placement feel predictable and keep towers off paths and blocked terrain.
System: Generate grid dimensions from resolution, mark invalid cells in a lightweight authoring mode, save them, and query the same data at runtime.
Need: Give every Bloon a readable route while making new paths easy to author.
System: Define paths as ordered node lists and inherit from a path follower component to reuse movement behavior across Bloon types.
Need: Let towers find useful targets without searching every active object.
System: Reuse the grid as a spatial index so a tower can query nearby buckets, then apply its targeting rule to a smaller set.
A tower defense game can place many towers, projectiles, and enemies on screen at once. The collision system needed to scale with that density.
A brute force pass trends toward O(N²), even though most objects are nowhere near each other.
Each frame, colliders are placed into the grid cells they overlap. Collision tests happen only within relevant buckets, while a seen set prevents duplicate pair checks across neighboring cells.
The same service preserves enter and exit event semantics while reducing unnecessary checks. That supports gameplay scale without forcing towers or projectiles to know how collision is optimized.


On this six person recreation, I used the reflection, content, factory, Action, service, and memory architecture from the solo C++ engine I built. This page isolates the gameplay systems I personally designed and implemented.
.exe file.