Merge branch 'master' into pizzadonuts

This commit is contained in:
Christian Semmler 2024-12-09 15:35:40 -07:00 committed by GitHub
commit 2c37be5cca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 346 additions and 36 deletions

View File

@ -28,8 +28,11 @@ class Act2Actor : public LegoAnimActor {
MxS32 VTable0xa0() override; // vtable+0xa0 MxS32 VTable0xa0() override; // vtable+0xa0
void FUN_10018980(); void FUN_10018980();
void FUN_10019250(MxFloat p_speed, MxFloat p_param2);
void FUN_10019520(); void FUN_10019520();
void FUN_10019560(); void FUN_10019560();
undefined4 FUN_10019700(MxFloat p_param);
void FUN_100199f0(MxS8 p_param);
void FUN_100192a0(undefined4 p_param); void FUN_100192a0(undefined4 p_param);
// SYNTHETIC: LEGO1 0x1001a0a0 // SYNTHETIC: LEGO1 0x1001a0a0
@ -44,16 +47,16 @@ class Act2Actor : public LegoAnimActor {
MxS8 m_unk0x1d; // 0x1d MxS8 m_unk0x1d; // 0x1d
undefined m_unk0x1e; // 0x1e undefined m_unk0x1e; // 0x1e
MxBool m_unk0x1f; // 0x1f MxBool m_unk0x1f; // 0x1f
undefined4 m_unk0x20; // 0x20 MxFloat m_unk0x20; // 0x20
undefined4 m_unk0x24; // 0x24 MxFloat m_unk0x24; // 0x24
MxS8 m_unk0x28; // 0x28 MxS8 m_unk0x28; // 0x28
undefined4 m_unk0x2c; // 0x2c MxFloat m_unk0x2c; // 0x2c
undefined4 m_unk0x30; // 0x30 MxFloat m_unk0x30; // 0x30
LegoAnimActorStruct* m_shootAnim; // 0x34 LegoAnimActorStruct* m_shootAnim; // 0x34
LegoCacheSound* m_unk0x38; // 0x38 LegoCacheSound* m_unk0x38; // 0x38
undefined4 m_unk0x3c; // 0x3c undefined4 m_unk0x3c; // 0x3c
undefined m_unk0x40; // 0x40 undefined m_unk0x40; // 0x40
undefined4 m_unk0x44; // 0x44 MxFloat m_unk0x44; // 0x44
MxS8 m_unk0x48; // 0x48 MxS8 m_unk0x48; // 0x48
undefined4 m_unk0x4c; // 0x4c undefined4 m_unk0x4c; // 0x4c
}; };

View File

@ -68,6 +68,17 @@ class LegoAct2 : public LegoWorld {
void SetUnknown0x1138(Act2Actor* p_unk0x1138) { m_unk0x1138 = p_unk0x1138; } void SetUnknown0x1138(Act2Actor* p_unk0x1138) { m_unk0x1138 = p_unk0x1138; }
void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; } void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
MxResult FUN_100516b0();
void FUN_100517b0();
MxResult FUN_10052560(
Act2mainScript::Script p_objectId,
MxBool p_param2,
MxBool p_param3,
Mx3DPointFloat* p_location,
Mx3DPointFloat* p_direction,
Mx3DPointFloat* p_param6
);
// SYNTHETIC: LEGO1 0x1004fe20 // SYNTHETIC: LEGO1 0x1004fe20
// LegoAct2::`scalar deleting destructor' // LegoAct2::`scalar deleting destructor'
@ -83,14 +94,6 @@ class LegoAct2 : public LegoWorld {
void SpawnBricks(); void SpawnBricks();
void FUN_10051fa0(MxS32 p_param1); void FUN_10051fa0(MxS32 p_param1);
void FUN_100521f0(MxS32 p_param1); void FUN_100521f0(MxS32 p_param1);
MxResult FUN_10052560(
Act2mainScript::Script p_objectId,
MxBool p_param2,
MxBool p_param3,
Mx3DPointFloat* p_location,
Mx3DPointFloat* p_direction,
Mx3DPointFloat* p_param6
);
MxResult FUN_10052800(); MxResult FUN_10052800();
Act2Brick m_bricks[10]; // 0x00f8 Act2Brick m_bricks[10]; // 0x00f8

View File

@ -101,7 +101,7 @@ class LegoAnimActor : public virtual LegoPathActor {
// uninitialized_fill_n // uninitialized_fill_n
// TEMPLATE: LEGO1 0x1001ca10 // TEMPLATE: LEGO1 0x1001ca10
// uninitialized_copy // ?uninitialized_copy@@YAPAPAULegoAnimActorStruct@@PAPAU1@00@Z
// clang-format on // clang-format on
#endif // LEGOANIMACTOR_H #endif // LEGOANIMACTOR_H

View File

@ -101,7 +101,7 @@ class LegoCharacterManager {
// list<ROI *,allocator<ROI *> >::_Buynode // list<ROI *,allocator<ROI *> >::_Buynode
// TEMPLATE: LEGO1 0x10035790 // TEMPLATE: LEGO1 0x10035790
// _Construct // ?_Construct@@YAXPAPAVROI@@ABQAV1@@Z
// TEMPLATE: LEGO1 0x10082b90 // TEMPLATE: LEGO1 0x10082b90
// _Tree<char *,pair<char * const,LegoCharacter *>,map<char *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::~_Tree<char *,pair<char * const,LegoCharacter *>,map<char *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> > // _Tree<char *,pair<char * const,LegoCharacter *>,map<char *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >::~_Tree<char *,pair<char * const,LegoCharacter *>,map<char *,LegoCharacter *,LegoCharacterComparator,allocator<LegoCharacter *> >::_Kfn,LegoCharacterComparator,allocator<LegoCharacter *> >

View File

@ -87,6 +87,6 @@ class LegoExtraActor : public virtual LegoAnimActor {
// vector<unsigned char *,allocator<unsigned char *> >::size // vector<unsigned char *,allocator<unsigned char *> >::size
// TEMPLATE: LEGO1 0x1002b720 // TEMPLATE: LEGO1 0x1002b720
// uninitialized_copy // ?uninitialized_copy@@YAPAPAEPAPAE00@Z
#endif // LEGOEXTRAACTOR_H #endif // LEGOEXTRAACTOR_H

View File

@ -85,7 +85,10 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::find // _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::find
// TEMPLATE: LEGO1 0x1002c4c0 // TEMPLATE: LEGO1 0x1002c4c0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Copy // ?_Copy@?$_Tree@PAVLegoPathActor@@PAV1@U_Kfn@?$set@PAVLegoPathActor@@ULegoPathActorSetCompare@@V?$allocator@PAVLegoPathActor@@@@@@ULegoPathActorSetCompare@@V?$allocator@PAVLegoPathActor@@@@@@IAEXABV1@@Z
// TEMPLATE: LEGO1 0x1002c5b0
// ?_Copy@?$_Tree@PAVLegoPathActor@@PAV1@U_Kfn@?$set@PAVLegoPathActor@@ULegoPathActorSetCompare@@V?$allocator@PAVLegoPathActor@@@@@@ULegoPathActorSetCompare@@V?$allocator@PAVLegoPathActor@@@@@@IAEPAU_Node@1@PAU21@0@Z
// TEMPLATE: LEGO1 0x1002c630 // TEMPLATE: LEGO1 0x1002c630
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Erase // _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Erase
@ -122,7 +125,7 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Rrotate // _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Rrotate
// TEMPLATE: LEGO1 0x1004a7a0 // TEMPLATE: LEGO1 0x1004a7a0
// _Construct // ?_Construct@@YAXPAPAVMxCore@@ABQAV1@@Z
// TEMPLATE: LEGO1 0x10056c20 // TEMPLATE: LEGO1 0x10056c20
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::~_Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoA // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::~_Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoA
@ -131,7 +134,7 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::iterator::_Inc // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::iterator::_Inc
// TEMPLATE: LEGO1 0x10056d30 // TEMPLATE: LEGO1 0x10056d30
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::erase // ?erase@?$_Tree@PAVLegoAnimPresenter@@PAV1@U_Kfn@?$set@PAVLegoAnimPresenter@@ULegoAnimPresenterSetCompare@@V?$allocator@PAVLegoAnimPresenter@@@@@@ULegoAnimPresenterSetCompare@@V?$allocator@PAVLegoAnimPresenter@@@@@@QAE?AViterator@1@V21@@Z
// TEMPLATE: LEGO1 0x10057180 // TEMPLATE: LEGO1 0x10057180
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Erase // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Erase
@ -167,7 +170,7 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Rrotate // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Rrotate
// TEMPLATE: LEGO1 0x10058820 // TEMPLATE: LEGO1 0x10058820
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::erase // ?erase@?$_Tree@PAVLegoAnimPresenter@@PAV1@U_Kfn@?$set@PAVLegoAnimPresenter@@ULegoAnimPresenterSetCompare@@V?$allocator@PAVLegoAnimPresenter@@@@@@ULegoAnimPresenterSetCompare@@V?$allocator@PAVLegoAnimPresenter@@@@@@QAE?AViterator@1@V21@0@Z
// TEMPLATE: LEGO1 0x100588e0 // TEMPLATE: LEGO1 0x100588e0
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::equal_range // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::equal_range
@ -176,7 +179,7 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Lbound // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Lbound
// TEMPLATE: LEGO1 0x10058980 // TEMPLATE: LEGO1 0x10058980
// _Construct // ?_Construct@@YAXPAPAVLegoAnimPresenter@@ABQAV1@@Z
// TEMPLATE: LEGO1 0x100589a0 // TEMPLATE: LEGO1 0x100589a0
// _Distance // _Distance

View File

@ -195,7 +195,7 @@ class LegoPathController : public MxCore {
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::iterator::_Inc // _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::iterator::_Inc
// TEMPLATE: LEGO1 0x100452b0 // TEMPLATE: LEGO1 0x100452b0
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::erase // ?erase@?$_Tree@PAULegoPathCtrlEdge@@PAU1@U_Kfn@?$set@PAULegoPathCtrlEdge@@ULegoPathCtrlEdgeCompare@@V?$allocator@PAULegoPathCtrlEdge@@@@@@ULegoPathCtrlEdgeCompare@@V?$allocator@PAULegoPathCtrlEdge@@@@@@QAE?AViterator@1@V21@@Z
// TEMPLATE: LEGO1 0x10045700 // TEMPLATE: LEGO1 0x10045700
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Erase // _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Erase
@ -315,10 +315,10 @@ class LegoPathController : public MxCore {
// multiset<LegoBEWithFloat *,LegoBEWithFloatComparator,allocator<LegoBEWithFloat *> >::~multiset<LegoBEWithFloat *,LegoBEWithFloatComparator,allocator<LegoBEWithFloat *> > // multiset<LegoBEWithFloat *,LegoBEWithFloatComparator,allocator<LegoBEWithFloat *> >::~multiset<LegoBEWithFloat *,LegoBEWithFloatComparator,allocator<LegoBEWithFloat *> >
// TEMPLATE: LEGO1 0x1004a760 // TEMPLATE: LEGO1 0x1004a760
// _Construct // ?_Construct@@YAXPAPAULegoBEWithFloat@@ABQAU1@@Z
// TEMPLATE: LEGO1 0x1004a780 // TEMPLATE: LEGO1 0x1004a780
// _Construct // ?_Construct@@YAXPAPAULegoPathCtrlEdge@@ABQAU1@@Z
// GLOBAL: LEGO1 0x100f4360 // GLOBAL: LEGO1 0x100f4360
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Nil // _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Nil

View File

@ -193,7 +193,7 @@ class LegoWorld : public LegoEntity {
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::find // _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::find
// TEMPLATE: LEGO1 0x10022360 // TEMPLATE: LEGO1 0x10022360
// ?_Construct@@YAXPAPAVMxCore@@ABQAV1@@Z // ?_Construct@@YAXPAPAVLegoPathActor@@ABQAV1@@Z
// GLOBAL: LEGO1 0x100f11a0 // GLOBAL: LEGO1 0x100f11a0
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Nil // _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Nil

View File

@ -1,11 +1,19 @@
#include "act2actor.h" #include "act2actor.h"
#include "3dmanager/lego3dmanager.h"
#include "act2main_actions.h"
#include "legoact2.h"
#include "legocachesoundmanager.h" #include "legocachesoundmanager.h"
#include "legopathcontroller.h" #include "legopathcontroller.h"
#include "legopathedgecontainer.h" #include "legopathedgecontainer.h"
#include "legosoundmanager.h" #include "legosoundmanager.h"
#include "legovideomanager.h"
#include "legoworld.h"
#include "misc.h" #include "misc.h"
#include "roi/legoroi.h" #include "roi/legoroi.h"
#include "viewmanager/viewmanager.h"
#include <vec.h>
DECOMP_SIZE_ASSERT(Act2Actor, 0x1a8) DECOMP_SIZE_ASSERT(Act2Actor, 0x1a8)
DECOMP_SIZE_ASSERT(Act2Actor::UnknownListStructure, 0x20) DECOMP_SIZE_ASSERT(Act2Actor::UnknownListStructure, 0x20)
@ -26,6 +34,21 @@ Act2Actor::UnknownListStructure g_unk0x100f0db8[] = {
{{-44.6, 0.1, 45.3}, {0.95, 0.0, -0.3}, "edg00_154", FALSE}, {{-44.6, 0.1, 45.3}, {0.95, 0.0, -0.3}, "edg00_154", FALSE},
}; };
// GLOBAL: LEGO1 0x100f0f1c
MxFloat g_unk0x100f0f1c = 0.0f;
// GLOBAL: LEGO1 0x10102b1c
// GLOBAL: BETA10 0x10209f60
undefined4 g_nextHeadWavIndex = 0;
// GLOBAL: LEGO1 0x10102b20
// GLOBAL: BETA10 0x10209f64
undefined4 g_nextBehindWavIndex = 0;
// GLOBAL: LEGO1 0x10102b24
// GLOBAL: BETA10 0x10209f68
undefined4 g_nextInterruptWavIndex = 0;
// FUNCTION: LEGO1 0x100187e0 // FUNCTION: LEGO1 0x100187e0
// FUNCTION: BETA10 0x1000c7fb // FUNCTION: BETA10 0x1000c7fb
Act2Actor::Act2Actor() Act2Actor::Act2Actor()
@ -115,11 +138,186 @@ MxResult Act2Actor::VTable0x9c()
} }
} }
// STUB: LEGO1 0x10018c30 // FUNCTION: LEGO1 0x10018c30
// STUB: BETA10 0x1000cb52 // FUNCTION: BETA10 0x1000cb52
void Act2Actor::VTable0x70(float p_time) void Act2Actor::VTable0x70(float p_time)
{ {
// TODO int dummy1; // for BETA10, not sure what it is being used for
#ifdef NDEBUG
MxFloat local48float = 0.0f;
if (g_unk0x100f0f1c != 0.0f) {
local48float = p_time - g_unk0x100f0f1c;
}
g_unk0x100f0f1c = p_time;
#endif
LegoAnimActor::VTable0x70(p_time);
if (m_unk0x44 != 0.0f && m_unk0x44 < p_time) {
SetWorldSpeed(m_unk0x28);
}
if (m_unk0x1f) {
if (m_unk0x20 > 600.0f) {
m_unk0x1f = FALSE;
m_unk0x20 = 0;
}
else {
#ifdef NDEBUG
m_unk0x20 += local48float;
#endif
MxMatrix matrix = m_roi->GetLocal2World();
matrix[3][1] += 3.0f;
m_roi->UpdateTransformationRelativeToParent(matrix);
#ifdef NDEBUG
LegoROI* brickstrROI = FindROI("brickstr");
MxMatrix brickstrMatrix = brickstrROI->GetLocal2World();
brickstrMatrix[3][1] += 3.0f;
brickstrROI->UpdateTransformationRelativeToParent(brickstrMatrix);
#endif
return;
}
}
if (!m_grec) {
if (m_unk0x1e == 2) {
m_unk0x1e = 0;
m_unk0x2c = m_shootAnim->GetDuration() + p_time;
m_unk0x30 = m_unk0x2c - 1300.0f;
SetWorldSpeed(0);
m_unk0x1c = FALSE;
}
else if (m_unk0x1e == 1) {
FindROI("pwrbrik")->SetVisibility(FALSE);
FindROI("debrick")->SetVisibility(FALSE);
FindROI("ray")->SetVisibility(FALSE);
m_unk0x4c = 0;
m_unk0x1e = 2;
VTable0xa0();
FUN_10019250(m_unk0x28 + 3, p_time + 3000.0f);
}
else if (m_unk0x1e == 0) {
if (m_unk0x40) {
m_unk0x40 = 0;
m_unk0x2c = m_shootAnim->GetDuration() + p_time;
m_unk0x30 = m_unk0x2c - 1300.0f;
}
if (FUN_10019700(p_time) == 1) {
return;
}
}
else if (m_unk0x1e == 5) {
FindROI("brickstr")->SetVisibility(FALSE);
GetROI()->SetVisibility(FALSE);
CurrentWorld()->RemoveActor(this);
return;
}
#ifdef NDEBUG
else if (m_unk0x1e == 4) {
if (m_worldSpeed == 0.0f) {
return;
}
SetWorldSpeed(0.0f);
((LegoAct2*) CurrentWorld())->FUN_100517b0();
return;
}
#endif
}
if (m_unk0x1e == 5 || m_unk0x1e == 4) {
return;
}
if (m_unk0x1e == 3) {
if (p_time - m_unk0x24 > 600.0f) {
m_unk0x1e = 2;
FUN_10019250(m_unk0x28 + 4, p_time + 15000.0f);
}
}
else {
LegoROI* roiPepper = FindROI("pepper");
if (roiPepper) {
ViewManager* vm = VideoManager()->Get3DManager()->GetLego3DView()->GetViewManager();
assert(vm);
MxU32 inFrustum = vm->IsBoundingBoxInFrustum(m_roi->GetWorldBoundingBox());
if (inFrustum) {
Mx3DPointFloat local18(roiPepper->GetWorldDirection());
Mx3DPointFloat local30(m_roi->GetWorldPosition());
Mx3DPointFloat local60(roiPepper->GetWorldPosition());
local30 -= local60;
local30.Unitize();
MxFloat dotproduct = local18.Dot(&local30, &local18);
if (dotproduct >= 0.0) {
const MxFloat* pepperWorldPosition = roiPepper->GetWorldPosition();
const MxFloat* worldPosition = m_roi->GetWorldPosition();
MxFloat distance1 = DISTSQRD3(pepperWorldPosition, worldPosition);
if (distance1 < 75.0f) {
if (!m_unk0x1c) {
m_unk0x1c = 1;
if (!m_unk0x1e) {
FUN_100199f0(2);
m_unk0x1e = 1;
}
else {
LegoROI* childROI = m_roi->FindChildROI("windsd", m_roi);
const MxFloat* childPosition = childROI->GetWorldPosition();
MxFloat distance2 = DISTSQRD3(pepperWorldPosition, childPosition);
childROI = m_roi->FindChildROI("reardr", m_roi);
childPosition = childROI->GetWorldPosition();
MxFloat distance3 = DISTSQRD3(pepperWorldPosition, childPosition);
if (distance3 > distance2) {
FUN_100199f0(0);
}
else
#ifdef NDEBUG
if (p_time - m_unk0x24 > 3000.0f) {
#endif
SetWorldSpeed(m_unk0x28 - 1);
m_unk0x1e = 3;
m_unk0x24 = p_time;
if (!((LegoAct2*) CurrentWorld())->FUN_100516b0()) {
FUN_100199f0(1);
}
#ifdef NDEBUG
}
#endif
}
}
}
else {
if (m_unk0x1c) {
m_unk0x1c = 0;
}
}
}
}
}
}
}
// FUNCTION: LEGO1 0x10019250
// FUNCTION: BETA10 0x1000d45c
void Act2Actor::FUN_10019250(MxFloat p_speed, MxFloat p_param2)
{
// The arguments have been changed from BETA10 to LEGO1
SetWorldSpeed(p_speed);
m_unk0x44 = p_param2;
} }
// FUNCTION: LEGO1 0x10019280 // FUNCTION: LEGO1 0x10019280
@ -298,6 +496,84 @@ MxS32 Act2Actor::VTable0xa0()
} }
} }
// STUB: LEGO1 0x10019700
// STUB: BETA10 0x1000dd27
undefined4 Act2Actor::FUN_10019700(MxFloat p_param)
{
// TODO
return 0;
}
// FUNCTION: LEGO1 0x100199f0
// FUNCTION: BETA10 0x1000e11a
void Act2Actor::FUN_100199f0(MxS8 p_param)
{
switch (p_param) {
case 0:
switch (g_nextHeadWavIndex) {
case 0:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOhead0_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextHeadWavIndex++;
break;
default:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOhead1_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextHeadWavIndex = 0;
break;
}
break;
case 1:
switch (g_nextBehindWavIndex) {
case 0:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VObehind0_PlayWav, FALSE, TRUE, NULL, NULL, NULL);
g_nextBehindWavIndex++;
break;
case 1:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VObehind1_PlayWav, FALSE, TRUE, NULL, NULL, NULL);
g_nextBehindWavIndex++;
break;
case 2:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VObehind2_PlayWav, FALSE, TRUE, NULL, NULL, NULL);
g_nextBehindWavIndex++;
break;
default:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VObehind3_PlayWav, FALSE, TRUE, NULL, NULL, NULL);
g_nextBehindWavIndex = 0;
break;
}
break;
case 2:
switch (g_nextInterruptWavIndex) {
case 0:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOinterrupt0_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextInterruptWavIndex++;
break;
case 1:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOinterrupt1_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextInterruptWavIndex++;
break;
case 2:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOinterrupt2_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextInterruptWavIndex++;
break;
default:
((LegoAct2*) CurrentWorld())
->FUN_10052560(Act2mainScript::c_VOinterrupt3_PlayWav, FALSE, FALSE, NULL, NULL, NULL);
g_nextInterruptWavIndex = 0;
break;
}
}
}
// FUNCTION: LEGO1 0x1001a180 // FUNCTION: LEGO1 0x1001a180
MxS32 Act2Actor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) MxS32 Act2Actor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
{ {

View File

@ -339,6 +339,7 @@ MxResult LegoWorld::PlaceActor(
} }
// FUNCTION: LEGO1 0x1001fc80 // FUNCTION: LEGO1 0x1001fc80
// FUNCTION: BETA10 0x100da4bf
void LegoWorld::RemoveActor(LegoPathActor* p_actor) void LegoWorld::RemoveActor(LegoPathActor* p_actor)
{ {
LegoPathControllerListCursor cursor(&m_list0x68); LegoPathControllerListCursor cursor(&m_list0x68);

View File

@ -408,8 +408,8 @@ void LegoOmni::DeleteObject(MxDSAction& p_dsAction)
// FUNCTION: BETA10 0x1008ea6d // FUNCTION: BETA10 0x1008ea6d
LegoROI* LegoOmni::FindROI(const char* p_name) LegoROI* LegoOmni::FindROI(const char* p_name)
{ {
ViewManager* viewManager = GetVideoManager()->Get3DManager()->GetLego3DView()->GetViewManager(); const CompoundObject& rois =
const CompoundObject& rois = viewManager->GetROIs(); ((LegoVideoManager*) m_videoManager)->Get3DManager()->GetLego3DView()->GetViewManager()->GetROIs();
if (p_name != NULL && *p_name != '\0' && rois.size() > 0) { if (p_name != NULL && *p_name != '\0' && rois.size() > 0) {
for (CompoundObject::const_iterator it = rois.begin(); it != rois.end(); it++) { for (CompoundObject::const_iterator it = rois.begin(); it != rois.end(); it++) {

View File

@ -30,7 +30,7 @@ LegoAnimActorStruct::~LegoAnimActorStruct()
} }
// FUNCTION: LEGO1 0x1001c130 // FUNCTION: LEGO1 0x1001c130
// FUNCTION: BETA10 0x1003df5f // FUNCTION: BETA10 0x1003df3a
float LegoAnimActorStruct::GetDuration() float LegoAnimActorStruct::GetDuration()
{ {
assert(m_AnimTreePtr); assert(m_AnimTreePtr);
@ -70,8 +70,11 @@ void LegoAnimActor::VTable0x74(Matrix4& p_transform)
} }
// FUNCTION: LEGO1 0x1001c290 // FUNCTION: LEGO1 0x1001c290
// FUNCTION: BETA10 0x1003e144
void LegoAnimActor::VTable0x70(float p_time) void LegoAnimActor::VTable0x70(float p_time)
{ {
assert(m_roi);
if (m_lastTime == 0) { if (m_lastTime == 0) {
m_lastTime = p_time - 1.0f; m_lastTime = p_time - 1.0f;
} }

View File

@ -380,6 +380,7 @@ void LegoPathActor::VTable0x74(Matrix4& p_transform)
} }
// FUNCTION: LEGO1 0x1002e790 // FUNCTION: LEGO1 0x1002e790
// FUNCTION: BETA10 0x100af208
void LegoPathActor::VTable0x70(float p_time) void LegoPathActor::VTable0x70(float p_time)
{ {
MxMatrix transform; MxMatrix transform;

View File

@ -289,6 +289,7 @@ void LegoAnimPresenter::FUN_100692b0()
} }
// FUNCTION: LEGO1 0x100695c0 // FUNCTION: LEGO1 0x100695c0
// FUNCTION: BETA10 0x1004f359
void LegoAnimPresenter::FUN_100695c0() void LegoAnimPresenter::FUN_100695c0()
{ {
m_unk0x70 = new LegoROIList(); m_unk0x70 = new LegoROIList();

View File

@ -659,6 +659,20 @@ MxLong LegoAct2::HandlePathStruct(LegoPathStructNotificationParam& p_param)
return 0; return 0;
} }
// STUB: LEGO1 0x100516b0
// STUB: BETA10 0x1003bcbc
MxResult LegoAct2::FUN_100516b0()
{
// TODO
return SUCCESS;
}
// STUB: LEGO1 0x100517b0
void LegoAct2::FUN_100517b0()
{
// TODO
}
// FUNCTION: LEGO1 0x10051840 // FUNCTION: LEGO1 0x10051840
void LegoAct2::PlayMusic(JukeboxScript::Script p_objectId) void LegoAct2::PlayMusic(JukeboxScript::Script p_objectId)
{ {

View File

@ -46,7 +46,7 @@ class Lego3DView : public LegoView1 {
// //
// Lego3DView implementation // Lego3DView implementation
// FUNCTION: BETA10 0x100576b0 // FUNCTION: BETA10 0x10011810
inline ViewManager* Lego3DView::GetViewManager() inline ViewManager* Lego3DView::GetViewManager()
{ {
return m_pViewManager; return m_pViewManager;

View File

@ -44,7 +44,7 @@ class Mx3DPointFloat : public Vector3 {
float& index_operator(int idx) { return m_data[idx]; } float& index_operator(int idx) { return m_data[idx]; }
// SYNTHETIC: LEGO1 0x10010c00 // SYNTHETIC: LEGO1 0x10010c00
// Mx3DPointFloat::operator= // ??4Mx3DPointFloat@@QAEAAV0@ABV0@@Z
private: private:
float m_elements[3]; // 0x08 float m_elements[3]; // 0x08
@ -80,7 +80,7 @@ class Mx4DPointFloat : public Vector4 {
// SYNTHETIC: LEGO1 0x10064b20 // SYNTHETIC: LEGO1 0x10064b20
// SYNTHETIC: BETA10 0x10070420 // SYNTHETIC: BETA10 0x10070420
// Mx4DPointFloat::operator= // ??4Mx4DPointFloat@@QAEAAV0@ABV0@@Z
private: private:
float m_elements[4]; // 0x08 float m_elements[4]; // 0x08

View File

@ -13,6 +13,7 @@ class MxMatrix : public Matrix4 {
MxMatrix() : Matrix4(m_elements) {} MxMatrix() : Matrix4(m_elements) {}
// FUNCTION: LEGO1 0x10032770 // FUNCTION: LEGO1 0x10032770
// FUNCTION: BETA10 0x1001ff30
MxMatrix(const MxMatrix& p_matrix) : Matrix4(m_elements) { Equals(p_matrix); } MxMatrix(const MxMatrix& p_matrix) : Matrix4(m_elements) { Equals(p_matrix); }
// FUNCTION: BETA10 0x1000fc20 // FUNCTION: BETA10 0x1000fc20

View File

@ -39,7 +39,9 @@ class ViewManager {
inline static int CalculateLODLevel(float p_und1, float p_und2, ViewROI* p_roi); inline static int CalculateLODLevel(float p_und1, float p_und2, ViewROI* p_roi);
inline static int IsROIVisibleAtLOD(ViewROI* p_roi); inline static int IsROIVisibleAtLOD(ViewROI* p_roi);
// FUNCTION: BETA10 0x100576b0
const CompoundObject& GetROIs() { return rois; } const CompoundObject& GetROIs() { return rois; }
void Add(ViewROI* p_roi) { rois.push_back(p_roi); } void Add(ViewROI* p_roi) { rois.push_back(p_roi); }
// SYNTHETIC: LEGO1 0x100a6000 // SYNTHETIC: LEGO1 0x100a6000

View File

@ -58,8 +58,10 @@ If you're interested in helping or contributing to this project, check out the [
### Which version of LEGO Island do I have? ### Which version of LEGO Island do I have?
Right click on `LEGO1.DLL`, select `Properties`, and switch to the `Details` tab. Under `Version` you should either see `1.0.0.0` (1.0) or `1.1.0.0` (1.1). Additionally, you can look at the game disc files; 1.0's files will all say August 8, 1997, and 1.1's files will all say September 8, 1997. Version 1.1 is by far the most common, especially if you're not using the English or Japanese versions, so that's most likely the version you have. Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation is specifically targeting the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below: Right click on `LEGO1.DLL`, select `Properties`, and switch to the `Details` tab. Under `Version` you should either see `1.0.0.0` (1.0) or `1.1.0.0` (1.1). Additionally, you can look at the game disc files; 1.0's files will all say August 8, 1997, and 1.1's files will all say September 8, 1997. Version 1.1 is by far the most common, especially if you're not using the English or Japanese versions, so that's most likely the version you have.
Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation is specifically targeting the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below:
* ISLE.EXE `md5: f6da12249e03eed1c74810cd23beb9f5` * ISLE.EXE `md5: f6da12249e03eed1c74810cd23beb9f5`
* LEGO1.DLL `md5: 4e2f6d969ea2ef8655ba3fc221a0c8fe` * LEGO1.DLL `md5: 4e2f6d969ea2ef8655ba3fc221a0c8fe`
* CONFIG.DLL `md5: 92d958a64a273662c591c88b09100f4a` * CONFIG.EXE `md5: 92d958a64a273662c591c88b09100f4a`