mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 23:48:12 -05:00
Implement MxTransitionManager ctor/dtor/rest of StartTransition (#153)
This commit is contained in:
parent
592ede1c7b
commit
56f3d12096
4 changed files with 116 additions and 39 deletions
|
@ -4,16 +4,30 @@
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900);
|
DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900);
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1004b8d0 STUB
|
// OFFSET: LEGO1 0x1004b8d0
|
||||||
MxTransitionManager::MxTransitionManager()
|
MxTransitionManager::MxTransitionManager()
|
||||||
{
|
{
|
||||||
// TODO
|
m_animationTimer = 0;
|
||||||
|
m_transitionType = NOT_TRANSITIONING;
|
||||||
|
m_ddSurface = NULL;
|
||||||
|
m_unk08 = 0;
|
||||||
|
m_unk1c = 0;
|
||||||
|
m_unk20.bit0 = FALSE;
|
||||||
|
m_unk28.bit0 = FALSE;
|
||||||
|
m_unk24 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1004ba00 STUB
|
// OFFSET: LEGO1 0x1004ba00
|
||||||
MxTransitionManager::~MxTransitionManager()
|
MxTransitionManager::~MxTransitionManager()
|
||||||
{
|
{
|
||||||
// TODO
|
free(m_unk1c);
|
||||||
|
|
||||||
|
if (m_unk08 != NULL) {
|
||||||
|
delete m_unk08->m_unk1c;
|
||||||
|
delete m_unk08;
|
||||||
|
}
|
||||||
|
|
||||||
|
TickleManager()->UnregisterClient(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1004bac0 STUB
|
// OFFSET: LEGO1 0x1004bac0 STUB
|
||||||
|
@ -40,18 +54,25 @@ MxResult MxTransitionManager::GetDDrawSurfaceFromVideoManager() // vtable+0x14
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1004bb70
|
// OFFSET: LEGO1 0x1004bb70
|
||||||
MxResult MxTransitionManager::StartTransition(TransitionType p_animationType, MxS32 p_speed,
|
MxResult MxTransitionManager::StartTransition(TransitionType p_animationType, MxS32 p_speed,
|
||||||
undefined p_unk, MxBool p_playMusicInAnim)
|
MxBool p_unk, MxBool p_playMusicInAnim)
|
||||||
{
|
{
|
||||||
// TODO: Incomplete and far from matching
|
|
||||||
|
|
||||||
if (this->m_transitionType == NOT_TRANSITIONING) {
|
if (this->m_transitionType == NOT_TRANSITIONING) {
|
||||||
if (!p_playMusicInAnim) {
|
if (!p_playMusicInAnim) {
|
||||||
MxBackgroundAudioManager *backgroundAudioManager = BackgroundAudioManager();
|
MxBackgroundAudioManager *backgroundAudioManager = BackgroundAudioManager();
|
||||||
backgroundAudioManager->Stop();
|
backgroundAudioManager->Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
this->m_transitionType = p_animationType;
|
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
|
m_unk20.bit0 = p_unk;
|
||||||
|
|
||||||
|
if (m_unk20.bit0 && m_unk08 != NULL) {
|
||||||
|
m_unk08->vtable54(1);
|
||||||
|
|
||||||
|
MxTransitionManagerUnknownSubclass2 *iVar2 = m_unk08->m_unk1c;
|
||||||
|
iVar2->m_unk3c = 10000;
|
||||||
|
iVar2->m_unk30 |= 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
MxU32 time = timeGetTime();
|
MxU32 time = timeGetTime();
|
||||||
this->m_systemTime = time;
|
this->m_systemTime = time;
|
||||||
|
|
|
@ -5,6 +5,52 @@
|
||||||
#include "mxvideopresenter.h"
|
#include "mxvideopresenter.h"
|
||||||
#include "legoomni.h"
|
#include "legoomni.h"
|
||||||
|
|
||||||
|
class MxTransitionManagerUnknownSubclass2
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~MxTransitionManagerUnknownSubclass2(){}
|
||||||
|
|
||||||
|
undefined m_unk04[0x2c];
|
||||||
|
undefined4 m_unk30;
|
||||||
|
undefined4 m_unk34;
|
||||||
|
undefined4 m_unk38;
|
||||||
|
undefined4 m_unk3c;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Don't know what this is yet
|
||||||
|
class MxTransitionManagerUnknownSubclass1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~MxTransitionManagerUnknownSubclass1(){}
|
||||||
|
|
||||||
|
virtual void vtable04();
|
||||||
|
virtual void vtable08();
|
||||||
|
virtual void vtable0c();
|
||||||
|
virtual void vtable10();
|
||||||
|
virtual void vtable14();
|
||||||
|
virtual void vtable18();
|
||||||
|
virtual void vtable1c();
|
||||||
|
virtual void vtable20();
|
||||||
|
virtual void vtable24();
|
||||||
|
virtual void vtable28();
|
||||||
|
virtual void vtable2c();
|
||||||
|
virtual void vtable30();
|
||||||
|
virtual void vtable34();
|
||||||
|
virtual void vtable38();
|
||||||
|
virtual void vtable3c();
|
||||||
|
virtual void vtable40();
|
||||||
|
virtual void vtable44();
|
||||||
|
virtual void vtable48();
|
||||||
|
virtual void vtable4c();
|
||||||
|
virtual void vtable50();
|
||||||
|
virtual void vtable54(undefined4 p_unk1);
|
||||||
|
|
||||||
|
undefined m_unk04[0x18];
|
||||||
|
MxTransitionManagerUnknownSubclass2 *m_unk1c;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
// VTABLE 0x100d7ea0
|
// VTABLE 0x100d7ea0
|
||||||
class MxTransitionManager : public MxCore
|
class MxTransitionManager : public MxCore
|
||||||
{
|
{
|
||||||
|
@ -40,11 +86,19 @@ class MxTransitionManager : public MxCore
|
||||||
BROKEN // Unknown what this is supposed to be, it locks the game up
|
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);
|
MxResult StartTransition(TransitionType p_animationType, MxS32 p_speed, MxBool p_unk, MxBool p_playMusicInAnim);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined m_pad00[0x20];
|
MxTransitionManagerUnknownSubclass1 *m_unk08;
|
||||||
undefined m_pad20[0x04];
|
undefined4 m_unk0c;
|
||||||
|
undefined4 m_unk10;
|
||||||
|
undefined4 m_unk14;
|
||||||
|
undefined4 m_unk18;
|
||||||
|
void *m_unk1c;
|
||||||
|
flag_bitfield m_unk20;
|
||||||
|
undefined4 m_unk24;
|
||||||
|
flag_bitfield m_unk28;
|
||||||
|
|
||||||
TransitionType m_transitionType;
|
TransitionType m_transitionType;
|
||||||
LPDIRECTDRAWSURFACE m_ddSurface;
|
LPDIRECTDRAWSURFACE m_ddSurface;
|
||||||
MxU16 m_animationTimer;
|
MxU16 m_animationTimer;
|
||||||
|
|
|
@ -44,4 +44,19 @@ typedef MxU8 MxBool;
|
||||||
#define TWOCC(a, b) (((a) << 0) | ((b) << 8))
|
#define TWOCC(a, b) (((a) << 0) | ((b) << 8))
|
||||||
#define FOURCC(a, b, c, d) (((a) << 0) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
#define FOURCC(a, b, c, d) (((a) << 0) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
||||||
|
|
||||||
|
// Must be union with struct for match.
|
||||||
|
typedef union {
|
||||||
|
struct {
|
||||||
|
MxU8 bit0: 1;
|
||||||
|
MxU8 bit1: 1;
|
||||||
|
MxU8 bit2: 1;
|
||||||
|
MxU8 bit3: 1;
|
||||||
|
MxU8 bit4: 1;
|
||||||
|
MxU8 bit5: 1;
|
||||||
|
MxU8 bit6: 1;
|
||||||
|
MxU8 bit7: 1;
|
||||||
|
};
|
||||||
|
// BYTE all; // ?
|
||||||
|
} flag_bitfield;
|
||||||
|
|
||||||
#endif // MXTYPE_H
|
#endif // MXTYPE_H
|
||||||
|
|
|
@ -3,20 +3,7 @@
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
// Must be union with struct for match.
|
#include "mxtypes.h"
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
BYTE bit0: 1;
|
|
||||||
BYTE bit1: 1;
|
|
||||||
BYTE bit2: 1;
|
|
||||||
BYTE bit3: 1;
|
|
||||||
BYTE bit4: 1;
|
|
||||||
BYTE bit5: 1;
|
|
||||||
BYTE bit6: 1;
|
|
||||||
BYTE bit7: 1;
|
|
||||||
};
|
|
||||||
// BYTE all; // ?
|
|
||||||
} flag_bitfield;
|
|
||||||
|
|
||||||
class MxVideoParamFlags
|
class MxVideoParamFlags
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue