geometry-tower-defense/design/gdd/gdd-cross-review-2026-04-29.md

190 lines
8.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cross-GDD Review Report
**Date:** 2026/04/29
**GDDs Reviewed:** 2
**Systems Covered:** Node System, Tower Assembly
---
## 一致性问题 (Consistency Issues)
### 警告级 (Warnings)
#### ⚠️ `TryDisassembleTower` 未实现但 UI 可调用
- **GDD**: `tower-assembly.md` Open Question #1
- **问题**: `node-system.md` R3 规定"组装后可以免费拆解"Assembly Phase UI 也提供 Disassemble 选项。但 `tower-assembly.md` 明确标注 `TryDisassembleTower` 方法不存在。玩家看到可点击的 Disassemble 按钮但无法使用,属于误导性 UI。
- **建议**: `tower-assembly.md` 应将 Open Question #1 从 "OPEN" 改为标注为 "Blocking — GDD 自洽性受损",直至方法实现
---
## 游戏设计问题 (Game Design Issues)
### 阻塞级 (Blocking)
#### 🔴 Boss 难度曲线可能无法追赶 — 威胁两大系统核心幻想
**位置**: `node-system.md` Boss Difficulty Scaling 公式;`tower-assembly.md` Stat Scaling
**问题描述**:
- Boss HP 增长: `BossEffectiveHp = DRLevel.BaseHp × 2^(completedLoopCount)` — 指数增长
- 玩家战力增长: Tower Assembly 提供线性成长(每场战斗最多 8 次升级事件,每次 `baseValue + perLevel * i`
- 在某个 loop 阈值后,玩家数学上无法击败 Boss
**设计后果**:
- `node-system.md` Player Fantasy: "whether I survive **depends on** how I prepare" — 若准备永远不够,此幻想崩塌
- `tower-assembly.md` Player Fantasy: "arrange pieces to solve it" — 若 puzzle 解不开,此幻想崩塌
- 两大系统的核心幻想共享同一个前提:玩家准备应当是充分的
**未知依赖**: `DRMuzzleComp`、`DRBearingComp`、`DRBaseComp` 数据表值未知,无法验证实际成长率
**设计建议**:
1. 在 Boss 战中引入 catch-up 机制(每 loop 玩家获得临时增益)
2. 让 Tower Assembly 存在超线性成长路径tag synergy、combo 机制)
3. 降低 Boss 的指数系数(从 ×2 改为 ×1.3~1.5
4.`node-system.md` 中明确说明"Boss 的设计意图是部分玩家无法一次通关"以调整预期
---
#### 🔴 无 Gold 消耗强制机制 — 经济回路开放无界
**位置**: `node-system.md` 经济表格1100 gold 上限);`tower-assembly.md` 无 gold sink 定义
**问题描述**:
- 6 场 Combat 节点共 600 goldBoss 胜利额外 500 gold最大总量 1100 gold/run
- Shop Node 4 和 8 奖励 0 gold不强制消费
- 无任何机制(修理费、强制升级、门票等)要求消耗 gold
- **Shop System GDD待编写必须定义强制消耗场景**,否则 Shop 节点沦为 UI 空操作
**风险**: Shop 节点存在但内容空洞,玩家跳过购买不打 Boss —— 浪费了 2 个节点的设计价值
---
### 警告级 (Warnings)
#### ⚠️ 塔组装存在显然的最优策略
**位置**: `tower-assembly.md` R7无组件兼容性约束
**问题**: 任意 Muzzle+Bearing+Base 组合均可。Rarity Resolution 取算术均值:
- Red(5)+Red(5)+Red(5) → 均值 5.0 → Red Tower
- Red(5)+Green(2)+White(1) → 均值 2.67 → 向下取整 → Green Tower比单 Red 差)
**结论**: 贪婪地堆最高稀有度组件永远是最优策略,无任何权衡代价。塔组装的最优解是排序后取 top 3无需战术思考。
**建议**: 引入稀有度以外的优化维度:
- Tag synergy 机制Fire+Ice 组合产生额外效果)
- Endurance 配平3 高稀有度 = 3 高损耗率,混合可延长功能性)
- Roster slot 约束下的边际收益(分散稀有度可在 4 槽位限制下覆盖更多敌人类型)
---
#### ⚠️ 节点选择若两条路径难度不同,最优路径显而易见
**位置**: `node-system.md` 节点选择流程
**问题**: 每 junction 显示 2 个目的节点类型。若两条路径在难度/奖励上存在差异(比如两 Combat 但一个是 L1 一个是 L3"战术决策"退化为"比较两个数字"。
**建议**: 确保两条分支在难度和奖励上等价,或引入隐藏变量(敌人波次、特殊条件)使玩家无法在选择前判断哪个更有利。
---
#### ⚠️ 玩家注意力预算已达上限,无扩展空间
**当前 Assembly Phase + Node Choice 时活跃系统**: 4 个
1. Tower Assembly 决策(选 3 组件组合)
2. Roster 管理4 槽位分配)
3. 下个节点威胁评估(已知类型 + 难度)
4. 节点二选一(强制决策)
**设计阈值**: 技能定义 >4 时触发警告,当前 = 4刚好达标
**风险**: Event System待设计若在 Assembly Phase 窗口引入额外主动决策(如事件影响当前备战),预算立即超标。
---
#### ⚠️ Pillar 轻微漂移
| GDD | Pillar 声明 | 实际行为 | 漂移程度 |
|-----|------------|---------|---------|
| `node-system.md` | "players drive their own path" | 节点类型序列固定Plain 主题下所有玩家路径相同Junction 处只选顺序不选类型 | 轻微 — "path" 实为"choice order" |
| `tower-assembly.md` | "adaptation to known threats" | Shop/Event 节点无需塔组装决策;"adaptation" 对 30% 节点不适用 | 轻微 — pillar 覆盖部分场景 |
---
## 跨系统场景问题 (Cross-System Scenario Issues)
**场景走过**: 3 个
---
### 🔴 场景1: 战斗结束 → 组件掉落 → 塔组装(数据流歧义)
**涉及系统**: Combat → Inventory → Tower Assembly
**问题描述**:
Combat 节点完成后,组件掉落通过 `InventoryComponent.AddItem` 进入 inventory。**接口未定义**
- 掉落的是全新组件实例InstanceId 新生成)?
- 还是对现有组件的修改(如 `IsAssembledIntoTower` 标记改变)?
**隐患**: 若为后者,而玩家在 Assembly Phase 前一步已组装了某些塔,战损标记可能与已组装组件的状态产生歧义。
**需确认**: `InventoryComponent.AddItem` 的精确语义,建议在 `node-system.md` Dependencies 或接口协议中明确定义。
---
### ⚠️ 场景2: Boss 前夕的 Assembly Phase难度曲线验证
**涉及系统**: Node System + Tower Assembly + Combat
**问题描述**:
玩家在 Node 9 完成后进入 Assembly Phase此时 `BossEffectiveHp` 是可计算的(因 `completedLoopCount` 已知)。玩家可以提前计算胜率。
**风险**:
- 若计算结果为正 → Boss 战是仪式感结局fantasy 得到验证
- 若计算结果为负 → 玩家感受到"数值碾压"而非"战术压力",两大系统的核心幻想同时受损
**需验证**:
- `BossEffectiveHp` 是否对玩家 UI 可见(建议:仅在 Boss 血条上显示,不显示计算公式)
- 实际 tower DPT每秒伤害是否能与指数增长的 Boss HP 达到动态平衡
---
### 场景3: Degraded 塔在战斗开始时的处理
**涉及系统**: Tower Assembly + Combat
**问题描述**:
`tower-assembly.md` 明确:"mid-combat 降级不会自动从 roster 移除"。但 `CombatNodeComponent` 的 roster 验证逻辑未定义。
**两种处理方式的后果**:
- 若验证在战斗**开始**时degraded 塔被筛除,玩家以 <4 塔对抗预期敌人规模
- 若验证在战斗**进行中**塔在战斗中失效战斗难度非线性上升
**建议**: `tower-assembly.md` Acceptance Criteria 中补充`CombatNodeComponent` 必须在战斗开始前调用 `CombatParticipantTowerValidationService.ValidateParticipantTowers`拒绝 degraded 塔入战
---
## GDD 标记需修订
| GDD | 原因 | 类型 | 优先级 |
|-----|------|------|--------|
| `tower-assembly.md` | `TryDisassembleTower` 未实现但 UI 可调用Open Question #1 应更新状态为 Blocking | 设计完整性 | Warning |
| `node-system.md` | Boss catchability 需在 GDD 中明确设计意图建议补充"战斗开始前 roster 验证逻辑"的跨系统约定 | 难度曲线 | Warning |
| `systems-index.md` | Combat System 标注"Designed" GDD `docs/CombatNodeArchitecture.md` 而非 `design/gdd/`文档位置不统一 | 文档管理 | Warning |
---
## Verdict: **CONCERNS**
存在 2 个阻塞级问题Boss catchability + gold sink和多个警告级问题阻塞问题不会阻止架构设计但应在 `/create-architecture` 前明确设计意图
---
## Next Steps
- `/design-system shop` 编写 Shop System GDD阻塞项gold sink 定义
- `/design-system event` 编写 Event System GDD阻塞项EventContext 合约
- `/design-system progression` 编写 Progression GDD阻塞项RunEnd 数据持久化
- `/design-review tower-assembly` 修订 Open Question #1 并更新 TryDisassembleTower 状态
- `/create-architecture` 在所有 MVP GDD 完成后开始架构设计Verdict CONCERNS 但非 FAIL