A decompilation of LEGO Island (1997)
Go to file
2025-01-11 14:02:05 -08:00
.github/workflows Revert "Update actions (#1275)" 2024-12-25 14:59:07 -05: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
build please fucking work 2025-01-11 14:02:05 -08:00
cmake please fucking work 2025-01-11 14:02:05 -08:00
CONFIG please fucking work 2025-01-11 14:02:05 -08:00
CONFIG_orig please fucking work 2025-01-11 14:02:05 -08:00
docker initial Docker support (#1308) 2025-01-02 19:16:23 -05:00
ICON_RES_SOURCE please fucking work 2025-01-11 14:02:05 -08:00
ISLE please fucking work 2025-01-11 14:02:05 -08:00
LEGO1 please fucking work 2025-01-11 14:02:05 -08:00
tools please fucking work 2025-01-11 14:02:05 -08: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 cmake: add beta10 target (#1163) 2024-11-22 01:08:47 +01:00
.gitattributes Convert all sources eol's to nl (#41) 2023-06-23 09:17:41 -07:00
.gitignore please fucking work 2025-01-11 14:02:05 -08:00
.pylintrc Add Ghidra function import script (#909) 2024-06-09 08:41:24 -04:00
CMakeLists.txt please fucking work 2025-01-11 14:02:05 -08:00
compile.bat please fucking work 2025-01-11 14:02:05 -08: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 please fucking work 2025-01-11 14:02:05 -08:00
reccmp-project.yml Progress on Helicopter::FUN_100042a0 (#1242) 2024-12-20 01:27:14 +01:00
reconfigureCMake.bat please fucking work 2025-01-11 14:02:05 -08:00

LEGO Island: The Modder's Arrival

Original LEGO Island decomp

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, Microsoft Visual C++ 4.20 (the same compiler used to build the original game) is recommended. 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 using Visual C++ 4.2 into highly-accurate binaries where the majority of functions are instruction-matching with retail. 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. Run "reconfigureCMake.bat" to configure CMake for building
  • 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. While Debug builds can be compiled and used, they are not recommended as the primary goal is to match the code to the original binary. This is because the retail binaries were compiled as Release builds.
  • 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> or by running "compile.bat"
  2. When this is done, there should be a compiled TMA_LAUNCHER.EXE and B_TMA.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.

Docker

Alternatively, we support Docker as a method of compilation. This is ideal for users on Linux and macOS who do not wish to manually configure a Wine environment for compiling this project.

Compilation should be as simple as configuring and running the following command:

docker run -d \
	-e CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo" \
	-v <path-to-source>:/isle:rw \
	-v <build-folder>:/build:rw \
	ghcr.io/isledecomp/isle:latest

<path-to-source> should be replaced with the path to the source code directory (ie: the root of this repository). <build-folder> should be replaced with the path to the build folder you'd like CMake to use during compilation.

You can pass as many CMake flags as you'd like in the CMAKE_FLAGS environment variable, but the default configuration provided in the command is already ideal for building highly-accurate binaries.

Usage

In order to run TMA, you must first configure the diskpath environment variable (usage of cdpath has been disabled entirely). This is necessary since, currently, nothing creates this environment variable, or populates it.

The registry keys can be created in (usually found in HKEY_LOCAL_MACHINE\Software\ActionSoft\LEGO Island TMA on 32-bit operating systems and HKEY_LOCAL_MACHINE\Software\Wow6432Node\ActionSoft\LEGO Island TMA on 64-bit operating systems), and should point to the location where the TMA_LAUNCHER.EXE, B_TMA.DLL, and LEGO files/folders are stored (by default, this is the build folder). As long as you

The build folder contains a copy of d3drm.dll, D3D8.dll, D3DImm.dll, DDraw.dll, and dgVoodoo.conf files, DO NOT REMOVE ANY OF THEM.

NOTE: Due to Github size limitations, and the fact this is a repo just for me to keep mirrored across devices, this repo does not include anything within the Lego folder. For the time being, access to the Lego folder cannot be requested, but may be able to in the future.

What does what?

TMA_LAUNCHER.EXE - The wrapper for B_TMA.DLL, launches the game - the equivalant to ISLE.EXE

B_TMA.DLL - The primary dll, containing all game logic - the equivalant to LEGO1.DLL

CONFIGURE.EXE - Primary configuration application, contains some options - the equivalant to CONFIG.EXE For more advanced configurations, you will need to acquire dgVoodooSetup.exe, and place it in the same folder as dgVoodoo.conf