[M20-P6] 完成 Act II–V 全 136 关卡 DRLG 1:1 移植与运行时按种子生成 #514

Closed
opened 2026-09-28 13:10:07 +00:00 by troytt · 0 comments
Owner

背景与目标

将 D2MOO (D2Common.dll 1.13c) 的 DRLG 1:1 移植从目前的 Act I 户外关卡扩展到全游戏五幕全部 136 个关卡(户外、迷宫、预设),并在客户端运行时根据 D2GS 0x03 D2GS_LOADACT 的 mapId 种子实时生成与服务端逐格、逐瓦片变体一致的地图。

前置与关联 Issue

  • 户外关卡移植:#496(Act II 关卡 41–46)、#497(Act IV 关卡 104–106、108)、#498(Act V 关卡 110–112、117、134)、#499(Act III 关卡 76–83)。
  • 瓦片变体规则:#502(已定案:单机与联机统一使用 D2 原版 DRLGROOMTILE_GetTileCache 按房间种子 + rarity 抽取)。

核心内容与 1.13c Ground Truth 对标 (D2Common/src/Drlg/)

  1. DRLG_AllocDrlg 全五幕种子链补齐 (drlg-drlg.ts):
    • 解除 src/game/drlg/drlg-drlg.ts 对 nActNo != 0 的报错限制。
    • 补齐 Act II 荷拉迪姆古墓种子滚动(nStaffTombLevel、nBossTombLevel)与 Act III 丛林互连标志(bJungleInterlink)的 SEED_RollRandomNumber(pDrlg->pSeed) 调用顺序,保证后续关卡种子与 D2Common.dll 严格一致。
  2. 全 136 关卡 Maze (DrlgMaze.cpp) 与 Preset (DrlgPreset.cpp) 统一走 1:1 移植路径:
    • 将 Act I–V 所有地下城迷宫与预设关卡统一收敛到 src/game/drlg/,移除近似生成器与伪造门朝向逻辑。
    • 单机与联机统一采用 DRLGROOMTILE_GetTileCache 选出的真实瓦片库与变体索引,确保子格碰撞掩码(pRoomCoords 5×5 subtile collision)与服务端完全一致。
  3. Oracle 扩展与运行时生成:
    • 将 tools/d2moo-oracle 与 scripts/drlg-diff.ts 扩展支持全部 136 关卡(含 Act I–V 城镇、户外、迷宫、预设)。
    • Web Worker 运行时按 (act, mapId, difficulty) 生成关卡,单帧主线程卡顿 < 4ms。

验收标准

  • npx tsx scripts/drlg-diff.ts 对全部 136 关卡 × 32 种子 × 3 难度在 act → levelGrid → rooms → maps → activation → mapTiles 全阶段 0 差异。
  • 连入真实 D2GS 跨越 Act I–V 各关卡时,服务端下发的全部 0x07 D2GS_MAPREVEAL 房间坐标 100% 命中本地 DRLG 房间。
## 背景与目标 将 D2MOO (`D2Common.dll` 1.13c) 的 DRLG 1:1 移植从目前的 Act I 户外关卡扩展到全游戏五幕全部 136 个关卡(户外、迷宫、预设),并在客户端运行时根据 D2GS `0x03 D2GS_LOADACT` 的 `mapId` 种子实时生成与服务端逐格、逐瓦片变体一致的地图。 ## 前置与关联 Issue - 户外关卡移植:#496(Act II 关卡 41–46)、#497(Act IV 关卡 104–106、108)、#498(Act V 关卡 110–112、117、134)、#499(Act III 关卡 76–83)。 - 瓦片变体规则:#502(已定案:单机与联机统一使用 D2 原版 `DRLGROOMTILE_GetTileCache` 按房间种子 + rarity 抽取)。 ## 核心内容与 1.13c Ground Truth 对标 (`D2Common/src/Drlg/`) 1. **`DRLG_AllocDrlg` 全五幕种子链补齐 (`drlg-drlg.ts`)**: - 解除 `src/game/drlg/drlg-drlg.ts` 对 `nActNo != 0` 的报错限制。 - 补齐 Act II 荷拉迪姆古墓种子滚动(`nStaffTombLevel`、`nBossTombLevel`)与 Act III 丛林互连标志(`bJungleInterlink`)的 `SEED_RollRandomNumber(pDrlg->pSeed)` 调用顺序,保证后续关卡种子与 `D2Common.dll` 严格一致。 2. **全 136 关卡 Maze (`DrlgMaze.cpp`) 与 Preset (`DrlgPreset.cpp`) 统一走 1:1 移植路径**: - 将 Act I–V 所有地下城迷宫与预设关卡统一收敛到 `src/game/drlg/`,移除近似生成器与伪造门朝向逻辑。 - 单机与联机统一采用 `DRLGROOMTILE_GetTileCache` 选出的真实瓦片库与变体索引,确保子格碰撞掩码(`pRoomCoords` 5×5 subtile collision)与服务端完全一致。 3. **Oracle 扩展与运行时生成**: - 将 `tools/d2moo-oracle` 与 `scripts/drlg-diff.ts` 扩展支持全部 136 关卡(含 Act I–V 城镇、户外、迷宫、预设)。 - Web Worker 运行时按 `(act, mapId, difficulty)` 生成关卡,单帧主线程卡顿 < 4ms。 ## 验收标准 - [ ] `npx tsx scripts/drlg-diff.ts` 对全部 136 关卡 × 32 种子 × 3 难度在 `act → levelGrid → rooms → maps → activation → mapTiles` 全阶段 0 差异。 - [ ] 连入真实 D2GS 跨越 Act I–V 各关卡时,服务端下发的全部 `0x07 D2GS_MAPREVEAL` 房间坐标 100% 命中本地 DRLG 房间。
troytt added this to the [M20] D2GS 纯客户端:接入 PvPGN + D2GS 1.13c 服务端联机 (1.13c Ground Truth) milestone 2026-09-28 13:10:07 +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#514
No description provided.