feat(wilderness): 实现相邻野外关卡接缝空间对齐与出入口坐标咬合 #69

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

背景

在原版暗黑 2 中,同一幕内的所有室外野外关卡并非完全独立的离散空间(由 Levels.txt 的 OffsetX/OffsetY = -1 明确指出):

  • 关卡在整幕的大坐标系中紧密咬合生成;
  • 前驱关卡的出口(Exit Opening)位置直接决定了后继关卡的入口(Entrance Opening)坐标与原点偏移;
  • 玩家在鲜血荒地走向冰冷之原时,两张地图在边界接缝处是 100% 物理对齐的,视线与道路没有任何断层或错位。

而当前 Web 引擎中:

  • 各野外关卡是完全独立随机生成的;
  • 关卡 A 的右侧出口可能在 y=12,而关卡 B 的左侧入口在 y=54;
  • 全靠 level-links.ts 中的接缝传送触发盒(seamArrivalSpot)强制瞬移来“掩盖”这种物理错位。一旦角色跨过接缝,常常产生视觉上的突兀跳跃与道路断裂。

改造内容

  1. 引入相邻关卡接缝约束(Seam Constraints):
    • 在关卡生成请求(WildernessRequest)中传递相邻已生成关卡的开口坐标约束。
  2. 强制出入口空间坐标对称咬合:
    • 生成后续野外关卡时,将前驱关卡已确定的开口坐标作为边界开口(Opening)的固定输入,强制出入口在几何空间上 1:1 对齐。
  3. 小径与主干道接缝对齐:
    • 道路控制顶点严格对齐边界开口中心,使道路在跨关卡时保持视觉连续性。

验收标准

  • 鲜血荒地与冰冷之原、冰冷之原与石块旷野等相邻野外关卡接缝坐标 1:1 对齐
  • 穿越接缝传送时视线方向、道路走势无突兀位移断裂
  • 现有接缝防无限弹射测试(tests/level-links.test.ts、tests/world-graph.test.ts)全部通过
  • npm run typecheck 零错误,npx vitest run 全绿
## 背景 在原版暗黑 2 中,同一幕内的所有室外野外关卡并非完全独立的离散空间(由 `Levels.txt` 的 `OffsetX/OffsetY = -1` 明确指出): - 关卡在整幕的大坐标系中紧密咬合生成; - 前驱关卡的出口(Exit Opening)位置直接决定了后继关卡的入口(Entrance Opening)坐标与原点偏移; - 玩家在鲜血荒地走向冰冷之原时,两张地图在边界接缝处是 100% 物理对齐的,视线与道路没有任何断层或错位。 而当前 Web 引擎中: - 各野外关卡是完全独立随机生成的; - 关卡 A 的右侧出口可能在 y=12,而关卡 B 的左侧入口在 y=54; - 全靠 `level-links.ts` 中的接缝传送触发盒(`seamArrivalSpot`)强制瞬移来“掩盖”这种物理错位。一旦角色跨过接缝,常常产生视觉上的突兀跳跃与道路断裂。 --- ## 改造内容 1. **引入相邻关卡接缝约束(Seam Constraints)**: - 在关卡生成请求(`WildernessRequest`)中传递相邻已生成关卡的开口坐标约束。 2. **强制出入口空间坐标对称咬合**: - 生成后续野外关卡时,将前驱关卡已确定的开口坐标作为边界开口(Opening)的固定输入,强制出入口在几何空间上 1:1 对齐。 3. **小径与主干道接缝对齐**: - 道路控制顶点严格对齐边界开口中心,使道路在跨关卡时保持视觉连续性。 --- ## 验收标准 - [ ] 鲜血荒地与冰冷之原、冰冷之原与石块旷野等相邻野外关卡接缝坐标 1:1 对齐 - [ ] 穿越接缝传送时视线方向、道路走势无突兀位移断裂 - [ ] 现有接缝防无限弹射测试(`tests/level-links.test.ts`、`tests/world-graph.test.ts`)全部通过 - [ ] `npm run typecheck` 零错误,`npx vitest run` 全绿
troytt added this to the [M16] 野外生成器原版一致性:还原 Blizzard DRLG 原生机制 milestone 2026-09-18 01:10:32 +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#69
No description provided.