begin work on MxFlcPresenter's m_unk64

This commit is contained in:
Joshua Peisach 2023-11-25 14:39:31 -05:00
parent 106453c9fb
commit 0e6b084b81
No known key found for this signature in database
GPG Key ID: 41C3D4189AFEDB5A
4 changed files with 54 additions and 17 deletions

36
3rdparty/flic/flic.h vendored Normal file
View File

@ -0,0 +1,36 @@
#ifndef FLIC_H
#define FLIC_H
#include <windows.h>
// A basic FLIC header structure from the "EGI" documentation. Source: https://www.compuphase.com/flic.htm#FLICHEADER
// This also goes over the FLIC structures: https://github.com/thinkbeforecoding/nomemalloc.handson/blob/master/flic.txt
typedef struct {
DWORD size; /* Size of FLIC including this header */
WORD type; /* File type 0xAF11, 0xAF12, 0xAF30, 0xAF44, ... */
WORD frames; /* Number of frames in first segment */
WORD width; /* FLIC width in pixels */
WORD height; /* FLIC height in pixels */
WORD depth; /* Bits per pixel (usually 8) */
WORD flags; /* Set to zero or to three */
DWORD speed; /* Delay between frames */
WORD reserved1; /* Set to zero */
DWORD created; /* Date of FLIC creation (FLC only) */
DWORD creator; /* Serial number or compiler id (FLC only) */
DWORD updated; /* Date of FLIC update (FLC only) */
DWORD updater; /* Serial number (FLC only), see creator */
WORD aspect_dx; /* Width of square rectangle (FLC only) */
WORD aspect_dy; /* Height of square rectangle (FLC only) */
WORD ext_flags; /* EGI: flags for specific EGI extensions */
WORD keyframes; /* EGI: key-image frequency */
WORD totalframes; /* EGI: total number of frames (segments) */
DWORD req_memory; /* EGI: maximum chunk size (uncompressed) */
WORD max_regions; /* EGI: max. number of regions in a CHK_REGION chunk */
WORD transp_num; /* EGI: number of transparent levels */
BYTE reserved2[24]; /* Set to zero */
DWORD oframe1; /* Offset to frame 1 (FLC only) */
DWORD oframe2; /* Offset to frame 2 (FLC only) */
BYTE reserved3[40]; /* Set to zero */
} FLIC_HEADER;
#endif FLIC_H // FLIC_H

View File

@ -220,6 +220,8 @@ endif()
# Additional include directories # Additional include directories
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/3rdparty/vec") target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/3rdparty/vec")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/flic")
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smk") target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smk")
if (ISLE_USE_SMARTHEAP) if (ISLE_USE_SMARTHEAP)

View File

@ -23,7 +23,17 @@ MxFlcPresenter::~MxFlcPresenter()
delete this->m_unk64; delete this->m_unk64;
} }
} }
<<<<<<< HEAD
// OFFSET: LEGO1 0x100b34d0
void MxFlcPresenter::vtable60()
{
if(m_bitmap)
delete m_bitmap;
m_bitmap = new MxBitmap;
m_bitmap->SetSize(m_unk64->width, m_unk64->height, NULL, FALSE);
}
// OFFSET: LEGO1 0x100b3620 // OFFSET: LEGO1 0x100b3620
void MxFlcPresenter::VTable0x70() void MxFlcPresenter::VTable0x70()
@ -34,16 +44,3 @@ void MxFlcPresenter::VTable0x70()
if (pal) if (pal)
delete pal; delete pal;
} }
||||||| parent of 679bbcf (MxFlcPresenter: vtable70)
=======
// OFFSET: LEGO1 0x100b3620
void MxFlcPresenter::vtable70()
{
MxPalette* pal = m_bitmap->CreatePalette();
MVideoManager()->RealizePalette(pal);
if (pal) {
delete pal;
}
}
>>>>>>> 679bbcf (MxFlcPresenter: vtable70)

View File

@ -2,6 +2,9 @@
#define MXFLCPRESENTER_H #define MXFLCPRESENTER_H
#include "decomp.h" #include "decomp.h"
#include <flic.h>
#include "mxvideopresenter.h" #include "mxvideopresenter.h"
// VTABLE 0x100dc2c0 // VTABLE 0x100dc2c0
@ -24,11 +27,10 @@ class MxFlcPresenter : public MxVideoPresenter {
return "MxFlcPresenter"; return "MxFlcPresenter";
} }
virtual void vtable60() override; // vtable+0x60
virtual void VTable0x70() override; // vtable+0x70 virtual void VTable0x70() override; // vtable+0x70
virtual void vtable70() override; // vtable+0x74 FLIC_HEADER* m_unk64; // 0x64 - what we believe so far. Could be another custom structure like MxSmack.
undefined4* m_unk64;
}; };
#endif // MXFLCPRESENTER_H #endif // MXFLCPRESENTER_H