implement some of MxTransitionManager (#143)

* implement some of MxTransitionManager

start working on MxTransitionManager::StartTransition
add TransitionType enum
implement/match MxTransitionManager::GetDDrawSurfaceFromVideoManager
implement/match global function SetAppCursor

* remove offset comment from mxomni.h

* remove misc offset comments from mxtransitionmanager.h

* address feedback

* merge m_unk20-24 into pad
This commit is contained in:
Ramen2X 2023-09-29 12:09:46 -04:00 committed by GitHub
parent 2794525564
commit 44c3ae478b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 117 additions and 5 deletions

View file

@ -28,10 +28,22 @@ class LegoInputManager : public MxPresenter
virtual MxResult Tickle() override; // vtable+0x8
undefined m_pad40[0x15c];
undefined m_pad40[0x48];
MxBool m_unk88;
undefined m_unk89[0x113];
// 0x19C
int m_joystickIndex;
undefined m_pad200[0x194];
undefined m_pad1a0[0x194];
// 0x334
MxBool m_useJoystick;
undefined m_unk335;
MxBool m_unk336;
undefined m_unk337;
};
#endif // LEGOINPUTMANAGER_H

View file

@ -21,6 +21,7 @@
#include "legoplantmanager.h"
class LegoSoundManager;
class MxTransitionManager;
// VTABLE 0x100d8638
// SIZE: 0x140

View file

@ -23,6 +23,7 @@ class LegoVideoManager : public MxVideoManager
inline MxDirect3D *GetDirect3D() { return this->m_direct3d; }
void SetSkyColor(float r, float g, float b);
inline void SetUnkE4(MxBool p_value) { this->m_unke4 = p_value; }
private:
undefined4 m_unk64;
@ -30,6 +31,8 @@ class LegoVideoManager : public MxVideoManager
undefined4 m_unk6c;
undefined4 m_unk70;
MxDirect3D *m_direct3d;
undefined m_pad78[0x6c];
MxBool m_unke4;
};
#endif // LEGOVIDEOMANAGER_H

View file

@ -28,8 +28,9 @@ class MxBackgroundAudioManager : public MxCore
}
__declspec(dllexport) void Enable(unsigned char p);
private:
void Stop();
private:
void Init();
MxBool m_musicEnabled; // 0x8

View file

@ -33,6 +33,8 @@ class MxDisplaySurface : public MxCore
virtual void ReleaseDC(HDC p_hdc);
virtual undefined4 vtable44(undefined4, undefined4*, undefined4, undefined4);
inline LPDIRECTDRAWSURFACE GetDirectDrawSurface2() { return this->m_ddSurface2; }
private:
MxVideoParam m_videoParam;
LPDIRECTDRAWSURFACE m_ddSurface1;

View file

@ -289,3 +289,9 @@ MxEventManager* EventManager()
{
return MxOmni::GetInstance()->GetEventManager();
}
// OFFSET: LEGO1 0x1003ef40
void SetAppCursor(WPARAM p_wparam)
{
PostMessageA(MxOmni::GetInstance()->GetWindowHandle(), 0x5400, p_wparam, 0);
}

View file

@ -92,4 +92,6 @@ __declspec(dllexport) MxNotificationManager * NotificationManager();
MxVideoManager * MVideoManager();
MxAtomIdCounterSet* AtomIdCounterSet();
void SetAppCursor(WPARAM p_wparam);
#endif // MXOMNI_H

View file

@ -1,4 +1,7 @@
#include "mxtransitionmanager.h"
#include "legovideomanager.h"
DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900);
// OFFSET: LEGO1 0x1004b8d0 STUB
MxTransitionManager::MxTransitionManager()
@ -25,3 +28,47 @@ void MxTransitionManager::SetWaitIndicator(MxVideoPresenter *videoPresenter)
{
// TODO
}
// OFFSET: LEGO1 0x1004baa0
MxResult MxTransitionManager::GetDDrawSurfaceFromVideoManager() // vtable+0x14
{
LegoVideoManager *videoManager = VideoManager();
this->m_ddSurface = videoManager->GetDisplaySurface()->GetDirectDrawSurface2();
return SUCCESS;
}
// OFFSET: LEGO1 0x1004bb70
MxResult MxTransitionManager::StartTransition(TransitionType p_animationType, MxS32 p_speed,
undefined p_unk, MxBool p_playMusicInAnim)
{
// TODO: Incomplete and far from matching
if (this->m_transitionType == NOT_TRANSITIONING) {
if (!p_playMusicInAnim) {
MxBackgroundAudioManager *backgroundAudioManager = BackgroundAudioManager();
backgroundAudioManager->Stop();
}
this->m_transitionType = p_animationType;
// TODO: This part of the function is mangled and I can't make out what it's doing right now
MxU32 time = timeGetTime();
this->m_systemTime = time;
this->m_animationSpeed = p_speed;
MxTickleManager *tickleManager = TickleManager();
tickleManager->RegisterClient(this, p_speed);
LegoInputManager *inputManager = InputManager();
inputManager->m_unk88 = TRUE;
inputManager->m_unk336 = FALSE;
LegoVideoManager *videoManager = VideoManager();
videoManager->SetUnkE4(FALSE);
SetAppCursor(1);
return SUCCESS;
}
return FAILURE;
}

View file

@ -2,10 +2,11 @@
#define MXTRANSITIONMANAGER_H
#include "mxcore.h"
#include "mxvideopresenter.h"
#include "legoomni.h"
class MxVideoPresenter;
// 0x100d7ea0
// VTABLE 0x100d7ea0
class MxTransitionManager : public MxCore
{
public:
@ -15,6 +16,42 @@ class MxTransitionManager : public MxCore
__declspec(dllexport) void SetWaitIndicator(MxVideoPresenter *videoPresenter);
virtual MxResult Tickle(); // vtable+0x8
// OFFSET: LEGO1 0x1004b950
inline virtual const char *ClassName() const override // vtable+0x0c
{
return "MxTransitionManager";
}
// OFFSET: LEGO1 0x1004b960
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
{
return !strcmp(name, MxTransitionManager::ClassName()) || MxCore::IsA(name);
}
virtual MxResult GetDDrawSurfaceFromVideoManager(); // vtable+0x14
enum TransitionType {
NOT_TRANSITIONING,
NO_ANIMATION,
DISSOLVE,
PIXELATION,
SCREEN_WIPE,
WINDOWS,
BROKEN // Unknown what this is supposed to be, it locks the game up
};
MxResult StartTransition(TransitionType p_animationType, MxS32 p_speed, undefined p_unk, MxBool p_playMusicInAnim);
private:
undefined m_pad00[0x20];
undefined m_pad20[0x04];
TransitionType m_transitionType;
LPDIRECTDRAWSURFACE m_ddSurface;
MxU16 m_animationTimer;
undefined m_pad36[0x8c2];
MxULong m_systemTime;
MxS32 m_animationSpeed;
};
#endif // MXTRANSITIONMANAGER_H

View file

@ -26,6 +26,7 @@ class MxVideoManager : public MxMediaManager
inline MxVideoParam& GetVideoParam() { return this->m_videoParam; }
inline LPDIRECTDRAW GetDirectDraw() { return this->m_pDirectDraw; }
inline MxDisplaySurface *GetDisplaySurface() { return this->m_displaySurface; }
private:
MxVideoParam m_videoParam;
LPDIRECTDRAW m_pDirectDraw;