这是一个 LEGO Island(1997 年版本 1.1,英文版)的功能完整反编译项目。它旨在尽可能准确,将重新编译的指令与原始机器代码尽可能匹配。目标是提供一个可修改、改进和移植到其他平台的代码库。
**状态**
ISLE.EXE 和 LEGO1.DLL 都已完全反编译,并且据我们所知,它们的功能与原始文件完全相同。但是,我们仍在继续努力提高源代码的准确性、命名、文档和结构。虽然可能仍然存在零售版中不存在的未解决的错误,但使用从此源代码派生的二进制文件应该可以完全玩游戏。
由于编译器的各种复杂性,这些二进制文件与原始可执行文件不是逐字节匹配的。我们仍然希望这可以在某个时候得到解决。
**构建**
此项目使用 CMake 构建系统,它允许在编译器和开发环境方面具有高度的灵活性。为了获得最准确的结果,建议使用 Microsoft Visual C++ 4.20(构建原始游戏时使用的相同编译器)。由于我们试图将此代码的输出与原始可执行文件尽可能地匹配,因此所有贡献都将使用此编译器的输出进行评级。
这些说明将概述如何使用 Visual C++ 4.2 将此存储库编译成高度准确的二进制文件,其中大多数函数与零售版中的指令匹配。如果您愿意,可以尝试使用其他编译器,但这需要您自担风险,本指南中不会介绍。
**先决条件**
您需要安装以下软件:
* Microsoft Visual C++ 4.2。这可以在许多废弃软件网站上找到,但安装程序在现代版本的 Windows 上可能有点不稳定。为了方便起见,可以使用可移植版本,可以快速下载和使用。
* CMake。较新版本的 Visual Studio 中的“使用 C++ 进行桌面开发”工作负载通常包含一个副本;但是,它也可以作为独立应用程序安装。
**编译**
打开命令提示符 (cmd)。
从 Visual C++ 4.2 中,运行 BIN/VCVARS32.BAT x86 以填充编译时使用的路径和其他环境变量。
创建一个文件夹用于保存已编译的对象,例如源存储库(您克隆/下载到的文件夹)中的 build 文件夹。
在命令提示符中,cd 到 build 文件夹。
通过运行以下命令使用 CMake 配置项目:
```bash
cmake <path-to-source> -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
```
Visual C++ 4.2 在包含空格的路径中存在问题。如果您收到配置或构建错误,请确保 CMake、存储库或 Visual C++ 4.2 都不在包含空格的路径中。
将 <path-to-source> 替换为源存储库。如果您的 build 文件夹在源存储库中,则可以为 ..。
建议使用 RelWithDebInfo,因为它会生成对进一步的反编译工作有用的调试符号。但是,如果不需要,可以将其更改为 Release。不建议使用调试版本,因为它们不太可能与零售版 LEGO1.DLL 兼容,而 LEGO1.DLL 目前是将此反编译用于游戏玩法的唯一方法。
最推荐使用 NMake Makefiles,因为它将立即与 Visual C++ 4.2 兼容。为了加快构建速度,您可以使用 Ninja(如果您已安装),但是由于 Visual C++ 4.2 的限制,您只能以此方式构建 Release 版本(无法使用 Ninja 生成调试符号)。
通过运行 nmake 或 cmake --build <build-folder> 构建项目。
完成后,build 文件夹中应该会有一个重新编译的 ISLE.EXE 和 LEGO1.DLL。
请注意,在某些情况下,必须运行两次 nmake,因此建议始终使用 nmake && nmake(重新)编译。
如果您有兼容 CMake 的 IDE,那么只要您可以使用 VCVARS32.BAT 并将生成器设置为 NMake Makefiles,使用此存储库应该非常简单。
**使用**
只需将已编译的 ISLE.EXE 和 LEGO1.DLL 放入 LEGO Island 的安装文件夹(通常为 C:\Program Files\LEGO Island 或 C:\Program Files (x86)\LEGO Island)。或者,只要 ISLE.EXE 和 LEGO1.DLL 在同一目录中,并且注册表项(通常为 HKEY_LOCAL_MACHINE\Software\Mindscape\LEGO Island 或 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Mindscape\LEGO Island)指向资产文件的正确位置,LEGO Island 就可以从任何目录运行。
**贡献**
如果您有兴趣帮助或为本项目做出贡献,请查看 CONTRIBUTING 页面。
**其他信息**
我有哪些版本的 LEGO Island?
右键单击 LEGO1.DLL,选择“属性”,然后切换到“详细信息”选项卡。在“版本”下,您应该会看到 1.0.0.0(1.0)或 1.1.0.0(1.1)。此外,您可以查看游戏光盘文件;1.0 的文件都显示 1997 年 8 月 8 日,而 1.1 的文件都显示 1997 年 9 月 8 日。版本 1.1 迄今为止最常见,尤其是在您不使用英语或日语版本的情况下,因此这很可能是您拥有的版本。
请注意,尽管维护与其他版本平行的版本号,但 LEGO Island 的某些本地化版本在重新编译时进行了少量更改;此反编译专门针对 LEGO Island 1.1 英文版。您可以使用以下校验和验证您是否拥有正确的版本:
* ISLE.EXE md5:f6da12249e03eed1c74810cd23beb9f5
* LEGO1.DLL md5:4e2f6d969ea2ef8655ba3fc221a0c8fe
* CONFIG.EXE md5:92d958a64a273662c591c88b09100f4a