MxSmkPresenter vtables (#254)

* implement vtbls

* Update smk.h
This commit is contained in:
Misha 2023-10-30 12:46:38 -04:00 committed by GitHub
parent f3b0de0609
commit 1db48b3b2c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 0 deletions

View file

@ -1,6 +1,7 @@
#include "mxsmkpresenter.h"
#include "decomp.h"
#include "mxvideomanager.h"
DECOMP_SIZE_ASSERT(MxSmkPresenter, 0x720);
@ -65,3 +66,48 @@ void MxSmkPresenter::FUN_100c5d40(MxSmack* p_mxSmack)
if (p_mxSmack->m_unk0x6b4)
delete p_mxSmack->m_unk0x6b4;
}
// OFFSET: LEGO1 0x100b4300
void MxSmkPresenter::Destroy()
{
Destroy(FALSE);
}
// OFFSET: LEGO1 0x100b3940 STUB
void MxSmkPresenter::VTable0x5c(undefined4 p_unknown1)
{
}
// OFFSET: LEGO1 0x100b3a00 STUB
void MxSmkPresenter::VTable0x68(undefined4 p_unknown1)
{
}
// OFFSET: LEGO1 0x100b42c0
void MxSmkPresenter::VTable0x70()
{
MxPalette* palette = m_bitmap->CreatePalette();
MVideoManager()->RealizePalette(palette);
delete palette;
}
// OFFSET: LEGO1 0x100b4260
MxU32 MxSmkPresenter::VTable0x88()
{
MxU32 result = m_unk0x71c;
if ((m_mxSmack.m_smack.m_smkType & 1) != 0) {
result = m_unk0x71c / m_mxSmack.m_smack.m_frames;
if (1 < m_unk0x71c && (m_unk0x71c % m_mxSmack.m_smack.m_frames) == 1) {
m_unk0x71c = 1;
}
return result;
}
else {
if (m_mxSmack.m_smack.m_frames == result) {
m_unk0x71c = 0;
result = 0;
memset(m_mxSmack.m_smack.m_palette, 0, sizeof(m_mxSmack.m_smack.m_palette));
}
return result;
}
}

View file

@ -13,7 +13,12 @@ class MxSmkPresenter : public MxVideoPresenter {
MxSmkPresenter();
virtual ~MxSmkPresenter() override;
virtual void Destroy() override;
virtual void VTable0x5c(undefined4 p_unknown1) override;
virtual void VTable0x60() override;
virtual void VTable0x68(undefined4 p_unknown1) override; // vtable+0x68
virtual void VTable0x70() override;
virtual MxU32 VTable0x88();
struct MxSmack {
Smack m_smack;