Games Programmer studying at Sheffield Hallam Univsersity
Ever since I was very young, I was enamoured with technology and the inner-workings of machines.
I remember taking apart laptops and Xboxes just to see what was inside
At a very young age, I learned how to
program to further understand how these machines ticked, and I have never stopped programming since!
Exploring and programming idea / challenge that comes to my mind, I love engaging in complex problems and creating
solutions in my head and translating my thoughts to code.
Some of my most favourite things to program are Procedural Generation, Vector and Matrix problems and Shaders!
I grew up in super working class family, barely making enough to make ends meet. I broke out into the games industry off a government misfiling which granted my family extra money to afford a PC, which allowed me to take on programming as a hobby.
Now, I'm a trans programmer hoping to find success in the field, and explore my love for computers!
description aaaaaaaaaaaaa a a a aaaaaaaaa a a aaa a a aaa aaa aa a aa aa aa aaaaa a aaaaaa a
Downloadable
Frontier
Infinite Universe, procedurally generated Space exploration game. Makes heavy use of custom shaders
Unity
C#
HLSL
Probably my most ambitious project, Frontier is a game that was the culimation of my ideas and what I had learned at the time of my A-Levels.
The game features a seeded infinite procedural universe, filled with Systems of Planets you can explore.
There is also an inventory and crafting system with resource collection to help compliment the feeling of exploration.
The mesh generation uses compute shaders and the marching cubes algorithm to create a planet, based on a 3D noise algorithm to describe the shape of the planet.
Surrounding the planet is also an atmosphere shader.
I learned a lot from developing this game, I read and watched a lot of guides which helped me understand how the systems worked, and I learned so much about procedural generation,
and it fuelled the flame of my passion for the subject.
Downloadable
DX11 Engine + MC Clone
A fundamental Minecraft clone programmed with DX11 in C++
C++
DX11
WIP
For University, we were tasked with creating a game in DX11. Since I enjoy challenging myself, and love to program in my free time anyway, I decided to go way above spec and create a 3D Engine from scratch!
At this point, we are expected to make a 2D game with DX11, however since I'd be spending my free time programming anyway, I thought it'd be fun to bundle the two prospects together!
The newest version of the game, showcasing its many features
Engine development started out by reading up on how DX11 handled its rendering methods, and how it handles descriptions. After a few days, I had developed a very basic game engine that allowed multiple objects, each with their own Transforms and models.
I found it realy fun thinking about how the different classes and components should interact with each other within the engine, e.g.:
The engine contains scenes, which contains Object2Ds and Object3Ds. Object3Ds contains Models, which contains a Mesh and references to shader+texture resources.
There's also a bunch of resource management handled, and made easy by the engine.
Video individual objects with textures a single cube with a unique shader. Note that mip mapping was not implemented on the template grass texture at this point.
Continuing development, I decided I had gotten further enough in the engine's progress to being developing a game alongside the engine (to present feature ideas). I spent a few days creating a threaded chunking system to load and unload procedural terrain
The procedural generation is something I am very familiar with at this point, and I had already created chunked voxel world generation a couple of times at this point. However, never have I made it threaded and infinite at the same time! Making this the most advanced voxel game I've made as of far.
Video displaying threaded infinite terrain generation, with chunks loading and unloading
I then implemented player-interation related features, such as the player controller, chunk editing, chunk saving/loading, voxel raycasting, etc.
The player physics are implemented using AABB physics and Minkowski difference collision.
Chunk saving and loading is done very resource mindfully, only reading and writing to the disk when necessary, and storing as much data in memory as possible before it becomes unreasonable.
After around 3 weeks of total development, I'm here, with a very barebones Minecraft clone that I definitely want to take further! There are loads of things yet unimplemented, but it serves as a very impressive tech demo at the moment!
Gameplay of the Minecraft clone, demonstrating scene switching at the start, building/mining, chunk saving, infinite gen, water vertex shaders
Polymon
A Pokémon clone GameBoy game written in C that compiles to an actual ROM
C
Homebrew
During 2022, I developed a bit of an obsession with retro handhelds, and developed a small collection of the things! From this, I was intrigued by the games for the consoles, and how big some of them were despite the limitations of the device.
I decided to research how to develop homebrew for the GameBoy, since it seemed like good fun! I learned how to use GBDK2020, and used my C++ knowledge to program in low-level C for the first time!
Programming in such low level C was a great learning experience and really fun! Since the GameBoy requires much more memory and rom bank management as opposed to C for modern systems. I also had a blast learning about the technical aspects and challenges
developers in the late 80s-90s faced, my greatest interest of which was the development of Pokémon Gold/Silver! The story is very interesting and I could waffle for ages, but I'll spare you!
And so this game me motivation to make a Pokémon clone, and it was great fun! I wouldn't say it's finished, but I did implement a map and battle system the player can interact with!
Cubie
Game Jam game for Brackeys Jam 2021, procedurally generated sky islands, RTS-Sandbox
Unity
C#
Game Jam
This game was made for the first Brackeys 2021 Game Jam in just under a week.
I wanted to undertake procedural terrain and mesh generation as I was inspired by other people's projects of which were inspired by Minecraft.
Up until this point my exposure to actually making terrain and mesh generation was extremely limited and thought it'd be a fun project to undertake.
The general loose "aim" of the game is to recruit more people by bridging across to them and building a town. Like an RTS mixed with Minecraft.
Throughout the project I learned many things, I found a lot of enjoyment from learning about Perlin noise functions and using them to make a generation system to produce floating islands.
The islands are generated by having a ground noise function that is subtracted from an underground noise function to produce island-like structures.
I also learned how mesh generation works, producing lists and arrays of vertices and triangles procedurally to make chunks.
If i could improve and make changes to the game today, I'd implement multithreading for the mesh generation in order to make the chunk generation not lag the game so much, as at the time
I was not familiar with multithreading or GPU offloading.
3DS Minecraft
Minecraft procedural generation programmed for the 3DS using DevkitPro (C/C++)
C / C++
Homebrew
OpenGL*
In 2021, I received inspiration from seeing people online making Homebrew projects for different consoles, and seeing as though I own one myself, I decided the 3DS was a nice
place to start. To take on this task, I first had to learn how to use the 3DS Homebrew Devkit and learned C just for this!
In order to make this project, I had to learn how mesh generation and vertex rendering works at a low level and overcome limitations of working low-ish level on a platform not intended for development.
I am also proud of managing to implement procedural generation into this project, as the levels are generated using a combination of 2D and 3D noise for the surface heights and caves respectively.
Looking back on the project, I would have done a lot differently. There was no proper engine structure, making the code very unmaintainable.
Extended chunk generation would have also been very difficult given the structure of the codebase, and there was no implementation of threading!
Browser Demo
City 3310
Game Jam game for the Nokia 3310 Jam, made to emulate it's visuals in 3D!
Unity
C#
Game Jam
This project was made for the Nokia 3310 Game Jam, but proved to be more of a shader showcase than a game.
The game's theme was related to horde control, of which zombies losely fit.
The aim of the Nokia 3310 game jam is to produce a game that consists of just 2 colours in an 84x48 resolution and single channel mono audio.
There can also only be 11 inputs, none of which can be from the mouse.
I first approached it from developing a shader to allow for visual 3D graphics within such a small screen.
Being restricted by a 84x48 screen is very difficult, so I knew that objects had to be pronounced.
The way I did this was by making an outline shader, contributing a lot to show the general shape of objects and guide the player.
However, this alone resutls in consfusing visuals as it is difficult to see depth.
In order to fix this problem I developed a dither shader that takes the luminosity into a greyscale (float 0.0-1.0) texture and dither that.
The dither was tricky to make as the output had to be a low resolution, yet Unity gave a full-res luminosity texture.
Reapplying the dithered texture results in a combined shader that fairly well pronounces the 3D shape and depth.
This shader was made using the Unity Unlit Shader Graph, of which is a very useful and versatile tool to know how to use.
Browser Demo
3D Scratch Engine
A 3D Rendering engine made in Scratch...!
3D
Engine
Scratch?
Now, if you know what Scratch is, this is a bit of a strange one! Scratch is a learning tool for kids to learn how to code, it only has very basic programming capabilities and is structed like puzzle pieces.
However, Scratch provides an extension called the 'Pen' tool, which allows you to draw lines on a screen... And that's pretty much it!
Using this tool, and a special type of block, you can get Scratch to render vector-ish frames by drawing lines as polygons on a screen. Scratch does not provide any 3D blocks or matrix logic, and so all maths have to be programmed by hand using the
clunkly block code.
The result of a year and half's worth of experimentation resulted in an engine, made by myself, that works entirely within Scratch! (And also made .obj importing to help with modelling)
A question I get a lot about this project is simply; "WHY?" "Why scratch?"
And I'm not too sure why, but I think there's two main reasons;
I really enjoy working under restricted environments, as it requires more creative solutions, and I think that makes it more impressive
Scratch was my first experience with programming, and a large part of my childhood as I spent a long time using it!
And so using the engine I made, I created a Starfox recreation of the first level Corneria! Its not 100% complete, as there are no enemies, however its a fun little tech demo!
Browser Demo
Pirate Game
A procedurally generated Pirate game made for a Game Jam!
Godot
GDScript
Game Jam
After Unity made some questionable decisions and lost the trust of the Game Development community, I saw a Game Jam for adventuring out side of Unity and to other game engines! I took this opportunity to join, and try out godot!
I'd been re-playing Assassin's Creed 4 around the time, and decided to use this as inspiration for a naval combat-based game where you build a crew to gain strength in numbers!
The game features enemy AI logic, naval fights, and an infinite procedurally generation ocean for the player to sail through and fight foes!
I had so much fun developing this, as it was a great learning experience and I was very proud of the result!
This website!
I wrote this website by hand!
HTML
CSS
JS
This very website you're interacting with was developed by myself! I made it by hand writing the HTML and CSS (and a small amount of JavaScript). The site is hosted on Firebase and directed to a domain!
I've used HTML, CSS and JS plenty of times for my own personal projects. Most of which were apps made with Electron and NodeJS.
Downloadable
GameBoy Proc Gen
Wrote a simplex noise function under the 8bit restrictions of the GameBoy!
C
Homebrew
While getting to grips with developing for the GameBoy, I couldn't help but make a procedural generation algorithm for the game! (Since I really like procedural generation...)
This was an interesting challenge since most other implementaitons of noise algorithms were made with floating point maths, which is not an option for the GameBoy, as it cannot use floats.
This meant developing a simplex noise function using only integers masked as a pseudo-fixed-point version.