Implement/match LegoPhonemePresenter::StartingTickle (#809)

* Implement/match LegoPhonemePresenter::StartingTickle

* Name vars

* Fix name
This commit is contained in:
Christian Semmler
2024-04-16 10:07:13 -04:00
committed by GitHub
parent 41281dcbec
commit 2600b1b421
17 changed files with 314 additions and 143 deletions

View File

@@ -469,6 +469,13 @@ done:
return roi;
}
// STUB: LEGO1 0x100849a0
MxU32 LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo)
{
// TODO
return 0;
}
// FUNCTION: LEGO1 0x10084c00
MxBool LegoCharacterManager::Exists(const char* p_key)
{

View File

@@ -0,0 +1,62 @@
#include "legophoneme.h"
DECOMP_SIZE_ASSERT(LegoPhoneme, 0x20)
// FUNCTION: LEGO1 0x10044e50
LegoPhoneme::~LegoPhoneme()
{
}
// FUNCTION: LEGO1 0x10044eb0
undefined4 LegoPhoneme::VTable0x00()
{
return m_unk0x14;
}
// FUNCTION: LEGO1 0x10044ec0
void LegoPhoneme::VTable0x04(undefined4 p_unk0x14)
{
m_unk0x14 = p_unk0x14;
}
// FUNCTION: LEGO1 0x10044ed0
LegoTextureInfo* LegoPhoneme::VTable0x08()
{
return m_unk0x18;
}
// FUNCTION: LEGO1 0x10044ee0
void LegoPhoneme::VTable0x0c(LegoTextureInfo* p_unk0x18)
{
m_unk0x18 = p_unk0x18;
}
// FUNCTION: LEGO1 0x10044ef0
LegoTextureInfo* LegoPhoneme::VTable0x10()
{
return m_unk0x1c;
}
// FUNCTION: LEGO1 0x10044f00
void LegoPhoneme::VTable0x14(LegoTextureInfo* p_unk0x1c)
{
m_unk0x1c = p_unk0x1c;
}
// FUNCTION: LEGO1 0x10044f10
void LegoPhoneme::VTable0x18()
{
}
// FUNCTION: LEGO1 0x10044f20
void LegoPhoneme::Init()
{
m_unk0x14 = 0;
m_unk0x18 = NULL;
m_unk0x1c = NULL;
}
// FUNCTION: LEGO1 0x10044f30
void LegoPhoneme::VTable0x20(undefined4)
{
}

View File

@@ -1,14 +0,0 @@
#include "legounknown100d7c88.h"
DECOMP_SIZE_ASSERT(LegoUnknown100d7c88, 0x18)
// FUNCTION: LEGO1 0x10044e50
LegoUnknown100d7c88::~LegoUnknown100d7c88()
{
}
// FUNCTION: LEGO1 0x10044eb0
MxU32 LegoUnknown100d7c88::VTable0x00()
{
return m_unk0x14;
}

View File

@@ -394,10 +394,10 @@ void LegoAnimPresenter::FUN_1006a3c0(LegoAnimPresenterMap& p_map, LegoTreeNode*
}
}
else {
LegoROI* roi2 = p_roi->FUN_100a8ce0(name, p_roi);
LegoROI* child = p_roi->FindChildROI(name, p_roi);
if (roi2 != NULL) {
FUN_1006a4f0(p_map, data, und, roi2);
if (child != NULL) {
FUN_1006a4f0(p_map, data, und, child);
}
else {
if (FUN_100699e0(name) != NULL) {
@@ -473,9 +473,9 @@ MxBool LegoAnimPresenter::FUN_1006abb0(LegoTreeNode* p_node, LegoROI* p_roi)
}
}
else {
LegoROI* roi2 = p_roi->FUN_100a8ce0(name, p_roi);
LegoROI* child = p_roi->FindChildROI(name, p_roi);
if (roi2 == NULL) {
if (child == NULL) {
if (FUN_100699e0(name) != NULL) {
if (FUN_1006abb0(p_node, NULL)) {
result = TRUE;

View File

@@ -1,5 +1,10 @@
#include "legophonemepresenter.h"
#include "legocharactermanager.h"
#include "misc.h"
#include "misc/legocontainer.h"
#include "mxcompositepresenter.h"
DECOMP_SIZE_ASSERT(LegoPhonemePresenter, 0x88)
// FUNCTION: LEGO1 0x1004e180
@@ -17,17 +22,66 @@ LegoPhonemePresenter::~LegoPhonemePresenter()
void LegoPhonemePresenter::Init()
{
m_unk0x68 = 0;
m_unk0x6c = 0;
m_unk0x70 = 0;
m_unk0x84 = 0;
m_textureInfo = NULL;
m_unk0x70 = FALSE;
m_unk0x84 = FALSE;
}
// STUB: LEGO1 0x1004e3d0
// FUNCTION: LEGO1 0x1004e3d0
void LegoPhonemePresenter::StartingTickle()
{
// TODO
MxFlcPresenter::StartingTickle();
EndAction();
if (m_textureInfo == NULL) {
MxU16 extraLength;
char* extraData;
m_action->GetExtra(extraLength, extraData);
if (extraData != NULL) {
m_roiName = extraData;
m_roiName.ToUpperCase();
LegoROI *entityROI, *head;
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoAnimMMPresenter")) {
entityROI = FindROI(m_roiName.GetData());
m_unk0x84 = TRUE;
}
else {
entityROI = CharacterManager()->GetROI(m_roiName.GetData(), TRUE);
}
head = entityROI->FindChildROI("head", entityROI);
head->GetTexture(m_textureInfo);
LegoPhonemeList* phonemeList = VideoManager()->GetPhonemeList();
LegoPhoneme* phoneme = new LegoPhoneme(m_roiName.GetData(), 1);
LegoPhonemeListCursor cursor(phonemeList);
if (!cursor.Find(phoneme)) {
LegoTextureInfo* textureInfo = TextureContainer()->AddToList(m_textureInfo);
CharacterManager()->FUN_100849a0(entityROI, textureInfo);
phoneme->VTable0x0c(m_textureInfo);
phoneme->VTable0x14(textureInfo);
phonemeList->Append(phoneme);
m_textureInfo = textureInfo;
}
else {
LegoPhoneme* newPhoneme = phoneme;
cursor.Current(phoneme);
delete newPhoneme;
phoneme->VTable0x04(phoneme->VTable0x00() + 1);
cursor.SetValue(phoneme);
m_unk0x70 = TRUE;
}
}
}
}
// STUB: LEGO1 0x1004e800

View File

@@ -25,7 +25,7 @@ LegoVideoManager::LegoVideoManager()
m_unk0xe6 = FALSE;
memset(m_unk0x78, 0, sizeof(m_unk0x78));
m_unk0x78[0] = 0x6c;
m_unk0x100d9d00 = NULL;
m_phonemeRefList = NULL;
m_isFullscreenMovie = FALSE;
m_palette = NULL;
m_stopWatch = NULL;
@@ -194,7 +194,7 @@ MxResult LegoVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyM
m_3dManager->Add(*m_viewROI);
m_3dManager->SetPointOfView(*m_viewROI);
m_unk0x100d9d00 = new LegoUnknown100d9d00;
m_phonemeRefList = new LegoPhonemeList;
SetRender3D(FALSE);
m_stopWatch = new MxStopWatch;
m_stopWatch->Start();