mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 18:41:14 +00:00
Merge remote-tracking branch 'isle/master'
This commit is contained in:
commit
c774a8edde
@ -313,10 +313,10 @@ target_sources(lego1 PRIVATE
|
||||
LEGO1/omni/src/common/mxcompositepresenter.cpp
|
||||
LEGO1/omni/src/common/mxcore.cpp
|
||||
LEGO1/omni/src/common/mxdebug.cpp
|
||||
LEGO1/omni/src/common/mxmediamanager.cpp
|
||||
LEGO1/omni/src/common/mxmediapresenter.cpp
|
||||
LEGO1/omni/src/common/mxmisc.cpp
|
||||
LEGO1/omni/src/common/mxobjectfactory.cpp
|
||||
LEGO1/omni/src/common/mxpresentationmanager.cpp
|
||||
LEGO1/omni/src/common/mxpresenter.cpp
|
||||
LEGO1/omni/src/common/mxstring.cpp
|
||||
LEGO1/omni/src/common/mxticklemanager.cpp
|
||||
|
||||
@ -287,7 +287,7 @@ void IsleApp::SetupVideoFlags(
|
||||
m_videoParam.Flags().SetLacksLightSupport(!hasLightSupport);
|
||||
m_videoParam.Flags().SetF1bit7(param_7);
|
||||
m_videoParam.Flags().SetWideViewAngle(wideViewAngle);
|
||||
m_videoParam.Flags().SetF2bit1(1);
|
||||
m_videoParam.Flags().SetEnabled(TRUE);
|
||||
m_videoParam.SetDeviceName(deviceId);
|
||||
if (using8bit) {
|
||||
m_videoParam.Flags().Set16Bit(0);
|
||||
|
||||
@ -211,7 +211,7 @@ class Ambulance : public IslePathActor {
|
||||
MxS16 m_atPoliceTask; // 0x16c
|
||||
MxS16 m_atBeachTask; // 0x16e
|
||||
MxS16 m_taskState; // 0x170
|
||||
MxS16 m_unk0x172; // 0x172
|
||||
MxS16 m_enableRandomAudio; // 0x172
|
||||
IsleScript::Script m_lastAction; // 0x174
|
||||
IsleScript::Script m_lastAnimation; // 0x178
|
||||
MxFloat m_fuel; // 0x17c
|
||||
|
||||
@ -48,10 +48,13 @@ typedef set<LegoCacheSoundEntry, Set100d6b4cComparator> Set100d6b4c;
|
||||
typedef list<LegoCacheSoundEntry> List100d6b4c;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6b4c
|
||||
// VTABLE: BETA10 0x101becac
|
||||
// SIZE 0x20
|
||||
class LegoCacheSoundManager {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x100d0a60
|
||||
LegoCacheSoundManager() {}
|
||||
|
||||
~LegoCacheSoundManager();
|
||||
|
||||
virtual MxResult Tickle(); // vtable+0x00
|
||||
@ -68,6 +71,9 @@ class LegoCacheSoundManager {
|
||||
List100d6b4c m_list; // 0x14
|
||||
};
|
||||
|
||||
// SYNTHETIC: BETA10 0x100d06b0
|
||||
// LegoCacheSoundManager::`scalar deleting destructor'
|
||||
|
||||
// TODO: Function names subject to change.
|
||||
|
||||
// clang-format off
|
||||
|
||||
@ -38,17 +38,17 @@ class LegoCameraController : public LegoPointOfViewController {
|
||||
virtual MxResult Create(); // vtable+0x44
|
||||
|
||||
void SetWorldTransform(const Vector3& p_at, const Vector3& p_dir, const Vector3& p_up);
|
||||
void FUN_10012290(float p_angle);
|
||||
void FUN_10012320(float p_angle);
|
||||
MxResult FUN_100123b0(Matrix4& p_matrix);
|
||||
void FUN_100123e0(const Matrix4& p_transform, MxU32 p_und);
|
||||
void RotateZ(float p_angle);
|
||||
void RotateY(float p_angle);
|
||||
MxResult GetPointOfView(Matrix4& p_matrix);
|
||||
void TransformPointOfView(const Matrix4& p_transform, MxU32 p_multiply);
|
||||
Mx3DPointFloat GetWorldUp();
|
||||
Mx3DPointFloat GetWorldLocation();
|
||||
Mx3DPointFloat GetWorldDirection();
|
||||
|
||||
private:
|
||||
MxMatrix m_matrix1; // 0x38
|
||||
MxMatrix m_matrix2; // 0x80
|
||||
MxMatrix m_currentTransform; // 0x38
|
||||
MxMatrix m_originalTransform; // 0x80
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10011f50
|
||||
|
||||
@ -48,6 +48,7 @@ struct LegoActorInfo;
|
||||
typedef map<char*, LegoCharacter*, LegoCharacterComparator> LegoCharacterMap;
|
||||
|
||||
// VTABLE: LEGO1 0x100da878
|
||||
// VTABLE: BETA10 0x101bc028
|
||||
// SIZE 0x24
|
||||
class CustomizeAnimFileVariable : public MxVariable {
|
||||
public:
|
||||
|
||||
@ -30,6 +30,7 @@ struct InternationalCharacter {
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d74a8
|
||||
// VTABLE: BETA10 0x101bc4f0
|
||||
// SIZE 0x30
|
||||
class LegoBackgroundColor : public MxVariable {
|
||||
public:
|
||||
@ -50,9 +51,11 @@ class LegoBackgroundColor : public MxVariable {
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d74b8
|
||||
// VTABLE: BETA10 0x101bc500
|
||||
// SIZE 0x24
|
||||
class LegoFullScreenMovie : public MxVariable {
|
||||
public:
|
||||
LegoFullScreenMovie();
|
||||
LegoFullScreenMovie(const char* p_key, const char* p_value);
|
||||
|
||||
void SetValue(const char* p_option) override; // vtable+0x04
|
||||
|
||||
@ -17,15 +17,15 @@ class LegoSoundManager : public MxSoundManager {
|
||||
void Destroy() override; // vtable+0x18
|
||||
MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread) override; // vtable+0x30
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10029920
|
||||
// SYNTHETIC: BETA10 0x100d0660
|
||||
// LegoSoundManager::`scalar deleting destructor'
|
||||
|
||||
void UpdateListener(const float* p_position, const float* p_direction, const float* p_up, const float* p_velocity);
|
||||
|
||||
// FUNCTION: BETA10 0x1000f350
|
||||
LegoCacheSoundManager* GetCacheSoundManager() { return m_cacheSoundManager; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10029920
|
||||
// SYNTHETIC: BETA10 0x100d0660
|
||||
// LegoSoundManager::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
void Init();
|
||||
void Destroy(MxBool p_fromDestructor);
|
||||
|
||||
@ -17,41 +17,60 @@ extern const char* g_varVISIBILITY;
|
||||
extern const char* g_varCAMERALOCATION;
|
||||
extern const char* g_varCURSOR;
|
||||
extern const char* g_varWHOAMI;
|
||||
extern const char* g_varDEBUG;
|
||||
|
||||
// VTABLE: LEGO1 0x100d86c8
|
||||
// VTABLE: BETA10 0x101bc980
|
||||
// SIZE 0x24
|
||||
class VisibilityVariable : public MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x10093470
|
||||
VisibilityVariable() { m_key = g_varVISIBILITY; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d86b8
|
||||
// VTABLE: BETA10 0x101bc990
|
||||
// SIZE 0x24
|
||||
class CameraLocationVariable : public MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x10093510
|
||||
CameraLocationVariable() { m_key = g_varCAMERALOCATION; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d86a8
|
||||
// VTABLE: BETA10 0x101bc9a0
|
||||
// SIZE 0x24
|
||||
class CursorVariable : public MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x100935b0
|
||||
CursorVariable() { m_key = g_varCURSOR; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d8698
|
||||
// VTABLE: BETA10 0x101bc9b0
|
||||
// SIZE 0x24
|
||||
class WhoAmIVariable : public MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x10093650
|
||||
WhoAmIVariable() { m_key = g_varWHOAMI; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: BETA10 0x101bc9c0
|
||||
// SIZE 0x24
|
||||
class DebugVariable : public MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x100936f0
|
||||
DebugVariable() { m_key = g_varDEBUG; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
#endif // LEGOVARIABLES_H
|
||||
|
||||
@ -44,7 +44,7 @@ Ambulance::Ambulance()
|
||||
m_atBeachTask = 0;
|
||||
m_taskState = Ambulance::e_none;
|
||||
m_lastAction = IsleScript::c_noneIsle;
|
||||
m_unk0x172 = 0;
|
||||
m_enableRandomAudio = 0;
|
||||
m_lastAnimation = IsleScript::c_noneIsle;
|
||||
m_fuel = 1.0;
|
||||
}
|
||||
@ -176,7 +176,7 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_state->m_state = AmbulanceMissionState::e_enteredAmbulance;
|
||||
CurrentWorld()->PlaceActor(UserActor());
|
||||
HandleClick();
|
||||
m_unk0x172 = 0;
|
||||
m_enableRandomAudio = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
}
|
||||
else if (objectId == IsleScript::c_hpz047pe_RunAnim || objectId == IsleScript::c_hpz048pe_RunAnim || objectId == IsleScript::c_hpz049bd_RunAnim || objectId == IsleScript::c_hpz053pa_RunAnim) {
|
||||
@ -201,7 +201,7 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
CurrentWorld()->PlaceActor(UserActor());
|
||||
HandleClick();
|
||||
SpawnPlayer(LegoGameState::e_pizzeriaExterior, TRUE, 0);
|
||||
m_unk0x172 = 0;
|
||||
m_enableRandomAudio = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
|
||||
if (m_atPoliceTask != 0) {
|
||||
@ -225,7 +225,7 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
CurrentWorld()->PlaceActor(UserActor());
|
||||
HandleClick();
|
||||
SpawnPlayer(LegoGameState::e_policeExited, TRUE, 0);
|
||||
m_unk0x172 = 0;
|
||||
m_enableRandomAudio = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
|
||||
if (m_atBeachTask != 0) {
|
||||
@ -516,8 +516,8 @@ void Ambulance::ActivateSceneActions()
|
||||
// FUNCTION: BETA10 0x100237df
|
||||
MxResult Ambulance::Tickle()
|
||||
{
|
||||
if (m_unk0x172 == 0) {
|
||||
m_unk0x172 = 1;
|
||||
if (m_enableRandomAudio == 0) {
|
||||
m_enableRandomAudio = 1;
|
||||
}
|
||||
else if (m_lastAction == IsleScript::c_noneIsle) {
|
||||
IsleScript::Script objectId;
|
||||
|
||||
@ -426,7 +426,7 @@ void Helicopter::Animate(float p_time)
|
||||
v2 *= f2;
|
||||
v2 += v1;
|
||||
|
||||
m_world->GetCameraController()->FUN_100123e0(mat, 0);
|
||||
m_world->GetCameraController()->TransformPointOfView(mat, 0);
|
||||
}
|
||||
else {
|
||||
if (m_state->m_unk0x08 == 4) {
|
||||
@ -459,7 +459,7 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix)
|
||||
// the typecast makes this function match for unknown reasons
|
||||
Vector3 vec6((const float*) m_unk0x1a8[3]); // locala0 // esp+0x28
|
||||
|
||||
m_world->GetCameraController()->FUN_100123b0(local48);
|
||||
m_world->GetCameraController()->GetPointOfView(local48);
|
||||
m_unk0x1a8.SetIdentity();
|
||||
local90 = p_matrix;
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ DECOMP_SIZE_ASSERT(LegoCacheSoundEntry, 0x08)
|
||||
DECOMP_SIZE_ASSERT(LegoCacheSoundManager, 0x20)
|
||||
|
||||
// FUNCTION: LEGO1 0x1003cf20
|
||||
// STUB: BETA10 0x100d0700
|
||||
LegoCacheSoundManager::~LegoCacheSoundManager()
|
||||
{
|
||||
LegoCacheSound* sound;
|
||||
@ -28,6 +29,7 @@ LegoCacheSoundManager::~LegoCacheSoundManager()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003d050
|
||||
// STUB: BETA10 0x100652f0
|
||||
MxResult LegoCacheSoundManager::Tickle()
|
||||
{
|
||||
#ifdef COMPAT_MODE
|
||||
|
||||
@ -9,24 +9,28 @@
|
||||
DECOMP_SIZE_ASSERT(LegoSoundManager, 0x44)
|
||||
|
||||
// FUNCTION: LEGO1 0x100298a0
|
||||
// FUNCTION: BETA10 0x100cffb0
|
||||
LegoSoundManager::LegoSoundManager()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10029940
|
||||
// FUNCTION: BETA10 0x100d0027
|
||||
LegoSoundManager::~LegoSoundManager()
|
||||
{
|
||||
Destroy(TRUE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100299a0
|
||||
// FUNCTION: BETA10 0x100d0099
|
||||
void LegoSoundManager::Init()
|
||||
{
|
||||
m_cacheSoundManager = NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100299b0
|
||||
// FUNCTION: BETA10 0x100d00c9
|
||||
void LegoSoundManager::Destroy(MxBool p_fromDestructor)
|
||||
{
|
||||
delete m_cacheSoundManager;
|
||||
@ -41,16 +45,18 @@ void LegoSoundManager::Destroy(MxBool p_fromDestructor)
|
||||
// FUNCTION: BETA10 0x100d0129
|
||||
MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
|
||||
{
|
||||
MxBool locked = FALSE;
|
||||
MxResult result = FAILURE;
|
||||
MxBool locked = FALSE;
|
||||
|
||||
if (MxSoundManager::Create(10, FALSE) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (MxSoundManager::Create(10, FALSE) == SUCCESS) {
|
||||
ENTER(m_criticalSection);
|
||||
locked = TRUE;
|
||||
m_cacheSoundManager = new LegoCacheSoundManager;
|
||||
assert(m_cacheSoundManager);
|
||||
result = SUCCESS;
|
||||
}
|
||||
|
||||
done:
|
||||
if (result != SUCCESS) {
|
||||
|
||||
@ -1092,6 +1092,7 @@ LegoROI* LegoCharacterManager::FUN_10085a80(const char* p_name, const char* p_lo
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10085aa0
|
||||
// FUNCTION: BETA10 0x1007703d
|
||||
CustomizeAnimFileVariable::CustomizeAnimFileVariable(const char* p_key)
|
||||
{
|
||||
m_key = p_key;
|
||||
@ -1099,6 +1100,7 @@ CustomizeAnimFileVariable::CustomizeAnimFileVariable(const char* p_key)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10085b50
|
||||
// FUNCTION: BETA10 0x100770c8
|
||||
void CustomizeAnimFileVariable::SetValue(const char* p_value)
|
||||
{
|
||||
// STRING: LEGO1 0x100fc4f4
|
||||
|
||||
@ -1349,6 +1349,11 @@ void LegoBackgroundColor::SetLightColor()
|
||||
SetLightColor(convertedR, convertedG, convertedB);
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10086a87
|
||||
LegoFullScreenMovie::LegoFullScreenMovie()
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003c500
|
||||
// FUNCTION: BETA10 0x10086af6
|
||||
LegoFullScreenMovie::LegoFullScreenMovie(const char* p_key, const char* p_value)
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "legonavcontroller.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "misc.h"
|
||||
#include "mxdebug.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
#include <SDL3/SDL_stdinc.h>
|
||||
@ -103,6 +104,10 @@ const char* g_nick = "Nick";
|
||||
// STRING: LEGO1 0x100f39e0
|
||||
const char* g_laura = "Laura";
|
||||
|
||||
// GLOBAL: BETA10 0x101f6ce4
|
||||
// STRING: BETA10 0x101f6d54
|
||||
const char* g_varDEBUG = "DEBUG";
|
||||
|
||||
// FUNCTION: LEGO1 0x10037d00
|
||||
// FUNCTION: BETA10 0x100d5620
|
||||
void VisibilityVariable::SetValue(const char* p_value)
|
||||
@ -132,6 +137,7 @@ void VisibilityVariable::SetValue(const char* p_value)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10037d80
|
||||
// FUNCTION: BETA10 0x100d56ee
|
||||
void CameraLocationVariable::SetValue(const char* p_value)
|
||||
{
|
||||
char buffer[256];
|
||||
@ -139,22 +145,25 @@ void CameraLocationVariable::SetValue(const char* p_value)
|
||||
|
||||
strcpy(buffer, p_value);
|
||||
|
||||
char* location = strtok(buffer, ",");
|
||||
NavController()->UpdateLocation(location);
|
||||
char* token = strtok(buffer, ",");
|
||||
assert(token);
|
||||
NavController()->UpdateLocation(token);
|
||||
|
||||
location = strtok(NULL, ",");
|
||||
if (location) {
|
||||
MxFloat pov = (MxFloat) atof(location);
|
||||
token = strtok(NULL, ",");
|
||||
if (token) {
|
||||
MxFloat pov = (MxFloat) atof(token);
|
||||
VideoManager()->Get3DManager()->SetFrustrum(pov, 0.1f, 250.0f);
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10037e30
|
||||
// FUNCTION: BETA10 0x100d57e2
|
||||
void CursorVariable::SetValue(const char* p_value)
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10037e40
|
||||
// FUNCTION: BETA10 0x100d57fa
|
||||
void WhoAmIVariable::SetValue(const char* p_value)
|
||||
{
|
||||
MxVariable::SetValue(p_value);
|
||||
@ -175,3 +184,10 @@ void WhoAmIVariable::SetValue(const char* p_value)
|
||||
GameState()->SetActorId(LegoActor::c_laura);
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x100d58fa
|
||||
void DebugVariable::SetValue(const char* p_value)
|
||||
{
|
||||
MxVariable::SetValue(p_value);
|
||||
MxTrace("%s\n", p_value);
|
||||
}
|
||||
|
||||
@ -124,28 +124,28 @@ void LegoCameraController::OnMouseMove(MxU8 p_modifier, MxPoint32 p_point)
|
||||
// FUNCTION: LEGO1 0x10012260
|
||||
void LegoCameraController::SetWorldTransform(const Vector3& p_at, const Vector3& p_dir, const Vector3& p_up)
|
||||
{
|
||||
CalcLocalTransform(p_at, p_dir, p_up, m_matrix1);
|
||||
m_matrix2 = m_matrix1;
|
||||
CalcLocalTransform(p_at, p_dir, p_up, m_currentTransform);
|
||||
m_originalTransform = m_currentTransform;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10012290
|
||||
// FUNCTION: BETA10 0x10068c34
|
||||
void LegoCameraController::FUN_10012290(float p_angle)
|
||||
void LegoCameraController::RotateZ(float p_angle)
|
||||
{
|
||||
m_matrix1 = m_matrix2;
|
||||
m_matrix1.RotateZ(p_angle);
|
||||
m_currentTransform = m_originalTransform;
|
||||
m_currentTransform.RotateZ(p_angle);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10012320
|
||||
// FUNCTION: BETA10 0x10068c73
|
||||
void LegoCameraController::FUN_10012320(float p_angle)
|
||||
void LegoCameraController::RotateY(float p_angle)
|
||||
{
|
||||
m_matrix1 = m_matrix2;
|
||||
m_matrix1.RotateY(p_angle);
|
||||
m_currentTransform = m_originalTransform;
|
||||
m_currentTransform.RotateY(p_angle);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100123b0
|
||||
MxResult LegoCameraController::FUN_100123b0(Matrix4& p_matrix)
|
||||
MxResult LegoCameraController::GetPointOfView(Matrix4& p_matrix)
|
||||
{
|
||||
if (m_lego3DView) {
|
||||
ViewROI* pov = m_lego3DView->GetPointOfView();
|
||||
@ -160,7 +160,7 @@ MxResult LegoCameraController::FUN_100123b0(Matrix4& p_matrix)
|
||||
|
||||
// FUNCTION: LEGO1 0x100123e0
|
||||
// FUNCTION: BETA10 0x10068cb2
|
||||
void LegoCameraController::FUN_100123e0(const Matrix4& p_transform, MxU32 p_und)
|
||||
void LegoCameraController::TransformPointOfView(const Matrix4& p_transform, MxU32 p_multiply)
|
||||
{
|
||||
if (m_lego3DView != NULL) {
|
||||
ViewROI* pov = m_lego3DView->GetPointOfView();
|
||||
@ -168,8 +168,8 @@ void LegoCameraController::FUN_100123e0(const Matrix4& p_transform, MxU32 p_und)
|
||||
if (pov != NULL) {
|
||||
MxMatrix mat;
|
||||
|
||||
if (p_und) {
|
||||
MXM4(mat, m_matrix1, p_transform);
|
||||
if (p_multiply) {
|
||||
MXM4(mat, m_currentTransform, p_transform);
|
||||
}
|
||||
else {
|
||||
mat = p_transform;
|
||||
|
||||
@ -197,7 +197,7 @@ void LegoEntity::FUN_10010c30()
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (m_cameraFlag && world && world->GetCameraController() && m_roi) {
|
||||
world->GetCameraController()->FUN_100123e0(m_roi->GetLocal2World(), 1);
|
||||
world->GetCameraController()->TransformPointOfView(m_roi->GetLocal2World(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -555,7 +555,7 @@ MxResult LegoNavController::ProcessJoystickInput(MxBool& p_und)
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world && world->GetCameraController()) {
|
||||
world->GetCameraController()->FUN_10012320(DTOR(povPosition));
|
||||
world->GetCameraController()->RotateY(DTOR(povPosition));
|
||||
p_und = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -440,7 +440,7 @@ void LegoPathActor::Animate(float p_time)
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world) {
|
||||
world->GetCameraController()->FUN_10012290(DTOR(m_unk0x14c));
|
||||
world->GetCameraController()->RotateZ(DTOR(m_unk0x14c));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,10 +340,10 @@ void LegoRaceCar::KickCamera(float p_param)
|
||||
transformationMatrix.SetIdentity();
|
||||
|
||||
// Possible bug in the original code: The first argument is not initialized
|
||||
a->GetAnimTreePtr()->GetCamAnim()->FUN_1009f490(deltaTime, transformationMatrix);
|
||||
a->GetAnimTreePtr()->GetCamAnim()->CalculateCameraTransform(deltaTime, transformationMatrix);
|
||||
|
||||
if (r->GetCameraController()) {
|
||||
r->GetCameraController()->FUN_100123e0(transformationMatrix, 0);
|
||||
r->GetCameraController()->TransformPointOfView(transformationMatrix, 0);
|
||||
}
|
||||
|
||||
m_roi->SetLocal2World(transformationMatrix);
|
||||
|
||||
@ -941,10 +941,10 @@ void LegoAnimPresenter::FUN_1006b9a0(LegoAnim* p_anim, MxLong p_time, Matrix4* p
|
||||
|
||||
if (p_anim->GetCamAnim() != NULL) {
|
||||
MxMatrix transform(mat);
|
||||
p_anim->GetCamAnim()->FUN_1009f490(p_time, transform);
|
||||
p_anim->GetCamAnim()->CalculateCameraTransform(p_time, transform);
|
||||
|
||||
if (m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) {
|
||||
m_currentWorld->GetCameraController()->FUN_100123e0(transform, 0);
|
||||
m_currentWorld->GetCameraController()->TransformPointOfView(transform, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -545,14 +545,14 @@ void LegoVideoManager::EnableFullScreenMovie(MxBool p_enable, MxBool p_scale)
|
||||
m_palette = m_videoParam.GetPalette()->Clone();
|
||||
OverrideSkyColor(FALSE);
|
||||
|
||||
m_displaySurface->GetVideoParam().Flags().SetF1bit3(p_scale);
|
||||
m_displaySurface->GetVideoParam().Flags().SetDoubleScaling(p_scale);
|
||||
|
||||
m_render3d = FALSE;
|
||||
m_fullScreenMovie = TRUE;
|
||||
}
|
||||
else {
|
||||
m_displaySurface->ClearScreen();
|
||||
m_displaySurface->GetVideoParam().Flags().SetF1bit3(FALSE);
|
||||
m_displaySurface->GetVideoParam().Flags().SetDoubleScaling(FALSE);
|
||||
|
||||
// restore previous pallete
|
||||
RealizePalette(m_palette);
|
||||
@ -577,10 +577,10 @@ void LegoVideoManager::EnableFullScreenMovie(MxBool p_enable, MxBool p_scale)
|
||||
}
|
||||
|
||||
if (p_enable) {
|
||||
m_displaySurface->GetVideoParam().Flags().SetF1bit3(p_scale);
|
||||
m_displaySurface->GetVideoParam().Flags().SetDoubleScaling(p_scale);
|
||||
}
|
||||
else {
|
||||
m_displaySurface->GetVideoParam().Flags().SetF1bit3(FALSE);
|
||||
m_displaySurface->GetVideoParam().Flags().SetDoubleScaling(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,20 +10,20 @@ DECOMP_SIZE_ASSERT(LegoTranslationKey, 0x14)
|
||||
DECOMP_SIZE_ASSERT(LegoRotationKey, 0x18)
|
||||
DECOMP_SIZE_ASSERT(LegoScaleKey, 0x14)
|
||||
DECOMP_SIZE_ASSERT(LegoMorphKey, 0x0c)
|
||||
DECOMP_SIZE_ASSERT(LegoUnknownKey, 0x0c)
|
||||
DECOMP_SIZE_ASSERT(LegoRotationZKey, 0x0c)
|
||||
DECOMP_SIZE_ASSERT(LegoAnimNodeData, 0x34)
|
||||
DECOMP_SIZE_ASSERT(LegoAnimActorEntry, 0x08)
|
||||
DECOMP_SIZE_ASSERT(LegoAnimScene, 0x24)
|
||||
DECOMP_SIZE_ASSERT(LegoAnim, 0x18)
|
||||
|
||||
// FUNCTION: LEGO1 0x1009f000
|
||||
LegoUnknownKey::LegoUnknownKey()
|
||||
LegoRotationZKey::LegoRotationZKey()
|
||||
{
|
||||
m_z = 0.0f;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1009f020
|
||||
LegoResult LegoUnknownKey::Read(LegoStorage* p_storage)
|
||||
LegoResult LegoRotationZKey::Read(LegoStorage* p_storage)
|
||||
{
|
||||
LegoResult result;
|
||||
|
||||
@ -40,7 +40,7 @@ LegoResult LegoUnknownKey::Read(LegoStorage* p_storage)
|
||||
|
||||
// FUNCTION: LEGO1 0x1009f060
|
||||
// FUNCTION: BETA10 0x1018133f
|
||||
LegoResult LegoUnknownKey::Write(LegoStorage* p_storage)
|
||||
LegoResult LegoRotationZKey::Write(LegoStorage* p_storage)
|
||||
{
|
||||
LegoResult result;
|
||||
|
||||
@ -58,33 +58,33 @@ LegoResult LegoUnknownKey::Write(LegoStorage* p_storage)
|
||||
// FUNCTION: LEGO1 0x1009f0a0
|
||||
LegoAnimScene::LegoAnimScene()
|
||||
{
|
||||
m_unk0x00 = 0;
|
||||
m_unk0x04 = NULL;
|
||||
m_unk0x08 = 0;
|
||||
m_unk0x0c = NULL;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x14 = NULL;
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x1c = 0;
|
||||
m_unk0x20 = 0;
|
||||
m_translationKeysCount = 0;
|
||||
m_translationKeys = NULL;
|
||||
m_targetKeysCount = 0;
|
||||
m_targetKeys = NULL;
|
||||
m_rotationKeysCount = 0;
|
||||
m_rotationKeys = NULL;
|
||||
m_targetIndex = 0;
|
||||
m_translationIndex = 0;
|
||||
m_rotationIndex = 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1009f0d0
|
||||
LegoAnimScene::~LegoAnimScene()
|
||||
{
|
||||
if (m_unk0x04 != NULL) {
|
||||
delete[] m_unk0x04;
|
||||
m_unk0x04 = NULL;
|
||||
if (m_translationKeys != NULL) {
|
||||
delete[] m_translationKeys;
|
||||
m_translationKeys = NULL;
|
||||
}
|
||||
|
||||
if (m_unk0x0c != NULL) {
|
||||
delete[] m_unk0x0c;
|
||||
m_unk0x0c = NULL;
|
||||
if (m_targetKeys != NULL) {
|
||||
delete[] m_targetKeys;
|
||||
m_targetKeys = NULL;
|
||||
}
|
||||
|
||||
if (m_unk0x14 != NULL) {
|
||||
delete[] m_unk0x14;
|
||||
m_unk0x14 = NULL;
|
||||
if (m_rotationKeys != NULL) {
|
||||
delete[] m_rotationKeys;
|
||||
m_rotationKeys = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,34 +95,34 @@ LegoResult LegoAnimScene::Write(LegoStorage* p_storage)
|
||||
LegoResult result;
|
||||
LegoS32 i;
|
||||
|
||||
if ((result = p_storage->Write(&m_unk0x00, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Write(&m_translationKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x00 != 0) {
|
||||
for (i = 0; i < m_unk0x00; i++) {
|
||||
if ((result = m_unk0x04[i].Write(p_storage)) != SUCCESS) {
|
||||
if (m_translationKeysCount != 0) {
|
||||
for (i = 0; i < m_translationKeysCount; i++) {
|
||||
if ((result = m_translationKeys[i].Write(p_storage)) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((result = p_storage->Write(&m_unk0x08, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Write(&m_targetKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x08 != 0) {
|
||||
for (i = 0; i < m_unk0x08; i++) {
|
||||
if ((result = m_unk0x0c[i].Write(p_storage)) != SUCCESS) {
|
||||
if (m_targetKeysCount != 0) {
|
||||
for (i = 0; i < m_targetKeysCount; i++) {
|
||||
if ((result = m_targetKeys[i].Write(p_storage)) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((result = p_storage->Write(&m_unk0x10, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Write(&m_rotationKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x10 != 0) {
|
||||
for (i = 0; i < m_unk0x10; i++) {
|
||||
if ((result = m_unk0x14[i].Write(p_storage)) != SUCCESS) {
|
||||
if (m_rotationKeysCount != 0) {
|
||||
for (i = 0; i < m_rotationKeysCount; i++) {
|
||||
if ((result = m_rotationKeys[i].Write(p_storage)) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -137,37 +137,37 @@ LegoResult LegoAnimScene::Read(LegoStorage* p_storage)
|
||||
LegoResult result;
|
||||
LegoS32 i;
|
||||
|
||||
if ((result = p_storage->Read(&m_unk0x00, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Read(&m_translationKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x00 != 0) {
|
||||
m_unk0x04 = new LegoTranslationKey[m_unk0x00];
|
||||
for (i = 0; i < m_unk0x00; i++) {
|
||||
if ((result = m_unk0x04[i].Read(p_storage)) != SUCCESS) {
|
||||
if (m_translationKeysCount != 0) {
|
||||
m_translationKeys = new LegoTranslationKey[m_translationKeysCount];
|
||||
for (i = 0; i < m_translationKeysCount; i++) {
|
||||
if ((result = m_translationKeys[i].Read(p_storage)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((result = p_storage->Read(&m_unk0x08, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Read(&m_targetKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x08 != 0) {
|
||||
m_unk0x0c = new LegoTranslationKey[m_unk0x08];
|
||||
for (i = 0; i < m_unk0x08; i++) {
|
||||
if ((result = m_unk0x0c[i].Read(p_storage)) != SUCCESS) {
|
||||
if (m_targetKeysCount != 0) {
|
||||
m_targetKeys = new LegoTranslationKey[m_targetKeysCount];
|
||||
for (i = 0; i < m_targetKeysCount; i++) {
|
||||
if ((result = m_targetKeys[i].Read(p_storage)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((result = p_storage->Read(&m_unk0x10, sizeof(LegoU16))) != SUCCESS) {
|
||||
if ((result = p_storage->Read(&m_rotationKeysCount, sizeof(LegoU16))) != SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
if (m_unk0x10 != 0) {
|
||||
m_unk0x14 = new LegoUnknownKey[m_unk0x10];
|
||||
for (i = 0; i < m_unk0x10; i++) {
|
||||
if ((result = m_unk0x14[i].Read(p_storage)) != SUCCESS) {
|
||||
if (m_rotationKeysCount != 0) {
|
||||
m_rotationKeys = new LegoRotationZKey[m_rotationKeysCount];
|
||||
for (i = 0; i < m_rotationKeysCount; i++) {
|
||||
if ((result = m_rotationKeys[i].Read(p_storage)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
@ -176,22 +176,22 @@ LegoResult LegoAnimScene::Read(LegoStorage* p_storage)
|
||||
return SUCCESS;
|
||||
|
||||
done:
|
||||
if (m_unk0x04 != NULL) {
|
||||
delete[] m_unk0x04;
|
||||
m_unk0x00 = 0;
|
||||
m_unk0x04 = NULL;
|
||||
if (m_translationKeys != NULL) {
|
||||
delete[] m_translationKeys;
|
||||
m_translationKeysCount = 0;
|
||||
m_translationKeys = NULL;
|
||||
}
|
||||
|
||||
if (m_unk0x0c != NULL) {
|
||||
delete[] m_unk0x0c;
|
||||
m_unk0x08 = 0;
|
||||
m_unk0x0c = NULL;
|
||||
if (m_targetKeys != NULL) {
|
||||
delete[] m_targetKeys;
|
||||
m_targetKeysCount = 0;
|
||||
m_targetKeys = NULL;
|
||||
}
|
||||
|
||||
if (m_unk0x14 != NULL) {
|
||||
delete[] m_unk0x14;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x14 = NULL;
|
||||
if (m_rotationKeys != NULL) {
|
||||
delete[] m_rotationKeys;
|
||||
m_rotationKeysCount = 0;
|
||||
m_rotationKeys = NULL;
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -199,82 +199,95 @@ LegoResult LegoAnimScene::Read(LegoStorage* p_storage)
|
||||
|
||||
// FUNCTION: LEGO1 0x1009f490
|
||||
// FUNCTION: BETA10 0x10181a83
|
||||
LegoResult LegoAnimScene::FUN_1009f490(LegoFloat p_time, Matrix4& p_matrix)
|
||||
LegoResult LegoAnimScene::CalculateCameraTransform(LegoFloat p_time, Matrix4& p_matrix)
|
||||
{
|
||||
MxMatrix localb0;
|
||||
MxMatrix local4c;
|
||||
MxMatrix tempMatrix;
|
||||
MxMatrix original;
|
||||
|
||||
Vector3 local5c(localb0[0]);
|
||||
Vector3 local68(localb0[1]);
|
||||
Vector3 local54(localb0[2]);
|
||||
Vector3 localb8(localb0[3]);
|
||||
Vector3 column0(tempMatrix[0]);
|
||||
Vector3 column1(tempMatrix[1]);
|
||||
Vector3 column2(tempMatrix[2]);
|
||||
Vector3 column3(tempMatrix[3]);
|
||||
|
||||
Mx3DPointFloat localcc;
|
||||
Mx3DPointFloat tempTranslation;
|
||||
|
||||
localb0.SetIdentity();
|
||||
tempMatrix.SetIdentity();
|
||||
|
||||
LegoU32 local60;
|
||||
if (m_unk0x08 != 0) {
|
||||
local60 = GetUnknown0x18();
|
||||
LegoAnimNodeData::GetTranslation(m_unk0x08, m_unk0x0c, p_time, localb0, local60);
|
||||
SetUnknown0x18(local60);
|
||||
localcc = localb8;
|
||||
localb8.Clear();
|
||||
LegoU32 translationIndex;
|
||||
if (m_targetKeysCount != 0) {
|
||||
translationIndex = GetTargetIndex();
|
||||
LegoAnimNodeData::GetTranslation(m_targetKeysCount, m_targetKeys, p_time, tempMatrix, translationIndex);
|
||||
SetTargetIndex(translationIndex);
|
||||
tempTranslation = column3;
|
||||
column3.Clear();
|
||||
}
|
||||
|
||||
if (m_unk0x00 != 0) {
|
||||
local60 = GetUnknown0x1c();
|
||||
LegoAnimNodeData::GetTranslation(m_unk0x00, m_unk0x04, p_time, localb0, local60);
|
||||
SetUnknown0x1c(local60);
|
||||
if (m_translationKeysCount != 0) {
|
||||
translationIndex = GetTranslationIndex();
|
||||
LegoAnimNodeData::GetTranslation(
|
||||
m_translationKeysCount,
|
||||
m_translationKeys,
|
||||
p_time,
|
||||
tempMatrix,
|
||||
translationIndex
|
||||
);
|
||||
SetTranslationIndex(translationIndex);
|
||||
}
|
||||
|
||||
local54 = localcc;
|
||||
local54 -= localb8;
|
||||
column2 = tempTranslation;
|
||||
column2 -= column3;
|
||||
|
||||
if (local54.Unitize() == 0) {
|
||||
local5c.EqualsCross(local68, local54);
|
||||
if (column2.Unitize() == 0) {
|
||||
column0.EqualsCross(column1, column2);
|
||||
|
||||
if (local5c.Unitize() == 0) {
|
||||
local68.EqualsCross(local54, local5c);
|
||||
if (column0.Unitize() == 0) {
|
||||
column1.EqualsCross(column2, column0);
|
||||
|
||||
localcc = p_matrix[3];
|
||||
localcc += localb0[3];
|
||||
tempTranslation = p_matrix[3];
|
||||
tempTranslation += tempMatrix[3];
|
||||
|
||||
p_matrix[3][0] = p_matrix[3][1] = p_matrix[3][2] = localb0[3][0] = localb0[3][1] = localb0[3][2] = 0;
|
||||
p_matrix[3][0] = p_matrix[3][1] = p_matrix[3][2] = tempMatrix[3][0] = tempMatrix[3][1] = tempMatrix[3][2] =
|
||||
0;
|
||||
|
||||
if (m_unk0x10 != 0) {
|
||||
LegoU32 locald0 = -1;
|
||||
LegoU32 locald8;
|
||||
locald0 = GetUnknown0x20();
|
||||
if (m_rotationKeysCount != 0) {
|
||||
LegoU32 old_index = -1;
|
||||
LegoU32 i;
|
||||
old_index = GetRotationIndex();
|
||||
|
||||
LegoU32 localdc =
|
||||
LegoAnimNodeData::FindKeys(p_time, m_unk0x10, m_unk0x14, sizeof(*m_unk0x14), locald8, locald0);
|
||||
LegoU32 count = LegoAnimNodeData::FindKeys(
|
||||
p_time,
|
||||
m_rotationKeysCount,
|
||||
m_rotationKeys,
|
||||
sizeof(*m_rotationKeys),
|
||||
i,
|
||||
old_index
|
||||
);
|
||||
|
||||
SetUnknown0x20(locald0);
|
||||
SetRotationIndex(old_index);
|
||||
|
||||
switch (localdc) {
|
||||
switch (count) {
|
||||
case 1:
|
||||
p_matrix.RotateZ(m_unk0x14[locald8].GetZ());
|
||||
p_matrix.RotateZ(m_rotationKeys[i].GetZ());
|
||||
break;
|
||||
case 2:
|
||||
// Seems to be unused
|
||||
LegoFloat z = LegoAnimNodeData::Interpolate(
|
||||
p_time,
|
||||
m_unk0x14[locald8],
|
||||
m_unk0x14[locald8].GetZ(),
|
||||
m_unk0x14[locald8 + 1],
|
||||
m_unk0x14[locald8 + 1].GetZ()
|
||||
m_rotationKeys[i],
|
||||
m_rotationKeys[i].GetZ(),
|
||||
m_rotationKeys[i + 1],
|
||||
m_rotationKeys[i + 1].GetZ()
|
||||
);
|
||||
p_matrix.RotateZ(m_unk0x14[locald8].GetZ());
|
||||
p_matrix.RotateZ(m_rotationKeys[i].GetZ());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
local4c = p_matrix;
|
||||
p_matrix.Product(local4c.GetData(), localb0.GetData());
|
||||
p_matrix[3][0] = localcc[0];
|
||||
p_matrix[3][1] = localcc[1];
|
||||
p_matrix[3][2] = localcc[2];
|
||||
original = p_matrix;
|
||||
p_matrix.Product(original.GetData(), tempMatrix.GetData());
|
||||
p_matrix[3][0] = tempTranslation[0];
|
||||
p_matrix[3][1] = tempTranslation[1];
|
||||
p_matrix[3][2] = tempTranslation[2];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -137,9 +137,9 @@ class LegoMorphKey : public LegoAnimKey {
|
||||
};
|
||||
|
||||
// SIZE 0x0c
|
||||
class LegoUnknownKey : public LegoAnimKey {
|
||||
class LegoRotationZKey : public LegoAnimKey {
|
||||
public:
|
||||
LegoUnknownKey();
|
||||
LegoRotationZKey();
|
||||
LegoResult Read(LegoStorage* p_storage);
|
||||
LegoResult Write(LegoStorage* p_storage);
|
||||
|
||||
@ -309,26 +309,26 @@ class LegoAnimScene {
|
||||
~LegoAnimScene();
|
||||
LegoResult Read(LegoStorage* p_storage);
|
||||
LegoResult Write(LegoStorage* p_storage);
|
||||
LegoResult FUN_1009f490(LegoFloat p_time, Matrix4& p_matrix);
|
||||
LegoResult CalculateCameraTransform(LegoFloat p_time, Matrix4& p_matrix);
|
||||
|
||||
LegoU32 GetUnknown0x18() { return m_unk0x18; }
|
||||
LegoU32 GetUnknown0x1c() { return m_unk0x1c; }
|
||||
LegoU32 GetUnknown0x20() { return m_unk0x20; }
|
||||
LegoU32 GetTargetIndex() { return m_targetIndex; }
|
||||
LegoU32 GetTranslationIndex() { return m_translationIndex; }
|
||||
LegoU32 GetRotationIndex() { return m_rotationIndex; }
|
||||
|
||||
void SetUnknown0x18(LegoU32 p_unk0x18) { m_unk0x18 = p_unk0x18; }
|
||||
void SetUnknown0x1c(LegoU32 p_unk0x1c) { m_unk0x1c = p_unk0x1c; }
|
||||
void SetUnknown0x20(LegoU32 p_unk0x20) { m_unk0x20 = p_unk0x20; }
|
||||
void SetTargetIndex(LegoU32 p_targetIndex) { m_targetIndex = p_targetIndex; }
|
||||
void SetTranslationIndex(LegoU32 p_translationIndex) { m_translationIndex = p_translationIndex; }
|
||||
void SetRotationIndex(LegoU32 p_rotationIndex) { m_rotationIndex = p_rotationIndex; }
|
||||
|
||||
private:
|
||||
LegoU16 m_unk0x00; // 0x00
|
||||
LegoTranslationKey* m_unk0x04; // 0x04
|
||||
LegoU16 m_unk0x08; // 0x08
|
||||
LegoTranslationKey* m_unk0x0c; // 0x0c
|
||||
LegoU16 m_unk0x10; // 0x10
|
||||
LegoUnknownKey* m_unk0x14; // 0x14
|
||||
LegoU32 m_unk0x18; // 0x18
|
||||
LegoU32 m_unk0x1c; // 0x1c
|
||||
LegoU32 m_unk0x20; // 0x20
|
||||
LegoU16 m_translationKeysCount; // 0x00
|
||||
LegoTranslationKey* m_translationKeys; // 0x04
|
||||
LegoU16 m_targetKeysCount; // 0x08
|
||||
LegoTranslationKey* m_targetKeys; // 0x0c
|
||||
LegoU16 m_rotationKeysCount; // 0x10
|
||||
LegoRotationZKey* m_rotationKeys; // 0x14
|
||||
LegoU32 m_targetIndex; // 0x18
|
||||
LegoU32 m_translationIndex; // 0x1c
|
||||
LegoU32 m_rotationIndex; // 0x20
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100db8d8
|
||||
|
||||
@ -236,7 +236,6 @@
|
||||
#include "omni/include/mxlist.h"
|
||||
#include "omni/include/mxloopingflcpresenter.h"
|
||||
#include "omni/include/mxloopingsmkpresenter.h"
|
||||
#include "omni/include/mxmediamanager.h"
|
||||
#include "omni/include/mxmediapresenter.h"
|
||||
#include "omni/include/mxmemorypool.h"
|
||||
#include "omni/include/mxmisc.h"
|
||||
@ -249,6 +248,7 @@
|
||||
#include "omni/include/mxomnicreateparam.h"
|
||||
#include "omni/include/mxpalette.h"
|
||||
#include "omni/include/mxparam.h"
|
||||
#include "omni/include/mxpresentationmanager.h"
|
||||
#include "omni/include/mxpresenter.h"
|
||||
#include "omni/include/mxpresenterlist.h"
|
||||
#include "omni/include/mxqueue.h"
|
||||
|
||||
@ -2,11 +2,12 @@
|
||||
#define MXAUDIOMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxmediamanager.h"
|
||||
#include "mxpresentationmanager.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100dc6e0
|
||||
// VTABLE: BETA10 0x101c2348
|
||||
// SIZE 0x30
|
||||
class MxAudioManager : public MxMediaManager {
|
||||
class MxAudioManager : public MxPresentationManager {
|
||||
public:
|
||||
MxAudioManager();
|
||||
~MxAudioManager() override;
|
||||
@ -15,11 +16,13 @@ class MxAudioManager : public MxMediaManager {
|
||||
void Destroy() override; // vtable+18
|
||||
|
||||
// FUNCTION: LEGO1 0x10029910
|
||||
// FUNCTION: BETA10 0x100d0630
|
||||
virtual MxS32 GetVolume() { return m_volume; } // vtable+28
|
||||
|
||||
virtual void SetVolume(MxS32 p_volume); // vtable+2c
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100b8d70
|
||||
// SYNTHETIC: BETA10 0x10145110
|
||||
// MxAudioManager::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#define MXEVENTMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxmediamanager.h"
|
||||
#include "mxpresentationmanager.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100dc900
|
||||
// SIZE 0x2c
|
||||
class MxEventManager : public MxMediaManager {
|
||||
class MxEventManager : public MxPresentationManager {
|
||||
public:
|
||||
MxEventManager();
|
||||
~MxEventManager() override;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef MXMEDIAMANGER_H
|
||||
#define MXMEDIAMANGER_H
|
||||
#ifndef MXPRESENTATIONMANAGER_H
|
||||
#define MXPRESENTATIONMANAGER_H
|
||||
|
||||
#include "mxcore.h"
|
||||
#include "mxcriticalsection.h"
|
||||
@ -9,11 +9,12 @@
|
||||
class MxThread;
|
||||
|
||||
// VTABLE: LEGO1 0x100dc6b0
|
||||
// VTABLE: BETA10 0x101c2318
|
||||
// SIZE 0x2c
|
||||
class MxMediaManager : public MxCore {
|
||||
class MxPresentationManager : public MxCore {
|
||||
public:
|
||||
MxMediaManager();
|
||||
~MxMediaManager() override;
|
||||
MxPresentationManager();
|
||||
~MxPresentationManager() override;
|
||||
|
||||
MxResult Tickle() override; // vtable+08
|
||||
virtual MxResult Create(); // vtable+14
|
||||
@ -25,7 +26,8 @@ class MxMediaManager : public MxCore {
|
||||
MxResult Init();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100b8540
|
||||
// MxMediaManager::`scalar deleting destructor'
|
||||
// SYNTHETIC: BETA10 0x10144db0
|
||||
// MxPresentationManager::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
MxPresenterList* m_presenters; // 0x08
|
||||
@ -33,4 +35,4 @@ class MxMediaManager : public MxCore {
|
||||
MxCriticalSection m_criticalSection; // 0x10
|
||||
};
|
||||
|
||||
#endif // MXMEDIAMANGER_H
|
||||
#endif // MXPRESENTATIONMANAGER_H
|
||||
@ -5,12 +5,15 @@
|
||||
#include "mxpresenter.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d62f0
|
||||
// VTABLE: BETA10 0x101bf070
|
||||
// class MxPtrList<MxPresenter>
|
||||
|
||||
// VTABLE: LEGO1 0x100d6308
|
||||
// VTABLE: BETA10 0x101bf050
|
||||
// SIZE 0x18
|
||||
class MxPresenterList : public MxPtrList<MxPresenter> {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x100dc900
|
||||
MxPresenterList(MxBool p_ownership = FALSE) : MxPtrList<MxPresenter>(p_ownership) {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001cd00
|
||||
@ -35,6 +38,13 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x1007d130
|
||||
MxPresenterListCursor(MxPresenterList* p_list) : MxPtrListCursor<MxPresenter>(p_list) {}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1001eed0
|
||||
// MxPresenterListCursor::`scalar deleting destructor'
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1001f0c0
|
||||
// SYNTHETIC: BETA10 0x1007d510
|
||||
// MxPresenterListCursor::~MxPresenterListCursor
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d6350
|
||||
@ -58,7 +68,11 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
|
||||
// TEMPLATE: LEGO1 0x1001ce20
|
||||
// MxList<MxPresenter *>::~MxList<MxPresenter *>
|
||||
|
||||
// TEMPLATE: BETA10 0x100dc9f0
|
||||
// MxPtrList<MxPresenter>::MxPtrList<MxPresenter>
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001cf20
|
||||
// TEMPLATE: BETA10 0x100dce70
|
||||
// MxPtrList<MxPresenter>::~MxPtrList<MxPresenter>
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1001cf70
|
||||
@ -73,10 +87,8 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
|
||||
// SYNTHETIC: LEGO1 0x1001d100
|
||||
// MxPresenterList::~MxPresenterList
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1001eed0
|
||||
// MxPresenterListCursor::`scalar deleting destructor'
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001ef40
|
||||
// TEMPLATE: BETA10 0x1007d370
|
||||
// MxPtrListCursor<MxPresenter>::~MxPtrListCursor<MxPresenter>
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1001ef90
|
||||
@ -86,11 +98,9 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
|
||||
// MxPtrListCursor<MxPresenter>::`scalar deleting destructor'
|
||||
|
||||
// TEMPLATE: LEGO1 0x1001f070
|
||||
// TEMPLATE: BETA10 0x1007d490
|
||||
// MxListCursor<MxPresenter *>::~MxListCursor<MxPresenter *>
|
||||
|
||||
// FUNCTION: LEGO1 0x1001f0c0
|
||||
// MxPresenterListCursor::~MxPresenterListCursor
|
||||
|
||||
// TEMPLATE: LEGO1 0x10020760
|
||||
// MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *>
|
||||
|
||||
@ -106,6 +116,18 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
|
||||
// TEMPLATE: BETA10 0x1007d270
|
||||
// MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *>
|
||||
|
||||
// TEMPLATE: BETA10 0x1007dc60
|
||||
// MxListCursor<MxPresenter *>::Next
|
||||
|
||||
// TEMPLATE: BETA10 0x100d8f20
|
||||
// MxListCursor<MxPresenter *>::Reset
|
||||
|
||||
// TEMPLATE: BETA10 0x1007e070
|
||||
// MxListEntry<MxPresenter *>::GetNext
|
||||
|
||||
// TEMPLATE: BETA10 0x1007e0a0
|
||||
// MxListEntry<MxPresenter *>::GetValue
|
||||
|
||||
// TEMPLATE: BETA10 0x100d9420
|
||||
// ?Prev@?$MxListCursor@PAVMxPresenter@@@@QAEEAAPAVMxPresenter@@@Z
|
||||
|
||||
|
||||
@ -6,17 +6,20 @@
|
||||
#include <SDL3/SDL_mutex.h>
|
||||
|
||||
// VTABLE: LEGO1 0x100dccf0
|
||||
// VTABLE: BETA10 0x101c28ac
|
||||
// SIZE 0x08
|
||||
class MxSemaphore {
|
||||
public:
|
||||
MxSemaphore();
|
||||
|
||||
// FUNCTION: LEGO1 0x100c87e0
|
||||
// FUNCTION: BETA10 0x101592a9
|
||||
~MxSemaphore() { SDL_DestroySemaphore(m_semaphore); }
|
||||
|
||||
virtual MxResult Init(MxU32 p_initialCount, MxU32 p_maxCount);
|
||||
|
||||
void Wait();
|
||||
void Acquire();
|
||||
void TryAcquire();
|
||||
void Release();
|
||||
|
||||
private:
|
||||
|
||||
@ -28,6 +28,10 @@ class MxSoundManager : public MxAudioManager {
|
||||
|
||||
MxPresenter* FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId);
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100ae7b0
|
||||
// SYNTHETIC: BETA10 0x10133460
|
||||
// MxSoundManager::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
void Init();
|
||||
void Destroy(MxBool p_fromDestructor);
|
||||
@ -49,7 +53,4 @@ class MxSoundManager : public MxAudioManager {
|
||||
undefined m_unk0x38[4];
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100ae7b0
|
||||
// MxSoundManager::`scalar deleting destructor'
|
||||
|
||||
#endif // MXSOUNDMANAGER_H
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
class MxCore;
|
||||
|
||||
// VTABLE: LEGO1 0x100dc860
|
||||
// VTABLE: BETA10 0x101c23e8
|
||||
// SIZE 0x1c
|
||||
class MxThread {
|
||||
public:
|
||||
@ -21,9 +22,16 @@ class MxThread {
|
||||
void Terminate();
|
||||
void Sleep(MxS32 p_milliseconds);
|
||||
|
||||
void ResumeThread();
|
||||
void SuspendThread();
|
||||
bool TerminateThread(MxU32 p_exitCode);
|
||||
MxS32 GetThreadPriority(MxU16& p_priority);
|
||||
bool SetThreadPriority(MxU16 p_priority);
|
||||
|
||||
MxBool IsRunning() { return m_running; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100bf580
|
||||
// SYNTHETIC: BETA10 0x10147880
|
||||
// MxThread::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
// SIZE 0x24
|
||||
class MxVariable {
|
||||
public:
|
||||
// FUNCTION: BETA10 0x1007b750
|
||||
MxVariable() {}
|
||||
|
||||
// FUNCTION: BETA10 0x1012a840
|
||||
@ -41,12 +42,16 @@ class MxVariable {
|
||||
// FUNCTION: BETA10 0x1012a7f0
|
||||
const MxString* GetKey() const { return &m_key; }
|
||||
|
||||
// SYNTHETIC: BETA10 0x1007b8c0
|
||||
// MxVariable::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
MxString m_key; // 0x04
|
||||
MxString m_value; // 0x14
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1003bf40
|
||||
// SYNTHETIC: BETA10 0x1007b910
|
||||
// MxVariable::~MxVariable
|
||||
|
||||
#endif // MXVARIABLE_H
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef MXVIDEOMANAGER_H
|
||||
#define MXVIDEOMANAGER_H
|
||||
|
||||
#include "mxmediamanager.h"
|
||||
#include "mxpresentationmanager.h"
|
||||
#include "mxvideoparam.h"
|
||||
|
||||
#ifdef MINIWIN
|
||||
@ -15,8 +15,9 @@ class MxRect32;
|
||||
class MxRegion;
|
||||
|
||||
// VTABLE: LEGO1 0x100dc810
|
||||
// VTABLE: BETA10 0x101c1bf8
|
||||
// SIZE 0x64
|
||||
class MxVideoManager : public MxMediaManager {
|
||||
class MxVideoManager : public MxPresentationManager {
|
||||
public:
|
||||
MxVideoManager();
|
||||
~MxVideoManager() override;
|
||||
@ -52,6 +53,7 @@ class MxVideoManager : public MxMediaManager {
|
||||
MxRegion* GetRegion() { return this->m_region; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100be280
|
||||
// SYNTHETIC: BETA10 0x1012de00
|
||||
// MxVideoManager::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
|
||||
@ -24,7 +24,7 @@ class MxVideoParamFlags {
|
||||
void SetBackBuffers(MxBool p_e) { m_flags1.m_bit2 = p_e; }
|
||||
|
||||
// FUNCTION: BETA10 0x100d9250
|
||||
void SetF1bit3(MxBool p_e) { m_flags1.m_bit3 = p_e; }
|
||||
void SetDoubleScaling(MxBool p_e) { m_flags1.m_bit3 = p_e; }
|
||||
|
||||
// inlined in ISLE
|
||||
void Set16Bit(MxBool p_e) { m_flags1.m_bit5 = p_e; }
|
||||
@ -39,7 +39,7 @@ class MxVideoParamFlags {
|
||||
void SetLacksLightSupport(MxBool p_e) { m_flags2.m_bit0 = p_e; }
|
||||
|
||||
// inlined in ISLE
|
||||
void SetF2bit1(MxBool p_e) { m_flags2.m_bit1 = p_e; }
|
||||
void SetEnabled(MxBool p_e) { m_flags2.m_bit1 = p_e; }
|
||||
|
||||
// FUNCTION: BETA10 0x1009e770
|
||||
MxBool GetFullScreen() { return m_flags1.m_bit0; }
|
||||
@ -51,7 +51,7 @@ class MxVideoParamFlags {
|
||||
MxBool GetBackBuffers() { return m_flags1.m_bit2; }
|
||||
|
||||
// FUNCTION: BETA10 0x10142010
|
||||
MxBool GetF1bit3() { return m_flags1.m_bit3; }
|
||||
MxBool GetDoubleScaling() { return m_flags1.m_bit3; }
|
||||
|
||||
// FUNCTION: BETA10 0x100d8150
|
||||
MxBool Get16Bit() { return m_flags1.m_bit5; }
|
||||
@ -63,7 +63,7 @@ class MxVideoParamFlags {
|
||||
MxBool GetLacksLightSupport() { return m_flags2.m_bit0; }
|
||||
|
||||
// FUNCTION: BETA10 0x10142050
|
||||
MxBool GetF2bit1() { return m_flags2.m_bit1; }
|
||||
MxBool GetEnabled() { return m_flags2.m_bit1; }
|
||||
|
||||
private:
|
||||
FlagBitfield m_flags1;
|
||||
|
||||
@ -3,27 +3,32 @@
|
||||
DECOMP_SIZE_ASSERT(MxAudioManager, 0x30);
|
||||
|
||||
// GLOBAL: LEGO1 0x10102108
|
||||
// GLOBAL: BETA10 0x10203a60
|
||||
MxS32 MxAudioManager::g_count = 0;
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8d00
|
||||
// FUNCTION: BETA10 0x10144e90
|
||||
MxAudioManager::MxAudioManager()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8d90
|
||||
// STUB: BETA10 0x10144f07
|
||||
MxAudioManager::~MxAudioManager()
|
||||
{
|
||||
Destroy(TRUE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8df0
|
||||
// FUNCTION: BETA10 0x10144f79
|
||||
void MxAudioManager::Init()
|
||||
{
|
||||
m_volume = 100;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8e00
|
||||
// FUNCTION: BETA10 0x10144f9c
|
||||
void MxAudioManager::Destroy(MxBool p_fromDestructor)
|
||||
{
|
||||
ENTER(m_criticalSection);
|
||||
@ -32,17 +37,49 @@ void MxAudioManager::Destroy(MxBool p_fromDestructor)
|
||||
m_criticalSection.Leave();
|
||||
|
||||
if (!p_fromDestructor) {
|
||||
MxMediaManager::Destroy();
|
||||
MxPresentationManager::Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef BETA10
|
||||
// FUNCTION: BETA10 0x10144ffe
|
||||
MxResult MxAudioManager::Create()
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
MxBool success = FALSE;
|
||||
|
||||
if (MxPresentationManager::Create() != SUCCESS) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ENTER(m_criticalSection);
|
||||
success = TRUE;
|
||||
|
||||
if (!g_count++) {
|
||||
// This is correct. It was likely refactored later.
|
||||
}
|
||||
|
||||
exit:
|
||||
result = SUCCESS;
|
||||
|
||||
if (result) {
|
||||
Destroy();
|
||||
}
|
||||
|
||||
if (success) {
|
||||
m_criticalSection.Leave();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
// FUNCTION: LEGO1 0x100b8e40
|
||||
MxResult MxAudioManager::Create()
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
MxBool success = FALSE;
|
||||
|
||||
if (MxMediaManager::Create() == SUCCESS) {
|
||||
if (MxPresentationManager::Create() == SUCCESS) {
|
||||
ENTER(m_criticalSection);
|
||||
success = TRUE;
|
||||
result = SUCCESS;
|
||||
@ -59,14 +96,17 @@ MxResult MxAudioManager::Create()
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8e90
|
||||
// FUNCTION: BETA10 0x101450a7
|
||||
void MxAudioManager::Destroy()
|
||||
{
|
||||
Destroy(FALSE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8ea0
|
||||
// FUNCTION: BETA10 0x101450c7
|
||||
void MxAudioManager::SetVolume(MxS32 p_volume)
|
||||
{
|
||||
ENTER(m_criticalSection);
|
||||
|
||||
@ -25,18 +25,21 @@ MxS32 g_volumeAttenuation[100] = {-6643, -5643, -5058, -4643, -4321, -4058, -383
|
||||
-43, -29, -14, 0};
|
||||
|
||||
// FUNCTION: LEGO1 0x100ae740
|
||||
// FUNCTION: BETA10 0x10132c70
|
||||
MxSoundManager::MxSoundManager()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100ae7d0
|
||||
// FUNCTION: BETA10 0x10132ce7
|
||||
MxSoundManager::~MxSoundManager()
|
||||
{
|
||||
Destroy(TRUE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100ae830
|
||||
// FUNCTION: BETA10 0x10132d59
|
||||
void MxSoundManager::Init()
|
||||
{
|
||||
SDL_zero(m_engine);
|
||||
@ -44,6 +47,7 @@ void MxSoundManager::Init()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100ae840
|
||||
// FUNCTION: BETA10 0x10132d89
|
||||
void MxSoundManager::Destroy(MxBool p_fromDestructor)
|
||||
{
|
||||
if (m_thread) {
|
||||
@ -157,12 +161,14 @@ void MxSoundManager::AudioStreamCallback(
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100aeab0
|
||||
// FUNCTION: BETA10 0x101331e3
|
||||
void MxSoundManager::Destroy()
|
||||
{
|
||||
Destroy(FALSE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100aeac0
|
||||
// FUNCTION: BETA10 0x10133203
|
||||
void MxSoundManager::SetVolume(MxS32 p_volume)
|
||||
{
|
||||
MxAudioManager::SetVolume(p_volume);
|
||||
@ -180,6 +186,7 @@ void MxSoundManager::SetVolume(MxS32 p_volume)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100aebd0
|
||||
// FUNCTION: BETA10 0x101332cf
|
||||
MxPresenter* MxSoundManager::FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId)
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
@ -188,8 +195,7 @@ MxPresenter* MxSoundManager::FindPresenter(const MxAtomId& p_atomId, MxU32 p_obj
|
||||
MxPresenterListCursor cursor(m_presenters);
|
||||
|
||||
while (cursor.Next(presenter)) {
|
||||
if (presenter->GetAction()->GetAtomId().GetInternal() == p_atomId.GetInternal() &&
|
||||
presenter->GetAction()->GetObjectId() == p_objectId) {
|
||||
if (presenter->GetAction()->GetAtomId() == p_atomId && presenter->GetAction()->GetObjectId() == p_objectId) {
|
||||
return presenter;
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,6 +131,7 @@ MxResult MxMediaPresenter::StartAction(MxStreamController* p_controller, MxDSAct
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b5bc0
|
||||
// STUB: BETA10 0x1013623c
|
||||
void MxMediaPresenter::EndAction()
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "mxmediamanager.h"
|
||||
#include "mxpresentationmanager.h"
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxautolock.h"
|
||||
@ -6,24 +6,27 @@
|
||||
#include "mxpresenter.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxMediaManager, 0x2c);
|
||||
DECOMP_SIZE_ASSERT(MxPresentationManager, 0x2c);
|
||||
DECOMP_SIZE_ASSERT(MxPresenterList, 0x18);
|
||||
DECOMP_SIZE_ASSERT(MxPresenterListCursor, 0x10);
|
||||
|
||||
// FUNCTION: LEGO1 0x100b84c0
|
||||
MxMediaManager::MxMediaManager()
|
||||
// FUNCTION: BETA10 0x10144680
|
||||
MxPresentationManager::MxPresentationManager()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8560
|
||||
MxMediaManager::~MxMediaManager()
|
||||
// FUNCTION: BETA10 0x10144712
|
||||
MxPresentationManager::~MxPresentationManager()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b85d0
|
||||
MxResult MxMediaManager::Init()
|
||||
// FUNCTION: BETA10 0x1014479b
|
||||
MxResult MxPresentationManager::Init()
|
||||
{
|
||||
this->m_presenters = NULL;
|
||||
this->m_thread = NULL;
|
||||
@ -31,8 +34,10 @@ MxResult MxMediaManager::Init()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b85e0
|
||||
MxResult MxMediaManager::Create()
|
||||
// FUNCTION: BETA10 0x101447c5
|
||||
MxResult MxPresentationManager::Create()
|
||||
{
|
||||
// This validates the name of the source code file (and hence also the name of the class)
|
||||
AUTOLOCK(m_criticalSection);
|
||||
|
||||
this->m_presenters = new MxPresenterList;
|
||||
@ -46,7 +51,8 @@ MxResult MxMediaManager::Create()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8710
|
||||
void MxMediaManager::Destroy()
|
||||
// FUNCTION: BETA10 0x101448e4
|
||||
void MxPresentationManager::Destroy()
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
|
||||
@ -58,7 +64,8 @@ void MxMediaManager::Destroy()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8790
|
||||
MxResult MxMediaManager::Tickle()
|
||||
// FUNCTION: BETA10 0x10144993
|
||||
MxResult MxPresentationManager::Tickle()
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
MxPresenter* presenter;
|
||||
@ -78,7 +85,8 @@ MxResult MxMediaManager::Tickle()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b88c0
|
||||
void MxMediaManager::RegisterPresenter(MxPresenter& p_presenter)
|
||||
// FUNCTION: BETA10 0x10144a8b
|
||||
void MxPresentationManager::RegisterPresenter(MxPresenter& p_presenter)
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
|
||||
@ -86,7 +94,8 @@ void MxMediaManager::RegisterPresenter(MxPresenter& p_presenter)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8980
|
||||
void MxMediaManager::UnregisterPresenter(MxPresenter& p_presenter)
|
||||
// FUNCTION: BETA10 0x10144b0c
|
||||
void MxPresentationManager::UnregisterPresenter(MxPresenter& p_presenter)
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
MxPresenterListCursor cursor(this->m_presenters);
|
||||
@ -97,7 +106,8 @@ void MxMediaManager::UnregisterPresenter(MxPresenter& p_presenter)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b8ac0
|
||||
void MxMediaManager::StopPresenters()
|
||||
// FUNCTION: BETA10 0x10144bc3
|
||||
void MxPresentationManager::StopPresenters()
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
MxPresenter* presenter;
|
||||
@ -35,7 +35,7 @@ void MxEventManager::Destroy(MxBool p_fromDestructor)
|
||||
}
|
||||
|
||||
if (!p_fromDestructor) {
|
||||
MxMediaManager::Destroy();
|
||||
MxPresentationManager::Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ MxResult MxEventManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
|
||||
MxResult status = FAILURE;
|
||||
MxBool locked = FALSE;
|
||||
|
||||
MxResult result = MxMediaManager::Create();
|
||||
MxResult result = MxPresentationManager::Create();
|
||||
if (result == SUCCESS) {
|
||||
if (p_createThread) {
|
||||
ENTER(this->m_criticalSection);
|
||||
|
||||
@ -161,10 +161,11 @@ void MxDiskStreamProvider::VTable0x20(MxDSAction* p_action)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100d1750
|
||||
// FUNCTION: BETA10 0x101632b8
|
||||
MxResult MxDiskStreamProvider::WaitForWorkToComplete()
|
||||
{
|
||||
while (m_remainingWork) {
|
||||
m_busySemaphore.Wait();
|
||||
m_busySemaphore.Acquire();
|
||||
if (m_unk0x35) {
|
||||
PerformWork();
|
||||
}
|
||||
|
||||
@ -6,32 +6,46 @@
|
||||
DECOMP_SIZE_ASSERT(MxSemaphore, 0x08)
|
||||
|
||||
// FUNCTION: LEGO1 0x100c87d0
|
||||
// FUNCTION: BETA10 0x10159260
|
||||
MxSemaphore::MxSemaphore()
|
||||
{
|
||||
m_semaphore = NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c8800
|
||||
// FUNCTION: BETA10 0x101592d5
|
||||
MxResult MxSemaphore::Init(MxU32 p_initialCount, MxU32 p_maxCount)
|
||||
{
|
||||
// [library:synchronization] No support for max count, but shouldn't be necessary
|
||||
MxResult result = FAILURE;
|
||||
|
||||
if ((m_semaphore = SDL_CreateSemaphore(p_initialCount))) {
|
||||
result = SUCCESS;
|
||||
m_semaphore = SDL_CreateSemaphore(p_initialCount);
|
||||
if (!m_semaphore) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
result = SUCCESS;
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c8830
|
||||
void MxSemaphore::Wait()
|
||||
// FUNCTION: BETA10 0x10159332
|
||||
void MxSemaphore::Acquire()
|
||||
{
|
||||
// [library:synchronization] Removed timeout since only INFINITE is ever requested
|
||||
SDL_WaitSemaphore(m_semaphore);
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10159385
|
||||
void MxSemaphore::TryAcquire()
|
||||
{
|
||||
// unused
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c8850
|
||||
// FUNCTION: BETA10 0x101593aa
|
||||
void MxSemaphore::Release()
|
||||
{
|
||||
// [library:synchronization] Removed release count since only 1 is ever requested
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
DECOMP_SIZE_ASSERT(MxThread, 0x1c)
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf510
|
||||
// FUNCTION: BETA10 0x10147540
|
||||
MxThread::MxThread()
|
||||
{
|
||||
m_thread = NULL;
|
||||
@ -14,6 +15,7 @@ MxThread::MxThread()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf5a0
|
||||
// FUNCTION: BETA10 0x101475d0
|
||||
MxThread::~MxThread()
|
||||
{
|
||||
if (m_thread) {
|
||||
@ -22,46 +24,91 @@ MxThread::~MxThread()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf610
|
||||
// FUNCTION: BETA10 0x10147655
|
||||
MxResult MxThread::Start(MxS32 p_stackSize, MxS32 p_flag)
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
|
||||
if (m_semaphore.Init(0, 1) == SUCCESS) {
|
||||
if (m_semaphore.Init(0, 1) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
{
|
||||
const SDL_PropertiesID props = SDL_CreateProperties();
|
||||
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER, (void*) MxThread::ThreadProc);
|
||||
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_USERDATA_POINTER, this);
|
||||
SDL_SetNumberProperty(props, SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER, p_stackSize * 4);
|
||||
|
||||
if ((m_thread = SDL_CreateThreadWithProperties(props))) {
|
||||
result = SUCCESS;
|
||||
if (!(m_thread = SDL_CreateThreadWithProperties(props))) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
SDL_DestroyProperties(props);
|
||||
}
|
||||
|
||||
result = SUCCESS;
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf660
|
||||
// FUNCTION: BETA10 0x101476ee
|
||||
void MxThread::Sleep(MxS32 p_milliseconds)
|
||||
{
|
||||
SDL_Delay(p_milliseconds);
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10147710
|
||||
void MxThread::ResumeThread()
|
||||
{
|
||||
// unused
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10147733
|
||||
void MxThread::SuspendThread()
|
||||
{
|
||||
// unused
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10147756
|
||||
bool MxThread::TerminateThread(MxU32 p_exitCode)
|
||||
{
|
||||
// unused
|
||||
return false;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10147793
|
||||
MxS32 MxThread::GetThreadPriority(MxU16& p_priority)
|
||||
{
|
||||
// unused
|
||||
return -1;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x101477c8
|
||||
bool MxThread::SetThreadPriority(MxU16 p_priority)
|
||||
{
|
||||
// unused
|
||||
return false;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf670
|
||||
// FUNCTION: BETA10 0x1014780a
|
||||
void MxThread::Terminate()
|
||||
{
|
||||
m_running = FALSE;
|
||||
m_semaphore.Wait();
|
||||
m_semaphore.Acquire();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf680
|
||||
// FUNCTION: BETA10 0x1014783b
|
||||
int MxThread::ThreadProc(void* p_thread)
|
||||
{
|
||||
return static_cast<MxThread*>(p_thread)->Run();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf690
|
||||
// FUNCTION: BETA10 0x10147855
|
||||
MxResult MxThread::Run()
|
||||
{
|
||||
m_semaphore.Release();
|
||||
|
||||
@ -482,7 +482,7 @@ void MxDisplaySurface::VTable0x28(
|
||||
|
||||
tempSurface->Unlock(NULL);
|
||||
|
||||
if (m_videoParam.Flags().GetF1bit3()) {
|
||||
if (m_videoParam.Flags().GetDoubleScaling()) {
|
||||
RECT destRect = {p_right, p_bottom, p_right + p_width * 2, p_bottom + p_height * 2};
|
||||
m_ddSurface2->Blt(&destRect, tempSurface, NULL, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
|
||||
}
|
||||
@ -749,7 +749,7 @@ void MxDisplaySurface::DrawTransparentRLE(
|
||||
// FUNCTION: LEGO1 0x100bba50
|
||||
void MxDisplaySurface::Display(MxS32 p_left, MxS32 p_top, MxS32 p_left2, MxS32 p_top2, MxS32 p_width, MxS32 p_height)
|
||||
{
|
||||
if (m_videoParam.Flags().GetF2bit1()) {
|
||||
if (m_videoParam.Flags().GetEnabled()) {
|
||||
if (m_videoParam.Flags().GetFlipSurfaces()) {
|
||||
if (g_unk0x1010215c < 2) {
|
||||
g_unk0x1010215c++;
|
||||
@ -1012,7 +1012,7 @@ void MxDisplaySurface::VTable0x24(
|
||||
|
||||
MxU8* data = p_bitmap->GetStart(p_left, p_top);
|
||||
|
||||
if (m_videoParam.Flags().GetF1bit3()) {
|
||||
if (m_videoParam.Flags().GetDoubleScaling()) {
|
||||
p_bottom *= 2;
|
||||
p_right *= 2;
|
||||
|
||||
|
||||
@ -21,17 +21,20 @@ MxVideoManager::MxVideoManager()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be270
|
||||
// FUNCTION: BETA10 0x1012dde0
|
||||
void MxVideoManager::UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be2a0
|
||||
// FUNCTION: BETA10 0x1012cad8
|
||||
MxVideoManager::~MxVideoManager()
|
||||
{
|
||||
Destroy(TRUE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be320
|
||||
// FUNCTION: BETA10 0x1012cb66
|
||||
MxResult MxVideoManager::Init()
|
||||
{
|
||||
m_pDirectDraw = NULL;
|
||||
@ -44,6 +47,7 @@ MxResult MxVideoManager::Init()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be340
|
||||
// FUNCTION: BETA10 0x1012cbca
|
||||
void MxVideoManager::Destroy(MxBool p_fromDestructor)
|
||||
{
|
||||
if (m_thread) {
|
||||
@ -81,7 +85,7 @@ void MxVideoManager::Destroy(MxBool p_fromDestructor)
|
||||
m_criticalSection.Leave();
|
||||
|
||||
if (!p_fromDestructor) {
|
||||
MxMediaManager::Destroy();
|
||||
MxPresentationManager::Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,6 +138,7 @@ void MxVideoManager::SortPresenterList()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be600
|
||||
// STUB: BETA10 0x1012cfbc
|
||||
MxResult MxVideoManager::VTable0x28(
|
||||
MxVideoParam& p_videoParam,
|
||||
LPDIRECTDRAW p_pDirectDraw,
|
||||
@ -150,7 +155,7 @@ MxResult MxVideoManager::VTable0x28(
|
||||
|
||||
m_unk0x60 = FALSE;
|
||||
|
||||
if (MxMediaManager::Create() != SUCCESS) {
|
||||
if (MxPresentationManager::Create() != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -216,6 +221,7 @@ MxResult MxVideoManager::VTable0x28(
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be820
|
||||
// STUB: BETA10 0x1012d3f1
|
||||
MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS, MxBool p_createThread)
|
||||
{
|
||||
MxBool locked = FALSE;
|
||||
@ -224,8 +230,8 @@ MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS,
|
||||
|
||||
m_unk0x60 = TRUE;
|
||||
|
||||
if (MxMediaManager::Create() != SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "MxMediaManager::Create failed");
|
||||
if (MxPresentationManager::Create() != SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "MxPresentationManager::Create failed");
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -308,6 +314,7 @@ MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS,
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bea50
|
||||
// FUNCTION: BETA10 0x1012d85f
|
||||
void MxVideoManager::Destroy()
|
||||
{
|
||||
Destroy(FALSE);
|
||||
@ -326,6 +333,7 @@ void MxVideoManager::InvalidateRect(MxRect32& p_rect)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bea90
|
||||
// FUNCTION: BETA10 0x1012d8e3
|
||||
MxResult MxVideoManager::Tickle()
|
||||
{
|
||||
AUTOLOCK(m_criticalSection);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user