My Projects

Made for my dissertation, AutoRhythm is a simple note-playing rhythm game in the style of DDR or Guitar Hero, in which the user can supply any song and have a level generated for it which they can then play.

AUTORHYTHM Screenshot AUTORHYTHM Screenshot

The game itself was made in Unity, with accompanying Python code to deal with level generation. The user supplies an MP3 to the relevant folder, and a level can be generated, played, and saved for future use.

AUTORHYTHM Screenshot AUTORHYTHM Screenshot

This project exceeded my expectations and often generates well-structured levels for songs not featured in any existing rhythm games.

The generation process works by analysing the MP3 file for "note onsets" -the starting points of notes within the track. Each onset is assigned a strength value which indicates the likelihood of a significant change in the audio signal, which is useful as it also essentially indicates how ‘obvious’ the note is. After experimenting with both quantization and ignoring weak onsets to filter out irregular notes, I implemented a system that calculates the mean and standard deviation of onset strengths within a given window around each onset. The game can then selectively include onsets based on their relative strength, filtering out comparatively weak notes in favour of strong, obvious ones, while also allowing weak notes to exist in sections of the track with no strong onsets.

This was a huge and satisfying development milestone. Suddenly, levels felt like they properly matched the songs, with minimal unwanted or random notes. While the project absolutely prioritizes functionality over visuals, it’s a good proof of concept and can work well as a tool in conjunction with rhythm game emulators that accept user-made scores. Countless areas for improvement but I think it's a fun and promising prototype, and I’ve learned a lot from it.

3D puzzle game prototype I made to improve my 3D skills.

Gameplay Gif Gameplay GIF

The player walks around the environment and can fast forward or rewind time to solve puzzles. For example, forwarding time can cause locks to break and trees to grow, while rewinding can cause infrastructure to rebuild and electronics to become powered, all of which can be used to enable progression through the facility.

Gameplay GIF Gameplay GIF

This project is currently a sandbox that I use to test things out in Unity 3D (I've learnt plenty about particles, shaders, lighting, Blender/skinned mesh renderers and Cinemachine that my 2D work doesn't touch on), but I think the concept itself has legs and I'm excited to add more.

Building off of Caption Quest, this is a longer puzzle game following the same concept, made in PyGame and submitted to the Mental Health Game Dev Champions Jam on itch.io.

Carpetman Listener Screenshot Carpetman Listener Screenshot

I designed 24 levels with some new features, such as textboxes with non-walkable borders, beam-activated switches, and eventually the ability to talk yourself. Many levels focus on playing around with the core mechanics in different ways.

Carpetman Listener Screenshot Carpetman Listener Screenshot

I'm proud of the work I put into this game, it was nice to build something from the ground up, refine my level design skills and have time to write significantly cleaner code than in Caption Quest. The design approach focused on pushing core concepts to their limits, and ultimately this led to a few quite confusing yet similar puzzles. I’ve learned that balancing complexity with accessibility is key to maintaining engagement. In hindsight, taking the design approach the other way with a faster introduction of new mechanics and simpler puzzles—something Caption Quest did well—could have enhanced the overall player experience. This project has been a great lesson in striking that balance, and I’m excited to apply these insights to future designs.