diff --git a/CMakeLists.txt b/CMakeLists.txt index 65e55304..e2fc1192 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,7 +261,7 @@ function(add_lego_libraries NAME) LEGO1/omni/src/stream/mxstreamchunk.cpp LEGO1/omni/src/video/mxregioncursor.cpp LEGO1/omni/src/video/mxregion.cpp - LEGO1/omni/src/video/mxsmack.cpp + LEGO1/omni/src/video/mxsmk.cpp LEGO1/omni/src/stream/mxramstreamcontroller.cpp LEGO1/omni/src/stream/mxdsbuffer.cpp LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp diff --git a/LEGO1/omni/include/mxbitmap.h b/LEGO1/omni/include/mxbitmap.h index 5df4c8ba..da42e3c3 100644 --- a/LEGO1/omni/include/mxbitmap.h +++ b/LEGO1/omni/include/mxbitmap.h @@ -90,7 +90,7 @@ public: // DECOMP: This could be a free function. It is static here because it has no // reference to "this". In the beta it is called in two places: // 1. GetBmiHeightAbs - // 2. MxSmack::LoadFrame + // 2. MxSmk::LoadFrame // FUNCTION: BETA10 0x1002c690 static MxLong HeightAbs(MxLong p_value) { return p_value > 0 ? p_value : -p_value; } diff --git a/LEGO1/omni/include/mxsmack.h b/LEGO1/omni/include/mxsmk.h similarity index 85% rename from LEGO1/omni/include/mxsmack.h rename to LEGO1/omni/include/mxsmk.h index e7fdf3ce..ec611f97 100644 --- a/LEGO1/omni/include/mxsmack.h +++ b/LEGO1/omni/include/mxsmk.h @@ -1,5 +1,5 @@ -#ifndef MXSMACK_H -#define MXSMACK_H +#ifndef MXSMK_H +#define MXSMK_H #include "decomp.h" #include "mxrectlist.h" @@ -28,7 +28,7 @@ extern "C" } // SIZE 0x6b8 -struct MxSmack { +struct MxSmk { SmackTag m_smackTag; // 0x00 undefined m_unk0x390[784]; // 0x390 MxU32* m_frameSizes; // 0x6a0 @@ -38,12 +38,12 @@ struct MxSmack { MxU32 m_maxFrameSize; // 0x6b0 MxU8* m_unk0x6b4; // 0x6b4 - static MxResult LoadHeader(MxU8* p_data, MxSmack* p_mxSmack); - static void Destroy(MxSmack* p_mxSmack); + static MxResult LoadHeader(MxU8* p_data, MxSmk* p_mxSmk); + static void Destroy(MxSmk* p_mxSmk); static MxResult LoadFrame( MxBITMAPINFO* p_bitmapInfo, MxU8* p_bitmapData, - MxSmack* p_mxSmack, + MxSmk* p_mxSmk, MxU8* p_chunkData, MxBool p_paletteChanged, MxRectList* p_list @@ -51,4 +51,4 @@ struct MxSmack { static MxBool GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect); }; -#endif // MXSMACK_H +#endif // MXSMK_H diff --git a/LEGO1/omni/include/mxsmkpresenter.h b/LEGO1/omni/include/mxsmkpresenter.h index 01b6744d..53f7831f 100644 --- a/LEGO1/omni/include/mxsmkpresenter.h +++ b/LEGO1/omni/include/mxsmkpresenter.h @@ -2,7 +2,7 @@ #define MXSMKPRESENTER_H #include "decomp.h" -#include "mxsmack.h" +#include "mxsmk.h" #include "mxvideopresenter.h" // VTABLE: LEGO1 0x100dc348 @@ -48,7 +48,7 @@ private: void Destroy(MxBool p_fromDestructor); protected: - MxSmack m_mxSmack; // 0x64 + MxSmk m_mxSmk; // 0x64 MxU32 m_currentFrame; // 0x71c }; diff --git a/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp b/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp index ca043243..72f663e0 100644 --- a/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp +++ b/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp @@ -41,10 +41,10 @@ void MxLoopingSmkPresenter::Destroy(MxBool p_fromDestructor) // FUNCTION: LEGO1 0x100b4a00 void MxLoopingSmkPresenter::VTable0x88() { - if (m_mxSmack.m_smackTag.Frames == m_currentFrame) { + if (m_mxSmk.m_smackTag.Frames == m_currentFrame) { m_currentFrame = 0; // TODO: struct incorrect, Palette at wrong offset? - memset(&m_mxSmack.m_smackTag.Palette[4], 0, sizeof(m_mxSmack.m_smackTag.Palette)); + memset(&m_mxSmk.m_smackTag.Palette[4], 0, sizeof(m_mxSmk.m_smackTag.Palette)); } } diff --git a/LEGO1/omni/src/video/mxsmack.cpp b/LEGO1/omni/src/video/mxsmk.cpp similarity index 74% rename from LEGO1/omni/src/video/mxsmack.cpp rename to LEGO1/omni/src/video/mxsmk.cpp index d0a9480c..0f2bdd77 100644 --- a/LEGO1/omni/src/video/mxsmack.cpp +++ b/LEGO1/omni/src/video/mxsmk.cpp @@ -1,15 +1,15 @@ -#include "mxsmack.h" +#include "mxsmk.h" #include "mxbitmap.h" #include DECOMP_SIZE_ASSERT(SmackTag, 0x390); -DECOMP_SIZE_ASSERT(MxSmack, 0x6b8); +DECOMP_SIZE_ASSERT(MxSmk, 0x6b8); // FUNCTION: LEGO1 0x100c5a90 // FUNCTION: BETA10 0x10151e70 -MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) +MxResult MxSmk::LoadHeader(MxU8* p_data, MxSmk* p_mxSmk) { // Macros for readability // If bit0 of SmackerType is set, there is an extra frame ("ring frame") @@ -29,15 +29,15 @@ MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) MxU32 size; MxS32 width; - if (!p_data || !p_mxSmack) { + if (!p_data || !p_mxSmk) { return FAILURE; } - SmackTag* smackTag = &p_mxSmack->m_smackTag; - p_mxSmack->m_frameTypes = NULL; - p_mxSmack->m_frameSizes = NULL; - p_mxSmack->m_huffmanTrees = NULL; - p_mxSmack->m_huffmanTables = NULL; + SmackTag* smackTag = &p_mxSmk->m_smackTag; + p_mxSmk->m_frameTypes = NULL; + p_mxSmk->m_frameSizes = NULL; + p_mxSmk->m_huffmanTrees = NULL; + p_mxSmk->m_huffmanTables = NULL; memcpy(smackTag, p_data, SmackHeaderSize(smackTag)); p_data += SmackHeaderSize(smackTag); @@ -52,11 +52,11 @@ MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) memcpy(frameSizes, p_data, FRAME_COUNT(smackTag) * sizeof(MxU32)); p_data += FRAME_COUNT(smackTag) * sizeof(MxU32); - p_mxSmack->m_maxFrameSize = 0; + p_mxSmk->m_maxFrameSize = 0; for (i = 0; i < FRAME_COUNT(smackTag); i++) { - if (p_mxSmack->m_maxFrameSize < frameSizes[i]) { - p_mxSmack->m_maxFrameSize = frameSizes[i]; + if (p_mxSmk->m_maxFrameSize < frameSizes[i]) { + p_mxSmk->m_maxFrameSize = frameSizes[i]; } } @@ -82,17 +82,17 @@ MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) p_data += smackTag->tablesize; sizetables = SmackGetSizeTables(); - p_mxSmack->m_huffmanTables = + p_mxSmk->m_huffmanTables = new MxU8[smackTag->codesize + smackTag->detailsize + smackTag->typesize + smackTag->absize + sizetables]; - if (!p_mxSmack->m_huffmanTables) { + if (!p_mxSmk->m_huffmanTables) { result = FAILURE; goto done; } SmackDoTables( huffmanTrees, - p_mxSmack->m_huffmanTables, + p_mxSmk->m_huffmanTables, smackTag->codesize, smackTag->absize, smackTag->detailsize, @@ -100,11 +100,11 @@ MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) ); size = SmackGetSizeDeltas(smackTag->Width, smackTag->Height) + 32; - p_mxSmack->m_unk0x6b4 = new MxU8[size]; - memset(p_mxSmack->m_unk0x6b4, 0, size); + p_mxSmk->m_unk0x6b4 = new MxU8[size]; + memset(p_mxSmk->m_unk0x6b4, 0, size); - width = p_mxSmack->m_smackTag.Width; - data = (MxU32*) p_mxSmack->m_unk0x6b4; + width = p_mxSmk->m_smackTag.Width; + data = (MxU32*) p_mxSmk->m_unk0x6b4; *data = 1; data++; @@ -128,9 +128,9 @@ MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) *data = smackTag->Height; done: - p_mxSmack->m_frameTypes = frameTypes; - p_mxSmack->m_frameSizes = frameSizes; - p_mxSmack->m_huffmanTrees = huffmanTrees; + p_mxSmk->m_frameTypes = frameTypes; + p_mxSmk->m_frameSizes = frameSizes; + p_mxSmk->m_huffmanTrees = huffmanTrees; return result; #undef FRAME_COUNT @@ -138,38 +138,38 @@ done: // FUNCTION: LEGO1 0x100c5d40 // FUNCTION: BETA10 0x10152298 -void MxSmack::Destroy(MxSmack* p_mxSmack) +void MxSmk::Destroy(MxSmk* p_mxSmk) { - if (p_mxSmack->m_frameSizes) { - delete[] p_mxSmack->m_frameSizes; + if (p_mxSmk->m_frameSizes) { + delete[] p_mxSmk->m_frameSizes; } - if (p_mxSmack->m_frameTypes) { - delete[] p_mxSmack->m_frameTypes; + if (p_mxSmk->m_frameTypes) { + delete[] p_mxSmk->m_frameTypes; } - if (p_mxSmack->m_huffmanTrees) { - delete[] p_mxSmack->m_huffmanTrees; + if (p_mxSmk->m_huffmanTrees) { + delete[] p_mxSmk->m_huffmanTrees; } - if (p_mxSmack->m_huffmanTables) { - delete[] p_mxSmack->m_huffmanTables; + if (p_mxSmk->m_huffmanTables) { + delete[] p_mxSmk->m_huffmanTables; } - if (p_mxSmack->m_unk0x6b4) { - delete[] p_mxSmack->m_unk0x6b4; + if (p_mxSmk->m_unk0x6b4) { + delete[] p_mxSmk->m_unk0x6b4; } } // FUNCTION: LEGO1 0x100c5db0 // FUNCTION: BETA10 0x10152391 -MxResult MxSmack::LoadFrame( +MxResult MxSmk::LoadFrame( MxBITMAPINFO* p_bitmapInfo, MxU8* p_bitmapData, - MxSmack* p_mxSmack, + MxSmk* p_mxSmk, MxU8* p_chunkData, MxBool p_paletteChanged, MxRectList* p_list ) { p_bitmapInfo->m_bmiHeader.biHeight = -MxBitmap::HeightAbs(p_bitmapInfo->m_bmiHeader.biHeight); - *(MxU8**) (p_mxSmack->m_unk0x6b4 + 4) = p_bitmapData; + *(MxU8**) (p_mxSmk->m_unk0x6b4 + 4) = p_bitmapData; // Reference: https://wiki.multimedia.cx/index.php/Smacker#Palette_Chunk if (p_paletteChanged) { @@ -179,7 +179,7 @@ MxResult MxSmack::LoadFrame( MxU8* intoPalette = palette; MxU16 paletteIndex = 0; // TODO: struct incorrect, Palette at wrong offset? - MxU8* currentPalette = &p_mxSmack->m_smackTag.Palette[4]; + MxU8* currentPalette = &p_mxSmk->m_smackTag.Palette[4]; do { if (*intoChunk & 0x80) { @@ -217,13 +217,13 @@ MxResult MxSmack::LoadFrame( p_chunkData += *p_chunkData * 4; } - SmackDoFrameToBuffer(p_chunkData, p_mxSmack->m_huffmanTables, p_mxSmack->m_unk0x6b4); + SmackDoFrameToBuffer(p_chunkData, p_mxSmk->m_huffmanTables, p_mxSmk->m_unk0x6b4); MxU16 und = 1; u32 smackRect[4]; MxRect32 rect; - while (GetRect(p_mxSmack->m_unk0x6b4, &und, smackRect, &rect)) { + while (GetRect(p_mxSmk->m_unk0x6b4, &und, smackRect, &rect)) { MxRect32* newRect = new MxRect32(rect); p_list->Append(newRect); } @@ -233,7 +233,7 @@ MxResult MxSmack::LoadFrame( // FUNCTION: LEGO1 0x100c6050 // FUNCTION: BETA10 0x10152739 -MxBool MxSmack::GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect) +MxBool MxSmk::GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect) { u32 left, bottom, top, right; diff --git a/LEGO1/omni/src/video/mxsmkpresenter.cpp b/LEGO1/omni/src/video/mxsmkpresenter.cpp index 6e38c43d..5bbddbe9 100644 --- a/LEGO1/omni/src/video/mxsmkpresenter.cpp +++ b/LEGO1/omni/src/video/mxsmkpresenter.cpp @@ -24,7 +24,7 @@ MxSmkPresenter::~MxSmkPresenter() void MxSmkPresenter::Init() { m_currentFrame = 0; - memset(&m_mxSmack, 0, sizeof(m_mxSmack)); + memset(&m_mxSmk, 0, sizeof(m_mxSmk)); SetBit1(FALSE); SetBit2(FALSE); } @@ -34,7 +34,7 @@ void MxSmkPresenter::Destroy(MxBool p_fromDestructor) { m_criticalSection.Enter(); - MxSmack::Destroy(&m_mxSmack); + MxSmk::Destroy(&m_mxSmk); Init(); m_criticalSection.Leave(); @@ -47,7 +47,7 @@ void MxSmkPresenter::Destroy(MxBool p_fromDestructor) // FUNCTION: LEGO1 0x100b3940 void MxSmkPresenter::LoadHeader(MxStreamChunk* p_chunk) { - MxSmack::LoadHeader(p_chunk->GetData(), &m_mxSmack); + MxSmk::LoadHeader(p_chunk->GetData(), &m_mxSmk); } // FUNCTION: LEGO1 0x100b3960 @@ -58,7 +58,7 @@ void MxSmkPresenter::CreateBitmap() } m_frameBitmap = new MxBitmap; - m_frameBitmap->SetSize(m_mxSmack.m_smackTag.Width, m_mxSmack.m_smackTag.Height, NULL, FALSE); + m_frameBitmap->SetSize(m_mxSmk.m_smackTag.Width, m_mxSmk.m_smackTag.Height, NULL, FALSE); } // FUNCTION: LEGO1 0x100b3a00 @@ -68,12 +68,12 @@ void MxSmkPresenter::LoadFrame(MxStreamChunk* p_chunk) MxU8* bitmapData = m_frameBitmap->GetImage(); MxU8* chunkData = p_chunk->GetData(); - MxBool paletteChanged = m_mxSmack.m_frameTypes[m_currentFrame] & 1; + MxBool paletteChanged = m_mxSmk.m_frameTypes[m_currentFrame] & 1; m_currentFrame++; VTable0x88(); MxRectList rects(TRUE); - MxSmack::LoadFrame(bitmapInfo, bitmapData, &m_mxSmack, chunkData, paletteChanged, &rects); + MxSmk::LoadFrame(bitmapInfo, bitmapData, &m_mxSmk, chunkData, paletteChanged, &rects); if (((MxDSMediaAction*) m_action)->GetPaletteManagement() && paletteChanged) { RealizePalette(); @@ -93,17 +93,17 @@ void MxSmkPresenter::LoadFrame(MxStreamChunk* p_chunk) // FUNCTION: LEGO1 0x100b4260 void MxSmkPresenter::VTable0x88() { - if ((m_mxSmack.m_smackTag.SmackerType & 1) != 0) { - MxU32 und = (m_currentFrame % m_mxSmack.m_smackTag.Frames); + if ((m_mxSmk.m_smackTag.SmackerType & 1) != 0) { + MxU32 und = (m_currentFrame % m_mxSmk.m_smackTag.Frames); if (1 < m_currentFrame && und == 1) { m_currentFrame = 1; } } else { - if (m_mxSmack.m_smackTag.Frames == m_currentFrame) { + if (m_mxSmk.m_smackTag.Frames == m_currentFrame) { m_currentFrame = 0; // TODO: struct incorrect, Palette at wrong offset? - memset(&m_mxSmack.m_smackTag.Palette[4], 0, sizeof(m_mxSmack.m_smackTag.Palette)); + memset(&m_mxSmk.m_smackTag.Palette[4], 0, sizeof(m_mxSmk.m_smackTag.Palette)); } } }