From ddaf497cc4855e1d14998e58627ff480a34e76a5 Mon Sep 17 00:00:00 2001 From: Fabian Neundorf Date: Sat, 26 Jul 2025 00:16:36 +0200 Subject: [PATCH] Clear unknowns in `MxVideoPresenter` (#1656) --- .../src/common/mxcontrolpresenter.cpp | 2 +- .../legoomni/src/worlds/registrationbook.cpp | 4 +- LEGO1/omni/include/mxvideopresenter.h | 30 ++++----- LEGO1/omni/src/video/mxflcpresenter.cpp | 4 +- .../omni/src/video/mxloopingflcpresenter.cpp | 6 +- .../omni/src/video/mxloopingsmkpresenter.cpp | 6 +- LEGO1/omni/src/video/mxsmkpresenter.cpp | 4 +- LEGO1/omni/src/video/mxstillpresenter.cpp | 38 +++++------ LEGO1/omni/src/video/mxvideopresenter.cpp | 66 +++++++++---------- 9 files changed, 80 insertions(+), 80 deletions(-) diff --git a/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp b/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp index f39ad192..adfae9e1 100644 --- a/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp +++ b/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp @@ -84,7 +84,7 @@ MxBool MxControlPresenter::CheckButtonDown(MxS32 p_x, MxS32 p_y, MxPresenter* p_ assert(map && map->IsA("MxStillPresenter")); if (presenter == map || map->GetDisplayZ() < presenter->GetDisplayZ()) { - if (map->VTable0x7c()) { + if (map->HasFrameBitmapOrAlpha()) { MxRect32 rect(0, 0, map->GetWidth() - 1, map->GetHeight() - 1); rect += map->GetLocation(); diff --git a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp index 64f981ba..307206ce 100644 --- a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp @@ -619,12 +619,12 @@ MxBool RegistrationBook::CreateSurface() } if (presenter) { - m_checkboxSurface = presenter->VTable0x78(); + m_checkboxSurface = presenter->GetSurface(); } presenter = (MxStillPresenter*) Find("MxStillPresenter", "CheckHiLite_Bitmap"); if (presenter) { - m_checkboxHilite = presenter->VTable0x78(); + m_checkboxHilite = presenter->GetSurface(); } if (m_checkboxSurface && m_checkboxHilite) { diff --git a/LEGO1/omni/include/mxvideopresenter.h b/LEGO1/omni/include/mxvideopresenter.h index 5a51c625..f2100d9b 100644 --- a/LEGO1/omni/include/mxvideopresenter.h +++ b/LEGO1/omni/include/mxvideopresenter.h @@ -42,10 +42,10 @@ public: void Destroy() override { Destroy(FALSE); } // vtable+0x38 // FUNCTION: LEGO1 0x1000c7b0 - virtual LPDIRECTDRAWSURFACE VTable0x78() { return m_unk0x58; } // vtable+0x78 + virtual LPDIRECTDRAWSURFACE GetSurface() { return m_surface; } // vtable+0x78 // FUNCTION: LEGO1 0x1000c7c0 - virtual MxBool VTable0x7c() { return m_frameBitmap != NULL || m_alpha != NULL; } // vtable+0x7c + virtual MxBool HasFrameBitmapOrAlpha() { return m_frameBitmap != NULL || m_alpha != NULL; } // vtable+0x7c // FUNCTION: LEGO1 0x1000c7e0 virtual MxS32 GetWidth() { return m_alpha ? m_alpha->GetWidth() : m_frameBitmap->GetBmiWidth(); } // vtable+0x80 @@ -115,17 +115,17 @@ public: // FUNCTION: BETA10 0x1002c2e0 MxU8* GetBitmapStart(MxS32 p_left, MxS32 p_top) { return m_frameBitmap->GetStart(p_left, p_top); } - void SetBit0(BOOL p_e) { m_flags.m_bit0 = p_e; } - void SetBit1(BOOL p_e) { m_flags.m_bit1 = p_e; } - void SetBit2(BOOL p_e) { m_flags.m_bit2 = p_e; } - void SetBit3(BOOL p_e) { m_flags.m_bit3 = p_e; } - void SetBit4(BOOL p_e) { m_flags.m_bit4 = p_e; } + void SetLoadedFirstFrame(BOOL p_loadedFirstFrame) { m_flags.m_bit0 = p_loadedFirstFrame; } + void SetUseSurface(BOOL p_useSurface) { m_flags.m_bit1 = p_useSurface; } + void SetUseVideoMemory(BOOL p_useVideoMemory) { m_flags.m_bit2 = p_useVideoMemory; } + void SetDoNotWriteToSurface(BOOL p_doNotWriteToSurface) { m_flags.m_bit3 = p_doNotWriteToSurface; } + void SetBitmapIsMap(BOOL p_bitmapIsMap) { m_flags.m_bit4 = p_bitmapIsMap; } - BYTE GetBit0() { return m_flags.m_bit0; } - BYTE GetBit1() { return m_flags.m_bit1; } - BYTE GetBit2() { return m_flags.m_bit2; } - BYTE GetBit3() { return m_flags.m_bit3; } - BYTE GetBit4() { return m_flags.m_bit4; } + BYTE LoadedFirstFrame() { return m_flags.m_bit0; } + BYTE UseSurface() { return m_flags.m_bit1; } + BYTE UseVideoMemory() { return m_flags.m_bit2; } + BYTE DoNotWriteToSurface() { return m_flags.m_bit3; } + BYTE BitmapIsMap() { return m_flags.m_bit4; } // SYNTHETIC: LEGO1 0x1000c910 // MxVideoPresenter::`scalar deleting destructor' @@ -138,10 +138,10 @@ protected: MxBitmap* m_frameBitmap; // 0x50 AlphaMask* m_alpha; // 0x54 - LPDIRECTDRAWSURFACE m_unk0x58; // 0x58 - MxS16 m_unk0x5c; // 0x5c + LPDIRECTDRAWSURFACE m_surface; // 0x58 + MxS16 m_frameLoadTickleCount; // 0x5c FlagBitfield m_flags; // 0x5e - MxLong m_unk0x60; // 0x60 + MxLong m_frozenTime; // 0x60 }; #endif // MXVIDEOPRESENTER_H diff --git a/LEGO1/omni/src/video/mxflcpresenter.cpp b/LEGO1/omni/src/video/mxflcpresenter.cpp index eb075357..e9e95a18 100644 --- a/LEGO1/omni/src/video/mxflcpresenter.cpp +++ b/LEGO1/omni/src/video/mxflcpresenter.cpp @@ -13,8 +13,8 @@ DECOMP_SIZE_ASSERT(MxFlcPresenter, 0x68); MxFlcPresenter::MxFlcPresenter() { m_flcHeader = NULL; - SetBit1(FALSE); - SetBit2(FALSE); + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } // FUNCTION: LEGO1 0x100b3420 diff --git a/LEGO1/omni/src/video/mxloopingflcpresenter.cpp b/LEGO1/omni/src/video/mxloopingflcpresenter.cpp index fb0e3134..c1ebb2cd 100644 --- a/LEGO1/omni/src/video/mxloopingflcpresenter.cpp +++ b/LEGO1/omni/src/video/mxloopingflcpresenter.cpp @@ -22,8 +22,8 @@ MxLoopingFlcPresenter::~MxLoopingFlcPresenter() void MxLoopingFlcPresenter::Init() { this->m_elapsedDuration = 0; - SetBit1(FALSE); - SetBit2(FALSE); + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } // FUNCTION: LEGO1 0x100b4430 @@ -72,7 +72,7 @@ void MxLoopingFlcPresenter::VTable0x88() // FUNCTION: LEGO1 0x100b4520 void MxLoopingFlcPresenter::RepeatingTickle() { - for (MxS16 i = 0; i < m_unk0x5c; i++) { + for (MxS16 i = 0; i < m_frameLoadTickleCount; i++) { if (!m_loopingChunkCursor->HasMatch()) { MxStreamChunk* chunk; MxStreamChunkListCursor cursor(m_loopingChunks); diff --git a/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp b/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp index 7933b3f3..27d1f0b9 100644 --- a/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp +++ b/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp @@ -22,8 +22,8 @@ MxLoopingSmkPresenter::~MxLoopingSmkPresenter() void MxLoopingSmkPresenter::Init() { m_elapsedDuration = 0; - SetBit1(FALSE); - SetBit2(FALSE); + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } // FUNCTION: LEGO1 0x100b49d0 @@ -82,7 +82,7 @@ void MxLoopingSmkPresenter::VTable0x8c() // FUNCTION: LEGO1 0x100b4b00 void MxLoopingSmkPresenter::RepeatingTickle() { - for (MxS16 i = 0; i < m_unk0x5c; i++) { + for (MxS16 i = 0; i < m_frameLoadTickleCount; i++) { if (!m_loopingChunkCursor->HasMatch()) { MxStreamChunk* chunk; MxStreamChunkListCursor cursor(m_loopingChunks); diff --git a/LEGO1/omni/src/video/mxsmkpresenter.cpp b/LEGO1/omni/src/video/mxsmkpresenter.cpp index e6bbc1d9..748ad1df 100644 --- a/LEGO1/omni/src/video/mxsmkpresenter.cpp +++ b/LEGO1/omni/src/video/mxsmkpresenter.cpp @@ -25,8 +25,8 @@ void MxSmkPresenter::Init() { m_currentFrame = 0; memset(&m_mxSmk, 0, sizeof(m_mxSmk)); - SetBit1(FALSE); - SetBit2(FALSE); + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } // FUNCTION: LEGO1 0x100b3900 diff --git a/LEGO1/omni/src/video/mxstillpresenter.cpp b/LEGO1/omni/src/video/mxstillpresenter.cpp index 8574e3eb..0c0b3a1b 100644 --- a/LEGO1/omni/src/video/mxstillpresenter.cpp +++ b/LEGO1/omni/src/video/mxstillpresenter.cpp @@ -79,12 +79,12 @@ void MxStillPresenter::LoadFrame(MxStreamChunk* p_chunk) MxRect32 rect(x, y, width + x, height + y); MVideoManager()->InvalidateRect(rect); - if (GetBit1()) { - undefined4 und = 0; - m_unk0x58 = MxOmni::GetInstance()->GetVideoManager()->GetDisplaySurface()->VTable0x44( + if (UseSurface()) { + undefined4 useVideoMemory = 0; + m_surface = MxOmni::GetInstance()->GetVideoManager()->GetDisplaySurface()->VTable0x44( m_frameBitmap, - &und, - GetBit3(), + &useVideoMemory, + DoNotWriteToSurface(), m_action->GetFlags() & MxDSAction::c_bit4 ); @@ -94,11 +94,11 @@ void MxStillPresenter::LoadFrame(MxStreamChunk* p_chunk) delete m_frameBitmap; m_frameBitmap = NULL; - if (m_unk0x58 && und) { - SetBit2(TRUE); + if (m_surface && useVideoMemory) { + SetUseVideoMemory(TRUE); } else { - SetBit2(FALSE); + SetUseVideoMemory(FALSE); } } } @@ -196,7 +196,7 @@ void MxStillPresenter::ParseExtra() MxPresenter::ParseExtra(); if (m_action->GetFlags() & MxDSAction::c_bit5) { - SetBit3(TRUE); + SetDoNotWriteToSurface(TRUE); } MxU16 extraLength; @@ -216,9 +216,9 @@ void MxStillPresenter::ParseExtra() } if (KeyValueStringParse(output, g_strBMP_ISMAP, extraCopy)) { - SetBit4(TRUE); - SetBit1(FALSE); - SetBit2(FALSE); + SetBitmapIsMap(TRUE); + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } } } @@ -234,11 +234,11 @@ MxStillPresenter* MxStillPresenter::Clone() MxDSAction* action = GetAction()->Clone(); if (action && presenter->StartAction(NULL, action) == SUCCESS) { - presenter->SetBit0(GetBit0()); - presenter->SetBit1(GetBit1()); - presenter->SetBit2(GetBit2()); - presenter->SetBit3(GetBit3()); - presenter->SetBit4(GetBit4()); + presenter->SetLoadedFirstFrame(LoadedFirstFrame()); + presenter->SetUseSurface(UseSurface()); + presenter->SetUseVideoMemory(UseVideoMemory()); + presenter->SetDoNotWriteToSurface(DoNotWriteToSurface()); + presenter->SetBitmapIsMap(BitmapIsMap()); if (m_frameBitmap) { presenter->m_frameBitmap = new MxBitmap; @@ -248,8 +248,8 @@ MxStillPresenter* MxStillPresenter::Clone() } } - if (m_unk0x58) { - presenter->m_unk0x58 = MxDisplaySurface::CopySurface(m_unk0x58); + if (m_surface) { + presenter->m_surface = MxDisplaySurface::CopySurface(m_surface); } if (m_alpha) { diff --git a/LEGO1/omni/src/video/mxvideopresenter.cpp b/LEGO1/omni/src/video/mxvideopresenter.cpp index 93a886a5..ff611085 100644 --- a/LEGO1/omni/src/video/mxvideopresenter.cpp +++ b/LEGO1/omni/src/video/mxvideopresenter.cpp @@ -93,19 +93,19 @@ void MxVideoPresenter::Init() { m_frameBitmap = NULL; m_alpha = NULL; - m_unk0x5c = 1; - m_unk0x58 = NULL; - m_unk0x60 = -1; - SetBit0(FALSE); + m_frameLoadTickleCount = 1; + m_surface = NULL; + m_frozenTime = -1; + SetLoadedFirstFrame(FALSE); if (MVideoManager() != NULL) { MVideoManager(); - SetBit1(TRUE); - SetBit2(FALSE); + SetUseSurface(TRUE); + SetUseVideoMemory(FALSE); } - SetBit3(FALSE); - SetBit4(FALSE); + SetDoNotWriteToSurface(FALSE); + SetBitmapIsMap(FALSE); } // FUNCTION: LEGO1 0x100b27b0 @@ -115,11 +115,11 @@ void MxVideoPresenter::Destroy(MxBool p_fromDestructor) MVideoManager()->UnregisterPresenter(*this); } - if (m_unk0x58) { - m_unk0x58->Release(); - m_unk0x58 = NULL; - SetBit1(FALSE); - SetBit2(FALSE); + if (m_surface) { + m_surface->Release(); + m_surface = NULL; + SetUseSurface(FALSE); + SetUseVideoMemory(FALSE); } if (MVideoManager() && (m_alpha || m_frameBitmap)) { @@ -183,7 +183,7 @@ MxBool MxVideoPresenter::IsHit(MxS32 p_x, MxS32 p_y) MxU8* pixel = m_frameBitmap->GetStart(p_x - rect.GetLeft(), p_y - rect.GetTop()); - if (GetBit4()) { + if (BitmapIsMap()) { return (MxBool) *pixel; } @@ -241,7 +241,7 @@ void MxVideoPresenter::PutFrame() LPDIRECTDRAWSURFACE ddSurface = displaySurface->GetDirectDrawSurface2(); if (m_action->GetFlags() & MxDSAction::c_bit5) { - if (m_unk0x58) { + if (m_surface) { RECT src, dest; src.top = 0; src.left = 0; @@ -255,10 +255,10 @@ void MxVideoPresenter::PutFrame() switch (PrepareRects(src, dest)) { case 0: - ddSurface->Blt(&dest, m_unk0x58, &src, DDBLT_KEYSRC, NULL); + ddSurface->Blt(&dest, m_surface, &src, DDBLT_KEYSRC, NULL); break; case 1: - ddSurface->BltFast(dest.left, dest.top, m_unk0x58, &src, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT); + ddSurface->BltFast(dest.left, dest.top, m_surface, &src, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT); } } else { @@ -282,7 +282,7 @@ void MxVideoPresenter::PutFrame() if (regionRect->GetWidth() >= 1 && regionRect->GetHeight() >= 1) { RECT src, dest; - if (m_unk0x58) { + if (m_surface) { src.left = regionRect->GetLeft() - GetX(); src.top = regionRect->GetTop() - GetY(); src.right = src.left + regionRect->GetWidth(); @@ -295,9 +295,9 @@ void MxVideoPresenter::PutFrame() } if (m_action->GetFlags() & MxDSAction::c_bit4) { - if (m_unk0x58) { + if (m_surface) { if (PrepareRects(src, dest) >= 0) { - ddSurface->Blt(&dest, m_unk0x58, &src, DDBLT_KEYSRC, NULL); + ddSurface->Blt(&dest, m_surface, &src, DDBLT_KEYSRC, NULL); } } else { @@ -313,9 +313,9 @@ void MxVideoPresenter::PutFrame() ); } } - else if (m_unk0x58) { + else if (m_surface) { if (PrepareRects(src, dest) >= 0) { - ddSurface->Blt(&dest, m_unk0x58, &src, 0, NULL); + ddSurface->Blt(&dest, m_surface, &src, 0, NULL); } } else { @@ -372,7 +372,7 @@ void MxVideoPresenter::StreamingTickle() } } else { - for (MxS16 i = 0; i < m_unk0x5c; i++) { + for (MxS16 i = 0; i < m_frameLoadTickleCount; i++) { if (!m_currentChunk) { MxMediaPresenter::StreamingTickle(); @@ -388,15 +388,15 @@ void MxVideoPresenter::StreamingTickle() LoadFrame(m_currentChunk); m_subscriber->FreeDataChunk(m_currentChunk); m_currentChunk = NULL; - SetBit0(TRUE); + SetLoadedFirstFrame(TRUE); if (m_currentTickleState != e_streaming) { break; } } - if (GetBit0()) { - m_unk0x5c = 5; + if (LoadedFirstFrame()) { + m_frameLoadTickleCount = 5; } } } @@ -416,7 +416,7 @@ void MxVideoPresenter::RepeatingTickle() } } else { - for (MxS16 i = 0; i < m_unk0x5c; i++) { + for (MxS16 i = 0; i < m_frameLoadTickleCount; i++) { if (!m_currentChunk) { MxMediaPresenter::RepeatingTickle(); @@ -431,15 +431,15 @@ void MxVideoPresenter::RepeatingTickle() LoadFrame(m_currentChunk); m_currentChunk = NULL; - SetBit0(TRUE); + SetLoadedFirstFrame(TRUE); if (m_currentTickleState != e_repeating) { break; } } - if (GetBit0()) { - m_unk0x5c = 5; + if (LoadedFirstFrame()) { + m_frameLoadTickleCount = 5; } } } @@ -452,11 +452,11 @@ void MxVideoPresenter::FreezingTickle() if (sustainTime != -1) { if (sustainTime) { - if (m_unk0x60 == -1) { - m_unk0x60 = m_action->GetElapsedTime(); + if (m_frozenTime == -1) { + m_frozenTime = m_action->GetElapsedTime(); } - if (m_action->GetElapsedTime() >= m_unk0x60 + ((MxDSMediaAction*) m_action)->GetSustainTime()) { + if (m_action->GetElapsedTime() >= m_frozenTime + ((MxDSMediaAction*) m_action)->GetSustainTime()) { ProgressTickleState(e_done); } }