mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 01:17:55 -05:00
Implement/match LegoPathStruct (#944)
* Implement/match LegoPathStruct * Rename some nums * Consistent naming * Naming * relax regex * Name some functions * Improve naming * Rename
This commit is contained in:
parent
bc91fd2189
commit
8fee73c525
18 changed files with 225 additions and 40 deletions
|
@ -26,6 +26,7 @@ class Isle : public LegoWorld {
|
||||||
public:
|
public:
|
||||||
// For g_unk0x100f1198
|
// For g_unk0x100f1198
|
||||||
enum {
|
enum {
|
||||||
|
c_bit6 = 0x20,
|
||||||
c_bit7 = 0x40
|
c_bit7 = 0x40
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class JukeBoxState : public LegoState {
|
||||||
// SYNTHETIC: LEGO1 0x1000f3d0
|
// SYNTHETIC: LEGO1 0x1000f3d0
|
||||||
// JukeBoxState::`scalar deleting destructor'
|
// JukeBoxState::`scalar deleting destructor'
|
||||||
|
|
||||||
protected:
|
// protected:
|
||||||
MxU32 m_state; // 0x08
|
MxU32 m_state; // 0x08
|
||||||
MxU32 m_active; // 0x0c
|
MxU32 m_active; // 0x0c
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
#include "mxgeometry/mxgeometry3d.h"
|
#include "mxgeometry/mxgeometry3d.h"
|
||||||
|
|
||||||
class AnimState;
|
class AnimState;
|
||||||
class IslePathActor;
|
|
||||||
class LegoAnimPresenter;
|
class LegoAnimPresenter;
|
||||||
class LegoEntity;
|
class LegoEntity;
|
||||||
class LegoExtraActor;
|
class LegoExtraActor;
|
||||||
class LegoFile;
|
class LegoFile;
|
||||||
|
class LegoPathActor;
|
||||||
class LegoPathBoundary;
|
class LegoPathBoundary;
|
||||||
class LegoROIList;
|
class LegoROIList;
|
||||||
struct LegoUnknown100db7f4;
|
struct LegoUnknown100db7f4;
|
||||||
|
@ -102,7 +102,7 @@ class LegoAnimationManager : public MxCore {
|
||||||
MxBool p_param8,
|
MxBool p_param8,
|
||||||
MxBool p_param9
|
MxBool p_param9
|
||||||
);
|
);
|
||||||
void CameraTriggerFire(IslePathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool);
|
void CameraTriggerFire(LegoPathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool);
|
||||||
void FUN_10061010(MxBool p_und);
|
void FUN_10061010(MxBool p_und);
|
||||||
LegoTranInfo* GetTranInfo(MxU32 p_index);
|
LegoTranInfo* GetTranInfo(MxU32 p_index);
|
||||||
void FUN_10062770();
|
void FUN_10062770();
|
||||||
|
|
|
@ -47,10 +47,11 @@ class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
|
||||||
void VTable0x8c() override; // vtable+0x8c
|
void VTable0x8c() override; // vtable+0x8c
|
||||||
void VTable0x90() override; // vtable+0x90
|
void VTable0x90() override; // vtable+0x90
|
||||||
|
|
||||||
|
void FUN_1006db40(LegoTime p_time);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
void Destroy(MxBool p_fromDestructor);
|
void Destroy(MxBool p_fromDestructor);
|
||||||
void FUN_1006db40(LegoTime p_time);
|
|
||||||
void FUN_1006db60(LegoTreeNode* p_node, LegoTime p_time);
|
void FUN_1006db60(LegoTreeNode* p_node, LegoTime p_time);
|
||||||
void FUN_1006dc10();
|
void FUN_1006dc10();
|
||||||
void FUN_1006e3f0(LegoHideAnimStructMap& p_map, LegoTreeNode* p_node);
|
void FUN_1006e3f0(LegoHideAnimStructMap& p_map, LegoTreeNode* p_node);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "mxstl/stlcompat.h"
|
#include "mxstl/stlcompat.h"
|
||||||
|
|
||||||
class LegoAnimPresenter;
|
class LegoAnimPresenter;
|
||||||
struct LegoPathStruct;
|
class LegoPathStruct;
|
||||||
class LegoWorld;
|
class LegoWorld;
|
||||||
class MxAtomId;
|
class MxAtomId;
|
||||||
class Vector3;
|
class Vector3;
|
||||||
|
|
|
@ -12,7 +12,17 @@ class LegoWorld;
|
||||||
// SIZE 0x0c
|
// SIZE 0x0c
|
||||||
struct LegoPathStructBase {
|
struct LegoPathStructBase {
|
||||||
public:
|
public:
|
||||||
LegoPathStructBase() : m_name(NULL), m_unk0x08(0) {}
|
enum {
|
||||||
|
c_bit1 = 0x01 << 24,
|
||||||
|
c_bit2 = 0x02 << 24,
|
||||||
|
c_bit3 = 0x04 << 24,
|
||||||
|
c_bit4 = 0x08 << 24,
|
||||||
|
c_bit5 = 0x10 << 24,
|
||||||
|
c_bit6 = 0x20 << 24,
|
||||||
|
c_bit7 = 0x40 << 24
|
||||||
|
};
|
||||||
|
|
||||||
|
LegoPathStructBase() : m_name(NULL), m_flags(0) {}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10047420
|
// FUNCTION: LEGO1 0x10047420
|
||||||
virtual ~LegoPathStructBase()
|
virtual ~LegoPathStructBase()
|
||||||
|
@ -22,25 +32,41 @@ struct LegoPathStructBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char* m_name; // 0x04
|
char* m_name; // 0x04
|
||||||
undefined4 m_unk0x08; // 0x08
|
MxU32 m_flags; // 0x08
|
||||||
};
|
};
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d7da0
|
// VTABLE: LEGO1 0x100d7da0
|
||||||
// SIZE 0x14
|
// SIZE 0x14
|
||||||
struct LegoPathStruct : public LegoPathStructBase {
|
class LegoPathStruct : public LegoPathStructBase {
|
||||||
public:
|
public:
|
||||||
|
enum Trigger {
|
||||||
|
c_camAnim = 'C',
|
||||||
|
c_d = 'D',
|
||||||
|
c_e = 'E',
|
||||||
|
c_g = 'G',
|
||||||
|
c_h = 'H',
|
||||||
|
c_music = 'M',
|
||||||
|
c_s = 'S',
|
||||||
|
c_w = 'W'
|
||||||
|
};
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100473a0
|
// FUNCTION: LEGO1 0x100473a0
|
||||||
LegoPathStruct() : m_world(NULL) {}
|
LegoPathStruct() : m_world(NULL) {}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10047470
|
// FUNCTION: LEGO1 0x10047470
|
||||||
~LegoPathStruct() override {}
|
~LegoPathStruct() override {}
|
||||||
|
|
||||||
virtual void VTable0x04(LegoPathActor*, undefined4, undefined4); // vtable+0x04
|
virtual void HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data); // vtable+0x04
|
||||||
|
|
||||||
inline void SetWorld(LegoWorld* p_world) { m_world = p_world; }
|
inline void SetWorld(LegoWorld* p_world) { m_world = p_world; }
|
||||||
inline void SetAtomId(const MxAtomId& p_atomId) { m_atomId = p_atomId; }
|
inline void SetAtomId(const MxAtomId& p_atomId) { m_atomId = p_atomId; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
MxBool HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data, MxBool p_bool);
|
||||||
|
void FUN_1001bc40(const char* p_name, MxU32 p_data, MxBool p_bool);
|
||||||
|
void PlayMusic(MxBool p_direction, MxU32 p_data);
|
||||||
|
|
||||||
LegoWorld* m_world; // 0x0c
|
LegoWorld* m_world; // 0x0c
|
||||||
MxAtomId m_atomId; // 0x10
|
MxAtomId m_atomId; // 0x10
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
class IslePathActor;
|
|
||||||
class MxAtomId;
|
class MxAtomId;
|
||||||
class LegoEntity;
|
class LegoEntity;
|
||||||
class LegoFile;
|
class LegoFile;
|
||||||
class LegoAnimPresenter;
|
class LegoAnimPresenter;
|
||||||
class LegoNamedTexture;
|
class LegoNamedTexture;
|
||||||
|
class LegoPathActor;
|
||||||
class LegoROI;
|
class LegoROI;
|
||||||
class LegoTreeNode;
|
class LegoTreeNode;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ Extra::ActionType MatchActionString(const char*);
|
||||||
void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
||||||
void SetCameraControllerFromIsle();
|
void SetCameraControllerFromIsle();
|
||||||
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
||||||
void PlayCamAnim(IslePathActor* p_actor, undefined4 p_unused, MxU32 p_location, MxBool p_bool);
|
void PlayCamAnim(LegoPathActor* p_actor, MxBool p_unused, MxU32 p_location, MxBool p_bool);
|
||||||
void FUN_1003eda0();
|
void FUN_1003eda0();
|
||||||
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
|
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
|
||||||
void FUN_1003ef00(MxBool p_enable);
|
void FUN_1003ef00(MxBool p_enable);
|
||||||
|
|
|
@ -94,6 +94,7 @@ class LegoWorld : public LegoEntity {
|
||||||
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
|
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
|
||||||
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
|
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
|
||||||
inline list<LegoROI*>& GetROIList() { return m_roiList; }
|
inline list<LegoROI*>& GetROIList() { return m_roiList; }
|
||||||
|
inline LegoHideAnimPresenter* GetHideAnimPresenter() { return m_hideAnimPresenter; }
|
||||||
|
|
||||||
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
|
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
|
||||||
|
|
||||||
|
|
|
@ -535,7 +535,7 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
|
||||||
}
|
}
|
||||||
|
|
||||||
if (camAnim) {
|
if (camAnim) {
|
||||||
PlayCamAnim(this, 0, g_spawnLocations[i].m_location, TRUE);
|
PlayCamAnim(this, FALSE, g_spawnLocations[i].m_location, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1153,7 +1153,7 @@ MxResult LegoAnimationManager::FUN_10060dc0(
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10060eb0
|
// FUNCTION: LEGO1 0x10060eb0
|
||||||
// FUNCTION: BETA10 0x1004206c
|
// FUNCTION: BETA10 0x1004206c
|
||||||
void LegoAnimationManager::CameraTriggerFire(IslePathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool)
|
void LegoAnimationManager::CameraTriggerFire(LegoPathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool)
|
||||||
{
|
{
|
||||||
if (Lego()->m_unk0x13c && m_enableCamAnims && !m_animRunning) {
|
if (Lego()->m_unk0x13c && m_enableCamAnims && !m_animRunning) {
|
||||||
LegoLocation* location = LegoNavController::GetLocation(p_location);
|
LegoLocation* location = LegoNavController::GetLocation(p_location);
|
||||||
|
|
|
@ -344,7 +344,7 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003ecc0
|
// FUNCTION: LEGO1 0x1003ecc0
|
||||||
// FUNCTION: BETA10 0x100d4b38
|
// FUNCTION: BETA10 0x100d4b38
|
||||||
void PlayCamAnim(IslePathActor* p_actor, undefined4 p_unused, MxU32 p_location, MxBool p_bool)
|
void PlayCamAnim(LegoPathActor* p_actor, MxBool p_unused, MxU32 p_location, MxBool p_bool)
|
||||||
{
|
{
|
||||||
LegoWorld* world = CurrentWorld();
|
LegoWorld* world = CurrentWorld();
|
||||||
MxLong result = 0;
|
MxLong result = 0;
|
||||||
|
|
|
@ -61,19 +61,19 @@ void LegoPathBoundary::FUN_100575b0(Vector3& p_point1, Vector3& p_point2, LegoPa
|
||||||
|
|
||||||
if (dot2 > dot1) {
|
if (dot2 > dot1) {
|
||||||
for (MxS32 i = 0; i < m_unk0x48; i++) {
|
for (MxS32 i = 0; i < m_unk0x48; i++) {
|
||||||
LegoPathStruct* s = m_unk0x4c[i].m_unk0x00;
|
LegoPathStruct* s = m_unk0x4c[i].m_pathStruct;
|
||||||
|
|
||||||
if (m_unk0x4c[i].m_unk0x08 >= dot1 && m_unk0x4c[i].m_unk0x08 < dot2) {
|
if (m_unk0x4c[i].m_unk0x08 >= dot1 && m_unk0x4c[i].m_unk0x08 < dot2) {
|
||||||
s->VTable0x04(p_actor, 1, m_unk0x4c[i].m_unk0x04);
|
s->HandleTrigger(p_actor, TRUE, m_unk0x4c[i].m_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (dot2 < dot1) {
|
else if (dot2 < dot1) {
|
||||||
for (MxS32 i = 0; i < m_unk0x48; i++) {
|
for (MxS32 i = 0; i < m_unk0x48; i++) {
|
||||||
LegoPathStruct* s = m_unk0x4c[i].m_unk0x00;
|
LegoPathStruct* s = m_unk0x4c[i].m_pathStruct;
|
||||||
|
|
||||||
if (m_unk0x4c[i].m_unk0x08 >= dot2 && m_unk0x4c[i].m_unk0x08 < dot1) {
|
if (m_unk0x4c[i].m_unk0x08 >= dot2 && m_unk0x4c[i].m_unk0x08 < dot1) {
|
||||||
s->VTable0x04(p_actor, 0, m_unk0x4c[i].m_unk0x04);
|
s->HandleTrigger(p_actor, FALSE, m_unk0x4c[i].m_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -528,7 +528,7 @@ MxResult LegoPathController::ReadStructs(LegoStorage* p_storage)
|
||||||
m_structs[i].m_name[length] = '\0';
|
m_structs[i].m_name[length] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_storage->Read(&m_structs[i].m_unk0x08, sizeof(m_structs[i].m_unk0x08)) != SUCCESS) {
|
if (p_storage->Read(&m_structs[i].m_flags, sizeof(m_structs[i].m_flags)) != SUCCESS) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -678,17 +678,16 @@ MxResult LegoPathController::ReadBoundaries(LegoStorage* p_storage)
|
||||||
|
|
||||||
if (boundary.m_unk0x48 > 0) {
|
if (boundary.m_unk0x48 > 0) {
|
||||||
boundary.m_unk0x50 = new Mx3DPointFloat;
|
boundary.m_unk0x50 = new Mx3DPointFloat;
|
||||||
boundary.m_unk0x4c = new LegoWEGEdge::Path[boundary.m_unk0x48];
|
boundary.m_unk0x4c = new LegoWEGEdge::PathWithTrigger[boundary.m_unk0x48];
|
||||||
|
|
||||||
for (j = 0; j < boundary.m_unk0x48; j++) {
|
for (j = 0; j < boundary.m_unk0x48; j++) {
|
||||||
if (p_storage->Read(&s, sizeof(s)) != SUCCESS) {
|
if (p_storage->Read(&s, sizeof(s)) != SUCCESS) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
boundary.m_unk0x4c[j].m_unk0x00 = &m_structs[s];
|
boundary.m_unk0x4c[j].m_pathStruct = &m_structs[s];
|
||||||
|
|
||||||
if (p_storage->Read(&boundary.m_unk0x4c[j].m_unk0x04, sizeof(boundary.m_unk0x4c[j].m_unk0x04)) !=
|
if (p_storage->Read(&boundary.m_unk0x4c[j].m_data, sizeof(boundary.m_unk0x4c[j].m_data)) != SUCCESS) {
|
||||||
SUCCESS) {
|
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,168 @@
|
||||||
#include "legopathstruct.h"
|
#include "legopathstruct.h"
|
||||||
|
|
||||||
|
#include "isle.h"
|
||||||
|
#include "jukebox_actions.h"
|
||||||
|
#include "jukeboxstate.h"
|
||||||
|
#include "legohideanimpresenter.h"
|
||||||
|
#include "legopathactor.h"
|
||||||
|
#include "legoutils.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "mxbackgroundaudiomanager.h"
|
||||||
|
#include "mxmisc.h"
|
||||||
|
#include "mxnotificationmanager.h"
|
||||||
|
#include "mxtype19notificationparam.h"
|
||||||
|
#include "scripts.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(LegoPathStructBase, 0x0c)
|
DECOMP_SIZE_ASSERT(LegoPathStructBase, 0x0c)
|
||||||
DECOMP_SIZE_ASSERT(LegoPathStruct, 0x14)
|
DECOMP_SIZE_ASSERT(LegoPathStruct, 0x14)
|
||||||
|
|
||||||
// STUB: LEGO1 0x1001b700
|
// Flags used in isle.cpp
|
||||||
// FUNCTION: BETA10 0x100c26c5
|
extern MxU32 g_unk0x100f1198;
|
||||||
void LegoPathStruct::VTable0x04(LegoPathActor*, undefined4, undefined4)
|
|
||||||
|
// GLOBAL: LEGO1 0x100f119c
|
||||||
|
MxBool g_unk0x100f119c = FALSE;
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1001b700
|
||||||
|
void LegoPathStruct::HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data)
|
||||||
{
|
{
|
||||||
// TODO
|
if (!HandleTrigger(p_actor, p_direction, p_data, FALSE) && g_unk0x100f119c) {
|
||||||
|
HandleTrigger(p_actor, p_direction, p_data, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1001b740
|
||||||
|
// FUNCTION: BETA10 0x100c26c5
|
||||||
|
MxBool LegoPathStruct::HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data, MxBool p_bool)
|
||||||
|
{
|
||||||
|
MxBool triggered = FALSE;
|
||||||
|
MxBool bool2 = p_bool ? !p_direction : p_direction;
|
||||||
|
|
||||||
|
MxU32 flags = bool2 ? c_bit5 : c_bit6;
|
||||||
|
flags |= p_actor->GetCameraFlag() ? c_bit1 : (c_bit2 | c_bit3 | c_bit4);
|
||||||
|
|
||||||
|
if ((m_flags & flags & (c_bit5 | c_bit6 | c_bit7)) && (m_flags & flags & (c_bit1 | c_bit2 | c_bit3 | c_bit4))) {
|
||||||
|
triggered = TRUE;
|
||||||
|
|
||||||
|
switch (m_name[2]) {
|
||||||
|
case c_camAnim:
|
||||||
|
if (g_unk0x100f1198 & Isle::c_bit6) {
|
||||||
|
PlayCamAnim(p_actor, bool2, p_data, TRUE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case c_d: {
|
||||||
|
p_actor->VTable0x58(p_data);
|
||||||
|
|
||||||
|
MxType19NotificationParam param(c_notificationType19, p_actor, m_name[2], p_data);
|
||||||
|
p_actor->Notify(param);
|
||||||
|
|
||||||
|
LegoWorld* world = CurrentWorld();
|
||||||
|
if (world != NULL) {
|
||||||
|
NotificationManager()->Send(world, param);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case c_e:
|
||||||
|
FUN_1001bc40(m_name, p_data, !(p_bool == FALSE));
|
||||||
|
break;
|
||||||
|
case c_g:
|
||||||
|
break;
|
||||||
|
case c_h: {
|
||||||
|
LegoHideAnimPresenter* presenter = m_world->GetHideAnimPresenter();
|
||||||
|
|
||||||
|
if (presenter != NULL) {
|
||||||
|
presenter->FUN_1006db40(p_data * 100);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case c_music:
|
||||||
|
if (g_unk0x100f1198 & Isle::c_bit7) {
|
||||||
|
PlayMusic(p_direction, p_data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case c_s: {
|
||||||
|
LegoWorld* world = CurrentWorld();
|
||||||
|
if (world != NULL) {
|
||||||
|
MxType19NotificationParam param(c_notificationType19, p_actor, m_name[2], p_data);
|
||||||
|
|
||||||
|
if (world->Notify(param) != 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FUN_1001bc40(m_name, p_data, p_bool == FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case c_w: {
|
||||||
|
LegoWorld* world = CurrentWorld();
|
||||||
|
if (world != NULL) {
|
||||||
|
MxType19NotificationParam param(c_notificationType19, p_actor, m_name[2], p_data);
|
||||||
|
NotificationManager()->Send(world, param);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return triggered;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1001bc40
|
||||||
|
// FUNCTION: BETA10 0x100c2a6c
|
||||||
|
void LegoPathStruct::FUN_1001bc40(const char* p_name, MxU32 p_data, MxBool p_bool)
|
||||||
|
{
|
||||||
|
MxDSAction action;
|
||||||
|
action.SetObjectId(p_data);
|
||||||
|
action.SetAtomId(m_atomId);
|
||||||
|
|
||||||
|
if (p_bool) {
|
||||||
|
action.SetUnknown24(-1);
|
||||||
|
Start(&action);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
action.SetUnknown24(-2);
|
||||||
|
DeleteObject(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1001bd10
|
||||||
|
// FUNCTION: BETA10 0x100c2b4a
|
||||||
|
void LegoPathStruct::PlayMusic(MxBool p_direction, MxU32 p_data)
|
||||||
|
{
|
||||||
|
JukeBoxState* state = (JukeBoxState*) GameState()->GetState("JukeBoxState");
|
||||||
|
if (state != NULL && state->m_active) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
JukeboxScript::Script music[] = {
|
||||||
|
JukeboxScript::c_ResidentalArea_Music,
|
||||||
|
JukeboxScript::c_BeachBlvd_Music,
|
||||||
|
JukeboxScript::c_Cave_Music,
|
||||||
|
JukeboxScript::c_CentralRoads_Music,
|
||||||
|
JukeboxScript::c_Jail_Music,
|
||||||
|
JukeboxScript::c_Hospital_Music,
|
||||||
|
JukeboxScript::c_InformationCenter_Music,
|
||||||
|
JukeboxScript::c_PoliceStation_Music,
|
||||||
|
JukeboxScript::c_Park_Music,
|
||||||
|
JukeboxScript::c_CentralNorthRoad_Music,
|
||||||
|
JukeboxScript::c_GarageArea_Music,
|
||||||
|
JukeboxScript::c_RaceTrackRoad_Music,
|
||||||
|
JukeboxScript::c_Beach_Music,
|
||||||
|
JukeboxScript::c_Quiet_Audio
|
||||||
|
};
|
||||||
|
|
||||||
|
MxS16 triggersReff[24][2] = {{11, 10}, {6, 10}, {3, 1}, {4, 1}, {1, 4}, {1, 4}, {13, 2}, {13, 2},
|
||||||
|
{13, 2}, {4, 10}, {11, 9}, {9, 7}, {8, 7}, {8, 5}, {5, 2}, {2, 4},
|
||||||
|
{4, 2}, {4, 5}, {11, 4}, {12, 10}, {10, 12}, {10, 12}, {14, 2}, {14, 2}};
|
||||||
|
|
||||||
|
MxDSAction action;
|
||||||
|
action.SetAtomId(*g_jukeboxScript);
|
||||||
|
action.SetUnknown24(-1);
|
||||||
|
|
||||||
|
if (p_data <= sizeOfArray(triggersReff)) {
|
||||||
|
action.SetObjectId(music[triggersReff[p_data - 1][p_direction == FALSE] - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action.GetObjectId() != -1) {
|
||||||
|
BackgroundAudioManager()->PlayMusic(action, 5, 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
DECOMP_SIZE_ASSERT(Isle, 0x140)
|
DECOMP_SIZE_ASSERT(Isle, 0x140)
|
||||||
|
|
||||||
// GLOBAL: LEGO1 0x100f1198
|
// GLOBAL: LEGO1 0x100f1198
|
||||||
undefined4 g_unk0x100f1198 = 0x7f;
|
MxU32 g_unk0x100f1198 = 0x7f;
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10030820
|
// FUNCTION: LEGO1 0x10030820
|
||||||
Isle::Isle()
|
Isle::Isle()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "legowegedge.h"
|
#include "legowegedge.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(LegoWEGEdge, 0x54)
|
DECOMP_SIZE_ASSERT(LegoWEGEdge, 0x54)
|
||||||
DECOMP_SIZE_ASSERT(LegoWEGEdge::Path, 0x0c)
|
DECOMP_SIZE_ASSERT(LegoWEGEdge::PathWithTrigger, 0x0c)
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1009a730
|
// FUNCTION: LEGO1 0x1009a730
|
||||||
LegoWEGEdge::LegoWEGEdge()
|
LegoWEGEdge::LegoWEGEdge()
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "legoweedge.h"
|
#include "legoweedge.h"
|
||||||
#include "mxgeometry/mxgeometry3d.h"
|
#include "mxgeometry/mxgeometry3d.h"
|
||||||
|
|
||||||
struct LegoPathStruct;
|
class LegoPathStruct;
|
||||||
|
|
||||||
// might be a struct with public members
|
// might be a struct with public members
|
||||||
// VTABLE: LEGO1 0x100db7f8
|
// VTABLE: LEGO1 0x100db7f8
|
||||||
|
@ -20,19 +20,19 @@ class LegoWEGEdge : public LegoWEEdge {
|
||||||
};
|
};
|
||||||
|
|
||||||
// SIZE 0x0c
|
// SIZE 0x0c
|
||||||
struct Path {
|
struct PathWithTrigger {
|
||||||
// FUNCTION: LEGO1 0x10048280
|
// FUNCTION: LEGO1 0x10048280
|
||||||
// FUNCTION: BETA10 0x100bd450
|
// FUNCTION: BETA10 0x100bd450
|
||||||
Path()
|
PathWithTrigger()
|
||||||
{
|
{
|
||||||
m_unk0x00 = NULL;
|
m_pathStruct = NULL;
|
||||||
m_unk0x04 = 0;
|
m_data = 0;
|
||||||
m_unk0x08 = 0.0f;
|
m_unk0x08 = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
LegoPathStruct* m_unk0x00; // 0x00
|
LegoPathStruct* m_pathStruct; // 0x00
|
||||||
undefined4 m_unk0x04; // 0x04
|
unsigned int m_data; // 0x04
|
||||||
float m_unk0x08; // 0x08
|
float m_unk0x08; // 0x08
|
||||||
};
|
};
|
||||||
|
|
||||||
LegoWEGEdge();
|
LegoWEGEdge();
|
||||||
|
@ -71,7 +71,7 @@ class LegoWEGEdge : public LegoWEEdge {
|
||||||
Mx3DPointFloat m_unk0x30; // 0x30
|
Mx3DPointFloat m_unk0x30; // 0x30
|
||||||
LegoU32 m_unk0x44; // 0x44
|
LegoU32 m_unk0x44; // 0x44
|
||||||
LegoU8 m_unk0x48; // 0x48
|
LegoU8 m_unk0x48; // 0x48
|
||||||
Path* m_unk0x4c; // 0x4c
|
PathWithTrigger* m_unk0x4c; // 0x4c
|
||||||
Mx3DPointFloat* m_unk0x50; // 0x50
|
Mx3DPointFloat* m_unk0x50; // 0x50
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ClassName: '^[A-Z][a-zA-Z0-9]+$'
|
ClassName: '^[A-Z][a-zA-Z0-9]+$'
|
||||||
CppMethod: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$'
|
CppMethod: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$'
|
||||||
EnumName: '^\(unnamed|^[A-Z][a-zA-Z0-9]+$'
|
EnumName: '^\(unnamed|^[A-Z][a-zA-Z0-9]+$'
|
||||||
EnumConstantName: '^(c_|e_)[a-z][a-zA-Z0-9]+$'
|
EnumConstantName: '^(c_|e_)[a-z][a-zA-Z0-9]*$'
|
||||||
FunctionName: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$'
|
FunctionName: '^operator|^FUN_[a-f0-9]{8}$|^VTable0x[a-f0-9]{1,8}$|^(?!VTable)[A-Z][a-zA-Z0-9]+$'
|
||||||
ParameterName: '^p_(unk0x[a-f0-9]{1,8}$|(?!unk)[a-z][a-zA-Z0-9]*)$|^$'
|
ParameterName: '^p_(unk0x[a-f0-9]{1,8}$|(?!unk)[a-z][a-zA-Z0-9]*)$|^$'
|
||||||
StructName: '^\(anon|^\(unnamed|^[A-Z][a-zA-Z0-9]+$'
|
StructName: '^\(anon|^\(unnamed|^[A-Z][a-zA-Z0-9]+$'
|
||||||
|
|
Loading…
Reference in a new issue