>Daniel Kennedy_

Projects

Home Projects Contact

teapot Game Engine

Over the past few months, I have been working on a personal project called teapot. My aim with this project is to create a reasonably well-featured 3D game engine. I have completed a couple of prototypes as a sort of proof of concept, finally completing a usable version in my CMP316 Game Engine Development module. teapot alpha was focussed on model loading and 3D rendering in programmable pipeline modern OpenGL, but I eventually ended up rewriting it into teapot beta because I didn't feel like this version was hugely expandable. The current version of teapot is very focussed on expandability, and I am taking a highly modular approach. The engine is built from a very simple loop and all major functionality is added through DLL modules, making it extremely flexible. Some of the biggest modules I have worked on are a 3D rendering module, a 3D audio module, a networking module using WinSock and an asset loading and storage module.

Caretaker of Maldearg

For the DES310 Professional Project module, I worked as a programmer in a group of 9 to build an isometric 3D puzzle horror game in Unreal Engine 5 called Caretaker of Maldearg. I worked largely in C++, and my responsibility was to create basic game systems that the Blueprint programmers could build from. This included things like the room fade/fade out system, the player movement and inventory, or handing player interactions with objects in the world. I also did a lot of work on lighting, getting the game to perform and look great using Lumen. The itch.io page for the game can be found here.

Genetic Algorithms

For the first section of my MAT301 module I was required to research and implement an AI technique applicable to games. I chose Genetic Algorithms and built an application that would use genetic algorithms to evolve a solution to a ball-throwing problem by iterating generations until the ball hit a flag. This allowed it to find the ideal launch velocity and angle in order to reach the flag, regardless of the terrain or physics system. I created this in my own game engine teapot so I could visualise the results.

DirectX Scene

For my CMP301 Graphics Programming module in 3rd year, I created a 3D scene in DirectX 11 using the programmable pipeline to create procedural landscape on the GPU. This scene also demonstrated lighting effects like shadow maps for different light sources and specularity, as well as some more geometry manipulation through tessellation. A bloom post-processing shader was also applied to the scene.

WinSock Online Game

For my CMP303 Network Systems module I created a game that allows many players to connect to a single server and do things like walk around and build houses. I built this in my own teapot engine using the WinSock-based teaNetworking module for non-blocking client-server networking. A large part of this project was debugging and testing under different network conditions using tools like clumsy.

Dominia Minecraft Server

Over the summer of 2023, I became the lead developer of the geopolitical factions Minecraft server Dominia. For this role, I was required to write a number of plugins in Java using the Spigot API. The largest of these plugins was a custom Factions system that allows players to claim land and engage in diplomacy. Standing at around 10,000 lines of code, this is one of the largest personal projects I have completed, and is only one of the many plugins I have developed for the server. As well as being the lead developer, I also manage the root server itself and set up the entire network on a remote dedicated server utilising software like nginx for web hosting, CloudFlare encryption and attack mitigation and BungeeCord for transferring players between different game servers on the network. You can find the interactive map showcasing my plugin here.

3D Renderer

For my CMP202 module in second year, I was required to write an application that could make use of multiple threads, both on the CPU and GPU. For this assignment, I chose to build a 3D renderer capable of utilising both the CPU and GPU efficiently accross many threads to produce a fast render. While working on this, I learned how to build a 3D rendering pipeline from scratch, first with vertex calculations and then pixel calculations and rasterisation. For this project, I used libraries only for displaying the result and the GUI in a window, as well as a Windows library for accessing the GPU.

PlayStation Vita Game

The result was BTS Tax Fraud Among Us, a game similar to Among Us but themed around catching the BTS member who had committed tax fraud. The framework GEF was originally designed for the PlayStation Vita, so while completing this project I had to implement features like controller support and ensure cross-platform compatability. We also built in-depth and efficient NPC management systems and a Minigame system that allowed the player to complete tasks to find clues.

OpenGL Scene

For my CMP203 project in second year, I was required to create a 3D scene demonstrating a number of rendering techniques in OpenGL. I chose to build a Doctor Who based scene that demonstrated use of techniques like advanced lighting with shadows, the stencil buffer, the matrix stack and multiple cameras. Again, this was all done through code using legacy fixed-funcion OpenGL.

Breakout

For my CMP101 project in first year, I chose to create a version of the Atari game Breakout for the Arduino. I used C with a number of libraries to control different hardware devices including an LCD display, a 7-segment display and a buzzer. I used a potentiometer and some buttons for input.

Asteroids

For my CMP105 project in first year, I made a version of Asteroids using the SFML libraries. This was done again in C++ without a game engine, using the rendering, input and sound elements of SFML. I spent a lot of time on creating a neat UI system as well as a reasonably framerate-independent physics system. Another challenge in this project was the efficient management of dynamic entities, such as the bullets from the rocket and the asteroids themselves.

Suspended Sky

During lockdown, I decided to try out Unreal Engine and basically just dove straight into making a game, learning as I went along. Although I am not 100% happy with how I did things now, I think it was a valuable experience and was the first time I had really finished making a game in a major engine. The game consists of a number of levels that I put together using my own low-poly assets from Blender and the player has to navigate through them with a grappling hook, avoiding obstacles and trying not to fall into the sea that sits below the floating levels. I was inspired a lot by games like Clustertruck and wanted to create something that was satisfying to play yet not too complex. I also used this as an opportunity to experiment with technology like ray tracing.

NPA Level 6 Game

While in 6th year, I chose to do a Game Development NPA college course through the school. As the final project, I created a top-down 2D adventure game in a tool called GDevelop, a code-free 2D game creator. The aim of the game is to complete levels by finding the key in a chest and using it to unlock the next level, while fighting off any potential enemies.