mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-25 17:07:52 -05:00
Implement/match LegoPlantManager::FUN_10026c50 (#1043)
* Minor fixes * Implement/match LegoPlantManager::FUN_10026c50
This commit is contained in:
parent
c9c130eb87
commit
62307e1819
9 changed files with 65 additions and 13 deletions
|
@ -66,7 +66,7 @@ class LegoBuildingManager : public MxCore {
|
||||||
static void SetCustomizeAnimFile(const char* p_value);
|
static void SetCustomizeAnimFile(const char* p_value);
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void FUN_1002fa00();
|
void LoadWorldInfo();
|
||||||
void CreateBuilding(MxS32 p_index, LegoWorld* p_world);
|
void CreateBuilding(MxS32 p_index, LegoWorld* p_world);
|
||||||
void Reset();
|
void Reset();
|
||||||
MxResult Write(LegoStorage* p_storage);
|
MxResult Write(LegoStorage* p_storage);
|
||||||
|
@ -77,7 +77,7 @@ class LegoBuildingManager : public MxCore {
|
||||||
MxBool SwitchMove(LegoEntity* p_entity);
|
MxBool SwitchMove(LegoEntity* p_entity);
|
||||||
MxBool SwitchMood(LegoEntity* p_entity);
|
MxBool SwitchMood(LegoEntity* p_entity);
|
||||||
MxU32 GetAnimationId(LegoEntity* p_entity);
|
MxU32 GetAnimationId(LegoEntity* p_entity);
|
||||||
MxU32 GetSoundId(LegoEntity* p_entity, MxBool);
|
MxU32 GetSoundId(LegoEntity* p_entity, MxBool p_state);
|
||||||
MxBool FUN_10030000(LegoEntity* p_entity);
|
MxBool FUN_10030000(LegoEntity* p_entity);
|
||||||
MxBool FUN_10030030(MxS32 p_index);
|
MxBool FUN_10030030(MxS32 p_index);
|
||||||
MxBool FUN_10030110(LegoBuildingInfo* p_data);
|
MxBool FUN_10030110(LegoBuildingInfo* p_data);
|
||||||
|
|
|
@ -39,7 +39,7 @@ class LegoPlantManager : public MxCore {
|
||||||
MxBool SwitchMood(LegoEntity* p_entity);
|
MxBool SwitchMood(LegoEntity* p_entity);
|
||||||
MxU32 GetAnimationId(LegoEntity* p_entity);
|
MxU32 GetAnimationId(LegoEntity* p_entity);
|
||||||
MxU32 GetSoundId(LegoEntity* p_entity, MxBool p_state);
|
MxU32 GetSoundId(LegoEntity* p_entity, MxBool p_state);
|
||||||
void FUN_10026c50(LegoEntity* p_entity);
|
MxBool FUN_10026c50(LegoEntity* p_entity);
|
||||||
void FUN_10027120();
|
void FUN_10027120();
|
||||||
|
|
||||||
static void SetCustomizeAnimFile(const char* p_value);
|
static void SetCustomizeAnimFile(const char* p_value);
|
||||||
|
@ -53,6 +53,7 @@ class LegoPlantManager : public MxCore {
|
||||||
void RemovePlant(MxS32 p_index, MxS32 p_worldId);
|
void RemovePlant(MxS32 p_index, MxS32 p_worldId);
|
||||||
void FUN_10026860(MxS32 p_index);
|
void FUN_10026860(MxS32 p_index);
|
||||||
LegoPlantInfo* GetInfo(LegoEntity* p_entity);
|
LegoPlantInfo* GetInfo(LegoEntity* p_entity);
|
||||||
|
MxBool FUN_10026c80(MxS32 p_index);
|
||||||
|
|
||||||
static char* g_customizeAnimFile;
|
static char* g_customizeAnimFile;
|
||||||
static MxS32 g_maxMove[4];
|
static MxS32 g_maxMove[4];
|
||||||
|
|
|
@ -10,7 +10,7 @@ class LegoPathBoundary;
|
||||||
// SIZE 0x54
|
// SIZE 0x54
|
||||||
struct LegoPlantInfo {
|
struct LegoPlantInfo {
|
||||||
// See LegoOmni::RegisterWorlds for IDs
|
// See LegoOmni::RegisterWorlds for IDs
|
||||||
enum Worlds {
|
enum World {
|
||||||
c_act1 = 1 << 0,
|
c_act1 = 1 << 0,
|
||||||
c_imain = 1 << 1,
|
c_imain = 1 << 1,
|
||||||
c_ielev = 1 << 4,
|
c_ielev = 1 << 4,
|
||||||
|
|
|
@ -257,7 +257,7 @@ void LegoBuildingManager::Init()
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1002fa00
|
// FUNCTION: LEGO1 0x1002fa00
|
||||||
// FUNCTION: BETA10 0x10063ad1
|
// FUNCTION: BETA10 0x10063ad1
|
||||||
void LegoBuildingManager::FUN_1002fa00()
|
void LegoBuildingManager::LoadWorldInfo()
|
||||||
{
|
{
|
||||||
MxS32 i;
|
MxS32 i;
|
||||||
LegoWorld* world = CurrentWorld();
|
LegoWorld* world = CurrentWorld();
|
||||||
|
|
|
@ -424,6 +424,7 @@ MxU32 LegoPlantManager::GetSoundId(LegoEntity* p_entity, MxBool p_state)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10026be0
|
// FUNCTION: LEGO1 0x10026be0
|
||||||
|
// FUNCTION: BETA10 0x100c62bc
|
||||||
void LegoPlantManager::SetCustomizeAnimFile(const char* p_value)
|
void LegoPlantManager::SetCustomizeAnimFile(const char* p_value)
|
||||||
{
|
{
|
||||||
if (g_customizeAnimFile != NULL) {
|
if (g_customizeAnimFile != NULL) {
|
||||||
|
@ -442,10 +443,60 @@ void LegoPlantManager::SetCustomizeAnimFile(const char* p_value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10026c50
|
// FUNCTION: LEGO1 0x10026c50
|
||||||
void LegoPlantManager::FUN_10026c50(LegoEntity* p_entity)
|
// FUNCTION: BETA10 0x100c6349
|
||||||
|
MxBool LegoPlantManager::FUN_10026c50(LegoEntity* p_entity)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoPlantInfo* info = GetInfo(p_entity);
|
||||||
|
|
||||||
|
if (info == NULL) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FUN_10026c80(info - g_plantInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10026c80
|
||||||
|
// FUNCTION: BETA10 0x100c63eb
|
||||||
|
MxBool LegoPlantManager::FUN_10026c80(MxS32 p_index)
|
||||||
|
{
|
||||||
|
if (p_index >= sizeOfArray(g_plantInfo)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LegoPlantInfo* info = &g_plantInfo[p_index];
|
||||||
|
|
||||||
|
if (info == NULL) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
MxBool result = TRUE;
|
||||||
|
|
||||||
|
if (info->m_unk0x16 < 0) {
|
||||||
|
info->m_unk0x16 = g_unk0x100f16c0[info->m_variant];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info->m_unk0x16 > 0) {
|
||||||
|
LegoROI* roi = info->m_entity->GetROI();
|
||||||
|
info->m_unk0x16--;
|
||||||
|
|
||||||
|
if (info->m_unk0x16 == 1) {
|
||||||
|
info->m_unk0x16 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info->m_unk0x16 == 0) {
|
||||||
|
roi->SetVisibility(FALSE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FUN_10026860(info - g_plantInfo);
|
||||||
|
info->m_entity->SetLocation(info->m_position, info->m_direction, info->m_up, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10026e00
|
// STUB: LEGO1 0x10026e00
|
||||||
|
|
|
@ -694,7 +694,7 @@ void LegoWorld::Enable(MxBool p_enable)
|
||||||
if (m_worldId != -1) {
|
if (m_worldId != -1) {
|
||||||
PlantManager()->LoadWorldInfo(m_worldId);
|
PlantManager()->LoadWorldInfo(m_worldId);
|
||||||
AnimationManager()->LoadWorldInfo(m_worldId);
|
AnimationManager()->LoadWorldInfo(m_worldId);
|
||||||
BuildingManager()->FUN_1002fa00();
|
BuildingManager()->LoadWorldInfo();
|
||||||
AnimationManager()->Resume();
|
AnimationManager()->Resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ LegoWorldPresenter::~LegoWorldPresenter()
|
||||||
MxS32 worldId = ((LegoWorld*) m_entity)->GetWorldId();
|
MxS32 worldId = ((LegoWorld*) m_entity)->GetWorldId();
|
||||||
PlantManager()->LoadWorldInfo(worldId);
|
PlantManager()->LoadWorldInfo(worldId);
|
||||||
AnimationManager()->LoadWorldInfo(worldId);
|
AnimationManager()->LoadWorldInfo(worldId);
|
||||||
BuildingManager()->FUN_1002fa00();
|
BuildingManager()->LoadWorldInfo();
|
||||||
result = ((LegoWorld*) m_entity)->VTable0x5c();
|
result = ((LegoWorld*) m_entity)->VTable0x5c();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,7 @@ void ElevatorBottom::Enable(MxBool p_enable)
|
||||||
// FUNCTION: LEGO1 0x10018310
|
// FUNCTION: LEGO1 0x10018310
|
||||||
MxBool ElevatorBottom::Escape()
|
MxBool ElevatorBottom::Escape()
|
||||||
{
|
{
|
||||||
DeleteObjects(&m_atom, 500, 999);
|
DeleteObjects(&m_atom, ElevbottScript::c_iica31in_PlayWav, 999);
|
||||||
m_destLocation = LegoGameState::e_infomain;
|
m_destLocation = LegoGameState::e_infomain;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ MxLong InfocenterDoor::HandleControl(LegoControlManagerNotificationParam& p_para
|
||||||
MxLong result = 0;
|
MxLong result = 0;
|
||||||
|
|
||||||
if (p_param.GetUnknown0x28() == 1) {
|
if (p_param.GetUnknown0x28() == 1) {
|
||||||
DeleteObjects(&m_atom, 500, 510);
|
DeleteObjects(&m_atom, InfodoorScript::c_iic037in_PlayWav, 510);
|
||||||
|
|
||||||
switch (p_param.GetClickedObjectId()) {
|
switch (p_param.GetClickedObjectId()) {
|
||||||
case InfodoorScript::c_LeftArrow_Ctl:
|
case InfodoorScript::c_LeftArrow_Ctl:
|
||||||
|
@ -167,7 +167,7 @@ void InfocenterDoor::Enable(MxBool p_enable)
|
||||||
// FUNCTION: LEGO1 0x10037cd0
|
// FUNCTION: LEGO1 0x10037cd0
|
||||||
MxBool InfocenterDoor::Escape()
|
MxBool InfocenterDoor::Escape()
|
||||||
{
|
{
|
||||||
DeleteObjects(&m_atom, 500, 510);
|
DeleteObjects(&m_atom, InfodoorScript::c_iic037in_PlayWav, 510);
|
||||||
m_destLocation = LegoGameState::e_infomain;
|
m_destLocation = LegoGameState::e_infomain;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue