From 6b3fcafbe14f449e1500cbd2b182e77860f58bf4 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Wed, 25 Dec 2024 10:39:51 -0700 Subject: [PATCH 1/9] Match `Helicopter::HandleEndAnim` (#1276) --- LEGO1/lego/legoomni/include/helicopter.h | 5 -- LEGO1/lego/legoomni/include/legoworld.h | 2 +- LEGO1/lego/legoomni/src/actors/helicopter.cpp | 57 +++++++++---------- LEGO1/lego/legoomni/src/common/legoutils.cpp | 2 +- LEGO1/lego/legoomni/src/entity/legoentity.cpp | 22 +++---- .../legoomni/src/entity/legonavcontroller.cpp | 4 +- .../lego/legoomni/src/paths/legopathactor.cpp | 2 +- LEGO1/lego/legoomni/src/race/legoracers.cpp | 4 +- .../legoomni/src/video/legoanimpresenter.cpp | 8 +-- .../src/video/legoloopinganimpresenter.cpp | 4 +- 10 files changed, 52 insertions(+), 58 deletions(-) diff --git a/LEGO1/lego/legoomni/include/helicopter.h b/LEGO1/lego/legoomni/include/helicopter.h index 2f64238d..8d887d73 100644 --- a/LEGO1/lego/legoomni/include/helicopter.h +++ b/LEGO1/lego/legoomni/include/helicopter.h @@ -38,14 +38,9 @@ class HelicopterState : public LegoState { return TRUE; } // vtable+0x18 - void SetUnknown8(MxU32 p_unk0x08) { m_unk0x08 = p_unk0x08; } - MxU32 GetUnkown8() { return m_unk0x08; } - // SYNTHETIC: LEGO1 0x1000e190 // HelicopterState::`scalar deleting destructor' - // TODO: Most likely getters/setters are not used according to BETA. - MxU32 m_unk0x08; // 0x08 }; diff --git a/LEGO1/lego/legoomni/include/legoworld.h b/LEGO1/lego/legoomni/include/legoworld.h index 52ef3baf..9845e451 100644 --- a/LEGO1/lego/legoomni/include/legoworld.h +++ b/LEGO1/lego/legoomni/include/legoworld.h @@ -102,7 +102,7 @@ class LegoWorld : public LegoEntity { MxCore* Find(const MxAtomId& p_atom, MxS32 p_entityId); // FUNCTION: BETA10 0x1002b4f0 - LegoCameraController* GetCamera() { return m_cameraController; } + LegoCameraController* GetCameraController() { return m_cameraController; } LegoEntityList* GetEntityList() { return m_entityList; } LegoOmni::World GetWorldId() { return m_worldId; } diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index 059145ae..ab466176 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -94,7 +94,7 @@ void Helicopter::Exit() } } - m_state->SetUnknown8(0); + m_state->m_unk0x08 = 0; RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterDashboard_Bitmap); RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterArms_Ctl); RemoveFromCurrentWorld(m_script, IsleScript::c_Helicopter_TakeOff_Ctl); @@ -238,11 +238,11 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) assert(m_pathController); - if (m_world && m_world->GetCamera()) { + if (m_world && m_world->GetCameraController()) { Mx3DPointFloat location, direction, lookat; - location = m_world->GetCamera()->GetWorldLocation(); - direction = m_world->GetCamera()->GetWorldDirection(); + location = m_world->GetCameraController()->GetWorldLocation(); + direction = m_world->GetCameraController()->GetWorldDirection(); lookat = direction; lookat *= 3.0f; @@ -250,7 +250,7 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) Mx3DPointFloat v68, va4, up; Mx3DPointFloat v90(0, 1, 0); - v68 = m_world->GetCamera()->GetWorldUp(); + v68 = m_world->GetCameraController()->GetWorldUp(); va4.EqualsCross(v68, direction); up.EqualsCross(va4, v90); @@ -295,14 +295,17 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) } // FUNCTION: LEGO1 0x10003c20 +// FUNCTION: BETA10 0x1002ab4c MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) { - MxU32 ret = 0; + MxLong result = 0; - switch (m_state->GetUnkown8()) { + switch (m_state->m_unk0x08) { case 1: { if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { - ((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(4); + Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); + assert(act1state); + act1state->m_unk0x018 = 4; SpawnPlayer( LegoGameState::e_unk42, TRUE, @@ -317,25 +320,17 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) ); } - m_state->SetUnknown8(2); + m_state->m_unk0x08 = 2; MxMatrix matrix; matrix.SetIdentity(); - - float s = sin(0.5235987901687622); // PI / 6, 30 deg - float c = cos(0.5235987901687622); // PI / 6, 30 deg - - float matrixCopy[4][4]; - memcpy(matrixCopy, matrix.GetData(), sizeof(matrixCopy)); - for (MxS32 i = 0; i < 4; i++) { - matrix.GetData()[i][1] = matrixCopy[i][1] * c - matrixCopy[i][2] * s; - matrix.GetData()[i][2] = matrixCopy[i][2] * c + matrixCopy[i][1] * s; - } - + matrix.RotateX(0.5235987901687622); // PI / 6, 30 deg Vector3 at(matrix[3]), dir(matrix[2]), up(matrix[1]); - m_world->GetCamera()->SetWorldTransform(at, dir, up); + + assert(m_world && m_world->GetCameraController()); + m_world->GetCameraController()->SetWorldTransform(at, dir, up); FUN_10010c30(); - ret = 1; + result = 1; break; } case 3: { @@ -344,10 +339,14 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) Vector3 at(matrix[3]), dir(matrix[2]), up(matrix[1]); at[1] = 1.25; - m_world->GetCamera()->SetWorldTransform(at, dir, up); + + assert(m_world && m_world->GetCameraController()); + m_world->GetCameraController()->SetWorldTransform(at, dir, up); if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { - ((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(0); + Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); + assert(act1state); + act1state->m_unk0x018 = 0; SpawnPlayer( LegoGameState::e_unk41, TRUE, @@ -362,13 +361,13 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) ); } - m_state->SetUnknown8(0); - ret = 1; + m_state->m_unk0x08 = 0; + result = 1; break; } } - return ret; + return result; } // FUNCTION: LEGO1 0x10003e90 @@ -414,7 +413,7 @@ void Helicopter::Animate(float p_time) v2 *= f2; v2 += v1; - m_world->GetCamera()->FUN_100123e0(mat, 0); + m_world->GetCameraController()->FUN_100123e0(mat, 0); } else { if (m_state->m_unk0x08 == 4) { @@ -445,7 +444,7 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix) Vector3 vec5(m_unk0x1a8[2]); // EDI Vector3 vec6(m_unk0x1a8[3]); // locala0 // esp+0x28 - m_world->GetCamera()->FUN_100123b0(local48); + m_world->GetCameraController()->FUN_100123b0(local48); m_unk0x1a8.SetIdentity(); local90 = p_matrix; diff --git a/LEGO1/lego/legoomni/src/common/legoutils.cpp b/LEGO1/lego/legoomni/src/common/legoutils.cpp index 86730b7f..48d021b0 100644 --- a/LEGO1/lego/legoomni/src/common/legoutils.cpp +++ b/LEGO1/lego/legoomni/src/common/legoutils.cpp @@ -381,7 +381,7 @@ void NotifyEntity(const char* p_filename, MxS32 p_entityId, LegoEntity* p_sender // FUNCTION: LEGO1 0x1003eab0 void SetCameraControllerFromIsle() { - InputManager()->SetCamera(FindWorld(*g_isleScript, IsleScript::c__Isle)->GetCamera()); + InputManager()->SetCamera(FindWorld(*g_isleScript, IsleScript::c__Isle)->GetCameraController()); } // FUNCTION: LEGO1 0x1003eae0 diff --git a/LEGO1/lego/legoomni/src/entity/legoentity.cpp b/LEGO1/lego/legoomni/src/entity/legoentity.cpp index 731fa70c..d697907e 100644 --- a/LEGO1/lego/legoomni/src/entity/legoentity.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoentity.cpp @@ -42,21 +42,21 @@ void LegoEntity::ResetWorldTransform(MxBool p_cameraFlag) { LegoWorld* world = CurrentWorld(); - if (world != NULL && world->GetCamera() != NULL) { + if (world != NULL && world->GetCameraController() != NULL) { m_cameraFlag = p_cameraFlag; if (m_cameraFlag) { - world->GetCamera()->SetEntity(this); - world->GetCamera()->SetWorldTransform( + world->GetCameraController()->SetEntity(this); + world->GetCameraController()->SetWorldTransform( Mx3DPointFloat(0.0F, 1.25F, 0.0F), Mx3DPointFloat(0.0F, 0.0F, 1.0F), Mx3DPointFloat(0.0F, 1.0F, 0.0F) ); } else { - if (world->GetCamera()->GetEntity() == this) { - world->GetCamera()->SetEntity(NULL); - world->GetCamera()->SetWorldTransform( + if (world->GetCameraController()->GetEntity() == this) { + world->GetCameraController()->SetEntity(NULL); + world->GetCameraController()->SetWorldTransform( Mx3DPointFloat(0.0F, 0.0F, 0.0F), Mx3DPointFloat(0.0F, 0.0F, 1.0F), Mx3DPointFloat(0.0F, 1.0F, 0.0F) @@ -72,10 +72,10 @@ void LegoEntity::SetWorldTransform(const Vector3& p_location, const Vector3& p_d { LegoWorld* world = CurrentWorld(); - if (world != NULL && world->GetCamera() != NULL) { + if (world != NULL && world->GetCameraController() != NULL) { m_cameraFlag = TRUE; - world->GetCamera()->SetEntity(this); - world->GetCamera()->SetWorldTransform(p_location, p_direction, p_up); + world->GetCameraController()->SetEntity(this); + world->GetCameraController()->SetWorldTransform(p_location, p_direction, p_up); } } @@ -193,8 +193,8 @@ void LegoEntity::FUN_10010c30() { LegoWorld* world = CurrentWorld(); - if (m_cameraFlag && world && world->GetCamera() && m_roi) { - world->GetCamera()->FUN_100123e0(m_roi->GetLocal2World(), 1); + if (m_cameraFlag && world && world->GetCameraController() && m_roi) { + world->GetCameraController()->FUN_100123e0(m_roi->GetLocal2World(), 1); } } diff --git a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp index ddf7960d..da82d9a7 100644 --- a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp @@ -542,8 +542,8 @@ MxResult LegoNavController::ProcessJoystickInput(MxBool& p_und) if (povPosition >= 0) { LegoWorld* world = CurrentWorld(); - if (world && world->GetCamera()) { - world->GetCamera()->FUN_10012320(DTOR(povPosition)); + if (world && world->GetCameraController()) { + world->GetCameraController()->FUN_10012320(DTOR(povPosition)); p_und = TRUE; } } diff --git a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp index b1fbf485..cc7fa38d 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp @@ -414,7 +414,7 @@ void LegoPathActor::Animate(float p_time) LegoWorld* world = CurrentWorld(); if (world) { - world->GetCamera()->FUN_10012290(DTOR(m_unk0x14c)); + world->GetCameraController()->FUN_10012290(DTOR(m_unk0x14c)); } } } diff --git a/LEGO1/lego/legoomni/src/race/legoracers.cpp b/LEGO1/lego/legoomni/src/race/legoracers.cpp index 5ebfab2e..7e8795cd 100644 --- a/LEGO1/lego/legoomni/src/race/legoracers.cpp +++ b/LEGO1/lego/legoomni/src/race/legoracers.cpp @@ -340,8 +340,8 @@ void LegoRaceCar::FUN_10012ff0(float p_param) // Possible bug in the original code: The first argument is not initialized a->GetAnimTreePtr()->GetCamAnim()->FUN_1009f490(deltaTime, transformationMatrix); - if (r->GetCamera()) { - r->GetCamera()->FUN_100123e0(transformationMatrix, 0); + if (r->GetCameraController()) { + r->GetCameraController()->FUN_100123e0(transformationMatrix, 0); } m_roi->FUN_100a58f0(transformationMatrix); diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index a7f049ad..9df19e51 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -634,7 +634,7 @@ void LegoAnimPresenter::PutFrame() FUN_1006b9a0(m_anim, time, m_unk0x78); - if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) { + if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) { for (MxS32 i = 0; i < m_unk0x94; i++) { if (m_unk0x8c[i] != NULL) { MxMatrix mat(m_unk0x8c[i]->GetLocal2World()); @@ -650,7 +650,7 @@ void LegoAnimPresenter::PutFrame() up = und; - up -= m_currentWorld->GetCamera()->GetWorldLocation(); + up -= m_currentWorld->GetCameraController()->GetWorldLocation(); dir /= dirsqr; pos.EqualsCross(dir, up); pos.Unitize(); @@ -930,8 +930,8 @@ void LegoAnimPresenter::FUN_1006b9a0(LegoAnim* p_anim, MxLong p_time, Matrix4* p MxMatrix transform(mat); p_anim->GetCamAnim()->FUN_1009f490(p_time, transform); - if (m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) { - m_currentWorld->GetCamera()->FUN_100123e0(transform, 0); + if (m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) { + m_currentWorld->GetCameraController()->FUN_100123e0(transform, 0); } } diff --git a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp index 093b849e..93b4720d 100644 --- a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp @@ -50,7 +50,7 @@ void LegoLoopingAnimPresenter::PutFrame() FUN_1006b9a0(m_anim, time, m_unk0x78); - if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) { + if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) { for (MxS32 i = 0; i < m_unk0x94; i++) { if (m_unk0x8c[i] != NULL) { MxMatrix mat(m_unk0x8c[i]->GetLocal2World()); @@ -66,7 +66,7 @@ void LegoLoopingAnimPresenter::PutFrame() up = und; - up -= m_currentWorld->GetCamera()->GetWorldLocation(); + up -= m_currentWorld->GetCameraController()->GetWorldLocation(); dir /= dirsqr; pos.EqualsCross(dir, up); pos.Unitize(); From 4552505082014b941cff671708a9acf852a681f1 Mon Sep 17 00:00:00 2001 From: Ramen2X Date: Wed, 25 Dec 2024 14:59:07 -0500 Subject: [PATCH 2/9] Revert "Update actions (#1275)" This reverts commit 457300ddba0c08754743451c90e1b58c6f8e4449. --- .github/workflows/analyze.yml | 27 ++- .github/workflows/build.yml | 310 ++++++++++++++++------------------ .github/workflows/format.yml | 22 +-- .github/workflows/legobin.yml | 42 ++--- .github/workflows/naming.yml | 81 +++++---- 5 files changed, 229 insertions(+), 253 deletions(-) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index 8dd32385..2a25072a 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -1,9 +1,6 @@ name: Analyze -on: - push: - pull_request: - workflow_dispatch: +on: [push, pull_request] jobs: decomplint-isle: @@ -18,18 +15,16 @@ jobs: - LEGO1 steps: - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.13' + - uses: actions/setup-python@v5 + with: + python-version: '3.12' - - name: Setup Python modules - run: | - pip install -r tools/requirements.txt + - name: Install python libraries + 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 a8d74d24..52b9958a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,9 +1,6 @@ name: Build -on: - push: - pull_request: - workflow_dispatch: +on: [push, pull_request] jobs: fetch-deps: @@ -20,15 +17,12 @@ 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: Checkout repository - uses: actions/checkout@v4 - - - name: Setup MSYS2 + - name: Set up MSYS2 if: ${{ !!matrix.toolchain.msystem }} uses: msys2/setup-msys2@v2 with: @@ -39,19 +33,21 @@ 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: larziwau/gha-setup-ninja@master + uses: ashutoshvarma/setup-ninja@master - name: Setup vcvars if: matrix.toolchain.setup-msvc uses: ilammy/msvc-dev-cmd@v1 with: - arch: amd64_x86 + arch: amd64_x86 # Use the 64-bit x64-native cross tools to build 32-bit x86 code + + - uses: actions/checkout@v4 - name: Build run: | @@ -64,129 +60,126 @@ jobs: cmake --build build -- -k0 build: - name: MSVC 4.20 + name: 'MSVC 4.20' runs-on: windows-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Checkout MSVC repository - uses: actions/checkout@v4 - with: - repository: itsmattkc/MSVC420 - path: msvc420 - - - name: Setup CMake - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.31.x' - - - 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: 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 + - uses: actions/checkout@v4 + + - 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: Patch MSVC 4.2 + 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: 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 compare: name: Compare with master needs: [build, fetch-deps] runs-on: windows-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - 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: 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: 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: | - 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 - - - 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 variables - shell: bash - run: | - reccmp-datacmp --target CONFIG - reccmp-datacmp --target ISLE - reccmp-datacmp --target LEGO1 - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: Accuracy Report - path: | - CONFIGPROGRESS.* - ISLEPROGRESS.* - LEGO1PROGRESS.* + - uses: actions/checkout@main + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - uses: actions/download-artifact@main + 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: Install python packages + 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: 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 + + 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: 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: Upload Artifact + uses: actions/upload-artifact@main + with: + name: Accuracy Report + path: | + CONFIGPROGRESS.* + ISLEPROGRESS.* + LEGO1PROGRESS.* upload: name: Upload artifacts @@ -194,35 +187,32 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/isle' }} steps: - - name: Checkout uploadtool repository - uses: actions/checkout@v4 - with: - repository: probonopd/uploadtool - - - name: Download build artifact - uses: actions/download-artifact@v4 - with: - name: Win32 - path: build - - - 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.* - - 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/ + - uses: actions/checkout@v4 + with: + repository: probonopd/uploadtool + + - uses: actions/download-artifact@main + with: + name: Win32 + path: build + + - uses: actions/download-artifact@main + 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.* + + 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 cbbac4b6..74424665 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,9 +1,6 @@ name: Format -on: - push: - pull_request: - workflow_dispatch: +on: [push, pull_request] jobs: clang-format: @@ -11,13 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 + - 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 152becff..0fcf175f 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: 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: Restore cached original binaries + id: cache-original-binaries + uses: actions/cache/restore@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 + - 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 diff --git a/.github/workflows/naming.yml b/.github/workflows/naming.yml index 4503c74c..15d57553 100644 --- a/.github/workflows/naming.yml +++ b/.github/workflows/naming.yml @@ -1,9 +1,6 @@ name: Naming -on: - push: - pull_request: - workflow_dispatch: +on: [push, pull_request] jobs: ncc: @@ -11,42 +8,40 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup LLVM and Clang - uses: KyleMayes/install-llvm-action@v2 - with: - version: '16' - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - 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) - - 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 + - uses: actions/checkout@v4 + + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: '16' + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install python libraries + 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) + + 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 From 70baf8cecc1f95b354a710fc1b3a596ed6089458 Mon Sep 17 00:00:00 2001 From: jonschz <17198703+jonschz@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:01:00 +0100 Subject: [PATCH 3/9] Fix float constants and conversions (#1279) * Fix legoplants warnings, add BETA10 references * Fix warnings in various header files, improve match * Fix floats in legoactors.cpp * Fix `legolocations.cpp` * fix typo --------- Co-authored-by: jonschz --- LEGO1/lego/legoomni/src/actors/act2actor.cpp | 2 + LEGO1/lego/legoomni/src/common/legoactors.cpp | 162 +- LEGO1/lego/legoomni/src/common/legoplants.cpp | 1946 ++++++++--------- .../legoomni/src/entity/legolocations.cpp | 1534 ++++++------- .../lego/legoomni/src/paths/legoanimactor.cpp | 1 + LEGO1/lego/sources/misc/legostorage.h | 2 +- LEGO1/mxgeometry/mxgeometry3d.h | 8 +- LEGO1/realtime/matrix.h | 17 +- LEGO1/tgl/tglvector.h | 6 +- 9 files changed, 1848 insertions(+), 1830 deletions(-) diff --git a/LEGO1/lego/legoomni/src/actors/act2actor.cpp b/LEGO1/lego/legoomni/src/actors/act2actor.cpp index 2a66642d..52506121 100644 --- a/LEGO1/lego/legoomni/src/actors/act2actor.cpp +++ b/LEGO1/lego/legoomni/src/actors/act2actor.cpp @@ -444,6 +444,8 @@ MxS32 Act2Actor::VTable0xa0() { undefined4 newLocation; + assert(!m_grec); + CurrentWorld(); MxU16 randomVal = rand() / (RAND_MAX / 2) + 1; diff --git a/LEGO1/lego/legoomni/src/common/legoactors.cpp b/LEGO1/lego/legoomni/src/common/legoactors.cpp index acab09e1..7bf10520 100644 --- a/LEGO1/lego/legoomni/src/common/legoactors.cpp +++ b/LEGO1/lego/legoomni/src/common/legoactors.cpp @@ -8,88 +8,88 @@ DECOMP_SIZE_ASSERT(LegoActorLOD, 0x58) // GLOBAL: LEGO1 0x100da3b0 LegoActorLOD g_actorLODs[] = { - {"top", "top", 0, 0.000267, 0.780808, -0.01906, 0.951612, -0.461166, -0.002794, -0.299442, 0.4617, - 1.56441, 0.261321, 0, 0, 0, 0, 0, 1, 0, 1, 0}, - {"body", "body", LegoActorLOD::c_flag1, - 0.00158332, 0.401828, -0.00048697, - 0.408071, -0.287507, 0.150419, - -0.147452, 0.289219, 0.649774, - 0.14258, -0.00089, 0.436353, - 0.007277, 0, 0, - 1, 0, 1, - 0}, - {"infohat", "infohat", LegoActorLOD::c_flag2, - 0, -0.00938, -0.01955, - 0.35, -0.231822, -0.140237, - -0.320954, 0.234149, 0.076968, - 0.249083, 0.000191, 1.519793, - 0.001767, 0, 0, - 1, 0, 1, - 0}, + {"top", "top", 0, 0.000267f, 0.780808f, -0.01906f, 0.951612f, -0.461166f, -0.002794f, -0.299442f, 0.4617f, + 1.56441f, 0.261321f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f}, + {"body", "body", LegoActorLOD::c_flag1, + 0.00158332f, 0.401828f, -0.00048697f, + 0.408071f, -0.287507f, 0.150419f, + -0.147452f, 0.289219f, 0.649774f, + 0.14258f, -0.00089f, 0.436353f, + 0.007277f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f}, + {"infohat", "infohat", LegoActorLOD::c_flag2, + 0.0f, -0.00938f, -0.01955f, + 0.35f, -0.231822f, -0.140237f, + -0.320954f, 0.234149f, 0.076968f, + 0.249083f, 0.000191f, 1.519793f, + 0.001767f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f}, {"infogron", "infogron", LegoActorLOD::c_flag2, - 0, 0.11477, 0.00042, - 0.26, -0.285558, -0.134391, - -0.142231, 0.285507, 0.152986, - 0.143071, -0.00089, 0.436353, - 0.007277, 0, 0, - 1, 0, 1, - 0}, - {"head", "head", LegoActorLOD::c_flag1, - 0, -0.03006, 0, - 0.3, -0.189506, -0.209665, - -0.189824, 0.189532, 0.228822, - 0.194945, -0.00105, 1.293115, - 0.001781, 0, 0, - 1, 0, 1, - 0}, - {"arm-lft", "arm-lft", LegoActorLOD::c_flag2, - -0.06815, -0.0973747, 0.0154655, - 0.237, -0.137931, -0.282775, - -0.105316, 0.000989, 0.100221, - 0.140759, -0.225678, 0.963312, - 0.023286, -0.003031, -0.017187, - 0.999848, 0.173622, 0.984658, - 0.017453}, - {"arm-rt", "arm-rt", LegoActorLOD::c_flag2, - 0.0680946, -0.097152, 0.0152722, - 0.237, 0.00141, -0.289604, - -0.100831, 0.138786, 0.09291, - 0.145437, 0.223494, 0.963583, - 0.018302, 0, 0, - 1, -0.173648, 0.984808, - 0}, - {"claw-lft", "claw-lft", LegoActorLOD::c_flag2, - 0.000773381, -0.101422, -0.0237761, - 0.15, -0.089838, -0.246208, - -0.117735, 0.091275, 0.000263, - 0.07215, -0.341869, 0.700355, - 0.092779, 0.000001, 0.000003, - 1, 0.190812, 0.981627, - -0.000003}, - {"claw-rt", "claw-lft", LegoActorLOD::c_flag2, - 0.000773381, -0.101422, -0.0237761, - 0.15, -0.095016, -0.245349, - -0.117979, 0.086528, 0.00067, - 0.069743, 0.343317, 0.69924, - 0.096123, 0.00606, -0.034369, - 0.999391, -0.190704, 0.981027, - 0.034894}, - {"leg-lft", "leg", LegoActorLOD::c_flag2, - 0.00433584, -0.177404, -0.0313928, - 0.33, -0.129782, -0.440428, - -0.184207, 0.13817, 0.118415, - 0.122607, -0.156339, 0.436087, - 0.006822, 0, 0, - 1, 0, 1, - 0}, - {"leg-rt", "leg", LegoActorLOD::c_flag2, - 0.00433584, -0.177404, -0.0313928, - 0.33, -0.132864, -0.437138, - -0.183944, 0.134614, 0.12043, - 0.121888, 0.151154, 0.436296, - 0.007373, 0, 0, - 1, 0, 1, - 0} + 0.0f, 0.11477f, 0.00042f, + 0.26f, -0.285558f, -0.134391f, + -0.142231f, 0.285507f, 0.152986f, + 0.143071f, -0.00089f, 0.436353f, + 0.007277f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f}, + {"head", "head", LegoActorLOD::c_flag1, + 0.0f, -0.03006f, 0.0f, + 0.3f, -0.189506f, -0.209665f, + -0.189824f, 0.189532f, 0.228822f, + 0.194945f, -0.00105f, 1.293115f, + 0.001781f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f}, + {"arm-lft", "arm-lft", LegoActorLOD::c_flag2, + -0.06815f, -0.0973747f, 0.0154655f, + 0.237f, -0.137931f, -0.282775f, + -0.105316f, 0.000989f, 0.100221f, + 0.140759f, -0.225678f, 0.963312f, + 0.023286f, -0.003031f, -0.017187f, + 0.999848f, 0.173622f, 0.984658f, + 0.017453f}, + {"arm-rt", "arm-rt", LegoActorLOD::c_flag2, + 0.0680946f, -0.097152f, 0.0152722f, + 0.237f, 0.00141f, -0.289604f, + -0.100831f, 0.138786f, 0.09291f, + 0.145437f, 0.223494f, 0.963583f, + 0.018302f, 0.0f, 0.0f, + 1.0f, -0.173648f, 0.984808f, + 0.0f}, + {"claw-lft", "claw-lft", LegoActorLOD::c_flag2, + 0.000773381f, -0.101422f, -0.0237761f, + 0.15f, -0.089838f, -0.246208f, + -0.117735f, 0.091275f, 0.000263f, + 0.07215f, -0.341869f, 0.700355f, + 0.092779f, 0.000001f, 0.000003f, + 1.0f, 0.190812f, 0.981627f, + -0.000003f}, + {"claw-rt", "claw-lft", LegoActorLOD::c_flag2, + 0.000773381f, -0.101422f, -0.0237761f, + 0.15f, -0.095016f, -0.245349f, + -0.117979f, 0.086528f, 0.00067f, + 0.069743f, 0.343317f, 0.69924f, + 0.096123f, 0.00606f, -0.034369f, + 0.999391f, -0.190704f, 0.981027f, + 0.034894f}, + {"leg-lft", "leg", LegoActorLOD::c_flag2, + 0.00433584f, -0.177404f, -0.0313928f, + 0.33f, -0.129782f, -0.440428f, + -0.184207f, 0.13817f, 0.118415f, + 0.122607f, -0.156339f, 0.436087f, + 0.006822f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f}, + {"leg-rt", "leg", LegoActorLOD::c_flag2, + 0.00433584f, -0.177404f, -0.0313928f, + 0.33f, -0.132864f, -0.437138f, + -0.183944f, 0.134614f, 0.12043f, + 0.121888f, 0.151154f, 0.436296f, + 0.007373f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f} }; // GLOBAL: LEGO1 0x100da778 diff --git a/LEGO1/lego/legoomni/src/common/legoplants.cpp b/LEGO1/lego/legoomni/src/common/legoplants.cpp index daa892ec..f58245f5 100644 --- a/LEGO1/lego/legoomni/src/common/legoplants.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplants.cpp @@ -15,19 +15,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_20", 1, - -7e1, - 8, - -8.40763, + -70.0f, + 8.0f, + -8.40763f, NULL, - -73.75, - 8, - -8.4375, - 1, - 0, - 0, - 0, - 1, - 0}, + -73.75f, + 8.0f, + -8.4375f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -39,19 +39,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_20", 3, - -15.45, - 0, - -41.32, + -15.45f, + 0.0f, + -41.32f, NULL, - -16.8125, - 0, - -41.2, - 1, - 0, - 0, - 0, - 1, - 0}, + -16.8125f, + 0.0f, + -41.2f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -63,19 +63,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_24", 1, - -69.7176, - 7, - -25.25, + -69.7176f, + 7.0f, + -25.25f, NULL, - -71, - 7, - -25, - 1, - 0, - 0, - 0, - 1, - 0}, + -71.0f, + 7.0f, + -25.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -87,19 +87,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_27", 1, - 82.75, - 4, - 29.24163, + 82.75f, + 4.0f, + 29.24163f, NULL, - 82.6125, - 4, - 27.625, - 1, - 0, - 0, - 0, - 1, - 0}, + 82.6125f, + 4.0f, + 27.625f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -111,19 +111,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int18", 3, - 28.15, - 2, - 29.27804, + 28.15f, + 2.0f, + 29.27804f, NULL, - 29.8125, - 2, - 27.6875, - 1, - 0, - 0, - 0, - 1, - 0}, + 29.8125f, + 2.0f, + 27.6875f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -135,19 +135,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int48", 0, - 85.16238, - 9, - -0.83761, + 85.16238f, + 9.0f, + -0.83761f, NULL, - 86.125, - 8.80447, - 0.3125, - 1, - 0, - 0, - 0, - 1, - 0}, + 86.125f, + 8.80447f, + 0.3125f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -159,19 +159,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int18", 3, - 24.31819, - 2, - 29.04404, + 24.31819f, + 2.0f, + 29.04404f, NULL, - 22.8125, - 2, - 27.6875, - 1, - 0, - 0, - 0, - 1, - 0}, + 22.8125f, + 2.0f, + 27.6875f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -183,19 +183,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int56", 4, - -64.125, - 14, - 27.5, + -64.125f, + 14.0f, + 27.5f, NULL, - -61.6875, - 14, - 28, - 1, - 0, - 0, - 0, - 1, - 0}, + -61.6875f, + 14.0f, + 28.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -207,19 +207,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int67", 3, - -23.3197, - 1, - 29.00803, + -23.3197f, + 1.0f, + 29.00803f, NULL, - -21.9375, - 1, - 27.6875, - 1, - 0, - 0, - 0, - 1, - 0}, + -21.9375f, + 1.0f, + 27.6875f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -231,19 +231,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_79", 3, - 9.15, - 0, - -18.1854, + 9.15f, + 0.0f, + -18.1854f, NULL, - 9.15, - 0, - -19.9375, - 1, - 0, - 0, - 0, - 1, - 0}, + 9.15f, + 0.0f, + -19.9375f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -255,19 +255,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_79", 1, - 9.15, - 0, - -14.5695, + 9.15f, + 0.0f, + -14.5695f, NULL, - 9.15, - 0, - -12.9375, - 1, - 0, - 0, - 0, - 1, - 0}, + 9.15f, + 0.0f, + -12.9375f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -279,19 +279,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_151", 1, - -75.7186, - 4, - 44.60529, + -75.7186f, + 4.0f, + 44.60529f, NULL, - -74.9375, - 4, - 44.3875, - 1, - 0, - 0, - 0, - 1, - 0}, + -74.9375f, + 4.0f, + 44.3875f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -303,19 +303,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int53", 6, - -22.375, - 0, - -81.875, + -22.375f, + 0.0f, + -81.875f, NULL, - -21.625, - 0, - -83, - 1, - 0, - 0, - 0, - 1, - 0}, + -21.625f, + 0.0f, + -83.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -327,19 +327,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_47", 1, - 42.8125, - 0, - -48.125, + 42.8125f, + 0.0f, + -48.125f, NULL, - 47.75, - -0.299, - -58.125, - 0.6751, - -0.1071, - 0.7299, - 0, - 1, - 0}, + 47.75f, + -0.299f, + -58.125f, + 0.6751f, + -0.1071f, + 0.7299f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -351,19 +351,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_155", 1, - -39, - 0, - 40.8125, + -39.0f, + 0.0f, + 40.8125f, NULL, - -41, - 0, - 39.5, - 1, - 0, - 0, - 0, - 1, - 0}, + -41.0f, + 0.0f, + 39.5f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -375,19 +375,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg03_05", 3, - -35.125, - 0, - 3.875, + -35.125f, + 0.0f, + 3.875f, NULL, - -35, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0}, + -35.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_bush, @@ -399,19 +399,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_128", 3, - -59.3624, - 14, - 22.86249, + -59.3624f, + 14.0f, + 22.86249f, NULL, - -58.375, - 14, - 21.98749, - 1, - 0, - 0, - 0, - 1, - 0}, + -58.375f, + 14.0f, + 21.98749f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_bush, @@ -423,19 +423,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int48", 4, - 87.9875, - 9, - -1.125, + 87.9875f, + 9.0f, + -1.125f, NULL, - 87.3, - 8.609336, - 1.125, - 1, - 0, - 0, - 0, - 1, - 0}, + 87.3f, + 8.609336f, + 1.125f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_bush, @@ -447,19 +447,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_18", 1, - -69.6875, - 8, - -3.5, + -69.6875f, + 8.0f, + -3.5f, NULL, - -73.8, - 8, - -5.3, - 1, - 0, - 0, - 0, - 1, - 0}, + -73.8f, + 8.0f, + -5.3f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_bush, @@ -471,19 +471,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_85", 1, - -26.45, - 0, - -48.5, + -26.45f, + 0.0f, + -48.5f, NULL, - -25.45, - 0, - -46.5, - 1, - 0, - 0, - 0, - 1, - 0}, + -25.45f, + 0.0f, + -46.5f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -495,19 +495,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_123", 3, - -60.625, - 14, - 22.9375, + -60.625f, + 14.0f, + 22.9375f, NULL, - -6e1, - 14, - 24, - 1, - 0, - 0, - 0, - 1, - 0}, + -60.0f, + 14.0f, + 24.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -519,19 +519,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_131", 1, - -63.7755, - 14, - 26.70394, + -63.7755f, + 14.0f, + 26.70394f, NULL, - -65, - 14, - 26, - 1, - 0, - 0, - 0, - 1, - 0}, + -65.0f, + 14.0f, + 26.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -543,19 +543,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_61", 3, - 70.1875, - 1, - -78.3125, + 70.1875f, + 1.0f, + -78.3125f, NULL, - 72.6875, - 1, - -80.3125, - 1, - 0, - 0, - 0, - 1, - 0}, + 72.6875f, + 1.0f, + -80.3125f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -567,19 +567,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_33", 1, - -64.1875, - 7, - -45.25, + -64.1875f, + 7.0f, + -45.25f, NULL, - -64.1875, - 7, - -43.4375, - 1, - 0, - 0, - 0, - 1, - 0}, + -64.1875f, + 7.0f, + -43.4375f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -591,19 +591,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_59", 1, - -47.8124, - 1.8634, - -58.2624, + -47.8124f, + 1.8634f, + -58.2624f, NULL, - -47.8124, - 1.875, - -60.2624, - 0.174, - 0, - 0.985, - 0, - 1, - 0}, + -47.8124f, + 1.875f, + -60.2624f, + 0.174f, + 0.0f, + 0.985f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -615,19 +615,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_32", 1, - 25.5, - 0, - 9, + 25.5f, + 0.0f, + 9.0f, NULL, - 22.8125, - 0, - 9, - 0, - 0, - 1, - 0, - 1, - 0}, + 22.8125f, + 0.0f, + 9.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -639,19 +639,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int25", 0, - 27.1875, - 0, - -16.3125, + 27.1875f, + 0.0f, + -16.3125f, NULL, - 29.8125, - 0, - -14.3125, - 1, - 0, - 0, - 0, - 1, - 0}, + 29.8125f, + 0.0f, + -14.3125f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -663,19 +663,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_01", 1, - -19.625, - 0, - -17.9375, + -19.625f, + 0.0f, + -17.9375f, NULL, - -19.625, - 0, - -2e1, - 0, - 0, - 1, - 0, - 1, - 0}, + -19.625f, + 0.0f, + -20.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -687,19 +687,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_95", 3, - 34.125, - 0, - 3.5125, + 34.125f, + 0.0f, + 3.5125f, NULL, - 32.9375, - 0, - 2.95, - -1, - 0, - 0, - 0, - 1, - 0}, + 32.9375f, + 0.0f, + 2.95f, + -1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -711,19 +711,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int25", 1, - 25.6875, - 0, - -16.4375, + 25.6875f, + 0.0f, + -16.4375f, NULL, - 22.8125, - 0, - -12.9375, - 0, - 0, - 1, - 0, - 1, - 0}, + 22.8125f, + 0.0f, + -12.9375f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -735,19 +735,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int26", 1, - 24.25, - 0, - -44.5, + 24.25f, + 0.0f, + -44.5f, NULL, - 22.8125, - 0, - -43.0625, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 22.8125f, + 0.0f, + -43.0625f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -759,19 +759,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int26", 6, - 28.25, - 0, - -47.3125, + 28.25f, + 0.0f, + -47.3125f, NULL, - 29.8125, - 0, - -45.875, - 0, - 0, - 1, - 0, - 1, - 0}, + 29.8125f, + 0.0f, + -45.875f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -783,19 +783,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int10", 1, - -69.125, - 7, - -29.125, + -69.125f, + 7.0f, + -29.125f, NULL, - -70.5625, - 7, - -29.875, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + -70.5625f, + 7.0f, + -29.875f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -807,19 +807,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_61", 3, - 70.75, - 1, - -76.5625, + 70.75f, + 1.0f, + -76.5625f, NULL, - 73.5, - 1, - -78.25, - 0, - 0, - 1, - 0, - 1, - 0}, + 73.5f, + 1.0f, + -78.25f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -831,19 +831,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int04", 5, - -94.4, - 4, - -15.3125, + -94.4f, + 4.0f, + -15.3125f, NULL, - -94.875, - 4, - -13.3125, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + -94.875f, + 4.0f, + -13.3125f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -855,19 +855,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_79", 1, - 9.15, - 0, - -14.5695, + 9.15f, + 0.0f, + -14.5695f, NULL, - 9.15, - 0, - -11.5625, - 0, - 0, - 1, - 0, - 1, - 0}, + 9.15f, + 0.0f, + -11.5625f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -879,19 +879,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_58", 3, - 66.2125, - 0, - -17.5625, + 66.2125f, + 0.0f, + -17.5625f, NULL, - 65.33261, - 0.11868, - -19.8125, - 0, - 0, - 1, - 0, - 1, - 0}, + 65.33261f, + 0.11868f, + -19.8125f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -903,19 +903,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int34", 4, - 0.375, - 0, - -44.8875, + 0.375f, + 0.0f, + -44.8875f, NULL, - -1.3125, - 0, - -43.075, - 0, - 0, - 1, - 0, - 1, - 0}, + -1.3125f, + 0.0f, + -43.075f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -927,19 +927,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_32", 1, - 25.5, - 0, - 9.8, + 25.5f, + 0.0f, + 9.8f, NULL, - 22.8125, - 0, - 10.4875, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 22.8125f, + 0.0f, + 10.4875f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -951,19 +951,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int22", 6, - 28.92499, - 0, - 6.45, + 28.92499f, + 0.0f, + 6.45f, NULL, - 29.8, - 0, - 8.0125, - 0, - 0, - 1, - 0, - 1, - 0}, + 29.8f, + 0.0f, + 8.0125f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -975,19 +975,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_28", 1, - 85.5, - 4, - 22.25, + 85.5f, + 4.0f, + 22.25f, NULL, - 82.5625, - 4, - 26.25, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 82.5625f, + 4.0f, + 26.25f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -999,19 +999,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_176", 0, - 73.875, - 1, - -82.9375, + 73.875f, + 1.0f, + -82.9375f, NULL, - 74.75, - 1, - -81.25, - 1, - 0, - 0, - 0, - 1, - 0}, + 74.75f, + 1.0f, + -81.25f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1023,19 +1023,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_35", 3, - 26.25, - 0, - -12.45, + 26.25f, + 0.0f, + -12.45f, NULL, - 22.8125, - 0, - -11.575, - 1, - 0, - 0, - 0, - 1, - 0}, + 22.8125f, + 0.0f, + -11.575f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1047,19 +1047,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_79", 3, - 9.15, - 0, - -18.1854, + 9.15f, + 0.0f, + -18.1854f, NULL, - 9.0875, - 0, - -21.3125, - 0, - 0, - 1, - 0, - 1, - 0}, + 9.0875f, + 0.0f, + -21.3125f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1071,19 +1071,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_01", 3, - -19.75, - 0, - -15.3125, + -19.75f, + 0.0f, + -15.3125f, NULL, - -19.75, - 0, - -12.875, - 0, - 0, - 1, - 0, - 1, - 0}, + -19.75f, + 0.0f, + -12.875f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1095,19 +1095,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_56", 3, - 72.8125, - 0, - -25.9375, + 72.8125f, + 0.0f, + -25.9375f, NULL, - 70.6875, - 0, - -26.5625, - -0.9848, - 0, - 1.1736, - 0, - 1, - 0}, + 70.6875f, + 0.0f, + -26.5625f, + -0.9848f, + 0.0f, + 1.1736f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1119,19 +1119,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int67", 0, - -26.9375, - 1, - 29.075, + -26.9375f, + 1.0f, + 29.075f, NULL, - -28.9375, - 1, - 27.7, - 1, - 0, - 0, - 0, - 1, - 0}, + -28.9375f, + 1.0f, + 27.7f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1143,19 +1143,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int51", 3, - -2.125, - 0, - -17.6875, + -2.125f, + 0.0f, + -17.6875f, NULL, - -3.25, - 0, - -19.75, - 0, - 0, - 1, - 0, - 1, - 0}, + -3.25f, + 0.0f, + -19.75f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1167,19 +1167,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_57", 1, - -23.875, - 0, - -54.9375, + -23.875f, + 0.0f, + -54.9375f, NULL, - -25.1875, - 0, - -52.625, - 0, - 0, - 1, - 0, - 1, - 0}, + -25.1875f, + 0.0f, + -52.625f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_flower, @@ -1191,19 +1191,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int04", 5, - -94, - 4, - -15.3125, + -94.0f, + 4.0f, + -15.3125f, NULL, - -95.9375, - 4, - -14.25, - 0, - 0, - 1, - 0, - 1, - 0}, + -95.9375f, + 4.0f, + -14.25f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1215,19 +1215,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_36", 3, - 18.6875, - 0, - -14.6375, + 18.6875f, + 0.0f, + -14.6375f, NULL, - 18.75, - 0, - -10.95, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 18.75f, + 0.0f, + -10.95f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1239,19 +1239,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_30", 1, - 25.1375, - 2, - 25.5, + 25.1375f, + 2.0f, + 25.5f, NULL, - 21.8875, - 1.84509, - 25.5, - 0, - 0, - 1, - 0, - 1, - 0}, + 21.8875f, + 1.84509f, + 25.5f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1263,19 +1263,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_30", 3, - 27.45, - 2, - 25.5, + 27.45f, + 2.0f, + 25.5f, NULL, - 30.95, - 2, - 25.5, - 0, - 0, - 1, - 0, - 1, - 0}, + 30.95f, + 2.0f, + 25.5f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1287,19 +1287,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_78", 1, - 64.35749, - 0, - 10.95579, + 64.35749f, + 0.0f, + 10.95579f, NULL, - 66.67, - 0.256506, - 10.95579, - 0, - 0, - -1, - 0, - 1, - 0}, + 66.67f, + 0.256506f, + 10.95579f, + 0.0f, + 0.0f, + -1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1311,19 +1311,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_38", 1, - 9.625, - 0, - -45.375, + 9.625f, + 0.0f, + -45.375f, NULL, - 9.625, - 0, - -4e1, - 0.5, - 0, - 0.866, - 0, - 1, - 0}, + 9.625f, + 0.0f, + -40.0f, + 0.5f, + 0.0f, + 0.866f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1335,19 +1335,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_76", 3, - 65, - 0, - 7.0125, + 65.0f, + 0.0f, + 7.0125f, NULL, - 62, - 0, - 2.825, - 0, - 0, - 1, - 0, - 1, - 0}, + 62.0f, + 0.0f, + 2.825f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1359,19 +1359,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_35", 1, - 27.4375, - 0, - -8.125, + 27.4375f, + 0.0f, + -8.125f, NULL, - 33.375, - 0, - -8.125, - 0.342, - 0, - 0.94, - 0, - 1, - 0}, + 33.375f, + 0.0f, + -8.125f, + 0.342f, + 0.0f, + 0.94f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1383,19 +1383,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_23", 3, - 18.825, - 1.7575, - 30.125, + 18.825f, + 1.7575f, + 30.125f, NULL, - 18.825, - 1, - 25.5, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 18.825f, + 1.0f, + 25.5f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1407,19 +1407,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_130", 1, - -67.5, - 14, - 23.25, + -67.5f, + 14.0f, + 23.25f, NULL, - -63.6875, - 14, - 21.4375, - 0, - 0, - 1, - 0, - 1, - 0}, + -63.6875f, + 14.0f, + 21.4375f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1431,19 +1431,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_13", 3, - -92.75, - 4, - 2.5, + -92.75f, + 4.0f, + 2.5f, NULL, - -95.625, - 4, - 2.5, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + -95.625f, + 4.0f, + 2.5f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1455,19 +1455,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_09", 1, - -8e1, - 4, - -52.6875, + -80.0f, + 4.0f, + -52.6875f, NULL, - -8e1, - 4, - -55.875, - 0, - 0, - 1, - 0, - 1, - 0}, + -80.0f, + 4.0f, + -55.875f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1479,19 +1479,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_53", 1, - -8.75, - 0, - -45.5, + -8.75f, + 0.0f, + -45.5f, NULL, - -8.75, - 0, - -40.75, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + -8.75f, + 0.0f, + -40.75f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1503,19 +1503,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_37", 3, - 27.5, - 0, - -32, + 27.5f, + 0.0f, + -32.0f, NULL, - 35.625, - 0, - -32, - 0, - 0, - 1, - 0, - 1, - 0}, + 35.625f, + 0.0f, + -32.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1527,19 +1527,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_127", 1, - -62.25, - 14, - 26.6875, + -62.25f, + 14.0f, + 26.6875f, NULL, - -61, - 14, - 26.8125, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + -61.0f, + 14.0f, + 26.8125f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1551,19 +1551,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_01", 1, - -16, - 0, - -18.575, + -16.0f, + 0.0f, + -18.575f, NULL, - -16, - 0, - -22.45, - 0, - 0, - 1, - 0, - 1, - 0}, + -16.0f, + 0.0f, + -22.45f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1575,19 +1575,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_17", 1, - -76.4325, - 8, - 5.875, + -76.4325f, + 8.0f, + 5.875f, NULL, - -78, - 8, - 2.375, - 0, - 0, - 1, - 0, - 1, - 0}, + -78.0f, + 8.0f, + 2.375f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1599,19 +1599,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_38", 1, - -77.1875, - 7, - -36.9375, + -77.1875f, + 7.0f, + -36.9375f, NULL, - -72, - 7, - -36.5, - 0, - 0, - 1, - 0, - 1, - 0}, + -72.0f, + 7.0f, + -36.5f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1623,19 +1623,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg02_82", 1, - 97, - 0, - -42.125, + 97.0f, + 0.0f, + -42.125f, NULL, - 98.1875, - 0, - -41.3125, - 0.707, - 0, - 0.707, - 0, - 1, - 0}, + 98.1875f, + 0.0f, + -41.3125f, + 0.707f, + 0.0f, + 0.707f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_palm, @@ -1647,19 +1647,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_15", 3, - 96.5, - 4, - 18.75, + 96.5f, + 4.0f, + 18.75f, NULL, - 97.5, - 4, - 18.25, - 0, - 0, - 1, - 0, - 1, - 0}, + 97.5f, + 4.0f, + 18.25f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1671,19 +1671,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - -67.5, - 14, - 23.25, - 0, - 0, - 1, - 0, - 1, - 0}, + -67.5f, + 14.0f, + 23.25f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1695,19 +1695,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "int48", 4, - 87.9875, - 9, - -1.125, + 87.9875f, + 9.0f, + -1.125f, NULL, - 88.75, - 8.75, - 0.875, - 0.259, - 0, - 0.966, - 0, - 1, - 0}, + 88.75f, + 8.75f, + 0.875f, + 0.259f, + 0.0f, + 0.966f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1719,19 +1719,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_01", 3, - -48.625, - 7, - -23.1875, + -48.625f, + 7.0f, + -23.1875f, NULL, - -50.4375, - 7, - -25, - 0, - 0, - 1, - 0, - 1, - 0}, + -50.4375f, + 7.0f, + -25.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1743,19 +1743,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_01", 0, - -48.625, - 7, - -23.1875, + -48.625f, + 7.0f, + -23.1875f, NULL, - -49.125, - 7, - -25.8, - 0, - 0, - 1, - 0, - 1, - 0}, + -49.125f, + 7.0f, + -25.8f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1767,19 +1767,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg01_01", 3, - -48.625, - 7, - -23.1875, + -48.625f, + 7.0f, + -23.1875f, NULL, - -51.25, - 7, - -23.75, - 0, - 0, - 1, - 0, - 1, - 0}, + -51.25f, + 7.0f, + -23.75f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_act1 | LegoPlantInfo::c_act2 | LegoPlantInfo::c_act3, LegoPlantInfo::e_tree, @@ -1791,19 +1791,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "edg00_129", 1, - -56.75, - 14, - 26.625, + -56.75f, + 14.0f, + 26.625f, NULL, - -58, - 14, - 26.75, - 0, - 0, - 1, - 0, - 1, - 0}, + -58.0f, + 14.0f, + 26.75f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_imain, LegoPlantInfo::e_flower, @@ -1815,19 +1815,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - -4.33403, - -2.18029, - -1.53595, - 0, - 0, - 1, - 0, - 1, - 0}, + -4.33403f, + -2.18029f, + -1.53595f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_imain, LegoPlantInfo::e_flower, @@ -1839,19 +1839,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - 1.280536, - -2.18024, - -1.57823, - 0, - 0, - -1, - 0, - 1, - 0}, + 1.280536f, + -2.18024f, + -1.57823f, + 0.0f, + 0.0f, + -1.0f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_ielev, LegoPlantInfo::e_flower, @@ -1863,19 +1863,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - -1.52465, - -0.52473, - -11.1617, - -0.0175, - 0, - -0.9998, - 0, - 1, - 0}, + -1.52465f, + -0.52473f, + -11.1617f, + -0.0175f, + 0.0f, + -0.9998f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_ielev, LegoPlantInfo::e_flower, @@ -1887,19 +1887,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - 1.439563, - -0.52554, - -11.1846, - 0.866, - 0, - -0.5, - 0, - 1, - 0}, + 1.439563f, + -0.52554f, + -11.1846f, + 0.866f, + 0.0f, + -0.5f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_iisle, LegoPlantInfo::e_flower, @@ -1911,19 +1911,19 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, + 0.0f, + 0.0f, + 0.0f, NULL, - -1.82829, - -0.52554, - -11.7741, - 0.866, - 0, - -0.5, - 0, - 1, - 0}, + -1.82829f, + -0.52554f, + -11.7741f, + 0.866f, + 0.0f, + -0.5f, + 0.0f, + 1.0f, + 0.0f}, {NULL, LegoPlantInfo::c_iisle, LegoPlantInfo::e_flower, @@ -1935,17 +1935,17 @@ LegoPlantInfo g_plantInfoInit[81] = { -1, "", 1, - 0, - 0, - 0, - NULL, - 1.801479, - -0.52473, - -11.75, - -0.0175, - 0, - -0.9998, - 0, - 1, - 0} + 0.0f, + 0.0f, + 0.0f, + NULL, + 1.801479f, + -0.52473f, + -11.75f, + -0.0175f, + 0.0f, + -0.9998f, + 0.0f, + 1.0f, + 0.0f} }; diff --git a/LEGO1/lego/legoomni/src/entity/legolocations.cpp b/LEGO1/lego/legoomni/src/entity/legolocations.cpp index 393f4b68..5926704f 100644 --- a/LEGO1/lego/legoomni/src/entity/legolocations.cpp +++ b/LEGO1/lego/legoomni/src/entity/legolocations.cpp @@ -7,1038 +7,1052 @@ DECOMP_SIZE_ASSERT(LegoLocation::Boundary, 0x18) LegoLocation g_locations[] = { {0, "look at origin from z=-8", - 0, - 1.25, - -8, - 0, - 0, - 1, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 0.0f, + 1.25f, + -8.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {1, "LCAMBA1", - 0.852546, - 1.25, - -17.078703, - 0.990515, - 0, - -0.137405, - 0, - 1, - 0, - {"EDG02_13", 2, 0.75, 0, 0.25, 1}, - {NULL, 0, 0, 0, 0, 0}, + 0.852546f, + 1.25f, + -17.078703f, + 0.990515f, + 0.0f, + -0.137405f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_13", 2, 0.75f, 0, 0.25f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 40}, {2, "LCAMBA2", - 3.505301, - 1.25, - -27.955006, - -0.002102, - 0, - 0.999998, - 0, - 1, - 0, - {"EDG02_37", 2, 0.75, 0, 0.25, 1}, - {NULL, 0, 0, 0, 0, 0}, + 3.505301f, + 1.25f, + -27.955006f, + -0.002102f, + 0.0f, + 0.999998f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_37", 2, 0.75f, 0, 0.25f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 20}, {3, "LCAMBA3", - -7.472569, - 1.25, - -16.129034, - 1, - 0, - 0.000926, - 0, - 1, - 0, - {"EDG02_26", 0, 0.75, 2, 0.25, 1}, - {NULL, 0, 0, 0, 0, 0}, + -7.472569f, + 1.25f, + -16.129034f, + 1.0f, + 0.0f, + 0.000926f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_26", 0, 0.75f, 2, 0.25f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 20}, {4, "LCAMBA4", - 38.55205, - 1.25, - -16.129, - -0.999997, - 0, - 0.002449, - 0, - 1, - 0, - {"EDG00_146", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + 38.55205f, + 1.25f, + -16.129f, + -0.999997f, + 0.0f, + 0.002449f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_146", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 30}, {5, "LCAMCA1", - -36.778473, - -1.996432, - 30.392212, - 0.001013, - 0, - -0.999999, - 0, - 1, - 0, - {"INT01", 2, 0.5, 6, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -36.778473f, + -1.996432f, + 30.392212f, + 0.001013f, + 0.0f, + -0.999999f, + 0.0f, + 1.0f, + 0.0f, + {"INT01", 2, 0.5f, 6, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {6, "LCAMCA2", - -36.774277, - -1.996432, - 24.695135, - -0.305789, - 0.001457, - 0.952098, - 0.000446, - 0.999999, - -0.001387, - {"EDG00_104", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -36.774277f, + -1.996432f, + 24.695135f, + -0.305789f, + 0.001457f, + 0.952098f, + 0.000446f, + 0.999999f, + -0.001387f, + {"EDG00_104", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {7, "LCAMCA3", - -36.888363, - 0.5625, - 33.169434, - -0.091475, - -0.001896, - 0.995806, - -0.000173, - 0.999998, - 0.001888, - {"EDG02_58", 2, 0.25, 0, 0.75, 1}, - {NULL, 0, 0, 0, 0, 0}, + -36.888363f, + 0.5625f, + 33.169434f, + -0.091475f, + -0.001896f, + 0.995806f, + -0.000173f, + 0.999998f, + 0.001888f, + {"EDG02_58", 2, 0.25f, 0, 0.75f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {8, "LCAMGS1", - 27.647768, - 1.25, - -4.07201, - 0, - 0, - 1, - 0, - 1, - 0, - {"EDG02_40", 2, 0.25, 0, 0.25, 1}, - {NULL, 0, 0, 0, 0, 0}, + 27.647768f, + 1.25f, + -4.07201f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_40", 2, 0.25f, 0, 0.25f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 70}, {9, "LCAMGS2", - 25.153421, - 1.25, - 6.101026, - 0, - 0, - -1, - 0, - 1, - 0, - {"INT19", 1, 0.75, 0, 0.75, 1}, - {NULL, 0, 0, 0, 0, 0}, + 25.153421f, + 1.25f, + 6.101026f, + 0.0f, + 0.0f, + -1.0f, + 0.0f, + 1.0f, + 0.0f, + {"INT19", 1, 0.75f, 0, 0.75f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {10, "LCAMGS3", - 29.506308, - 1.25, - -1.23529, - -1, - 0, - 0, - 0, - 1, - 0, - {"EDG00_74", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + 29.506308f, + 1.25f, + -1.23529f, + -1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_74", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {11, "LCAMHO1", - 84.22306, - 4.78298, - 29.150623, - 0.779248, - 0, - -0.626715, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 84.22306f, + 4.78298f, + 29.150623f, + 0.779248f, + 0.0f, + -0.626715f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 50}, {12, "LCAMHO2", - 90.92687, - 4.78298, - 23.340658, - -0.983254, - 0, - 0.182241, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 90.92687f, + 4.78298f, + 23.340658f, + -0.983254f, + 0.0f, + 0.182241f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {13, "LCAMHO3", - 87.66666, - 4.829471, - 20.905437, - 0.841755, - -0.006868, - 0.539817, - 0.005781, - 0.999976, - 0.003708, - {"EDG02_27", 1, 0.89, 2, 0.89, 0}, - {NULL, 0, 0, 0, 0, 0}, + 87.66666f, + 4.829471f, + 20.905437f, + 0.841755f, + -0.006868f, + 0.539817f, + 0.005781f, + 0.999976f, + 0.003708f, + {"EDG02_27", 1, 0.89f, 2, 0.89f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {14, "LCAMHO4", - 86.33506, - 4.814447, - 20.489912, - 0.948965, - 0.035898, - 0.313331, - -0.034088, - 0.999355, - -0.011255, - {"EDG02_27", 1, 0.89, 2, 0.89, 0}, - {NULL, 0, 0, 0, 0, 0}, + 86.33506f, + 4.814447f, + 20.489912f, + 0.948965f, + 0.035898f, + 0.313331f, + -0.034088f, + 0.999355f, + -0.011255f, + {"EDG02_27", 1, 0.89f, 2, 0.89f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {15, "LCAMIC1", - 80.11602, - 10.193289, - -17.946644, - 0.664706, - 0, - 0.747105, - 0, - 1, - 0, - {"EDG00_69", 2, 0.5, 0, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + 80.11602f, + 10.193289f, + -17.946644f, + 0.664706f, + 0.0f, + 0.747105f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_69", 2, 0.5f, 0, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {16, "LCAMIC2", - 86.31804, - 10.193289, - -11.24872, - -0.936663, - 0, - -0.350231, - 0, - 1, - 0, - {"EDG02_66", 2, 0.5, 0, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + 86.31804f, + 10.193289f, + -11.24872f, + -0.936663f, + 0.0f, + -0.350231f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_66", 2, 0.5f, 0, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {17, "LCAMIC3", - 86.82608, - 10.193289, - -4.398705, - 0.466761, - 0, - -0.884383, - 0, - 1, - 0, - {"EDG02_68", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + 86.82608f, + 10.193289f, + -4.398705f, + 0.466761f, + 0.0f, + -0.884383f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_68", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 20}, {18, "LCAMJA1", - 95.05279, - 1.318484, - -46.451622, - 0.93196, - 0.006837, - 0.362497, - -0.006372, - 0.999977, - -0.002478, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 95.05279f, + 1.318484f, + -46.451622f, + 0.93196f, + 0.006837f, + 0.362497f, + -0.006372f, + 0.999977f, + -0.002478f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {19, "LCAMJA2", - 97.214066, - 1.318484, - -49.035267, - -0.892783, - -0.012109, - 0.450324, - -0.010811, - 0.999927, - 0.005453, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 97.214066f, + 1.318484f, + -49.035267f, + -0.892783f, + -0.012109f, + 0.450324f, + -0.010811f, + 0.999927f, + 0.005453f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {20, "LCAMJA3", - 94.12146, - 1.25, - -48.242523, - -1, - 0, - -0.000415, - 0, - 1, - 0, - {"INT33", 1, 0.9, 3, 0.9, 0}, - {NULL, 0, 0, 0, 0, 0}, + 94.12146f, + 1.25f, + -48.242523f, + -1.0f, + 0.0f, + -0.000415f, + 0.0f, + 1.0f, + 0.0f, + {"INT33", 1, 0.9f, 3, 0.9f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {21, "LCAMJA4", - 95.58649, - 1.17483, - -43.42485, - 0.137268, - 0.010506, - -0.990478, - -0.001442, - 0.999945, - 0.010407, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 95.58649f, + 1.17483f, + -43.42485f, + 0.137268f, + 0.010506f, + -0.990478f, + -0.001442f, + 0.999945f, + 0.010407f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {22, "LCAMJA5", - 91.586105, - 1.17483, - -48.882996, - 0.702508, - 0.010117, - 0.711604, - -0.007107, - 0.999949, - -0.007199, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 91.586105f, + 1.17483f, + -48.882996f, + 0.702508f, + 0.010117f, + 0.711604f, + -0.007107f, + 0.999949f, + -0.007199f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {23, "LCAMJS1", - 9.885858, - 0.154871, - -54.080086, - 0.573803, - -0.001138, - -0.818993, - 0.000653, - 0.999999, - -0.000932, - {"INT26", 0, 0.5, 3, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + 9.885858f, + 0.154871f, + -54.080086f, + 0.573803f, + -0.001138f, + -0.818993f, + 0.000653f, + 0.999999f, + -0.000932f, + {"INT26", 0, 0.5f, 3, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {24, "LCAMJS2", - 14.753909, - 0.125, - -55.5238, - -0.789437, - 0, - -0.613832, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 14.753909f, + 0.125f, + -55.5238f, + -0.789437f, + 0.0f, + -0.613832f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {25, "LCAMJS3", - 12.373611, - 0.925977, - -64.69941, - 0.114162, - 0, - 0.993462, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 12.373611f, + 0.925977f, + -64.69941f, + 0.114162f, + 0.0f, + 0.993462f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {26, "LCAMJS4", - 27.136557, - 1.125, - -41.8613, - -0.187784, - -0.001389, - -0.982209, - -0.000261, - 0.999999, - -0.001364, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 27.136557f, + 1.125f, + -41.8613f, + -0.187784f, + -0.001389f, + -0.982209f, + -0.000261f, + 0.999999f, + -0.001364f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {27, "LCAMMT1", - -63.277508, - 15.25, - 23.717245, - -0.985194, - 0, - 0.171445, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -63.277508f, + 15.25f, + 23.717245f, + -0.985194f, + 0.0f, + 0.171445f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 50}, {28, "LCAMMT2", - -58.28056, - 15.25, - 22.75, - 0.829409, - 0, - -0.558642, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -58.28056f, + 15.25f, + 22.75f, + 0.829409f, + 0.0f, + -0.558642f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {29, "LCAMPK1", - 39.875, - 1.25, - -1, - 0.587492, - 0, - -0.80923, - 0, - 1, - 0, - {"EDG00_83", 0, 0.9, 2, 0.9, 0}, - {NULL, 0, 0, 0, 0, 0}, + 39.875f, + 1.25f, + -1.0f, + 0.587492f, + 0.0f, + -0.80923f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_83", 0, 0.9f, 2, 0.9f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 50}, {30, "LCAMPK2", - 63.75, - 1.25, - 15.5625, - -0.968277, - 0, - -0.249878, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 63.75f, + 1.25f, + 15.5625f, + -0.968277f, + 0.0f, + -0.249878f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {31, "LCAMPK4", - 49.5625, - 1.25, - 0, - -0.480011, - 0, - -0.877262, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 49.5625f, + 1.25f, + 0.0f, + -0.480011f, + 0.0f, + -0.877262f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {32, "LCAMPO1", - -24.38507, - 1.25, - -55.71749, - -1, - 0, - 0.000066, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -24.38507f, + 1.25f, + -55.71749f, + -1.0f, + 0.0f, + 0.000066f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 20}, {33, "LCAMPO2", - -41.35899, - 1.790912, - -56.728477, - 0.967347, - 0, - 0.253455, - 0, - 1, - 0, - {"EDG00_191", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -41.35899f, + 1.790912f, + -56.728477f, + 0.967347f, + 0.0f, + 0.253455f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_191", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {34, "LCAMPS1", - 63.1466, - 2.25, - -81.58665, - 0.860361, - 0, - -0.509685, - 0, - 1, - 0, - {"EDG02_40", 0, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + 63.1466f, + 2.25f, + -81.58665f, + 0.860361f, + 0.0f, + -0.509685f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_40", 0, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {35, "LCAMPS2", - 70.99095, - 2.25, - -87.82898, - -0.746009, - 0, - 0.665936, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 70.99095f, + 2.25f, + -87.82898f, + -0.746009f, + 0.0f, + 0.665936f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {36, "LCAMPS3", - 73.92391, - 2.25, - -71.65845, - -0.480404, - 0, - -0.877047, - 0, - 1, - 0, - {"EDG02_66", 1, 0.15, 2, 0.15, 0}, - {NULL, 0, 0, 0, 0, 0}, + 73.92391f, + 2.25f, + -71.65845f, + -0.480404f, + 0.0f, + -0.877047f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_66", 1, 0.15f, 2, 0.15f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {37, "LCAMPS4", - 61.471172, - 1.829919, - -74.37842, - 0.812146, - 0, - -0.583455, - 0, - 1, - 0, - {"EDG02_40", 0, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + 61.471172f, + 1.829919f, + -74.37842f, + 0.812146f, + 0.0f, + -0.583455f, + 0.0f, + 1.0f, + 0.0f, + {"EDG02_40", 0, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {38, "LCAMPZ1", - -19.517637, - 1.25, - -44.645412, - -0.582251, - 0, - 0.813009, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -19.517637f, + 1.25f, + -44.645412f, + -0.582251f, + 0.0f, + 0.813009f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 80}, {39, "LCAMPZ2", - -21.870003, - 1.25, - -41.47747, - 0.310142, - 0, - 0.95069, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -21.870003f, + 1.25f, + -41.47747f, + 0.310142f, + 0.0f, + 0.95069f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 90}, {40, "LCAMPZ3", - -21.860731, - 1.25, - -41.47234, - 0.877738, - 0, - -0.479141, - 0, - 1, - 0, - {"EDG00_24", 0, 0.9, 2, 0.9, 1}, - {NULL, 0, 0, 0, 0, 0}, + -21.860731f, + 1.25f, + -41.47234f, + 0.877738f, + 0.0f, + -0.479141f, + 0.0f, + 1.0f, + 0.0f, + {"EDG00_24", 0, 0.9f, 2, 0.9f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {41, "LCAMPZ4", - -20.492962, - 1.25, - -43.951485, - 0, - 0, - 1, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -20.492962f, + 1.25f, + -43.951485f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {42, "LCAMPZ5", - -11.0625, - 1.25, - -45.75, - -0.998358, - 0, - -0.057283, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -11.0625f, + 1.25f, + -45.75f, + -0.998358f, + 0.0f, + -0.057283f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 50}, {43, "LCAMPZ6", - -14.837131, - 1.25, - -41.580185, - -0.485221, - 0, - 0.874392, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -14.837131f, + 1.25f, + -41.580185f, + -0.485221f, + 0.0f, + 0.874392f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {44, "LCAMPZ7", - -22.17942, - 1.25, - -41.132347, - 0.697186, - 0, - 0.716891, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -22.17942f, + 1.25f, + -41.132347f, + 0.697186f, + 0.0f, + 0.716891f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {45, "LCAMRA1", - -68.90462, - 10.238018, - -15.521397, - -0.150999, - -0.051266, - -0.987204, - -0.007751, - 0.998685, - -0.050677, - {"EDG00_03", 1, 0.5, 3, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -68.90462f, + 10.238018f, + -15.521397f, + -0.150999f, + -0.051266f, + -0.987204f, + -0.007751f, + 0.998685f, + -0.050677f, + {"EDG00_03", 1, 0.5f, 3, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {46, "LCAMRA2", - -67.931305, - 7.883309, - -28.911201, - -0.596641, - -0.000131, - 0.802509, - -0.000078, - 1, - 0.000105, - {"EDG01_17", 0, 0.5, 3, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -67.931305f, + 7.883309f, + -28.911201f, + -0.596641f, + -0.000131f, + 0.802509f, + -0.000078f, + 1.0f, + 0.000105f, + {"EDG01_17", 0, 0.5f, 3, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {47, "LCAMRA3", - -57.06778, - 7.883309, - -45.567757, - -0.982252, - -0.000114, - 0.187564, - -0.000112, - 1, - 0.000021, - {"EDG01_40", 2, 0.5, 0, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -57.06778f, + 7.883309f, + -45.567757f, + -0.982252f, + -0.000114f, + 0.187564f, + -0.000112f, + 1.0f, + 0.000021f, + {"EDG01_40", 2, 0.5f, 0, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {48, "LCAMRA4", - -72.23135, - 7.912604, - -45.26192, - 0.993571, - -0.036148, - -0.10728, - 0.035939, - 0.999346, - -0.00388, - {"EDG01_27", 0, 0.5, 2, 0.5, 1}, - {NULL, 0, 0, 0, 0, 0}, + -72.23135f, + 7.912604f, + -45.26192f, + 0.993571f, + -0.036148f, + -0.10728f, + 0.035939f, + 0.999346f, + -0.00388f, + {"EDG01_27", 0, 0.5f, 2, 0.5f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {49, "LCAMRA5", - -84.27638, - 4.683791, - -52.99282, - 0.976109, - -0.025475, - -0.215783, - 0.024875, - 0.999675, - -0.005499, - {"EDG01_08", 2, 0.7, 0, 0.7, 1}, - {NULL, 0, 0, 0, 0, 0}, + -84.27638f, + 4.683791f, + -52.99282f, + 0.976109f, + -0.025475f, + -0.215783f, + 0.024875f, + 0.999675f, + -0.005499f, + {"EDG01_08", 2, 0.7f, 0, 0.7f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 25}, {50, "LCAMRA6", - -86.96998, - 5.265254, - -16.33013, - -0.999696, - 0.000378, - -0.024655, - 0.000378, - 1, - 0.000009, - {"EDG01_13", 1, 0.2, 0, 0.2, 1}, - {NULL, 0, 0, 0, 0, 0}, + -86.96998f, + 5.265254f, + -16.33013f, + -0.999696f, + 0.000378f, + -0.024655f, + 0.000378f, + 1.0f, + 0.000009f, + {"EDG01_13", 1, 0.2f, 0, 0.2f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {51, "LCAMRT1", - -11.308265, - 1.25, - 9.629765, - 1, - 0, - 0, - 0, - 1, - 0, - {"EDG03_10", 0, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + -11.308265f, + 1.25f, + 9.629765f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + {"EDG03_10", 0, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 80}, {52, "LCAMRT2", - -2.950222, - 1.25, - 12.345603, - 0.816763, - 0, - -0.576974, - 0, - 1, - 0, - {"EDG03_10", 0, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + -2.950222f, + 1.25f, + 12.345603f, + 0.816763f, + 0.0f, + -0.576974f, + 0.0f, + 1.0f, + 0.0f, + {"EDG03_10", 0, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {53, "LCAMRT3", - -0.87654, - 1.25, - 11.844613, - 0.006162, - 0, - -0.999981, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -0.87654f, + 1.25f, + 11.844613f, + 0.006162f, + 0.0f, + -0.999981f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, {54, "LCAMRT4", - 0.4375, - 1.25, - 7, - -0.748454, - 0, - -0.663187, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 0.4375f, + 1.25f, + 7.0f, + -0.748454f, + 0.0f, + -0.663187f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {55, "LCAMRT5", - -27.213715, - 1.25, - 13.280918, - -0.670318, - 0, - -0.742074, - 0, - 1, - 0, - {"EDG03_05", 1, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + -27.213715f, + 1.25f, + 13.280918f, + -0.670318f, + 0.0f, + -0.742074f, + 0.0f, + 1.0f, + 0.0f, + {"EDG03_05", 1, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {56, "LCAMRT6", - -21.811115, - 1.25, - 9.006517, - 0.97496, - 0, - 0.222379, - 0, - 1, - 0, - {"EDG03_10", 0, 0.5, 2, 0.5, 0}, - {NULL, 0, 0, 0, 0, 0}, + -21.811115f, + 1.25f, + 9.006517f, + 0.97496f, + 0.0f, + 0.222379f, + 0.0f, + 1.0f, + 0.0f, + {"EDG03_10", 0, 0.5f, 2, 0.5f, 0}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 60}, {57, "LCAMST1", - -40.1615, - 2.02756, - -56.701893, - -0.958601, - 0, - -0.284751, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -40.1615f, + 2.02756f, + -56.701893f, + -0.958601f, + 0.0f, + -0.284751f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 20}, {58, "LCAMST2", - -48.750553, - 2.703701, - -55.472034, - -0.032008, - 0, - -0.999488, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -48.750553f, + 2.703701f, + -55.472034f, + -0.032008f, + 0.0f, + -0.999488f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {59, "LCAMZG1", - 31.694365, - 1.25, - -2.814015, - -0.650445, - 0, - 0.759553, - 0, - 1, - 0, - {"INT22", 0, 0.4, 2, 0.4, 1}, - {NULL, 0, 0, 0, 0, 0}, + 31.694365f, + 1.25f, + -2.814015f, + -0.650445f, + 0.0f, + 0.759553f, + 0.0f, + 1.0f, + 0.0f, + {"INT22", 0, 0.4f, 2, 0.4f, 1}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {60, "LCAMZI1", - 93.37283, - 10.1875, - -10.382307, - 0, - 0, - 1, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.37283f, + 10.1875f, + -10.382307f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {61, "LCAMZI2", - 93.37283, - 19.4375, - -10.382307, - 0, - 0, - 1, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.37283f, + 19.4375f, + -10.382307f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {62, "LCAMZIE", - 93.375, - 19.4375, - -10.375, - 0.967075, - -0.254493, - 0, - 0.254493, - 0.967075, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.375f, + 19.4375f, + -10.375f, + 0.967075f, + -0.254493f, + 0.0f, + 0.254493f, + 0.967075f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {63, "LCAMZIN", - 93.37283, - 19.4375, - -10.382307, - 0, - -0.254006, - 0.967203, - 0, - 0.967203, - 0.254006, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.37283f, + 19.4375f, + -10.382307f, + 0.0f, + -0.254006f, + 0.967203f, + 0.0f, + 0.967203f, + 0.254006f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {64, "LCAMZIS", - 93.37283, - 19.4375, - -10.382307, - 0, - -0.254982, - -0.966946, - 0, - 0.966946, - -0.254982, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.37283f, + 19.4375f, + -10.382307f, + 0.0f, + -0.254982f, + -0.966946f, + 0.0f, + 0.966946f, + -0.254982f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {65, "LCAMZIW", - 93.375, - 19.4375, - -10.375, - -0.967075, - -0.254493, - 0, - -0.254493, - 0.967075, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 93.375f, + 19.4375f, + -10.375f, + -0.967075f, + -0.254493f, + 0.0f, + -0.254493f, + 0.967075f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {66, "LCAMZP1", - 73.70144, - 2.25, - -88.91317, - -0.911398, - 0, - 0.411526, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + 73.70144f, + 2.25f, + -88.91317f, + -0.911398f, + 0.0f, + 0.411526f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {67, "LCAMRT7", - -1.170637, - 1.25, - 5.082029, - -1, - 0, - -0.000599, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -1.170637f, + 1.25f, + 5.082029f, + -1.0f, + 0.0f, + -0.000599f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 0}, {68, "LCAMJS5", - -1.734375, - -0.625, - -61.8125, - -0.454574, - 0, - -0.890709, - 0, - 1, - 0, - {NULL, 0, 0, 0, 0, 0}, - {NULL, 0, 0, 0, 0, 0}, + -1.734375f, + -0.625f, + -61.8125f, + -0.454574f, + 0.0f, + -0.890709f, + 0.0f, + 1.0f, + 0.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, FALSE, 100}, - {69, "overhead", 0, 135, 0, 0, -1, 0, 0, 0, 1, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, FALSE, 0} + {69, + "overhead", + 0.0f, + 135.0f, + 0.0f, + 0.0f, + -1.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + {NULL, 0, 0.0f, 0, 0.0f, FALSE}, + FALSE, + 0} }; diff --git a/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp b/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp index 66cc40e5..182945d5 100644 --- a/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp @@ -183,6 +183,7 @@ void LegoAnimActor::ClearMaps() } // FUNCTION: LEGO1 0x1001c870 +// FUNCTION: BETA10 0x1003e7e4 void LegoAnimActor::SetWorldSpeed(MxFloat p_worldSpeed) { if (p_worldSpeed < 0) { diff --git a/LEGO1/lego/sources/misc/legostorage.h b/LEGO1/lego/sources/misc/legostorage.h index 5de72303..553983fd 100644 --- a/LEGO1/lego/sources/misc/legostorage.h +++ b/LEGO1/lego/sources/misc/legostorage.h @@ -138,7 +138,7 @@ class LegoFile : public LegoStorage { const char* data = p_str.GetData(); LegoU32 fullLength = strlen(data); - LegoU16 limitedLength = fullLength; + LegoU16 limitedLength = (LegoU16) fullLength; Write(&limitedLength, sizeof(limitedLength)); Write((char*) data, (LegoS16) fullLength); diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 64164a4e..309c430b 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -198,12 +198,12 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) { if (m_unk0x30 == c_bit1) { p_v = m_unk0x00; - p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0; + p_v[3] = (float) ((1.0 - p_f) * acos((double) p_v[3]) * 2.0); return p_v.NormalizeQuaternion(); } else if (m_unk0x30 == c_bit2) { p_v = m_unk0x18; - p_v[3] = p_f * acos((double) p_v[3]) * 2.0; + p_v[3] = (float) (p_f * acos((double) p_v[3]) * 2.0); return p_v.NormalizeQuaternion(); } else if (m_unk0x30 == (c_bit1 | c_bit2)) { @@ -225,7 +225,7 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) } for (i = 0; i < 4; i++) { - p_v[i] = m_unk0x00[i] * a + m_unk0x18[i] * b; + p_v[i] = (float) (m_unk0x00[i] * a + m_unk0x18[i] * b); } } else { @@ -237,7 +237,7 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) b = sin(p_f * 1.570796326794895); for (i = 0; i < 3; i++) { - p_v[i] = m_unk0x00[i] * a + p_v[i] * b; + p_v[i] = (float) (m_unk0x00[i] * a + p_v[i] * b); } } diff --git a/LEGO1/realtime/matrix.h b/LEGO1/realtime/matrix.h index b0ace048..2f52ce71 100644 --- a/LEGO1/realtime/matrix.h +++ b/LEGO1/realtime/matrix.h @@ -204,7 +204,7 @@ inline void Matrix4::ToQuaternion(Vector4& p_outQuat) { float trace = m_data[0][0] + m_data[1][1] + m_data[2][2]; if (trace > 0) { - trace = sqrt(trace + 1.0); + trace = (float) sqrt(trace + 1.0); p_outQuat[3] = trace * 0.5f; trace = 0.5f / trace; p_outQuat[0] = (m_data[2][1] - m_data[1][2]) * trace; @@ -228,7 +228,8 @@ inline void Matrix4::ToQuaternion(Vector4& p_outQuat) int next = rotateIndex[largest]; int nextNext = rotateIndex[next]; - float trace = sqrt(*Element(largest, largest) - (*Element(nextNext, nextNext) + *Element(next, next)) + 1.0); + float trace = + (float) (sqrt(*Element(largest, largest) - (*Element(nextNext, nextNext) + *Element(next, next)) + 1.0)); p_outQuat[largest] = trace * 0.5f; trace = 0.5f / trace; @@ -276,14 +277,14 @@ inline int Matrix4::FromQuaternion(const Vector4& p_vec) m_data[1][2] = v24 - v13; m_data[2][2] = 1.0f - (v18 + v17); - m_data[3][0] = 0; - m_data[3][1] = 0; - m_data[3][2] = 0; + m_data[3][0] = 0.0f; + m_data[3][1] = 0.0f; + m_data[3][2] = 0.0f; m_data[3][3] = 1.0f; - m_data[0][3] = 0; - m_data[1][3] = 0; - m_data[2][3] = 0; + m_data[0][3] = 0.0f; + m_data[1][3] = 0.0f; + m_data[2][3] = 0.0f; return 0; } diff --git a/LEGO1/tgl/tglvector.h b/LEGO1/tgl/tglvector.h index 8612724f..49d60c0a 100644 --- a/LEGO1/tgl/tglvector.h +++ b/LEGO1/tgl/tglvector.h @@ -10,15 +10,15 @@ namespace Tgl namespace Constant { -const float Pi = 3.14159265358979323846; +const double Pi = 3.14159265358979323846; }; -inline float DegreesToRadians(float degrees) +inline double DegreesToRadians(double degrees) { return Constant::Pi * (degrees / 180.0); } -inline float RadiansToDegrees(float radians) +inline double RadiansToDegrees(double radians) { return (radians / Constant::Pi) * 180.0; } From 667ea3ff82041a309e8b92480a8c28aee64690c8 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Wed, 25 Dec 2024 14:05:28 -0700 Subject: [PATCH 4/9] Various matches with BETA functions (#1281) * Match functions to BETA * Improve `Matrix4::FromQuaternion` * Improve `Matrix4::ToQuaternion` match * Fix bug that was fixed in retail * Match `Vector4::NormalizeQuaternion` --- LEGO1/lego/legoomni/src/actors/helicopter.cpp | 31 ++++++--- .../legoomni/src/video/legoanimpresenter.cpp | 2 +- LEGO1/library_msvc.h | 3 + LEGO1/mxgeometry/mxgeometry3d.h | 16 ++--- LEGO1/realtime/matrix.h | 69 ++++++++++--------- LEGO1/realtime/vector.h | 34 +++++---- 6 files changed, 85 insertions(+), 70 deletions(-) diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index ab466176..bdec74e4 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -30,6 +30,7 @@ DECOMP_SIZE_ASSERT(Matrix4, 0x08) DECOMP_SIZE_ASSERT(MxMatrix, 0x48) // FUNCTION: LEGO1 0x10001e60 +// FUNCTION: BETA10 0x1002a0d0 Helicopter::Helicopter() { m_maxLinearVel = 60; @@ -43,6 +44,7 @@ Helicopter::~Helicopter() } // FUNCTION: LEGO1 0x100032c0 +// FUNCTION: BETA10 0x1002a16d MxResult Helicopter::Create(MxDSAction& p_dsAction) { MxResult result = IslePathActor::Create(p_dsAction); @@ -52,6 +54,8 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction) ((Act3*) m_world)->SetHelicopter(this); } + assert(m_world); + if (m_world != NULL) { m_world->Add(this); } @@ -61,6 +65,7 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction) } // FUNCTION: LEGO1 0x10003320 +// FUNCTION: BETA10 0x1002a240 void Helicopter::CreateState() { m_state = (HelicopterState*) GameState()->GetState("HelicopterState"); @@ -70,8 +75,11 @@ void Helicopter::CreateState() } // FUNCTION: LEGO1 0x10003360 +// FUNCTION: BETA10 0x1002a29a void Helicopter::Exit() { + assert(UserActor() == this); + if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { SpawnPlayer( LegoGameState::e_unk40, @@ -110,6 +118,7 @@ void Helicopter::Exit() } // FUNCTION: LEGO1 0x10003480 +// FUNCTION: BETA10 0x1002a3db MxLong Helicopter::HandleClick() { if (!FUN_1003ef60()) { @@ -118,6 +127,7 @@ MxLong Helicopter::HandleClick() if (!m_world) { m_world = CurrentWorld(); + assert(m_world); } AnimationManager()->FUN_1005f6d0(FALSE); @@ -163,6 +173,8 @@ MxLong Helicopter::HandleClick() MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) { MxLong result = 0; + + assert(m_world); MxAtomId script; switch (GameState()->GetCurrentAct()) { @@ -199,9 +211,10 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) break; } - Act1State* state = (Act1State*) GameState()->GetState("Act1State"); + Act1State* act1State = (Act1State*) GameState()->GetState("Act1State"); + assert(act1State); if (m_state->m_unk0x08 == 0) { - state->m_unk0x018 = 4; + act1State->m_unk0x018 = 4; m_state->m_unk0x08 = 1; m_world->RemoveActor(this); InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterTakeOff_Anim, NULL); @@ -303,9 +316,9 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) switch (m_state->m_unk0x08) { case 1: { if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { - Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); - assert(act1state); - act1state->m_unk0x018 = 4; + Act1State* act1State = (Act1State*) GameState()->GetState("Act1State"); + assert(act1State); + act1State->m_unk0x018 = 4; SpawnPlayer( LegoGameState::e_unk42, TRUE, @@ -344,9 +357,9 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param) m_world->GetCameraController()->SetWorldTransform(at, dir, up); if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { - Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); - assert(act1state); - act1state->m_unk0x018 = 0; + Act1State* act1State = (Act1State*) GameState()->GetState("Act1State"); + assert(act1State); + act1State->m_unk0x018 = 0; SpawnPlayer( LegoGameState::e_unk41, TRUE, @@ -423,7 +436,7 @@ void Helicopter::Animate(float p_time) ((Act3*) m_world)->FUN_10073430(); } - LegoPathActor::m_actorState = c_disabled; + SetActorState(c_disabled); } } else { diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index 9df19e51..6c698bcf 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -716,7 +716,7 @@ MxResult LegoAnimPresenter::FUN_1006b140(LegoROI* p_roi) for (i = 1; i <= m_roiMapSize; i++) { if (m_roiMap[i] == p_roi) { - if (local5c[i].Unknown(local58) != SUCCESS) { + if (local5c[i].BETA_1005a590(local58) != SUCCESS) { goto done; } diff --git a/LEGO1/library_msvc.h b/LEGO1/library_msvc.h index 34f6941c..38e19a29 100644 --- a/LEGO1/library_msvc.h +++ b/LEGO1/library_msvc.h @@ -675,6 +675,9 @@ // LIBRARY: BETA10 0x100f9a50 // _sin +// LIBRARY: BETA10 0x100f9a5a +// _cos + // LIBRARY: BETA10 0x100f95d0 // _sqrt diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 309c430b..1b41d03e 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -164,9 +164,8 @@ inline int UnknownMx4DPointFloat::BETA_1004aaa0(Matrix4& p_matrix, float p_f) if (FUN_100040a0(v, p_f) == 0) { return p_matrix.FromQuaternion(v); } - else { - return -1; - } + + return -1; } // FUNCTION: LEGO1 0x10004520 @@ -201,12 +200,14 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) p_v[3] = (float) ((1.0 - p_f) * acos((double) p_v[3]) * 2.0); return p_v.NormalizeQuaternion(); } - else if (m_unk0x30 == c_bit2) { + + if (m_unk0x30 == c_bit2) { p_v = m_unk0x18; p_v[3] = (float) (p_f * acos((double) p_v[3]) * 2.0); return p_v.NormalizeQuaternion(); } - else if (m_unk0x30 == (c_bit1 | c_bit2)) { + + if (m_unk0x30 == (c_bit1 | c_bit2)) { int i; double d1 = p_v.Dot(m_unk0x00, m_unk0x18); double a; @@ -243,9 +244,8 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) return 0; } - else { - return -1; - } + + return -1; } #endif // MXGEOMETRY3D_H diff --git a/LEGO1/realtime/matrix.h b/LEGO1/realtime/matrix.h index 2f52ce71..8704d739 100644 --- a/LEGO1/realtime/matrix.h +++ b/LEGO1/realtime/matrix.h @@ -179,7 +179,7 @@ class Matrix4 { } } - inline int Unknown(Matrix4& p_mat); + inline int BETA_1005a590(Matrix4& p_mat); // FUNCTION: LEGO1 0x1006b500 void Swap(int p_d1, int p_d2) @@ -202,9 +202,11 @@ class Matrix4 { // FUNCTION: BETA10 0x100101c0 inline void Matrix4::ToQuaternion(Vector4& p_outQuat) { - float trace = m_data[0][0] + m_data[1][1] + m_data[2][2]; - if (trace > 0) { - trace = (float) sqrt(trace + 1.0); + float trace; + float localc = m_data[0][0] + m_data[1][1] + m_data[2][2]; + + if (localc > 0) { + trace = (float) sqrt(localc + 1.0); p_outQuat[3] = trace * 0.5f; trace = 0.5f / trace; p_outQuat[0] = (m_data[2][1] - m_data[1][2]) * trace; @@ -212,7 +214,6 @@ inline void Matrix4::ToQuaternion(Vector4& p_outQuat) p_outQuat[2] = (m_data[1][0] - m_data[0][1]) * trace; } else { - // GLOBAL: LEGO1 0x100d4090 static int rotateIndex[] = {1, 2, 0}; @@ -228,8 +229,7 @@ inline void Matrix4::ToQuaternion(Vector4& p_outQuat) int next = rotateIndex[largest]; int nextNext = rotateIndex[next]; - float trace = - (float) (sqrt(*Element(largest, largest) - (*Element(nextNext, nextNext) + *Element(next, next)) + 1.0)); + trace = (float) sqrt(*Element(largest, largest) - (*Element(nextNext, nextNext) + *Element(next, next)) + 1.0); p_outQuat[largest] = trace * 0.5f; trace = 0.5f / trace; @@ -244,38 +244,38 @@ inline void Matrix4::ToQuaternion(Vector4& p_outQuat) // FUNCTION: BETA10 0x10010550 inline int Matrix4::FromQuaternion(const Vector4& p_vec) { - float len = p_vec.LenSquared(); + float local14 = p_vec.LenSquared(); - if (len > 0.0f) { - float v7 = 2.0f / len; + if (local14 > 0.0f) { + local14 = 2.0f / local14; - float v9 = p_vec[0] * v7; - float v11 = p_vec[1] * v7; - float v12 = p_vec[2] * v7; + float local24 = p_vec[0] * local14; + float local34 = p_vec[1] * local14; + float local10 = p_vec[2] * local14; - float v13 = p_vec[3] * v9; - float v14 = p_vec[3] * v11; - float v16 = p_vec[3] * v12; + float local28 = p_vec[3] * local24; + float local2c = p_vec[3] * local34; + float local30 = p_vec[3] * local10; - float v17 = p_vec[0] * v9; - float v22 = p_vec[0] * v11; - float v23 = p_vec[0] * v12; + float local38 = p_vec[0] * local24; + float local8 = p_vec[0] * local34; + float localc = p_vec[0] * local10; - float v18 = p_vec[1] * v11; - float v24 = p_vec[1] * v12; - float v19 = p_vec[2] * v12; + float local18 = p_vec[1] * local34; + float local1c = p_vec[1] * local10; + float local20 = p_vec[2] * local10; - m_data[0][0] = 1.0f - (v18 + v19); - m_data[1][0] = v22 + v16; - m_data[2][0] = v23 - v14; + m_data[0][0] = 1.0f - (local18 + local20); + m_data[1][0] = local8 + local30; + m_data[2][0] = localc - local2c; - m_data[0][1] = v22 - v16; - m_data[1][1] = 1.0f - (v17 + v19); - m_data[2][1] = v24 + v13; + m_data[0][1] = local8 - local30; + m_data[1][1] = 1.0f - (local38 + local20); + m_data[2][1] = local1c + local28; - m_data[0][2] = v14 + v23; - m_data[1][2] = v24 - v13; - m_data[2][2] = 1.0f - (v18 + v17); + m_data[0][2] = local2c + localc; + m_data[1][2] = local1c - local28; + m_data[2][2] = 1.0f - (local18 + local38); m_data[3][0] = 0.0f; m_data[3][1] = 0.0f; @@ -287,12 +287,13 @@ inline int Matrix4::FromQuaternion(const Vector4& p_vec) m_data[2][3] = 0.0f; return 0; } - - return -1; + else { + return -1; + } } // FUNCTION: BETA10 0x1005a590 -inline int Matrix4::Unknown(Matrix4& p_mat) +inline int Matrix4::BETA_1005a590(Matrix4& p_mat) { float local5c[4][4]; Matrix4 localc(local5c); diff --git a/LEGO1/realtime/vector.h b/LEGO1/realtime/vector.h index 360363b9..c6d0150c 100644 --- a/LEGO1/realtime/vector.h +++ b/LEGO1/realtime/vector.h @@ -467,38 +467,36 @@ class Vector4 : public Vector3 { // FUNCTION: BETA10 0x10048ad0 inline int Vector4::NormalizeQuaternion() { - float* v = m_data; - float magnitude = v[0] * v[0] + v[2] * v[2] + v[1] * v[1]; - if (magnitude > 0.0f) { - float theta = v[3] * 0.5f; - v[3] = cos(theta); - magnitude = sin(theta) / sqrt(magnitude); - Vector3::MulImpl(magnitude); - return 0; - } + float length = m_data[0] * m_data[0] + m_data[1] * m_data[1] + m_data[2] * m_data[2]; - return -1; -} + if (length > 0.0f) { + float theta = m_data[3] * 0.5f; + float magnitude = sin((double) theta); + m_data[3] = cos((double) theta); -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() - return aDat[3] * bDat[3] - (aDat[0] * bDat[0] + aDat[2] * bDat[2] + aDat[1] * bDat[1]); + magnitude = magnitude / (float) sqrt((double) length); + m_data[0] *= magnitude; + m_data[1] *= magnitude; + m_data[2] *= magnitude; + return 0; + } + else { + return -1; + } } // FUNCTION: LEGO1 0x10002bf0 // FUNCTION: BETA10 0x10048c20 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] = p_a.m_data[3] * p_b.m_data[3] - + (p_a.m_data[0] * p_b.m_data[0] + p_a.m_data[2] * p_b.m_data[2] + p_a.m_data[1] * p_b.m_data[1]); 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]; - return 0; } From 69969c78ae005c786fb0d012219ff080d8009f92 Mon Sep 17 00:00:00 2001 From: LuisYeah1234-hub <64372171+LuisYeah1234-hub@users.noreply.github.com> Date: Thu, 26 Dec 2024 00:01:41 +0100 Subject: [PATCH 5/9] (docs)README.md: Update Debug builds line (#1278) * Update README.md * Update README.md [skip ci] * Some minor mistake [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 660bd746..9206a22f 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo ``` - **Visual C++ 4.2 has issues with paths containing spaces**. If you get configure or build errors, make sure neither CMake, the repository, nor Visual C++ 4.2 is in a path that contains spaces. - Replace `` with the source repository. This can be `..` if your build folder is inside the source repository. - - `RelWithDebInfo` is recommended because it will produce debug symbols useful for further decompilation work. However, you can change this to `Release` if you don't need them. `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. + - `RelWithDebInfo` is recommended because it will produce debug symbols useful for further decompilation work. However, you can change this to `Release` if you don't need them. While `Debug` builds can be compiled and used, they are not recommended as the primary goal is to match the code to the original binary. This is because the retail binaries were compiled as `Release` builds. - `NMake Makefiles` is most recommended because it will be immediately compatible with Visual C++ 4.2. For faster builds, you can use `Ninja` (if you have it installed), however due to limitations in Visual C++ 4.2, you can only build `Release` builds this way (debug symbols cannot be generated with `Ninja`). 1. Build the project by running `nmake` or `cmake --build ` 1. When this is done, there should be a recompiled `ISLE.EXE` and `LEGO1.DLL` in the build folder. From 2d302ddf9bd9f3e7ac8118a019572f6ef7e36f06 Mon Sep 17 00:00:00 2001 From: Ramen2X Date: Thu, 26 Dec 2024 12:57:13 -0500 Subject: [PATCH 6/9] rewrite and clarify usage information in readme (#1284) [skip ci] * rewrite and clarify usage information in readme * add note about OS architecture differences * fix * missing space --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9206a22f..d64395cb 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,11 @@ If you have a CMake-compatible IDE, it should be pretty straightforward to use t ## Usage -Simply place the compiled `ISLE.EXE` and `LEGO1.DLL` into LEGO Island's install folder (usually `C:\Program Files\LEGO Island` or `C:\Program Files (x86)\LEGO Island`). Alternatively, LEGO Island can run from any directory as long as `ISLE.EXE` and `LEGO1.DLL` are in the same directory, and the registry keys (usually `HKEY_LOCAL_MACHINE\Software\Mindscape\LEGO Island` or `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Mindscape\LEGO Island`) point to the correct location for the asset files. +The simplest way to use the recompiled binaries is to swap the original executables (`ISLE.EXE`, `LEGO1.DLL`, and `CONFIG.EXE`) in LEGO Island's installation directory for the ones that you've built from this source code. By default, LEGO Island is installed to `C:\Program Files\LEGO Island` on 32-bit operating systems and `C:\Program Files (x86)\LEGO Island` on 64-bit operating systems. + +For advanced users, you can get LEGO Island to run from anywhere as long as `ISLE.EXE` and `LEGO1.DLL` are in the same directory and the `cdpath` and `diskpath` registry keys (usually found in `HKEY_LOCAL_MACHINE\Software\Mindscape\LEGO Island` on 32-bit operating systems and `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Mindscape\LEGO Island` on 64-bit operating systems) point to the correct location for the asset files (the directory that contains the `LEGO` folder). + +If you see an error about `d3drm.dll`, you will need to acquire a copy and place it in the same directory as the game executables, as it has not shipped with Windows since Windows XP. We have published a [known good copy here](https://legoisland.org/download/d3drm.zip) that works with LEGO Island. ## Contributing From fd5f7ad620033bcd981437c6671cf8c3df13c363 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Thu, 26 Dec 2024 12:57:30 -0700 Subject: [PATCH 7/9] Match `MxPtrList::Destroy` (#1285) --- LEGO1/lego/legoomni/include/legonamedpart.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/LEGO1/lego/legoomni/include/legonamedpart.h b/LEGO1/lego/legoomni/include/legonamedpart.h index dcdee2f9..a03da68c 100644 --- a/LEGO1/lego/legoomni/include/legonamedpart.h +++ b/LEGO1/lego/legoomni/include/legonamedpart.h @@ -12,7 +12,18 @@ class LegoNamedPart { m_name = p_name; m_list = p_list; } - ~LegoNamedPart() { delete m_list; } + ~LegoNamedPart() + { + LegoLODListCursor cursor(m_list); + LegoLOD* lod; + + while (cursor.First(lod)) { + cursor.Detach(); + delete lod; + } + + delete m_list; + } const MxString* GetName() const { return &m_name; } LegoLODList* GetList() { return m_list; } From f475d5e196c18a6dec625a2ed4233c0d0cc9205e Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 27 Dec 2024 09:33:20 -0700 Subject: [PATCH 8/9] Match `MxTransitionManager::Tickle` (#1286) --- LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp index 566468e5..aa091160 100644 --- a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp @@ -54,7 +54,8 @@ MxResult MxTransitionManager::GetDDrawSurfaceFromVideoManager() // vtable+0x14 // FUNCTION: LEGO1 0x1004bac0 MxResult MxTransitionManager::Tickle() { - if (m_animationSpeed + m_systemTime > timeGetTime()) { + MxULong time = m_animationSpeed + m_systemTime; + if (time > timeGetTime()) { return SUCCESS; } From 669454a1942037595a58767f5cffaa3ebe0a639a Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 27 Dec 2024 10:20:18 -0700 Subject: [PATCH 9/9] Use virtual operators in `vector.h` (#1287) * Use virtual operators in vector.h * Remove public --- LEGO1/realtime/vector.h | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/LEGO1/realtime/vector.h b/LEGO1/realtime/vector.h index c6d0150c..e3e71476 100644 --- a/LEGO1/realtime/vector.h +++ b/LEGO1/realtime/vector.h @@ -121,35 +121,33 @@ class Vector2 { return -1; } // vtable+0x44 -private: // FUNCTION: LEGO1 0x100021c0 - virtual void Add(float p_value) { AddImpl(p_value); } // vtable+0x50 + virtual void operator+=(float p_value) { AddImpl(p_value); } // vtable+0x50 // FUNCTION: LEGO1 0x100021d0 - virtual void Add(const float* p_other) { AddImpl(p_other); } // vtable+0x4c + virtual void operator+=(const float* p_other) { AddImpl(p_other); } // vtable+0x4c // FUNCTION: LEGO1 0x100021e0 - virtual void Add(const Vector2& p_other) { AddImpl(p_other.m_data); } // vtable+0x48 + virtual void operator+=(const Vector2& p_other) { AddImpl(p_other.m_data); } // vtable+0x48 // FUNCTION: LEGO1 0x100021f0 - virtual void Sub(const float* p_other) { SubImpl(p_other); } // vtable+0x58 + virtual void operator-=(const float* p_other) { SubImpl(p_other); } // vtable+0x58 // FUNCTION: LEGO1 0x10002200 - virtual void Sub(const Vector2& p_other) { SubImpl(p_other.m_data); } // vtable+0x54 + virtual void operator-=(const Vector2& p_other) { SubImpl(p_other.m_data); } // vtable+0x54 // FUNCTION: LEGO1 0x10002210 - virtual void Mul(const float* p_other) { MulImpl(p_other); } // vtable+0x64 + virtual void operator*=(const float* p_other) { MulImpl(p_other); } // vtable+0x64 // FUNCTION: LEGO1 0x10002220 - virtual void Mul(const Vector2& p_other) { MulImpl(p_other.m_data); } // vtable+0x60 + virtual void operator*=(const Vector2& p_other) { MulImpl(p_other.m_data); } // vtable+0x60 // FUNCTION: LEGO1 0x10002230 - virtual void Mul(const float& p_value) { MulImpl(p_value); } // vtable+0x5c + virtual void operator*=(const float& p_value) { MulImpl(p_value); } // vtable+0x5c // FUNCTION: LEGO1 0x10002240 - virtual void Div(const float& p_value) { DivImpl(p_value); } // vtable+0x68 + virtual void operator/=(const float& p_value) { DivImpl(p_value); } // vtable+0x68 -public: // FUNCTION: LEGO1 0x10002250 virtual void SetVector(const float* p_other) { EqualsImpl(p_other); } // vtable+0x70 @@ -192,19 +190,6 @@ class Vector2 { // FUNCTION: BETA10 0x1001d170 const float& operator[](int idx) const { return m_data[idx]; } - void operator+=(float p_value) { Add(p_value); } - 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*=(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); } - protected: float* m_data; // 0x04 };