mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2024-11-27 11:34:14 +01:00
mission replay
This commit is contained in:
parent
30061396e8
commit
70080f1fdb
@ -102,6 +102,15 @@ CGameLogic::Update()
|
|||||||
CVector vecRestartPos;
|
CVector vecRestartPos;
|
||||||
float fRestartFloat;
|
float fRestartFloat;
|
||||||
|
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
// what a place to check!
|
||||||
|
if (gbTryingPorn4Again) {
|
||||||
|
CRunningScript* pScript = CTheScripts::pActiveScripts;
|
||||||
|
if (pScript && !CGeneral::faststricmp(pScript->m_abScriptName, "porno4"))
|
||||||
|
gbTryingPorn4Again = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (CCutsceneMgr::IsCutsceneProcessing()) return;
|
if (CCutsceneMgr::IsCutsceneProcessing()) return;
|
||||||
|
|
||||||
UpdateShortCut();
|
UpdateShortCut();
|
||||||
|
@ -116,7 +116,97 @@ static const char* nonMissionScripts[] = {
|
|||||||
"rc4",
|
"rc4",
|
||||||
"hj",
|
"hj",
|
||||||
"usj",
|
"usj",
|
||||||
"mayhem"
|
"mayhem",
|
||||||
|
"range",
|
||||||
|
"race",
|
||||||
|
"pizza",
|
||||||
|
"rcheli",
|
||||||
|
"rcplne1",
|
||||||
|
"rcrace1",
|
||||||
|
"cokerun",
|
||||||
|
"buypro1",
|
||||||
|
"carbuy1",
|
||||||
|
"buypro2",
|
||||||
|
"icecut",
|
||||||
|
"icecre1",
|
||||||
|
"buypro3",
|
||||||
|
"buypro4",
|
||||||
|
"buypro5",
|
||||||
|
"buypro6",
|
||||||
|
"buypro7",
|
||||||
|
"buypro8",
|
||||||
|
"buypro9",
|
||||||
|
"buypro10",
|
||||||
|
"buypro11",
|
||||||
|
"ovalrng",
|
||||||
|
"mm",
|
||||||
|
"kickst",
|
||||||
|
"heli1sc",
|
||||||
|
"heli2sc",
|
||||||
|
"heli3sc",
|
||||||
|
"heli4sc",
|
||||||
|
"carpark_1",
|
||||||
|
"bmx_1",
|
||||||
|
"bmx_2"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char* MissionScripts[] = {
|
||||||
|
"LAWYER1",
|
||||||
|
"LAWYER2",
|
||||||
|
"LAWYER3",
|
||||||
|
"LAWYER4",
|
||||||
|
"GENERL1",
|
||||||
|
"COL2",
|
||||||
|
"GENERL3",
|
||||||
|
"COL_4",
|
||||||
|
"COL_5",
|
||||||
|
"baron1",
|
||||||
|
"baron2",
|
||||||
|
"baron3",
|
||||||
|
"baron4",
|
||||||
|
"kent1",
|
||||||
|
"baron5",
|
||||||
|
"serg1",
|
||||||
|
"serg2",
|
||||||
|
"serg3",
|
||||||
|
"bankjo1",
|
||||||
|
"bankjo2",
|
||||||
|
"bankjo3",
|
||||||
|
"bankjo4",
|
||||||
|
"phil1",
|
||||||
|
"phil2",
|
||||||
|
"porno1",
|
||||||
|
"porno2",
|
||||||
|
"porno3",
|
||||||
|
"porno4",
|
||||||
|
"protec1",
|
||||||
|
"protec2",
|
||||||
|
"protec3",
|
||||||
|
"count1",
|
||||||
|
"count2",
|
||||||
|
"CAP_1",
|
||||||
|
"FIN_1",
|
||||||
|
"bike1",
|
||||||
|
"bike2",
|
||||||
|
"bike3",
|
||||||
|
"rockb1",
|
||||||
|
"rockb2",
|
||||||
|
"rockb3",
|
||||||
|
"cuban1",
|
||||||
|
"cuban2",
|
||||||
|
"cuban3",
|
||||||
|
"cuban4",
|
||||||
|
"hait1",
|
||||||
|
"hait2",
|
||||||
|
"hait3",
|
||||||
|
"assin1",
|
||||||
|
"assin2",
|
||||||
|
"assin3",
|
||||||
|
"assin4",
|
||||||
|
"assin5",
|
||||||
|
"taxwar1",
|
||||||
|
"taxwar2",
|
||||||
|
"taxwar3"
|
||||||
};
|
};
|
||||||
|
|
||||||
int AllowMissionReplay;
|
int AllowMissionReplay;
|
||||||
@ -132,6 +222,11 @@ bool gbTryingPorn4Again;
|
|||||||
int IsInAmmunation;
|
int IsInAmmunation;
|
||||||
int MissionSkipLevel;
|
int MissionSkipLevel;
|
||||||
|
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
bool UsingMobileScript;
|
||||||
|
bool AlreadySavedGame;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
@ -2313,6 +2408,10 @@ void CTheScripts::Init()
|
|||||||
PrintToLog(init_msg);
|
PrintToLog(init_msg);
|
||||||
CFileMgr::SetDir("");
|
CFileMgr::SetDir("");
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
UsingMobileScript = false;
|
||||||
|
AlreadySavedGame = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTheScripts::RemoveScriptTextureDictionary()
|
void CTheScripts::RemoveScriptTextureDictionary()
|
||||||
@ -2383,6 +2482,7 @@ void CTheScripts::Process()
|
|||||||
|
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
static uint32 TimeToWaitTill;
|
static uint32 TimeToWaitTill;
|
||||||
|
static bool AlreadyResetHealth;
|
||||||
switch (AllowMissionReplay) {
|
switch (AllowMissionReplay) {
|
||||||
case 2:
|
case 2:
|
||||||
AllowMissionReplay = 3;
|
AllowMissionReplay = 3;
|
||||||
@ -2398,9 +2498,19 @@ void CTheScripts::Process()
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
AllowMissionReplay = 7;
|
AllowMissionReplay = 7;
|
||||||
|
AlreadyResetHealth = false;
|
||||||
TimeToWaitTill = CTimer::GetTimeInMilliseconds() + 500;
|
TimeToWaitTill = CTimer::GetTimeInMilliseconds() + 500;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
|
if (!AlreadyResetHealth) {
|
||||||
|
AlreadyResetHealth = true;
|
||||||
|
CPlayerPed* pPlayerPed = FindPlayerPed();
|
||||||
|
if (pPlayerPed) {
|
||||||
|
CPlayerInfo* pPlayerInfo = pPlayerPed->GetPlayerInfoForThisPlayerPed();
|
||||||
|
if (pPlayerInfo)
|
||||||
|
pPlayerPed->m_fHealth = pPlayerInfo->m_nMaxHealth;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (TimeToWaitTill < CTimer::GetTimeInMilliseconds()) {
|
if (TimeToWaitTill < CTimer::GetTimeInMilliseconds()) {
|
||||||
AllowMissionReplay = 0;
|
AllowMissionReplay = 0;
|
||||||
return;
|
return;
|
||||||
@ -2560,6 +2670,10 @@ int8 CRunningScript::ProcessOneCommand()
|
|||||||
retval = ProcessCommands1300To1399(command);
|
retval = ProcessCommands1300To1399(command);
|
||||||
else if (command < 1500)
|
else if (command < 1500)
|
||||||
retval = ProcessCommands1400To1499(command);
|
retval = ProcessCommands1400To1499(command);
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
if (!AlreadySavedGame) // we need to ignore first "fake" command which actually just saves the game
|
||||||
|
#endif
|
||||||
|
{
|
||||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
if (command < ARRAY_SIZE(commands)) {
|
if (command < ARRAY_SIZE(commands)) {
|
||||||
if (commands[command].cond || commands[command].output[0] != ARGTYPE_NONE) {
|
if (commands[command].cond || commands[command].output[0] != ARGTYPE_NONE) {
|
||||||
@ -2598,6 +2712,7 @@ int8 CRunningScript::ProcessOneCommand()
|
|||||||
CDebug::DebugAddText(tmp);
|
CDebug::DebugAddText(tmp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4049,14 +4164,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
|||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(car);
|
script_assert(car);
|
||||||
#if defined MISSION_REPLAY && defined SIMPLIER_MISSIONS
|
|
||||||
car->AutoPilot.m_nCruiseSpeed = *(float*)&ScriptParams[1];
|
|
||||||
if (missionRetryScriptIndex == 40 && car->GetModelIndex() == MI_CHEETAH) // Turismo
|
|
||||||
car->AutoPilot.m_nCruiseSpeed = 8 * car->AutoPilot.m_nCruiseSpeed / 10;
|
|
||||||
car->AutoPilot.m_nCruiseSpeed = Min(car->AutoPilot.m_nCruiseSpeed, 60.0f * car->pHandling->Transmission.fMaxCruiseVelocity);
|
|
||||||
#else
|
|
||||||
car->AutoPilot.m_nCruiseSpeed = Min(*(float*)&ScriptParams[1], 60.0f * car->pHandling->Transmission.fMaxCruiseVelocity);
|
car->AutoPilot.m_nCruiseSpeed = Min(*(float*)&ScriptParams[1], 60.0f * car->pHandling->Transmission.fMaxCruiseVelocity);
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_SET_CAR_DRIVING_STYLE:
|
case COMMAND_SET_CAR_DRIVING_STYLE:
|
||||||
@ -4125,8 +4233,12 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
|||||||
{
|
{
|
||||||
wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp);
|
wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp);
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
if (strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "M_FAIL") == 0 && CanAllowMissionReplay())
|
if (strcmp((char*)&CTheScripts::ScriptSpace[m_nIp - KEY_LENGTH_IN_SCRIPT], "M_FAIL") == 0) {
|
||||||
|
if (AllowMissionReplay == 7)
|
||||||
|
AllowMissionReplay = 0;
|
||||||
|
if (CanAllowMissionReplay())
|
||||||
AllowMissionReplay = 1;
|
AllowMissionReplay = 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CMessages::AddBigMessage(key, ScriptParams[0], ScriptParams[1] - 1);
|
CMessages::AddBigMessage(key, ScriptParams[0], ScriptParams[1] - 1);
|
||||||
@ -4774,21 +4886,15 @@ bool CRunningScript::CanAllowMissionReplay()
|
|||||||
{
|
{
|
||||||
if (AllowMissionReplay)
|
if (AllowMissionReplay)
|
||||||
return false;
|
return false;
|
||||||
if (CStats::LastMissionPassedName[0] == '\0')
|
for (int i = 0; i < ARRAY_SIZE(MissionScripts); i++) {
|
||||||
return false;
|
if (!CGeneral::faststricmp(m_abScriptName, MissionScripts[i]))
|
||||||
for (int i = 0; i < ARRAY_SIZE(nonMissionScripts); i++) {
|
|
||||||
if (strcmp(m_abScriptName, nonMissionScripts[i]) == 0)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 AddExtraDeathDelay()
|
uint32 AddExtraDeathDelay()
|
||||||
{
|
{
|
||||||
if (missionRetryScriptIndex == 63)
|
|
||||||
return 7000;
|
|
||||||
if (missionRetryScriptIndex == 64)
|
|
||||||
return 4000;
|
|
||||||
return 1000;
|
return 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4796,7 +4902,7 @@ void RetryMission(int type, int unk)
|
|||||||
{
|
{
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
doingMissionRetry = true;
|
doingMissionRetry = true;
|
||||||
FrontEndMenuManager.m_nCurrScreen = 57; // MENUPAGE_MISSION_RETRY
|
FrontEndMenuManager.m_nCurrScreen = MENUPAGE_MISSION_RETRY;
|
||||||
FrontEndMenuManager.RequestFrontEndStartUp();
|
FrontEndMenuManager.RequestFrontEndStartUp();
|
||||||
}
|
}
|
||||||
else if (type == 2) {
|
else if (type == 2) {
|
||||||
@ -4834,8 +4940,11 @@ CTheScripts::SwitchToMission(int32 mission)
|
|||||||
|
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
missionRetryScriptIndex = mission;
|
missionRetryScriptIndex = mission;
|
||||||
if (missionRetryScriptIndex == 19)
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
CStats::LastMissionPassedName[0] = '\0';
|
if (CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)) {
|
||||||
|
SaveGameForPause(4);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
CTimer::Suspend();
|
CTimer::Suspend();
|
||||||
int offset = CTheScripts::MultiScriptArray[mission];
|
int offset = CTheScripts::MultiScriptArray[mission];
|
||||||
|
@ -575,13 +575,18 @@ public:
|
|||||||
static void SetObjectiveForAllPedsInCollective(int, eObjective);
|
static void SetObjectiveForAllPedsInCollective(int, eObjective);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
static bool MissionSupportsMissionReplay(int index)
|
||||||
|
{
|
||||||
|
return index >= 3 && index <= 35 || index >= 51 && index <= 65 || index >= 67 && index <= 74 || index >= 83 && index <= 87;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_DEBUG_SCRIPT_LOADER
|
#ifdef USE_DEBUG_SCRIPT_LOADER
|
||||||
extern int scriptToLoad;
|
extern int scriptToLoad;
|
||||||
#endif
|
#endif
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
static_assert(false, "Mission replay is not supported");
|
|
||||||
extern int AllowMissionReplay;
|
extern int AllowMissionReplay;
|
||||||
extern uint32 WaitForMissionActivate;
|
extern uint32 WaitForMissionActivate;
|
||||||
extern uint32 WaitForSave;
|
extern uint32 WaitForSave;
|
||||||
@ -592,6 +597,11 @@ extern bool gbTryingPorn4Again;
|
|||||||
extern int IsInAmmunation;
|
extern int IsInAmmunation;
|
||||||
extern int MissionSkipLevel;
|
extern int MissionSkipLevel;
|
||||||
|
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
extern bool UsingMobileScript;
|
||||||
|
extern bool AlreadySavedGame;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint32 AddExtraDeathDelay();
|
uint32 AddExtraDeathDelay();
|
||||||
void RetryMission(int, int);
|
void RetryMission(int, int);
|
||||||
#endif
|
#endif
|
||||||
|
@ -149,6 +149,11 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
|||||||
}
|
}
|
||||||
case COMMAND_ADD_EXPLOSION:
|
case COMMAND_ADD_EXPLOSION:
|
||||||
CollectParameters(&m_nIp, 4);
|
CollectParameters(&m_nIp, 4);
|
||||||
|
#ifdef SIMPLER_MISSIONS
|
||||||
|
if (!CGeneral::faststricmp(m_abScriptName, "hait2"))
|
||||||
|
CExplosion::AddExplosion(nil, nil, (eExplosionType)ScriptParams[3], *(CVector*)&ScriptParams[0], 0, true, 11.25f);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
CExplosion::AddExplosion(nil, nil, (eExplosionType)ScriptParams[3], *(CVector*)&ScriptParams[0], 0, true);
|
CExplosion::AddExplosion(nil, nil, (eExplosionType)ScriptParams[3], *(CVector*)&ScriptParams[0], 0, true);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1379,8 +1379,10 @@ void CRunningScript::DoDeatharrestCheck()
|
|||||||
if (!pPlayer->IsRestartingAfterDeath() && !pPlayer->IsRestartingAfterArrest())
|
if (!pPlayer->IsRestartingAfterDeath() && !pPlayer->IsRestartingAfterArrest())
|
||||||
return;
|
return;
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
if (AllowMissionReplay != 0)
|
if (AllowMissionReplay != 7 && AllowMissionReplay != 0)
|
||||||
return;
|
return;
|
||||||
|
if (AllowMissionReplay == 7)
|
||||||
|
AllowMissionReplay = 0;
|
||||||
if (CanAllowMissionReplay())
|
if (CanAllowMissionReplay())
|
||||||
AllowMissionReplay = 1;
|
AllowMissionReplay = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -125,10 +125,6 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
|
|||||||
case COMMAND_MAKE_PLAYER_SAFE_FOR_CUTSCENE:
|
case COMMAND_MAKE_PLAYER_SAFE_FOR_CUTSCENE:
|
||||||
{
|
{
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
#ifdef MISSION_REPLAY
|
|
||||||
AllowMissionReplay = 0;
|
|
||||||
SaveGameForPause(3);
|
|
||||||
#endif
|
|
||||||
CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]];
|
CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]];
|
||||||
CPad::GetPad(ScriptParams[0])->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE);
|
CPad::GetPad(ScriptParams[0])->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE);
|
||||||
pPlayerInfo->MakePlayerSafe(true);
|
pPlayerInfo->MakePlayerSafe(true);
|
||||||
@ -372,14 +368,28 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
|
|||||||
return 0;
|
return 0;
|
||||||
case COMMAND_LOAD_AND_LAUNCH_MISSION_INTERNAL:
|
case COMMAND_LOAD_AND_LAUNCH_MISSION_INTERNAL:
|
||||||
{
|
{
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
uint32 oldIp = m_nIp;
|
||||||
|
#endif
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
|
|
||||||
if (CTheScripts::NumberOfExclusiveMissionScripts > 0 && ScriptParams[0] <= UINT16_MAX - 2)
|
if (CTheScripts::NumberOfExclusiveMissionScripts > 0 && ScriptParams[0] <= UINT16_MAX - 2)
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
missionRetryScriptIndex = ScriptParams[0];
|
missionRetryScriptIndex = ScriptParams[0];
|
||||||
if (missionRetryScriptIndex == 19)
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
CStats::LastMissionPassedName[0] = '\0';
|
if (!UsingMobileScript && CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)){
|
||||||
|
if (!AlreadySavedGame) {
|
||||||
|
m_nIp = oldIp - 2;
|
||||||
|
SaveGameForPause(4);
|
||||||
|
AlreadySavedGame = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AlreadySavedGame = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
CTimer::Suspend();
|
CTimer::Suspend();
|
||||||
int offset = CTheScripts::MultiScriptArray[ScriptParams[0]];
|
int offset = CTheScripts::MultiScriptArray[ScriptParams[0]];
|
||||||
@ -1075,6 +1085,9 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
|
|||||||
}
|
}
|
||||||
case COMMAND_FAIL_CURRENT_MISSION:
|
case COMMAND_FAIL_CURRENT_MISSION:
|
||||||
CTheScripts::FailCurrentMission = 2;
|
CTheScripts::FailCurrentMission = 2;
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
MissionSkipLevel = 0;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_GET_CLOSEST_OBJECT_OF_TYPE:
|
case COMMAND_GET_CLOSEST_OBJECT_OF_TYPE:
|
||||||
{
|
{
|
||||||
|
@ -576,6 +576,9 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||||||
return 0;
|
return 0;
|
||||||
case COMMAND_DO_SAVE_GAME:
|
case COMMAND_DO_SAVE_GAME:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
|
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
UsingMobileScript = true;
|
||||||
|
#endif
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
SaveGameForPause(ScriptParams[0]);
|
SaveGameForPause(ScriptParams[0]);
|
||||||
#endif
|
#endif
|
||||||
|
@ -571,7 +571,11 @@ CMenuManager::Initialise(void)
|
|||||||
m_fMapCenterX = MENU_X_LEFT_ALIGNED(320.0f);
|
m_fMapCenterX = MENU_X_LEFT_ALIGNED(320.0f);
|
||||||
m_fMapCenterY = MENU_Y(225.0f);
|
m_fMapCenterY = MENU_Y(225.0f);
|
||||||
CPad::StopPadsShaking();
|
CPad::StopPadsShaking();
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
if (!m_OnlySaveMenu && m_nCurrScreen != MENUPAGE_MISSION_RETRY)
|
||||||
|
#else
|
||||||
if (!m_OnlySaveMenu)
|
if (!m_OnlySaveMenu)
|
||||||
|
#endif
|
||||||
m_nCurrScreen = MENUPAGE_NONE;
|
m_nCurrScreen = MENUPAGE_NONE;
|
||||||
DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND);
|
DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND);
|
||||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_STARTING, 0);
|
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_STARTING, 0);
|
||||||
@ -4711,6 +4715,18 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
|||||||
OutputDebugString("STARTED PLAYING FRONTEND AUDIO TRACK");
|
OutputDebugString("STARTED PLAYING FRONTEND AUDIO TRACK");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
case MENUACTION_REJECT_RETRY:
|
||||||
|
doingMissionRetry = false;
|
||||||
|
AllowMissionReplay = 0;
|
||||||
|
RequestFrontEndShutDown();
|
||||||
|
break;
|
||||||
|
case MENUACTION_UNK114:
|
||||||
|
doingMissionRetry = false;
|
||||||
|
RequestFrontEndShutDown();
|
||||||
|
RetryMission(2, 0);
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
case MENUACTION_SAVEGAME:
|
case MENUACTION_SAVEGAME:
|
||||||
{
|
{
|
||||||
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
||||||
@ -5355,6 +5371,19 @@ CMenuManager::ProcessFileActions()
|
|||||||
{
|
{
|
||||||
switch (m_nCurrScreen) {
|
switch (m_nCurrScreen) {
|
||||||
case MENUPAGE_LOADING_IN_PROGRESS:
|
case MENUPAGE_LOADING_IN_PROGRESS:
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
if (MissionSkipLevel) {
|
||||||
|
if (gGameState != GS_PLAYING_GAME)
|
||||||
|
DoSettingsBeforeStartingAGame();
|
||||||
|
RequestFrontEndShutDown();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (doingMissionRetry) {
|
||||||
|
RetryMission(2, 0);
|
||||||
|
m_nCurrSaveSlot = SLOT_COUNT;
|
||||||
|
doingMissionRetry = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (CheckSlotDataValid(m_nCurrSaveSlot)) {
|
if (CheckSlotDataValid(m_nCurrSaveSlot)) {
|
||||||
#ifdef USE_DEBUG_SCRIPT_LOADER
|
#ifdef USE_DEBUG_SCRIPT_LOADER
|
||||||
scriptToLoad = 0;
|
scriptToLoad = 0;
|
||||||
|
@ -218,8 +218,11 @@ enum eMenuScreen
|
|||||||
#ifdef DETECT_JOYSTICK_MENU
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
MENUPAGE_DETECT_JOYSTICK,
|
MENUPAGE_DETECT_JOYSTICK,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
MENUPAGE_MISSION_RETRY,
|
||||||
|
#endif
|
||||||
|
|
||||||
MENUPAGE_OUTRO, // Originally 34, but CFO needs last screen to be empty to count number of menu pages
|
MENUPAGE_OUTRO, // Originally 34, but CFO needs last screen to be empty to count number of menu pages
|
||||||
MENUPAGES
|
MENUPAGES
|
||||||
};
|
};
|
||||||
@ -288,6 +291,10 @@ enum eMenuAction
|
|||||||
MENUACTION_CTRLVIBRATION,
|
MENUACTION_CTRLVIBRATION,
|
||||||
MENUACTION_CTRLCONFIG,
|
MENUACTION_CTRLCONFIG,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
MENUACTION_REJECT_RETRY,
|
||||||
|
MENUACTION_UNK114
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eCheckHover
|
enum eCheckHover
|
||||||
|
@ -329,6 +329,16 @@ CMenuScreen aScreens[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
// MENUPAGE_MISSION_RETRY = 57 on mobile
|
||||||
|
|
||||||
|
{ "M_FAIL", MENUPAGE_DISABLED, 0,
|
||||||
|
MENUACTION_LABEL, "FESZ_RM", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||||
|
MENUACTION_CHANGEMENU, "FEM_YES", SAVESLOT_NONE, MENUPAGE_LOADING_IN_PROGRESS, 320, 200, MENUALIGN_CENTER,
|
||||||
|
MENUACTION_REJECT_RETRY, "FEM_NO", SAVESLOT_NONE, MENUPAGE_NONE, 320, 225, MENUALIGN_CENTER,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
// MENUPAGE_OUTRO - Originally 34
|
// MENUPAGE_OUTRO - Originally 34
|
||||||
{ "", 0, 0, },
|
{ "", 0, 0, },
|
||||||
};
|
};
|
||||||
|
@ -756,6 +756,17 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
// MENUPAGE_MISSION_RETRY = 57 on mobile
|
||||||
|
|
||||||
|
{ "M_FAIL", MENUPAGE_DISABLED, nil, nil,
|
||||||
|
MENUACTION_LABEL, "FESZ_RM", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 0, 0, 0,
|
||||||
|
MENUACTION_CHANGEMENU, "FEM_YES", { nil, SAVESLOT_NONE, MENUPAGE_LOADING_IN_PROGRESS }, 320, 200, MENUALIGN_CENTER,
|
||||||
|
MENUACTION_REJECT_RETRY, "FEM_NO", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 320, 225, MENUALIGN_CENTER,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
// MENUPAGE_OUTRO = 34
|
// MENUPAGE_OUTRO = 34
|
||||||
{ "", 0, nil, nil, },
|
{ "", 0, nil, nil, },
|
||||||
};
|
};
|
||||||
|
@ -269,7 +269,7 @@ INITSAVEBUF
|
|||||||
if (pVehicle->IsBoat() && (pVehicle->VehicleCreatedBy == MISSION_VEHICLE || bForceSaving))
|
if (pVehicle->IsBoat() && (pVehicle->VehicleCreatedBy == MISSION_VEHICLE || bForceSaving))
|
||||||
++nNumBoats;
|
++nNumBoats;
|
||||||
if (pVehicle->IsBike() && (pVehicle->VehicleCreatedBy == MISSION_VEHICLE || bForceSaving))
|
if (pVehicle->IsBike() && (pVehicle->VehicleCreatedBy == MISSION_VEHICLE || bForceSaving))
|
||||||
++nNumBoats;
|
++nNumBikes;
|
||||||
#else
|
#else
|
||||||
if (!pVehicle->pDriver && !bHasPassenger) {
|
if (!pVehicle->pDriver && !bHasPassenger) {
|
||||||
if (pVehicle->IsCar() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
if (pVehicle->IsCar() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
||||||
@ -277,7 +277,7 @@ INITSAVEBUF
|
|||||||
if (pVehicle->IsBoat() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
if (pVehicle->IsBoat() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
||||||
++nNumBoats;
|
++nNumBoats;
|
||||||
if (pVehicle->IsBike() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
if (pVehicle->IsBike() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE)
|
||||||
++nNumBoats;
|
++nNumBikes;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,6 +182,9 @@ enum Config {
|
|||||||
# define PC_MENU
|
# define PC_MENU
|
||||||
# define PC_WATER
|
# define PC_WATER
|
||||||
#elif defined GTA_XBOX
|
#elif defined GTA_XBOX
|
||||||
|
#elif defined GTA_MOBILE
|
||||||
|
# define MISSION_REPLAY
|
||||||
|
# define SIMPLER_MISSIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// This is enabled for all released games.
|
// This is enabled for all released games.
|
||||||
@ -372,14 +375,15 @@ enum Config {
|
|||||||
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
||||||
#define SUPPORT_JAPANESE_SCRIPT
|
#define SUPPORT_JAPANESE_SCRIPT
|
||||||
//#define SUPPORT_XBOX_SCRIPT
|
//#define SUPPORT_XBOX_SCRIPT
|
||||||
//#define SUPPORT_MOBILE_SCRIPT
|
#define SUPPORT_MOBILE_SCRIPT
|
||||||
#if (defined SUPPORT_XBOX_SCRIPT && defined SUPPORT_MOBILE_SCRIPT)
|
#if (defined SUPPORT_XBOX_SCRIPT && defined SUPPORT_MOBILE_SCRIPT)
|
||||||
static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually exclusive");
|
static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually exclusive");
|
||||||
#endif
|
#endif
|
||||||
#ifdef PC_MENU
|
#ifdef PC_MENU
|
||||||
//#define MISSION_REPLAY // mobile feature
|
#define MISSION_REPLAY // mobile feature
|
||||||
|
//#define SIMPLER_MISSIONS // apply simplifications from mobile
|
||||||
|
#define USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
#endif
|
#endif
|
||||||
//#define SIMPLIER_MISSIONS // apply simplifications from mobile
|
|
||||||
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
||||||
|
|
||||||
@ -396,6 +400,10 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||||||
#undef USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
#undef USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MISSION_REPLAY
|
||||||
|
#undef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
|
||||||
|
#endif
|
||||||
|
|
||||||
// Replay
|
// Replay
|
||||||
//#define DONT_FIX_REPLAY_BUGS // keeps various bugs in CReplay, some of which are fairly cool!
|
//#define DONT_FIX_REPLAY_BUGS // keeps various bugs in CReplay, some of which are fairly cool!
|
||||||
//#define USE_BETA_REPLAY_MODE // adds another replay mode, a few seconds slomo (caution: buggy!)
|
//#define USE_BETA_REPLAY_MODE // adds another replay mode, a few seconds slomo (caution: buggy!)
|
||||||
|
@ -1176,13 +1176,20 @@ void DisplaySaveResult(int unk, char* name)
|
|||||||
|
|
||||||
bool SaveGameForPause(int type)
|
bool SaveGameForPause(int type)
|
||||||
{
|
{
|
||||||
if (AllowMissionReplay != 0 || type != 3 && WaitForSave > CTimer::GetTimeInMilliseconds())
|
if (AllowMissionReplay != 0 && AllowMissionReplay != 7) {
|
||||||
|
debug("SaveGameForPause failed during AllowMissionReplay %d", AllowMissionReplay);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
if (type != 3 && WaitForSave > CTimer::GetTimeInMilliseconds()) {
|
||||||
|
debug("SaveGameForPause failed WaitForSave");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
WaitForSave = 0;
|
WaitForSave = 0;
|
||||||
if (gGameState != GS_PLAYING_GAME || CTheScripts::IsPlayerOnAMission() || CStats::LastMissionPassedName[0] == '\0') {
|
if (gGameState != GS_PLAYING_GAME || (CTheScripts::bAlreadyRunningAMissionScript && type != 5)) {
|
||||||
DisplaySaveResult(3, CStats::LastMissionPassedName);
|
DisplaySaveResult(3, CStats::LastMissionPassedName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
debug("SaveGameForPause ******************************** %s doSave %d", CStats::LastMissionPassedName, !CTheScripts::bAlreadyRunningAMissionScript);
|
||||||
IsQuickSave = type;
|
IsQuickSave = type;
|
||||||
MissionStartTime = 0;
|
MissionStartTime = 0;
|
||||||
int res = PcSaveHelper.SaveSlot(PAUSE_SAVE_SLOT);
|
int res = PcSaveHelper.SaveSlot(PAUSE_SAVE_SLOT);
|
||||||
|
@ -102,7 +102,11 @@ CExplosion::GetExplosionPosition(uint8 id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
#ifdef SIMPLER_MISSIONS
|
||||||
|
CExplosion::AddExplosion(CEntity* explodingEntity, CEntity* culprit, eExplosionType type, const CVector& pos, uint32 lifetime, bool makeSound, float radius)
|
||||||
|
#else
|
||||||
CExplosion::AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32 lifetime, bool makeSound)
|
CExplosion::AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32 lifetime, bool makeSound)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
CVector pPosn;
|
CVector pPosn;
|
||||||
CVector posGround;
|
CVector posGround;
|
||||||
@ -150,7 +154,11 @@ CExplosion::AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionT
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case EXPLOSION_GRENADE:
|
case EXPLOSION_GRENADE:
|
||||||
|
#ifdef SIMPLER_MISSIONS
|
||||||
|
explosion.m_fRadius = (radius == -1.0f ? 9.0f : radius);
|
||||||
|
#else
|
||||||
explosion.m_fRadius = 9.0f;
|
explosion.m_fRadius = 9.0f;
|
||||||
|
#endif
|
||||||
explosion.m_fPower = 300.0f;
|
explosion.m_fPower = 300.0f;
|
||||||
explosion.m_fStopTime = lifetime + CTimer::GetTimeInMilliseconds() + 750;
|
explosion.m_fStopTime = lifetime + CTimer::GetTimeInMilliseconds() + 750;
|
||||||
explosion.m_fPropagationRate = 0.5f;
|
explosion.m_fPropagationRate = 0.5f;
|
||||||
|
@ -37,7 +37,11 @@ class CExplosion
|
|||||||
float m_fPower;
|
float m_fPower;
|
||||||
float m_fZshift;
|
float m_fZshift;
|
||||||
public:
|
public:
|
||||||
static bool AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32 lifetime, bool makeSound = true); //done(new parametr in android ver is fix for one mission)
|
#ifdef SIMPLER_MISSIONS
|
||||||
|
static bool AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32 lifetime, bool makeSound = true, float radius = -1.0f);
|
||||||
|
#else
|
||||||
|
static bool AddExplosion(CEntity* explodingEntity, CEntity* culprit, eExplosionType type, const CVector& pos, uint32 lifetime, bool makeSound = true);
|
||||||
|
#endif
|
||||||
static void ClearAllExplosions(); //done
|
static void ClearAllExplosions(); //done
|
||||||
static bool DoesExplosionMakeSound(uint8 id); //done
|
static bool DoesExplosionMakeSound(uint8 id); //done
|
||||||
static int8 GetExplosionActiveCounter(uint8 id); //done
|
static int8 GetExplosionActiveCounter(uint8 id); //done
|
||||||
|
Loading…
Reference in New Issue
Block a user