[Parity][hud][S1][R] 死亡画面:自创暗红蒙层,中英双语文本写死且画了两遍 #637

Closed
opened 2026-10-02 11:42:50 +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 公认行为。

来源审计项:hud#2 — [S1][R] 2. 死亡画面:自创暗红蒙层,中英双语文本写死且画了两遍

  • 位置:src/client/ui/hud-manager.ts:2583-2599
  • 代码:ctx.fillStyle = 'rgba(80, 0, 0, 0.45)'; ctx.fillRect(0, 0, 800, 600);const deathMsg = 'You Have Died. Press ESC to continue. 你挂了,请按 ESC 键继续';先 ctx.fillText(deathMsg, 400, 300)(bold 22px serif),再 this.font.drawText(ctx, deathMsg, 400, 300, { font: 'font16', … })
  • 原版:本地玩家处于死亡或尸体模式时,D2Client 加载并绘制两张本地化 DC6:%s\UI\%s\youdiedhardcore(字符串 VA 0x6fb8345c)和 %s\UI\%s\youdiedinst(0x6fb83444)。0x6fb6eea9 起的流程:mov eax,ds:0x6fb8bc4c(屏幕高度全局,初值 480)→ sar esi,1; sub esi,0x5e 得到 y = 屏高/2 − 94,x = 屏宽(0x6fb8bc48,初值 640)/2,call 0x6fabd372 画第一张;然后 add esi,0x30,用同样方式画第二张(V-bin 0x6fb6eea9–0x6fb6ef77)。MPQ 中 data\local\ui\eng\youdiedhardcore.dc6 有两帧(256×36、20×36),内容是 "YOU HAVE DIED";youdiedinst.dc6 有两帧(256×36、175×36),内容是 "PRESS ESC TO CONTINUE."(V-data,已解码目视)。三张 tbl 里都没有对应的文字串(V-data)。这段代码里没有看到红色蒙层(K-中,仅就这段反汇编而言)。
  • 影响:每次死亡都能看到。文字内容、字体、位置都和原版不同,中英文混在一起;坐标写死为 800×600,扩展档位下只盖住左上角;浏览器字体和位图字体叠画两遍,出现重影。
  • 建议:打包这两张 DC6(按语言目录),分别在 (W/2, H/2−94) 和 (W/2, H/2−46) 居中绘制;删除红色蒙层和 fillText。
  • 已有 issue:—(#548 是死亡姿势问题,不同)
> **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 公认行为。 ### 来源审计项:`hud#2` — [S1][R] 2. 死亡画面:自创暗红蒙层,中英双语文本写死且画了两遍 - 位置:`src/client/ui/hud-manager.ts:2583-2599` - 代码:`ctx.fillStyle = 'rgba(80, 0, 0, 0.45)'; ctx.fillRect(0, 0, 800, 600)`;`const deathMsg = 'You Have Died. Press ESC to continue. 你挂了,请按 ESC 键继续'`;先 `ctx.fillText(deathMsg, 400, 300)`(`bold 22px serif`),再 `this.font.drawText(ctx, deathMsg, 400, 300, { font: 'font16', … })` - 原版:本地玩家处于死亡或尸体模式时,D2Client 加载并绘制两张本地化 DC6:`%s\UI\%s\youdiedhardcore`(字符串 VA 0x6fb8345c)和 `%s\UI\%s\youdiedinst`(0x6fb83444)。0x6fb6eea9 起的流程:`mov eax,ds:0x6fb8bc4c`(屏幕高度全局,初值 480)→ `sar esi,1; sub esi,0x5e` 得到 y = 屏高/2 − 94,x = 屏宽(0x6fb8bc48,初值 640)/2,`call 0x6fabd372` 画第一张;然后 `add esi,0x30`,用同样方式画第二张(V-bin 0x6fb6eea9–0x6fb6ef77)。MPQ 中 `data\local\ui\eng\youdiedhardcore.dc6` 有两帧(256×36、20×36),内容是 "YOU HAVE DIED";`youdiedinst.dc6` 有两帧(256×36、175×36),内容是 "PRESS ESC TO CONTINUE."(V-data,已解码目视)。三张 tbl 里都没有对应的文字串(V-data)。这段代码里没有看到红色蒙层(K-中,仅就这段反汇编而言)。 - 影响:每次死亡都能看到。文字内容、字体、位置都和原版不同,中英文混在一起;坐标写死为 800×600,扩展档位下只盖住左上角;浏览器字体和位图字体叠画两遍,出现重影。 - 建议:打包这两张 DC6(按语言目录),分别在 (W/2, H/2−94) 和 (W/2, H/2−46) 居中绘制;删除红色蒙层和 `fillText`。 - 已有 issue:—(#548 是死亡姿势问题,不同)
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#637
No description provided.