mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-22 16:04:17 +00:00
implement LegoOmni::FUN_1005b4f0 (#450)
* push changes * push changes * fixes * Changes * Use proper values * Name vtable function --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
@@ -46,6 +46,7 @@ public:
|
|||||||
MxResult GetJoystickState(MxU32* p_joystickX, MxU32* p_joystickY, DWORD* p_buttonsState, MxU32* p_povPosition);
|
MxResult GetJoystickState(MxU32* p_joystickX, MxU32* p_joystickY, DWORD* p_buttonsState, MxU32* p_povPosition);
|
||||||
void SetTimer();
|
void SetTimer();
|
||||||
void KillTimer();
|
void KillTimer();
|
||||||
|
void EnableInputProcessing();
|
||||||
void SetCamera(LegoCameraController* p_camera);
|
void SetCamera(LegoCameraController* p_camera);
|
||||||
void ClearCamera();
|
void ClearCamera();
|
||||||
void SetWorld(LegoWorld* p_world);
|
void SetWorld(LegoWorld* p_world);
|
||||||
@@ -57,6 +58,12 @@ public:
|
|||||||
inline void SetUseJoystick(MxBool p_useJoystick) { m_useJoystick = p_useJoystick; }
|
inline void SetUseJoystick(MxBool p_useJoystick) { m_useJoystick = p_useJoystick; }
|
||||||
inline void SetJoystickIndex(MxS32 p_joystickIndex) { m_joystickIndex = p_joystickIndex; }
|
inline void SetJoystickIndex(MxS32 p_joystickIndex) { m_joystickIndex = p_joystickIndex; }
|
||||||
|
|
||||||
|
inline void DisableInputProcessing()
|
||||||
|
{
|
||||||
|
m_unk0x88 = TRUE;
|
||||||
|
m_unk0x336 = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
inline LegoControlManager* GetControlManager() { return m_controlManager; }
|
inline LegoControlManager* GetControlManager() { return m_controlManager; }
|
||||||
inline LegoWorld* GetWorld() { return m_world; }
|
inline LegoWorld* GetWorld() { return m_world; }
|
||||||
inline LegoCameraController* GetCamera() { return m_camera; }
|
inline LegoCameraController* GetCamera() { return m_camera; }
|
||||||
|
@@ -62,6 +62,12 @@ extern MxAtomId* g_nocdSourceName;
|
|||||||
// SIZE 0x140
|
// SIZE 0x140
|
||||||
class LegoOmni : public MxOmni {
|
class LegoOmni : public MxOmni {
|
||||||
public:
|
public:
|
||||||
|
enum {
|
||||||
|
c_disableInput = 0x01,
|
||||||
|
c_disable3d = 0x02,
|
||||||
|
c_clearScreen = 0x04
|
||||||
|
};
|
||||||
|
|
||||||
__declspec(dllexport) void CreateBackgroundAudio();
|
__declspec(dllexport) void CreateBackgroundAudio();
|
||||||
__declspec(dllexport) void RemoveWorld(const MxAtomId&, MxLong);
|
__declspec(dllexport) void RemoveWorld(const MxAtomId&, MxLong);
|
||||||
__declspec(dllexport) static int GetCurrPathInfo(LegoPathBoundary**, MxS32&);
|
__declspec(dllexport) static int GetCurrPathInfo(LegoPathBoundary**, MxS32&);
|
||||||
@@ -99,6 +105,7 @@ public:
|
|||||||
|
|
||||||
LegoEntity* FindByEntityIdOrAtomId(const MxAtomId& p_atom, MxS32 p_entityid);
|
LegoEntity* FindByEntityIdOrAtomId(const MxAtomId& p_atom, MxS32 p_entityid);
|
||||||
void AddWorld(LegoWorld* p_world);
|
void AddWorld(LegoWorld* p_world);
|
||||||
|
void FUN_1005b4f0(MxBool p_disable, MxU16 p_flags);
|
||||||
|
|
||||||
LegoVideoManager* GetVideoManager() { return (LegoVideoManager*) m_videoManager; }
|
LegoVideoManager* GetVideoManager() { return (LegoVideoManager*) m_videoManager; }
|
||||||
LegoSoundManager* GetSoundManager() { return (LegoSoundManager*) m_soundManager; }
|
LegoSoundManager* GetSoundManager() { return (LegoSoundManager*) m_soundManager; }
|
||||||
@@ -162,7 +169,7 @@ LegoPlantManager* PlantManager();
|
|||||||
LegoWorld* GetCurrentWorld();
|
LegoWorld* GetCurrentWorld();
|
||||||
LegoUnkSaveDataWriter* GetUnkSaveDataWriter();
|
LegoUnkSaveDataWriter* GetUnkSaveDataWriter();
|
||||||
GifManager* GetGifManager();
|
GifManager* GetGifManager();
|
||||||
void FUN_10015820(MxU32, MxU32);
|
void FUN_10015820(MxBool p_disable, MxU16 p_flags);
|
||||||
void FUN_10015860(const char*, MxU8);
|
void FUN_10015860(const char*, MxU8);
|
||||||
LegoEntity* FindEntityByAtomIdOrEntityId(const MxAtomId& p_atom, MxS32 p_entityid);
|
LegoEntity* FindEntityByAtomIdOrEntityId(const MxAtomId& p_atom, MxS32 p_entityid);
|
||||||
MxDSAction& GetCurrentAction();
|
MxDSAction& GetCurrentAction();
|
||||||
|
@@ -30,7 +30,7 @@ public:
|
|||||||
virtual MxResult Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS, MxBool p_createThread)
|
virtual MxResult Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS, MxBool p_createThread)
|
||||||
override; // vtable+0x2c
|
override; // vtable+0x2c
|
||||||
virtual MxResult RealizePalette(MxPalette*) override; // vtable+0x30
|
virtual MxResult RealizePalette(MxPalette*) override; // vtable+0x30
|
||||||
virtual void VTable0x34(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height) override; // vtable+0x34
|
virtual void UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height) override; // vtable+0x34
|
||||||
virtual void VTable0x38(undefined4, undefined4); // vtable+0x38
|
virtual void VTable0x38(undefined4, undefined4); // vtable+0x38
|
||||||
// FUNCTION: LGEO1 0x1007ab10
|
// FUNCTION: LGEO1 0x1007ab10
|
||||||
virtual LegoUnknown100d9d00* VTable0x3c() { return m_unk0x100d9d00; } // vtable+0x3c
|
virtual LegoUnknown100d9d00* VTable0x3c() { return m_unk0x100d9d00; } // vtable+0x3c
|
||||||
|
@@ -99,7 +99,7 @@ MxU32 Helicopter::VTable0xcc()
|
|||||||
AnimationManager()->FUN_10064670(FALSE);
|
AnimationManager()->FUN_10064670(FALSE);
|
||||||
VTable0xe8(0x29, TRUE, 7);
|
VTable0xe8(0x29, TRUE, 7);
|
||||||
((Isle*) GetCurrentWorld())->SetUnknown13c(0x3c);
|
((Isle*) GetCurrentWorld())->SetUnknown13c(0x3c);
|
||||||
FUN_10015820(1, 0);
|
FUN_10015820(TRUE, 0);
|
||||||
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, TRUE);
|
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, TRUE);
|
||||||
SetUnknownDC(4);
|
SetUnknownDC(4);
|
||||||
PlayMusic(9);
|
PlayMusic(9);
|
||||||
|
@@ -45,7 +45,7 @@ LegoWorldPresenter::~LegoWorldPresenter()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (result == FALSE) {
|
if (result == FALSE) {
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_entity) {
|
if (m_entity) {
|
||||||
|
@@ -304,7 +304,7 @@ void Infocenter::VTable0x50()
|
|||||||
|
|
||||||
PlayDialogue(c_letsGetStartedDialogue);
|
PlayDialogue(c_letsGetStartedDialogue);
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
@@ -313,7 +313,7 @@ void Infocenter::VTable0x50()
|
|||||||
case 8:
|
case 8:
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
PlayDialogue(c_exitConfirmationDialogue);
|
PlayDialogue(c_exitConfirmationDialogue);
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
return;
|
return;
|
||||||
case 0xf:
|
case 0xf:
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||||
@@ -322,7 +322,7 @@ void Infocenter::VTable0x50()
|
|||||||
|
|
||||||
PlayDialogue(c_clickOnInfomanDialogue);
|
PlayDialogue(c_clickOnInfomanDialogue);
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -334,7 +334,7 @@ void Infocenter::VTable0x50()
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_infocenterState->SetUnknown0x74(11);
|
m_infocenterState->SetUnknown0x74(11);
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -469,7 +469,7 @@ void Infocenter::StopCutscene()
|
|||||||
VideoManager()->EnableFullScreenMovie(FALSE);
|
VideoManager()->EnableFullScreenMovie(FALSE);
|
||||||
InputManager()->SetUnknown335(FALSE);
|
InputManager()->SetUnknown335(FALSE);
|
||||||
SetAppCursor(0); // Restore cursor to arrow
|
SetAppCursor(0); // Restore cursor to arrow
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10070d00
|
// FUNCTION: LEGO1 0x10070d00
|
||||||
|
@@ -147,7 +147,7 @@ void Score::VTable0x50()
|
|||||||
else
|
else
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
|
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100016d0
|
// FUNCTION: LEGO1 0x100016d0
|
||||||
|
@@ -7,6 +7,12 @@
|
|||||||
DECOMP_SIZE_ASSERT(LegoInputManager, 0x338);
|
DECOMP_SIZE_ASSERT(LegoInputManager, 0x338);
|
||||||
DECOMP_SIZE_ASSERT(LegoEventQueue, 0x18);
|
DECOMP_SIZE_ASSERT(LegoEventQueue, 0x18);
|
||||||
|
|
||||||
|
// GLOBAL: LEGO1 0x100f31b0
|
||||||
|
MxS32 g_unk0x100f31b0 = -1;
|
||||||
|
|
||||||
|
// GLOBAL: LEGO1 0x100f31b4
|
||||||
|
MxS32 g_unk0x100f31b4 = 0;
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1005b790
|
// FUNCTION: LEGO1 0x1005b790
|
||||||
LegoInputManager::LegoInputManager()
|
LegoInputManager::LegoInputManager()
|
||||||
{
|
{
|
||||||
@@ -271,3 +277,11 @@ void LegoInputManager::KillTimer()
|
|||||||
::KillTimer(omni->GetWindowHandle(), m_timer);
|
::KillTimer(omni->GetWindowHandle(), m_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1005cff0
|
||||||
|
void LegoInputManager::EnableInputProcessing()
|
||||||
|
{
|
||||||
|
m_unk0x88 = FALSE;
|
||||||
|
g_unk0x100f31b0 = -1;
|
||||||
|
g_unk0x100f31b4 = 0;
|
||||||
|
}
|
||||||
|
@@ -166,7 +166,7 @@ void Isle::VTable0x50()
|
|||||||
FUN_1003ef00(TRUE);
|
FUN_1003ef00(TRUE);
|
||||||
FUN_10032620();
|
FUN_10032620();
|
||||||
m_act1state->FUN_10034d00();
|
m_act1state->FUN_10034d00();
|
||||||
FUN_10015820(0, 7);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -206,10 +206,10 @@ GifManager* GetGifManager()
|
|||||||
return LegoOmni::GetInstance()->GetGifManager();
|
return LegoOmni::GetInstance()->GetGifManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10015820
|
// FUNCTION: LEGO1 0x10015820
|
||||||
void FUN_10015820(MxU32, MxU32)
|
void FUN_10015820(MxBool p_disable, MxU16 p_flags)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoOmni::GetInstance()->FUN_1005b4f0(p_disable, p_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10015860
|
// STUB: LEGO1 0x10015860
|
||||||
@@ -680,6 +680,29 @@ MxS32 LegoOmni::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value)
|
|||||||
return GetCurrentWorld()->GetCurrPathInfo(p_path, p_value);
|
return GetCurrentWorld()->GetCurrPathInfo(p_path, p_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1005b4f0
|
||||||
|
void LegoOmni::FUN_1005b4f0(MxBool p_disable, MxU16 p_flags)
|
||||||
|
{
|
||||||
|
if (p_disable) {
|
||||||
|
if (p_flags & c_disableInput) {
|
||||||
|
m_inputMgr->DisableInputProcessing();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_flags & c_disable3d) {
|
||||||
|
((LegoVideoManager*) m_videoManager)->SetRender3D(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_flags & c_clearScreen) {
|
||||||
|
m_videoManager->GetDisplaySurface()->ClearScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_inputMgr->EnableInputProcessing();
|
||||||
|
((LegoVideoManager*) m_videoManager)->SetRender3D(TRUE);
|
||||||
|
((LegoVideoManager*) m_videoManager)->UpdateView(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1005b560
|
// FUNCTION: LEGO1 0x1005b560
|
||||||
void LegoOmni::CreateBackgroundAudio()
|
void LegoOmni::CreateBackgroundAudio()
|
||||||
{
|
{
|
||||||
|
@@ -423,7 +423,7 @@ void LegoVideoManager::OverrideSkyColor(MxBool p_shouldOverride)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1007c4d0
|
// FUNCTION: LEGO1 0x1007c4d0
|
||||||
void LegoVideoManager::VTable0x34(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
|
void LegoVideoManager::UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
|
||||||
{
|
{
|
||||||
if (p_width == 0) {
|
if (p_width == 0) {
|
||||||
p_width = m_videoParam.GetRect().GetWidth();
|
p_width = m_videoParam.GetRect().GetWidth();
|
||||||
|
@@ -32,7 +32,7 @@ public:
|
|||||||
|
|
||||||
__declspec(dllexport) void InvalidateRect(MxRect32&);
|
__declspec(dllexport) void InvalidateRect(MxRect32&);
|
||||||
__declspec(dllexport) virtual MxResult RealizePalette(MxPalette*); // vtable+0x30
|
__declspec(dllexport) virtual MxResult RealizePalette(MxPalette*); // vtable+0x30
|
||||||
virtual void VTable0x34(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height); // vtable+0x34
|
virtual void UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height); // vtable+0x34
|
||||||
|
|
||||||
MxResult Init();
|
MxResult Init();
|
||||||
void Destroy(MxBool p_fromDestructor);
|
void Destroy(MxBool p_fromDestructor);
|
||||||
|
@@ -155,10 +155,10 @@ void MxStillPresenter::VTable0x88(MxS32 p_x, MxS32 p_y)
|
|||||||
MxRect32 rectB(m_location.GetX(), m_location.GetY(), width + m_location.GetX(), height + m_location.GetY());
|
MxRect32 rectB(m_location.GetX(), m_location.GetY(), width + m_location.GetX(), height + m_location.GetY());
|
||||||
|
|
||||||
MVideoManager()->InvalidateRect(rectA);
|
MVideoManager()->InvalidateRect(rectA);
|
||||||
MVideoManager()->VTable0x34(rectA.GetLeft(), rectA.GetTop(), rectA.GetWidth(), rectA.GetHeight());
|
MVideoManager()->UpdateView(rectA.GetLeft(), rectA.GetTop(), rectA.GetWidth(), rectA.GetHeight());
|
||||||
|
|
||||||
MVideoManager()->InvalidateRect(rectB);
|
MVideoManager()->InvalidateRect(rectB);
|
||||||
MVideoManager()->VTable0x34(rectB.GetLeft(), rectB.GetTop(), rectB.GetWidth(), rectB.GetHeight());
|
MVideoManager()->UpdateView(rectB.GetLeft(), rectB.GetTop(), rectB.GetWidth(), rectB.GetHeight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ void MxStillPresenter::Enable(MxBool p_enable)
|
|||||||
|
|
||||||
MxRect32 rect(x, y, width + x, height + y);
|
MxRect32 rect(x, y, width + x, height + y);
|
||||||
MVideoManager()->InvalidateRect(rect);
|
MVideoManager()->InvalidateRect(rect);
|
||||||
MVideoManager()->VTable0x34(rect.GetLeft(), rect.GetTop(), rect.GetWidth(), rect.GetHeight());
|
MVideoManager()->UpdateView(rect.GetLeft(), rect.GetTop(), rect.GetWidth(), rect.GetHeight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@ MxVideoManager::MxVideoManager()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100be270
|
// FUNCTION: LEGO1 0x100be270
|
||||||
void MxVideoManager::VTable0x34(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
|
void MxVideoManager::UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -151,7 +151,7 @@ void MxVideoPresenter::Destroy(MxBool p_fromDestructor)
|
|||||||
|
|
||||||
MxRect32 rect(x, y, x + width, y + height);
|
MxRect32 rect(x, y, x + width, y + height);
|
||||||
MVideoManager()->InvalidateRect(rect);
|
MVideoManager()->InvalidateRect(rect);
|
||||||
MVideoManager()->VTable0x34(rect.GetLeft(), rect.GetTop(), rect.GetWidth(), rect.GetHeight());
|
MVideoManager()->UpdateView(rect.GetLeft(), rect.GetTop(), rect.GetWidth(), rect.GetHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
delete m_bitmap;
|
delete m_bitmap;
|
||||||
|
Reference in New Issue
Block a user