My Final Year Project - A Tower Defense Game That Is Never The Same!

For the past year, I’ve been on an incredible journey, diving deep into the world of game development for my final year project. The mission? To create something I’m passionate about, something that pushes my skills, and something genuinely fun to play. I’m thrilled to say, after countless hours of coding, designing, and problem-solving, it’s here! I’m excited to introduce you to my unique take on the classic Tower Defense genre, a game where every playthrough offers a fresh challenge.
And the best part? You can play it right now:
Beyond Static Maps: The Magic of Procedural Generation
One of the biggest challenges in traditional Tower Defense games is that once you’ve mastered a map, the replayability can drop. I wanted to tackle this head-on. My game throws out hand-crafted, static maps and instead uses procedural generation to create a brand-new island battlefield every single time you play.



Unique and varied generation examples. Each is an island with additional lakes, rivers or smaller islands.
Built using the powerful Godot 4 engine, the game leverages sophisticated noise algorithms (specifically FastNoiseLite with Simplex noise) to dynamically generate diverse island landscapes. Think unique coastlines, varying distributions of trees and shrubs, and consequently, ever-changing strategic possibilities for placing your defenses. No more relying on memorised tower spots! You’ll need to adapt your strategy each round.
And for those moments when you find that perfectly challenging (or perfectly chaotic) map, I’ve implemented seed-based generation. This means you can replay or share your favourite generated worlds simply by using the same seed!
Intelligent Enemies: Navigating a Dynamic World
What’s a Tower Defense game without cunning enemies? Creating foes that can intelligently navigate these dynamically generated islands was a core part of the project.
The enemy AI is driven by Finite State Machines (FSMs), a design pattern that allows for clear and manageable behaviours like idling, running, attacking, or reacting to hits. Each enemy logically transitions between these states based on what’s happening in the game.

Pathfinding itself is a complex beast, especially on procedural terrain. Enemies utilise Godot’s NavigationAgent2D
(which employs the A* algorithm) to find the most efficient route to their target – your precious fountain! But what happens if a path gets blocked or the terrain is particularly tricky? I’ve built in fallback mechanisms, including a direct movement approach, to ensure enemies remain a persistent threat. The navigation mesh itself is dynamic too, smartly updating to account for obstacles like dense vegetation.

Designed with Everyone in Mind: Accessibility Matters
From the outset, I knew I wanted to make my game as accessible as possible. Games are for everyone, and as developers, we have a responsibility to ensure that. Inspired by industry best practices and resources like AbleGamers' "Accessible Player Experiences (APX)" toolkit, I integrated several accessibility features:
- Flexible Displays: You can adjust the game’s resolution and individually control music and sound effect volumes.

- Visual Clarity: I paid close attention to colour contrast for game elements, particularly for turrets and enemies. The design was even tested using colour blindness simulators (like Coblis) to ensure key information is distinguishable for players with various types of color vision deficiency.

- Clear UI: The options menu adheres to Web Content Accessibility Guidelines (WCAG) principles, ensuring text legibility with appropriate contrast ratios, validated using tools like WebAIM's contrast checker.

This focus on accessibility wasn't just a checkbox; it was about making a more inclusive and enjoyable experience for a wider range of players.
The Journey & What I’ve Learned
This project has been an immense learning experience. Beyond the specific technologies like Godot 4, GDScript, procedural generation algorithms, and FSMs, I’ve learned so much about the iterative nature of game development. There were challenges, of course – optimising performance for larger generated maps, fine-tuning the balance between randomness and playability, and ensuring all the complex systems (generation, AI, navigation, gameplay) worked harmoniously together.
The modular architecture I adopted, especially for the FSM and terrain generation components, was crucial for tackling these challenges incrementally. It allowed me to build, test, and refine individual pieces without a constant fear of breaking everything else.
Are You Ready to Defend?
This project was a labor of love, a culmination of skills learned, and a fantastic exploration into creating dynamic and replayable game experiences. I’m incredibly proud of how it’s turned out, and I’m even more excited for you to try it!
So, head over to https://towerdefense.melloh.uk/ and see if you have what it takes to defend the fountain against endless, uniquely generated onslaughts!

Credits
- Developer: Wiktoria Girzynska
- Supervisor: Francisco Ferraria Ruiz
- Institution: Royal Holloway, University of London
- Terrain and character assets: Kevin's Mom's House on Itch.io
License
This project is an academic work developed as part of a BSc Computer Science final year project at Royal Holloway, University of London.
Asset Licenses
- Game assets (sprites, tilemaps) are from Kevin's Mom's House on Itch.io, used under their free-to-use license for non-commercial purposes
- All original code is for academic purposes only
Usage Rights
- This project may be used as a reference for academic purposes
- Redistribution or commercial use is not permitted without express permission
- The game assets remain under their original licenses and are not for redistribution
Note: This is an academic project and is not intended for commercial use or distribution.