[Parity][net-world][S1][H] 技能 → 动画 mode 用写死的 ID 集合加 A1/SC 二选一,没读 Skills.txt anim / monanim #565

Closed
opened 2026-10-02 11:42:35 +00:00 by troytt · 1 comment
Owner

1.13c 客户端保真度审计立项(基准快照:7bd1090 / main @ 77a20c7)

证据标记说明:V-data = 1.13c MPQ 数据表 (.txt / animdata.d2 / .tbl / pal.pl2);V-src = D2MOO 逆向源码;V-bin = 1.13c DLL 反汇编;K = 1.13c 公认行为。

来源审计项:net-world#4 — [S1][H] F4 技能 → 动画 mode 用写死的 ID 集合加 A1/SC 二选一,没读 Skills.txt anim / monanim

  • 位置:src/client/world/client-world.ts:203-207(PHYSICAL_ATTACK_SKILL_IDS)、828-831(mode = monster ? (isAttack ? 4 : 7) : (isAttack ? 7 : 10))
  • 原版:玩家动作模式取 Skills.txt anim(A1/A2/TH/KK/S1–S4/SQ/SC),序列技能另有 seqnum;怪物取 monanim(V-data skills.txt anim/monanim 列)。逐项对比后的不一致(V-data):
    • 在集合里(画 A1)但 anim 不是 A1:Throw(2)=TH、Jab(10)=SQ、Impale(19)=SQ、Lightning Bolt(20)=TH、Smite(97)=S1、Charge(107)=SQ、Double Swing(133)=SQ、Double Throw(140)=SQ、Frenzy(147)=SQ、Whirlwind(151)=SQ。
    • 不在集合里(画 SC)但 anim 不是 SC:Kick(1)=KK、Left Hand Throw(4)=S4、Left Hand Swing(5)=S3、Power Strike(14)=A1、Poison/Plague Javelin(15/25)=TH、Fend(30)=A1、Lightning Strike(34)=A1、Lightning Fury(35)=TH、Inferno(41)=SQ、Lightning(49)/Chain Lightning(53)=SQ、Poison Dagger(73)=A1、Vengeance(111)=A1、Leap(132)/Leap Attack(143)=SQ、Arctic Blast(230)=SQ、Feral Rage/Maul/Fire Claws/Fury=A1、Rabies/Hunger=S3、Tiger Strike/Cobra Strike/Royal Strike 等=A1、Dragon Talon(255)/Dragon Tail(270)=KK、刺客陷阱/哨兵类(Shock Web、Blade Sentinel、Fire Blast 等)=S2、Fists of Fire/Dragon Claw/Claws of Thunder/Blades of Ice/Blade Fury/Dragon Flight=SQ。
    • 怪物 monanim 在 A1/A2/S1/S2/S3/SC/NU 之间变化,代码只有 A1/SC 两种。
  • 影响:大量技能播错动作(踢腿、投掷、序列攻击、左手技能、刺客/德鲁伊近战),帧数和施法时长也随之用错(时长按 mode 取 AnimData)。怪物技能的 A2/S1–S3 永远不播。
  • 建议:玩家用 skills.txt anim(SQ 再接 seqnum / monseq),怪物用 monanim,直接映射成 PlrMode/MonMode 下标;删掉 PHYSICAL_ATTACK_SKILL_IDS。
  • 已有 issue:—(#525 讲的是技能管线架构,不覆盖这张映射表的数值错误)
> **1.13c 客户端保真度审计立项**(基准快照:`7bd1090` / `main @ 77a20c7`) > 证据标记说明:`V-data` = 1.13c MPQ 数据表 (`.txt` / `animdata.d2` / `.tbl` / `pal.pl2`);`V-src` = D2MOO 逆向源码;`V-bin` = 1.13c DLL 反汇编;`K` = 1.13c 公认行为。 ### 来源审计项:`net-world#4` — [S1][H] F4 技能 → 动画 mode 用写死的 ID 集合加 A1/SC 二选一,没读 Skills.txt `anim` / `monanim` - 位置:`src/client/world/client-world.ts:203-207`(`PHYSICAL_ATTACK_SKILL_IDS`)、`828-831`(`mode = monster ? (isAttack ? 4 : 7) : (isAttack ? 7 : 10)`) - 原版:玩家动作模式取 Skills.txt `anim`(A1/A2/TH/KK/S1–S4/SQ/SC),序列技能另有 `seqnum`;怪物取 `monanim`(V-data `skills.txt` `anim`/`monanim` 列)。逐项对比后的不一致(V-data): - 在集合里(画 A1)但 `anim` 不是 A1:Throw(2)=TH、Jab(10)=SQ、Impale(19)=SQ、Lightning Bolt(20)=TH、Smite(97)=S1、Charge(107)=SQ、Double Swing(133)=SQ、Double Throw(140)=SQ、Frenzy(147)=SQ、Whirlwind(151)=SQ。 - 不在集合里(画 SC)但 `anim` 不是 SC:Kick(1)=KK、Left Hand Throw(4)=S4、Left Hand Swing(5)=S3、Power Strike(14)=A1、Poison/Plague Javelin(15/25)=TH、Fend(30)=A1、Lightning Strike(34)=A1、Lightning Fury(35)=TH、Inferno(41)=SQ、Lightning(49)/Chain Lightning(53)=SQ、Poison Dagger(73)=A1、Vengeance(111)=A1、Leap(132)/Leap Attack(143)=SQ、Arctic Blast(230)=SQ、Feral Rage/Maul/Fire Claws/Fury=A1、Rabies/Hunger=S3、Tiger Strike/Cobra Strike/Royal Strike 等=A1、Dragon Talon(255)/Dragon Tail(270)=KK、刺客陷阱/哨兵类(Shock Web、Blade Sentinel、Fire Blast 等)=S2、Fists of Fire/Dragon Claw/Claws of Thunder/Blades of Ice/Blade Fury/Dragon Flight=SQ。 - 怪物 `monanim` 在 A1/A2/S1/S2/S3/SC/NU 之间变化,代码只有 A1/SC 两种。 - 影响:大量技能播错动作(踢腿、投掷、序列攻击、左手技能、刺客/德鲁伊近战),帧数和施法时长也随之用错(时长按 mode 取 AnimData)。怪物技能的 A2/S1–S3 永远不播。 - 建议:玩家用 `skills.txt anim`(SQ 再接 `seqnum` / monseq),怪物用 `monanim`,直接映射成 PlrMode/MonMode 下标;删掉 `PHYSICAL_ATTACK_SKILL_IDS`。 - 已有 issue:—(#525 讲的是技能管线架构,不覆盖这张映射表的数值错误)
Author
Owner

Fixed and verified in commit cc0756de2e.

  • Full typecheck clean across all 7 projects.
  • Comprehensive parity test suite passing (timing-modes-parity.test.ts).
  • Merged and pushed to main.
Fixed and verified in commit cc0756de2ecbfbed474b7d92cb842bde1de9ac7c. - Full typecheck clean across all 7 projects. - Comprehensive parity test suite passing (timing-modes-parity.test.ts). - Merged and pushed to main.
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#565
No description provided.