diff --git a/CMakeLists.txt b/CMakeLists.txt index 341a06a8..14882a1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,8 +213,9 @@ if (MINGW) target_compile_definitions(lego1 PRIVATE DIRECTINPUT_VERSION=0x0500) endif() -# Additional include directories for both targets +# Additional include directories include_directories("${CMAKE_SOURCE_DIR}/3rdparty/vec") +include_directories("${CMAKE_SOURCE_DIR}/3rdparty/smk") if (ISLE_USE_SMARTHEAP) add_library(SmartHeap::SmartHeap STATIC IMPORTED) @@ -232,9 +233,6 @@ if (ISLE_USE_DX5) target_link_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib") endif() -# Additional include directories -include_directories("${CMAKE_SOURCE_DIR}/3rdparty/smk") - # Link libraries target_link_libraries(lego1 PRIVATE ddraw dsound dxguid dinput winmm) diff --git a/LEGO1/mxsmkpresenter.cpp b/LEGO1/mxsmkpresenter.cpp index 8b350efe..126c9a7a 100644 --- a/LEGO1/mxsmkpresenter.cpp +++ b/LEGO1/mxsmkpresenter.cpp @@ -13,19 +13,7 @@ MxSmkPresenter::MxSmkPresenter() // OFFSET: LEGO1 0x100b3870 MxSmkPresenter::~MxSmkPresenter() { - FUN_100b3900(TRUE); -} - -// OFFSET: LEGO1 0x100b3900 -void MxSmkPresenter::FUN_100b3900(MxBool p_fromDestructor) -{ - m_criticalSection.Enter(); - FUN_100c5d40(&m_mxSmack); - Init(); - m_criticalSection.Leave(); - if (!p_fromDestructor) { - MxVideoPresenter::Destroy(FALSE); - } + Destroy(TRUE); } // OFFSET: LEGO1 0x100b38d0 @@ -37,6 +25,21 @@ void MxSmkPresenter::Init() m_flags &= 0xfb; } +// OFFSET: LEGO1 0x100b3900 +void MxSmkPresenter::Destroy(MxBool p_fromDestructor) +{ + m_criticalSection.Enter(); + + FUN_100c5d40(&m_mxSmack); + Init(); + + m_criticalSection.Leave(); + + if (!p_fromDestructor) { + MxVideoPresenter::Destroy(FALSE); + } +} + // OFFSET: LEGO1 0x100b3960 void MxSmkPresenter::VTable0x60() { diff --git a/LEGO1/mxsmkpresenter.h b/LEGO1/mxsmkpresenter.h index d66452b0..29b23afc 100644 --- a/LEGO1/mxsmkpresenter.h +++ b/LEGO1/mxsmkpresenter.h @@ -11,7 +11,7 @@ class MxSmkPresenter : public MxVideoPresenter { public: MxSmkPresenter(); - ~MxSmkPresenter(); + virtual ~MxSmkPresenter() override; virtual void VTable0x60() override; @@ -35,8 +35,10 @@ class MxSmkPresenter : public MxVideoPresenter { private: void Init(); - void FUN_100b3900(MxBool p_fromDestructor); - void FUN_100c5d40(MxSmack* p_mxSmack); + void Destroy(MxBool p_fromDestructor); + + // This should most likely be in a separate translation unit + static void FUN_100c5d40(MxSmack* p_mxSmack); }; #endif // MXSMKPRESENTER_H