summaryrefslogtreecommitdiffstats
path: root/src/save
diff options
context:
space:
mode:
authorNikolay Korolev <nickvnuk@gmail.com>2020-05-26 23:25:12 +0200
committerNikolay Korolev <nickvnuk@gmail.com>2020-05-26 23:25:12 +0200
commitec1d14971c9bb1d751c0256093483d621dd719b8 (patch)
treeee3196f8abd70e1b01df0cb38b0ebe1888f98cd0 /src/save
parentupdated librw (diff)
downloadre3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar.gz
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar.bz2
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar.lz
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar.xz
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.tar.zst
re3-ec1d14971c9bb1d751c0256093483d621dd719b8.zip
Diffstat (limited to 'src/save')
-rw-r--r--src/save/GenericGameStorage.cpp45
-rw-r--r--src/save/GenericGameStorage.h8
-rw-r--r--src/save/PCSave.cpp5
3 files changed, 56 insertions, 2 deletions
diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp
index 8aae4011..eff0f2ff 100644
--- a/src/save/GenericGameStorage.cpp
+++ b/src/save/GenericGameStorage.cpp
@@ -42,6 +42,11 @@
const uint32 SIZE_OF_ONE_GAME_IN_BYTES = 201729;
+#ifdef MISSION_REPLAY
+int8 IsQuickSave;
+const int PAUSE_SAVE_SLOT = SLOT_COUNT;
+#endif
+
char DefaultPCSaveFileName[260];
char ValidSaveName[260];
char LoadFileName[256];
@@ -134,7 +139,12 @@ GenericSave(int file)
WriteDataToBufferPointer(buf, saveName);
GetLocalTime(&saveTime);
WriteDataToBufferPointer(buf, saveTime);
+#ifdef MISSION_REPLAY
+ int32 data = IsQuickSave << 24 | SIZE_OF_ONE_GAME_IN_BYTES;
+ WriteDataToBufferPointer(buf, data);
+#else
WriteDataToBufferPointer(buf, SIZE_OF_ONE_GAME_IN_BYTES);
+#endif
WriteDataToBufferPointer(buf, CGame::currLevel);
WriteDataToBufferPointer(buf, TheCamera.GetPosition().x);
WriteDataToBufferPointer(buf, TheCamera.GetPosition().y);
@@ -240,6 +250,9 @@ GenericLoad()
uint8 *buf;
int32 file;
uint32 size;
+#ifdef MISSION_REPLAY
+ int8 qs;
+#endif
int32 saveSize;
CPad *currPad;
@@ -254,6 +267,9 @@ GenericLoad()
ReadDataFromFile(file, work_buff, size);
buf = (work_buff + 0x40);
ReadDataFromBufferPointer(buf, saveSize);
+#ifdef MISSION_REPLAY // a hack to keep compatibility but get new data from save
+ qs = saveSize >> 24;
+#endif
ReadDataFromBufferPointer(buf, CGame::currLevel);
ReadDataFromBufferPointer(buf, TheCamera.GetMatrix().GetPosition().x);
ReadDataFromBufferPointer(buf, TheCamera.GetMatrix().GetPosition().y);
@@ -296,6 +312,11 @@ GenericLoad()
ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator);
#endif
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
+#ifdef MISSION_REPLAY
+ WaitForSave = 0;
+ if (FrontEndMenuManager.m_nCurrSaveSlot == PAUSE_SAVE_SLOT && qs == 3)
+ WaitForMissionActivate = CTimer::GetTimeInMilliseconds() + 2000;
+#endif
ReadDataFromBlock("Loading Scripts \n", CTheScripts::LoadAllScripts);
// Load the rest
@@ -563,3 +584,27 @@ align4bytes(int32 size)
{
return (size + 3) & 0xFFFFFFFC;
}
+
+#ifdef MISSION_REPLAY
+
+void DisplaySaveResult(int unk, char* name)
+{}
+
+bool SaveGameForPause(int type)
+{
+ if (AllowMissionReplay != 0 || type != 3 && WaitForSave > CTimer::GetTimeInMilliseconds())
+ return false;
+ WaitForSave = 0;
+ if (gGameState != GS_PLAYING_GAME || CTheScripts::IsPlayerOnAMission() || CStats::LastMissionPassedName[0] == '\0') {
+ DisplaySaveResult(3, CStats::LastMissionPassedName);
+ return false;
+ }
+ IsQuickSave = type;
+ MissionStartTime = 0;
+ int res = PcSaveHelper.SaveSlot(PAUSE_SAVE_SLOT);
+ PcSaveHelper.PopulateSlotInfo();
+ IsQuickSave = 0;
+ DisplaySaveResult(res, CStats::LastMissionPassedName);
+ return true;
+}
+#endif
diff --git a/src/save/GenericGameStorage.h b/src/save/GenericGameStorage.h
index b913c305..ee8a52a1 100644
--- a/src/save/GenericGameStorage.h
+++ b/src/save/GenericGameStorage.h
@@ -40,4 +40,10 @@ extern uint32 TimeToStayFadedBeforeFadeOut;
extern char SaveFileNameJustSaved[260]; // 8F2570
-const char TopLineEmptyFile[] = "THIS FILE IS NOT VALID YET"; \ No newline at end of file
+const char TopLineEmptyFile[] = "THIS FILE IS NOT VALID YET";
+
+#ifdef MISSION_REPLAY
+extern int8 IsQuickSave; // originally int
+
+bool SaveGameForPause(int);
+#endif
diff --git a/src/save/PCSave.cpp b/src/save/PCSave.cpp
index 3dc80f73..3103c7ab 100644
--- a/src/save/PCSave.cpp
+++ b/src/save/PCSave.cpp
@@ -41,7 +41,10 @@ C_PcSave::SaveSlot(int32 slot)
_psGetUserFilesFolder();
int file = CFileMgr::OpenFile(ValidSaveName, "wb");
if (file != 0) {
- DoGameSpecificStuffBeforeSave();
+#ifdef MISSION_REPLAY
+ if (!IsQuickSave)
+#endif
+ DoGameSpecificStuffBeforeSave();
if (GenericSave(file)) {
if (!!CFileMgr::CloseFile(file))
nErrorCode = SAVESTATUS_ERR_SAVE_CLOSE;