mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
Implement MxDSAction (#106)
This commit is contained in:
parent
a02e07c4d7
commit
4e0149361e
3 changed files with 107 additions and 17 deletions
|
@ -55,7 +55,7 @@ class MxDSAction : public MxDSObject
|
|||
MxU16 m_unkLength;
|
||||
undefined4 m_unk84;
|
||||
undefined4 m_unk88;
|
||||
MxOmni* m_omni; // 0x8c
|
||||
MxOmni *m_omni; // 0x8c
|
||||
MxLong m_someTimingField; // 0x90
|
||||
};
|
||||
|
||||
|
|
|
@ -1,21 +1,103 @@
|
|||
#include "mxdsmediaaction.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxDSMediaAction, 0xb8)
|
||||
|
||||
// OFFSET: LEGO1 0x100c8b40
|
||||
MxDSMediaAction::MxDSMediaAction()
|
||||
{
|
||||
this->m_unk98 = 0;
|
||||
this->m_mediaSrcPath = NULL;
|
||||
this->m_unk9c = 0;
|
||||
this->m_unka0 = 0;
|
||||
this->m_unka4 = 0;
|
||||
this->m_unka8 = 0;
|
||||
this->m_unkac = 1;
|
||||
this->m_unkb4 = 0xffffffff;
|
||||
this->m_unkb0 = 0;
|
||||
this->m_framesPerSecond = 0;
|
||||
this->m_mediaFormat = 0;
|
||||
this->m_paletteManagement = 1;
|
||||
this->m_unkb4 = -1;
|
||||
this->m_sustainTime = 0;
|
||||
this->SetType(MxDSType_MediaAction);
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8cf0
|
||||
MxDSMediaAction::~MxDSMediaAction()
|
||||
{
|
||||
delete this->m_unk98;
|
||||
delete[] this->m_mediaSrcPath;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8d60
|
||||
void MxDSMediaAction::CopyFrom(MxDSMediaAction &p_dsMediaAction)
|
||||
{
|
||||
CopyMediaSrcPath(p_dsMediaAction.m_mediaSrcPath);
|
||||
|
||||
// TODO
|
||||
this->m_unk9c = p_dsMediaAction.m_unk9c;
|
||||
this->m_unka0 = p_dsMediaAction.m_unka0;
|
||||
|
||||
this->m_framesPerSecond = p_dsMediaAction.m_framesPerSecond;
|
||||
this->m_mediaFormat = p_dsMediaAction.m_mediaFormat;
|
||||
this->m_paletteManagement = p_dsMediaAction.m_paletteManagement;
|
||||
this->m_sustainTime = p_dsMediaAction.m_sustainTime;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8dc0
|
||||
MxDSMediaAction &MxDSMediaAction::operator=(MxDSMediaAction &p_dsMediaAction)
|
||||
{
|
||||
if (this == &p_dsMediaAction)
|
||||
return *this;
|
||||
|
||||
MxDSAction::operator=(p_dsMediaAction);
|
||||
this->CopyFrom(p_dsMediaAction);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8f10
|
||||
MxU32 MxDSMediaAction::GetSizeOnDisk()
|
||||
{
|
||||
MxU32 totalSizeOnDisk = MxDSAction::GetSizeOnDisk();
|
||||
|
||||
if (this->m_mediaSrcPath)
|
||||
totalSizeOnDisk += strlen(this->m_mediaSrcPath) + 1;
|
||||
else
|
||||
totalSizeOnDisk++;
|
||||
|
||||
totalSizeOnDisk += 24;
|
||||
this->m_sizeOnDisk = totalSizeOnDisk - MxDSAction::GetSizeOnDisk();
|
||||
return totalSizeOnDisk;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8f60
|
||||
void MxDSMediaAction::Deserialize(char **p_source, MxS16 p_unk24)
|
||||
{
|
||||
MxDSAction::Deserialize(p_source, p_unk24);
|
||||
|
||||
CopyMediaSrcPath(*p_source);
|
||||
*p_source += strlen(this->m_mediaSrcPath) + 1;
|
||||
|
||||
this->m_unk9c = *(undefined4*) *p_source;
|
||||
*p_source += sizeof(undefined4);
|
||||
this->m_unka0 = *(undefined4*) *p_source;
|
||||
*p_source += sizeof(undefined4);
|
||||
this->m_framesPerSecond = *(MxS32*) *p_source;
|
||||
*p_source += sizeof(MxS32);
|
||||
this->m_mediaFormat = *(MxS32*) *p_source;
|
||||
*p_source += sizeof(MxS32);
|
||||
this->m_paletteManagement = *(MxS32*) *p_source;
|
||||
*p_source += sizeof(MxS32);
|
||||
this->m_sustainTime = *(MxLong*) *p_source;
|
||||
*p_source += sizeof(MxLong);
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100c8e80
|
||||
void MxDSMediaAction::CopyMediaSrcPath(const char *p_mediaSrcPath)
|
||||
{
|
||||
if (this->m_mediaSrcPath == p_mediaSrcPath)
|
||||
return;
|
||||
|
||||
delete[] this->m_mediaSrcPath;
|
||||
|
||||
if (p_mediaSrcPath) {
|
||||
this->m_mediaSrcPath = new char[strlen(p_mediaSrcPath) + 1];
|
||||
if (this->m_mediaSrcPath)
|
||||
strcpy(this->m_mediaSrcPath, p_mediaSrcPath);
|
||||
}
|
||||
else
|
||||
this->m_mediaSrcPath = NULL;
|
||||
}
|
|
@ -12,6 +12,9 @@ class MxDSMediaAction : public MxDSAction
|
|||
MxDSMediaAction();
|
||||
virtual ~MxDSMediaAction() override;
|
||||
|
||||
void CopyFrom(MxDSMediaAction &p_dsMediaAction);
|
||||
MxDSMediaAction &operator=(MxDSMediaAction &p_dsMediaAction);
|
||||
|
||||
// OFFSET: LEGO1 0x100c8be0
|
||||
inline virtual const char *ClassName() const override // vtable+0x0c
|
||||
{
|
||||
|
@ -24,16 +27,21 @@ class MxDSMediaAction : public MxDSAction
|
|||
{
|
||||
return !strcmp(name, MxDSMediaAction::ClassName()) || MxDSAction::IsA(name);
|
||||
}
|
||||
|
||||
virtual MxU32 GetSizeOnDisk(); // vtable+18;
|
||||
virtual void Deserialize(char **p_source, MxS16 p_unk24); // vtable+1c;
|
||||
|
||||
void CopyMediaSrcPath(const char *p_mediaSrcPath);
|
||||
private:
|
||||
MxS32* m_unk94;
|
||||
MxS32* m_unk98;
|
||||
MxS32* m_unk9c;
|
||||
MxS32* m_unka0;
|
||||
MxS32* m_unka4;
|
||||
MxS32* m_unka8;
|
||||
MxS32 m_unkac;
|
||||
MxS32* m_unkb0;
|
||||
MxS32 m_unkb4;
|
||||
MxU32 m_sizeOnDisk;
|
||||
char *m_mediaSrcPath;
|
||||
undefined4 m_unk9c;
|
||||
undefined4 m_unka0;
|
||||
MxS32 m_framesPerSecond;
|
||||
MxS32 m_mediaFormat;
|
||||
MxS32 m_paletteManagement;
|
||||
MxLong m_sustainTime;
|
||||
undefined4 m_unkb4;
|
||||
};
|
||||
|
||||
#endif // MXDSMEDIAACTION_H
|
||||
|
|
Loading…
Reference in a new issue