docs(plan): Task5 补 Step7b——守卫零误报实测 + cast_delay_mod 饱和点上报
Task 3 复审转来两项: ① 守卫搬到 equip_wand 后需跑一局确认零误报——六条进入路径靠眼读弱于跑一局, 且误报的症状与它要报的故障一模一样,是自伤式回归。 ② hard: 0.01 承诺了循环交付不了的东西:_handle_auto_cast 用 if 非 while, 每帧至多一次施法,wand_basic 在 cast_delay_mod≈0.033 即饱和,且速率按整帧 量化成 60/30/20/15 的台阶。需人定:写明饱和区,或把 hard 提到 ~0.05。 明确不在代码里加下限钳制——会与 attributes.json 形成重复权威。 另收两条 Minor:注释里会腐烂的行号引用改函数名、combat_test 注入补理由交叉引用。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -718,6 +718,30 @@ Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||||
EOF
|
||||
```
|
||||
|
||||
- [ ] **Step 7b: 守卫零误报 + `cast_delay_mod` 饱和点(Task 3 复审转来)**
|
||||
|
||||
**① 开一局,确认日志里零条 `cpu_limit=0` 报错。**
|
||||
Task 3 把守卫从施法处搬到了 `PlayerManager.equip_wand`。复审静态核对了全部六条进入路径(`start_game` 58→76、`resume_game` 68→76、`switch_core` 139→140、`_apply_padded` 184→185、`apply_wand_save_data` 299 无 `equip_wand`、`combat_test.gd` 18-19→20),确认 `_rebuild_wand`/显式注入总在 `equip_wand` 之前。但**六条路径靠眼读弱于跑一局** —— 若守卫误报,症状看起来和它要报的故障一模一样,是自伤式回归。
|
||||
|
||||
Run: `play_scene` 开一局,`get_editor_errors` / `get_output_log` 确认**零条** `cpu_limit=0`。换一次杖(商店「法杖」按钮)后再确认一次。
|
||||
|
||||
**② `cast_delay_mod` 的 `hard: 0.01` 承诺了循环交付不了的东西 —— 这是设计决策,需上报而非在代码里解决。**
|
||||
|
||||
`_handle_auto_cast` 用 `if` 而非 `while`,故**每物理帧至多一次施法**,硬顶约 60 次/秒。于是该属性存在饱和点:
|
||||
- `wand_basic`(0.5s 基准):`cast_delay_mod ≈ 0.033` 即饱和,从那里到 `hard` 0.01 之间**买不到任何东西**。
|
||||
- `wand_fast`(0.25s):饱和点约 0.067。
|
||||
- 且 `:81` 是**赋值**而非累积溢出,故实际速率按整帧量化 —— 60 / 30 / 20 / 15 次/秒,快端是台阶而非平滑。
|
||||
|
||||
设计区间(`soft` 0.1 → 0.05s = 3 帧)是诚实的,问题只在 soft→hard 那段。**两个选项,需人定**:
|
||||
- (a) 保持 `hard: 0.01`,在 `numerical_design.md` 与 `attributes.json` 注释里写明「0.033 以下为饱和区,不再提升实际射速」;
|
||||
- (b) 把 `hard` 提到 ~0.05,让 JSON 承诺的是真能交付的东西。
|
||||
|
||||
**不要在代码里加下限钳制** —— 下限已由 `attributes.json` + `AttributeFormula` 的 `maxf(hard, ...)` 强制,在 `player_manager` 再加一个会形成重复权威,设计师调 `hard` 时立刻脱同步,违反「纯数据驱动,代码不含硬编码副本或回退」。
|
||||
|
||||
**③ 顺带收两条 Task 3 复审的 Minor**(可并入本步任一提交):
|
||||
- `player_manager.gd:96` 注释里的 `player_stats.gd:173/191` 行号引用会腐烂,改为函数名:「已分别由 `PlayerStats._load_attr_definitions` 与 `add_modifier` 报出」。
|
||||
- `scenes/main/combat_test.gd:17-19` 的注入只有不变式没有理由,补一句 `# 顺序理由见 combat_manager._rebuild_wand`。
|
||||
|
||||
- [ ] **Step 8: 回填本计划为实际执行版**
|
||||
|
||||
实现过程中若因评审而改动了代码或断言,**本计划里对应的代码块与脚本必须回填为实际落地的版本**,并勾上各任务的复选框。否则任何人按这份计划复跑,得到的是过时代码和可能已失效的断言 —— 归航那期就踩过这个坑。
|
||||
|
||||
Reference in New Issue
Block a user