[Scummvm-git-logs] scummvm master -> af2d10d01d059e135d32fe16eee478b11d68a2c5
a-yyg
76591232+a-yyg at users.noreply.github.com
Mon Jul 5 23:48:55 UTC 2021
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
103bcf290e SAGA2: Use Common::String for SaveFileHeader
eee7be8da6 SAGA2: Fix debug messages
3af9df01b2 SAGA2: Fix Sensor/SensorList cleanup
46d0d6d775 SAGA2: Fix alloc-dealloc mismatch
51d1c44470 SAGA2: Fix Timer/TimerList cleanup
0f588942ab SAGA2: Fix Actor cleanup
b0927289ab SAGA2: Implement Globals saving and loading
af2d10d01d SAGA2: Fix warning in main.cpp
Commit: 103bcf290e4bb29b39d7a73667b9ab80020170cc
https://github.com/scummvm/scummvm/commit/103bcf290e4bb29b39d7a73667b9ab80020170cc
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Use Common::String for SaveFileHeader
Changed paths:
engines/saga2/detection.cpp
engines/saga2/loadsave.cpp
engines/saga2/saga2.h
engines/saga2/savefile.cpp
engines/saga2/savefile.h
engines/saga2/uidialog.cpp
diff --git a/engines/saga2/detection.cpp b/engines/saga2/detection.cpp
index 4797497100..5e5c55cfee 100644
--- a/engines/saga2/detection.cpp
+++ b/engines/saga2/detection.cpp
@@ -39,6 +39,7 @@ static const DebugChannelDef debugFlagList[] = {
{Saga2::kDebugPath, "path", "Debug the pathfinding"},
{Saga2::kDebugTasks, "tasks", "Debug the tasks"},
{Saga2::kDebugSound, "sound", "Debug the sound"},
+ {Saga2::kDebugSaveload, "saveload", "Debug the game saving/loading"},
DEBUG_CHANNEL_END
};
diff --git a/engines/saga2/loadsave.cpp b/engines/saga2/loadsave.cpp
index de3f220eef..c7b88d1269 100644
--- a/engines/saga2/loadsave.cpp
+++ b/engines/saga2/loadsave.cpp
@@ -129,27 +129,20 @@ void initGameState(void) {
//----------------------------------------------------------------------
// Save the current game state
-void writeSavegameHeader(Common::OutSaveFile *out, SaveFileHeader &header) {
- out->writeUint32LE(header.gameID);
- out->write(header.saveName, saveNameSize);
- out->write(header.reserved, sizeof(header.reserved));
-}
-
Common::Error saveGameState(int16 saveNo, char *saveName) {
pauseTimer();
- //SaveFileConstructor saveGame(saveNo, saveName);
- Common::OutSaveFile *out = g_vm->getSaveFileManager()->openForSaving(getSaveFileName(saveNo));
+ debugC(1, kDebugSaveload, "Saving game");
+
+ Common::OutSaveFile *out = g_vm->getSaveFileManager()->openForSaving(getSaveFileName(saveNo), false);
if (!out)
return Common::kCreatingFileFailed;
SaveFileHeader header;
- memset(&header, 0, sizeof(header));
header.gameID = gameID;
- Common::strlcpy(header.saveName, saveName, saveNameSize - 1);
+ header.saveName = saveName;
- warning("saveGameState: gameID: %s, saveName: %s", tag2str(header.gameID), header.saveName);
- writeSavegameHeader(out, header);
+ header.write(out);
#if 0
saveGlobals(saveGame);
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index f78f0ebc11..9bc3e35ce2 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -65,7 +65,8 @@ enum {
kDebugTimers = 1 << 8,
kDebugPath = 1 << 9,
kDebugTasks = 1 << 10,
- kDebugSound = 1 << 11
+ kDebugSound = 1 << 11,
+ kDebugSaveload = 1 << 12
};
#define TICKSPERSECOND (728L/10L)
diff --git a/engines/saga2/savefile.cpp b/engines/saga2/savefile.cpp
index 7fb8ffeae3..d8dc122ba5 100644
--- a/engines/saga2/savefile.cpp
+++ b/engines/saga2/savefile.cpp
@@ -31,6 +31,25 @@
namespace Saga2 {
+void SaveFileHeader::read(Common::InSaveFile *in) {
+ char fileName[SaveFileHeader::kSaveNameSize];
+ gameID = in->readUint32BE();;
+ in->read(fileName, SaveFileHeader::kSaveNameSize);
+ saveName = fileName;
+}
+
+void SaveFileHeader::write(Common::OutSaveFile *out) {
+ out->writeUint32BE(gameID);
+ out->write(saveName.c_str(), saveName.size());
+
+ int remainingBytes = SaveFileHeader::kHeaderSize - saveName.size() - 4;
+
+ for (int i = 0; i < remainingBytes; ++i)
+ out->writeByte(0);
+
+ debugC(1, kDebugSaveload, "Writing game header: gameID = %s, saveName = %s", tag2str(gameID), saveName);
+}
+
/* ===================================================================== *
Functions
* ===================================================================== */
@@ -55,6 +74,9 @@ Common::String getSaveFileName(int16 saveNo) {
// Constructor
SaveFileConstructor::SaveFileConstructor(int16 saveNo, char *saveName) {
+ warning("STUB: SaveFileConstructor::SaveFileConstructor");
+
+#if 0
char fileName[fileNameSize];
// Construct the file name string
@@ -77,6 +99,7 @@ SaveFileConstructor::SaveFileConstructor(int16 saveNo, char *saveName) {
error("Error writing save game header: \"%s\"", fileName);
chunkSize = posInChunk = 0;
+#endif
}
//----------------------------------------------------------------------
diff --git a/engines/saga2/savefile.h b/engines/saga2/savefile.h
index 8c5fafe70d..c671622e31 100644
--- a/engines/saga2/savefile.h
+++ b/engines/saga2/savefile.h
@@ -48,11 +48,17 @@ const ChunkID gameID = MKTAG('F', 'T', 'A', '2');
// file. It stores the game ID and the long name of the saved game state.
struct SaveFileHeader {
- ChunkID gameID; // ID of game (FTA2 of DINO).
- char saveName[saveNameSize]; // The long name of the saved
- // game state.
- int8 reserved[84]; // Room for expansion.
-}; // 128 bytes
+ enum {
+ kSaveNameSize = 40,
+ kHeaderSize = 128
+ };
+
+ ChunkID gameID; // ID of game (FTA2 of DINO).
+ Common::String saveName; // The long name of the saved
+
+ void read(Common::InSaveFile *in);
+ void write(Common::OutSaveFile *out);
+};
/* ===================================================================== *
SaveFileChunkInfo class
@@ -125,8 +131,8 @@ public:
~SaveFileReader(void);
// Return a pointer to the long name of the save game state
- char *saveName(void) {
- return header.saveName;
+ const char *saveName(void) {
+ return header.saveName.c_str();
}
// Return the number of bytes in the current chunk
diff --git a/engines/saga2/uidialog.cpp b/engines/saga2/uidialog.cpp
index 2f9fa9c406..0b15b1098e 100644
--- a/engines/saga2/uidialog.cpp
+++ b/engines/saga2/uidialog.cpp
@@ -589,7 +589,7 @@ char **initFileFields(void) {
strings[i] = new char[editLen + 1];
if (getSaveName(i, header)) {
- strncpy(strings[i], header.saveName, editLen);
+ strncpy(strings[i], header.saveName.c_str(), editLen);
} else {
strncpy(strings[i], FILE_DIALOG_NONAME, editLen);
strings[i][0] |= 0x80;
@@ -623,24 +623,16 @@ void destroyFileFields(char **strings) {
}
bool getSaveName(int8 saveNo, SaveFileHeader &header) {
- FILE *fileHandle; // A standard C file handle
- char fileName[fileNameSize + 1];
+ Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(getSaveFileName(saveNo));
- // Construct the file name based on the save number
- getSaveFileName(saveNo, fileName);
-
- // Open the file or throw an exception
- if ((fileHandle = fopen(fileName, "rb")) == nullptr) {
+ if (!in) {
+ warning("Unable to load save %s", getSaveFileName(saveNo));
return false;
}
- // Read the save file header
- if (fread(&header, sizeof(header), 1, fileHandle) != 1) {
- return false;
- }
+ header.read(in);
- // close the used file handle
- if (fileHandle != nullptr) fclose(fileHandle);
+ delete in;
return true;
}
Commit: eee7be8da66066f1480ae7adeb91e1b9fb3876ed
https://github.com/scummvm/scummvm/commit/eee7be8da66066f1480ae7adeb91e1b9fb3876ed
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Fix debug messages
Changed paths:
engines/saga2/savefile.cpp
engines/saga2/uidialog.cpp
diff --git a/engines/saga2/savefile.cpp b/engines/saga2/savefile.cpp
index d8dc122ba5..ce819625cf 100644
--- a/engines/saga2/savefile.cpp
+++ b/engines/saga2/savefile.cpp
@@ -47,7 +47,7 @@ void SaveFileHeader::write(Common::OutSaveFile *out) {
for (int i = 0; i < remainingBytes; ++i)
out->writeByte(0);
- debugC(1, kDebugSaveload, "Writing game header: gameID = %s, saveName = %s", tag2str(gameID), saveName);
+ debugC(1, kDebugSaveload, "Writing game header: gameID = %s, saveName = %s", tag2str(gameID), saveName.c_str());
}
/* ===================================================================== *
diff --git a/engines/saga2/uidialog.cpp b/engines/saga2/uidialog.cpp
index 0b15b1098e..8cf38937b1 100644
--- a/engines/saga2/uidialog.cpp
+++ b/engines/saga2/uidialog.cpp
@@ -626,7 +626,7 @@ bool getSaveName(int8 saveNo, SaveFileHeader &header) {
Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(getSaveFileName(saveNo));
if (!in) {
- warning("Unable to load save %s", getSaveFileName(saveNo));
+ debugC(1, kDebugSaveload, "Unable to load save %d (%s)", saveNo, getSaveFileName(saveNo).c_str());
return false;
}
Commit: 3af9df01b20af5c9b0f3d6cb242d8d65da8b4ac0
https://github.com/scummvm/scummvm/commit/3af9df01b20af5c9b0f3d6cb242d8d65da8b4ac0
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Fix Sensor/SensorList cleanup
Changed paths:
engines/saga2/sensor.cpp
diff --git a/engines/saga2/sensor.cpp b/engines/saga2/sensor.cpp
index 948798f8ea..8fa0ecbbf0 100644
--- a/engines/saga2/sensor.cpp
+++ b/engines/saga2/sensor.cpp
@@ -345,15 +345,19 @@ void loadSensors(SaveFileReader &saveGame) {
// Cleanup the active sensors
void cleanupSensors(void) {
- for (Common::List<SensorList *>::iterator it = g_vm->_sensorListList.begin(); it != g_vm->_sensorListList.end(); ++it)
+ Common::List<SensorList *>::iterator sensorListNextIt;
+ for (Common::List<SensorList *>::iterator it = g_vm->_sensorListList.begin(); it != g_vm->_sensorListList.end(); it = sensorListNextIt) {
+ sensorListNextIt = it;
+ sensorListNextIt++;
delete *it;
+ }
- g_vm->_sensorListList.clear();
-
- for (Common::List<Sensor *>::iterator it = g_vm->_sensorList.begin(); it != g_vm->_sensorList.end(); ++it)
+ Common::List<Sensor *>::iterator sensorNextIt;
+ for (Common::List<Sensor *>::iterator it = g_vm->_sensorList.begin(); it != g_vm->_sensorList.end(); it = sensorNextIt) {
+ sensorNextIt = it;
+ sensorNextIt++;
delete *it;
-
- g_vm->_sensorList.clear();
+ }
}
//----------------------------------------------------------------------
Commit: 46d0d6d775527fec5eb58982807714b04b4b8f64
https://github.com/scummvm/scummvm/commit/46d0d6d775527fec5eb58982807714b04b4b8f64
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Fix alloc-dealloc mismatch
Changed paths:
engines/saga2/tile.cpp
diff --git a/engines/saga2/tile.cpp b/engines/saga2/tile.cpp
index e3e14a4cf8..c75c4c1415 100644
--- a/engines/saga2/tile.cpp
+++ b/engines/saga2/tile.cpp
@@ -4345,7 +4345,7 @@ void loadTileCyclingStates(SaveFileReader &saveGame) {
void cleanupTileCyclingStates(void) {
if (cycleList != nullptr) {
- free(cycleList);
+ delete[] cycleList;
cycleList = nullptr;
}
}
Commit: 51d1c44470c1efd9ae15c9673462389290bf27e7
https://github.com/scummvm/scummvm/commit/51d1c44470c1efd9ae15c9673462389290bf27e7
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Fix Timer/TimerList cleanup
Changed paths:
engines/saga2/timers.cpp
diff --git a/engines/saga2/timers.cpp b/engines/saga2/timers.cpp
index ffd4dd36b9..6323661e3b 100644
--- a/engines/saga2/timers.cpp
+++ b/engines/saga2/timers.cpp
@@ -262,11 +262,19 @@ void loadTimers(SaveFileReader &saveGame) {
// Cleanup the active Timers
void cleanupTimers(void) {
- for (Common::List<TimerList *>::iterator it = g_vm->_timerLists.begin(); it != g_vm->_timerLists.end(); ++it)
+ Common::List<TimerList *>::iterator timerListNextIt;
+ for (Common::List<TimerList *>::iterator it = g_vm->_timerLists.begin(); it != g_vm->_timerLists.end(); it = timerListNextIt) {
+ timerListNextIt = it;
+ timerListNextIt++;
delete *it;
+ }
- for (Common::List<Timer *>::iterator it = g_vm->_timers.begin(); it != g_vm->_timers.end(); ++it)
+ Common::List<Timer *>::iterator timerNextIt;
+ for (Common::List<Timer *>::iterator it = g_vm->_timers.begin(); it != g_vm->_timers.end(); it = timerNextIt) {
+ timerNextIt = it;
+ timerNextIt++;
delete *it;
+ }
}
/* ===================================================================== *
Commit: 0f588942ab0653093be628d9021d0df181198c25
https://github.com/scummvm/scummvm/commit/0f588942ab0653093be628d9021d0df181198c25
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Fix Actor cleanup
Changed paths:
engines/saga2/actor.cpp
engines/saga2/task.cpp
engines/saga2/task.h
diff --git a/engines/saga2/actor.cpp b/engines/saga2/actor.cpp
index 74867adba2..177d553829 100644
--- a/engines/saga2/actor.cpp
+++ b/engines/saga2/actor.cpp
@@ -1272,7 +1272,8 @@ Actor::Actor(void **buf) : GameObject(buf) {
Actor::~Actor(void) {
if (appearance != NULL) ReleaseActorAppearance(appearance);
- delete _assignment;
+ if (getAssignment())
+ delete getAssignment();
}
//-----------------------------------------------------------------------
diff --git a/engines/saga2/task.cpp b/engines/saga2/task.cpp
index 6523ff97d4..532cc7b672 100644
--- a/engines/saga2/task.cpp
+++ b/engines/saga2/task.cpp
@@ -165,8 +165,14 @@ TaskStackList::TaskStackList(void) {
// TaskStackList destructor
TaskStackList::~TaskStackList(void) {
- for (int i = 0; i < numTaskStacks; i++)
+ for (int i = 0; i < numTaskStacks; i++) {
+ if (_list[i] == nullptr)
+ continue;
+
+ _list[i]->actor->curTask = nullptr;
delete _list[i];
+ _list[i] = nullptr;
+ }
}
//----------------------------------------------------------------------
diff --git a/engines/saga2/task.h b/engines/saga2/task.h
index b2172a3914..d4014bba10 100644
--- a/engines/saga2/task.h
+++ b/engines/saga2/task.h
@@ -1672,10 +1672,11 @@ class TaskStack {
TaskID stackBottomID; // Bottom task in stack
- Actor *actor; // Pointer to actor performing tasks
int16 evalCount, // Counter for automatic task re-evaluation
evalRate; // Rate of automatic task re-evalutation
public:
+ Actor *actor; // Pointer to actor performing tasks
+
// Constructor
TaskStack(Actor *a) :
stackBottomID(NoTask),
Commit: b0927289ab6984634de02ee2eaaab8aeaedcb418
https://github.com/scummvm/scummvm/commit/b0927289ab6984634de02ee2eaaab8aeaedcb418
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:09+09:00
Commit Message:
SAGA2: Implement Globals saving and loading
Changed paths:
engines/saga2/fta.h
engines/saga2/loadsave.cpp
engines/saga2/main.cpp
engines/saga2/savefile.cpp
engines/saga2/savefile.h
diff --git a/engines/saga2/fta.h b/engines/saga2/fta.h
index 9fc872cd4e..1412f18e0a 100644
--- a/engines/saga2/fta.h
+++ b/engines/saga2/fta.h
@@ -192,7 +192,9 @@ void cleanupPathFinder(void);
void initGlobals(void);
void saveGlobals(SaveFileConstructor &saveGame);
+void saveGlobals(Common::OutSaveFile *out);
void loadGlobals(SaveFileReader &saveGame);
+void loadGlobals(Common::InSaveFile *in);
inline void cleanupGlobals(void) {} // do nothing
/* ===================================================================== *
diff --git a/engines/saga2/loadsave.cpp b/engines/saga2/loadsave.cpp
index c7b88d1269..33d1441b53 100644
--- a/engines/saga2/loadsave.cpp
+++ b/engines/saga2/loadsave.cpp
@@ -144,8 +144,9 @@ Common::Error saveGameState(int16 saveNo, char *saveName) {
header.write(out);
+ saveGlobals(out);
+
#if 0
- saveGlobals(saveGame);
saveTimer(saveGame);
saveCalender(saveGame);
saveWorlds(saveGame);
@@ -227,45 +228,46 @@ void loadSavedGameState(int16 saveNo) {
pauseTimer();
- SaveFileReader saveGame(saveNo);
+ Common::InSaveFile *in = g_vm->getSaveFileManager()->openForLoading(getSaveFileName(saveNo));
+ //SaveFileReader saveGame(saveNo);
ChunkID id;
int32 chunkSize;
bool notEOF;
- notEOF = saveGame.firstChunk(id, chunkSize);
+ notEOF = firstChunk(in, id, chunkSize);
while (notEOF) {
switch (id) {
- case MakeID('G', 'L', 'O', 'B'):
- loadGlobals(saveGame);
+ case MKTAG('G', 'L', 'O', 'B'):
+ loadGlobals(in);
loadFlags |= loadGlobalsFlag;
break;
-
- case MakeID('T', 'I', 'M', 'E'):
+#if 0
+ case MKTAG('T', 'I', 'M', 'E'):
loadTimer(saveGame);
loadFlags |= loadTimerFlag;
break;
- case MakeID('C', 'A', 'L', 'E'):
+ case MKTAG('C', 'A', 'L', 'E'):
loadCalender(saveGame);
loadFlags |= loadCalenderFlag;
break;
- case MakeID('W', 'R', 'L', 'D'):
+ case MKTAG('W', 'R', 'L', 'D'):
loadWorlds(saveGame);
loadFlags |= loadWorldsFlag;
break;
- case MakeID('A', 'C', 'T', 'R'):
+ case MKTAG('A', 'C', 'T', 'R'):
loadActors(saveGame);
loadFlags |= loadActorsFlag;
break;
- case MakeID('O', 'B', 'J', 'S'):
+ case MKTAG('O', 'B', 'J', 'S'):
loadObjects(saveGame);
loadFlags |= loadObjectsFlag;
break;
- case MakeID('B', 'A', 'N', 'D'):
+ case MKTAG('B', 'A', 'N', 'D'):
if (loadFlags & loadActorsFlag) {
loadBands(saveGame);
loadFlags |= loadBandsFlag;
@@ -273,7 +275,7 @@ void loadSavedGameState(int16 saveNo) {
error("Bands loaded prematurely");
break;
- case MakeID('P', 'L', 'Y', 'R'):
+ case MKTAG('P', 'L', 'Y', 'R'):
if (loadFlags & loadBandsFlag) {
loadPlayerActors(saveGame);
loadFlags |= loadPlayerActorsFlag;
@@ -281,32 +283,32 @@ void loadSavedGameState(int16 saveNo) {
error("PlayerActors loaded prematurely");
break;
- case MakeID('C', 'N', 'T', 'R'):
+ case MKTAG('C', 'N', 'T', 'R'):
loadCenterActor(saveGame);
loadFlags |= loadCenterActorFlag;
break;
- case MakeID('T', 'A', 'G', 'S'):
+ case MKTAG('T', 'A', 'G', 'S'):
loadActiveItemStates(saveGame);
loadFlags |= loadActiveItemStatesFlag;
break;
- case MakeID('C', 'Y', 'C', 'L'):
+ case MKTAG('C', 'Y', 'C', 'L'):
loadTileCyclingStates(saveGame);
loadFlags |= loadTileCyclingStatesFlag;
break;
- case MakeID('S', 'D', 'T', 'A'):
+ case MKTAG('S', 'D', 'T', 'A'):
loadSAGADataSeg(saveGame);
loadFlags |= loadSAGADataSegFlag;
break;
- case MakeID('S', 'A', 'G', 'A'):
+ case MKTAG('S', 'A', 'G', 'A'):
loadSAGAThreads(saveGame);
loadFlags |= loadSAGAThreadsFlag;
break;
- case MakeID('M', 'O', 'T', 'N'):
+ case MKTAG('M', 'O', 'T', 'N'):
if (!(~loadFlags & (loadActorsFlag | loadObjectsFlag))) {
loadMotionTasks(saveGame);
loadFlags |= loadMotionTasksFlag;
@@ -314,7 +316,7 @@ void loadSavedGameState(int16 saveNo) {
error("MotionTasks loaded prematurely");
break;
- case MakeID('T', 'S', 'T', 'K'):
+ case MKTAG('T', 'S', 'T', 'K'):
if (loadFlags & loadActorsFlag) {
loadTaskStacks(saveGame);
loadFlags |= loadTaskStacksFlag;
@@ -322,7 +324,7 @@ void loadSavedGameState(int16 saveNo) {
error("TaskStacks loaded prematurely");
break;
- case MakeID('T', 'A', 'S', 'K'):
+ case MKTAG('T', 'A', 'S', 'K'):
if (loadFlags & loadTaskStacksFlag) {
loadTasks(saveGame);
loadFlags |= loadTasksFlag;
@@ -330,7 +332,7 @@ void loadSavedGameState(int16 saveNo) {
error("Tasks loaded prematurely");
break;
- case MakeID('T', 'A', 'C', 'T'):
+ case MKTAG('T', 'A', 'C', 'T'):
if (loadFlags & loadWorldsFlag) {
loadTileTasks(saveGame);
loadFlags |= loadTileTasksFlag;
@@ -338,7 +340,7 @@ void loadSavedGameState(int16 saveNo) {
error("TileActivityTasks loaded prematurely");
break;
- case MakeID('S', 'P', 'C', 'H'):
+ case MKTAG('S', 'P', 'C', 'H'):
if (!(~loadFlags & (loadActorsFlag | loadObjectsFlag))) {
loadSpeechTasks(saveGame);
loadFlags |= loadSpeechTasksFlag;
@@ -346,12 +348,12 @@ void loadSavedGameState(int16 saveNo) {
error("SpeechTasks loaded prematurely");
break;
- case MakeID('A', 'R', 'E', 'G'):
+ case MKTAG('A', 'R', 'E', 'G'):
loadActiveRegions(saveGame);
loadFlags |= loadActiveRegionsFlag;
break;
- case MakeID('T', 'I', 'M', 'R'):
+ case MKTAG('T', 'I', 'M', 'R'):
if (loadFlags & loadActorsFlag) {
loadTimers(saveGame);
loadFlags |= loadTimersFlag;
@@ -359,7 +361,7 @@ void loadSavedGameState(int16 saveNo) {
error("Timers loaded prematurely");
break;
- case MakeID('S', 'E', 'N', 'S'):
+ case MKTAG('S', 'E', 'N', 'S'):
if (loadFlags & loadActorsFlag) {
loadSensors(saveGame);
loadFlags |= loadSensorsFlag;
@@ -367,22 +369,22 @@ void loadSavedGameState(int16 saveNo) {
error("Sensors loaded prematurely");
break;
- case MakeID('A', 'C', 'N', 'T'):
+ case MKTAG('A', 'C', 'N', 'T'):
loadTempActorCount(saveGame);
loadFlags |= loadTempActorCountFlag;
break;
- case MakeID('M', 'I', 'S', 'S'):
+ case MKTAG('M', 'I', 'S', 'S'):
loadMissions(saveGame);
loadFlags |= loadMissionsFlag;
break;
- case MakeID('F', 'A', 'C', 'T'):
+ case MKTAG('F', 'A', 'C', 'T'):
loadFactionTallies(saveGame);
loadFlags |= loadFactionTalliesFlag;
break;
- case MakeID('T', 'M', 'S', 'T'):
+ case MKTAG('T', 'M', 'S', 'T'):
if (loadFlags & loadActorsFlag) {
loadTileModeState(saveGame);
loadFlags |= loadTileModeStateFlag;
@@ -390,12 +392,12 @@ void loadSavedGameState(int16 saveNo) {
error("TileMode state loaded prematurely");
break;
- case MakeID('S', 'P', 'E', 'L'):
+ case MKTAG('S', 'P', 'E', 'L'):
loadSpellState(saveGame);
loadFlags |= loadSpellStateFlag;
break;
- case MakeID('A', 'M', 'A', 'P'):
+ case MKTAG('A', 'M', 'A', 'P'):
if (loadFlags & loadWorldsFlag) {
loadAutoMap(saveGame);
loadFlags |= loadAutoMapFlag;
@@ -403,7 +405,7 @@ void loadSavedGameState(int16 saveNo) {
error("Auto map loaded prematurely");
break;
- case MakeID('U', 'I', 'S', 'T'):
+ case MKTAG('U', 'I', 'S', 'T'):
if (loadFlags & loadPlayerActorsFlag) {
loadUIState(saveGame);
loadFlags |= loadUIStateFlag;
@@ -411,23 +413,26 @@ void loadSavedGameState(int16 saveNo) {
error("UI state loaded prematurely");
break;
- case MakeID('P', 'A', 'L', 'E'):
+ case MKTAG('P', 'A', 'L', 'E'):
loadPaletteState(saveGame);
loadFlags |= loadPaletteStateFlag;
break;
- case MakeID('C', 'O', 'N', 'T'):
+ case MKTAG('C', 'O', 'N', 'T'):
if (loadFlags & loadObjectsFlag) {
loadContainerNodes(saveGame);
loadFlags |= loadContainerNodesFlag;
} else
error("ContainerNodes loaded prematurely");
break;
+#endif
}
- notEOF = saveGame.nextChunk(id, chunkSize);
+ notEOF = nextChunk(in, id, chunkSize);
}
+ delete in;
+
if (!(loadFlags & loadGlobalsFlag))
error("Globals not loaded");
@@ -467,6 +472,7 @@ void loadSavedGameState(int16 saveNo) {
if (!(loadFlags & loadActiveRegionsFlag))
error("Active Regions not loaded");
+
resumeTimer();
}
diff --git a/engines/saga2/main.cpp b/engines/saga2/main.cpp
index e51990ee76..a696c032e5 100644
--- a/engines/saga2/main.cpp
+++ b/engines/saga2/main.cpp
@@ -702,6 +702,22 @@ void saveGlobals(SaveFileConstructor &saveGame) {
sizeof(archive));
}
+void saveGlobals(Common::OutSaveFile *out) {
+ out->write("GLOB", 4);
+ out->writeUint32LE(sizeof(GlobalsArchive));
+
+ out->writeUint32LE(objectIndex);
+ out->writeUint32LE(actorIndex);
+ out->writeByte(brotherBandingEnabled);
+ out->writeByte(centerActorIndicatorEnabled);
+ out->writeByte(interruptableMotionsPaused);
+ out->writeByte(objectStatesPaused);
+ out->writeByte(actorStatesPaused);
+ out->writeByte(actorTasksPaused);
+ out->writeByte(combatBehaviorEnabled);
+ out->writeByte(backgroundSimulationPaused);
+}
+
//-----------------------------------------------------------------------
// Restore miscellaneouse globals from a save file
@@ -722,6 +738,20 @@ void loadGlobals(SaveFileReader &saveGame) {
backgroundSimulationPaused = archive.backgroundSimulationPaused;
}
+void loadGlobals(Common::InSaveFile *in) {
+ objectIndex = in->readUint32LE();
+ actorIndex = in->readUint32LE();
+ brotherBandingEnabled = in->readByte();
+ centerActorIndicatorEnabled = in->readByte();
+ interruptableMotionsPaused = in->readByte();
+ objectStatesPaused = in->readByte();
+ actorStatesPaused = in->readByte();
+ actorTasksPaused = in->readByte();
+ combatBehaviorEnabled = in->readByte();
+ backgroundSimulationPaused = in->readByte();
+ GlobalsArchive archive;
+}
+
/********************************************************************/
/* */
/* ERROR / MESSAGE HANDLING */
diff --git a/engines/saga2/savefile.cpp b/engines/saga2/savefile.cpp
index ce819625cf..3724694883 100644
--- a/engines/saga2/savefile.cpp
+++ b/engines/saga2/savefile.cpp
@@ -246,6 +246,23 @@ bool SaveFileReader::firstChunk(ChunkID &chunk, int32 &size) {
return true;
}
+bool firstChunk(Common::InSaveFile *in, ChunkID &chunk, int32 &size) {
+ if (!in->seek(SaveFileHeader::kHeaderSize, SEEK_SET))
+ error("Error seeking first save game chunk");
+
+ if (in->size() - in->pos() < 8) {
+ debugC(1, kDebugSaveload, "Reached EOF on first Chunk %s", tag2str(chunk));
+ return false;
+ }
+
+ chunk = in->readUint32BE();
+ size = in->readUint32LE();
+
+ debugC(1, kDebugSaveload, "First Chunk loaded: chunkID = %s, size = %d", tag2str(chunk), size);
+
+ return true;
+}
+
//----------------------------------------------------------------------
// Make the next chunk the current chunk
@@ -277,6 +294,21 @@ bool SaveFileReader::nextChunk(ChunkID &chunk, int32 &size) {
return true;
}
+bool nextChunk(Common::InSaveFile *in, ChunkID &chunk, int32 &size) {
+ if (in->size() - in->pos() < 8) {
+ debugC(1, kDebugSaveload, "Reached EOF at %s", tag2str(chunk));
+ return false;
+ }
+
+ chunk = in->readUint32BE();
+ size = in->readUint32LE();
+
+ debugC(1, kDebugSaveload, "Next Chunk loaded: chunkID = %s, size = %d", tag2str(chunk), size);
+
+ // Return success
+ return true;
+}
+
//----------------------------------------------------------------------
// Read data from the current chunk
diff --git a/engines/saga2/savefile.h b/engines/saga2/savefile.h
index c671622e31..e530426184 100644
--- a/engines/saga2/savefile.h
+++ b/engines/saga2/savefile.h
@@ -156,6 +156,9 @@ public:
}
};
+bool firstChunk(Common::InSaveFile *in, ChunkID &chunk, int32 &size);
+bool nextChunk(Common::InSaveFile *in, ChunkID &chunk, int32 &size);
+
} // end of namespace Saga2
#endif
Commit: af2d10d01d059e135d32fe16eee478b11d68a2c5
https://github.com/scummvm/scummvm/commit/af2d10d01d059e135d32fe16eee478b11d68a2c5
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-06T08:47:56+09:00
Commit Message:
SAGA2: Fix warning in main.cpp
Changed paths:
engines/saga2/main.cpp
diff --git a/engines/saga2/main.cpp b/engines/saga2/main.cpp
index a696c032e5..e5d15984da 100644
--- a/engines/saga2/main.cpp
+++ b/engines/saga2/main.cpp
@@ -749,7 +749,6 @@ void loadGlobals(Common::InSaveFile *in) {
actorTasksPaused = in->readByte();
combatBehaviorEnabled = in->readByte();
backgroundSimulationPaused = in->readByte();
- GlobalsArchive archive;
}
/********************************************************************/
More information about the Scummvm-git-logs
mailing list