diablo2-web/docs/LOCAL_DATA.md

94 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 本机游戏数据位置(原版 MPQ 与 DLL)
> 本文件只记录**本机开发环境**的数据摆放约定。仓库本身不含任何暴雪资源,
> 见 [`THIRD_PARTY_NOTICES.md`](../THIRD_PARTY_NOTICES.md) 与 `.gitignore`。
## 1. 权威路径
原版《暗黑破坏神 II》1.13c 的全部数据(MPQ 归档 + 原版 DLL)统一存放在**磁盘持久目录**:
```
/usr/local/google/home/taodao/d2-data/
```
仓库通过软链接引用它(`samples/d2` 是引擎 `DEFAULT_BASES` 的第一顺位):
```bash
ln -s /usr/local/google/home/taodao/d2-data \
/usr/local/google/home/taodao/d2w-wg1-main/samples/d2
```
验证链接生效:
```bash
ls -la samples/d2/ | head
curl -s -o /dev/null -w '%{http_code}\n' -r 0-1023 http://localhost:8080/samples/d2/Patch_D2.mpq
# 期望输出 206(Range 生效,?live=1 直读归档才能工作)
```
> [!CAUTION]
> **绝对不要把数据放在 `/tmp`。**
> 这台 Cloudtop 的 `/tmp` 是 48 GB 的 **tmpfs(内存盘)**,每次重启全部清空。
> 历史教训:2026-09-14 曾把数据放在 `/tmp/diablo2-web/Diablo II V1.13C/` 并软链到
> `samples/d2`,机器在 2026-09-16 15:35 重启后数据全丢,`samples/d2` 变成死链,
> 导致角色与怪物立绘全部退化为占位方块。
## 2. 目录内容清单
共 **1.9 GB**:11 个 MPQ + 22 个 DLL(录入时间 2026-09-17 10:41~10:47)。
### 2.1 引擎必需的 MPQ(`DATA_ARCHIVES` + `CHARACTER_ARCHIVE`)
挂载顺序即覆盖优先级,`Patch_D2.mpq` 最高。
| 文件 | 大小 | 用途 |
| --- | ---: | --- |
| `d2data.mpq` | 268 MB | 地图 DS1/DT1、`Levels.txt` / `MonStats.txt` / `LvlPrest.txt` 等全部表格、调色板 |
| `d2char.mpq` | 270 MB | **角色立绘**(女法师 DCC + COF 逐层合成)——缺它角色就是方块 |
| `d2exp.mpq` | 250 MB | 资料片(第五幕、扩展怪物与地块) |
| `Patch_D2.mpq` | 3.9 MB | 1.13c 补丁,覆盖前三者 |
### 2.2 其余 MPQ(当前引擎暂未消费,音频解码链路已具备)
`d2music.mpq`(348 MB)、`d2sfx.mpq`(55 MB)、`d2speech.mpq`(163 MB)、`d2xtalk.mpq`(60 MB)、
`D2xMusic.mpq`(55 MB)、`d2video.mpq`(442 MB)、`D2xVideo.mpq`(111 MB)。
### 2.3 原版 DLL(**参考资料,不参与运行**)
22 个原版 DLL 一并留存,作为逆向比对的**权威事实来源**,尤其是:
| DLL | 为什么留着 |
| --- | --- |
| `D2Common.dll` | **DRLG 地图生成**全在这里:`DRLGOUTDOORS_GenerateLevel`、`DRLGOUTPLACE_PlaceAct1245OutdoorBorders`、`DRLGTILESUB_DoSubstitutions`。修野外悬崖拼接、迷宫房间生长时的对照基准 |
| `D2Game.dll` | **怪物惰性填充与视距休眠/唤醒**(`bPopulated`、Active/Sleeping Room Streaming)、怪物 AI、战斗数值公式 |
| `D2Client.dll` | 渲染与画家序、屏幕坐标换算 |
| `D2CMP.dll` | DCC / DC6 解压参考 |
| `Storm.dll` | MPQ 容器与 PKWARE implode 参考 |
其余(`D2Win`/`D2gfx`/`D2Direct3D`/`D2Glide`/`D2DDraw`/`D2Gdi`/`D2Lang`/`D2Launch`/`D2Multi`/
`D2Net`/`D2MCPClient`/`D2sound`/`Bnclient`/`Fog`/`binkw32`/`SmackW32`/`ijl11`)暂无直接用途,
一并保留以免再次缺失。
## 3. 多 worktree 共享
本机同时存在十几个 `d2w-issue-*` / `d2w-monster-*` 工作树。**不要各拷一份**(一份 1.9 GB),
每个工作树各自软链到同一目录即可:
```bash
for d in ~/d2w-issue-* ~/d2w-monster-* ~/d2w-wg1-main; do
rm -rf "$d/samples/d2"
ln -s /usr/local/google/home/taodao/d2-data "$d/samples/d2"
done
```
`.gitignore` 已有 `samples/*` 与 `*.mpq` 规则,软链与数据都不会误入库。
## 4. 数据到位后可解锁的流程
| 命令 | 产出 | 解决的问题 |
| --- | --- | --- |
| `npx tsx scripts/pack-entity-assets.ts` | `samples/d2-packs/entities/`(`char-so.r8`、`monster-*.r8`) | 角色 / 怪物从占位方块变成真实 8 向立绘 |
| `npm run pack:data` | 重烘 365 张地图到 `samples/d2-packs/` | 修正野外悬崖断层等地形问题(需先修 `wilderness.ts` 生成算法) |
| `npm run verify:d2` | 端到端解码自检 | 确认归档可读、表格可解析 |
| `?live=1` | 浏览器按 HTTP Range 直读归档 | 免烘焙查看任意关卡(慢,作为回退路径) |