fix(tiles): 参照 1.13c DRLGROOM_LoadDt1Files 补充常驻全局通用 DT1 (InvisWal / Blank / Warp) #112

Closed
opened 2026-09-18 14:13:47 +00:00 by troytt · 1 comment
Owner

背景与问题描述

在 #111 全地图走查中,发现 Act 5 Hell 1 (Level 125) 与 Pandemonium 3 (Level 135) 各有 1 处地表穿孔:

  • missingRefs: floor style=49 sequence=7:0 @cell(30,18)。

根因剖析 (1.13c 对比)

  1. 这两个关卡使用 LevelType 35 (Act 5 - Lava),随机地牢拼块使用了暴雪官方 DS1 文件 LavaNS.ds1 / LavaN.ds1。
  2. 暴雪原版 1.13c D2Common.dll 反汇编证据 (DRLGROOM_LoadDt1Files @ 0x6fdb8400 ~ 0x6fdb8506):引擎在遍历 LvlTypes.txt 载入 1~32 个插槽后,必然会无条件全局常驻加载 3 个底层 DT1:
    • data\global\tiles\Act1\Outdoors\Blank.dt1
    • data\global\tiles\Act1\Barracks\InvisWal.dt1
    • data\global\tiles\Act1\Barracks\Warp.dt1
  3. 官方预制件在边界放置了 style=49, sequence=7 的地表瓦片(位于 InvisWal.dt1,属于隐形碰撞墙)。
  4. 当前 Web 版 src/game/acts.ts 的 resolveLevelLibraries 仅解析了 LvlTypes.txt 声明的插槽,缺少原版引擎对通用 DT1 的常驻加载保证,导致该瓦片在图集打包时判定为 missing。

修复要求

  1. 在 src/game/acts.ts 的 resolveLevelLibraries(及相关 DT1 解析路径)中,严格按照 1.13c 原版逻辑追加加载全局通用 DT1:
    • data/global/tiles/ACT1/OUTDOORS/blank.dt1
    • data/global/tiles/ACT1/BARRACKS/inviswal.dt1
    • data/global/tiles/ACT1/BARRACKS/warp.dt1
  2. 确保 scripts/pack-act-assets.ts 与 scripts/verify-acts.ts / scripts/verify-tiles.ts 能正确解析 style=49 sequence=7 瓦片。
  3. 增加单元测试 tests/global-dt1-load.test.ts,验证所有关卡库均包含常驻通用 DT1 且能正确解析 InvisWal 瓦片。
  4. 门禁通过:npm run typecheck、npx vitest run。

关联主 Issue: #111

## 背景与问题描述 在 #111 全地图走查中,发现 Act 5 Hell 1 (Level 125) 与 Pandemonium 3 (Level 135) 各有 1 处地表穿孔: - `missingRefs`: `floor style=49 sequence=7:0 @cell(30,18)`。 ## 根因剖析 (1.13c 对比) 1. 这两个关卡使用 `LevelType 35 (Act 5 - Lava)`,随机地牢拼块使用了暴雪官方 DS1 文件 `LavaNS.ds1` / `LavaN.ds1`。 2. 暴雪原版 1.13c `D2Common.dll` 反汇编证据 (`DRLGROOM_LoadDt1Files` @ `0x6fdb8400` ~ `0x6fdb8506`):引擎在遍历 `LvlTypes.txt` 载入 1~32 个插槽后,**必然会无条件全局常驻加载 3 个底层 DT1**: - `data\global\tiles\Act1\Outdoors\Blank.dt1` - `data\global\tiles\Act1\Barracks\InvisWal.dt1` - `data\global\tiles\Act1\Barracks\Warp.dt1` 3. 官方预制件在边界放置了 `style=49, sequence=7` 的地表瓦片(位于 `InvisWal.dt1`,属于隐形碰撞墙)。 4. 当前 Web 版 `src/game/acts.ts` 的 `resolveLevelLibraries` 仅解析了 `LvlTypes.txt` 声明的插槽,缺少原版引擎对通用 DT1 的常驻加载保证,导致该瓦片在图集打包时判定为 missing。 ## 修复要求 1. 在 `src/game/acts.ts` 的 `resolveLevelLibraries`(及相关 DT1 解析路径)中,严格按照 1.13c 原版逻辑追加加载全局通用 DT1: - `data/global/tiles/ACT1/OUTDOORS/blank.dt1` - `data/global/tiles/ACT1/BARRACKS/inviswal.dt1` - `data/global/tiles/ACT1/BARRACKS/warp.dt1` 2. 确保 `scripts/pack-act-assets.ts` 与 `scripts/verify-acts.ts` / `scripts/verify-tiles.ts` 能正确解析 `style=49 sequence=7` 瓦片。 3. 增加单元测试 `tests/global-dt1-load.test.ts`,验证所有关卡库均包含常驻通用 DT1 且能正确解析 InvisWal 瓦片。 4. 门禁通过:`npm run typecheck`、`npx vitest run`。 关联主 Issue: #111
Author
Owner

修复完成并已合并至 main

  • Commit: ed344259a1a6ace52be967ee71cbd089e15954e4 (Merge: 0535a63)
  • 变更摘要:
    1. 参照原版 1.13c DRLGROOM_LoadDt1Files (0x6fdb8400) 行为,在 src/game/acts.ts 的 resolveLevelLibraries 中无条件常驻追加 Blank.dt1, InvisWal.dt1, Warp.dt1。
    2. 修复 Act 5 Hell 1 (125) 与 Pandemonium 3 (135) 缺少的 InvisWal.dt1 (style=49 sequence=7 行走阻挡隐形墙) missingTile 报错。
    3. 新增单元测试 tests/global-dt1-load.test.ts 验证全局常驻 DT1 加载与 style=49 识别。
  • 验证结果: npm run typecheck 0 errors,全量 vitest run 测试通过。
### 修复完成并已合并至 main - **Commit**: `ed344259a1a6ace52be967ee71cbd089e15954e4` (Merge: `0535a63`) - **变更摘要**: 1. 参照原版 1.13c `DRLGROOM_LoadDt1Files` (0x6fdb8400) 行为,在 `src/game/acts.ts` 的 `resolveLevelLibraries` 中无条件常驻追加 `Blank.dt1`, `InvisWal.dt1`, `Warp.dt1`。 2. 修复 Act 5 Hell 1 (125) 与 Pandemonium 3 (135) 缺少的 `InvisWal.dt1` (style=49 sequence=7 行走阻挡隐形墙) missingTile 报错。 3. 新增单元测试 `tests/global-dt1-load.test.ts` 验证全局常驻 DT1 加载与 style=49 识别。 - **验证结果**: `npm run typecheck` 0 errors,全量 `vitest run` 测试通过。
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#112
No description provided.