← mindattic.com

GridGame2026

Unity 6000.3 tactical grid RPG, 2D sprites on a 3D board.

GridGame2026

We ate through the world like acid. Seeping into the Undearth, trickling ever downward, consuming all we encountered; Never sated, never still.

Until we met resistance. Dwellers in the dark. A people who had never known war or light.

We were interlopers. Invaders from above — a light-bearing race corrupting everything in our wake.

A tactical grid RPG of pincer strikes, sliding bodies, and tipping scales.

You command a band of light-bearing invaders descending into the Undearth — a sunless world of dwellers who have never known war. Every encounter is a puzzle of position: drag your heroes across the grid, shove enemies and allies aside, and trap your foes between two attackers to deliver the only damage that matters.

Why GridGame2026:


Table of Contents #


Slide. Pincer. Pushback. #

Casts, Interrupts, and Clutch Moments #

Mana ticks in real time while the timeline advances; bank it for burst, or spend it on spells that travel their own icon down the strip. Take a hit mid-cast and roll one of three outcomes — Fail, Pushback, or, when your luck holds, Clutch! — where the spell snaps to the trigger and resolves in the same instant the caster crumples. A dying healer can still let off one last miracle.

Beyond the Battlefield #


Stack #

Layer Technology
Engine Unity 6000.3.2f1 (Unity 6)
Scripting C# 9, targeting .NET Standard 2.1
Root namespace Scripts.*
Rendering 2D sprites on a 3D board, custom ShaderLab effects
Persistence ProfileSaveState JSON; XP stored as TotalXP, derived at runtime
Asset loading Addressables only — no Resources.Load in new code
Testing Unity Test Framework — Edit Mode + Play Mode

Repository layout #

GridGame2026/
├── Assets/
│   ├── Scripts/                   # Game code (root namespace: Scripts.*)
│   │   ├── Data/                  # Static data definitions (ItemData_*, ActorData_*, SkillData_*)
│   │   ├── Models/                # Data structures, enums, Singleton<T>
│   │   ├── Managers/              # Singleton game systems (TurnManager, PincerAttackManager, ...)
│   │   ├── Instances/             # Runtime MonoBehaviours (ActorInstance, ActorMovement, ...)
│   │   ├── Sequences/             # Async combat/UI event queue
│   │   ├── Canvas/                # In-game HUD (TimelineBar, TimelineIcon, ...)
│   │   ├── Hub/                   # Shared vendor-UI utilities (HubTheme, HubToast)
│   │   ├── Factories/             # Object instantiation (only place Instantiate() is allowed)
│   │   ├── Helpers/               # GameHelper (the global accessor — `using g = ...`)
│   │   └── Utilities/             # Formulas.cs, RNG.cs, Extensions.cs, Geometry.cs
│   └── Editor/
│       ├── Builders/              # *Builder.cs — the source of truth for every scene
│       ├── BuilderAutoRebuild.cs  # [InitializeOnLoad] watcher — rebuilds scenes on builder edit
│       ├── CliEntryPoints.cs      # Batchmode entry points (BuildStandaloneWindows, guardrails, ...)
│       └── *Allowlist.txt         # Curated exceptions to the four guardrails
├── Documentation/                 # Builder snapshots, scene hierarchies, design docs
├── Tests/                         # Edit Mode + Play Mode test fixtures
├── GridGame.Console.ps1           # Top-level operator console
└── README.md                      # ← you are here

Running the project #

GridGame.Console.ps1 is the operator console — six numbered operations covering everything a human runs by hand:

# Operation Notes
1 Run Application Launches the Unity editor; /run triggers Play Mode
2 Commit and Sync git add -A, commit, push
3 Create Backup Copies the project to R:\Backup\GridGame with date-stamped folders
4 Setup One-time idempotent: clone/pull, activate pre-push hook, launch Unity for initial import
5 Build Player (headless) CliEntryPoints.BuildStandaloneWindows in batchmode
6 Set Start Scene Rewrites StartSceneConfig.StartScene and propagates to playModeStartScene

Headless invocations from Claude / CI / scripts:

Unity -batchmode -nographics -projectPath . `
  -executeMethod CliEntryPoints.<Method> -quit -logFile -

Exit code 0 = success, 1 = failure.

Code-only workflow (builders) #

The project is authored to run without opening Unity's editor UI. Every .unity scene is the regenerated output of a corresponding Assets/Editor/Builders/*Builder.cs. The builder is the source of truth; the .unity is the build artifact.

Builder → Scene auto-rebuild. BuilderAutoRebuild.cs is an [InitializeOnLoad] watcher. After every domain reload it diffs each *Builder.cs mtime against Library/BuilderMTimes.json and rebuilds the matching Assets/Scenes/{Name}.unity. Manual escape hatch: Tools › Scenes › Rebuild All or CliEntryPoints.BuilderAllScenes in batchmode.

The reverse direction (.unity → builder) is intentionally absent. A scene file is YAML; a builder is C#; the mapping requires judgment. Hand-edited scenes get caught by BuilderDriftChecker so the discrepancy can't sneak past pre-push.

Guardrails #

Auto-enforced pre-push via .githooks/pre-push (activated by Setup option 4):

Guardrail What it blocks Allowlist
SerializedFieldBan new [SerializeField] fields in Scripts/ Assets/Editor/SerializedFieldAllowlist.txt
ResourcesLoadBan new Resources.Load* call-sites Assets/Editor/ResourcesLoadAllowlist.txt
InstantiateBan Instantiate( outside *Factory.cs Assets/Editor/InstantiateAllowlist.txt
BuilderDriftChecker scene YAML drifting from its builder's output Documentation/Builders/Drift/*.snapshot.txt

CliEntryPoints.CheckAllGuardrails runs all four in one batchmode session — run it before handing work back. Bypass for hotfixes with git push --no-verify.

Status #

Active development. Single-developer project. The combat loop (slide / pincer / supporters / pushback) is implemented and playable; the cast-as-timeline-icon system and the Fail/Pushback/Clutch interrupt resolver are partially implemented — see CLAUDE.md for the design intent and current state.