Match LegoAnimPresenter::VTable0x88

This commit is contained in:
Christian Semmler 2024-01-15 14:22:34 -05:00
parent e7d341e8bf
commit e7777ad8de
4 changed files with 38 additions and 34 deletions

View File

@ -9,6 +9,7 @@ class LegoMemoryStream;
class LegoAnimClass; class LegoAnimClass;
// VTABLE: LEGO1 0x100d90c8 // VTABLE: LEGO1 0x100d90c8
// SIZE 0xc0
class LegoAnimPresenter : public MxVideoPresenter { class LegoAnimPresenter : public MxVideoPresenter {
public: public:
LegoAnimPresenter(); LegoAnimPresenter();
@ -27,15 +28,15 @@ class LegoAnimPresenter : public MxVideoPresenter {
return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name); return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name);
} }
virtual void ReadyTickle() override; // vtable+0x18 virtual void ReadyTickle() override; // vtable+0x18
virtual void StartingTickle() override; // vtable+0x1c virtual void StartingTickle() override; // vtable+0x1c
virtual void StreamingTickle() override; // vtable+0x20 virtual void StreamingTickle() override; // vtable+0x20
virtual void ParseExtra() override; // vtable+0x30 virtual void ParseExtra() override; // vtable+0x30
virtual void Destroy() override; // vtable+0x38 virtual void Destroy() override; // vtable+0x38
virtual MxResult StartAction(MxStreamController*, MxDSAction*) override; // vtable+0x3c virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
virtual void EndAction() override; // vtable+0x40 virtual void EndAction() override; // vtable+0x40
virtual void PutFrame(); // vtable+0x6c virtual void PutFrame() override; // vtable+0x6c
virtual MxS32 VTable0x88(MxStreamChunk* p_chunk); // vtable+0x88 virtual MxS32 VTable0x88(MxStreamChunk* p_chunk) override; // vtable+0x88
private: private:
void Init(); void Init();
@ -58,10 +59,10 @@ class LegoAnimPresenter : public MxVideoPresenter {
undefined m_unk0x96; // 0x96 undefined m_unk0x96; // 0x96
undefined m_unk0x97; // 0x97 undefined m_unk0x97; // 0x97
undefined4 m_unk0x98; // 0x98 undefined4 m_unk0x98; // 0x98
MxS16 m_unk0x9c; // 0x9f MxS16 m_unk0x9c; // 0x9c
undefined4 m_unk0xa0; // 0xa0 undefined4 m_unk0xa0; // 0xa0
undefined4 m_unk0xa4; // 0xa4 undefined4 m_unk0xa4; // 0xa4
Mx3DPointFloat m_vec; // 0xa8 Mx3DPointFloat m_unk0xa8; // 0xa8
undefined4 m_unk0xbc; // 0xbc undefined4 m_unk0xbc; // 0xbc
}; };
@ -69,35 +70,37 @@ class LegoAnimPresenter : public MxVideoPresenter {
// LegoAnimPresenter::`scalar deleting destructor' // LegoAnimPresenter::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db768 // VTABLE: LEGO1 0x100db768
// SIZE 0x08
class LegoAnimClassBase { class LegoAnimClassBase {
public: public:
LegoAnimClassBase(); LegoAnimClassBase();
virtual ~LegoAnimClassBase(); virtual ~LegoAnimClassBase();
virtual void VTable0x4(); virtual void VTable0x4(); // vtable+0x04
virtual void VTable0x8(); virtual void VTable0x8(); // vtable+0x08
virtual void VTable0xc(); virtual void VTable0xc(); // vtable+0x0c
undefined4 m_unk0x4; undefined4 m_unk0x4; // 0x04
}; };
// SYNTHETIC: LEGO1 0x10099de0 // SYNTHETIC: LEGO1 0x10099de0
// LegoAnimClassBase::`scalar deleting destructor' // LegoAnimClassBase::`scalar deleting destructor'
// VTABLE: LEGO1 0x100db8d8 // VTABLE: LEGO1 0x100db8d8
// SIZE 0x18
class LegoAnimClass : public LegoAnimClassBase { class LegoAnimClass : public LegoAnimClassBase {
public: public:
LegoAnimClass(); LegoAnimClass();
virtual ~LegoAnimClass() override; virtual ~LegoAnimClass() override;
virtual void VTable0x8() override; virtual void VTable0x8() override; // vtable+0x08
virtual void VTable0xc() override; virtual void VTable0xc() override; // vtable+0x0c
virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); // vtable+0x10
undefined4 m_unk0x8; undefined4 m_unk0x8; // 0x08
undefined4 m_unk0xc; undefined4 m_unk0xc; // 0x0c
undefined4 m_unk0x10; undefined4 m_unk0x10; // 0x10
undefined4 m_unk0x14; undefined4 m_unk0x14; // 0x14
}; };
// SYNTHETIC: LEGO1 0x100a0ba0 // SYNTHETIC: LEGO1 0x100a0ba0

View File

@ -7,7 +7,9 @@
#include "mxdsanim.h" #include "mxdsanim.h"
#include "mxstreamchunk.h" #include "mxstreamchunk.h"
DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0); DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0)
DECOMP_SIZE_ASSERT(LegoAnimClassBase, 0x08)
DECOMP_SIZE_ASSERT(LegoAnimClass, 0x18)
// FUNCTION: LEGO1 0x10068420 // FUNCTION: LEGO1 0x10068420
LegoAnimPresenter::LegoAnimPresenter() LegoAnimPresenter::LegoAnimPresenter()
@ -31,7 +33,7 @@ void LegoAnimPresenter::Init()
m_unk0x70 = 0; m_unk0x70 = 0;
m_unk0x78 = 0; m_unk0x78 = 0;
m_unk0x7c = 0; m_unk0x7c = 0;
m_vec.Clear(); m_unk0xa8.Clear();
m_unk0xa4 = 0; m_unk0xa4 = 0;
m_currentWorld = NULL; m_currentWorld = NULL;
m_unk0x95 = 0; m_unk0x95 = 0;
@ -58,19 +60,21 @@ MxS32 LegoAnimPresenter::VTable0x88(MxStreamChunk* p_chunk)
{ {
MxS32 result = FAILURE; MxS32 result = FAILURE;
LegoMemoryStream stream((char*) p_chunk->GetData()); LegoMemoryStream stream((char*) p_chunk->GetData());
MxS32 magicSig; MxS32 magicSig;
MxS32 val3;
MxS32 val2 = 0; MxS32 val2 = 0;
MxS32 val3;
if (stream.Read(&magicSig, sizeof(MxS32)) == SUCCESS && magicSig == 0x11) { if (stream.Read(&magicSig, sizeof(MxS32)) == SUCCESS && magicSig == 0x11) {
if (stream.Read(&m_unk0xa4, sizeof(MxU32)) == SUCCESS) { if (stream.Read(&m_unk0xa4, sizeof(MxU32)) == SUCCESS) {
if (stream.Read(m_vec.GetX(), sizeof(float)) == SUCCESS) { if (stream.Read(&m_unk0xa8[0], sizeof(float)) == SUCCESS) {
if (stream.Read(m_vec.GetY(), sizeof(float)) == SUCCESS) { if (stream.Read(&m_unk0xa8[1], sizeof(float)) == SUCCESS) {
if (stream.Read(m_vec.GetZ(), sizeof(float)) == SUCCESS) { if (stream.Read(&m_unk0xa8[2], sizeof(float)) == SUCCESS) {
if (stream.Read(&val2, sizeof(MxS32)) == SUCCESS) { if (stream.Read(&val2, sizeof(MxS32)) == SUCCESS) {
if (stream.Read(&val3, sizeof(MxS32)) == SUCCESS) { if (stream.Read(&val3, sizeof(MxS32)) == SUCCESS) {
m_unk0x64 = new LegoAnimClass(); m_unk0x64 = new LegoAnimClass();
if (m_unk0x64) { if (m_unk0x64) {
if (m_unk0x64->VTable0x10(&stream, val3) == SUCCESS) { if (m_unk0x64->VTable0x10(&stream, val2) == SUCCESS) {
result = SUCCESS; result = SUCCESS;
} }
} }

View File

@ -31,10 +31,6 @@ class Mx3DPointFloat : public Vector3 {
inline void EqualsCross(Mx3DPointFloat& p_a, Mx3DPointFloat& p_b) { EqualsCrossImpl(p_a.m_data, p_b.m_data); } inline void EqualsCross(Mx3DPointFloat& p_a, Mx3DPointFloat& p_b) { EqualsCrossImpl(p_a.m_data, p_b.m_data); }
inline float* GetX() { return &m_elements[0]; }
inline float* GetY() { return &m_elements[1]; }
inline float* GetZ() { return &m_elements[2]; }
private: private:
float m_elements[3]; float m_elements[3];
}; };

View File

@ -11,6 +11,7 @@ enum LookupMode {
LookupMode_LowerCase2 = 3 LookupMode_LowerCase2 = 3
}; };
// SIZE 0x04
class MxAtomId { class MxAtomId {
public: public:
__declspec(dllexport) MxAtomId(const char*, LookupMode); __declspec(dllexport) MxAtomId(const char*, LookupMode);
@ -30,7 +31,7 @@ class MxAtomId {
MxAtomIdCounter* GetCounter(const char*, LookupMode); MxAtomIdCounter* GetCounter(const char*, LookupMode);
void Destroy(); void Destroy();
const char* m_internal; const char* m_internal; // 0x00
}; };
#endif // MXATOMID_H #endif // MXATOMID_H