diff --git a/.gitignore b/.gitignore
index 72d6fef6..7e16a6ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,7 @@ env.bak/
venv.bak/
ISLE.EXE
LEGO1.DLL
-build/
+/build/
*.swp
LEGO1PROGRESS.*
ISLEPROGRESS.*
diff --git a/LEGO1/lego/legoomni/src/build/buildingentity.cpp b/LEGO1/lego/legoomni/src/build/buildingentity.cpp
new file mode 100644
index 00000000..37a09f2f
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/buildingentity.cpp
@@ -0,0 +1,13 @@
+#include "buildingentity.h"
+
+// STUB: LEGO1 0x10014e20
+BuildingEntity::BuildingEntity()
+{
+ // TODO
+}
+
+// STUB: LEGO1 0x10015030
+BuildingEntity::~BuildingEntity()
+{
+ // TODO
+}
diff --git a/LEGO1/lego/legoomni/src/build/dunebuggy.cpp b/LEGO1/lego/legoomni/src/build/dunebuggy.cpp
new file mode 100644
index 00000000..a32b612d
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/dunebuggy.cpp
@@ -0,0 +1,12 @@
+#include "dunebuggy.h"
+
+#include "decomp.h"
+
+DECOMP_SIZE_ASSERT(DuneBuggy, 0x16c);
+
+// FUNCTION: LEGO1 0x10067bb0
+DuneBuggy::DuneBuggy()
+{
+ this->m_unk0x13c = 25.0;
+ this->m_unk0x164 = 1.0;
+}
diff --git a/LEGO1/lego/legoomni/src/build/helicopter.cpp b/LEGO1/lego/legoomni/src/build/helicopter.cpp
new file mode 100644
index 00000000..87ee1dcb
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/helicopter.cpp
@@ -0,0 +1,370 @@
+#include "helicopter.h"
+
+#include "act1state.h"
+#include "act3.h"
+#include "isle.h"
+#include "legoanimationmanager.h"
+#include "legocontrolmanager.h"
+#include "legogamestate.h"
+#include "legoomni.h"
+#include "legoutil.h"
+#include "legoworld.h"
+#include "mxtransitionmanager.h"
+
+DECOMP_SIZE_ASSERT(Helicopter, 0x230)
+
+// FUNCTION: LEGO1 0x10001e60
+Helicopter::Helicopter()
+{
+ m_unk0x13c = 60;
+}
+
+// FUNCTION: LEGO1 0x10003230
+Helicopter::~Helicopter()
+{
+ ControlManager()->Unregister(this);
+ IslePathActor::Destroy(TRUE);
+}
+
+// FUNCTION: LEGO1 0x100032c0
+MxResult Helicopter::Create(MxDSObject& p_dsObject)
+{
+ MxResult result = IslePathActor::Create(p_dsObject);
+ LegoWorld* world = GetCurrentWorld();
+ SetWorld(world);
+ if (world->IsA("Act3")) {
+ ((Act3*) GetWorld())->SetUnkown420c(this);
+ }
+ world = GetWorld();
+ if (world)
+ world->VTable0x58(this);
+ GetState();
+ return result;
+}
+
+// FUNCTION: LEGO1 0x10003320
+void Helicopter::GetState()
+{
+ m_state = (HelicopterState*) GameState()->GetState("HelicopterState");
+ if (!m_state)
+ m_state = (HelicopterState*) GameState()->CreateState("HelicopterState");
+}
+
+// FUNCTION: LEGO1 0x10003360
+void Helicopter::VTable0xe4()
+{
+ if (!GameState()->GetUnknown10()) {
+ VTable0xe8(0x28, TRUE, 7);
+ }
+ IslePathActor::VTable0xe4();
+ if (!GameState()->GetUnknown10()) {
+ GameState()->SetUnknown424(0x3c);
+ if (GetCurrentVehicle()) {
+ if (GetCurrentVehicle()->IsA("IslePathActor")) {
+ ((IslePathActor*) GetCurrentVehicle())->VTable0xe8(0x37, TRUE, 7);
+ }
+ }
+ }
+ m_state->SetUnknown8(0);
+ FUN_1003ee00(m_script, 0x16);
+ FUN_1003ee00(m_script, 0x17);
+ FUN_1003ee00(m_script, 0x18);
+ FUN_1003ee00(m_script, 0x19);
+ FUN_1003ee00(m_script, 0x1a);
+ FUN_1003ee00(m_script, 0x1b);
+ FUN_1003ee00(m_script, 0x1c);
+ FUN_1003ee00(m_script, 0x1d);
+ FUN_1003ee00(m_script, 0x1e);
+ FUN_1003ee00(m_script, 0x1f);
+ AnimationManager()->FUN_1005f6d0(TRUE);
+ ControlManager()->Unregister(this);
+}
+
+// FUNCTION: LEGO1 0x10003480
+MxU32 Helicopter::VTable0xcc()
+{
+ if (!FUN_1003ef60())
+ return 1;
+ if (!m_world)
+ m_world = GetCurrentWorld();
+ AnimationManager()->FUN_1005f6d0(FALSE);
+ if (GetCurrentVehicle()) {
+ if (GetCurrentVehicle()->VTable0x60() != GameState()->GetUnknownC()) {
+ GetCurrentVehicle()->VTable0xe4();
+ }
+ }
+ switch (GameState()->GetUnknown10()) {
+ case 0:
+ m_script = *g_isleScript;
+ AnimationManager()->FUN_10064670(FALSE);
+ VTable0xe8(0x29, TRUE, 7);
+ ((Isle*) GetCurrentWorld())->SetUnknown13c(0x3c);
+ FUN_10015820(1, 0);
+ TransitionManager()->StartTransition(MxTransitionManager::PIXELATION, 50, FALSE, TRUE);
+ SetUnknownDC(4);
+ PlayMusic(9);
+ break;
+ case 1:
+ m_script = *g_act2mainScript;
+ break;
+ case 2:
+ m_script = *g_act3Script;
+ break;
+ }
+ VTable0xe0();
+ InvokeAction(ExtraActionType_start, m_script, 0x15, NULL);
+ GetCurrentAction().SetObjectId(-1);
+ ControlManager()->Register(this);
+ return 1;
+}
+
+// FUNCTION: LEGO1 0x100035e0
+MxU32 Helicopter::VTable0xd4(MxType17NotificationParam& p_param)
+{
+ MxU32 ret = 0;
+ MxAtomId script;
+ switch (GameState()->GetUnknown10()) {
+ case 0:
+ script = *g_isleScript;
+ break;
+ case 1:
+ script = *g_act2mainScript;
+ break;
+ case 2:
+ script = *g_act3Script;
+ break;
+ }
+ if (p_param.GetUnknown28() == 1) {
+ switch (p_param.GetUnknown20()) {
+ case 0x17:
+ if (*g_act3Script == script) {
+ ((Act3*) GetCurrentWorld())->SetUnkown4270(2);
+ TransitionManager()->StartTransition(MxTransitionManager::PIXELATION, 50, FALSE, FALSE);
+ }
+ else if (m_state->GetUnkown8() != 0)
+ break;
+ VTable0xe4();
+ GameState()->SetUnknown424(0x42);
+ ret = 1;
+ break;
+ case 0x18: {
+ if (*g_act3Script == script)
+ break;
+ Act1State* state = (Act1State*) GameState()->GetState("Act1State");
+ if (m_state->GetUnkown8() == 0) {
+ state->SetUnknown18(4);
+ m_state->SetUnknown8(1);
+ m_world->FUN_1001fc80(this);
+ InvokeAction(ExtraActionType_start, script, 0x20, NULL);
+ SetUnknownDC(0);
+ }
+ ret = 1;
+ break;
+ }
+ case 0x19:
+ if (*g_act3Script == script)
+ break;
+ if (m_state->GetUnkown8() == 2) {
+ m_state->SetUnknown8(3);
+ m_world->FUN_1001fc80(this);
+ InvokeAction(ExtraActionType_start, script, 0x21, NULL);
+ SetUnknownDC(4);
+ }
+ ret = 1;
+ break;
+ case 0x1a:
+ if (*g_act3Script != script)
+ break;
+ ret = 1;
+ /* fall through */
+ case 0x1b:
+ if (*g_act3Script != script)
+ break;
+ if (m_world && m_world->GetCamera()) {
+ Vector3Data loc, dir, lookat;
+ loc.CopyFrom(m_world->GetCamera()->FUN_100127f0());
+ dir.CopyFrom(m_world->GetCamera()->FUN_100128a0());
+ lookat = dir;
+ float scale = 3;
+ lookat.Mul(scale);
+ lookat.Add(&loc);
+ Vector3Data v68, v7c, v90(0, 1, 0), va4;
+ v68.CopyFrom(m_world->GetCamera()->FUN_10012740());
+ va4.EqualsCross(v68, dir);
+ v7c.EqualsCross(va4, v90);
+ if (ret)
+ if (m_world->FUN_100727e0(m_unk0x138, loc, dir, v7c))
+ break;
+ else if (m_world->FUN_10072980(m_unk0x138, loc, dir, v7c))
+ break;
+ }
+ ret = 1;
+ break;
+ case 0x1c:
+ if (GameState()->GetUnknown10() == 0) {
+ ((Isle*) GetCurrentWorld())->SetUnknown13c(2);
+ TransitionManager()->StartTransition(MxTransitionManager::PIXELATION, 50, FALSE, FALSE);
+ VTable0xe4();
+ }
+ ret = 1;
+ break;
+ case 0x1d:
+ ret = 1;
+ break;
+ }
+ }
+ return ret;
+}
+
+// FUNCTION: LEGO1 0x10003c20
+MxU32 Helicopter::VTable0xd8(MxType18NotificationParam& p_param)
+{
+ switch (m_state->GetUnkown8()) {
+ case 1: {
+ if (GameState()->GetUnknown10() == 0) {
+ ((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(4);
+ VTable0xe8(0x2a, TRUE, 7);
+ }
+ else
+ VTable0xe8(0x31, TRUE, 7);
+ m_state->SetUnknown8(2);
+ Matrix4Data mat;
+ mat.SetIdentity();
+ Matrix4 mat2 = mat.GetMatrix();
+ float s = sin(0.5235987901687622); // PI / 6, 30 deg
+ float c = cos(0.5235987901687622); // PI / 6, 30 deg
+ for (MxS32 i = 0; i < 4; i++) {
+ mat.GetMatrix()[i][1] = mat2[i][1] * c - mat2[i][2] * s;
+ mat.GetMatrix()[i][2] = mat2[i][2] * c + mat2[i][1] * s;
+ }
+ Vector3Impl at(mat.GetMatrix()[3]), dir(mat.GetMatrix()[2]), up(mat.GetMatrix()[1]);
+ m_world->GetCamera()->LookAt(at, dir, up);
+ FUN_10010c30();
+ break;
+ }
+ case 3: {
+ Matrix4Data mat;
+ mat.SetIdentity();
+ Vector3Impl at(mat.GetMatrix()[3]), dir(mat.GetMatrix()[2]), up(mat.GetMatrix()[1]);
+ at[1] = 1.25;
+ m_world->GetCamera()->LookAt(at, dir, up);
+ if (GameState()->GetUnknown10() == 0) {
+ ((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(0);
+ VTable0xe8(0x29, TRUE, 7);
+ }
+ else
+ VTable0xe8(0x30, TRUE, 7);
+ m_state->SetUnknown8(0);
+ break;
+ }
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+// FUNCTION: LEGO1 0x10003e90
+void Helicopter::VTable0x74(Matrix4Impl& p_transform)
+{
+ if (m_unk0xea != 0) {
+ m_roi->FUN_100a46b0(p_transform);
+ FUN_10010c30();
+ }
+ else {
+ m_roi->FUN_100a58f0(p_transform);
+ m_roi->VTable0x14();
+ if (m_cameraFlag)
+ FUN_10010c30();
+ }
+}
+
+// FUNCTION: LEGO1 0x10003ee0
+void Helicopter::VTable0x70(float p_float)
+{
+ MxU32 state = m_state->GetUnkown8();
+ switch (state) {
+ default:
+ LegoPathActor::VTable0x70(p_float);
+ return;
+ case 4:
+ case 5:
+ float f = m_unk0x1f0 - p_float + 3000;
+ if (f >= 0) {
+ float f2 = f / 3000 + 1;
+ if (f2 < 0)
+ f2 = 0;
+ if (1.0f < f2)
+ f2 = 1.0f;
+ Vector3Impl v(m_unk0x160.GetMatrix()[3]);
+ Matrix4Data mat;
+ Vector3Impl v2(m_unk0x1a8.GetMatrix()[3]);
+ float* loc = m_unk0x1a8.GetMatrix()[3];
+ mat.SetIdentity();
+ float fa[4];
+ Vector4Impl v3(fa);
+ if (m_unk0x1f4.FUN_100040a0(v3, f2) == SUCCESS) {
+ mat.FromQuaternion(v3);
+ }
+ v2.SetVector(loc);
+ v2.Sub(&v);
+ v2.Mul(f2);
+ v2.Add(&v);
+ m_world->GetCamera()->FUN_100123e0(mat, 0);
+ }
+ else {
+ if (state == 4)
+ m_world->FUN_10073400();
+ else
+ m_world->FUN_10073430();
+ m_unk0xdc = 4;
+ }
+ }
+}
+
+// FUNCTION: LEGO1 0x100040a0
+MxResult HelicopterSubclass::FUN_100040a0(Vector4Impl& p_v, float p_f)
+{
+ MxU32 state = m_unk0x30;
+ if (state == 1) {
+ p_v.EqualsImpl(m_unk0x0.GetVector().elements);
+ p_v[3] = acos(p_v[3]) * (1 - p_f) * 2.0;
+ return p_v.NormalizeQuaternion();
+ }
+ else if (state == 2) {
+ p_v.EqualsImpl(m_unk0x18.GetVector().elements);
+ p_v[3] = acos(p_v[3]) * p_f * 2.0;
+ p_v.NormalizeQuaternion();
+ return p_v.NormalizeQuaternion();
+ }
+ else if (state == 3) {
+ double d1 = p_v.Dot(&m_unk0x0, &m_unk0x18), d2;
+ if (d1 + 1 > 0.00001) {
+ if (1 - d1 > 0.00001) {
+ double d = acos(d1);
+ sin(d);
+ d1 = sin((1 - p_f) * d) / sin(d);
+ d2 = sin(p_f * d) / sin(d);
+ }
+ else {
+ d1 = 1 - p_f;
+ d2 = p_f;
+ }
+ for (MxS32 i = 0; i < 4; i++) {
+ p_v[i] = m_unk0x18[i] * d2 + m_unk0x0[i] * d1;
+ }
+ return SUCCESS;
+ }
+ p_v[0] = -m_unk0x0[1];
+ p_v[1] = m_unk0x0[1];
+ p_v[2] = -m_unk0x0[3];
+ p_v[3] = m_unk0x0[2];
+ d1 = sin((1 - p_f) * 1.570796326794895);
+ d2 = sin(p_f * 1.570796326794895);
+ for (MxS32 i = 0; i < 3; i++) {
+ p_v[i] = m_unk0x0[i] * d1 + p_v[i] * d2;
+ }
+ return SUCCESS;
+ }
+ else
+ return FAILURE;
+}
diff --git a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp
new file mode 100644
index 00000000..70d71a0c
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp
@@ -0,0 +1 @@
+#include "helicopterstate.h"
diff --git a/LEGO1/lego/legoomni/src/build/jetski.cpp b/LEGO1/lego/legoomni/src/build/jetski.cpp
new file mode 100644
index 00000000..8bdf3fff
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/jetski.cpp
@@ -0,0 +1,11 @@
+#include "jetski.h"
+
+DECOMP_SIZE_ASSERT(Jetski, 0x164);
+
+// FUNCTION: LEGO1 0x1007e3b0
+Jetski::Jetski()
+{
+ this->m_unk0x13c = 25.0;
+ this->m_unk0x150 = 2.0;
+ this->m_unk0x148 = 1;
+}
diff --git a/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp b/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp
new file mode 100644
index 00000000..34652509
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp
@@ -0,0 +1,28 @@
+#include "legobuildingmanager.h"
+
+// GLOBAL: LEGO1 0x100f37cc
+int g_buildingManagerConfig = 1;
+
+// FUNCTION: LEGO1 0x1002f8b0
+void LegoBuildingManager::configureLegoBuildingManager(MxS32 p_buildingManagerConfig)
+{
+ g_buildingManagerConfig = p_buildingManagerConfig;
+}
+
+// FUNCTION: LEGO1 0x1002f8c0
+LegoBuildingManager::LegoBuildingManager()
+{
+ Init();
+}
+
+// STUB: LEGO1 0x1002f960
+LegoBuildingManager::~LegoBuildingManager()
+{
+ // TODO
+}
+
+// STUB: LEGO1 0x1002f9d0
+void LegoBuildingManager::Init()
+{
+ // TODO
+}
diff --git a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp
new file mode 100644
index 00000000..f75e4653
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp
@@ -0,0 +1,29 @@
+#include "legocarbuild.h"
+
+// STUB: LEGO1 0x100226d0
+LegoCarBuild::LegoCarBuild()
+{
+ // TODO
+}
+
+// STUB: LEGO1 0x10022a80
+LegoCarBuild::~LegoCarBuild()
+{
+ // TODO
+}
+
+// STUB: LEGO1 0x100238b0
+MxResult LegoCarBuild::Tickle()
+{
+ // TODO
+
+ return 0;
+}
+
+// STUB: LEGO1 0x10024050
+MxLong LegoCarBuild::Notify(MxParam& p_param)
+{
+ // TODO
+
+ return 0;
+}
diff --git a/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp b/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp
new file mode 100644
index 00000000..b0dccde2
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp
@@ -0,0 +1,25 @@
+#include "legovehiclebuildstate.h"
+
+#include "decomp.h"
+
+DECOMP_SIZE_ASSERT(LegoVehicleBuildState, 0x50); // 1000acd7
+DECOMP_SIZE_ASSERT(LegoVehicleBuildState::UnkStruct, 0xc);
+
+// FUNCTION: LEGO1 0x10017c00
+LegoVehicleBuildState::UnkStruct::UnkStruct()
+{
+ m_unk0x04 = 0;
+ m_unk0x00 = 0;
+ m_unk0x06 = 0;
+ m_unk0x08 = 0;
+}
+
+// FUNCTION: LEGO1 0x10025f30
+LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType)
+{
+ this->m_className = p_classType;
+ this->m_unk0x4c = 0;
+ this->m_unk0x4d = 0;
+ this->m_unk0x4e = 0;
+ this->m_placedPartCount = 0;
+}
diff --git a/LEGO1/lego/legoomni/src/build/racecar.cpp b/LEGO1/lego/legoomni/src/build/racecar.cpp
new file mode 100644
index 00000000..0fbc97b9
--- /dev/null
+++ b/LEGO1/lego/legoomni/src/build/racecar.cpp
@@ -0,0 +1,15 @@
+#include "racecar.h"
+
+DECOMP_SIZE_ASSERT(RaceCar, 0x164);
+
+// FUNCTION: LEGO1 0x10028200
+RaceCar::RaceCar()
+{
+ this->m_unk0x13c = 40.0;
+}
+
+// STUB: LEGO1 0x10028420
+RaceCar::~RaceCar()
+{
+ // TODO
+}
diff --git a/out.html b/out.html
new file mode 100644
index 00000000..116c566c
--- /dev/null
+++ b/out.html
@@ -0,0 +1,274 @@
+
+
+
+ Decompilation Status
+
+
+
+
+
+
Decompilation Status
+
+
+
+
+
+
+
+
+
diff --git a/qwe b/qwe
new file mode 100644
index 00000000..4ab31167
--- /dev/null
+++ b/qwe
@@ -0,0 +1,216 @@
+LEGO1/define.cpp
+LEGO1/lego/legoomni/src/act1/act1state.cpp
+LEGO1/lego/legoomni/src/act2/act2brick.cpp
+LEGO1/lego/legoomni/src/act2/act2policestation.cpp
+LEGO1/lego/legoomni/src/act2/legoact2state.cpp
+LEGO1/lego/legoomni/src/act3/act3.cpp
+LEGO1/lego/legoomni/src/act3/act3shark.cpp
+LEGO1/lego/legoomni/src/act3/act3state.cpp
+LEGO1/lego/legoomni/src/audio/legocachesound.cpp
+LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
+LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
+LEGO1/lego/legoomni/src/build/buildingentity.cpp
+LEGO1/lego/legoomni/src/build/dunebuggy.cpp
+LEGO1/lego/legoomni/src/build/helicopter.cpp
+LEGO1/lego/legoomni/src/build/helicopterstate.cpp
+LEGO1/lego/legoomni/src/build/jetski.cpp
+LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp
+LEGO1/lego/legoomni/src/build/legocarbuild.cpp
+LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp
+LEGO1/lego/legoomni/src/build/racecar.cpp
+LEGO1/lego/legoomni/src/common/animstate.cpp
+LEGO1/lego/legoomni/src/common/gifmanager.cpp
+LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp
+LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp
+LEGO1/lego/legoomni/src/common/legocameracontroller.cpp
+LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp
+LEGO1/lego/legoomni/src/common/legogamestate.cpp
+LEGO1/lego/legoomni/src/common/legonavcontroller.cpp
+LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp
+LEGO1/lego/legoomni/src/common/legoplantmanager.cpp
+LEGO1/lego/legoomni/src/common/legostate.cpp
+LEGO1/lego/legoomni/src/common/legostream.cpp
+LEGO1/lego/legoomni/src/common/legounksavedatawriter.cpp
+LEGO1/lego/legoomni/src/common/legoutil.cpp
+LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
+LEGO1/lego/legoomni/src/entity/legoactor.cpp
+LEGO1/lego/legoomni/src/entity/legoanimactor.cpp
+LEGO1/lego/legoomni/src/entity/legoentity.cpp
+LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
+LEGO1/lego/legoomni/src/entity/legojetski.cpp
+LEGO1/lego/legoomni/src/entity/legopathactor.cpp
+LEGO1/lego/legoomni/src/entity/legorace.cpp
+LEGO1/lego/legoomni/src/entity/legoworld.cpp
+LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp
+LEGO1/lego/legoomni/src/gasstation/gasstation.cpp
+LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp
+LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp
+LEGO1/lego/legoomni/src/hospital/ambulance.cpp
+LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp
+LEGO1/lego/legoomni/src/hospital/hospital.cpp
+LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp
+LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp
+LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp
+LEGO1/lego/legoomni/src/infocenter/infocenter.cpp
+LEGO1/lego/legoomni/src/infocenter/infocenterdoor.cpp
+LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp
+LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp
+LEGO1/lego/legoomni/src/infocenter/registrationbook.cpp
+LEGO1/lego/legoomni/src/infocenter/score.cpp
+LEGO1/lego/legoomni/src/infocenter/scorestate.cpp
+LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
+LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp
+LEGO1/lego/legoomni/src/isle/bike.cpp
+LEGO1/lego/legoomni/src/isle/bumpbouy.cpp
+LEGO1/lego/legoomni/src/isle/historybook.cpp
+LEGO1/lego/legoomni/src/isle/isleactor.cpp
+LEGO1/lego/legoomni/src/isle/isle.cpp
+LEGO1/lego/legoomni/src/isle/islepathactor.cpp
+LEGO1/lego/legoomni/src/isle/jukebox.cpp
+LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp
+LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp
+LEGO1/lego/legoomni/src/isle/motorcycle.cpp
+LEGO1/lego/legoomni/src/isle/radio.cpp
+LEGO1/lego/legoomni/src/isle/radiostate.cpp
+LEGO1/lego/legoomni/src/isle/skateboard.cpp
+LEGO1/lego/legoomni/src/main/legoomni.cpp
+LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp
+LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
+LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
+LEGO1/lego/legoomni/src/pizzeria/pizza.cpp
+LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp
+LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp
+LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp
+LEGO1/lego/legoomni/src/police/police.cpp
+LEGO1/lego/legoomni/src/police/policeentity.cpp
+LEGO1/lego/legoomni/src/police/policestate.cpp
+LEGO1/lego/legoomni/src/race/carrace.cpp
+LEGO1/lego/legoomni/src/race/jetskirace.cpp
+LEGO1/lego/legoomni/src/race/racestandsentity.cpp
+LEGO1/lego/legoomni/src/race/racestate.cpp
+LEGO1/lego/legoomni/src/towtrack/towtrack.cpp
+LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp
+LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp
+LEGO1/lego/legoomni/src/video/legoanimationmanager.cpp
+LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp
+LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp
+LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp
+LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
+LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp
+LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp
+LEGO1/lego/legoomni/src/video/legometerpresenter.cpp
+LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp
+LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp
+LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
+LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp
+LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp
+LEGO1/lego/legoomni/src/video/legovideomanager.cpp
+LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
+LEGO1/lego/sources/3dmanager/lego3dview.cpp
+LEGO1/lego/sources/3dmanager/legoview1.cpp
+LEGO1/lego/sources/3dmanager/tglsurface.cpp
+LEGO1/lego/sources/roi/legoroi.cpp
+LEGO1/mxdirectx/mxdirect3d.cpp
+LEGO1/mxdirectx/mxdirectdraw.cpp
+LEGO1/omni/src/action/mxdsaction.cpp
+LEGO1/omni/src/action/mxdsanim.cpp
+LEGO1/omni/src/action/mxdsevent.cpp
+LEGO1/omni/src/action/mxdsmediaaction.cpp
+LEGO1/omni/src/action/mxdsmultiaction.cpp
+LEGO1/omni/src/action/mxdsobjectaction.cpp
+LEGO1/omni/src/action/mxdsobject.cpp
+LEGO1/omni/src/action/mxdsparallelaction.cpp
+LEGO1/omni/src/action/mxdsselectaction.cpp
+LEGO1/omni/src/action/mxdsserialaction.cpp
+LEGO1/omni/src/action/mxdssound.cpp
+LEGO1/omni/src/action/mxdsstill.cpp
+LEGO1/omni/src/action/mxdsstreamingaction.cpp
+LEGO1/omni/src/audio/mxaudiomanager.cpp
+LEGO1/omni/src/audio/mxaudiopresenter.cpp
+LEGO1/omni/src/audio/mxbackgroundaudiomanager.cpp
+LEGO1/omni/src/audio/mxloopingmidipresenter.cpp
+LEGO1/omni/src/audio/mxmidipresenter.cpp
+LEGO1/omni/src/audio/mxmusicmanager.cpp
+LEGO1/omni/src/audio/mxmusicpresenter.cpp
+LEGO1/omni/src/audio/mxsoundmanager.cpp
+LEGO1/omni/src/audio/mxsoundpresenter.cpp
+LEGO1/omni/src/audio/mxwavepresenter.cpp
+LEGO1/omni/src/common/mxatomidcounter.cpp
+LEGO1/omni/src/common/mxatomid.cpp
+LEGO1/omni/src/common/mxcompositemediapresenter.cpp
+LEGO1/omni/src/common/mxcompositepresenter.cpp
+LEGO1/omni/src/common/mxcore.cpp
+LEGO1/omni/src/common/mxmediamanager.cpp
+LEGO1/omni/src/common/mxmediapresenter.cpp
+LEGO1/omni/src/common/mxobjectfactory.cpp
+LEGO1/omni/src/common/mxpresenter.cpp
+LEGO1/omni/src/common/mxstring.cpp
+LEGO1/omni/src/common/mxticklemanager.cpp
+LEGO1/omni/src/common/mxtimer.cpp
+LEGO1/omni/src/common/mxvariable.cpp
+LEGO1/omni/src/common/mxvariabletable.cpp
+LEGO1/omni/src/control/mxcontrolpresenter.cpp
+LEGO1/omni/src/entity/mxentity.cpp
+LEGO1/omni/src/event/mxeventmanager.cpp
+LEGO1/omni/src/event/mxeventpresenter.cpp
+LEGO1/omni/src/main/mxmain.cpp
+LEGO1/omni/src/main/mxomni.cpp
+LEGO1/omni/src/main/mxomnicreateflags.cpp
+LEGO1/omni/src/main/mxomnicreateparam.cpp
+LEGO1/omni/src/notify/mxactionnotificationparam.cpp
+LEGO1/omni/src/notify/mxnotificationmanager.cpp
+LEGO1/omni/src/notify/mxnotificationparam.cpp
+LEGO1/omni/src/notify/mxtype17notificationparam.cpp
+LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
+LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
+LEGO1/omni/src/stream/mxdsbuffer.cpp
+LEGO1/omni/src/stream/mxdschunk.cpp
+LEGO1/omni/src/stream/mxdsfile.cpp
+LEGO1/omni/src/stream/mxdssource.cpp
+LEGO1/omni/src/stream/mxdssubscriber.cpp
+LEGO1/omni/src/stream/mxioinfo.cpp
+LEGO1/omni/src/stream/mxramstreamcontroller.cpp
+LEGO1/omni/src/stream/mxramstreamprovider.cpp
+LEGO1/omni/src/stream/mxstreamchunk.cpp
+LEGO1/omni/src/stream/mxstreamcontroller.cpp
+LEGO1/omni/src/stream/mxstreamer.cpp
+LEGO1/omni/src/stream/mxstreamlist.cpp
+LEGO1/omni/src/stream/mxstreamprovider.cpp
+LEGO1/omni/src/system/mxautolocker.cpp
+LEGO1/omni/src/system/mxcriticalsection.cpp
+LEGO1/omni/src/system/mxscheduler.cpp
+LEGO1/omni/src/system/mxsemaphore.cpp
+LEGO1/omni/src/system/mxthread.cpp
+LEGO1/omni/src/video/mxbitmap.cpp
+LEGO1/omni/src/video/mxdisplaysurface.cpp
+LEGO1/omni/src/video/mxflcpresenter.cpp
+LEGO1/omni/src/video/mxloopingflcpresenter.cpp
+LEGO1/omni/src/video/mxloopingsmkpresenter.cpp
+LEGO1/omni/src/video/mxpalette.cpp
+LEGO1/omni/src/video/mxregion.cpp
+LEGO1/omni/src/video/mxregioncursor.cpp
+LEGO1/omni/src/video/mxsmack.cpp
+LEGO1/omni/src/video/mxsmkpresenter.cpp
+LEGO1/omni/src/video/mxstillpresenter.cpp
+LEGO1/omni/src/video/mxtransitionmanager.cpp
+LEGO1/omni/src/video/mxvideomanager.cpp
+LEGO1/omni/src/video/mxvideoparam.cpp
+LEGO1/omni/src/video/mxvideoparamflags.cpp
+LEGO1/omni/src/video/mxvideopresenter.cpp
+LEGO1/realtime/matrix.cpp
+LEGO1/realtime/orientableroi.cpp
+LEGO1/realtime/realtime.cpp
+LEGO1/realtime/realtimeview.cpp
+LEGO1/realtime/vector.cpp
+LEGO1/tgl/d3drm/camera.cpp
+LEGO1/tgl/d3drm/device.cpp
+LEGO1/tgl/d3drm/group.cpp
+LEGO1/tgl/d3drm/light.cpp
+LEGO1/tgl/d3drm/mesh.cpp
+LEGO1/tgl/d3drm/renderer.cpp
+LEGO1/tgl/d3drm/texture.cpp
+LEGO1/tgl/d3drm/unk.cpp
+LEGO1/tgl/d3drm/view.cpp
+LEGO1/viewmanager/viewlodlist.cpp
+LEGO1/viewmanager/viewmanager.cpp
+LEGO1/viewmanager/viewroi.cpp
diff --git a/tools/isledecomp/.gitignore b/tools/isledecomp/.gitignore
index 00aa29cb..a7c50887 100644
--- a/tools/isledecomp/.gitignore
+++ b/tools/isledecomp/.gitignore
@@ -1 +1,2 @@
-isledecomp.egg-info/
\ No newline at end of file
+isledecomp.egg-info/
+build
\ No newline at end of file