[P0][T5] 修复 Act 1 荒野关卡内部连通性:64 个区块中 24 个不可达 #79
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: troytt/diablo2-web#79
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
npx tsx scripts/verify-generators.ts实测,5 个 Act 1 荒野关卡未达 90% 可达率门槛:同批次还有(一并在本 issue 内处理或至少确认根因是否相同):
| 70 Act 2 - Tomb Tal 5 | 86.7% | 26/30 |
| 125/126/127 Act 5 - Hell 1-3 | 96.6% | — |
度量口径(先读懂再动手)
scripts/verify-generators.ts:289 connectivity()+:180 walkableAreas():hasBorder,:184-189);40/64完全吻合;floodFill,四邻接子格),够不到的区块即计失败。⇒ 这是关卡内部连通性问题,62.5% 意味着 24 个内部区块被完全封死。
排查路径(根因未知,先定位再修)
建议按此顺序,每步都产出可视化证据:
标出:出生点、可达区块、不可达区块、区块间的通路宽度。
先看 24 个不可达块是连成一片还是散落——前者指向单一屏障,后者指向普遍性的通路过窄。
scene.blocked是COLLIDE_MASK_PLAYER_PATH的合成结果(
WALL|NOPLAYER|OBJECT|DOOR|NO_PATH)。分别只用WALL和只用OBJECT重跑泛洪,看是地形问题还是物件(树/岩石/营地)摆放把路堵了。
「两边各自留了通路但错位对不上」的情况——这类问题在 Issue #77 的
bKillEdge里出现过同类形态。它们共享同一套
Act 1 - Wildernessprofile,差异点收敛得很快。注意 2/4/6 都恰好是 40/64,这个「恰好相同」本身是强线索,说明是结构性的、而非随机的。
修改方案
根因确定前不预设方案。但请遵守:
MIN_REACHABLE_SHARE;除非能证明原版也有等价的兜底步骤;
DRLGOUTWILD_/DRLGOUTDOORS_下与TestGridCellSpawnValid、SetBlankGridCell、AlterAdjacentPresetGridCells相关的部分。验收标准
verify-generators的 wilderness 从 17/31 提升,且不引入新的失败项verify-packs1671/1671溯源
113c-divergence-audit.md(条目编号与本 issue 标题中的 T 编号对应)D2Common.dll,PE 时间戳0x4B95C439= 2010-03-09,ImageBase0x6FD50000修复与验证完成报告 (Issue #79)
本 Issue 提出的 Act 1 荒野关卡内部连通性严重缺失问题已彻底查明根因并修复,已合并至
main主干:1. 提交与合并信息
24eb66dfix(wilderness): 修复 Act 1 荒野关卡内部连通性与通路屏障 (Issue #79)2. 根因分析
src/game/wilderness.ts中,stampAct1DirtRoads原本使用的地面瓦片属性为style: 5, prop1: 194。Town/Floor.dt1与Outdoors/Stones.dt1)的像素及碰撞格解析,style: 5对应的是完全阻断通行的河流/水体瓦片(5×5 子格全部blockWalk: true)。stampAct1InteriorStoneWalls中的避让判断依赖roadStyles,由于样式配置错位,石墙在交叉点也未正确避让,进一步加剧了区块隔离。3. 核心修复方案
stampAct1DirtRoads中将道路瓦片由style: 5修正为暴雪原版对应的土地道路瓦片style: 0(sequence: r.int(0, 5) === 0 ? 1 : 0,prop1: 194),其 5×5 子格全部平整且无阻挡。stampAct1InteriorStoneWalls的避让配置roadStyles更新为[0]。isRoadCell中多余的floor.style === 5判断。tests/wilderness-features.test.ts与tests/wilderness-roads-multi-act.test.ts中对应的测试断言至style: 0。DRLGROOMTILE_GetTileCachemandatory seed 调用链。4. 验证效果与质量门禁
scripts/verify-generators.ts):npm run typecheck): 0 errorsnpx vitest run): 69 test files passed (1131 passed, 2 skipped, 0 failed)npx tsx scripts/verify-packs.ts): 1671/1671 项断言全部通过