feat(map-gen/maze): 迷宫 Waypoint 纳入预设房间替换管线,消除碰撞网格盲搜与贴图缺失 #47

Closed
opened 2026-09-17 05:20:38 +00:00 by troytt · 1 comment
Owner

背景与现状

在暗黑2的大量随机迷宫中(如地下墓穴第2层、监牢第1层、憎恨囚牢第2层、世界之石要塞第2层等)均设有传送点(Waypoint)。

当前 src/game/maze.ts 中,完全缺少 Waypoint 的放置 Pass;在离线烘焙和连通图构建中,依赖 src/game/level-links.ts:523(findWaypointSpot)在迷宫已生成的碰撞网格上盲搜 3×3 可行走空地插入虚拟传送点。

暗黑2原版逻辑(Oracle / Ground Truth)

  • 原版迷宫中的传送点并非盲插在普通房间中,而是作为专属的预置房间(Piece,如 Act 1 - Catacombs Waypoint 等,在 LvlPrest.txt 中带有 Waypoint Object)。
  • DRLG 在生成阶段,会将普通房间替换为带有传送点专用基座地砖、火盆与阵列外观的预设房间。

差异点与缺陷表现

  • TS 迷宫中的传送点仅为一个逻辑坐标点,完全缺失了原版传送点周围专属的砖石地貌与视觉艺术资产。

解决建议与改造方案

  1. 在 MAZE_PIECE_FAMILIES 与 MAZE_LEVEL_TYPE_PROFILES 中配置各迷宫关卡的 waypoint 预设替换规则组。
  2. 在 placeSpecialGroup 中将 Waypoint 房间作为独立 Special 房间类型进行合法替换。
## 背景与现状 在暗黑2的大量随机迷宫中(如地下墓穴第2层、监牢第1层、憎恨囚牢第2层、世界之石要塞第2层等)均设有传送点(Waypoint)。 当前 `src/game/maze.ts` 中,完全缺少 Waypoint 的放置 Pass;在离线烘焙和连通图构建中,依赖 `src/game/level-links.ts:523`(`findWaypointSpot`)在迷宫已生成的碰撞网格上盲搜 3×3 可行走空地插入虚拟传送点。 ## 暗黑2原版逻辑(Oracle / Ground Truth) - 原版迷宫中的传送点并非盲插在普通房间中,而是作为专属的预置房间(Piece,如 `Act 1 - Catacombs Waypoint` 等,在 `LvlPrest.txt` 中带有 Waypoint Object)。 - DRLG 在生成阶段,会将普通房间替换为带有传送点专用基座地砖、火盆与阵列外观的预设房间。 ## 差异点与缺陷表现 - TS 迷宫中的传送点仅为一个逻辑坐标点,**完全缺失了原版传送点周围专属的砖石地貌与视觉艺术资产**。 ## 解决建议与改造方案 1. 在 `MAZE_PIECE_FAMILIES` 与 `MAZE_LEVEL_TYPE_PROFILES` 中配置各迷宫关卡的 `waypoint` 预设替换规则组。 2. 在 `placeSpecialGroup` 中将 Waypoint 房间作为独立 Special 房间类型进行合法替换。
Author
Owner

已在分支 fix/issue-47 中真实修复并验证通过。

Commit: 776e2d3
验证项:

  • 13/13 单元测试通过 (tests/maze-waypoint.test.ts)
  • TypeScript 类型检查通过 (npx tsc --noEmit)
  • 生产包构建成功 (npm run build)
  • 全量 35 个测试套件 648 测试全绿
已在分支 `fix/issue-47` 中真实修复并验证通过。 Commit: `776e2d3` 验证项: - 13/13 单元测试通过 (`tests/maze-waypoint.test.ts`) - TypeScript 类型检查通过 (`npx tsc --noEmit`) - 生产包构建成功 (`npm run build`) - 全量 35 个测试套件 648 测试全绿
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#47
No description provided.