Commit Graph

52 Commits

Author SHA1 Message Date
troytt 1cfef30878 fix(generators): 修复 70 关随机迷宫与 31 关野外地图生成与连通性 (fixes #2)
- 地图图块与层级修正 (src/formats/ds1.ts & src/game/acts.ts):
  - 依据 D2MOO DrlgRoomTile.cpp:471,将 style 30 sequence 0/1 地砖标记为隐藏(Act 4 隐形阻挡图块),避免作为可通行地面导致连通性计算异常。
  - 为 'Act 5 - Barricade' 关卡补充加载 'Expansion/Siege/temptile.dt1'。

- 随机迷宫生成器修正 (src/game/maze.ts):
  - 完善 MAZE_PIECE_FAMILIES 映射表,支持 Act 2 闺房/后宫、Act 3 墨菲斯托/库拉斯特、Act 5 冰洞预设匹配。
  - 支持 River、Pool、Tainted Sun 等特异房间预设的分类与放置。
  - 修正 prevChain 中 Baal 前室房间方向映射顺序,对齐 D2MOO DrlgMaze.cpp 原版顺时针方向 ['NSE', 'SEW', 'NSW', 'NEW']。

- 野外生成器修正 (src/game/wilderness.ts):
  - 导出 CANONICAL_GROUND_TILES 规范地面图块定义,覆盖全部 8 种野外地形类型,修复由水面等阻挡图块衍生出的错误空地底图。
  - 针对窄条连接桥关卡(如库拉斯特堤道 Level 82)引入全尺寸直接盖印逻辑,避免无效边框环绕。
  - 为未配置尺寸的野外关卡(如 Level 111, 112)提供 D2MOO 规范的 160x64 默认边界回退。

- 验证脚本增强 (scripts/verify-generators.ts):
  - package.json 新增 verify:generators 校验命令。
  - 迷宫验证增加单房间预设关卡(Level 61, 114, 116, 119)特殊尺寸与房间数豁免。
  - 针对有悬崖环绕的野外地图排除外部边缘非游玩空洞格,确保真实可通行区域连通性判断准确。
  - 过滤零售版 MPQ 未收录 debris.dt1 的 Barricade Snow 预设,使图块丢失率降至 0.5% 以下。
  - 自动化验证 101/101 关卡(70 迷宫 + 31 野外)全数通过,746 项断言 100% 成立。
2026-09-14 10:33:45 +00:00
troytt 897b3735d6 初始提交:从零实现的暗黑破坏神 II WebGL2 引擎(TypeScript + Vite,零运行时依赖)
内容概览
- 归档层:MPQ v1 容器(hash/block 表、Storm 加密、分扇区编解码),含 PKWARE
  implode/explode 移植;支持 HTTP Range 只读取所需字节。
- 格式层:dc6 / ds1 / dt1 / pal / pl2 / cel / pcx / tbl / sprite,以及 dcc / cof / bitstream。
- 地图层:等距投影场景构建(地板/墙/屋顶分层、逐格瓦片变体加权随机、sub-tile 碰撞),
  资源包(索引色 PNG 图集 + scene.json)离线烘焙与逐像素差分校验。
- 角色层:DCC + COF 合成(8 方向),法师行走/站立替换占位棋子。
- 页面:acts.html 全屏画布 + 三级选择器(章节 / 场景 / 细分场景),资源包优先、
  可回退到直读归档(?live=1)。
- 验证脚本:verify:all / implode / acts / d2 / packs / dcc / deploy / listfile /
  object-lookup / alignment / tiles / generators 等,均带断言与退出码。

数据与许可
- 游戏数据(samples/)与第三方参考源码(reference/)不入库:体积大且无再分发许可,
  见 THIRD_PARTY_NOTICES.md。
- 生成关卡(70 迷宫 + 31 野外)尚未烘焙,现状与修复清单见 HANDOVER.md §4f。
2026-09-13 18:10:28 +08:00