diablo2-web/tests
troytt 29cfccaa37 feat(world): 全局世界连通、关卡无缝切换、传送点、传送门与小地图 (fixes #23)
实现《暗黑破坏神 II》全五幕(136 个关卡)的完整世界连通拓扑、烘焙期链接落位、
运行时无缝边界与楼梯渐变过渡、传送点网络、城镇传送门以及实时小地图。

1. 全局世界连通拓扑 (src/game/world-graph.ts)
   - 融合 Levels.txt (Vis0..7, Warp0..7)、28 对野外无缝相邻接缝 (SEAMLESS_ADJACENCY)、
     23 对双向传送门链接 (PORTAL_LINKS) 以及 LvlWarp.txt (88 行几何偏移)
     构建 136 关卡、288 条有向边连通图。
   - 实现确定性边界方向分配器 (assignGateSides),保证同一关卡的多条边不会冲突。

2. 楼梯瓦片识别与几何计算 (src/game/warp-tiles.ts, src/game/level-links.ts)
   - findWarpTiles: 扫描 DS1 墙体层 (type 10/11) 提取 style 0..7 对应 Warp0..7 瓦片。
   - level-links: 显式栈 4-连通分量洪水填充提取最大可行走主区域 (largestWalkableRegion),
     向内扫描边界缺口 (findBorderOpening),以及计算安全向内落脚点 (seamArrivalSpot)。

3. 野外道路与锚点导出 (src/game/wilderness.ts, src/game/acts.ts)
   - planAct1OutdoorLevel 导出城镇过渡口、野外边界门、洞穴入口与路边地标。
   - 实现泥土路网与 256 项 8 邻域位掩码地砖自动铺设。

4. 烘焙期流水线增强 (scripts/pack-act-assets.ts)
   - buildSceneLinks 5 级流水线:DS1 真实瓦片 -> 野外生成器锚点 -> 迷宫楼梯间 ->
     预设边界扫描与营地四朝向自适应 -> 兜底安全落脚点。
   - 全量重新烘焙 samples/d2-packs (365 张地图),输出 entrances, warps, waypoints
     与 world-graph.json。

5. 运行时交互与表现 (src/scene/act-scene.ts, src/scene/transition.ts, src/game/portal.ts, src/ui/minimap.ts)
   - 支持接触边界无缝切换 (90ms 淡入淡出) 与按 G 键 / 交互楼梯传送 (220ms 淡入淡出)。
   - swapLevel 保留玩家状态(位置、属性、背包、随从)并在对应配对出入口安全落地。
   - WaypointNetwork: 小站发现与跨图传送;TownPortalSlot: T 键回城与往返传送。
   - Minimap: Tab 键切换右上角小地图 / 全屏自动地图,绘制迷雾、玩家、出口、小站、回城门。

6. 验证护栏与测试
   - verify:world-graph: 40,003 项断言确认全 136 关卡全连通、边双向对称。
   - verify:world-walk: 模拟玩家徒步全图 338 张有出口地图,1046/1046 出入口 100% 互达。
   - 补齐 tests/world-graph.test.ts, tests/warp-tiles.test.ts, tests/wilderness-roads.test.ts。
2026-09-16 23:39:33 +00:00
..
fixtures feat(mpq): 实现 ADPCM 与 Huffman 音频解码并接入 Web Audio (fixes #13) 2026-09-14 12:30:21 +00:00
collision-orientation.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
combat.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
cull.test.ts perf(render): 视口剔除 + 单批次合图 + 零分配顶点写入 (refs #16) 2026-09-15 01:30:39 +00:00
dc6.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
dcc.test.ts test: 修复三处跳过守卫,它们只在真实资源到位时才暴露 2026-09-14 14:51:50 +00:00
engine-save-load.test.ts M6:舍弃 map-scene.ts,收敛到 act-scene.ts 单轨 2026-09-15 07:40:56 +00:00
engine.test.ts fix(monster): fix loading performance, monster facing, and spawn logic (#30, #31, #32) 2026-09-15 15:03:28 +00:00
formats-malformed.test.ts test: 修复三处跳过守卫,它们只在真实资源到位时才暴露 2026-09-14 14:51:50 +00:00
implode.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
iso-terrain.test.ts M6:舍弃 map-scene.ts,收敛到 act-scene.ts 单轨 2026-09-15 07:40:56 +00:00
items.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
lockstep-hash.test.ts refactor(lockstep): 按项目规范彻底移除 any 约束逃逸并优化哈希分配性能 (refs #7) 2026-09-14 13:05:18 +00:00
m4.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
m5.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
monster-art.test.ts fix(monster): fix loading performance, monster facing, and spawn logic (#30, #31, #32) 2026-09-15 15:03:28 +00:00
monster-mapping.test.ts feat(monsters): 完成 M7 怪物 COF/DCC 8向动画与美术层接入 2026-09-15 09:45:23 +00:00
monster-packs.test.ts M7 第一步:真实怪物数据层 2026-09-15 08:06:52 +00:00
monsters.test.ts fix(monsters): 按 d2mods.info 官方规范修正 MonLvl 与 MonStats 等级/半径/稀有度逻辑 2026-09-15 08:57:15 +00:00
mpq-audio.test.ts feat(mpq): 实现 ADPCM 与 Huffman 音频解码并接入 Web Audio (fixes #13) 2026-09-14 12:30:21 +00:00
mpq-roundtrip.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
net-scene-integration.test.ts refactor(lockstep): 按项目规范彻底移除 any 约束逃逸并优化哈希分配性能 (refs #7) 2026-09-14 13:05:18 +00:00
net.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
npc-paths.test.ts fix(art): 将 NPC 渲染文件的基础寻址从 objects 修正为 monsters 2026-09-14 13:08:46 +00:00
npc-placeholder.test.ts fix(render): NPC 有立绘时不再叠加绿色占位方块 (refs #6) 2026-09-14 23:56:49 +00:00
object-lookup.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
packed-entity-art.test.ts perf(renderer): implement Raw 8-bit GPU Index Texture (gl.R8) + Shader Hardware Palette Lookup (#34) 2026-09-16 02:10:34 +00:00
packed-npc-art.test.ts fix(npc): 补齐城镇 NPC 解析的收尾问题并加上回归护栏 (refs #6) 2026-09-14 15:58:51 +00:00
reader.test.ts feat(formats): 添加安全的二进制数据读取器 2026-09-14 13:19:01 +00:00
resolve-type1.test.ts fix(npc): 补齐城镇 NPC 解析的收尾问题并加上回归护栏 (refs #6) 2026-09-14 15:58:51 +00:00
save-schema.test.ts fix(game): 移除不安全的类型转换并增加存档校验 (refs #7) 2026-09-14 12:44:19 +00:00
tbl.test.ts fix(formats): 按官方哈希桶格式重写 tbl 解码器与编码器 (fixes #8) 2026-09-14 12:30:07 +00:00
tiles.test.ts test: 引入 Vitest 测试框架、覆盖率统计与 CI 流水线 (fixes #14) 2026-09-14 12:25:28 +00:00
warp-tiles.test.ts feat(world): 全局世界连通、关卡无缝切换、传送点、传送门与小地图 (fixes #23) 2026-09-16 23:39:33 +00:00
widths.test.ts test: 修复三处跳过守卫,它们只在真实资源到位时才暴露 2026-09-14 14:51:50 +00:00
wilderness-features.test.ts fix(map-gen): fix Act 1 road/stone wall connectivity, Blood Moor river+bridge layout & Act 3 jungle river alignment 2026-09-16 04:31:10 +00:00
wilderness-roads.test.ts feat(world): 全局世界连通、关卡无缝切换、传送点、传送门与小地图 (fixes #23) 2026-09-16 23:39:33 +00:00
world-graph.test.ts feat(world): 全局世界连通、关卡无缝切换、传送点、传送门与小地图 (fixes #23) 2026-09-16 23:39:33 +00:00