From d10ac7e77cf51704a5d81ddb72cc42e5cda6caa5 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 16 Aug 2025 12:21:39 -0700 Subject: [PATCH] Add `hdmusic.si` asset pack, extend SiLoader with `Replace` directive (#671) * Replace SI objects * Changes * Fix * Remove obsolete file * Add delete handler * Updates * Update assets * Configure git LFS * Add HD music * Move files to LFS * chmod files * fix gitattributes * Fixes * Fixes * Add other HD music * Fix file perms * Add comment * Minor update * Refactor * Fix * Add LFS flag * Add check for file replace * Exclude assets from CPack * Attempt fix * Update libweaver * Fix MxDSBuffer leak * Add .lfsconfig * Set LFS URL * Fix LFS CI * Fix * Space --- .gitattributes | 2 + .github/workflows/ci.yml | 5 + .lfsconfig | 2 + 3rdparty/CMakeLists.txt | 4 +- 3rdparty/libweaver | 2 +- CMakeLists.txt | 4 - .../src/audio/mxbackgroundaudiomanager.cpp | 16 +- LEGO1/lego/legoomni/src/common/legoutils.cpp | 16 +- LEGO1/lego/legoomni/src/entity/legoworld.cpp | 9 + LEGO1/lego/legoomni/src/main/legomain.cpp | 20 +- LEGO1/omni/include/mxdsbuffer.h | 7 + LEGO1/omni/src/stream/mxdsbuffer.cpp | 31 ++- assets/hdmusic/Act3Music_HD.wav | 3 + assets/hdmusic/BeachBlvd_Music_HD.wav | 3 + assets/hdmusic/Beach_Music_HD.wav | 3 + assets/hdmusic/BrickHunt_HD.wav | 3 + assets/hdmusic/BrickstrChase_HD.wav | 3 + assets/hdmusic/Cave_Music_HD.wav | 3 + assets/hdmusic/CentralRoads_Music_HD.wav | 3 + assets/hdmusic/Hospital_Music_HD.wav | 3 + .../hdmusic/InfoCenter_3rd_Floor_Music_HD.wav | 3 + assets/hdmusic/InformationCenter_Music_HD.wav | 3 + assets/hdmusic/JBMusic1_HD.wav | 3 + assets/hdmusic/JBMusic2_HD.wav | 3 + assets/hdmusic/JBMusic3_HD.wav | 3 + assets/hdmusic/JBMusic4_HD.wav | 3 + assets/hdmusic/JBMusic5_HD.wav | 3 + assets/hdmusic/JBMusic6_HD.wav | 3 + assets/hdmusic/Jail_Music_HD.wav | 3 + assets/hdmusic/JetskiRace_Music_HD.wav | 3 + assets/hdmusic/Park_Music_HD.wav | 3 + assets/hdmusic/PoliceStation_Music_HD.wav | 3 + assets/hdmusic/RaceTrackRoad_Music_HD.wav | 3 + assets/hdmusic/ResidentalArea_Music_HD.wav | 3 + assets/main.cpp | 191 ++++++++++++++++-- .../widescreen/GaraDoor_Background_Wide.bmp | 3 + assets/widescreen/garadoor.bmp | Bin 538678 -> 0 bytes extensions/include/extensions/siloader.h | 25 ++- extensions/src/siloader.cpp | 123 +++++++++-- 39 files changed, 465 insertions(+), 61 deletions(-) create mode 100644 .lfsconfig create mode 100644 assets/hdmusic/Act3Music_HD.wav create mode 100644 assets/hdmusic/BeachBlvd_Music_HD.wav create mode 100644 assets/hdmusic/Beach_Music_HD.wav create mode 100644 assets/hdmusic/BrickHunt_HD.wav create mode 100644 assets/hdmusic/BrickstrChase_HD.wav create mode 100644 assets/hdmusic/Cave_Music_HD.wav create mode 100644 assets/hdmusic/CentralRoads_Music_HD.wav create mode 100644 assets/hdmusic/Hospital_Music_HD.wav create mode 100644 assets/hdmusic/InfoCenter_3rd_Floor_Music_HD.wav create mode 100644 assets/hdmusic/InformationCenter_Music_HD.wav create mode 100644 assets/hdmusic/JBMusic1_HD.wav create mode 100644 assets/hdmusic/JBMusic2_HD.wav create mode 100644 assets/hdmusic/JBMusic3_HD.wav create mode 100644 assets/hdmusic/JBMusic4_HD.wav create mode 100644 assets/hdmusic/JBMusic5_HD.wav create mode 100644 assets/hdmusic/JBMusic6_HD.wav create mode 100644 assets/hdmusic/Jail_Music_HD.wav create mode 100644 assets/hdmusic/JetskiRace_Music_HD.wav create mode 100644 assets/hdmusic/Park_Music_HD.wav create mode 100644 assets/hdmusic/PoliceStation_Music_HD.wav create mode 100644 assets/hdmusic/RaceTrackRoad_Music_HD.wav create mode 100644 assets/hdmusic/ResidentalArea_Music_HD.wav create mode 100644 assets/widescreen/GaraDoor_Background_Wide.bmp delete mode 100755 assets/widescreen/garadoor.bmp diff --git a/.gitattributes b/.gitattributes index 04926c6b..430dfc15 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,3 +9,5 @@ **/*.png binary **/*.svg text eol=lf **/*.desktop text eol=lf +assets/widescreen/** filter=lfs diff=lfs merge=lfs -text +assets/hdmusic/** filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e284eee..fe7ce886 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,6 +113,11 @@ jobs: - uses: actions/checkout@v4 + - name: Checkout LFS + if: ${{ matrix.build-assets }} + run: | + git lfs pull + - name: Setup Java (Android) if: ${{ matrix.android }} uses: actions/setup-java@v4 diff --git a/.lfsconfig b/.lfsconfig new file mode 100644 index 00000000..98f14551 --- /dev/null +++ b/.lfsconfig @@ -0,0 +1,2 @@ +[lfs] + url = https://f9622702b3bbcac0705052a10e62a5a5:31adabe20fe975a919bd1909a6f598f37b0d6486225efa84b38da1aaf27cbd35@assets.isle.pizza/a70a70ae5ebee06d2333bb1132711de1.r2.cloudflarestorage.com/assets diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 28b5aa15..54259e63 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -78,8 +78,8 @@ if(DOWNLOAD_DEPENDENCIES) include(FetchContent) FetchContent_Populate( libweaver - URL https://github.com/isledecomp/SIEdit/archive/6da93b2072c41c41d526b8b9df7d4292be1f0f55.tar.gz - URL_MD5 ae59007fcb9efadc06c67621e1e107cb + URL https://github.com/isledecomp/SIEdit/archive/ae447259389f3bf8273c7e7a4844743faf7cbdb8.tar.gz + URL_MD5 dee68424fde8db6d5cef3b9034a8151f ) else() set(libweaver_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libweaver") diff --git a/3rdparty/libweaver b/3rdparty/libweaver index 6da93b20..ae447259 160000 --- a/3rdparty/libweaver +++ b/3rdparty/libweaver @@ -1 +1 @@ -Subproject commit 6da93b2072c41c41d526b8b9df7d4292be1f0f55 +Subproject commit ae447259389f3bf8273c7e7a4844743faf7cbdb8 diff --git a/CMakeLists.txt b/CMakeLists.txt index 47c9b9c8..deebda7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -691,10 +691,6 @@ if(ISLE_BUILD_ASSETS) add_custom_target(build_assets ALL DEPENDS ${GENERATED_ASSETS_DIR}/.stamp ) - - install(DIRECTORY ${GENERATED_ASSETS_DIR}/ - DESTINATION assets - ) endif() if (ISLE_MINIWIN) diff --git a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp index 2822e95a..a5bb51b7 100644 --- a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp +++ b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp @@ -119,7 +119,12 @@ void MxBackgroundAudioManager::FadeInPendingPresenter() MxS32 compare, volume; if (m_activePresenter == NULL) { - if (m_pendingPresenter) { + if (m_pendingPresenter && m_pendingPresenter->GetCurrentTickleState() >= MxPresenter::e_streaming) { + if (!m_pendingPresenter->IsEnabled()) { + m_pendingPresenter->Enable(TRUE); + m_pendingPresenter->SetTickleState(MxPresenter::e_streaming); + } + if (m_volumeSuppressionAmount != 0) { compare = 30; } @@ -221,6 +226,12 @@ void MxBackgroundAudioManager::StartAction(MxParam& p_param) m_action2.SetObjectId(m_pendingPresenter->GetAction()->GetObjectId()); m_targetVolume = ((MxDSSound*) (m_pendingPresenter->GetAction()))->GetVolume(); m_pendingPresenter->SetVolume(0); + + // Disabling the action here and starting it later once the actively presented music has been faded out. + // This was not necessary in retail because the streaming layer would implicitly not start another action + // before the previous one has ended (since it's all coming from JUKEBOX.SI), however since we now + // allow loading music from multiple SI files this would cause the new music to start immediately. + m_pendingPresenter->GetAction()->SetFlags(m_pendingPresenter->GetAction()->GetFlags() & ~MxDSAction::c_enabled); } // FUNCTION: LEGO1 0x1007f200 @@ -254,7 +265,8 @@ MxResult MxBackgroundAudioManager::PlayMusic( return SUCCESS; } - if (m_action2.GetObjectId() == -1 && m_action1.GetObjectId() != p_action.GetObjectId()) { + if (m_action2.GetObjectId() == -1 && + (m_action1.GetObjectId() != p_action.GetObjectId() || m_action1.GetAtomId() != p_action.GetAtomId())) { MxDSAction action; action.SetAtomId(GetCurrentAction().GetAtomId()); action.SetObjectId(GetCurrentAction().GetObjectId()); diff --git a/LEGO1/lego/legoomni/src/common/legoutils.cpp b/LEGO1/lego/legoomni/src/common/legoutils.cpp index c43e4dc9..f8ef1bab 100644 --- a/LEGO1/lego/legoomni/src/common/legoutils.cpp +++ b/LEGO1/lego/legoomni/src/common/legoutils.cpp @@ -503,6 +503,12 @@ MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id) { LegoWorld* world = CurrentWorld(); + auto result = + Extension::Call(HandleRemove, SiLoader::StreamObject{p_atomId, p_id}, world).value_or(std::nullopt); + if (result) { + return result.value(); + } + if (world) { MxCore* object = world->Find(p_atomId, p_id); @@ -518,8 +524,6 @@ MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id) } ((MxPresenter*) object)->EndAction(); - - Extension::Call(RemoveWith, SiLoader::StreamObject{p_atomId, p_id}, world); } return TRUE; @@ -539,6 +543,12 @@ MxBool RemoveFromWorld( { LegoWorld* world = FindWorld(p_worldAtom, p_worldEntityId); + auto result = Extension::Call(HandleRemove, SiLoader::StreamObject{p_entityAtom, p_entityId}, world) + .value_or(std::nullopt); + if (result) { + return result.value(); + } + if (world) { MxCore* object = world->Find(p_entityAtom, p_entityId); @@ -554,8 +564,6 @@ MxBool RemoveFromWorld( } ((MxPresenter*) object)->EndAction(); - - Extension::Call(RemoveWith, SiLoader::StreamObject{p_entityAtom, p_entityId}, world); } return TRUE; diff --git a/LEGO1/lego/legoomni/src/entity/legoworld.cpp b/LEGO1/lego/legoomni/src/entity/legoworld.cpp index 1ba828cb..fe4bbc63 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworld.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworld.cpp @@ -1,6 +1,7 @@ #include "legoworld.h" #include "anim/legoanim.h" +#include "extensions/siloader.h" #include "legoanimationmanager.h" #include "legoanimpresenter.h" #include "legobuildingmanager.h" @@ -32,6 +33,8 @@ DECOMP_SIZE_ASSERT(LegoEntityListCursor, 0x10) DECOMP_SIZE_ASSERT(LegoCacheSoundList, 0x18) DECOMP_SIZE_ASSERT(LegoCacheSoundListCursor, 0x10) +using namespace Extensions; + // FUNCTION: LEGO1 0x1001ca40 LegoWorld::LegoWorld() : m_pathControllerList(TRUE) { @@ -636,6 +639,12 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name) // FUNCTION: BETA10 0x100db3de MxCore* LegoWorld::Find(const MxAtomId& p_atom, MxS32 p_entityId) { + auto result = + Extension::Call(HandleFind, SiLoader::StreamObject{p_atom, p_entityId}, this).value_or(std::nullopt); + if (result) { + return result.value(); + } + LegoEntityListCursor entityCursor(m_entityList); LegoEntity* entity; diff --git a/LEGO1/lego/legoomni/src/main/legomain.cpp b/LEGO1/lego/legoomni/src/main/legomain.cpp index 975933ff..604701eb 100644 --- a/LEGO1/lego/legoomni/src/main/legomain.cpp +++ b/LEGO1/lego/legoomni/src/main/legomain.cpp @@ -474,6 +474,11 @@ LegoWorld* LegoOmni::FindWorld(const MxAtomId& p_atom, MxS32 p_entityid) // STUB: BETA10 0x1008e93e void LegoOmni::DeleteObject(MxDSAction& p_dsAction) { + auto result = Extension::Call(HandleDelete, p_dsAction).value_or(std::nullopt); + if (result && result.value()) { + return; + } + if (p_dsAction.GetAtomId().GetInternal() != NULL) { LegoWorld* world = FindWorld(p_dsAction.GetAtomId(), p_dsAction.GetObjectId()); if (world) { @@ -663,6 +668,13 @@ void LegoOmni::CreateBackgroundAudio() // FUNCTION: BETA10 0x1008f7e0 MxResult LegoOmni::Start(MxDSAction* p_dsAction) { + { + auto result = Extension::Call(HandleStart, *p_dsAction).value_or(std::nullopt); + if (result) { + return result.value(); + } + } + MxResult result = MxOmni::Start(p_dsAction); #ifdef BETA10 this->m_action = *p_dsAction; @@ -673,14 +685,6 @@ MxResult LegoOmni::Start(MxDSAction* p_dsAction) this->m_action.SetObjectId(p_dsAction->GetObjectId()); this->m_action.SetUnknown24(p_dsAction->GetUnknown24()); #endif - - if (result == SUCCESS) { - Extension::Call( - StartWith, - SiLoader::StreamObject{p_dsAction->GetAtomId(), p_dsAction->GetObjectId()} - ); - } - return result; } diff --git a/LEGO1/omni/include/mxdsbuffer.h b/LEGO1/omni/include/mxdsbuffer.h index a988ca57..09f6f826 100644 --- a/LEGO1/omni/include/mxdsbuffer.h +++ b/LEGO1/omni/include/mxdsbuffer.h @@ -91,6 +91,12 @@ class MxDSBuffer : public MxCore { void SetUnk30(MxDSStreamingAction* p_unk0x30) { m_unk0x30 = p_unk0x30; } + void SetSourceBuffer(MxDSBuffer* p_sourceBuffer) + { + m_sourceBuffer = p_sourceBuffer; + m_sourceBuffer->AddRef(NULL); + } + // SYNTHETIC: LEGO1 0x100c6510 // SYNTHETIC: BETA10 0x10158530 // MxDSBuffer::`scalar deleting destructor' @@ -107,6 +113,7 @@ class MxDSBuffer : public MxCore { MxU32 m_writeOffset; // 0x28 MxU32 m_bytesRemaining; // 0x2c MxDSStreamingAction* m_unk0x30; // 0x30 + MxDSBuffer* m_sourceBuffer; }; #endif // MXDSBUFFER_H diff --git a/LEGO1/omni/src/stream/mxdsbuffer.cpp b/LEGO1/omni/src/stream/mxdsbuffer.cpp index 0d49741a..732f9fac 100644 --- a/LEGO1/omni/src/stream/mxdsbuffer.cpp +++ b/LEGO1/omni/src/stream/mxdsbuffer.cpp @@ -28,6 +28,7 @@ MxDSBuffer::MxDSBuffer() m_bytesRemaining = 0; m_mode = e_preallocated; m_unk0x30 = 0; + m_sourceBuffer = NULL; } // FUNCTION: LEGO1 0x100c6530 @@ -36,6 +37,10 @@ MxDSBuffer::~MxDSBuffer() { assert(m_referenceCount == 0); + if (m_sourceBuffer) { + m_sourceBuffer->ReleaseRef(NULL); + } + if (m_pBuffer != NULL) { switch (m_mode) { case e_allocate: @@ -267,6 +272,28 @@ MxResult MxDSBuffer::ParseChunk( return FAILURE; } + // START FIX: Ref-Counting Backpressure for Split Chunks + // + // PROBLEM: When a `DS_CHUNK_SPLIT` is found, the temporary `MxStreamChunk` + // header that holds a reference to the source buffer is immediately + // destroyed. This prematurely releases the reference, causing the source + // buffer's ref-count to drop to zero. + // + // EFFECT: The source buffer is freed immediately instead of being kept + // alive on the m_list0x74 "keep-alive" list. This breaks the natural + // ref-counting backpressure mechanism, as the controller is blind to the + // downstream workload and keeps reading new data from the stream at full + // speed, eventually leading to a memory leak. + // + // SOLUTION: We explicitly link the new reassembly buffer to the original + // source buffer. We then add an artificial reference to the source buffer. + // This reference is designed to be released by the reassembly buffer's + // destructor, ensuring the source buffer is kept alive for the correct + // duration and that the backpressure system functions as intended. + if (p_header->GetBuffer()) { + buffer->SetSourceBuffer(p_header->GetBuffer()); + } + MxU16* flags = MxStreamChunk::IntoFlags(buffer->GetBuffer()); *flags = p_header->GetChunkFlags() & ~DS_CHUNK_SPLIT; @@ -409,9 +436,7 @@ MxU8 MxDSBuffer::ReleaseRef(MxDSChunk*) // FUNCTION: LEGO1 0x100c6ee0 void MxDSBuffer::AddRef(MxDSChunk* p_chunk) { - if (p_chunk) { - m_referenceCount++; - } + m_referenceCount++; } // FUNCTION: LEGO1 0x100c6ef0 diff --git a/assets/hdmusic/Act3Music_HD.wav b/assets/hdmusic/Act3Music_HD.wav new file mode 100644 index 00000000..0480014b --- /dev/null +++ b/assets/hdmusic/Act3Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c3e3080ea1af626bc202d091ead654ef38ac8e27779c2908dca390f3106ced3 +size 14201934 diff --git a/assets/hdmusic/BeachBlvd_Music_HD.wav b/assets/hdmusic/BeachBlvd_Music_HD.wav new file mode 100644 index 00000000..9385be34 --- /dev/null +++ b/assets/hdmusic/BeachBlvd_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1143a85549ca76ec8edccc164e8c54d803d7eb9a5bddd5c0387ce102b5397f2c +size 26919040 diff --git a/assets/hdmusic/Beach_Music_HD.wav b/assets/hdmusic/Beach_Music_HD.wav new file mode 100644 index 00000000..a198fec1 --- /dev/null +++ b/assets/hdmusic/Beach_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e84733243a6d1d3044aab8032cf5d2b5769b1e3e3f0787c3b3bf18689c9f535 +size 22490016 diff --git a/assets/hdmusic/BrickHunt_HD.wav b/assets/hdmusic/BrickHunt_HD.wav new file mode 100644 index 00000000..4aaa8721 --- /dev/null +++ b/assets/hdmusic/BrickHunt_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfbd44517186635ad270a971e9328f65890b94258c456aafda6658830147dce2 +size 33980544 diff --git a/assets/hdmusic/BrickstrChase_HD.wav b/assets/hdmusic/BrickstrChase_HD.wav new file mode 100644 index 00000000..f7222876 --- /dev/null +++ b/assets/hdmusic/BrickstrChase_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a158faeb0b651da3c0663cfa871851ad226dae02577be97d049bc4f84e4d9251 +size 14614784 diff --git a/assets/hdmusic/Cave_Music_HD.wav b/assets/hdmusic/Cave_Music_HD.wav new file mode 100644 index 00000000..b02ed9da --- /dev/null +++ b/assets/hdmusic/Cave_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ae808110329a64ae06a96b08210bea8938f92ac0006b850a62b941541339359 +size 12214400 diff --git a/assets/hdmusic/CentralRoads_Music_HD.wav b/assets/hdmusic/CentralRoads_Music_HD.wav new file mode 100644 index 00000000..43c0e5ee --- /dev/null +++ b/assets/hdmusic/CentralRoads_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39bd028528e1c9e2c9cea0b090c3c54f78b1889135a863c09080b90d3b13b3d2 +size 34113102 diff --git a/assets/hdmusic/Hospital_Music_HD.wav b/assets/hdmusic/Hospital_Music_HD.wav new file mode 100644 index 00000000..718d46c7 --- /dev/null +++ b/assets/hdmusic/Hospital_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f253c05dcf77d5b7d5109f2e95ac5af85ee7a699a8689d8c276951617bbfd0e6 +size 40701386 diff --git a/assets/hdmusic/InfoCenter_3rd_Floor_Music_HD.wav b/assets/hdmusic/InfoCenter_3rd_Floor_Music_HD.wav new file mode 100644 index 00000000..0320b078 --- /dev/null +++ b/assets/hdmusic/InfoCenter_3rd_Floor_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de7bf7bc1512aa6430b35e94c952c9b815b13ceded533f458ff9806a3915f948 +size 20201550 diff --git a/assets/hdmusic/InformationCenter_Music_HD.wav b/assets/hdmusic/InformationCenter_Music_HD.wav new file mode 100644 index 00000000..f896b392 --- /dev/null +++ b/assets/hdmusic/InformationCenter_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c1ade0044cef699f526898cd44c34f426f3f057312f8d457ebc4b454096bdb0 +size 27256398 diff --git a/assets/hdmusic/JBMusic1_HD.wav b/assets/hdmusic/JBMusic1_HD.wav new file mode 100644 index 00000000..a07f7354 --- /dev/null +++ b/assets/hdmusic/JBMusic1_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c11ed75397b677a069cd9302bec3e1178067b030c42a47ef6853cb9212ff716 +size 22200448 diff --git a/assets/hdmusic/JBMusic2_HD.wav b/assets/hdmusic/JBMusic2_HD.wav new file mode 100644 index 00000000..cdb64575 --- /dev/null +++ b/assets/hdmusic/JBMusic2_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8964ca0fb9698abab90398bfa62f04e52830b647af8b4014a129edd9fbfdae47 +size 28735604 diff --git a/assets/hdmusic/JBMusic3_HD.wav b/assets/hdmusic/JBMusic3_HD.wav new file mode 100644 index 00000000..cf22253b --- /dev/null +++ b/assets/hdmusic/JBMusic3_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98b02da1c3900a9e906b88692ecb2087f2091b4af7303565eaeff242cdf7c313 +size 21653144 diff --git a/assets/hdmusic/JBMusic4_HD.wav b/assets/hdmusic/JBMusic4_HD.wav new file mode 100644 index 00000000..acb73671 --- /dev/null +++ b/assets/hdmusic/JBMusic4_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13c787e61647e22a1f4535d2491cbad5638c835142c075ebe6a39964ff769466 +size 24699000 diff --git a/assets/hdmusic/JBMusic5_HD.wav b/assets/hdmusic/JBMusic5_HD.wav new file mode 100644 index 00000000..69ca50f6 --- /dev/null +++ b/assets/hdmusic/JBMusic5_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b744d204a6bcb3c659f490fc9caa6a2bff96e6c91ab7ba8770508b208f0fffd +size 12828932 diff --git a/assets/hdmusic/JBMusic6_HD.wav b/assets/hdmusic/JBMusic6_HD.wav new file mode 100644 index 00000000..a5235fce --- /dev/null +++ b/assets/hdmusic/JBMusic6_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8779860718e07a6093c979d77ec1723dcef93762bc7759e960e70ee730b66fb3 +size 10059690 diff --git a/assets/hdmusic/Jail_Music_HD.wav b/assets/hdmusic/Jail_Music_HD.wav new file mode 100644 index 00000000..a9f323c3 --- /dev/null +++ b/assets/hdmusic/Jail_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b39644468a172178738aa8854b514580f2b098a810dba127b2f5ae25534fe87e +size 12140672 diff --git a/assets/hdmusic/JetskiRace_Music_HD.wav b/assets/hdmusic/JetskiRace_Music_HD.wav new file mode 100644 index 00000000..eac69605 --- /dev/null +++ b/assets/hdmusic/JetskiRace_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82ccad0d9877ccf915fc050d9b245785cf6bcb2406a6fcb9f6bdb9a75a3fc8c4 +size 11367404 diff --git a/assets/hdmusic/Park_Music_HD.wav b/assets/hdmusic/Park_Music_HD.wav new file mode 100644 index 00000000..83c4f4da --- /dev/null +++ b/assets/hdmusic/Park_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b645676140604d078be9cb1dc7d5f0ee17700878ff50a5280b426616898be64 +size 16089216 diff --git a/assets/hdmusic/PoliceStation_Music_HD.wav b/assets/hdmusic/PoliceStation_Music_HD.wav new file mode 100644 index 00000000..6a4dd58c --- /dev/null +++ b/assets/hdmusic/PoliceStation_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59c5ad73804bf813a852a5486e6ab13739a16542d06c736c28c164694ed424fd +size 10070544 diff --git a/assets/hdmusic/RaceTrackRoad_Music_HD.wav b/assets/hdmusic/RaceTrackRoad_Music_HD.wav new file mode 100644 index 00000000..813d33b3 --- /dev/null +++ b/assets/hdmusic/RaceTrackRoad_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:002c09354642fd8757ea999d62badf0b346f5ab1d4fb6b6ce31e471b0a6bdb1a +size 33341560 diff --git a/assets/hdmusic/ResidentalArea_Music_HD.wav b/assets/hdmusic/ResidentalArea_Music_HD.wav new file mode 100644 index 00000000..923ee0dc --- /dev/null +++ b/assets/hdmusic/ResidentalArea_Music_HD.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f24f80d0979e1794d42000b55e95f0674be196af94c30abfa2a8d971e106a309 +size 15794304 diff --git a/assets/main.cpp b/assets/main.cpp index e1189012..d239e013 100644 --- a/assets/main.cpp +++ b/assets/main.cpp @@ -16,30 +16,182 @@ si::MemoryBuffer mxHd; void CreateWidescreen() { + std::string result = out + "/widescreen.si"; + struct AssetView { + std::string name; + std::string extra; + }; + const AssetView widescreenBitmaps[] = { + {"GaraDoor_Background_Wide", + "World:current, StartWith:\\Lego\\Scripts\\Isle\\Isle;1160, RemoveWith:\\Lego\\Scripts\\Isle\\Isle;1161"} + }; + si::Interleaf si; - std::string file = out + "/widescreen.si"; mxHd.seek(0, si::MemoryBuffer::SeekStart); si.Read(&mxHd); - si::Object GaraDoor_Wide; - const char extra[] = - "World:current, StartWith:\\Lego\\Scripts\\Isle\\Isle;1160, RemoveWith:\\Lego\\Scripts\\Isle\\Isle;1161"; - GaraDoor_Wide.type_ = si::MxOb::Bitmap; - GaraDoor_Wide.flags_ = MxDSAction::c_enabled | MxDSAction::c_bit4; - GaraDoor_Wide.duration_ = -1; - GaraDoor_Wide.loops_ = 1; - GaraDoor_Wide.extra_ = si::bytearray(extra, sizeof(extra)); - GaraDoor_Wide.presenter_ = "MxStillPresenter"; - GaraDoor_Wide.name_ = "GaraDoor_Wide"; - GaraDoor_Wide.filetype_ = si::MxOb::STL; - GaraDoor_Wide.location_.x = -240.0; - GaraDoor_Wide.location_.z = -1.0; - GaraDoor_Wide.up_.y = 1.0; - GaraDoor_Wide.ReplaceWithFile("widescreen/garadoor.bmp"); - si.AppendChild(&GaraDoor_Wide); - depfile << file << ": " << (std::filesystem::current_path() / "widescreen/garadoor.bmp").string() << std::endl; + int i = 0; + for (const AssetView& asset : widescreenBitmaps) { + si::Object* object = new si::Object; + std::string file = std::string("widescreen/") + asset.name + ".bmp"; - si.Write(file.c_str()); + object->id_ = i; + object->type_ = si::MxOb::Bitmap; + object->flags_ = MxDSAction::c_enabled | MxDSAction::c_bit4; + object->duration_ = -1; + object->loops_ = 1; + object->extra_ = si::bytearray(asset.extra.c_str(), asset.extra.length() + 1); + object->presenter_ = "MxStillPresenter"; + object->name_ = asset.name; + object->filetype_ = si::MxOb::STL; + object->location_ = si::Vector3(-240.0, 0.0, -1.0); + object->direction_ = si::Vector3(0, 0, 0); + object->up_ = si::Vector3(0, 1.0, 0); + + if (!object->ReplaceWithFile(file.c_str())) { + abort(); + } + + si.AppendChild(object); + depfile << result << ": " << (std::filesystem::current_path() / file).string() << std::endl; + i++; + } + + si.Write(result.c_str()); +} + +void CreateHDMusic() +{ + std::string result = out + "/hdmusic.si"; + struct AssetView { + std::string name; + std::string extra; + uint32_t duration; + uint32_t loops; + uint32_t flags; + }; + const AssetView wavAudio[] = { + {"BrickstrChase_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;3", + 82850, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"BrickHunt_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;4", + 192630, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"ResidentalArea_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;5", + 89540, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"BeachBlvd_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;6", + 152600, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Cave_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;7", + 69240, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"CentralRoads_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;8", + 193380, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Jail_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;9", + 68820, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Hospital_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;10", + 211990, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"InformationCenter_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;11", + 154510, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"PoliceStation_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;12", + 57090, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Park_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;13", + 91210, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"RaceTrackRoad_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;16", + 189000, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Beach_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;17", + 127490, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"JetskiRace_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;19", + 64440, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"Act3Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;20", + 80510, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3}, + {"JBMusic1_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;55", 125850, 1, MxDSAction::c_enabled}, + {"JBMusic2_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;56", 162900, 1, MxDSAction::c_enabled}, + {"JBMusic3_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;57", 122750, 1, MxDSAction::c_enabled}, + {"JBMusic4_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;58", 140000, 1, MxDSAction::c_enabled}, + {"JBMusic5_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;59", 72720, 1, MxDSAction::c_enabled}, + {"JBMusic6_HD", "Replace:\\Lego\\Scripts\\Isle\\Jukebox;60", 57030, 1, MxDSAction::c_enabled}, + {"InfoCenter_3rd_Floor_Music_HD", + "Replace:\\Lego\\Scripts\\Isle\\Jukebox;61", + 114520, + 10000, + MxDSAction::c_enabled | MxDSAction::c_bit3} + }; + + si::Interleaf si; + mxHd.seek(0, si::MemoryBuffer::SeekStart); + si.Read(&mxHd); + + int i = 0; + for (const AssetView& asset : wavAudio) { + si::Object* object = new si::Object; + std::string file = std::string("hdmusic/") + asset.name + ".wav"; + + object->id_ = i; + object->type_ = si::MxOb::Sound; + object->flags_ = asset.flags; + object->duration_ = asset.duration * asset.loops; + object->loops_ = asset.loops; + object->extra_ = si::bytearray(asset.extra.c_str(), asset.extra.length() + 1); + object->presenter_ = "MxWavePresenter"; + object->name_ = asset.name; + object->filetype_ = si::MxOb::WAV; + object->location_ = si::Vector3(0, 0, 0); + object->direction_ = si::Vector3(0, 0, 1); + object->up_ = si::Vector3(0, 1, 0); + object->volume_ = 79; + + if (!object->ReplaceWithFile(file.c_str())) { + abort(); + } + + si.AppendChild(object); + depfile << result << ": " << (std::filesystem::current_path() / file).string() << std::endl; + i++; + } + + si.Write(result.c_str()); } int main(int argc, char* argv[]) @@ -54,5 +206,6 @@ int main(int argc, char* argv[]) mxHd.WriteU32(bufferCount); CreateWidescreen(); + CreateHDMusic(); return 0; } diff --git a/assets/widescreen/GaraDoor_Background_Wide.bmp b/assets/widescreen/GaraDoor_Background_Wide.bmp new file mode 100644 index 00000000..8f557e6b --- /dev/null +++ b/assets/widescreen/GaraDoor_Background_Wide.bmp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d245fde39c95f788a9406f2c4bbc94680d566cef925f03883a0824e3485c23d +size 538678 diff --git a/assets/widescreen/garadoor.bmp b/assets/widescreen/garadoor.bmp deleted file mode 100755 index 8fc4c08c120a54e7901ea383bf57a4673818b21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538678 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
    oslVKXF`5bwN%CkrNwR9 z)>$YETkkF>^Fwa9r1=YYS>^`nkgJYVnFb6`mPa1AEGwM&BNiRwN?2%?U~*VuOI~Lg z6=aNoZ3nU|*iu~S>Z(H_7L^V+qjPF3(ltrbbRrpRyKDpGqYK zjB%KDjw@g)$yu*-anL%v*{JNqENs-i2Ve^jQTnrxE4Q^O;Z0|FEXRJvwAdX(4$wmU zHu2r@I%;Mx;(jADXbr=7FnD%yV=eaZlW;+$=qKU!7-}Kb>kKbvyO>M`V1!D`ra>?J z6^O9wVO)^nev%sl@1`Q9j-c|H=iBzb`|*lJ>C_ty6LmwRcR4+@{wO>ZCJm)83pz=d zv6svzOZ=){bQ{?P*3V4|mZYEVMNvwYlzDj1G6pmFCnQSKEWu87*N|>sXa~b0R=_(t z>GjKw#?Y_6_Y$}xrhAv(F=^PrIqhkkGdd?~PUPksk=~G{nFH&_EOV*VK4cI^QUgm-03_g*@AtS*ztE`+U`|J7Rkb^LyXfh^-NvBJLpk%!54~$Qkno4 zyL{pH>9wf^_XyO6LQ{T-pVV8!%)wvq0#<@Gw+~;LO_`0^x}c%l$V^!}g5vo<$O~3V zmn7iME_95kT%9GCBsVjUCq!Q^k5792vUii|H@HIy+@#4ay=(jQfIIF)`fz@qz8Y-4 zOAn3osx35fuIJ>ZV#8Sn&7|HfPlIVjgZZjhO39GG!nT9gayDRf&@&=t4Q6OZ2Vq8& zvF%-GSLaOwgk?tP8DEL_4z6i_x9;FV1V+ke!|{DWoQm@b9s@Ih42jG}>%`85iF9$V z0uc6$-C@_=D@I|8lRB8J6luaiUzNs4hf+sN*5KKVQ(dI#@)JDhv`bSgFUJDVrZ=Ik z$K7g>ED>Cx{IWeZqzL(W6NQ$PG0-Tn!Xi@AtpklQm%D$dKI{rEE-{mDpkH1gOdo&Q z!4~>e_g@0aX{wEQ$UP0~Zf(GOo7hV`i#=5tcz5SFQ~jgzk-7`7l)*Y#Nei{1OVI@z ziXZX@En0Zl8y!vF49DCs&1>|GhEo^F3jtp!hur2!0Q zaCI=%xRNVpA*PcrHhbkv=i|cwGz|uzqm9Uz4Pvz57*{jB*k7^|-(83g>WOGahnECg zxZiR8Frif}_XUhc&(H=%^DqHJuErfna3xK5^>|2C6gPMgG1e=^T}p%A@FjN#u(sdw zhus}^UecIyZ`rqo7U$dB#VqpBO!7S`U%)A%OVXgNc_I3uB~KT^W@`xIMv%&(;kEl$wFyXI@$IXzON{T&Ig+<|+-xe+dgb?Yxv z%rNuQIrj#fa0~UUZ~yX@hS0C}T}r^S(E;IdcQdCW814|rWs_6B&SS~KTJ4-ywlLHM zU-0A_e8FWFgE2_aY^Q7}HpUvUuUx}PCexmq6fmRQcZB1kmvlW?sA-6_SWkTbX~v1Z zaNDCn8g$KQ9hDNsC|4=~BV^=Eq)a@a7I+C=5_SoWbddP5nXH~Q5j z08#FFfB;^RHwW0#j_V?$3c%#l_RRJ?hdV`=!i(2mKFt~kxY%lqoV0+!7}KUM*K42o zu5~fwc_A@9?CgNhi}x2D_<#W5;w)@2p1YZf9c~k_ecjD)K)4tEf?i471cVp?=YPeu5U0Up>-2kUMsB|)N1H1o=mGG;k12N<*495P+N*hK^Sg*J7E zi;E-V3*sdMWg)5vz>K8}$7>UmOZGR^u>|U8g>r>r41a@|l%l1{hhMg&DeepuKW|x& zG%3*3OpW6nWihOgHhE<1`6BlR^!nwi4WVE0yOe;kg-1}g=LZ;nX^(C6tgeBpXioS# z-*eJC!Vt8J3Rp@SulFScydJ|32AkQ1EE&bX3`-y{v~!?A{ZQJqJctoz8QK0N_0rd) zF)CyczBl zACILWg$$RGi{{7^ra5Tm%RhoGRvmfR2?>)ea#V0KNis~ckkm!%W`XgC6)j6X1%dF~;_=ZP|Qd708 zh=Le(_E+DO1SJ^P45(OWlxGSMa0OqMb-RbU+*5E<{;gj+VG~YKl(ma({J@_O8~NX>k-vQ-Y9_2@0HOftLMQO z;YrLUspxi6F*;6mjnGeqG7pjp7tIIL#n?ItW2(FcDT9B6(GETmv8~4(jZoWaRG>X>>H9Ya`6^7F8G9Tr}Yc^#rW=#4R=v7X$-?R^ch*N8ovNFjug5Wcn(=p z7*#G55>)Z$^P7ck%F(yKnm)V2lmynHhB`*1_--lbzm4%SC z_^#pww}No64if#n40!7RA!CL-E2?!X|jfX_% zyVf05=ey){fP4u0GPeDTt=wAtCGyS!N~yWUw0)tJ&^E0g{q+nR_sGA%haicMCMxsi z@JE$iDW){8B+qqc;$_*#U%rRY^xORE5};Elgv*=f2N2%n%=Hw{y+@p>q&v2#@tMaa z&1J+`^S~%Y$-PFRDaL@AWN_YL`)=`Fo>ayi)YJlbbtSlir= z1~AT2t+XCajAul%1R#m@CZlvqoFk(zZxNHecwHUmDGHf5lwIU+kkn_h>ogxo;_mI@rRC&H7gON5GC_PqFARs#z=$dzcA=TP%yMvM_+z z6nNvil7)8#aFs3p=p1z-#{4E~7MI7~f7HiczS?`*tvu3nVpiOWQ-EoZDgAOs0~iA@xIe^Jz=!t<+;DdQ zlfioI&D3efOAb!dvyVgK=73RaUk59^y-}HBO*C$hV9`@T!E{TaajGRu*ph|Vu!sp^ zOsim;_6ke@K$Hu|Jp$e-9J7*p!L3+>t)XELQ9?7flI|F)hk$^*W)0Dt1&HKu%E8A3rjUN zM-KHi65(g*T}$W{Ad(uQq4m%BK*$v`T$F_AZCRek&@(iFA=HjX~^eoA>?zZ$AP7tU`?u z!sW%9BRlpMQED8w{ANh|7xjzB&%k2o8}^D{v3zfa8=y#-4P1hmlzH=$fJdC8s|{gb zOj_%1LM|J3$(*^t7upW@@t3bQg?`2FPy%;9b6)`GV=Aca!;YuJ`tquobGmEhr7IL0 z(jvS7BS50=ktrC?-31wDYP3Md9LE|~*Ql<83|T9_MIa*&mWC%hm@)c=4j6))>){;k z(0(`F**QhUa6=O9>+p{f-c5@awTo=&CP7O%LefRN0G`mrgeqsljW9tn2o#9{9J1q@ zdgf}u204(C1y{66p>SIJ7xc?=x)}OZsgr`?nbbM%so?UPHibg6+!uHO~iHNd;n)wseJk{}=@ZV^-3 z?V?~H31fQarMt|MH_Y?8;kJP>{nuS8SA01}xab$P2~)!?h#5w$4NSvKtsm$a;$^2e zoY2KdBt&w|tAuOhT?|@2%8-Co{gPHM)=RsRFN=e80@!hgsL}Q*XLexM6@?{a>69-d zgri~fmH4)NZsnPBj(D-a{U`XB8e=wLUjL`kFWV4IQu4(f?E3nnuQ!E$&F@eGcfiH? zF6}J3=Lh6G4q2c}Y^I&-0SRUhi!cUbMM!x^Og>^E8YaqRV@**kooQ)VF*JM>s#~x{ z+@rM*Qlrt!_(n&`8wH$DpH%(5$Q^sGqyC8718B!P7|E14NUNGim*^O@O0|NCPKj3} zVw}@M3f16RNa7&`F6^&~P(xGCY%NK?K=ru71?rE|ztk10AJshpFVpdSoNu$b9I)S) z42K>q?O%W)PMUf1i$_PiX~jgkCd@w{MmY^>>FGRyAZAEg1hmMT=WJpG&VRl zYfjw}(y7-k-@#`3O@4g|+<5Cz9#8^hNYMLBwW9FE&l#?S@pP{tn#CLv+NGZ?CW)o` zzQ>vn2w@9jrj>3PnmZB$`)Vm-hUC)Ks?<*mJi| z?HCZISJFLKc~5=S3r0b1{GnWzeZ-N_vA%?Hx^XMKh?TewBBxvp&ehjkK{_*r628(R$dxLV@^N*z_d>L6_PK{G*~yjV(kY zRQY{2OaYdPVL?ao1Y%S$UG%H|hx{L)r4&mcrO+Z}1WayjG;!zs)A&d|U-oV?{RVd^ z0Z!nYu=V@^&RpMbu9}(+SLck$ch;+VWQrC@Y`vFlF$%^12L;OE(I_*o7TkzR<94!QQc}a0^PMCt2{j{7v=*4MoYjPi!r|R*D}0-Fpe#oqq^Y)G!P;-LqmVme@>3v%`#XdG+Fp$!VGj ze2p^Zshvm{XD}Gu1RKgb_>Px?hQR1#O!SKm(dLD0u>~CAoIbB1j8Pg!25KG# zbDERH<=BG7=u4|fQpBiaY|YEBkWP$O<-)Ao>F^hI#ol@Z0g0B*TpbXpaE4KiDNAzy z5eT3c-n+T#<#0I4BL&C;4Cgt}I`a609x5GtTj7=5t}yteu89!ajh?Z$QFp|?8cbDb zi>;t5knt~pZX%@%xs*>-bM*hBhGA^tZbje+{nFn*y?2x8H@HIy5ZSd0JNkez%3Jr; zdA)3|Q7)Y{15?3xrhDe|;nIs4UJB!0m0kq zf&tJZ(!xUpV2oNue~C`(Owyj$iSZYnuV&m5e(+)x%$PPw%*FgTLYY>!-jiCwrKve` zAG4p4ETYDDoo?e!&9+CQu~>Bo5}cC=_D5sf_n{Ll<`R@)&Pz zgC1p`KV~6Oq^-t{Ou6DaYzcOv8MA3OpML~}61Jof45?&xRY#i{SDDj#*8p#?Uv@Bt ze$~B~z-`dt-HlaC-PE{d)A|0K+?@B?oC#sVw4{rcr?n_ulE|f5&C=b1(^;0m7ln(> z>$G)T4W73&KfgNQv5a>8f;wRw+Nf!UV22iX24j5LdN+yTIQP}W)yc?sZpfl;5iAMC z*reBAsd0&#@|w!J%fLB|GIz~7Mz7sVo*WH_>@;h+Ud3ND_H+Cr@G@3?7}@p17t?Up z1LYV?u`SRpI7rM?p;U3yt&QgROBQK5gK*0!V9UFryXBekZ-is6aOEgE!p!o2u&1&rj7&4b_6SH^pkJ`b{En!(Iyg9>o!!krR7^UR3TpEa6p3i5`BWOUg)GRdt0K-VeKo+g3{Y)%$FweczN}0Uq zU@B1;s*a5HvUtv|1IyXUM@Fi7Iz6=6iy3+4;5;-F?JjYDcZGZ*TomP&Ll4T>tTgWG z-J%SO;4Y!2+On~D92{-rizx#zbrY)5-L77`qA-pVhWS(-eE0s*zAdKT-Yz9z?=QRw z!`zrGpQz5}?woF?x`>G(c*!N@HJA7SR+4E^Mhnw|Vm!^BfJszKwWg(M9Yk2UrN_sQ z?fvoN;v<`!bN?b=nlN_+q1vzax(Pm z_9d|A61e}6@Gg+K{rQ6@bDhN1Fg<5Cnc<0o#nu`&c(JK2HWCADQzO02I?KvbEtTTp zokZppFkII$r^kPO{qlG*8Bctonw3U~8DBU^!Upe%8K6VMR9f8Qb`(9Vf>xk7GM#!P zGmOSWyfg*Fk7mViBpArvv&-yw4lR4HhS5cdn?kAv+uyO^P5*V=Bpv6dVlQ=^+3I%G zfR+ksN+1%32E4jL{GvZv8pbgN&-PQ*Z>d`1oqVZ3fqy~XJFb)zDU^tqGzVr?B-n8GpZ9l7xz|Igk>OR$d5&6 zGg^&yyNN|8Ug8s}UbMLKQ&v1H=;HC$$6r7F`s=4pzdrsClD~Xf(%HcR!1#z*o8EB; z!MvinlBPt>9O+_>FK&{&5GzjN1$Eumks(fSp?ooyc|e1+R61e<6nCE;m!Y-q`a?Mc zTJsaytpg{|6_&K0y)syIN26Uzs+qnA+#$(q<2Bh#yRFOMhz4frmlzf{N2+2kq%e6l^YNF*$4`I$ z`TzX+@t0pe{qhUcpufq<(}eeUG8#`NN}2KG!Wo60Nr#jMl+qO(Q4ne-ha+qJN|M#sC52H@mm0gB0JRG=d9dXTvWu_m zE;}P-DGQ5)p$dwzc<~1;z-Xr6JUwUnJ1o!tQ0`IwAb?^7M#a*FUYcY9G)blX3+;Eo z%Vpm`!=4SM-`q|mz*UeQU}*kA&kUTOTmL9mOiu1xKrw;n7x=<_K}B;Uir}0VW9=lP z7JMnTG;`9nP!5{>ijfy|Y~k@2^~*0vmtP;3z=a1nix)nJPds1fg`5|rWFL;lY8w2e z>v@{LpkInHYL_S!x0xBEEQz!<>~s?|-2u%Ui}sK@hfb3hB8@oSoU}O@Qh8^&#$Odk z=?11q!^_)q+-?o!nMfjqAEcBs@)t4ym=6E^ zP2Pu8v*jbjS*nM`3KzIDC;UPMbsvA($r}2V_gw-6b-n*c%yd;o?acKQuampZdMT1i zyR(H7GGZPP`pJ#qYC=YIYfNIA_%7nY97eXQy}MfwfBE!h=mKY!w6+H-Ph*A&JUN`s zPEJpbXGcf$-xTnSp5H%@o@vwTU3~_fFil=6<5?SsDiCz~~PIa!W?cy8zu>Gl7Wvm*SLz|@9Xfs=P`<2h4p)UuR?=O$P z{4eDT96-9fhalr;_yS{|E>F*RogBj!79nY#pLhs0kD(rZS`mPG^{F5AhA~}jb-7DX zG5L+Ot`kH4U`2wf_NaC=gkcYZhy+1kO6Rbc+pW;#g+b~0M<3wWyd$R`ZgY-I@(x@RWT1j7`0se@?xPzbIQ6cmNU;fm1gK z#6L>)Q6GQV%^Lc(_gw;Tr8@Y&RC!%7x2!nHKZJUu+h8u|&cALd4{70$3PEfym_f@ab=-XD25BW+q(5PopQ` z^Yjc~*7RGg&oMK)pqr$7WNr2KU6^s+S8i=|AFLJEKjQJNIz|PLZtOfmV@gf1cZW7{ ze{Bg^+QmY`__Ja*C^g<7mHQtJGXc~Hty;K}IuUWqXJ8a(DNTylnw?%K6C+zXwl~VW z)h`u!L9Rr^ge^f0spcU4LibWgm_GipZ;R=-w@V3}BV9Np<0a+Z0OsqGS^cqfCpz`g z(dw9mF<$JVQ3WCIOx}$t%#(^8;TM#jWQH@=^kC)m^TfkPxC0p*M4?bCt!p%vF;6I! zr!QxxU#3T&znpzOG$f;P0WS3NUH2bJ7$i&xqdEvn3NfZP&qpGQ#fiIwHvE18MeCLw zOrt=O8|*O85K%#9NsP3xB^%U~c%h8y8jAEve{v$2i-u|127}%0OuhTB^janu3`I5%FVEFScCqut(UjlnB0V6M* zq&FXK&pY|@=FX$$8|6fIgdK6pbK*C93RPMlp_y5;HG?d%JjSV*PDDc6!sxK|DG#fs ziU_tG0+wf!U8+p7kbf=qzYxYBUrp^BR1CM5$df|ta0BV$4+~dM2?tiGh$T6Aj(L;z_juD3@FeWx?nn!zR`G76?Vw~a+)Dw2Z#__F zG9lH;$v}jq85nt4NM{X6c9EBm$Eu}^lN0WIy6pAKt`^a+zt0l5y}hT0Z@b342Q_)x zeRmGmG#!%Exvpn~Stw%!isn~ulX*9z(LKVx99?Kp)S3i1nipx!9sNQxI)kOhUK7V;4<7s^Obar|;( zGmSXnMasMccJ8!0?+|os5L2^ccXdfMjkq9_yE2=D6#vMtyAi^>CUd~iEhJ?r2g`51 zHV-XpSO6E$g+l2fy=+&sWWqfI?ijz9a93h6{0&XLfD?tv#wRMZQnIB~jElKL;O?jU ztH+aLDyaMRyZbbjep@@2fYnFnmo$O7y>Imt8%ge|9RYJs!xvkC36{F%$EH&MVU}iA zww5t73A+drGQt&18w=FvV)r})R+N-9c{=)%`l8brIn*LO{poDteMh6$-#!!GWyOSF zSQ7n$S7hrkxPpKYE~IsqkT!OQkVl$v?+tls8i%ME3_T!7gtz2L?YQHl9F<;4PL9;@ zu8ZS1`E*z;Tou#4!o8A388+SAqXrrovx+xo)QP#5M>I^uWvZ}1j7lY2GNF8NVzEjX z&=LV7VmejnRE!j8@Q;{tNM^jGa+5AzQ$)Rf+1VueFYK`d;uLjFVCw4l=5i@iIJwd2 zIqkIoO;80>94YrmxWqo0Hqf}3i?kPNKcb~Yo&sihL1Yl8neQ}phv8Jv%K3CgU<^V&B z^t>xWs6FBZ0>K=#)oG%J9R2pV@ze5!`kFCwiaSVmkE+1sJK3o{VzhnYT9G6H7;w_` zOVuP@Ik%v6;BK#9cD0Cp{e6~zcQ@i4{l)$Fhc2BT`1s&}Mz!F+9}I@6YvDvdM-etC%<^UFUX9k0zD-R|=nB_dlq zFrqF|Gx1z1B$6DKP(CV&tYx&u!!53+B-lPql8tzws-EDB2%OpQM*JvSmeDO0eW}7j zv+yGcp!?%N3?1?MA9M|2{10-k2Gh_+saY{zc-I6>azu>+W^wtd3)$b_xKC^8x3y~t z+|$9-?aj}(#CC7%oXr{R+3Sg(v$$)wo^wAkUao8hjjeH}64n?c<;C3#dA%_>5;41_ z`X!+j#-r!YXQyNO?;alg>FkJmjd+Uv<-4=l?D&*8@0_AFP&tK6q#C5{>=&>1fn+_~E8f1*pbpq4f*!@3<_sBEK@5`5{7 zxcOU!3d@0yewauN;@C^vB<7)vM^8=C)=5e^`Ku0g36m6H$#45pNw@pJ@^{qVl&FjH z1$W3#RZ?fRoF#r1>D23&T`i(tf1f3wM}&U4{ctxdrUWTzeNop>gN;gbudr3U(L@XO zuz8z&a~0QDaELLLU(_z=*jTJ?mG}z|QUuK8^SjrvUA-Khy?dd-?qr0bIs3!u**o%m z67}Mb@7JvPp5`y$ov;v=q74j2K$9_pllnh?kMiz!B=s7cyZRhLj& z%pZ|5{;tB&P)uUE1^akN>_c}YsHmeep@@2z|GwN<-*fp zKiuBOGt$$KOGH9*;**9M>6?M50M>(XsT2IPvL1bSr-A49v9*J_a571_YR5rT)JM}U&!>4*~ z^X5j#!ZgiU9MHquzZjQ1yKdxD3@*k9wO0wRNN5r6E;vv5A!Xj#h#AHS$%H@}H}k^B39B0f!9miFv-<@O=LHQP z0=BRu%SEY&T63mYj&_hWwSX)Kzvz=m-WEuQmzDb^QvF1=bn?Zjddda5Y;Jl?AjUnk zpcRdb?|n2<{tj^OSw|A z<~-IZ@@%#mBbC(Hf^>;tIpzIkqNQxIWJ$|Vx%f`KNo0%)hE^fV0rf}kpZ|!1^!|D9 zeDd3DvZgxv$J684^k_Q8_zq8g_~Bnqm$z4RkIBOWe1s!!>W^&M!ovw=M!*p@V`C4Q zLO%7um^8`E$47GZL=l6dvhii)2KyQDQfWXzM$$s0KvRjzf4s8tD62&N1U0EVVtEY_ zDi(l*kt=v`(uH{rJhH|#toh_f@nSTlD@*o>@{fM0a%Xq)N7Vn~f5RW8j){PYh9Rpc zQ%hSc2F^<1ozIB=3w;UfuLKC~R`*hGB8crG+313Rp&th00AAu-0CK~UfClSmZ&1>V zC3eQB05fIM85|W!%hg|pgEb))`g6H{z8;Qg|8hB<9-aREgxejLlUO#7*Eo4u_*}IT zFg(U_J-|QO#9XkSmGwrg_Q-ta65=)XAY$S(MdTQN;g@SieS$#A4H4s~utJ-*@C0+O z1*{hN)^hcaYJEjZ8}jwqoHOQpQZOvf z%5%L%9F;JbkOt-8NQBf}5=lq1cy%t{NaG@zvBrg!zi|H%YUKJE&&Q50r!?O^IXV5q z*%3W3EJj!{z4fCumJ2)e9{FrXo+n^O-;<_Vnp#oB1T2ha=oe*-S+iC*-9(JsVU4C= zbdcOzS(2j(&nmrHAW>L}<4^b{->^^be8-Wg`ues6Dt^o{)&N+tpU5VklVbG6s4is| zCF4qwFshi+GHruw{$slJ`iPX_KY($LOy>UqA|^md8roG<*P5ixbDHx2B)Qw`mz_xK zU_1_}uIt2K2=Ll>_xjqX%49}oFMoRX+pEu91usLk%NLhZTG7`fyBd34OHkMHi$R{BltUIH|#qh(#{rtADgkLPW*5x#)XLA^x3 zlr4JxYh+F~*W6^0BU@rxSP_HsjV@Z3m+Mp>p(7$+Mk*3UG_pH7`Rz|ag{U@Q=`8DFqM%XsA5u8rc?jty!N zy}=ykN(!cXJ;Y3vf-tc-=<3`;Q3KXjKefg%ZMJrfLeJl#gz=A&_{A9~bw5YNVY(o1 z`v)lo`mgBuvNu!dH}nl9aCd(H0l0X^@~%<*d`6zwxn|nBE;i<5Gqi*gFW62RU7AZ2 zbK=6CYqytj2&2?gNGsIXR{*0SWkIH8SKDZ2!Y?4k_AjF$WFZW*zJC9nn~=sY z+z@bdF`gdHcxJ%KyZ`iGSBn{Zq0>4948xExFZv}9Zcl`z#bBDZ6r!k74D#ZZXxB66 za$|LvWIH<~N{J0ESCVAfW*Td>?<|Wx;m9@iD3wZV?VoR_5LnJz>86KB_(g~qf1wqv zEL>g~c|yR1DUUB!7G)JyOoDGE6jK{w?2r~Xlsf;##Yg|1`!K)$7ylp!AL<+ViGC>; z$^VY6Qf!#|WA;Me+34DYnU?g1wIK%Z4S zat&q{>s?lC*A%waNf(~1Xh0@aDAI-cquf7DqgcF8}X; z_%A1mmy;R2N)dvgdxp{bC>Y!C9^(YXD=Kk-l;MqDfhgYYXxJgWzr;^cJv6#N9)ddA z?a(60LWYusqv7auc_Lt3kIcLaL$zv9(Nak&(tP3K$$V0xKFXiv&Os>l%21WlQ@J5-Qk7l?TfQvSh%QtO5oNZxUFXJJM)}~{Wv4+R} zM+5IY8jt^I3*Hf(GCYsk!_}ro@MU)TAOG{|a(Z;Aa*-}i&ui`uNc&wwED+;$Rd)m! zXsJ(PEh?C*UQ*v|6^u@mj!L>zaPI?=B1qXW8SJ~{DSEg@2a`Z2U#f+5_8`6P-}$u?nB>%d#lM1U zo9aKtbt95-81)MwCmhGUohki>`V!c^1Q6HvAL7h&o&u4awvKYORFPw0xxG>2kt;?6 zVo0$9Z9;3HHb%rSqm9%%XvuXuQU=DP$AZO+z5?xc?fhkpIC)S13-(Y)=a@dbaq@(U znVy{e;q3B=-oNcYlV=LhDGUmR_Agkh9S=AVU`S1p^ALxD7A^_Qq>-->GTUh>9T=0n ztq!@12V`Kk!p3=zFyL|8Eg~nR5jK@aV)KnUe8((1q&x!Iz{R~$YL$8`z;uNauJ9ee zlWz(aXS2Mktj{t!D-9+UdgjEv$ZF-je^-V*v{=G_y$e%ak7`fu#71a9aP z^Y(5?<)`PWXKEU^o4O$B?+^ za7e#&3`iIKAD(Vhok%4yenP;!`|!-GG;}% zXxau~LZ1rB*i0pYL({E~Oc4(pS{uwrx)K(^X5~u8@I?`8rs+$zkuGoWlVmK%j%um) zyKs&^Iw=8j{RF@?fq7h^QzQ!;kuHmPNQ}rRXNf)IaSbVZACtmWpd*ccm~nXrHH@xq zZk|s5!b0J_zf+~(QeOf)mjHK8`wCVz*F(&P+v;+eRJwqbP5+J9nF1#ESSE*2@UB6_ ziRlzsFezru;e)M}#hIKgAO(1-{_FIU?2R|BP?QV{e*5k0#}nGW*h`EG1_8r8)WeY$ z3qVqh1V4FG-;3Z)p15X@1BRi-_-L(Znxp)`Sa`8XOvlgiu;1yfgl!IlhU~W!`c}PVV{>s)<1DmIV%)b6;XN%~+u+I|s5V+*A^^q^R(3C*WG0s}5FuEra$>kE2vLApp7*)meSfEgcjlWCkv~jZxyo>Sdf^HFeCtT!BBuqn13-Z>S9pXUVeV#1+w)zs-u>>v_A9*z6 z1tZSmL|{C7+xbfdbDZN`HT?uHrkvHR3uDnP49r5_z700 z%;}U)=Lo78=tZA22Pys#0hb?7|Ni3-%jtwi$F_&7vEB&%V&fM3PKt`LdS<3R;j^L2 zCP81l3K^XwYnG%AWT|*8hoH3v6d_6>BMN4l=}HciLJ=qBl(YrL2Y-t(?=}(>-2cr% zd&I_=U%RIl09NuXj@<8Q2~`xv2|!_9rnn&z-3FbaCCOK|@Hg-WaY2wS8xdoWw`!4$ z^%8)&nDg5_!m*FP>}U}E>U%AL-;cq=0=jTcduB6uZImV6Gp%Ek^SCbPERIxHv`5PL z1&yHz70oPHX3Rqi@dIOGY+lv9$q)2kW{dgS_=|l;sa*;)5=NQAd-8OAcKO4MyqA0I~;S=%oaJiv9paSp-+gz zO0JicT`^yBE5M4eZC;xGU`AyUy0rU`^wp{~9Jj_XtksIDg_VnqxmrnmiKzL^c(9-V7C(Zo!8l?OE0(vNZJVwJUod# zcN<3_ju%S|FA)Kkl4_=hq3~7T8waUrmgtwnUhotEi!W2~WjK$2v^ESA_b6Ua`ALkQ z5HP1d(w-OnB3h6*B*w!rHwDK-DsUi6p-c{ctKBdbfE3yrHRtVDNQ$O7&5WJtGPu#nslZ$m+fF z=}5$TgD1VCe7f!Cw~fF=M>5VOpv89+diRV+e=y(&6!ck{YK+-76ao21ea;;x!iU2JlTq8+D3x}$KuV&mn zt$Rjsgt;uKm1Hty&8qrHk40x8&2334nm{m(U{b#F+#PkdEOc2P$|z+R@|H2&Or4DO zt-YQt{l@wd*sTP9`~COd-T|23-o5+XE?ADKa`Cc<4FnuHOY2niobF~@LN_T|r`e2i znueAW)2Vb5FflR%F!E(Se^`$Q!5D;*FNwt1n2u*sClvGSjRHr}FSf7)IEI3a@5&Cm zAAF!hR9X_yihHKp;&O{v6aW=GacT&gXr@iHbThGBW@_Fwl2dk_)oVUq%tjJ^ zfv4i7O<+t40sVqxD*CM~3E|z48~-sJc3l>lM!j6nVWt`WR=bO!_}x)nWhp?|Lu>Yk z!-OUk=M7mZ0MjUQx7+E^uiclxUP~bArH$asyLUi_enT(>DB}e;Mpfg^zACU-AsWu; z&Q7zoSkgWeE~Qksrej(xtl$d??QAie57#4NFr(1|z@#RrbW9L~fO$WmA6~p8Z$L64 z!;8x5k?rf$0}&%W9H82^pik(YPS?qdHVRsd!?b9PDPu1Q@U~;ZP}yavQDalgCi87x zt^Q^`z~ZnOb&!A+-4RRDC66I`4OmDwmMCCcJ)V+useuAR%-~`nUtC@lNnLwhe+nT< z)Wv2ngnT;zb72i%YY5Y#yXkn!MlnC%?)7ZxH`bTHZY7|4QNQFBCG$?koSo+JqM9+U zh?$KsHJfrC_bB#d8k?yx#vxh!R*cA0s*dQ>rLN%QaNUJ4bi44d_625Ohi*_Jxw&=V zd5n1B_Gtu-4pW-;j`5Flc#tq94Nx$VDrgqk@|v$~(NVH-FYClTBGYF%I@5q4LVO1% z?*8UTO0q<^km-UNyGEs4J&1~S;UII|jETfp3^{HHp<2N)`+}oJ0;Ve5QW~scJD5!w z6@V$j(8Xe7a8G^L#2;bk02ep41dQVvbdMbHk!ZpD;m*DZcRL;Wwfhp-YY8A(;vsD) z6WBNhWlo{YEP4P-(2VLNuM@tV_FWbhk?4c-!X;{@Bnx(Bs8bn(eMK4}a|k00=}M|m zW;l8XW0W#5Mt=#l!p#EQE-*11GojZ8)Xa$Zi}ZjL@pu>$S4k{J-^e&iqA_HW%(z>X z8IDCVbhStBEAI_liXb6Pp`;{@MqTf$+E&kFVe@Tzl@bFDr!B$pa=1SKD3Z#fhcXJe zI76&m7^$xb6qd6$%hV=W+Hsj^e@7x3#vRom)hS|X&7KVgYPP&2tEo%7+?{(@HN#%d zmVRS>3G7w^=$00LscC~v6EyLcgiLNn#yqSi`lo@}vMfzi<1w=9!0KM2D;WWkOsvey z`B4IxL=Wa`I>^LXV)8IrKjhlch0j`(Gdwf)$@FAA$3H5th!~y+D{kZlhJ0L& zT%32Miq1GDrqtyfXD6$Ix+xMR0niCiJUEZTycUEh+?e08nND)Qbh4sYR2$t_t2E?A z^b6EOTbTqO9cZCUTt-)FnCTLcE-5 z|M@2Uw%_b_I`nJzC9u~Lh+L5{Nq`lnZ|BV_f643caS$O&o*a@Coa;vnF*3o!wB!-bOnc*T*W?{qyyzpUkc#*`Ip6%@K0Cy)? zkuD~yDk-QDKhUMdMVdlRA~Eb^Q!p~b0X3tb0Ve{4-1t7G$>3dB>Ba>WbM2CWA=T44 zehZ)hLzKuD4wFW1>`s`fiLqQxCj z$wbC{?4rDlFIRR7^A{c~{+GR;E&ay&64xK-~T?Pd@C+WRemF8}a@whsC>bS<-V$KR zpo280|6SoCGWd!V0e6YBBuNSYCghRKglB3k)??l5qlidwR^g(Y2|pAs%p3FdK#D1q zQ$gN5HK`V{)Hk2*s4E>_7-{jq{md>;d5#lhwWxX4H?%8f7bVPoPnUjceF^MT0`MeA*-U=_Eg59~Gh=E!g$#`0 zb$P0JH%rnMO8Ymv0zRgaNdhav=t$)46W@Ii95HEp#1H0wOkgJ6*jXPv9?i#dqcJeX zcrO};IIq=0$9!uQt-|+c@?shR!;%(`VN1@uIxmmZIa#Ld(tsB>$QIt)QD)RBytk92 zT;%#LcsgwyT~f8rB-u-NheO9<8|$_h7^N0T%D6Udfx>5!$q+1dqe);_ z82S^2cgs<7X8?+>mE#DSECnp-SD$fMVXNChfc7|pGI&Kzx?GH9 zi*&L5i`!ngE}x3Kw6?ic7y%N#uLp&G5m;=@4Oj9QlMN>d7GZ~@IT8jD19Ud=m|~21 z(F`ta%e3w`fCQ6F+Bk@)qx6{hoZ9~7*y7+*TBSn@Y>B_bmsEINrM1Nm6EZ9TBEdy0Hw($c znv>ZUJ5vHEa1kw5@RS&dlnG~rgh6cdi}!k`XaW&ZEK$Q0kU=mre32Z7ipg}&5kD5l z1asMK_oaLzRZG<=G2Vn=S_P8bz?{!}|7aIu=-1tQ32gXLknuJF!Yt6lPlud>%bRf! zM5H%JFYmqf*aNoi)OI!S5;5Clt&u>T-NL*z@a zqO?d6p&^8pE#U{!(4I39<|jnxFrd|1V`khqPTznB^<`I7$hla z@Q<7(!dvJeEoj<|q9xz0ar2858@`bn5@y2~K?5@oFffvWp++kO0ewp7P$EWQESFl5 zU#caHlc*Ljxf=-$u>HRHr)P4Q*4z|#*y8jXg zCsZtzDE$)TY$c3b31wV~SH@&)r=-tH$s8+ZZ1TZS7%9Rq4pf84ChE(a7sx%5&TC6^w9^FS$>mBuHV9P>@AYYEA&@N7ZVgrt_*w`?OiN6`nZG z@Az9aL{Nb}_K#0$k06V1siE4{4PnbIq}kzI=vVDaVBaNBo>9;OE#7DrW}HtZqi))= zm~|p`a2C6eFBDx8%W-XH>&=4Kw12@azxn;|zv`x}>~Rb|ntG8OK`PbL+>g#- zIM1tF9+C5Qrc_UDg3Y)^-$j?V``dBm|3972Kc-z>)mP6y?E8f2x7U}z4khsWyO5&* zB5d+*c|nZn#*&%_D_hQlL43=X;)jj+QpH5k~SQZ)aS|4Q{`FIs1QavpU28 diff --git a/extensions/include/extensions/siloader.h b/extensions/include/extensions/siloader.h index 3fc7ab0a..ab3e69bc 100644 --- a/extensions/include/extensions/siloader.h +++ b/extensions/include/extensions/siloader.h @@ -7,6 +7,11 @@ #include #include +namespace si +{ +class Core; +} + namespace Extensions { class SiLoader { @@ -15,8 +20,10 @@ class SiLoader { static void Initialize(); static bool Load(); - static bool StartWith(StreamObject p_object); - static bool RemoveWith(StreamObject p_object, LegoWorld* world); + static std::optional HandleFind(StreamObject p_object, LegoWorld* world); + static std::optional HandleStart(MxDSAction& p_action); + static std::optional HandleRemove(StreamObject p_object, LegoWorld* world); + static std::optional HandleDelete(MxDSAction& p_action); static std::map options; static std::vector files; @@ -25,17 +32,23 @@ class SiLoader { private: static std::vector> startWith; static std::vector> removeWith; + static std::vector> replace; static bool LoadFile(const char* p_file); + static void ParseDirectives(const MxAtomId& p_atom, si::Core* p_core, MxAtomId p_parentReplacedAtom = MxAtomId()); }; #ifdef EXTENSIONS constexpr auto Load = &SiLoader::Load; -constexpr auto StartWith = &SiLoader::StartWith; -constexpr auto RemoveWith = &SiLoader::RemoveWith; +constexpr auto HandleFind = &SiLoader::HandleFind; +constexpr auto HandleStart = &SiLoader::HandleStart; +constexpr auto HandleRemove = &SiLoader::HandleRemove; +constexpr auto HandleDelete = &SiLoader::HandleDelete; #else constexpr decltype(&SiLoader::Load) Load = nullptr; -constexpr decltype(&SiLoader::StartWith) StartWith = nullptr; -constexpr decltype(&SiLoader::RemoveWith) RemoveWith = nullptr; +constexpr decltype(&SiLoader::HandleFind) HandleFind = nullptr; +constexpr decltype(&SiLoader::HandleStart) HandleStart = nullptr; +constexpr decltype(&SiLoader::HandleRemove) HandleRemove = nullptr; +constexpr decltype(&SiLoader::HandleDelete) HandleDelete = nullptr; #endif }; // namespace Extensions diff --git a/extensions/src/siloader.cpp b/extensions/src/siloader.cpp index bfbddd88..ab23b4a7 100644 --- a/extensions/src/siloader.cpp +++ b/extensions/src/siloader.cpp @@ -13,6 +13,7 @@ std::map SiLoader::options; std::vector SiLoader::files; std::vector> SiLoader::startWith; std::vector> SiLoader::removeWith; +std::vector> SiLoader::replace; bool SiLoader::enabled = false; void SiLoader::Initialize() @@ -36,21 +37,52 @@ bool SiLoader::Load() return true; } -bool SiLoader::StartWith(StreamObject p_object) +std::optional SiLoader::HandleFind(StreamObject p_object, LegoWorld* world) { - for (const auto& key : startWith) { + for (const auto& key : replace) { if (key.first == p_object) { + return world->Find(key.second.first, key.second.second); + } + } + + return std::nullopt; +} + +std::optional SiLoader::HandleStart(MxDSAction& p_action) +{ + StreamObject object{p_action.GetAtomId(), p_action.GetObjectId()}; + + for (const auto& key : startWith) { + if (key.first == object) { MxDSAction action; action.SetAtomId(key.second.first); action.SetObjectId(key.second.second); + action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); Start(&action); } } - return true; + for (const auto& key : replace) { + if (key.first == object) { + MxDSAction action; + action.SetAtomId(key.second.first); + action.SetObjectId(key.second.second); + action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); + + MxResult result = Start(&action); + p_action.SetUnknown24(action.GetUnknown24()); + return result; + } + } + + return std::nullopt; } -bool SiLoader::RemoveWith(StreamObject p_object, LegoWorld* world) +std::optional SiLoader::HandleRemove(StreamObject p_object, LegoWorld* world) { for (const auto& key : removeWith) { if (key.first == p_object) { @@ -58,7 +90,47 @@ bool SiLoader::RemoveWith(StreamObject p_object, LegoWorld* world) } } - return true; + for (const auto& key : replace) { + if (key.first == p_object) { + return RemoveFromWorld(key.second.first, key.second.second, world->GetAtomId(), world->GetEntityId()); + } + } + + return std::nullopt; +} + +std::optional SiLoader::HandleDelete(MxDSAction& p_action) +{ + StreamObject object{p_action.GetAtomId(), p_action.GetObjectId()}; + + for (const auto& key : removeWith) { + if (key.first == object) { + MxDSAction action; + action.SetAtomId(key.second.first); + action.SetObjectId(key.second.second); + action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); + DeleteObject(action); + } + } + + for (const auto& key : replace) { + if (key.first == object) { + MxDSAction action; + action.SetAtomId(key.second.first); + action.SetObjectId(key.second.second); + action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); + + DeleteObject(action); + p_action.SetUnknown24(action.GetUnknown24()); + return TRUE; + } + } + + return std::nullopt; } bool SiLoader::LoadFile(const char* p_file) @@ -68,10 +140,11 @@ bool SiLoader::LoadFile(const char* p_file) MxString path = MxString(MxOmni::GetHD()) + p_file; path.MapPathToFilesystem(); - if (si.Read(path.GetData()) != si::Interleaf::ERROR_SUCCESS) { + if (si.Read(path.GetData(), si::Interleaf::ObjectsOnly | si::Interleaf::NoInfo) != si::Interleaf::ERROR_SUCCESS) { path = MxString(MxOmni::GetCD()) + p_file; path.MapPathToFilesystem(); - if (si.Read(path.GetData()) != si::Interleaf::ERROR_SUCCESS) { + if (si.Read(path.GetData(), si::Interleaf::ObjectsOnly | si::Interleaf::NoInfo) != + si::Interleaf::ERROR_SUCCESS) { SDL_Log("Could not parse SI file %s", p_file); return false; } @@ -82,7 +155,15 @@ bool SiLoader::LoadFile(const char* p_file) return false; } - for (si::Core* child : si.GetChildren()) { + ParseDirectives(controller->GetAtom(), &si); + return true; +} + +void SiLoader::ParseDirectives(const MxAtomId& p_atom, si::Core* p_core, MxAtomId p_parentReplacedAtom) +{ + for (si::Core* child : p_core->GetChildren()) { + MxAtomId replacedAtom = p_parentReplacedAtom; + if (si::Object* object = dynamic_cast(child)) { if (object->type() != si::MxOb::Null) { std::string extra(object->extra_.data(), object->extra_.size()); @@ -94,7 +175,7 @@ bool SiLoader::LoadFile(const char* p_file) if (SDL_sscanf(directive, "StartWith:%255[^;];%d", atom, &id) == 2) { startWith.emplace_back( StreamObject{MxAtomId{atom, e_lowerCase2}, id}, - StreamObject{controller->GetAtom(), object->id_} + StreamObject{p_atom, object->id_} ); } } @@ -103,13 +184,31 @@ bool SiLoader::LoadFile(const char* p_file) if (SDL_sscanf(directive, "RemoveWith:%255[^;];%d", atom, &id) == 2) { removeWith.emplace_back( StreamObject{MxAtomId{atom, e_lowerCase2}, id}, - StreamObject{controller->GetAtom(), object->id_} + StreamObject{p_atom, object->id_} ); } } + + if (p_parentReplacedAtom.GetInternal()) { + replace.emplace_back( + StreamObject{p_parentReplacedAtom, object->id_}, + StreamObject{p_atom, object->id_} + ); + } + else { + if ((directive = SDL_strstr(extra.c_str(), "Replace:"))) { + if (SDL_sscanf(directive, "Replace:%255[^;];%d", atom, &id) == 2) { + replace.emplace_back( + StreamObject{MxAtomId{atom, e_lowerCase2}, id}, + StreamObject{p_atom, object->id_} + ); + replacedAtom = replace.back().first.first; + } + } + } } } - } - return true; + ParseDirectives(p_atom, child, replacedAtom); + } }