[M9] 真实战斗数学:AR/DR 命中、格挡、硬直、抗性与元素伤害 #24

Closed
opened 2026-09-15 06:35:59 +00:00 by troytt · 0 comments
Owner

里程碑 M9 · 重要程度 ★★★★☆ · 风险 中 · 依赖:M6, M7
完整路线图见 ROADMAP.md


背景

src/game/combat.ts 第 16–21 行的模块文档自己承认这不是暗黑 2 的战斗模型:

"What this is not: it is not Diablo II's combat model. Real damage involves attack rating
versus defence, hit recovery, block, resistances, elemental damage and per-skill formulas.
This is the skeleton those formulas plug into — the states, cooldowns, resource pools and
event stream are the parts that need to exist first."

骨架已经在了(状态机、冷却、资源池、事件流),本里程碑就是往里填公式。

另外 DEMO_EXPERIENCE 只有 [0, 0, 20, 60, 140, 280] 共 5 级,真实 D2 是 99 级。

改动清单

  • [MODIFY] src/game/acts.ts —— 加载 ItemStatCost.txt、Properties.txt、Experience.txt
  • [NEW] src/game/formulas.ts —— 逐条实现:
    • 命中率 AR vs DR(含 5%–95% 封顶)
    • 格挡
    • 硬直 / 眩晕(hit recovery)
    • 元素伤害
    • 抗性与免疫
    • 物理 / 魔法伤害拆分
    • 暴击 / 致命一击
    • 伤害减免
  • [MODIFY] src/game/combat.ts —— damageMonster 从「直接扣血」改为走 formulas.ts
  • [NEW] tests/formulas.test.ts

验证要求

⚠️ 必须做差分验证,以社区公式文档 + D2MOO 源码为 oracle,不得自己拍脑袋。

这与工程既有的方法论一致:所有解码器都是与 StormLib / DevilutionX / OpenDiablo2 / D2MOO 对照验证的,
而不是自己跟自己对。战斗公式没有理由降低标准。

另一条相关铁律:判据要能失败。verify-net.ts 里的篡改用例会改写飞行中的输入,
要求在正确的 tick 报出 desync——「永远不会响的检测器」比没有检测器更糟。

验收

  • 同一把武器打不同防御的怪,命中率与伤害数字符合社区计算器
  • tests/formulas.test.ts 对已知数值案例逐条断言通过
  • 99 级经验表接入,升级曲线正确
> **里程碑 M9** · 重要程度 ★★★★☆ · 风险 中 · 依赖:M6, M7 > 完整路线图见 [`ROADMAP.md`](https://git.projectdiablo2.cn/troytt/diablo2-web/src/branch/main/ROADMAP.md) --- ## 背景 `src/game/combat.ts` 第 16–21 行的模块文档**自己承认**这不是暗黑 2 的战斗模型: > "What this is *not*: it is not Diablo II's combat model. Real damage involves attack rating > versus defence, hit recovery, block, resistances, elemental damage and per-skill formulas. > This is the skeleton those formulas plug into — the states, cooldowns, resource pools and > event stream are the parts that need to exist first." **骨架已经在了**(状态机、冷却、资源池、事件流),本里程碑就是往里填公式。 另外 `DEMO_EXPERIENCE` 只有 `[0, 0, 20, 60, 140, 280]` 共 5 级,真实 D2 是 99 级。 ## 改动清单 - **[MODIFY] `src/game/acts.ts`** —— 加载 `ItemStatCost.txt`、`Properties.txt`、`Experience.txt` - **[NEW] `src/game/formulas.ts`** —— 逐条实现: - 命中率 `AR vs DR`(含 5%–95% 封顶) - 格挡 - 硬直 / 眩晕(hit recovery) - 元素伤害 - 抗性与免疫 - 物理 / 魔法伤害拆分 - 暴击 / 致命一击 - 伤害减免 - **[MODIFY] `src/game/combat.ts`** —— `damageMonster` 从「直接扣血」改为走 `formulas.ts` - **[NEW] `tests/formulas.test.ts`** ## 验证要求 > ⚠️ **必须做差分验证**,以社区公式文档 + D2MOO 源码为 oracle,**不得自己拍脑袋**。 > > 这与工程既有的方法论一致:所有解码器都是与 StormLib / DevilutionX / OpenDiablo2 / D2MOO 对照验证的, > 而不是自己跟自己对。战斗公式没有理由降低标准。 > > 另一条相关铁律:**判据要能失败**。`verify-net.ts` 里的篡改用例会改写飞行中的输入, > 要求在正确的 tick 报出 desync——「永远不会响的检测器」比没有检测器更糟。 ## 验收 - [ ] 同一把武器打不同防御的怪,命中率与伤害数字符合社区计算器 - [ ] `tests/formulas.test.ts` 对已知数值案例逐条断言通过 - [ ] 99 级经验表接入,升级曲线正确
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#24
No description provided.