2023-06-29 04:10:08 -04:00
|
|
|
#include "towtrack.h"
|
|
|
|
|
2024-08-03 13:59:12 -04:00
|
|
|
#include "isle.h"
|
2024-07-05 22:44:01 -04:00
|
|
|
#include "isle_actions.h"
|
2024-08-03 14:17:17 -04:00
|
|
|
#include "jukebox_actions.h"
|
2024-08-03 14:31:49 -04:00
|
|
|
#include "legoanimationmanager.h"
|
2024-06-08 19:17:33 -04:00
|
|
|
#include "legocontrolmanager.h"
|
2024-05-24 14:07:36 -04:00
|
|
|
#include "legogamestate.h"
|
2024-07-05 22:44:01 -04:00
|
|
|
#include "legonavcontroller.h"
|
2024-08-03 13:59:12 -04:00
|
|
|
#include "legoutils.h"
|
2024-05-24 14:44:09 -04:00
|
|
|
#include "legovariables.h"
|
|
|
|
#include "legoworld.h"
|
2024-05-24 14:07:36 -04:00
|
|
|
#include "misc.h"
|
2024-08-03 14:17:17 -04:00
|
|
|
#include "mxbackgroundaudiomanager.h"
|
2024-05-24 14:44:09 -04:00
|
|
|
#include "mxmisc.h"
|
2024-08-03 14:17:17 -04:00
|
|
|
#include "mxsoundpresenter.h"
|
2024-05-24 14:44:09 -04:00
|
|
|
#include "mxtimer.h"
|
2024-08-03 13:59:12 -04:00
|
|
|
#include "mxtransitionmanager.h"
|
2024-05-24 14:44:09 -04:00
|
|
|
#include "mxvariabletable.h"
|
2024-05-24 14:07:36 -04:00
|
|
|
|
2024-03-22 21:30:58 -04:00
|
|
|
DECOMP_SIZE_ASSERT(TowTrack, 0x180)
|
2024-06-03 12:53:25 -04:00
|
|
|
DECOMP_SIZE_ASSERT(TowTrackMissionState, 0x28)
|
2023-09-10 08:01:39 -04:00
|
|
|
|
2024-08-03 14:31:49 -04:00
|
|
|
// Flags used in isle.cpp
|
|
|
|
extern MxU32 g_isleFlags;
|
|
|
|
|
2023-12-06 07:10:45 -05:00
|
|
|
// FUNCTION: LEGO1 0x1004c720
|
2023-06-29 04:10:08 -04:00
|
|
|
TowTrack::TowTrack()
|
|
|
|
{
|
2024-05-24 14:07:36 -04:00
|
|
|
m_unk0x168 = 0;
|
2024-08-03 13:59:12 -04:00
|
|
|
m_actorId = -1;
|
2024-05-24 14:07:36 -04:00
|
|
|
m_state = NULL;
|
|
|
|
m_unk0x16c = 0;
|
2024-08-03 14:17:17 -04:00
|
|
|
m_lastAction = IsleScript::c_noneIsle;
|
2024-05-24 14:07:36 -04:00
|
|
|
m_unk0x16e = 0;
|
|
|
|
m_unk0x174 = -1;
|
2024-06-06 11:45:37 -04:00
|
|
|
m_maxLinearVel = 40.0;
|
2024-07-05 22:44:01 -04:00
|
|
|
m_fuel = 1.0;
|
2023-06-29 04:10:08 -04:00
|
|
|
}
|
2024-01-20 18:04:46 -05:00
|
|
|
|
2024-06-08 19:17:33 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004c970
|
|
|
|
TowTrack::~TowTrack()
|
|
|
|
{
|
|
|
|
ControlManager()->Unregister(this);
|
|
|
|
}
|
|
|
|
|
2024-05-24 14:44:09 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004c9e0
|
|
|
|
// FUNCTION: BETA10 0x100f6bf1
|
2024-01-20 18:04:46 -05:00
|
|
|
MxResult TowTrack::Create(MxDSAction& p_dsAction)
|
|
|
|
{
|
2024-05-24 14:44:09 -04:00
|
|
|
MxResult result = IslePathActor::Create(p_dsAction);
|
|
|
|
|
|
|
|
if (result == SUCCESS) {
|
|
|
|
m_world = CurrentWorld();
|
|
|
|
|
|
|
|
if (m_world) {
|
|
|
|
m_world->Add(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
m_state = (TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
|
|
|
|
if (!m_state) {
|
|
|
|
m_state = new TowTrackMissionState();
|
|
|
|
m_state->m_unk0x08 = 0;
|
|
|
|
GameState()->RegisterState(m_state);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
VariableTable()->SetVariable(g_varTOWFUEL, "1.0");
|
2024-07-05 22:44:01 -04:00
|
|
|
m_fuel = 1.0;
|
2024-05-24 14:44:09 -04:00
|
|
|
m_time = Timer()->GetTime();
|
|
|
|
return result;
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
|
|
|
|
2024-07-05 22:44:01 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004cb10
|
|
|
|
void TowTrack::VTable0x70(float p_time)
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
2024-07-05 22:44:01 -04:00
|
|
|
IslePathActor::VTable0x70(p_time);
|
|
|
|
|
|
|
|
if (UserActor() == this) {
|
|
|
|
char buf[200];
|
|
|
|
float speed = abs(m_worldSpeed);
|
|
|
|
float maxLinearVel = NavController()->GetMaxLinearVel();
|
|
|
|
|
|
|
|
sprintf(buf, "%g", speed / maxLinearVel);
|
|
|
|
VariableTable()->SetVariable(g_varTOWSPEED, buf);
|
|
|
|
|
|
|
|
m_fuel += (p_time - m_time) * -3.333333333e-06f;
|
|
|
|
if (m_fuel < 0) {
|
|
|
|
m_fuel = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_time = p_time;
|
|
|
|
|
|
|
|
sprintf(buf, "%g", m_fuel);
|
|
|
|
VariableTable()->SetVariable(g_varTOWFUEL, buf);
|
|
|
|
|
|
|
|
if (p_time - m_state->m_unk0x0c > 100000.0f && m_state->m_unk0x08 == 1 && !m_state->m_unk0x10) {
|
2024-08-03 14:17:17 -04:00
|
|
|
PlayAction(IsleScript::c_Avo909In_PlayWav);
|
2024-07-05 22:44:01 -04:00
|
|
|
m_state->m_unk0x10 = TRUE;
|
|
|
|
}
|
|
|
|
}
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
|
|
|
|
2024-05-24 14:07:36 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004cc40
|
|
|
|
void TowTrack::CreateState()
|
|
|
|
{
|
|
|
|
m_state = (TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
|
|
|
|
if (m_state == NULL) {
|
|
|
|
m_state = (TowTrackMissionState*) GameState()->CreateState("TowTrackMissionState");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-08-03 13:59:12 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004cc80
|
2024-01-20 18:04:46 -05:00
|
|
|
MxLong TowTrack::Notify(MxParam& p_param)
|
|
|
|
{
|
2024-08-03 13:59:12 -04:00
|
|
|
MxLong result = 0;
|
|
|
|
|
|
|
|
switch (((MxNotificationParam&) p_param).GetNotification()) {
|
|
|
|
case c_notificationType0:
|
|
|
|
result = HandleNotification0();
|
|
|
|
break;
|
|
|
|
case c_notificationEndAction:
|
|
|
|
result = HandleEndAction((MxEndActionNotificationParam&) p_param);
|
|
|
|
break;
|
|
|
|
case c_notificationClick:
|
|
|
|
result = HandleClick();
|
|
|
|
break;
|
|
|
|
case c_notificationControl:
|
|
|
|
result = HandleControl((LegoControlManagerNotificationParam&) p_param);
|
|
|
|
break;
|
|
|
|
case c_notificationEndAnim:
|
|
|
|
result = HandleEndAnim((LegoEndAnimNotificationParam&) p_param);
|
|
|
|
break;
|
|
|
|
case c_notificationPathStruct:
|
|
|
|
result = HandlePathStruct((LegoPathStructNotificationParam&) p_param);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
|
|
|
|
2024-08-03 13:59:12 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004cd30
|
2024-06-06 12:19:43 -04:00
|
|
|
MxLong TowTrack::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
|
2024-08-03 13:59:12 -04:00
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// STUB: LEGO1 0x1004cd40
|
|
|
|
MxLong TowTrack::HandleEndAction(MxEndActionNotificationParam& p_param)
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
|
|
|
// TODO
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
// STUB: LEGO1 0x1004d330
|
2024-06-16 10:47:53 -04:00
|
|
|
MxLong TowTrack::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
|
|
|
// TODO
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2024-08-03 13:59:12 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004d690
|
2024-06-06 12:19:43 -04:00
|
|
|
MxLong TowTrack::HandleClick()
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
2024-08-03 13:59:12 -04:00
|
|
|
if (((Act1State*) GameState()->GetState("Act1State"))->m_unk0x018 != 8) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_state->m_unk0x08 == 3) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
FUN_10015820(TRUE, 0);
|
|
|
|
((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::e_towtrack);
|
|
|
|
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
|
|
|
|
|
|
|
if (UserActor()->GetActorId() != GameState()->GetActorId()) {
|
|
|
|
((IslePathActor*) UserActor())->Exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_time = Timer()->GetTime();
|
|
|
|
m_actorId = UserActor()->GetActorId();
|
|
|
|
|
|
|
|
Enter();
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_TowTrackDashboard, NULL);
|
|
|
|
ControlManager()->Register(this);
|
|
|
|
|
|
|
|
if (m_state->m_unk0x08 == 0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_state->m_unk0x08 == 2) {
|
|
|
|
SpawnPlayer(LegoGameState::e_unk52, TRUE, 0);
|
|
|
|
FindROI("rcred")->SetVisibility(FALSE);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
SpawnPlayer(LegoGameState::e_unk28, TRUE, 0);
|
2024-08-03 14:17:17 -04:00
|
|
|
m_lastAction = IsleScript::c_noneIsle;
|
2024-08-03 13:59:12 -04:00
|
|
|
m_unk0x174 = -1;
|
|
|
|
m_state->m_unk0x0c = Timer()->GetTime();
|
|
|
|
m_state->m_unk0x10 = FALSE;
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns057rd_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns048p1_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns049p1_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns051bd_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns053pr_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns045di_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_pns123pr_RunAnim, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
|
|
|
|
2024-08-03 14:07:08 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004d8f0
|
2024-06-06 11:45:37 -04:00
|
|
|
void TowTrack::Exit()
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
2024-08-03 14:07:08 -04:00
|
|
|
GameState()->m_currentArea = LegoGameState::e_garageExterior;
|
|
|
|
StopActions();
|
|
|
|
FUN_1004dbe0();
|
|
|
|
Leave();
|
|
|
|
}
|
|
|
|
|
|
|
|
// FUNCTION: LEGO1 0x1004d920
|
|
|
|
void TowTrack::Leave()
|
|
|
|
{
|
|
|
|
IslePathActor::Exit();
|
|
|
|
CurrentWorld()->RemoveActor(this);
|
|
|
|
m_roi->SetVisibility(FALSE);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowTrackDashboard_Bitmap);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowTrackArms_Ctl);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowHorn_Ctl);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowHorn_Sound);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowInfo_Ctl);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowSpeedMeter);
|
|
|
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowFuelMeter);
|
|
|
|
ControlManager()->Unregister(this);
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
|
|
|
|
2024-08-03 14:17:17 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004d9e0
|
2024-06-16 10:47:53 -04:00
|
|
|
MxLong TowTrack::HandleControl(LegoControlManagerNotificationParam& p_param)
|
2024-01-20 18:04:46 -05:00
|
|
|
{
|
2024-08-03 14:17:17 -04:00
|
|
|
MxLong result = 0;
|
|
|
|
|
|
|
|
if (p_param.GetUnknown0x28() == 1) {
|
|
|
|
switch (p_param.GetClickedObjectId()) {
|
|
|
|
case IsleScript::c_TowTrackArms_Ctl:
|
|
|
|
Exit();
|
|
|
|
GameState()->m_currentArea = LegoGameState::e_unk66;
|
|
|
|
result = 1;
|
|
|
|
break;
|
|
|
|
case IsleScript::c_TowInfo_Ctl:
|
|
|
|
((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::e_infomain);
|
|
|
|
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
|
|
|
Exit();
|
|
|
|
GameState()->m_currentArea = LegoGameState::e_unk66;
|
|
|
|
result = 1;
|
|
|
|
break;
|
|
|
|
case IsleScript::c_TowHorn_Ctl:
|
|
|
|
MxSoundPresenter* presenter = (MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "TowHorn_Sound");
|
|
|
|
presenter->Enable(p_param.GetUnknown0x28());
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2024-01-20 18:04:46 -05:00
|
|
|
}
|
2024-03-16 14:20:44 -04:00
|
|
|
|
2024-08-03 14:17:17 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004dab0
|
2024-03-16 14:20:44 -04:00
|
|
|
void TowTrack::FUN_1004dab0()
|
|
|
|
{
|
2024-08-03 14:17:17 -04:00
|
|
|
m_state->m_unk0x08 = 1;
|
|
|
|
HandleClick();
|
2024-03-16 14:20:44 -04:00
|
|
|
}
|
2024-03-17 13:01:47 -04:00
|
|
|
|
2024-08-03 14:17:17 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004dad0
|
|
|
|
void TowTrack::ActivateSceneActions()
|
2024-03-17 13:01:47 -04:00
|
|
|
{
|
2024-08-03 14:17:17 -04:00
|
|
|
PlayMusic(JukeboxScript::c_JBMusic2);
|
|
|
|
|
|
|
|
if (m_state->m_unk0x08 != 0) {
|
|
|
|
if (m_state->m_unk0x08 == 2) {
|
|
|
|
PlayAction(IsleScript::c_wrt082na_PlayWav);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
PlayAction(IsleScript::c_wgs032nu_PlayWav);
|
|
|
|
}
|
|
|
|
}
|
2024-03-17 13:01:47 -04:00
|
|
|
}
|
2024-05-24 20:41:57 -04:00
|
|
|
|
2024-08-03 14:07:08 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004db10
|
|
|
|
void TowTrack::StopActions()
|
2024-05-24 20:41:57 -04:00
|
|
|
{
|
2024-08-03 14:07:08 -04:00
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns050p1_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns046mg_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns057rd_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns048p1_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns049p1_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns051bd_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns053pr_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns045di_RunAnim, NULL);
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_pns123pr_RunAnim, NULL);
|
2024-05-24 20:41:57 -04:00
|
|
|
}
|
|
|
|
|
2024-08-03 14:31:49 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004dbe0
|
2024-05-24 20:41:57 -04:00
|
|
|
void TowTrack::FUN_1004dbe0()
|
|
|
|
{
|
2024-08-03 14:31:49 -04:00
|
|
|
if (m_lastAction != -1) {
|
|
|
|
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
((Act1State*) GameState()->GetState("Act1State"))->m_unk0x018 = 0;
|
|
|
|
m_state->m_unk0x08 = 0;
|
|
|
|
g_isleFlags |= Isle::c_playMusic;
|
|
|
|
AnimationManager()->EnableCamAnims(TRUE);
|
|
|
|
AnimationManager()->FUN_1005f6d0(TRUE);
|
|
|
|
m_state->m_unk0x0c = INT_MIN;
|
|
|
|
m_state->m_unk0x10 = FALSE;
|
|
|
|
m_state = NULL;
|
|
|
|
m_unk0x16c = 0;
|
|
|
|
m_unk0x16e = 0;
|
2024-05-24 20:41:57 -04:00
|
|
|
}
|
2024-06-03 12:53:25 -04:00
|
|
|
|
2024-08-03 14:17:17 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004dcf0
|
|
|
|
void TowTrack::PlayAction(IsleScript::Script p_objectId)
|
2024-07-05 22:44:01 -04:00
|
|
|
{
|
2024-08-03 14:17:17 -04:00
|
|
|
if (p_objectId != -1) {
|
|
|
|
InvokeAction(Extra::e_start, *g_isleScript, p_objectId, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
m_lastAction = p_objectId;
|
|
|
|
BackgroundAudioManager()->LowerVolume();
|
2024-07-05 22:44:01 -04:00
|
|
|
}
|
|
|
|
|
2024-06-03 12:53:25 -04:00
|
|
|
// FUNCTION: LEGO1 0x1004dd30
|
|
|
|
TowTrackMissionState::TowTrackMissionState()
|
|
|
|
{
|
|
|
|
m_unk0x12 = 0;
|
|
|
|
m_unk0x14 = 0;
|
|
|
|
m_unk0x16 = 0;
|
|
|
|
m_unk0x08 = 0;
|
|
|
|
m_unk0x18 = 0;
|
|
|
|
m_unk0x0c = 0;
|
|
|
|
m_unk0x1a = 0;
|
2024-07-05 22:44:01 -04:00
|
|
|
m_unk0x10 = FALSE;
|
2024-06-03 12:53:25 -04:00
|
|
|
m_score1 = 0;
|
|
|
|
m_score2 = 0;
|
|
|
|
m_score3 = 0;
|
|
|
|
m_score4 = 0;
|
|
|
|
m_score5 = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
// FUNCTION: LEGO1 0x1004dde0
|
2024-06-14 17:24:34 -04:00
|
|
|
MxResult TowTrackMissionState::Serialize(LegoFile* p_file)
|
|
|
|
{
|
|
|
|
LegoState::Serialize(p_file);
|
|
|
|
|
|
|
|
if (p_file->IsReadMode()) {
|
|
|
|
Read(p_file, &m_unk0x12);
|
|
|
|
Read(p_file, &m_unk0x14);
|
|
|
|
Read(p_file, &m_unk0x16);
|
|
|
|
Read(p_file, &m_unk0x18);
|
|
|
|
Read(p_file, &m_unk0x1a);
|
|
|
|
Read(p_file, &m_score1);
|
|
|
|
Read(p_file, &m_score2);
|
|
|
|
Read(p_file, &m_score3);
|
|
|
|
Read(p_file, &m_score4);
|
|
|
|
Read(p_file, &m_score5);
|
2024-06-03 12:53:25 -04:00
|
|
|
}
|
2024-06-14 17:24:34 -04:00
|
|
|
else if (p_file->IsWriteMode()) {
|
|
|
|
Write(p_file, m_unk0x12);
|
|
|
|
Write(p_file, m_unk0x14);
|
|
|
|
Write(p_file, m_unk0x16);
|
|
|
|
Write(p_file, m_unk0x18);
|
|
|
|
Write(p_file, m_unk0x1a);
|
|
|
|
Write(p_file, m_score1);
|
|
|
|
Write(p_file, m_score2);
|
|
|
|
Write(p_file, m_score3);
|
|
|
|
Write(p_file, m_score4);
|
|
|
|
Write(p_file, m_score5);
|
2024-06-03 12:53:25 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return SUCCESS;
|
|
|
|
}
|