A work-in-progress decompilation of LEGO Island (1997)
Go to file
Christian Semmler 4c95d7c887
Some checks failed
Analyze / ${{ matrix.who }} annotations (CONFIG) (push) Has been cancelled
Analyze / ${{ matrix.who }} annotations (ISLE) (push) Has been cancelled
Analyze / ${{ matrix.who }} annotations (LEGO1) (push) Has been cancelled
Build / Download original binaries (push) Has been cancelled
Build / Current ${{ matrix.toolchain.name }} (map[clang-tidy:true msys-env:mingw-w64-clang-i686 msystem:clang32 name:msys2 clang32 no-dx5-libs:true shell:msys2 {0} werror:true]) (push) Has been cancelled
Build / Current ${{ matrix.toolchain.name }} (map[clang-tidy:true msys-env:mingw-w64-i686 msystem:mingw32 name:msys2 mingw32 shell:msys2 {0} werror:true]) (push) Has been cancelled
Build / Current ${{ matrix.toolchain.name }} (map[name:MSVC setup-cmake:true setup-msvc:true setup-ninja:true shell:sh]) (push) Has been cancelled
Build / MSVC 4.20 (push) Has been cancelled
Naming / C++ (push) Has been cancelled
Build / Compare with master (push) Has been cancelled
Build / Upload artifacts (push) Has been cancelled
Implement/match Pizza::HandleEndAction (#1128)
* Implement Pizza::HandleEndAction

* Match
2024-11-01 21:13:43 +01:00
.github/workflows Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
3rdparty Implement FLIC (#481) 2024-02-29 18:00:57 +01:00
assets Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
cmake Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
CONFIG Refactor file names based on BETA10 (#1064) 2024-07-08 14:52:50 -07:00
ISLE Add clang-tidy readability-redundant-inline-specifier (#1060) 2024-07-05 01:06:32 +02:00
LEGO1 Implement/match Pizza::HandleEndAction (#1128) 2024-11-01 21:13:43 +01:00
tools Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
util BETA10: reccomp support and Ghidra imports (#1091) 2024-08-29 11:54:23 -07:00
.clang-format User clang-format InsertBraces instead of clang-tidy (#1059) 2024-07-04 23:35:49 +02:00
.clang-tidy Add clang-tidy readability-redundant-inline-specifier (#1060) 2024-07-05 01:06:32 +02:00
.editorconfig (Proposal) Use alternative C4786 warning suppression (#312) 2023-12-08 06:37:44 -05:00
.gitattributes Convert all sources eol's to nl (#41) 2023-06-23 09:17:41 -07:00
.gitignore Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
.pylintrc Add Ghidra function import script (#909) 2024-06-09 08:41:24 -04:00
CMakeLists.txt Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
CONTRIBUTING.md Add clang-tidy readability-redundant-inline-specifier (#1060) 2024-07-05 01:06:32 +02:00
pyproject.toml Python Linting and Code Formatting (#298) 2023-11-25 13:27:42 -05:00
README.md Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00
reccmp-project.yml Use reccmp as a python requirement (#1116) 2024-10-26 05:57:47 -07:00

LEGO Island Decompilation

Development Vlog | Contributing | Matrix | Forums | Patreon

This is a work-in-progress decompilation of LEGO Island (Version 1.1, English). It aims to be as accurate as possible, matching the recompiled instructions to the original machine code as much as possible. The goal is to provide a workable codebase that can be modified, improved, and ported to other platforms later on.

Status

Currently, ISLE.EXE is completely decompiled and behaves identically to the original. A handful of stubborn instructions are not yet matching; however, we anticipate they will as more of the overall codebase is implemented.

LEGO1.DLL is still lacking some gameplay features but is generally workable. If you would like to use this, make sure to do so without interacting with save files created by the retail version, as there might still be some incompatibilities.

Building

This project uses the CMake build system, which allows for a high degree of versatility regarding compilers and development environments. For the most accurate results, it is recommended to use Microsoft Visual C++ 4.20 (the same compiler used to build the original game). Since we're trying to match the output of this code to the original executables as closely as possible, all contributions will be graded with the output of this compiler.

These instructions will outline how to compile this repository into accurate instruction-matching binaries with Visual C++ 4.2. If you wish, you can try using other compilers, but this is at your own risk and won't be covered in this guide.

Prerequisites

You will need the following software installed:

  • Microsoft Visual C++ 4.2. This can be found on many abandonware sites, but the installer can be a little iffy on modern versions of Windows. For convenience, a portable version is available that can be downloaded and used quickly instead.
  • CMake. A copy is often included with the "Desktop development with C++" workload in newer versions of Visual Studio; however, it can also be installed as a standalone app.

Compiling

  1. Open a Command Prompt (cmd).
  2. From Visual C++ 4.2, run BIN/VCVARS32.BAT x86 to populate the path and other environment variables for compiling with MSVC.
  3. Make a folder for compiled objects to go, such as a build folder inside the source repository (the folder you cloned/downloaded to).
  4. In your Command Prompt, cd to the build folder.
  5. Configure the project with CMake by running:
cmake <path-to-source> -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
  • Visual C++ 4.2 has issues with paths containing spaces. If you get configure or build errors, make sure neither CMake, the repository, nor Visual C++ 4.2 is in a path that contains spaces.
  • Replace <path-to-source> with the source repository. This can be .. if your build folder is inside the source repository.
  • RelWithDebInfo is recommended because it will produce debug symbols useful for further decompilation work. However, you can change this to Release if you don't need them. Debug builds are not recommended because they are unlikely to be compatible with the retail LEGO1.DLL, which is currently the only way to use this decompilation for gameplay.
  • NMake Makefiles is most recommended because it will be immediately compatible with Visual C++ 4.2. For faster builds, you can use Ninja (if you have it installed), however due to limitations in Visual C++ 4.2, you can only build Release builds this way (debug symbols cannot be generated with Ninja).
  1. Build the project by running nmake or cmake --build <build-folder>
  2. When this is done, there should a recompiled ISLE.EXE and LEGO1.DLL in the build folder.
  3. Note that nmake must be run twice under certain conditions, so it is advisable to always (re-)compile using nmake && nmake.

If you have a CMake-compatible IDE, it should be pretty straightforward to use this repository, as long as you can use VCVARS32.BAT and set the generator to NMake Makefiles.

Usage

Simply place the compiled ISLE.EXE and LEGO1.DLL into LEGO Island's install folder (usually C:\Program Files\LEGO Island or C:\Program Files (x86)\LEGO Island). Alternatively, LEGO Island can run from any directory as long as ISLE.EXE and LEGO1.DLL are in the same directory, and the registry keys (usually HKEY_LOCAL_MACHINE\Software\Mindscape\LEGO Island or HKEY_LOCAL_MACHINE\Software\Wow6432Node\Mindscape\LEGO Island) point to the correct location for the asset files.

Contributing

If you're interested in helping or contributing to this project, check out the CONTRIBUTING page.

Additional Information

Which version of LEGO Island do I have?

Right click on LEGO1.DLL, select Properties, and switch to the Details tab. Under Version you should either see 1.0.0.0 (1.0) or 1.1.0.0 (1.1). Additionally, you can look at the game disc files; 1.0's files will all say August 8, 1997, and 1.1's files will all say September 8, 1997. Version 1.1 is by far the most common, especially if you're not using the English or Japanese versions, so that's most likely the version you have. Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation is specifically targeting the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below:

  • ISLE.EXE md5: f6da12249e03eed1c74810cd23beb9f5
  • LEGO1.DLL md5: 4e2f6d969ea2ef8655ba3fc221a0c8fe
  • CONFIG.DLL md5: 92d958a64a273662c591c88b09100f4a