mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-29 19:16:05 -05:00
LegoGameState::SwitchArea (#590)
This commit is contained in:
parent
91a585ae49
commit
13fc4e3285
11 changed files with 192 additions and 130 deletions
|
@ -35,35 +35,35 @@ class LegoGameState {
|
||||||
e_infodoor,
|
e_infodoor,
|
||||||
e_unk4,
|
e_unk4,
|
||||||
e_elevbott,
|
e_elevbott,
|
||||||
e_unk6,
|
e_elevride,
|
||||||
e_unk7,
|
e_elevride2,
|
||||||
e_unk8,
|
e_elevopen,
|
||||||
e_unk9,
|
e_seaview,
|
||||||
e_unk10,
|
e_observe,
|
||||||
e_unk11,
|
e_elevdown,
|
||||||
e_regbook,
|
e_regbook,
|
||||||
e_infoscor,
|
e_infoscor,
|
||||||
e_jetrace,
|
e_jetrace,
|
||||||
e_unk15,
|
e_jetrace2,
|
||||||
e_unk16,
|
e_jetraceExterior,
|
||||||
e_unk17,
|
e_unk17,
|
||||||
e_carrace,
|
e_carrace,
|
||||||
e_unk19,
|
e_carraceExterior,
|
||||||
e_unk20,
|
e_unk20,
|
||||||
e_unk21,
|
e_unk21,
|
||||||
e_unk22,
|
e_pizzeriaExterior,
|
||||||
|
|
||||||
e_unk25 = 25,
|
e_garageExterior = 25,
|
||||||
e_garage,
|
e_garage,
|
||||||
e_unk27,
|
e_garadoor,
|
||||||
|
e_unk28,
|
||||||
e_unk29 = 29,
|
e_hospitalExterior,
|
||||||
e_hospital,
|
e_hospital,
|
||||||
e_unk31,
|
e_unk31,
|
||||||
e_unk32,
|
e_policeExterior,
|
||||||
|
e_unk33,
|
||||||
e_police = 34,
|
e_police,
|
||||||
e_unk35,
|
e_polidoor,
|
||||||
e_copter,
|
e_copter,
|
||||||
e_dunecar,
|
e_dunecar,
|
||||||
e_jetski,
|
e_jetski,
|
||||||
|
@ -73,6 +73,7 @@ class LegoGameState {
|
||||||
e_act3script,
|
e_act3script,
|
||||||
|
|
||||||
e_jukeboxw = 53,
|
e_jukeboxw = 53,
|
||||||
|
e_unk54,
|
||||||
|
|
||||||
e_histbook = 56,
|
e_histbook = 56,
|
||||||
e_unk57,
|
e_unk57,
|
||||||
|
|
|
@ -56,6 +56,7 @@ class LegoNavController : public MxCore {
|
||||||
void SetControlMax(int p_hMax, int p_vMax);
|
void SetControlMax(int p_hMax, int p_vMax);
|
||||||
void ResetToDefault();
|
void ResetToDefault();
|
||||||
void SetTargets(int p_hPos, int p_vPos, MxBool p_accel);
|
void SetTargets(int p_hPos, int p_vPos, MxBool p_accel);
|
||||||
|
static void SetLocation(MxU32 p_location);
|
||||||
float CalculateNewTargetSpeed(int p_pos, int p_center, float p_maxSpeed);
|
float CalculateNewTargetSpeed(int p_pos, int p_center, float p_maxSpeed);
|
||||||
float CalculateNewAccel(int p_pos, int p_center, float p_maxAccel, int p_minAccel);
|
float CalculateNewAccel(int p_pos, int p_center, float p_maxAccel, int p_minAccel);
|
||||||
float CalculateNewVel(float p_targetVel, float p_currentVel, float p_accel, float p_time);
|
float CalculateNewVel(float p_targetVel, float p_currentVel, float p_accel, float p_time);
|
||||||
|
|
|
@ -34,6 +34,7 @@ class NamedTexture {
|
||||||
void FUN_1003e050(LegoAnimPresenter* p_presenter);
|
void FUN_1003e050(LegoAnimPresenter* p_presenter);
|
||||||
Extra::ActionType MatchActionString(const char*);
|
Extra::ActionType MatchActionString(const char*);
|
||||||
void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, int p_targetEntityId, LegoEntity* p_sender);
|
void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, int p_targetEntityId, LegoEntity* p_sender);
|
||||||
|
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);
|
||||||
MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id);
|
MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id);
|
||||||
void FUN_1003ef00(MxBool);
|
void FUN_1003ef00(MxBool);
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
#include "legogamestate.h"
|
#include "legogamestate.h"
|
||||||
|
|
||||||
|
#include "act1state.h"
|
||||||
|
#include "define.h"
|
||||||
#include "infocenterstate.h"
|
#include "infocenterstate.h"
|
||||||
|
#include "islepathactor.h"
|
||||||
#include "legoanimationmanager.h"
|
#include "legoanimationmanager.h"
|
||||||
|
#include "legonavcontroller.h"
|
||||||
#include "legoomni.h"
|
#include "legoomni.h"
|
||||||
#include "legostate.h"
|
#include "legostate.h"
|
||||||
#include "legoutil.h"
|
#include "legoutil.h"
|
||||||
|
@ -298,8 +302,8 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
InvokeAction(Extra::e_stop, *g_elevbottScript, 0, NULL);
|
InvokeAction(Extra::e_stop, *g_elevbottScript, 0, NULL);
|
||||||
InvokeAction(Extra::e_close, *g_elevbottScript, 0, NULL);
|
InvokeAction(Extra::e_close, *g_elevbottScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk6:
|
case e_elevride:
|
||||||
case e_unk7:
|
case e_elevride2:
|
||||||
RemoveFromWorld(*g_isleScript, 0x41b, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x41b, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 1052, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 1052, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x41d, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x41d, *g_isleScript, 0);
|
||||||
|
@ -312,17 +316,17 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
RemoveFromWorld(*g_isleScript, 0x42a, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x42a, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x42b, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x42b, *g_isleScript, 0);
|
||||||
break;
|
break;
|
||||||
case e_unk8:
|
case e_elevopen:
|
||||||
RemoveFromWorld(*g_isleScript, 0x45b, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x45b, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x45c, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x45c, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x45d, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x45d, *g_isleScript, 0);
|
||||||
break;
|
break;
|
||||||
case e_unk9:
|
case e_seaview:
|
||||||
RemoveFromWorld(*g_isleScript, 0x475, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x475, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x476, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x476, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x477, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x477, *g_isleScript, 0);
|
||||||
break;
|
break;
|
||||||
case e_unk10:
|
case e_observe:
|
||||||
RemoveFromWorld(*g_isleScript, 0x45f, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x45f, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x460, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x460, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x461, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x461, *g_isleScript, 0);
|
||||||
|
@ -344,7 +348,7 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
RemoveFromWorld(*g_isleScript, 0x472, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x472, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x12, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x12, *g_isleScript, 0);
|
||||||
break;
|
break;
|
||||||
case e_unk11:
|
case e_elevdown:
|
||||||
RemoveFromWorld(*g_isleScript, 0x47a, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x47a, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x47b, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x47b, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x47c, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x47c, *g_isleScript, 0);
|
||||||
|
@ -373,7 +377,7 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
InvokeAction(Extra::e_stop, *g_garageScript, 0, NULL);
|
InvokeAction(Extra::e_stop, *g_garageScript, 0, NULL);
|
||||||
InvokeAction(Extra::e_close, *g_garageScript, 0, NULL);
|
InvokeAction(Extra::e_close, *g_garageScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk27:
|
case e_garadoor:
|
||||||
RemoveFromWorld(*g_isleScript, 0x489, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x489, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x48a, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x48a, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x48b, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x48b, *g_isleScript, 0);
|
||||||
|
@ -387,7 +391,7 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
InvokeAction(Extra::e_stop, *g_policeScript, 0, NULL);
|
InvokeAction(Extra::e_stop, *g_policeScript, 0, NULL);
|
||||||
InvokeAction(Extra::e_close, *g_policeScript, 0, NULL);
|
InvokeAction(Extra::e_close, *g_policeScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk35:
|
case e_polidoor:
|
||||||
RemoveFromWorld(*g_isleScript, 0x47f, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x47f, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x480, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x480, *g_isleScript, 0);
|
||||||
RemoveFromWorld(*g_isleScript, 0x481, *g_isleScript, 0);
|
RemoveFromWorld(*g_isleScript, 0x481, *g_isleScript, 0);
|
||||||
|
@ -437,6 +441,26 @@ void LegoGameState::StopArea(Area p_area)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void LoadIsle()
|
||||||
|
{
|
||||||
|
LegoWorld* world = FindWorld(*g_isleScript, 0);
|
||||||
|
if (world != NULL) {
|
||||||
|
if (!world->GetUnknown0xd0().empty()) {
|
||||||
|
#ifdef COMPAT_MODE
|
||||||
|
{
|
||||||
|
MxNotificationParam param(c_notificationType20, NULL);
|
||||||
|
NotificationManager()->Send(world, ¶m);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
NotificationManager()->Send(world, &MxNotificationParam(c_notificationType20, NULL));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003b060
|
// FUNCTION: LEGO1 0x1003b060
|
||||||
void LegoGameState::SwitchArea(Area p_area)
|
void LegoGameState::SwitchArea(Area p_area)
|
||||||
{
|
{
|
||||||
|
@ -448,8 +472,6 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||||
AnimationManager()->FUN_1005ef10();
|
AnimationManager()->FUN_1005ef10();
|
||||||
VideoManager()->SetUnk0x554(FALSE);
|
VideoManager()->SetUnk0x554(FALSE);
|
||||||
|
|
||||||
LegoWorld* world;
|
|
||||||
|
|
||||||
switch (p_area) {
|
switch (p_area) {
|
||||||
case e_isle:
|
case e_isle:
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
||||||
|
@ -463,17 +485,17 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_infodoorScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_infodoorScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk4:
|
case e_unk4:
|
||||||
case e_unk15:
|
case e_jetrace2:
|
||||||
case e_unk16:
|
case e_jetraceExterior:
|
||||||
case e_unk17:
|
case e_unk17:
|
||||||
case e_unk19:
|
case e_carraceExterior:
|
||||||
case e_unk20:
|
case e_unk20:
|
||||||
case e_unk21:
|
case e_unk21:
|
||||||
case e_unk22:
|
case e_pizzeriaExterior:
|
||||||
case e_unk25:
|
case e_garageExterior:
|
||||||
case e_unk29:
|
case e_hospitalExterior:
|
||||||
case e_unk31:
|
case e_unk31:
|
||||||
case e_unk32:
|
case e_policeExterior:
|
||||||
case e_unk57:
|
case e_unk57:
|
||||||
case e_unk58:
|
case e_unk58:
|
||||||
case e_unk59:
|
case e_unk59:
|
||||||
|
@ -481,58 +503,27 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||||
case e_unk61:
|
case e_unk61:
|
||||||
case e_unk64:
|
case e_unk64:
|
||||||
case e_unk66:
|
case e_unk66:
|
||||||
world = FindWorld(*g_isleScript, 0);
|
LoadIsle();
|
||||||
if (world != NULL) {
|
|
||||||
if (world->GetUnknown0xd0().empty()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
#ifdef COMPAT_MODE
|
|
||||||
{
|
|
||||||
MxNotificationParam param(c_notificationType20, NULL);
|
|
||||||
NotificationManager()->Send(world, ¶m);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
NotificationManager()->Send(world, &MxNotificationParam(c_notificationType20, NULL));
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
|
||||||
break;
|
break;
|
||||||
case e_elevbott:
|
case e_elevbott:
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_elevbottScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_elevbottScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk6:
|
case e_elevride:
|
||||||
case e_unk7:
|
case e_elevride2:
|
||||||
world = FindWorld(*g_isleScript, 0);
|
LoadIsle();
|
||||||
|
|
||||||
if (world == NULL) {
|
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
|
||||||
}
|
|
||||||
else if (!world->GetUnknown0xd0().empty()) {
|
|
||||||
#ifdef COMPAT_MODE
|
|
||||||
{
|
|
||||||
MxNotificationParam param(c_notificationType20, NULL);
|
|
||||||
NotificationManager()->Send(world, ¶m);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
NotificationManager()->Send(world, &MxNotificationParam(c_notificationType20, NULL));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1050, NULL);
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1050, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk8:
|
case e_elevopen:
|
||||||
VideoManager()->SetUnk0x554(TRUE);
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1114, NULL);
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1114, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk9:
|
case e_seaview:
|
||||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1140, NULL);
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1140, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk10:
|
case e_observe:
|
||||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1118, NULL);
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1118, NULL);
|
||||||
break;
|
break;
|
||||||
case e_unk11:
|
case e_elevdown:
|
||||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1145, NULL);
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1145, NULL);
|
||||||
break;
|
break;
|
||||||
case e_regbook:
|
case e_regbook:
|
||||||
|
@ -545,64 +536,110 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||||
break;
|
break;
|
||||||
case e_jetrace:
|
case e_jetrace:
|
||||||
if (m_previousArea == e_infomain) {
|
if (m_previousArea == e_infomain) {
|
||||||
m_currentArea = e_unk15;
|
m_currentArea = e_jetrace2;
|
||||||
|
LoadIsle();
|
||||||
world = FindWorld(*g_isleScript, 0);
|
|
||||||
if (world != NULL) {
|
|
||||||
if (world->GetUnknown0xd0().empty()) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef COMPAT_MODE
|
|
||||||
{
|
|
||||||
MxNotificationParam param(c_notificationType20, NULL);
|
|
||||||
NotificationManager()->Send(world, ¶m);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
NotificationManager()->Send(world, &MxNotificationParam(c_notificationType20, NULL));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_isleScript, 0, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_jetraceScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_jetraceScript, 0, NULL);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case e_carrace:
|
case e_carrace:
|
||||||
if (m_previousArea == e_infomain) {
|
if (m_previousArea == e_infomain) {
|
||||||
m_currentArea = e_unk19;
|
m_currentArea = e_carraceExterior;
|
||||||
|
LoadIsle();
|
||||||
world = FindWorld(*g_isleScript, 0);
|
|
||||||
if (world != NULL) {
|
|
||||||
if (world->GetUnknown0xd0().empty()) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef COMPAT_MODE
|
|
||||||
{
|
|
||||||
MxNotificationParam param(c_notificationType20, NULL);
|
|
||||||
NotificationManager()->Send(world, ¶m);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
NotificationManager()->Send(world, &MxNotificationParam(c_notificationType20, NULL));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_carraceScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_carraceScript, 0, NULL);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case e_garage:
|
case e_garage:
|
||||||
VideoManager()->SetUnk0x554(TRUE);
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_garageScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_garageScript, 0, NULL);
|
||||||
break;
|
break;
|
||||||
|
case e_garadoor:
|
||||||
// TODO: implement other cases
|
LoadIsle();
|
||||||
|
VariableTable()->SetVariable("VISIBILITY", "Hide Gas");
|
||||||
|
CurrentVehicle()->ResetWorldTransform(FALSE);
|
||||||
|
NavController()->SetLocation(0x3b);
|
||||||
|
VideoManager()->Get3DManager()->SetFrustrum(90, 0.1f, 250.0f);
|
||||||
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1160, NULL);
|
||||||
|
break;
|
||||||
|
case e_unk28: {
|
||||||
|
Act1State* state = (Act1State*) GameState()->GetState("Act1State");
|
||||||
|
LoadIsle();
|
||||||
|
if (state->GetUnknown18() == 7) {
|
||||||
|
VideoManager()->Get3DManager()->SetFrustrum(90, 0.1f, 250.0f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SetCameraControllerFromIsle();
|
||||||
|
CurrentVehicle()->ResetWorldTransform(TRUE);
|
||||||
|
AnimationManager()->FUN_1005f0b0();
|
||||||
|
}
|
||||||
|
CurrentVehicle()->VTable0xe8(p_area, TRUE, 7);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case e_hospital:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_hospitalScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_unk33:
|
||||||
|
LoadIsle();
|
||||||
|
SetCameraControllerFromIsle();
|
||||||
|
CurrentVehicle()->ResetWorldTransform(TRUE);
|
||||||
|
AnimationManager()->FUN_1005f0b0();
|
||||||
|
CurrentVehicle()->VTable0xe8(p_area, TRUE, 7);
|
||||||
|
break;
|
||||||
|
case e_police:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_policeScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_polidoor:
|
||||||
|
LoadIsle();
|
||||||
|
InvokeAction(Extra::ActionType::e_start, *g_isleScript, 1150, NULL);
|
||||||
|
break;
|
||||||
|
case e_copter:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_copterScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_dunecar:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_dunecarScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_jetski:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_jetskiScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_racecar:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_racecarScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_act2main: {
|
||||||
|
LegoWorld* act2main = FindWorld(*g_act2mainScript, 0);
|
||||||
|
if (act2main == NULL) {
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_act2mainScript, 0, NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
act2main->Enable(TRUE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case e_act3script: {
|
||||||
|
LegoWorld* act3 = FindWorld(*g_act3Script, 0);
|
||||||
|
if (act3 == NULL) {
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_act3Script, 0, NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
act3->Enable(TRUE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case e_jukeboxw:
|
||||||
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
|
InvokeAction(Extra::ActionType::e_opendisk, *g_jukeboxwScript, 0, NULL);
|
||||||
|
break;
|
||||||
|
case e_unk54:
|
||||||
|
LoadIsle();
|
||||||
|
break;
|
||||||
case e_histbook:
|
case e_histbook:
|
||||||
VideoManager()->SetUnk0x554(TRUE);
|
VideoManager()->SetUnk0x554(TRUE);
|
||||||
InvokeAction(Extra::ActionType::e_opendisk, *g_histbookScript, 0, NULL);
|
InvokeAction(Extra::ActionType::e_opendisk, *g_histbookScript, 0, NULL);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "legoutil.h"
|
#include "legoutil.h"
|
||||||
|
|
||||||
|
#include "legoinputmanager.h"
|
||||||
#include "legoomni.h"
|
#include "legoomni.h"
|
||||||
#include "legoworld.h"
|
#include "legoworld.h"
|
||||||
#include "legoworldlist.h"
|
#include "legoworldlist.h"
|
||||||
|
@ -161,6 +162,12 @@ void NotifyEntity(const char* p_filename, MxS32 p_entityId, LegoEntity* p_sender
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1003eab0
|
||||||
|
void SetCameraControllerFromIsle()
|
||||||
|
{
|
||||||
|
InputManager()->SetCamera(FindWorld(*g_isleScript, 0)->GetCamera());
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003eae0
|
// FUNCTION: LEGO1 0x1003eae0
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -230,6 +230,11 @@ float LegoNavController::CalculateNewVel(float p_targetVel, float p_currentVel,
|
||||||
return newVel;
|
return newVel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// STUB: LEGO1 0x10055620
|
||||||
|
void LegoNavController::SetLocation(MxU32 p_location)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10055a60
|
// STUB: LEGO1 0x10055a60
|
||||||
MxLong LegoNavController::Notify(MxParam& p_param)
|
MxLong LegoNavController::Notify(MxParam& p_param)
|
||||||
{
|
{
|
||||||
|
|
|
@ -101,7 +101,7 @@ MxLong ElevatorBottom::HandleClick(LegoControlManagerEvent& p_param)
|
||||||
}
|
}
|
||||||
|
|
||||||
state->SetUnknown1c(1);
|
state->SetUnknown1c(1);
|
||||||
m_unk0xf8 = LegoGameState::e_unk6;
|
m_unk0xf8 = LegoGameState::e_elevride;
|
||||||
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
||||||
VariableTable()->SetVariable(g_varCAMERALOCATION, "LCAMZI1,90");
|
VariableTable()->SetVariable(g_varCAMERALOCATION, "LCAMZI1,90");
|
||||||
result = 1;
|
result = 1;
|
||||||
|
|
|
@ -756,37 +756,37 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk16;
|
m_transitionDestination = LegoGameState::e_jetraceExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk19;
|
m_transitionDestination = LegoGameState::e_carraceExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk22;
|
m_transitionDestination = LegoGameState::e_pizzeriaExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk25;
|
m_transitionDestination = LegoGameState::e_garageExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk29;
|
m_transitionDestination = LegoGameState::e_hospitalExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
if (m_selectedCharacter) {
|
if (m_selectedCharacter) {
|
||||||
m_transitionDestination = LegoGameState::e_unk32;
|
m_transitionDestination = LegoGameState::e_policeExterior;
|
||||||
m_infocenterState->SetUnknown0x74(5);
|
m_infocenterState->SetUnknown0x74(5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -108,7 +108,7 @@ MxLong Police::HandleClick(LegoControlManagerEvent& p_param)
|
||||||
}
|
}
|
||||||
|
|
||||||
BackgroundAudioManager()->Stop();
|
BackgroundAudioManager()->Stop();
|
||||||
m_transitionDestination = LegoGameState::Area::e_unk35;
|
m_transitionDestination = LegoGameState::Area::e_polidoor;
|
||||||
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
||||||
break;
|
break;
|
||||||
case c_infoCtl:
|
case c_infoCtl:
|
||||||
|
|
|
@ -94,3 +94,11 @@ double Lego3DManager::Render(double p_und)
|
||||||
|
|
||||||
return m_pLego3DView->Render(p_und);
|
return m_pLego3DView->Render(p_und);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100ab4d0
|
||||||
|
int Lego3DManager::SetFrustrum(float p_fov, float p_front, float p_back)
|
||||||
|
{
|
||||||
|
m_pLego3DView->GetView()->SetFrustrum(p_front, p_back, p_fov);
|
||||||
|
m_pLego3DView->GetViewManager()->SetFrustrum(p_fov, p_front, p_back);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -51,6 +51,8 @@ class Lego3DManager {
|
||||||
|
|
||||||
double Render(double p_und);
|
double Render(double p_und);
|
||||||
|
|
||||||
|
int SetFrustrum(float p_fov, float p_front, float p_back);
|
||||||
|
|
||||||
Tgl::Renderer* GetRenderer();
|
Tgl::Renderer* GetRenderer();
|
||||||
Tgl::Group* GetScene();
|
Tgl::Group* GetScene();
|
||||||
Lego3DView* GetLego3DView();
|
Lego3DView* GetLego3DView();
|
||||||
|
|
Loading…
Reference in a new issue