fix(wilderness): 修复 pack-act-assets 漏传 dt1Libraries 及 wilderness 自动贴图跨章节污染 #113

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

背景与问题描述

在 #111 全地图走查中,发现大量野外关卡出现严重地表穿孔与黑色网格空洞:

  • Act 4 Mesa 1 (104): 370 missingTiles
  • Act 2 Desert 3 (43): 88 missingTiles
  • Act 5 Barricade 2 (112): 77 missingTiles
  • Act 5 Barricade Snow (117): 130 missingTiles

根因剖析 (1.13c 对比)

  1. scripts/pack-act-assets.ts:1677 在调用 generateWilderness(profile, seed, undefined) 时漏传了 dt1Libraries 参数。
  2. 在 src/game/wilderness.ts 中:
    • 因为没有传入 libraries,isTileAvailable 中的 availableTiles.size === 0,导致其直接回退返回 true(恒真);
    • applyGroundTransitions (Issue #70 引入的自动边缘过渡算法) 内部硬编码了针对 Act 1 的查找表(style: 0 泥路, style: 2 水流);
    • 由于 isTileAvailable 失去约束,算法强行将 Act 1 的泥路与水流转接瓦片涂抹到了沙漠、雪地与台地边缘上;
    • 这些章节的 DT1 库中根本不存在对应的 (style, sequence),导致数百处引用悬空形成密集黑色空洞。

修复要求

  1. 在 scripts/pack-act-assets.ts 中调用 generateWilderness 时补全传入 dt1Libraries: resolvedLibraries。
  2. 完善 src/game/wilderness.ts 中的 applyGroundTransitions:
    • 修复 isTileAvailable 的空库防错逻辑;
    • 严格限制过渡贴图仅在目标 (style, sequence) 真实存在于当前关卡已载入的 DT1 库中时才应用;
    • 对非 Act 1 野外地图增加类型防护,杜绝跨章节瓦片样式污染。
  3. 单元测试更新并确保 tests/wilderness-ground-blend.test.ts 及相关测试全过。
  4. 门禁通过:npm run typecheck、npx vitest run。

关联主 Issue: #111

## 背景与问题描述 在 #111 全地图走查中,发现大量野外关卡出现严重地表穿孔与黑色网格空洞: - Act 4 Mesa 1 (104): 370 missingTiles - Act 2 Desert 3 (43): 88 missingTiles - Act 5 Barricade 2 (112): 77 missingTiles - Act 5 Barricade Snow (117): 130 missingTiles ## 根因剖析 (1.13c 对比) 1. `scripts/pack-act-assets.ts:1677` 在调用 `generateWilderness(profile, seed, undefined)` 时**漏传了 `dt1Libraries` 参数**。 2. 在 `src/game/wilderness.ts` 中: - 因为没有传入 libraries,`isTileAvailable` 中的 `availableTiles.size === 0`,导致其直接回退返回 `true`(恒真); - `applyGroundTransitions` (Issue #70 引入的自动边缘过渡算法) 内部硬编码了针对 Act 1 的查找表(`style: 0` 泥路, `style: 2` 水流); - 由于 `isTileAvailable` 失去约束,算法强行将 Act 1 的泥路与水流转接瓦片涂抹到了沙漠、雪地与台地边缘上; - 这些章节的 DT1 库中根本不存在对应的 (style, sequence),导致数百处引用悬空形成密集黑色空洞。 ## 修复要求 1. 在 `scripts/pack-act-assets.ts` 中调用 `generateWilderness` 时补全传入 `dt1Libraries: resolvedLibraries`。 2. 完善 `src/game/wilderness.ts` 中的 `applyGroundTransitions`: - 修复 `isTileAvailable` 的空库防错逻辑; - 严格限制过渡贴图仅在目标 (style, sequence) 真实存在于当前关卡已载入的 DT1 库中时才应用; - 对非 Act 1 野外地图增加类型防护,杜绝跨章节瓦片样式污染。 3. 单元测试更新并确保 `tests/wilderness-ground-blend.test.ts` 及相关测试全过。 4. 门禁通过:`npm run typecheck`、`npx vitest run`。 关联主 Issue: #111
Author
Owner

修复完成并已合并至 main

  • Commit: 985d85ebb04feba8d498faab1fe370f996a11496 (Merge: 0535a63 之前合入)
  • 变更摘要:
    1. 修复 scripts/pack-act-assets.ts 中调用 generateWilderness 漏传 dt1Libraries 的参数缺失缺陷。
    2. 修正 src/game/wilderness.ts 中 isTileAvailable 在 libraries 为空时的无条件放行逻辑。
    3. 增强 applyGroundTransitions (auto-tiling LUT):在应用道路及水面过渡贴图前严格校验 isTileAvailable,杜绝 Act 1 过渡贴图在沙漠(Desert 3)、高地(Mesa 1)、雪山堡垒(Barricade 2 / Snow)等跨章节场景中被错误强行引入导致的数百处 missingTile 报错。
  • 验证结果: npm run typecheck 0 errors,全量 vitest run 测试通过。
### 修复完成并已合并至 main - **Commit**: `985d85ebb04feba8d498faab1fe370f996a11496` (Merge: `0535a63` 之前合入) - **变更摘要**: 1. 修复 `scripts/pack-act-assets.ts` 中调用 `generateWilderness` 漏传 `dt1Libraries` 的参数缺失缺陷。 2. 修正 `src/game/wilderness.ts` 中 `isTileAvailable` 在 libraries 为空时的无条件放行逻辑。 3. 增强 `applyGroundTransitions` (auto-tiling LUT):在应用道路及水面过渡贴图前严格校验 `isTileAvailable`,杜绝 Act 1 过渡贴图在沙漠(Desert 3)、高地(Mesa 1)、雪山堡垒(Barricade 2 / Snow)等跨章节场景中被错误强行引入导致的数百处 missingTile 报错。 - **验证结果**: `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#113
No description provided.