Files
gplan-2/design/qa/playtests/playtest-2026-09-12-designer.md
T

9.9 KiB
Raw Blame History

Playtest Report — Dungeon Sweeper 战斗阶段垂直切片(第 2 次)

判定:COMPLETE(首次完整通关的真人局,定性反馈两条,均有遥测坐实)· Review mode: solo(CD-PLAYTEST skipped — Solo mode) 技能:/playtest-report(analyze 模式,原始素材 = 本会话用户口述 + playtest JSONL 遥测 + 代码/数据核对)

Session Info

  • Date: 2026-09-12 20:13(主分析局);20:41 辅助局(调参面板加成后)
  • Build: 垂直切片 · 2026-09-12 五区改造批 + BUG-0001 修复前;数据 = v3 调参批(enemy.tres 18:05:atk 7/5/9/6/9、Boss 150)
  • Duration: 完整一关(7 节点:battle×2 → reward → battle×2 → rest → boss,12 个结算轮)
  • Tester: 用户(设计师本人,唯一测试者)
  • Platform: PC · Win10 · Godot 4.7.2 · seed 42(固定种子)
  • Session Type: Returning(第 3 次尝试,首次跑通全程——09-11 两局均被崩溃阻断)

Test Focus

两条旧问题的复核:① 道具获取(治疗稀缺性 / 伤害:治疗 9:1 体感);② 难度曲线(到 Boss 房前满血)。

First Impressions

  • 未单独采集(用户直接进入两条旧问题反馈)。

Gameplay Flow

What worked well

  • 核心循环首次完整走通:挖掘 → 结算七段 → 道具窗口 → 关卡节点(reward/rest)→ Boss → level_end victory,全程无崩溃。09-11 报告的两个 High 崩溃与 BUG-0001 软锁家族未复现(BUG-0001 修复批 20:23 落地,主分析局在其之前——悬停路径未触发,属幸存而非验证)。
  • 窗口 usable_now 投影工作正常:满血下治疗包全程禁选(usable_now:false),玩家实际行为 = 连续 skip,机制按设计执行。

Pain points

  • P1(旧问题②):全关零承伤——12 个结算快照 hero hp 恒 50/50,Boss 房前满血、Boss 战后仍满血。对照 C3 F4 目标带(普通场承伤 ≤20%、Boss 场 ≤50%):实测 0%,越带。详见「根因分析」。
  • P2(旧问题①):治疗包体感过剩——Boss 战结束时库存 3 件治疗道具 + 已用 1 把小刀;用户体感"9:1 完全反过来"。实现核对结论:9:1 配比实现正确,体感由三个结构性放大器制造(见根因分析)。

Confusion points

  • 未采集。

Moments of delight

  • 未采集。

Bugs Encountered

# 描述 严重度 可复现 状态
1 浅深度战斗零敌人:两场真人局中 d0 战斗(20:13 还含 d1)unit_count=0、round 1 即 victory——遭遇骰/spawn 路径疑似缺陷(C3 Rule 8 区间 [unit_count, unit_count_max] 最小值 1,不应掷出 0) Medium 两次真人局均现(d0 100%) 待查——建议 /bug-report 建档
2 Boss 攻击拍零兑现:ogre_chief(pattern [attack, attack, charge, heavy])在两局中共 7 个存活结算轮,快照 beat 轮转正常(advance 在跑)但英雄血量纹丝不动——攻击链对该敌未生效(普通敌在 20:41 局 fresh 池轮正常承伤:d1 r1 −34、d3 r1 −9, ambush 乘区算术精确吻合) High 两局均现 待查——与下条根因共用一个探针
3 (轻微)grant_node_active 直调 stock、不经 _supply.notify_granted()——节点奖励完全绕开供给控制器计数,关卡级供给总量失控的结构性漏洞之一 Low 结构性 待登记

根因分析(本次报告核心增量)

问题②难度:v3 调参为何无效

  • 防御墙机制:defense_up = stack 策略 × magnitude −50 × max_stack 2,池 clamp [−100, +100](settlement.tres)→ 同轮叠两层 = 100% 免伤。它在授予段生效、先于战斗段——当轮挖到的减伤当轮即全额兑现。
  • defense_up 权重 24/75 = 安全格池最高单行(32%/grant),每轮 7–14 安全格 × ~44% 授予率 ≈ 3–6 次 grant → 单轮叠满两层的概率常在 25–50% 区间;20:13 主分析局 12/12 轮零承伤。
  • 结论:v3 批选的主杠杆"atk +50%"是乘在 ×0 上的调参——墙不拆,任何 atk 曲线都无效。C3 F4 的 E[减伤] 估算(0.44 × 50% ≈ 22%)严重低估了 stack-to-clamp 的实际行为(实测 ≈100%)。
  • 未闭合点:20:41 辅助局 fresh 池轮普通敌正常承伤(−34/−9 精确吻合 ambush 算术),但 Boss 轮 fresh 池仍零承伤——"防御墙"与"Boss 攻击链缺陷"两嫌疑并存,一次 instrumented headless 探针即可分割(逐结算行打印 beat/atk.total/pool/d_tick)。

问题①道具获取:9:1 没有反,但体感是真的

  • 配比核对(三路径全部正确):active_inject 池 knife_t1 60 / knife_adv 30 / heal_pack 10 = 9:1(reward.tres 89–93 行注释明示"治疗资源宝贵");grant_node_active 同池同比;B1 分流正确(即时类当场兑付、道具类入库)。
  • 本局实测:4 次可选类获取 = 3 治疗包 + 1 小刀(Boss r6 用刀后剩 3 治疗包——与用户口述完全吻合)。按 9:1 单次 10% 治疗率,该组合概率 ≈ 0.4%——但 seed 42 固定,这条 RNG 轨迹每次重开都原样重放,"反过来"的体感被逐次确认。
  • 三个结构性放大器(配比正确也挡不住):
    1. 供给量:09-11 供给控制器批把可选类从格子权重池改为"每战斗首件保证 + 指数递减"——每关 4 战斗 × 首件保证 + 1 奖励节点 + 递减重注 ≈ 4–5 件/关(P(≥1 治疗包) ≈ 40%),且节点奖励绕开控制器(Bug #3)再放大;
    2. 满血累积:难度零压力 → heal_pack 永远 usable_now=false → 只进不出堆在库存里,显著度极高;
    3. 固定种子:seed 42 让坏抽变成"每次都一样的坏抽"。
  • 耦合结论:问题①与问题②互为放大器——20:41 辅助局(有承伤)里奖励节点的治疗包在 70/100 时被立即使用。难度修好后治疗包消耗通道自然打开,体感问题预计大半自行消解。

Feature-Specific Feedback

可选类供给控制器(09-11 批)

  • 机制按设计运转(首件保证/递减/永不绝育均可在遥测中辨认);但"每战斗"首件保证在 4 战斗关卡结构下的总供给量是否偏离"治疗是稀缺奖励"的原始意图,归 C3 重新拍板(候选:首件保证升到关卡域、或 inject 池治疗行单独降权)。

难度(v3 调参批后复测)

  • 承伤 0% vs 目标带 ≤20%/≤50%:严重越带;通关率 100% vs F5 基线带 40–60%:越带。与 enemy.tres v3 注释自认的"难度严重不足"一致——调参后未复测即判定"已处理"是本问题拖延三轮的直接流程原因。

Quantitative Data(遥测实测,playtest_42_20260912T201317.jsonl)

  • 12 结算轮 / 7 节点 / level_end victory;hero hp 全程 50/50;ambush_layers 恒 0;buffs[] 恒空。
  • 敌情:d0/d1 空场;d2 bugbear 40hp(2 轮);d3 bugbear 18hp(2 轮);boss ogre 150hp(6 轮,beat 轮转 attack→attack→charge→heavy→attack,兑付伤害 0)。
  • 输出侧:charge_dmg_a 7–14/轮(快照键现名 charge_counts/charge_points——2026-09-15 两批(命名统一 → 抽象分离);本行保留当时观测键名),boss 逐轮 −21/−16/−53(含 clear_blast 40)/−16/−24/−20——英雄输出正常,Boss 3–6 轮内可斩。
  • 可选类供给:4 获取(3 heal_pack + 1 knife_t1)/ 1 消耗 / 3 库存残留。
  • 20:41 辅助局(调参面板 max_hp 100 + atk 加成):普通敌承伤正常(−34/−9),Boss 仍零承伤;治疗包在缺血时正常消耗。证明消耗通道与攻击链在普通敌上健康,Boss 路径存疑。

Overall Assessment

  • Would play again: 未采集(用户两轮即时反馈 = 高关注信号)
  • Difficulty: 严重不足(0% 承伤,越带)——非数值问题,机制性免伤墙 + 疑似 Boss 攻击缺陷
  • Pacing: Boss 战 6 轮偏拖(输出侧正常但无压力回报)
  • 本轮判定:COMPLETE——两个旧问题本轮均拿到机理级解释,不再停留在"感觉不对"

Top 3 Priorities

  1. 一次 instrumented 探针分割零承伤根因:headless 逐结算行打印 beat / atk.total / hero_defense 池值 / d_tick——区分"defense_up 叠满墙"(设计变更)与"Boss/敌攻击链缺陷"(bug 修复)。这是两问题的共同前置。
  2. 拆墙后重调难度带:多种子 level_monte_carlo 对 C3 F4/F5 期望表复算(承伤 ≤20%/≤50%、通关率 40–60%),禁止单种子判定;v3 的 atk 值此时才第一次真正参与计算。
  3. 供给量重拍板 + 节点奖励纳入控制器:C3 裁决"每战斗首件保证"的总量语义(候选:关卡域首件);grant_node_active 补 notify_granted 上报;评估用种子轮换(seed 42 单轨迹不能作为平衡证据)。

Action Routing(Phase 3)

  • 设计变更(防御墙语义:stack×2→clamp −100 = 免伤;候选改法:clamp 收紧至 −60/−70、乘法衰减、重击拍穿防)→ /propagate-design-change design/gdd/b3-status-effect.md(连带 B1 池 clamp 语义 + C3 F4 估算式修正)
  • 平衡调整(墙拆除后:atk 曲线/Boss hp/供给量对 F4/F5 期望表复算)→ /balance-check
  • Bug(浅深度空遭遇 #1;Boss 攻击零兑现 #2;节点奖励绕过供给计数 #3)→ /bug-report 正式建档
  • Polish/观测:治疗包满血堆积的呈现(现有 usable_now 禁选已正确,难度修复后观测残留量)→ 记入失衡预警②仪表(短缺半)

与既往报告的追踪关系

  • playtest-2026-09-11(INCOMPLETE):Top2"难度带拍板"→ v3 批(09-12 18:05)只调了 atk、未复测→ 本轮证实无效 + 根因前置(防御墙)。状态:未解决,根因收窄。
  • 治疗稀缺化(09-11 两级奖励批):配比 6%→inject 池 10%(9:1)实现正确;本轮体感失效根因 = 供给量 + 满血累积 + 固定种子,非配比。状态:配比已解决,体感未解决,路径已明确。