feat(wilderness): 还原 DRLGOUTDOORS_SpawnAct12Waypoint 小站与神殿拓扑放置算法 #68

Closed
opened 2026-09-18 01:10:22 +00:00 by troytt · 0 comments
Owner

背景

在原版暗黑 2 中,野外小站(Waypoints)与神殿(Shrines)由 DRLGOUTDOORS_SpawnAct12Waypoint 精确判定:

  • 扫描关卡已放置的房间网格列表;
  • 结合房间开阔度(Clearance)、地形边界安全区以及与主小径顶点的拓扑距离;
  • 将小站精准锚定在具有小站基座的专用预设房间,或主干小径旁开阔安全的营地房间中。

而当前 Web 引擎在 src/game/level-links.ts 中明确标明 findWaypointSpot 是一个临时占位符(stand-in):它简单地在碰撞网格中从关卡中心(gridWidth / 2, gridHeight / 2)往外做欧氏距离 BFS 寻找第一个可行走格。这常导致小站被甩在关卡中央的死角或奇怪的泥坑中。


改造内容

  1. 实现 DRLGOUTDOORS_SpawnAct12Waypoint 原版逻辑:
    • 基于宏观 8×8 房间列表评估小站候选位置;
    • 优先绑定包含小站物件的专用 DS1 预设或主干小径旁的开阔房间(Clear Room)。
  2. 移除 findWaypointSpot 中心 BFS 占位符:
    • 彻底废除简单的中央盲搜启发式,使所有野外小站位置完全数据与拓扑驱动。
  3. 神殿拓扑离散分布:
    • 神殿分布基于房间拓扑进行离散聚类,保证神殿坐落在探索支路上,避免扎堆或贴墙异常。

验收标准

  • 移除 findWaypointSpot 的中心 BFS 占位符
  • 冰冷之原、石块旷野、黑色荒地、远古之路等野外小站位置自然坐落在主干路旁或开阔营地中
  • 玩家通过小站传送落地时拥有足够的安全缓冲区域,不会与边界或障碍物产生碰撞卡死
  • npm run typecheck 零错误,npx vitest run 全绿
## 背景 在原版暗黑 2 中,野外小站(Waypoints)与神殿(Shrines)由 `DRLGOUTDOORS_SpawnAct12Waypoint` 精确判定: - 扫描关卡已放置的房间网格列表; - 结合房间开阔度(Clearance)、地形边界安全区以及与主小径顶点的拓扑距离; - 将小站精准锚定在具有小站基座的专用预设房间,或主干小径旁开阔安全的营地房间中。 而当前 Web 引擎在 `src/game/level-links.ts` 中明确标明 `findWaypointSpot` 是一个临时占位符(`stand-in`):它简单地在碰撞网格中从关卡中心(`gridWidth / 2, gridHeight / 2`)往外做欧氏距离 BFS 寻找第一个可行走格。这常导致小站被甩在关卡中央的死角或奇怪的泥坑中。 --- ## 改造内容 1. **实现 `DRLGOUTDOORS_SpawnAct12Waypoint` 原版逻辑**: - 基于宏观 8×8 房间列表评估小站候选位置; - 优先绑定包含小站物件的专用 DS1 预设或主干小径旁的开阔房间(Clear Room)。 2. **移除 `findWaypointSpot` 中心 BFS 占位符**: - 彻底废除简单的中央盲搜启发式,使所有野外小站位置完全数据与拓扑驱动。 3. **神殿拓扑离散分布**: - 神殿分布基于房间拓扑进行离散聚类,保证神殿坐落在探索支路上,避免扎堆或贴墙异常。 --- ## 验收标准 - [ ] 移除 `findWaypointSpot` 的中心 BFS 占位符 - [ ] 冰冷之原、石块旷野、黑色荒地、远古之路等野外小站位置自然坐落在主干路旁或开阔营地中 - [ ] 玩家通过小站传送落地时拥有足够的安全缓冲区域,不会与边界或障碍物产生碰撞卡死 - [ ] `npm run typecheck` 零错误,`npx vitest run` 全绿
troytt added this to the [M16] 野外生成器原版一致性:还原 Blizzard DRLG 原生机制 milestone 2026-09-18 01:10:22 +00:00
Sign in to join this conversation.
No Label
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#68
No description provided.