Update documentation + more unknowns

This commit is contained in:
Florian Kaiser 2025-05-07 11:15:05 +02:00
parent a36a6cafa4
commit aeee808c72
14 changed files with 38 additions and 28 deletions

View File

@ -2,7 +2,6 @@
## Nomenclature ## Nomenclature
- **Script**: SI File (it appears they wanted to use SI much more as actual scripts, but ended up hard-coding almost everything) - **Script**: SI File (it appears they wanted to use SI much more as actual scripts, but ended up hard-coding almost everything)
- **Action**: Mostly media file inside SI
## Core Concepts ## Core Concepts
@ -38,7 +37,7 @@ IsA()
Checks ALL parents. Checks ALL parents.
### MxTickleManager : MxCore ### MxTickleManager : MxCore
Holds a list of MxTickleClient*. Goes though the on Tickle() and calls Tickle() if interval time has passed. Holds a list of MxTickleClient*. Goes though them on Tickle() and calls Tickle() if interval time has passed.
### MxTickleClient ### MxTickleClient
Holds a MxCore*, Interval, LastUpdateTime and Flags (only used for TICKLE_MANAGER_FLAG_DESTROY?). Holds a MxCore*, Interval, LastUpdateTime and Flags (only used for TICKLE_MANAGER_FLAG_DESTROY?).
@ -82,9 +81,20 @@ Then reads a list of strings (presumably numbers) into a list. Then reads the sa
### MxDSSound : MxDSMediaAction ### MxDSSound : MxDSMediaAction
Deserializes a volume. Deserializes a volume.
### MxDSObjectAction : MxDSMediaAction
Adds nothing.
### MxVariableTable : MxHashTable<MxVariable*> ### MxVariableTable : MxHashTable<MxVariable*>
MxOmni holds a VariableTable that is just a key/value store string/string. MxOmni holds a VariableTable that is just a key/value store string/string.
### MxPresenter : MxCore
Abstract base class for all presenters. Separates the tickle down to ReadyTickle(), StartingTickle(), StreamingTickle(), RepeatingTickle(), FreezingTickle() and DoneTickle()
Similar to DeserializeDSObjectDispatch, there is a PresenterNameDispatch() that reads the media format (" FLC", " SMK", " MID", " WAV") and returns the corresponding HandlerClassName().
### MxMediaPresenter : MxPresenter
Hold a MxDSSubscriber* and reads data from it on the tickles.
### LegoBuildingManager : MxCore ### LegoBuildingManager : MxCore
#### CreateBuilding() #### CreateBuilding()

View File

@ -43,7 +43,7 @@ struct AnimInfo {
MxU8 m_modelCount; // 0x20 MxU8 m_modelCount; // 0x20
MxU16 m_unk0x22; // 0x22 MxU16 m_unk0x22; // 0x22
ModelInfo* m_models; // 0x24 ModelInfo* m_models; // 0x24
MxS8 m_unk0x28; // 0x28 MxS8 m_characterIndex; // 0x28
MxBool m_unk0x29; // 0x29 MxBool m_unk0x29; // 0x29
MxS8 m_unk0x2a[3]; // 0x2a MxS8 m_unk0x2a[3]; // 0x2a
}; };

View File

@ -679,7 +679,7 @@ MxResult LegoAnimationManager::LoadWorldInfo(LegoOmni::World p_worldId)
goto done; goto done;
} }
m_anims[j].m_unk0x28 = GetCharacterIndex(m_anims[j].m_name + strlen(m_anims[j].m_name) - 2); m_anims[j].m_characterIndex = GetCharacterIndex(m_anims[j].m_name + strlen(m_anims[j].m_name) - 2);
m_anims[j].m_unk0x29 = FALSE; m_anims[j].m_unk0x29 = FALSE;
for (k = 0; k < 3; k++) { for (k = 0; k < 3; k++) {
@ -1615,7 +1615,7 @@ MxU16 LegoAnimationManager::FUN_10062110(
MxS8 index = GetCharacterIndex(p_roi->GetName()); MxS8 index = GetCharacterIndex(p_roi->GetName());
for (MxU16 i = m_unk0x0e; i <= m_unk0x10; i++) { for (MxU16 i = m_unk0x0e; i <= m_unk0x10; i++) {
if (m_anims[i].m_unk0x28 == index && m_anims[i].m_unk0x0c & p_unk0x0c && m_anims[i].m_unk0x29) { if (m_anims[i].m_characterIndex == index && m_anims[i].m_unk0x0c & p_unk0x0c && m_anims[i].m_unk0x29) {
MxS32 vehicleId = g_characters[index].m_vehicleId; MxS32 vehicleId = g_characters[index].m_vehicleId;
if (vehicleId >= 0) { if (vehicleId >= 0) {
MxBool found = FALSE; MxBool found = FALSE;
@ -1636,7 +1636,7 @@ MxU16 LegoAnimationManager::FUN_10062110(
MxU16 unk0x22 = m_anims[i].m_unk0x22; MxU16 unk0x22 = m_anims[i].m_unk0x22;
for (i = i + 1; i <= m_unk0x10; i++) { for (i = i + 1; i <= m_unk0x10; i++) {
if (m_anims[i].m_unk0x28 == index && m_anims[i].m_unk0x0c & p_unk0x0c && if (m_anims[i].m_characterIndex == index && m_anims[i].m_unk0x0c & p_unk0x0c &&
m_anims[i].m_unk0x29 && m_anims[i].m_unk0x22 < unk0x22) { m_anims[i].m_unk0x29 && m_anims[i].m_unk0x22 < unk0x22) {
result = i; result = i;
unk0x22 = m_anims[i].m_unk0x22; unk0x22 = m_anims[i].m_unk0x22;

View File

@ -400,7 +400,7 @@ MxBool LegoAnimMMPresenter::FUN_1004b610(MxLong p_time)
} }
} }
m_action->SetUnknown90(Timer()->GetTime()); m_action->SetStartTime(Timer()->GetTime());
if (m_compositePresenter != NULL) { if (m_compositePresenter != NULL) {
m_compositePresenter->VTable0x60(this); m_compositePresenter->VTable0x60(this);

View File

@ -84,7 +84,7 @@ MxResult MxCompositeMediaPresenter::StartAction(MxStreamController* p_controller
if (!m_compositePresenter) { if (!m_compositePresenter) {
SetTickleState(e_ready); SetTickleState(e_ready);
MxLong time = Timer()->GetTime(); MxLong time = Timer()->GetTime();
m_action->SetUnknown90(time); m_action->SetStartTime(time);
} }
result = SUCCESS; result = SUCCESS;
@ -134,7 +134,7 @@ void MxCompositeMediaPresenter::StartingTickle()
if (!m_unk0x4c) { if (!m_unk0x4c) {
ProgressTickleState(e_streaming); ProgressTickleState(e_streaming);
MxLong time = Timer()->GetTime(); MxLong time = Timer()->GetTime();
m_action->SetUnknown90(time); m_action->SetStartTime(time);
} }
} }
} }

View File

@ -189,7 +189,7 @@ void MxControlPresenter::VTable0x6c(MxS16 p_unk0x4e)
m_unk0x4e = p_unk0x4e; m_unk0x4e = p_unk0x4e;
} }
m_action->SetUnknown90(Timer()->GetTime()); m_action->SetStartTime(Timer()->GetTime());
MxS16 i = 0; MxS16 i = 0;
for (MxCompositePresenterList::iterator it = m_list.begin(); it != m_list.end(); it++) { for (MxCompositePresenterList::iterator it = m_list.begin(); it != m_list.end(); it++) {

View File

@ -815,7 +815,7 @@ void LegoAnimPresenter::StartingTickle()
m_compositePresenter->VTable0x60(this); m_compositePresenter->VTable0x60(this);
} }
else { else {
m_action->SetUnknown90(Timer()->GetTime()); m_action->SetStartTime(Timer()->GetTime());
} }
ProgressTickleState(e_streaming); ProgressTickleState(e_streaming);

View File

@ -55,8 +55,8 @@ class MxDSAction : public MxDSObject {
virtual MxDSAction* Clone(); // vtable+0x2c virtual MxDSAction* Clone(); // vtable+0x2c
virtual void MergeFrom(MxDSAction& p_dsAction); // vtable+0x30 virtual void MergeFrom(MxDSAction& p_dsAction); // vtable+0x30
virtual MxBool HasId(MxU32 p_objectId); // vtable+0x34 virtual MxBool HasId(MxU32 p_objectId); // vtable+0x34
virtual void SetUnknown90(MxLong p_unk0x90); // vtable+0x38 virtual void SetStartTime(MxLong p_unk0x90); // vtable+0x38
virtual MxLong GetUnknown90(); // vtable+0x3c virtual MxLong GetStartTIme(); // vtable+0x3c
virtual MxLong GetElapsedTime(); // vtable+0x40 virtual MxLong GetElapsedTime(); // vtable+0x40
void AppendExtra(MxU16 p_extraLength, const char* p_extraData); void AppendExtra(MxU16 p_extraLength, const char* p_extraData);
@ -130,7 +130,7 @@ class MxDSAction : public MxDSObject {
MxCore* m_unk0x84; // 0x84 MxCore* m_unk0x84; // 0x84
undefined4 m_unk0x88; // 0x88 undefined4 m_unk0x88; // 0x88
MxCore* m_origin; // 0x8c MxCore* m_origin; // 0x8c
MxLong m_unk0x90; // 0x90 MxLong m_startTime; // 0x90
}; };
#endif // MXDSACTION_H #endif // MXDSACTION_H

View File

@ -38,7 +38,7 @@ class MxDSMultiAction : public MxDSAction {
MxDSAction* Clone() override; // vtable+0x2c MxDSAction* Clone() override; // vtable+0x2c
void MergeFrom(MxDSAction& p_dsAction) override; // vtable+0x30 void MergeFrom(MxDSAction& p_dsAction) override; // vtable+0x30
MxBool HasId(MxU32 p_objectId) override; // vtable+0x34 MxBool HasId(MxU32 p_objectId) override; // vtable+0x34
void SetUnknown90(MxLong p_unk0x90) override; // vtable+0x38 void SetStartTime(MxLong p_unk0x90) override; // vtable+0x38
// FUNCTION: BETA10 0x1004e180 // FUNCTION: BETA10 0x1004e180
MxDSActionList* GetActionList() const { return m_actionList; } MxDSActionList* GetActionList() const { return m_actionList; }

View File

@ -31,7 +31,7 @@ MxDSAction::MxDSAction()
m_unk0x84 = NULL; m_unk0x84 = NULL;
m_unk0x88 = 0; m_unk0x88 = 0;
m_origin = NULL; m_origin = NULL;
m_unk0x90 = INT_MIN; m_startTime = INT_MIN;
} }
// FUNCTION: LEGO1 0x100ad940 // FUNCTION: LEGO1 0x100ad940
@ -57,16 +57,16 @@ MxBool MxDSAction::HasId(MxU32 p_objectId)
// FUNCTION: LEGO1 0x100ada40 // FUNCTION: LEGO1 0x100ada40
// FUNCTION: BETA10 0x1012bdf0 // FUNCTION: BETA10 0x1012bdf0
void MxDSAction::SetUnknown90(MxLong p_unk0x90) void MxDSAction::SetStartTime(MxLong p_startTime)
{ {
m_unk0x90 = p_unk0x90; m_startTime = p_startTime;
} }
// FUNCTION: LEGO1 0x100ada50 // FUNCTION: LEGO1 0x100ada50
// FUNCTION: BETA10 0x1012be20 // FUNCTION: BETA10 0x1012be20
MxLong MxDSAction::GetUnknown90() MxLong MxDSAction::GetStartTIme()
{ {
return m_unk0x90; return m_startTime;
} }
// FUNCTION: LEGO1 0x100ada80 // FUNCTION: LEGO1 0x100ada80
@ -92,7 +92,7 @@ void MxDSAction::CopyFrom(MxDSAction& p_dsAction)
m_unk0x84 = p_dsAction.m_unk0x84; m_unk0x84 = p_dsAction.m_unk0x84;
m_unk0x88 = p_dsAction.m_unk0x88; m_unk0x88 = p_dsAction.m_unk0x88;
m_origin = p_dsAction.m_origin; m_origin = p_dsAction.m_origin;
m_unk0x90 = p_dsAction.m_unk0x90; m_startTime = p_dsAction.m_startTime;
} }
// FUNCTION: BETA10 0x1012b2b3 // FUNCTION: BETA10 0x1012b2b3
@ -158,7 +158,7 @@ MxDSAction* MxDSAction::Clone()
// FUNCTION: BETA10 0x1012b4ca // FUNCTION: BETA10 0x1012b4ca
MxLong MxDSAction::GetElapsedTime() MxLong MxDSAction::GetElapsedTime()
{ {
return Timer()->GetTime() - m_unk0x90; return Timer()->GetTime() - m_startTime;
} }
// FUNCTION: LEGO1 0x100add00 // FUNCTION: LEGO1 0x100add00

View File

@ -57,14 +57,14 @@ MxDSMultiAction& MxDSMultiAction::operator=(MxDSMultiAction& p_dsMultiAction)
// FUNCTION: LEGO1 0x100ca290 // FUNCTION: LEGO1 0x100ca290
// FUNCTION: BETA10 0x10159728 // FUNCTION: BETA10 0x10159728
void MxDSMultiAction::SetUnknown90(MxLong p_unk0x90) void MxDSMultiAction::SetStartTime(MxLong p_unk0x90)
{ {
m_unk0x90 = p_unk0x90; m_startTime = p_unk0x90;
MxDSActionListCursor cursor(m_actionList); MxDSActionListCursor cursor(m_actionList);
MxDSAction* action; MxDSAction* action;
while (cursor.Next(action)) { while (cursor.Next(action)) {
action->SetUnknown90(p_unk0x90); action->SetStartTime(p_unk0x90);
} }
} }

View File

@ -252,7 +252,7 @@ void MxMediaPresenter::Enable(MxBool p_enable)
if (p_enable) { if (p_enable) {
MxLong time = Timer()->GetTime(); MxLong time = Timer()->GetTime();
m_action->SetUnknown90(time); m_action->SetStartTime(time);
SetTickleState(e_repeating); SetTickleState(e_repeating);
} }
else { else {

View File

@ -209,7 +209,7 @@ MxResult MxDSBuffer::StartPresenterFromAction(
p_objectheader->SetUnknown28(p_action1->GetUnknown28()); p_objectheader->SetUnknown28(p_action1->GetUnknown28());
p_objectheader->SetUnknown84(p_action1->GetUnknown84()); p_objectheader->SetUnknown84(p_action1->GetUnknown84());
p_objectheader->SetOrigin(p_action1->GetOrigin()); p_objectheader->SetOrigin(p_action1->GetOrigin());
p_objectheader->SetUnknown90(p_action1->GetUnknown90()); p_objectheader->SetStartTime(p_action1->GetStartTIme());
p_objectheader->MergeFrom(*p_action1); p_objectheader->MergeFrom(*p_action1);
m_unk0x30->SetInternalAction(p_objectheader->Clone()); m_unk0x30->SetInternalAction(p_objectheader->Clone());

View File

@ -202,7 +202,7 @@ MxResult MxStreamController::FUN_100c1a00(MxDSAction* p_action, MxU32 p_offset)
streamingAction->SetObjectId(p_action->GetObjectId()); streamingAction->SetObjectId(p_action->GetObjectId());
MxLong time = Timer()->GetTime(); MxLong time = Timer()->GetTime();
streamingAction->SetUnknown90(time); streamingAction->SetStartTime(time);
m_unk0x3c.PushBack(streamingAction); m_unk0x3c.PushBack(streamingAction);
return SUCCESS; return SUCCESS;