Implement/match LegoAnimationManager::FUN_10060dc0 (#856)

* Implement/match LegoAnimationManager::FUN_10060dc0

* Fix params
This commit is contained in:
Christian Semmler 2024-04-26 11:37:07 -04:00 committed by GitHub
parent 19d39394be
commit 53ef6bdd81
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 105 additions and 41 deletions

View file

@ -15,19 +15,19 @@ struct ModelInfo {
// SIZE 0x30 // SIZE 0x30
struct AnimInfo { struct AnimInfo {
char* m_animName; // 0x00 char* m_animName; // 0x00
undefined4 m_unk0x04; // 0x04 MxU32 m_objectId; // 0x04
MxS16 m_unk0x08; // 0x08 MxS16 m_unk0x08; // 0x08
MxU8 m_unk0x0a; // 0x0a MxU8 m_unk0x0a; // 0x0a
MxU8 m_unk0x0b; // 0x0b MxU8 m_unk0x0b; // 0x0b
MxU8 m_unk0x0c; // 0x0c MxU8 m_unk0x0c; // 0x0c
MxU8 m_unk0x0d; // 0x0d MxU8 m_unk0x0d; // 0x0d
MxU32 m_unk0x10[4]; // 0x10 MxU32 m_unk0x10[4]; // 0x10
MxU8 m_modelCount; // 0x20 MxU8 m_modelCount; // 0x20
ModelInfo* m_models; // 0x24 ModelInfo* m_models; // 0x24
MxU8 m_unk0x28; // 0x28 MxU8 m_unk0x28; // 0x28
MxU8 m_unk0x29; // 0x29 MxU8 m_unk0x29; // 0x29
MxS8 m_unk0x2a[3]; // 0x2a MxS8 m_unk0x2a[3]; // 0x2a
}; };
// VTABLE: LEGO1 0x100d8d80 // VTABLE: LEGO1 0x100d8d80

View file

@ -75,18 +75,17 @@ class LegoAnimationManager : public MxCore {
MxResult ReadModelInfo(LegoFile* p_file, ModelInfo* p_info); MxResult ReadModelInfo(LegoFile* p_file, ModelInfo* p_info);
void DeleteAnimations(); void DeleteAnimations();
void FUN_10060570(MxBool); void FUN_10060570(MxBool);
MxResult FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2);
MxResult StartEntityAction(MxDSAction& p_dsAction, LegoEntity* p_entity); MxResult StartEntityAction(MxDSAction& p_dsAction, LegoEntity* p_entity);
undefined4 FUN_10060dc0( MxResult FUN_10060dc0(
IsleScript::Script, IsleScript::Script p_objectId,
undefined4, MxMatrix* p_matrix,
undefined, undefined p_param3,
undefined, undefined p_param4,
undefined4, undefined4 p_param5,
undefined, undefined p_param6,
undefined, MxBool p_param7,
undefined, MxBool p_param8,
undefined undefined p_param9
); );
void FUN_10061010(undefined4); void FUN_10061010(undefined4);
void FUN_100617c0(MxS32, MxU16&, MxU32&); void FUN_100617c0(MxS32, MxU16&, MxU32&);
@ -107,6 +106,18 @@ class LegoAnimationManager : public MxCore {
private: private:
void Init(); void Init();
MxResult FUN_100605e0(
MxU32 p_index,
MxU8 p_unk0x0a,
MxMatrix* p_matrix,
undefined,
undefined4,
undefined,
MxBool,
MxBool,
undefined
);
MxResult FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2);
MxU32 m_scriptIndex; // 0x08 MxU32 m_scriptIndex; // 0x08
MxU16 m_animCount; // 0x0c MxU16 m_animCount; // 0x0c

View file

@ -259,7 +259,9 @@ class LegoOmni : public MxOmni {
MxDSAction m_action; // 0xa0 MxDSAction m_action; // 0xa0
MxBackgroundAudioManager* m_bkgAudioManager; // 0x134 MxBackgroundAudioManager* m_bkgAudioManager; // 0x134
MxTransitionManager* m_transitionManager; // 0x138 MxTransitionManager* m_transitionManager; // 0x138
MxBool m_unk0x13c; // 0x13c
public:
MxBool m_unk0x13c; // 0x13c
}; };
const char* GetNoCD_SourceName(); const char* GetNoCD_SourceName();

View file

@ -329,7 +329,7 @@ MxResult LegoAnimationManager::ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info)
} }
p_info->m_animName[length] = 0; p_info->m_animName[length] = 0;
if (p_file->Read(&p_info->m_unk0x04, sizeof(p_info->m_unk0x04)) == FAILURE) { if (p_file->Read(&p_info->m_objectId, sizeof(p_info->m_objectId)) == FAILURE) {
goto done; goto done;
} }
@ -444,6 +444,24 @@ void LegoAnimationManager::FUN_10060570(MxBool)
// TODO // TODO
} }
// STUB: LEGO1 0x100605e0
// FUNCTION: BETA10 0x1004152b
MxResult LegoAnimationManager::FUN_100605e0(
MxU32 p_index,
MxU8 p_unk0x0a,
MxMatrix* p_matrix,
undefined,
undefined4,
undefined,
MxBool,
MxBool,
undefined
)
{
// TODO
return FAILURE;
}
// FUNCTION: LEGO1 0x100609f0 // FUNCTION: LEGO1 0x100609f0
// FUNCTION: BETA10 0x10041a38 // FUNCTION: BETA10 0x10041a38
MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2) MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2)
@ -535,21 +553,54 @@ MxResult LegoAnimationManager::StartEntityAction(MxDSAction& p_dsAction, LegoEnt
return result; return result;
} }
// STUB: LEGO1 0x10060dc0 // FUNCTION: LEGO1 0x10060dc0
undefined4 LegoAnimationManager::FUN_10060dc0( // FUNCTION: BETA10 0x10041f2c
IsleScript::Script, MxResult LegoAnimationManager::FUN_10060dc0(
undefined4, IsleScript::Script p_objectId,
undefined, MxMatrix* p_matrix,
undefined, undefined p_param3,
undefined4, undefined p_param4,
undefined, undefined4 p_param5,
undefined, undefined p_param6,
undefined, MxBool p_param7,
undefined MxBool p_param8,
undefined p_param9
) )
{ {
// TODO MxResult result = FAILURE;
return 0; MxBool found = FALSE;
if (!Lego()->m_unk0x13c) {
return SUCCESS;
}
for (MxS32 i = 0; i < m_animCount; i++) {
if (m_anims[i].m_objectId == p_objectId) {
found = TRUE;
undefined unk0x0a;
switch (p_param4) {
case 0:
unk0x0a = m_anims[i].m_unk0x0a;
break;
case 1:
unk0x0a = 1;
break;
default:
unk0x0a = 0;
break;
}
result = FUN_100605e0(i, unk0x0a, p_matrix, p_param3, p_param5, p_param6, p_param7, p_param8, p_param9);
break;
}
}
if (!found && p_param3 != 0) {
result = FUN_100609f0(p_objectId, p_matrix, p_param7, p_param8);
}
return result;
} }
// STUB: LEGO1 0x10061010 // STUB: LEGO1 0x10061010

View file

@ -666,7 +666,7 @@ void Isle::Enable(MxBool p_enable)
break; break;
} }
AnimationManager()->FUN_10060dc0(script, 0, 1, 1, 0, 0, 0, 1, 0); AnimationManager()->FUN_10060dc0(script, NULL, 1, 1, 0, 0, FALSE, TRUE, 0);
} }
m_act1state->m_unk0x018 = 0; m_act1state->m_unk0x018 = 0;
@ -694,7 +694,7 @@ void Isle::Enable(MxBool p_enable)
break; break;
} }
AnimationManager()->FUN_10060dc0(script, 0, 1, 1, 0, 0, 0, 1, 0); AnimationManager()->FUN_10060dc0(script, NULL, 1, 1, 0, 0, FALSE, TRUE, 0);
} }
m_act1state->m_unk0x018 = 0; m_act1state->m_unk0x018 = 0;