mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-21 07:11:16 +00:00
Named extra data is MxDSAction, added Parsed flag to enum
This commit is contained in:
parent
766d6001ff
commit
9b9fb80ab5
@ -13,8 +13,8 @@ MxDSAction::MxDSAction()
|
|||||||
{
|
{
|
||||||
this->m_flags = 32;
|
this->m_flags = 32;
|
||||||
this->m_startTime = INT_MIN;
|
this->m_startTime = INT_MIN;
|
||||||
this->m_unkData = NULL;
|
this->m_extraData = NULL;
|
||||||
this->m_unkLength = 0;
|
this->m_extraLength = 0;
|
||||||
this->m_duration = INT_MIN;
|
this->m_duration = INT_MIN;
|
||||||
this->m_loopCount = -1;
|
this->m_loopCount = -1;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ MxDSAction::MxDSAction()
|
|||||||
// OFFSET: LEGO1 0x100ada80
|
// OFFSET: LEGO1 0x100ada80
|
||||||
MxDSAction::~MxDSAction()
|
MxDSAction::~MxDSAction()
|
||||||
{
|
{
|
||||||
delete[] this->m_unkData;
|
delete[] this->m_extraData;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100adaf0
|
// OFFSET: LEGO1 0x100adaf0
|
||||||
@ -60,7 +60,7 @@ void MxDSAction::CopyFrom(MxDSAction &p_dsAction)
|
|||||||
this->m_direction.CopyFrom(p_dsAction.m_direction);
|
this->m_direction.CopyFrom(p_dsAction.m_direction);
|
||||||
this->m_up.CopyFrom(p_dsAction.m_up);
|
this->m_up.CopyFrom(p_dsAction.m_up);
|
||||||
|
|
||||||
AppendData(p_dsAction.m_unkLength, p_dsAction.m_unkData);
|
AppendData(p_dsAction.m_extraLength, p_dsAction.m_extraData);
|
||||||
this->m_unk84 = p_dsAction.m_unk84;
|
this->m_unk84 = p_dsAction.m_unk84;
|
||||||
this->m_unk88 = p_dsAction.m_unk88;
|
this->m_unk88 = p_dsAction.m_unk88;
|
||||||
this->m_omni = p_dsAction.m_omni;
|
this->m_omni = p_dsAction.m_omni;
|
||||||
@ -83,7 +83,7 @@ MxU32 MxDSAction::GetSizeOnDisk()
|
|||||||
{
|
{
|
||||||
MxU32 totalSizeOnDisk;
|
MxU32 totalSizeOnDisk;
|
||||||
|
|
||||||
totalSizeOnDisk = MxDSObject::GetSizeOnDisk() + 90 + this->m_unkLength;
|
totalSizeOnDisk = MxDSObject::GetSizeOnDisk() + 90 + this->m_extraLength;
|
||||||
this->m_sizeOnDisk = totalSizeOnDisk - MxDSObject::GetSizeOnDisk();
|
this->m_sizeOnDisk = totalSizeOnDisk - MxDSObject::GetSizeOnDisk();
|
||||||
|
|
||||||
return totalSizeOnDisk;
|
return totalSizeOnDisk;
|
||||||
@ -186,13 +186,13 @@ void MxDSAction::MergeFrom(MxDSAction &p_dsAction)
|
|||||||
this->m_up[2] = p_dsAction.m_up[2];
|
this->m_up[2] = p_dsAction.m_up[2];
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
MxU16 unkLength = p_dsAction.m_unkLength;
|
MxU16 extraLength = p_dsAction.m_extraLength;
|
||||||
char *unkData = p_dsAction.m_unkData;
|
char *extraData = p_dsAction.m_extraData;
|
||||||
if (unkLength && unkData) {
|
if (extraLength && extraData) {
|
||||||
if (!this->m_unkData || !strncmp("XXX", this->m_unkData, 3)) {
|
if (!this->m_extraData || !strncmp("XXX", this->m_extraData, 3)) {
|
||||||
delete[] this->m_unkData;
|
delete[] this->m_extraData;
|
||||||
this->m_unkLength = 0;
|
this->m_extraLength = 0;
|
||||||
AppendData(unkLength, unkData);
|
AppendData(extraLength, extraData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -222,29 +222,29 @@ MxLong MxDSAction::GetCurrentTime()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100ade60
|
// OFFSET: LEGO1 0x100ade60
|
||||||
void MxDSAction::AppendData(MxU16 p_unkLength, const char *p_unkData)
|
void MxDSAction::AppendData(MxU16 p_extraLength, const char *p_extraData)
|
||||||
{
|
{
|
||||||
if (this->m_unkData == p_unkData || !p_unkData)
|
if (this->m_extraData == p_extraData || !p_extraData)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this->m_unkLength) {
|
if (this->m_extraLength) {
|
||||||
char *concat = new char[p_unkLength + this->m_unkLength + sizeof(g_unkSep)];
|
char *concat = new char[p_extraLength + this->m_extraLength + sizeof(g_unkSep)];
|
||||||
memcpy(concat, this->m_unkData, this->m_unkLength);
|
memcpy(concat, this->m_extraData, this->m_extraLength);
|
||||||
|
|
||||||
*(MxU16*) &concat[this->m_unkLength] = g_unkSep;
|
*(MxU16*) &concat[this->m_extraLength] = g_unkSep;
|
||||||
memcpy(&concat[this->m_unkLength + sizeof(g_unkSep)], p_unkData, p_unkLength);
|
memcpy(&concat[this->m_extraLength + sizeof(g_unkSep)], p_extraData, p_extraLength);
|
||||||
|
|
||||||
this->m_unkLength += p_unkLength + sizeof(g_unkSep);
|
this->m_extraLength += p_extraLength + sizeof(g_unkSep);
|
||||||
delete[] this->m_unkData;
|
delete[] this->m_extraData;
|
||||||
this->m_unkData = concat;
|
this->m_extraData = concat;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *copy = new char[p_unkLength];
|
char *copy = new char[p_extraLength];
|
||||||
this->m_unkData = copy;
|
this->m_extraData = copy;
|
||||||
|
|
||||||
if (copy) {
|
if (copy) {
|
||||||
this->m_unkLength = p_unkLength;
|
this->m_extraLength = p_extraLength;
|
||||||
memcpy(copy, p_unkData, p_unkLength);
|
memcpy(copy, p_extraData, p_extraLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ class MxDSAction : public MxDSObject
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
Flag_Enabled = 0x20,
|
Flag_Enabled = 0x20,
|
||||||
|
Flag_Parsed = 0x80,
|
||||||
};
|
};
|
||||||
|
|
||||||
__declspec(dllexport) MxDSAction();
|
__declspec(dllexport) MxDSAction();
|
||||||
@ -45,12 +46,12 @@ class MxDSAction : public MxDSObject
|
|||||||
virtual MxLong GetSomeTimingField(); // vtable+3c;
|
virtual MxLong GetSomeTimingField(); // vtable+3c;
|
||||||
virtual MxLong GetCurrentTime(); // vtable+40;
|
virtual MxLong GetCurrentTime(); // vtable+40;
|
||||||
|
|
||||||
void AppendData(MxU16 p_unkLength, const char *p_unkData);
|
void AppendData(MxU16 p_extraLength, const char *p_extraData);
|
||||||
|
|
||||||
inline MxU32 GetFlags() { return this->m_flags; }
|
inline MxU32 GetFlags() { return this->m_flags; }
|
||||||
inline void SetFlags(MxU32 m_flags) { this->m_flags = m_flags; }
|
inline void SetFlags(MxU32 m_flags) { this->m_flags = m_flags; }
|
||||||
inline char *GetUnkData() { return m_unkData; }
|
inline char *GetExtraData() { return m_extraData; }
|
||||||
inline MxU16 GetUnkLength() const { return m_unkLength; }
|
inline MxU16 GetExtraLength() const { return m_extraLength; }
|
||||||
inline void SetOmni(MxOmni *p_omni) { m_omni = p_omni; }
|
inline void SetOmni(MxOmni *p_omni) { m_omni = p_omni; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -66,8 +67,8 @@ class MxDSAction : public MxDSObject
|
|||||||
MxVector3Data m_location;
|
MxVector3Data m_location;
|
||||||
MxVector3Data m_direction;
|
MxVector3Data m_direction;
|
||||||
MxVector3Data m_up;
|
MxVector3Data m_up;
|
||||||
char *m_unkData;
|
char *m_extraData;
|
||||||
MxU16 m_unkLength;
|
MxU16 m_extraLength;
|
||||||
undefined4 m_unk84;
|
undefined4 m_unk84;
|
||||||
undefined4 m_unk88;
|
undefined4 m_unk88;
|
||||||
MxOmni *m_omni; // 0x8c
|
MxOmni *m_omni; // 0x8c
|
||||||
|
|||||||
@ -31,17 +31,17 @@ void MxPresenter::ParseExtra()
|
|||||||
{
|
{
|
||||||
|
|
||||||
MxAutoLocker lock(&m_criticalSection);
|
MxAutoLocker lock(&m_criticalSection);
|
||||||
MxU32 len = m_action->GetUnkLength();
|
MxU32 len = m_action->GetExtraLength();
|
||||||
char *unk_data = m_action->GetUnkData();
|
char *extraData = m_action->GetExtraData();
|
||||||
|
|
||||||
if (len) {
|
if (len) {
|
||||||
len &= MAXWORD;
|
len &= MAXWORD;
|
||||||
char t_actionData[512];
|
char extraCopy[512];
|
||||||
memcpy(t_actionData, unk_data, len);
|
memcpy(extraCopy, extraData, len);
|
||||||
t_actionData[len] = '\0';
|
extraCopy[len] = '\0';
|
||||||
|
|
||||||
char t_worldValue[512];
|
char t_worldValue[512];
|
||||||
if (KeyValueStringParse(t_worldValue, g_strWORLD, t_actionData)) {
|
if (KeyValueStringParse(t_worldValue, g_strWORLD, extraCopy)) {
|
||||||
char *token = strtok(t_worldValue, g_parseExtraTokens);
|
char *token = strtok(t_worldValue, g_parseExtraTokens);
|
||||||
char t_token[256];
|
char t_token[256];
|
||||||
strcpy(t_token, token);
|
strcpy(t_token, token);
|
||||||
@ -51,8 +51,7 @@ void MxPresenter::ParseExtra()
|
|||||||
|
|
||||||
int result = MxOmni::GetInstance()->vtable0x30(t_token, val, this);
|
int result = MxOmni::GetInstance()->vtable0x30(t_token, val, this);
|
||||||
|
|
||||||
// TODO: magic number for flag
|
m_action->SetFlags(m_action->GetFlags() | MxDSAction::Flag_Parsed);
|
||||||
m_action->SetFlags(m_action->GetFlags() | 128);
|
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
SendTo_unkPresenter(MxOmni::GetInstance());
|
SendTo_unkPresenter(MxOmni::GetInstance());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user