[动画系统 TODO] 实现完整 1.13c IAS / EIAS 攻击速度公式 #142

Open
opened 2026-09-21 12:13:11 +00:00 by troytt · 0 comments
Owner

背景

动画系统实施计划在 Q3 决策中选择先做基础速度:动画节奏直接取 AnimData.D2 的 animationSpeed 字段,按

ticksPerCycle = framesPerDirection × 256 / animationSpeed

在 25 Hz sim tick 下播放(8.8 定点累加器,frameIndex = acc >> 8)。

本 issue 追踪的遗留项

实现完整的 1.13c 攻击速度链路,让装备上的 IAS 词条在视觉动画与实际攻速上都真实生效:

  1. EIAS 收益递减:EIAS = floor(120 × IAS / (120 + IAS))
  2. WSM(Weapon Speed Modifier):Weapons.txt 第 20 列 speed
  3. 动画基速合成:AnimationSpeed = 256 × BaseRate × (100 + EIAS - WSM) / 100,并做 [?, 175%] 上限钳制
  4. 帧命中点换算:命中帧(AnimData 帧事件 code=1)在加速后的实际 tick 落点
  5. 与技能的 seqtrans / seqnum / seqinput 列交互

现有接口预留

src/game/actor-animator.ts 的 tick(speedScale = 256) 已经预留了速度缩放入口,且实现保证加速时不会漏掉帧事件(对 (index, next] 区间内每一帧按序查表)。本 issue 只需要计算出正确的 speedScale 并接线。

已验证的输入数据

  • Weapons.txt 列位:name=0, type=1, code=3, speed=20 (WSM), StrBonus=21, 2handed=13, wclass=37, 2handedwclass=38(src/game/weapons.ts 已解析)
  • AnimData.D2 基础速度实测样本:SOWLHTH 256、SONUHTH 128、SOTNHTH 80、BAWL1HS 168、BARN1HS 216、PAWL1HS 288、SKA1HTH 208

约束

严格按 D2 v1.13c 反编译行为实现,不得编造公式。

## 背景 动画系统实施计划在 Q3 决策中选择**先做基础速度**:动画节奏直接取 `AnimData.D2` 的 `animationSpeed` 字段,按 ``` ticksPerCycle = framesPerDirection × 256 / animationSpeed ``` 在 25 Hz sim tick 下播放(8.8 定点累加器,`frameIndex = acc >> 8`)。 ## 本 issue 追踪的遗留项 实现完整的 1.13c 攻击速度链路,让装备上的 IAS 词条在**视觉动画**与**实际攻速**上都真实生效: 1. **EIAS 收益递减**:`EIAS = floor(120 × IAS / (120 + IAS))` 2. **WSM(Weapon Speed Modifier)**:`Weapons.txt` 第 20 列 `speed` 3. **动画基速合成**:`AnimationSpeed = 256 × BaseRate × (100 + EIAS - WSM) / 100`,并做 `[?, 175%]` 上限钳制 4. **帧命中点换算**:命中帧(`AnimData` 帧事件 code=1)在加速后的实际 tick 落点 5. 与技能的 `seqtrans` / `seqnum` / `seqinput` 列交互 ## 现有接口预留 `src/game/actor-animator.ts` 的 `tick(speedScale = 256)` 已经预留了速度缩放入口,且实现保证**加速时不会漏掉帧事件**(对 `(index, next]` 区间内每一帧按序查表)。本 issue 只需要计算出正确的 `speedScale` 并接线。 ## 已验证的输入数据 - `Weapons.txt` 列位:`name=0, type=1, code=3, speed=20 (WSM), StrBonus=21, 2handed=13, wclass=37, 2handedwclass=38`(`src/game/weapons.ts` 已解析) - `AnimData.D2` 基础速度实测样本:`SOWLHTH` 256、`SONUHTH` 128、`SOTNHTH` 80、`BAWL1HS` 168、`BARN1HS` 216、`PAWL1HS` 288、`SKA1HTH` 208 ## 约束 严格按 D2 v1.13c 反编译行为实现,**不得编造公式**。
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#142
No description provided.