Beta match and cleanup of MxDS* classes (#1432)

* Clean up / beta match MxDS* classes

* ;)
This commit is contained in:
MS
2025-04-10 22:59:55 -04:00
committed by GitHub
parent 95431347ee
commit 688c203f70
24 changed files with 289 additions and 155 deletions

View File

@@ -6,20 +6,29 @@ DECOMP_SIZE_ASSERT(MxDSAnim, 0xb8)
// FUNCTION: BETA10 0x1015cd71
MxDSAnim::MxDSAnim()
{
this->SetType(e_anim);
m_type = e_anim;
}
// FUNCTION: LEGO1 0x100c91a0
// FUNCTION: BETA10 0x1015cde9
MxDSAnim::~MxDSAnim()
{
}
// FUNCTION: LEGO1 0x100c91f0
// FUNCTION: BETA10 0x1015ce51
void MxDSAnim::CopyFrom(MxDSAnim& p_dsAnim)
{
}
// FUNCTION: BETA10 0x1015ce69
MxDSAnim::MxDSAnim(MxDSAnim& p_dsAnim) : MxDSMediaAction(p_dsAnim)
{
CopyFrom(p_dsAnim);
}
// FUNCTION: LEGO1 0x100c9200
// FUNCTION: BETA10 0x1015ceea
MxDSAnim& MxDSAnim::operator=(MxDSAnim& p_dsAnim)
{
if (this == &p_dsAnim) {
@@ -27,11 +36,12 @@ MxDSAnim& MxDSAnim::operator=(MxDSAnim& p_dsAnim)
}
MxDSMediaAction::operator=(p_dsAnim);
this->CopyFrom(p_dsAnim);
CopyFrom(p_dsAnim);
return *this;
}
// FUNCTION: LEGO1 0x100c9230
// FUNCTION: BETA10 0x1015cf31
MxDSAction* MxDSAnim::Clone()
{
MxDSAnim* clone = new MxDSAnim();

View File

@@ -6,20 +6,29 @@ DECOMP_SIZE_ASSERT(MxDSEvent, 0xb8)
// FUNCTION: BETA10 0x1015d2e5
MxDSEvent::MxDSEvent()
{
this->SetType(e_event);
m_type = e_event;
}
// FUNCTION: LEGO1 0x100c97a0
// FUNCTION: BETA10 0x1015d35d
MxDSEvent::~MxDSEvent()
{
}
// FUNCTION: LEGO1 0x100c97f0
// FUNCTION: BETA10 0x1015d3c5
void MxDSEvent::CopyFrom(MxDSEvent& p_dsEvent)
{
}
// FUNCTION: BETA10 0x1015d3dd
MxDSEvent::MxDSEvent(MxDSEvent& p_dsEvent) : MxDSMediaAction(p_dsEvent)
{
CopyFrom(p_dsEvent);
}
// FUNCTION: LEGO1 0x100c9800
// FUNCTION: BETA10 0x1015d45e
MxDSEvent& MxDSEvent::operator=(MxDSEvent& p_dsEvent)
{
if (this == &p_dsEvent) {
@@ -27,11 +36,12 @@ MxDSEvent& MxDSEvent::operator=(MxDSEvent& p_dsEvent)
}
MxDSMediaAction::operator=(p_dsEvent);
this->CopyFrom(p_dsEvent);
CopyFrom(p_dsEvent);
return *this;
}
// FUNCTION: LEGO1 0x100c9830
// FUNCTION: BETA10 0x1015d4a5
MxDSAction* MxDSEvent::Clone()
{
MxDSEvent* clone = new MxDSEvent();

View File

@@ -87,8 +87,9 @@ void MxDSMediaAction::CopyMediaSrcPath(const char* p_mediaSrcPath)
if (m_mediaSrcPath) {
strcpy(m_mediaSrcPath, p_mediaSrcPath);
}
MxTrace("MxDSMediaAction: name allocation failed: %s.\n", p_mediaSrcPath);
else {
MxTrace("MxDSMediaAction: name allocation failed: %s.\n", p_mediaSrcPath);
}
}
else {
m_mediaSrcPath = NULL;

View File

@@ -1,5 +1,7 @@
#include "mxdsmultiaction.h"
#include <assert.h>
DECOMP_SIZE_ASSERT(MxDSMultiAction, 0x9c)
DECOMP_SIZE_ASSERT(MxDSActionList, 0x1c);
DECOMP_SIZE_ASSERT(MxDSActionListCursor, 0x10);
@@ -8,33 +10,40 @@ DECOMP_SIZE_ASSERT(MxDSActionListCursor, 0x10);
// FUNCTION: BETA10 0x10159410
MxDSMultiAction::MxDSMultiAction()
{
this->SetType(e_multiAction);
this->m_actions = new MxDSActionList;
this->m_actions->SetDestroy(MxDSActionList::Destroy);
m_type = e_multiAction;
m_actionList = new MxDSActionList;
assert(m_actionList);
m_actionList->SetDestroy(MxDSActionList::Destroy);
}
// FUNCTION: LEGO1 0x100ca060
// FUNCTION: BETA10 0x10159518
MxDSMultiAction::~MxDSMultiAction()
{
if (this->m_actions) {
delete this->m_actions;
}
delete m_actionList;
}
// FUNCTION: LEGO1 0x100ca0d0
// FUNCTION: BETA10 0x101595ad
void MxDSMultiAction::CopyFrom(MxDSMultiAction& p_dsMultiAction)
{
this->m_actions->DeleteAll();
m_actionList->DeleteAll();
MxDSActionListCursor cursor(p_dsMultiAction.m_actions);
MxDSActionListCursor cursor(p_dsMultiAction.m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
this->m_actions->Append(action->Clone());
m_actionList->Append(action->Clone());
}
}
// FUNCTION: BETA10 0x10159660
MxDSMultiAction::MxDSMultiAction(MxDSMultiAction& p_dsMultiAction) : MxDSAction(p_dsMultiAction)
{
CopyFrom(p_dsMultiAction);
}
// FUNCTION: LEGO1 0x100ca260
// FUNCTION: BETA10 0x101596e1
MxDSMultiAction& MxDSMultiAction::operator=(MxDSMultiAction& p_dsMultiAction)
{
if (this == &p_dsMultiAction) {
@@ -42,16 +51,17 @@ MxDSMultiAction& MxDSMultiAction::operator=(MxDSMultiAction& p_dsMultiAction)
}
MxDSAction::operator=(p_dsMultiAction);
this->CopyFrom(p_dsMultiAction);
CopyFrom(p_dsMultiAction);
return *this;
}
// FUNCTION: LEGO1 0x100ca290
// FUNCTION: BETA10 0x10159728
void MxDSMultiAction::SetUnknown90(MxLong p_unk0x90)
{
this->m_unk0x90 = p_unk0x90;
m_unk0x90 = p_unk0x90;
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
action->SetUnknown90(p_unk0x90);
@@ -59,11 +69,12 @@ void MxDSMultiAction::SetUnknown90(MxLong p_unk0x90)
}
// FUNCTION: LEGO1 0x100ca370
// FUNCTION: BETA10 0x101597ce
void MxDSMultiAction::MergeFrom(MxDSAction& p_dsMultiAction)
{
MxDSAction::MergeFrom(p_dsMultiAction);
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
action->MergeFrom(p_dsMultiAction);
@@ -71,13 +82,14 @@ void MxDSMultiAction::MergeFrom(MxDSAction& p_dsMultiAction)
}
// FUNCTION: LEGO1 0x100ca450
// FUNCTION: BETA10 0x10159874
MxBool MxDSMultiAction::HasId(MxU32 p_objectId)
{
if (this->GetObjectId() == p_objectId) {
if (GetObjectId() == p_objectId) {
return TRUE;
}
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
if (action->HasId(p_objectId)) {
@@ -89,6 +101,7 @@ MxBool MxDSMultiAction::HasId(MxU32 p_objectId)
}
// FUNCTION: LEGO1 0x100ca550
// FUNCTION: BETA10 0x10159959
MxDSAction* MxDSMultiAction::Clone()
{
MxDSMultiAction* clone = new MxDSMultiAction();
@@ -101,11 +114,12 @@ MxDSAction* MxDSMultiAction::Clone()
}
// FUNCTION: LEGO1 0x100ca5e0
// FUNCTION: BETA10 0x10159a03
undefined4 MxDSMultiAction::VTable0x14()
{
undefined4 result = MxDSAction::VTable0x14();
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
result += action->VTable0x14();
@@ -115,22 +129,26 @@ undefined4 MxDSMultiAction::VTable0x14()
}
// FUNCTION: LEGO1 0x100ca6c0
// FUNCTION: BETA10 0x10159aaf
MxU32 MxDSMultiAction::GetSizeOnDisk()
{
MxU32 totalSizeOnDisk = MxDSAction::GetSizeOnDisk() + 16;
MxU32 totalSizeOnDisk = MxDSAction::GetSizeOnDisk();
totalSizeOnDisk += 12;
totalSizeOnDisk += 4;
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
totalSizeOnDisk += action->GetSizeOnDisk();
}
this->m_sizeOnDisk = totalSizeOnDisk - MxDSAction::GetSizeOnDisk();
m_sizeOnDisk = totalSizeOnDisk - MxDSAction::GetSizeOnDisk();
return totalSizeOnDisk;
}
// FUNCTION: LEGO1 0x100ca7b0
// FUNCTION: BETA10 0x10159b79
void MxDSMultiAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
{
MxDSAction::Deserialize(p_source, p_unk0x24);
@@ -149,7 +167,7 @@ void MxDSMultiAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
p_source += extraFlag;
this->m_actions->Append(action);
m_actionList->Append(action);
}
}
@@ -157,11 +175,12 @@ void MxDSMultiAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
}
// FUNCTION: LEGO1 0x100ca8c0
// FUNCTION: BETA10 0x10159c37
void MxDSMultiAction::SetAtomId(MxAtomId p_atomId)
{
MxDSAction::SetAtomId(p_atomId);
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
action->SetAtomId(p_atomId);

View File

@@ -6,20 +6,29 @@ DECOMP_SIZE_ASSERT(MxDSObjectAction, 0xb8)
// FUNCTION: BETA10 0x1015c3b0
MxDSObjectAction::MxDSObjectAction()
{
this->SetType(e_objectAction);
m_type = e_objectAction;
}
// FUNCTION: LEGO1 0x100c8a20
// FUNCTION: BETA10 0x1015c428
MxDSObjectAction::~MxDSObjectAction()
{
}
// FUNCTION: LEGO1 0x100c8a70
// FUNCTION: BETA10 0x1015c490
void MxDSObjectAction::CopyFrom(MxDSObjectAction& p_dsObjectAction)
{
}
// FUNCTION: BETA10 0x1015c4a8
MxDSObjectAction::MxDSObjectAction(MxDSObjectAction& p_dsObjectAction) : MxDSMediaAction(p_dsObjectAction)
{
CopyFrom(p_dsObjectAction);
}
// FUNCTION: LEGO1 0x100c8a80
// FUNCTION: BETA10 0x1015c529
MxDSObjectAction& MxDSObjectAction::operator=(MxDSObjectAction& p_dsObjectAction)
{
if (this == &p_dsObjectAction) {
@@ -27,11 +36,12 @@ MxDSObjectAction& MxDSObjectAction::operator=(MxDSObjectAction& p_dsObjectAction
}
MxDSMediaAction::operator=(p_dsObjectAction);
this->CopyFrom(p_dsObjectAction);
CopyFrom(p_dsObjectAction);
return *this;
}
// FUNCTION: LEGO1 0x100c8ab0
// FUNCTION: BETA10 0x1015c573
MxDSAction* MxDSObjectAction::Clone()
{
MxDSObjectAction* clone = new MxDSObjectAction();

View File

@@ -8,20 +8,29 @@ DECOMP_SIZE_ASSERT(MxDSParallelAction, 0x9c)
// FUNCTION: BETA10 0x1015a14d
MxDSParallelAction::MxDSParallelAction()
{
this->SetType(e_parallelAction);
m_type = e_parallelAction;
}
// FUNCTION: LEGO1 0x100cb040
// FUNCTION: BETA10 0x1015a1c5
MxDSParallelAction::~MxDSParallelAction()
{
}
// FUNCTION: LEGO1 0x100cb090
// FUNCTION: BETA10 0x1015a22d
void MxDSParallelAction::CopyFrom(MxDSParallelAction& p_dsParallelAction)
{
}
// FUNCTION: BETA10 0x1015a245
MxDSParallelAction::MxDSParallelAction(MxDSParallelAction& p_dsParallelAction) : MxDSMultiAction(p_dsParallelAction)
{
CopyFrom(p_dsParallelAction);
}
// FUNCTION: LEGO1 0x100cb0a0
// FUNCTION: BETA10 0x1015a2c6
MxDSParallelAction& MxDSParallelAction::operator=(MxDSParallelAction& p_dsParallelAction)
{
if (this == &p_dsParallelAction) {
@@ -29,11 +38,12 @@ MxDSParallelAction& MxDSParallelAction::operator=(MxDSParallelAction& p_dsParall
}
MxDSMultiAction::operator=(p_dsParallelAction);
this->CopyFrom(p_dsParallelAction);
CopyFrom(p_dsParallelAction);
return *this;
}
// FUNCTION: LEGO1 0x100cb0d0
// FUNCTION: BETA10 0x1015a30d
MxDSAction* MxDSParallelAction::Clone()
{
MxDSParallelAction* clone = new MxDSParallelAction();
@@ -46,13 +56,14 @@ MxDSAction* MxDSParallelAction::Clone()
}
// FUNCTION: LEGO1 0x100cb160
// FUNCTION: BETA10 0x1015a3b7
MxLong MxDSParallelAction::GetDuration()
{
if (this->m_duration) {
return this->m_duration;
if (m_duration) {
return m_duration;
}
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
@@ -62,7 +73,7 @@ MxLong MxDSParallelAction::GetDuration()
MxLong duration = action->GetDuration();
if (duration == -1) {
this->m_duration = -1;
m_duration = -1;
break;
}
@@ -79,18 +90,18 @@ MxLong MxDSParallelAction::GetDuration()
}
if (duration == -1) {
this->m_duration = -1;
m_duration = -1;
break;
}
if (this->m_duration < duration) {
this->m_duration = duration;
if (m_duration < duration) {
m_duration = duration;
}
}
if (this->IsBit3()) {
this->m_duration *= this->m_loopCount;
if (IsBit3()) {
m_duration *= m_loopCount;
}
return this->m_duration;
return m_duration;
}

View File

@@ -13,44 +13,51 @@ DECOMP_SIZE_ASSERT(MxListEntry<MxString>, 0x18)
// FUNCTION: BETA10 0x1015a515
MxDSSelectAction::MxDSSelectAction()
{
this->SetType(e_selectAction);
this->m_unk0xac = new MxStringList;
m_type = e_selectAction;
m_unk0xac = new MxStringList;
}
// FUNCTION: LEGO1 0x100cb8d0
// FUNCTION: BETA10 0x1015a5fd
MxDSSelectAction::~MxDSSelectAction()
{
if (this->m_unk0xac) {
delete this->m_unk0xac;
}
delete m_unk0xac;
}
// FUNCTION: LEGO1 0x100cb950
// FUNCTION: BETA10 0x1015a6ae
void MxDSSelectAction::CopyFrom(MxDSSelectAction& p_dsSelectAction)
{
this->m_unk0x9c = p_dsSelectAction.m_unk0x9c;
m_unk0x9c = p_dsSelectAction.m_unk0x9c;
this->m_unk0xac->DeleteAll();
m_unk0xac->DeleteAll();
MxStringListCursor cursor(p_dsSelectAction.m_unk0xac);
MxString string;
while (cursor.Next(string)) {
this->m_unk0xac->Append(string);
m_unk0xac->Append(string);
}
}
// FUNCTION: BETA10 0x1015a7ad
MxDSSelectAction::MxDSSelectAction(MxDSSelectAction& p_dsSelectAction) : MxDSParallelAction(p_dsSelectAction)
{
CopyFrom(p_dsSelectAction);
}
// FUNCTION: LEGO1 0x100cbd50
// FUNCTION: BETA10 0x1015a84f
MxDSSelectAction& MxDSSelectAction::operator=(MxDSSelectAction& p_dsSelectAction)
{
if (this != &p_dsSelectAction) {
MxDSParallelAction::operator=(p_dsSelectAction);
this->CopyFrom(p_dsSelectAction);
CopyFrom(p_dsSelectAction);
}
return *this;
}
// FUNCTION: LEGO1 0x100cbd80
// FUNCTION: BETA10 0x1015a88e
MxDSAction* MxDSSelectAction::Clone()
{
MxDSSelectAction* clone = new MxDSSelectAction();
@@ -63,13 +70,14 @@ MxDSAction* MxDSSelectAction::Clone()
}
// FUNCTION: LEGO1 0x100cbe10
// FUNCTION: BETA10 0x1015a938
MxU32 MxDSSelectAction::GetSizeOnDisk()
{
MxU32 totalSizeOnDisk = MxDSParallelAction::GetSizeOnDisk();
totalSizeOnDisk += strlen(this->m_unk0x9c.GetData()) + 1;
totalSizeOnDisk += strlen(m_unk0x9c.GetData()) + 1;
MxStringListCursor cursor(this->m_unk0xac);
MxStringListCursor cursor(m_unk0xac);
MxString string;
while (cursor.Next(string)) {
totalSizeOnDisk += strlen(string.GetData()) + 1;
@@ -77,7 +85,7 @@ MxU32 MxDSSelectAction::GetSizeOnDisk()
// Note: unlike the other classes, MxDSSelectAction does not have its own
// sizeOnDisk member. Instead, it overrides the one from MxDSMultiAction.
this->m_sizeOnDisk = totalSizeOnDisk;
m_sizeOnDisk = totalSizeOnDisk;
return totalSizeOnDisk;
}
@@ -86,25 +94,26 @@ MxU32 MxDSSelectAction::GetSizeOnDisk()
// FUNCTION: BETA10 0x1015aa30
void MxDSSelectAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
{
MxDSAction* action = NULL;
MxString string;
MxDSAction::Deserialize(p_source, p_unk0x24);
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
p_source += 12;
this->m_unk0x9c = (char*) p_source;
m_unk0x9c = (char*) p_source;
if (!strnicmp(this->m_unk0x9c.GetData(), "RANDOM_", strlen("RANDOM_"))) {
if (strnicmp(m_unk0x9c.GetData(), "RANDOM_", strlen("RANDOM_")) != 0) {
string = VariableTable()->GetVariable((char*) p_source);
}
else {
char buffer[10];
MxS16 value = atoi(&this->m_unk0x9c.GetData()[strlen("RANDOM_")]);
MxS16 value = atoi(&m_unk0x9c.GetData()[strlen("RANDOM_")]);
srand(Timer()->GetTime());
MxS32 random = rand() % value;
string = itoa((MxS16) random, buffer, 10);
}
else {
string = VariableTable()->GetVariable((char*) p_source);
}
p_source += strlen((char*) p_source) + 1;
@@ -113,7 +122,7 @@ void MxDSSelectAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
if (count) {
MxS32 index = -1;
this->m_unk0xac->DeleteAll();
m_unk0xac->DeleteAll();
MxU32 i;
for (i = 0; i < count; i++) {
@@ -121,7 +130,7 @@ void MxDSSelectAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
index = i;
}
this->m_unk0xac->Append((char*) p_source);
m_unk0xac->Append((char*) p_source);
p_source += strlen((char*) p_source) + 1;
}
@@ -129,10 +138,10 @@ void MxDSSelectAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
p_source += 8;
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
if (index == i) {
this->m_actions->Append(action);
m_actionList->Append(action);
}
else {
delete action;

View File

@@ -1,5 +1,6 @@
#include "mxdsserialaction.h"
#include "mxdebug.h"
#include "mxdsmediaaction.h"
DECOMP_SIZE_ASSERT(MxDSSerialAction, 0xa8)
@@ -8,33 +9,43 @@ DECOMP_SIZE_ASSERT(MxDSSerialAction, 0xa8)
// FUNCTION: BETA10 0x10159cf3
MxDSSerialAction::MxDSSerialAction()
{
this->SetType(e_serialAction);
this->m_cursor = new MxDSActionListCursor(this->m_actions);
this->m_unk0xa0 = 0;
m_type = e_serialAction;
m_cursor = new MxDSActionListCursor(m_actionList);
m_unk0xa0 = 0;
}
// FUNCTION: LEGO1 0x100caac0
// FUNCTION: BETA10 0x1015b280
void MxDSSerialAction::SetDuration(MxLong p_duration)
{
this->m_duration = p_duration;
m_duration = p_duration;
}
// FUNCTION: LEGO1 0x100cac10
// FUNCTION: BETA10 0x10159dd1
MxDSSerialAction::~MxDSSerialAction()
{
if (this->m_cursor) {
delete this->m_cursor;
}
this->m_cursor = NULL;
delete m_cursor;
m_cursor = NULL;
}
// FUNCTION: LEGO1 0x100cac90
// FUNCTION: BETA10 0x10159e73
void MxDSSerialAction::CopyFrom(MxDSSerialAction& p_dsSerialAction)
{
if (p_dsSerialAction.m_cursor->HasMatch() || p_dsSerialAction.m_unk0xa0) {
MxTrace("copying a serialAction while someone is traversing it's list\n");
}
}
// FUNCTION: BETA10 0x10159ec2
MxDSSerialAction::MxDSSerialAction(MxDSSerialAction& p_dsSerialAction) : MxDSMultiAction(p_dsSerialAction)
{
CopyFrom(p_dsSerialAction);
}
// FUNCTION: LEGO1 0x100caca0
// FUNCTION: BETA10 0x10159f43
MxDSSerialAction& MxDSSerialAction::operator=(MxDSSerialAction& p_dsSerialAction)
{
if (this == &p_dsSerialAction) {
@@ -42,11 +53,12 @@ MxDSSerialAction& MxDSSerialAction::operator=(MxDSSerialAction& p_dsSerialAction
}
MxDSMultiAction::operator=(p_dsSerialAction);
this->CopyFrom(p_dsSerialAction);
CopyFrom(p_dsSerialAction);
return *this;
}
// FUNCTION: LEGO1 0x100cacd0
// FUNCTION: BETA10 0x10159f8a
MxDSAction* MxDSSerialAction::Clone()
{
MxDSSerialAction* clone = new MxDSSerialAction();
@@ -59,30 +71,29 @@ MxDSAction* MxDSSerialAction::Clone()
}
// FUNCTION: LEGO1 0x100cad60
// FUNCTION: BETA10 0x1015a034
MxLong MxDSSerialAction::GetDuration()
{
if (this->m_duration) {
return this->m_duration;
if (m_duration) {
return m_duration;
}
MxDSActionListCursor cursor(this->m_actions);
MxDSActionListCursor cursor(m_actionList);
MxDSAction* action;
while (cursor.Next(action)) {
if (!action) {
continue;
}
if (action) {
m_duration += action->GetDuration() + action->GetStartTime();
this->m_duration += action->GetDuration() + action->GetStartTime();
if (action->IsA("MxDSMediaAction")) {
MxLong sustainTime = ((MxDSMediaAction*) action)->GetSustainTime();
if (action->IsA("MxDSMediaAction")) {
MxLong sustainTime = ((MxDSMediaAction*) action)->GetSustainTime();
if (sustainTime && sustainTime != -1) {
this->m_duration += sustainTime;
if (sustainTime && sustainTime != -1) {
m_duration += sustainTime;
}
}
}
}
return this->m_duration;
return m_duration;
}

View File

@@ -1,30 +1,37 @@
#include "mxdssound.h"
#include "mxutilities.h"
DECOMP_SIZE_ASSERT(MxDSSound, 0xc0)
// FUNCTION: LEGO1 0x100c92c0
// FUNCTION: BETA10 0x1015cfdb
MxDSSound::MxDSSound()
{
this->m_volume = 0x4f;
this->SetType(e_sound);
m_type = e_sound;
m_volume = 0x4f;
}
// FUNCTION: LEGO1 0x100c9470
// FUNCTION: BETA10 0x1015d060
MxDSSound::~MxDSSound()
{
}
// FUNCTION: LEGO1 0x100c94c0
// FUNCTION: BETA10 0x1015d0c8
void MxDSSound::CopyFrom(MxDSSound& p_dsSound)
{
this->SetType(p_dsSound.GetType());
this->m_volume = p_dsSound.m_volume;
m_type = p_dsSound.m_type;
m_volume = p_dsSound.m_volume;
}
// FUNCTION: BETA10 0x1015d100
MxDSSound::MxDSSound(MxDSSound& p_dsSound) : MxDSMediaAction(p_dsSound)
{
CopyFrom(p_dsSound);
}
// FUNCTION: LEGO1 0x100c94e0
// FUNCTION: BETA10 0x1015d181
MxDSSound& MxDSSound::operator=(MxDSSound& p_dsSound)
{
if (this == &p_dsSound) {
@@ -32,11 +39,12 @@ MxDSSound& MxDSSound::operator=(MxDSSound& p_dsSound)
}
MxDSMediaAction::operator=(p_dsSound);
this->CopyFrom(p_dsSound);
CopyFrom(p_dsSound);
return *this;
}
// FUNCTION: LEGO1 0x100c9510
// FUNCTION: BETA10 0x1015d1c8
MxDSAction* MxDSSound::Clone()
{
MxDSSound* clone = new MxDSSound();
@@ -49,18 +57,21 @@ MxDSAction* MxDSSound::Clone()
}
// FUNCTION: LEGO1 0x100c95a0
// FUNCTION: BETA10 0x1015d272
void MxDSSound::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
{
MxDSMediaAction::Deserialize(p_source, p_unk0x24);
GetScalar(p_source, this->m_volume);
m_volume = *(MxS32*) p_source;
p_source += sizeof(m_volume);
}
// FUNCTION: LEGO1 0x100c95d0
// FUNCTION: BETA10 0x1015d2b0
MxU32 MxDSSound::GetSizeOnDisk()
{
MxU32 totalSizeOnDisk = MxDSMediaAction::GetSizeOnDisk();
totalSizeOnDisk += sizeof(m_volume);
this->m_sizeOnDisk = sizeof(this->m_volume);
return totalSizeOnDisk + 4;
m_sizeOnDisk = sizeof(m_volume);
return totalSizeOnDisk;
}

View File

@@ -6,20 +6,29 @@ DECOMP_SIZE_ASSERT(MxDSStill, 0xb8)
// FUNCTION: BETA10 0x1015d54f
MxDSStill::MxDSStill()
{
this->SetType(e_still);
m_type = e_still;
}
// FUNCTION: LEGO1 0x100c9a70
// FUNCTION: BETA10 0x1015d5c7
MxDSStill::~MxDSStill()
{
}
// FUNCTION: LEGO1 0x100c9ac0
// FUNCTION: BETA10 0x1015d62f
void MxDSStill::CopyFrom(MxDSStill& p_dsStill)
{
}
// FUNCTION: BETA10 0x1015d647
MxDSStill::MxDSStill(MxDSStill& p_dsStill) : MxDSMediaAction(p_dsStill)
{
CopyFrom(p_dsStill);
}
// FUNCTION: LEGO1 0x100c9ad0
// FUNCTION: BETA10 0x1015d6c8
MxDSStill& MxDSStill::operator=(MxDSStill& p_dsStill)
{
if (this == &p_dsStill) {
@@ -27,11 +36,12 @@ MxDSStill& MxDSStill::operator=(MxDSStill& p_dsStill)
}
MxDSMediaAction::operator=(p_dsStill);
this->CopyFrom(p_dsStill);
CopyFrom(p_dsStill);
return *this;
}
// FUNCTION: LEGO1 0x100c9b00
// FUNCTION: BETA10 0x1015d70f
MxDSAction* MxDSStill::Clone()
{
MxDSStill* clone = new MxDSStill();