From 13df3f906da7d2521599ebc5ff4db85fddcb9207 Mon Sep 17 00:00:00 2001 From: MattKC <34096995+itsmattkc@users.noreply.github.com> Date: Thu, 29 Jun 2023 21:45:29 -0700 Subject: [PATCH 01/22] Update README.md [skip ci] --- README.md | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f89f1f15..bc4c4802 100644 --- a/README.md +++ b/README.md @@ -2,47 +2,53 @@ [Development Vlog](https://www.youtube.com/playlist?list=PLbpl-gZkNl2COf_bB6cfgTapD5WduAfPz) | [Contributing](https://github.com/isledecomp/isle/blob/master/CONTRIBUTING.md) | [Matrix](https://matrix.to/#/#isledecomp:matrix.org) | [Forums](https://forum.mattkc.com/viewforum.php?f=1) | [Patreon](https://www.patreon.com/mattkc) -This is a **work-in-progress** decompilation of LEGO Island version 1.1. It aims to be relatively faithful, but not byte accurate. The goal is to provide a workable codebase that can be modified, improved, and ported to other platforms later on. +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, however there are some known inaccuracies. It should work if you pair it with the original game's `LEGO1.DLL` (and other files), however small things may not work correctly yet. Work on decompiling `LEGO1.DLL` has only just started and currently it is too incomplete to be usable. +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 -LEGO Island was compiled with Microsoft Visual C++ 4.20, so that's what this decompilation targets. However it should compile with NMAKE on newer versions of Visual Studio too. +This projects uses the [CMake](https://cmake.org/) 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. -### Recommended Instructions -These instructions use the development IDE from Visual C++ 4.20. By modern standards, it can be a little clunky to use, especially on newer versions of Windows, however it's still relatively straightforward. If you prefer a command line process that can fit into a modern workflow/IDE, see the instructions below. +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. -1. Install Microsoft Visual C++ 4.20. 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](https://github.com/itsmattkc/msvc420) that can be downloaded and used quickly instead. -2. Download and install the DirectX 5 SDK. Similarly, this can be found on many abandonware sites. -3. Open "Microsoft Developer Studio" (`BIN/MSDEV.EXE` for those using the portable). -4. `File` > `Open Workspace` -5. Select `ISLE.MDP` from this repository. -6. Select a build configuration. `ISLE - Win32 Release` is recommended because, at this point in time, you'll almost certainly be pairing it with the retail `LEGO1.DLL`, which is also a release build. -7. `Build` > `Build ISLE.EXE`. This will build `ISLE.EXE` in a folder called `Release`. It will also build `LEGO1.DLL` since it's listed as a dependency, however the `LEGO1.DLL` produced is too incomplete to be usable at this time. +#### Prerequisites -### Command Line Instructions +You will need the following software installed: -For some users, this may be preferable to using an obsolete graphical IDE. Any modern IDE should support custom command line build steps, making this potentially easier to fit into a familiar contemporary workflow. This guide assumes a general familiarity with the Windows command prompt. +- 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](https://github.com/itsmattkc/msvc420) that can be downloaded and used quickly instead. +- DirectX 5 SDK. Similarly, this can be found on many abandonware sites. +- [CMake](https://cmake.org/). 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. -1. Acquire Visual Studio/Visual C++. Any version after 4.20 should work here, but 4.20 is the only one guaranteed to work. If you wish to use 4.20, it 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](https://github.com/itsmattkc/msvc420) that can be downloaded and used quickly instead. -2. Download and install the DirectX 5 SDK. Similarly, this can be found on many abandonware sites, but later versions of Visual Studio include the DirectX SDK by default, so this step may be skippable (you definitely need it for MSVC 4.20). -3. Open an x86/32-bit developer command prompt. Depending on the version of VS you're using, you may have a start menu item for it already (e.g. `x86 Native Tools Command Prompt`). Alternatively, you can start a normal command prompt (`cmd`) and run `vcvars32.bat` from the Visual Studio folder (run `BIN/VCVARS32.BAT x86` if you're using the portable 4.20). -4. `cd` to the folder you cloned this repository to. -5. `mkdir Release` if the folder doesn't already exist. Some versions of NMAKE may make this folder by itself, but some don't. -6. Run `nmake /f isle.mak CFG="ISLE - Win32 Release"`. This will build `ISLE.EXE` in the `Release` folder you just made. It will also build `LEGO1.DLL` since it's listed as a dependency, however the `LEGO1.DLL` produced is too incomplete to be usable at this time. +#### Compiling From Command Line + +1. Open a Command Prompt (`cmd`). +1. From Visual C++ 4.2, run `BIN/VCVARS32.BAT x86` to populate the path and other environment variables for compiling with MSVC. +1. Make a folder for compiled objects to go, such as a `build` folder inside the source repository (the folder you cloned/downloaded to). +1. In your Command Prompt, `cd` to the build folder. +1. Configure the project with CMake by running: +``` +cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo +``` + - Replace `` 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 ` +1. 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. -Ideally, this decompilation should be paired with version 1.1. It may work on 1.0 too, however this is not guaranteed. - ## Contributing If you're interested in helping/contributing to this project, check out the [CONTRIBUTING](https://github.com/isledecomp/isle/blob/master/CONTRIBUTING.md) page. From 4c9e138cbfb1167b39e89c2e3221bbe76386602c Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 30 Jun 2023 11:34:39 -0700 Subject: [PATCH 02/22] implement all DLL exports (as TODOs) Now we can use our own compiled LEGO1.LIB rather than one generated from the original. Also implements a script that tests them to help ensure future commits don't break them. --- .github/workflows/build.yml | 5 + CMakeLists.txt | 336 +++++++++++++++++---------------- ISLE/ext/lego1.def | 137 -------------- ISLE/ext/lego1.exp | Bin 21310 -> 0 bytes ISLE/ext/lego1.lib | Bin 100720 -> 0 bytes LEGO1/dllmain.cpp | 2 +- LEGO1/legoanimationmanager.cpp | 9 + LEGO1/legobackgroundcolor.cpp | 7 + LEGO1/legobuildingmanager.cpp | 11 ++ LEGO1/legogamestate.cpp | 45 +++++ LEGO1/legoinputmanager.cpp | 18 ++ LEGO1/legomodelpresenter.cpp | 10 + LEGO1/legoomni.cpp | 70 +++++++ LEGO1/legoomni.h | 4 +- LEGO1/legopartpresenter.cpp | 14 ++ LEGO1/legopartpresenter.h | 2 + LEGO1/legopathboundary.h | 9 + LEGO1/legoroi.cpp | 17 ++ LEGO1/legoroi.h | 4 +- LEGO1/mxbitmap.cpp | 27 +++ LEGO1/mxbitmap.h | 2 + LEGO1/mxdirectdraw.cpp | 22 +++ LEGO1/mxomni.cpp | 48 ++++- LEGO1/mxomni.h | 9 +- LEGO1/mxpalette.cpp | 15 +- LEGO1/mxpalette.h | 2 +- LEGO1/mxscheduler.cpp | 15 ++ LEGO1/mxstreamer.cpp | 14 ++ LEGO1/mxtransitionmanager.cpp | 6 + LEGO1/mxvariabletable.cpp | 20 ++ LEGO1/mxvideomanager.cpp | 6 + LEGO1/realtimeview.cpp | 32 ++++ LEGO1/viewmanager.cpp | 7 + tools/verexp/DUMPBIN.EXE | Bin 0 -> 5632 bytes tools/verexp/LINK.EXE | Bin 0 -> 514048 bytes tools/verexp/MSPDB41.DLL | Bin 0 -> 271872 bytes tools/verexp/verexp.py | 82 ++++++++ 37 files changed, 694 insertions(+), 313 deletions(-) delete mode 100644 ISLE/ext/lego1.def delete mode 100644 ISLE/ext/lego1.exp delete mode 100644 ISLE/ext/lego1.lib create mode 100644 LEGO1/legobackgroundcolor.cpp create mode 100644 LEGO1/legogamestate.cpp create mode 100644 LEGO1/legomodelpresenter.cpp create mode 100644 LEGO1/legopartpresenter.cpp create mode 100644 LEGO1/legopathboundary.h create mode 100644 LEGO1/legoroi.cpp create mode 100644 LEGO1/mxbitmap.cpp create mode 100644 LEGO1/mxdirectdraw.cpp create mode 100644 LEGO1/mxscheduler.cpp create mode 100644 LEGO1/mxvariabletable.cpp create mode 100644 LEGO1/realtimeview.cpp create mode 100644 LEGO1/viewmanager.cpp create mode 100755 tools/verexp/DUMPBIN.EXE create mode 100755 tools/verexp/LINK.EXE create mode 100644 tools/verexp/MSPDB41.DLL create mode 100755 tools/verexp/verexp.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3e2b0d64..7ae88155 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -97,6 +97,11 @@ jobs: diff -u ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT || true diff -u LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT || true + + - name: Test Exports + shell: bash + run: | + python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL - name: Upload Artifact uses: actions/upload-artifact@master diff --git a/CMakeLists.txt b/CMakeLists.txt index 11927c11..5c5900ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,176 @@ cmake_minimum_required(VERSION 2.8...3.5 FATAL_ERROR) project(isle CXX) option(ISLE_BUILD_APP "Build ISLE.EXE application" ON) -option(ISLE_BUILD_LIB "Build LEGO1.DLL library" ON) + +add_library(lego1 SHARED + LEGO1/act1state.cpp + LEGO1/act2brick.cpp + LEGO1/act2policestation.cpp + LEGO1/act3.cpp + LEGO1/act3shark.cpp + LEGO1/act3state.cpp + LEGO1/ambulance.cpp + LEGO1/ambulancemissionstate.cpp + LEGO1/animstate.cpp + LEGO1/beachhouseentity.cpp + LEGO1/bike.cpp + LEGO1/buildingentity.cpp + LEGO1/bumpbouy.cpp + LEGO1/carrace.cpp + LEGO1/dllmain.cpp + LEGO1/dunebuggy.cpp + LEGO1/elevatorbottom.cpp + LEGO1/gasstation.cpp + LEGO1/gasstationentity.cpp + LEGO1/gasstationstate.cpp + LEGO1/helicopter.cpp + LEGO1/helicopterstate.cpp + LEGO1/historybook.cpp + LEGO1/hospital.cpp + LEGO1/hospitalentity.cpp + LEGO1/hospitalstate.cpp + LEGO1/infocenter.cpp + LEGO1/infocenterdoor.cpp + LEGO1/infocenterentity.cpp + LEGO1/infocenterstate.cpp + LEGO1/isle.cpp + LEGO1/isleactor.cpp + LEGO1/islepathactor.cpp + LEGO1/jetski.cpp + LEGO1/jetskirace.cpp + LEGO1/jukebox.cpp + LEGO1/jukeboxentity.cpp + LEGO1/jukeboxstate.cpp + LEGO1/legoact2state.cpp + LEGO1/legoactioncontrolpresenter.cpp + LEGO1/legoanimactor.cpp + LEGO1/legoanimationmanager.cpp + LEGO1/legoanimmmpresenter.cpp + LEGO1/legoanimpresenter.cpp + LEGO1/legobackgroundcolor.cpp + LEGO1/legobuildingmanager.cpp + LEGO1/legocachesound.cpp + LEGO1/legocameracontroller.cpp + LEGO1/legocarbuild.cpp + LEGO1/legocarbuildanimpresenter.cpp + LEGO1/legocontrolmanager.cpp + LEGO1/legoentity.cpp + LEGO1/legoentitypresenter.cpp + LEGO1/legoflctexturepresenter.cpp + LEGO1/legogamestate.cpp + LEGO1/legohideanimpresenter.cpp + LEGO1/legoinputmanager.cpp + LEGO1/legojetski.cpp + LEGO1/legoloadcachesoundpresenter.cpp + LEGO1/legolocomotionanimpresenter.cpp + LEGO1/legomodelpresenter.cpp + LEGO1/legonavcontroller.cpp + LEGO1/legoomni.cpp + LEGO1/legopalettepresenter.cpp + LEGO1/legopartpresenter.cpp + LEGO1/legopathactor.cpp + LEGO1/legopathcontroller.cpp + LEGO1/legopathpresenter.cpp + LEGO1/legophonemepresenter.cpp + LEGO1/legoplantmanager.cpp + LEGO1/legorace.cpp + LEGO1/legoroi.cpp + LEGO1/legosoundmanager.cpp + LEGO1/legostate.cpp + LEGO1/legotexturepresenter.cpp + LEGO1/legovideomanager.cpp + LEGO1/legoworld.cpp + LEGO1/legoworldpresenter.cpp + LEGO1/motorcycle.cpp + LEGO1/mxatomid.cpp + LEGO1/mxaudiopresenter.cpp + LEGO1/mxautolocker.cpp + LEGO1/mxbackgroundaudiomanager.cpp + LEGO1/mxbitmap.cpp + LEGO1/mxcompositemediapresenter.cpp + LEGO1/mxcompositepresenter.cpp + LEGO1/mxcontrolpresenter.cpp + LEGO1/mxcore.cpp + LEGO1/mxcriticalsection.cpp + LEGO1/mxdirectdraw.cpp + LEGO1/mxdiskstreamcontroller.cpp + LEGO1/mxdiskstreamprovider.cpp + LEGO1/mxdsaction.cpp + LEGO1/mxdsanim.cpp + LEGO1/mxdschunk.cpp + LEGO1/mxdsevent.cpp + LEGO1/mxdsfile.cpp + LEGO1/mxdsmediaaction.cpp + LEGO1/mxdsmultiaction.cpp + LEGO1/mxdsobject.cpp + LEGO1/mxdsobjectaction.cpp + LEGO1/mxdsparallelaction.cpp + LEGO1/mxdsselectaction.cpp + LEGO1/mxdsserialaction.cpp + LEGO1/mxdssound.cpp + LEGO1/mxdssource.cpp + LEGO1/mxdsstill.cpp + LEGO1/mxdssubscriber.cpp + LEGO1/mxentity.cpp + LEGO1/mxeventmanager.cpp + LEGO1/mxeventpresenter.cpp + LEGO1/mxflcpresenter.cpp + LEGO1/mxioinfo.cpp + LEGO1/mxloopingflcpresenter.cpp + LEGO1/mxloopingsmkpresenter.cpp + LEGO1/mxmediapresenter.cpp + LEGO1/mxmusicpresenter.cpp + LEGO1/mxnotificationmanager.cpp + LEGO1/mxomni.cpp + LEGO1/mxomnicreateflags.cpp + LEGO1/mxomnicreateparam.cpp + LEGO1/mxomnicreateparambase.cpp + LEGO1/mxpalette.cpp + LEGO1/mxpresenter.cpp + LEGO1/mxscheduler.cpp + LEGO1/mxsmkpresenter.cpp + LEGO1/mxsoundmanager.cpp + LEGO1/mxsoundpresenter.cpp + LEGO1/mxstillpresenter.cpp + LEGO1/mxstreamer.cpp + LEGO1/mxstring.cpp + LEGO1/mxtimer.cpp + LEGO1/mxtransitionmanager.cpp + LEGO1/mxunknown100dc6b0.cpp + LEGO1/mxvariabletable.cpp + LEGO1/mxvideomanager.cpp + LEGO1/mxvideoparam.cpp + LEGO1/mxvideoparamflags.cpp + LEGO1/mxvideopresenter.cpp + LEGO1/mxwavepresenter.cpp + LEGO1/pizza.cpp + LEGO1/pizzamissionstate.cpp + LEGO1/pizzeria.cpp + LEGO1/pizzeriastate.cpp + LEGO1/police.cpp + LEGO1/policeentity.cpp + LEGO1/policestate.cpp + LEGO1/racecar.cpp + LEGO1/racestandsentity.cpp + LEGO1/racestate.cpp + LEGO1/radio.cpp + LEGO1/radiostate.cpp + LEGO1/realtimeview.cpp + LEGO1/registrationbook.cpp + LEGO1/score.cpp + LEGO1/scorestate.cpp + LEGO1/skateboard.cpp + LEGO1/towtrack.cpp + LEGO1/towtrackmissionstate.cpp + LEGO1/viewmanager.cpp +) + +# Link libraries +target_link_libraries(lego1 PRIVATE ddraw dsound winmm) + +# Make sure filenames are ALL CAPS +set_property(TARGET lego1 PROPERTY OUTPUT_NAME LEGO1) +set_property(TARGET lego1 PROPERTY SUFFIX ".DLL") if (ISLE_BUILD_APP) add_executable(isle WIN32 @@ -15,175 +184,14 @@ if (ISLE_BUILD_APP) # Include LEGO1 headers in ISLE target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1") - # Link DSOUND, WINMM, and our fake LEGO1 lib (TODO: replace with real once all exports are implemented) - target_link_libraries(isle PRIVATE dsound winmm "${CMAKE_SOURCE_DIR}/ISLE/ext/lego1.lib") + # Link DSOUND, WINMM, and LEGO1 + target_link_libraries(isle PRIVATE dsound winmm lego1) # Make sure filenames are ALL CAPS set_property(TARGET isle PROPERTY OUTPUT_NAME ISLE) set_property(TARGET isle PROPERTY SUFFIX ".EXE") endif() -if (ISLE_BUILD_LIB) - add_library(lego1 SHARED - LEGO1/act1state.cpp - LEGO1/act2brick.cpp - LEGO1/act2policestation.cpp - LEGO1/act3.cpp - LEGO1/act3shark.cpp - LEGO1/act3state.cpp - LEGO1/ambulance.cpp - LEGO1/ambulancemissionstate.cpp - LEGO1/animstate.cpp - LEGO1/beachhouseentity.cpp - LEGO1/bike.cpp - LEGO1/buildingentity.cpp - LEGO1/bumpbouy.cpp - LEGO1/carrace.cpp - LEGO1/dllmain.cpp - LEGO1/dunebuggy.cpp - LEGO1/elevatorbottom.cpp - LEGO1/gasstation.cpp - LEGO1/gasstationentity.cpp - LEGO1/gasstationstate.cpp - LEGO1/helicopter.cpp - LEGO1/helicopterstate.cpp - LEGO1/historybook.cpp - LEGO1/hospital.cpp - LEGO1/hospitalentity.cpp - LEGO1/hospitalstate.cpp - LEGO1/infocenter.cpp - LEGO1/infocenterdoor.cpp - LEGO1/infocenterentity.cpp - LEGO1/infocenterstate.cpp - LEGO1/isle.cpp - LEGO1/isleactor.cpp - LEGO1/islepathactor.cpp - LEGO1/jetski.cpp - LEGO1/jetskirace.cpp - LEGO1/jukebox.cpp - LEGO1/jukeboxentity.cpp - LEGO1/jukeboxstate.cpp - LEGO1/legoact2state.cpp - LEGO1/legoactioncontrolpresenter.cpp - LEGO1/legoanimactor.cpp - LEGO1/legoanimationmanager.cpp - LEGO1/legoanimmmpresenter.cpp - LEGO1/legoanimpresenter.cpp - LEGO1/legobuildingmanager.cpp - LEGO1/legocachesound.cpp - LEGO1/legocameracontroller.cpp - LEGO1/legocarbuild.cpp - LEGO1/legocarbuildanimpresenter.cpp - LEGO1/legocontrolmanager.cpp - LEGO1/legoentity.cpp - LEGO1/legoentitypresenter.cpp - LEGO1/legoflctexturepresenter.cpp - LEGO1/legohideanimpresenter.cpp - LEGO1/legoinputmanager.cpp - LEGO1/legojetski.cpp - LEGO1/legoloadcachesoundpresenter.cpp - LEGO1/legolocomotionanimpresenter.cpp - LEGO1/legonavcontroller.cpp - LEGO1/legoomni.cpp - LEGO1/legopalettepresenter.cpp - LEGO1/legopathactor.cpp - LEGO1/legopathcontroller.cpp - LEGO1/legopathpresenter.cpp - LEGO1/legophonemepresenter.cpp - LEGO1/legoplantmanager.cpp - LEGO1/legorace.cpp - LEGO1/legosoundmanager.cpp - LEGO1/legostate.cpp - LEGO1/legotexturepresenter.cpp - LEGO1/legovideomanager.cpp - LEGO1/legoworld.cpp - LEGO1/legoworldpresenter.cpp - LEGO1/motorcycle.cpp - LEGO1/mxatomid.cpp - LEGO1/mxaudiopresenter.cpp - LEGO1/mxautolocker.cpp - LEGO1/mxbackgroundaudiomanager.cpp - LEGO1/mxcompositemediapresenter.cpp - LEGO1/mxcompositepresenter.cpp - LEGO1/mxcontrolpresenter.cpp - LEGO1/mxcore.cpp - LEGO1/mxcriticalsection.cpp - LEGO1/mxdiskstreamcontroller.cpp - LEGO1/mxdiskstreamprovider.cpp - LEGO1/mxdsaction.cpp - LEGO1/mxdsanim.cpp - LEGO1/mxdschunk.cpp - LEGO1/mxdsevent.cpp - LEGO1/mxdsfile.cpp - LEGO1/mxdsmediaaction.cpp - LEGO1/mxdsmultiaction.cpp - LEGO1/mxdsobject.cpp - LEGO1/mxdsobjectaction.cpp - LEGO1/mxdsparallelaction.cpp - LEGO1/mxdsselectaction.cpp - LEGO1/mxdsserialaction.cpp - LEGO1/mxdssound.cpp - LEGO1/mxdssource.cpp - LEGO1/mxdsstill.cpp - LEGO1/mxdssubscriber.cpp - LEGO1/mxentity.cpp - LEGO1/mxeventmanager.cpp - LEGO1/mxeventpresenter.cpp - LEGO1/mxflcpresenter.cpp - LEGO1/mxioinfo.cpp - LEGO1/mxloopingflcpresenter.cpp - LEGO1/mxloopingsmkpresenter.cpp - LEGO1/mxmediapresenter.cpp - LEGO1/mxmusicpresenter.cpp - LEGO1/mxnotificationmanager.cpp - LEGO1/mxomni.cpp - LEGO1/mxomnicreateflags.cpp - LEGO1/mxomnicreateparam.cpp - LEGO1/mxomnicreateparambase.cpp - LEGO1/mxpalette.cpp - LEGO1/mxpresenter.cpp - LEGO1/mxsmkpresenter.cpp - LEGO1/mxsoundmanager.cpp - LEGO1/mxsoundpresenter.cpp - LEGO1/mxstillpresenter.cpp - LEGO1/mxstreamer.cpp - LEGO1/mxstring.cpp - LEGO1/mxtimer.cpp - LEGO1/mxtransitionmanager.cpp - LEGO1/mxunknown100dc6b0.cpp - LEGO1/mxvideomanager.cpp - LEGO1/mxvideoparam.cpp - LEGO1/mxvideoparamflags.cpp - LEGO1/mxvideopresenter.cpp - LEGO1/mxwavepresenter.cpp - LEGO1/pizza.cpp - LEGO1/pizzamissionstate.cpp - LEGO1/pizzeria.cpp - LEGO1/pizzeriastate.cpp - LEGO1/police.cpp - LEGO1/policeentity.cpp - LEGO1/policestate.cpp - LEGO1/racecar.cpp - LEGO1/racestandsentity.cpp - LEGO1/racestate.cpp - LEGO1/radio.cpp - LEGO1/radiostate.cpp - LEGO1/registrationbook.cpp - LEGO1/score.cpp - LEGO1/scorestate.cpp - LEGO1/skateboard.cpp - LEGO1/towtrack.cpp - LEGO1/towtrackmissionstate.cpp - ) - - # Link libraries - target_link_libraries(lego1 PRIVATE ddraw dsound winmm) - - # Make sure filenames are ALL CAPS - set_property(TARGET lego1 PROPERTY OUTPUT_NAME LEGO1) - set_property(TARGET lego1 PROPERTY SUFFIX ".DLL") -endif() - if (MSVC) # These flags have been taken from the defaults for a Visual C++ 4.20 project (the compiler the # game was originally built with) and tweaked slightly to produce more debugging info for reccmp. diff --git a/ISLE/ext/lego1.def b/ISLE/ext/lego1.def deleted file mode 100644 index eb8c8fb3..00000000 --- a/ISLE/ext/lego1.def +++ /dev/null @@ -1,137 +0,0 @@ -; -; Definition file of Lego1.dll -; Automatic generated by gendef -; written by Kai Tietz 2008 -; -LIBRARY "Lego1.dll" -EXPORTS -??0LegoBackgroundColor@@QAE@PBD0@Z ; has WINAPI (@8) -??0LegoGameState@@QAE@XZ -??0LegoWorld@@QAE@XZ -??0MxAtomId@@QAE@PBDW4LookupMode@@@Z ; has WINAPI (@8) -??0MxBitmap@@QAE@XZ -??0MxCore@@QAE@XZ -??0MxCriticalSection@@QAE@XZ -??0MxDSAction@@QAE@XZ -??0MxDSFile@@QAE@PBDK@Z ; has WINAPI (@8) -??0MxOmniCreateFlags@@QAE@XZ -??0MxOmniCreateParam@@QAE@PBDPAUHWND__@@AAVMxVideoParam@@VMxOmniCreateFlags@@@Z ; has WINAPI (@16) -??0MxString@@QAE@ABV0@@Z ; has WINAPI (@4) -??0MxVideoParam@@QAE@AAV0@@Z ; has WINAPI (@4) -??0MxVideoParam@@QAE@AAVMxRect32@@PAVMxPalette@@KAAVMxVideoParamFlags@@@Z ; has WINAPI (@16) -??0MxVideoParam@@QAE@XZ -??0MxVideoParamFlags@@QAE@XZ -??1LegoEntity@@UAE@XZ -??1LegoGameState@@QAE@XZ -??1LegoWorld@@UAE@XZ -??1MXIOINFO@@QAE@XZ -??1MxAtomId@@QAE@XZ -??1MxBitmap@@UAE@XZ -??1MxCore@@UAE@XZ -??1MxCriticalSection@@QAE@XZ -??1MxDSAction@@UAE@XZ -??1MxDSFile@@UAE@XZ -??1MxPresenter@@UAE@XZ -??1MxString@@UAE@XZ -??1MxVideoParam@@QAE@XZ -??4MxAtomId@@QAEAAV0@ABV0@@Z ; has WINAPI (@4) -??4MxString@@QAEABV0@PBD@Z ; has WINAPI (@4) -??4MxVideoParam@@QAEAAV0@ABV0@@Z ; has WINAPI (@4) -??8MxPalette@@QAEEAAV0@@Z ; has WINAPI (@4) -?BackgroundAudioManager@@YAPAVMxBackgroundAudioManager@@XZ -?Close@MxDSFile@@UAEJXZ -?Close@MxStreamer@@QAEJPBD@Z ; has WINAPI (@4) -?CreateBackgroundAudio@LegoOmni@@QAEXXZ -?CreateInstance@LegoOmni@@SAXXZ -?CreatePalette@MxBitmap@@UAEPAVMxPalette@@XZ -?CreateStreamObject@@YAPAVMxDSObject@@PAVMxDSFile@@F@Z -?DestroyInstance@MxOmni@@SAXXZ -?Detach@MxPalette@@QAEXXZ -?DisableRMDevice@LegoVideoManager@@QAEHXZ -?DoneTickle@MxPresenter@@MAEXXZ -?Enable@MxBackgroundAudioManager@@QAEXE@Z ; has WINAPI (@4) -?Enable@MxPresenter@@UAEXE@Z ; has WINAPI (@4) -?EnableFullScreenMovie@LegoVideoManager@@QAEXEE@Z ; has WINAPI (@8) -?EnableRMDevice@LegoVideoManager@@QAEHXZ -?EndAction@MxPresenter@@UAEXXZ -?EventManager@@YAPAVMxEventManager@@XZ -?FlipToGDISurface@MxDirectDraw@@QAEHXZ -?GameState@@YAPAVLegoGameState@@XZ -?GetBufferSize@MxDSFile@@UAEKXZ -?GetCD@MxOmni@@SAPBDXZ -?GetCurrPathInfo@LegoOmni@@SAHPAPAVLegoPathBoundary@@AAH@Z -?GetDefaults@LegoNavController@@SAXPAHPAM11111111PAE@Z -?GetHD@MxOmni@@SAPBDXZ -?GetInstance@LegoOmni@@SAPAV1@XZ -?GetInstance@MxOmni@@SAPAV1@XZ -?GetInstance@MxScheduler@@SAPAV1@XZ -?GetNoCD_SourceName@@YAPBDXZ -?GetPartsThreshold@RealtimeView@@SAMXZ -?GetPrimaryBitDepth@MxDirectDraw@@SAHXZ -?GetRealTime@MxTimer@@QAEJXZ -?GetStreamBuffersNum@MxDSFile@@UAEKXZ -?GetUserMaxLOD@RealtimeView@@SAMXZ -?GetVariable@MxVariableTable@@QAEPBDPBD@Z ; has WINAPI (@4) -?Init@MxPresenter@@IAEXXZ -?InputManager@@YAPAVLegoInputManager@@XZ -?InvalidateRect@MxVideoManager@@QAEXAAVMxRect32@@@Z ; has WINAPI (@4) -?IsSound3D@MxOmni@@SAEXZ -?Lego@@YAPAVLegoOmni@@XZ -?Load@LegoGameState@@QAEJK@Z ; has WINAPI (@4) -?MSoundManager@@YAPAVMxSoundManager@@XZ -?MakeSourceName@@YAXPADPBD@Z -?MoveCursor@LegoVideoManager@@QAEXHH@Z ; has WINAPI (@8) -?MusicManager@@YAPAVMxMusicManager@@XZ -?NotificationManager@@YAPAVMxNotificationManager@@XZ -?Notify@MxCore@@UAEJAAVMxParam@@@Z ; has WINAPI (@4) -?Open@MxDSFile@@UAEJK@Z ; has WINAPI (@4) -?Open@MxStreamer@@QAEPAVMxStreamController@@PBDG@Z ; has WINAPI (@8) -?ParseExtra@MxPresenter@@MAEXXZ -?Pause@MxDirectDraw@@QAEHH@Z ; has WINAPI (@4) -?PickEntity@@YAPAVLegoEntity@@JJ@Z -?PickROI@@YAPAVLegoROI@@JJ@Z -?QueueEvent@LegoInputManager@@QAEXW4NotificationId@@EJJE@Z ; has WINAPI (@20) -?Read@MxBitmap@@UAEJPBD@Z ; has WINAPI (@4) -?Read@MxDSFile@@UAEJPAEK@Z ; has WINAPI (@8) -?RealizePalette@MxVideoManager@@UAEJPAVMxPalette@@@Z ; has WINAPI (@4) -?Register@LegoInputManager@@QAEXPAVMxCore@@@Z ; has WINAPI (@4) -?RemoveAll@ViewManager@@QAEXPAVViewROI@@@Z ; has WINAPI (@4) -?RemoveWorld@LegoOmni@@QAEXABVMxAtomId@@J@Z ; has WINAPI (@8) -?Save@LegoGameState@@QAEJK@Z ; has WINAPI (@4) -?Seek@MxDSFile@@UAEJJH@Z ; has WINAPI (@8) -?SerializePlayersInfo@LegoGameState@@QAEXF@Z ; has WINAPI (@4) -?SerializeScoreHistory@LegoGameState@@QAEXF@Z ; has WINAPI (@4) -?SetCD@MxOmni@@SAXPBD@Z -?SetDefaults@LegoNavController@@SAXHMMMMMMMMME@Z -?SetDeviceName@MxVideoParam@@QAEXPAD@Z ; has WINAPI (@4) -?SetDisplayBB@LegoROI@@QAEXH@Z ; has WINAPI (@4) -?SetDoMutex@MxCriticalSection@@SAXXZ -?SetHD@MxOmni@@SAXPBD@Z -?SetObjectName@MxDSObject@@QAEXPBD@Z ; has WINAPI (@4) -?SetOmniUserMessage@@YAXP6AXPBDH@Z@Z -?SetPartsThreshold@RealtimeView@@SAXM@Z -?SetSavePath@LegoGameState@@QAEXPAD@Z ; has WINAPI (@4) -?SetSound3D@MxOmni@@SAXE@Z -?SetUserMaxLOD@RealtimeView@@SAXM@Z -?SetVariable@MxVariableTable@@QAEXPAVMxVariable@@@Z ; has WINAPI (@4) -?SetVariable@MxVariableTable@@QAEXPBD0@Z ; has WINAPI (@8) -?SetWaitIndicator@MxTransitionManager@@QAEXPAVMxVideoPresenter@@@Z ; has WINAPI (@4) -?SoundManager@@YAPAVLegoSoundManager@@XZ -?Start@@YAJPAVMxDSAction@@@Z -?StartAction@MxPresenter@@UAEJPAVMxStreamController@@PAVMxDSAction@@@Z ; has WINAPI (@8) -?StartMultiTasking@MxScheduler@@QAEXK@Z ; has WINAPI (@4) -?Streamer@@YAPAVMxStreamer@@XZ -?Tickle@MxPresenter@@UAEJXZ -?TickleManager@@YAPAVMxTickleManager@@XZ -?Timer@@YAPAVMxTimer@@XZ -?TransitionManager@@YAPAVMxTransitionManager@@XZ -?UnRegister@LegoInputManager@@QAEXPAVMxCore@@@Z ; has WINAPI (@4) -?VariableTable@@YAPAVMxVariableTable@@XZ -?VideoManager@@YAPAVLegoVideoManager@@XZ -?configureLegoAnimationManager@LegoAnimationManager@@SAXH@Z -?configureLegoBuildingManager@LegoBuildingManager@@SAXH@Z -?configureLegoModelPresenter@LegoModelPresenter@@SAXH@Z -?configureLegoPartPresenter@LegoPartPresenter@@SAXHH@Z -?configureLegoROI@LegoROI@@SAXH@Z -?configureLegoWorldPresenter@LegoWorldPresenter@@SAXH@Z -_DllMain@12@12 diff --git a/ISLE/ext/lego1.exp b/ISLE/ext/lego1.exp deleted file mode 100644 index 300d78fd0e2de13fbf715e9210396c9390a239da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21310 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 Z-`UsaM$^qv;=tAh@6jQWQp!{vs%h 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 heAaRj}9V // OFFSET: LEGO1 0x10091ee0 -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +__declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { return TRUE; } diff --git a/LEGO1/legoanimationmanager.cpp b/LEGO1/legoanimationmanager.cpp index 48f13ce8..c25aa436 100644 --- a/LEGO1/legoanimationmanager.cpp +++ b/LEGO1/legoanimationmanager.cpp @@ -1,5 +1,8 @@ #include "legoanimationmanager.h" +// 0x100f74f8 +int g_legoAnimationManagerConfig = 1; + // OFFSET: LEGO1 0x1005eb60 STUB LegoAnimationManager::LegoAnimationManager() { @@ -32,3 +35,9 @@ void LegoAnimationManager::Init() { // TODO } + +// OFFSET: LEGO1 0x1005eb50 +void LegoAnimationManager::configureLegoAnimationManager(int param_1) +{ + g_legoAnimationManagerConfig = param_1; +} diff --git a/LEGO1/legobackgroundcolor.cpp b/LEGO1/legobackgroundcolor.cpp new file mode 100644 index 00000000..17d24108 --- /dev/null +++ b/LEGO1/legobackgroundcolor.cpp @@ -0,0 +1,7 @@ +#include "legobackgroundcolor.h" + +// OFFSET: LEGO1 0x1003bfb0 +LegoBackgroundColor::LegoBackgroundColor(const char *, const char *) +{ + // TODO +} diff --git a/LEGO1/legobuildingmanager.cpp b/LEGO1/legobuildingmanager.cpp index b2c4e7ea..f6706c78 100644 --- a/LEGO1/legobuildingmanager.cpp +++ b/LEGO1/legobuildingmanager.cpp @@ -1,13 +1,18 @@ #include "legobuildingmanager.h" +// 0x100f37cc +int g_buildingManagerConfig = 1; + // OFFSET: LEGO1 0x1002f8c0 STUB LegoBuildingManager::LegoBuildingManager() { + // TODO } // OFFSET: LEGO1 0x1002f960 STUB LegoBuildingManager::~LegoBuildingManager() { + // TODO } // OFFSET: LEGO1 0x1002f9d0 STUB @@ -15,3 +20,9 @@ void LegoBuildingManager::Init() { // TODO } + +// OFFSET: LEGO1 0x1002f8b0 +void LegoBuildingManager::configureLegoBuildingManager(int param_1) +{ + g_buildingManagerConfig = param_1; +} diff --git a/LEGO1/legogamestate.cpp b/LEGO1/legogamestate.cpp new file mode 100644 index 00000000..473003a7 --- /dev/null +++ b/LEGO1/legogamestate.cpp @@ -0,0 +1,45 @@ +#include "legogamestate.h" + +// OFFSET: LEGO1 0x10039550 +LegoGameState::LegoGameState() +{ + // TODO +} + +// OFFSET: LEGO1 0x10039720 +LegoGameState::~LegoGameState() +{ + // TODO +} + +// OFFSET: LEGO1 0x10039c60 +long LegoGameState::Load(unsigned long) +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x10039980 +long LegoGameState::Save(unsigned long p) +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x1003a2e0 +void LegoGameState::SerializePlayersInfo(short p) +{ + // TODO +} + +// OFFSET: LEGO1 0x1003cdd0 +void LegoGameState::SerializeScoreHistory(short p) +{ + // TODO +} + +// OFFSET: LEGO1 0x10039f00 +void LegoGameState::SetSavePath(char *p) +{ + // TODO +} diff --git a/LEGO1/legoinputmanager.cpp b/LEGO1/legoinputmanager.cpp index d60f5fc7..792da404 100644 --- a/LEGO1/legoinputmanager.cpp +++ b/LEGO1/legoinputmanager.cpp @@ -12,6 +12,24 @@ LegoInputManager::~LegoInputManager() // TODO } +// OFFSET: LEGO1 0x1005c740 STUB +void LegoInputManager::QueueEvent(NotificationId id, unsigned char p2, long p3, long p4, unsigned char p5) +{ + // TODO +} + +// OFFSET: LEGO1 0x1005c470 STUB +void LegoInputManager::Register(MxCore *) +{ + // TODO +} + +// OFFSET: LEGO1 0x1005c5c0 STUB +void LegoInputManager::UnRegister(MxCore *) +{ + // TODO +} + // OFFSET: LEGO1 0x1005b8b0 STUB long LegoInputManager::Tickle() { diff --git a/LEGO1/legomodelpresenter.cpp b/LEGO1/legomodelpresenter.cpp new file mode 100644 index 00000000..b038287c --- /dev/null +++ b/LEGO1/legomodelpresenter.cpp @@ -0,0 +1,10 @@ +#include "legomodelpresenter.h" + +// 0x100f7ae0 +int g_modelPresenterConfig = 1; + +// OFFSET: LEGO1 0x1007f660 +void LegoModelPresenter::configureLegoModelPresenter(int param_1) +{ + g_modelPresenterConfig = param_1; +} diff --git a/LEGO1/legoomni.cpp b/LEGO1/legoomni.cpp index 13b67a2c..365748e7 100644 --- a/LEGO1/legoomni.cpp +++ b/LEGO1/legoomni.cpp @@ -1,5 +1,11 @@ #include "legoomni.h" +// 0x100f4588 +char *g_nocdSourceName = NULL; + +// 0x101020e8 +void (*g_omniUserMessage)(const char *,int); + // OFFSET: LEGO1 0x10058a00 LegoOmni::LegoOmni() { @@ -12,6 +18,44 @@ LegoOmni::~LegoOmni() Destroy(); } +// OFFSET: LEGO1 0x1005b560 STUB +void LegoOmni::CreateBackgroundAudio() +{ + // TODO +} + +// OFFSET: LEGO1 0x1005af10 STUB +void LegoOmni::RemoveWorld(const MxAtomId &p1, long p2) +{ + // TODO +} + +// OFFSET: LEGO1 0x1005b400 STUB +int LegoOmni::GetCurrPathInfo(LegoPathBoundary **,int &) +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x100b6ff0 STUB +void MakeSourceName(char *, const char *) +{ + // TODO +} + +// OFFSET: LEGO1 0x100b7210 +void SetOmniUserMessage(void (*p_userMsg)(const char *,int)) +{ + g_omniUserMessage = p_userMsg; +} + +// OFFSET: LEGO1 0x100acf50 STUB +long Start(MxDSAction *) +{ + // TODO + return 0; +} + // OFFSET: LEGO1 0x1005ad10 LegoOmni *LegoOmni::GetInstance() { @@ -67,6 +111,13 @@ MxBackgroundAudioManager *BackgroundAudioManager() return LegoOmni::GetInstance()->GetBackgroundAudioManager(); } +// OFFSET: LEGO1 0x100c0280 STUB +MxDSObject *CreateStreamObject(MxDSFile *,short) +{ + // TODO + return NULL; +} + // OFFSET: LEGO1 0x10015740 LegoInputManager *InputManager() { @@ -91,6 +142,11 @@ MxTransitionManager *TransitionManager() return LegoOmni::GetInstance()->GetTransitionManager(); } +// OFFSET: LEGO1 0x10053430 +const char *GetNoCD_SourceName() +{ + return g_nocdSourceName; +} // OFFSET: LEGO1 0x1005b5f0 long LegoOmni::Notify(MxParam &p) @@ -99,6 +155,20 @@ long LegoOmni::Notify(MxParam &p) return 0; } +// OFFSET: LEGO1 0x1003dd70 STUB +LegoROI *PickROI(long,long) +{ + // TODO + return NULL; +} + +// OFFSET: LEGO1 0x1003ddc0 STUB +LegoEntity *PickEntity(long,long) +{ + // TODO + return NULL; +} + // OFFSET: LEGO1 0x10058bd0 void LegoOmni::Init() { diff --git a/LEGO1/legoomni.h b/LEGO1/legoomni.h index 05c1bfd0..9d825ebc 100644 --- a/LEGO1/legoomni.h +++ b/LEGO1/legoomni.h @@ -5,6 +5,7 @@ #include "legoinputmanager.h" #include "legogamestate.h" #include "legonavcontroller.h" +#include "legopathboundary.h" #include "legoroi.h" #include "legovideomanager.h" #include "mxatomid.h" @@ -27,7 +28,7 @@ class LegoOmni : public MxOmni public: __declspec(dllexport) void CreateBackgroundAudio(); __declspec(dllexport) void RemoveWorld(const MxAtomId &p1, long p2); - __declspec(dllexport) static int GetCurrPathInfo(class LegoPathBoundary * *,int &); + __declspec(dllexport) static int GetCurrPathInfo(LegoPathBoundary **,int &); __declspec(dllexport) static void CreateInstance(); __declspec(dllexport) static LegoOmni *GetInstance(); @@ -99,7 +100,6 @@ __declspec(dllexport) const char * GetNoCD_SourceName(); __declspec(dllexport) LegoInputManager * InputManager(); __declspec(dllexport) LegoOmni * Lego(); __declspec(dllexport) void MakeSourceName(char *, const char *); -__declspec(dllexport) MxNotificationManager * NotificationManager(); __declspec(dllexport) LegoEntity * PickEntity(long,long); __declspec(dllexport) LegoROI * PickROI(long,long); __declspec(dllexport) void SetOmniUserMessage(void (*)(const char *,int)); diff --git a/LEGO1/legopartpresenter.cpp b/LEGO1/legopartpresenter.cpp new file mode 100644 index 00000000..376073f0 --- /dev/null +++ b/LEGO1/legopartpresenter.cpp @@ -0,0 +1,14 @@ +#include "legopartpresenter.h" + +// 0x100f7aa0 +int g_partPresenterConfig1 = 1; + +// 0x100f7aa4 +int g_partPresenterConfig2 = 100; + +// OFFSET: LEGO1 0x1007c990 +void LegoPartPresenter::configureLegoPartPresenter(int param_1, int param_2) +{ + g_partPresenterConfig1 = param_1; + g_partPresenterConfig2 = param_2; +} diff --git a/LEGO1/legopartpresenter.h b/LEGO1/legopartpresenter.h index 6a9a91a5..73be1709 100644 --- a/LEGO1/legopartpresenter.h +++ b/LEGO1/legopartpresenter.h @@ -1,6 +1,8 @@ #ifndef LEGOPARTPRESENTER_H #define LEGOPARTPRESENTER_H +#include "mxmediapresenter.h" + // VTABLE 0x100d4df0 // SIZE 0x54 (from inlined construction at 0x10009fac) class LegoPartPresenter : public MxMediaPresenter diff --git a/LEGO1/legopathboundary.h b/LEGO1/legopathboundary.h new file mode 100644 index 00000000..c1f9d6ff --- /dev/null +++ b/LEGO1/legopathboundary.h @@ -0,0 +1,9 @@ +#ifndef LEGOPATHBOUNDARH_H +#define LEGOPATHBOUNDARH_H + +class LegoPathBoundary +{ + +}; + +#endif // LEGOPATHBOUNDARH_H diff --git a/LEGO1/legoroi.cpp b/LEGO1/legoroi.cpp new file mode 100644 index 00000000..97ac06f8 --- /dev/null +++ b/LEGO1/legoroi.cpp @@ -0,0 +1,17 @@ +#include "legoroi.h" + +// 0x10101368 +int g_roiConfig = 100; + +// OFFSET: LEGO1 0x100a9e10 +void LegoROI::SetDisplayBB(int p_displayBB) +{ + // Intentionally empty function +} + +// OFFSET: LEGO1 0x100a81c0 +void LegoROI::configureLegoROI(int p_roi) +{ + g_roiConfig = p_roi; +} + diff --git a/LEGO1/legoroi.h b/LEGO1/legoroi.h index 8bfc0faa..3baa31fa 100644 --- a/LEGO1/legoroi.h +++ b/LEGO1/legoroi.h @@ -4,8 +4,8 @@ class LegoROI { public: - __declspec(dllexport) void SetDisplayBB(int); - __declspec(dllexport) static void configureLegoROI(int param_1); + __declspec(dllexport) void SetDisplayBB(int p_displayBB); + __declspec(dllexport) static void configureLegoROI(int p_roi); }; #endif // LEGOROI_H diff --git a/LEGO1/mxbitmap.cpp b/LEGO1/mxbitmap.cpp new file mode 100644 index 00000000..81126d9b --- /dev/null +++ b/LEGO1/mxbitmap.cpp @@ -0,0 +1,27 @@ +#include "mxbitmap.h" + +// OFFSET: LEGO1 0x100bc980 +MxBitmap::MxBitmap() +{ + // TODO +} + +// OFFSET: LEGO1 0x100bca10 +MxBitmap::~MxBitmap() +{ + // TODO +} + +// OFFSET: LEGO1 0x100bd1c0 +MxPalette *MxBitmap::CreatePalette() +{ + // TODO + return NULL; +} + +// OFFSET: LEGO1 0x100bcd10 +long MxBitmap::Read(const char *) +{ + // TODO + return 0; +} diff --git a/LEGO1/mxbitmap.h b/LEGO1/mxbitmap.h index 1613c47e..1fc54260 100644 --- a/LEGO1/mxbitmap.h +++ b/LEGO1/mxbitmap.h @@ -1,6 +1,8 @@ #ifndef MXBITMAP_H #define MXBITMAP_H +#include "mxpalette.h" + class MxBitmap { public: diff --git a/LEGO1/mxdirectdraw.cpp b/LEGO1/mxdirectdraw.cpp new file mode 100644 index 00000000..dde59ba0 --- /dev/null +++ b/LEGO1/mxdirectdraw.cpp @@ -0,0 +1,22 @@ +#include "mxdirectdraw.h" + +// OFFSET: LEGO1 0x1009e7f0 +int MxDirectDraw::FlipToGDISurface() +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x1009d570 +int MxDirectDraw::GetPrimaryBitDepth() +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x1009e6a0 +int MxDirectDraw::Pause(int) +{ + // TODO + return 0; +} diff --git a/LEGO1/mxomni.cpp b/LEGO1/mxomni.cpp index 9598141d..76287b82 100644 --- a/LEGO1/mxomni.cpp +++ b/LEGO1/mxomni.cpp @@ -1,5 +1,14 @@ #include "mxomni.h" +// 0x101015b8 +char g_hdPath[1024]; + +// 0x101019b8 +char g_cdPath[1024]; + +// 0x10101db8 +MxBool g_use3dSound; + // 0x101015b0 MxOmni *MxOmni::g_instance = NULL; @@ -43,6 +52,43 @@ void MxOmni::DestroyInstance() } } +// OFFSET: LEGO1 0x100b0900 +const char *MxOmni::GetHD() +{ + return g_hdPath; +} + +// OFFSET: LEGO1 0x100b0940 +const char *MxOmni::GetCD() +{ + return g_cdPath; +} + +// OFFSET: LEGO1 0x100b0980 +MxBool MxOmni::IsSound3D() +{ + return g_use3dSound; +} + +// OFFSET: LEGO1 0x100b0910 +void MxOmni::SetHD(const char *p_hd) +{ + strcpy(g_hdPath, p_hd); +} + +// OFFSET: LEGO1 0x100b0950 +void MxOmni::SetCD(const char *p_cd) +{ + strcpy(g_cdPath, p_cd); +} + +// OFFSET: LEGO1 0x100b0990 +void MxOmni::SetSound3D(MxBool p_3dsound) +{ + g_use3dSound = p_3dsound; +} + + // OFFSET: LEGO1 0x100b0680 MxOmni *MxOmni::GetInstance() { @@ -141,4 +187,4 @@ MxMusicManager* MusicManager() MxEventManager* EventManager() { return MxOmni::GetInstance()->GetEventManager(); -} \ No newline at end of file +} diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index 6a0d3ef8..0e837ad1 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -24,10 +24,10 @@ class MxOmni : public MxCore __declspec(dllexport) static const char *GetCD(); __declspec(dllexport) static const char *GetHD(); __declspec(dllexport) static MxOmni *GetInstance(); - __declspec(dllexport) static unsigned char IsSound3D(); - __declspec(dllexport) static void SetCD(const char *s); - __declspec(dllexport) static void SetHD(const char *s); - __declspec(dllexport) static void SetSound3D(unsigned char); + __declspec(dllexport) static MxBool IsSound3D(); + __declspec(dllexport) static void SetCD(const char *p_cd); + __declspec(dllexport) static void SetHD(const char *p_hd); + __declspec(dllexport) static void SetSound3D(MxBool p_3dsound); virtual ~MxOmni(); @@ -75,5 +75,6 @@ __declspec(dllexport) MxSoundManager * MSoundManager(); __declspec(dllexport) MxVariableTable * VariableTable(); __declspec(dllexport) MxMusicManager * MusicManager(); __declspec(dllexport) MxEventManager * EventManager(); +__declspec(dllexport) MxNotificationManager * NotificationManager(); #endif // MXOMNI_H diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index dd245538..546dddf9 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -5,4 +5,17 @@ MxResult MxPalette::GetEntries(LPPALETTEENTRY p_entries) { memcpy(p_entries, this->m_entries, sizeof(this->m_entries)); return SUCCESS; -} \ No newline at end of file +} + +// OFFSET: LEGO1 0x100bf340 +MxBool MxPalette::operator==(MxPalette &) +{ + // TODO + return FALSE; +} + +// OFFSET: LEGO1 0x100bf330 +void MxPalette::Detach() +{ + // TODO +} diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index b78efd7d..7f4a4299 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -11,7 +11,7 @@ class MxPalette : public MxCore { public: - __declspec(dllexport) unsigned char operator==(MxPalette &); + __declspec(dllexport) MxBool operator==(MxPalette &); __declspec(dllexport) void Detach(); MxResult GetEntries(LPPALETTEENTRY p_entries); diff --git a/LEGO1/mxscheduler.cpp b/LEGO1/mxscheduler.cpp new file mode 100644 index 00000000..94228303 --- /dev/null +++ b/LEGO1/mxscheduler.cpp @@ -0,0 +1,15 @@ +#include "mxscheduler.h" + +// OFFSET: LEGO1 0x100bf4f0 +MxScheduler *MxScheduler::GetInstance() +{ + // Intentionally empty + return 0; +} + +// OFFSET: LEGO1 0x100bf500 +void MxScheduler::StartMultiTasking(unsigned long) +{ + // Intentionally empty +} + diff --git a/LEGO1/mxstreamer.cpp b/LEGO1/mxstreamer.cpp index b6da4b1d..57c9a5b8 100644 --- a/LEGO1/mxstreamer.cpp +++ b/LEGO1/mxstreamer.cpp @@ -6,6 +6,20 @@ MxStreamer::~MxStreamer() // TODO } +// OFFSET: LEGO1 0x100b92c0 STUB +MxStreamController *MxStreamer::Open(const char *name, unsigned short p) +{ + // TODO + return NULL; +} + +// OFFSET: LEGO1 0x100b9570 STUB +long MxStreamer::Close(const char *p) +{ + // TODO + return 0; +} + // OFFSET: LEGO1 0x100b9b60 STUB long MxStreamer::Notify(MxParam &p) { diff --git a/LEGO1/mxtransitionmanager.cpp b/LEGO1/mxtransitionmanager.cpp index 275335e5..b9631629 100644 --- a/LEGO1/mxtransitionmanager.cpp +++ b/LEGO1/mxtransitionmanager.cpp @@ -19,3 +19,9 @@ long MxTransitionManager::Tickle() return 0; } + +// OFFSET: LEGO1 0x1004c470 STUB +void MxTransitionManager::SetWaitIndicator(MxVideoPresenter *videoPresenter) +{ + // TODO +} diff --git a/LEGO1/mxvariabletable.cpp b/LEGO1/mxvariabletable.cpp new file mode 100644 index 00000000..8927bc32 --- /dev/null +++ b/LEGO1/mxvariabletable.cpp @@ -0,0 +1,20 @@ +#include "mxvariabletable.h" + +// OFFSET: LEGO1 0x100b73a0 +void MxVariableTable::SetVariable(const char *key, const char *value) +{ + // TODO +} + +// OFFSET: LEGO1 0x100b7740 +void MxVariableTable::SetVariable(MxVariable *var) +{ + // TODO +} + +// OFFSET: LEGO1 0x100b78f0 +const char *MxVariableTable::GetVariable(const char *key) +{ + // TODO + return 0; +} diff --git a/LEGO1/mxvideomanager.cpp b/LEGO1/mxvideomanager.cpp index 455f4f61..178bc883 100644 --- a/LEGO1/mxvideomanager.cpp +++ b/LEGO1/mxvideomanager.cpp @@ -32,6 +32,12 @@ int MxVideoManager::Init() return 0; } +// OFFSET: LEGO1 0x100bea60 STUB +void MxVideoManager::InvalidateRect(MxRect32 &p_rect) +{ + // TODO +} + // OFFSET: LEGO1 0x100bebe0 long MxVideoManager::RealizePalette(MxPalette *p_palette) { diff --git a/LEGO1/realtimeview.cpp b/LEGO1/realtimeview.cpp new file mode 100644 index 00000000..35be5b0e --- /dev/null +++ b/LEGO1/realtimeview.cpp @@ -0,0 +1,32 @@ +#include "realtimeview.h" + +// 0x10101048 +float g_userMaxLod = 3.6f; + +// 0x1010104c +float g_partsThreshold = 1000.0f; + +// OFFSET: LEGO1 0x100a5e00 +float RealtimeView::GetUserMaxLOD() +{ + // TODO + return 0; +} + +// OFFSET: LEGO1 0x100a5e10 +float RealtimeView::GetPartsThreshold() +{ + return g_partsThreshold; +} + +// OFFSET: LEGO1 0x100a5de0 +void RealtimeView::SetUserMaxLOD(float p_lod) +{ + g_userMaxLod = p_lod; +} + +// OFFSET: LEGO1 0x100a5df0 +void RealtimeView::SetPartsThreshold(float p_threshold) +{ + g_partsThreshold = p_threshold; +} diff --git a/LEGO1/viewmanager.cpp b/LEGO1/viewmanager.cpp new file mode 100644 index 00000000..0baebd2c --- /dev/null +++ b/LEGO1/viewmanager.cpp @@ -0,0 +1,7 @@ +#include "viewmanager.h" + +// OFFSET: LEGO1 0x100a64d0 STUB +void ViewManager::RemoveAll(ViewROI *) +{ + // TODO +} diff --git a/tools/verexp/DUMPBIN.EXE b/tools/verexp/DUMPBIN.EXE new file mode 100755 index 0000000000000000000000000000000000000000..c57ed02cf5ada945542683c25c83e4b935f79a57 GIT binary patch literal 5632 zcmeHLeQXh&%6nwUf@Tyt46v zD}H6;9z9!@N=9+qNadw;s!%AJ(jiSUDg`N9kfOVXrF=1?1=p-u6==Fn#E9aq6*T#y z*Fvpm^VI2D?ecbuq&gk$=slRbfD+RYXYF?KW)9~spoFnWa9u)??buk%ixV@2t8F|d zh|W0%OfA7E(bt!#kG*;(LiFSvw1cL0)P(#)j>&m(&WlB04UmXNgGMH0rifTq)Q+0T z$HWpuP({#DqX(HS16gks6H5>wnh9nd#RpgphKSjLxeX$$XOxXJc%mohjnLyf+aSVm z4J}uM;vbnm3S__Cz&3~wZEqu&m!F^xSkZt_Cn-W!Jm5+yhhWZ&KinxMp>?SCl(J0BM3u&AF3grQU46A09!0l7NYt&hU5z8}NjP{Q^< z4<&G`(}B%yL|J=cJ=CoefdHs_$4NfaaCH`1wP;{Nb@eVY^^+dl(& zbMxH?aKP5 zIHAi@1lwWz=N84&q8qMn^jfE#=A9Re>a1_T+Hx9dmZv)FP1wIexdW9O@2qHYomM-1 zj?vzHAEMl@`TG{P;Xv}>6O(g%S}t}_>-b#GOkqoCueC5?>pFbsH$EMqM5flm?CQei z;gNkct#K)KlWE@6H<2Imx^&lO84&?fyf`B><-ZD{wMN3a=Cl282x^0%rY&;A zzJ;^9AgsG}FGMx7?g z3@&Qi-}JZGdtS6Z%S_K+wtLx)zTGHlj1uE z9uLO$$N1+Ymn|F)LV)G1HpPl5700B!mM%3EH2bxZ^_6O%rQjvj2Rl{9;Rs%d zyIX6z&zn!>#4Y!C?qoi7SSzJWorYPS%bJ3q_3mV{gun58$uwx!@JRpAp0FIuy2vbjjS2&6%1(s~wAEwvaWo!V&tRTPz{UlN+*e&CI8=g_JQ~rq6>eYi6Yk zA!6e_P4tL6naWI5%4TvblRZLox8pBe%=0%Ek>8=m9ID6hkW7_IN%L3OMHs1BRbACw)0(} z<=gOA;;#A_WTOdu$9vf7R)~ATV2sc(B{9Zm2&Nm=rBAPka2|-IwVRDFUT*;)AEYYrciH4 z4ZRS$7Z{oL8omi^|WHHIL;Z^#c{#jvdC`KrZoPxD5a04*UZTumq<7 literal 0 HcmV?d00001 diff --git a/tools/verexp/LINK.EXE b/tools/verexp/LINK.EXE new file mode 100755 index 0000000000000000000000000000000000000000..9d35a8993d959611a7e1c15cb41bd8c3c676a784 GIT binary patch literal 514048 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%0Dw%fIS}4V*0PQ23-r0^ie}44 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%0D=lYG)_*cDJR?I* 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%0DSs~wI- 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 V`|k<-_XPfX0{=aM|Bol|{{Z)(1AYJi literal 0 HcmV?d00001 diff --git a/tools/verexp/MSPDB41.DLL b/tools/verexp/MSPDB41.DLL new file mode 100644 index 0000000000000000000000000000000000000000..9d2953e2b3308944c7fd531780fe63020a74bc71 GIT binary patch literal 271872 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%0D64W!-TzeE*> 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 literal 0 HcmV?d00001 diff --git a/tools/verexp/verexp.py b/tools/verexp/verexp.py new file mode 100755 index 00000000..6927622d --- /dev/null +++ b/tools/verexp/verexp.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 + +import argparse +import colorama +import difflib +import subprocess +import os +import sys + +parser = argparse.ArgumentParser(allow_abbrev=False, + description='Verify Exports: Compare the exports of two DLLs.') +parser.add_argument('original', metavar='original-binary', help='The original binary') +parser.add_argument('recompiled', metavar='recompiled-binary', help='The recompiled binary') +parser.add_argument('--no-color', '-n', action='store_true', help='Do not color the output') + +args = parser.parse_args() + +if not os.path.isfile(args.original): + parser.error('Original binary does not exist') + +if not os.path.isfile(args.recompiled): + parser.error('Recompiled binary does not exist') + +def get_file_in_script_dir(fn): + return os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), fn) + +def get_exports(file): + call = [get_file_in_script_dir('DUMPBIN.EXE'), '/EXPORTS'] + + if os.name != 'nt': + call.insert(0, 'wine') + file = subprocess.check_output(['winepath', '-w', file]).decode('utf-8').strip() + + call.append(file) + + raw = subprocess.check_output(call).decode('utf-8').split('\r\n') + exports = [] + + start = False + + for line in raw: + if not start: + if line == ' ordinal hint name': + start = True + else: + if line: + exports.append(line[27:line.rindex(' (')]) + elif exports: + break + + return exports + +og_exp = get_exports(args.original) +re_exp = get_exports(args.recompiled) + +udiff = difflib.unified_diff(og_exp, re_exp) +has_diff = False + +for line in udiff: + has_diff = True + if line.startswith("++") or line.startswith("@@") or line.startswith("--"): + # Skip unneeded parts of the diff for the brief view + pass + elif line.startswith("+"): + if args.no_color: + print(line) + else: + print(colorama.Fore.GREEN + line) + elif line.startswith("-"): + if args.no_color: + print(line) + else: + print(colorama.Fore.RED + line) + else: + print(line) + if not args.no_color: + print(colorama.Style.RESET_ALL, end='') + +if has_diff: + sys.exit(1) +else: + sys.exit(0) From 4adad9af494d0f7c2e9407a4f30b73d7c0e18634 Mon Sep 17 00:00:00 2001 From: MattKC <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 30 Jun 2023 16:00:27 -0700 Subject: [PATCH 03/22] ci: upload SVGs to external sites Can't embed SVGs from GitHub Releases (made an issue that will probably get ignored here https://github.com/orgs/community/discussions/59781). Uploading to external site instead for the time being. --- .github/workflows/build.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7ae88155..09bf06a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -124,17 +124,14 @@ jobs: if: github.event_name == 'push' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }} run: | - # Convert SVGs to PNG - INKSCAPE_DIR=inkscape-1.2.2_2022-12-09_732a01da63-x64 - curl -fLOSs https://inkscape.org/gallery/item/37364/$INKSCAPE_DIR.7z - 7z x $INKSCAPE_DIR.7z - $INKSCAPE_DIR/bin/inkscape -w 512 ISLEPROGRESS.SVG -o ISLEPROGRESS.PNG - $INKSCAPE_DIR/bin/inkscape -w 512 LEGO1PROGRESS.SVG -o LEGO1PROGRESS.PNG - curl -fLOSs https://raw.githubusercontent.com/probonopd/uploadtool/master/upload.sh ./upload.sh \ build/ISLE.EXE \ build/LEGO1.DLL \ ISLEPROGRESS.* \ LEGO1PROGRESS.* + + curl -X POST -F key=$UPLOAD_KEY -F 'file=@ISLEPROGRESS.SVG' https://legoisland.org/progress/ + curl -X POST -F key=$UPLOAD_KEY -F 'file=@LEGO1PROGRESS.SVG' https://legoisland.org/progress/ From c4d0ea8746de77b493ff7a31700196f1ad7cf07d Mon Sep 17 00:00:00 2001 From: MattKC <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 30 Jun 2023 16:06:30 -0700 Subject: [PATCH 04/22] readme: use SVGs [skip ci] Had to use an external site for this because GitHub doesn't seem to have a good way to do this right now. But this works... --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bc4c4802..2be5373a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This is a **work-in-progress** decompilation of LEGO Island version 1.1. It aims ## 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. From e929d76f3c24a623ebffcc3985169709f8af777d Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 30 Jun 2023 16:12:12 -0700 Subject: [PATCH 05/22] reccmp: use "monospace" in svg font For some reason Inkscape made this "mono", but it seems like "monospace" is the right attribute here --- tools/reccmp/template.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/reccmp/template.svg b/tools/reccmp/template.svg index bd36e9b2..626ed08d 100644 --- a/tools/reccmp/template.svg +++ b/tools/reccmp/template.svg @@ -55,12 +55,12 @@ x="58.13345" y="51.967873" />{name}{percent} Date: Fri, 30 Jun 2023 19:24:00 -0400 Subject: [PATCH 06/22] Initial implementation of MxBitmap (#34) Co-authored-by: Anonymous Maarten --- LEGO1/mxbitmap.cpp | 61 ++++++++++++++++++++++++++++++++++++++++------ LEGO1/mxbitmap.h | 15 ++++++++++-- 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/LEGO1/mxbitmap.cpp b/LEGO1/mxbitmap.cpp index 81126d9b..a7425dd8 100644 --- a/LEGO1/mxbitmap.cpp +++ b/LEGO1/mxbitmap.cpp @@ -3,25 +3,72 @@ // OFFSET: LEGO1 0x100bc980 MxBitmap::MxBitmap() { - // TODO + this->m_info = NULL; + this->m_bmiHeader = NULL; + this->m_paletteData = NULL; + this->m_data = NULL; + this->m_unk18 = FALSE; + this->m_palette = NULL; } // OFFSET: LEGO1 0x100bca10 MxBitmap::~MxBitmap() { - // TODO + if (this->m_info != NULL) { + delete m_info; + } + if (this->m_data != NULL) { + delete m_data; + } + if (this->m_palette != NULL) { + delete m_palette; + } } // OFFSET: LEGO1 0x100bd1c0 MxPalette *MxBitmap::CreatePalette() { - // TODO - return NULL; + // FIXME: This function needs MxPalette to be completed. Also INFERRING usage of MxBool + MxPalette *pal = NULL; + MxPalette *ppal; + MxBool success = FALSE; + + if(this->m_unk18 == FALSE) { + // ppal = MxPalette::FromBitmapPalette(this->m_paletteData); + } else { + if(this->m_unk18 != TRUE) { + if(!success && pal != NULL) { + delete pal; + pal = NULL; + } + } + //.pal = MxPalette::Clone(this->m_palette); + } + if(pal != NULL) { + success = TRUE; + } + + return pal; } // OFFSET: LEGO1 0x100bcd10 -long MxBitmap::Read(const char *) +long MxBitmap::Read(const char *filename) { - // TODO - return 0; + HANDLE handle; + int unk1; + MxResult ret = FAILURE; + + handle = CreateFileA(filename,GENERIC_READ,FILE_SHARE_READ,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL); + if(handle != (HANDLE)INVALID_HANDLE_VALUE) { // INVALID_HANDLE_VALUE = -1, or 0xffffffff + // FIXME: line 16. iVar gets changed in this line + if(unk1 == 0) { + ret = SUCCESS; + } + } + if(handle != (HANDLE)NULL) { + CloseHandle(handle); + } + + return ret; } + diff --git a/LEGO1/mxbitmap.h b/LEGO1/mxbitmap.h index 1fc54260..24d9e166 100644 --- a/LEGO1/mxbitmap.h +++ b/LEGO1/mxbitmap.h @@ -1,15 +1,26 @@ #ifndef MXBITMAP_H #define MXBITMAP_H -#include "mxpalette.h" +#include -class MxBitmap +#include "mxcore.h" +#include "mxpalette.h" +#include "mxtypes.h" + +class MxBitmap : public MxCore { public: __declspec(dllexport) MxBitmap(); __declspec(dllexport) virtual ~MxBitmap(); __declspec(dllexport) virtual MxPalette *CreatePalette(); __declspec(dllexport) virtual long Read(const char *); +private: + BITMAPINFO *m_info; + BITMAPINFOHEADER *m_bmiHeader; + RGBQUAD *m_paletteData; + LPVOID *m_data; + MxBool m_unk18; + MxPalette *m_palette; }; #endif // MXBITMAP_H From d7b8d6463bcba9b433e8fa61abe7dd1558a6c4c3 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 1 Jul 2023 01:24:46 +0200 Subject: [PATCH 07/22] lego: Implement/match CalculateNewVel (#66) * lego: Implement/match CalculateNewVel * remove braces * consistency --- LEGO1/legonavcontroller.cpp | 36 +++++++++++++++++++++++++----------- LEGO1/legonavcontroller.h | 1 + LEGO1/legoutil.h | 12 ++++++++++++ LEGO1/mxdsobject.cpp | 10 +++++----- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/LEGO1/legonavcontroller.cpp b/LEGO1/legonavcontroller.cpp index af618de9..90c0a485 100644 --- a/LEGO1/legonavcontroller.cpp +++ b/LEGO1/legonavcontroller.cpp @@ -106,8 +106,7 @@ void LegoNavController::SetControlMax(int p_hMax, int p_vMax) this->m_hMax = p_hMax; this->m_vMax = p_vMax; - if (VideoManager()->GetVideoParam().flags().GetFullScreen()) - { + if (VideoManager()->GetVideoParam().flags().GetFullScreen()) { this->m_hMax = 640; this->m_vMax = 480; } @@ -134,19 +133,15 @@ void LegoNavController::ResetToDefault() void LegoNavController::SetTargets(int p_hPos, int p_vPos, MxBool p_accel) { if (this->m_trackDefault != FALSE) - { ResetToDefault(); - } - if (p_accel != FALSE) - { + if (p_accel != FALSE) { this->m_targetTurnSpeed = CalculateNewTargetSpeed(p_hPos, this->m_hMax / 2, this->m_turnMaxSpeed); this->m_targetMovementSpeed = CalculateNewTargetSpeed(this->m_vMax - p_vPos, this->m_vMax / 2, this->m_movementMaxSpeed); this->m_turnAccel = CalculateNewAccel(p_hPos, this->m_hMax / 2, this->m_turnMaxAccel, (int)this->m_turnMinAccel); this->m_movementAccel = CalculateNewAccel(this->m_vMax - p_vPos, this->m_vMax / 2, this->m_movementMaxAccel, (int)this->m_movementMinAccel); } - else - { + else { this->m_targetTurnSpeed = 0.0f; this->m_targetMovementSpeed = 0.0f; this->m_movementAccel = this->m_movementDecel; @@ -179,9 +174,28 @@ float LegoNavController::CalculateNewAccel(int p_pos, int p_center, float p_maxA result = Abs(diff) * p_maxAccel / p_center; if (result < p_minAccel) - { - result = (float)p_minAccel; - } + result = (float) p_minAccel; return result; } + +// OFFSET: LEGO1 0x10054fe0 +float LegoNavController::CalculateNewVel(float p_targetVel, float p_currentVel, float p_accel, float p_time) +{ + float newVel = p_currentVel; + + float velDiff = p_targetVel - p_currentVel; + int vSign = velDiff > 0 ? 1 : -1; + + if (Abs(velDiff) > this->m_zeroThreshold) { + float deltaVel = p_accel * p_time; + newVel = p_currentVel + (deltaVel * vSign); + + if (vSign > 0) + newVel = Min(newVel, p_targetVel); + else + newVel = Max(newVel, p_targetVel); + } + + return newVel; +} \ No newline at end of file diff --git a/LEGO1/legonavcontroller.h b/LEGO1/legonavcontroller.h index 9bffd7dd..89af9f12 100644 --- a/LEGO1/legonavcontroller.h +++ b/LEGO1/legonavcontroller.h @@ -40,6 +40,7 @@ class LegoNavController : public MxCore void SetTargets(int p_hPos, int p_vPos, MxBool p_accel); float CalculateNewTargetSpeed(int p_pos, int p_center, float p_maxSpeed); float CalculateNewAccel(int p_pos, int p_center, float p_maxAccel, int p_minAccel); + float CalculateNewVel(float p_targetVel, float p_currentVel, float p_accel, float p_time); private: int m_hMax; diff --git a/LEGO1/legoutil.h b/LEGO1/legoutil.h index e94a6440..f0e97ac5 100644 --- a/LEGO1/legoutil.h +++ b/LEGO1/legoutil.h @@ -7,4 +7,16 @@ inline T Abs(T p_t) return p_t < 0 ? -p_t : p_t; } +template +inline T Min(T p_t1, T p_t2) +{ + return p_t1 < p_t2 ? p_t1 : p_t2; +} + +template +inline T Max(T p_t1, T p_t2) +{ + return p_t1 > p_t2 ? p_t1 : p_t2; +} + #endif // LEGOUTIL_H diff --git a/LEGO1/mxdsobject.cpp b/LEGO1/mxdsobject.cpp index fd4b7434..66b1ed6c 100644 --- a/LEGO1/mxdsobject.cpp +++ b/LEGO1/mxdsobject.cpp @@ -45,16 +45,16 @@ MxDSObject &MxDSObject::operator=(MxDSObject &p_dsObject) } // OFFSET: LEGO1 0x100bf8e0 -void MxDSObject::SetObjectName(const char *p_name) +void MxDSObject::SetObjectName(const char *p_objectName) { - if (p_name != this->m_objectName) { + if (p_objectName != this->m_objectName) { delete[] this->m_objectName; - if (p_name) { - this->m_objectName = new char[strlen(p_name) + 1]; + if (p_objectName) { + this->m_objectName = new char[strlen(p_objectName) + 1]; if (this->m_objectName) { - strcpy(this->m_objectName, p_name); + strcpy(this->m_objectName, p_objectName); } } else { From a66dbb8136a718e9217e00acc006ab905441c636 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 30 Jun 2023 16:33:59 -0700 Subject: [PATCH 08/22] 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 commit 5768cf4a0cf58778cd1265220936081c43c91769 Author: Misha Date: Fri Jun 30 08:04:37 2023 +0300 add legoutil commit 7d6b00c831d01688749d6cadb8b8ea683d18a52d Author: Misha Date: Fri Jun 30 08:02:17 2023 +0300 Update CMakeLists.txt commit d9b49087f8681a858b7d32b38cc937160b5a5ab0 Author: Misha Date: Fri Jun 30 08:01:06 2023 +0300 Update CMakeLists.txt commit d5a2891965b0e3c992c92e7782c4cc54fc7ae7af Author: Misha Date: Fri Jun 30 07:59:03 2023 +0300 Update CMakeLists.txt commit 519253bff43426d2b4cbb916f0fecba8fd677695 Merge: 6cefa2e 13df3f9 Author: Misha Date: Fri Jun 30 07:57:15 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit 6cefa2e9e259f57033d6e50f9be0af5de6e2df61 Author: Misha Date: Thu Jun 29 16:51:53 2023 +0300 add back stuff to mak file after merge commit c2b16eb8ff2e99b160bf5d5b75df7960da8f2877 Merge: 3c8add2 07912eb Author: Misha Date: Thu Jun 29 16:49:51 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit 3c8add2f1979f1ac2372f06c2025cda4104c2db2 Author: Misha Date: Thu Jun 29 13:34:15 2023 +0300 Update legobackgroundcolor.cpp commit 6879f30e79caaef23319488b729283cda6f46c25 Author: Misha Date: Wed Jun 28 18:22:35 2023 +0300 add fixme + rename MxStringVariable functions commit a883f37b9d67c57bc336812bf83ee85c363f8931 Author: Misha Date: Wed Jun 28 18:15:42 2023 +0300 address review commit a919eeb7f48b31554b8edf499c131f570b1529bf Author: Misha Date: Wed Jun 28 08:19:45 2023 +0300 Update mxbackgroundcolor.cpp commit 710c1dd5ea53212c43e1564480f27370f28ca7e4 Author: Misha Date: Wed Jun 28 08:11:13 2023 +0300 add back mak file commit 25e9bbbfb0d330e70570f59823b2e88f159ad49d Merge: 78b0e8d 2d9af63 Author: Misha Date: Wed Jun 28 08:09:03 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit 78b0e8dd625add18ea9a62dcd72a820e1a0beab5 Author: Misha Date: Tue Jun 27 18:35:58 2023 +0300 improve accuracy commit 4c2e1ca95c4463da20266f61299370fa0ecda9f4 Author: Misha Date: Mon Jun 26 13:50:40 2023 +0300 improve accuracy commit 7dd3469ca330254e0177c838991b9436bb3c90c2 Author: Misha 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 Date: Sun Jun 25 17:03:14 2023 +0300 90% match commit 2208573eb2cf73465c2a5b49a63db66dd8f6f841 Author: Misha Date: Sun Jun 25 12:23:47 2023 +0300 improve accuracy + add editorconfig commit 288f8614281788fd3a19f07a7732b06337253e34 Author: Misha Date: Sun Jun 25 07:57:14 2023 +0300 fix makefile commit 3590e59a3a9f021b0de3833e80d320238255bc46 Author: Misha Date: Sun Jun 25 07:51:35 2023 +0300 Update isle.mak commit fb52ad57813214a8af9ef21fdb9ef39005961778 Author: Misha Date: Sun Jun 25 07:47:06 2023 +0300 fix build commit 791cf1301af1e194025908d8812edaa4faf0f3cf Merge: b9ecd15 64d2b9e Author: Misha Date: Sun Jun 25 07:42:09 2023 +0300 Merge remote-tracking branch 'upstream/master' into legobackgroundcolor commit b9ecd15ca60b6d4c26fe10405e80b08bbf02d62e Author: Misha Date: Sun Jun 25 07:40:22 2023 +0300 undo change commit 6327a797bce26c277c21c71e5ec56a446f227aa5 Author: Misha Date: Sat Jun 24 21:48:08 2023 +0300 delete accidently committed files commit 7ae1c05df962ff64029c3264aaf824801a3055cc Author: Misha Date: Sat Jun 24 21:47:05 2023 +0300 implement SetColorString commit 323a2ee0e7a4c767d80535f2f0e3a8036124da05 Author: Misha Date: Sat Jun 24 20:47:03 2023 +0300 constructor and some methods are matching commit 0ce6fab3d085b2e2e68c95bdff59557c483486fe Author: Misha Date: Sat Jun 24 20:38:10 2023 +0300 constructor is almost matching --- .editorconfig | 7 ++++ CMakeLists.txt | 3 ++ LEGO1/legobackgroundcolor.cpp | 53 +++++++++++++++++++++++++-- LEGO1/legobackgroundcolor.h | 11 ++++-- LEGO1/legoutil.cpp | 68 +++++++++++++++++++++++++++++++++++ LEGO1/legoutil.h | 2 ++ LEGO1/legovideomanager.cpp | 13 +++++++ LEGO1/legovideomanager.h | 1 + LEGO1/mxstringvariable.cpp | 23 ++++++++++++ LEGO1/mxstringvariable.h | 20 +++++++++++ 10 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 .editorconfig create mode 100644 LEGO1/legoutil.cpp create mode 100644 LEGO1/mxstringvariable.cpp create mode 100644 LEGO1/mxstringvariable.h diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..937b347f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true +[*.{cpp,h,py,txt,editorconfig}] + +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c5900ac..e7b584d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ add_library(lego1 SHARED LEGO1/legoanimmmpresenter.cpp LEGO1/legoanimpresenter.cpp LEGO1/legobackgroundcolor.cpp + LEGO1/legobackgroundcolor.cpp LEGO1/legobuildingmanager.cpp LEGO1/legocachesound.cpp LEGO1/legocameracontroller.cpp @@ -80,6 +81,7 @@ add_library(lego1 SHARED LEGO1/legosoundmanager.cpp LEGO1/legostate.cpp LEGO1/legotexturepresenter.cpp + LEGO1/legoutil.cpp LEGO1/legovideomanager.cpp LEGO1/legoworld.cpp LEGO1/legoworldpresenter.cpp @@ -136,6 +138,7 @@ add_library(lego1 SHARED LEGO1/mxstillpresenter.cpp LEGO1/mxstreamer.cpp LEGO1/mxstring.cpp + LEGO1/mxstringvariable.cpp LEGO1/mxtimer.cpp LEGO1/mxtransitionmanager.cpp LEGO1/mxunknown100dc6b0.cpp diff --git a/LEGO1/legobackgroundcolor.cpp b/LEGO1/legobackgroundcolor.cpp index 17d24108..b818267f 100644 --- a/LEGO1/legobackgroundcolor.cpp +++ b/LEGO1/legobackgroundcolor.cpp @@ -1,7 +1,56 @@ #include "legobackgroundcolor.h" +#include "legoomni.h" +#include "legoutil.h" +#include "legovideomanager.h" + +const char *Delimiter = "\t"; +const char *set = "set"; +const char *reset = "reset"; + // OFFSET: LEGO1 0x1003bfb0 -LegoBackgroundColor::LegoBackgroundColor(const char *, const char *) +LegoBackgroundColor::LegoBackgroundColor(const char *name, const char *colorString) { - // TODO + m_name = name; + m_name.ToUpperCase(); + SetColorString(colorString); +} + +// OFFSET: LEGO1 0x1003c070 +void LegoBackgroundColor::SetColorString(const char *colorString) +{ + m_name = colorString; + m_string.ToLowerCase(); + + float converted_r; + float converted_b; + float converted_g; + LegoVideoManager *videomanager = VideoManager(); + + if (videomanager && colorString) + { + int length = strlen(colorString) + 1; + char *colorStringCopy = new char[length]; + strcpy(colorStringCopy, colorString); + char *colorStringSplit = strtok(colorStringCopy, Delimiter); + if (!strcmp(colorStringSplit, set)) + { + char *hue = strtok(0, Delimiter); + if (hue) + h = atoi(hue) * 0.01; + char *sat = strtok(0, Delimiter); + if (sat) + s = atoi(sat) * 0.01; + char *val = strtok(0, Delimiter); + if (val) + v = atoi(val) * 0.01; + } + else if (!strcmp(colorStringSplit, reset)) + { + // reset it + ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); + videomanager->SetSkyColor(converted_r, converted_g, converted_b); + } + delete[] colorStringCopy; + } } diff --git a/LEGO1/legobackgroundcolor.h b/LEGO1/legobackgroundcolor.h index c660c0bf..812e8882 100644 --- a/LEGO1/legobackgroundcolor.h +++ b/LEGO1/legobackgroundcolor.h @@ -1,10 +1,17 @@ #ifndef LEGOBACKGROUNDCOLOR_H #define LEGOBACKGROUNDCOLOR_H - -class LegoBackgroundColor +#include "mxstring.h" +#include "mxcore.h" +#include "MxStringVariable.h" +class LegoBackgroundColor : public MxStringVariable { public: __declspec(dllexport) LegoBackgroundColor(const char *, const char *); + void SetColorString(const char *colorString); +protected: + float h; + float s; + float v; }; #endif // LEGOBACKGROUNDCOLOR_H diff --git a/LEGO1/legoutil.cpp b/LEGO1/legoutil.cpp new file mode 100644 index 00000000..58e11e8f --- /dev/null +++ b/LEGO1/legoutil.cpp @@ -0,0 +1,68 @@ +#include "legoutil.h" + +// OFFSET: LEGO1 0x1003eae0 +void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, float *g_out) +{ + double calc; + double p; + long hue_index; + double v9; + double v12; + double v13; + if (s > 0.5f) + calc = (1.0f - v) * s + v; + else + calc = (v + 1.0) * s; + if (calc <= 0.0) + { + *g_out = 0.0f; + *b_out = 0.0f; + *r_out = 0.0f; + return; + } + p = s * 2.0 - calc; + hue_index = h * 6.0; + v9 = (h * 6.0 - (float)hue_index) * ((calc - p) / calc) * calc; + v12 = p + v9; + v13 = calc - v9; + switch (hue_index) + { + case 0: + *r_out = calc; + *b_out = v12; + *g_out = p; + break; + case 1: + *r_out = v13; + *b_out = calc; + *g_out = p; + break; + case 2: + *r_out = p; + *b_out = calc; + *g_out = v12; + break; + case 3: + *r_out = p; + *b_out = v13; + *g_out = calc; + break; + case 4: + *r_out = v12; + *b_out = p; + *g_out = calc; + break; + case 5: + *r_out = calc; + *b_out = p; + *g_out = v13; + break; + case 6: + *r_out = calc; + *b_out = p; + *g_out = v13; + break; + default: + return; + } +} \ No newline at end of file diff --git a/LEGO1/legoutil.h b/LEGO1/legoutil.h index f0e97ac5..6a0113e8 100644 --- a/LEGO1/legoutil.h +++ b/LEGO1/legoutil.h @@ -19,4 +19,6 @@ inline T Max(T p_t1, T p_t2) return p_t1 > p_t2 ? p_t1 : p_t2; } +void ConvertHSVToRGB(float r, float g, float b, float* out_r, float* out_g, float* out_b); + #endif // LEGOUTIL_H diff --git a/LEGO1/legovideomanager.cpp b/LEGO1/legovideomanager.cpp index 060cc61f..9c1044e2 100644 --- a/LEGO1/legovideomanager.cpp +++ b/LEGO1/legovideomanager.cpp @@ -1,4 +1,5 @@ #include "legovideomanager.h" +#include // OFFSET: LEGO1 0x1007aa20 STUB LegoVideoManager::LegoVideoManager() @@ -37,3 +38,15 @@ void LegoVideoManager::MoveCursor(int x, int y) { // TODO } + +// OFFSET: LEGO1 0x1007c440 +void LegoVideoManager::SetSkyColor(float red, float green, float blue) +{ + PALETTEENTRY colorStrucure; // [esp+0h] [ebp-4h] BYREF + + colorStrucure.peRed = (red* 255.0); + colorStrucure.peGreen = (green * 255.0); + colorStrucure.peBlue = (blue * 255.0); + colorStrucure.peFlags = -124; + // TODO +} diff --git a/LEGO1/legovideomanager.h b/LEGO1/legovideomanager.h index ec1aa6fd..379ec468 100644 --- a/LEGO1/legovideomanager.h +++ b/LEGO1/legovideomanager.h @@ -18,6 +18,7 @@ class LegoVideoManager : public MxVideoManager __declspec(dllexport) void MoveCursor(int x, int y); inline Lego3DManager *Get3DManager() { return this->m_3dManager; } + void SetSkyColor(float r, float g, float b); int m_unk64; Lego3DManager *m_3dManager; diff --git a/LEGO1/mxstringvariable.cpp b/LEGO1/mxstringvariable.cpp new file mode 100644 index 00000000..a9432679 --- /dev/null +++ b/LEGO1/mxstringvariable.cpp @@ -0,0 +1,23 @@ +#include "MxStringVariable.h" +#include "mxstring.h" + +//FIXME: Figure out what exactly this class is used for. It is used in LegoGameState::LegoGameState when loading the background color, and for loading the "fsmovie" variable +// OFFSET: LEGO1 0x1003bec0 +MxStringVariable::~MxStringVariable() +{ + + delete &m_string; + delete &m_name; +} + +// OFFSET: LEGO1 0x1003bea0 +MxString *MxStringVariable::GetString() +{ + return &m_string; +} + +// OFFSET: LEGO1 0x1003beb0 +void MxStringVariable::SetString(const char *colorString) +{ + m_string = colorString; +} diff --git a/LEGO1/mxstringvariable.h b/LEGO1/mxstringvariable.h new file mode 100644 index 00000000..5284fc5d --- /dev/null +++ b/LEGO1/mxstringvariable.h @@ -0,0 +1,20 @@ +#ifndef MXSTRINGVARIABLE_H +#define MXSTRINGVARIABLE_H +#include "mxstring.h" +#include "mxcore.h" +//VTABLE: 0x100d74a8 +class MxStringVariable +{ +public: + __declspec(dllexport) MxStringVariable(const char *, const char *); + MxStringVariable() {} + virtual MxString *GetString(); + virtual void SetString(const char *colorString); + virtual ~MxStringVariable(); + +protected: + MxString m_name; + MxString m_string; +}; + +#endif // MXSTRINGVARIABLE_H From 8aad15d18bb9421d70114872403d9a58626e3030 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sun, 2 Jul 2023 06:49:42 +0200 Subject: [PATCH 09/22] lego1: match MxBitmap::Read and vtable (#67) * lego1: match MxBitmap::Read and vtable * fix param name --- LEGO1/mxbitmap.cpp | 103 ++++++++++++++++++++++++++++++++++----------- LEGO1/mxbitmap.h | 18 ++++++-- 2 files changed, 94 insertions(+), 27 deletions(-) diff --git a/LEGO1/mxbitmap.cpp b/LEGO1/mxbitmap.cpp index a7425dd8..2ccdd80b 100644 --- a/LEGO1/mxbitmap.cpp +++ b/LEGO1/mxbitmap.cpp @@ -14,15 +14,75 @@ MxBitmap::MxBitmap() // OFFSET: LEGO1 0x100bca10 MxBitmap::~MxBitmap() { - if (this->m_info != NULL) { + if (this->m_info != NULL) delete m_info; - } - if (this->m_data != NULL) { + if (this->m_data != NULL) delete m_data; - } - if (this->m_palette != NULL) { + if (this->m_palette != NULL) delete m_palette; - } +} + +// OFFSET: LEGO1 0x100bcc40 STUB +int MxBitmap::vtable14(int) +{ + return 0; +} + +// OFFSET: LEGO1 0x100bcba0 STUB +int MxBitmap::vtable18(BITMAPINFOHEADER *p_bmiHeader) +{ + return 0; +} + +// OFFSET: LEGO1 0x100bcaa0 STUB +int MxBitmap::vtable1c(int p_width, int p_height, MxPalette *p_palette, int) +{ + return 0; +} + +// OFFSET: LEGO1 0x100bcd60 STUB +MxResult MxBitmap::LoadFile(HANDLE p_handle) +{ + return SUCCESS; +} + +// OFFSET: LEGO1 0x100bcd10 +long MxBitmap::Read(const char *p_filename) +{ + MxResult result = FAILURE; + HANDLE handle = CreateFileA( + p_filename, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + + if (handle != INVALID_HANDLE_VALUE && !LoadFile(handle)) + result = SUCCESS; + + if (handle) + CloseHandle(handle); + + return result; +} + +// OFFSET: LEGO1 0x1004e0d0 +int MxBitmap::vtable28(int) +{ + return -1; +} + +// OFFSET: LEGO1 0x100ce70 STUB +void MxBitmap::vtable2c(int, int, int, int, int, int, int) +{ +} + +// OFFSET: LEGO1 0x100d020 STUB +void MxBitmap::vtable30(int, int, int, int, int, int, int) +{ } // OFFSET: LEGO1 0x100bd1c0 @@ -51,24 +111,19 @@ MxPalette *MxBitmap::CreatePalette() return pal; } -// OFFSET: LEGO1 0x100bcd10 -long MxBitmap::Read(const char *filename) +// OFFSET: LEGO1 0x100bd280 STUB +void MxBitmap::vtable38(void*) { - HANDLE handle; - int unk1; - MxResult ret = FAILURE; - - handle = CreateFileA(filename,GENERIC_READ,FILE_SHARE_READ,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL); - if(handle != (HANDLE)INVALID_HANDLE_VALUE) { // INVALID_HANDLE_VALUE = -1, or 0xffffffff - // FIXME: line 16. iVar gets changed in this line - if(unk1 == 0) { - ret = SUCCESS; - } - } - if(handle != (HANDLE)NULL) { - CloseHandle(handle); - } - - return ret; } +// OFFSET: LEGO1 0x100bd2d0 STUB +int MxBitmap::vtable3c(MxBool) +{ + return 0; +} + +// OFFSET: LEGO1 0x100bd3e0 STUB +int MxBitmap::vtable40(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, int p_yDest, int p_destWidth, int p_destHeight) +{ + return 0; +} \ No newline at end of file diff --git a/LEGO1/mxbitmap.h b/LEGO1/mxbitmap.h index 24d9e166..e16fcb0e 100644 --- a/LEGO1/mxbitmap.h +++ b/LEGO1/mxbitmap.h @@ -11,9 +11,21 @@ class MxBitmap : public MxCore { public: __declspec(dllexport) MxBitmap(); - __declspec(dllexport) virtual ~MxBitmap(); - __declspec(dllexport) virtual MxPalette *CreatePalette(); - __declspec(dllexport) virtual long Read(const char *); + __declspec(dllexport) virtual ~MxBitmap(); // vtable+00 + + virtual int vtable14(int); + virtual int vtable18(BITMAPINFOHEADER *p_bmiHeader); + virtual int vtable1c(int p_width, int p_height, MxPalette *p_palette, int); + virtual MxResult LoadFile(HANDLE p_handle); + __declspec(dllexport) virtual long Read(const char *p_filename); // vtable+24 + virtual int vtable28(int); + virtual void vtable2c(int, int, int, int, int, int, int); + virtual void vtable30(int, int, int, int, int, int, int); + __declspec(dllexport) virtual MxPalette *CreatePalette(); // vtable+34 + virtual void vtable38(void*); + virtual int vtable3c(MxBool); + virtual int vtable40(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, int p_yDest, int p_destWidth, int p_destHeight); + private: BITMAPINFO *m_info; BITMAPINFOHEADER *m_bmiHeader; From 904640e028e7aa00b17c730887cfce070801cc66 Mon Sep 17 00:00:00 2001 From: stonedDiscord Date: Sun, 2 Jul 2023 06:51:26 +0200 Subject: [PATCH 10/22] CI steps (#65) * break build up into steps * download artifacts * clone uploadtool * need env on windows * just use ubuntu for inkscape * report went missing * add inkscape to path * use ubuntu for compare * Revert "use ubuntu for compare" This reverts commit a4ce103d091185471bcd629f6dfa6d1ab97829eb. * reinstall after cache * try different apt cache * use im * use rsvg * change size to avoid downscaling * remove png * do not install librsvg anymore --- .github/workflows/build.yml | 58 ++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 09bf06a2..3bbc6d50 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,10 +1,6 @@ name: Build -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] +on: [push, pull_request] jobs: build: @@ -61,6 +57,27 @@ jobs: cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles" cmake --build . + - name: Upload Artifact + uses: actions/upload-artifact@master + with: + name: Win32 + path: | + build/ISLE.EXE + build/ISLE.PDB + build/LEGO1.DLL + build/LEGO1.PDB + + compare: + needs: build + runs-on: windows-latest + steps: + - uses: actions/checkout@master + + - uses: actions/download-artifact@master + with: + name: Win32 + path: build + - name: Restore cached original binaries id: cache-original-binaries uses: actions/cache/restore@v3 @@ -103,14 +120,6 @@ jobs: run: | python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL - - name: Upload Artifact - uses: actions/upload-artifact@master - with: - name: Win32 - path: | - build/ISLE.EXE - build/LEGO1.DLL - - name: Upload Artifact uses: actions/upload-artifact@master with: @@ -118,15 +127,30 @@ jobs: path: | ISLEPROGRESS.* LEGO1PROGRESS.* - + + upload: + needs: [build, compare] + runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + steps: + - uses: actions/checkout@v3 + with: + repository: 'probonopd/uploadtool' + + - uses: actions/download-artifact@master + with: + name: Win32 + path: build + + - uses: actions/download-artifact@master + with: + name: Accuracy Report + - name: Upload Continuous Release - shell: bash - if: github.event_name == 'push' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }} run: | - curl -fLOSs https://raw.githubusercontent.com/probonopd/uploadtool/master/upload.sh ./upload.sh \ build/ISLE.EXE \ build/LEGO1.DLL \ From 40dd0a93d473400f55cc2377c613eb469a0944ba Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sun, 2 Jul 2023 08:52:47 +0200 Subject: [PATCH 11/22] Faster reccmp.py on linux (#62) * reccmp: avoid repeated execution of winepath Executing winepath many times is slow, so try we like to avoid it as much as possible. When the path start with a known prefix, replace it with a cached prefix and do some string manipulation. This change reduces execution time of reccmp.py from 90s to 2s. Which is nice. m * reccmp: continue looking when source cannot be found Most often, the reasons is mismatched sources. * reccmp: add basic logging + optional debug * Read the addresses in the exe headers as little endian --- tools/reccmp/reccmp.py | 93 ++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 27 deletions(-) diff --git a/tools/reccmp/reccmp.py b/tools/reccmp/reccmp.py index abfe71a7..226be15d 100755 --- a/tools/reccmp/reccmp.py +++ b/tools/reccmp/reccmp.py @@ -6,6 +6,7 @@ import difflib import struct import subprocess +import logging import os import sys import colorama @@ -24,8 +25,14 @@ parser.add_argument('--svg-icon', metavar='icon', help='Icon to use in SVG (PNG)') parser.add_argument('--print-rec-addr', action='store_true', help='Print addresses of recompiled functions too') +parser.set_defaults(loglevel=logging.INFO) +parser.add_argument('--debug', action='store_const', const=logging.DEBUG, dest='loglevel', help='Print script debug information') + args = parser.parse_args() +logging.basicConfig(level=args.loglevel, format='[%(levelname)s] %(message)s') +logger = logging.getLogger(__name__) + colorama.init() verbose = None @@ -61,6 +68,7 @@ # to file addresses class Bin: def __init__(self, filename): + logger.debug('Parsing headers of "%s"... ', filename) self.file = open(filename, 'rb') #HACK: Strictly, we should be parsing the header, but we know where @@ -68,15 +76,16 @@ def __init__(self, filename): # Read ImageBase self.file.seek(0xB4) - self.imagebase = struct.unpack('i', self.file.read(4))[0] + self.imagebase, = struct.unpack(' str: + if unix_fn.startswith('./'): + return self.win_cmd + '\\' + unix_fn[2:].replace('/', '\\') + if unix_fn.startswith(self.unix_cwd): + return self.win_cwd + '\\' + unix_fn.removeprefix(self.unix_cwd).replace('/', '\\').lstrip('\\') + return self._call_winepath_unix2win(unix_fn) + + def get_unix_path(self, win_fn: str) -> str: + if win_fn.startswith('.\\') or win_fn.startswith('./'): + return self.unix_cwd + '/' + win_fn[2:].replace('\\', '/') + if win_fn.startswith(self.win_cwd): + return self.unix_cwd + '/' + win_fn.removeprefix(self.win_cwd).replace('\\', '/') + return self._call_winepath_win2unix(win_fn) + + @staticmethod + def _call_winepath_unix2win(fn: str) -> str: + return subprocess.check_output(['winepath', '-w', fn], text=True).strip() + + @staticmethod + def _call_winepath_win2unix(fn: str) -> str: + return subprocess.check_output(['winepath', fn], text=True).strip() def get_file_in_script_dir(fn): return os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), fn) @@ -109,22 +140,24 @@ class SymInfo: funcs = {} lines = {} - def __init__(self, pdb, file): + def __init__(self, pdb, file, wine_path_converter): call = [get_file_in_script_dir('cvdump.exe'), '-l', '-s'] - if os.name != 'nt': + if wine_path_converter: # Run cvdump through wine and convert path to Windows-friendly wine path call.insert(0, 'wine') - call.append(get_wine_path(pdb)) + call.append(wine_path_converter.get_wine_path(pdb)) else: call.append(pdb) - print('Parsing %s...' % pdb) - + logger.info('Parsing %s ...', pdb) + logger.debug('Command = %r', call) line_dump = subprocess.check_output(call).decode('utf-8').split('\r\n') current_section = None + logger.debug('Parsing output of cvdump.exe ...') + for i, line in enumerate(line_dump): if line.startswith('***'): current_section = line[4:] @@ -132,8 +165,6 @@ def __init__(self, pdb, file): if current_section == 'SYMBOLS' and 'S_GPROC32' in line: addr = int(line[26:34], 16) - - info = RecompiledInfo() info.addr = addr + recompfile.imagebase + recompfile.textvirt @@ -155,9 +186,9 @@ def __init__(self, pdb, file): elif current_section == 'LINES' and line.startswith(' ') and not line.startswith(' '): sourcepath = line.split()[0] - if os.name != 'nt': + if wine_path_converter: # Convert filename to Unix path for file compare - sourcepath = get_unix_path(sourcepath) + sourcepath = wine_path_converter.get_unix_path(sourcepath) if sourcepath not in self.lines: self.lines[sourcepath] = {} @@ -178,18 +209,23 @@ def __init__(self, pdb, file): j += 1 + logger.debug('... Parsing output of cvdump.exe finished') + def get_recompiled_address(self, filename, line): addr = None found = False - #print('Looking for ' + filename + ' line ' + str(line)) + logger.debug('Looking for %s:%d', filename, line) for fn in self.lines: # Sometimes a PDB is compiled with a relative path while we always have # an absolute path. Therefore we must - if os.path.samefile(fn, filename): - filename = fn - break + try: + if os.path.samefile(fn, filename): + filename = fn + break + except FileNotFoundError as e: + continue if filename in self.lines and line in self.lines[fn]: addr = self.lines[fn][line] @@ -197,13 +233,16 @@ def get_recompiled_address(self, filename, line): if addr in self.funcs: return self.funcs[addr] else: - print('Failed to find function symbol with address: %s' % hex(addr)) + logger.error('Failed to find function symbol with address: 0x%x', addr) else: - print('Failed to find function symbol with filename and line: %s:%s' % (filename, str(line))) + logger.error('Failed to find function symbol with filename and line: %s:%d', filename, line) +wine_path_converter = None +if os.name != 'nt': + wine_path_converter = WinePathConverter(source) origfile = Bin(original) recompfile = Bin(recomp) -syminfo = SymInfo(syms, recompfile) +syminfo = SymInfo(syms, recompfile, wine_path_converter) print() From 302b3f66f09133bd8feaff24992ffbd4e986211b Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sun, 2 Jul 2023 08:53:54 +0200 Subject: [PATCH 12/22] Get Isle building on MinGW32 (#63) * Add MxUnknown100dc6b0::~MxUnknown100dc6b0 stub * Declare destructor of MxOmni and MxTransitionManager in class * inline attribute must go first * Stub LegoState::Vtable0x14 for Act3State * MxStreamer::VTable0x14 is not an override * Stub MxEntity::Destroy for LegoState::Destroy * Stub MxUnknown100dc6e0 for MxSoundManager * ::ClassName and ::IsA are const methods * methods in the class body don't need a namespace * MxSoundManager subclasses MxUnknown100dc6e0 * LegoInputManager subclasses MxPresenter * NotificationId is an enum, and does not need __declspec(dllexport) * Fix final #endif of legoomni.h and mxobjectfactory.h * Add const alternative for LegoOmni::Create and MxVideoParam, only available for MinGW * Alternative approach to MinGW compatibility * MinGW on Linux is case sensitve * Don't delete a member variable. C++ automatically destructs member variables --------- Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com> --- CMakeLists.txt | 1 + LEGO1/act2brick.h | 6 +++--- LEGO1/compat.h | 14 ++++++++++++++ LEGO1/legobackgroundcolor.h | 3 ++- LEGO1/legoinputmanager.h | 8 ++++---- LEGO1/legoomni.cpp | 2 +- LEGO1/legoomni.h | 3 ++- LEGO1/legostate.cpp | 5 +++++ LEGO1/legostate.h | 4 +++- LEGO1/mxentity.cpp | 6 ++++++ LEGO1/mxentity.h | 2 ++ LEGO1/mxmediapresenter.h | 4 ++-- LEGO1/mxobjectfactory.h | 2 +- LEGO1/mxomni.h | 5 +++-- LEGO1/mxsoundmanager.cpp | 12 ++++++++++-- LEGO1/mxsoundmanager.h | 8 ++++++-- LEGO1/mxstreamer.h | 2 +- LEGO1/mxstringvariable.cpp | 17 ++++++++--------- LEGO1/mxstringvariable.h | 2 +- LEGO1/mxtimer.h | 2 +- LEGO1/mxtransitionmanager.h | 3 ++- LEGO1/mxunknown100dc6b0.cpp | 6 ++++++ LEGO1/mxunknown100dc6b0.h | 1 + LEGO1/mxunknown100dc6e0.cpp | 19 +++++++++++++++++++ LEGO1/mxunknown100dc6e0.h | 19 +++++++++++++++++++ LEGO1/mxvideoparam.cpp | 2 +- LEGO1/mxvideoparam.h | 3 ++- 27 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 LEGO1/compat.h create mode 100644 LEGO1/mxunknown100dc6e0.cpp create mode 100644 LEGO1/mxunknown100dc6e0.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e7b584d9..4d4976fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,7 @@ add_library(lego1 SHARED LEGO1/mxtimer.cpp LEGO1/mxtransitionmanager.cpp LEGO1/mxunknown100dc6b0.cpp + LEGO1/mxunknown100dc6e0.cpp LEGO1/mxvariabletable.cpp LEGO1/mxvideomanager.cpp LEGO1/mxvideoparam.cpp diff --git a/LEGO1/act2brick.h b/LEGO1/act2brick.h index d5703081..fd10a997 100644 --- a/LEGO1/act2brick.h +++ b/LEGO1/act2brick.h @@ -8,21 +8,21 @@ class Act2Brick : public LegoPathActor { public: - Act2Brick(); + Act2Brick(); virtual ~Act2Brick() override; // vtable+0x0 virtual long Notify(MxParam &p) override; // vtable+0x4 virtual long Tickle() override; // vtable+0x08 // OFFSET: LEGO1 0x1007a360 - inline virtual const char *ClassName() override // vtable+0x0c + inline virtual const char *ClassName() const override // vtable+0x0c { // 0x100f0438 return "Act2Brick"; } // OFFSET: LEGO1 0x1007a370 - inline virtual MxBool IsA(const char *name) override // vtable+0x10 + inline virtual MxBool IsA(const char *name) const override // vtable+0x10 { return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name); } diff --git a/LEGO1/compat.h b/LEGO1/compat.h new file mode 100644 index 00000000..496fa4db --- /dev/null +++ b/LEGO1/compat.h @@ -0,0 +1,14 @@ +#ifndef ISLECOMPAT_H +#define ISLECOMPAT_H + +// Various macros to enable compiling with other/newer compilers. + +// Use `COMPAT_CONST` where something ought to be 'const', and a newer compiler would complain if it +// wasn't, but we know it isn't 'const' in the original code. +#ifdef __MINGW32__ +#define COMPAT_CONST const +#else +#define COMPAT_CONST +#endif + +#endif // ISLECOMPAT_H \ No newline at end of file diff --git a/LEGO1/legobackgroundcolor.h b/LEGO1/legobackgroundcolor.h index 812e8882..1daa6311 100644 --- a/LEGO1/legobackgroundcolor.h +++ b/LEGO1/legobackgroundcolor.h @@ -2,7 +2,8 @@ #define LEGOBACKGROUNDCOLOR_H #include "mxstring.h" #include "mxcore.h" -#include "MxStringVariable.h" +#include "mxstringvariable.h" + class LegoBackgroundColor : public MxStringVariable { public: diff --git a/LEGO1/legoinputmanager.h b/LEGO1/legoinputmanager.h index caafed52..c629134e 100644 --- a/LEGO1/legoinputmanager.h +++ b/LEGO1/legoinputmanager.h @@ -1,9 +1,9 @@ #ifndef LEGOINPUTMANAGER_H #define LEGOINPUTMANAGER_H -#include "mxcore.h" +#include "mxpresenter.h" -__declspec(dllexport) enum NotificationId +enum NotificationId { NONE = 0, KEYDOWN = 7, @@ -15,7 +15,7 @@ __declspec(dllexport) enum NotificationId // VTABLE 0x100d8760 // SIZE 0x338 -class LegoInputManager +class LegoInputManager : public MxPresenter { public: LegoInputManager(); @@ -27,7 +27,7 @@ class LegoInputManager virtual long Tickle() override; // vtable+0x8 - char m_pad00[0x19C]; + char m_pad00[0x15c]; int m_joystickIndex; char m_pad200[0x194]; MxBool m_useJoystick; diff --git a/LEGO1/legoomni.cpp b/LEGO1/legoomni.cpp index 365748e7..45f7a9f7 100644 --- a/LEGO1/legoomni.cpp +++ b/LEGO1/legoomni.cpp @@ -176,7 +176,7 @@ void LegoOmni::Init() } // OFFSET: LEGO1 0x10058e70 -MxResult LegoOmni::Create(MxOmniCreateParam &p) +MxResult LegoOmni::Create(COMPAT_CONST MxOmniCreateParam &p) { // FIXME: Stub return SUCCESS; diff --git a/LEGO1/legoomni.h b/LEGO1/legoomni.h index 9d825ebc..512fba41 100644 --- a/LEGO1/legoomni.h +++ b/LEGO1/legoomni.h @@ -1,6 +1,7 @@ #ifndef LEGOOMNI_H #define LEGOOMNI_H +#include "compat.h" #include "legoentity.h" #include "legoinputmanager.h" #include "legogamestate.h" @@ -51,7 +52,7 @@ class LegoOmni : public MxOmni } virtual void Init(); // vtable+14 - virtual MxResult Create(MxOmniCreateParam &p); // vtable+18 + virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18 virtual void Destroy(); // vtable+1c virtual void vtable20(); virtual void vtable24(MxDSAction &ds); diff --git a/LEGO1/legostate.cpp b/LEGO1/legostate.cpp index 2b49fcd7..55637dc4 100644 --- a/LEGO1/legostate.cpp +++ b/LEGO1/legostate.cpp @@ -4,3 +4,8 @@ LegoState::~LegoState() { } + +// OFFSET: LEGO1 0x10005f90 +MxBool LegoState::VTable0x14() { + return TRUE; +} diff --git a/LEGO1/legostate.h b/LEGO1/legostate.h index be7289bc..904ad323 100644 --- a/LEGO1/legostate.h +++ b/LEGO1/legostate.h @@ -11,7 +11,7 @@ class LegoState : public MxCore // OFFSET: LEGO1 0x100060d0 inline virtual const char *ClassName() const override // vtable+0x0c - { + { // 0x100f01b8 return "LegoState"; } @@ -22,6 +22,8 @@ class LegoState : public MxCore return !strcmp(name, LegoState::ClassName()) || MxCore::IsA(name); } + virtual MxBool VTable0x14(); + }; #endif // LEGOSTATE_H diff --git a/LEGO1/mxentity.cpp b/LEGO1/mxentity.cpp index 526a03e2..7459dd24 100644 --- a/LEGO1/mxentity.cpp +++ b/LEGO1/mxentity.cpp @@ -11,3 +11,9 @@ MxEntity::~MxEntity() { // TODO } + +// OFFSET: LEGO1 0x10001070 STUB +void MxEntity::Destroy() +{ + // TODO +} diff --git a/LEGO1/mxentity.h b/LEGO1/mxentity.h index dda04646..7123abbf 100644 --- a/LEGO1/mxentity.h +++ b/LEGO1/mxentity.h @@ -23,6 +23,8 @@ class MxEntity : public MxCore return !strcmp(name, MxEntity::ClassName()) || MxCore::IsA(name); } + virtual void Destroy(); // vtable+0x1c + // 0x8: MxResult // 0xc MxAtomId }; diff --git a/LEGO1/mxmediapresenter.h b/LEGO1/mxmediapresenter.h index 3fb70d31..647150c4 100644 --- a/LEGO1/mxmediapresenter.h +++ b/LEGO1/mxmediapresenter.h @@ -15,14 +15,14 @@ class MxMediaPresenter : public MxPresenter virtual long Tickle() override; // vtable+0x8, override MxCore // OFFSET: LEGO1 0x1000c5c0 - inline virtual const char *MxMediaPresenter::ClassName() const override // vtable+0xc + inline virtual const char *ClassName() const override // vtable+0xc { // 0x100f074c return "MxMediaPresenter"; } // OFFSET: LEGO1 0x1000c5d0 - inline virtual MxBool MxMediaPresenter::IsA(const char *name) const override // vtable+0x10 + inline virtual MxBool IsA(const char *name) const override // vtable+0x10 { return !strcmp(name, MxMediaPresenter::ClassName()) || MxPresenter::IsA(name); } diff --git a/LEGO1/mxobjectfactory.h b/LEGO1/mxobjectfactory.h index 57809be9..bdd172a8 100644 --- a/LEGO1/mxobjectfactory.h +++ b/LEGO1/mxobjectfactory.h @@ -9,4 +9,4 @@ class MxObjectFactory : public MxCore }; -#endif MXOBJECTFACTORY_H +#endif // MXOBJECTFACTORY_H diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index 0e837ad1..dee03229 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -28,8 +28,9 @@ class MxOmni : public MxCore __declspec(dllexport) static void SetCD(const char *p_cd); __declspec(dllexport) static void SetHD(const char *p_hd); __declspec(dllexport) static void SetSound3D(MxBool p_3dsound); - - virtual ~MxOmni(); + + MxOmni(); + virtual ~MxOmni() override; virtual long Notify(MxParam &p); // vtable+04 virtual void Init(); // vtable+14 diff --git a/LEGO1/mxsoundmanager.cpp b/LEGO1/mxsoundmanager.cpp index d12ecee1..275d0514 100644 --- a/LEGO1/mxsoundmanager.cpp +++ b/LEGO1/mxsoundmanager.cpp @@ -1,9 +1,9 @@ #include "mxsoundmanager.h" -// OFFSET: LEGO1 0x100ae740 STUB +// OFFSET: LEGO1 0x100ae740 MxSoundManager::MxSoundManager() { - // TODO + Init(); } // OFFSET: LEGO1 0x100ae7d0 STUB @@ -11,3 +11,11 @@ MxSoundManager::~MxSoundManager() { // TODO } + +// OFFSET: LEGO1 0x100ae830 +void MxSoundManager::Init() +{ + m_unk30 = 0; + m_unk34 = 0; +} + diff --git a/LEGO1/mxsoundmanager.h b/LEGO1/mxsoundmanager.h index 3421a5d6..4d74fa95 100644 --- a/LEGO1/mxsoundmanager.h +++ b/LEGO1/mxsoundmanager.h @@ -1,17 +1,21 @@ #ifndef MXSOUNDMANAGER_H #define MXSOUNDMANAGER_H -#include "mxcore.h" +#include "mxunknown100dc6e0.h" // VTABLE 0x100dc128 // SIZE 0x3c // Base vtables are: MxCore -> 0x100dc6b0 -> 0x100dc6e0 -> MxSoundManager -class MxSoundManager +class MxSoundManager : public MxUnknown100dc6e0 { public: MxSoundManager(); virtual ~MxSoundManager() override; // vtable+0x0 +private: + void Init(); + int m_unk30; + int m_unk34; }; #endif // MXSOUNDMANAGER_H diff --git a/LEGO1/mxstreamer.h b/LEGO1/mxstreamer.h index f8eeb43b..de84ed01 100644 --- a/LEGO1/mxstreamer.h +++ b/LEGO1/mxstreamer.h @@ -15,7 +15,7 @@ class MxStreamer : public MxCore __declspec(dllexport) long Close(const char *p); virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual MxResult VTable0x14() override; // vtable+0x14 + virtual MxResult VTable0x14(); // vtable+0x14 }; #endif // MXSTREAMER_H diff --git a/LEGO1/mxstringvariable.cpp b/LEGO1/mxstringvariable.cpp index a9432679..e63329c1 100644 --- a/LEGO1/mxstringvariable.cpp +++ b/LEGO1/mxstringvariable.cpp @@ -1,14 +1,6 @@ -#include "MxStringVariable.h" +#include "mxstringvariable.h" #include "mxstring.h" -//FIXME: Figure out what exactly this class is used for. It is used in LegoGameState::LegoGameState when loading the background color, and for loading the "fsmovie" variable -// OFFSET: LEGO1 0x1003bec0 -MxStringVariable::~MxStringVariable() -{ - - delete &m_string; - delete &m_name; -} // OFFSET: LEGO1 0x1003bea0 MxString *MxStringVariable::GetString() @@ -21,3 +13,10 @@ void MxStringVariable::SetString(const char *colorString) { m_string = colorString; } + +//FIXME: Figure out what exactly this class is used for. It is used in LegoGameState::LegoGameState when loading the background color, and for loading the "fsmovie" variable +// OFFSET: LEGO1 0x1003bec0 +void MxStringVariable::Destroy() +{ + delete this; +} diff --git a/LEGO1/mxstringvariable.h b/LEGO1/mxstringvariable.h index 5284fc5d..dd623dfb 100644 --- a/LEGO1/mxstringvariable.h +++ b/LEGO1/mxstringvariable.h @@ -10,7 +10,7 @@ class MxStringVariable MxStringVariable() {} virtual MxString *GetString(); virtual void SetString(const char *colorString); - virtual ~MxStringVariable(); + virtual void Destroy(); protected: MxString m_name; diff --git a/LEGO1/mxtimer.h b/LEGO1/mxtimer.h index d79023d8..564eedfa 100644 --- a/LEGO1/mxtimer.h +++ b/LEGO1/mxtimer.h @@ -15,7 +15,7 @@ class MxTimer : public MxCore __declspec(dllexport) long GetRealTime(); - long GetTime() inline + inline long GetTime() { if (this->m_isRunning) return s_LastTimeCalculated; diff --git a/LEGO1/mxtransitionmanager.h b/LEGO1/mxtransitionmanager.h index 3fdb1ebf..9dcb7f7c 100644 --- a/LEGO1/mxtransitionmanager.h +++ b/LEGO1/mxtransitionmanager.h @@ -9,7 +9,8 @@ class MxVideoPresenter; class MxTransitionManager : public MxCore { public: - virtual ~MxTransitionManager(); // vtable+0x0 + MxTransitionManager(); + virtual ~MxTransitionManager() override; // vtable+0x0 __declspec(dllexport) void SetWaitIndicator(MxVideoPresenter *videoPresenter); diff --git a/LEGO1/mxunknown100dc6b0.cpp b/LEGO1/mxunknown100dc6b0.cpp index 029be1f7..b896fa10 100644 --- a/LEGO1/mxunknown100dc6b0.cpp +++ b/LEGO1/mxunknown100dc6b0.cpp @@ -6,6 +6,12 @@ MxUnknown100dc6b0::MxUnknown100dc6b0() Init(); } +// OFFSET: LEGO1 0x100b8560 STUB +MxUnknown100dc6b0::~MxUnknown100dc6b0() +{ + // TODO +} + // OFFSET: LEGO1 0x100b85d0 MxResult MxUnknown100dc6b0::Init() { diff --git a/LEGO1/mxunknown100dc6b0.h b/LEGO1/mxunknown100dc6b0.h index ca2ee600..29d42209 100644 --- a/LEGO1/mxunknown100dc6b0.h +++ b/LEGO1/mxunknown100dc6b0.h @@ -10,6 +10,7 @@ class MxUnknown100dc6b0 : public MxCore { public: MxUnknown100dc6b0(); + virtual ~MxUnknown100dc6b0() override; MxResult Init(); diff --git a/LEGO1/mxunknown100dc6e0.cpp b/LEGO1/mxunknown100dc6e0.cpp new file mode 100644 index 00000000..b896e89b --- /dev/null +++ b/LEGO1/mxunknown100dc6e0.cpp @@ -0,0 +1,19 @@ +#include "mxunknown100dc6e0.h" + +// OFFSET: LEGO1 0x100b8d00 +MxUnknown100dc6e0::MxUnknown100dc6e0() +{ + Init(); +} + +// OFFSET: LEGO1 0x100b8d90 STUB +MxUnknown100dc6e0::~MxUnknown100dc6e0() +{ + // TODO +} + +// OFFSET: LEGO1 0x100b8df0 +void MxUnknown100dc6e0::Init() +{ + this->m_unk2c = 100; +} diff --git a/LEGO1/mxunknown100dc6e0.h b/LEGO1/mxunknown100dc6e0.h new file mode 100644 index 00000000..79c63bab --- /dev/null +++ b/LEGO1/mxunknown100dc6e0.h @@ -0,0 +1,19 @@ +#ifndef MXUNKNOWN100DC6E0_H +#define MXUNKNOWN100DC6E0_H + +#include "mxunknown100dc6b0.h" + +// VTABLE 0x100dc6e0 +class MxUnknown100dc6e0 : public MxUnknown100dc6b0 +{ +public: + MxUnknown100dc6e0(); + virtual ~MxUnknown100dc6e0() override; + +protected: + void Init(); + + int m_unk2c; +}; + +#endif // MXUNKNOWN100DC6E0_H diff --git a/LEGO1/mxvideoparam.cpp b/LEGO1/mxvideoparam.cpp index b72107c7..81f5d2d7 100644 --- a/LEGO1/mxvideoparam.cpp +++ b/LEGO1/mxvideoparam.cpp @@ -17,7 +17,7 @@ MxVideoParam::MxVideoParam() } // OFFSET: LEGO1 0x100beca0 -MxVideoParam::MxVideoParam(MxRect32 &p_rect, MxPalette *p_pal, unsigned long p_backBuffers, MxVideoParamFlags &p_flags) +MxVideoParam::MxVideoParam(COMPAT_CONST MxRect32 &p_rect, MxPalette *p_pal, unsigned long p_backBuffers, COMPAT_CONST MxVideoParamFlags &p_flags) { this->m_rect.m_left = p_rect.m_left; this->m_rect.m_top = p_rect.m_top; diff --git a/LEGO1/mxvideoparam.h b/LEGO1/mxvideoparam.h index 3e00a920..0b6b2a38 100644 --- a/LEGO1/mxvideoparam.h +++ b/LEGO1/mxvideoparam.h @@ -3,6 +3,7 @@ #include +#include "compat.h" #include "mxpalette.h" #include "mxrect32.h" #include "mxtypes.h" @@ -14,7 +15,7 @@ class MxVideoParam public: __declspec(dllexport) MxVideoParam(); __declspec(dllexport) MxVideoParam(MxVideoParam &); - __declspec(dllexport) MxVideoParam(MxRect32 &rect, MxPalette *pal, unsigned long p3, MxVideoParamFlags &flags); + __declspec(dllexport) MxVideoParam(COMPAT_CONST MxRect32 &rect, MxPalette *pal, unsigned long p3, COMPAT_CONST MxVideoParamFlags &flags); __declspec(dllexport) MxVideoParam &operator=(const MxVideoParam &); __declspec(dllexport) ~MxVideoParam(); From 646b39e8765d0c93897c210f0308be7d47e053bf Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sun, 2 Jul 2023 09:00:28 +0200 Subject: [PATCH 13/22] Implement MxObjectFactory::{MxObjectFactory,Create} + match sizes of Mx.*Presenter objects created by it (#59) * Get Isle building on MinGW32 (#63) * Add MxUnknown100dc6b0::~MxUnknown100dc6b0 stub * Declare destructor of MxOmni and MxTransitionManager in class * inline attribute must go first * Stub LegoState::Vtable0x14 for Act3State * MxStreamer::VTable0x14 is not an override * Stub MxEntity::Destroy for LegoState::Destroy * Stub MxUnknown100dc6e0 for MxSoundManager * ::ClassName and ::IsA are const methods * methods in the class body don't need a namespace * MxSoundManager subclasses MxUnknown100dc6e0 * LegoInputManager subclasses MxPresenter * NotificationId is an enum, and does not need __declspec(dllexport) * Fix final #endif of legoomni.h and mxobjectfactory.h * Add const alternative for LegoOmni::Create and MxVideoParam, only available for MinGW * Alternative approach to MinGW compatibility * MinGW on Linux is case sensitve * Don't delete a member variable. C++ automatically destructs member variables --------- Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com> * MxatomId: implement inline operator== * Add decomp.h header, containing macro's only used when matching the original binaries * Add in-line constructor of MxPresenter * MxMediaPresenter: add members to match size * MxVideoPresenter: add members to match size * MxCompositePresenter: add members to match size * MxFlcPresenter: add members to match size * MxSmkPresenter: add members to match size * MxStillPresenter: add members to match size * MxAudioPresenter: add members to match size * MxWavePresenter: add members to match size * MxMIDIPresenter: add members to match size * MxEventPresenter: add members to match size * MxLoopingFlcPresenter: add members to match size * MxLoopingSmkPresenter: add members to match size * MxLoopingMIDIPresenter: add check for size * Implement MxObjectFactory::{MxObjectFactory,Create} Matching of MxObjectFactory::Create is not good, because none of the other objects have been implemented. * Implement a few MxPresenter methods * Fix size of LegoInputManager * Fix name of first padding member of legoinputmanager.h * add DECOMP_SIZE_ASSERT macro * Use DECOMP_SIZE_ASSERT macro + convert to hexadecimal * fixed minor typos --------- Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com> Co-authored-by: itsmattkc --- CMakeLists.txt | 3 ++ LEGO1/decomp.h | 11 ++++++ LEGO1/legoinputmanager.cpp | 4 +++ LEGO1/legoinputmanager.h | 5 +-- LEGO1/mxatomid.h | 11 ++++++ LEGO1/mxaudiopresenter.cpp | 4 +++ LEGO1/mxaudiopresenter.h | 8 ++++- LEGO1/mxcompositepresenter.cpp | 4 +++ LEGO1/mxcompositepresenter.h | 5 ++- LEGO1/mxeventpresenter.cpp | 8 +++-- LEGO1/mxeventpresenter.h | 5 ++- LEGO1/mxflcpresenter.cpp | 4 +++ LEGO1/mxflcpresenter.h | 4 +++ LEGO1/mxloopingflcpresenter.cpp | 4 +++ LEGO1/mxloopingflcpresenter.h | 5 ++- LEGO1/mxloopingmidipresenter.cpp | 5 +++ LEGO1/mxloopingsmkpresenter.cpp | 4 +++ LEGO1/mxloopingsmkpresenter.h | 5 ++- LEGO1/mxmediapresenter.cpp | 2 ++ LEGO1/mxmediapresenter.h | 6 ++++ LEGO1/mxmidipresenter.cpp | 16 +++++++++ LEGO1/mxmidipresenter.h | 5 +++ LEGO1/mxobjectfactory.cpp | 45 ++++++++++++++++++++++++ LEGO1/mxobjectfactory.h | 24 ++++++++++++- LEGO1/mxpresenter.cpp | 59 +++++++++++++++++--------------- LEGO1/mxpresenter.h | 47 +++++++++++++------------ LEGO1/mxsmkpresenter.cpp | 4 +++ LEGO1/mxsmkpresenter.h | 7 ++-- LEGO1/mxstillpresenter.cpp | 4 +++ LEGO1/mxstillpresenter.h | 7 ++++ LEGO1/mxvideopresenter.cpp | 7 ++++ LEGO1/mxvideopresenter.h | 16 ++++++++- LEGO1/mxwavepresenter.cpp | 15 ++++++-- LEGO1/mxwavepresenter.h | 16 ++++++++- 34 files changed, 312 insertions(+), 67 deletions(-) create mode 100644 LEGO1/decomp.h create mode 100644 LEGO1/mxloopingmidipresenter.cpp create mode 100644 LEGO1/mxmidipresenter.cpp create mode 100644 LEGO1/mxobjectfactory.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d4976fa..cdfebd05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,10 +121,13 @@ add_library(lego1 SHARED LEGO1/mxflcpresenter.cpp LEGO1/mxioinfo.cpp LEGO1/mxloopingflcpresenter.cpp + LEGO1/mxloopingmidipresenter.cpp LEGO1/mxloopingsmkpresenter.cpp LEGO1/mxmediapresenter.cpp + LEGO1/mxmidipresenter.cpp LEGO1/mxmusicpresenter.cpp LEGO1/mxnotificationmanager.cpp + LEGO1/mxobjectfactory.cpp LEGO1/mxomni.cpp LEGO1/mxomnicreateflags.cpp LEGO1/mxomnicreateparam.cpp diff --git a/LEGO1/decomp.h b/LEGO1/decomp.h new file mode 100644 index 00000000..5466e6d8 --- /dev/null +++ b/LEGO1/decomp.h @@ -0,0 +1,11 @@ +#ifndef DECOMP_H +#define DECOMP_H + +#define DECOMP_STATIC_ASSERT(V) namespace { typedef int foo[(V)?1:-1]; } +#define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S) + +typedef unsigned char undefined; +typedef unsigned short undefined2; +typedef unsigned int undefined4; + +#endif // DECOMP_H diff --git a/LEGO1/legoinputmanager.cpp b/LEGO1/legoinputmanager.cpp index 792da404..6c0bd709 100644 --- a/LEGO1/legoinputmanager.cpp +++ b/LEGO1/legoinputmanager.cpp @@ -1,5 +1,9 @@ #include "legoinputmanager.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(LegoInputManager, 0x338); // 0x10059085 + // OFFSET: LEGO1 0x1005b790 STUB LegoInputManager::LegoInputManager() { diff --git a/LEGO1/legoinputmanager.h b/LEGO1/legoinputmanager.h index c629134e..74a2a8fa 100644 --- a/LEGO1/legoinputmanager.h +++ b/LEGO1/legoinputmanager.h @@ -1,6 +1,7 @@ #ifndef LEGOINPUTMANAGER_H #define LEGOINPUTMANAGER_H +#include "decomp.h" #include "mxpresenter.h" enum NotificationId @@ -27,9 +28,9 @@ class LegoInputManager : public MxPresenter virtual long Tickle() override; // vtable+0x8 - char m_pad00[0x15c]; + undefined m_pad40[0x15c]; int m_joystickIndex; - char m_pad200[0x194]; + undefined m_pad200[0x194]; MxBool m_useJoystick; }; diff --git a/LEGO1/mxatomid.h b/LEGO1/mxatomid.h index 9a218a1b..6b7dddbb 100644 --- a/LEGO1/mxatomid.h +++ b/LEGO1/mxatomid.h @@ -1,8 +1,14 @@ #ifndef MXATOMID_H #define MXATOMID_H +#include "mxtypes.h" + enum LookupMode { + LookupMode_Exact = 0, + LookupMode_LowerCase = 1, + LookupMode_UpperCase = 2, + LookupMode_LowerCase2 = 3 }; class MxAtomId @@ -17,6 +23,11 @@ class MxAtomId this->m_internal = 0; } + inline MxBool operator ==(const MxAtomId &other) const + { + return this->m_internal == other.m_internal; + } + private: char *m_internal; }; diff --git a/LEGO1/mxaudiopresenter.cpp b/LEGO1/mxaudiopresenter.cpp index b15c2556..ac634362 100644 --- a/LEGO1/mxaudiopresenter.cpp +++ b/LEGO1/mxaudiopresenter.cpp @@ -1 +1,5 @@ #include "mxaudiopresenter.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxAudioPresenter, 0x54); diff --git a/LEGO1/mxaudiopresenter.h b/LEGO1/mxaudiopresenter.h index b23eefe9..c1001a13 100644 --- a/LEGO1/mxaudiopresenter.h +++ b/LEGO1/mxaudiopresenter.h @@ -7,9 +7,13 @@ class MxAudioPresenter : public MxMediaPresenter { public: + MxAudioPresenter() { + m_unk50 = 100; + } + // OFFSET: LEGO1 0x1000d280 inline virtual const char *ClassName() const override // vtable+0x0c - { + { // 0x100f078c return "MxAudioPresenter"; } @@ -19,6 +23,8 @@ class MxAudioPresenter : public MxMediaPresenter { return !strcmp(name, MxAudioPresenter::ClassName()) || MxMediaPresenter::IsA(name); } + + int m_unk50; }; #endif // MXAUDIOPRESENTER_H diff --git a/LEGO1/mxcompositepresenter.cpp b/LEGO1/mxcompositepresenter.cpp index e42dbadb..342f3d96 100644 --- a/LEGO1/mxcompositepresenter.cpp +++ b/LEGO1/mxcompositepresenter.cpp @@ -1,5 +1,9 @@ #include "mxcompositepresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxCompositePresenter, 0x4c); + // OFFSET: LEGO1 0x100b60b0 STUB MxCompositePresenter::MxCompositePresenter() { diff --git a/LEGO1/mxcompositepresenter.h b/LEGO1/mxcompositepresenter.h index 471f3087..9f517652 100644 --- a/LEGO1/mxcompositepresenter.h +++ b/LEGO1/mxcompositepresenter.h @@ -13,7 +13,7 @@ class MxCompositePresenter : public MxPresenter // OFFSET: LEGO1 0x100b6210 inline virtual const char *ClassName() const override // vtable+0x0c - { + { // 0x100f0774 return "MxCompositePresenter"; } @@ -24,6 +24,9 @@ class MxCompositePresenter : public MxPresenter return !strcmp(name, MxCompositePresenter::ClassName()) || MxPresenter::IsA(name); } + undefined m_unk40; + undefined4 *m_unk44; + undefined4 m_unk48; }; #endif // MXCOMPOSITEPRESENTER_H diff --git a/LEGO1/mxeventpresenter.cpp b/LEGO1/mxeventpresenter.cpp index ba78203f..88c20ce3 100644 --- a/LEGO1/mxeventpresenter.cpp +++ b/LEGO1/mxeventpresenter.cpp @@ -1,5 +1,9 @@ #include "mxeventpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxEventPresenter, 0x54); + // OFFSET: LEGO1 0x100c2b70 MxEventPresenter::MxEventPresenter() { @@ -12,8 +16,8 @@ MxEventPresenter::~MxEventPresenter() // TODO } -// OFFSET: LEGO1 0x100c2da0 STUB +// OFFSET: LEGO1 0x100c2da0 void MxEventPresenter::Init() { - // TODO + m_unk50 = 0; } diff --git a/LEGO1/mxeventpresenter.h b/LEGO1/mxeventpresenter.h index 2adb8cfa..256d0c7f 100644 --- a/LEGO1/mxeventpresenter.h +++ b/LEGO1/mxeventpresenter.h @@ -3,6 +3,8 @@ #include "mxmediapresenter.h" +#include "decomp.h" + // VTABLE 0x100dca88 // SIZE 0x54 class MxEventPresenter : public MxMediaPresenter @@ -23,9 +25,10 @@ class MxEventPresenter : public MxMediaPresenter { return !strcmp(name, MxEventPresenter::ClassName()) || MxMediaPresenter::IsA(name); } - + private: void Init(); + undefined4 m_unk50; }; diff --git a/LEGO1/mxflcpresenter.cpp b/LEGO1/mxflcpresenter.cpp index 1e6ee289..8bd23d22 100644 --- a/LEGO1/mxflcpresenter.cpp +++ b/LEGO1/mxflcpresenter.cpp @@ -1,5 +1,9 @@ #include "mxflcpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxFlcPresenter, 0x68); + // OFFSET: LEGO1 0x100b3310 STUB MxFlcPresenter::MxFlcPresenter() { diff --git a/LEGO1/mxflcpresenter.h b/LEGO1/mxflcpresenter.h index 5d63c41c..bc34ff12 100644 --- a/LEGO1/mxflcpresenter.h +++ b/LEGO1/mxflcpresenter.h @@ -3,6 +3,8 @@ #include "mxvideopresenter.h" +#include "decomp.h" + // VTABLE 0x100dc2c0 // SIZE 0x68 class MxFlcPresenter : public MxVideoPresenter @@ -23,6 +25,8 @@ class MxFlcPresenter : public MxVideoPresenter { return !strcmp(name, MxFlcPresenter::ClassName()) || MxVideoPresenter::IsA(name); } + + undefined4 m_unk64; }; #endif // MXFLCPRESENTER_H diff --git a/LEGO1/mxloopingflcpresenter.cpp b/LEGO1/mxloopingflcpresenter.cpp index f4602f3c..041ae6a5 100644 --- a/LEGO1/mxloopingflcpresenter.cpp +++ b/LEGO1/mxloopingflcpresenter.cpp @@ -1,5 +1,9 @@ #include "mxloopingflcpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxLoopingFlcPresenter, 0x6c); + // OFFSET: LEGO1 0x100b4310 STUB MxLoopingFlcPresenter::MxLoopingFlcPresenter() { diff --git a/LEGO1/mxloopingflcpresenter.h b/LEGO1/mxloopingflcpresenter.h index 5152e4d9..1973c28e 100644 --- a/LEGO1/mxloopingflcpresenter.h +++ b/LEGO1/mxloopingflcpresenter.h @@ -3,6 +3,8 @@ #include "mxflcpresenter.h" +#include "decomp.h" + // VTABLE 0x100dc480 // SIZE 0x6c class MxLoopingFlcPresenter : public MxFlcPresenter @@ -17,9 +19,10 @@ class MxLoopingFlcPresenter : public MxFlcPresenter // 0x10101e20 return "MxLoopingFlcPresenter"; } - + private: void Init(); + undefined4 m_unk68; }; #endif // MXLOOPINGFLCPRESENTER_H diff --git a/LEGO1/mxloopingmidipresenter.cpp b/LEGO1/mxloopingmidipresenter.cpp new file mode 100644 index 00000000..ebeed4b4 --- /dev/null +++ b/LEGO1/mxloopingmidipresenter.cpp @@ -0,0 +1,5 @@ +#include "mxloopingmidipresenter.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxLoopingMIDIPresenter, 0x58); diff --git a/LEGO1/mxloopingsmkpresenter.cpp b/LEGO1/mxloopingsmkpresenter.cpp index cb038462..da9223df 100644 --- a/LEGO1/mxloopingsmkpresenter.cpp +++ b/LEGO1/mxloopingsmkpresenter.cpp @@ -1,5 +1,9 @@ #include "mxloopingsmkpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxLoopingSmkPresenter, 0x724); + // OFFSET: LEGO1 0x100b48b0 MxLoopingSmkPresenter::MxLoopingSmkPresenter() { diff --git a/LEGO1/mxloopingsmkpresenter.h b/LEGO1/mxloopingsmkpresenter.h index 129d98b9..8ca18d20 100644 --- a/LEGO1/mxloopingsmkpresenter.h +++ b/LEGO1/mxloopingsmkpresenter.h @@ -3,6 +3,8 @@ #include "mxsmkpresenter.h" +#include "decomp.h" + // VTABLE 0x100dc540 // SIZE 0x724 class MxLoopingSmkPresenter : public MxSmkPresenter @@ -17,9 +19,10 @@ class MxLoopingSmkPresenter : public MxSmkPresenter // 0x10101e08 return "MxLoopingSmkPresenter"; } - + private: void Init(); + undefined4 m_unk720; }; #endif // MXLOOPINGSMKPRESENTER_H diff --git a/LEGO1/mxmediapresenter.cpp b/LEGO1/mxmediapresenter.cpp index 793b3ea8..9df33285 100644 --- a/LEGO1/mxmediapresenter.cpp +++ b/LEGO1/mxmediapresenter.cpp @@ -1,5 +1,7 @@ #include "mxmediapresenter.h" +DECOMP_SIZE_ASSERT(MxMediaPresenter, 0x50); + // OFFSET: LEGO1 0x100b5d10 STUB long MxMediaPresenter::Tickle() { diff --git a/LEGO1/mxmediapresenter.h b/LEGO1/mxmediapresenter.h index 647150c4..b3a1b38a 100644 --- a/LEGO1/mxmediapresenter.h +++ b/LEGO1/mxmediapresenter.h @@ -3,6 +3,8 @@ #include "mxpresenter.h" +#include "decomp.h" + // VTABLE 0x100d4cd8 class MxMediaPresenter : public MxPresenter { @@ -27,6 +29,10 @@ class MxMediaPresenter : public MxPresenter return !strcmp(name, MxMediaPresenter::ClassName()) || MxPresenter::IsA(name); } + undefined4 m_unk40; + undefined4 m_unk44; + undefined4 m_unk48; + undefined4 m_unk4c; private: void Init(); diff --git a/LEGO1/mxmidipresenter.cpp b/LEGO1/mxmidipresenter.cpp new file mode 100644 index 00000000..98868f8a --- /dev/null +++ b/LEGO1/mxmidipresenter.cpp @@ -0,0 +1,16 @@ +#include "mxmidipresenter.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxMIDIPresenter, 0x58); + +// OFFSET: LEGO1 0x100c25e0 +MxMIDIPresenter::MxMIDIPresenter() { + Init(); +} + +// OFFSET: LEGO1 0x100c2820 +void MxMIDIPresenter::Init() +{ + m_unk54 = 0; +} diff --git a/LEGO1/mxmidipresenter.h b/LEGO1/mxmidipresenter.h index 8a46d12a..1cd65c4a 100644 --- a/LEGO1/mxmidipresenter.h +++ b/LEGO1/mxmidipresenter.h @@ -6,6 +6,11 @@ // VTABLE 0x100dca20 class MxMIDIPresenter : public MxMusicPresenter { +public: + MxMIDIPresenter(); +private: + void Init(); + undefined4 m_unk54; }; #endif // MXMIDIPRESENTER_H diff --git a/LEGO1/mxobjectfactory.cpp b/LEGO1/mxobjectfactory.cpp new file mode 100644 index 00000000..d52e4dac --- /dev/null +++ b/LEGO1/mxobjectfactory.cpp @@ -0,0 +1,45 @@ +#include "mxobjectfactory.h" + +#include "mxpresenter.h" +#include "mxcompositepresenter.h" +#include "mxvideopresenter.h" +#include "mxflcpresenter.h" +#include "mxsmkpresenter.h" +#include "mxstillpresenter.h" +#include "mxwavepresenter.h" +#include "mxmidipresenter.h" +#include "mxeventpresenter.h" +#include "mxloopingflcpresenter.h" +#include "mxloopingsmkpresenter.h" +#include "mxloopingmidipresenter.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxObjectFactory, 0x38); // 100af1db + +// OFFSET: LEGO1 0x100b0d80 +MxObjectFactory::MxObjectFactory() +{ +#define X(V) this->m_id##V = MxAtomId(#V, LookupMode_Exact); + FOR_MXOBJECTFACTORY_OBJECTS(X) +#undef X +} + +// OFFSET: LEGO1 0x100b12c0 +MxCore *MxObjectFactory::Create(const char *name) +{ + MxAtomId atom(name, LookupMode_Exact); + + if (0) { +#define X(V) } else if (this->m_id##V == atom) { return new V; + FOR_MXOBJECTFACTORY_OBJECTS(X) +#undef X + } else { + return NULL; + } +} + +// OFFSET: LEGO1 0x100b1a30 STUB +void MxObjectFactory::vtable18(void *) { + // FIXME +} diff --git a/LEGO1/mxobjectfactory.h b/LEGO1/mxobjectfactory.h index bdd172a8..53aee2cb 100644 --- a/LEGO1/mxobjectfactory.h +++ b/LEGO1/mxobjectfactory.h @@ -2,11 +2,33 @@ #define MXOBJECTFACTORY_H #include "mxcore.h" +#include "mxatomid.h" + +#define FOR_MXOBJECTFACTORY_OBJECTS(X) \ + X(MxPresenter) \ + X(MxCompositePresenter) \ + X(MxVideoPresenter) \ + X(MxFlcPresenter) \ + X(MxSmkPresenter) \ + X(MxStillPresenter) \ + X(MxWavePresenter) \ + X(MxMIDIPresenter) \ + X(MxEventPresenter) \ + X(MxLoopingFlcPresenter) \ + X(MxLoopingSmkPresenter) \ + X(MxLoopingMIDIPresenter) // VTABLE 0x100dc220 class MxObjectFactory : public MxCore { - +public: + MxObjectFactory(); + virtual MxCore *Create(const char *name); // vtable 0x14 + virtual void vtable18(void *); // vtable 0x18 +private: +#define X(V) MxAtomId m_id##V; + FOR_MXOBJECTFACTORY_OBJECTS(X) +#undef X }; #endif // MXOBJECTFACTORY_H diff --git a/LEGO1/mxpresenter.cpp b/LEGO1/mxpresenter.cpp index 893de60d..5ef01c64 100644 --- a/LEGO1/mxpresenter.cpp +++ b/LEGO1/mxpresenter.cpp @@ -1,5 +1,9 @@ #include "mxpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxPresenter, 0x40); + // OFFSET: LEGO1 0x1000bee0 STUB void MxPresenter::DoneTickle() { @@ -24,10 +28,9 @@ void MxPresenter::ParseExtra() // TODO } -// OFFSET: LEGO1 0x1000c070 STUB +// OFFSET: LEGO1 0x1000bf00 MxPresenter::~MxPresenter() { - // TODO } // OFFSET: LEGO1 0x100b5200 STUB @@ -46,52 +49,57 @@ long MxPresenter::StartAction(MxStreamController *, MxDSAction *) return 0; } -// OFFSET: LEGO1 0x100d4d74 STUB +// OFFSET: LEGO1 0x100b4e40 STUB void MxPresenter::EndAction() { // TODO } -// OFFSET: LEGO1 0x100d4d8c STUB +// OFFSET: LEGO1 0x100b52d0 STUB void MxPresenter::Enable(unsigned char) { // TODO } -// OFFSET: LEGO1 0x1000be30 STUB +// OFFSET: LEGO1 0x1000be30 void MxPresenter::VTable0x14() { - // TODO } -// OFFSET: LEGO1 0x1000be40 STUB +// OFFSET: LEGO1 0x1000be40 void MxPresenter::VTable0x18() { - // TODO + ParseExtra(); + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = 2; } -// OFFSET: LEGO1 0x1000be60 STUB +// OFFSET: LEGO1 0x1000be60 void MxPresenter::VTable0x1c() { - // TODO + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = 3; } -// OFFSET: LEGO1 0x1000be80 STUB +// OFFSET: LEGO1 0x1000be80 void MxPresenter::VTable0x20() { - // TODO + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = 4; } -// OFFSET: LEGO1 0x1000bea0 STUB +// OFFSET: LEGO1 0x1000bea0 void MxPresenter::VTable0x24() { - // TODO + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = 5; } -// OFFSET: LEGO1 0x1000bec0 STUB +// OFFSET: LEGO1 0x1000bec0 void MxPresenter::VTable0x28() { - // TODO + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = 6; } // OFFSET: LEGO1 0x1000bf70 @@ -105,18 +113,17 @@ void MxPresenter::InitVirtual() { Init(); } -// OFFSET: LEGO1 0x1000bf90 STUB +// OFFSET: LEGO1 0x1000bf90 void MxPresenter::VTable0x44(undefined4 param) { - // TODO + m_unk0xc |= 1 << (unsigned char)m_unk0x8; + m_unk0x8 = param; } -// OFFSET: LEGO1 0x1000bfb0 STUB -undefined4 MxPresenter::VTable0x48(undefined4 param) +// OFFSET: LEGO1 0x1000bfb0 +unsigned char MxPresenter::VTable0x48(unsigned char param) { - // TODO - - return undefined4(); + return m_unk0xc & (1 << param); } // OFFSET: LEGO1 0x1000bfc0 @@ -125,10 +132,8 @@ undefined4 MxPresenter::VTable0x4c() return 0; } -// OFFSET: LEGO1 0x1000bfd0 STUB -undefined MxPresenter::VTable0x50() +// OFFSET: LEGO1 0x1000bfd0 +undefined MxPresenter::VTable0x50(undefined4, undefined4) { - // TODO - return 0; } diff --git a/LEGO1/mxpresenter.h b/LEGO1/mxpresenter.h index 6ea022da..a6616bd8 100644 --- a/LEGO1/mxpresenter.h +++ b/LEGO1/mxpresenter.h @@ -5,65 +5,64 @@ #include "mxcriticalsection.h" +#include "decomp.h" + class MxStreamController; class MxDSAction; -#ifndef undefined4 -#define undefined4 int -#endif - -#ifndef undefined -#define undefined int -#endif - class MxPresenter : public MxCore { public: + MxPresenter() { + Init(); + } __declspec(dllexport) virtual ~MxPresenter(); // vtable+0x0 // OFFSET: LEGO1 0x1000bfe0 - inline virtual const char *ClassName() const // vtable+0xc + inline virtual const char *ClassName() const override// vtable+0xc { // 0x100f0740 return "MxPresenter"; } // OFFSET: LEGO1 0x1000bff0 - inline virtual MxBool IsA(const char *name) const // vtable+0x10 + inline virtual MxBool IsA(const char *name) const override// vtable+0x10 { return !strcmp(name, MxPresenter::ClassName()) || MxCore::IsA(name); } - __declspec(dllexport) virtual long Tickle(); // vtable+0x8 + __declspec(dllexport) virtual long Tickle() override; // vtable+0x8 virtual void VTable0x14(); // vtable+0x14 virtual void VTable0x18(); // vtable+0x18 virtual void VTable0x1c(); // vtable+0x1c virtual void VTable0x20(); // vtable+0x20 virtual void VTable0x24(); // vtable+0x24 virtual void VTable0x28(); // vtable+0x28 - virtual undefined4 VTable0x34(); // vtable+0x34 - virtual void InitVirtual(); // vtable+0x38 - virtual void VTable0x44(undefined4 param); // vtable+0x44 - virtual undefined4 VTable0x48(undefined4 param); // vtable+0x48 - virtual undefined4 VTable0x4c(); // vtable+0x4c - virtual undefined VTable0x50(); // vtable+0x50 protected: __declspec(dllexport) virtual void DoneTickle(); // vtable+0x2c - __declspec(dllexport) void Init(); __declspec(dllexport) virtual void ParseExtra(); // vtable+0x30 public: + virtual undefined4 VTable0x34(); // vtable+0x34 + virtual void InitVirtual(); // vtable+0x38 __declspec(dllexport) virtual long StartAction(MxStreamController *, MxDSAction *); // vtable+0x3c __declspec(dllexport) virtual void EndAction(); // vtable+0x40 + virtual void VTable0x44(undefined4 param); // vtable+0x44 + virtual unsigned char VTable0x48(unsigned char param); // vtable+0x48 + virtual undefined4 VTable0x4c(); // vtable+0x4c + virtual undefined VTable0x50(undefined4, undefined4); // vtable+0x50 __declspec(dllexport) virtual void Enable(unsigned char); // vtable+0x54 +protected: + __declspec(dllexport) void Init(); +public: - int m_unk0x8; - int m_unk0xc; - int m_unk0x10; - int m_unk0x14; - int m_unk0x18; + undefined4 m_unk0x8; + undefined4 m_unk0xc; + undefined4 m_unk0x10; + undefined4 m_unk0x14; + undefined4 m_unk0x18; MxDSAction* m_action; // 0 MxCriticalSection m_criticalSection; - int m_unk0x3c; + undefined4 m_unk0x3c; // VTABLE 0x100d4d38 }; diff --git a/LEGO1/mxsmkpresenter.cpp b/LEGO1/mxsmkpresenter.cpp index 9f160a99..cc7efec1 100644 --- a/LEGO1/mxsmkpresenter.cpp +++ b/LEGO1/mxsmkpresenter.cpp @@ -1,5 +1,9 @@ #include "mxsmkpresenter.h" +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxSmkPresenter, 0x720); + // OFFSET: LEGO1 0x100b3650 STUB MxSmkPresenter::MxSmkPresenter() { diff --git a/LEGO1/mxsmkpresenter.h b/LEGO1/mxsmkpresenter.h index b439bc2a..325091bb 100644 --- a/LEGO1/mxsmkpresenter.h +++ b/LEGO1/mxsmkpresenter.h @@ -3,16 +3,19 @@ #include "mxvideopresenter.h" +#include "decomp.h" + // VTABLE 0x100dc348 // SIZE 0x720 class MxSmkPresenter : public MxVideoPresenter { public: MxSmkPresenter(); - + + undefined4 m_unk64[430]; + undefined4 m_unk71c; private: void Init(); - }; #endif // MXSMKPRESENTER_H diff --git a/LEGO1/mxstillpresenter.cpp b/LEGO1/mxstillpresenter.cpp index bc2b03b5..351971f0 100644 --- a/LEGO1/mxstillpresenter.cpp +++ b/LEGO1/mxstillpresenter.cpp @@ -1 +1,5 @@ #include "mxstillpresenter.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxStillPresenter, 0x6c); diff --git a/LEGO1/mxstillpresenter.h b/LEGO1/mxstillpresenter.h index d9376b8e..9b7c5810 100644 --- a/LEGO1/mxstillpresenter.h +++ b/LEGO1/mxstillpresenter.h @@ -3,11 +3,18 @@ #include "mxvideopresenter.h" +#include "decomp.h" + // VTABLE 0x100d7a38 // SIZE 0x6c class MxStillPresenter : public MxVideoPresenter { public: + MxStillPresenter() { + m_unk68 = 0; + } + undefined4 m_unk64; + undefined4 m_unk68; }; #endif // MXSTILLPRESENTER_H diff --git a/LEGO1/mxvideopresenter.cpp b/LEGO1/mxvideopresenter.cpp index 894b1e9c..ee12968a 100644 --- a/LEGO1/mxvideopresenter.cpp +++ b/LEGO1/mxvideopresenter.cpp @@ -1 +1,8 @@ #include "mxvideopresenter.h" + +DECOMP_SIZE_ASSERT(MxVideoPresenter, 0x64); + +// OFFSET: LEGO1 0x100b2760 STUB +void MxVideoPresenter::Init() { + // TODO +} diff --git a/LEGO1/mxvideopresenter.h b/LEGO1/mxvideopresenter.h index eba5040c..e9634427 100644 --- a/LEGO1/mxvideopresenter.h +++ b/LEGO1/mxvideopresenter.h @@ -3,12 +3,17 @@ #include "mxmediapresenter.h" +#include "decomp.h" + class MxVideoPresenter : public MxMediaPresenter { public: + MxVideoPresenter() { + Init(); + } // OFFSET: LEGO1 0x1000c820 inline virtual const char *ClassName() const override // vtable+0x0c - { + { // 0x100f0760 return "MxVideoPresenter"; } @@ -18,6 +23,15 @@ class MxVideoPresenter : public MxMediaPresenter { return !strcmp(name, MxVideoPresenter::ClassName()) || MxMediaPresenter::IsA(name); } + + void Init(); + + undefined4 m_unk50; + undefined4 m_unk54; + undefined4 m_unk58; + short m_unk5c; + unsigned char m_flags; + int m_unk60; }; #endif // MXVIDEOPRESENTER_H diff --git a/LEGO1/mxwavepresenter.cpp b/LEGO1/mxwavepresenter.cpp index bfd69c5f..cba9106e 100644 --- a/LEGO1/mxwavepresenter.cpp +++ b/LEGO1/mxwavepresenter.cpp @@ -1,7 +1,18 @@ #include "mxwavepresenter.h" -// OFFSET: LEGO1 0x100b1ad0 STUB +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxWavePresenter, 0x6c); + +// OFFSET: LEGO1 0x100b1ad0 void MxWavePresenter::Init() { - // TODO + m_unk54 = 0; + m_unk58 = 0; + m_unk5c = 0; + m_unk60 = 0; + m_unk64 = 0; + m_unk65 = 0; + m_unk66 = 0; + m_unk68 = 0; } diff --git a/LEGO1/mxwavepresenter.h b/LEGO1/mxwavepresenter.h index c00d978d..a8a1de45 100644 --- a/LEGO1/mxwavepresenter.h +++ b/LEGO1/mxwavepresenter.h @@ -3,14 +3,28 @@ #include "mxsoundpresenter.h" +#include "decomp.h" + // VTABLE 0x100d49a8 // SIZE 0x6c class MxWavePresenter : public MxSoundPresenter { private: void Init(); - + public: + MxWavePresenter() { + Init(); + } + undefined4 m_unk54; + undefined4 m_unk58; + undefined4 m_unk5c; + undefined4 m_unk60; + undefined m_unk64; + undefined m_unk65; + undefined m_unk66; + undefined m_unk67; + undefined m_unk68; }; #endif // MXWAVEPRESENTER_H From b91c7d436babc48b812f6e2874072afc67ef52ea Mon Sep 17 00:00:00 2001 From: Kai Kaufman <92912278+ktkaufman03@users.noreply.github.com> Date: Sun, 2 Jul 2023 03:51:57 -0400 Subject: [PATCH 14/22] fix: MxDSFile::Open is now matching 100% (#69) --- LEGO1/mxdsfile.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/LEGO1/mxdsfile.cpp b/LEGO1/mxdsfile.cpp index 327fab46..3e587b07 100644 --- a/LEGO1/mxdsfile.cpp +++ b/LEGO1/mxdsfile.cpp @@ -23,16 +23,15 @@ MxDSFile::~MxDSFile() // OFFSET: LEGO1 0x100cc590 long MxDSFile::Open(unsigned long uStyle) { - // No idea what's stopping this one matching, but I'm pretty - // confident it has the correct behavior. + MXIOINFO& io = m_io; long longResult = 1; - memset(&m_io, 0, sizeof(MXIOINFO)); + memset(&io, 0, sizeof(MXIOINFO)); - if (m_io.Open(m_filename.GetData(), uStyle) != 0) { + if (io.Open(m_filename.GetData(), uStyle) != 0) { return -1; } - m_io.SetBuffer(NULL, 0, 0); + io.SetBuffer(NULL, 0, 0); m_position = 0; if (m_skipReadingChunks == 0) { From 0555e0575658f64f4976f7b823d774c710d7ff01 Mon Sep 17 00:00:00 2001 From: Kai Kaufman <92912278+ktkaufman03@users.noreply.github.com> Date: Sun, 2 Jul 2023 04:02:05 -0400 Subject: [PATCH 15/22] fix: ConvertHSVToRGB is effectively 100% matching (#70) --- LEGO1/legoutil.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/LEGO1/legoutil.cpp b/LEGO1/legoutil.cpp index 58e11e8f..5ea567e8 100644 --- a/LEGO1/legoutil.cpp +++ b/LEGO1/legoutil.cpp @@ -9,10 +9,13 @@ void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, floa double v9; double v12; double v13; + + double s_dbl = s; + if (s > 0.5f) calc = (1.0f - v) * s + v; else - calc = (v + 1.0) * s; + calc = (v + 1.0) * s_dbl; if (calc <= 0.0) { *g_out = 0.0f; @@ -20,7 +23,7 @@ void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, floa *r_out = 0.0f; return; } - p = s * 2.0 - calc; + p = s * 2.0f - calc; hue_index = h * 6.0; v9 = (h * 6.0 - (float)hue_index) * ((calc - p) / calc) * calc; v12 = p + v9; From e16249b6726eb649ad4684c8c980c214ade9107b Mon Sep 17 00:00:00 2001 From: MattKC <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 2 Jul 2023 01:05:49 -0700 Subject: [PATCH 16/22] Define MxLong/MxULong (#71) * define MxLong/MxULong The "long" type has different sizes on different platforms, and this may cause issues. * use DWORD to match RegQueryValueExA arg --- ISLE/define.cpp | 2 +- ISLE/define.h | 3 ++- ISLE/isleapp.cpp | 6 +++--- ISLE/isleapp.h | 2 +- LEGO1/act2brick.cpp | 4 ++-- LEGO1/act2brick.h | 4 ++-- LEGO1/act2policestation.cpp | 2 +- LEGO1/act2policestation.h | 2 +- LEGO1/beachhouseentity.cpp | 2 +- LEGO1/beachhouseentity.h | 2 +- LEGO1/elevatorbottom.cpp | 2 +- LEGO1/elevatorbottom.h | 2 +- LEGO1/gasstation.cpp | 4 ++-- LEGO1/gasstation.h | 4 ++-- LEGO1/historybook.cpp | 2 +- LEGO1/historybook.h | 2 +- LEGO1/hospital.cpp | 2 +- LEGO1/hospital.h | 2 +- LEGO1/infocenter.cpp | 4 ++-- LEGO1/infocenter.h | 4 ++-- LEGO1/infocenterdoor.cpp | 2 +- LEGO1/infocenterdoor.h | 2 +- LEGO1/legoanimationmanager.cpp | 4 ++-- LEGO1/legoanimationmanager.h | 4 ++-- LEGO1/legocarbuild.cpp | 4 ++-- LEGO1/legocarbuild.h | 4 ++-- LEGO1/legocontrolmanager.cpp | 2 +- LEGO1/legocontrolmanager.h | 2 +- LEGO1/legoentity.cpp | 2 +- LEGO1/legoentity.h | 2 +- LEGO1/legogamestate.cpp | 4 ++-- LEGO1/legogamestate.h | 6 ++++-- LEGO1/legoinputmanager.cpp | 4 ++-- LEGO1/legoinputmanager.h | 4 ++-- LEGO1/legoomni.cpp | 10 +++++----- LEGO1/legoomni.h | 12 ++++++------ LEGO1/legopathcontroller.cpp | 2 +- LEGO1/legopathcontroller.h | 2 +- LEGO1/legoplantmanager.cpp | 2 +- LEGO1/legoplantmanager.h | 2 +- LEGO1/legorace.cpp | 2 +- LEGO1/legorace.h | 2 +- LEGO1/legosoundmanager.cpp | 2 +- LEGO1/legosoundmanager.h | 2 +- LEGO1/legoutil.cpp | 6 ++++-- LEGO1/mxbitmap.cpp | 2 +- LEGO1/mxbitmap.h | 2 +- LEGO1/mxcore.cpp | 4 ++-- LEGO1/mxcore.h | 4 ++-- LEGO1/mxdiskstreamcontroller.cpp | 2 +- LEGO1/mxdiskstreamcontroller.h | 2 +- LEGO1/mxdsfile.cpp | 20 ++++++++++---------- LEGO1/mxdsfile.h | 20 ++++++++++---------- LEGO1/mxdssource.cpp | 2 +- LEGO1/mxdssource.h | 18 +++++++++--------- LEGO1/mxioinfo.cpp | 4 ++-- LEGO1/mxioinfo.h | 7 ++++--- LEGO1/mxmediapresenter.cpp | 2 +- LEGO1/mxmediapresenter.h | 2 +- LEGO1/mxnotificationmanager.cpp | 2 +- LEGO1/mxnotificationmanager.h | 2 +- LEGO1/mxomni.cpp | 2 +- LEGO1/mxomni.h | 2 +- LEGO1/mxpresenter.cpp | 4 ++-- LEGO1/mxpresenter.h | 4 ++-- LEGO1/mxscheduler.cpp | 2 +- LEGO1/mxscheduler.h | 4 +++- LEGO1/mxstreamer.cpp | 4 ++-- LEGO1/mxstreamer.h | 4 ++-- LEGO1/mxticklemanager.h | 2 +- LEGO1/mxtimer.cpp | 10 +++++----- LEGO1/mxtimer.h | 10 +++++----- LEGO1/mxtransitionmanager.cpp | 2 +- LEGO1/mxtransitionmanager.h | 2 +- LEGO1/mxtypes.h | 21 +++++++++++++++++---- LEGO1/mxvideomanager.cpp | 4 ++-- LEGO1/mxvideomanager.h | 4 ++-- LEGO1/mxvideoparam.cpp | 2 +- LEGO1/mxvideoparam.h | 2 +- LEGO1/police.cpp | 2 +- LEGO1/police.h | 2 +- LEGO1/registrationbook.cpp | 2 +- LEGO1/registrationbook.h | 2 +- LEGO1/score.cpp | 2 +- LEGO1/score.h | 2 +- 85 files changed, 180 insertions(+), 159 deletions(-) diff --git a/ISLE/define.cpp b/ISLE/define.cpp index f236ea29..61de399e 100644 --- a/ISLE/define.cpp +++ b/ISLE/define.cpp @@ -37,4 +37,4 @@ int g_reqEnableRMDevice = 0; int g_startupDelay = 200; // 0x4101c0 -long g_lastFrameTime = 0; +MxLong g_lastFrameTime = 0; diff --git a/ISLE/define.h b/ISLE/define.h index ffc74654..ff2a4c2f 100644 --- a/ISLE/define.h +++ b/ISLE/define.h @@ -1,6 +1,7 @@ #ifndef DEFINE_H #define DEFINE_H +#include #include class IsleApp; @@ -21,6 +22,6 @@ extern int g_targetHeight; extern int g_targetDepth; extern int g_reqEnableRMDevice; extern int g_startupDelay; -extern long g_lastFrameTime; +extern MxLong g_lastFrameTime; #endif // DEFINE_H diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index 3697e816..a1836e8c 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -95,7 +95,7 @@ void IsleApp::Close() TransitionManager()->SetWaitIndicator(NULL); Lego()->vtable3c(); - long lVar8; + MxLong lVar8; do { lVar8 = Streamer()->Close(NULL); } while (lVar8 == 0); @@ -571,7 +571,7 @@ BOOL IsleApp::ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize) DWORD valueType; BOOL out = FALSE; - unsigned long size = outSize; + DWORD size = outSize; if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { if (RegQueryValueExA(hKey, name, NULL, &valueType, (LPBYTE) outValue, &size) == ERROR_SUCCESS) { if (RegCloseKey(hKey) == ERROR_SUCCESS) { @@ -695,7 +695,7 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame) if (!TickleManager()) return; if (!Timer()) return; - long currentTime = Timer()->GetRealTime(); + MxLong currentTime = Timer()->GetRealTime(); if (currentTime < g_lastFrameTime) { g_lastFrameTime = -this->m_frameDelta; } diff --git a/ISLE/isleapp.h b/ISLE/isleapp.h index d31c6f42..a622697a 100644 --- a/ISLE/isleapp.h +++ b/ISLE/isleapp.h @@ -56,7 +56,7 @@ class IsleApp // 40 int m_islandTexture; int m_gameStarted; - long m_frameDelta; + MxLong m_frameDelta; // 4c MxVideoParam m_videoParam; diff --git a/LEGO1/act2brick.cpp b/LEGO1/act2brick.cpp index 4bb2f3f9..84c8bbb3 100644 --- a/LEGO1/act2brick.cpp +++ b/LEGO1/act2brick.cpp @@ -13,7 +13,7 @@ Act2Brick::~Act2Brick() } // STUB OFFSET: LEGO1 0x1007a8c0 STUB -long Act2Brick::Notify(MxParam &p) +MxLong Act2Brick::Notify(MxParam &p) { // TODO @@ -21,7 +21,7 @@ long Act2Brick::Notify(MxParam &p) } // OFFSET: LEGO1 0x1007a7f0 STUB -long Act2Brick::Tickle() +MxLong Act2Brick::Tickle() { // TODO diff --git a/LEGO1/act2brick.h b/LEGO1/act2brick.h index fd10a997..bf909198 100644 --- a/LEGO1/act2brick.h +++ b/LEGO1/act2brick.h @@ -11,8 +11,8 @@ class Act2Brick : public LegoPathActor Act2Brick(); virtual ~Act2Brick() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual long Tickle() override; // vtable+0x08 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Tickle() override; // vtable+0x08 // OFFSET: LEGO1 0x1007a360 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/act2policestation.cpp b/LEGO1/act2policestation.cpp index 14f69db4..32c15e3e 100644 --- a/LEGO1/act2policestation.cpp +++ b/LEGO1/act2policestation.cpp @@ -1,7 +1,7 @@ #include "act2policestation.h" // OFFSET: LEGO1 0x1004e0e0 STUB -long Act2PoliceStation::Notify(MxParam &p) +MxLong Act2PoliceStation::Notify(MxParam &p) { // TODO diff --git a/LEGO1/act2policestation.h b/LEGO1/act2policestation.h index e935e252..7b0ea9c5 100644 --- a/LEGO1/act2policestation.h +++ b/LEGO1/act2policestation.h @@ -8,7 +8,7 @@ class Act2PoliceStation : public LegoEntity { public: - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x1000e200 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/beachhouseentity.cpp b/LEGO1/beachhouseentity.cpp index 029e022f..4ccf5777 100644 --- a/LEGO1/beachhouseentity.cpp +++ b/LEGO1/beachhouseentity.cpp @@ -1,7 +1,7 @@ #include "beachhouseentity.h" // OFFSET: LEGO1 0x100150a0 STUB -long BeachHouseEntity::Notify(MxParam &p) +MxLong BeachHouseEntity::Notify(MxParam &p) { // TODO diff --git a/LEGO1/beachhouseentity.h b/LEGO1/beachhouseentity.h index 1749ff54..77555a81 100644 --- a/LEGO1/beachhouseentity.h +++ b/LEGO1/beachhouseentity.h @@ -8,7 +8,7 @@ class BeachHouseEntity : public BuildingEntity { public: - virtual long Notify(MxParam &p) override; // vtable+04 + virtual MxLong Notify(MxParam &p) override; // vtable+04 // OFFSET: LEGO1 0x1000ee80 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/elevatorbottom.cpp b/LEGO1/elevatorbottom.cpp index d216fe35..048ecbba 100644 --- a/LEGO1/elevatorbottom.cpp +++ b/LEGO1/elevatorbottom.cpp @@ -13,7 +13,7 @@ ElevatorBottom::~ElevatorBottom() } // OFFSET: LEGO1 0x10018150 STUB -long ElevatorBottom::Notify(MxParam &p) +MxLong ElevatorBottom::Notify(MxParam &p) { // TODO diff --git a/LEGO1/elevatorbottom.h b/LEGO1/elevatorbottom.h index 0d86080a..e6a56836 100644 --- a/LEGO1/elevatorbottom.h +++ b/LEGO1/elevatorbottom.h @@ -10,7 +10,7 @@ class ElevatorBottom : public LegoWorld ElevatorBottom(); virtual ~ElevatorBottom() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x10017f20 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/gasstation.cpp b/LEGO1/gasstation.cpp index d50ef317..33590dc9 100644 --- a/LEGO1/gasstation.cpp +++ b/LEGO1/gasstation.cpp @@ -13,7 +13,7 @@ GasStation::~GasStation() } // OFFSET: LEGO1 0x10004a60 STUB -long GasStation::Notify(MxParam &p) +MxLong GasStation::Notify(MxParam &p) { // TODO @@ -21,7 +21,7 @@ long GasStation::Notify(MxParam &p) } // OFFSET: LEGO1 0x10005c90 STUB -long GasStation::Tickle() +MxLong GasStation::Tickle() { // TODO diff --git a/LEGO1/gasstation.h b/LEGO1/gasstation.h index 9f22ca3f..7f2263d0 100644 --- a/LEGO1/gasstation.h +++ b/LEGO1/gasstation.h @@ -12,8 +12,8 @@ class GasStation : public LegoWorld GasStation(); virtual ~GasStation() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x10004780 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/historybook.cpp b/LEGO1/historybook.cpp index 89c81315..1666cc9d 100644 --- a/LEGO1/historybook.cpp +++ b/LEGO1/historybook.cpp @@ -13,7 +13,7 @@ HistoryBook::~HistoryBook() } // OFFSET: LEGO1 0x10082680 STUB -long HistoryBook::Notify(MxParam &p) +MxLong HistoryBook::Notify(MxParam &p) { // TODO diff --git a/LEGO1/historybook.h b/LEGO1/historybook.h index bbdc6246..2fdcee78 100644 --- a/LEGO1/historybook.h +++ b/LEGO1/historybook.h @@ -11,7 +11,7 @@ class HistoryBook : public LegoWorld HistoryBook(); virtual ~HistoryBook() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x10082390 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/hospital.cpp b/LEGO1/hospital.cpp index 2581cf34..9f84d7ce 100644 --- a/LEGO1/hospital.cpp +++ b/LEGO1/hospital.cpp @@ -13,7 +13,7 @@ Hospital::~Hospital() } // OFFSET: LEGO1 0x10074990 STUB -long Hospital::Notify(MxParam &p) +MxLong Hospital::Notify(MxParam &p) { // TODO diff --git a/LEGO1/hospital.h b/LEGO1/hospital.h index b14de205..bcce9823 100644 --- a/LEGO1/hospital.h +++ b/LEGO1/hospital.h @@ -11,7 +11,7 @@ class Hospital : public LegoWorld Hospital(); virtual ~Hospital() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x04 + virtual MxLong Notify(MxParam &p) override; // vtable+0x04 // OFFSET: LEGO1 0x100746b0 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/infocenter.cpp b/LEGO1/infocenter.cpp index 1ad07ee4..b9ea67c6 100644 --- a/LEGO1/infocenter.cpp +++ b/LEGO1/infocenter.cpp @@ -13,7 +13,7 @@ Infocenter::~Infocenter() } // OFFSET: LEGO1 0x1006ef10 STUB -long Infocenter::Notify(MxParam &p) +MxLong Infocenter::Notify(MxParam &p) { // TODO @@ -21,7 +21,7 @@ long Infocenter::Notify(MxParam &p) } // OFFSET: LEGO1 0x10070af0 STUB -long Infocenter::Tickle() +MxLong Infocenter::Tickle() { // TODO diff --git a/LEGO1/infocenter.h b/LEGO1/infocenter.h index 49a71acb..a6e06f0f 100644 --- a/LEGO1/infocenter.h +++ b/LEGO1/infocenter.h @@ -11,8 +11,8 @@ class Infocenter : public LegoWorld Infocenter(); virtual ~Infocenter() override; - virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x1006eb40 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/infocenterdoor.cpp b/LEGO1/infocenterdoor.cpp index be57f96e..20e01771 100644 --- a/LEGO1/infocenterdoor.cpp +++ b/LEGO1/infocenterdoor.cpp @@ -13,7 +13,7 @@ InfocenterDoor::~InfocenterDoor() } // OFFSET: LEGO1 0x100379e0 STUB -long InfocenterDoor::Notify(MxParam &p) +MxLong InfocenterDoor::Notify(MxParam &p) { // TODO diff --git a/LEGO1/infocenterdoor.h b/LEGO1/infocenterdoor.h index 77a0c021..0692fbca 100644 --- a/LEGO1/infocenterdoor.h +++ b/LEGO1/infocenterdoor.h @@ -11,7 +11,7 @@ class InfocenterDoor : public LegoWorld InfocenterDoor(); virtual ~InfocenterDoor(); // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x100377b0 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/legoanimationmanager.cpp b/LEGO1/legoanimationmanager.cpp index c25aa436..d396d431 100644 --- a/LEGO1/legoanimationmanager.cpp +++ b/LEGO1/legoanimationmanager.cpp @@ -15,7 +15,7 @@ LegoAnimationManager::~LegoAnimationManager() } // OFFSET: LEGO1 0x100619f0 STUB -long LegoAnimationManager::Notify(MxParam &p) +MxLong LegoAnimationManager::Notify(MxParam &p) { // TODO @@ -23,7 +23,7 @@ long LegoAnimationManager::Notify(MxParam &p) } // OFFSET: LEGO1 0x10061cc0 STUB -long LegoAnimationManager::Tickle() +MxLong LegoAnimationManager::Tickle() { // TODO diff --git a/LEGO1/legoanimationmanager.h b/LEGO1/legoanimationmanager.h index c42b7715..49b95f94 100644 --- a/LEGO1/legoanimationmanager.h +++ b/LEGO1/legoanimationmanager.h @@ -11,8 +11,8 @@ class LegoAnimationManager : public MxCore LegoAnimationManager(); virtual ~LegoAnimationManager() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x1005ec80 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/legocarbuild.cpp b/LEGO1/legocarbuild.cpp index d96668e4..c9254c37 100644 --- a/LEGO1/legocarbuild.cpp +++ b/LEGO1/legocarbuild.cpp @@ -13,7 +13,7 @@ LegoCarBuild::~LegoCarBuild() } // OFFSET: LEGO1 0x10024050 STUB -long LegoCarBuild::Notify(MxParam &p) +MxLong LegoCarBuild::Notify(MxParam &p) { // TODO @@ -21,7 +21,7 @@ long LegoCarBuild::Notify(MxParam &p) } // OFFSET: LEGO1 0x100238b0 STUB -long LegoCarBuild::Tickle() +MxLong LegoCarBuild::Tickle() { // TODO diff --git a/LEGO1/legocarbuild.h b/LEGO1/legocarbuild.h index 10396c9e..d320cd6e 100644 --- a/LEGO1/legocarbuild.h +++ b/LEGO1/legocarbuild.h @@ -11,8 +11,8 @@ class LegoCarBuild : public LegoWorld LegoCarBuild(); virtual ~LegoCarBuild() override; - virtual long Notify(MxParam &p) override; // vtable+0x4 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x10022940 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/legocontrolmanager.cpp b/LEGO1/legocontrolmanager.cpp index 0959df9c..16733e13 100644 --- a/LEGO1/legocontrolmanager.cpp +++ b/LEGO1/legocontrolmanager.cpp @@ -13,7 +13,7 @@ LegoControlManager::~LegoControlManager() } // OFFSET: LEGO1 0x10029600 STUB -long LegoControlManager::Tickle() +MxLong LegoControlManager::Tickle() { // TODO diff --git a/LEGO1/legocontrolmanager.h b/LEGO1/legocontrolmanager.h index d3e183fd..c4563776 100644 --- a/LEGO1/legocontrolmanager.h +++ b/LEGO1/legocontrolmanager.h @@ -10,7 +10,7 @@ class LegoControlManager : public MxCore LegoControlManager(); virtual ~LegoControlManager() override; // vtable+0x0 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x10028cb0 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/legoentity.cpp b/LEGO1/legoentity.cpp index fe500cb7..b79bc587 100644 --- a/LEGO1/legoentity.cpp +++ b/LEGO1/legoentity.cpp @@ -7,7 +7,7 @@ LegoEntity::~LegoEntity() } // OFFSET: LEGO1 0x100114f0 STUB -long LegoEntity::Notify(MxParam &p) +MxLong LegoEntity::Notify(MxParam &p) { // TODO diff --git a/LEGO1/legoentity.h b/LEGO1/legoentity.h index 774b19f2..46aea940 100644 --- a/LEGO1/legoentity.h +++ b/LEGO1/legoentity.h @@ -15,7 +15,7 @@ class LegoEntity : public MxEntity __declspec(dllexport) virtual ~LegoEntity() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x1000c2f0 inline const char *ClassName() const override // vtable+0xc diff --git a/LEGO1/legogamestate.cpp b/LEGO1/legogamestate.cpp index 473003a7..66873f12 100644 --- a/LEGO1/legogamestate.cpp +++ b/LEGO1/legogamestate.cpp @@ -13,14 +13,14 @@ LegoGameState::~LegoGameState() } // OFFSET: LEGO1 0x10039c60 -long LegoGameState::Load(unsigned long) +MxResult LegoGameState::Load(MxULong) { // TODO return 0; } // OFFSET: LEGO1 0x10039980 -long LegoGameState::Save(unsigned long p) +MxResult LegoGameState::Save(MxULong p) { // TODO return 0; diff --git a/LEGO1/legogamestate.h b/LEGO1/legogamestate.h index 239719eb..fdd5bcb1 100644 --- a/LEGO1/legogamestate.h +++ b/LEGO1/legogamestate.h @@ -1,13 +1,15 @@ #ifndef LEGOGAMESTATE_H #define LEGOGAMESTATE_H +#include "mxtypes.h" + class LegoGameState { public: __declspec(dllexport) LegoGameState(); __declspec(dllexport) ~LegoGameState(); - __declspec(dllexport) long Load(unsigned long); - __declspec(dllexport) long Save(unsigned long p); + __declspec(dllexport) MxResult Load(MxULong); + __declspec(dllexport) MxResult Save(MxULong p); __declspec(dllexport) void SerializePlayersInfo(short p); __declspec(dllexport) void SerializeScoreHistory(short p); __declspec(dllexport) void SetSavePath(char *p); diff --git a/LEGO1/legoinputmanager.cpp b/LEGO1/legoinputmanager.cpp index 6c0bd709..90be0c2c 100644 --- a/LEGO1/legoinputmanager.cpp +++ b/LEGO1/legoinputmanager.cpp @@ -17,7 +17,7 @@ LegoInputManager::~LegoInputManager() } // OFFSET: LEGO1 0x1005c740 STUB -void LegoInputManager::QueueEvent(NotificationId id, unsigned char p2, long p3, long p4, unsigned char p5) +void LegoInputManager::QueueEvent(NotificationId id, unsigned char p2, MxLong p3, MxLong p4, unsigned char p5) { // TODO } @@ -35,7 +35,7 @@ void LegoInputManager::UnRegister(MxCore *) } // OFFSET: LEGO1 0x1005b8b0 STUB -long LegoInputManager::Tickle() +MxLong LegoInputManager::Tickle() { // TODO diff --git a/LEGO1/legoinputmanager.h b/LEGO1/legoinputmanager.h index 74a2a8fa..7ae2dd62 100644 --- a/LEGO1/legoinputmanager.h +++ b/LEGO1/legoinputmanager.h @@ -22,11 +22,11 @@ class LegoInputManager : public MxPresenter LegoInputManager(); virtual ~LegoInputManager() override; - __declspec(dllexport) void QueueEvent(NotificationId id, unsigned char p2, long p3, long p4, unsigned char p5); + __declspec(dllexport) void QueueEvent(NotificationId id, unsigned char p2, MxLong p3, MxLong p4, unsigned char p5); __declspec(dllexport) void Register(MxCore *); __declspec(dllexport) void UnRegister(MxCore *); - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Tickle() override; // vtable+0x8 undefined m_pad40[0x15c]; int m_joystickIndex; diff --git a/LEGO1/legoomni.cpp b/LEGO1/legoomni.cpp index 45f7a9f7..32fb4d7f 100644 --- a/LEGO1/legoomni.cpp +++ b/LEGO1/legoomni.cpp @@ -25,7 +25,7 @@ void LegoOmni::CreateBackgroundAudio() } // OFFSET: LEGO1 0x1005af10 STUB -void LegoOmni::RemoveWorld(const MxAtomId &p1, long p2) +void LegoOmni::RemoveWorld(const MxAtomId &p1, MxLong p2) { // TODO } @@ -50,7 +50,7 @@ void SetOmniUserMessage(void (*p_userMsg)(const char *,int)) } // OFFSET: LEGO1 0x100acf50 STUB -long Start(MxDSAction *) +MxLong Start(MxDSAction *) { // TODO return 0; @@ -149,21 +149,21 @@ const char *GetNoCD_SourceName() } // OFFSET: LEGO1 0x1005b5f0 -long LegoOmni::Notify(MxParam &p) +MxLong LegoOmni::Notify(MxParam &p) { // FIXME: Stub return 0; } // OFFSET: LEGO1 0x1003dd70 STUB -LegoROI *PickROI(long,long) +LegoROI *PickROI(MxLong,MxLong) { // TODO return NULL; } // OFFSET: LEGO1 0x1003ddc0 STUB -LegoEntity *PickEntity(long,long) +LegoEntity *PickEntity(MxLong,MxLong) { // TODO return NULL; diff --git a/LEGO1/legoomni.h b/LEGO1/legoomni.h index 512fba41..9c8df71f 100644 --- a/LEGO1/legoomni.h +++ b/LEGO1/legoomni.h @@ -28,7 +28,7 @@ class LegoOmni : public MxOmni { public: __declspec(dllexport) void CreateBackgroundAudio(); - __declspec(dllexport) void RemoveWorld(const MxAtomId &p1, long p2); + __declspec(dllexport) void RemoveWorld(const MxAtomId &p1, MxLong p2); __declspec(dllexport) static int GetCurrPathInfo(LegoPathBoundary **,int &); __declspec(dllexport) static void CreateInstance(); __declspec(dllexport) static LegoOmni *GetInstance(); @@ -36,7 +36,7 @@ class LegoOmni : public MxOmni LegoOmni(); virtual ~LegoOmni(); // vtable+00 - virtual long Notify(MxParam &p); // vtable+04 + virtual MxLong Notify(MxParam &p); // vtable+04 // OFFSET: LEGO1 0x10058aa0 inline virtual const char *ClassName() const // vtable+0c @@ -101,14 +101,14 @@ __declspec(dllexport) const char * GetNoCD_SourceName(); __declspec(dllexport) LegoInputManager * InputManager(); __declspec(dllexport) LegoOmni * Lego(); __declspec(dllexport) void MakeSourceName(char *, const char *); -__declspec(dllexport) LegoEntity * PickEntity(long,long); -__declspec(dllexport) LegoROI * PickROI(long,long); +__declspec(dllexport) LegoEntity * PickEntity(MxLong,MxLong); +__declspec(dllexport) LegoROI * PickROI(MxLong,MxLong); __declspec(dllexport) void SetOmniUserMessage(void (*)(const char *,int)); __declspec(dllexport) LegoSoundManager * SoundManager(); -__declspec(dllexport) long Start(MxDSAction *); +__declspec(dllexport) MxLong Start(MxDSAction *); __declspec(dllexport) MxTransitionManager * TransitionManager(); __declspec(dllexport) LegoVideoManager * VideoManager(); -__declspec(dllexport) long Start(MxDSAction *a); +__declspec(dllexport) MxLong Start(MxDSAction *a); LegoBuildingManager* BuildingManager(); Isle* GetIsle(); diff --git a/LEGO1/legopathcontroller.cpp b/LEGO1/legopathcontroller.cpp index 46e23f5e..0cebbc0f 100644 --- a/LEGO1/legopathcontroller.cpp +++ b/LEGO1/legopathcontroller.cpp @@ -13,7 +13,7 @@ LegoPathController::~LegoPathController() } // OFFSET: LEGO1 0x10045c10 STUB -long LegoPathController::Tickle() +MxLong LegoPathController::Tickle() { // TODO return 0; diff --git a/LEGO1/legopathcontroller.h b/LEGO1/legopathcontroller.h index 9686b2bd..ba415076 100644 --- a/LEGO1/legopathcontroller.h +++ b/LEGO1/legopathcontroller.h @@ -11,7 +11,7 @@ class LegoPathController : public MxCore LegoPathController(); virtual ~LegoPathController() override; - virtual long Tickle() override; // vtable+08 + virtual MxLong Tickle() override; // vtable+08 // OFFSET: LEGO1 0x10045110 inline const char *ClassName() const override // vtable+0xc diff --git a/LEGO1/legoplantmanager.cpp b/LEGO1/legoplantmanager.cpp index 8f67b939..eee83726 100644 --- a/LEGO1/legoplantmanager.cpp +++ b/LEGO1/legoplantmanager.cpp @@ -13,7 +13,7 @@ LegoPlantManager::~LegoPlantManager() } // OFFSET: LEGO1 0x10026e00 STUB -long LegoPlantManager::Tickle() +MxLong LegoPlantManager::Tickle() { // TODO diff --git a/LEGO1/legoplantmanager.h b/LEGO1/legoplantmanager.h index 272fb451..3e8bfefe 100644 --- a/LEGO1/legoplantmanager.h +++ b/LEGO1/legoplantmanager.h @@ -11,7 +11,7 @@ class LegoPlantManager : public MxCore LegoPlantManager(); virtual ~LegoPlantManager() override; // vtable+0x0 - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x10026290 inline const char *ClassName() const override // vtable+0xc diff --git a/LEGO1/legorace.cpp b/LEGO1/legorace.cpp index 888b1fe1..2b2e3390 100644 --- a/LEGO1/legorace.cpp +++ b/LEGO1/legorace.cpp @@ -13,7 +13,7 @@ LegoRace::~LegoRace() } // OFFSET: LEGO1 0x10015e00 STUB -long LegoRace::Notify(MxParam &p) +MxLong LegoRace::Notify(MxParam &p) { // TODO diff --git a/LEGO1/legorace.h b/LEGO1/legorace.h index 003e57ed..26c88b9b 100644 --- a/LEGO1/legorace.h +++ b/LEGO1/legorace.h @@ -10,7 +10,7 @@ class LegoRace : public LegoWorld LegoRace(); virtual ~LegoRace() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 // OFFSET: LEGO1 0x10015ba0 inline const char *ClassName() const override // vtable+0xc diff --git a/LEGO1/legosoundmanager.cpp b/LEGO1/legosoundmanager.cpp index 518b8c55..e56747f6 100644 --- a/LEGO1/legosoundmanager.cpp +++ b/LEGO1/legosoundmanager.cpp @@ -13,7 +13,7 @@ LegoSoundManager::~LegoSoundManager() } // OFFSET: LEGO1 0x1002a3a0 STUB -long LegoSoundManager::Tickle() +MxLong LegoSoundManager::Tickle() { // TODO return 0; diff --git a/LEGO1/legosoundmanager.h b/LEGO1/legosoundmanager.h index 9b1e6450..1d191e03 100644 --- a/LEGO1/legosoundmanager.h +++ b/LEGO1/legosoundmanager.h @@ -10,7 +10,7 @@ class LegoSoundManager : public MxSoundManager public: LegoSoundManager(); virtual ~LegoSoundManager() override; - virtual long Tickle() override; // vtable+08 + virtual MxLong Tickle() override; // vtable+08 private: void Init(); diff --git a/LEGO1/legoutil.cpp b/LEGO1/legoutil.cpp index 5ea567e8..bac8f284 100644 --- a/LEGO1/legoutil.cpp +++ b/LEGO1/legoutil.cpp @@ -1,11 +1,13 @@ #include "legoutil.h" +#include "mxtypes.h" + // OFFSET: LEGO1 0x1003eae0 void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, float *g_out) { double calc; double p; - long hue_index; + MxLong hue_index; double v9; double v12; double v13; @@ -68,4 +70,4 @@ void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, floa default: return; } -} \ No newline at end of file +} diff --git a/LEGO1/mxbitmap.cpp b/LEGO1/mxbitmap.cpp index 2ccdd80b..6ad26f94 100644 --- a/LEGO1/mxbitmap.cpp +++ b/LEGO1/mxbitmap.cpp @@ -47,7 +47,7 @@ MxResult MxBitmap::LoadFile(HANDLE p_handle) } // OFFSET: LEGO1 0x100bcd10 -long MxBitmap::Read(const char *p_filename) +MxLong MxBitmap::Read(const char *p_filename) { MxResult result = FAILURE; HANDLE handle = CreateFileA( diff --git a/LEGO1/mxbitmap.h b/LEGO1/mxbitmap.h index e16fcb0e..66550f7e 100644 --- a/LEGO1/mxbitmap.h +++ b/LEGO1/mxbitmap.h @@ -17,7 +17,7 @@ class MxBitmap : public MxCore virtual int vtable18(BITMAPINFOHEADER *p_bmiHeader); virtual int vtable1c(int p_width, int p_height, MxPalette *p_palette, int); virtual MxResult LoadFile(HANDLE p_handle); - __declspec(dllexport) virtual long Read(const char *p_filename); // vtable+24 + __declspec(dllexport) virtual MxLong Read(const char *p_filename); // vtable+24 virtual int vtable28(int); virtual void vtable2c(int, int, int, int, int, int, int); virtual void vtable30(int, int, int, int, int, int, int); diff --git a/LEGO1/mxcore.cpp b/LEGO1/mxcore.cpp index aec24c00..78441d8d 100644 --- a/LEGO1/mxcore.cpp +++ b/LEGO1/mxcore.cpp @@ -16,13 +16,13 @@ MxCore::~MxCore() } // OFFSET: LEGO1 0x100ae1f0 -long MxCore::Notify(MxParam &p) +MxLong MxCore::Notify(MxParam &p) { return 0; } // OFFSET: LEGO1 0x10001f70 -long MxCore::Tickle() +MxLong MxCore::Tickle() { return 0; } \ No newline at end of file diff --git a/LEGO1/mxcore.h b/LEGO1/mxcore.h index 446ee91e..5e6586ba 100644 --- a/LEGO1/mxcore.h +++ b/LEGO1/mxcore.h @@ -14,8 +14,8 @@ class MxCore public: __declspec(dllexport) MxCore(); __declspec(dllexport) virtual ~MxCore(); // vtable+00 - __declspec(dllexport) virtual long Notify(MxParam &p); // vtable+04 - virtual long Tickle(); // vtable+08 + __declspec(dllexport) virtual MxLong Notify(MxParam &p); // vtable+04 + virtual MxLong Tickle(); // vtable+08 // OFFSET: LEGO1 0x100144c0 inline virtual const char *ClassName() const // vtable+0c diff --git a/LEGO1/mxdiskstreamcontroller.cpp b/LEGO1/mxdiskstreamcontroller.cpp index c178c0a5..61243410 100644 --- a/LEGO1/mxdiskstreamcontroller.cpp +++ b/LEGO1/mxdiskstreamcontroller.cpp @@ -13,7 +13,7 @@ MxDiskStreamController::~MxDiskStreamController() } // OFFSET: LEGO1 0x100c8640 STUB -long MxDiskStreamController::Tickle() +MxLong MxDiskStreamController::Tickle() { // TODO diff --git a/LEGO1/mxdiskstreamcontroller.h b/LEGO1/mxdiskstreamcontroller.h index 773f6b85..c0142663 100644 --- a/LEGO1/mxdiskstreamcontroller.h +++ b/LEGO1/mxdiskstreamcontroller.h @@ -14,7 +14,7 @@ class MxDiskStreamController : public MxStreamController MxDiskStreamController(); virtual ~MxDiskStreamController() override; - virtual long Tickle() override; // vtable+0x8 + virtual MxLong Tickle() override; // vtable+0x8 // OFFSET: LEGO1 0x100c7360 inline virtual const char *ClassName() const override // vtable+0x0c diff --git a/LEGO1/mxdsfile.cpp b/LEGO1/mxdsfile.cpp index 3e587b07..60f8533e 100644 --- a/LEGO1/mxdsfile.cpp +++ b/LEGO1/mxdsfile.cpp @@ -8,7 +8,7 @@ #define FOURCC(a, b, c, d) (((a) << 0) | ((b) << 8) | ((c) << 16) | ((d) << 24)) // OFFSET: LEGO1 0x100cc4b0 -MxDSFile::MxDSFile(const char *filename, unsigned long skipReadingChunks) +MxDSFile::MxDSFile(const char *filename, MxULong skipReadingChunks) { m_filename = filename; m_skipReadingChunks = skipReadingChunks; @@ -21,10 +21,10 @@ MxDSFile::~MxDSFile() } // OFFSET: LEGO1 0x100cc590 -long MxDSFile::Open(unsigned long uStyle) +MxLong MxDSFile::Open(MxULong uStyle) { MXIOINFO& io = m_io; - long longResult = 1; + MxLong longResult = 1; memset(&io, 0, sizeof(MXIOINFO)); if (io.Open(m_filename.GetData(), uStyle) != 0) { @@ -49,7 +49,7 @@ long MxDSFile::Open(unsigned long uStyle) } // OFFSET: LEGO1 0x100cc780 -long MxDSFile::Read(unsigned char *pch, unsigned long cch) +MxLong MxDSFile::Read(unsigned char *pch, MxULong cch) { if (m_io.Read((char*)pch, cch) != cch) return -1; @@ -59,7 +59,7 @@ long MxDSFile::Read(unsigned char *pch, unsigned long cch) } // OFFSET: LEGO1 0x100cc620 -long MxDSFile::ReadChunks() +MxLong MxDSFile::ReadChunks() { _MMCKINFO topChunk; _MMCKINFO childChunk; @@ -81,7 +81,7 @@ long MxDSFile::ReadChunks() if (m_io.Descend(&childChunk, &topChunk, 0) != 0) { return -1; } - unsigned long* pLengthInDWords = &m_lengthInDWords; + MxULong* pLengthInDWords = &m_lengthInDWords; m_io.Read((char *)pLengthInDWords, 4); m_pBuffer = malloc(*pLengthInDWords * 4); m_io.Read((char*)m_pBuffer, *pLengthInDWords * 4); @@ -96,25 +96,25 @@ long MxDSFile::ReadChunks() } // OFFSET: LEGO1 0x100cc7b0 -long MxDSFile::Seek(long lOffset, int iOrigin) +MxLong MxDSFile::Seek(MxLong lOffset, int iOrigin) { return (m_position = m_io.Seek(lOffset, iOrigin)) == -1 ? -1 : 0; } // OFFSET: LEGO1 0x100cc7e0 -unsigned long MxDSFile::GetBufferSize() +MxULong MxDSFile::GetBufferSize() { return m_header.bufferSize; } // OFFSET: LEGO1 0x100cc7f0 -unsigned long MxDSFile::GetStreamBuffersNum() +MxULong MxDSFile::GetStreamBuffersNum() { return m_header.streamBuffersNum; } // OFFSET: LEGO1 0x100cc740 -long MxDSFile::Close() +MxLong MxDSFile::Close() { m_io.Close(0); m_position = -1; diff --git a/LEGO1/mxdsfile.h b/LEGO1/mxdsfile.h index 8e136984..ae44ff46 100644 --- a/LEGO1/mxdsfile.h +++ b/LEGO1/mxdsfile.h @@ -9,7 +9,7 @@ class MxDSFile : public MxDSSource { public: - __declspec(dllexport) MxDSFile(const char *filename, unsigned long skipReadingChunks); + __declspec(dllexport) MxDSFile(const char *filename, MxULong skipReadingChunks); __declspec(dllexport) virtual ~MxDSFile(); // vtable+0x0 // OFFSET: LEGO1 0x100c0120 @@ -25,14 +25,14 @@ class MxDSFile : public MxDSSource return !strcmp(name, MxDSFile::ClassName()) || MxDSSource::IsA(name); } - __declspec(dllexport) virtual long Open(unsigned long); // vtable+0x14 - __declspec(dllexport) virtual long Close(); // vtable+0x18 - __declspec(dllexport) virtual long Read(unsigned char *,unsigned long); // vtable+0x20 - __declspec(dllexport) virtual long Seek(long,int); // vtable+0x24 - __declspec(dllexport) virtual unsigned long GetBufferSize(); // vtable+0x28 - __declspec(dllexport) virtual unsigned long GetStreamBuffersNum(); // vtable+0x2c + __declspec(dllexport) virtual MxLong Open(MxULong); // vtable+0x14 + __declspec(dllexport) virtual MxLong Close(); // vtable+0x18 + __declspec(dllexport) virtual MxLong Read(unsigned char *,MxULong); // vtable+0x20 + __declspec(dllexport) virtual MxLong Seek(MxLong,int); // vtable+0x24 + __declspec(dllexport) virtual MxULong GetBufferSize(); // vtable+0x28 + __declspec(dllexport) virtual MxULong GetStreamBuffersNum(); // vtable+0x2c private: - long ReadChunks(); + MxLong ReadChunks(); struct ChunkHeader { ChunkHeader() : majorVersion(0) @@ -43,7 +43,7 @@ class MxDSFile : public MxDSSource unsigned short majorVersion; unsigned short minorVersion; - unsigned long bufferSize; + MxULong bufferSize; short streamBuffersNum; short reserved; }; @@ -54,7 +54,7 @@ class MxDSFile : public MxDSSource // If false, read chunks immediately on open, otherwise // skip reading chunks until ReadChunks is explicitly called. - unsigned long m_skipReadingChunks; + MxULong m_skipReadingChunks; }; #endif // MXDSFILE_H diff --git a/LEGO1/mxdssource.cpp b/LEGO1/mxdssource.cpp index 8612c5c4..9a94f110 100644 --- a/LEGO1/mxdssource.cpp +++ b/LEGO1/mxdssource.cpp @@ -8,7 +8,7 @@ void MxDSSource::SomethingWhichCallsRead(void* pUnknownObject) } // OFFSET: LEGO1 0x100bfff0 -long MxDSSource::GetLengthInDWords() +MxLong MxDSSource::GetLengthInDWords() { return m_lengthInDWords; } \ No newline at end of file diff --git a/LEGO1/mxdssource.h b/LEGO1/mxdssource.h index 2837e7c2..5ff4c33c 100644 --- a/LEGO1/mxdssource.h +++ b/LEGO1/mxdssource.h @@ -26,19 +26,19 @@ class MxDSSource : public MxCore return !strcmp(name, MxDSSource::ClassName()) || MxCore::IsA(name); } - virtual long Open(unsigned long) = 0; - virtual long Close() = 0; + virtual MxLong Open(MxULong) = 0; + virtual MxLong Close() = 0; virtual void SomethingWhichCallsRead(void* pUnknownObject); - virtual long Read(unsigned char *, unsigned long) = 0; - virtual long Seek(long, int) = 0; - virtual unsigned long GetBufferSize() = 0; - virtual unsigned long GetStreamBuffersNum() = 0; - virtual long GetLengthInDWords(); + virtual MxLong Read(unsigned char *, MxULong) = 0; + virtual MxLong Seek(MxLong, int) = 0; + virtual MxULong GetBufferSize() = 0; + virtual MxULong GetStreamBuffersNum() = 0; + virtual MxLong GetLengthInDWords(); protected: - unsigned long m_lengthInDWords; + MxULong m_lengthInDWords; void* m_pBuffer; - long m_position; + MxLong m_position; }; #endif // MXDSSOURCE_H diff --git a/LEGO1/mxioinfo.cpp b/LEGO1/mxioinfo.cpp index ebe2a480..d95a00ef 100644 --- a/LEGO1/mxioinfo.cpp +++ b/LEGO1/mxioinfo.cpp @@ -19,13 +19,13 @@ unsigned short MXIOINFO::Open(const char *filename, DWORD fdwOpen) } // OFFSET: LEGO1 0x100cc8e0 -void MXIOINFO::Close(long arg) +void MXIOINFO::Close(MxLong arg) { } // OFFSET: LEGO1 0x100cc930 -unsigned long MXIOINFO::Read(HPSTR pch, LONG cch) +MxULong MXIOINFO::Read(HPSTR pch, LONG cch) { return 0; } diff --git a/LEGO1/mxioinfo.h b/LEGO1/mxioinfo.h index c88a55b9..9556e5df 100644 --- a/LEGO1/mxioinfo.h +++ b/LEGO1/mxioinfo.h @@ -2,8 +2,9 @@ #define MXIOINFO_H #include +#include -#include "mmsystem.h" +#include "mxtypes.h" class MXIOINFO { @@ -12,9 +13,9 @@ class MXIOINFO __declspec(dllexport) ~MXIOINFO(); unsigned short Open(const char *filename, DWORD fdwOpen); - void Close(long arg); + void Close(MxLong arg); LONG Seek(LONG lOffset, int iOrigin); - unsigned long Read(HPSTR pch, LONG cch); + MxULong Read(HPSTR pch, LONG cch); void SetBuffer(LPSTR pchBuffer, LONG cchBuffer, LONG unk); unsigned short Descend(LPMMCKINFO pmmcki, const MMCKINFO *pmmckiParent, UINT fuDescend); diff --git a/LEGO1/mxmediapresenter.cpp b/LEGO1/mxmediapresenter.cpp index 9df33285..58c068ac 100644 --- a/LEGO1/mxmediapresenter.cpp +++ b/LEGO1/mxmediapresenter.cpp @@ -3,7 +3,7 @@ DECOMP_SIZE_ASSERT(MxMediaPresenter, 0x50); // OFFSET: LEGO1 0x100b5d10 STUB -long MxMediaPresenter::Tickle() +MxLong MxMediaPresenter::Tickle() { // TODO return 0; diff --git a/LEGO1/mxmediapresenter.h b/LEGO1/mxmediapresenter.h index b3a1b38a..64de0614 100644 --- a/LEGO1/mxmediapresenter.h +++ b/LEGO1/mxmediapresenter.h @@ -14,7 +14,7 @@ class MxMediaPresenter : public MxPresenter Init(); } - virtual long Tickle() override; // vtable+0x8, override MxCore + virtual MxLong Tickle() override; // vtable+0x8, override MxCore // OFFSET: LEGO1 0x1000c5c0 inline virtual const char *ClassName() const override // vtable+0xc diff --git a/LEGO1/mxnotificationmanager.cpp b/LEGO1/mxnotificationmanager.cpp index 8ce1f98b..472c87b5 100644 --- a/LEGO1/mxnotificationmanager.cpp +++ b/LEGO1/mxnotificationmanager.cpp @@ -7,7 +7,7 @@ MxNotificationManager::~MxNotificationManager() } // OFFSET: LEGO1 0x100ac800 STUB -long MxNotificationManager::Tickle() +MxLong MxNotificationManager::Tickle() { // TODO diff --git a/LEGO1/mxnotificationmanager.h b/LEGO1/mxnotificationmanager.h index e350ba56..86cb4f00 100644 --- a/LEGO1/mxnotificationmanager.h +++ b/LEGO1/mxnotificationmanager.h @@ -9,7 +9,7 @@ class MxNotificationManager : public MxCore public: virtual ~MxNotificationManager(); // vtable+0x0 - virtual long Tickle(); // vtable+0x8 + virtual MxLong Tickle(); // vtable+0x8 // 0x10: MxCriticalSection }; diff --git a/LEGO1/mxomni.cpp b/LEGO1/mxomni.cpp index 76287b82..10e8eccb 100644 --- a/LEGO1/mxomni.cpp +++ b/LEGO1/mxomni.cpp @@ -123,7 +123,7 @@ void MxOmni::Destroy() } // OFFSET: LEGO1 0x100b07f0 -long MxOmni::Notify(MxParam &p) +MxLong MxOmni::Notify(MxParam &p) { // FIXME: Stub return 0; diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index dee03229..f3f1ee9a 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -32,7 +32,7 @@ class MxOmni : public MxCore MxOmni(); virtual ~MxOmni() override; - virtual long Notify(MxParam &p); // vtable+04 + virtual MxLong Notify(MxParam &p); // vtable+04 virtual void Init(); // vtable+14 virtual MxResult Create(MxOmniCreateParam &p); // vtable+18 virtual void Destroy(); // vtable+1c diff --git a/LEGO1/mxpresenter.cpp b/LEGO1/mxpresenter.cpp index 5ef01c64..4629fdba 100644 --- a/LEGO1/mxpresenter.cpp +++ b/LEGO1/mxpresenter.cpp @@ -34,7 +34,7 @@ MxPresenter::~MxPresenter() } // OFFSET: LEGO1 0x100b5200 STUB -long MxPresenter::Tickle() +MxLong MxPresenter::Tickle() { // TODO @@ -42,7 +42,7 @@ long MxPresenter::Tickle() } // OFFSET: LEGO1 0x100b4d80 STUB -long MxPresenter::StartAction(MxStreamController *, MxDSAction *) +MxLong MxPresenter::StartAction(MxStreamController *, MxDSAction *) { // TODO diff --git a/LEGO1/mxpresenter.h b/LEGO1/mxpresenter.h index a6616bd8..e01100c1 100644 --- a/LEGO1/mxpresenter.h +++ b/LEGO1/mxpresenter.h @@ -31,7 +31,7 @@ class MxPresenter : public MxCore return !strcmp(name, MxPresenter::ClassName()) || MxCore::IsA(name); } - __declspec(dllexport) virtual long Tickle() override; // vtable+0x8 + __declspec(dllexport) virtual MxLong Tickle() override; // vtable+0x8 virtual void VTable0x14(); // vtable+0x14 virtual void VTable0x18(); // vtable+0x18 virtual void VTable0x1c(); // vtable+0x1c @@ -44,7 +44,7 @@ class MxPresenter : public MxCore public: virtual undefined4 VTable0x34(); // vtable+0x34 virtual void InitVirtual(); // vtable+0x38 - __declspec(dllexport) virtual long StartAction(MxStreamController *, MxDSAction *); // vtable+0x3c + __declspec(dllexport) virtual MxLong StartAction(MxStreamController *, MxDSAction *); // vtable+0x3c __declspec(dllexport) virtual void EndAction(); // vtable+0x40 virtual void VTable0x44(undefined4 param); // vtable+0x44 virtual unsigned char VTable0x48(unsigned char param); // vtable+0x48 diff --git a/LEGO1/mxscheduler.cpp b/LEGO1/mxscheduler.cpp index 94228303..08bcd04c 100644 --- a/LEGO1/mxscheduler.cpp +++ b/LEGO1/mxscheduler.cpp @@ -8,7 +8,7 @@ MxScheduler *MxScheduler::GetInstance() } // OFFSET: LEGO1 0x100bf500 -void MxScheduler::StartMultiTasking(unsigned long) +void MxScheduler::StartMultiTasking(MxULong) { // Intentionally empty } diff --git a/LEGO1/mxscheduler.h b/LEGO1/mxscheduler.h index 4f7ee387..fabb33dc 100644 --- a/LEGO1/mxscheduler.h +++ b/LEGO1/mxscheduler.h @@ -1,11 +1,13 @@ #ifndef MXSCHEDULER_H #define MXSCHEDULER_H +#include "mxtypes.h" + class MxScheduler { public: __declspec(dllexport) static MxScheduler *GetInstance(); - __declspec(dllexport) void StartMultiTasking(unsigned long); + __declspec(dllexport) void StartMultiTasking(MxULong); }; #endif // MXSCHEDULER_H diff --git a/LEGO1/mxstreamer.cpp b/LEGO1/mxstreamer.cpp index 57c9a5b8..3f377151 100644 --- a/LEGO1/mxstreamer.cpp +++ b/LEGO1/mxstreamer.cpp @@ -14,14 +14,14 @@ MxStreamController *MxStreamer::Open(const char *name, unsigned short p) } // OFFSET: LEGO1 0x100b9570 STUB -long MxStreamer::Close(const char *p) +MxLong MxStreamer::Close(const char *p) { // TODO return 0; } // OFFSET: LEGO1 0x100b9b60 STUB -long MxStreamer::Notify(MxParam &p) +MxLong MxStreamer::Notify(MxParam &p) { // TODO diff --git a/LEGO1/mxstreamer.h b/LEGO1/mxstreamer.h index de84ed01..36f1a30f 100644 --- a/LEGO1/mxstreamer.h +++ b/LEGO1/mxstreamer.h @@ -12,9 +12,9 @@ class MxStreamer : public MxCore virtual ~MxStreamer() override; __declspec(dllexport) MxStreamController *Open(const char *name, unsigned short p); - __declspec(dllexport) long Close(const char *p); + __declspec(dllexport) MxLong Close(const char *p); - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 virtual MxResult VTable0x14(); // vtable+0x14 }; diff --git a/LEGO1/mxticklemanager.h b/LEGO1/mxticklemanager.h index 7ef50622..60f2f14d 100644 --- a/LEGO1/mxticklemanager.h +++ b/LEGO1/mxticklemanager.h @@ -9,7 +9,7 @@ class MxTickleManager : public MxCore public: virtual ~MxTickleManager(); - virtual long Tickle(); + virtual MxLong Tickle(); virtual const char *ClassName() const; virtual MxBool IsA(const char *name) const; virtual void vtable14(); diff --git a/LEGO1/mxtimer.cpp b/LEGO1/mxtimer.cpp index 47afaa03..0d5752d6 100644 --- a/LEGO1/mxtimer.cpp +++ b/LEGO1/mxtimer.cpp @@ -3,10 +3,10 @@ #include // 0x10101414 -long MxTimer::s_LastTimeCalculated = 0; +MxLong MxTimer::s_LastTimeCalculated = 0; // 0x10101418 -long MxTimer::s_LastTimeTimerStarted = 0; +MxLong MxTimer::s_LastTimeTimerStarted = 0; // OFFSET: LEGO1 0x100ae060 MxTimer::MxTimer() @@ -27,15 +27,15 @@ void MxTimer::Start() // OFFSET: LEGO1 0x100ae180 void MxTimer::Stop() { - long elapsed = this->GetRealTime(); - long startTime = elapsed - MxTimer::s_LastTimeTimerStarted; + MxLong elapsed = this->GetRealTime(); + MxLong startTime = elapsed - MxTimer::s_LastTimeTimerStarted; this->m_isRunning = FALSE; // this feels very stupid but it's what the assembly does this->m_startTime = this->m_startTime + startTime - 5; } // OFFSET: LEGO1 0x100ae140 -long MxTimer::GetRealTime() +MxLong MxTimer::GetRealTime() { MxTimer::s_LastTimeCalculated = timeGetTime(); return MxTimer::s_LastTimeCalculated - this->m_startTime; diff --git a/LEGO1/mxtimer.h b/LEGO1/mxtimer.h index 564eedfa..1714e8e1 100644 --- a/LEGO1/mxtimer.h +++ b/LEGO1/mxtimer.h @@ -13,9 +13,9 @@ class MxTimer : public MxCore void Start(); void Stop(); - __declspec(dllexport) long GetRealTime(); + __declspec(dllexport) MxLong GetRealTime(); - inline long GetTime() + inline MxLong GetTime() { if (this->m_isRunning) return s_LastTimeCalculated; @@ -24,10 +24,10 @@ class MxTimer : public MxCore } private: - long m_startTime; + MxLong m_startTime; MxBool m_isRunning; - static long s_LastTimeCalculated; - static long s_LastTimeTimerStarted; + static MxLong s_LastTimeCalculated; + static MxLong s_LastTimeTimerStarted; }; #endif // MXTIMER_H diff --git a/LEGO1/mxtransitionmanager.cpp b/LEGO1/mxtransitionmanager.cpp index b9631629..8af3f497 100644 --- a/LEGO1/mxtransitionmanager.cpp +++ b/LEGO1/mxtransitionmanager.cpp @@ -13,7 +13,7 @@ MxTransitionManager::~MxTransitionManager() } // OFFSET: LEGO1 0x1004bac0 STUB -long MxTransitionManager::Tickle() +MxLong MxTransitionManager::Tickle() { // TODO diff --git a/LEGO1/mxtransitionmanager.h b/LEGO1/mxtransitionmanager.h index 9dcb7f7c..c6cc28aa 100644 --- a/LEGO1/mxtransitionmanager.h +++ b/LEGO1/mxtransitionmanager.h @@ -14,7 +14,7 @@ class MxTransitionManager : public MxCore __declspec(dllexport) void SetWaitIndicator(MxVideoPresenter *videoPresenter); - virtual long Tickle(); // vtable+0x8 + virtual MxLong Tickle(); // vtable+0x8 }; #endif // MXTRANSITIONMANAGER_H diff --git a/LEGO1/mxtypes.h b/LEGO1/mxtypes.h index 71421d91..bcc401b2 100644 --- a/LEGO1/mxtypes.h +++ b/LEGO1/mxtypes.h @@ -8,11 +8,24 @@ typedef short MxS16; typedef unsigned int MxU32; typedef int MxS32; -typedef unsigned long MxResult; -const MxResult SUCCESS = 0; -const MxResult FAILURE = 0xFFFFFFFFL; +// On MSVC, a long is 32-bit, but on GCC/Clang, it's 64-bit. LEGO Island obviously +// assumes the former in all cases, which could become an issue in the future. +// The "longs" can't all be changed to "ints" (which are 32-bit on both) because +// this will break DLL export compatibility. Therefore, we define MxLong/MxULong, +// which is guaranteed to be 32-bit, and guaranteed to be a "long" on MSVC. +#if defined(_MSC_VER) +typedef long MxLong; +typedef unsigned long MxULong; +#else +typedef int MxLong; +typedef unsigned int MxULong; +#endif -typedef unsigned char MxBool; +typedef MxLong MxResult; +const MxResult SUCCESS = 0; +const MxResult FAILURE = -1; + +typedef MxU8 MxBool; #ifndef TRUE #define TRUE 1 diff --git a/LEGO1/mxvideomanager.cpp b/LEGO1/mxvideomanager.cpp index 178bc883..543f4136 100644 --- a/LEGO1/mxvideomanager.cpp +++ b/LEGO1/mxvideomanager.cpp @@ -7,7 +7,7 @@ MxVideoManager::~MxVideoManager() } // OFFSET: LEGO1 0x100bea90 STUB -long MxVideoManager::Tickle() +MxLong MxVideoManager::Tickle() { // TODO @@ -39,7 +39,7 @@ void MxVideoManager::InvalidateRect(MxRect32 &p_rect) } // OFFSET: LEGO1 0x100bebe0 -long MxVideoManager::RealizePalette(MxPalette *p_palette) +MxLong MxVideoManager::RealizePalette(MxPalette *p_palette) { PALETTEENTRY paletteEntries[256]; diff --git a/LEGO1/mxvideomanager.h b/LEGO1/mxvideomanager.h index d8e0c7bd..f70bf06e 100644 --- a/LEGO1/mxvideomanager.h +++ b/LEGO1/mxvideomanager.h @@ -11,10 +11,10 @@ class MxVideoManager : public MxUnknown100dc6b0 public: virtual ~MxVideoManager(); - virtual long Tickle(); // vtable+0x8 + virtual MxLong Tickle(); // vtable+0x8 __declspec(dllexport) void InvalidateRect(MxRect32 &); - __declspec(dllexport) virtual long RealizePalette(MxPalette *); // vtable+0x30 + __declspec(dllexport) virtual MxLong RealizePalette(MxPalette *); // vtable+0x30 MxVideoManager(); diff --git a/LEGO1/mxvideoparam.cpp b/LEGO1/mxvideoparam.cpp index 81f5d2d7..6f74f7a9 100644 --- a/LEGO1/mxvideoparam.cpp +++ b/LEGO1/mxvideoparam.cpp @@ -17,7 +17,7 @@ MxVideoParam::MxVideoParam() } // OFFSET: LEGO1 0x100beca0 -MxVideoParam::MxVideoParam(COMPAT_CONST MxRect32 &p_rect, MxPalette *p_pal, unsigned long p_backBuffers, COMPAT_CONST MxVideoParamFlags &p_flags) +MxVideoParam::MxVideoParam(COMPAT_CONST MxRect32 &p_rect, MxPalette *p_pal, MxULong p_backBuffers, COMPAT_CONST MxVideoParamFlags &p_flags) { this->m_rect.m_left = p_rect.m_left; this->m_rect.m_top = p_rect.m_top; diff --git a/LEGO1/mxvideoparam.h b/LEGO1/mxvideoparam.h index 0b6b2a38..2376e5db 100644 --- a/LEGO1/mxvideoparam.h +++ b/LEGO1/mxvideoparam.h @@ -15,7 +15,7 @@ class MxVideoParam public: __declspec(dllexport) MxVideoParam(); __declspec(dllexport) MxVideoParam(MxVideoParam &); - __declspec(dllexport) MxVideoParam(COMPAT_CONST MxRect32 &rect, MxPalette *pal, unsigned long p3, COMPAT_CONST MxVideoParamFlags &flags); + __declspec(dllexport) MxVideoParam(COMPAT_CONST MxRect32 &rect, MxPalette *pal, MxULong p3, COMPAT_CONST MxVideoParamFlags &flags); __declspec(dllexport) MxVideoParam &operator=(const MxVideoParam &); __declspec(dllexport) ~MxVideoParam(); diff --git a/LEGO1/police.cpp b/LEGO1/police.cpp index bd268411..37f10295 100644 --- a/LEGO1/police.cpp +++ b/LEGO1/police.cpp @@ -13,7 +13,7 @@ Police::~Police() } // OFFSET: LEGO1 0x1005e480 STUB -long Police::Notify(MxParam &p) +MxLong Police::Notify(MxParam &p) { // TODO diff --git a/LEGO1/police.h b/LEGO1/police.h index c4bea1cf..8ff6dff9 100644 --- a/LEGO1/police.h +++ b/LEGO1/police.h @@ -12,7 +12,7 @@ class Police : public LegoWorld Police(); virtual ~Police() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 }; diff --git a/LEGO1/registrationbook.cpp b/LEGO1/registrationbook.cpp index 5668d31c..dc03a327 100644 --- a/LEGO1/registrationbook.cpp +++ b/LEGO1/registrationbook.cpp @@ -13,7 +13,7 @@ RegistrationBook::~RegistrationBook() } // OFFSET: LEGO1 0x100770e0 STUB -long RegistrationBook::Notify(MxParam &p) +MxLong RegistrationBook::Notify(MxParam &p) { // TODO diff --git a/LEGO1/registrationbook.h b/LEGO1/registrationbook.h index 4dba2173..a8219569 100644 --- a/LEGO1/registrationbook.h +++ b/LEGO1/registrationbook.h @@ -11,7 +11,7 @@ class RegistrationBook : public LegoWorld RegistrationBook(); virtual ~RegistrationBook() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 }; diff --git a/LEGO1/score.cpp b/LEGO1/score.cpp index 4e3c7801..fc4070f7 100644 --- a/LEGO1/score.cpp +++ b/LEGO1/score.cpp @@ -13,7 +13,7 @@ Score::~Score() } // OFFSET: LEGO1 0x10001410 STUB -long Score::Notify(MxParam &p) +MxLong Score::Notify(MxParam &p) { // TODO diff --git a/LEGO1/score.h b/LEGO1/score.h index d2a7a7f6..e103b4bc 100644 --- a/LEGO1/score.h +++ b/LEGO1/score.h @@ -11,7 +11,7 @@ class Score : public LegoWorld Score(); virtual ~Score() override; // vtable+0x0 - virtual long Notify(MxParam &p) override; // vtable+0x4 + virtual MxLong Notify(MxParam &p) override; // vtable+0x4 }; From 5d099115fee55f14fe8364adf4866d6fe2147caf Mon Sep 17 00:00:00 2001 From: MattKC <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 2 Jul 2023 01:11:49 -0700 Subject: [PATCH 17/22] Update CONTRIBUTING.md [skip ci] --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5633e7c6..c9d3364a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,6 +30,7 @@ In general, we're not exhaustively strict about coding style, but there are some - `m_camelCase` for member variables. - `g_camelCase` for global variables. - `p_camelCase` for function parameters. +- Instead of C++ primitives (e.g. `int`, `long`, etc.), use types in `mxtypes.h` instead. This will help us ensure that variables will be the correct size regardless of the underlying compiler/platform/architecture. ## Questions? From 8fa45bbe0f4d1242fdb71846cd11a72de2ca0430 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 2 Jul 2023 02:07:11 -0700 Subject: [PATCH 18/22] replace shorts with MxS16/MxU16/undefined2 --- LEGO1/legogamestate.cpp | 4 ++-- LEGO1/legogamestate.h | 4 ++-- LEGO1/legoomni.cpp | 2 +- LEGO1/legoomni.h | 2 +- LEGO1/mxdsfile.h | 8 ++++---- LEGO1/mxdsobject.cpp | 2 +- LEGO1/mxdsobject.h | 10 +++++----- LEGO1/mxioinfo.cpp | 6 +++--- LEGO1/mxioinfo.h | 4 ++-- LEGO1/mxstreamer.cpp | 2 +- LEGO1/mxstreamer.h | 2 +- LEGO1/mxstring.h | 2 +- LEGO1/mxvideopresenter.cpp | 3 ++- LEGO1/mxvideopresenter.h | 8 +++++--- 14 files changed, 31 insertions(+), 28 deletions(-) diff --git a/LEGO1/legogamestate.cpp b/LEGO1/legogamestate.cpp index 66873f12..c12a5e06 100644 --- a/LEGO1/legogamestate.cpp +++ b/LEGO1/legogamestate.cpp @@ -27,13 +27,13 @@ MxResult LegoGameState::Save(MxULong p) } // OFFSET: LEGO1 0x1003a2e0 -void LegoGameState::SerializePlayersInfo(short p) +void LegoGameState::SerializePlayersInfo(MxS16 p) { // TODO } // OFFSET: LEGO1 0x1003cdd0 -void LegoGameState::SerializeScoreHistory(short p) +void LegoGameState::SerializeScoreHistory(MxS16 p) { // TODO } diff --git a/LEGO1/legogamestate.h b/LEGO1/legogamestate.h index fdd5bcb1..80437051 100644 --- a/LEGO1/legogamestate.h +++ b/LEGO1/legogamestate.h @@ -10,8 +10,8 @@ class LegoGameState __declspec(dllexport) ~LegoGameState(); __declspec(dllexport) MxResult Load(MxULong); __declspec(dllexport) MxResult Save(MxULong p); - __declspec(dllexport) void SerializePlayersInfo(short p); - __declspec(dllexport) void SerializeScoreHistory(short p); + __declspec(dllexport) void SerializePlayersInfo(MxS16 p); + __declspec(dllexport) void SerializeScoreHistory(MxS16 p); __declspec(dllexport) void SetSavePath(char *p); }; diff --git a/LEGO1/legoomni.cpp b/LEGO1/legoomni.cpp index 32fb4d7f..b5cbca8e 100644 --- a/LEGO1/legoomni.cpp +++ b/LEGO1/legoomni.cpp @@ -112,7 +112,7 @@ MxBackgroundAudioManager *BackgroundAudioManager() } // OFFSET: LEGO1 0x100c0280 STUB -MxDSObject *CreateStreamObject(MxDSFile *,short) +MxDSObject *CreateStreamObject(MxDSFile *,MxS16) { // TODO return NULL; diff --git a/LEGO1/legoomni.h b/LEGO1/legoomni.h index 9c8df71f..0ba27cf2 100644 --- a/LEGO1/legoomni.h +++ b/LEGO1/legoomni.h @@ -95,7 +95,7 @@ class LegoOmni : public MxOmni }; __declspec(dllexport) MxBackgroundAudioManager * BackgroundAudioManager(); -__declspec(dllexport) MxDSObject * CreateStreamObject(MxDSFile *,short); +__declspec(dllexport) MxDSObject * CreateStreamObject(MxDSFile *,MxS16); __declspec(dllexport) LegoGameState * GameState(); __declspec(dllexport) const char * GetNoCD_SourceName(); __declspec(dllexport) LegoInputManager * InputManager(); diff --git a/LEGO1/mxdsfile.h b/LEGO1/mxdsfile.h index ae44ff46..ac812df7 100644 --- a/LEGO1/mxdsfile.h +++ b/LEGO1/mxdsfile.h @@ -41,11 +41,11 @@ class MxDSFile : public MxDSSource , streamBuffersNum(0) {} - unsigned short majorVersion; - unsigned short minorVersion; + MxU16 majorVersion; + MxU16 minorVersion; MxULong bufferSize; - short streamBuffersNum; - short reserved; + MxS16 streamBuffersNum; + MxS16 reserved; }; MxString m_filename; diff --git a/LEGO1/mxdsobject.cpp b/LEGO1/mxdsobject.cpp index 66b1ed6c..abe8902f 100644 --- a/LEGO1/mxdsobject.cpp +++ b/LEGO1/mxdsobject.cpp @@ -111,7 +111,7 @@ unsigned int MxDSObject::CalculateUnk08() } // OFFSET: LEGO1 0x100bfa20 -void MxDSObject::Parse(char **p_source, unsigned short p_unk24) +void MxDSObject::Parse(char **p_source, MxU16 p_unk24) { this->SetSourceName(*p_source); *p_source += strlen(this->m_sourceName) + 1; diff --git a/LEGO1/mxdsobject.h b/LEGO1/mxdsobject.h index ef4701bc..ff7d4a02 100644 --- a/LEGO1/mxdsobject.h +++ b/LEGO1/mxdsobject.h @@ -25,7 +25,7 @@ class MxDSObject : public MxCore virtual int unk14(); // vtable+14; virtual unsigned int CalculateUnk08(); // vtable+18; - virtual void Parse(char **p_source, unsigned short p_unk24); // vtable+1c; + virtual void Parse(char **p_source, MxU16 p_unk24); // vtable+1c; void SetSourceName(const char *p_sourceName); @@ -33,7 +33,7 @@ class MxDSObject : public MxCore inline int GetUnknown1c() { return this->m_unk1c; } inline void SetUnknown1c(int p_unk1c) { this->m_unk1c = p_unk1c; } - inline void SetUnknown24(short p_unk24) { this->m_unk24 = p_unk24; } + inline void SetUnknown24(MxS16 p_unk24) { this->m_unk24 = p_unk24; } // OFFSET: ISLE 0x401c40 // OFFSET: LEGO1 0x10005530 @@ -41,14 +41,14 @@ class MxDSObject : public MxCore private: unsigned int m_unk08; - short m_unk0c; + MxS16 m_unk0c; char* m_sourceName; int m_unk14; char *m_objectName; int m_unk1c; MxAtomId m_atomId; - short m_unk24; - unsigned short m_unk26; + MxS16 m_unk24; + MxU16 m_unk26; int m_unk28; }; diff --git a/LEGO1/mxioinfo.cpp b/LEGO1/mxioinfo.cpp index d95a00ef..2d55ef36 100644 --- a/LEGO1/mxioinfo.cpp +++ b/LEGO1/mxioinfo.cpp @@ -13,7 +13,7 @@ MXIOINFO::~MXIOINFO() } // OFFSET: LEGO1 0x100cc830 -unsigned short MXIOINFO::Open(const char *filename, DWORD fdwOpen) +MxU16 MXIOINFO::Open(const char *filename, DWORD fdwOpen) { return 0; } @@ -43,7 +43,7 @@ void MXIOINFO::SetBuffer(LPSTR pchBuffer, LONG cchBuffer, LONG unk) } // OFFSET: LEGO1 0x100cce60 -unsigned short MXIOINFO::Descend(LPMMCKINFO pmmcki, const MMCKINFO *pmmckiParent, UINT fuDescend) +MxU16 MXIOINFO::Descend(LPMMCKINFO pmmcki, const MMCKINFO *pmmckiParent, UINT fuDescend) { return 0; -} \ No newline at end of file +} diff --git a/LEGO1/mxioinfo.h b/LEGO1/mxioinfo.h index 9556e5df..5ce0947a 100644 --- a/LEGO1/mxioinfo.h +++ b/LEGO1/mxioinfo.h @@ -12,12 +12,12 @@ class MXIOINFO MXIOINFO(); __declspec(dllexport) ~MXIOINFO(); - unsigned short Open(const char *filename, DWORD fdwOpen); + MxU16 Open(const char *filename, DWORD fdwOpen); void Close(MxLong arg); LONG Seek(LONG lOffset, int iOrigin); MxULong Read(HPSTR pch, LONG cch); void SetBuffer(LPSTR pchBuffer, LONG cchBuffer, LONG unk); - unsigned short Descend(LPMMCKINFO pmmcki, const MMCKINFO *pmmckiParent, UINT fuDescend); + MxU16 Descend(LPMMCKINFO pmmcki, const MMCKINFO *pmmckiParent, UINT fuDescend); MMIOINFO m_info; }; diff --git a/LEGO1/mxstreamer.cpp b/LEGO1/mxstreamer.cpp index 3f377151..12f51f99 100644 --- a/LEGO1/mxstreamer.cpp +++ b/LEGO1/mxstreamer.cpp @@ -7,7 +7,7 @@ MxStreamer::~MxStreamer() } // OFFSET: LEGO1 0x100b92c0 STUB -MxStreamController *MxStreamer::Open(const char *name, unsigned short p) +MxStreamController *MxStreamer::Open(const char *name, MxU16 p) { // TODO return NULL; diff --git a/LEGO1/mxstreamer.h b/LEGO1/mxstreamer.h index 36f1a30f..f14ac66d 100644 --- a/LEGO1/mxstreamer.h +++ b/LEGO1/mxstreamer.h @@ -11,7 +11,7 @@ class MxStreamer : public MxCore public: virtual ~MxStreamer() override; - __declspec(dllexport) MxStreamController *Open(const char *name, unsigned short p); + __declspec(dllexport) MxStreamController *Open(const char *name, MxU16 p); __declspec(dllexport) MxLong Close(const char *p); virtual MxLong Notify(MxParam &p) override; // vtable+0x4 diff --git a/LEGO1/mxstring.h b/LEGO1/mxstring.h index a6552bb5..a24a0df1 100644 --- a/LEGO1/mxstring.h +++ b/LEGO1/mxstring.h @@ -23,7 +23,7 @@ class MxString : public MxCore private: char *m_data; - unsigned short m_length; + MxU16 m_length; }; diff --git a/LEGO1/mxvideopresenter.cpp b/LEGO1/mxvideopresenter.cpp index ee12968a..4e47e4a4 100644 --- a/LEGO1/mxvideopresenter.cpp +++ b/LEGO1/mxvideopresenter.cpp @@ -3,6 +3,7 @@ DECOMP_SIZE_ASSERT(MxVideoPresenter, 0x64); // OFFSET: LEGO1 0x100b2760 STUB -void MxVideoPresenter::Init() { +void MxVideoPresenter::Init() +{ // TODO } diff --git a/LEGO1/mxvideopresenter.h b/LEGO1/mxvideopresenter.h index e9634427..19c211c3 100644 --- a/LEGO1/mxvideopresenter.h +++ b/LEGO1/mxvideopresenter.h @@ -8,9 +8,11 @@ class MxVideoPresenter : public MxMediaPresenter { public: - MxVideoPresenter() { + MxVideoPresenter() + { Init(); } + // OFFSET: LEGO1 0x1000c820 inline virtual const char *ClassName() const override // vtable+0x0c { @@ -29,9 +31,9 @@ class MxVideoPresenter : public MxMediaPresenter undefined4 m_unk50; undefined4 m_unk54; undefined4 m_unk58; - short m_unk5c; + undefined2 m_unk5c; unsigned char m_flags; - int m_unk60; + undefined4 m_unk60; }; #endif // MXVIDEOPRESENTER_H From 9415bd18bbd65c9c15605eceb279069dd7a8c39c Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 2 Jul 2023 10:07:55 -0700 Subject: [PATCH 19/22] fill out the rest of our primitives in mxtypes --- LEGO1/mxtypes.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/LEGO1/mxtypes.h b/LEGO1/mxtypes.h index bcc401b2..8a7d5026 100644 --- a/LEGO1/mxtypes.h +++ b/LEGO1/mxtypes.h @@ -2,11 +2,15 @@ #define MXTYPE_H typedef unsigned char MxU8; -typedef char MxS8; +typedef signed char MxS8; typedef unsigned short MxU16; -typedef short MxS16; +typedef signed short MxS16; typedef unsigned int MxU32; -typedef int MxS32; +typedef signed int MxS32; +typedef unsigned __int64 MxU64; +typedef signed __int64 MxS64; +typedef float MxFloat; +typedef double MxDouble; // On MSVC, a long is 32-bit, but on GCC/Clang, it's 64-bit. LEGO Island obviously // assumes the former in all cases, which could become an issue in the future. From d64a04705c9ae8fd4fdb750ff065caca49aeaab5 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sun, 2 Jul 2023 19:17:15 +0200 Subject: [PATCH 20/22] lego: fix/match SetColorString (#72) * lego: fix/match SetColorString * explicitly cast to float to avoid warning * style fixes * remove superfluous includes * Update legobackgroundcolor.cpp --- LEGO1/legobackgroundcolor.cpp | 69 +++++++++++++++++------------------ LEGO1/legobackgroundcolor.h | 10 ++--- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/LEGO1/legobackgroundcolor.cpp b/LEGO1/legobackgroundcolor.cpp index b818267f..2d8c5348 100644 --- a/LEGO1/legobackgroundcolor.cpp +++ b/LEGO1/legobackgroundcolor.cpp @@ -4,53 +4,50 @@ #include "legoutil.h" #include "legovideomanager.h" -const char *Delimiter = "\t"; -const char *set = "set"; -const char *reset = "reset"; +const char *g_delimiter = "\t"; +const char *g_set = "set"; +const char *g_reset = "reset"; // OFFSET: LEGO1 0x1003bfb0 -LegoBackgroundColor::LegoBackgroundColor(const char *name, const char *colorString) +LegoBackgroundColor::LegoBackgroundColor(const char *p_name, const char *p_colorString) { - m_name = name; + m_name = p_name; m_name.ToUpperCase(); - SetColorString(colorString); + SetColorString(p_colorString); } // OFFSET: LEGO1 0x1003c070 -void LegoBackgroundColor::SetColorString(const char *colorString) +void LegoBackgroundColor::SetColorString(const char *p_colorString) { - m_name = colorString; + m_string = p_colorString; m_string.ToLowerCase(); - float converted_r; - float converted_b; - float converted_g; LegoVideoManager *videomanager = VideoManager(); + if (!videomanager || !p_colorString) + return; - if (videomanager && colorString) - { - int length = strlen(colorString) + 1; - char *colorStringCopy = new char[length]; - strcpy(colorStringCopy, colorString); - char *colorStringSplit = strtok(colorStringCopy, Delimiter); - if (!strcmp(colorStringSplit, set)) - { - char *hue = strtok(0, Delimiter); - if (hue) - h = atoi(hue) * 0.01; - char *sat = strtok(0, Delimiter); - if (sat) - s = atoi(sat) * 0.01; - char *val = strtok(0, Delimiter); - if (val) - v = atoi(val) * 0.01; - } - else if (!strcmp(colorStringSplit, reset)) - { - // reset it - ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); - videomanager->SetSkyColor(converted_r, converted_g, converted_b); - } - delete[] colorStringCopy; + float converted_r, converted_g, converted_b; + char *colorStringCopy = strcpy(new char[strlen(p_colorString) + 1], p_colorString); + char *colorStringSplit = strtok(colorStringCopy, g_delimiter); + + if (!strcmp(colorStringSplit, g_set)) { + colorStringSplit = strtok(0, g_delimiter); + if (colorStringSplit) + h = (float) (atoi(colorStringSplit) * 0.01); + colorStringSplit = strtok(0, g_delimiter); + if (colorStringSplit) + s = (float) (atoi(colorStringSplit) * 0.01); + colorStringSplit = strtok(0, g_delimiter); + if (colorStringSplit) + v = (float) (atoi(colorStringSplit) * 0.01); + + ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); + videomanager->SetSkyColor(converted_r, converted_g, converted_b); } + else if (!strcmp(colorStringSplit, g_reset)) { + ConvertHSVToRGB(this->h, this->s, this->v, &converted_r, &converted_g, &converted_b); + videomanager->SetSkyColor(converted_r, converted_g, converted_b); + } + + delete[] colorStringCopy; } diff --git a/LEGO1/legobackgroundcolor.h b/LEGO1/legobackgroundcolor.h index 1daa6311..9345c394 100644 --- a/LEGO1/legobackgroundcolor.h +++ b/LEGO1/legobackgroundcolor.h @@ -1,15 +1,15 @@ #ifndef LEGOBACKGROUNDCOLOR_H #define LEGOBACKGROUNDCOLOR_H -#include "mxstring.h" -#include "mxcore.h" + #include "mxstringvariable.h" class LegoBackgroundColor : public MxStringVariable { public: - __declspec(dllexport) LegoBackgroundColor(const char *, const char *); - void SetColorString(const char *colorString); -protected: + __declspec(dllexport) LegoBackgroundColor(const char *p_name, const char *p_colorString); + void SetColorString(const char *p_colorString); + +private: float h; float s; float v; From e0e338ee449d4c9e741461676c4d618a1c33de86 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 3 Jul 2023 19:24:51 +0200 Subject: [PATCH 21/22] lego: add MxDSType enum, add it to all ctors, refactor `MxDSObject` (#73) * lego: add MxDSType enum, add to all ctors * refactor header * re-type members * add size assert for MxDSObject * fix Parse param * fix types --- LEGO1/mxatomid.h | 8 ++++---- LEGO1/mxdsaction.cpp | 3 ++- LEGO1/mxdsanim.cpp | 3 +-- LEGO1/mxdsevent.cpp | 7 +++---- LEGO1/mxdsmediaaction.cpp | 3 ++- LEGO1/mxdsmultiaction.cpp | 7 ++++--- LEGO1/mxdsobject.cpp | 16 ++++++++------- LEGO1/mxdsobject.h | 38 ++++++++++++++++++++---------------- LEGO1/mxdsobjectaction.cpp | 3 +-- LEGO1/mxdsparallelaction.cpp | 3 +-- LEGO1/mxdsselectaction.cpp | 7 ++++--- LEGO1/mxdsserialaction.cpp | 7 ++++--- LEGO1/mxdssound.cpp | 2 +- LEGO1/mxdsstill.cpp | 3 +-- LEGO1/mxdstypes.h | 20 +++++++++++++++++++ 15 files changed, 78 insertions(+), 52 deletions(-) create mode 100755 LEGO1/mxdstypes.h diff --git a/LEGO1/mxatomid.h b/LEGO1/mxatomid.h index 6b7dddbb..4a2082cf 100644 --- a/LEGO1/mxatomid.h +++ b/LEGO1/mxatomid.h @@ -5,10 +5,10 @@ enum LookupMode { - LookupMode_Exact = 0, - LookupMode_LowerCase = 1, - LookupMode_UpperCase = 2, - LookupMode_LowerCase2 = 3 + LookupMode_Exact = 0, + LookupMode_LowerCase = 1, + LookupMode_UpperCase = 2, + LookupMode_LowerCase2 = 3 }; class MxAtomId diff --git a/LEGO1/mxdsaction.cpp b/LEGO1/mxdsaction.cpp index a193ab21..e5162f89 100644 --- a/LEGO1/mxdsaction.cpp +++ b/LEGO1/mxdsaction.cpp @@ -4,9 +4,10 @@ MxDSAction::MxDSAction() { // TODO + this->SetType(MxDSType_Action); } -// OFFSET: LEGO1 0x100ada80 +// OFFSET: LEGO1 0x100ada80 STUB MxDSAction::~MxDSAction() { // TODO diff --git a/LEGO1/mxdsanim.cpp b/LEGO1/mxdsanim.cpp index 9a56d359..b9b887cd 100644 --- a/LEGO1/mxdsanim.cpp +++ b/LEGO1/mxdsanim.cpp @@ -3,11 +3,10 @@ // OFFSET: LEGO1 0x100c8ff0 MxDSAnim::MxDSAnim() { - // TODO + this->SetType(MxDSType_Anim); } // OFFSET: LEGO1 0x100c91a0 MxDSAnim::~MxDSAnim() { - // TODO } diff --git a/LEGO1/mxdsevent.cpp b/LEGO1/mxdsevent.cpp index a45ec93a..b6571075 100644 --- a/LEGO1/mxdsevent.cpp +++ b/LEGO1/mxdsevent.cpp @@ -1,13 +1,12 @@ #include "mxdsevent.h" -// OFFSET: LEGO1 0x100c95f0 STUB +// OFFSET: LEGO1 0x100c95f0 MxDSEvent::MxDSEvent() { - // TODO + this->SetType(MxDSType_Event); } -// OFFSET: LEGO1 0x100c97a0 STUB +// OFFSET: LEGO1 0x100c97a0 MxDSEvent::~MxDSEvent() { - // TODO } diff --git a/LEGO1/mxdsmediaaction.cpp b/LEGO1/mxdsmediaaction.cpp index 9587b152..5f9c1132 100644 --- a/LEGO1/mxdsmediaaction.cpp +++ b/LEGO1/mxdsmediaaction.cpp @@ -4,9 +4,10 @@ MxDSMediaAction::MxDSMediaAction() { // TODO + this->SetType(MxDSType_MediaAction); } -// OFFSET: LEGO1 0x100c8cf0 +// OFFSET: LEGO1 0x100c8cf0 STUB MxDSMediaAction::~MxDSMediaAction() { // TODO diff --git a/LEGO1/mxdsmultiaction.cpp b/LEGO1/mxdsmultiaction.cpp index 4b36f2ec..4188fb66 100644 --- a/LEGO1/mxdsmultiaction.cpp +++ b/LEGO1/mxdsmultiaction.cpp @@ -3,11 +3,12 @@ // OFFSET: LEGO1 0x100c9b90 MxDSMultiAction::MxDSMultiAction() { - + // TODO + this->SetType(MxDSType_MultiAction); } -// OFFSET: LEGO1 0x100ca060 +// OFFSET: LEGO1 0x100ca060 STUB MxDSMultiAction::~MxDSMultiAction() { - + // TODO } diff --git a/LEGO1/mxdsobject.cpp b/LEGO1/mxdsobject.cpp index abe8902f..2b478b88 100644 --- a/LEGO1/mxdsobject.cpp +++ b/LEGO1/mxdsobject.cpp @@ -3,10 +3,12 @@ #include #include +DECOMP_SIZE_ASSERT(MxDSObject, 0x2c); + // OFFSET: LEGO1 0x100bf6a0 MxDSObject::MxDSObject() { - this->m_unk0c = 0; + this->SetType(MxDSType_Object); this->m_sourceName = NULL; this->m_unk14 = 0; this->m_objectName = NULL; @@ -83,15 +85,15 @@ void MxDSObject::SetSourceName(const char *p_sourceName) } // OFFSET: LEGO1 0x100bf9c0 -int MxDSObject::unk14() +undefined4 MxDSObject::unk14() { return 10; } // OFFSET: LEGO1 0x100bf9d0 -unsigned int MxDSObject::CalculateUnk08() +MxU32 MxDSObject::CalculateUnk08() { - unsigned int unk08; + MxU32 unk08; if (this->m_sourceName) unk08 = strlen(this->m_sourceName) + 3; @@ -111,16 +113,16 @@ unsigned int MxDSObject::CalculateUnk08() } // OFFSET: LEGO1 0x100bfa20 -void MxDSObject::Parse(char **p_source, MxU16 p_unk24) +void MxDSObject::Parse(char **p_source, MxS16 p_unk24) { this->SetSourceName(*p_source); *p_source += strlen(this->m_sourceName) + 1; - this->m_unk14 = *(int*) *p_source; + this->m_unk14 = *(undefined4*) *p_source; *p_source += 4; this->SetObjectName(*p_source); *p_source += strlen(this->m_objectName) + 1; - this->m_unk1c = *(int*) *p_source; + this->m_unk1c = *(undefined4*) *p_source; *p_source += 4; this->m_unk24 = p_unk24; diff --git a/LEGO1/mxdsobject.h b/LEGO1/mxdsobject.h index ff7d4a02..a13f382f 100644 --- a/LEGO1/mxdsobject.h +++ b/LEGO1/mxdsobject.h @@ -1,55 +1,59 @@ #ifndef MXDSOBJECT_H #define MXDSOBJECT_H +#include "decomp.h" + #include "mxcore.h" #include "mxatomid.h" +#include "mxdstypes.h" // VTABLE 0x100dc868 // SIZE 0x2c class MxDSObject : public MxCore { public: - __declspec(dllexport) void SetObjectName(const char *p_objectName); - MxDSObject(); virtual ~MxDSObject() override; - MxDSObject &operator=(MxDSObject &p_dsObject); void CopyFrom(MxDSObject &p_dsObject); + MxDSObject &operator=(MxDSObject &p_dsObject); - // OFFSET: LEGO1 0x100bf730 + __declspec(dllexport) void SetObjectName(const char *p_objectName); + void SetSourceName(const char *p_sourceName); + + // OFFSET: LEGO1 0x100bf730 inline virtual const char *ClassName() const override { return "MxDSObject"; }; // vtable+0c // OFFSET: LEGO1 0x100bf740 inline virtual MxBool IsA(const char *name) const override { return !strcmp(name, MxDSObject::ClassName()) || MxCore::IsA(name); }; // vtable+10; - virtual int unk14(); // vtable+14; - virtual unsigned int CalculateUnk08(); // vtable+18; - virtual void Parse(char **p_source, MxU16 p_unk24); // vtable+1c; - - void SetSourceName(const char *p_sourceName); + virtual undefined4 unk14(); // vtable+14; + virtual MxU32 CalculateUnk08(); // vtable+18; + virtual void Parse(char **p_source, MxS16 p_unk24); // vtable+1c; inline const MxAtomId& GetAtomId() { return this->m_atomId; } - inline int GetUnknown1c() { return this->m_unk1c; } + inline undefined4 GetUnknown1c() { return this->m_unk1c; } - inline void SetUnknown1c(int p_unk1c) { this->m_unk1c = p_unk1c; } + inline void SetUnknown1c(undefined4 p_unk1c) { this->m_unk1c = p_unk1c; } inline void SetUnknown24(MxS16 p_unk24) { this->m_unk24 = p_unk24; } // OFFSET: ISLE 0x401c40 // OFFSET: LEGO1 0x10005530 inline void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; } +protected: + inline void SetType(MxDSType p_type) { this->m_type = p_type; } + private: - unsigned int m_unk08; - MxS16 m_unk0c; + MxU32 m_unk08; + MxU16 m_type; char* m_sourceName; - int m_unk14; + undefined4 m_unk14; char *m_objectName; - int m_unk1c; + undefined4 m_unk1c; MxAtomId m_atomId; MxS16 m_unk24; - MxU16 m_unk26; - int m_unk28; + undefined4 m_unk28; }; #endif // MXDSOBJECT_H diff --git a/LEGO1/mxdsobjectaction.cpp b/LEGO1/mxdsobjectaction.cpp index 990168da..d468f30a 100644 --- a/LEGO1/mxdsobjectaction.cpp +++ b/LEGO1/mxdsobjectaction.cpp @@ -3,11 +3,10 @@ // OFFSET: LEGO1 0x100c8870 MxDSObjectAction::MxDSObjectAction() { - // TODO + this->SetType(MxDSType_ObjectAction); } // OFFSET: LEGO1 0x100c8a20 MxDSObjectAction::~MxDSObjectAction() { - // TODO } diff --git a/LEGO1/mxdsparallelaction.cpp b/LEGO1/mxdsparallelaction.cpp index 78b9623a..97a8a9d3 100644 --- a/LEGO1/mxdsparallelaction.cpp +++ b/LEGO1/mxdsparallelaction.cpp @@ -3,11 +3,10 @@ // OFFSET: LEGO1 0x100cae80 MxDSParallelAction::MxDSParallelAction() { - + this->SetType(MxDSType_ParallelAction); } // OFFSET: LEGO1 0x100cb040 MxDSParallelAction::~MxDSParallelAction() { - } diff --git a/LEGO1/mxdsselectaction.cpp b/LEGO1/mxdsselectaction.cpp index 575aba29..5cae82fb 100644 --- a/LEGO1/mxdsselectaction.cpp +++ b/LEGO1/mxdsselectaction.cpp @@ -3,11 +3,12 @@ // OFFSET: LEGO1 0x100cb2b0 MxDSSelectAction::MxDSSelectAction() { - + // TODO + this->SetType(MxDSType_SelectAction); } -// OFFSET: LEGO1 0x100cb8d0 +// OFFSET: LEGO1 0x100cb8d0 STUB MxDSSelectAction::~MxDSSelectAction() { - + // TODO } diff --git a/LEGO1/mxdsserialaction.cpp b/LEGO1/mxdsserialaction.cpp index a5e8f623..46964208 100644 --- a/LEGO1/mxdsserialaction.cpp +++ b/LEGO1/mxdsserialaction.cpp @@ -3,11 +3,12 @@ // OFFSET: LEGO1 0x100ca9d0 MxDSSerialAction::MxDSSerialAction() { - + // TODO + this->SetType(MxDSType_SerialAction); } -// OFFSET: LEGO1 0x100cac10 +// OFFSET: LEGO1 0x100cac10 STUB MxDSSerialAction::~MxDSSerialAction() { - + // TODO } diff --git a/LEGO1/mxdssound.cpp b/LEGO1/mxdssound.cpp index 4f2b0d61..30894abc 100644 --- a/LEGO1/mxdssound.cpp +++ b/LEGO1/mxdssound.cpp @@ -4,10 +4,10 @@ MxDSSound::MxDSSound() { // TODO + this->SetType(MxDSType_Sound); } // OFFSET: LEGO1 0x100c9470 MxDSSound::~MxDSSound() { - // TODO } diff --git a/LEGO1/mxdsstill.cpp b/LEGO1/mxdsstill.cpp index 0a5434f1..938afe83 100644 --- a/LEGO1/mxdsstill.cpp +++ b/LEGO1/mxdsstill.cpp @@ -3,11 +3,10 @@ // OFFSET: LEGO1 0x100c98c0 MxDSStill::MxDSStill() { - // TODO + this->SetType(MxDSType_Still); } // OFFSET: LEGO1 0x100c9a70 MxDSStill::~MxDSStill() { - // TODO } diff --git a/LEGO1/mxdstypes.h b/LEGO1/mxdstypes.h new file mode 100755 index 00000000..6487bad5 --- /dev/null +++ b/LEGO1/mxdstypes.h @@ -0,0 +1,20 @@ +#ifndef MXDSTYPES_H +#define MXDSTYPES_H + +enum MxDSType +{ + MxDSType_Object = 0, + MxDSType_Action = 1, + MxDSType_MediaAction = 2, + MxDSType_Anim = 3, + MxDSType_Sound = 4, + MxDSType_MultiAction = 5, + MxDSType_SerialAction = 6, + MxDSType_ParallelAction = 7, + MxDSType_Event = 8, + MxDSType_SelectAction = 9, + MxDSType_Still = 10, + MxDSType_ObjectAction = 11, +}; + +#endif // MXDSTYPES_H From fb56735fbd2c3f54554741a643eb7df873b061a7 Mon Sep 17 00:00:00 2001 From: MishaProductions <106913236+MishaProductions@users.noreply.github.com> Date: Mon, 3 Jul 2023 20:25:37 +0300 Subject: [PATCH 22/22] [lego] Implement LegoGameState::SetSavepath (#76) * SetSavePath 100% match * fix naming convention --- LEGO1/legogamestate.cpp | 17 +++++++++++++++-- LEGO1/legogamestate.h | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/LEGO1/legogamestate.cpp b/LEGO1/legogamestate.cpp index c12a5e06..344cf1ca 100644 --- a/LEGO1/legogamestate.cpp +++ b/LEGO1/legogamestate.cpp @@ -1,4 +1,5 @@ #include "legogamestate.h" +#include "legoomni.h" // OFFSET: LEGO1 0x10039550 LegoGameState::LegoGameState() @@ -39,7 +40,19 @@ void LegoGameState::SerializeScoreHistory(MxS16 p) } // OFFSET: LEGO1 0x10039f00 -void LegoGameState::SetSavePath(char *p) +void LegoGameState::SetSavePath(char *p_savePath) { - // TODO + if (m_savePath != NULL) + { + delete[] m_savePath; + } + if (p_savePath) + { + m_savePath = new char[strlen(p_savePath) + 1]; + strcpy(m_savePath, p_savePath); + } + else + { + m_savePath = NULL; + } } diff --git a/LEGO1/legogamestate.h b/LEGO1/legogamestate.h index 80437051..ef2eeb1e 100644 --- a/LEGO1/legogamestate.h +++ b/LEGO1/legogamestate.h @@ -13,6 +13,9 @@ class LegoGameState __declspec(dllexport) void SerializePlayersInfo(MxS16 p); __declspec(dllexport) void SerializeScoreHistory(MxS16 p); __declspec(dllexport) void SetSavePath(char *p); + +private: + char *m_savePath; }; #endif // LEGOGAMESTATE_H