UnityTowerDefense/Project_Roadmap.md

10 KiB
Raw Blame History

Unity Tower Defense — Project Roadmap

Purpose

The forward-looking plan: what's done, what's next, and the sequencing. Current-state architecture and the full list of implemented systems live in Project_Context.md — read that first for "how things work today." This document focuses on direction and remaining work.

Last substantial update: 2026-06-23 (reorganized around the roguelike pivot).


The game

A co-op tower-defense / roguelike hybrid (up to 9 players, Steam). Wintermaul-style maze defense — build towers to snake enemies through your zone (shared lives, per-player gold) — fused with a roguelike draft.

Roguelike core loop

All players start with the same three towersBasic Arrow (ground+air, single-target), Siege Cannon (ground-only, splash), Wall (no damage, near-free, maze-shaping). Players grow a personal deck/"build" through a 3-option draft at match start and after every wave. The draft is free; players can also spend gold to buy extra rolls, creating the central tension: spend gold on towers (your maze) vs. spend on rolls (your build).

Five draft choice archetypes:

  1. New tower — add a tower to your buildable arsenal.
  2. Tower upgradesystemic first ("all towers of damage-type/projectile-type X gain Y", "unlock Lv.2 across the deck"); per-tower trees only later if needed.
  3. Enemy debuff — temporary (weaker / slower / downgrade a tier); cost scales with duration.
  4. Builder ability — active, targeted, in-wave, cooldown-based (e.g. Call Lightning, Haste, Stasis Trap).
  5. Relic quest — opt-in secondary objective granting a powerful passive Relic.

Locked design decisions

  • Draft is free at match start + after each wave; a gold shop buys extra rolls, available any time (provisional — may change).
  • Per-player decks/progression (each player drafts independently).
  • Tower upgrades are systemic-first.
  • Draft pacing: the prep phase before each wave is the draft window; unpicked drafts auto-resolve at prep end so no slow/AFK player stalls the group.
  • Draft options are authored ScriptableObjects drawn by weighted random.

Status at a glance

Done & merged: functional match loop end-to-end (placement, construction, waves, pathfinding, combat, match-end), HUD, lobby + race selection, economy, enemies + A* pathfinding, flying enemies + air-targeting, per-player tower deck (roguelike keystone #1).

Done, pending commit/merge: draft system Slice 1 (the draft spine + "new tower" choice), verified working in-engine on branch feature/draft-system.

Paused: in-match Paint system (overlaps with systemic upgrades — reconcile before building further).

Next: draft Slice 2 (systemic upgrades).


Part A — Roguelike build-out (current focus)

A1. Per-player tower deck — DONE (merged)

Towers are unlocked per player, not globally available. See Project_Context.md.

A2. Draft spine + "new tower" (Slice 1) — DONE (branch feature/draft-system)

Server generates 3 weighted options per player each prep phase; players pick via a non-modal HUD overlay; unpicked auto-resolve at prep end; gold "Buy Roll" purchases extra rolls. Only choice type is New Tower (grants into PlayerTowerDeck). Commit/merge pending.

A3. Draft Slice 2 — systemic tower upgrades — ⏭ NEXT

  • Add an upgrade DraftOption subclass applying systemic modifiers: "all towers of damage-type X gain Y", "all projectile-type X …", "unlock Lv.2 across deck".
  • Reconcile with PlayerBuffManager. The existing gold-bought buff stack (global Damage/AttackSpeed multipliers) is the natural underlying apply mechanism — generalize it to type-filtered modifiers and make the draft (not the standalone buff menu) the entry point. Decide the fate of the old buff menu here.

A4. Builder active abilities (draft choice #4)

New in-wave, targeted, cooldown ability system (Call Lightning, Haste, Stasis Trap). New DraftOption subclass grants an ability to the builder; needs input/targeting + cooldown UI. Some builders may start with an ability unlocked.

A5. Relic quests (draft choice #5)

Secondary-objective tracking ("place 50 towers in 5 min", "leak 0 for 3 waves") that, on completion, grants a powerful passive Relic (e.g. corpses leave slowing ice, electric hits stun). Needs objective tracking + relic passive/event hooks.

A6. Enemy debuffs (draft choice #3)

Temporary debuffs purchasable in the draft (weaker / slower / downgrade a tier). "Downgrade" implies an ordered enemy progression the data doesn't model yet — add that first.

A7. Tower content beyond the starting three

The "new tower" draft is only meaningful once the pool has towers beyond the starting set. Author additional tower types (definitions, prefabs, draft options). (Until then, the new-tower draft has nothing valid to offer because all towers are starting towers.)

A8. Cross-match persistence / meta-progression

Player profile saving owned content; win/loss reward pools drawn server-side at match end; the customization menu. Requires a session-stable tower/option ID (catalog indices reset each match — see Context "technical debt").

Open decisions (resolve as the relevant slice is scheduled)

  • Paint reconciliation: keep paint as a separate axis, fold it into the systemic-upgrade visuals, or retire it. (Currently paused.)
  • Race vs Builder naming: the code says "Race"; the design says "Builder." Rename, nest, or keep — decide before it calcifies.
  • Gold-roll availability: currently any time; may tighten to prep-only.

Part B — Functional gameplay remainder (not roguelike-specific)

  • Tower Upgrade / Sell actions — HUD buttons exist but are disabled. Sell first (refund + despawn), then per-tower upgrade if the systemic model leaves room for it.
  • Enemy resistances / weaknessesEnemyHealth.TakeDamage has the stub slot; info panel has the placeholder.
  • Terrain architecture decision — Unity Terrain vs mesh vs ProBuilder. Builder code is terrain-agnostic; decide before heavy art.
  • Camera polish — cursor-anchored zoom near map edges, center-on-builder hotkey, race/phase-aware initial position.

Part C — Near-term art & visual TODOs

These are concrete, scheduled-soon visual fixes (placeholders are otherwise point-isolated and swap cleanly):

  • Enemy idle animation support — NEW. Add idle animation states to all enemy prefabs (enemies currently lack an idle; needed for held/spawned and between-waypoint states, and as the foundation for the stepped-animation direction below).
  • Tower footprint visuals fill the full 2×2 — NEW. Tower meshes (the new cones / placeholder shapes) sit centered and read smaller than the tile area they occupy. Update the visuals so a placed tower clearly fills its entire 2×2 footprint (matters for readability of maze packing and for the Wall especially).

Part D — Visual prototype: painted-miniature aesthetic (deferred phase)

Begins after the roguelike core is solid. Proves out the "photographed painted tabletop miniature" + Spider-Verse stepped-animation look on minimal content, as a concrete artifact for a future art lead. Placeholder hero content (Space Marine + Hormagaunt-style) is GW-adjacent and private-only — see Part E.

Shared infrastructure (one-time, reused by all future assets):

  • MiniatureStandard URP Shader Graph — PBR + a Fresnel rim term (fakes drybrush edge highlights) and a crushed-shadow curve (studio-lit miniature look); optional low-intensity painted-noise overlay.
  • Lighting/post via the volume profile — warm key (~45°), cool fill, low bounce, slightly raised AO, tilt-shift DOF (diorama scale), saturated warm-shadow grade, slight vignette.
  • SteppedAnimator — samples the Animator pose and quantizes to ~12fps for skeletal body + weapon-tracking only; effects/projectiles/UI stay smooth (the contrast is what sells it). Builds on the enemy idle-animation work in Part C.
  • TowerVisualController — local-only bridge from TowerCombat events (OnTargetAcquired/OnTargetLost/OnFire, CurrentTarget) to Animator params + procedural turret rotation.

Prototype content: one hero tower (idle/aim/fire) and one enemy (walk/death, stepped), then a demo scene showing towers shooting enemies in the painted-miniature look. Exit criteria: the demo runs in-editor with the aesthetic working end-to-end and the shared infra reusable.


Part E — Path to commercial production (notes only)

  • IP swap-out (required before any public release): replace GW-adjacent placeholder content with original factions (the "armored warrior order" and "horde swarm" archetypes aren't owned; the specific GW execution is) — or pursue a GW license if the demo warrants. The data model already supports clean swap-out (asset-referenced definitions; code unaffected). The asset manifest of IP-derived content must hit zero before any public build, repo flip, or marketing.
  • Steam lobby migration (deferred): replace Direct-IP with a Steam-backed provider behind an IConnectionProvider abstraction — NetworkBootstrap is the single seam; lobby UI and gameplay don't change. Adds friend-invite via overlay, lobby browser, Steam P2P transport; upgrades host-leave handling (Option A → lobby persists / new host). Use Spacewar app ID 480 in dev. Keep Direct-IP for LAN / DRM-free builds.
  • Production scope: more towers/enemies/maps, audio direction matching the visual direction, art-lead hire (the Part D demo is the recruitment artifact).

Cross-phase principles

  • Debug to root cause — no defensive workarounds or per-frame correction hacks.
  • Restate design intent before coding — prevents rework; especially valuable for the roguelike systems and any art pipeline work.
  • Server-authoritative gameplay; local-only UI/visual state.
  • Existing engine/rendering decisions stand: Unity 6.4, URP, IL2CPP, .NET Standard 2.1, Linear color, new Input System, Force Text serialization, NGO 2.x.