JUL 2, 1993

Crimson Tactics

A grid tactics game. I built a runtime board, wrote an A* pathfinder from scratch, and programmed a pursuing enemy AI that inherits your move count each turn - plus an in-editor tool for painting obstacle layouts by hand.

Playable Open the WebGL tab to play it in your browser.

Crimson Tactics
EngineUnity
LanguageC#
AIA* Pursuit
ToolingCustom Editor
DataScriptableObjects
LoopTurn-Based
Systems Built
  1. 01
    Grid Procedural Board

    Built the board at runtime from a configurable width and height, instantiating a tile per cell and stamping each with its grid coordinates so every tile knows where it sits. TileGenerator.cs

  2. 02
    Selection Tile State & Click-to-Move

    Programmed material-swapping tile states and a camera raycast that resolves the tile under the cursor, plots a path to it, and walks the unit one cell at a time. TileInfo.cs · PlayerUnit.cs

  3. 03
    Pathfinding Custom A* Pathfinder

    Wrote A* from scratch over the grid - open and closed sets, g / h / F costs, a Manhattan heuristic, four-directional neighbours, and a came-from retrace - with no NavMesh, reused by both the player and the enemy. Pathfinder.cs · Node.cs

  4. 04
    AI Pursuing Enemy

    Built a pursuing enemy that receives the player's exact step count through a C# event on turn end, spends that budget A*-pathing to the closest reachable tile beside the player, and triggers game over the moment it lands adjacent. EnemyAI.cs

  5. 05
    Architecture Unit Base & Cell Reservation

    Structured the player and enemy on an abstract Unit base and an IAI interface, with a GridManager that reserves the destination cell before each step so two units never overlap. Unit.cs · GridManager.cs · IAI.cs

  6. 06
    Tooling Custom Level Editor

    Built a custom EditorWindow that paints the obstacle layout as a clickable button grid and marks the asset dirty to save, so designers author levels visually - and the same ScriptableObject grid feeds the runtime spawner and the pathfinder. ObstacleEditor.cs · ObstacleData.cs