commit 897b3735d604a1cc98308ffa533d5f3be0e4a15b Author: troytt <47798984@qq.com> Date: Sun Sep 13 18:10:28 2026 +0800 初始提交:从零实现的暗黑破坏神 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。 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a57d470 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# 依赖与构建产物(用 npm 脚本可重建) +node_modules/ +dist/ +dist-game/ +dist-acts/ +*.log + +# 用户自备的游戏数据与本机参考源码:体积大 / 无再分发许可,绝不入库 +samples/ +*.mpq +reference/ + +# 临时调试产物 +.tmp/ +__pycache__/ +.DS_Store diff --git a/HANDOVER.md b/HANDOVER.md new file mode 100644 index 0000000..259ba74 --- /dev/null +++ b/HANDOVER.md @@ -0,0 +1,366 @@ +# 交接文档 · d2web + +**项目路径:`/root/diablo_web`**(原 `/root/codex_web/dsh/d2web`,2025-09-12 迁移;目录内没有任何写死的绝对路径,迁移后功能与迁移前一致,验证见文末「迁移后复验」) + +一句话:**用纯 TypeScript + Vite + WebGL2 从零写的暗黑破坏神 2 引擎**,读取**用户自备**的经典版 MPQ, +目标是浏览器内可玩的垂直切片。仓库**不含任何暴雪素材**,零运行时依赖(只用平台 API)。 + +--- + +## 1. 现在能玩什么 + +```bash +cd /root/diablo_web +npm install # 只装 devDependencies:vite / typescript / @types/node + +# 夹具(仓库不含素材,夹具是脚本生成的) +node scripts/make-map-fixtures.ts samples/fixtures +node scripts/make-mpq-fixture.ts samples/fixtures # 把夹具打成真 MPQ + +npm run dev # http://127.0.0.1:5173/ +``` + +| 页面 | 地址 | 内容 | +| --- | --- | --- | +| 资源检查器 | `/` 或 `/?sample=samples/spawn.mpq` | MPQ 头/存储标志/压缩掩码分布、成员列表、精灵逐帧预览 | +| 可行走演示 | `/walk.html?sample=samples/spawn.mpq` | **真实暗黑 1 归档**:CEL/CL2 精灵、调色板、8 方向走动、碰撞 | +| 单人战役沙盒 | `/map.html?data=samples/fixtures` 或 `?mpq=<你的.mpq>` | DS1+DT1 地图、战斗、掉落与拾取、背包、技能、任务、NPC 对话、存档/读档(K/L) | +| 联机合作 | `/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=0` | 2–4 人同一个世界,各控一名角色 | +| **diablo2 地图 + 女法师** | 本地 `/acts.html?act=1`;线上 `https://www.laiseek.xyz/diablo2/?act=1`(`?act=1..5`、`?level=