Dominic Hughes

Dominic.Hughes899@gmail.com

C++ & Unreal Engine
Programmer

Hello!

My name is Dom and thanks for checking out my portfolio :)

( TL;DR for recruiters, I’ve studied Computer Science and Unreal Engine for 4 years, I hope I can impress you with my work😛 )

I’m a huge video & board game nerd, but whenever I’m not playing games I’m coding them!

Since 2021 I have studied C++ programming and built up a strong generalist skillset with Unreal Engine. I’ve worked on countless projects, both solo and in a team. During my university’s game jam I was commended by a fellow student who said: “I’m going through your work and you seriously know your stuff!”

My academic background is an MSc in Computer Science from Wrexham University. During my studies I have strengthened my programming skills. For example, I developed an algorithm to optimise & solve the travelling-salesman-problem for up to 20 stops in less than 10 minutes! (That could take over 7 trillion years for the traditional algorithm to solve on modern hardware). I also studied cyber security, modern database systems, and focused hugely on AI & machine learning. 

I am currently working on my dissertation where I am training and implementing machine learning models in Unreal engine for accessibility through voice control. My aim is to analyse and assess how groundbreaking machine learning technology might be best used in the video game industry. You can see my current progress in the next section.

Previously, I studied a BSc in Theoretical Physics & Maths where I picked up lots of skills relevant to game dev. Computer science was a big aspect of the course; using Python for multiple projects helped me build a basic set or programming skills to work up from, plus 3 years studying physics has given me a very good understanding of 3D & vector maths. 😵‍💫

I have fallen in love with game development. I am always looking to learn new skills and techniques that I can use to develop new engaging, experiences for everyone.

That’s probably enough about me for now. I’ll tell you the specifics about my projects below! :D

Me - Swinging into the games industry in my 2D sidescroller template

Heist Mastermind

Masters Dissertation Project

Deep Learning for Accessibility in Unreal Engine Video Games

Demonstration of ASR working natively in unreal

Full playthrough of Heist Mastermind

This project explores how machine learning and deep learning can be integrated into the Unreal Engine runtime to create an accessibility-focused voice-controlled game experience. The aim was to design a demo game playable primarily through speech, powered by a custom speech-to-command (STC) pipeline.

Automatic Speech Recognition (ASR) in Unreal

Automatic Speech Recognition (ASR) is a well-established area of deep learning, widely used in voice assistants such as Alexa and Siri. While these applications are common, they haven’t been utilised in modern games. My work investigated how ASR can be embedded directly within Unreal Engine to enable natural voice interaction.

In this prototype, ASR was used to transcribe player commands. The system integrates OpenAI’s Whisper, a pretrained speech-to-text model, via the Open Neural Network Exchange (ONNX) format. To run natively within Unreal, Whisper was implemented as a C++ plugin using the Sherpa-ONNX API.

Custom Command Classification

Once transcribed, the text must be converted into usable in-game commands. To achieve this, I developed a custom command classifier in Python. The model builds on the MiniLM-L6 language model, which embeds text into vector representations that capture semantic meaning. A classification layer was trained on a synthetic dataset generated using ChatGPT, mapping natural speech to predefined game commands. For example, the phrase “What’s inside the red door?” is recognized as the command MoveTo_RedDoor.

Integrating this model into Unreal without relying on external services presented technical challenges. MiniLM requires tokenized input, where each word or subword is represented numerically. To address this, I implemented the SentencePiece tokenizer through the tokenizers-cpp library, while the custom classifier was executed inside Unreal via the Neural Network Engine plugin.

The Finished Game: Heist Mastermind

The resulting system was used to build a fully voice-controlled demo game, Heist Mastermind, a short puzzle-based adventure game designed to showcase the STC pipeline. Players watch the game through security cameras and progress by issuing natural spoken commands to their accomplice, navigating through rooms, discovering clues, and unlocking a vault - all without traditional input devices.

The game highlights the potential of speech-driven interaction as both a novel gameplay mechanic and an accessibility tool. By reducing reliance on controllers or keyboards, this approach opens opportunities for hands-free gaming experiences and demonstrates a pathway for further research into accessibility in modern video games.

A full playthrough of the prototype is shown in the second video.

Isolation

Solo GameJam Scavanger hunt game

Trailer

Player Interactions

Player Sprint/Stamina

Overview

As a solo gamejam project I had a LOT of fun building this game from scratch. My initial idea from the theme (isolation) was to build a lighthouse mechanic. I developed a game where the player must find 6 hidden objects but also maintain a lighthouse otherwise a boat will crash and end the game.

Lighthouse Light and Fuel

I began by creating a custom lighthouse actor which consumes fuel over time, and turns off if the fuel runs out. I then designed a custom UI by creating a texture in GIMP then using Unreals UI editor with custom blueprint events that are called in the C++. The lighthouse causes a custom boat to spawn and travel towards the lighthouse and give the player a window to save the game, otherwise this will cause gameover.

Lighthouse Maintainance

I further expanded the lighthouse by adding a Maintainance mechanic, so it would randomly stop working every 90-120 seconds if the player does not maintain the gears. This involved designing a seperate timed interaction function on the character and more custom UI, a “progress wheel”.

Player

I designed an Unreal character, with my own enhanced input mapping. Primarily written in C++, this actor contains all of the Interaction functionality allowing the player to maintain the lighthouse, pickup fuel, and collect the hidden objects (relics). I decided not to create a generalised interaction system as with only 4 interactions intended, I decided to take a more “hardcoded” approach under gamejam time pressure.

As a late addition to the game after playtesting, I added a sprint mechanic and took inspiration from Zelda Breath of the Wild’s stamina system to challenge myself. The player needs the sprint ability to fix things in time, however they must be careful how they use it. Stamina is consumed when sprinting, and if fully depleted will slow the player dramatically. This information is conveyed to the player concisely and subtly right in the middle of the screen using custom UI events and keyframe animations that are called in C++.

Forbidden City

Top-down Stealth Puzzle Game

I worked as lead on this game, with a small team of friends. All of the in game 3D assets are Epic store assets however all of the coding - down to the character movement - was done by me!

When I was making this game I was inspired by old stealth games such as splinter cell, so I wanted a sneaking/stealth mechanic, along with item pickup/puzzle elements.

Working on an “Keycard” pickup and interaction system was my first goal, and by using Unreals C++ interfaces, I built a generalised and easy way to add new things for the player to interact with.

Overview


Puzzles

Sound Clue

I worked alongside a designer who suggested a pressure plate puzzle, where sound cues are the clue. He designed the basic idea, with an inefficiently scripted pressure plate blueprint and light sequencer.

The designer sent me his puzzle which I loved and immediately began building on his prototype in C++. I had to do everything from scratch, but thanks to the interaction system I previously built, everything was very quickly stringed together.

Seperately, the sequencer I made for the puzzle clue can be customised within the editor and can sequence ANY interactable object in the game - such as doors, lights, and search lights. (OR anything else we decided to add! :D)

Colour Clue

Building on the previous pressure plate puzzle, we had a similar idea however using colours and visuals instead of sound. A lot of this process was streamlined thanks to already having a working pressure plate.

However, our idea for the clue involved the player looking through a telescope. Approcahing this problem I decided it was best to build a pawn possesion system. This allows the player to take control of the telescope and look for a clue under a new control scheme. Then easily swap back to the main character after.

This possession system was the best solution for us, as it simplified the debugging process as each pawn was a self contained unit of code.

Dynamic Interaction System

with Contextual UI

Overview

This was an individual project to create an interaction system for a resource management cooking game. Using Epic store assets, I designed and built a robust Pickup/Putdown/Interaction system all in C++, taking advantage of polymorphism to create a generalised parent class for both Ingredients and Appliances.

The system is also designed to be Dynamic, such that depending on the appliance, the interaction will have a different effect. The system is designed such that all interactions can be customised within Code OR Blueprint scripting.

Similarly, a tech designer would be able to create a new blueprint class and fully customise the interaction effects without ever editing the C++, thanks to the polymorphism of the ingredients and appliances previously mentioned.


UI

As well as the interaction system, I also built custom UI using C++ functions in combination with Blueprint.

All the information the UI displays is found in an easily editable ENUM, this allows for the easy addition of new interactions to the UI system.

The Rhythm of the Sea

This was a group project where I did all the programming and scripting. Our goal with this project was to port one of my old projects (seen below) to Unreal Engine 5.

It is a fun little fishing sim with a Rhythm based mini-game. Originally I made the mini-game using Unreals Timeline blueprint but this solution caused performance issues, so I came up with a pure C++ solution which used an array or times the notes should appear and plays them in time with the music.

There are multiple types of fish which should all play different songs, hold different note patterns, and have different monetary values etc. To solve this problem I took advantage of Unreals Data-table system which stored each type of fish as their own struct to be easily accessed at any time.

Custom Game Engine

My custom game engine is one of my proudest achievements. I still consider it a learning exercise because it taught me so much about how game engines actually work and the most efficient ways to use them.

The engine is built on the SFML graphics library and is structured similarly to Unreal’s Actor based system, where everything that exists in the world is an “Entity”. The engine is also able to handle different screen sizes automatically, It has it’s own built in UI system - seperate from entities, and a music/sfx system, all of which you can see in the video.

The game featured is the original incarnation of “The Rhythm of the Sea” and all code involved was written by me.

Advanced Movement Character

An individual project, my goal was to build advanced movement into the default Unreal character class. I was inspired by “The Finals” gameplay and wanted to allow the player to mantle objects and wall-run.

To allow the player to mantle, I found the best way was to fire line traces to check for walls in front of the player which were climable. This lead to small efficiency issues, so I optimised the line trace to only run whenever necessary, and the whole interaction only uses (at most) 2 traces per tick.

Similarly, the wall-run mechanic also uses line traces, but for efficiency, the line trace is only triggered on the first tick of the wall run. At this point the character is locked in place and no more traces are necessary which frees up performance for use elsewhere.

Congratulations!

You’ve reached the end.

Thanks for the time you’ve spent checking out my proudest works, I hope you thought they were cool. 😎

If you have any questions, PLEASE feel free to email me at: Dominic.Hughes899@gmail.com