Implement/match PizzeriaState::PizzeriaState (#1124)

This commit is contained in:
Christian Semmler 2024-10-28 10:32:55 -07:00 committed by GitHub
parent ad353b7f3e
commit 5f822dabc7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 63 additions and 40 deletions

View file

@ -27,6 +27,7 @@ class LegoState : public MxCore {
}; };
// FUNCTION: LEGO1 0x10017c00 // FUNCTION: LEGO1 0x10017c00
// FUNCTION: BETA10 0x10031dc0
Playlist() Playlist()
{ {
m_objectIds = NULL; m_objectIds = NULL;
@ -35,28 +36,30 @@ class LegoState : public MxCore {
m_nextIndex = 0; m_nextIndex = 0;
} }
Playlist(MxU32* p_objectIds, MxS16 p_length) // FUNCTION: BETA10 0x10031e10
Playlist(MxU32* p_objectIds, MxS16 p_length, MxS16 p_mode)
{ {
m_objectIds = p_objectIds; m_objectIds = p_objectIds;
m_length = p_length; m_length = p_length;
m_mode = e_loop; m_mode = p_mode;
m_nextIndex = 0; m_nextIndex = 0;
} }
// FUNCTION: LEGO1 0x10071800 // FUNCTION: LEGO1 0x10071800
Playlist& operator=(const Playlist& p_shuffle) // FUNCTION: BETA10 0x10031e70
Playlist& operator=(const Playlist& p_playlist)
{ {
m_objectIds = p_shuffle.m_objectIds; m_objectIds = p_playlist.m_objectIds;
m_length = p_shuffle.m_length; m_length = p_playlist.m_length;
m_nextIndex = p_shuffle.m_nextIndex; m_nextIndex = p_playlist.m_nextIndex;
m_mode = p_shuffle.m_mode; m_mode = p_playlist.m_mode;
return *this; return *this;
} }
MxU32 Next(); MxU32 Next();
MxBool Contains(MxU32 p_objectId); MxBool Contains(MxU32 p_objectId);
void SetUnknown0x08(MxS16 p_unk0x08) { m_nextIndex = p_unk0x08; } void SetNextIndex(MxS16 p_nextIndex) { m_nextIndex = p_nextIndex; }
MxResult ReadFromFile(LegoFile* p_file) MxResult ReadFromFile(LegoFile* p_file)
{ {

View file

@ -11,15 +11,6 @@ class PizzaMissionState;
// SIZE 0x58 // SIZE 0x58
class PizzeriaState : public LegoState { class PizzeriaState : public LegoState {
public: public:
// SIZE 0x14
struct StateStruct {
undefined4 m_unk0x00; // 0x00
undefined4 m_unk0x04; // 0x04
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
undefined4 m_unk0x10; // 0x10
};
PizzeriaState(); PizzeriaState();
// FUNCTION: LEGO1 0x10017c20 // FUNCTION: LEGO1 0x10017c20
@ -45,8 +36,8 @@ class PizzeriaState : public LegoState {
// TODO: Most likely getters/setters are not used according to BETA. // TODO: Most likely getters/setters are not used according to BETA.
Playlist m_unk0x08[5]; // 0x08 Playlist m_unk0x08[5]; // 0x08
StateStruct m_unk0x44; // 0x44 undefined4 m_unk0x44[5]; // 0x44
}; };
// VTABLE: LEGO1 0x100d5520 // VTABLE: LEGO1 0x100d5520

View file

@ -13,7 +13,26 @@
DECOMP_SIZE_ASSERT(Pizzeria, 0x84) DECOMP_SIZE_ASSERT(Pizzeria, 0x84)
DECOMP_SIZE_ASSERT(PizzeriaState, 0x58) DECOMP_SIZE_ASSERT(PizzeriaState, 0x58)
DECOMP_SIZE_ASSERT(PizzeriaState::StateStruct, 0x14)
// GLOBAL: LEGO1 0x100f0ce8
IsleScript::Script g_unk0x100f0ce8[] =
{IsleScript::c_ppz107ma_RunAnim, IsleScript::c_ppz114pa_RunAnim, IsleScript::c_ppz114pa_RunAnim};
// GLOBAL: LEGO1 0x100f0cf8
IsleScript::Script g_unk0x100f0cf8[] =
{IsleScript::c_ppz001pe_RunAnim, IsleScript::c_ppz006pa_RunAnim, IsleScript::c_ppz007pa_RunAnim};
// GLOBAL: LEGO1 0x100f0d08
IsleScript::Script g_unk0x100f0d08[] =
{IsleScript::c_ppz054ma_RunAnim, IsleScript::c_ppz055ma_RunAnim, IsleScript::c_ppz056ma_RunAnim};
// GLOBAL: LEGO1 0x100f0d18
IsleScript::Script g_unk0x100f0d18[] =
{IsleScript::c_ppz031ma_RunAnim, IsleScript::c_ppz035pa_RunAnim, IsleScript::c_ppz036pa_RunAnim};
// GLOBAL: LEGO1 0x100f0d28
IsleScript::Script g_unk0x100f0d28[] =
{IsleScript::c_ppz075pa_RunAnim, IsleScript::c_ppz082pa_RunAnim, IsleScript::c_ppz084pa_RunAnim};
// FUNCTION: LEGO1 0x100179c0 // FUNCTION: LEGO1 0x100179c0
MxResult Pizzeria::Create(MxDSAction& p_dsAction) MxResult Pizzeria::Create(MxDSAction& p_dsAction)
@ -28,6 +47,7 @@ MxResult Pizzeria::Create(MxDSAction& p_dsAction)
} }
// FUNCTION: LEGO1 0x100179f0 // FUNCTION: LEGO1 0x100179f0
// FUNCTION: BETA10 0x100efbfc
void Pizzeria::CreateState() void Pizzeria::CreateState()
{ {
LegoGameState* gameState = GameState(); LegoGameState* gameState = GameState();
@ -46,6 +66,7 @@ void Pizzeria::CreateState()
} }
// FUNCTION: LEGO1 0x10017a50 // FUNCTION: LEGO1 0x10017a50
// FUNCTION: BETA10 0x100efc91
MxLong Pizzeria::HandleClick() MxLong Pizzeria::HandleClick()
{ {
if (FUN_1003ef60() && m_pizzaMissionState->m_unk0x0c == 0) { if (FUN_1003ef60() && m_pizzaMissionState->m_unk0x0c == 0) {
@ -64,10 +85,16 @@ MxLong Pizzeria::HandleClick()
return 1; return 1;
} }
// STUB: LEGO1 0x10017af0 // FUNCTION: LEGO1 0x10017af0
// FUNCTION: BETA10 0x100efd14
PizzeriaState::PizzeriaState() PizzeriaState::PizzeriaState()
{ {
// TODO m_unk0x08[0] = Playlist((MxU32*) g_unk0x100f0ce8, sizeOfArray(g_unk0x100f0ce8), Playlist::e_once);
m_unk0x08[1] = Playlist((MxU32*) g_unk0x100f0cf8, sizeOfArray(g_unk0x100f0cf8), Playlist::e_once);
m_unk0x08[2] = Playlist((MxU32*) g_unk0x100f0d08, sizeOfArray(g_unk0x100f0d08), Playlist::e_once);
m_unk0x08[3] = Playlist((MxU32*) g_unk0x100f0d18, sizeOfArray(g_unk0x100f0d18), Playlist::e_once);
m_unk0x08[4] = Playlist((MxU32*) g_unk0x100f0d28, sizeOfArray(g_unk0x100f0d28), Playlist::e_once);
memset(m_unk0x44, -1, sizeof(m_unk0x44));
} }
// STUB: LEGO1 0x10017d50 // STUB: LEGO1 0x10017d50
@ -77,6 +104,7 @@ MxS16 PizzeriaState::FUN_10017d50()
} }
// STUB: LEGO1 0x10017d70 // STUB: LEGO1 0x10017d70
// FUNCTION: BETA10 0x100effc0
MxU32 PizzeriaState::FUN_10017d70() MxU32 PizzeriaState::FUN_10017d70()
{ {
return 0; return 0;

View file

@ -18,7 +18,7 @@ DECOMP_SIZE_ASSERT(Radio, 0x10)
DECOMP_SIZE_ASSERT(RadioState, 0x30) DECOMP_SIZE_ASSERT(RadioState, 0x30)
// GLOBAL: LEGO1 0x100f3218 // GLOBAL: LEGO1 0x100f3218
JukeboxScript::Script g_unk0x100f3218[6] = { JukeboxScript::Script g_unk0x100f3218[] = {
JukeboxScript::c_sns002ra_Audio, JukeboxScript::c_sns002ra_Audio,
JukeboxScript::c_sns001ja_Audio, JukeboxScript::c_sns001ja_Audio,
JukeboxScript::c_snsc01js_Audio, JukeboxScript::c_snsc01js_Audio,
@ -28,7 +28,7 @@ JukeboxScript::Script g_unk0x100f3218[6] = {
}; };
// GLOBAL: LEGO1 0x100f3230 // GLOBAL: LEGO1 0x100f3230
JukeboxScript::Script g_unk0x100f3230[14] = { JukeboxScript::Script g_unk0x100f3230[] = {
JukeboxScript::c_ham035ra_Audio, JukeboxScript::c_ham035ra_Audio,
JukeboxScript::c_ham039ra_Audio, JukeboxScript::c_ham039ra_Audio,
JukeboxScript::c_sns005ra_Audio, JukeboxScript::c_sns005ra_Audio,
@ -46,7 +46,7 @@ JukeboxScript::Script g_unk0x100f3230[14] = {
}; };
// GLOBAL: LEGO1 0x100f3268 // GLOBAL: LEGO1 0x100f3268
JukeboxScript::Script g_unk0x100f3268[9] = { JukeboxScript::Script g_unk0x100f3268[] = {
JukeboxScript::c_CentralRoads_Music, JukeboxScript::c_CentralRoads_Music,
JukeboxScript::c_BeachBlvd_Music, JukeboxScript::c_BeachBlvd_Music,
JukeboxScript::c_ResidentalArea_Music, JukeboxScript::c_ResidentalArea_Music,
@ -214,14 +214,14 @@ RadioState::RadioState()
MxS32 random = rand(); MxS32 random = rand();
m_unk0x2c = random % 3; m_unk0x2c = random % 3;
m_unk0x08[0] = LegoState::Playlist((MxU32*) g_unk0x100f3218, sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0])); m_unk0x08[0] = Playlist((MxU32*) g_unk0x100f3218, sizeOfArray(g_unk0x100f3218), Playlist::e_loop);
m_unk0x08[0].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0]))); m_unk0x08[0].SetNextIndex(rand() % sizeOfArray(g_unk0x100f3218));
m_unk0x08[1] = LegoState::Playlist((MxU32*) g_unk0x100f3230, sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0])); m_unk0x08[1] = Playlist((MxU32*) g_unk0x100f3230, sizeOfArray(g_unk0x100f3230), Playlist::e_loop);
m_unk0x08[1].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0]))); m_unk0x08[1].SetNextIndex(rand() % sizeOfArray(g_unk0x100f3230));
m_unk0x08[2] = LegoState::Playlist((MxU32*) g_unk0x100f3268, sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0])); m_unk0x08[2] = Playlist((MxU32*) g_unk0x100f3268, sizeOfArray(g_unk0x100f3268), Playlist::e_loop);
m_unk0x08[2].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0]))); m_unk0x08[2].SetNextIndex(rand() % sizeOfArray(g_unk0x100f3268));
m_active = FALSE; m_active = FALSE;
} }

View file

@ -1549,28 +1549,29 @@ void Infocenter::StopBookAnimation()
// FUNCTION: LEGO1 0x10071600 // FUNCTION: LEGO1 0x10071600
InfocenterState::InfocenterState() InfocenterState::InfocenterState()
{ {
m_exitDialogueAct1 = LegoState::Playlist((MxU32*) g_exitDialogueAct1, sizeOfArray(g_exitDialogueAct1)); m_exitDialogueAct1 = Playlist((MxU32*) g_exitDialogueAct1, sizeOfArray(g_exitDialogueAct1), Playlist::e_loop);
m_exitDialogueAct23 = LegoState::Playlist((MxU32*) g_exitDialogueAct23, sizeOfArray(g_exitDialogueAct23) - 1); m_exitDialogueAct23 =
Playlist((MxU32*) g_exitDialogueAct23, sizeOfArray(g_exitDialogueAct23) - 1, Playlist::e_loop);
m_returnDialogue[LegoGameState::e_act1] = m_returnDialogue[LegoGameState::e_act1] =
LegoState::Playlist((MxU32*) g_returnDialogueAct1, sizeOfArray(g_returnDialogueAct1) - 1); Playlist((MxU32*) g_returnDialogueAct1, sizeOfArray(g_returnDialogueAct1) - 1, Playlist::e_loop);
m_returnDialogue[LegoGameState::e_act2] = m_returnDialogue[LegoGameState::e_act2] =
LegoState::Playlist((MxU32*) g_returnDialogueAct2, sizeOfArray(g_returnDialogueAct2) - 1); Playlist((MxU32*) g_returnDialogueAct2, sizeOfArray(g_returnDialogueAct2) - 1, Playlist::e_loop);
m_returnDialogue[LegoGameState::e_act3] = m_returnDialogue[LegoGameState::e_act3] =
LegoState::Playlist((MxU32*) g_returnDialogueAct3, sizeOfArray(g_returnDialogueAct3)); Playlist((MxU32*) g_returnDialogueAct3, sizeOfArray(g_returnDialogueAct3), Playlist::e_loop);
m_leaveDialogue[LegoGameState::e_act1] = m_leaveDialogue[LegoGameState::e_act1] =
LegoState::Playlist((MxU32*) g_leaveDialogueAct1, sizeOfArray(g_leaveDialogueAct1)); Playlist((MxU32*) g_leaveDialogueAct1, sizeOfArray(g_leaveDialogueAct1), Playlist::e_loop);
m_leaveDialogue[LegoGameState::e_act2] = m_leaveDialogue[LegoGameState::e_act2] =
LegoState::Playlist((MxU32*) g_leaveDialogueAct2, sizeOfArray(g_leaveDialogueAct2)); Playlist((MxU32*) g_leaveDialogueAct2, sizeOfArray(g_leaveDialogueAct2), Playlist::e_loop);
m_leaveDialogue[LegoGameState::e_act3] = m_leaveDialogue[LegoGameState::e_act3] =
LegoState::Playlist((MxU32*) g_leaveDialogueAct3, sizeOfArray(g_leaveDialogueAct3) - 1); Playlist((MxU32*) g_leaveDialogueAct3, sizeOfArray(g_leaveDialogueAct3) - 1, Playlist::e_loop);
m_bricksterDialogue = LegoState::Playlist((MxU32*) g_bricksterDialogue, sizeOfArray(g_bricksterDialogue)); m_bricksterDialogue = Playlist((MxU32*) g_bricksterDialogue, sizeOfArray(g_bricksterDialogue), Playlist::e_loop);
memset(m_letters, 0, sizeof(m_letters)); memset(m_letters, 0, sizeof(m_letters));
} }