My Projects

For a full list of my projects, please visit my GitHub page.

Stardust


Technologies used: C++, SDL2, OpenGL, Box2D, Lua

Stardust is a 2D game engine/framework made with C++20, SDL2, and OpenGL.

It consists of many modules - including graphics, audio, input, physics, filesystem, animation, and scripting.

The rendering is done by batching OpenGL draw calls in order to increase performance. There is a orthographic camera system in place and conversions between world and screen coordinates are possible.

It features positional audio, as well as universal input handling from keyboards, mouses/mice, and game controllers.

Other utilities include custom locale loading, user configuration loading, a scripting interface with Lua, a particle system, animation tweens, and a virtual filesystem created from ZIP archives.

Stardust

Vulkan Solar System


Technologies used: C++, SDL, Vulkan

This is an interactive 3D application that models the Solar System. It includes the Sun, all eight planets, five drawf planets, and Sedna; as well as some moons and rings.

It was made with C++ and Vulkan - which means a lot of boilerplate code was needed to set up the swapchain, framebuffers, and pipelines.

Each planet is an OBJ file, and is loaded with a texture. The Phong lighting model was used to give the planets shadows and specular highlights.

There is also a cubemap of the Milky Way galaxy in the background, and the application makes use of a 3D first-person camera.

Vulkan Solar System

Vulkan Terrain Generator


Technologies used: C++, SDL, Vulkan

This is an infinite procedural 3D terrain generator made with C++17 and the Vulkan API by Khronos. The SDL framework is also used for windowing, creating a Vulkan instance, and other utilities.

The terrain is divided up into chunks, and only the chunks within range are rendered. The application also makes use of a custom-made 3D camera.

The terrain is generated using simplex noise (courtesy of the GLM library). There is also a basic real-time diffuse lighting effect (which gives the terrain its "toon-like" look).

Since this was made with the Vulkan API, it had a lot of boilerplate code - which required an in-depth understanding of low-level computer graphics, concurrent processing, and memory management/pooling.

Vulkan Terrain Generator

Personal Website


Technologies used: HTML, CSS, JavaScript, Semantic UI, jQuery, WebGL, Three.js, Particles.js, Node.js, Express.js

This is my personal website (that you are on now). It exists simple to show off who I am, what my technological skills are, and what I have created with them.

It uses a Node.js/Express.js backend, and the front-end is basic HTML/CSS/JavaScript; powered by jQuery and Semantic UI to make development easier.

The most impressive feature (in my opinion) is the prodecural mesh terrain on the home page. This was made with Three.js/WebGL using my existing computer graphics experience (I have done similar terrain generation before).

The site also demonstrates usage of CSS flexbox, and also includes a Particles.js canvas as well.

Personal Website

StarMaker


Technologies used: HTML, CSS, Sass/SCSS, Bootstrap, JavaScript, TypeScript, React, Node.js, Express.js, MongoDB/Mongoose

A MERN app that allows the user to create stars and planets. The stars/planets are stored in a database using MongoDB.

The front-end is made with React, and the user can view, create, add, edit, or delete the several planets and stars. Bootstrap is also used to help with the styling.

The back-end is made with Node.js and Express.js. The front-end communicates with the server using the Axios API. TypeScript and SCSS are used to make development easier than plain JavaScript and CSS.

The app is designed with RESTful routing in mind, and the server demonstrates usage of MVC architecture.

StarMaker

WorldBuilder


Technologies used: HTML, CSS, JavaScript, Bootstrap, Particles.js, Node.js, Express.js, MongoDB/Mongoose

WorldBuilder is a Node.js application that allows users to create their own planets. The site features a basic user authentication system (using Passport) to allow users to log in.

Planets have specific properties and are stored in a database (powered by MongoDB). Comments can also be posted on planet pages. Users can also edit and delete planets/comments (but only their own, unless they're an admin).

The site demonstrates usage of RESTful routing and MVC architecture. The front-end is basic HTML/CSS/JavaScript, and Bootstrap is used to help with the styling.

WorldBuilder

Voxel Engine


Technologies used: C++, SDL, OpenGL, OpenAL

This is a voxel engine (videlicit, a lightweight Minecraft clone) made with C++17 and OpenGL 4.6. SDL was also used to help with windowing and creating an OpenGL context in C++.

The application generates the terrain using simplex noise in manageable chunks. These chunks can be can be edited by breaking and placing blocks. Each block has its texture loaded from a tilemap.

A significant amount of linear algebra was used to help with the 3D camera, as well as unprojecting the coördinates to place/break blocks (to help know what the camera was pointing at).

The application has a mini game engine built into it that streamlines a lot of the processes of the game - from scene handling, to input, rendering, and object updates.

The engine also includes a custom-made font renderer (using FreeType), the ability to capture screenshots, and has a 3D positional audio system (using OpenAL).

Voxel Engine

Interactive Real-time Whiteboard Physics Sandbox


Technologies used: C++, SDL, OpenCV, Box2D

A real-time application that will turn whiteboard drawings into a 2D physics sandbox.

The application uses OpenCV to access the webcam, and analyses the life feed to identify drawings on the whiteboard; which it then turns into box colliders.

SDL2 is used to render a red ball on another window that will interact with the generated colliders. If it goes below the bottom of the window, it will teleport to the top and fall down again.

Box2D is used for the physics. Ideally, a projector projecting the physics window is used and displayed on the whiteboard, so it looks like the ball is actually interacting with the drawings.

Interactive Real-time Whiteboard Physics Sandbox

Web Tic-Tac-Toe


Technologies used: HTML, CSS, JavaScript, jQuery

A basic Tic-Tac-Toe game made in the web browser. It is all front-end, making use of HTML, CSS, JavaScript, and jQuery.

The game grid is laid out using CSS flexbox.

There are three difficulties: easy (which places randomly), medium (which tries to win, block, or place in the next best cell), and hard (which uses a minimax algorithm, making it unbeatable).

This was just a simple project made to test out my front-end skills before I moved onto back-end technologies.

Web Tic-Tac-Toe

OpenGL Pong


Technologies used: C++, SDL, OpenGL, OpenAL

This is a simple pong game made with C++17, SDL2, and OpenGL 4.6

Although the game itself is simple, the graphics engine makes use of some advanced features.

The game includes screen-shaking postprocessing effects, makes use of a stencil buffer for outlines, and has its own particle engine.

There is also a 3D positional audio system made with OpenAL, a font renderer, and the ability to capture screenshots.

OpenGL Pong

Space Invaders


Technologies used: Rust, SDL

A clone of Space Invaders made with Rust and SDL2. The player controls a spaceship and shoots down a fleet of aliens each level.

The aliens get faster each level, and give the player more points. They can also shoot back at the player.

The game engine architecture consists of a scene queue, and has a game loop that controls all of the input handling, updating, and drawing for the scenes.

The project was made with Rust with its SDL2 port. This allowed me to create a more data-driven style of game engine.

Space Invaders

Rust Snake


Technologies used: Rust

This is just a simple game of Snake, made with Rust.

There isn't much to it - as the snake, you will go around and eat the food that spawns in random locations.

Each piece you eat, the longer the snake gets; and if the snake collides with itself or the walls, it is game over.

I made this a project to get used to the Rust programming language. The Piston library is used for graphics.

Rust Snake

Itty Bitty Apocalypse


Technologies used: C#, .NET

Itty Bitty Apocalypse is a command-line console game made with C#/.NET for the 2018 FloppyJam.

The game is a top-down turn-based zombie survival game. You fight off zombies, collect provisions and other victuals, and try to survive.

It has an event system each day and both melee and ranged attacks.

There are lots of maps and weapons, so there is a lot of replayability despite the game's simplicity.

Itty Bitty Apocalypse