游戏内 object / NPC 显示为占位色块(缺 1.13c 美术管线,静默回退) #540

Open
opened 2026-10-01 11:26:48 +00:00 by troytt · 0 comments
Owner

现象

进入游戏后(Act 1 罗格营地),场景里有多个黄褐色方块,玩家旁边还有一个绿色矩形。这些都是客户端的占位色块,不是 1.13c 美术。

issue539-after.png

(截图来自 #539 修复后的验证,单位已经画在正确的格子上,但还是色块。)

原因(代码定位)

src/client/scene/world-renderer.ts 在单位没有加载到美术时,不报错,而是直接 renderer.drawSolid(...) 画一个纯色块:

单位类型 占位颜色 位置 说明
object(waypoint、箱子、火堆、帐篷装饰等) 黄褐 world-renderer.ts ~L420 起 除传送门(classId 59/60)外,object 没有任何美术管线
城镇 NPC(例如 Warriv) 绿 ~L380–390 NPC 美术没有预加载 / 没有解析到
其他 monster 红 同上 怪物美术缺失时
player 黄褐 ~L317 角色美术缺失时
地面物品 金黄 item 分支 找不到 flippy 图时(还会回退到 flpgld)

这些都属于静默回退,违反 AGENTS.md 里的 anti-silent-failure 规则。

期望(按 1.13c)

  1. object 美术管线:按 Objects.txt(Token / Mode / SizeX/Y / 各 mode 的帧数、Draw、Lit、Trans、OrderFlag、Parts 等)加 objects.txt 预设,打包 data/global/objects/<token>/ 下的 DCC/COF,运行时按服务器发来的 object mode 播放(包括 waypoint 激活动画、门的开关、箱子的开关)。离线打包脚本和运行时要用同一份数据契约。
  2. NPC / monster 美术:按 MonStats.txt / MonStats2.txt 的 token 和组件,在进场景时(或收到 0xAC AssignNpc 时)按需加载,覆盖所有城镇 NPC。
  3. 去掉色块回退:美术缺失时要显式报错(console error 加诊断计数,或者调试模式下画带文字的 missing 标记并上报),不能悄悄画色块。地面物品不能回退到金币图。
  4. 全量验证:所有城镇和可到达关卡的 object/NPC 都能解析到美术,missing === 0。

相关

  • #539(出生位置)修复后发现
## 现象 进入游戏后(Act 1 罗格营地),场景里有多个**黄褐色方块**,玩家旁边还有一个**绿色矩形**。这些都是客户端的占位色块,不是 1.13c 美术。 ![issue539-after.png](https://git.projectdiablo2.cn/attachments/54866fc5-28fd-437f-9321-aa360ee67d07) (截图来自 #539 修复后的验证,单位已经画在正确的格子上,但还是色块。) ## 原因(代码定位) `src/client/scene/world-renderer.ts` 在单位没有加载到美术时,不报错,而是直接 `renderer.drawSolid(...)` 画一个纯色块: | 单位类型 | 占位颜色 | 位置 | 说明 | |---|---|---|---| | object(waypoint、箱子、火堆、帐篷装饰等) | 黄褐 | `world-renderer.ts` ~L420 起 | 除传送门(classId 59/60)外,object 没有任何美术管线 | | 城镇 NPC(例如 Warriv) | 绿 | ~L380–390 | NPC 美术没有预加载 / 没有解析到 | | 其他 monster | 红 | 同上 | 怪物美术缺失时 | | player | 黄褐 | ~L317 | 角色美术缺失时 | | 地面物品 | 金黄 | item 分支 | 找不到 flippy 图时(还会回退到 `flpgld`) | 这些都属于静默回退,违反 AGENTS.md 里的 anti-silent-failure 规则。 ## 期望(按 1.13c) 1. **object 美术管线**:按 `Objects.txt`(Token / Mode / SizeX/Y / 各 mode 的帧数、`Draw`、`Lit`、`Trans`、`OrderFlag`、`Parts` 等)加 `objects.txt` 预设,打包 `data/global/objects/<token>/` 下的 DCC/COF,运行时按服务器发来的 object mode 播放(包括 waypoint 激活动画、门的开关、箱子的开关)。离线打包脚本和运行时要用同一份数据契约。 2. **NPC / monster 美术**:按 `MonStats.txt` / `MonStats2.txt` 的 token 和组件,在进场景时(或收到 `0xAC` AssignNpc 时)按需加载,覆盖所有城镇 NPC。 3. **去掉色块回退**:美术缺失时要**显式报错**(console error 加诊断计数,或者调试模式下画带文字的 missing 标记并上报),不能悄悄画色块。地面物品不能回退到金币图。 4. **全量验证**:所有城镇和可到达关卡的 object/NPC 都能解析到美术,`missing === 0`。 ## 相关 - #539(出生位置)修复后发现
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#540
No description provided.