Fantasy isometric tower defense game with 5 tower types, 6 enemy types, and cinematic visual effects, built with TypeScript and PixiJS 8.
Tower defense games have a satisfying design space — each tower type creates distinct strategic choices, and the isometric perspective gives everything a sense of depth without the complexity of full 3D. I built Crystal Siege to explore both.
The game has 10 waves of enemies and 5 tower types that unlock progressively: Arrow towers for basic single-target damage, Cannons with splash damage for crowds, Ice towers that slow enemies, Lightning towers that chain between targets, and Snipers with extreme range. Each tower has 3 upgrade tiers with a sell/refund mechanic, so resource management matters.
The enemy roster includes 6 types culminating in a 1000 HP Dragon boss that disables nearby towers. The rendering uses PixiJS 8 WebGL with an 8-layer architecture: map tiles, ground shadows, build spots, Y-sorted entities, projectiles, effects, particles, and UI overlays. Each projectile type has distinct animations — arrow rotation, cannonball arc, ice spin, lightning chain zigzag, sniper tracer.
The engine/view separation is strict: all game logic lives in a pure TypeScript module with zero browser dependencies, fully testable in Node.js. The view layer handles PixiJS rendering, coordinate transforms between grid space and isometric screen space, and cinematic effects like screen shake, slow-motion on final kill, and day/night tint shifts.