190 lines
8.5 KiB
Markdown
190 lines
8.5 KiB
Markdown
# 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 gold,Boss 胜利额外 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)
|