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

View File

@ -7,7 +7,9 @@
#include "mxdsanim.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
LegoAnimPresenter::LegoAnimPresenter()
@ -31,7 +33,7 @@ void LegoAnimPresenter::Init()
m_unk0x70 = 0;
m_unk0x78 = 0;
m_unk0x7c = 0;
m_vec.Clear();
m_unk0xa8.Clear();
m_unk0xa4 = 0;
m_currentWorld = NULL;
m_unk0x95 = 0;
@ -58,19 +60,21 @@ MxS32 LegoAnimPresenter::VTable0x88(MxStreamChunk* p_chunk)
{
MxS32 result = FAILURE;
LegoMemoryStream stream((char*) p_chunk->GetData());
MxS32 magicSig;
MxS32 val3;
MxS32 val2 = 0;
MxS32 val3;
if (stream.Read(&magicSig, sizeof(MxS32)) == SUCCESS && magicSig == 0x11) {
if (stream.Read(&m_unk0xa4, sizeof(MxU32)) == SUCCESS) {
if (stream.Read(m_vec.GetX(), sizeof(float)) == SUCCESS) {
if (stream.Read(m_vec.GetY(), sizeof(float)) == SUCCESS) {
if (stream.Read(m_vec.GetZ(), sizeof(float)) == SUCCESS) {
if (stream.Read(&m_unk0xa8[0], sizeof(float)) == SUCCESS) {
if (stream.Read(&m_unk0xa8[1], sizeof(float)) == SUCCESS) {
if (stream.Read(&m_unk0xa8[2], sizeof(float)) == SUCCESS) {
if (stream.Read(&val2, sizeof(MxS32)) == SUCCESS) {
if (stream.Read(&val3, sizeof(MxS32)) == SUCCESS) {
m_unk0x64 = new LegoAnimClass();
if (m_unk0x64) {
if (m_unk0x64->VTable0x10(&stream, val3) == SUCCESS) {
if (m_unk0x64->VTable0x10(&stream, val2) == 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 float* GetX() { return &m_elements[0]; }
inline float* GetY() { return &m_elements[1]; }
inline float* GetZ() { return &m_elements[2]; }
private:
float m_elements[3];
};

View File

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