Portfolio
Python |
|
Final Year Project - StarCraft 2 Neural Network AI
For my final year project, I created a neural network in the form of a bot and AI for the game StarCraft II. The purpose of this project was to design and develop a neural network-based AI capable of competing against the game's built-in AI. In 2017, DeepMind and Activision Blizzard collaborated to release an API that allowed players and developers to interact with the game programmatically. I utilised this API as the foundation for integrating my neural network with StarCraft II.
The neural network was developed using Python and trained over an appropriate period to optimise its performance. Once the training phase was complete, the bot was tested against the in-game AI to evaluate its effectiveness and capabilities. The primary goal of this project was to explore the potential of neural network-based AI in gaming and to determine whether it could outperform traditional game AI systems.
The idea for this project stemmed from my interest in the application of neural networks within the realm of game AI and the broader implications of such integrations for the future of artificial intelligence in gaming. Through this project, I aimed to gain insight into the comparative strengths and weaknesses of neural network-based AI versus traditional game AI.
DOWNLOAD
The neural network was developed using Python and trained over an appropriate period to optimise its performance. Once the training phase was complete, the bot was tested against the in-game AI to evaluate its effectiveness and capabilities. The primary goal of this project was to explore the potential of neural network-based AI in gaming and to determine whether it could outperform traditional game AI systems.
The idea for this project stemmed from my interest in the application of neural networks within the realm of game AI and the broader implications of such integrations for the future of artificial intelligence in gaming. Through this project, I aimed to gain insight into the comparative strengths and weaknesses of neural network-based AI versus traditional game AI.
DOWNLOAD
Godot |
|
Eldritch Invoker - Godot Port:
After participating in Ludum Dare 55, I became interested in exploring the Godot engine and decided to port Eldritch Invoker, a game we had originally developed in Unity, over to Godot. This transition allowed me to learn more about Godot's unique features and capabilities while reworking and enhancing various aspects of the game.
Without the time pressure of a game jam, I had the freedom to fully implement many of the features that were initially planned but had to be cut due to time constraints. These included:
Overall, the porting process allowed me to build on the foundation laid during the game jam, creating a more polished, feature-rich version of Eldritch Invoker with improved mechanics and player engagement. The shift to Godot not only enhanced the game's technical quality but also opened new avenues for experimentation and refinement.
Without the time pressure of a game jam, I had the freedom to fully implement many of the features that were initially planned but had to be cut due to time constraints. These included:
- Settings menu: Providing players with greater control over game options and preferences.
- Damage multiplication on additional affixes: Adding more depth and strategic variety to the combat system.
- Blocking & Shield ability: Introducing a defensive mechanic for players to counter enemy attacks and add a layer of strategy.
- Elemental affix attacks with cooldowns: Allowing players to use elemental attacks with cooldowns, introducing more tactical decision-making.
- Improved UI and player feedback: Enhancing visual and auditory cues to make gameplay interactions more intuitive and satisfying.
Overall, the porting process allowed me to build on the foundation laid during the game jam, creating a more polished, feature-rich version of Eldritch Invoker with improved mechanics and player engagement. The shift to Godot not only enhanced the game's technical quality but also opened new avenues for experimentation and refinement.
Rougelike Maze Generation:
I created a roguelike maze generation system in Godot with the goal of making it modular enough to be easily integrated into any new Godot project as a starting point for dungeon or maze-based games.
The system uses a walker algorithm to navigate through a grid of tiles, gradually carving out walkable paths. By making use of Godot's tile map system, the generated maze consists of tiled paths that can be easily customised for different game styles. The system also places enemies and items within the generated rooms, ensuring that there is sufficient space for them to fit without overcrowding the area.
Designed for flexibility and ease of use, this maze generation system can be quickly adapted and customized, making it an ideal tool for developers looking to add roguelike-style mazes to their projects.
The system uses a walker algorithm to navigate through a grid of tiles, gradually carving out walkable paths. By making use of Godot's tile map system, the generated maze consists of tiled paths that can be easily customised for different game styles. The system also places enemies and items within the generated rooms, ensuring that there is sufficient space for them to fit without overcrowding the area.
Designed for flexibility and ease of use, this maze generation system can be quickly adapted and customized, making it an ideal tool for developers looking to add roguelike-style mazes to their projects.
C# |
|
Endless Terrain Generation:
Using Unity and C#, I created a system that utilised randomly generated Perlin Noise images to produce height maps for terrain generation. Based on the value of each pixel in the height map, I applied color to represent various landscape elements. Starting from the lowest points, the colors transitioned gradually from water to sand, grass, rock, and finally snow, resulting in a semi-realistic landscape.
A 3D environment was then generated by creating a mesh based on the colored height map, enabling the system to produce an infinite, procedurally generated terrain. While the project was still being refined and polished, it reached a functional and viewable state, demonstrating the core mechanics and visual output of the system.
DOWNLOAD
A 3D environment was then generated by creating a mesh based on the colored height map, enabling the system to produce an infinite, procedurally generated terrain. While the project was still being refined and polished, it reached a functional and viewable state, demonstrating the core mechanics and visual output of the system.
DOWNLOAD
Random Planet Generation:
Similar to the endless terrain generation project, using Unity and C# I have created a tool to create random, realistic looking planets. The settings for each planet can be edited manually or generated randomly from the scene view; ultimately I plan to combine the two projects in some form of game. This project is still under heavy development and its current state is not representative of the final level of quality.
Smaller Projects
|
|
Below are some other C++ projects I have made:
Frogger - A recreation of the arcade game Frogger made with C++
Pong - A basic version of pong recreated with JavaScript
First Person Shooter - A basic framework for an FPS game made with Unity. This is not made to be a game but a starting point for any future projects that could use it's mechanics.
OpenGL Airport Model - A Basic Rendition of Leeds Bradford Airport Using OpenGL and 3D Models.
Box2D Game - A basic puzzle game made using the physics engine Box2D
Mobile Game - A mobile recreation of the arcade game Galaxian
OpenGL Cube Mapping - An OpenGL project using complex shaders and cube mapping to create a skybox
Fuzzy Logic System - A fuzzy logic system created using MatLab and the neural network package ANFIS to determine the value of a horse in the game Red Dead Redemption 2
Mobile Robotics Simulation - Using the ARIA framework, this project allows a simulated PeopleBot robot to navigate a user generated maze using Mapper3 and MobileSim.
Other major projects can be found on the University Projects Page.
Art and Media |
|
Minion - A minion created from reference images using Maya 2016
Ship Models - A number of ship models created using Maya 2016 for Nyk's AI Space Simulation Character Art - Character art done for the collaborative project 'Salvage' Mech Game Models - Various models created using both Blender and Maya 2016 to be used in an upcoming collaborative game. Miscellaneous Artwork - Various art I have created can be seen in the gallery bellow. |
|