mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-28 10:41:15 +00:00
Merge branch 'master' into finish-gasstation
This commit is contained in:
commit
ba49bd1c82
@ -51,7 +51,11 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
|||||||
virtual void VTable0x98(); // vtable+0x98
|
virtual void VTable0x98(); // vtable+0x98
|
||||||
|
|
||||||
// STUB: LEGO1 0x1000c990
|
// STUB: LEGO1 0x1000c990
|
||||||
virtual void VTable0x9c() {} // vtable+0x9c
|
virtual undefined4* VTable0x9c(undefined4& p_unk0x6c)
|
||||||
|
{
|
||||||
|
p_unk0x6c = m_unk0x6c;
|
||||||
|
return m_unk0x68;
|
||||||
|
} // vtable+0x9c
|
||||||
|
|
||||||
virtual void VTable0xa0(); // vtable+0xa0
|
virtual void VTable0xa0(); // vtable+0xa0
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,7 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
|
|||||||
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
|
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_10080590();
|
virtual void FUN_10080590();
|
||||||
|
|
||||||
|
|||||||
@ -56,6 +56,7 @@ class LegoCharacterManager {
|
|||||||
LegoExtraActor* GetActor(const char* p_key);
|
LegoExtraActor* GetActor(const char* p_key);
|
||||||
LegoCharacterData* GetData(const char* p_key);
|
LegoCharacterData* GetData(const char* p_key);
|
||||||
LegoCharacterData* GetData(LegoROI* p_roi);
|
LegoCharacterData* GetData(LegoROI* p_roi);
|
||||||
|
LegoROI* FUN_10084cf0(LegoROI* p_roi, const char*);
|
||||||
MxBool FUN_10084ec0(LegoROI* p_roi);
|
MxBool FUN_10084ec0(LegoROI* p_roi);
|
||||||
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
|
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
|
||||||
LegoROI* FUN_10085210(const char* p_name, const char* p_lodName, MxBool p_createEntity);
|
LegoROI* FUN_10085210(const char* p_name, const char* p_lodName, MxBool p_createEntity);
|
||||||
|
|||||||
@ -72,6 +72,7 @@ class LegoEntity : public MxEntity {
|
|||||||
|
|
||||||
inline MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
inline MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
||||||
inline MxU8 GetFlags() { return m_flags; }
|
inline MxU8 GetFlags() { return m_flags; }
|
||||||
|
inline MxFloat GetWorldSpeed() { return m_worldSpeed; }
|
||||||
inline LegoROI* GetROI() { return m_roi; }
|
inline LegoROI* GetROI() { return m_roi; }
|
||||||
inline MxU8 GetUnknown0x59() { return m_unk0x59; }
|
inline MxU8 GetUnknown0x59() { return m_unk0x59; }
|
||||||
|
|
||||||
|
|||||||
@ -41,11 +41,12 @@ class LegoExtraActor : public virtual LegoAnimActor {
|
|||||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||||
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
|
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
|
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
|
||||||
void VTable0xc4() override; // vtable+0xc4
|
void VTable0xc4() override; // vtable+0xc4
|
||||||
|
|
||||||
virtual MxResult FUN_1002aae0();
|
virtual MxResult FUN_1002aae0();
|
||||||
|
void Restart();
|
||||||
inline void FUN_1002ad8a();
|
inline void FUN_1002ad8a();
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x1002b760
|
// SYNTHETIC: LEGO1 0x1002b760
|
||||||
@ -56,8 +57,8 @@ class LegoExtraActor : public virtual LegoAnimActor {
|
|||||||
undefined m_unk0x0c; // 0x0c
|
undefined m_unk0x0c; // 0x0c
|
||||||
MxU8 m_axis; // 0x0d
|
MxU8 m_axis; // 0x0d
|
||||||
undefined m_unk0x0e; // 0x0e
|
undefined m_unk0x0e; // 0x0e
|
||||||
MxFloat m_unk0x10; // 0x10
|
MxFloat m_prevWorldSpeed; // 0x10
|
||||||
MxU8 m_unk0x14; // 0x14
|
MxU8 m_whichAnim; // 0x14
|
||||||
MxU8 m_unk0x15; // 0x15
|
MxU8 m_unk0x15; // 0x15
|
||||||
MxMatrix m_unk0x18; // 0x18
|
MxMatrix m_unk0x18; // 0x18
|
||||||
LegoAnimActorStruct* m_assAnim; // 0x60
|
LegoAnimActorStruct* m_assAnim; // 0x60
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap {
|
|||||||
void VTable0x70(float p_float) override; // vtable+0x70
|
void VTable0x70(float p_float) override; // vtable+0x70
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_100136f0(float p_worldSpeed);
|
virtual void FUN_100136f0(float p_worldSpeed);
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class LegoJetskiRaceActor : public virtual LegoCarRaceActor {
|
|||||||
void VTable0x6c() override; // vtable+0x6c
|
void VTable0x6c() override; // vtable+0x6c
|
||||||
void VTable0x70(float p_float) override; // vtable+0x70
|
void VTable0x70(float p_float) override; // vtable+0x70
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
void VTable0x1c() override; // vtable+0x1c
|
void VTable0x1c() override; // vtable+0x1c
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10081d40
|
// SYNTHETIC: LEGO1 0x10081d40
|
||||||
|
|||||||
@ -51,8 +51,8 @@ class LegoPathActor : public LegoActor {
|
|||||||
// FUNCTION: LEGO1 0x10002d50
|
// FUNCTION: LEGO1 0x10002d50
|
||||||
virtual MxResult VTable0x94(LegoPathActor*, MxBool) { return 0; } // vtable+0x94
|
virtual MxResult VTable0x94(LegoPathActor*, MxBool) { return 0; } // vtable+0x94
|
||||||
|
|
||||||
virtual void VTable0x98(); // vtable+0x98
|
virtual void VTable0x98(); // vtable+0x98
|
||||||
virtual void VTable0x9c(); // vtable+0x9c
|
virtual MxResult WaitForAnimation(); // vtable+0x9c
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10002d60
|
// FUNCTION: LEGO1 0x10002d60
|
||||||
virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0
|
virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
#define LEGOPATHBOUNDARY_H
|
#define LEGOPATHBOUNDARY_H
|
||||||
|
|
||||||
#include "geom/legowegedge.h"
|
#include "geom/legowegedge.h"
|
||||||
|
#include "legoanimpresenter.h"
|
||||||
#include "mxstl/stlcompat.h"
|
#include "mxstl/stlcompat.h"
|
||||||
#include "mxtypes.h"
|
#include "mxtypes.h"
|
||||||
|
|
||||||
@ -9,6 +10,12 @@ struct LegoPathBoundaryComparator {
|
|||||||
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LegoAnimPresenterSetCompare {
|
||||||
|
MxBool operator()(const LegoAnimPresenter*, const LegoAnimPresenter*) const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef set<LegoAnimPresenter*, LegoAnimPresenterSetCompare> LegoAnimPresenterSet;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d8618
|
// VTABLE: LEGO1 0x100d8618
|
||||||
// SIZE 0x74
|
// SIZE 0x74
|
||||||
class LegoPathBoundary : public LegoWEGEdge {
|
class LegoPathBoundary : public LegoWEGEdge {
|
||||||
@ -17,10 +24,16 @@ class LegoPathBoundary : public LegoWEGEdge {
|
|||||||
|
|
||||||
// STUB: LEGO1 0x10047a80
|
// STUB: LEGO1 0x10047a80
|
||||||
// LegoPathBoundary::`scalar deleting destructor'
|
// LegoPathBoundary::`scalar deleting destructor'
|
||||||
|
inline LegoAnimPresenterSet* GetUnknown0x64() { return &m_unk0x64; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x54; // 0x54
|
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x54; // 0x54
|
||||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x64; // 0x64
|
LegoAnimPresenterSet m_unk0x64; // 0x64
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
// GLOBAL: LEGO1 0x100f3200
|
||||||
|
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Nil
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
#endif // LEGOPATHBOUNDARY_H
|
#endif // LEGOPATHBOUNDARY_H
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
|||||||
void VTable0x70(float p_float) override; // vtable+0x70
|
void VTable0x70(float p_float) override; // vtable+0x70
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_10012ea0(float p_worldSpeed);
|
virtual void FUN_10012ea0(float p_worldSpeed);
|
||||||
virtual void FUN_10012ff0(float);
|
virtual void FUN_10012ff0(float);
|
||||||
|
|||||||
@ -25,6 +25,9 @@ MxU32 g_unk0x100fc4d8 = 50;
|
|||||||
// GLOBAL: LEGO1 0x100fc4dc
|
// GLOBAL: LEGO1 0x100fc4dc
|
||||||
MxU32 g_unk0x100fc4dc = 66;
|
MxU32 g_unk0x100fc4dc = 66;
|
||||||
|
|
||||||
|
// GLOBAL: LEGO1 0x100fc4ec
|
||||||
|
MxU32 g_unk0x100fc4ec = 2;
|
||||||
|
|
||||||
// GLOBAL: LEGO1 0x100fc4f0
|
// GLOBAL: LEGO1 0x100fc4f0
|
||||||
MxU32 g_unk0x100fc4f0 = 0;
|
MxU32 g_unk0x100fc4f0 = 0;
|
||||||
|
|
||||||
@ -254,7 +257,7 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
|||||||
BoundingBox boundingBox;
|
BoundingBox boundingBox;
|
||||||
MxMatrix mat;
|
MxMatrix mat;
|
||||||
CompoundObject* comp;
|
CompoundObject* comp;
|
||||||
MxS32 i, j;
|
MxS32 i;
|
||||||
|
|
||||||
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
||||||
ViewLODListManager* lodManager = GetViewLODListManager();
|
ViewLODListManager* lodManager = GetViewLODListManager();
|
||||||
@ -298,14 +301,10 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
|||||||
roi->SetComp(comp);
|
roi->SetComp(comp);
|
||||||
|
|
||||||
for (i = 0; i < _countof(g_characterLODs) - 1; i++) {
|
for (i = 0; i < _countof(g_characterLODs) - 1; i++) {
|
||||||
ViewLODList *lodList, *dupLodList;
|
char lodName[256];
|
||||||
LegoROI* childROI;
|
|
||||||
MxS32 lodSize;
|
|
||||||
const char* parentName;
|
|
||||||
char lodName[64];
|
|
||||||
|
|
||||||
LegoCharacterData::Part& part = data->m_parts[i];
|
LegoCharacterData::Part& part = data->m_parts[i];
|
||||||
|
|
||||||
|
const char* parentName;
|
||||||
if (i == 0 || i == 1) {
|
if (i == 0 || i == 1) {
|
||||||
parentName = part.m_unk0x04[part.m_unk0x00[part.m_unk0x08]];
|
parentName = part.m_unk0x04[part.m_unk0x00[part.m_unk0x08]];
|
||||||
}
|
}
|
||||||
@ -313,19 +312,21 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
|||||||
parentName = g_characterLODs[i + 1].m_parentName;
|
parentName = g_characterLODs[i + 1].m_parentName;
|
||||||
}
|
}
|
||||||
|
|
||||||
lodList = lodManager->Lookup(parentName);
|
ViewLODList* lodList = lodManager->Lookup(parentName);
|
||||||
lodSize = lodList->Size();
|
MxS32 lodSize = lodList->Size();
|
||||||
sprintf(lodName, "%s%d", p_key, i);
|
sprintf(lodName, "%s%d", p_key, i);
|
||||||
dupLodList = lodManager->Create(lodName, lodSize);
|
ViewLODList* dupLodList = lodManager->Create(lodName, lodSize);
|
||||||
|
|
||||||
for (j = 0; j < lodSize; j++) {
|
for (MxS32 j = 0; j < lodSize; j++) {
|
||||||
dupLodList->PushBack(((LegoLOD*) (*lodList)[j])->Clone(renderer));
|
LegoLOD* lod = (LegoLOD*) (*lodList)[j];
|
||||||
|
LegoLOD* clone = lod->Clone(renderer);
|
||||||
|
dupLodList->PushBack(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
lodList->Release();
|
lodList->Release();
|
||||||
lodList = dupLodList;
|
lodList = dupLodList;
|
||||||
|
|
||||||
childROI = new LegoROI(renderer, lodList);
|
LegoROI* childROI = new LegoROI(renderer, lodList);
|
||||||
lodList->Release();
|
lodList->Release();
|
||||||
|
|
||||||
childROI->SetName(g_characterLODs[i + 1].m_name);
|
childROI->SetName(g_characterLODs[i + 1].m_name);
|
||||||
@ -454,11 +455,65 @@ LegoCharacterData* LegoCharacterManager::GetData(LegoROI* p_roi)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10084ec0
|
// STUB: LEGO1 0x10084cf0
|
||||||
MxBool LegoCharacterManager::FUN_10084ec0(LegoROI* p_roi)
|
LegoROI* LegoCharacterManager::FUN_10084cf0(LegoROI* p_roi, const char*)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10084ec0
|
||||||
|
MxBool LegoCharacterManager::FUN_10084ec0(LegoROI* p_roi)
|
||||||
|
{
|
||||||
|
LegoCharacterData* data = GetData(p_roi->GetName());
|
||||||
|
|
||||||
|
if (data == NULL) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LegoCharacterData::Part& part = data->m_parts[1];
|
||||||
|
|
||||||
|
part.m_unk0x08++;
|
||||||
|
MxU8 unk0x00 = part.m_unk0x00[part.m_unk0x08];
|
||||||
|
|
||||||
|
if (unk0x00 == 0xff) {
|
||||||
|
part.m_unk0x08 = 0;
|
||||||
|
unk0x00 = part.m_unk0x00[part.m_unk0x08];
|
||||||
|
}
|
||||||
|
|
||||||
|
LegoROI* childROI = FUN_10084cf0(p_roi, g_characterLODs[1].m_name);
|
||||||
|
|
||||||
|
if (childROI != NULL) {
|
||||||
|
char lodName[256];
|
||||||
|
|
||||||
|
ViewLODList* lodList = GetViewLODListManager()->Lookup(part.m_unk0x04[unk0x00]);
|
||||||
|
MxS32 lodSize = lodList->Size();
|
||||||
|
sprintf(lodName, "%s%d", p_roi->GetName(), g_unk0x100fc4ec++);
|
||||||
|
ViewLODList* dupLodList = GetViewLODListManager()->Create(lodName, lodSize);
|
||||||
|
|
||||||
|
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
||||||
|
LegoFloat red, green, blue, alpha;
|
||||||
|
LegoROI::FUN_100a9bf0(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]], red, green, blue, alpha);
|
||||||
|
|
||||||
|
for (MxS32 i = 0; i < lodSize; i++) {
|
||||||
|
LegoLOD* lod = (LegoLOD*) (*lodList)[i];
|
||||||
|
LegoLOD* clone = lod->Clone(renderer);
|
||||||
|
clone->FUN_100aacb0(red, green, blue, alpha);
|
||||||
|
dupLodList->PushBack(clone);
|
||||||
|
}
|
||||||
|
|
||||||
|
lodList->Release();
|
||||||
|
lodList = dupLodList;
|
||||||
|
|
||||||
|
if (childROI->GetUnknown0xe0() >= 0) {
|
||||||
|
VideoManager()->Get3DManager()->GetLego3DView()->GetViewManager()->FUN_100a66a0(childROI);
|
||||||
|
}
|
||||||
|
|
||||||
|
childROI->SetLODList(lodList);
|
||||||
|
lodList->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10085140
|
// FUNCTION: LEGO1 0x10085140
|
||||||
|
|||||||
@ -70,7 +70,8 @@ void LegoCarRaceActor::VTable0x98()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10081d30
|
// STUB: LEGO1 0x10081d30
|
||||||
void LegoCarRaceActor::VTable0x9c()
|
MxResult LegoCarRaceActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,7 +69,8 @@ void LegoJetski::VTable0x98()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10014200
|
// STUB: LEGO1 0x10014200
|
||||||
void LegoJetski::VTable0x9c()
|
MxResult LegoJetski::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,7 +36,8 @@ void LegoJetskiRaceActor::VTable0x98()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100822e0
|
// STUB: LEGO1 0x100822e0
|
||||||
void LegoJetskiRaceActor::VTable0x9c()
|
MxResult LegoJetskiRaceActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ LegoExtraActor::LegoExtraActor()
|
|||||||
m_scheduledTime = 0;
|
m_scheduledTime = 0;
|
||||||
m_unk0x0c = 0;
|
m_unk0x0c = 0;
|
||||||
m_unk0x0e = 0;
|
m_unk0x0e = 0;
|
||||||
m_unk0x14 = 0;
|
m_whichAnim = 0;
|
||||||
m_assAnim = NULL;
|
m_assAnim = NULL;
|
||||||
m_disAnim = NULL;
|
m_disAnim = NULL;
|
||||||
m_unk0x15 = 0;
|
m_unk0x15 = 0;
|
||||||
@ -145,7 +145,7 @@ MxResult LegoExtraActor::FUN_1002aae0()
|
|||||||
m_boundary = oldEdge;
|
m_boundary = oldEdge;
|
||||||
}
|
}
|
||||||
|
|
||||||
LegoPathActor::VTable0x9c();
|
LegoPathActor::WaitForAnimation();
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,10 +229,10 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
|||||||
FUN_1002ad8a();
|
FUN_1002ad8a();
|
||||||
SoundManager()->GetCacheSoundManager()->FUN_1003dae0("crash5", m_roi->GetName(), FALSE);
|
SoundManager()->GetCacheSoundManager()->FUN_1003dae0("crash5", m_roi->GetName(), FALSE);
|
||||||
m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration();
|
m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration();
|
||||||
m_unk0x10 = m_worldSpeed;
|
m_prevWorldSpeed = m_worldSpeed;
|
||||||
VTable0xc4();
|
VTable0xc4();
|
||||||
SetWorldSpeed(0);
|
SetWorldSpeed(0);
|
||||||
m_unk0x14 = 1;
|
m_whichAnim = 1;
|
||||||
m_state = 0x101;
|
m_state = 0x101;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -273,22 +273,117 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b290
|
// FUNCTION: LEGO1 0x1002b290
|
||||||
void LegoExtraActor::VTable0x9c()
|
MxResult LegoExtraActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
LegoPathBoundary* oldBoundary = m_boundary;
|
||||||
|
MxResult result = LegoPathActor::WaitForAnimation();
|
||||||
|
|
||||||
|
if (m_boundary != oldBoundary) {
|
||||||
|
MxU32 b = FALSE;
|
||||||
|
LegoAnimPresenterSet* set = m_boundary->GetUnknown0x64();
|
||||||
|
|
||||||
|
for (LegoAnimPresenterSet::iterator it = set->begin(); it != set->end(); it++) {
|
||||||
|
undefined4 tmp;
|
||||||
|
if ((*it)->VTable0x9c(tmp)) {
|
||||||
|
b = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b) {
|
||||||
|
m_unk0x0e = 1;
|
||||||
|
m_prevWorldSpeed = GetWorldSpeed();
|
||||||
|
SetWorldSpeed(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b440
|
// FUNCTION: LEGO1 0x1002b370
|
||||||
void LegoExtraActor::VTable0x70(float)
|
void LegoExtraActor::Restart()
|
||||||
{
|
{
|
||||||
// TODO
|
if (m_unk0x0e != 0) {
|
||||||
|
MxU32 b = FALSE;
|
||||||
|
LegoAnimPresenterSet* set = m_boundary->GetUnknown0x64();
|
||||||
|
|
||||||
|
for (LegoAnimPresenterSet::iterator it = set->begin(); it != set->end(); it++) {
|
||||||
|
undefined4 tmp;
|
||||||
|
if ((*it)->VTable0x9c(tmp)) {
|
||||||
|
b = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!b) {
|
||||||
|
SetWorldSpeed(m_prevWorldSpeed);
|
||||||
|
m_unk0x0e = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1002b440
|
||||||
|
void LegoExtraActor::VTable0x70(float p_time)
|
||||||
|
{
|
||||||
|
LegoAnimActorStruct* laas = NULL;
|
||||||
|
|
||||||
|
switch (m_whichAnim) {
|
||||||
|
case 0:
|
||||||
|
LegoAnimActor::VTable0x70(p_time);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (m_scheduledTime < p_time) {
|
||||||
|
m_whichAnim = 2;
|
||||||
|
m_state = 0x101;
|
||||||
|
m_scheduledTime = m_assAnim->GetDuration() + p_time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
laas = m_disAnim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
if (m_scheduledTime < p_time) {
|
||||||
|
m_whichAnim = 0;
|
||||||
|
m_state = 0;
|
||||||
|
SetWorldSpeed(m_prevWorldSpeed);
|
||||||
|
m_roi->FUN_100a58f0(m_unk0x18);
|
||||||
|
m_lastTime = p_time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
laas = m_assAnim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (laas) {
|
||||||
|
float duration2, duration;
|
||||||
|
duration = laas->GetDuration();
|
||||||
|
duration2 = p_time - (m_scheduledTime - duration);
|
||||||
|
|
||||||
|
if (duration2 < 0) {
|
||||||
|
duration2 = 0;
|
||||||
|
}
|
||||||
|
else if (duration2 > duration) {
|
||||||
|
duration2 = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
MxMatrix matrix(m_roi->GetLocal2World());
|
||||||
|
LegoTreeNode* root = laas->m_AnimTreePtr->GetRoot();
|
||||||
|
MxS32 count = root->GetNumChildren();
|
||||||
|
|
||||||
|
for (MxS32 i = 0; i < count; i++) {
|
||||||
|
LegoROI::FUN_100a8e80(root->GetChild(i), matrix, duration2, laas->m_roiMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1002b5d0
|
// FUNCTION: LEGO1 0x1002b5d0
|
||||||
void LegoExtraActor::VTable0x74(Matrix4& p_transform)
|
void LegoExtraActor::VTable0x74(Matrix4& p_transform)
|
||||||
{
|
{
|
||||||
if (m_unk0x14 == 0) {
|
if (m_whichAnim == 0) {
|
||||||
LegoAnimActor::VTable0x74(p_transform);
|
LegoAnimActor::VTable0x74(p_transform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -302,9 +397,23 @@ void LegoExtraActor::SetWorldSpeed(MxFloat p_worldSpeed)
|
|||||||
LegoAnimActor::SetWorldSpeed(p_worldSpeed);
|
LegoAnimActor::SetWorldSpeed(p_worldSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b630
|
// FUNCTION: LEGO1 0x1002b630
|
||||||
void LegoExtraActor::VTable0xc4()
|
void LegoExtraActor::VTable0xc4()
|
||||||
{
|
{
|
||||||
|
if (m_curAnim != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_worldSpeed > -0.001 || m_worldSpeed < 0.001) {
|
||||||
|
MxU16 name = *((MxU16*) m_roi->GetName());
|
||||||
|
MxBool b = name == TWOCC('m', 'a') || name == TWOCC('p', 'a');
|
||||||
|
|
||||||
|
if (b) {
|
||||||
|
float duration = m_animMaps[m_curAnim]->GetDuration();
|
||||||
|
MxMatrix matrix(m_unk0xec);
|
||||||
|
LegoAnimActor::FUN_1001c360(duration, matrix);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1002b6f0
|
// FUNCTION: LEGO1 0x1002b6f0
|
||||||
|
|||||||
@ -75,9 +75,10 @@ void LegoPathActor::ParseAction(char*)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002f1b0
|
// STUB: LEGO1 0x1002f1b0
|
||||||
void LegoPathActor::VTable0x9c()
|
MxResult LegoPathActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002f650
|
// STUB: LEGO1 0x1002f650
|
||||||
|
|||||||
@ -89,7 +89,8 @@ void LegoRaceCar::VTable0x98()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10014580
|
// STUB: LEGO1 0x10014580
|
||||||
void LegoRaceCar::VTable0x9c()
|
MxResult LegoRaceCar::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ class MxDSAction : public MxDSObject {
|
|||||||
|
|
||||||
undefined4 VTable0x14() override; // vtable+14;
|
undefined4 VTable0x14() override; // vtable+14;
|
||||||
MxU32 GetSizeOnDisk() override; // vtable+18;
|
MxU32 GetSizeOnDisk() override; // vtable+18;
|
||||||
void Deserialize(MxU8** p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
void Deserialize(MxU8*& p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
||||||
virtual MxLong GetDuration(); // vtable+24;
|
virtual MxLong GetDuration(); // vtable+24;
|
||||||
virtual void SetDuration(MxLong p_duration); // vtable+28;
|
virtual void SetDuration(MxLong p_duration); // vtable+28;
|
||||||
virtual MxDSAction* Clone(); // vtable+2c;
|
virtual MxDSAction* Clone(); // vtable+2c;
|
||||||
|
|||||||
@ -33,7 +33,7 @@ class MxDSMediaAction : public MxDSAction {
|
|||||||
|
|
||||||
undefined4 VTable0x14() override; // vtable+14;
|
undefined4 VTable0x14() override; // vtable+14;
|
||||||
MxU32 GetSizeOnDisk() override; // vtable+18;
|
MxU32 GetSizeOnDisk() override; // vtable+18;
|
||||||
void Deserialize(MxU8** p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
void Deserialize(MxU8*& p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
||||||
MxDSAction* Clone() override; // vtable+2c;
|
MxDSAction* Clone() override; // vtable+2c;
|
||||||
|
|
||||||
void CopyMediaSrcPath(const char* p_mediaSrcPath);
|
void CopyMediaSrcPath(const char* p_mediaSrcPath);
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class MxDSMultiAction : public MxDSAction {
|
|||||||
|
|
||||||
undefined4 VTable0x14() override; // vtable+14;
|
undefined4 VTable0x14() override; // vtable+14;
|
||||||
MxU32 GetSizeOnDisk() override; // vtable+18;
|
MxU32 GetSizeOnDisk() override; // vtable+18;
|
||||||
void Deserialize(MxU8** p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
void Deserialize(MxU8*& p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
||||||
void SetAtomId(MxAtomId p_atomId) override; // vtable+20;
|
void SetAtomId(MxAtomId p_atomId) override; // vtable+20;
|
||||||
MxDSAction* Clone() override; // vtable+2c;
|
MxDSAction* Clone() override; // vtable+2c;
|
||||||
void MergeFrom(MxDSAction& p_dsAction) override; // vtable+30;
|
void MergeFrom(MxDSAction& p_dsAction) override; // vtable+30;
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class MxDSObject : public MxCore {
|
|||||||
|
|
||||||
virtual undefined4 VTable0x14(); // vtable+14;
|
virtual undefined4 VTable0x14(); // vtable+14;
|
||||||
virtual MxU32 GetSizeOnDisk(); // vtable+18;
|
virtual MxU32 GetSizeOnDisk(); // vtable+18;
|
||||||
virtual void Deserialize(MxU8** p_source, MxS16 p_unk0x24); // vtable+1c;
|
virtual void Deserialize(MxU8*& p_source, MxS16 p_unk0x24); // vtable+1c;
|
||||||
inline virtual void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; } // vtable+20;
|
inline virtual void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; } // vtable+20;
|
||||||
|
|
||||||
inline Type GetType() const { return (Type) this->m_type; }
|
inline Type GetType() const { return (Type) this->m_type; }
|
||||||
@ -79,7 +79,7 @@ class MxDSObject : public MxCore {
|
|||||||
MxPresenter* m_unk0x28; // 0x28
|
MxPresenter* m_unk0x28; // 0x28
|
||||||
};
|
};
|
||||||
|
|
||||||
MxDSObject* DeserializeDSObjectDispatch(MxU8**, MxS16);
|
MxDSObject* DeserializeDSObjectDispatch(MxU8*&, MxS16);
|
||||||
|
|
||||||
// FUNCTION: ISLE 0x401c40
|
// FUNCTION: ISLE 0x401c40
|
||||||
// MxDSObject::SetAtomId
|
// MxDSObject::SetAtomId
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class MxDSSelectAction : public MxDSParallelAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MxU32 GetSizeOnDisk() override; // vtable+18;
|
MxU32 GetSizeOnDisk() override; // vtable+18;
|
||||||
void Deserialize(MxU8** p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
void Deserialize(MxU8*& p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
||||||
MxDSAction* Clone() override; // vtable+2c;
|
MxDSAction* Clone() override; // vtable+2c;
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100cb840
|
// SYNTHETIC: LEGO1 0x100cb840
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class MxDSSound : public MxDSMediaAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MxU32 GetSizeOnDisk() override; // vtable+18;
|
MxU32 GetSizeOnDisk() override; // vtable+18;
|
||||||
void Deserialize(MxU8** p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
void Deserialize(MxU8*& p_source, MxS16 p_unk0x24) override; // vtable+1c;
|
||||||
MxDSAction* Clone() override; // vtable+2c;
|
MxDSAction* Clone() override; // vtable+2c;
|
||||||
|
|
||||||
inline MxS32 GetVolume() const { return m_volume; }
|
inline MxS32 GetVolume() const { return m_volume; }
|
||||||
|
|||||||
@ -30,32 +30,32 @@ inline T Max(T p_t1, T p_t2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void GetScalar(MxU8** p_source, T& p_dest)
|
inline void GetScalar(MxU8*& p_source, T& p_dest)
|
||||||
{
|
{
|
||||||
p_dest = *(T*) *p_source;
|
p_dest = *(T*) p_source;
|
||||||
*p_source += sizeof(T);
|
p_source += sizeof(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline T GetScalar(T** p_source)
|
inline T GetScalar(T*& p_source)
|
||||||
{
|
{
|
||||||
T val = **p_source;
|
T val = *p_source;
|
||||||
*p_source += 1;
|
p_source += 1;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void GetDouble(MxU8** p_source, T& p_dest)
|
inline void GetDouble(MxU8*& p_source, T& p_dest)
|
||||||
{
|
{
|
||||||
p_dest = *(double*) *p_source;
|
p_dest = *(double*) p_source;
|
||||||
*p_source += sizeof(double);
|
p_source += sizeof(double);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void GetString(MxU8** p_source, char** p_dest, T* p_obj, void (T::*p_setter)(const char*))
|
inline void GetString(MxU8*& p_source, char*& p_dest, T* p_obj, void (T::*p_setter)(const char*))
|
||||||
{
|
{
|
||||||
(p_obj->*p_setter)((char*) *p_source);
|
(p_obj->*p_setter)((char*) p_source);
|
||||||
*p_source += strlen(*p_dest) + 1;
|
p_source += strlen(p_dest) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
MxBool GetRectIntersection(
|
MxBool GetRectIntersection(
|
||||||
|
|||||||
@ -221,7 +221,7 @@ void MxDSAction::AppendData(MxU16 p_extraLength, const char* p_extraData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100adf70
|
// FUNCTION: LEGO1 0x100adf70
|
||||||
void MxDSAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
MxDSObject::Deserialize(p_source, p_unk0x24);
|
MxDSObject::Deserialize(p_source, p_unk0x24);
|
||||||
|
|
||||||
@ -239,9 +239,11 @@ void MxDSAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
|||||||
GetDouble(p_source, this->m_up[1]);
|
GetDouble(p_source, this->m_up[1]);
|
||||||
GetDouble(p_source, this->m_up[2]);
|
GetDouble(p_source, this->m_up[2]);
|
||||||
|
|
||||||
MxU16 extraLength = GetScalar((MxU16**) p_source);
|
MxU16 extraLength = *(MxU16*) p_source;
|
||||||
|
p_source += 2;
|
||||||
|
|
||||||
if (extraLength) {
|
if (extraLength) {
|
||||||
AppendData(extraLength, (char*) *p_source);
|
AppendData(extraLength, (char*) p_source);
|
||||||
*p_source += extraLength;
|
p_source += extraLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,11 +104,11 @@ MxU32 MxDSMediaAction::GetSizeOnDisk()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100c8f60
|
// FUNCTION: LEGO1 0x100c8f60
|
||||||
void MxDSMediaAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSMediaAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
MxDSAction::Deserialize(p_source, p_unk0x24);
|
MxDSAction::Deserialize(p_source, p_unk0x24);
|
||||||
|
|
||||||
GetString(p_source, &this->m_mediaSrcPath, this, &MxDSMediaAction::CopyMediaSrcPath);
|
GetString(p_source, this->m_mediaSrcPath, this, &MxDSMediaAction::CopyMediaSrcPath);
|
||||||
GetScalar(p_source, this->m_unk0x9c.m_unk0x00);
|
GetScalar(p_source, this->m_unk0x9c.m_unk0x00);
|
||||||
GetScalar(p_source, this->m_unk0x9c.m_unk0x04);
|
GetScalar(p_source, this->m_unk0x9c.m_unk0x04);
|
||||||
GetScalar(p_source, this->m_framesPerSecond);
|
GetScalar(p_source, this->m_framesPerSecond);
|
||||||
|
|||||||
@ -129,29 +129,29 @@ MxU32 MxDSMultiAction::GetSizeOnDisk()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100ca7b0
|
// FUNCTION: LEGO1 0x100ca7b0
|
||||||
void MxDSMultiAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSMultiAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
MxDSAction::Deserialize(p_source, p_unk0x24);
|
MxDSAction::Deserialize(p_source, p_unk0x24);
|
||||||
|
|
||||||
MxU32 extraFlag = *(MxU32*) (*p_source + 4) & 1;
|
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
|
||||||
*p_source += 12;
|
p_source += 12;
|
||||||
|
|
||||||
MxU32 count = *(MxU32*) *p_source;
|
MxU32 count = *(MxU32*) p_source;
|
||||||
*p_source += sizeof(count);
|
p_source += sizeof(count);
|
||||||
|
|
||||||
if (count) {
|
if (count) {
|
||||||
while (count--) {
|
while (count--) {
|
||||||
MxU32 extraFlag = *(MxU32*) (*p_source + 4) & 1;
|
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
|
||||||
*p_source += 8;
|
p_source += 8;
|
||||||
|
|
||||||
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
|
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
|
||||||
*p_source += extraFlag;
|
p_source += extraFlag;
|
||||||
|
|
||||||
this->m_actions->Append(action);
|
this->m_actions->Append(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*p_source += extraFlag;
|
p_source += extraFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100ca8c0
|
// FUNCTION: LEGO1 0x100ca8c0
|
||||||
|
|||||||
@ -131,21 +131,21 @@ MxU32 MxDSObject::GetSizeOnDisk()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100bfa20
|
// FUNCTION: LEGO1 0x100bfa20
|
||||||
void MxDSObject::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSObject::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
GetString(p_source, &this->m_sourceName, this, &MxDSObject::SetSourceName);
|
GetString(p_source, this->m_sourceName, this, &MxDSObject::SetSourceName);
|
||||||
GetScalar(p_source, this->m_unk0x14);
|
GetScalar(p_source, this->m_unk0x14);
|
||||||
GetString(p_source, &this->m_objectName, this, &MxDSObject::SetObjectName);
|
GetString(p_source, this->m_objectName, this, &MxDSObject::SetObjectName);
|
||||||
GetScalar(p_source, this->m_objectId);
|
GetScalar(p_source, this->m_objectId);
|
||||||
|
|
||||||
this->m_unk0x24 = p_unk0x24;
|
this->m_unk0x24 = p_unk0x24;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100bfb30
|
// FUNCTION: LEGO1 0x100bfb30
|
||||||
MxDSObject* DeserializeDSObjectDispatch(MxU8** p_source, MxS16 p_flags)
|
MxDSObject* DeserializeDSObjectDispatch(MxU8*& p_source, MxS16 p_flags)
|
||||||
{
|
{
|
||||||
MxU16 type = *(MxU16*) *p_source;
|
MxU16 type = *(MxU16*) p_source;
|
||||||
*p_source += 2;
|
p_source += 2;
|
||||||
|
|
||||||
MxDSObject* obj = NULL;
|
MxDSObject* obj = NULL;
|
||||||
|
|
||||||
|
|||||||
@ -81,15 +81,15 @@ MxU32 MxDSSelectAction::GetSizeOnDisk()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100cbf60
|
// FUNCTION: LEGO1 0x100cbf60
|
||||||
void MxDSSelectAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSSelectAction::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
MxString string;
|
MxString string;
|
||||||
MxDSAction::Deserialize(p_source, p_unk0x24);
|
MxDSAction::Deserialize(p_source, p_unk0x24);
|
||||||
|
|
||||||
MxU32 extraFlag = *(MxU32*) (*p_source + 4) & 1;
|
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
|
||||||
*p_source += 12;
|
p_source += 12;
|
||||||
|
|
||||||
this->m_unk0x9c = (char*) *p_source;
|
this->m_unk0x9c = (char*) p_source;
|
||||||
|
|
||||||
if (!strnicmp(this->m_unk0x9c.GetData(), "RANDOM_", strlen("RANDOM_"))) {
|
if (!strnicmp(this->m_unk0x9c.GetData(), "RANDOM_", strlen("RANDOM_"))) {
|
||||||
char buffer[10];
|
char buffer[10];
|
||||||
@ -100,13 +100,13 @@ void MxDSSelectAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
|||||||
string = itoa((MxS16) random, buffer, 10);
|
string = itoa((MxS16) random, buffer, 10);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
string = VariableTable()->GetVariable((char*) *p_source);
|
string = VariableTable()->GetVariable((char*) p_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
*p_source += strlen((char*) *p_source) + 1;
|
p_source += strlen((char*) p_source) + 1;
|
||||||
|
|
||||||
MxU32 count = *(MxU32*) *p_source;
|
MxU32 count = *(MxU32*) p_source;
|
||||||
*p_source += sizeof(MxU32);
|
p_source += sizeof(MxU32);
|
||||||
|
|
||||||
if (count) {
|
if (count) {
|
||||||
MxS32 index = -1;
|
MxS32 index = -1;
|
||||||
@ -114,17 +114,17 @@ void MxDSSelectAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
|||||||
|
|
||||||
MxU32 i;
|
MxU32 i;
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (!strcmp(string.GetData(), (char*) *p_source)) {
|
if (!strcmp(string.GetData(), (char*) p_source)) {
|
||||||
index = i;
|
index = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->m_unk0xac->Append((char*) *p_source);
|
this->m_unk0xac->Append((char*) p_source);
|
||||||
*p_source += strlen((char*) *p_source) + 1;
|
p_source += strlen((char*) p_source) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
MxU32 extraFlag = *(MxU32*) (*p_source + 4) & 1;
|
MxU32 extraFlag = *(MxU32*) (p_source + 4) & 1;
|
||||||
*p_source += 8;
|
p_source += 8;
|
||||||
|
|
||||||
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
|
MxDSAction* action = (MxDSAction*) DeserializeDSObjectDispatch(p_source, p_unk0x24);
|
||||||
|
|
||||||
@ -135,9 +135,9 @@ void MxDSSelectAction::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
|||||||
delete action;
|
delete action;
|
||||||
}
|
}
|
||||||
|
|
||||||
*p_source += extraFlag;
|
p_source += extraFlag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*p_source += extraFlag;
|
p_source += extraFlag;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,7 +48,7 @@ MxDSAction* MxDSSound::Clone()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100c95a0
|
// FUNCTION: LEGO1 0x100c95a0
|
||||||
void MxDSSound::Deserialize(MxU8** p_source, MxS16 p_unk0x24)
|
void MxDSSound::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||||
{
|
{
|
||||||
MxDSMediaAction::Deserialize(p_source, p_unk0x24);
|
MxDSMediaAction::Deserialize(p_source, p_unk0x24);
|
||||||
|
|
||||||
|
|||||||
@ -185,7 +185,7 @@ MxDSObject* CreateStreamObject(MxDSFile* p_file, MxS16 p_ofs)
|
|||||||
// Save a copy so we can clean up properly, because
|
// Save a copy so we can clean up properly, because
|
||||||
// this function will alter the pointer value.
|
// this function will alter the pointer value.
|
||||||
MxU8* copy = buf;
|
MxU8* copy = buf;
|
||||||
MxDSObject* obj = DeserializeDSObjectDispatch(&buf, -1);
|
MxDSObject* obj = DeserializeDSObjectDispatch(buf, -1);
|
||||||
delete[] copy;
|
delete[] copy;
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -322,7 +322,7 @@ MxCore* MxDSBuffer::ReadChunk(MxDSBuffer* p_buffer, MxU32* p_chunkData, MxU16 p_
|
|||||||
|
|
||||||
switch (*p_chunkData) {
|
switch (*p_chunkData) {
|
||||||
case FOURCC('M', 'x', 'O', 'b'):
|
case FOURCC('M', 'x', 'O', 'b'):
|
||||||
result = DeserializeDSObjectDispatch(&dataStart, p_flags);
|
result = DeserializeDSObjectDispatch(dataStart, p_flags);
|
||||||
break;
|
break;
|
||||||
case FOURCC('M', 'x', 'C', 'h'):
|
case FOURCC('M', 'x', 'C', 'h'):
|
||||||
result = new MxStreamChunk();
|
result = new MxStreamChunk();
|
||||||
|
|||||||
@ -113,7 +113,7 @@ MxU32 ReadData(MxU8* p_buffer, MxU32 p_size)
|
|||||||
data2 = data;
|
data2 = data;
|
||||||
data += 8;
|
data += 8;
|
||||||
|
|
||||||
MxDSObject* obj = DeserializeDSObjectDispatch(&data, -1);
|
MxDSObject* obj = DeserializeDSObjectDispatch(data, -1);
|
||||||
id = obj->GetObjectId();
|
id = obj->GetObjectId();
|
||||||
delete obj;
|
delete obj;
|
||||||
|
|
||||||
|
|||||||
@ -36,12 +36,19 @@ MxU32 MxStreamChunk::ReadChunkHeader(MxU8* p_chunkData)
|
|||||||
MxU32 headersize = 0;
|
MxU32 headersize = 0;
|
||||||
if (p_chunkData) {
|
if (p_chunkData) {
|
||||||
MxU8* chunkData = p_chunkData;
|
MxU8* chunkData = p_chunkData;
|
||||||
// Note: the alpha debug version uses memcpy calls here,
|
|
||||||
// but the code generation is the same.
|
memcpy(&m_flags, p_chunkData, sizeof(m_flags));
|
||||||
GetScalar(&p_chunkData, m_flags);
|
p_chunkData += sizeof(m_flags);
|
||||||
GetScalar(&p_chunkData, m_objectId);
|
|
||||||
GetScalar(&p_chunkData, m_time);
|
memcpy(&m_objectId, p_chunkData, sizeof(m_objectId));
|
||||||
GetScalar(&p_chunkData, m_length);
|
p_chunkData += sizeof(m_objectId);
|
||||||
|
|
||||||
|
memcpy(&m_time, p_chunkData, sizeof(m_time));
|
||||||
|
p_chunkData += sizeof(m_time);
|
||||||
|
|
||||||
|
memcpy(&m_length, p_chunkData, sizeof(m_length));
|
||||||
|
p_chunkData += sizeof(m_length);
|
||||||
|
|
||||||
m_data = p_chunkData;
|
m_data = p_chunkData;
|
||||||
headersize = p_chunkData - chunkData;
|
headersize = p_chunkData - chunkData;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
from isledecomp.bin import Bin as IsleBin
|
from isledecomp.bin import Bin as IsleBin
|
||||||
import colorama
|
import colorama
|
||||||
|
|
||||||
colorama.init()
|
colorama.just_fix_windows_console()
|
||||||
|
|
||||||
|
|
||||||
# Ignore all compare-db messages.
|
# Ignore all compare-db messages.
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
from isledecomp.dir import walk_source_dir, is_file_cpp
|
from isledecomp.dir import walk_source_dir, is_file_cpp
|
||||||
from isledecomp.parser import DecompLinter
|
from isledecomp.parser import DecompLinter
|
||||||
|
|
||||||
colorama.init()
|
colorama.just_fix_windows_console()
|
||||||
|
|
||||||
|
|
||||||
def display_errors(alerts, filename):
|
def display_errors(alerts, filename):
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
from pystache import Renderer
|
from pystache import Renderer
|
||||||
import colorama
|
import colorama
|
||||||
|
|
||||||
colorama.init()
|
colorama.just_fix_windows_console()
|
||||||
|
|
||||||
|
|
||||||
def gen_json(json_file: str, orig_file: str, data):
|
def gen_json(json_file: str, orig_file: str, data):
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
tools/isledecomp
|
tools/isledecomp
|
||||||
capstone
|
capstone
|
||||||
clang==16.*
|
clang==16.*
|
||||||
colorama
|
colorama>=0.4.6
|
||||||
isledecomp
|
isledecomp
|
||||||
pystache
|
pystache
|
||||||
pyyaml
|
pyyaml
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
# Ignore all compare-db messages.
|
# Ignore all compare-db messages.
|
||||||
logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler())
|
logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler())
|
||||||
|
|
||||||
colorama.init()
|
colorama.just_fix_windows_console()
|
||||||
|
|
||||||
|
|
||||||
def parse_args() -> argparse.Namespace:
|
def parse_args() -> argparse.Namespace:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user