The Wheel of Life
Technical Design

Genre:
Engine:
Time Span:
Role:
Team Size:
Puzzle & Exploration
Unreal 5
1.5 Years
Technical Game Designer
2 Developers
Highlights
Software Architect of Gameplay Systems
Unreal Engine Subject Matter Expert
Contents
​
​
​
​​​​​​
State Trees & Material Functions ​
​
Character Trajectories & Bézier Curves
​​​​​​​
​​
Quick Summary
I built an original video game from the ground up in Unreal Engine 5 to satisfy my love for game development. It represents the culmination of my design and technical skills to date. I wrote 100's of gameplay scripts and put it all together into two levels that make for a cohesive player experience, one that's complete on its own and could be extended to a full-length, commercial game.
​
Unbounded by any technical or skill-based constraints, I made extensive use of the Gameplay Framework in Unreal Engine, going between Blueprints and C++ where necessary. With an eye for software architecture throughout, the tools and systems I built remain flexible, extensible, and sound.
​
My knack for designing puzzles, with intuition tempered by competitive analysis and statistical playtesting data, made for a successful project that I have high hopes for going forward.​
Development Timeline
Months 1-2
Month 3
Months 4-8
Months 9-15
Months 16-18
Inspiration & Planning
Proof of Concept: Core Gameplay
Experiments: Secondary Gameplay
Alpha: Functionally Complete
Beta: Game Demo Complete
Puzzle systems invented.
Game direction established.
Puzzle systems prototyped in engine.​
Breadth and sustainability of puzzles confirmed.
Complementary gameplay styles tested & identified.​​
Thematic and artistic direction established.
Fully playable from start to finish.
Gameplay systems completed.
Addressed feedback from alpha playtests.
Refinements & polish.
Innovations
Innovation #1: EQS and Placeable Candles
The game lets its players put candles in the world permanently for other players to see.
The Environment Query System was leveraged to prevent problematic arrangements.
Unreal Engine offers the Environment Query System for multithreaded spatial location sampling and evaluation.
While typically used for AI spatial queries, it was perfectly equipped to handle my unique design problem:
​
-
Players should be able to place candles anywhere they would like as a reward.
-
However, since candles are public and permanent, we needed to guard against inappropriate patterns.
​
To solve this, I came up with a querying algorithm that lets players place candles in any general vicinity, while constraining them to calculated positions that change depending on other candles already placed nearby.
​
This approach on its own solves the problem. Coupled with limits on candles and asking players to be respectful, it's a system I would be more than comfortable publishing to the world.
Generating the Points: Env Query Generator
Global Network Conformity, Designer Control, and Natural-Looking Point Geometry
The class that generates the point locations resolved these tensions in the design requirements:
​
-
Points needed to be generated around wherever the camera was pointed.
-
Yet the points were never to shift around, no matter the camera's orientation or spot it was pointed at.
-
The points should appear on a grid with parameterized size and spacing.
-
Yet the points needed random but consistent offsets to avoid unnatural grid-like patterns.
-
Points needed to be generated automatically under the hood.
-
Yet some designer control was needed to define areas to include / exclude and valid slope angles.
Filtering the Points: Env Query Tests
Perlin Noise and Context Responsiveness
With the candidate points generated, the EQS system just needs Env Query Tests to pick the best one.
I wrote two Env Query Tests in C++ to assist with this:
​
-
EQT_CountContextObjectsInRange - Scores each point based on the count of nearby objects of a type.
For this Env Query, this was used to prioritize candle positions further from existing candles.
-
EQT_Random_BasedOnWorldPosition - Scores each point based on its world position, using a Perlin noise function for smooth randomness and total consistency each time the test is run.
The Completed Environment Query
The query results have the following properties:
​​​
-
Tends to prefer points farther away from other candles, preventing harmful patterns.
-
Only points on the navmesh are valid to allow designer control and fine tuning.
-
Candles respect a minimum distance from each other so that they never overlap.
-
The algorithms that determine where candles can be placed are completely deterministic.
-
Despite these constraints, players always have many options for candle placement.


Note: For the purposes of the game demo, online functionality was left unimplemented.
By design, only an occasional Push / Pull request is necessary, not full multiplayer networking.
Innovation #2: Novel Use of State Trees and Material Functions
Gameplay Ability: Might of the Ancients
Broad knowledge of Unreal Engine's gameplay framework let me use it in unexpected ways.
_gif.gif)
Gameplay State Trees for player-controlled, moving objects
While typically used for AI characters, State Trees provided a clean and friendly way to organize the logic driving those moving objects that the player manipulates.

Decal material parameters driving the visualization
Radial slices, interleaved procedurally, gave the exact visuals needed to convey information.



Innovation #3: Fitting Bézier Curves to the Character Trajectory
Gameplay Ability: Light Bridge
The game constructs a spline path in front of the player, anticipating their travel.
It leverages Unreal Engine's Character Trajectory Component and Blueprint Splines.

Blueprint Graph
If the widget is not working the Blueprint can be found here: https://blueprintue.com/blueprint/e4xrt4wt/
Postmortem
What Went Well
-
Subject Matter Expertise in the Unreal Engine Gameplay Framework allowed me to leverage engine features efficiently, effectively, and sometimes unexpectedly.
-
The core gameplay prototype was successful. It was clear right away that the puzzle system was worthwhile.
-
My fluency with Blueprints made implementation of 100s of gameplay scripts smooth and enjoyable.
-
My proficiency and willingness to write C++ made the project unlimited by surface level features.
-
Art collaboration was a blast. I commissioned a collection of 3D models from a colleague. We worked together effectively, as I played my part in setting the art direction, drawing schematics, and giving iterative feedback.
-
Understanding of good development processes and milestone order gave ample time for both experimentation and polish, and a seamless transition between the two.
-
An eye for software architecture throughout made for scripting that's flexible, extensible, and parsimonious.
What Went Wrong
-
Audio did not make it into the game on the original timeline.
-
The sublevel loading system needs to be rewritten. As of its initial implementation, it relies entirely on synchronous loading and only works in packaged builds or standalone, not Play In Editor.
-
It was sometimes difficult to get playtesters to commit to a full hour-long game. As the game gets even longer going forward, I may need to get more industrial about conducting playtests from paid QA people.
What Was Learned
-
From competitive analysis, accessibility to the point of boredom for some players outweighs the excitement of a quick onramp for more experienced players.
-
I made extensive use of Unreal Engine's material functions for the first time to accomplish critical game design goals related to conveyance and player feedback. This is a powerful tool going forward.
-
From competitive analysis, simplicity & usability often outweighs complexity & depth, even in puzzle games.
-
I learned the amount of dedication and sacrifice required to make a game of this fidelity as a personal project on top of other professional and personal commitments.
Photo Gallery



