Introduce clang-format (#240)

This commit is contained in:
Christian Semmler
2023-10-24 19:38:27 -04:00
committed by GitHub
parent e928fc9425
commit b449da1fa3
408 changed files with 12434 additions and 12813 deletions

25
.clang-format Normal file
View File

@@ -0,0 +1,25 @@
BasedOnStyle: Microsoft
AccessModifierOffset: -4
AlignAfterOpenBracket: BlockIndent
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: InlineOnly
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BracedInitializerIndentWidth: 4
BraceWrapping:
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterStruct: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
IncludeBlocks: Regroup
IndentAccessModifiers: false
IndentWidth: 4
PointerAlignment: Left
SpaceAfterCStyleCast: true
TabWidth: 4
UseTab: ForContinuationAndIndentation

View File

@@ -1,7 +1,13 @@
root = true root = true
[*.{cpp,h,py,txt,editorconfig}]
[*.{py,txt,editorconfig}]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
[*.{cpp,h}]
indent_style = tab
tab_width = 4
insert_final_newline = true
trim_trailing_whitespace = true

20
.github/workflows/format.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Format
on: [push, pull_request]
jobs:
clang-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run clang-format
run: |
pipx run "clang-format>=17,<18" \
--Werror \
--dry-run \
--style=file \
ISLE/*.cpp ISLE/*.h \
LEGO1/*.cpp LEGO1/*.h \
LEGO1/realtime/*.cpp LEGO1/realtime/*.h

View File

@@ -1,8 +1,6 @@
#include "isleapp.h" #include "isleapp.h"
#include "define.h" #include "define.h"
#include <dsound.h>
#include "legoanimationmanager.h" #include "legoanimationmanager.h"
#include "legobuildingmanager.h" #include "legobuildingmanager.h"
#include "legogamestate.h" #include "legogamestate.h"
@@ -22,9 +20,10 @@
#include "mxticklemanager.h" #include "mxticklemanager.h"
#include "mxtimer.h" #include "mxtimer.h"
#include "mxtransitionmanager.h" #include "mxtransitionmanager.h"
#include "res/resource.h" #include "res/resource.h"
#include <dsound.h>
// OFFSET: ISLE 0x401000 // OFFSET: ISLE 0x401000
IsleApp::IsleApp() IsleApp::IsleApp()
{ {
@@ -129,7 +128,9 @@ BOOL IsleApp::SetupLegoOmni()
char mediaPath[256]; char mediaPath[256];
GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath)); GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath));
BOOL failure = Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__ *) m_windowHandle, m_videoParam, MxOmniCreateFlags())) == FAILURE; BOOL failure =
Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags())
) == FAILURE;
if (!failure) { if (!failure) {
VariableTable()->SetVariable("ACTOR_01", ""); VariableTable()->SetVariable("ACTOR_01", "");
TickleManager()->SetClientTickleInterval(VideoManager(), 10); TickleManager()->SetClientTickleInterval(VideoManager(), 10);
@@ -140,9 +141,17 @@ BOOL IsleApp::SetupLegoOmni()
} }
// OFFSET: ISLE 0x401560 // OFFSET: ISLE 0x401560
void IsleApp::SetupVideoFlags(BOOL fullScreen, BOOL flipSurfaces, BOOL backBuffers, void IsleApp::SetupVideoFlags(
BOOL using8bit, BOOL using16bit, BOOL param_6, BOOL param_7, BOOL fullScreen,
BOOL wideViewAngle, char *deviceId) BOOL flipSurfaces,
BOOL backBuffers,
BOOL using8bit,
BOOL using16bit,
BOOL param_6,
BOOL param_7,
BOOL wideViewAngle,
char* deviceId
)
{ {
m_videoParam.flags().SetFullScreen(fullScreen); m_videoParam.flags().SetFullScreen(fullScreen);
m_videoParam.flags().SetFlipSurfaces(flipSurfaces); m_videoParam.flags().SetFlipSurfaces(flipSurfaces);
@@ -183,8 +192,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// Throw error if sound unavailable // Throw error if sound unavailable
if (!soundReady) { if (!soundReady) {
MessageBoxA(NULL, "\"LEGO\xAE Island\" is not detecting a DirectSound compatible sound card. Please quit all other applications and try again.", MessageBoxA(
"Lego Island Error", MB_OK); NULL,
"\"LEGO\xAE Island\" is not detecting a DirectSound compatible sound card. Please quit all other "
"applications and try again.",
"Lego Island Error",
MB_OK
);
return 0; return 0;
} }
@@ -193,7 +207,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// Create window // Create window
if (g_isle->SetupWindow(hInstance, lpCmdLine) != SUCCESS) { if (g_isle->SetupWindow(hInstance, lpCmdLine) != SUCCESS) {
MessageBoxA(NULL, "\"LEGO\xAE Island\" failed to start. Please quit all other applications and try again.", "LEGO\xAE Island Error", MB_OK); MessageBoxA(
NULL,
"\"LEGO\xAE Island\" failed to start. Please quit all other applications and try again.",
"LEGO\xAE Island Error",
MB_OK
);
return 0; return 0;
} }
@@ -203,12 +222,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
window = g_isle->m_windowHandle; window = g_isle->m_windowHandle;
} }
// Load accelerators (this call actually achieves nothing - there is no "AppAccel" resource in the original - but we'll keep this for authenticity) // Load accelerators (this call actually achieves nothing - there is no "AppAccel" resource in the original - but
// This line may actually be here because it's in DFVIEW, an example project that ships with // we'll keep this for authenticity) This line may actually be here because it's in DFVIEW, an example project that
// MSVC420, and was such a clean example of a Win32 app, that it was later adapted // ships with MSVC420, and was such a clean example of a Win32 app, that it was later adapted into an "ExeSkeleton"
// into an "ExeSkeleton" sample for MSVC600. It's quite possible Mindscape derived // sample for MSVC600. It's quite possible Mindscape derived this app from that example since they no longer had the
// this app from that example since they no longer had the luxury of the // luxury of the MFC AppWizard which we know they used for the frontend used during development (ISLEMFC.EXE,
// MFC AppWizard which we know they used for the frontend used during development (ISLEMFC.EXE, MAIN.EXE, et al.) // MAIN.EXE, et al.)
LoadAcceleratorsA(hInstance, "AppAccel"); LoadAcceleratorsA(hInstance, "AppAccel");
MSG msg; MSG msg;
@@ -230,11 +249,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
} }
MSG nextMsg; MSG nextMsg;
if (!g_isle if (!g_isle || !g_isle->m_windowHandle || msg.message != WM_MOUSEMOVE ||
|| !g_isle->m_windowHandle !PeekMessageA(&nextMsg, NULL, 0, 0, PM_NOREMOVE) || nextMsg.message != WM_MOUSEMOVE) {
|| msg.message != WM_MOUSEMOVE
|| !PeekMessageA(&nextMsg, NULL, 0, 0, PM_NOREMOVE)
|| nextMsg.message != WM_MOUSEMOVE) {
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessageA(&msg); DispatchMessageA(&msg);
} }
@@ -309,9 +325,14 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_ACTIVATEAPP: case WM_ACTIVATEAPP:
if (g_isle) { if (g_isle) {
if ((wParam != 0) && (g_isle->m_fullScreen)) { if ((wParam != 0) && (g_isle->m_fullScreen)) {
MoveWindow(hWnd, g_windowRect.left, g_windowRect.top, MoveWindow(
hWnd,
g_windowRect.left,
g_windowRect.top,
(g_windowRect.right - g_windowRect.left) + 1, (g_windowRect.right - g_windowRect.left) + 1,
(g_windowRect.bottom - g_windowRect.top) + 1, TRUE); (g_windowRect.bottom - g_windowRect.top) + 1,
TRUE
);
} }
g_isle->m_windowActive = wParam; g_isle->m_windowActive = wParam;
} }
@@ -346,7 +367,8 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PostMessageA(g_isle->m_windowHandle, WM_CLOSE, 0, 0); PostMessageA(g_isle->m_windowHandle, WM_CLOSE, 0, 0);
return 0; return 0;
} }
} else if (g_isle && g_isle->m_fullScreen && (wParam == SC_MOVE || wParam == SC_KEYMENU)) { }
else if (g_isle && g_isle->m_fullScreen && (wParam == SC_MOVE || wParam == SC_KEYMENU)) {
return 0; return 0;
} }
return DefWindowProcA(hWnd, uMsg, wParam, lParam); return DefWindowProcA(hWnd, uMsg, wParam, lParam);
@@ -364,7 +386,8 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
} }
return DefWindowProcA(hWnd, uMsg, wParam, lParam); return DefWindowProcA(hWnd, uMsg, wParam, lParam);
case WM_DISPLAYCHANGE: case WM_DISPLAYCHANGE:
if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D() && VideoManager()->GetDirect3D()->GetDeviceModeFinder()) { if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D() &&
VideoManager()->GetDirect3D()->GetDeviceModeFinder()) {
int targetWidth = LOWORD(lParam); int targetWidth = LOWORD(lParam);
int targetHeight = HIWORD(lParam); int targetHeight = HIWORD(lParam);
int targetDepth = wParam; int targetDepth = wParam;
@@ -463,8 +486,17 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
LoadConfig(); LoadConfig();
SetupVideoFlags(m_fullScreen, m_flipSurfaces, m_backBuffersInVram, m_using8bit, SetupVideoFlags(
m_using16bit, m_unk24, FALSE, m_wideViewAngle, m_deviceId); m_fullScreen,
m_flipSurfaces,
m_backBuffersInVram,
m_using8bit,
m_using16bit,
m_unk24,
FALSE,
m_wideViewAngle,
m_deviceId
);
MxOmni::SetSound3D(m_use3dSound); MxOmni::SetSound3D(m_use3dSound);
@@ -501,9 +533,13 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
g_windowRect.top, g_windowRect.top,
g_windowRect.right - g_windowRect.left + 1, g_windowRect.right - g_windowRect.left + 1,
g_windowRect.bottom - g_windowRect.top + 1, g_windowRect.bottom - g_windowRect.top + 1,
NULL, NULL, hInstance, NULL NULL,
NULL,
hInstance,
NULL
); );
} else { }
else {
AdjustWindowRectEx(&g_windowRect, WS_CAPTION | WS_SYSMENU, 0, WS_EX_APPWINDOW); AdjustWindowRectEx(&g_windowRect, WS_CAPTION | WS_SYSMENU, 0, WS_EX_APPWINDOW);
m_windowHandle = CreateWindowExA( m_windowHandle = CreateWindowExA(
@@ -515,7 +551,10 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
CW_USEDEFAULT, CW_USEDEFAULT,
g_windowRect.right - g_windowRect.left + 1, g_windowRect.right - g_windowRect.left + 1,
g_windowRect.bottom - g_windowRect.top + 1, g_windowRect.bottom - g_windowRect.top + 1,
NULL, NULL, hInstance, NULL NULL,
NULL,
hInstance,
NULL
); );
} }
@@ -524,7 +563,14 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
} }
if (m_fullScreen) { if (m_fullScreen) {
MoveWindow(m_windowHandle, g_windowRect.left, g_windowRect.top, (g_windowRect.right - g_windowRect.left) + 1, (g_windowRect.bottom - g_windowRect.top) + 1, TRUE); MoveWindow(
m_windowHandle,
g_windowRect.left,
g_windowRect.top,
(g_windowRect.right - g_windowRect.left) + 1,
(g_windowRect.bottom - g_windowRect.top) + 1,
TRUE
);
} }
ShowWindow(m_windowHandle, SW_SHOWNORMAL); ShowWindow(m_windowHandle, SW_SHOWNORMAL);
@@ -563,7 +609,14 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine)
} }
} }
if (m_fullScreen) { if (m_fullScreen) {
MoveWindow(m_windowHandle, g_windowRect.left, g_windowRect.top, (g_windowRect.right - g_windowRect.left) + 1, (g_windowRect.bottom - g_windowRect.top) + 1, TRUE); MoveWindow(
m_windowHandle,
g_windowRect.left,
g_windowRect.top,
(g_windowRect.right - g_windowRect.left) + 1,
(g_windowRect.bottom - g_windowRect.top) + 1,
TRUE
);
} }
ShowWindow(m_windowHandle, SW_SHOWNORMAL); ShowWindow(m_windowHandle, SW_SHOWNORMAL);
UpdateWindow(m_windowHandle); UpdateWindow(m_windowHandle);
@@ -664,7 +717,8 @@ void IsleApp::LoadConfig()
if (ReadRegInt("Display Bit Depth", &bitDepth)) { if (ReadRegInt("Display Bit Depth", &bitDepth)) {
if (bitDepth == 8) { if (bitDepth == 8) {
m_using8bit = TRUE; m_using8bit = TRUE;
} else if (bitDepth == 16) { }
else if (bitDepth == 16) {
m_using16bit = TRUE; m_using16bit = TRUE;
} }
} }
@@ -698,9 +752,12 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
return; return;
} }
if (!Lego()) return; if (!Lego())
if (!TickleManager()) return; return;
if (!Timer()) return; if (!TickleManager())
return;
if (!Timer())
return;
MxLong currentTime = Timer()->GetRealTime(); MxLong currentTime = Timer()->GetRealTime();
if (currentTime < g_lastFrameTime) { if (currentTime < g_lastFrameTime) {
@@ -742,7 +799,8 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
if (Start(&ds) != SUCCESS) { if (Start(&ds) != SUCCESS) {
return; return;
} }
} else { }
else {
ds.SetAtomId(stream->GetAtom()); ds.SetAtomId(stream->GetAtom());
ds.SetUnknown24(-1); ds.SetUnknown24(-1);
ds.SetObjectId(0); ds.SetObjectId(0);

View File

@@ -1,13 +1,12 @@
#ifndef ISLEAPP_H #ifndef ISLEAPP_H
#define ISLEAPP_H #define ISLEAPP_H
#include <windows.h>
#include "mxtypes.h" #include "mxtypes.h"
#include "mxvideoparam.h" #include "mxvideoparam.h"
class IsleApp #include <windows.h>
{
class IsleApp {
public: public:
IsleApp(); IsleApp();
~IsleApp(); ~IsleApp();
@@ -15,9 +14,17 @@ public:
void Close(); void Close();
BOOL SetupLegoOmni(); BOOL SetupLegoOmni();
void SetupVideoFlags(BOOL fullScreen, BOOL flipSurfaces, BOOL backBuffers, void SetupVideoFlags(
BOOL using8bit, BOOL using16bit, BOOL param_6, BOOL param_7, BOOL fullScreen,
BOOL wideViewAngle, char *deviceId); BOOL flipSurfaces,
BOOL backBuffers,
BOOL using8bit,
BOOL using16bit,
BOOL param_6,
BOOL param_7,
BOOL wideViewAngle,
char* deviceId
);
MxResult SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine); MxResult SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine);
BOOL ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize); BOOL ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize);

View File

@@ -5,4 +5,3 @@ Act1State::Act1State()
{ {
// TODO // TODO
} }

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d7028 // VTABLE 0x100d7028
// SIZE 0x26c // SIZE 0x26c
class Act1State : public LegoState class Act1State : public LegoState {
{
public: public:
Act1State(); Act1State();

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d9b60 // VTABLE 0x100d9b60
// SIZE 0x194 // SIZE 0x194
class Act2Brick : public LegoPathActor class Act2Brick : public LegoPathActor {
{
public: public:
Act2Brick(); Act2Brick();
virtual ~Act2Brick() override; // vtable+0x0 virtual ~Act2Brick() override; // vtable+0x0
@@ -26,7 +25,6 @@ public:
{ {
return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name); return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name);
} }
}; };
#endif // ACT2BRICK_H #endif // ACT2BRICK_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d53a8 // VTABLE 0x100d53a8
// SIZE 0x68 // SIZE 0x68
class Act2PoliceStation : public LegoEntity class Act2PoliceStation : public LegoEntity {
{
public: public:
virtual MxLong Notify(MxParam& p) override; // vtable+0x4 virtual MxLong Notify(MxParam& p) override; // vtable+0x4

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d9628 // VTABLE 0x100d9628
// SIZE 0x4274 // SIZE 0x4274
class Act3 : public LegoWorld class Act3 : public LegoWorld {
{
public: public:
Act3(); Act3();
@@ -26,11 +25,11 @@ public:
} }
inline void SetUnkown420c(MxEntity* p_entity) { m_unk420c = p_entity; } inline void SetUnkown420c(MxEntity* p_entity) { m_unk420c = p_entity; }
protected: protected:
undefined m_unkf8[0x4114]; undefined m_unkf8[0x4114];
MxEntity* m_unk420c; MxEntity* m_unk420c;
undefined m_unk4210[0x64]; undefined m_unk4210[0x64];
}; };
#endif // ACT3_H #endif // ACT3_H

View File

@@ -3,8 +3,7 @@
// FIXME: Uncertain location. There are three vtables which eventually call this // FIXME: Uncertain location. There are three vtables which eventually call this
// class' ClassName() function, but none of them call it directly. // class' ClassName() function, but none of them call it directly.
class Act3Actor class Act3Actor {
{
public: public:
// OFFSET: LEGO1 0x100431b0 // OFFSET: LEGO1 0x100431b0
inline virtual const char* ClassName() override inline virtual const char* ClassName() override
@@ -12,7 +11,6 @@ public:
// 0x100f03ac // 0x100f03ac
return "Act3Actor"; return "Act3Actor";
} }
}; };
#endif // ACT3ACTOR_H #endif // ACT3ACTOR_H

View File

@@ -4,8 +4,7 @@
#include "legoanimactor.h" #include "legoanimactor.h"
// VTABLE 0x100d7920 // VTABLE 0x100d7920
class Act3Shark : public LegoAnimActor class Act3Shark : public LegoAnimActor {
{
public: public:
// OFFSET: LEGO1 0x100430c0 // OFFSET: LEGO1 0x100430c0
inline virtual const char* ClassName() const override inline virtual const char* ClassName() const override

View File

@@ -5,13 +5,9 @@
// VTABLE 0x100d4fc8 // VTABLE 0x100d4fc8
// SIZE 0xc // SIZE 0xc
class Act3State : public LegoState class Act3State : public LegoState {
{
public: public:
inline Act3State() inline Act3State() { m_unk08 = 0; }
{
m_unk08 = 0;
}
// OFFSET: LEGO1 0x1000e300 // OFFSET: LEGO1 0x1000e300
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -31,7 +27,6 @@ public:
private: private:
// FIXME: May be part of LegoState? Uncertain... // FIXME: May be part of LegoState? Uncertain...
MxU32 m_unk08; MxU32 m_unk08;
}; };
#endif // ACT3STATE_H #endif // ACT3STATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d71a8 // VTABLE 0x100d71a8
// SIZE 0x184 // SIZE 0x184
class Ambulance : public IslePathActor class Ambulance : public IslePathActor {
{
public: public:
Ambulance(); Ambulance();
@@ -22,6 +21,7 @@ public:
{ {
return !strcmp(name, Ambulance::ClassName()) || IslePathActor::IsA(name); return !strcmp(name, Ambulance::ClassName()) || IslePathActor::IsA(name);
} }
private: private:
// TODO: Ambulance fields // TODO: Ambulance fields
undefined m_unk160[4]; undefined m_unk160[4];

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d72a0 // VTABLE 0x100d72a0
// SIZE 0x24 // SIZE 0x24
class AmbulanceMissionState : public LegoState class AmbulanceMissionState : public LegoState {
{
public: public:
AmbulanceMissionState(); AmbulanceMissionState();
@@ -25,16 +24,22 @@ public:
inline MxU16 GetColor(MxU8 id) inline MxU16 GetColor(MxU8 id)
{ {
switch (id) switch (id) {
{ case 1:
case 1: return m_color1; return m_color1;
case 2: return m_color2; case 2:
case 3: return m_color3; return m_color2;
case 4: return m_color4; case 3:
case 5: return m_color5; return m_color3;
default: return 0; case 4:
return m_color4;
case 5:
return m_color5;
default:
return 0;
} }
} }
protected: protected:
undefined m_unk8[0x12]; undefined m_unk8[0x12];
MxU16 m_color1; MxU16 m_color1;
@@ -44,5 +49,4 @@ protected:
MxU16 m_color5; MxU16 m_color5;
}; };
#endif // AMBULANCEMISSIONSTATE_H #endif // AMBULANCEMISSIONSTATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d8d80 // VTABLE 0x100d8d80
// SIZE 0x1c // SIZE 0x1c
class AnimState : public LegoState class AnimState : public LegoState {
{
public: public:
AnimState(); AnimState();
virtual ~AnimState() override; // vtable+0x0 virtual ~AnimState() override; // vtable+0x0
@@ -23,7 +22,6 @@ public:
{ {
return !strcmp(name, AnimState::ClassName()) || LegoState::IsA(name); return !strcmp(name, AnimState::ClassName()) || LegoState::IsA(name);
} }
}; };
#endif // ANIMSTATE_H #endif // ANIMSTATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4a18 // VTABLE 0x100d4a18
// SIZE 0x68 // SIZE 0x68
class BeachHouseEntity : public BuildingEntity class BeachHouseEntity : public BuildingEntity {
{
public: public:
virtual MxLong Notify(MxParam& p) override; // vtable+04 virtual MxLong Notify(MxParam& p) override; // vtable+04

View File

@@ -9,4 +9,3 @@ Bike::Bike()
this->m_unk150 = 3.0; this->m_unk150 = 3.0;
this->m_unk148 = 1; this->m_unk148 = 1;
} }

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d9808 // VTABLE 0x100d9808
// SIZE 0x164 // SIZE 0x164
class Bike : public IslePathActor class Bike : public IslePathActor {
{
public: public:
Bike(); Bike();
@@ -23,10 +22,10 @@ public:
{ {
return !strcmp(name, Bike::ClassName()) || IslePathActor::IsA(name); return !strcmp(name, Bike::ClassName()) || IslePathActor::IsA(name);
} }
private: private:
// TODO: Bike fields // TODO: Bike fields
undefined m_unk160[4]; undefined m_unk160[4];
}; };
#endif // BIKE_H #endif // BIKE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5c88 // VTABLE 0x100d5c88
// SIZE <= 0x68, hard to tell because it's always constructed as a derivative // SIZE <= 0x68, hard to tell because it's always constructed as a derivative
class BuildingEntity : public LegoEntity class BuildingEntity : public LegoEntity {
{
public: public:
BuildingEntity(); BuildingEntity();
virtual ~BuildingEntity() override; // vtable+0x0 virtual ~BuildingEntity() override; // vtable+0x0

View File

@@ -5,8 +5,7 @@
#include "mxtypes.h" #include "mxtypes.h"
// VTABLE 0x100d6790 // VTABLE 0x100d6790
class BumpBouy : public LegoAnimActor class BumpBouy : public LegoAnimActor {
{
public: public:
// OFFSET: LEGO1 0x100274e0 // OFFSET: LEGO1 0x100274e0
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5e50 // VTABLE 0x100d5e50
// SIZE 0x154 // SIZE 0x154
class CarRace : public LegoRace class CarRace : public LegoRace {
{
public: public:
CarRace(); CarRace();

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4b70 // VTABLE 0x100d4b70
// SIZE 0x2c // SIZE 0x2c
class CarRaceState : public RaceState class CarRaceState : public RaceState {
{
public: public:
// OFFSET: LEGO1 0x1000dd30 // OFFSET: LEGO1 0x1000dd30
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -20,7 +20,10 @@
#pragma warning(disable : 4786) #pragma warning(disable : 4786)
// To really remove *all* of the warnings, we have to employ the following, // To really remove *all* of the warnings, we have to employ the following,
// obscure workaround from https://www.earthli.com/news/view_article.php?id=376 // obscure workaround from https://www.earthli.com/news/view_article.php?id=376
static class msVC6_4786WorkAround { public: msVC6_4786WorkAround() {} } msVC6_4786WorkAround; static class msVC6_4786WorkAround {
public:
msVC6_4786WorkAround() {}
} msVC6_4786WorkAround;
#define MSVC420_VERSION 1020 #define MSVC420_VERSION 1020

View File

@@ -2,7 +2,11 @@
#define DECOMP_H #define DECOMP_H
#if defined(_MSC_VER) #if defined(_MSC_VER)
#define DECOMP_STATIC_ASSERT(V) namespace { typedef int foo[(V)?1:-1]; } #define DECOMP_STATIC_ASSERT(V) \
namespace \
{ \
typedef int foo[(V) ? 1 : -1]; \
}
#define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S) #define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S)
#else #else
#define DECOMP_STATIC_ASSERT(V) #define DECOMP_STATIC_ASSERT(V)

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4788 // VTABLE 0x100d4788
// SIZE 0x1f8 // SIZE 0x1f8
class Doors : public LegoPathActor class Doors : public LegoPathActor {
{
public: public:
// OFFSET: LEGO1 0x1000e430 // OFFSET: LEGO1 0x1000e430
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -22,5 +21,4 @@ public:
} }
}; };
#endif // DOORS_H #endif // DOORS_H

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d8f98 // VTABLE 0x100d8f98
// SIZE 0x16c // SIZE 0x16c
class DuneBuggy : public IslePathActor class DuneBuggy : public IslePathActor {
{
public: public:
DuneBuggy(); DuneBuggy();
@@ -23,6 +22,7 @@ public:
{ {
return !strcmp(name, DuneBuggy::ClassName()) || IslePathActor::IsA(name); return !strcmp(name, DuneBuggy::ClassName()) || IslePathActor::IsA(name);
} }
private: private:
// TODO: Double check DuneBuggy field types // TODO: Double check DuneBuggy field types
undefined4 m_unk160; undefined4 m_unk160;

View File

@@ -4,8 +4,7 @@
#include "legoworld.h" #include "legoworld.h"
// VTABLE 0x100d5f20 // VTABLE 0x100d5f20
class ElevatorBottom : public LegoWorld class ElevatorBottom : public LegoWorld {
{
public: public:
ElevatorBottom(); ElevatorBottom();
virtual ~ElevatorBottom() override; // vtable+0x0 virtual ~ElevatorBottom() override; // vtable+0x0
@@ -24,7 +23,6 @@ public:
{ {
return !strcmp(name, ElevatorBottom::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, ElevatorBottom::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // ELEVATORBOTTOM_H #endif // ELEVATORBOTTOM_H

View File

@@ -3,8 +3,7 @@
// Items related to the Extra string of key-value pairs found in MxOb // Items related to the Extra string of key-value pairs found in MxOb
enum ExtraActionType enum ExtraActionType {
{
ExtraActionType_opendisk = 1, ExtraActionType_opendisk = 1,
ExtraActionType_openram = 2, ExtraActionType_openram = 2,
ExtraActionType_close = 3, ExtraActionType_close = 3,

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d4650 // VTABLE 0x100d4650
// SIZE 0x128 // SIZE 0x128
// Radio variable at 0x46, in constructor // Radio variable at 0x46, in constructor
class GasStation : public LegoWorld class GasStation : public LegoWorld {
{
public: public:
GasStation(); GasStation();
virtual ~GasStation() override; // vtable+0x0 virtual ~GasStation() override; // vtable+0x0
@@ -27,7 +26,6 @@ public:
{ {
return !strcmp(name, GasStation::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, GasStation::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // GASSTATION_H #endif // GASSTATION_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5258 // VTABLE 0x100d5258
// SIZE 0x68 // SIZE 0x68
class GasStationEntity : public BuildingEntity class GasStationEntity : public BuildingEntity {
{
public: public:
// OFFSET: LEGO1 0x1000eb20 // OFFSET: LEGO1 0x1000eb20
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d46e0 // VTABLE 0x100d46e0
// SIZE 0x24 // SIZE 0x24
class GasStationState : public LegoState class GasStationState : public LegoState {
{
public: public:
GasStationState(); GasStationState();

View File

@@ -4,11 +4,10 @@
#include "decomp.h" #include "decomp.h"
#include "mxtypes.h" #include "mxtypes.h"
#include <ddraw.h>
#include <d3drmobj.h> #include <d3drmobj.h>
#include <ddraw.h>
struct GifData struct GifData {
{
public: public:
const char* m_name; const char* m_name;
LPDIRECTDRAWSURFACE m_surface; LPDIRECTDRAWSURFACE m_surface;
@@ -17,8 +16,7 @@ public:
MxU8* m_data; MxU8* m_data;
}; };
struct GifMapEntry struct GifMapEntry {
{
public: public:
GifMapEntry* m_right; GifMapEntry* m_right;
GifMapEntry* m_parent; GifMapEntry* m_parent;
@@ -27,12 +25,12 @@ public:
GifData* m_value; GifData* m_value;
}; };
class GifMap class GifMap {
{
public: public:
GifMapEntry* FindNode(const char*& string); GifMapEntry* FindNode(const char*& string);
inline GifData *Get(const char *string) { inline GifData* Get(const char* string)
{
GifData* ret = NULL; GifData* ret = NULL;
GifMapEntry* entry = FindNode(string); GifMapEntry* entry = FindNode(string);
if (((m_unk4 == entry || strcmp(string, entry->m_key) > 0) ? m_unk4 : entry) != entry) if (((m_unk4 == entry || strcmp(string, entry->m_key) > 0) ? m_unk4 : entry) != entry)
@@ -45,8 +43,7 @@ public:
}; };
// VTABLE 0x100d86d4 // VTABLE 0x100d86d4
class GifManagerBase class GifManagerBase {
{
public: public:
// OFFSET: LEGO1 0x1005a310 STUB // OFFSET: LEGO1 0x1005a310 STUB
virtual ~GifManagerBase() {} // vtable+00 virtual ~GifManagerBase() {} // vtable+00
@@ -60,8 +57,7 @@ protected:
}; };
// VTABLE 0x100d86fc // VTABLE 0x100d86fc
class GifManager : public GifManagerBase class GifManager : public GifManagerBase {
{
public: public:
// OFFSET: LEGO1 0x1005a580 STUB // OFFSET: LEGO1 0x1005a580 STUB
virtual ~GifManager() {} // vtable+00 virtual ~GifManager() {} // vtable+00

View File

@@ -1,4 +1,5 @@
#include "helicopter.h" #include "helicopter.h"
#include "act3.h" #include "act3.h"
#include "legoanimationmanager.h" #include "legoanimationmanager.h"
#include "legocontrolmanager.h" #include "legocontrolmanager.h"
@@ -32,7 +33,8 @@ MxResult Helicopter::InitFromMxDSObject(MxDSObject &p_dsObject)
((Act3*) GetWorld())->SetUnkown420c(this); ((Act3*) GetWorld())->SetUnkown420c(this);
} }
world = GetWorld(); world = GetWorld();
if (world) world->VTable0x58(this); if (world)
world->VTable0x58(this);
GetState(); GetState();
return result; return result;
} }
@@ -41,7 +43,8 @@ MxResult Helicopter::InitFromMxDSObject(MxDSObject &p_dsObject)
void Helicopter::GetState() void Helicopter::GetState()
{ {
m_state = (HelicopterState*) GameState()->GetState("HelicopterState"); m_state = (HelicopterState*) GameState()->GetState("HelicopterState");
if (!m_state) m_state = (HelicopterState *)GameState()->CreateState("HelicopterState"); if (!m_state)
m_state = (HelicopterState*) GameState()->CreateState("HelicopterState");
} }
// OFFSET: LEGO1 0x10003360 // OFFSET: LEGO1 0x10003360
@@ -73,4 +76,3 @@ void Helicopter::VTable0xe4()
AnimationManager()->FUN_1005f6d0(TRUE); AnimationManager()->FUN_1005f6d0(TRUE);
ControlManager()->Unregister(this); ControlManager()->Unregister(this);
} }

View File

@@ -7,8 +7,7 @@
// VTABLE 0x100d40f8 // VTABLE 0x100d40f8
// SIZE 0x230 // SIZE 0x230
class Helicopter : public IslePathActor class Helicopter : public IslePathActor {
{
public: public:
Helicopter(); Helicopter();

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d5418 // VTABLE 0x100d5418
// SIZE 0xc // SIZE 0xc
class HelicopterState : public LegoState class HelicopterState : public LegoState {
{
public: public:
// OFFSET: LEGO1 0x1000e0d0 // OFFSET: LEGO1 0x1000e0d0
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -23,6 +22,7 @@ public:
} }
inline void SetUnknown8(undefined4 p_unk8) { m_unk8 = p_unk8; } inline void SetUnknown8(undefined4 p_unk8) { m_unk8 = p_unk8; }
protected: protected:
undefined4 m_unk8; undefined4 m_unk8;
}; };

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100da328 // VTABLE 0x100da328
// SIZE 0x3e4 // SIZE 0x3e4
class HistoryBook : public LegoWorld class HistoryBook : public LegoWorld {
{
public: public:
HistoryBook(); HistoryBook();
virtual ~HistoryBook() override; // vtable+0x0 virtual ~HistoryBook() override; // vtable+0x0

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d9730 // VTABLE 0x100d9730
// SIZE 0x12c // SIZE 0x12c
class Hospital : public LegoWorld class Hospital : public LegoWorld {
{
public: public:
Hospital(); Hospital();
virtual ~Hospital() override; // vtable+0x0 virtual ~Hospital() override; // vtable+0x0
@@ -25,7 +24,6 @@ public:
{ {
return !strcmp(name, Hospital::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, Hospital::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // HOSPITAL_H #endif // HOSPITAL_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5068 // VTABLE 0x100d5068
// SIZE 0x68 // SIZE 0x68
class HospitalEntity : public BuildingEntity class HospitalEntity : public BuildingEntity {
{
public: public:
// OFFSET: LEGO1 0x1000ec40 // OFFSET: LEGO1 0x1000ec40
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -20,7 +19,6 @@ public:
{ {
return !strcmp(name, HospitalEntity::ClassName()) || BuildingEntity::IsA(name); return !strcmp(name, HospitalEntity::ClassName()) || BuildingEntity::IsA(name);
} }
}; };
#endif // HOSPITALENTITY_H #endif // HOSPITALENTITY_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d97a0 // VTABLE 0x100d97a0
// SIZE 0x18 // SIZE 0x18
class HospitalState : public LegoState class HospitalState : public LegoState {
{
public: public:
HospitalState(); HospitalState();
@@ -22,7 +21,6 @@ public:
{ {
return !strcmp(name, HospitalState::ClassName()) || LegoState::IsA(name); return !strcmp(name, HospitalState::ClassName()) || LegoState::IsA(name);
} }
}; };
#endif // HOSPITALSTATE_H #endif // HOSPITALSTATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d9338 // VTABLE 0x100d9338
// SIZE 0x1d8 // SIZE 0x1d8
class Infocenter : public LegoWorld class Infocenter : public LegoWorld {
{
public: public:
Infocenter(); Infocenter();
virtual ~Infocenter() override; virtual ~Infocenter() override;
@@ -26,7 +25,6 @@ public:
{ {
return !strcmp(name, Infocenter::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, Infocenter::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // INFOCENTER_H #endif // INFOCENTER_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d72d8 // VTABLE 0x100d72d8
// SIZE 0xfc // SIZE 0xfc
class InfocenterDoor : public LegoWorld class InfocenterDoor : public LegoWorld {
{
public: public:
InfocenterDoor(); InfocenterDoor();
virtual ~InfocenterDoor(); // vtable+0x0 virtual ~InfocenterDoor(); // vtable+0x0
@@ -25,7 +24,6 @@ public:
{ {
return !strcmp(name, InfocenterDoor::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, InfocenterDoor::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // INFOCENTERDOOR_H #endif // INFOCENTERDOOR_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4b90 // VTABLE 0x100d4b90
// SIZE 0x68 // SIZE 0x68
class InfoCenterEntity : public BuildingEntity class InfoCenterEntity : public BuildingEntity {
{
public: public:
// OFFSET: LEGO1 0x1000ea00 // OFFSET: LEGO1 0x1000ea00
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -20,7 +19,6 @@ public:
{ {
return !strcmp(name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(name); return !strcmp(name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(name);
} }
}; };
#endif // INFOCENTERENTITY_H #endif // INFOCENTERENTITY_H

View File

@@ -13,4 +13,3 @@ InfocenterState::~InfocenterState()
{ {
// TODO // TODO
} }

View File

@@ -1,14 +1,12 @@
#ifndef INFOCENTERSTATE_H #ifndef INFOCENTERSTATE_H
#define INFOCENTERSTATE_H #define INFOCENTERSTATE_H
#include "legostate.h"
#include "decomp.h" #include "decomp.h"
#include "legostate.h"
// VTABLE 0x100d93a8 // VTABLE 0x100d93a8
// SIZE 0x94 // SIZE 0x94
class InfocenterState : public LegoState class InfocenterState : public LegoState {
{
public: public:
InfocenterState(); InfocenterState();
virtual ~InfocenterState(); virtual ~InfocenterState();

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d6fb8 // VTABLE 0x100d6fb8
// SIZE 0x140 // SIZE 0x140
// Radio at 0x12c // Radio at 0x12c
class Isle : public LegoWorld class Isle : public LegoWorld {
{
public: public:
Isle(); Isle();

View File

@@ -4,8 +4,7 @@
#include "legoactor.h" #include "legoactor.h"
// VTABLE 0x100d5178 // VTABLE 0x100d5178
class IsleActor : public LegoActor class IsleActor : public LegoActor {
{
public: public:
// OFFSET: LEGO1 0x1000e660 // OFFSET: LEGO1 0x1000e660
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -44,7 +44,8 @@ IslePathActor::IslePathActor()
} }
// OFFSET: LEGO1 0x1001a280 // OFFSET: LEGO1 0x1001a280
MxResult IslePathActor::InitFromMxDSObject(MxDSObject &p_dsObject) { MxResult IslePathActor::InitFromMxDSObject(MxDSObject& p_dsObject)
{
return MxEntity::InitFromMxDSObject(p_dsObject); return MxEntity::InitFromMxDSObject(p_dsObject);
} }

View File

@@ -7,8 +7,7 @@
// VTABLE 0x100d4398 // VTABLE 0x100d4398
// SIZE 0x160 // SIZE 0x160
class IslePathActor : public LegoPathActor class IslePathActor : public LegoPathActor {
{
public: public:
IslePathActor(); IslePathActor();
@@ -27,10 +26,7 @@ public:
// OFFSET: LEGO1 0x10002ff0 TEMPLATE // OFFSET: LEGO1 0x10002ff0 TEMPLATE
// IslePathActor::`scalar deleting destructor' // IslePathActor::`scalar deleting destructor'
inline virtual ~IslePathActor() override inline virtual ~IslePathActor() override { IslePathActor::Destroy(TRUE); }
{
IslePathActor::Destroy(TRUE);
}
virtual MxResult InitFromMxDSObject(MxDSObject& p_dsObject) override; // vtable+0x18 virtual MxResult InitFromMxDSObject(MxDSObject& p_dsObject) override; // vtable+0x18
virtual void VTable0xcc(); // vtable+0xcc virtual void VTable0xcc(); // vtable+0xcc

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d9ec8 // VTABLE 0x100d9ec8
// SIZE 0x164 // SIZE 0x164
class Jetski : public IslePathActor class Jetski : public IslePathActor {
{
public: public:
Jetski(); Jetski();
@@ -23,10 +22,10 @@ public:
{ {
return !strcmp(name, Jetski::ClassName()) || IslePathActor::IsA(name); return !strcmp(name, Jetski::ClassName()) || IslePathActor::IsA(name);
} }
private: private:
// TODO: Jetski fields // TODO: Jetski fields
undefined m_unk160[4]; undefined m_unk160[4];
}; };
#endif // JETSKI_H #endif // JETSKI_H

View File

@@ -5,10 +5,8 @@
// VTABLE 0x100d4fe8 // VTABLE 0x100d4fe8
// SIZE 0x144 // SIZE 0x144
class JetskiRace : public LegoRace class JetskiRace : public LegoRace {
{
public: public:
// OFFSET: LEGO1 0x1000daf0 // OFFSET: LEGO1 0x1000daf0
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
{ {

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4fa8 // VTABLE 0x100d4fa8
// SIZE 0x2c // SIZE 0x2c
class JetskiRaceState : public RaceState class JetskiRaceState : public RaceState {
{
public: public:
// OFFSET: LEGO1 0x1000dc40 // OFFSET: LEGO1 0x1000dc40
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -20,7 +19,6 @@ public:
{ {
return !strcmp(name, JetskiRaceState::ClassName()) || RaceState::IsA(name); return !strcmp(name, JetskiRaceState::ClassName()) || RaceState::IsA(name);
} }
}; };
#endif // JETSKIRACESTATE_H #endif // JETSKIRACESTATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d8958 // VTABLE 0x100d8958
// SIZE 0x104 // SIZE 0x104
class JukeBox : public LegoWorld class JukeBox : public LegoWorld {
{
public: public:
JukeBox(); JukeBox();
@@ -22,7 +21,6 @@ public:
{ {
return !strcmp(name, JukeBox::ClassName()) || LegoWorld::IsA(name); return !strcmp(name, JukeBox::ClassName()) || LegoWorld::IsA(name);
} }
}; };
#endif // JUKEBOX_H #endif // JUKEBOX_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100da8a0 // VTABLE 0x100da8a0
// SIZE 0x6c // SIZE 0x6c
class JukeBoxEntity : public LegoEntity class JukeBoxEntity : public LegoEntity {
{
public: public:
JukeBoxEntity(); JukeBoxEntity();
virtual ~JukeBoxEntity() override; // vtable+0x0 virtual ~JukeBoxEntity() override; // vtable+0x0
@@ -23,7 +22,6 @@ public:
{ {
return !strcmp(name, JukeBoxEntity::ClassName()) || LegoEntity::IsA(name); return !strcmp(name, JukeBoxEntity::ClassName()) || LegoEntity::IsA(name);
} }
}; };
#endif // JUKEBOXENTITY_H #endif // JUKEBOXENTITY_H

View File

@@ -1,6 +1,7 @@
#include "jukeboxstate.h" #include "jukeboxstate.h"
// OFFSET: LEGO1 0x1000f300 // OFFSET: LEGO1 0x1000f300
MxBool JukeBoxState::VTable0x14() { MxBool JukeBoxState::VTable0x14()
{
return FALSE; return FALSE;
} }

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4a90 // VTABLE 0x100d4a90
// SIZE 0x10 // SIZE 0x10
class JukeBoxState : public LegoState class JukeBoxState : public LegoState {
{
public: public:
// OFFSET: LEGO1 0x1000f310 // OFFSET: LEGO1 0x1000f310
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -22,7 +21,6 @@ public:
} }
virtual MxBool VTable0x14() override; // vtable+0x14 virtual MxBool VTable0x14() override; // vtable+0x14
}; };
#endif // JUKEBOXSTATE_H #endif // JUKEBOXSTATE_H

View File

@@ -3,8 +3,7 @@
#include "lego3dview.h" #include "lego3dview.h"
class Lego3DManager class Lego3DManager {
{
public: public:
inline Lego3DView* GetLego3DView() { return this->m_3dView; } inline Lego3DView* GetLego3DView() { return this->m_3dView; }

View File

@@ -3,8 +3,7 @@
#include "viewmanager.h" #include "viewmanager.h"
class Lego3DView class Lego3DView {
{
public: public:
inline ViewManager* GetViewManager() { return this->m_viewManager; } inline ViewManager* GetViewManager() { return this->m_viewManager; }

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d52b0 // VTABLE 0x100d52b0
// SIZE 0xa0 // SIZE 0xa0
class Lego3DWavePresenter : public LegoWavePresenter class Lego3DWavePresenter : public LegoWavePresenter {
{
public: public:
// OFFSET: LEGO1 0x1000d890 // OFFSET: LEGO1 0x1000d890
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4a70 // VTABLE 0x100d4a70
// SIZE 0x10 // SIZE 0x10
class LegoAct2State : public LegoState class LegoAct2State : public LegoState {
{
public: public:
// OFFSET: LEGO1 0x1000df80 // OFFSET: LEGO1 0x1000df80
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c
@@ -20,7 +19,6 @@ public:
{ {
return !strcmp(name, LegoAct2State::ClassName()) || LegoState::IsA(name); return !strcmp(name, LegoAct2State::ClassName()) || LegoState::IsA(name);
} }
}; };
#endif // LEGOACT2STATE_H #endif // LEGOACT2STATE_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5118 // VTABLE 0x100d5118
// SIZE 0x68 // SIZE 0x68
class LegoActionControlPresenter : public MxMediaPresenter class LegoActionControlPresenter : public MxMediaPresenter {
{
public: public:
// OFFSET: LEGO1 0x1000d0e0 // OFFSET: LEGO1 0x1000d0e0
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -6,8 +6,7 @@
// VTABLE 0x100d6d68 // VTABLE 0x100d6d68
// SIZE 0x78 // SIZE 0x78
class LegoActor : public LegoEntity class LegoActor : public LegoEntity {
{
public: public:
LegoActor(); LegoActor();
@@ -33,7 +32,6 @@ public:
private: private:
undefined unk68[0x10]; undefined unk68[0x10];
}; };
#endif // LEGOACTOR_H #endif // LEGOACTOR_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5320 // VTABLE 0x100d5320
// SIZE 0x50 // SIZE 0x50
class LegoActorPresenter : public LegoEntityPresenter class LegoActorPresenter : public LegoEntityPresenter {
{
public: public:
// OFFSET: LEGO1 0x1000cb10 // OFFSET: LEGO1 0x1000cb10
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -3,8 +3,7 @@
#include "legopathactor.h" #include "legopathactor.h"
class LegoAnimActor : public LegoPathActor class LegoAnimActor : public LegoPathActor {
{
public: public:
}; };

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d8c18 // VTABLE 0x100d8c18
// SIZE 0x500 // SIZE 0x500
class LegoAnimationManager : public MxCore class LegoAnimationManager : public MxCore {
{
public: public:
LegoAnimationManager(); LegoAnimationManager();
virtual ~LegoAnimationManager() override; // vtable+0x0 virtual ~LegoAnimationManager() override; // vtable+0x0
@@ -33,7 +32,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOANIMATIONMANAGER_H #endif // LEGOANIMATIONMANAGER_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d7de8 // VTABLE 0x100d7de8
// SIZE 0x74 // SIZE 0x74
class LegoAnimMMPresenter : public MxCompositePresenter class LegoAnimMMPresenter : public MxCompositePresenter {
{
public: public:
LegoAnimMMPresenter(); LegoAnimMMPresenter();
@@ -22,7 +21,6 @@ public:
{ {
return !strcmp(name, LegoAnimMMPresenter::ClassName()) || MxCompositePresenter::IsA(name); return !strcmp(name, LegoAnimMMPresenter::ClassName()) || MxCompositePresenter::IsA(name);
} }
}; };
#endif // LEGOANIMMMPRESENTER_H #endif // LEGOANIMMMPRESENTER_H

View File

@@ -4,8 +4,7 @@
#include "mxvideopresenter.h" #include "mxvideopresenter.h"
// VTABLE 0x100d90c8 // VTABLE 0x100d90c8
class LegoAnimPresenter : public MxVideoPresenter class LegoAnimPresenter : public MxVideoPresenter {
{
public: public:
LegoAnimPresenter(); LegoAnimPresenter();
@@ -24,7 +23,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOANIMPRESENTER_H #endif // LEGOANIMPRESENTER_H

View File

@@ -1,9 +1,9 @@
#include "legobackgroundcolor.h" #include "legobackgroundcolor.h"
#include "decomp.h"
#include "legoomni.h" #include "legoomni.h"
#include "legoutil.h" #include "legoutil.h"
#include "legovideomanager.h" #include "legovideomanager.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(LegoBackgroundColor, 0x30) DECOMP_SIZE_ASSERT(LegoBackgroundColor, 0x30)

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d74a8 // VTABLE 0x100d74a8
// SIZE 0x30 // SIZE 0x30
class LegoBackgroundColor : public MxVariable class LegoBackgroundColor : public MxVariable {
{
public: public:
__declspec(dllexport) LegoBackgroundColor(const char* p_key, const char* p_value); __declspec(dllexport) LegoBackgroundColor(const char* p_key, const char* p_value);
virtual void SetValue(const char* p_colorString) override; virtual void SetValue(const char* p_colorString) override;

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d6f50 // VTABLE 0x100d6f50
// SIZE 0x30 // SIZE 0x30
class LegoBuildingManager : public MxCore class LegoBuildingManager : public MxCore {
{
public: public:
LegoBuildingManager(); LegoBuildingManager();
virtual ~LegoBuildingManager() override; virtual ~LegoBuildingManager() override;
@@ -22,7 +21,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOBUILDINGMANAGER_H #endif // LEGOBUILDINGMANAGER_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4718 // VTABLE 0x100d4718
// SIZE 0x88 // SIZE 0x88
class LegoCacheSound : public MxCore class LegoCacheSound : public MxCore {
{
public: public:
LegoCacheSound(); LegoCacheSound();
virtual ~LegoCacheSound() override; // vtable+0x0 virtual ~LegoCacheSound() override; // vtable+0x0

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d57b0 // VTABLE 0x100d57b0
// SIZE 0xc8 // SIZE 0xc8
class LegoCameraController : public MxCore class LegoCameraController : public MxCore {
{
public: public:
LegoCameraController(); LegoCameraController();
virtual ~LegoCameraController() override; // vtable+0x0 virtual ~LegoCameraController() override; // vtable+0x0
@@ -23,7 +22,6 @@ public:
{ {
return !strcmp(name, ClassName()) || MxCore::IsA(name); return !strcmp(name, ClassName()) || MxCore::IsA(name);
} }
}; };
#endif // LEGOCAMERACONTROLLER_H #endif // LEGOCAMERACONTROLLER_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d6658 // VTABLE 0x100d6658
// SIZE 0x34c // SIZE 0x34c
class LegoCarBuild : public LegoWorld class LegoCarBuild : public LegoWorld {
{
public: public:
LegoCarBuild(); LegoCarBuild();
virtual ~LegoCarBuild() override; virtual ~LegoCarBuild() override;

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d99e0 // VTABLE 0x100d99e0
// SIZE 0x150 // SIZE 0x150
class LegoCarBuildAnimPresenter : public LegoAnimPresenter class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
{
public: public:
LegoCarBuildAnimPresenter(); LegoCarBuildAnimPresenter();
virtual ~LegoCarBuildAnimPresenter() override; // vtable+0x0 virtual ~LegoCarBuildAnimPresenter() override; // vtable+0x0

View File

@@ -4,8 +4,7 @@
#include "legoraceactor.h" #include "legoraceactor.h"
// VTABLE 0x100da0d8 // VTABLE 0x100da0d8
class LegoCarRaceActor : public LegoRaceActor class LegoCarRaceActor : public LegoRaceActor {
{
public: public:
// OFFSET: LEGO1 0x10081650 // OFFSET: LEGO1 0x10081650
inline virtual const char* ClassName() const override // vtable+0x0c inline virtual const char* ClassName() const override // vtable+0x0c

View File

@@ -4,8 +4,7 @@
#include "mxcore.h" #include "mxcore.h"
// VTABLE 0x100d6a80 // VTABLE 0x100d6a80
class LegoControlManager : public MxCore class LegoControlManager : public MxCore {
{
public: public:
LegoControlManager(); LegoControlManager();
virtual ~LegoControlManager() override; // vtable+0x0 virtual ~LegoControlManager() override; // vtable+0x0

View File

@@ -1,8 +1,8 @@
#include "legoentity.h" #include "legoentity.h"
#include "define.h"
#include "legoomni.h" #include "legoomni.h"
#include "legoutil.h" #include "legoutil.h"
#include "define.h"
DECOMP_SIZE_ASSERT(LegoEntity, 0x68) DECOMP_SIZE_ASSERT(LegoEntity, 0x68)
@@ -60,8 +60,7 @@ void LegoEntity::Destroy(MxBool p_fromDestructor)
void LegoEntity::AddToCurrentWorld() void LegoEntity::AddToCurrentWorld()
{ {
LegoWorld* world = GetCurrentWorld(); LegoWorld* world = GetCurrentWorld();
if (world != NULL && world != (LegoWorld*)this) if (world != NULL && world != (LegoWorld*) this) {
{
// TODO: world->vtable58(this); // TODO: world->vtable58(this);
} }
} }

View File

@@ -1,16 +1,15 @@
#ifndef LEGOENTITY_H #ifndef LEGOENTITY_H
#define LEGOENTITY_H #define LEGOENTITY_H
#include "decomp.h"
#include "extra.h"
#include "mxdsobject.h"
#include "mxentity.h" #include "mxentity.h"
#include "mxvector.h" #include "mxvector.h"
#include "extra.h"
#include "decomp.h"
#include "mxdsobject.h"
// VTABLE 0x100d4858 // VTABLE 0x100d4858
// SIZE 0x68 (probably) // SIZE 0x68 (probably)
class LegoEntity : public MxEntity class LegoEntity : public MxEntity {
{
public: public:
// Inlined at 0x100853f7 // Inlined at 0x100853f7
inline LegoEntity() inline LegoEntity()

View File

@@ -4,8 +4,7 @@
#include "mxcompositepresenter.h" #include "mxcompositepresenter.h"
// VTABLE 0x100d8398 // VTABLE 0x100d8398
class LegoEntityPresenter : public MxCompositePresenter class LegoEntityPresenter : public MxCompositePresenter {
{
public: public:
LegoEntityPresenter(); LegoEntityPresenter();
virtual ~LegoEntityPresenter() override; // vtable+0x0 virtual ~LegoEntityPresenter() override; // vtable+0x0
@@ -25,8 +24,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOENTITYPRESENTER_H #endif // LEGOENTITYPRESENTER_H

View File

@@ -4,8 +4,7 @@
#include "legoanimactor.h" #include "legoanimactor.h"
// VTABLE 0x100d6c10 // VTABLE 0x100d6c10
class LegoExtraActor : public LegoAnimActor class LegoExtraActor : public LegoAnimActor {
{
public: public:
// OFFSET: LEGO1 0x1002b7a0 // OFFSET: LEGO1 0x1002b7a0
inline const char* ClassName() const override // vtable+0xc inline const char* ClassName() const override // vtable+0xc

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d89e0 // VTABLE 0x100d89e0
// SIZE 0x70 // SIZE 0x70
class LegoFlcTexturePresenter : public MxFlcPresenter class LegoFlcTexturePresenter : public MxFlcPresenter {
{
public: public:
LegoFlcTexturePresenter(); LegoFlcTexturePresenter();
@@ -16,7 +15,6 @@ public:
// 0x100f0634 // 0x100f0634
return "LegoFlcTexturePresenter"; return "LegoFlcTexturePresenter";
} }
}; };
#endif // LEGOFLCTEXTUREPRESENTER_H #endif // LEGOFLCTEXTUREPRESENTER_H

View File

@@ -1,9 +1,9 @@
#include "legofullscreenmovie.h" #include "legofullscreenmovie.h"
#include "decomp.h"
#include "legoomni.h" #include "legoomni.h"
#include "legovideomanager.h" #include "legovideomanager.h"
#include "mxtypes.h" #include "mxtypes.h"
#include "decomp.h"
DECOMP_SIZE_ASSERT(LegoFullScreenMovie, 0x24) DECOMP_SIZE_ASSERT(LegoFullScreenMovie, 0x24)

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d74b8 // VTABLE 0x100d74b8
// SIZE 0x24 // SIZE 0x24
class LegoFullScreenMovie : public MxVariable class LegoFullScreenMovie : public MxVariable {
{
public: public:
LegoFullScreenMovie(const char* p_key, const char* p_value); LegoFullScreenMovie(const char* p_key, const char* p_value);
virtual void SetValue(const char* p_option) override; virtual void SetValue(const char* p_option) override;

View File

@@ -1,12 +1,12 @@
#include "legogamestate.h" #include "legogamestate.h"
#include "infocenterstate.h"
#include "legoomni.h" #include "legoomni.h"
#include "legostate.h" #include "legostate.h"
#include "infocenterstate.h"
#include "legostream.h" #include "legostream.h"
#include "mxobjectfactory.h" #include "mxobjectfactory.h"
#include "mxvariabletable.h"
#include "mxstring.h" #include "mxstring.h"
#include "mxvariabletable.h"
// Based on the highest dword offset (0x42c) referenced in the constructor. // Based on the highest dword offset (0x42c) referenced in the constructor.
// There may be other members that come after. // There may be other members that come after.
@@ -17,48 +17,20 @@ const char *g_fileExtensionGS = ".GS";
// GLOBAL OFFSET: LEGO1 0x100f3e58 // GLOBAL OFFSET: LEGO1 0x100f3e58
ColorStringStruct g_colorSaveData[43] = { ColorStringStruct g_colorSaveData[43] = {
{"c_dbbkfny0", "lego red"}, {"c_dbbkfny0", "lego red"}, {"c_dbbkxly0", "lego white"}, {"c_chbasey0", "lego black"},
{"c_dbbkxly0", "lego white"}, {"c_chbacky0", "lego black"}, {"c_chdishy0", "lego white"}, {"c_chhorny0", "lego black"},
{"c_chbasey0", "lego black"}, {"c_chljety1", "lego black"}, {"c_chrjety1", "lego black"}, {"c_chmidly0", "lego black"},
{"c_chbacky0", "lego black"}, {"c_chmotry0", "lego blue"}, {"c_chsidly0", "lego black"}, {"c_chsidry0", "lego black"},
{"c_chdishy0", "lego white"}, {"c_chstuty0", "lego black"}, {"c_chtaily0", "lego black"}, {"c_chwindy1", "lego black"},
{"c_chhorny0", "lego black"}, {"c_dbfbrdy0", "lego red"}, {"c_dbflagy0", "lego yellow"}, {"c_dbfrfny4", "lego red"},
{"c_chljety1", "lego black"}, {"c_dbfrxly0", "lego white"}, {"c_dbhndly0", "lego white"}, {"c_dbltbry0", "lego white"},
{"c_chrjety1", "lego black"}, {"c_jsdashy0", "lego white"}, {"c_jsexhy0", "lego black"}, {"c_jsfrnty5", "lego black"},
{"c_chmidly0", "lego black"}, {"c_jshndly0", "lego red"}, {"c_jslsidy0", "lego black"}, {"c_jsrsidy0", "lego black"},
{"c_chmotry0", "lego blue"}, {"c_jsskiby0", "lego red"}, {"c_jswnshy5", "lego white"}, {"c_rcbacky6", "lego green"},
{"c_chsidly0", "lego black"}, {"c_rcedgey0", "lego green"}, {"c_rcfrmey0", "lego red"}, {"c_rcfrnty6", "lego green"},
{"c_chsidry0", "lego black"}, {"c_rcmotry0", "lego white"}, {"c_rcsidey0", "lego green"}, {"c_rcstery0", "lego white"},
{"c_chstuty0", "lego black"}, {"c_rcstrpy0", "lego yellow"}, {"c_rctailya", "lego white"}, {"c_rcwhl1y0", "lego white"},
{"c_chtaily0", "lego black"}, {"c_rcwhl2y0", "lego white"}, {"c_jsbasey0", "lego white"}, {"c_chblady0", "lego black"},
{"c_chwindy1", "lego black"},
{"c_dbfbrdy0", "lego red"},
{"c_dbflagy0", "lego yellow"},
{"c_dbfrfny4", "lego red"},
{"c_dbfrxly0", "lego white"},
{"c_dbhndly0", "lego white"},
{"c_dbltbry0", "lego white"},
{"c_jsdashy0", "lego white"},
{"c_jsexhy0", "lego black"},
{"c_jsfrnty5", "lego black"},
{"c_jshndly0", "lego red"},
{"c_jslsidy0", "lego black"},
{"c_jsrsidy0", "lego black"},
{"c_jsskiby0", "lego red"},
{"c_jswnshy5", "lego white"},
{"c_rcbacky6", "lego green"},
{"c_rcedgey0", "lego green"},
{"c_rcfrmey0", "lego red"},
{"c_rcfrnty6", "lego green"},
{"c_rcmotry0", "lego white"},
{"c_rcsidey0", "lego green"},
{"c_rcstery0", "lego white"},
{"c_rcstrpy0", "lego yellow"},
{"c_rctailya", "lego white"},
{"c_rcwhl1y0", "lego white"},
{"c_rcwhl2y0", "lego white"},
{"c_jsbasey0", "lego white"},
{"c_chblady0", "lego black"},
{"c_chseaty0", "lego white"}, {"c_chseaty0", "lego white"},
}; };

View File

@@ -2,24 +2,22 @@
#define LEGOGAMESTATE_H #define LEGOGAMESTATE_H
#include "decomp.h" #include "decomp.h"
#include "mxtypes.h"
#include "legobackgroundcolor.h" #include "legobackgroundcolor.h"
#include "legofullscreenmovie.h" #include "legofullscreenmovie.h"
#include "mxtypes.h"
class LegoState; class LegoState;
class LegoStream; class LegoStream;
class MxVariable; class MxVariable;
class MxString; class MxString;
struct ColorStringStruct struct ColorStringStruct {
{
const char* m_targetName; const char* m_targetName;
const char* m_colorName; const char* m_colorName;
}; };
// SIZE 0x430 (at least) // SIZE 0x430 (at least)
class LegoGameState class LegoGameState {
{
public: public:
__declspec(dllexport) LegoGameState(); __declspec(dllexport) LegoGameState();
__declspec(dllexport) ~LegoGameState(); __declspec(dllexport) ~LegoGameState();

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d9278 // VTABLE 0x100d9278
// SIZE 0xc4 // SIZE 0xc4
class LegoHideAnimPresenter : public LegoLoopingAnimPresenter class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
{
public: public:
LegoHideAnimPresenter(); LegoHideAnimPresenter();
@@ -25,7 +24,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOHIDEANIMPRESENTER_H #endif // LEGOHIDEANIMPRESENTER_H

View File

@@ -1,7 +1,7 @@
#include "legoinputmanager.h" #include "legoinputmanager.h"
#include "legocontrolmanager.h" #include "legocontrolmanager.h"
#include "legoomni.h" #include "legoomni.h"
#include "mxautolocker.h" #include "mxautolocker.h"
DECOMP_SIZE_ASSERT(LegoInputManager, 0x338); DECOMP_SIZE_ASSERT(LegoInputManager, 0x338);
@@ -105,7 +105,8 @@ MxResult LegoInputManager::GetJoystickId()
joyinfoex.dwSize = 0x34; joyinfoex.dwSize = 0x34;
joyinfoex.dwFlags = 0xFF; joyinfoex.dwFlags = 0xFF;
if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR && joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) { if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR &&
joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) {
m_joyid = joyid; m_joyid = joyid;
return SUCCESS; return SUCCESS;
} }
@@ -114,7 +115,8 @@ MxResult LegoInputManager::GetJoystickId()
for (joyid = JOYSTICKID1; joyid < 16; joyid++) { for (joyid = JOYSTICKID1; joyid < 16; joyid++) {
joyinfoex.dwSize = 0x34; joyinfoex.dwSize = 0x34;
joyinfoex.dwFlags = 0xFF; joyinfoex.dwFlags = 0xFF;
if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR && joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) { if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR &&
joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) {
m_joyid = joyid; m_joyid = joyid;
return SUCCESS; return SUCCESS;
} }
@@ -125,7 +127,12 @@ MxResult LegoInputManager::GetJoystickId()
} }
// OFFSET: LEGO1 0x1005c320 // OFFSET: LEGO1 0x1005c320
MxResult LegoInputManager::GetJoystickState(MxU32 *joystick_x, MxU32 *joystick_y, DWORD *buttons_state, MxU32 *pov_position) MxResult LegoInputManager::GetJoystickState(
MxU32* joystick_x,
MxU32* joystick_y,
DWORD* buttons_state,
MxU32* pov_position
)
{ {
if (m_useJoystick != FALSE) { if (m_useJoystick != FALSE) {
if (m_joyid < 0 && GetJoystickId() == -1) { if (m_joyid < 0 && GetJoystickId() == -1) {

View File

@@ -3,13 +3,12 @@
#include "decomp.h" #include "decomp.h"
#include "legoworld.h" #include "legoworld.h"
#include "mxpresenter.h"
#include "mxlist.h" #include "mxlist.h"
#include "mxpresenter.h"
#include <dinput.h> #include <dinput.h>
enum NotificationId enum NotificationId {
{
NONE = 0, NONE = 0,
KEYDOWN = 7, KEYDOWN = 7,
MOUSEUP = 8, MOUSEUP = 8,
@@ -22,8 +21,7 @@ class LegoControlManager;
// VTABLE 0x100d8760 // VTABLE 0x100d8760
// SIZE 0x338 // SIZE 0x338
class LegoInputManager : public MxPresenter class LegoInputManager : public MxPresenter {
{
public: public:
LegoInputManager(); LegoInputManager();
virtual ~LegoInputManager() override; virtual ~LegoInputManager() override;

View File

@@ -4,8 +4,7 @@
#include "legojetskiraceactor.h" #include "legojetskiraceactor.h"
// VTABLE 0x100d5a40 // VTABLE 0x100d5a40
class LegoJetski : public LegoJetskiRaceActor class LegoJetski : public LegoJetskiRaceActor {
{
public: public:
// OFFSET: LEGO1 0x10013e80 // OFFSET: LEGO1 0x10013e80
inline const char* ClassName() const override // vtable+0xc inline const char* ClassName() const override // vtable+0xc
@@ -19,8 +18,6 @@ public:
{ {
return !strcmp(name, LegoJetski::ClassName()) || LegoJetskiRaceActor::IsA(name); return !strcmp(name, LegoJetski::ClassName()) || LegoJetskiRaceActor::IsA(name);
} }
}; };
#endif // LEGOJETSKI_H #endif // LEGOJETSKI_H

View File

@@ -4,8 +4,7 @@
#include "legocarraceactor.h" #include "legocarraceactor.h"
// VTABLE 0x100da240 // VTABLE 0x100da240
class LegoJetskiRaceActor : public LegoCarRaceActor class LegoJetskiRaceActor : public LegoCarRaceActor {
{
public: public:
// OFFSET: LEGO1 0x10081d80 // OFFSET: LEGO1 0x10081d80
inline const char* ClassName() const override // vtable+0xc inline const char* ClassName() const override // vtable+0xc

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d5fa8 // VTABLE 0x100d5fa8
// SIZE 0x90 // SIZE 0x90
class LegoLoadCacheSoundPresenter : public MxWavePresenter class LegoLoadCacheSoundPresenter : public MxWavePresenter {
{
public: public:
LegoLoadCacheSoundPresenter(); LegoLoadCacheSoundPresenter();
virtual ~LegoLoadCacheSoundPresenter() override; virtual ~LegoLoadCacheSoundPresenter() override;
@@ -20,7 +19,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOLOADCACHESOUNDPRESENTER_H #endif // LEGOLOADCACHESOUNDPRESENTER_H

View File

@@ -4,8 +4,7 @@
#include "legoloopinganimpresenter.h" #include "legoloopinganimpresenter.h"
// VTABLE 0x100d9170 // VTABLE 0x100d9170
class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter {
{
public: public:
LegoLocomotionAnimPresenter(); LegoLocomotionAnimPresenter();
@@ -24,7 +23,6 @@ public:
private: private:
void Init(); void Init();
}; };
#endif // LEGOLOCOMOTIONANIMPRESENTER_H #endif // LEGOLOCOMOTIONANIMPRESENTER_H

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4900 // VTABLE 0x100d4900
// SIZE 0xc0 (discovered through inlined constructor at 0x10009ecd) // SIZE 0xc0 (discovered through inlined constructor at 0x10009ecd)
class LegoLoopingAnimPresenter : public LegoAnimPresenter class LegoLoopingAnimPresenter : public LegoAnimPresenter {
{
public: public:
// OFFSET: LEGO1 0x1000c9a0 // OFFSET: LEGO1 0x1000c9a0
inline const char* ClassName() const override // vtable+0xc inline const char* ClassName() const override // vtable+0xc

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d7ac8 // VTABLE 0x100d7ac8
// SIZE 0x94 (from 0x1000a163) // SIZE 0x94 (from 0x1000a163)
class LegoMeterPresenter : public MxStillPresenter class LegoMeterPresenter : public MxStillPresenter {
{
public: public:
// MxStillPresenter's `::ClassName` and `::IsA` are used. // MxStillPresenter's `::ClassName` and `::IsA` are used.
}; };

View File

@@ -5,8 +5,7 @@
// VTABLE 0x100d4e50 // VTABLE 0x100d4e50
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6) // SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
class LegoModelPresenter : public MxVideoPresenter class LegoModelPresenter : public MxVideoPresenter {
{
public: public:
__declspec(dllexport) static void configureLegoModelPresenter(int param_1); __declspec(dllexport) static void configureLegoModelPresenter(int param_1);

View File

@@ -1,8 +1,8 @@
#include "legonavcontroller.h" #include "legonavcontroller.h"
#include "legoomni.h" #include "legoomni.h"
#include "legovideomanager.h"
#include "legoutil.h" #include "legoutil.h"
#include "legovideomanager.h"
// 0x100f4c28 // 0x100f4c28
int g_mouseDeadzone = 40; int g_mouseDeadzone = 40;
@@ -30,10 +30,19 @@ float g_turnSensitivity = 0.4f;
MxBool g_turnUseVelocity = FALSE; MxBool g_turnUseVelocity = FALSE;
// OFFSET: LEGO1 0x10054d40 // OFFSET: LEGO1 0x10054d40
void LegoNavController::GetDefaults(int *p_mouseDeadzone, float *p_movementMaxSpeed, float *p_turnMaxSpeed, void LegoNavController::GetDefaults(
float *p_movementMaxAccel, float *p_turnMaxAccel, float *p_movementDecel, int* p_mouseDeadzone,
float *p_turnDecel, float *p_movementMinAccel, float *p_turnMinAccel, float* p_movementMaxSpeed,
float *p_turnSensitivity, MxBool *p_turnUseVelocity) float* p_turnMaxSpeed,
float* p_movementMaxAccel,
float* p_turnMaxAccel,
float* p_movementDecel,
float* p_turnDecel,
float* p_movementMinAccel,
float* p_turnMinAccel,
float* p_turnSensitivity,
MxBool* p_turnUseVelocity
)
{ {
*p_mouseDeadzone = g_mouseDeadzone; *p_mouseDeadzone = g_mouseDeadzone;
*p_movementMaxSpeed = g_movementMaxSpeed; *p_movementMaxSpeed = g_movementMaxSpeed;
@@ -49,10 +58,19 @@ void LegoNavController::GetDefaults(int *p_mouseDeadzone, float *p_movementMaxSp
} }
// OFFSET: LEGO1 0x10054dd0 // OFFSET: LEGO1 0x10054dd0
void LegoNavController::SetDefaults(int p_mouseDeadzone, float p_movementMaxSpeed, float p_turnMaxSpeed, void LegoNavController::SetDefaults(
float p_movementMaxAccel, float p_turnMaxAccel, float p_movementDecel, int p_mouseDeadzone,
float p_turnDecel, float p_movementMinAccel, float p_turnMinAccel, float p_movementMaxSpeed,
float p_turnSensitivity, MxBool p_turnUseVelocity) float p_turnMaxSpeed,
float p_movementMaxAccel,
float p_turnMaxAccel,
float p_movementDecel,
float p_turnDecel,
float p_movementMinAccel,
float p_turnMinAccel,
float p_turnSensitivity,
MxBool p_turnUseVelocity
)
{ {
g_mouseDeadzone = p_mouseDeadzone; g_mouseDeadzone = p_mouseDeadzone;
g_movementMaxSpeed = p_movementMaxSpeed; g_movementMaxSpeed = p_movementMaxSpeed;
@@ -138,9 +156,16 @@ void LegoNavController::SetTargets(int p_hPos, int p_vPos, MxBool p_accel)
if (p_accel != FALSE) { if (p_accel != FALSE) {
this->m_targetTurnSpeed = CalculateNewTargetSpeed(p_hPos, this->m_hMax / 2, this->m_turnMaxSpeed); this->m_targetTurnSpeed = CalculateNewTargetSpeed(p_hPos, this->m_hMax / 2, this->m_turnMaxSpeed);
this->m_targetMovementSpeed = CalculateNewTargetSpeed(this->m_vMax - p_vPos, this->m_vMax / 2, this->m_movementMaxSpeed); this->m_targetMovementSpeed =
this->m_turnAccel = CalculateNewAccel(p_hPos, this->m_hMax / 2, this->m_turnMaxAccel, (int)this->m_turnMinAccel); CalculateNewTargetSpeed(this->m_vMax - p_vPos, this->m_vMax / 2, this->m_movementMaxSpeed);
this->m_movementAccel = CalculateNewAccel(this->m_vMax - p_vPos, this->m_vMax / 2, this->m_movementMaxAccel, (int)this->m_movementMinAccel); this->m_turnAccel =
CalculateNewAccel(p_hPos, this->m_hMax / 2, this->m_turnMaxAccel, (int) this->m_turnMinAccel);
this->m_movementAccel = CalculateNewAccel(
this->m_vMax - p_vPos,
this->m_vMax / 2,
this->m_movementMaxAccel,
(int) this->m_movementMinAccel
);
} }
else { else {
this->m_targetTurnSpeed = 0.0f; this->m_targetTurnSpeed = 0.0f;

View File

@@ -7,17 +7,34 @@
// VTABLE 0x100d85b8 // VTABLE 0x100d85b8
// SIZE 0x70 // SIZE 0x70
class LegoNavController : public MxCore class LegoNavController : public MxCore {
{
public: public:
__declspec(dllexport) static void GetDefaults(int *p_mouseDeadzone, float *p_movementMaxSpeed, float *p_turnMaxSpeed, __declspec(dllexport) static void GetDefaults(
float *p_movementMaxAccel, float *p_turnMaxAccel, float *p_movementDecel, int* p_mouseDeadzone,
float *p_turnDecel, float *p_movementMinAccel, float *p_turnMinAccel, float* p_movementMaxSpeed,
float *p_rotationSensitivity, MxBool *p_turnUseVelocity); float* p_turnMaxSpeed,
__declspec(dllexport) static void SetDefaults(int p_mouseDeadzone, float p_movementMaxSpeed, float p_turnMaxSpeed, float* p_movementMaxAccel,
float p_movementMaxAccel, float p_turnMaxAccel, float p_movementDecel, float* p_turnMaxAccel,
float p_turnDecel, float p_movementMinAccel, float p_turnMinAccel, float* p_movementDecel,
float p_rotationSensitivity, MxBool p_turnUseVelocity); float* p_turnDecel,
float* p_movementMinAccel,
float* p_turnMinAccel,
float* p_rotationSensitivity,
MxBool* p_turnUseVelocity
);
__declspec(dllexport) static void SetDefaults(
int p_mouseDeadzone,
float p_movementMaxSpeed,
float p_turnMaxSpeed,
float p_movementMaxAccel,
float p_turnMaxAccel,
float p_movementDecel,
float p_turnDecel,
float p_movementMinAccel,
float p_turnMinAccel,
float p_rotationSensitivity,
MxBool p_turnUseVelocity
);
LegoNavController(); LegoNavController();
// virtual ~LegoNavController(); // vtable+0x0 // virtual ~LegoNavController(); // vtable+0x0

View File

@@ -1,7 +1,7 @@
#include "legoobjectfactory.h" #include "legoobjectfactory.h"
#include "infocenterstate.h"
#include "decomp.h" #include "decomp.h"
#include "infocenterstate.h"
// TODO: Uncomment once we have all the relevant types ready // TODO: Uncomment once we have all the relevant types ready
// DECOMP_SIZE_ASSERT(LegoObjectFactory, 0x1c8); // DECOMP_SIZE_ASSERT(LegoObjectFactory, 0x1c8);
@@ -19,7 +19,11 @@ MxCore *LegoObjectFactory::Create(const char *p_name)
{ {
MxAtomId atom(p_name, LookupMode_Exact); MxAtomId atom(p_name, LookupMode_Exact);
#define X(V) if (this->m_id##V == atom) { return new V; } else #define X(V) \
if (this->m_id##V == atom) { \
return new V; \
} \
else
FOR_LEGOOBJECTFACTORY_OBJECTS(X) FOR_LEGOOBJECTFACTORY_OBJECTS(X)
#undef X #undef X
{ {

View File

@@ -3,12 +3,10 @@
#include "mxobjectfactory.h" #include "mxobjectfactory.h"
#define FOR_LEGOOBJECTFACTORY_OBJECTS(X) \ #define FOR_LEGOOBJECTFACTORY_OBJECTS(X) X(InfocenterState)
X(InfocenterState)
// VTABLE 0x100d4768 // VTABLE 0x100d4768
class LegoObjectFactory : public MxObjectFactory class LegoObjectFactory : public MxObjectFactory {
{
public: public:
LegoObjectFactory(); LegoObjectFactory();
virtual MxCore* Create(const char* p_name) override; // vtable 0x14 virtual MxCore* Create(const char* p_name) override; // vtable 0x14

View File

@@ -1,12 +1,12 @@
#include "legoomni.h" #include "legoomni.h"
#include "legogamestate.h"
#include "legoinputmanager.h"
#include "legoobjectfactory.h"
#include "legoutil.h"
#include "legoworld.h"
#include "mxbackgroundaudiomanager.h" #include "mxbackgroundaudiomanager.h"
#include "mxdsfile.h" #include "mxdsfile.h"
#include "legogamestate.h"
#include "legoutil.h"
#include "legoobjectfactory.h"
#include "legoinputmanager.h"
#include "legoworld.h"
// 0x100f4588 // 0x100f4588
MxAtomId* g_nocdSourceName = NULL; MxAtomId* g_nocdSourceName = NULL;

Some files were not shown because too many files have changed in this diff Show More