126 lines
10 KiB
Markdown
126 lines
10 KiB
Markdown
# 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`](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 towers** — **Basic 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 upgrade** — *systemic 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`](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 / weaknesses** — `EnemyHealth.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.
|