Match ParseExtra functions

This commit is contained in:
Christian Semmler 2024-02-29 12:47:47 -05:00
parent ff04b0ba5a
commit 83473472c9
3 changed files with 21 additions and 14 deletions

View File

@ -57,6 +57,12 @@ class MxDSAction : public MxDSObject {
void AppendData(MxU16 p_extraLength, const char* p_extraData); void AppendData(MxU16 p_extraLength, const char* p_extraData);
inline void GetExtra(MxU16& p_extraLength, char*& p_extraData)
{
p_extraLength = m_extraLength;
p_extraData = m_extraData;
}
inline MxU32 GetFlags() { return m_flags; } inline MxU32 GetFlags() { return m_flags; }
inline void SetFlags(MxU32 p_flags) { m_flags = p_flags; } inline void SetFlags(MxU32 p_flags) { m_flags = p_flags; }
inline char* GetExtraData() { return m_extraData; } inline char* GetExtraData() { return m_extraData; }

View File

@ -322,16 +322,16 @@ void MxWavePresenter::Enable(MxBool p_enable)
// FUNCTION: LEGO1 0x100b23a0 // FUNCTION: LEGO1 0x100b23a0
void MxWavePresenter::ParseExtra() void MxWavePresenter::ParseExtra()
{ {
char extraCopy[512];
MxSoundPresenter::ParseExtra(); MxSoundPresenter::ParseExtra();
*((MxU16*) &extraCopy[0]) = m_action->GetExtraLength();
char* extraData = m_action->GetExtraData();
if (*((MxU16*) &extraCopy[0])) { MxU16 extraLength;
MxU16 len = *((MxU16*) &extraCopy[0]); char* extraData;
memcpy(extraCopy, extraData, len); m_action->GetExtra(extraLength, extraData);
extraCopy[len] = '\0';
if (extraLength & MAXWORD) {
char extraCopy[512];
memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[extraLength & MAXWORD] = '\0';
char soundValue[512]; char soundValue[512];
if (KeyValueStringParse(soundValue, g_strSOUND, extraCopy)) { if (KeyValueStringParse(soundValue, g_strSOUND, extraCopy)) {

View File

@ -78,14 +78,15 @@ void MxPresenter::EndAction()
void MxPresenter::ParseExtra() void MxPresenter::ParseExtra()
{ {
MxAutoLocker lock(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxU16 len = m_action->GetExtraLength();
char* extraData = m_action->GetExtraData();
if (len) { MxU16 extraLength;
// len &= MAXWORD; char* extraData;
m_action->GetExtra(extraLength, extraData);
if (extraLength & MAXWORD) {
char extraCopy[512]; char extraCopy[512];
memcpy(extraCopy, extraData, len); memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[len] = '\0'; extraCopy[extraLength & MAXWORD] = '\0';
char worldValue[512]; char worldValue[512];
if (KeyValueStringParse(worldValue, g_strWORLD, extraCopy)) { if (KeyValueStringParse(worldValue, g_strWORLD, extraCopy)) {