commita41a442f5aAuthor: MishaProductions <106913236+MishaProductions@users.noreply.github.com> Date: Fri Jun 30 08:10:54 2023 +0300 Update .editorconfig Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com> commit5768cf4a0cAuthor: Misha <mishakeys20@gmail.com> Date: Fri Jun 30 08:04:37 2023 +0300 add legoutil commit7d6b00c831Author: Misha <mishakeys20@gmail.com> Date: Fri Jun 30 08:02:17 2023 +0300 Update CMakeLists.txt commitd9b49087f8Author: Misha <mishakeys20@gmail.com> Date: Fri Jun 30 08:01:06 2023 +0300 Update CMakeLists.txt commitd5a2891965Author: Misha <mishakeys20@gmail.com> Date: Fri Jun 30 07:59:03 2023 +0300 Update CMakeLists.txt commit519253bff4Merge:6cefa2e13df3f9Author: Misha <mishakeys20@gmail.com> Date: Fri Jun 30 07:57:15 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit6cefa2e9e2Author: Misha <mishakeys20@gmail.com> Date: Thu Jun 29 16:51:53 2023 +0300 add back stuff to mak file after merge commitc2b16eb8ffMerge:3c8add207912ebAuthor: Misha <mishakeys20@gmail.com> Date: Thu Jun 29 16:49:51 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit3c8add2f19Author: Misha <mishakeys20@gmail.com> Date: Thu Jun 29 13:34:15 2023 +0300 Update legobackgroundcolor.cpp commit6879f30e79Author: Misha <mishakeys20@gmail.com> Date: Wed Jun 28 18:22:35 2023 +0300 add fixme + rename MxStringVariable functions commita883f37b9dAuthor: Misha <mishakeys20@gmail.com> Date: Wed Jun 28 18:15:42 2023 +0300 address review commita919eeb7f4Author: Misha <mishakeys20@gmail.com> Date: Wed Jun 28 08:19:45 2023 +0300 Update mxbackgroundcolor.cpp commit710c1dd5eaAuthor: Misha <mishakeys20@gmail.com> Date: Wed Jun 28 08:11:13 2023 +0300 add back mak file commit25e9bbbfb0Merge:78b0e8d2d9af63Author: Misha <mishakeys20@gmail.com> Date: Wed Jun 28 08:09:03 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit78b0e8dd62Author: Misha <mishakeys20@gmail.com> Date: Tue Jun 27 18:35:58 2023 +0300 improve accuracy commit4c2e1ca95cAuthor: Misha <mishakeys20@gmail.com> Date: Mon Jun 26 13:50:40 2023 +0300 improve accuracy commit7dd3469ca3Author: Misha <mishakeys20@gmail.com> Date: Mon Jun 26 13:24:11 2023 +0300 ConvertColor wip commitb0288803a8Merge:3d168670b47f3fAuthor: MishaProductions <106913236+MishaProductions@users.noreply.github.com> Date: Mon Jun 26 09:42:08 2023 +0300 Merge branch 'isledecomp:master' into legobackgroundcolor commit3d16867a90Author: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 17:03:14 2023 +0300 90% match commit2208573eb2Author: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 12:23:47 2023 +0300 improve accuracy + add editorconfig commit288f861428Author: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 07:57:14 2023 +0300 fix makefile commit3590e59a3aAuthor: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 07:51:35 2023 +0300 Update isle.mak commitfb52ad5781Author: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 07:47:06 2023 +0300 fix build commit791cf1301aMerge:b9ecd1564d2b9eAuthor: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 07:42:09 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commitb9ecd15ca6Author: Misha <mishakeys20@gmail.com> Date: Sun Jun 25 07:40:22 2023 +0300 undo change commit6327a797bcAuthor: Misha <mishakeys20@gmail.com> Date: Sat Jun 24 21:48:08 2023 +0300 delete accidently committed files commit7ae1c05df9Author: Misha <mishakeys20@gmail.com> Date: Sat Jun 24 21:47:05 2023 +0300 implement SetColorString commit323a2ee0e7Author: Misha <mishakeys20@gmail.com> Date: Sat Jun 24 20:47:03 2023 +0300 constructor and some methods are matching commit0ce6fab3d0Author: Misha <mishakeys20@gmail.com> Date: Sat Jun 24 20:38:10 2023 +0300 constructor is almost matching
LEGO Island Decompilation
Development Vlog | Contributing | Matrix | Forums | Patreon
This is a work-in-progress decompilation of LEGO Island version 1.1. 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 very much incomplete and cannot be used at this time. Instead, if you want to test this, it is recommended to pair the recompiled ISLE.EXE with the LEGO1.DLL from the original game.
Building
This projects 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 this to the original executable 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 an accurate instruction-matching binary 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, I made a portable version that can be downloaded and used quickly instead.
- DirectX 5 SDK. Similarly, this can be found on many abandonware sites.
- 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 From Command Line
- Open a Command Prompt (
cmd). - From Visual C++ 4.2, run
BIN/VCVARS32.BAT x86to populate the path and other environment variables for compiling with MSVC. - Make a folder for compiled objects to go, such as a
buildfolder inside the source repository (the folder you cloned/downloaded to). - In your Command Prompt,
cdto the build folder. - Configure the project with CMake by running:
cmake <path-to-source> -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
- Replace
<path-to-source>with the source repository. Can be..if your build folder is inside the source repository. RelWithDebInfois recommended because it will produce debug symbols useful for further decompilation work. However, you can change this toReleaseif you don't need them.Debugbuilds are not recommended because they are unlikely to be compatible with the retailLEGO1.DLL, which is currently the only way to really use this decomp.NMake Makefilesis most recommended because it will be immediately compatible with Visual C++ 4.2. For faster builds, you can useNinja(if you have it installed), however due to limitations in Visual C++ 4.2, you can only buildReleasebuilds this way (debug symbols cannot be generated withNinja).
- Build the project by running
nmakeorcmake --build <build-folder> - When this is done, there should a recompiled
ISLE.EXEandLEGO1.DLLin the build folder.
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 into LEGO Island's install folder (usually C:\Program Files\LEGO Island or C:\Program Files (x86)\LEGO Island). Unless you're a developer, disregard the compiled LEGO1.DLL for now as it is too incomplete to be usable. 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 point to the correct location for the asset files.
Contributing
If you're interested in helping/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.
SmartHeap
Both ISLE.EXE and LEGO1.DLL were originally statically linked with SmartHeap, a drop-in replacement for malloc/free that presumably provides better heap memory management on the old low-memory (16MB) systems this game was designed for. Unfortunately, acquiring SmartHeap legally is expensive, and the chances of acquiring the exact same version used by Mindscape in the late 90s is very low. Since it's a drop-in binary-compatible replacement, this decomp can just stick with the standard malloc/free functions while still achieving matching assembly on a per-function level, however the resulting binaries will never be byte accurate as a result of this. If you notice significant size disparities, particularly in ISLE.EXE, the lack of statically linked SmartHeap libraries is why.