[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