Welcome

Here, you can find a mixture of personal, professional and research projects. You can also find more of my work featured on my GitHub or learn more about me and my background here.

I have recently completed a PhD in Human Interface Technology at the HIT Lab NZ and am now based in my home country of the UK, near London. My research focused on using virtual reality for training firefighters, building upon my knowledge gained in previous projects while undertaking a Master's in Computer Science at the University of Kent, from which I graduated with a distinction in 2020. The demo created as part of my Master's dissertation won the “best demo/poster” award at VRST 2021 conference in Osaka, and has now been published as an academic paper. Outside of research, I am focused on continuing to improve my design and C++ abilities, experimenting with 3D graphics and implementing gameplay features from my favourite titles. I also love participating in game jams.

I'd love to discuss job opportunities or network with fellow game enthusiasts and professionals. Please feel free to reach out via e-mail or on social media (links above).

Notable Projects

Select a project below to see more information.

'LeverQuest' - RPG Engine Demo (WIP)
C++, raylib, entt
Personal Project

The objective of this project was to create a vertical slice of a Baldur's Gate 3/Divinity: Original Sin 2-inspired CRPG without using a game engine, such as Unity or Unreal. Instead, I built the engine on top of the low-level 'raylib' library in C++, primarily using raylib for window management and rendering. The goal was to learn how to build systems and tools from scratch, which I take for granted when using large-scale game engines, such as pathfinding, particle systems, visual effects, or serialisation.

In this demo, the player awakens in a cave and must navigate through a goblin cult that has occupied an underground dungeon. The player must repair a lever that opens their escape route through a series of quest chains to leave the dungeon area. Due to this, the demo was dubbed 'LeverQuest.'

Features

Video & Screenshots

Navigate with left/right arrows.

3D Software Renderer (2024)
C++, SDL
Personal Project

A software renderer written from scratch using C++ and SDL. Creating a 3D software renderer has been a challenge I have wanted to tackle since I first started developing video games. But, it also presented an ideal opportunity to learn more about the fundamentals of 3D renderering while improving my 3D maths and C++ skills. A complete "fixed-function" rendering pipeline was implemented, and a maths library and OBJ/MTL parser were written to support it. The project has three scenes showcasing shaded and textured environments with a GUI to select between scenes, shading method, and texture filtering.

Features

  • glm was not used for this project. Instead, I created the following:
    • slib - A helper library. Contains mutliple vector/matrix classes with operators overloaded for convenience.
    • smath - A maths library. Can generate all necessary matricies for the renderer.
  • Model/material loading. ObjParser parses and loads obj files and their accompanying mtl files into the renderable class used by the renderer.
  • Full rendering pipeline. Renderer takes the 3D model data provided as a Renderable and puts it through the pipeline to convert it to screen space coordinates.
  • Z-Buffer implementation.
  • Triangle rasterization. Rasterizer takes the data provided from the renderer and fills the triangle accordingly with the edge-finding algorithm (not scanline).
    • Texturing is implemented and is read from the mtl files provided. (Textures must be png files).
    • Two texture filtering algorithms - either nearest neighbour or bilinear filtering.
    • Two shading algorithms - either flat or gouraud shading.
    • Basic directional lighting.
    • Multiple textures are supported.
    • Texture atlases are supported. Can be used with bilinear filtering if atlas 'tiles' are a consistent size.
  • A GUI that displays the scene's framerate and allows the user to select from various pre-selected scenes.
  • Multithreaded processing thanks to the opm library.

Video & Screenshots

Navigate with left/right arrows.

VR Wildfire Learning Environment (2023)
Unity, VR
Research Project

As part of my PhD, working with industry experts and stakeholders, I designed and developed a custom virtual reality learning environment over a year and a half. I used this environment in two user studies, with over 50 participants, including professional firefighters.

Features

  • In-depth design developed using a framework to synergise learner's preferences and VR's features with task and environment design.
  • Fire propagation based on wind speed, wind direction, moisture level of fuel, and slope inclination.
  • Scripted live demonstrations of fire behaviour.
  • Interactive lessons that allow the user to experiment with different simulations.
  • Randomised quizzes to encourage reflection and reinforcement.
  • In-depth tutorial that covers the environment's controls and tasks.

Video & Screenshots

Navigate with left/right arrows.

VR Security Training (2020)
Unity, VR
Professional Project

This project was created as part of a research project with the University of Kent. The purpose of the VR environment is to teach new security guards the basics of a typical patrol. The environment was designed to test the user's situational awareness and understanding of correct procedure.

The training environment was created using Unity and the SteamVR SDK.

Due to nature of the research project, the source code is not available for this project.

Features

  • Individual persistent user profiles and statistics.
  • Multiple individual randomised hazards.
  • Task management system in which users must complete multiple tasks to complete an object.
  • In-game voice recording and playback.
  • Instructors can record trainee interaction with simulation as a video file and later review.
  • Statistics saved as CSV file for instructors to review later.
  • Tutorial system with Text-to-Speech voice.
  • Inventory system in which users can add and remove virtual objects from the world around them.

Video & Screenshots

Navigate with left/right arrows.

Prop-oriented World Rotation (2020)
Unity, VR
Research Project

Prop-oriented World Rotation (POWR) is an experimental technique to enable games to map objects from the user's physical environment to objects in the virtual world. For example, the user's bed in their room reinforces a crate in the virtual world. This allows the users to benefit from haptic feedback from the virtual world without needing any bespoke prop or device.

A game was developed to demonstrate this technique. The game is a shooter (similar to Time Crisis) where you shoot all the robots to advance to the next checkpoint. Each checkpoint has a virtual object the player uses for cover, scaled and mapped to a physical object in the user's room. The crate object is mapped to the bed, and any door object in the game is mapped to the room door.

This project won the award for best poster/demo at the "VRST 2021" conference as voted for by conference participants.

Features

  • Implementation of "POWR" in a demonstration game.
  • A variety of enemies and obstacles with their own logic.
  • Wave-based shooting mechanics.

Video & Screenshots

Navigate with left/right arrows.

Doki Doki Mouse
Unity
Game Jam Entry

A game jam entry submitted to "8 Bits to Infinity #36 - Mouse Jam 2," with the theme of creating a game that was only controlled by the mouse. I chose to recreate my days of playing old flash games by creating a mouse-controlled "maze" game with a variety of different enemies with different behaviours. Feedback was positive from the community and a was the entry played by a Japanese streamer which is available to watch below.

Video & Screenshots

Navigate with left/right arrows.