[Parity][net-world][S1][H] #550 加入的客户端导弹模拟:几何参数是自己编的,内嵌导弹表和 ID 映射与 1.13c Missiles.txt 不一致 #568

Closed
opened 2026-10-02 11:42:39 +00:00 by troytt · 0 comments
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#8 — [S1][H] F8 #550 加入的客户端导弹模拟:几何参数是自己编的,内嵌导弹表和 ID 映射与 1.13c Missiles.txt 不一致

  • 位置:src/client/world/client-world.ts:209-240(LINEAR_SKILL_MISSILES/RADIAL_RING_SKILLS)、588-611、613-629、631-662、665-691、716-732、734-787、789-799、801-810、1138-1160、1180-1250、1287-1290;src/common/skills/missiles-data.ts:224(CANONICAL_113C_MISSILES)、1752-1762(MISSILE_CLASS_ID_TO_KEY)
  • 原版与差异:
    • Nova / Frost Nova / Poison Nova 的环固定 32 发,原版 64 发(V-src D2Game Skills.cpp:3203-3236)。
    • Static Field 固定半径 15,原版用 aurarangecalc = ln12,par1=5、par2=1,1 级半径 5(V-data skills.txt #42;V-src SkillSor.cpp:406-430)。实测距离 12 的怪也被命中。
    • Charged Bolt / Multiple Shot / Teeth 的数量是手写公式,原版读 calc1("min(24,ln12)" 等);目前数值碰巧接近,但绕过了数据表。Chain Lightning 在 10 格内无限弹射,原版 calc1 = "ln34 / 5" 限次。
    • Meteor 下落 25 tick、高度 240、偏移 −10(meteorcenter Range=60);blizzard1 maxTicks 8(txt Range=9);Fist of the Heavens 用 'foa'(txt 里没有,实际是 fistoftheheavensdelay #233 / fistoftheheavensbolt #234,Vel 12、Range 50、AnimLen 16);Fire Wall 5 段、间距 1.5;Frozen Orb 每 2 tick 放一次、每次 0.65 rad;诅咒命中半径 6;导弹命中半径 1.75;Blessed Hammer 每 tick +0.28 rad、+0.45 半径;Charged Bolt 抖动 ±0.35。来源都不明(?)。原版这些由 Missiles.txt 的 Vel/Range/Param/SubMissile 和客户端 DoFunc 决定(K 中)。
    • 内嵌 CANONICAL_113C_MISSILES 只有 71 行(txt 有 684 行)。其中 8 个 key 在 1.13c Missiles.txt 里不存在:lightning、thunderstorm、electricnova、freezeexplode、glacialspikeejecta、hydrafire、groundfirebig、foa。另有 36 行字段不符,例如 coldarrow id 13(txt 40)、guidedarrow 31(txt 86)、immolationarrow 63(txt 85)、strafearrow 215(txt 682)、bolt 1(txt 31)、blaze AnimLen 14(txt 37)、nova/frostnova loopAnim 1(txt 0)、lightningbolt AnimLen 16(txt 2)、meteorfire Range 30(txt 90)、bonespear 的爆炸导弹写成 teethexplode(txt 为 bonespearexplode)(V-data missiles.txt)。
    • 由此生成的 MISSILE_CLASS_ID_TO_KEY 有 10 个 id 指错:1→bolt(txt javelin)、13→coldarrow(cr_arrow1)、31→guidedarrow(bolt)、63→immolationarrow(mummy1)、64→immolationfire(mummy2)、83→groundfirebig(stuckarrow)、89→glacialspikeejecta(freezingarrowexp2)、211→foa(necromage4)、212→fistoftheheavensbolt(sparkle)、215→strafearrow(chargedstrikebolt)(V-data)。Lightning(49) 的线性导弹用了 'lightning',txt 里是 lightningbolt。
    • 导弹速度换算 vel/8:未核实(?)。
  • 影响:新星类技能看起来稀疏;静电场、连锁闪电、诅咒的命中范围和次数不对;服务器下发的导弹 id ���在这 10 个错映射上时画成别的导弹;光效帧数、循环和射程与原版不同。
  • 建议:导弹参数一律读 $excel/missiles.txt 全表(按 Id 和 Missile 名索引);数量和范围读 Skills.txt calc1..4、aurarangecalc、Param1..8;删除内嵌的 71 行表和那 8 个虚构 key。
  • 已有 issue:—(#550 已合并;本条是其残留问题)
> **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#8` — [S1][H] F8 #550 加入的客户端导弹模拟:几何参数是自己编的,内嵌导弹表和 ID 映射与 1.13c Missiles.txt 不一致 - 位置:`src/client/world/client-world.ts:209-240`(`LINEAR_SKILL_MISSILES`/`RADIAL_RING_SKILLS`)、`588-611`、`613-629`、`631-662`、`665-691`、`716-732`、`734-787`、`789-799`、`801-810`、`1138-1160`、`1180-1250`、`1287-1290`;`src/common/skills/missiles-data.ts:224`(`CANONICAL_113C_MISSILES`)、`1752-1762`(`MISSILE_CLASS_ID_TO_KEY`) - 原版与差异: - Nova / Frost Nova / Poison Nova 的环固定 32 发,原版 64 发(V-src D2Game `Skills.cpp:3203-3236`)。 - Static Field 固定半径 15,原版用 `aurarangecalc` = `ln12`,par1=5、par2=1,1 级半径 5(V-data `skills.txt` #42;V-src `SkillSor.cpp:406-430`)。实测距离 12 的怪也被命中。 - Charged Bolt / Multiple Shot / Teeth 的数量是手写公式,原版读 `calc1`("min(24,ln12)" 等);目前数值碰巧接近,但绕过了数据表。Chain Lightning 在 10 格内无限弹射,原版 `calc1` = "ln34 / 5" 限次。 - Meteor 下落 25 tick、高度 240、偏移 −10(`meteorcenter` Range=60);blizzard1 maxTicks 8(txt Range=9);Fist of the Heavens 用 `'foa'`(txt 里没有,实际是 `fistoftheheavensdelay` #233 / `fistoftheheavensbolt` #234,Vel 12、Range 50、AnimLen 16);Fire Wall 5 段、间距 1.5;Frozen Orb 每 2 tick 放一次、每次 0.65 rad;诅咒命中半径 6;导弹命中半径 1.75;Blessed Hammer 每 tick +0.28 rad、+0.45 半径;Charged Bolt 抖动 ±0.35。来源都不明(?)。原版这些由 Missiles.txt 的 Vel/Range/Param/SubMissile 和客户端 DoFunc 决定(K 中)。 - 内嵌 `CANONICAL_113C_MISSILES` 只有 71 行(txt 有 684 行)。其中 8 个 key 在 1.13c Missiles.txt 里不存在:lightning、thunderstorm、electricnova、freezeexplode、glacialspikeejecta、hydrafire、groundfirebig、foa。另有 36 行字段不符,例如 coldarrow id 13(txt 40)、guidedarrow 31(txt 86)、immolationarrow 63(txt 85)、strafearrow 215(txt 682)、bolt 1(txt 31)、blaze AnimLen 14(txt 37)、nova/frostnova loopAnim 1(txt 0)、lightningbolt AnimLen 16(txt 2)、meteorfire Range 30(txt 90)、bonespear 的爆炸导弹写成 teethexplode(txt 为 bonespearexplode)(V-data `missiles.txt`)。 - 由此生成的 `MISSILE_CLASS_ID_TO_KEY` 有 10 个 id 指错:1→bolt(txt javelin)、13→coldarrow(cr_arrow1)、31→guidedarrow(bolt)、63→immolationarrow(mummy1)、64→immolationfire(mummy2)、83→groundfirebig(stuckarrow)、89→glacialspikeejecta(freezingarrowexp2)、211→foa(necromage4)、212→fistoftheheavensbolt(sparkle)、215→strafearrow(chargedstrikebolt)(V-data)。Lightning(49) 的线性导弹用了 `'lightning'`,txt 里是 `lightningbolt`。 - 导弹速度换算 `vel/8`:未核实(?)。 - 影响:新星类技能看起来稀疏;静电场、连锁闪电、诅咒的命中范围和次数不对;服务器下发的导弹 id ���在这 10 个错映射上时画成别的导弹;光效帧数、循环和射程与原版不同。 - 建议:导弹参数一律读 `$excel/missiles.txt` 全表(按 Id 和 Missile 名索引);数量和范围读 Skills.txt `calc1..4`、`aurarangecalc`、`Param1..8`;删除内嵌的 71 行表和那 8 个虚构 key。 - 已有 issue:—(#550 已合并;本条是其残留问题)
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#568
No description provided.