Match ParseExtra functions (#605)

* Match ParseExtra functions

* Match MxStillPresenter::ParseExtra

* Match remaining ParseExtra functions
This commit is contained in:
Christian Semmler
2024-02-29 13:15:20 -05:00
committed by GitHub
parent ff04b0ba5a
commit 49d6c88912
12 changed files with 133 additions and 111 deletions

View File

@@ -28,12 +28,15 @@ void LegoActorPresenter::StartingTickle()
// FUNCTION: LEGO1 0x10076cc0
void LegoActorPresenter::ParseExtra()
{
char buffer[512];
char* extraData = m_action->GetExtraData();
if (m_action->GetExtraLength()) {
memcpy(buffer, extraData, m_action->GetExtraLength());
buffer[m_action->GetExtraLength()] = 0;
MxU16 extraLength;
char* extraData;
m_action->GetExtra(extraLength, extraData);
m_entity->ParseAction(buffer);
if (extraLength & MAXWORD) {
char extraCopy[512];
memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[extraLength & MAXWORD] = '\0';
m_entity->ParseAction(extraCopy);
}
}

View File

@@ -96,13 +96,15 @@ void LegoEntityPresenter::SetEntityLocation(
// FUNCTION: LEGO1 0x10053750
void LegoEntityPresenter::ParseExtra()
{
char data[512];
MxU16 len = m_action->GetExtraLength();
if (len) {
memcpy(data, m_action->GetExtraData(), len);
data[len] = 0;
MxU16 extraLength;
char* extraData;
m_action->GetExtra(extraLength, extraData);
len &= MAXWORD;
m_entity->ParseAction(data);
if (extraLength & MAXWORD) {
char extraCopy[512];
memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[extraLength & MAXWORD] = '\0';
m_entity->ParseAction(extraCopy);
}
}

View File

@@ -150,7 +150,7 @@ void LegoWorldPresenter::StartingTickle()
}
// STUB: LEGO1 0x10066b40
void LoadWorld(char* p_worldName, LegoWorld* p_world)
void LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
{
}
@@ -180,15 +180,17 @@ void LegoWorldPresenter::VTable0x60(MxPresenter* p_presenter)
// FUNCTION: LEGO1 0x10067b00
void LegoWorldPresenter::ParseExtra()
{
char data[1024];
char output[1024];
MxU16 len = m_action->GetExtraLength();
*((MxU16*) &data[0]) = m_action->GetExtraLength();
if (len != 0) {
memcpy(data, m_action->GetExtraData(), len);
data[len] = 0;
MxU16 extraLength;
char* extraData;
m_action->GetExtra(extraLength, extraData);
if (KeyValueStringParse(output, g_strWORLD, data)) {
if (extraLength & MAXWORD) {
char extraCopy[1024];
memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[extraLength & MAXWORD] = '\0';
char output[1024];
if (KeyValueStringParse(output, g_strWORLD, extraCopy)) {
char* worldKey = strtok(output, g_parseExtraTokens);
LoadWorld(worldKey, (LegoWorld*) m_entity);
((LegoWorld*) m_entity)->SetScriptIndex(Lego()->GetScriptIndex(worldKey));