AlexTuring010/legend-of-luwa

GitHub: AlexTuring010/legend-of-luwa

通过字节级逆向工程解码2002年游戏「鹿娃传说」的自定义数据文件,构建证据驱动的wiki百科和通关攻略,实现游戏保存与研究。

Stars: 0 | Forks: 0

# 鹿娃传说 ![文档许可证: MIT](https://img.shields.io/badge/docs%20license-MIT-blue.svg) ![平台: Windows](https://img.shields.io/badge/platform-Windows-informational) ![状态: 开发中](https://img.shields.io/badge/status-work%20in%20progress-orange) **Legend of LuWa** 是一个针对 2002 年一款鲜为人知的 Windows 动作冒险游戏(同名游戏,版本 2.4e;© 1999–2001 Beijing PingYi Software Co. Ltd.,© 2002 Loowa Software Company)的逆向工程、wiki 及保存项目。在这个项目启动时,互联网上几乎没有任何关于该游戏的攻略、物品指南或 wiki —— 只有一个 MobyGames 的简短页面和几个商店页面。本项目的目标是记录整个游戏 —— 包括物品、武器、宝物、武功、boss、区域和隐藏房间 —— 外加一份完整的通关攻略,并发布一个 wiki。让单人编写 wiki 成为现实的秘诀在于:这里的几乎所有事实都是通过字节级逆向工程直接从游戏的数据文件中提取并**验证**的,而非仅凭记忆。这是一个个人独立项目。

Overworld: LuWa talks to an NPC while the heart/breath HUD shows at the top-left Interior: LuWa inside the furnished starting house The in-game world map of the six regions

Left → right: overworld exploration & dialogue · the starting house · the world map of all six regions.

## 游戏简介 这是一款以古代神话中国为背景的即时战斗冒险游戏。你扮演**鹿娃 (LuWa)**,一名年轻的战士,他的村庄遭到了袭击;你必须击败位于**玄塔 (Xuan Tower)** 的**五行怪 (Monster WuXing)** 并拯救**绿衣天使 (Green Angel)**。游戏世界在进入最终高塔前跨越了六个区域 —— 绿野、黄野、森林、金矿、沙漠和雪山 —— 游戏的进度主要通过你的剑来衡量,剑跨越五个等级进行升级: | 剑 | 攻击力 | |---|---| | 练习剑 | 6 | | 勇士剑 | 15 | | 龙剑 | 30 | | 火剑 | 60 | | 玄剑 | 100 | *© 1999–2001 Beijing PingYi Software Co. Ltd. — © 2002 Loowa Software Company.* ## 运作方式(方法) 游戏将其内容打包在自定义的 `*.add` 数据文件中。NPC 对话、物品名称、任务逻辑和房间布局都是直接从这些文件中提取出来的,并与字节偏移量进行了交叉核对。由于运行环境中**没有 Python**(仅有应用商店的精简版)和 **`strings` 二进制工具**,提取工作是通过 PowerShell (`[IO.File]::ReadAllBytes` + `BitConverter`) 和 `tr -c [:print:]` 完成的。 `Area.add` 地图格式已被成功解码,可以直接读取房间: - 地图以区块形式存储 —— 例如 `Dun40xx` 是 Monster Gold 的城堡,`Dun60xx` 是最终的地牢。 - 房间尺寸为 **31×26 块**。 - 物件采用带类型的记录格式:`[type][namelen][name][x][y]`。 - 墙壁是 `"Brick"` 类型的物件。 - 极少数边缘的 **type ID** 能够区分真实的门洞和普通墙壁(`0x7e`–`0x81` = 普通墙壁)—— 这也是发现隐藏的、无门房间的方法。 完整的格式说明位于 [`research/file-formats.md`](research/file-formats.md) 中。 ## 仓库结构 | 路径 | 内容 | |---|---| | [`installer/`](installer/) | `setup.exe`,`disk1.pak`(完整游戏,已压缩),`_fix/`(cnc-ddraw 延迟修复 + 着色器),`Install Legend of LuWa with Fix.bat`,以及 [`READ ME FIRST.txt`](installer/)。 | | [`game-data/`](game-data/) | 跟踪的数据文件:`Area.add`、`Item.add`、`Spc.add`、`Show.add`、`World.add`,以及 WinHelp 手册(`Luwa.hlp` + `Luwa.cnt`),外加一个 `README.md`。(体积约 20 MB 的 `Pic.add` 图形文件和 `Wave.add` 音频文件未纳入版本控制。) | | [`research/`](research/) | `manual.txt`(提取出的手册),`area_strings_offset.txt`(包含所有 `Area.add` 字符串及其字节偏移量),`area_script_text.txt`(完整的游戏脚本 / 对话),以及 [`file-formats.md`](research/file-formats.md)(已解码的格式)。 | | [`findings/`](findings/) | [`README.md`](findings/README.md) 索引 + [`TEMPLATE.md`](findings/TEMPLATE.md) + 带编号的发现文件,每一条都有字节偏移量证据支持。 | | [`wiki/`](wiki/) | [`README.md`](wiki/README.md)(页面规划)+ `items.md`(初始的物品 / 武器 / 宝物 / 武功页面)。 | | [`screenshots/`](screenshots/) | 捕获的游戏图像 —— `overworld-dialog.webp`、`starting-house.webp`、`world-map.jpg`。 | | 根目录 | `README.md`,`CLAUDE.md`,`LICENSE`,`.gitignore`。 | ## 亮点 / 发现 [`findings/`](findings/) 中的每一项发现都附有各自的字节偏移量证据。目前最值得关注的两项发现: - **#0001 —— 温暖球。** 这是一件任务“宝石”,你需要把它交给冰冻洞穴中的 NPC,以换取**火剑**(攻击力 60,五把剑中的第四把)。这是拯救一位老人孙女的奖励 —— 你可以在 1000 金币或温暖球之间做出选择(数据显示你甚至可以随后将金币换成温暖球)。此结论已通过 `Area.add` 中字节偏移量为 **663098** 和 **708672** 的对话证实。 - **#0002 —— 无门隐藏房间。** 击败 boss Golden Monster(**Monster Gold**)后,地图 `Dun4021` 是奶奶的牢房,里面放着**玄玉** —— 这就是 Monster Gold 绑架她的那件魔法物品。这个房间**没有正常的门**;入口位于其顶部边缘,是一个可以直接穿过的**假墙**(这就是为什么 DirtBombs 对它不起作用的原因)。它是通过扫描房间的边缘 type ID,并找出那个不是普通墙壁(`0x7e`–`0x81`)的边缘图块来定位的。 ## 发现的漏洞 对游戏进行逆向工程揭示了其代码中真实存在的 **bug**。每一个 bug 都记录在 [`findings/`](findings/) 中,并附有根本原因分析,且每一个都是**未来二进制修复的候选对象**。 **目前:已发现 1 个 bug —— 严重程度低。** | # | Bug | 严重性 | 为何影响较小 | |---|---|---|---| | 1 | **木乃伊重生 bug** —— 在青龙附近的 CaveD 洞穴中,杀死“木乃伊妈妈”(`mZummyB`)*通常*会使它**分裂成小孩**而不是死亡,而且分裂代码路径**永远不会记录击杀**,因此每次你重新进入时,木乃伊都会**重生**。已在**反编译的代码**中得到证实([发现 #0003](findings/0003-caved4-mummy-room-qinglong.md))。 | 🟢 **低** | 不阻碍游戏进程,不会损坏存档,并且有游戏内的解决方案(**用 Power Magic 一次性秒杀她**,这样她就无法分裂 → 永久死亡)。如果你不知道这个技巧,它只会*浪费时间*。 | 像这样每一个被证实的 bug 都是未来进行**二进制补丁**修复的潜在候选对象。 ## 阅读指南 - **只想通关游戏?** 从上面的亮点开始,然后浏览 [`wiki/`](wiki/) 获取物品和区域页面。 - **想验证某个说法?** [`findings/`](findings/) 中的每一个条目都引用了字节偏移量。在 [`research/`](research/) 中打开引用的文件 —— 例如 `area_strings_offset.txt` 将每个字符串映射到其在 `Area.add` 中的偏移量 —— 然后自己检查这些字节。 - **想扩展这项研究?** [`research/file-formats.md`](research/file-formats.md) 记录了解码后的 `*.add` 格式;[`findings/TEMPLATE.md`](findings/TEMPLATE.md) 是记录带有证据的新发现的模板格式。 - **想运行游戏?** 请参阅 [`installer/READ ME FIRST.txt`](installer/),然后运行 `Install Legend of LuWa with Fix.bat`。`installer/_fix/` 中捆绑的 **cnc-ddraw** 修复程序封装了游戏 2002 年的 DirectDraw 渲染,使其能够在 Windows 10/11 上流畅运行。 ## 状态 开发中。数据提取工具和 `Area.add` 格式已解码并记录在案,发现正带着证据被逐一记录,wiki 页面正根据这些发现进行内容填充。 ## 法律与保存 Legend of LuWa 在此被视为** abandonware **:它诞生于 2002 年,目前已无活跃的发行商(Loowa Software Company 和 Beijing PingYi Software Co. Ltd. 均已倒闭)。包含安装程序和数据文件严格仅用于**保存与研究**。如果你拥有相关权利并希望删除某些内容,请提交一个 issue,我们将在接到请求后将其撤下。 *Legend of LuWa © 1999–2001 Beijing PingYi Software Co. Ltd.;© 2002 Loowa Software Company。* **MIT 许可证仅涵盖本仓库中的原始文档、研究笔记和工具**。游戏本身及其所有资源仍归其原始所有者所有。 ## 许可证 [MIT](LICENSE) —— 仅适用于原始文档、研究和工具(见上述说明)。游戏二进制文件和资源不受此限。 由 [AlexTuring010](https://github.com/AlexTuring010) 独立完成。
标签:AI合规, IPv6, PowerShell, Wiki, Windows游戏, 数据解析, 游戏存档, 游戏逆向工程