From 3f4732b0bc7b2f78df4ed22241dcaf9cbfd5c78a Mon Sep 17 00:00:00 2001 From: vladislav doster Date: Mon, 23 Dec 2024 16:39:26 -0600 Subject: [PATCH 1/8] docs(README.md): readability improvements (#1266) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 97f63139..660bd746 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Due to various complexities with regard to the compiler, these binaries are not ## Building -This project 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 the output of this code to the original executables as closely as possible, all contributions will be graded with the output of this compiler. +This project 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, Microsoft Visual C++ 4.20 (the same compiler used to build the original game) is recommended. Since we're trying to match the output of this code to the original executables as closely as possible, all contributions will be graded with the output of this compiler. These instructions will outline how to compile this repository using Visual C++ 4.2 into highly-accurate binaries where the majority of functions are instruction-matching with retail. If you wish, you can try using other compilers, but this is at your own risk and won't be covered in this guide. @@ -41,7 +41,7 @@ cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo - `RelWithDebInfo` is recommended because it will produce debug symbols useful for further decompilation work. However, you can change this to `Release` if you don't need them. `Debug` builds are not recommended because they are unlikely to be compatible with the retail `LEGO1.DLL`, which is currently the only way to use this decompilation for gameplay. - `NMake Makefiles` is most recommended because it will be immediately compatible with Visual C++ 4.2. For faster builds, you can use `Ninja` (if you have it installed), however due to limitations in Visual C++ 4.2, you can only build `Release` builds this way (debug symbols cannot be generated with `Ninja`). 1. Build the project by running `nmake` or `cmake --build ` -1. When this is done, there should a recompiled `ISLE.EXE` and `LEGO1.DLL` in the build folder. +1. When this is done, there should be a recompiled `ISLE.EXE` and `LEGO1.DLL` in the build folder. 1. Note that `nmake` must be run twice under certain conditions, so it is advisable to always (re-)compile using `nmake && nmake`. If you have a CMake-compatible IDE, it should be pretty straightforward to use this repository, as long as you can use `VCVARS32.BAT` and set the generator to `NMake Makefiles`. @@ -60,7 +60,7 @@ If you're interested in helping or contributing to this project, check out the [ Right click on `LEGO1.DLL`, select `Properties`, and switch to the `Details` tab. Under `Version` you should either see `1.0.0.0` (1.0) or `1.1.0.0` (1.1). Additionally, you can look at the game disc files; 1.0's files will all say August 8, 1997, and 1.1's files will all say September 8, 1997. Version 1.1 is by far the most common, especially if you're not using the English or Japanese versions, so that's most likely the version you have. -Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation is specifically targeting the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below: +Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation specifically targets the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below: * ISLE.EXE `md5: f6da12249e03eed1c74810cd23beb9f5` * LEGO1.DLL `md5: 4e2f6d969ea2ef8655ba3fc221a0c8fe` From b4d2ea72af07a0481994333be517c267aa285d54 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Tue, 24 Dec 2024 01:11:38 +0100 Subject: [PATCH 2/8] Fix -Wwrite-strings warnings (#1267) warning: ISO C++ forbids converting a string constant to 'LegoChar*' --- LEGO1/lego/legoomni/include/act2brick.h | 2 +- LEGO1/lego/legoomni/include/legoanimationmanager.h | 2 +- LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp | 2 +- LEGO1/lego/legoomni/src/entity/act2brick.cpp | 2 +- LEGO1/lego/legoomni/src/race/carrace.cpp | 4 ++-- LEGO1/lego/legoomni/src/worlds/legoact2.cpp | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/LEGO1/lego/legoomni/include/act2brick.h b/LEGO1/lego/legoomni/include/act2brick.h index 55efc967..26c51f8c 100644 --- a/LEGO1/lego/legoomni/include/act2brick.h +++ b/LEGO1/lego/legoomni/include/act2brick.h @@ -41,7 +41,7 @@ public: void Mute(MxBool p_muted); private: - static LegoChar* g_lodNames[]; + static const LegoChar* g_lodNames[]; static MxLong g_lastHitActorTime; LegoCacheSound* m_whistleSound; // 0x154 diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index 49fd4155..56f6d0a7 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -166,7 +166,7 @@ public: MxBool FindVehicle(const char* p_name, MxU32& p_index); MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info); MxResult ReadModelInfo(LegoFile* p_file, ModelInfo* p_info); - void FUN_10060480(LegoChar* p_characterNames[], MxU32 p_numCharacterNames); + void FUN_10060480(const LegoChar* p_characterNames[], MxU32 p_numCharacterNames); void FUN_100604d0(MxBool p_unk0x08); void FUN_100604f0(MxS32 p_objectIds[], MxU32 p_numObjectIds); void FUN_10060540(MxBool p_unk0x29); diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index 5c5400a7..783b1eee 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -881,7 +881,7 @@ void LegoAnimationManager::DeleteAnimations() // FUNCTION: LEGO1 0x10060480 // FUNCTION: BETA10 0x100412a9 -void LegoAnimationManager::FUN_10060480(LegoChar* p_characterNames[], MxU32 p_numCharacterNames) +void LegoAnimationManager::FUN_10060480(const LegoChar* p_characterNames[], MxU32 p_numCharacterNames) { for (MxS32 i = 0; i < p_numCharacterNames; i++) { for (MxS32 j = 0; j < sizeOfArray(g_characters); j++) { diff --git a/LEGO1/lego/legoomni/src/entity/act2brick.cpp b/LEGO1/lego/legoomni/src/entity/act2brick.cpp index f7f47839..b0b6f67e 100644 --- a/LEGO1/lego/legoomni/src/entity/act2brick.cpp +++ b/LEGO1/lego/legoomni/src/entity/act2brick.cpp @@ -19,7 +19,7 @@ DECOMP_SIZE_ASSERT(Act2Brick, 0x194) // GLOBAL: LEGO1 0x100f7a38 -LegoChar* Act2Brick::g_lodNames[] = +const LegoChar* Act2Brick::g_lodNames[] = {"xchbase1", "xchblad1", "xchseat1", "xchtail1", "xhback1", "xhljet1", "xhmidl1", "xhmotr1", "xhsidl1", "xhsidr1"}; // GLOBAL: LEGO1 0x100f7a60 diff --git a/LEGO1/lego/legoomni/src/race/carrace.cpp b/LEGO1/lego/legoomni/src/race/carrace.cpp index 9c5d6d4c..4b4f0acd 100644 --- a/LEGO1/lego/legoomni/src/race/carrace.cpp +++ b/LEGO1/lego/legoomni/src/race/carrace.cpp @@ -59,11 +59,11 @@ MxS32 CarRace::g_unk0x100d5d60[] = // GLOBAL: LEGO1 0x100f0c70 // STRING: LEGO1 0x100f0c48 -LegoChar* g_strCRCFRNTY6 = "C_RCFRNTY6"; +const LegoChar* g_strCRCFRNTY6 = "C_RCFRNTY6"; // GLOBAL: LEGO1 0x100f0c74 // STRING: LEGO1 0x100f0c3c -LegoChar* g_strCRCEDGEY0 = "C_RCEDGEY0"; +const LegoChar* g_strCRCEDGEY0 = "C_RCEDGEY0"; // GLOBAL: LEGO1 0x100f0c7c MxS32 g_unk0x100f0c7c = 2; diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index ea400a24..71a7c590 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -49,7 +49,7 @@ MxS32 g_unk0x100f43f0[] = { }; // GLOBAL: LEGO1 0x100f4410 -LegoChar* g_unk0x100f4410[] = {"bd", "pg", "rd", "sy", "ro", "cl"}; +const LegoChar* g_unk0x100f4410[] = {"bd", "pg", "rd", "sy", "ro", "cl"}; // GLOBAL: LEGO1 0x100f4428 MxS32 g_unk0x100f4428[] = { @@ -68,7 +68,7 @@ MxS32 g_unk0x100f4428[] = { }; // GLOBAL: LEGO1 0x100f4458 -LegoChar* g_unk0x100f4458[] = {"papa", "nick", "laura", "cl", "pg", "rd", "sy"}; +const LegoChar* g_unk0x100f4458[] = {"papa", "nick", "laura", "cl", "pg", "rd", "sy"}; // FUNCTION: LEGO1 0x1004fce0 // FUNCTION: BETA10 0x1003a5a0 From 63f16fd776096bfb6b5ea0d063e54cf1001e9575 Mon Sep 17 00:00:00 2001 From: Margen67 Date: Mon, 23 Dec 2024 20:14:06 -0800 Subject: [PATCH 3/8] ci: Update actions (#1268) --- .github/workflows/analyze.yml | 2 +- .github/workflows/build.yml | 28 ++++++++++++++-------------- .github/workflows/format.yml | 4 ++-- .github/workflows/legobin.yml | 4 ++-- .github/workflows/naming.yml | 6 +++--- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index a8e33042..2a25072a 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: decomplint-isle: - name: '${{ matrix.who }} annotations' + name: ${{ matrix.who }} annotations runs-on: ubuntu-latest strategy: fail-fast: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e4f26c95..52b9958a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: uses: ./.github/workflows/legobin.yml build-current-toolchain: - name: 'Current ${{ matrix.toolchain.name }}' + name: Current ${{ matrix.toolchain.name }} runs-on: windows-latest defaults: run: @@ -35,7 +35,7 @@ jobs: - name: Setup cmake if: matrix.toolchain.setup-cmake - uses: jwlawson/actions-setup-cmake@v1.13 + uses: jwlawson/actions-setup-cmake@v2 - name: Setup ninja if: matrix.toolchain.setup-ninja @@ -68,11 +68,11 @@ jobs: - uses: actions/checkout@v4 with: - repository: 'itsmattkc/msvc420' + repository: itsmattkc/msvc420 path: msvc420 - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 + uses: jwlawson/actions-setup-cmake@v2 with: # Use minimum supported version cmake-version: '3.15.x' @@ -89,7 +89,7 @@ jobs: cmake --build build - name: Upload Artifact - uses: actions/upload-artifact@master + uses: actions/upload-artifact@main with: name: Win32 path: | @@ -101,24 +101,24 @@ jobs: build/LEGO1.PDB compare: - name: 'Compare with master' + name: Compare with master needs: [build, fetch-deps] runs-on: windows-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@main - uses: actions/setup-python@v5 with: python-version: '3.12' - - uses: actions/download-artifact@master + - uses: actions/download-artifact@main with: name: Win32 path: build - name: Restore cached original binaries id: cache-original-binaries - uses: actions/cache/restore@v3 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: legobin @@ -173,7 +173,7 @@ jobs: reccmp-datacmp --target LEGO1 - name: Upload Artifact - uses: actions/upload-artifact@master + uses: actions/upload-artifact@main with: name: Accuracy Report path: | @@ -182,21 +182,21 @@ jobs: LEGO1PROGRESS.* upload: - name: 'Upload artifacts' + name: Upload artifacts needs: [build, compare] runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/isle' }} steps: - uses: actions/checkout@v4 with: - repository: 'probonopd/uploadtool' + repository: probonopd/uploadtool - - uses: actions/download-artifact@master + - uses: actions/download-artifact@main with: name: Win32 path: build - - uses: actions/download-artifact@master + - uses: actions/download-artifact@main with: name: Accuracy Report diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 3f90c44f..74424665 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: clang-format: - name: 'C++' + name: C++ runs-on: ubuntu-latest steps: @@ -16,4 +16,4 @@ jobs: pipx run "clang-format>=17,<18" \ --style=file \ -i - git diff --exit-code \ No newline at end of file + git diff --exit-code diff --git a/.github/workflows/legobin.yml b/.github/workflows/legobin.yml index d9b42bc2..0fcf175f 100644 --- a/.github/workflows/legobin.yml +++ b/.github/workflows/legobin.yml @@ -10,7 +10,7 @@ jobs: - name: Restore cached original binaries id: cache-original-binaries - uses: actions/cache/restore@v3 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: legobin @@ -25,7 +25,7 @@ jobs: - name: Cache original binaries if: ${{ !steps.cache-original-binaries.outputs.cache-hit }} - uses: actions/cache/save@v3 + uses: actions/cache/save@v4 with: enableCrossOsArchive: true path: legobin diff --git a/.github/workflows/naming.yml b/.github/workflows/naming.yml index b31fe07b..15d57553 100644 --- a/.github/workflows/naming.yml +++ b/.github/workflows/naming.yml @@ -4,16 +4,16 @@ on: [push, pull_request] jobs: ncc: - name: 'C++' + name: C++ runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install LLVM and Clang - uses: KyleMayes/install-llvm-action@v1 + uses: KyleMayes/install-llvm-action@v2 with: - version: "16" + version: '16' - uses: actions/setup-python@v5 with: From bb29d289fe8c94c057d0807c90b84331c6cdea00 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Tue, 24 Dec 2024 09:50:37 -0500 Subject: [PATCH 4/8] SkateBoard: name m_unk0x160 -> m_pizzaVisible (#1269) --- LEGO1/lego/legoomni/include/skateboard.h | 4 ++-- LEGO1/lego/legoomni/src/actors/pizza.cpp | 8 ++++---- LEGO1/lego/legoomni/src/actors/skateboard.cpp | 10 +++++----- LEGO1/lego/legoomni/src/worlds/isle.cpp | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/LEGO1/lego/legoomni/include/skateboard.h b/LEGO1/lego/legoomni/include/skateboard.h index 1ac11709..519ab0be 100644 --- a/LEGO1/lego/legoomni/include/skateboard.h +++ b/LEGO1/lego/legoomni/include/skateboard.h @@ -34,7 +34,7 @@ public: MxLong HandleControl(LegoControlManagerNotificationParam& p_param) override; // vtable+0xd4 void Exit() override; // vtable+0xe4 - void SetUnknown0x160(MxBool p_unk0x160) { m_unk0x160 = p_unk0x160; } + void SetPizzaVisible(MxBool p_pizzaVisible) { m_pizzaVisible = p_pizzaVisible; } void ActivateSceneActions(); void EnableScenePresentation(MxBool p_enable); @@ -43,7 +43,7 @@ public: // SkateBoard::`scalar deleting destructor' private: - MxBool m_unk0x160; // 0x160 + MxBool m_pizzaVisible; // 0x160 Act1State* m_act1state; // 0x164 }; diff --git a/LEGO1/lego/legoomni/src/actors/pizza.cpp b/LEGO1/lego/legoomni/src/actors/pizza.cpp index 01ca5eb3..75eababc 100644 --- a/LEGO1/lego/legoomni/src/actors/pizza.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizza.cpp @@ -214,7 +214,7 @@ void Pizza::FUN_100382b0() TickleManager()->UnregisterClient(this); m_unk0x90 = INT_MIN; m_skateBoard->EnableScenePresentation(FALSE); - m_skateBoard->SetUnknown0x160(FALSE); + m_skateBoard->SetPizzaVisible(FALSE); MxTrace("Pizza mission: idle\n"); } } @@ -379,7 +379,7 @@ MxResult Pizza::Tickle() if (m_unk0x90 != INT_MIN && m_unk0x94 + m_unk0x90 <= time) { m_unk0x90 = INT_MIN; m_skateBoard->EnableScenePresentation(FALSE); - m_skateBoard->SetUnknown0x160(FALSE); + m_skateBoard->SetPizzaVisible(FALSE); TickleManager()->UnregisterClient(this); } @@ -425,7 +425,7 @@ MxResult Pizza::Tickle() assert(m_mission); if (Timer()->GetTime() > m_mission->m_startTime + 5000) { - m_skateBoard->SetUnknown0x160(FALSE); + m_skateBoard->SetPizzaVisible(FALSE); m_skateBoard->EnableScenePresentation(FALSE); TickleManager()->UnregisterClient(this); m_mission->UpdateScore(LegoState::e_grey); @@ -473,7 +473,7 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param) m_state->m_unk0x0c = 4; m_state->SetUnknown0xb0(IsleScript::c_noneIsle); UserActor()->SetActorState(LegoPathActor::c_initial); - m_skateBoard->SetUnknown0x160(TRUE); + m_skateBoard->SetPizzaVisible(TRUE); m_world->PlaceActor(m_skateBoard, "int37", 2, 0.5, 3, 0.5); #ifdef COMPAT_MODE diff --git a/LEGO1/lego/legoomni/src/actors/skateboard.cpp b/LEGO1/lego/legoomni/src/actors/skateboard.cpp index 9174a004..9b4735eb 100644 --- a/LEGO1/lego/legoomni/src/actors/skateboard.cpp +++ b/LEGO1/lego/legoomni/src/actors/skateboard.cpp @@ -20,7 +20,7 @@ DECOMP_SIZE_ASSERT(SkateBoard, 0x168) // FUNCTION: LEGO1 0x1000fd40 SkateBoard::SkateBoard() { - m_unk0x160 = FALSE; + m_pizzaVisible = FALSE; m_maxLinearVel = 15.0; m_unk0x150 = 3.5; m_unk0x148 = 1; @@ -60,7 +60,7 @@ void SkateBoard::Exit() Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor); pizza->StopActions(); pizza->FUN_100382b0(); - m_unk0x160 = FALSE; + m_pizzaVisible = FALSE; } IslePathActor::Exit(); @@ -97,7 +97,7 @@ MxLong SkateBoard::HandleClick() ControlManager()->Register(this); } - EnableScenePresentation(m_unk0x160); + EnableScenePresentation(m_pizzaVisible); Vector3 position = m_roi->GetWorldPosition(); AnimationManager()->FUN_10064670(&position); @@ -132,7 +132,7 @@ void SkateBoard::EnableScenePresentation(MxBool p_enable) if (presenter) { presenter->Enable(p_enable); } - else if (m_unk0x160) { + else if (m_pizzaVisible) { NotificationManager()->Send(this, MxNotificationParam(c_notificationType0, NULL)); } } @@ -141,7 +141,7 @@ void SkateBoard::EnableScenePresentation(MxBool p_enable) // FUNCTION: BETA10 0x100f5472 MxLong SkateBoard::HandleNotification0() { - EnableScenePresentation(m_unk0x160); + EnableScenePresentation(m_pizzaVisible); return 1; } diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index 604d514e..1d62e557 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -1226,7 +1226,7 @@ MxBool Isle::Escape() if (UserActor()) { if (UserActor()->GetActorId() != GameState()->GetActorId()) { ((IslePathActor*) UserActor())->Exit(); - m_skateboard->SetUnknown0x160(FALSE); + m_skateboard->SetPizzaVisible(FALSE); } } @@ -1272,7 +1272,7 @@ void Isle::FUN_10033350() if (UserActor()) { if (UserActor()->GetActorId() != GameState()->GetActorId()) { ((IslePathActor*) UserActor())->Exit(); - m_skateboard->SetUnknown0x160(FALSE); + m_skateboard->SetPizzaVisible(FALSE); } } From 7c41ff45698906bd8e4567d3278cefd8515c92c4 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Tue, 24 Dec 2024 11:38:15 -0700 Subject: [PATCH 5/8] Order compilation units according to retail, match and align `Score` class (#1271) * Initial changes for ordering, Score * Add mxdebug * Match `Score::Paint` * Refactor * Add BETA asserts * BETA match --- CMakeLists.txt | 391 +++++++++--------- LEGO1/lego/legoomni/include/ambulance.h | 10 +- LEGO1/lego/legoomni/include/legorace.h | 2 + LEGO1/lego/legoomni/include/pizza.h | 1 + LEGO1/lego/legoomni/include/score.h | 6 +- LEGO1/lego/legoomni/include/towtrack.h | 10 +- LEGO1/lego/legoomni/src/actors/helicopter.cpp | 4 + LEGO1/lego/legoomni/src/actors/pizza.cpp | 1 + LEGO1/lego/legoomni/src/race/legorace.cpp | 1 + LEGO1/lego/legoomni/src/worlds/score.cpp | 15 +- LEGO1/lego/sources/misc/legocontainer.h | 4 +- LEGO1/realtime/matrix.cpp | 5 - LEGO1/realtime/vector.cpp | 7 - 13 files changed, 232 insertions(+), 225 deletions(-) delete mode 100644 LEGO1/realtime/matrix.cpp delete mode 100644 LEGO1/realtime/vector.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index fddedcab..65e55304 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,15 +94,15 @@ function(add_lego_libraries NAME) set(SUFFIX "${ARG_SUFFIX}") add_library(tglrl${ARG_SUFFIX} STATIC - LEGO1/tgl/d3drm/camera.cpp - LEGO1/tgl/d3drm/device.cpp - LEGO1/tgl/d3drm/group.cpp - LEGO1/tgl/d3drm/light.cpp - LEGO1/tgl/d3drm/mesh.cpp - LEGO1/tgl/d3drm/meshbuilder.cpp LEGO1/tgl/d3drm/renderer.cpp LEGO1/tgl/d3drm/texture.cpp LEGO1/tgl/d3drm/view.cpp + LEGO1/tgl/d3drm/device.cpp + LEGO1/tgl/d3drm/group.cpp + LEGO1/tgl/d3drm/camera.cpp + LEGO1/tgl/d3drm/light.cpp + LEGO1/tgl/d3drm/meshbuilder.cpp + LEGO1/tgl/d3drm/mesh.cpp ) list(APPEND list_targets tglrl${ARG_SUFFIX}) set_property(TARGET tglrl${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "tglrl40$<$:d>${ARG_SUFFIX}") @@ -110,11 +110,9 @@ function(add_lego_libraries NAME) target_link_libraries(tglrl${ARG_SUFFIX} PRIVATE d3drm) add_library(realtime${ARG_SUFFIX} STATIC - LEGO1/realtime/matrix.cpp LEGO1/realtime/orientableroi.cpp LEGO1/realtime/realtime.cpp LEGO1/realtime/realtimeview.cpp - LEGO1/realtime/vector.cpp ) list(APPEND list_targets realtime${ARG_SUFFIX}) set_property(TARGET realtime${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "realtime$<$:d>${ARG_SUFFIX}") @@ -123,8 +121,8 @@ function(add_lego_libraries NAME) add_library(viewmanager${ARG_SUFFIX} STATIC LEGO1/viewmanager/viewlod.cpp - LEGO1/viewmanager/viewlodlist.cpp LEGO1/viewmanager/viewmanager.cpp + LEGO1/viewmanager/viewlodlist.cpp LEGO1/viewmanager/viewroi.cpp ) list(APPEND list_targets viewmanager${ARG_SUFFIX}) @@ -134,9 +132,9 @@ function(add_lego_libraries NAME) add_library(mxdirectx${ARG_SUFFIX} STATIC LEGO1/mxdirectx/mxdirect3d.cpp - LEGO1/mxdirectx/mxdirectdraw.cpp LEGO1/mxdirectx/mxdirectxinfo.cpp LEGO1/mxdirectx/legodxinfo.cpp + LEGO1/mxdirectx/mxdirectdraw.cpp ) list(APPEND list_targets mxdirectx${ARG_SUFFIX}) set_property(TARGET mxdirectx${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "MxDirectX$<$:d>${ARG_SUFFIX}") @@ -144,8 +142,8 @@ function(add_lego_libraries NAME) target_link_libraries(mxdirectx${ARG_SUFFIX} PRIVATE ddraw) add_library(roi${ARG_SUFFIX} STATIC - LEGO1/lego/sources/roi/legolod.cpp LEGO1/lego/sources/roi/legoroi.cpp + LEGO1/lego/sources/roi/legolod.cpp ) list(APPEND list_targets roi${ARG_SUFFIX}) set_property(TARGET roi${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "roi$<$:d>${ARG_SUFFIX}") @@ -154,8 +152,8 @@ function(add_lego_libraries NAME) add_library(geom${ARG_SUFFIX} STATIC LEGO1/lego/sources/geom/legoedge.cpp - LEGO1/lego/sources/geom/legounkown100db7f4.cpp LEGO1/lego/sources/geom/legoweedge.cpp + LEGO1/lego/sources/geom/legounkown100db7f4.cpp LEGO1/lego/sources/geom/legowegedge.cpp ) list(APPEND list_targets geom${ARG_SUFFIX}) @@ -164,11 +162,11 @@ function(add_lego_libraries NAME) target_link_libraries(geom${ARG_SUFFIX} PRIVATE) add_library(shape${ARG_SUFFIX} STATIC - LEGO1/lego/sources/shape/legocolor.cpp LEGO1/lego/sources/shape/legobox.cpp - LEGO1/lego/sources/shape/legomesh.cpp LEGO1/lego/sources/shape/legosphere.cpp LEGO1/lego/sources/shape/legovertex.cpp + LEGO1/lego/sources/shape/legomesh.cpp + LEGO1/lego/sources/shape/legocolor.cpp ) list(APPEND list_targets shape${ARG_SUFFIX}) set_property(TARGET shape${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "shape$<$:d>${ARG_SUFFIX}") @@ -183,10 +181,10 @@ function(add_lego_libraries NAME) target_include_directories(anim${ARG_SUFFIX} PRIVATE "${PROJECT_SOURCE_DIR}/LEGO1/omni/include" "${PROJECT_SOURCE_DIR}/LEGO1" "${PROJECT_SOURCE_DIR}/LEGO1/lego/sources" "${PROJECT_SOURCE_DIR}/util") add_library(misc${ARG_SUFFIX} STATIC - LEGO1/lego/sources/misc/legocontainer.cpp - LEGO1/lego/sources/misc/legoimage.cpp - LEGO1/lego/sources/misc/legostorage.cpp LEGO1/lego/sources/misc/legotexture.cpp + LEGO1/lego/sources/misc/legostorage.cpp + LEGO1/lego/sources/misc/legoimage.cpp + LEGO1/lego/sources/misc/legocontainer.cpp LEGO1/lego/sources/misc/legotree.cpp LEGO1/lego/sources/misc/legounknown.cpp ) @@ -196,8 +194,8 @@ function(add_lego_libraries NAME) target_link_libraries(misc${ARG_SUFFIX} PRIVATE) add_library(3dmanager${ARG_SUFFIX} STATIC - LEGO1/lego/sources/3dmanager/lego3dmanager.cpp LEGO1/lego/sources/3dmanager/lego3dview.cpp + LEGO1/lego/sources/3dmanager/lego3dmanager.cpp LEGO1/lego/sources/3dmanager/legoview1.cpp LEGO1/lego/sources/3dmanager/tglsurface.cpp ) @@ -207,86 +205,82 @@ function(add_lego_libraries NAME) target_link_libraries(3dmanager${ARG_SUFFIX} PRIVATE Vec::Vec) add_library(omni${ARG_SUFFIX} STATIC - LEGO1/omni/src/action/mxdsaction.cpp - LEGO1/omni/src/action/mxdsanim.cpp - LEGO1/omni/src/action/mxdsevent.cpp - LEGO1/omni/src/action/mxdsmediaaction.cpp - LEGO1/omni/src/action/mxdsmultiaction.cpp - LEGO1/omni/src/action/mxdsobjectaction.cpp - LEGO1/omni/src/action/mxdsobject.cpp - LEGO1/omni/src/action/mxdsparallelaction.cpp - LEGO1/omni/src/action/mxdsselectaction.cpp - LEGO1/omni/src/action/mxdsserialaction.cpp - LEGO1/omni/src/action/mxdssound.cpp - LEGO1/omni/src/action/mxdsstill.cpp - LEGO1/omni/src/action/mxdsstreamingaction.cpp - LEGO1/omni/src/audio/mxaudiomanager.cpp - LEGO1/omni/src/audio/mxaudiopresenter.cpp - LEGO1/omni/src/audio/mxloopingmidipresenter.cpp - LEGO1/omni/src/audio/mxmidipresenter.cpp - LEGO1/omni/src/audio/mxmusicmanager.cpp - LEGO1/omni/src/audio/mxmusicpresenter.cpp - LEGO1/omni/src/audio/mxsoundmanager.cpp - LEGO1/omni/src/audio/mxsoundpresenter.cpp - LEGO1/omni/src/audio/mxwavepresenter.cpp - LEGO1/omni/src/common/mxatom.cpp - LEGO1/omni/src/common/mxcompositepresenter.cpp - LEGO1/omni/src/common/mxcore.cpp + LEGO1/omni/src/notify/mxnotificationmanager.cpp LEGO1/omni/src/common/mxdebug.cpp - LEGO1/omni/src/common/mxmediamanager.cpp - LEGO1/omni/src/common/mxmediapresenter.cpp LEGO1/omni/src/common/mxmisc.cpp - LEGO1/omni/src/common/mxobjectfactory.cpp - LEGO1/omni/src/common/mxpresenter.cpp - LEGO1/omni/src/common/mxstring.cpp - LEGO1/omni/src/common/mxticklemanager.cpp + LEGO1/omni/src/common/mxatom.cpp + LEGO1/omni/src/action/mxdsaction.cpp LEGO1/omni/src/common/mxtimer.cpp - LEGO1/omni/src/common/mxutilities.cpp - LEGO1/omni/src/common/mxvariable.cpp - LEGO1/omni/src/common/mxvariabletable.cpp - LEGO1/omni/src/entity/mxentity.cpp - LEGO1/omni/src/event/mxeventmanager.cpp - LEGO1/omni/src/event/mxeventpresenter.cpp + LEGO1/omni/src/common/mxcore.cpp + LEGO1/omni/src/common/mxstring.cpp + LEGO1/omni/src/audio/mxsoundmanager.cpp LEGO1/omni/src/main/mxomni.cpp + LEGO1/omni/src/notify/mxactionnotificationparam.cpp LEGO1/omni/src/main/mxomnicreateflags.cpp LEGO1/omni/src/main/mxomnicreateparam.cpp - LEGO1/omni/src/notify/mxactionnotificationparam.cpp - LEGO1/omni/src/notify/mxnotificationmanager.cpp - LEGO1/omni/src/notify/mxnotificationparam.cpp - LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp - LEGO1/omni/src/stream/mxdiskstreamprovider.cpp - LEGO1/omni/src/stream/mxdsbuffer.cpp - LEGO1/omni/src/stream/mxdschunk.cpp - LEGO1/omni/src/stream/mxdsfile.cpp - LEGO1/omni/src/stream/mxdssubscriber.cpp - LEGO1/omni/src/stream/mxio.cpp - LEGO1/omni/src/stream/mxramstreamcontroller.cpp - LEGO1/omni/src/stream/mxramstreamprovider.cpp - LEGO1/omni/src/stream/mxstreamchunk.cpp - LEGO1/omni/src/stream/mxstreamcontroller.cpp - LEGO1/omni/src/stream/mxstreamer.cpp - LEGO1/omni/src/system/mxautolock.cpp - LEGO1/omni/src/system/mxcriticalsection.cpp - LEGO1/omni/src/system/mxscheduler.cpp - LEGO1/omni/src/system/mxsemaphore.cpp - LEGO1/omni/src/system/mxthread.cpp - LEGO1/omni/src/system/mxticklethread.cpp - LEGO1/omni/src/video/flic.cpp - LEGO1/omni/src/video/mxbitmap.cpp - LEGO1/omni/src/video/mxdisplaysurface.cpp + LEGO1/omni/src/common/mxobjectfactory.cpp + LEGO1/omni/src/audio/mxsoundpresenter.cpp + LEGO1/omni/src/audio/mxwavepresenter.cpp + LEGO1/omni/src/video/mxvideopresenter.cpp LEGO1/omni/src/video/mxflcpresenter.cpp + LEGO1/omni/src/video/mxsmkpresenter.cpp LEGO1/omni/src/video/mxloopingflcpresenter.cpp LEGO1/omni/src/video/mxloopingsmkpresenter.cpp - LEGO1/omni/src/video/mxpalette.cpp - LEGO1/omni/src/video/mxregion.cpp - LEGO1/omni/src/video/mxregioncursor.cpp - LEGO1/omni/src/video/mxsmack.cpp - LEGO1/omni/src/video/mxsmkpresenter.cpp + LEGO1/omni/src/common/mxpresenter.cpp + LEGO1/omni/src/common/mxmediapresenter.cpp + LEGO1/omni/src/common/mxcompositepresenter.cpp + LEGO1/omni/src/system/mxcriticalsection.cpp + LEGO1/omni/src/common/mxutilities.cpp + LEGO1/omni/src/common/mxvariabletable.cpp + LEGO1/omni/src/stream/mxdssubscriber.cpp + LEGO1/omni/src/common/mxmediamanager.cpp + LEGO1/omni/src/system/mxticklethread.cpp + LEGO1/omni/src/audio/mxaudiomanager.cpp + LEGO1/omni/src/system/mxautolock.cpp + LEGO1/omni/src/stream/mxstreamer.cpp LEGO1/omni/src/video/mxstillpresenter.cpp + LEGO1/omni/src/video/mxdisplaysurface.cpp + LEGO1/omni/src/video/mxbitmap.cpp + LEGO1/omni/src/video/flic.cpp + LEGO1/omni/src/common/mxticklemanager.cpp + LEGO1/omni/src/stream/mxdschunk.cpp LEGO1/omni/src/video/mxvideomanager.cpp - LEGO1/omni/src/video/mxvideoparam.cpp LEGO1/omni/src/video/mxvideoparamflags.cpp - LEGO1/omni/src/video/mxvideopresenter.cpp + LEGO1/omni/src/video/mxvideoparam.cpp + LEGO1/omni/src/video/mxpalette.cpp + LEGO1/omni/src/system/mxscheduler.cpp + LEGO1/omni/src/system/mxthread.cpp + LEGO1/omni/src/action/mxdsobject.cpp + LEGO1/omni/src/event/mxeventmanager.cpp + LEGO1/omni/src/audio/mxmusicmanager.cpp + LEGO1/omni/src/stream/mxstreamcontroller.cpp + LEGO1/omni/src/audio/mxmusicpresenter.cpp + LEGO1/omni/src/audio/mxmidipresenter.cpp + LEGO1/omni/src/audio/mxloopingmidipresenter.cpp + LEGO1/omni/src/event/mxeventpresenter.cpp + LEGO1/omni/src/stream/mxstreamchunk.cpp + LEGO1/omni/src/video/mxregioncursor.cpp + LEGO1/omni/src/video/mxregion.cpp + LEGO1/omni/src/video/mxsmack.cpp + LEGO1/omni/src/stream/mxramstreamcontroller.cpp + LEGO1/omni/src/stream/mxdsbuffer.cpp + LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp + LEGO1/omni/src/system/mxsemaphore.cpp + LEGO1/omni/src/action/mxdsobjectaction.cpp + LEGO1/omni/src/action/mxdsmediaaction.cpp + LEGO1/omni/src/action/mxdsanim.cpp + LEGO1/omni/src/action/mxdssound.cpp + LEGO1/omni/src/action/mxdsevent.cpp + LEGO1/omni/src/action/mxdsstill.cpp + LEGO1/omni/src/action/mxdsmultiaction.cpp + LEGO1/omni/src/action/mxdsserialaction.cpp + LEGO1/omni/src/action/mxdsparallelaction.cpp + LEGO1/omni/src/action/mxdsselectaction.cpp + LEGO1/omni/src/stream/mxdsfile.cpp + LEGO1/omni/src/stream/mxio.cpp + LEGO1/omni/src/action/mxdsstreamingaction.cpp + LEGO1/omni/src/stream/mxramstreamprovider.cpp + LEGO1/omni/src/stream/mxdiskstreamprovider.cpp ) list(APPEND list_targets omni${ARG_SUFFIX}) set_property(TARGET omni${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "omni$<$:d>${ARG_SUFFIX}") @@ -294,120 +288,121 @@ function(add_lego_libraries NAME) target_link_libraries(omni${ARG_SUFFIX} PRIVATE dsound winmm Smacker::Smacker) add_library(${NAME} SHARED - LEGO1/define.cpp - LEGO1/lego/legoomni/src/actors/act2actor.cpp - LEGO1/lego/legoomni/src/actors/act2genactor.cpp - LEGO1/lego/legoomni/src/actors/act3actors.cpp - LEGO1/lego/legoomni/src/actors/act3ammo.cpp - LEGO1/lego/legoomni/src/actors/ambulance.cpp - LEGO1/lego/legoomni/src/actors/bike.cpp - LEGO1/lego/legoomni/src/actors/buildingentity.cpp - LEGO1/lego/legoomni/src/actors/buildings.cpp - LEGO1/lego/legoomni/src/actors/bumpbouy.cpp - LEGO1/lego/legoomni/src/actors/doors.cpp - LEGO1/lego/legoomni/src/actors/dunebuggy.cpp + LEGO1/lego/legoomni/src/worlds/score.cpp LEGO1/lego/legoomni/src/actors/helicopter.cpp - LEGO1/lego/legoomni/src/actors/isleactor.cpp - LEGO1/lego/legoomni/src/actors/islepathactor.cpp - LEGO1/lego/legoomni/src/actors/jetski.cpp - LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp - LEGO1/lego/legoomni/src/actors/motorcycle.cpp - LEGO1/lego/legoomni/src/actors/pizza.cpp - LEGO1/lego/legoomni/src/actors/pizzeria.cpp - LEGO1/lego/legoomni/src/actors/racecar.cpp - LEGO1/lego/legoomni/src/actors/radio.cpp - LEGO1/lego/legoomni/src/actors/skateboard.cpp - LEGO1/lego/legoomni/src/actors/towtrack.cpp - LEGO1/lego/legoomni/src/audio/lego3dsound.cpp - LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp + LEGO1/lego/legoomni/src/worlds/gasstation.cpp LEGO1/lego/legoomni/src/audio/legocachsound.cpp - LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp - LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp - LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp - LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp - LEGO1/lego/legoomni/src/build/legocarbuild.cpp - LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp - LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp - LEGO1/lego/legoomni/src/common/legoactors.cpp - LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp - LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp - LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp - LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp - LEGO1/lego/legoomni/src/common/legocharactermanager.cpp - LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp - LEGO1/lego/legoomni/src/common/legogamestate.cpp + LEGO1/lego/legoomni/src/actors/act2actor.cpp LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp - LEGO1/lego/legoomni/src/common/legophoneme.cpp - LEGO1/lego/legoomni/src/common/legoplantmanager.cpp - LEGO1/lego/legoomni/src/common/legoplants.cpp - LEGO1/lego/legoomni/src/common/legostate.cpp - LEGO1/lego/legoomni/src/common/legotextureinfo.cpp - LEGO1/lego/legoomni/src/common/legoutils.cpp - LEGO1/lego/legoomni/src/common/legovariables.cpp - LEGO1/lego/legoomni/src/common/misc.cpp - LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp - LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp - LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp - LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp - LEGO1/lego/legoomni/src/control/legometerpresenter.cpp - LEGO1/lego/legoomni/src/entity/act2brick.cpp - LEGO1/lego/legoomni/src/entity/act2policestation.cpp - LEGO1/lego/legoomni/src/entity/legoactor.cpp - LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp - LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp + LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp + LEGO1/lego/legoomni/src/actors/buildingentity.cpp + LEGO1/lego/legoomni/src/actors/skateboard.cpp LEGO1/lego/legoomni/src/entity/legoentity.cpp - LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp - LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp - LEGO1/lego/legoomni/src/entity/legolocations.cpp - LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp - LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp - LEGO1/lego/legoomni/src/entity/legoworld.cpp - LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp - LEGO1/lego/legoomni/src/input/legoinputmanager.cpp - LEGO1/lego/legoomni/src/main/legomain.cpp - LEGO1/lego/legoomni/src/main/scripts.cpp - LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp - LEGO1/lego/legoomni/src/paths/legoanimactor.cpp - LEGO1/lego/legoomni/src/paths/legoextraactor.cpp - LEGO1/lego/legoomni/src/paths/legopathactor.cpp - LEGO1/lego/legoomni/src/paths/legopathboundary.cpp - LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp - LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp - LEGO1/lego/legoomni/src/paths/legopathstruct.cpp - LEGO1/lego/legoomni/src/race/carrace.cpp - LEGO1/lego/legoomni/src/race/jetskirace.cpp - LEGO1/lego/legoomni/src/race/legorace.cpp - LEGO1/lego/legoomni/src/race/legoraceactor.cpp - LEGO1/lego/legoomni/src/race/legoracemap.cpp + LEGO1/lego/legoomni/src/audio/lego3dsound.cpp + LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp LEGO1/lego/legoomni/src/race/legoracers.cpp - LEGO1/lego/legoomni/src/race/legoracespecial.cpp - LEGO1/lego/legoomni/src/race/raceskel.cpp - LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp - LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp - LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp - LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp - LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp - LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp - LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp - LEGO1/lego/legoomni/src/video/legopartpresenter.cpp + LEGO1/lego/legoomni/src/race/legoraceactor.cpp + LEGO1/lego/legoomni/src/common/legostate.cpp + LEGO1/lego/legoomni/src/actors/buildings.cpp + LEGO1/lego/legoomni/src/common/misc.cpp + LEGO1/lego/legoomni/src/race/legorace.cpp + LEGO1/lego/legoomni/src/race/jetskirace.cpp + LEGO1/lego/legoomni/src/race/carrace.cpp + LEGO1/lego/legoomni/src/actors/pizzeria.cpp + LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp + LEGO1/lego/legoomni/src/actors/act2genactor.cpp + LEGO1/lego/legoomni/src/actors/islepathactor.cpp + LEGO1/lego/legoomni/src/paths/legopathstruct.cpp + LEGO1/lego/legoomni/src/paths/legoanimactor.cpp + LEGO1/lego/legoomni/src/entity/legoworld.cpp + LEGO1/lego/legoomni/src/build/legocarbuild.cpp + LEGO1/lego/legoomni/src/actors/ambulance.cpp + LEGO1/lego/legoomni/src/common/legoplantmanager.cpp + LEGO1/lego/legoomni/src/actors/bumpbouy.cpp + LEGO1/modeldb/modeldb.cpp + LEGO1/lego/legoomni/src/actors/pizza.cpp + LEGO1/lego/legoomni/src/actors/racecar.cpp + LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp + LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp + LEGO1/lego/legoomni/src/paths/legoextraactor.cpp + LEGO1/lego/legoomni/src/actors/isleactor.cpp + LEGO1/lego/legoomni/src/actors/radio.cpp + LEGO1/lego/legoomni/src/entity/legoactor.cpp + LEGO1/lego/legoomni/src/paths/legopathactor.cpp + LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp + LEGO1/lego/legoomni/src/worlds/isle.cpp + LEGO1/lego/legoomni/src/actors/motorcycle.cpp + LEGO1/lego/legoomni/src/actors/act3ammo.cpp + LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp + LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp + LEGO1/lego/legoomni/src/common/legogamestate.cpp + LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp + LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp + LEGO1/lego/legoomni/src/common/legoutils.cpp + LEGO1/lego/legoomni/src/actors/act3actors.cpp + LEGO1/lego/legoomni/src/control/legometerpresenter.cpp + LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp + LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp + LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp + LEGO1/lego/legoomni/src/common/legophoneme.cpp + LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp + LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp + LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp + LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp + LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp + LEGO1/lego/legoomni/src/actors/towtrack.cpp + LEGO1/lego/legoomni/src/entity/act2policestation.cpp LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp - LEGO1/lego/legoomni/src/video/legovideomanager.cpp - LEGO1/lego/legoomni/src/worlds/act3.cpp - LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp - LEGO1/lego/legoomni/src/worlds/gasstation.cpp - LEGO1/lego/legoomni/src/worlds/historybook.cpp - LEGO1/lego/legoomni/src/worlds/hospital.cpp - LEGO1/lego/legoomni/src/worlds/infocenter.cpp - LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp - LEGO1/lego/legoomni/src/worlds/isle.cpp - LEGO1/lego/legoomni/src/worlds/jukebox.cpp LEGO1/lego/legoomni/src/worlds/legoact2.cpp + LEGO1/lego/legoomni/src/common/legovariables.cpp + LEGO1/lego/legoomni/src/main/scripts.cpp + LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp + LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp + LEGO1/lego/legoomni/src/paths/legopathboundary.cpp + LEGO1/lego/legoomni/src/main/legomain.cpp + LEGO1/lego/legoomni/src/input/legoinputmanager.cpp + LEGO1/lego/legoomni/src/race/legoracemap.cpp + LEGO1/lego/legoomni/src/worlds/jukebox.cpp + LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp LEGO1/lego/legoomni/src/worlds/police.cpp + LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp + LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp + LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp + LEGO1/lego/legoomni/src/common/legotextureinfo.cpp + LEGO1/lego/legoomni/src/actors/doors.cpp + LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp + LEGO1/lego/legoomni/src/actors/dunebuggy.cpp + LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp + LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp + LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp + LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp + LEGO1/lego/legoomni/src/worlds/infocenter.cpp + LEGO1/lego/legoomni/src/race/raceskel.cpp + LEGO1/lego/legoomni/src/worlds/act3.cpp + LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp + LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp + LEGO1/lego/legoomni/src/worlds/hospital.cpp + LEGO1/lego/legoomni/src/actors/bike.cpp + LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp LEGO1/lego/legoomni/src/worlds/registrationbook.cpp - LEGO1/lego/legoomni/src/worlds/score.cpp + LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp + LEGO1/lego/legoomni/src/entity/act2brick.cpp + LEGO1/lego/legoomni/src/video/legovideomanager.cpp + LEGO1/lego/legoomni/src/video/legopartpresenter.cpp + LEGO1/lego/legoomni/src/actors/jetski.cpp + LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp + LEGO1/lego/legoomni/src/race/legoracespecial.cpp + LEGO1/lego/legoomni/src/worlds/historybook.cpp + LEGO1/lego/legoomni/src/common/legocharactermanager.cpp + LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp LEGO1/main.cpp - LEGO1/modeldb/modeldb.cpp + # We need to get rid of / refactor the below units into existing/other ones + LEGO1/lego/legoomni/src/entity/legolocations.cpp + LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp + LEGO1/lego/legoomni/src/common/legoactors.cpp + LEGO1/define.cpp + LEGO1/lego/legoomni/src/common/legoplants.cpp ) list(APPEND list_targets ${NAME}) @@ -430,20 +425,20 @@ function(add_lego_libraries NAME) # Link libraries target_link_libraries(${NAME} PRIVATE - tglrl${ARG_SUFFIX} - viewmanager${ARG_SUFFIX} - realtime${ARG_SUFFIX} - mxdirectx${ARG_SUFFIX} - roi${ARG_SUFFIX} - geom${ARG_SUFFIX} - anim${ARG_SUFFIX} - Vec::Vec dinput - dxguid misc${ARG_SUFFIX} + geom${ARG_SUFFIX} + mxdirectx${ARG_SUFFIX} + anim${ARG_SUFFIX} + tglrl${ARG_SUFFIX} + realtime${ARG_SUFFIX} + viewmanager${ARG_SUFFIX} + roi${ARG_SUFFIX} 3dmanager${ARG_SUFFIX} omni${ARG_SUFFIX} shape${ARG_SUFFIX} + Vec::Vec + dxguid ) foreach(tgt IN LISTS list_targets) diff --git a/LEGO1/lego/legoomni/include/ambulance.h b/LEGO1/lego/legoomni/include/ambulance.h index e6d2a4aa..09028188 100644 --- a/LEGO1/lego/legoomni/include/ambulance.h +++ b/LEGO1/lego/legoomni/include/ambulance.h @@ -29,22 +29,28 @@ public: MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c + // FUNCTION: BETA10 0x10088770 MxS16 GetHighScore(MxU8 p_actorId) { switch (p_actorId) { case LegoActor::c_pepper: return m_peHighScore; + break; case LegoActor::c_mama: return m_maHighScore; + break; case LegoActor::c_papa: return m_paHighScore; + break; case LegoActor::c_nick: return m_niHighScore; + break; case LegoActor::c_laura: return m_laHighScore; - default: - return 0; + break; } + + return 0; } // FUNCTION: BETA10 0x100242d0 diff --git a/LEGO1/lego/legoomni/include/legorace.h b/LEGO1/lego/legoomni/include/legorace.h index 642d26cb..43368f99 100644 --- a/LEGO1/lego/legoomni/include/legorace.h +++ b/LEGO1/lego/legoomni/include/legorace.h @@ -34,6 +34,8 @@ public: } MxS16 GetUnknown0x02() { return m_unk0x02; } + + // FUNCTION: BETA10 0x10088970 MxS16 GetHighScore() { return m_score; } // FUNCTION: BETA10 0x100c96f0 diff --git a/LEGO1/lego/legoomni/include/pizza.h b/LEGO1/lego/legoomni/include/pizza.h index 771d1178..b08e5310 100644 --- a/LEGO1/lego/legoomni/include/pizza.h +++ b/LEGO1/lego/legoomni/include/pizza.h @@ -148,6 +148,7 @@ public: // FUNCTION: BETA10 0x100ef850 MxU32 GetUnknown0xb0() { return m_unk0xb0; } + // FUNCTION: BETA10 0x10088850 MxS16 GetHighScore(MxU8 p_actorId) { return GetMission(p_actorId)->m_hiScore; } // SYNTHETIC: LEGO1 0x10039350 diff --git a/LEGO1/lego/legoomni/include/score.h b/LEGO1/lego/legoomni/include/score.h index 0d1f9da5..28a67434 100644 --- a/LEGO1/lego/legoomni/include/score.h +++ b/LEGO1/lego/legoomni/include/score.h @@ -59,6 +59,9 @@ public: ~Score() override; MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x100010b0 + MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c + // FUNCTION: LEGO1 0x100010c0 // FUNCTION: BETA10 0x100f4f20 const char* ClassName() const override // vtable+0x0c @@ -78,14 +81,13 @@ public: MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 void ReadyWorld() override; // vtable+0x50 - MxBool VTable0x5c() override; // vtable+0x5c MxBool Escape() override; // vtable+0x64 void Enable(MxBool p_enable) override; // vtable+0x68 void Paint(); MxLong FUN_10001510(MxEndActionNotificationParam& p_param); MxLong FUN_100016d0(LegoControlManagerNotificationParam& p_param); - void FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score); + void FillArea(MxS32 i_activity, MxS32 i_actor, MxS16 score); protected: void DeleteScript(); diff --git a/LEGO1/lego/legoomni/include/towtrack.h b/LEGO1/lego/legoomni/include/towtrack.h index e20e098f..4bf7d84a 100644 --- a/LEGO1/lego/legoomni/include/towtrack.h +++ b/LEGO1/lego/legoomni/include/towtrack.h @@ -30,22 +30,28 @@ public: MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c + // FUNCTION: BETA10 0x10088890 MxS16 GetHighScore(MxU8 p_actorId) { switch (p_actorId) { case LegoActor::c_pepper: return m_peHighScore; + break; case LegoActor::c_mama: return m_maHighScore; + break; case LegoActor::c_papa: return m_paHighScore; + break; case LegoActor::c_nick: return m_niHighScore; + break; case LegoActor::c_laura: return m_laHighScore; - default: - return 0; + break; } + + return 0; } // FUNCTION: BETA10 0x100f8530 diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index 8d88e6bf..e0bcdbea 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -21,8 +21,12 @@ DECOMP_SIZE_ASSERT(Helicopter, 0x230) DECOMP_SIZE_ASSERT(HelicopterState, 0x0c) +DECOMP_SIZE_ASSERT(Vector2, 0x08) +DECOMP_SIZE_ASSERT(Vector3, 0x08) +DECOMP_SIZE_ASSERT(Vector4, 0x08) DECOMP_SIZE_ASSERT(Mx3DPointFloat, 0x14) DECOMP_SIZE_ASSERT(Mx4DPointFloat, 0x18) +DECOMP_SIZE_ASSERT(Matrix4, 0x08) DECOMP_SIZE_ASSERT(MxMatrix, 0x48) // FUNCTION: LEGO1 0x10001e60 diff --git a/LEGO1/lego/legoomni/src/actors/pizza.cpp b/LEGO1/lego/legoomni/src/actors/pizza.cpp index 75eababc..7fd07808 100644 --- a/LEGO1/lego/legoomni/src/actors/pizza.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizza.cpp @@ -624,6 +624,7 @@ MxResult PizzaMissionState::Serialize(LegoFile* p_file) } // FUNCTION: LEGO1 0x10039510 +// FUNCTION: BETA10 0x100eed45 PizzaMissionState::Mission* PizzaMissionState::GetMission(MxU8 p_actorId) { for (MxS16 i = 0; i < 5; i++) { diff --git a/LEGO1/lego/legoomni/src/race/legorace.cpp b/LEGO1/lego/legoomni/src/race/legorace.cpp index c9a878ad..355e2914 100644 --- a/LEGO1/lego/legoomni/src/race/legorace.cpp +++ b/LEGO1/lego/legoomni/src/race/legorace.cpp @@ -165,6 +165,7 @@ MxResult RaceState::Serialize(LegoFile* p_file) } // FUNCTION: LEGO1 0x10016280 +// FUNCTION: BETA10 0x100c7dfd RaceState::Entry* RaceState::GetState(MxU8 p_id) { for (MxS16 i = 0;; i++) { diff --git a/LEGO1/lego/legoomni/src/worlds/score.cpp b/LEGO1/lego/legoomni/src/worlds/score.cpp index e58d57aa..d1547fb8 100644 --- a/LEGO1/lego/legoomni/src/worlds/score.cpp +++ b/LEGO1/lego/legoomni/src/worlds/score.cpp @@ -32,12 +32,6 @@ Score::Score() NotificationManager()->Register(this); } -// FUNCTION: LEGO1 0x100010b0 -MxBool Score::VTable0x5c() -{ - return TRUE; -} - // FUNCTION: LEGO1 0x10001200 Score::~Score() { @@ -260,7 +254,8 @@ void Score::Paint() memset(&desc, 0, sizeof(desc)); desc.dwSize = sizeof(desc); - if (cube->m_surface->Lock(NULL, &desc, 0, NULL) == DD_OK) { + HRESULT result = cube->m_surface->Lock(NULL, &desc, DDLOCK_SURFACEMEMORYPTR, NULL); + if (result == DD_OK) { if (desc.lPitch != desc.dwWidth) { cube->m_surface->Unlock(desc.lpSurface); return; @@ -296,7 +291,7 @@ void Score::Paint() // FUNCTION: LEGO1 0x10001d20 // FUNCTION: BETA10 0x100f4a52 -void Score::FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score) +void Score::FillArea(MxS32 i_activity, MxS32 i_actor, MxS16 score) { MxS32 local3c[] = {0x2b00, 0x5700, 0x8000, 0xab00, 0xd600}; MxS32 local14[] = {0x2a, 0x27, 0x29, 0x29, 0x2a}; @@ -304,6 +299,10 @@ void Score::FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score) MxS32 local28[] = {0x25, 0x29, 0x27, 0x28, 0x28}; MxS32 colors[] = {0x11, 0x0f, 0x08, 0x05}; + assert(i_activity >= 0 && i_activity < 5); + assert(i_actor >= 0 && i_actor < 5); + assert(score >= 0 && score < 4); + MxU8* ptr = m_surface + local3c[i_actor] + local50[i_activity]; MxS32 color = colors[score]; MxS32 size = local28[i_activity]; diff --git a/LEGO1/lego/sources/misc/legocontainer.h b/LEGO1/lego/sources/misc/legocontainer.h index 0fbcb3d5..72db3332 100644 --- a/LEGO1/lego/sources/misc/legocontainer.h +++ b/LEGO1/lego/sources/misc/legocontainer.h @@ -57,7 +57,6 @@ public: } } - // FUNCTION: BETA10 0x1007bc00 T* Get(const char* p_name) { T* value = NULL; @@ -197,4 +196,7 @@ protected: // _Tree,map >::_Kfn,LegoContainerInfoComparator,allocator >::_Nil // clang-format on +// TEMPLATE: BETA10 0x1007bc00 +// LegoContainer::Get + #endif // LEGOCONTAINER_H diff --git a/LEGO1/realtime/matrix.cpp b/LEGO1/realtime/matrix.cpp deleted file mode 100644 index c1de1535..00000000 --- a/LEGO1/realtime/matrix.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "matrix.h" - -#include "decomp.h" - -DECOMP_SIZE_ASSERT(Matrix4, 0x08); diff --git a/LEGO1/realtime/vector.cpp b/LEGO1/realtime/vector.cpp deleted file mode 100644 index ad09b0b0..00000000 --- a/LEGO1/realtime/vector.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "vector.h" - -#include "decomp.h" - -DECOMP_SIZE_ASSERT(Vector2, 0x08); -DECOMP_SIZE_ASSERT(Vector3, 0x08); -DECOMP_SIZE_ASSERT(Vector4, 0x08); From c2c9c75f1abe2d2b8343d91a39918f0c4c880d1f Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Tue, 24 Dec 2024 14:21:26 -0700 Subject: [PATCH 6/8] Fix `Vector2`/`Vector3` order (#1272) * Fix Vector2/Vector3 order * Refactor vector classes to be const and reference param consistent * Add BETA10 annotations and fixes --- LEGO1/lego/legoomni/include/legoentity.h | 2 + LEGO1/lego/legoomni/src/actors/act2actor.cpp | 6 +- LEGO1/lego/legoomni/src/actors/act3actors.cpp | 24 +-- LEGO1/lego/legoomni/src/actors/act3ammo.cpp | 14 +- LEGO1/lego/legoomni/src/actors/helicopter.cpp | 8 +- .../legoomni/src/actors/islepathactor.cpp | 4 +- .../src/build/legocarbuildpresenter.cpp | 2 +- .../src/common/legoanimationmanager.cpp | 4 +- .../src/common/legobuildingmanager.cpp | 6 +- .../legoomni/src/common/legoplantmanager.cpp | 6 +- .../src/entity/legojetskiraceactor.cpp | 2 +- .../legoomni/src/paths/legoextraactor.cpp | 40 ++-- .../lego/legoomni/src/paths/legopathactor.cpp | 18 +- .../legoomni/src/paths/legopathboundary.cpp | 20 +- .../legoomni/src/paths/legopathcontroller.cpp | 16 +- .../legoomni/src/race/legoracespecial.cpp | 6 +- .../legoomni/src/video/legoanimpresenter.cpp | 4 +- .../src/video/legoloopinganimpresenter.cpp | 4 +- LEGO1/lego/legoomni/src/worlds/legoact2.cpp | 4 +- LEGO1/lego/sources/anim/legoanim.cpp | 4 +- LEGO1/lego/sources/geom/legowegedge.cpp | 16 +- LEGO1/lego/sources/misc/legounknown.cpp | 4 +- LEGO1/lego/sources/roi/legoroi.cpp | 24 +-- LEGO1/mxgeometry/mxgeometry3d.h | 4 +- LEGO1/realtime/vector.h | 194 +++++++++--------- LEGO1/viewmanager/viewmanager.cpp | 4 +- 26 files changed, 223 insertions(+), 217 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoentity.h b/LEGO1/lego/legoomni/include/legoentity.h index ae9aadab..eecf6867 100644 --- a/LEGO1/lego/legoomni/include/legoentity.h +++ b/LEGO1/lego/legoomni/include/legoentity.h @@ -86,6 +86,8 @@ public: MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; } MxBool GetFlagsIsSet(MxU8 p_flag) { return m_flags & p_flag; } MxU8 GetFlags() { return m_flags; } + + // FUNCTION: BETA10 0x10049db0 MxFloat GetWorldSpeed() { return m_worldSpeed; } // FUNCTION: BETA10 0x1000f2f0 diff --git a/LEGO1/lego/legoomni/src/actors/act2actor.cpp b/LEGO1/lego/legoomni/src/actors/act2actor.cpp index 6d0ebba6..2a66642d 100644 --- a/LEGO1/lego/legoomni/src/actors/act2actor.cpp +++ b/LEGO1/lego/legoomni/src/actors/act2actor.cpp @@ -311,7 +311,7 @@ void Act2Actor::Animate(float p_time) local30 -= local60; local30.Unitize(); - MxFloat dotproduct = local18.Dot(&local30, &local18); + MxFloat dotproduct = local18.Dot(local30, local18); if (dotproduct >= 0.0) { const MxFloat* pepperWorldPosition = roiPepper->GetWorldPosition(); @@ -613,9 +613,9 @@ MxU32 Act2Actor::FUN_10019700(MxFloat p_param) col2 = col3; col2 -= m_unk0x4c->GetROI()->GetWorldPosition(); col2.Unitize(); - col0.EqualsCross(&col1, &col2); + col0.EqualsCross(col1, col2); col0.Unitize(); - col1.EqualsCross(&col2, &col0); + col1.EqualsCross(col2, col0); assert(!m_cameraFlag); diff --git a/LEGO1/lego/legoomni/src/actors/act3actors.cpp b/LEGO1/lego/legoomni/src/actors/act3actors.cpp index f5a5c5a4..e34baf4c 100644 --- a/LEGO1/lego/legoomni/src/actors/act3actors.cpp +++ b/LEGO1/lego/legoomni/src/actors/act3actors.cpp @@ -238,7 +238,7 @@ void Act3Cop::ParseAction(char* p_extra) for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) { Mx4DPointFloat* edgeNormal = boundary->GetEdgeNormal(j); - if (point.Dot(edgeNormal, &point) + edgeNormal->index_operator(3) < -0.001) { + if (point.Dot(*edgeNormal, point) + edgeNormal->index_operator(3) < -0.001) { MxTrace("Bad Act3 cop destination %d\n", i); break; } @@ -246,8 +246,8 @@ void Act3Cop::ParseAction(char* p_extra) Mx4DPointFloat* boundary0x14 = boundary->GetUnknown0x14(); - if (point.Dot(&point, boundary0x14) + boundary0x14->index_operator(3) <= 0.001 && - point.Dot(&point, boundary0x14) + boundary0x14->index_operator(3) >= -0.001) { + if (point.Dot(point, *boundary0x14) + boundary0x14->index_operator(3) <= 0.001 && + point.Dot(point, *boundary0x14) + boundary0x14->index_operator(3) >= -0.001) { continue; } @@ -496,9 +496,9 @@ MxResult Act3Cop::FUN_10040360() v3 = v4; v3 -= vecUnk; v3.Unitize(); - v1.EqualsCross(&v2, &v3); + v1.EqualsCross(v2, v3); v1.Unitize(); - v2.EqualsCross(&v3, &v1); + v2.EqualsCross(v3, v1); VTable0x9c(); } @@ -628,9 +628,9 @@ void Act3Brickster::Animate(float p_time) localc = local20; localc -= m_pInfo->m_position; localc.Unitize(); - local14.EqualsCross(&local28, &localc); + local14.EqualsCross(local28, localc); local14.Unitize(); - local28.EqualsCross(&localc, &local14); + local28.EqualsCross(localc, local14); assert(!m_cameraFlag); @@ -675,9 +675,9 @@ void Act3Brickster::Animate(float p_time) local80 -= m_unk0x3c; local80.Unitize(); - local88.EqualsCross(&local9c, &local80); + local88.EqualsCross(local9c, local80); local88.Unitize(); - local9c.EqualsCross(&local80, &local88); + local9c.EqualsCross(local80, local88); assert(!m_cameraFlag); @@ -991,9 +991,9 @@ MxResult Act3Brickster::FUN_100417c0() v3 = v4; v3 -= vecUnk; v3.Unitize(); - v1.EqualsCross(&v2, &v3); + v1.EqualsCross(v2, v3); v1.Unitize(); - v2.EqualsCross(&v3, &v1); + v2.EqualsCross(v3, v1); VTable0x9c(); @@ -1087,7 +1087,7 @@ MxS32 Act3Brickster::FUN_10042300() local18 = local64[local1c]; local18 -= local38; - if (maxE == NULL || (local18.Dot(&local94, &local18) < 0.0f && local78 < local98)) { + if (maxE == NULL || (local18.Dot(local94, local18) < 0.0f && local78 < local98)) { maxE = e; m_boundary = boundaries[i]; local78 = local98; diff --git a/LEGO1/lego/legoomni/src/actors/act3ammo.cpp b/LEGO1/lego/legoomni/src/actors/act3ammo.cpp index ed98b7c6..2eaae385 100644 --- a/LEGO1/lego/legoomni/src/actors/act3ammo.cpp +++ b/LEGO1/lego/legoomni/src/actors/act3ammo.cpp @@ -227,12 +227,12 @@ MxResult Act3Ammo::FUN_10053db0(float p_param1, const Matrix4& p_param2) local14[1] = local14[2] = 0.0f; local14[0] = 1.0f; - local3c.EqualsCross(&localc, &local14); + local3c.EqualsCross(localc, local14); if (local3c.Unitize() != 0) { local14[0] = local14[1] = 0.0f; local14[2] = 1.0f; - local3c.EqualsCross(&localc, &local14); + local3c.EqualsCross(localc, local14); if (local3c.Unitize() != 0) { assert(0); @@ -240,7 +240,7 @@ MxResult Act3Ammo::FUN_10053db0(float p_param1, const Matrix4& p_param2) } } - local14.EqualsCross(&local3c, &localc); + local14.EqualsCross(local3c, localc); return SUCCESS; } @@ -340,17 +340,17 @@ void Act3Ammo::Animate(float p_time) local184 = *m_boundary->GetUnknown0x14(); local17c[0] = 1.0f; local17c[1] = local17c[2] = 0.0f; - local174.EqualsCross(&local17c, &local184); + local174.EqualsCross(local17c, local184); local174.Unitize(); - local17c.EqualsCross(&local184, &local174); + local17c.EqualsCross(local184, local174); } else { local17c = *m_boundary->GetUnknown0x14(); local184[0] = 1.0f; local184[1] = local184[2] = 0.0f; - local174.EqualsCross(&local17c, &local184); + local174.EqualsCross(local17c, local184); local174.Unitize(); - local184.EqualsCross(&local174, &local17c); + local184.EqualsCross(local174, local17c); } } diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index e0bcdbea..059145ae 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -251,8 +251,8 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) Mx3DPointFloat v68, va4, up; Mx3DPointFloat v90(0, 1, 0); v68 = m_world->GetCamera()->GetWorldUp(); - va4.EqualsCross(&v68, &direction); - up.EqualsCross(&va4, &v90); + va4.EqualsCross(v68, direction); + up.EqualsCross(va4, v90); if (isPizza) { if (((Act3*) m_world)->ShootPizza(m_pathController, location, direction, up) != SUCCESS) { @@ -457,9 +457,9 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix) vec5[0] = vec5[2] = 0.0f; vec5[1] = -1.0f; - vec3.EqualsCross(&vec4, &vec5); + vec3.EqualsCross(vec4, vec5); vec3.Unitize(); - vec4.EqualsCross(&vec5, &vec3); + vec4.EqualsCross(vec5, vec3); vec6 = vec2; local90 = m_unk0x1a8; diff --git a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp index f1d13949..4ae6272a 100644 --- a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp +++ b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp @@ -133,7 +133,7 @@ void IslePathActor::Exit() for (j = 0; j < m_boundary->GetNumEdges(); j++) { Mx4DPointFloat& normal = *m_boundary->GetEdgeNormal(j); - if (local20.Dot(&normal, &local20) + normal[3] < -0.001) { + if (local20.Dot(normal, local20) + normal[3] < -0.001) { break; } } @@ -645,7 +645,7 @@ void IslePathActor::FUN_1001b660() Vector3 up(transform[2]); up *= -1.0f; - position.EqualsCross(&direction, &up); + position.EqualsCross(direction, up); m_roi->FUN_100a58f0(transform); m_roi->VTable0x14(); } diff --git a/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp index e3729cf4..b19fbcc8 100644 --- a/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp @@ -550,7 +550,7 @@ void LegoCarBuildAnimPresenter::RotateAroundYAxis(MxFloat p_angle) Mx4DPointFloat newRotation; additionalRotation.NormalizeQuaternion(); - newRotation.EqualsHamiltonProduct(¤tRotation, &additionalRotation); + newRotation.EqualsHamiltonProduct(currentRotation, additionalRotation); if (newRotation[3] < 0.9999) { rotationKey->FUN_100739a0(TRUE); diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index 783b1eee..6ce38281 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -1596,7 +1596,7 @@ MxU16 LegoAnimationManager::FUN_10062110( if (GetViewManager()->IsBoundingBoxInFrustum(p_roi->GetWorldBoundingBox())) { Mx3DPointFloat direction(p_roi->GetWorldDirection()); - if (direction.Dot(&direction, &p_direction) > 0.707) { + if (direction.Dot(direction, p_direction) > 0.707) { Mx3DPointFloat position(p_roi->GetWorldPosition()); position -= p_position; @@ -2525,7 +2525,7 @@ MxBool LegoAnimationManager::FUN_10064120(LegoLocation::Boundary* p_boundary, Mx for (i = 0; i < numEdges; i++) { e = (LegoUnknown100db7f4*) boundary->GetEdges()[i]; e->FUN_1002ddc0(*boundary, vec); - float dot = vec.Dot(&direction, &vec); + float dot = vec.Dot(direction, vec); if (dot > local4c) { local50 = e; diff --git a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp index 9e1ddf62..53544ef9 100644 --- a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp @@ -809,7 +809,7 @@ MxResult LegoBuildingManager::FUN_10030630() for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) { Mx4DPointFloat* normal = boundary->GetEdgeNormal(j); - if (position.Dot(normal, &position) + (*normal).index_operator(3) < -0.001) { + if (position.Dot(*normal, position) + (*normal).index_operator(3) < -0.001) { MxTrace( "Building %d shot location (%g, %g, %g) is not in boundary %s.\n", i, @@ -826,8 +826,8 @@ MxResult LegoBuildingManager::FUN_10030630() if (g_buildingInfo[i].m_boundary != NULL) { Mx4DPointFloat& unk0x14 = *g_buildingInfo[i].m_boundary->GetUnknown0x14(); - if (position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) > 0.001 || - position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) < -0.001) { + if (position.Dot(position, unk0x14) + unk0x14.index_operator(3) > 0.001 || + position.Dot(position, unk0x14) + unk0x14.index_operator(3) < -0.001) { g_buildingInfo[i].m_y = -((position[0] * unk0x14.index_operator(0) + unk0x14.index_operator(3) + diff --git a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp index 22b5cc80..2e7b0491 100644 --- a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp @@ -145,7 +145,7 @@ MxResult LegoPlantManager::FUN_10026410() for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) { Mx4DPointFloat* normal = boundary->GetEdgeNormal(j); - if (position.Dot(normal, &position) + (*normal).index_operator(3) < -0.001) { + if (position.Dot(*normal, position) + (*normal).index_operator(3) < -0.001) { MxTrace( "Plant %d shot location (%g, %g, %g) is not in boundary %s.\n", i, @@ -162,8 +162,8 @@ MxResult LegoPlantManager::FUN_10026410() if (g_plantInfo[i].m_boundary != NULL) { Mx4DPointFloat& unk0x14 = *g_plantInfo[i].m_boundary->GetUnknown0x14(); - if (position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) > 0.001 || - position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) < -0.001) { + if (position.Dot(position, unk0x14) + unk0x14.index_operator(3) > 0.001 || + position.Dot(position, unk0x14) + unk0x14.index_operator(3) < -0.001) { g_plantInfo[i].m_y = -((position[0] * unk0x14.index_operator(0) + unk0x14.index_operator(3) + diff --git a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp index 0ca0335f..af3dd04c 100644 --- a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp @@ -90,7 +90,7 @@ MxS32 LegoJetskiRaceActor::VTable0x1c(LegoPathBoundary* p_boundary, LegoEdge* p_ LERP3(a, *v1, *v2, m_unk0xe4); m_destEdge->FUN_1002ddc0(*m_boundary, bbb); - c.EqualsCross(&bbb, m_boundary->GetUnknown0x14()); + c.EqualsCross(bbb, *m_boundary->GetUnknown0x14()); c.Unitize(); Mx3DPointFloat worldDirection(m_roi->GetWorldDirection()); diff --git a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp index 23d98359..ee83769e 100644 --- a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp @@ -138,7 +138,7 @@ MxResult LegoExtraActor::FUN_1002aae0() Vector3 positionRef(m_unk0xec[3]); dirRef *= -1.0f; - rightRef.EqualsCross(&upRef, &dirRef); + rightRef.EqualsCross(upRef, dirRef); if (m_boundary == m_destEdge->m_faceA) { m_boundary = (LegoPathBoundary*) m_destEdge->m_faceB; @@ -191,9 +191,10 @@ inline void LegoExtraActor::FUN_1002ad8a() } // FUNCTION: LEGO1 0x1002aba0 +// FUNCTION: BETA10 0x1008114a MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool) { - if (p_actor->GetActorState() != c_initial || m_actorState != c_initial) { + if (p_actor->GetActorState() != c_initial || GetActorState() != c_initial) { return FAILURE; } @@ -222,7 +223,7 @@ MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool) for (MxS32 i = 0; i < m_boundary->GetNumEdges(); i++) { Mx4DPointFloat* normal = m_boundary->GetEdgeNormal(i); - if (positionRef.Dot(normal, &positionRef) + (*normal)[3] < -0.001) { + if (positionRef.Dot(*normal, positionRef) + normal->index_operator(3) < -0.001) { b = TRUE; break; } @@ -232,41 +233,34 @@ MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool) m_roi->FUN_100a58f0(matrix2); m_roi->VTable0x14(); FUN_1002ad8a(); + assert(m_roi); + assert(SoundManager()->GetCacheSoundManager()); SoundManager()->GetCacheSoundManager()->Play("crash5", m_roi->GetName(), FALSE); m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration(); - m_prevWorldSpeed = m_worldSpeed; + m_prevWorldSpeed = GetWorldSpeed(); VTable0xc4(); SetWorldSpeed(0); m_whichAnim = 1; - m_actorState = c_one | c_noCollide; + SetActorState(c_one | c_noCollide); } } if (b) { - LegoROI* roi = m_roi; + LegoROI* roi = GetROI(); + assert(roi); SoundManager()->GetCacheSoundManager()->Play("crash5", m_roi->GetName(), FALSE); VTable0xc4(); - m_actorState = c_two | c_noCollide; + SetActorState(c_two | c_noCollide); Mx3DPointFloat dir = p_actor->GetWorldDirection(); MxMatrix matrix3 = MxMatrix(roi->GetLocal2World()); Vector3 positionRef(matrix3[3]); positionRef += g_unk0x10104c18; roi->FUN_100a58f0(matrix3); -#ifdef COMPAT_MODE - float dotX, dotZ; - { - Mx3DPointFloat tmp(1.0f, 0, 0); - dotX = dir.Dot(&dir, &tmp); - Mx3DPointFloat tmp2(0, 0, 1.0f); - dotZ = dir.Dot(&dir, &tmp2); - } -#else - float dotX = dir.Dot(&dir, &Mx3DPointFloat(1.0f, 0, 0)); - float dotZ = dir.Dot(&dir, &Mx3DPointFloat(0, 0, 1.0f)); -#endif + float dotX = dir.Dot(dir, Mx3DPointFloat(1.0f, 0, 0)); + float dotZ = dir.Dot(dir, Mx3DPointFloat(0, 0, 1.0f)); - if (abs(dotZ) < abs(dotX)) { + if (fabs(dotZ) < fabs(dotX)) { m_axis = dotX > 0.0 ? e_posz : e_negz; } else { @@ -463,9 +457,9 @@ MxU32 LegoExtraActor::VTable0x6c( Mx3DPointFloat local54(p_v1); local54 -= local60; - float local1c = p_v2.Dot(&p_v2, &p_v2); - float local24 = p_v2.Dot(&p_v2, &local54) * 2.0f; - float local20 = local54.Dot(&local54, &local54); + float local1c = p_v2.Dot(p_v2, p_v2); + float local24 = p_v2.Dot(p_v2, local54) * 2.0f; + float local20 = local54.Dot(local54, local54); if (m_unk0x15 != 0 && local20 < 10.0f) { return 0; diff --git a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp index 9841b1c6..b1fbf485 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp @@ -142,11 +142,11 @@ MxResult LegoPathActor::VTable0x88( dir *= -1.0f; } - right.EqualsCross(&up, &dir); + right.EqualsCross(up, dir); m_roi->UpdateTransformationRelativeToParent(matrix); if (!m_cameraFlag || !m_userNavFlag) { - p5.EqualsCross(p_boundary->GetUnknown0x14(), &p3); + p5.EqualsCross(*p_boundary->GetUnknown0x14(), p3); p5.Unitize(); if (VTable0x80(p1, p4, p2, p5) == SUCCESS) { @@ -208,11 +208,11 @@ MxResult LegoPathActor::VTable0x84( dir *= -1.0f; } - right.EqualsCross(&up, &dir); + right.EqualsCross(up, dir); m_roi->UpdateTransformationRelativeToParent(matrix); if (!m_cameraFlag || !m_userNavFlag) { - p5.EqualsCross(p_boundary->GetUnknown0x14(), &p3); + p5.EqualsCross(*p_boundary->GetUnknown0x14(), p3); p5.Unitize(); if (VTable0x80(p_p1, p_p4, p2, p5) == SUCCESS) { @@ -308,9 +308,9 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform) dir = p1; up = *m_boundary->GetUnknown0x14(); - right.EqualsCross(&up, &dir); + right.EqualsCross(up, dir); right.Unitize(); - dir.EqualsCross(&right, &up); + dir.EqualsCross(right, up); pos = p2; return result; } @@ -636,7 +636,7 @@ MxResult LegoPathActor::VTable0x9c() LERP3(local34, v1, v2, m_unk0xe4); m_destEdge->FUN_1002ddc0(*m_boundary, local78); - local48.EqualsCross(m_boundary->GetUnknown0x14(), &local78); + local48.EqualsCross(*m_boundary->GetUnknown0x14(), local78); local48.Unitize(); } @@ -646,10 +646,10 @@ MxResult LegoPathActor::VTable0x9c() upRef = *m_boundary->GetUnknown0x14(); - rightRef.EqualsCross(&upRef, &dirRef); + rightRef.EqualsCross(upRef, dirRef); rightRef.Unitize(); - dirRef.EqualsCross(&rightRef, &upRef); + dirRef.EqualsCross(rightRef, upRef); dirRef.Unitize(); Mx3DPointFloat localc0(m_unk0xec[3]); diff --git a/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp b/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp index 87f1cbdc..8f832630 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp @@ -54,11 +54,11 @@ void LegoPathBoundary::FUN_100575b0(Vector3& p_point1, Vector3& p_point2, LegoPa v = p_point1; v -= *ccwV; - float dot1 = v.Dot(&v, m_unk0x50); + float dot1 = v.Dot(v, *m_unk0x50); v = p_point2; v -= *ccwV; - float dot2 = v.Dot(&v, m_unk0x50); + float dot2 = v.Dot(v, *m_unk0x50); if (dot2 > dot1) { for (MxS32 i = 0; i < m_numTriggers; i++) { @@ -197,7 +197,7 @@ MxU32 LegoPathBoundary::Intersect( for (MxS32 i = 0; i < m_numEdges; i++) { LegoUnknown100db7f4* edge = (LegoUnknown100db7f4*) m_edges[i]; - if (p_point2.Dot(&m_edgeNormals[i], &p_point2) + m_edgeNormals[i][3] <= -1e-07) { + if (p_point2.Dot(m_edgeNormals[i], p_point2) + m_edgeNormals[i][3] <= -1e-07) { if (local10 == 0) { local10 = 1; vec = p_point2; @@ -212,9 +212,9 @@ MxU32 LegoPathBoundary::Intersect( vec /= len; } - float dot = vec.Dot(&vec, &m_edgeNormals[i]); + float dot = vec.Dot(vec, m_edgeNormals[i]); if (dot != 0.0f) { - float local34 = (-m_edgeNormals[i][3] - p_point1.Dot(&p_point1, &m_edgeNormals[i])) / dot; + float local34 = (-m_edgeNormals[i][3] - p_point1.Dot(p_point1, m_edgeNormals[i])) / dot; if (local34 >= -0.001 && local34 <= len && (e == NULL || local34 < localc)) { e = edge; @@ -242,7 +242,7 @@ MxU32 LegoPathBoundary::Intersect( e->FUN_1002ddc0(*this, local70); - float local58 = local50.Dot(&local50, &local70); + float local58 = local50.Dot(local50, local70); LegoUnknown100db7f4* local54 = NULL; if (local58 < 0.0f) { @@ -252,7 +252,7 @@ MxU32 LegoPathBoundary::Intersect( local88 = (LegoUnknown100db7f4*) local88->GetClockwiseEdge(*this)) { local88->FUN_1002ddc0(*this, local84); - if (local84.Dot(&local84, &local70) <= 0.9) { + if (local84.Dot(local84, local70) <= 0.9) { break; } @@ -260,7 +260,7 @@ MxU32 LegoPathBoundary::Intersect( Mx3DPointFloat locala4(p_point3); locala4 -= *local90; - float local8c = locala4.Dot(&locala4, &local84); + float local8c = locala4.Dot(locala4, local84); if (local8c > local58 && local8c < local88->m_unk0x3c) { local54 = local88; @@ -279,7 +279,7 @@ MxU32 LegoPathBoundary::Intersect( locala8 = (LegoUnknown100db7f4*) locala8->GetCounterclockwiseEdge(*this)) { locala8->FUN_1002ddc0(*this, localbc); - if (localbc.Dot(&localbc, &local70) <= 0.9) { + if (localbc.Dot(localbc, local70) <= 0.9) { break; } @@ -287,7 +287,7 @@ MxU32 LegoPathBoundary::Intersect( Mx3DPointFloat locald8(p_point3); locald8 -= *localc4; - float localc0 = locald8.Dot(&locald8, &localbc); + float localc0 = locald8.Dot(locald8, localbc); if (localc0 < local58 && localc0 >= 0.0f) { local54 = locala8; diff --git a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp index a36a9a53..f168b050 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp @@ -256,7 +256,7 @@ MxResult LegoPathController::PlaceActor( for (j = 0; j < b.GetNumEdges(); j++) { Mx4DPointFloat normal(*b.GetEdgeNormal(j)); - if (p_position.Dot(&p_position, &normal) + normal[3] < 0.0f) { + if (p_position.Dot(p_position, normal) + normal[3] < 0.0f) { break; } } @@ -282,7 +282,7 @@ MxResult LegoPathController::PlaceActor( Mx3DPointFloat vec; if (((LegoUnknown100db7f4*) edge->GetClockwiseEdge(*boundary))->FUN_1002ddc0(*boundary, vec) == SUCCESS && - vec.Dot(&vec, &p_direction) < 0.0f) { + vec.Dot(vec, p_direction) < 0.0f) { edge = (LegoUnknown100db7f4*) edge->GetCounterclockwiseEdge(*boundary)->GetCounterclockwiseEdge(*boundary); } @@ -949,7 +949,7 @@ MxS32 LegoPathController::FUN_1004a240( p_v1 *= p_f1; p_v1 += *p_edge->CWVertex(*p_boundary); p_edge->FUN_1002ddc0(*p_boundary, vec); - p_v2.EqualsCross(p_boundary->GetUnknown0x14(), &vec); + p_v2.EqualsCross(*p_boundary->GetUnknown0x14(), vec); return 0; } @@ -974,14 +974,14 @@ MxResult LegoPathController::FUN_1004a380( LegoPathBoundary* b = &m_boundaries[i]; Mx4DPointFloat* unk0x14 = b->GetUnknown0x14(); - float local28 = p_param3[0].Dot(&p_param3[0], unk0x14); + float local28 = p_param3[0].Dot(p_param3[0], *unk0x14); if (local28 < 0.001 && local28 > -0.001) { continue; } - float local2c = p_param3[1].Dot(&p_param3[1], unk0x14); - float local34 = p_param3[2].Dot(&p_param3[2], unk0x14) + unk0x14->index_operator(3); + float local2c = p_param3[1].Dot(p_param3[1], *unk0x14); + float local34 = p_param3[2].Dot(p_param3[2], *unk0x14) + unk0x14->index_operator(3); float local3c = local2c * local2c - local34 * local28 * 4.0f; if (local3c < -0.001) { @@ -1022,7 +1022,7 @@ MxResult LegoPathController::FUN_1004a380( for (j = b->GetNumEdges() - 1; j >= 0; j--) { Mx4DPointFloat* local60 = b->GetEdgeNormal(j); - if (local24.Dot(local60, &local24) + local60->index_operator(3) < -0.001) { + if (local24.Dot(*local60, local24) + local60->index_operator(3) < -0.001) { break; } } @@ -1031,7 +1031,7 @@ MxResult LegoPathController::FUN_1004a380( Mx3DPointFloat local74(p_param1); local74 -= local24; - if (local74.Dot(&local74, unk0x14) >= 0.0f) { + if (local74.Dot(local74, *unk0x14) >= 0.0f) { p_param5 = local38; p_boundary = b; local8 = FALSE; diff --git a/LEGO1/lego/legoomni/src/race/legoracespecial.cpp b/LEGO1/lego/legoomni/src/race/legoracespecial.cpp index a5696b08..e35c943d 100644 --- a/LEGO1/lego/legoomni/src/race/legoracespecial.cpp +++ b/LEGO1/lego/legoomni/src/race/legoracespecial.cpp @@ -166,7 +166,7 @@ MxS32 LegoCarRaceActor::VTable0x1c(LegoPathBoundary* p_boundary, LegoEdge* p_edg m_destEdge->FUN_1002ddc0(*m_boundary, destEdgeUnknownVector); - crossProduct.EqualsCross(m_boundary->GetUnknown0x14(), &destEdgeUnknownVector); + crossProduct.EqualsCross(*m_boundary->GetUnknown0x14(), destEdgeUnknownVector); crossProduct.Unitize(); Mx3DPointFloat worldDirection(Vector3(m_roi->GetWorldDirection())); @@ -260,8 +260,8 @@ MxResult LegoCarRaceActor::VTable0x9c() d->FUN_1002ddc0(*b, point2); m_destEdge->FUN_1002ddc0(*m_boundary, point3); - point4.EqualsCross(&point2, m_boundary->GetUnknown0x14()); - point5.EqualsCross(m_boundary->GetUnknown0x14(), &point3); + point4.EqualsCross(point2, *m_boundary->GetUnknown0x14()); + point5.EqualsCross(*m_boundary->GetUnknown0x14(), point3); point4.Unitize(); point5.Unitize(); diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index 05fbb6ec..a7f049ad 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -652,9 +652,9 @@ void LegoAnimPresenter::PutFrame() up -= m_currentWorld->GetCamera()->GetWorldLocation(); dir /= dirsqr; - pos.EqualsCross(&dir, &up); + pos.EqualsCross(dir, up); pos.Unitize(); - up.EqualsCross(&pos, &dir); + up.EqualsCross(pos, dir); pos *= possqr; dir *= dirsqr; up *= upsqr; diff --git a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp index 7fa8d7ba..093b849e 100644 --- a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp @@ -68,9 +68,9 @@ void LegoLoopingAnimPresenter::PutFrame() up -= m_currentWorld->GetCamera()->GetWorldLocation(); dir /= dirsqr; - pos.EqualsCross(&dir, &up); + pos.EqualsCross(dir, up); pos.Unitize(); - up.EqualsCross(&pos, &dir); + up.EqualsCross(pos, dir); pos *= possqr; dir *= dirsqr; up *= upsqr; diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index 71a7c590..e9d00302 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -327,7 +327,7 @@ MxLong LegoAct2::Notify(MxParam& p_param) local90 *= 1.25f; locala4 += local90; locala4[1] += 0.25; - local30.EqualsCross(&localac, &local28); + local30.EqualsCross(localac, local28); local30.Unitize(); Mx3DPointFloat locald4(local2world[2]); @@ -1155,7 +1155,7 @@ MxResult LegoAct2::FUN_10052560( Vector3 secondColumn(matrix[1]); Vector3 thirdColumn(matrix[2]); - firstColumn.EqualsCross(&secondColumn, &thirdColumn); + firstColumn.EqualsCross(secondColumn, thirdColumn); firstColumn.Unitize(); MxMatrix* pmatrix = NULL; diff --git a/LEGO1/lego/sources/anim/legoanim.cpp b/LEGO1/lego/sources/anim/legoanim.cpp index 4ee2dc69..930e40a4 100644 --- a/LEGO1/lego/sources/anim/legoanim.cpp +++ b/LEGO1/lego/sources/anim/legoanim.cpp @@ -231,10 +231,10 @@ LegoResult LegoAnimScene::FUN_1009f490(LegoFloat p_time, Matrix4& p_matrix) local54 -= localb8; if (local54.Unitize() == 0) { - local5c.EqualsCross(&local68, &local54); + local5c.EqualsCross(local68, local54); if (local5c.Unitize() == 0) { - local68.EqualsCross(&local54, &local5c); + local68.EqualsCross(local54, local5c); localcc = p_matrix[3]; localcc += localb0[3]; diff --git a/LEGO1/lego/sources/geom/legowegedge.cpp b/LEGO1/lego/sources/geom/legowegedge.cpp index 6de4fd17..61e2214c 100644 --- a/LEGO1/lego/sources/geom/legowegedge.cpp +++ b/LEGO1/lego/sources/geom/legowegedge.cpp @@ -139,10 +139,10 @@ LegoS32 LegoWEGEdge::VTable0x04() Mx3DPointFloat local58; Vector3 local64(&m_edgeNormals[i][0]); edge->FUN_1002ddc0(*this, local58); - local64.EqualsCross(&local58, &m_unk0x14); + local64.EqualsCross(local58, m_unk0x14); - m_edgeNormals[i][3] = -local64.Dot(m_edges[i]->m_pointA, &local64); - if (m_edgeNormals[i][3] + m_unk0x30.Dot(&m_unk0x30, &local64) < 0.0f) { + m_edgeNormals[i][3] = -local64.Dot(*m_edges[i]->m_pointA, local64); + if (m_edgeNormals[i][3] + m_unk0x30.Dot(m_unk0x30, local64) < 0.0f) { m_edgeNormals[i] *= -1.0f; } @@ -178,12 +178,12 @@ LegoS32 LegoWEGEdge::VTable0x04() localb8 -= *vTrig1; local80 -= *vTrig1; - float locala4 = localb8.Dot(m_unk0x50, &localb8); + float locala4 = localb8.Dot(*m_unk0x50, localb8); if (local98 < locala4) { local98 = locala4; } - locala4 = local80.Dot(m_unk0x50, &local80); + locala4 = local80.Dot(*m_unk0x50, local80); if (locala4 < local9c) { local9c = locala4; } @@ -244,7 +244,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0() local50 = *local8[i - 2]; local50 -= *local8[i - 1]; - local24.EqualsCross(&local50, &local3c); + local24.EqualsCross(local50, local3c); local28 = local24.LenSquared(); if (local28 < 0.00001f) { @@ -255,7 +255,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0() local24 /= local58; if (localc) { - float local54 = local24.Dot(&m_unk0x14, &local24); + float local54 = local24.Dot(m_unk0x14, local24); if (local54 < 0.98) { delete[] local8; return -2; @@ -265,7 +265,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0() m_unk0x14[0] = local24[0]; m_unk0x14[1] = local24[1]; m_unk0x14[2] = local24[2]; - m_unk0x14[3] = -local8[i]->Dot(local8[i], &local24); + m_unk0x14[3] = -local8[i]->Dot(*local8[i], local24); localc = TRUE; } } diff --git a/LEGO1/lego/sources/misc/legounknown.cpp b/LEGO1/lego/sources/misc/legounknown.cpp index 12947446..c89bfb2e 100644 --- a/LEGO1/lego/sources/misc/legounknown.cpp +++ b/LEGO1/lego/sources/misc/legounknown.cpp @@ -68,11 +68,11 @@ LegoResult LegoUnknown::FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, L return FAILURE; } - v2.EqualsCross(&p_v, &v4); + v2.EqualsCross(p_v, v4); if (v2.Unitize() != 0) { return FAILURE; } - v3.EqualsCross(&v4, &v2); + v3.EqualsCross(v4, v2); return SUCCESS; } diff --git a/LEGO1/lego/sources/roi/legoroi.cpp b/LEGO1/lego/sources/roi/legoroi.cpp index 50a26113..6598af3e 100644 --- a/LEGO1/lego/sources/roi/legoroi.cpp +++ b/LEGO1/lego/sources/roi/legoroi.cpp @@ -626,13 +626,13 @@ LegoU32 LegoROI::FUN_100a9410( local38 *= 0.5f; local70 = localc0; - localc0.SetMatrixProduct(&local70, (float*) m_local2world.GetData()); + localc0.SetMatrixProduct(local70, (float*) m_local2world.GetData()); local70 = local9c; - local9c.SetMatrixProduct(&local70, (float*) m_local2world.GetData()); + local9c.SetMatrixProduct(local70, (float*) m_local2world.GetData()); local70 = local168; - local168.SetMatrixProduct(&local70, (float*) m_local2world.GetData()); + local168.SetMatrixProduct(local70, (float*) m_local2world.GetData()); p_v3 = m_local2world[3]; @@ -641,22 +641,22 @@ LegoU32 LegoROI::FUN_100a9410( local150[i] = m_local2world[i % 3]; if (i > 2) { - local150[i][3] = -local58.Dot(&local58, &local150[i]); + local150[i][3] = -local58.Dot(local58, local150[i]); } else { - local150[i][3] = -locala8.Dot(&locala8, &local150[i]); + local150[i][3] = -locala8.Dot(locala8, local150[i]); } - if (local150[i][3] + local38.Dot(&local38, &local150[i]) < 0.0f) { + if (local150[i][3] + local38.Dot(local38, local150[i]) < 0.0f) { local150[i] *= -1.0f; } } for (i = 0; i < 6; i++) { - float local50 = p_v2.Dot(&p_v2, &local150[i]); + float local50 = p_v2.Dot(p_v2, local150[i]); if (local50 >= 0.01 || local50 < -0.01) { - local50 = -((local150[i][3] + local4c.Dot(&local4c, &local150[i])) / local50); + local50 = -((local150[i][3] + local4c.Dot(local4c, local150[i])) / local50); if (local50 >= 0.0f && local50 <= p_f1) { Mx3DPointFloat local17c(p_v2); @@ -666,7 +666,7 @@ LegoU32 LegoROI::FUN_100a9410( LegoS32 j; for (j = 0; j < 6; j++) { if (i != j && i - j != 3 && j - i != 3) { - if (local150[j][3] + local17c.Dot(&local17c, &local150[j]) < 0.0f) { + if (local150[j][3] + local17c.Dot(local17c, local150[j]) < 0.0f) { break; } } @@ -684,9 +684,9 @@ LegoU32 LegoROI::FUN_100a9410( v1 -= GetWorldBoundingSphere().Center(); float local10 = GetWorldBoundingSphere().Radius(); - float local8 = p_v2.Dot(&p_v2, &p_v2); - float localc = p_v2.Dot(&p_v2, &v1) * 2.0f; - float local14 = v1.Dot(&v1, &v1) - (local10 * local10); + float local8 = p_v2.Dot(p_v2, p_v2); + float localc = p_v2.Dot(p_v2, v1) * 2.0f; + float local14 = v1.Dot(v1, v1) - (local10 * local10); if (local8 >= 0.001 || local8 <= -0.001) { float local1c = -1.0f; diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index d7c19b76..64164a4e 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -185,7 +185,7 @@ inline long UnknownMx4DPointFloat::FUN_10004520() v2 = m_unk0x00; v2 -= m_unk0x18; - if (v1.Dot(&v1, &v1) < v2.Dot(&v2, &v2)) { + if (v1.Dot(v1, v1) < v2.Dot(v2, v2)) { m_unk0x18 *= -1.0f; } @@ -208,7 +208,7 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) } else if (m_unk0x30 == (c_bit1 | c_bit2)) { int i; - double d1 = p_v.Dot(&m_unk0x00, &m_unk0x18); + double d1 = p_v.Dot(m_unk0x00, m_unk0x18); double a; double b; diff --git a/LEGO1/realtime/vector.h b/LEGO1/realtime/vector.h index f609c7af..360363b9 100644 --- a/LEGO1/realtime/vector.h +++ b/LEGO1/realtime/vector.h @@ -22,7 +22,7 @@ public: // in reverse order of appearance. // FUNCTION: LEGO1 0x10001f80 - virtual void AddImpl(float* p_value) + virtual void AddImpl(const float* p_value) { m_data[0] += p_value[0]; m_data[1] += p_value[1]; @@ -36,45 +36,45 @@ public: } // vtable+0x00 // FUNCTION: LEGO1 0x10001fc0 - virtual void SubImpl(float* p_value) + virtual void SubImpl(const float* p_value) { m_data[0] -= p_value[0]; m_data[1] -= p_value[1]; } // vtable+0x08 - // Those are also overloads in all likelihood, - // but we need a type to do that. - - // FUNCTION: LEGO1 0x10002000 - virtual void MulScalarImpl(float* p_value) - { - m_data[0] *= *p_value; - m_data[1] *= *p_value; - } // vtable+0x0c - // FUNCTION: LEGO1 0x10001fe0 - virtual void MulVectorImpl(float* p_value) + virtual void MulImpl(const float* p_value) { m_data[0] *= p_value[0]; m_data[1] *= p_value[1]; } // vtable+0x10 - // FUNCTION: LEGO1 0x10002020 - virtual void DivScalarImpl(float* p_value) + // FUNCTION: LEGO1 0x10002000 + virtual void MulImpl(const float& p_value) { - m_data[0] /= *p_value; - m_data[1] /= *p_value; + m_data[0] *= p_value; + m_data[1] *= p_value; + } // vtable+0x0c + + // FUNCTION: LEGO1 0x10002020 + virtual void DivImpl(const float& p_value) + { + m_data[0] /= p_value; + m_data[1] /= p_value; } // vtable+0x14 // FUNCTION: LEGO1 0x10002040 - virtual float DotImpl(float* p_a, float* p_b) const { return p_b[0] * p_a[0] + p_b[1] * p_a[1]; } // vtable+0x18 + virtual float DotImpl(const float* p_a, const float* p_b) const + { + return p_b[0] * p_a[0] + p_b[1] * p_a[1]; + } // vtable+0x18 // FUNCTION: LEGO1 0x10002060 // FUNCTION: BETA10 0x10010c90 virtual void SetData(float* p_data) { m_data = p_data; } // vtable+0x1c // FUNCTION: LEGO1 0x10002070 - virtual void EqualsImpl(float* p_data) { memcpy(m_data, p_data, sizeof(float) * 2); } // vtable+0x20 + virtual void EqualsImpl(const float* p_data) { memcpy(m_data, p_data, sizeof(float) * 2); } // vtable+0x20 // FUNCTION: LEGO1 0x10002090 virtual float* GetData() { return m_data; } // vtable+0x28 @@ -86,17 +86,20 @@ public: virtual void Clear() { memset(m_data, 0, sizeof(float) * 2); } // vtable+0x2c // FUNCTION: LEGO1 0x100020d0 - virtual float Dot(float* p_a, float* p_b) const { return DotImpl(p_a, p_b); } // vtable+0x3c + virtual float Dot(const float* p_a, const float* p_b) const { return DotImpl(p_a, p_b); } // vtable+0x3c // FUNCTION: LEGO1 0x100020f0 // FUNCTION: BETA10 0x100108c0 - virtual float Dot(Vector2* p_a, Vector2* p_b) const { return DotImpl(p_a->m_data, p_b->m_data); } // vtable+0x38 + virtual float Dot(const Vector2& p_a, const Vector2& p_b) const + { + return DotImpl(p_a.m_data, p_b.m_data); + } // vtable+0x38 // FUNCTION: LEGO1 0x10002110 - virtual float Dot(float* p_a, Vector2* p_b) const { return DotImpl(p_a, p_b->m_data); } // vtable+0x34 + virtual float Dot(const float* p_a, const Vector2& p_b) const { return DotImpl(p_a, p_b.m_data); } // vtable+0x34 // FUNCTION: LEGO1 0x10002130 - virtual float Dot(Vector2* p_a, float* p_b) const { return DotImpl(p_a->m_data, p_b); } // vtable+0x30 + virtual float Dot(const Vector2& p_a, const float* p_b) const { return DotImpl(p_a.m_data, p_b); } // vtable+0x30 // FUNCTION: LEGO1 0x10002150 virtual float LenSquared() const { return m_data[0] * m_data[0] + m_data[1] * m_data[1]; } // vtable+0x40 @@ -110,7 +113,7 @@ public: if (sq > 0.0f) { float root = sqrt(sq); if (root > 0.0f) { - DivScalarImpl(&root); + DivImpl(root); return 0; } } @@ -123,36 +126,36 @@ private: virtual void Add(float p_value) { AddImpl(p_value); } // vtable+0x50 // FUNCTION: LEGO1 0x100021d0 - virtual void Add(float* p_other) { AddImpl(p_other); } // vtable+0x4c + virtual void Add(const float* p_other) { AddImpl(p_other); } // vtable+0x4c // FUNCTION: LEGO1 0x100021e0 - virtual void Add(const Vector2& p_other) { AddImpl((float*) p_other.m_data); } // vtable+0x48 + virtual void Add(const Vector2& p_other) { AddImpl(p_other.m_data); } // vtable+0x48 // FUNCTION: LEGO1 0x100021f0 - virtual void Sub(const float* p_other) { SubImpl((float*) p_other); } // vtable+0x58 + virtual void Sub(const float* p_other) { SubImpl(p_other); } // vtable+0x58 // FUNCTION: LEGO1 0x10002200 - virtual void Sub(const Vector2& p_other) { SubImpl((float*) p_other.m_data); } // vtable+0x54 + virtual void Sub(const Vector2& p_other) { SubImpl(p_other.m_data); } // vtable+0x54 // FUNCTION: LEGO1 0x10002210 - virtual void Mul(float* p_other) { MulVectorImpl(p_other); } // vtable+0x64 + virtual void Mul(const float* p_other) { MulImpl(p_other); } // vtable+0x64 // FUNCTION: LEGO1 0x10002220 - virtual void Mul(Vector2* p_other) { MulVectorImpl(p_other->m_data); } // vtable+0x60 + virtual void Mul(const Vector2& p_other) { MulImpl(p_other.m_data); } // vtable+0x60 // FUNCTION: LEGO1 0x10002230 - virtual void Mul(const float& p_value) { MulScalarImpl((float*) &p_value); } // vtable+0x5c + virtual void Mul(const float& p_value) { MulImpl(p_value); } // vtable+0x5c // FUNCTION: LEGO1 0x10002240 - virtual void Div(const float& p_value) { DivScalarImpl((float*) &p_value); } // vtable+0x68 + virtual void Div(const float& p_value) { DivImpl(p_value); } // vtable+0x68 public: // FUNCTION: LEGO1 0x10002250 - virtual void SetVector(float* p_other) { EqualsImpl(p_other); } // vtable+0x70 + virtual void SetVector(const float* p_other) { EqualsImpl(p_other); } // vtable+0x70 // FUNCTION: LEGO1 0x10002260 // FUNCTION: BETA10 0x100110c0 - virtual void SetVector(const Vector2* p_other) { EqualsImpl(p_other->m_data); } // vtable+0x6c + virtual void SetVector(const Vector2& p_other) { EqualsImpl(p_other.m_data); } // vtable+0x6c // Note: it's unclear whether Vector3::operator= has been defined explicitly // with the same function body as Vector2& operator=. The BETA indicates that; @@ -179,7 +182,7 @@ public: Vector2& operator=(const Vector2& p_other) { - Vector2::SetVector(&p_other); + Vector2::SetVector(p_other); return *this; } @@ -190,14 +193,14 @@ public: const float& operator[](int idx) const { return m_data[idx]; } void operator+=(float p_value) { Add(p_value); } - void operator+=(float* p_other) { Add(p_other); } + void operator+=(const float* p_other) { Add(p_other); } void operator+=(const Vector2& p_other) { Add(p_other); } void operator-=(const float* p_other) { Sub(p_other); } void operator-=(const Vector2& p_other) { Sub(p_other); } - void operator*=(float* p_other) { Mul(p_other); } - void operator*=(Vector2* p_other) { Mul(p_other); } + void operator*=(const float* p_other) { Mul(p_other); } + void operator*=(const Vector2& p_other) { Mul(p_other); } void operator*=(const float& p_value) { Mul(p_value); } void operator/=(const float& p_value) { Div(p_value); } @@ -228,7 +231,7 @@ public: // FUNCTION: LEGO1 0x10002270 // FUNCTION: BETA10 0x10011350 - virtual void EqualsCrossImpl(float* p_a, float* p_b) + virtual void EqualsCrossImpl(const float* p_a, const float* p_b) { m_data[0] = p_a[1] * p_b[2] - p_a[2] * p_b[1]; m_data[1] = p_a[2] * p_b[0] - p_a[0] * p_b[2]; @@ -237,13 +240,16 @@ public: // FUNCTION: LEGO1 0x100022c0 // FUNCTION: BETA10 0x10011430 - virtual void EqualsCross(Vector3* p_a, Vector3* p_b) { EqualsCrossImpl(p_a->m_data, p_b->m_data); } // vtable+0x80 + virtual void EqualsCross(const Vector3& p_a, const Vector3& p_b) + { + EqualsCrossImpl(p_a.m_data, p_b.m_data); + } // vtable+0x80 // FUNCTION: LEGO1 0x100022e0 - virtual void EqualsCross(Vector3* p_a, float* p_b) { EqualsCrossImpl(p_a->m_data, p_b); } // vtable+0x7c + virtual void EqualsCross(const Vector3& p_a, const float* p_b) { EqualsCrossImpl(p_a.m_data, p_b); } // vtable+0x7c // FUNCTION: LEGO1 0x10002300 - virtual void EqualsCross(float* p_a, Vector3* p_b) { EqualsCrossImpl(p_a, p_b->m_data); } // vtable+0x78 + virtual void EqualsCross(const float* p_a, const Vector3& p_b) { EqualsCrossImpl(p_a, p_b.m_data); } // vtable+0x78 // FUNCTION: LEGO1 0x10003bf0 virtual void Fill(const float& p_value) @@ -256,7 +262,7 @@ public: // Vector2 overrides // FUNCTION: LEGO1 0x10003a60 - void AddImpl(float* p_value) override + void AddImpl(const float* p_value) override { m_data[0] += p_value[0]; m_data[1] += p_value[1]; @@ -272,46 +278,46 @@ public: } // vtable+0x00 // FUNCTION: LEGO1 0x10003ac0 - void SubImpl(float* p_value) override + void SubImpl(const float* p_value) override { m_data[0] -= p_value[0]; m_data[1] -= p_value[1]; m_data[2] -= p_value[2]; } // vtable+0x08 - // FUNCTION: LEGO1 0x10003b20 - void MulScalarImpl(float* p_value) override - { - m_data[0] *= *p_value; - m_data[1] *= *p_value; - m_data[2] *= *p_value; - } // vtable+0x0c - // FUNCTION: LEGO1 0x10003af0 - void MulVectorImpl(float* p_value) override + void MulImpl(const float* p_value) override { m_data[0] *= p_value[0]; m_data[1] *= p_value[1]; m_data[2] *= p_value[2]; } // vtable+0x10 - // FUNCTION: LEGO1 0x10003b50 - void DivScalarImpl(float* p_value) override + // FUNCTION: LEGO1 0x10003b20 + void MulImpl(const float& p_value) override { - m_data[0] /= *p_value; - m_data[1] /= *p_value; - m_data[2] /= *p_value; + m_data[0] *= p_value; + m_data[1] *= p_value; + m_data[2] *= p_value; + } // vtable+0x0c + + // FUNCTION: LEGO1 0x10003b50 + void DivImpl(const float& p_value) override + { + m_data[0] /= p_value; + m_data[1] /= p_value; + m_data[2] /= p_value; } // vtable+0x14 // FUNCTION: LEGO1 0x10003b80 - float DotImpl(float* p_a, float* p_b) const override + float DotImpl(const float* p_a, const float* p_b) const override { return p_a[0] * p_b[0] + p_a[2] * p_b[2] + p_a[1] * p_b[1]; } // vtable+0x18 // FUNCTION: LEGO1 0x10003ba0 // FUNCTION: BETA10 0x100113f0 - void EqualsImpl(float* p_data) override { memcpy(m_data, p_data, sizeof(float) * 3); } // vtable+0x20 + void EqualsImpl(const float* p_data) override { memcpy(m_data, p_data, sizeof(float) * 3); } // vtable+0x20 // FUNCTION: LEGO1 0x10003bc0 // FUNCTION: BETA10 0x100114f0 @@ -349,7 +355,7 @@ public: // in reverse order of appearance. // FUNCTION: LEGO1 0x10002a40 - virtual void SetMatrixProduct(float* p_vec, float* p_mat) + virtual void SetMatrixProduct(const float* p_vec, const float* p_mat) { m_data[0] = p_vec[0] * p_mat[0] + p_vec[1] * p_mat[4] + p_vec[2] * p_mat[8] + p_vec[3] * p_mat[12]; m_data[1] = p_vec[0] * p_mat[1] + p_vec[1] * p_mat[5] + p_vec[2] * p_mat[9] + p_vec[4] * p_mat[13]; @@ -358,15 +364,18 @@ public: } // vtable+0x8c // FUNCTION: LEGO1 0x10002ae0 - virtual void SetMatrixProduct(Vector4* p_a, float* p_b) { SetMatrixProduct(p_a->m_data, p_b); } // vtable+0x88 + virtual void SetMatrixProduct(const Vector4& p_a, const float* p_b) + { + SetMatrixProduct(p_a.m_data, p_b); + } // vtable+0x88 - inline virtual int NormalizeQuaternion(); // vtable+0x90 - inline virtual int EqualsHamiltonProduct(Vector4* p_a, Vector4* p_b); // vtable+0x94 + inline virtual int NormalizeQuaternion(); // vtable+0x90 + inline virtual int EqualsHamiltonProduct(const Vector4& p_a, const Vector4& p_b); // vtable+0x94 // Vector3 overrides // FUNCTION: LEGO1 0x10002870 - void AddImpl(float* p_value) override + void AddImpl(const float* p_value) override { m_data[0] += p_value[0]; m_data[1] += p_value[1]; @@ -384,7 +393,7 @@ public: } // vtable+0x00 // FUNCTION: LEGO1 0x100028f0 - void SubImpl(float* p_value) override + void SubImpl(const float* p_value) override { m_data[0] -= p_value[0]; m_data[1] -= p_value[1]; @@ -392,17 +401,8 @@ public: m_data[3] -= p_value[3]; } // vtable+0x08 - // FUNCTION: LEGO1 0x10002970 - void MulScalarImpl(float* p_value) override - { - m_data[0] *= *p_value; - m_data[1] *= *p_value; - m_data[2] *= *p_value; - m_data[3] *= *p_value; - } // vtable+0x0c - // FUNCTION: LEGO1 0x10002930 - void MulVectorImpl(float* p_value) override + void MulImpl(const float* p_value) override { m_data[0] *= p_value[0]; m_data[1] *= p_value[1]; @@ -410,23 +410,32 @@ public: m_data[3] *= p_value[3]; } // vtable+0x10 - // FUNCTION: LEGO1 0x100029b0 - void DivScalarImpl(float* p_value) override + // FUNCTION: LEGO1 0x10002970 + void MulImpl(const float& p_value) override { - m_data[0] /= *p_value; - m_data[1] /= *p_value; - m_data[2] /= *p_value; - m_data[3] /= *p_value; + m_data[0] *= p_value; + m_data[1] *= p_value; + m_data[2] *= p_value; + m_data[3] *= p_value; + } // vtable+0x0c + + // FUNCTION: LEGO1 0x100029b0 + void DivImpl(const float& p_value) override + { + m_data[0] /= p_value; + m_data[1] /= p_value; + m_data[2] /= p_value; + m_data[3] /= p_value; } // vtable+0x14 // FUNCTION: LEGO1 0x100029f0 - float DotImpl(float* p_a, float* p_b) const override + float DotImpl(const float* p_a, const float* p_b) const override { return p_a[0] * p_b[0] + p_a[2] * p_b[2] + (p_a[1] * p_b[1] + p_a[3] * p_b[3]); } // vtable+0x18 // FUNCTION: LEGO1 0x10002a20 - void EqualsImpl(float* p_data) override { memcpy(m_data, p_data, sizeof(float) * 4); } // vtable+0x20 + void EqualsImpl(const float* p_data) override { memcpy(m_data, p_data, sizeof(float) * 4); } // vtable+0x20 // FUNCTION: LEGO1 0x10002b00 void Clear() override { memset(m_data, 0, sizeof(float) * 4); } // vtable+0x2c @@ -464,13 +473,14 @@ inline int Vector4::NormalizeQuaternion() float theta = v[3] * 0.5f; v[3] = cos(theta); magnitude = sin(theta) / sqrt(magnitude); - Vector3::MulScalarImpl(&magnitude); + Vector3::MulImpl(magnitude); return 0; } + return -1; } -inline static float QuaternionProductScalarPart(float* bDat, float* aDat) +inline static float QuaternionProductScalarPart(const float* bDat, const float* aDat) { // We have no indication from the beta that this function exists, // but it helps with the stack layout of Vector4::EqualsHamiltonProduct() @@ -479,15 +489,15 @@ inline static float QuaternionProductScalarPart(float* bDat, float* aDat) // FUNCTION: LEGO1 0x10002bf0 // FUNCTION: BETA10 0x10048c20 -inline int Vector4::EqualsHamiltonProduct(Vector4* p_a, Vector4* p_b) +inline int Vector4::EqualsHamiltonProduct(const Vector4& p_a, const Vector4& p_b) { - m_data[3] = QuaternionProductScalarPart(p_a->m_data, p_b->m_data); + m_data[3] = QuaternionProductScalarPart(p_a.m_data, p_b.m_data); - Vector3::EqualsCrossImpl(p_a->m_data, p_b->m_data); + Vector3::EqualsCrossImpl(p_a.m_data, p_b.m_data); - m_data[0] = p_b->m_data[3] * p_a->m_data[0] + p_a->m_data[3] * p_b->m_data[0] + m_data[0]; - m_data[1] = p_b->m_data[1] * p_a->m_data[3] + p_a->m_data[1] * p_b->m_data[3] + m_data[1]; - m_data[2] = p_b->m_data[2] * p_a->m_data[3] + p_a->m_data[2] * p_b->m_data[3] + m_data[2]; + m_data[0] = p_b.m_data[3] * p_a.m_data[0] + p_a.m_data[3] * p_b.m_data[0] + m_data[0]; + m_data[1] = p_b.m_data[1] * p_a.m_data[3] + p_a.m_data[1] * p_b.m_data[3] + m_data[1]; + m_data[2] = p_b.m_data[2] * p_a.m_data[3] + p_a.m_data[2] * p_b.m_data[3] + m_data[2]; return 0; } diff --git a/LEGO1/viewmanager/viewmanager.cpp b/LEGO1/viewmanager/viewmanager.cpp index 3feb3c93..8f92f6f2 100644 --- a/LEGO1/viewmanager/viewmanager.cpp +++ b/LEGO1/viewmanager/viewmanager.cpp @@ -435,10 +435,10 @@ void ViewManager::UpdateViewTransformations() y = a; y -= b; - normal.EqualsCross(&x, &y); + normal.EqualsCross(x, y); normal.Unitize(); - frustum_planes[i][3] = -normal.Dot(&normal, &a); + frustum_planes[i][3] = -normal.Dot(normal, a); } flags |= c_bit4; From 0f338a882b650e3d25641b4cac22da072f901d33 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Tue, 24 Dec 2024 14:42:20 -0700 Subject: [PATCH 7/8] Match some list functions in `MxStreamController` to BETA10 (#1273) --- LEGO1/omni/include/mxstreamcontroller.h | 6 ++++ LEGO1/omni/include/mxutilitylist.h | 1 + LEGO1/omni/src/stream/mxstreamcontroller.cpp | 29 ++++++++++++++++---- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/LEGO1/omni/include/mxstreamcontroller.h b/LEGO1/omni/include/mxstreamcontroller.h index d0328908..67f6fed0 100644 --- a/LEGO1/omni/include/mxstreamcontroller.h +++ b/LEGO1/omni/include/mxstreamcontroller.h @@ -138,4 +138,10 @@ protected: // TEMPLATE: LEGO1 0x100c1bc0 // list >::insert +// TEMPLATE: BETA10 0x10150b90 +// MxUtilityList::PushBack + +// TEMPLATE: BETA10 0x10150cf0 +// MxUtilityList::Remove + #endif // MXSTREAMCONTROLLER_H diff --git a/LEGO1/omni/include/mxutilitylist.h b/LEGO1/omni/include/mxutilitylist.h index eec3958e..7a00f92a 100644 --- a/LEGO1/omni/include/mxutilitylist.h +++ b/LEGO1/omni/include/mxutilitylist.h @@ -21,6 +21,7 @@ public: // Note: does not take a reference void PushBack(T p_obj) { this->push_back(p_obj); } + void Remove(T p_obj) { this->remove(p_obj); } }; #endif // MXUTILITYLIST_H diff --git a/LEGO1/omni/src/stream/mxstreamcontroller.cpp b/LEGO1/omni/src/stream/mxstreamcontroller.cpp index af0dd84b..88919aef 100644 --- a/LEGO1/omni/src/stream/mxstreamcontroller.cpp +++ b/LEGO1/omni/src/stream/mxstreamcontroller.cpp @@ -72,20 +72,22 @@ MxResult MxStreamController::Open(const char* p_filename) AUTOLOCK(m_criticalSection); MakeSourceName(sourceName, p_filename); - this->m_atom = MxAtomId(sourceName, e_lowerCase2); + m_atom = MxAtomId(sourceName, e_lowerCase2); return SUCCESS; } // FUNCTION: LEGO1 0x100c15d0 +// FUNCTION: BETA10 0x1014e730 void MxStreamController::AddSubscriber(MxDSSubscriber* p_subscriber) { - m_subscriberList.push_back(p_subscriber); + m_subscriberList.PushBack(p_subscriber); } // FUNCTION: LEGO1 0x100c1620 +// FUNCTION: BETA10 0x1014e7b4 void MxStreamController::RemoveSubscriber(MxDSSubscriber* p_subscriber) { - m_subscriberList.remove(p_subscriber); + m_subscriberList.Remove(p_subscriber); } // FUNCTION: LEGO1 0x100c1690 @@ -114,11 +116,13 @@ MxResult MxStreamController::VTable0x20(MxDSAction* p_action) } // FUNCTION: LEGO1 0x100c1740 +// FUNCTION: BETA10 0x1014e922 MxResult MxStreamController::VTable0x24(MxDSAction* p_action) { AUTOLOCK(m_criticalSection); VTable0x30(p_action); m_action0x60 = (MxDSAction*) m_unk0x54.FindAndErase(p_action); + if (m_action0x60 == NULL) { return FAILURE; } @@ -130,6 +134,7 @@ MxResult MxStreamController::VTable0x24(MxDSAction* p_action) } // FUNCTION: LEGO1 0x100c1800 +// FUNCTION: BETA10 0x1014ea36 MxResult MxStreamController::FUN_100c1800(MxDSAction* p_action, MxU32 p_val) { MxNextActionDataStart* dataActionStart = @@ -138,11 +143,12 @@ MxResult MxStreamController::FUN_100c1800(MxDSAction* p_action, MxU32 p_val) return FAILURE; } - m_nextActionList.push_back(dataActionStart); + m_nextActionList.PushBack(dataActionStart); return SUCCESS; } // FUNCTION: LEGO1 0x100c1a00 +// FUNCTION: BETA10 0x1014eb04 MxResult MxStreamController::FUN_100c1a00(MxDSAction* p_action, MxU32 p_offset) { if (p_action->GetUnknown24() == -1) { @@ -198,36 +204,43 @@ MxResult MxStreamController::FUN_100c1a00(MxDSAction* p_action, MxU32 p_offset) MxLong time = Timer()->GetTime(); streamingAction->SetUnknown90(time); - m_unk0x3c.push_back(streamingAction); + m_unk0x3c.PushBack(streamingAction); return SUCCESS; } // FUNCTION: LEGO1 0x100c1c10 +// FUNCTION: BETA10 0x1014ed8c MxResult MxStreamController::VTable0x2c(MxDSAction* p_action, MxU32 p_bufferval) { AUTOLOCK(m_criticalSection); + if (FUN_100c1a00(p_action, p_bufferval) != SUCCESS) { return FAILURE; } + return FUN_100c1800(p_action, (p_bufferval / m_provider->GetFileSize()) * m_provider->GetFileSize()); } // FUNCTION: LEGO1 0x100c1ce0 +// FUNCTION: BETA10 0x1014eeb5 MxResult MxStreamController::VTable0x30(MxDSAction* p_action) { AUTOLOCK(m_criticalSection); MxResult result = FAILURE; MxDSObject* action = m_unk0x3c.FindAndErase(p_action); + if (action != NULL) { MxNextActionDataStart* data = m_nextActionList.FindAndErase(action->GetObjectId(), action->GetUnknown24()); delete action; delete data; result = SUCCESS; } + return result; } // FUNCTION: LEGO1 0x100c1da0 +// FUNCTION: BETA10 0x1014efdc MxResult MxStreamController::InsertActionToList54(MxDSAction* p_action) { AUTOLOCK(m_criticalSection); @@ -237,16 +250,18 @@ MxResult MxStreamController::InsertActionToList54(MxDSAction* p_action) return FAILURE; } else { - m_unk0x54.push_back(action); + m_unk0x54.PushBack(action); return SUCCESS; } } // FUNCTION: LEGO1 0x100c1e70 +// FUNCTION: BETA10 0x1014f0a1 MxPresenter* MxStreamController::FUN_100c1e70(MxDSAction& p_action) { AUTOLOCK(m_criticalSection); MxPresenter* result = NULL; + if (p_action.GetObjectId() != -1) { MxDSObject* action = m_unk0x3c.Find(&p_action); if (action != NULL) { @@ -258,6 +273,7 @@ MxPresenter* MxStreamController::FUN_100c1e70(MxDSAction& p_action) } // FUNCTION: LEGO1 0x100c1f00 +// FUNCTION: BETA10 0x1014f162 MxResult MxStreamController::FUN_100c1f00(MxDSAction* p_action) { AUTOLOCK(m_criticalSection); @@ -292,6 +308,7 @@ MxResult MxStreamController::FUN_100c1f00(MxDSAction* p_action) } // FUNCTION: LEGO1 0x100c20b0 +// FUNCTION: BETA10 0x1014f37d MxNextActionDataStart* MxStreamController::FindNextActionDataStartFromStreamingAction(MxDSStreamingAction* p_action) { return m_nextActionList.Find(p_action->GetObjectId(), p_action->GetUnknown24()); From 457300ddba0c08754743451c90e1b58c6f8e4449 Mon Sep 17 00:00:00 2001 From: larzie Date: Wed, 25 Dec 2024 18:39:26 +0300 Subject: [PATCH 8/8] Update actions (#1275) * Update analyze action * Update build action * Update format action * Update legobin action * Update naming action --- .github/workflows/analyze.yml | 27 ++-- .github/workflows/build.yml | 268 ++++++++++++++++++---------------- .github/workflows/format.yml | 22 +-- .github/workflows/legobin.yml | 42 +++--- .github/workflows/naming.yml | 71 ++++----- 5 files changed, 227 insertions(+), 203 deletions(-) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index 2a25072a..8dd32385 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -1,6 +1,9 @@ name: Analyze -on: [push, pull_request] +on: + push: + pull_request: + workflow_dispatch: jobs: decomplint-isle: @@ -15,16 +18,18 @@ jobs: - LEGO1 steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' - - name: Install python libraries - run: | - pip install -r tools/requirements.txt + - name: Setup Python modules + run: | + pip install -r tools/requirements.txt - - name: Run decomplint.py - run: | - reccmp-decomplint ${{ matrix.who }} --module ${{ matrix.who }} --warnfail + - name: Run decomplint.py + run: | + reccmp-decomplint ${{ matrix.who }} --module ${{ matrix.who }} --warnfail diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 52b9958a..a8d74d24 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,9 @@ name: Build -on: [push, pull_request] +on: + push: + pull_request: + workflow_dispatch: jobs: fetch-deps: @@ -17,12 +20,15 @@ jobs: fail-fast: false matrix: toolchain: - - { name: 'MSVC', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true } - - { name: 'msys2 mingw32', shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, clang-tidy: true, werror: true } - - { name: 'msys2 clang32', shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, clang-tidy: true, werror: true, no-dx5-libs: true } + - { name: 'MSVC', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true } + - { name: 'msys2 mingw32', shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, clang-tidy: true, werror: true } + - { name: 'msys2 clang32', shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, clang-tidy: true, werror: true, no-dx5-libs: true } steps: - - name: Set up MSYS2 + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup MSYS2 if: ${{ !!matrix.toolchain.msystem }} uses: msys2/setup-msys2@v2 with: @@ -33,21 +39,19 @@ jobs: ${{ matrix.toolchain.msys-env }}-ninja ${{ matrix.toolchain.msys-env }}-clang-tools-extra - - name: Setup cmake + - name: Setup CMake if: matrix.toolchain.setup-cmake uses: jwlawson/actions-setup-cmake@v2 - name: Setup ninja if: matrix.toolchain.setup-ninja - uses: ashutoshvarma/setup-ninja@master + uses: larziwau/gha-setup-ninja@master - name: Setup vcvars if: matrix.toolchain.setup-msvc uses: ilammy/msvc-dev-cmd@v1 with: - arch: amd64_x86 # Use the 64-bit x64-native cross tools to build 32-bit x86 code - - - uses: actions/checkout@v4 + arch: amd64_x86 - name: Build run: | @@ -60,126 +64,129 @@ jobs: cmake --build build -- -k0 build: - name: 'MSVC 4.20' + name: MSVC 4.20 runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - uses: actions/checkout@v4 - with: - repository: itsmattkc/msvc420 - path: msvc420 + - name: Checkout MSVC repository + uses: actions/checkout@v4 + with: + repository: itsmattkc/MSVC420 + path: msvc420 - - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v2 - with: - # Use minimum supported version - cmake-version: '3.15.x' + - name: Setup CMake + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.x' - - name: Patch MSVC 4.2 - run: | - tools/patch_c2.py msvc420/bin/C2.EXE + - name: Patch MSVC + run: | + tools/patch_c2.py msvc420/bin/C2.EXE - - name: Build - shell: cmd - run: | - call .\msvc420\bin\VCVARS32.BAT x86 - cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles" - cmake --build build + - name: Build + shell: cmd + run: | + call .\msvc420\bin\VCVARS32.BAT x86 + cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "NMake Makefiles" + cmake --build build - - name: Upload Artifact - uses: actions/upload-artifact@main - with: - name: Win32 - path: | - build/CONFIG.EXE - build/CONFIG.PDB - build/ISLE.EXE - build/ISLE.PDB - build/LEGO1.DLL - build/LEGO1.PDB + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: Win32 + path: | + build/CONFIG.EXE + build/CONFIG.PDB + build/ISLE.EXE + build/ISLE.PDB + build/LEGO1.DLL + build/LEGO1.PDB compare: name: Compare with master needs: [build, fetch-deps] runs-on: windows-latest steps: - - uses: actions/checkout@main + - name: Checkout repository + uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' - - uses: actions/download-artifact@main - with: - name: Win32 - path: build + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: Win32 + path: build - - name: Restore cached original binaries - id: cache-original-binaries - uses: actions/cache/restore@v4 - with: - enableCrossOsArchive: true - path: legobin - key: legobin + - name: Restore cached original binaries + id: cache-original-binaries + uses: actions/cache/restore@v4 + with: + enableCrossOsArchive: true + path: legobin + key: legobin - - name: Install python packages - shell: bash - run: | - pip install -r tools/requirements.txt + - name: Setup Python modules + shell: bash + run: | + pip install -r tools/requirements.txt - - name: Detect binaries - run: | - reccmp-project detect --what original --search-path legobin - reccmp-project detect --what recompiled --search-path build + - name: Detect binaries + run: | + reccmp-project detect --what original --search-path legobin + reccmp-project detect --what recompiled --search-path build - - name: Summarize Accuracy - shell: bash - run: | - reccmp-reccmp -S CONFIGPROGRESS.SVG --svg-icon assets/config.png --target CONFIG | tee CONFIGPROGRESS.TXT - reccmp-reccmp -S ISLEPROGRESS.SVG --svg-icon assets/isle.png --target ISLE | tee ISLEPROGRESS.TXT - reccmp-reccmp -S LEGO1PROGRESS.SVG --svg-icon assets/lego1.png --target LEGO1 | tee LEGO1PROGRESS.TXT + - name: Summarize accuracy + shell: bash + run: | + reccmp-reccmp -S CONFIGPROGRESS.SVG --svg-icon assets/config.png --target CONFIG | tee CONFIGPROGRESS.TXT + reccmp-reccmp -S ISLEPROGRESS.SVG --svg-icon assets/isle.png --target ISLE | tee ISLEPROGRESS.TXT + reccmp-reccmp -S LEGO1PROGRESS.SVG --svg-icon assets/lego1.png --target LEGO1 | tee LEGO1PROGRESS.TXT - - name: Compare Accuracy With Current Master - shell: bash - run: | - # Compare with current master - curl -fLSs -o CONFIGPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/CONFIGPROGRESS.TXT || echo "" >CONFIGPROGRESS-OLD.TXT - curl -fLSs -o ISLEPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/ISLEPROGRESS.TXT || echo "" >ISLEPROGRESS-OLD.TXT - curl -fLSs -o LEGO1PROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/LEGO1PROGRESS.TXT || echo "" >LEGO1PROGRESS-OLD.TXT + - name: Compare accuracy with current master + shell: bash + run: | + curl -fLSs -o CONFIGPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/CONFIGPROGRESS.TXT || echo "" >CONFIGPROGRESS-OLD.TXT + curl -fLSs -o ISLEPROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/ISLEPROGRESS.TXT || echo "" >ISLEPROGRESS-OLD.TXT + curl -fLSs -o LEGO1PROGRESS-OLD.TXT https://github.com/isledecomp/isle/releases/download/continuous/LEGO1PROGRESS.TXT || echo "" >LEGO1PROGRESS-OLD.TXT - diff -u0 CONFIGPROGRESS-OLD.TXT CONFIGPROGRESS.TXT || true - diff -u0 ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT || true - diff -u0 LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT || true + diff -u0 CONFIGPROGRESS-OLD.TXT CONFIGPROGRESS.TXT || true + diff -u0 ISLEPROGRESS-OLD.TXT ISLEPROGRESS.TXT || true + diff -u0 LEGO1PROGRESS-OLD.TXT LEGO1PROGRESS.TXT || true - - name: Test Exports - shell: bash - run: | - reccmp-verexp --target LEGO1 + - name: Test exports + shell: bash + run: | + reccmp-verexp --target LEGO1 - - name: Check Vtables - shell: bash - run: | - reccmp-vtable --target CONFIG - reccmp-vtable --target ISLE - reccmp-vtable --target LEGO1 + - name: Check vtables + shell: bash + run: | + reccmp-vtable --target CONFIG + reccmp-vtable --target ISLE + reccmp-vtable --target LEGO1 - - name: Check Variables - shell: bash - run: | - reccmp-datacmp --target CONFIG - reccmp-datacmp --target ISLE - reccmp-datacmp --target LEGO1 + - name: Check variables + shell: bash + run: | + reccmp-datacmp --target CONFIG + reccmp-datacmp --target ISLE + reccmp-datacmp --target LEGO1 - - name: Upload Artifact - uses: actions/upload-artifact@main - with: - name: Accuracy Report - path: | - CONFIGPROGRESS.* - ISLEPROGRESS.* - LEGO1PROGRESS.* + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: Accuracy Report + path: | + CONFIGPROGRESS.* + ISLEPROGRESS.* + LEGO1PROGRESS.* upload: name: Upload artifacts @@ -187,32 +194,35 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/isle' }} steps: - - uses: actions/checkout@v4 - with: - repository: probonopd/uploadtool + - name: Checkout uploadtool repository + uses: actions/checkout@v4 + with: + repository: probonopd/uploadtool - - uses: actions/download-artifact@main - with: - name: Win32 - path: build + - name: Download build artifact + uses: actions/download-artifact@v4 + with: + name: Win32 + path: build - - uses: actions/download-artifact@main - with: - name: Accuracy Report + - name: Download accuracy report artifact + uses: actions/download-artifact@v4 + with: + name: Accuracy Report - - name: Upload Continuous Release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }} - run: | - ./upload.sh \ - build/CONFIG.EXE \ - build/ISLE.EXE \ - build/LEGO1.DLL \ - CONFIGPROGRESS.* \ - ISLEPROGRESS.* \ - LEGO1PROGRESS.* + - name: Upload continuous release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }} + run: | + ./upload.sh \ + build/CONFIG.EXE \ + build/ISLE.EXE \ + build/LEGO1.DLL \ + CONFIGPROGRESS.* \ + ISLEPROGRESS.* \ + LEGO1PROGRESS.* - curl -X POST -F key=$UPLOAD_KEY -F 'file=@CONFIGPROGRESS.SVG' https://legoisland.org/progress/ - 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/ + curl -X POST -F key=$UPLOAD_KEY -F 'file=@CONFIGPROGRESS.SVG' https://legoisland.org/progress/ + 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/ diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 74424665..cbbac4b6 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,6 +1,9 @@ name: Format -on: [push, pull_request] +on: + push: + pull_request: + workflow_dispatch: jobs: clang-format: @@ -8,12 +11,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - name: Run clang-format - run: | - find CONFIG LEGO1 ISLE -iname '*.h' -o -iname '*.cpp' | xargs \ - pipx run "clang-format>=17,<18" \ - --style=file \ - -i - git diff --exit-code + - name: Run clang-format + run: | + find CONFIG LEGO1 ISLE -iname '*.h' -o -iname '*.cpp' | xargs \ + pipx run "clang-format>=17,<18" \ + --style=file \ + -i + git diff --exit-code diff --git a/.github/workflows/legobin.yml b/.github/workflows/legobin.yml index 0fcf175f..152becff 100644 --- a/.github/workflows/legobin.yml +++ b/.github/workflows/legobin.yml @@ -2,31 +2,31 @@ name: Download legobin on: workflow_call: + workflow_dispatch: jobs: fetch: runs-on: ubuntu-latest steps: + - name: Restore cached original binaries + id: cache-original-binaries + uses: actions/cache/restore@v4 + with: + enableCrossOsArchive: true + path: legobin + key: legobin - - name: Restore cached original binaries - id: cache-original-binaries - uses: actions/cache/restore@v4 - with: - enableCrossOsArchive: true - path: legobin - key: legobin + - name: Download original Island binaries + if: ${{ !steps.cache-original-binaries.outputs.cache-hit }} + run: | + wget https://legoisland.org/download/CONFIG.EXE --directory-prefix=legobin + wget https://legoisland.org/download/ISLE.EXE --directory-prefix=legobin + wget https://legoisland.org/download/LEGO1.DLL --directory-prefix=legobin - - name: Download original island binaries - if: ${{ !steps.cache-original-binaries.outputs.cache-hit }} - run: | - wget https://legoisland.org/download/CONFIG.EXE --directory-prefix=legobin - wget https://legoisland.org/download/ISLE.EXE --directory-prefix=legobin - wget https://legoisland.org/download/LEGO1.DLL --directory-prefix=legobin - - - name: Cache original binaries - if: ${{ !steps.cache-original-binaries.outputs.cache-hit }} - uses: actions/cache/save@v4 - with: - enableCrossOsArchive: true - path: legobin - key: legobin + - name: Cache original binaries + if: ${{ !steps.cache-original-binaries.outputs.cache-hit }} + uses: actions/cache/save@v4 + with: + enableCrossOsArchive: true + path: legobin + key: legobin diff --git a/.github/workflows/naming.yml b/.github/workflows/naming.yml index 15d57553..4503c74c 100644 --- a/.github/workflows/naming.yml +++ b/.github/workflows/naming.yml @@ -1,6 +1,9 @@ name: Naming -on: [push, pull_request] +on: + push: + pull_request: + workflow_dispatch: jobs: ncc: @@ -8,40 +11,42 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - name: Install LLVM and Clang - uses: KyleMayes/install-llvm-action@v2 - with: - version: '16' + - name: Setup LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: '16' - - uses: actions/setup-python@v5 - with: - python-version: '3.12' + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' - - name: Install python libraries - run: | - pip install -r tools/requirements.txt + - name: Setup Python modules + run: | + pip install -r tools/requirements.txt - - name: Run ncc - run: | - action_headers=$(find LEGO1/lego/legoomni/include/actions \ - -name '*.h' -print0 | xargs -0 echo) + - name: Run ncc + run: | + action_headers=$(find LEGO1/lego/legoomni/include/actions \ + -name '*.h' -print0 | xargs -0 echo) - python3 tools/ncc/ncc.py \ - --clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \ - --recurse \ - --style tools/ncc/ncc.style \ - --skip tools/ncc/skip.yml \ - --definition WINAPI FAR BOOL CALLBACK HWND__=HWND \ - --include \ - util \ - LEGO1 \ - LEGO1/omni/include \ - LEGO1/lego/legoomni/include \ - LEGO1/lego/sources \ - --exclude \ - LEGO1/omni/include/flic.h \ - LEGO1/omni/src/video/flic.cpp \ - $action_headers \ - --path LEGO1/omni LEGO1/lego/legoomni + python3 tools/ncc/ncc.py \ + --clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \ + --recurse \ + --style tools/ncc/ncc.style \ + --skip tools/ncc/skip.yml \ + --definition WINAPI FAR BOOL CALLBACK HWND__=HWND \ + --include \ + util \ + LEGO1 \ + LEGO1/omni/include \ + LEGO1/lego/legoomni/include \ + LEGO1/lego/sources \ + --exclude \ + LEGO1/omni/include/flic.h \ + LEGO1/omni/src/video/flic.cpp \ + $action_headers \ + --path LEGO1/omni LEGO1/lego/legoomni