A work-in-progress modernization of LEGO Island (1997)
Find a file
itsmattkc a66dbb8136 Squashed commit of the following:
commit a41a442f5aba5fa2f22efc46e66b055f8e99b04e
Author: 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>

commit 5768cf4a0cf58778cd1265220936081c43c91769
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:04:37 2023 +0300

    add legoutil

commit 7d6b00c831d01688749d6cadb8b8ea683d18a52d
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:02:17 2023 +0300

    Update CMakeLists.txt

commit d9b49087f8681a858b7d32b38cc937160b5a5ab0
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:01:06 2023 +0300

    Update CMakeLists.txt

commit d5a2891965b0e3c992c92e7782c4cc54fc7ae7af
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 07:59:03 2023 +0300

    Update CMakeLists.txt

commit 519253bff43426d2b4cbb916f0fecba8fd677695
Merge: 6cefa2e 13df3f9
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 07:57:15 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 6cefa2e9e259f57033d6e50f9be0af5de6e2df61
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 16:51:53 2023 +0300

    add back stuff to mak file after merge

commit c2b16eb8ff2e99b160bf5d5b75df7960da8f2877
Merge: 3c8add2 07912eb
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 16:49:51 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 3c8add2f1979f1ac2372f06c2025cda4104c2db2
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 13:34:15 2023 +0300

    Update legobackgroundcolor.cpp

commit 6879f30e79caaef23319488b729283cda6f46c25
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 18:22:35 2023 +0300

    add fixme + rename MxStringVariable functions

commit a883f37b9d67c57bc336812bf83ee85c363f8931
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 18:15:42 2023 +0300

    address review

commit a919eeb7f48b31554b8edf499c131f570b1529bf
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:19:45 2023 +0300

    Update mxbackgroundcolor.cpp

commit 710c1dd5ea53212c43e1564480f27370f28ca7e4
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:11:13 2023 +0300

    add back mak file

commit 25e9bbbfb0d330e70570f59823b2e88f159ad49d
Merge: 78b0e8d 2d9af63
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:09:03 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 78b0e8dd625add18ea9a62dcd72a820e1a0beab5
Author: Misha <mishakeys20@gmail.com>
Date:   Tue Jun 27 18:35:58 2023 +0300

    improve accuracy

commit 4c2e1ca95c4463da20266f61299370fa0ecda9f4
Author: Misha <mishakeys20@gmail.com>
Date:   Mon Jun 26 13:50:40 2023 +0300

    improve accuracy

commit 7dd3469ca330254e0177c838991b9436bb3c90c2
Author: Misha <mishakeys20@gmail.com>
Date:   Mon Jun 26 13:24:11 2023 +0300

    ConvertColor wip

commit b0288803a834a9e4f41486bb60c81935b94a4cd2
Merge: 3d16867 0b47f3f
Author: MishaProductions <106913236+MishaProductions@users.noreply.github.com>
Date:   Mon Jun 26 09:42:08 2023 +0300

    Merge branch 'isledecomp:master' into legobackgroundcolor

commit 3d16867a901862d66aec632e269061c81e7d443d
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 17:03:14 2023 +0300

    90% match

commit 2208573eb2cf73465c2a5b49a63db66dd8f6f841
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 12:23:47 2023 +0300

    improve accuracy + add editorconfig

commit 288f8614281788fd3a19f07a7732b06337253e34
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:57:14 2023 +0300

    fix makefile

commit 3590e59a3a9f021b0de3833e80d320238255bc46
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:51:35 2023 +0300

    Update isle.mak

commit fb52ad57813214a8af9ef21fdb9ef39005961778
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:47:06 2023 +0300

    fix build

commit 791cf1301af1e194025908d8812edaa4faf0f3cf
Merge: b9ecd15 64d2b9e
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:42:09 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit b9ecd15ca60b6d4c26fe10405e80b08bbf02d62e
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:40:22 2023 +0300

    undo change

commit 6327a797bce26c277c21c71e5ec56a446f227aa5
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 21:48:08 2023 +0300

    delete accidently committed files

commit 7ae1c05df962ff64029c3264aaf824801a3055cc
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 21:47:05 2023 +0300

    implement SetColorString

commit 323a2ee0e7a4c767d80535f2f0e3a8036124da05
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 20:47:03 2023 +0300

    constructor and some methods are matching

commit 0ce6fab3d085b2e2e68c95bdff59557c483486fe
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 20:38:10 2023 +0300

    constructor is almost matching
2023-06-30 16:33:59 -07:00
.github/workflows ci: upload SVGs to external sites 2023-06-30 16:00:27 -07:00
dx5sdk/cdrom Create setup.iss 2023-06-11 14:16:58 +02:00
ISLE implement all DLL exports (as TODOs) 2023-06-30 11:34:39 -07:00
LEGO1 Squashed commit of the following: 2023-06-30 16:33:59 -07:00
tools reccmp: use "monospace" in svg font 2023-06-30 16:12:22 -07:00
.editorconfig Squashed commit of the following: 2023-06-30 16:33:59 -07:00
.gitattributes Convert all sources eol's to nl (#41) 2023-06-23 09:17:41 -07:00
.gitignore Yet another CMake implementation (#61) 2023-06-29 16:39:02 -07:00
CMakeLists.txt Squashed commit of the following: 2023-06-30 16:33:59 -07:00
CONTRIBUTING.md Update CONTRIBUTING.md 2023-06-29 00:49:57 -07:00
README.md readme: use SVGs [skip ci] 2023-06-30 16:06:30 -07:00

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

  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
  • Replace <path-to-source> with the source repository. 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 really use this decomp.
  • 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.

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.