
Thomas Schinas - Game Design Portfolio
Click a button above to explore my tools and systems!
Dynamic Music Manager
I love music and the way it enhances gameplay moments.
Taking inspiration from recent titles like Octopath Traveler and the Hades series, I wanted to investigate a musically accurate way of transitioning between different parts of music during gameplay.
Through the use of quantization events in Unreal's “Quartz Clock” subsystem alongside a user-defined struct, I created a scalable system to enable a sound designer to enhance the player experience through the game's music.
​
Using a struct and a data table helps to both structure the code and give a sound designer a simple way to scale the system as they see fit. Subscribing to music quantization additionally gives not only the sound designer, but the entire team another set of events to leverage in elevating the player experience to the next level.
This video has sound!
​
Enemy Spawner
For the game Blade of Power, I was tasked with creating an enemy spawner. To make it easier for level and gameplay designers to iterate on encounters, I used the construction script to provide visual feedback when working in the editor. The actor also allows for spawning in a variety of formations.
​​​
While my goal was to create something easy to quickly place into a level and try different combinations of enemy types and formations, we realized the formations were more limiting than helpful.
​
We didn't have time to change during the project, but this experience taught me to have more conversations with the people who are using the tools I create so that they can better serve their purpose.

Crusher
The crusher was created for the game Blade of Power to act as an obstacle/hazard in a level. Because of the short timespan of the project, the level designers hadn't yet agreed on the width of corridors, and so the crusher uses linear algebra to situate itself within a space.
-
Places mesh (the mesh asset was also not yet decided) & adds colliders
-
Finds the center point between the meshes
-
Animates each side to meet at the center point using tweakable exposed variables
-
Start delay​
-
Forward rate
-
Reverse rate
-
Delay after crushing


Creating it in this way allowed total control by level designers. The math calculates the center regardless of the actor's placement and selected mesh making it very easy to use and customize.

Dialogue Component
To study the use of Unreal Engine's actor components and blueprint interfaces, I created a dialogue component that can be placed on any actor, allowing a player to speak with any entity a designer likes.
​
Overview:
-
Player has a component that calls an interaction interface
-
Actors to be acted with implement the interaction interface
-
Actors to engage in dialogue with have a dialogue component
-
The dialogue component contains a data asset with the dialogue info
-
Dialogue info consists of two structs that can be scaled as necessary
-
The HUD handles the rest, reading and updating on-screen information based on the data asset
​​
Another separate goal was to achieve this without the use of casting where possible—all core elements such as the HUD, Game Mode, and Character implement interfaces that return themselves and are called from a blueprint function library.
​
Check it out in action:
I decided to do it this way for a number of reasons:
-
Scalability & data size management
-
At first I thought about using a data table, but learned that when a data table is called into memory, the entire data table is loaded and not just the row you retrieve.​
-
Breaking the dialogue information down into smaller data assets mitigates a possible performance issue when extrapolating to a larger production.
-
-
Ability to "speak" to anything​
-
Because any actor can have a component, this can save on art assets by, for example, allowing a player to "speak" to another character through a door by placing the component on the door of a given building​
-
-
Events​
-
This can easily be extended to tie into a quest or milestone system through calling additional events, making it ​a robust and scalable tool.
-
The largest drawback of this approach is in usability. Creating a data asset for dialogue looks like, well...

It's not pretty, and can be difficult to parse! This system would greatly benefit from a node-based graphical interface that narrative designers could take advantage of, which could then save down to this data asset.
​
That said, for only two weeks of work, I learned a lot, especially about some different uses for interfaces and about data size considerations.
​
This dialogue component is planned to be used in Shards of the Banished, a student project led by Daniel Alvarado. It won an award for Best VFX at Futuregames Awards!