docs: 订正归航手感论证的运动学错误 + 记录定价越权与用户决策

【spec §2.0】原论证只算转弯半径就断言「急转的敌人能甩掉」,从未拿它对照敌人
实际速度 —— 明写此错,并补上缺的那一步运动学核算:跟踪横向速度 v、距离 d 的
目标所需角速度 ω≈v/d,故跟丢条件是 d < v/ω_max(近距离判据)。代入实际数值
(敌 45~140 px/s、弹 ~350 px/s) 重列强度表,标出发版值 1.5、给出各档对最快敌人
的跟丢距离。说明中远距离不是区分点(1.5 与 3.0 余量分别近 5 倍/10 倍,都能可靠
命中),真实失手方式是【近距离过冲】——目标坐进转弯圈内、几何上无法收敛,
而这正是 1.5 想要的手感。叠加表按 1.5 递增重列,堆到必中仍是合法 build 收益。

【spec §2.8】承认原「与 pierce/bounce 对齐」的论证绕过了权威:那两个词条本身
就不在定价表里,拿两个未定价条目互相对齐等于自建平行标准。而
numerical_design.md 确实给 homing 定过价(Tier 3 / Mana 40),且该表是活的权威——
其 Mana 列与 spells.json 每个已实现条目精确吻合,仅 homing 一行偏离。记录用户
决策及其取舍:这个词条能卖同族价,是因为它被调到了同族强度。

【numerical_design.md】homing 行按 P6-N2/N25 同样风格标注:原行删除线保留可
追溯(不抹掉「曾判定为 Tier 3」这个记录),表下补注说明 Homing Force 语义已废
(实现为最大转向角速度 rad/s,与 5.0 不同量纲不可比)、Mana 40 被同族标准取代、
实际发版 homing 1.5 / Mana 8 / 商店 18,并链接 spec。

【architecture_design.md】§4.2 冷数据注释的示例值 3.0 → 1.5(含转弯半径 233px)。

【plan】Task 1 Step 5/6 的 JSON 与断言期望值同步为 1.5;验收⑧(Step 6/6b)重跑
并更新为 folded=3.00 / e2e_2stack=3.000 / e2e_1stack=1.500;Step 8b 补设计器
往返与 SpinBox 格点确认输出。新增顶部醒目段落说明【机制测试①②③④⑦里的 3.0
是测试局部值、与发版值刻意解耦】——平衡调整不应导致机制测试失败,不要为了
数字一致去改它们;唯一应随发版值走的是⑧。Step 7 注明平衡调整不影响性能守卫
(强度只进转向数学,不参与决定 query_circle 频率的任何分支),未重跑。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 18:13:58 +08:00
co-authored by Claude Opus 5
parent 4b12ffbfb1
commit e651072b9b
4 changed files with 87 additions and 27 deletions
+15 -1
View File
@@ -99,10 +99,24 @@
| ID | 名称 | 类型 | Mana | Delay | 伤害类型 | 效果/修正 | 备注 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| `nuke` | 战术核弹 | Projectile | 200 | +3.00s | PHYSICAL | Dmg: 500, Radius: 300 | 屏幕清空,可能会炸死自己 |
| `homing` | 自动追踪 | Modifier | 40 | +0.10s | — | Homing Force: 5.0 | 只有这一个修正就够改变玩法 |
| `homing` | 自动追踪 | Modifier | ~~40~~ | +0.10s | — | ~~Homing Force: 5.0~~ | ~~只有这一个修正就够改变玩法~~ ⚠️ **本行已被取代(2026-07-30**,见下方注 |
| `heavy_cost` | 鲜血献祭 | Modifier | 0 | -0.50s | — | Dmg: +50, Cost: 10 HP | 卖血流 |
| `chain_bolt` | 连锁闪电 | Projectile | 60 | +0.80s | LIGHTNING | 弹射 5 次 | 清怪神器 |
> **⚠️ `homing` 行注(2026-07-30E1-③ 归航实装)** —— 原行**保留不改写**,以留存「曾判定其为 Tier 3」这一判断记录。实际发版取代如下:
>
> | | 原表(Tier 3 | 实际发版(`data/spells.json` `modifier_homing` |
> | :-- | :-- | :-- |
> | 强度 | `Homing Force: 5.0` | `homing: 1.5` |
> | Mana | 40 | 8 |
> | 商店价 | — | 18 |
>
> 1. **`Homing Force` 这一语义已废。** 实现的量是**最大转向角速度(弧度/秒)**,不是「转向力」—— 每帧把速度矢量朝锁定目标旋转,单帧转角上限 `strength × delta`,速率不变。`5.0` 与 `1.5` 不是同一量纲的数,不可直接比较。
> 2. **Mana 40 / Tier 3 的定价被同族标准取代**:与 `modifier_pierce_plus`、`modifier_bounce` 同为 8 蓝 / 18 金。**代价是把强度降到 1.5 rad/s 使其名副其实** —— 运动学核算表明原设想的 3.0 rad/s 对本工程敌人速度(45~140 px/s)而言接近「稳定命中」,确实配得上原表 Tier 3 的判断;1.5 rad/s 才是「中度制导」(对最快敌人在 93 px 内会跟丢)。
> 3. 该表其余行的 Mana 列与 `spells.json` 已实现条目逐一吻合,**仅此行曾出现偏离**,现予记录消解。
>
> 权威细节见 spec [`docs_dev/specs/2026-07-30-bullet-homing-design.md`](../../docs_dev/specs/2026-07-30-bullet-homing-design.md) §2.0(运动学核算)与 §2.8(定价决策)。
---
## 3. 敌人与战斗数值 (Combat Metrics)
+2 -1
View File
@@ -632,7 +632,8 @@ func _node_has_tag(node: SpellNode, tag_pattern: String) -> bool:
```gdscript
# 冷数据字段(_bullet_contexts[bullet_idx]):
# homing_strength : float —— 最大转向角速度,单位 弧度/秒(3.0 ≈ 350 速度下转弯半径 117px)
# homing_strength : float —— 最大转向角速度,单位 弧度/秒
# (单层词条发版值 1.5 ≈ 350 速度下转弯半径 233px)
# homing_range : float —— 选目标搜索半径,默认 400.0
# homing_target_id: int —— 锁定的 entity_id-1 = 未锁定/待重选
# homing_retry_at : int —— 重选失败后的退避到期时刻(ms 墙钟),成功即 erase