Celestial Clash - Technical
Overview
Celestial Clash is a tower defence project built as a collaborative exercise in enemy AI, UI systems, and player-facing feedback loops. Rather than a single deep system, this project spans several smaller but interconnected systems — enemy behaviour, menu flow, HUD communication, and player pickups — all built to work together as one cohesive game loop. This page breaks down the technical implementation behind each of those systems.
AI
Enemy behaviour is driven by a Behaviour Tree built around a small set of reusable Decorators and Tasks rather than bespoke logic per enemy type. Decorators like TurretInRange, PlayerInRange, and PlayerInSight gate which branch of the tree an enemy is allowed to enter, while Tasks such as MoveToObjective, AttackTurret, and AttackPlayer handle the actual execution once a condition is met. Splitting decision logic (Decorators) from action logic (Tasks) this way meant new enemy behaviours could be added by recombining existing nodes rather than writing new logic from scratch — keeping the tree readable even as the number of possible enemy states grew.
AI Behaviour Tree
UI
The UI covers the full player-facing loop: Main Menu, Pause Menu, Level Select, and both Win and Lose screens, alongside in-game HUD elements tracking health, mana, gold, and turret/wave state. Beyond the menus themselves, I built supporting systems like floating damage numbers and spatial health bars — UI elements that exist in world space rather than screen space, giving the player immediate, readable feedback tied directly to what’s happening on screen (an enemy taking damage, a turret losing health) rather than only through a static HUD.
Title...
Pickups
Pickups are built from a single shared PickupBase parent class, with Gold, Health, and Mana pickups implemented as variants rather than separate systems. Centralising the shared logic (spawning, collection, despawn behaviour) in one base class meant each pickup type only needed to define what happens on collection — keeping the system easy to extend if more pickup types were added later, without duplicating the underlying pickup behaviour each time.
Pickup Base Graph























































