mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 00:14:22 +00:00
Implement MxFlcPresenter::LoadFrame, add flic
library (#455)
* WIP * Match * Fix flic.lib * Add source assembly * Rename variable
This commit is contained in:

committed by
GitHub

parent
578e48ce52
commit
cecaced797
@@ -28,13 +28,14 @@ public:
|
||||
|
||||
virtual void LoadHeader(MxStreamChunk* p_chunk) override; // vtable+0x5c
|
||||
virtual void CreateBitmap() override; // vtable+0x60
|
||||
virtual void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68
|
||||
virtual void RealizePalette() override; // vtable+0x70
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100b3400
|
||||
// MxFlcPresenter::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
FLIC_HEADER* m_flicHeader;
|
||||
FLIC_HEADER* m_flcHeader; // 0x64
|
||||
};
|
||||
|
||||
#endif // MXFLCPRESENTER_H
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxbitmap.h"
|
||||
#include "mxdsmediaaction.h"
|
||||
#include "mxomni.h"
|
||||
#include "mxpalette.h"
|
||||
#include "mxvideomanager.h"
|
||||
@@ -11,7 +12,7 @@ DECOMP_SIZE_ASSERT(MxFlcPresenter, 0x68);
|
||||
// FUNCTION: LEGO1 0x100b3310
|
||||
MxFlcPresenter::MxFlcPresenter()
|
||||
{
|
||||
this->m_flicHeader = NULL;
|
||||
this->m_flcHeader = NULL;
|
||||
this->m_flags &= ~c_bit2;
|
||||
this->m_flags &= ~c_bit3;
|
||||
}
|
||||
@@ -19,16 +20,16 @@ MxFlcPresenter::MxFlcPresenter()
|
||||
// FUNCTION: LEGO1 0x100b3420
|
||||
MxFlcPresenter::~MxFlcPresenter()
|
||||
{
|
||||
if (this->m_flicHeader) {
|
||||
delete this->m_flicHeader;
|
||||
if (this->m_flcHeader) {
|
||||
delete this->m_flcHeader;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b3490
|
||||
void MxFlcPresenter::LoadHeader(MxStreamChunk* p_chunk)
|
||||
{
|
||||
m_flicHeader = (FLIC_HEADER*) new MxU8[p_chunk->GetLength()];
|
||||
memcpy(m_flicHeader, p_chunk->GetData(), p_chunk->GetLength());
|
||||
m_flcHeader = (FLIC_HEADER*) new MxU8[p_chunk->GetLength()];
|
||||
memcpy(m_flcHeader, p_chunk->GetData(), p_chunk->GetLength());
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b34d0
|
||||
@@ -38,7 +39,35 @@ void MxFlcPresenter::CreateBitmap()
|
||||
delete m_bitmap;
|
||||
|
||||
m_bitmap = new MxBitmap;
|
||||
m_bitmap->SetSize(m_flicHeader->width, m_flicHeader->height, NULL, FALSE);
|
||||
m_bitmap->SetSize(m_flcHeader->width, m_flcHeader->height, NULL, FALSE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b3570
|
||||
void MxFlcPresenter::LoadFrame(MxStreamChunk* p_chunk)
|
||||
{
|
||||
MxU32* data = (MxU32*) p_chunk->GetData();
|
||||
MxS32 rectCount = *data;
|
||||
data++;
|
||||
|
||||
MxRect32* rects = (MxRect32*) data;
|
||||
MxBool decodedColorMap;
|
||||
|
||||
DecodeFLCFrame(
|
||||
&m_bitmap->GetBitmapInfo()->m_bmiHeader,
|
||||
m_bitmap->GetBitmapData(),
|
||||
m_flcHeader,
|
||||
&rects[rectCount],
|
||||
&decodedColorMap
|
||||
);
|
||||
|
||||
if (((MxDSMediaAction*) m_action)->GetPaletteManagement() && decodedColorMap)
|
||||
RealizePalette();
|
||||
|
||||
for (MxS32 i = 0; i < rectCount; i++) {
|
||||
MxRect32 rect(rects[i]);
|
||||
rect.AddPoint(m_location);
|
||||
MVideoManager()->InvalidateRect(rect);
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b3620
|
||||
|
@@ -45,7 +45,7 @@ void MxLoopingFlcPresenter::NextFrame()
|
||||
else {
|
||||
LoadFrame(chunk);
|
||||
LoopChunk(chunk);
|
||||
m_unk0x68 += m_flicHeader->speed;
|
||||
m_unk0x68 += m_flcHeader->speed;
|
||||
}
|
||||
|
||||
m_subscriber->DestroyChunk(chunk);
|
||||
|
Reference in New Issue
Block a user