[Scummvm-git-logs] scummvm master -> a7650b1039732ad6cbe5762ae33a7d22ab17f306
a-yyg
76591232+a-yyg at users.noreply.github.com
Tue Jul 6 15:16:05 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
6c857c3318 SAGA2: Add more debug output for saveload
2c7416f99a SAGA2: Implement Timers and Calender saveloading
a7650b1039 SAGA2: Implement Worlds loading
Commit: 6c857c3318fcfdf146d11a825a1977157fb8fee7
https://github.com/scummvm/scummvm/commit/6c857c3318fcfdf146d11a825a1977157fb8fee7
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-07T00:13:15+09:00
Commit Message:
SAGA2: Add more debug output for saveload
Changed paths:
engines/saga2/main.cpp
diff --git a/engines/saga2/main.cpp b/engines/saga2/main.cpp
index 2b4edb2a68..8130d2e4d2 100644
--- a/engines/saga2/main.cpp
+++ b/engines/saga2/main.cpp
@@ -691,6 +691,8 @@ void saveGlobals(SaveFileConstructor &saveGame) {
}
void saveGlobals(Common::OutSaveFile *out) {
+ debugC(2, kDebugSaveload, "Saving globals");
+
out->write("GLOB", 4);
out->writeUint32LE(sizeof(GlobalsArchive));
@@ -704,6 +706,17 @@ void saveGlobals(Common::OutSaveFile *out) {
out->writeByte(actorTasksPaused);
out->writeByte(combatBehaviorEnabled);
out->writeByte(backgroundSimulationPaused);
+
+ debugC(3, kDebugSaveload, "... objectIndex = %d", objectIndex);
+ debugC(3, kDebugSaveload, "... actorIndex = %d", actorIndex);
+ debugC(3, kDebugSaveload, "... brotherBandingEnabled = %d", brotherBandingEnabled);
+ debugC(3, kDebugSaveload, "... centerActorIndicatorEnabled = %d", centerActorIndicatorEnabled);
+ debugC(3, kDebugSaveload, "... interruptableMotionsPaused = %d", interruptableMotionsPaused);
+ debugC(3, kDebugSaveload, "... objectStatesPaused = %d", objectStatesPaused);
+ debugC(3, kDebugSaveload, "... actorStatesPaused = %d", actorStatesPaused);
+ debugC(3, kDebugSaveload, "... actorTasksPaused = %d", actorTasksPaused);
+ debugC(3, kDebugSaveload, "... combatBehaviorEnabled = %d", combatBehaviorEnabled);
+ debugC(3, kDebugSaveload, "... backgroundSimulationPaused = %d", backgroundSimulationPaused);
}
//-----------------------------------------------------------------------
@@ -727,6 +740,8 @@ void loadGlobals(SaveFileReader &saveGame) {
}
void loadGlobals(Common::InSaveFile *in) {
+ debugC(2, kDebugSaveload, "Loading globals");
+
objectIndex = in->readUint32LE();
actorIndex = in->readUint32LE();
brotherBandingEnabled = in->readByte();
@@ -737,6 +752,17 @@ void loadGlobals(Common::InSaveFile *in) {
actorTasksPaused = in->readByte();
combatBehaviorEnabled = in->readByte();
backgroundSimulationPaused = in->readByte();
+
+ debugC(3, kDebugSaveload, "... objectIndex = %d", objectIndex);
+ debugC(3, kDebugSaveload, "... actorIndex = %d", actorIndex);
+ debugC(3, kDebugSaveload, "... brotherBandingEnabled = %d", brotherBandingEnabled);
+ debugC(3, kDebugSaveload, "... centerActorIndicatorEnabled = %d", centerActorIndicatorEnabled);
+ debugC(3, kDebugSaveload, "... interruptableMotionsPaused = %d", interruptableMotionsPaused);
+ debugC(3, kDebugSaveload, "... objectStatesPaused = %d", objectStatesPaused);
+ debugC(3, kDebugSaveload, "... actorStatesPaused = %d", actorStatesPaused);
+ debugC(3, kDebugSaveload, "... actorTasksPaused = %d", actorTasksPaused);
+ debugC(3, kDebugSaveload, "... combatBehaviorEnabled = %d", combatBehaviorEnabled);
+ debugC(3, kDebugSaveload, "... backgroundSimulationPaused = %d", backgroundSimulationPaused);
}
/********************************************************************/
Commit: 2c7416f99a2ddb90b8e3297efee2ad6469d774e3
https://github.com/scummvm/scummvm/commit/2c7416f99a2ddb90b8e3297efee2ad6469d774e3
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-07T00:13:15+09:00
Commit Message:
SAGA2: Implement Timers and Calender saveloading
Changed paths:
engines/saga2/calender.cpp
engines/saga2/calender.h
engines/saga2/fta.h
engines/saga2/loadsave.cpp
engines/saga2/timers.cpp
diff --git a/engines/saga2/calender.cpp b/engines/saga2/calender.cpp
index 2ef086f60a..6326305518 100644
--- a/engines/saga2/calender.cpp
+++ b/engines/saga2/calender.cpp
@@ -233,6 +233,31 @@ void saveCalender(SaveFileConstructor &saveGame) {
}
}
+void saveCalender(Common::OutSaveFile *out) {
+ debugC(2, kDebugSaveload, "Saving calender");
+
+ out->write("CALE", 4);
+ out->writeUint32LE(sizeof(calenderPaused + sizeof(calender)));
+
+ out->writeByte(calenderPaused);
+ out->writeUint16LE(calender.years);
+ out->writeUint16LE(calender.weeks);
+ out->writeUint16LE(calender.days);
+ out->writeUint16LE(calender.dayInYear);
+ out->writeUint16LE(calender.dayInWeek);
+ out->writeUint16LE(calender.hour);
+ out->writeUint16LE(calender.frameInHour);
+
+ debugC(3, kDebugSaveload, "... calenderPaused = %d", calenderPaused);
+ debugC(3, kDebugSaveload, "... calender.years = %d", calender.years);
+ debugC(3, kDebugSaveload, "... calender.weeks = %d", calender.weeks);
+ debugC(3, kDebugSaveload, "... calender.days = %d", calender.days);
+ debugC(3, kDebugSaveload, "... calender.dayInYear = %d", calender.dayInYear);
+ debugC(3, kDebugSaveload, "... calender.dayInWeek = %d", calender.dayInWeek);
+ debugC(3, kDebugSaveload, "... calender.hour = %d", calender.hour);
+ debugC(3, kDebugSaveload, "... calender.frameInHour = %d", calender.frameInHour);
+}
+
//-----------------------------------------------------------------------
// Read the calender data from a save file. Assume the save file is at
// the correct chunk.
@@ -244,6 +269,28 @@ void loadCalender(SaveFileReader &saveGame) {
saveGame.read(&calender, sizeof(calender));
}
+void loadCalender(Common::InSaveFile *in) {
+ debugC(2, kDebugSaveload, "Loading calender");
+
+ calenderPaused = in->readByte();
+ calender.years = in->readUint16LE();
+ calender.weeks = in->readUint16LE();
+ calender.days = in->readUint16LE();
+ calender.dayInYear = in->readUint16LE();
+ calender.dayInWeek = in->readUint16LE();
+ calender.hour = in->readUint16LE();
+ calender.frameInHour = in->readUint16LE();
+
+ debugC(3, kDebugSaveload, "... calenderPaused = %d", calenderPaused);
+ debugC(3, kDebugSaveload, "... calender.years = %d", calender.years);
+ debugC(3, kDebugSaveload, "... calender.weeks = %d", calender.weeks);
+ debugC(3, kDebugSaveload, "... calender.days = %d", calender.days);
+ debugC(3, kDebugSaveload, "... calender.dayInYear = %d", calender.dayInYear);
+ debugC(3, kDebugSaveload, "... calender.dayInWeek = %d", calender.dayInWeek);
+ debugC(3, kDebugSaveload, "... calender.hour = %d", calender.hour);
+ debugC(3, kDebugSaveload, "... calender.frameInHour = %d", calender.frameInHour);
+}
+
CalenderTime calender;
bool isDayTime(void) {
diff --git a/engines/saga2/calender.h b/engines/saga2/calender.h
index 4e9d0b7356..b6aa1f58b5 100644
--- a/engines/saga2/calender.h
+++ b/engines/saga2/calender.h
@@ -95,7 +95,9 @@ uint32 operator - (const CalenderTime &time1, const CalenderTime &time2);
void initCalender(void);
void saveCalender(SaveFileConstructor &saveGame);
+void saveCalender(Common::OutSaveFile *out);
void loadCalender(SaveFileReader &saveGame);
+void loadCalender(Common::InSaveFile *in);
bool isDayTime(void);
diff --git a/engines/saga2/fta.h b/engines/saga2/fta.h
index 1412f18e0a..a21cf831ae 100644
--- a/engines/saga2/fta.h
+++ b/engines/saga2/fta.h
@@ -125,9 +125,11 @@ void initTimer(void);
// Save the timer to a save file
void saveTimer(SaveFileConstructor &saveGame);
+void saveTimer(Common::OutSaveFile *out);
// Load the timer from a save file
void loadTimer(SaveFileReader &saveGame);
+void loadTimer(Common::InSaveFile *in);
// Cleanup the timer -- nothing to do
inline void cleanupTimer(void) {}
diff --git a/engines/saga2/loadsave.cpp b/engines/saga2/loadsave.cpp
index 33d1441b53..b657bc3454 100644
--- a/engines/saga2/loadsave.cpp
+++ b/engines/saga2/loadsave.cpp
@@ -145,10 +145,10 @@ Common::Error saveGameState(int16 saveNo, char *saveName) {
header.write(out);
saveGlobals(out);
+ saveTimer(out);
+ saveCalender(out);
#if 0
- saveTimer(saveGame);
- saveCalender(saveGame);
saveWorlds(saveGame);
saveActors(saveGame);
saveObjects(saveGame);
@@ -241,16 +241,17 @@ void loadSavedGameState(int16 saveNo) {
loadGlobals(in);
loadFlags |= loadGlobalsFlag;
break;
-#if 0
+
case MKTAG('T', 'I', 'M', 'E'):
- loadTimer(saveGame);
+ loadTimer(in);
loadFlags |= loadTimerFlag;
break;
case MKTAG('C', 'A', 'L', 'E'):
- loadCalender(saveGame);
+ loadCalender(in);
loadFlags |= loadCalenderFlag;
break;
+#if 0
case MKTAG('W', 'R', 'L', 'D'):
loadWorlds(saveGame);
diff --git a/engines/saga2/timers.cpp b/engines/saga2/timers.cpp
index 6323661e3b..030e6a85c3 100644
--- a/engines/saga2/timers.cpp
+++ b/engines/saga2/timers.cpp
@@ -67,6 +67,18 @@ void saveTimer(SaveFileConstructor &saveGame) {
sizeof(time));
}
+void saveTimer(Common::OutSaveFile *out) {
+ debugC(2, kDebugSaveload, "Saving time");
+
+ int32 time = gameTime;
+
+ out->write("TIME", 4);
+ out->writeUint32LE(sizeof(time));
+ out->writeUint32LE(time);
+
+ debugC(3, kDebugSaveload, "... time = %d", time);
+}
+
void loadTimer(SaveFileReader &saveGame) {
int32 time;
@@ -74,6 +86,14 @@ void loadTimer(SaveFileReader &saveGame) {
gameTime = time;
}
+void loadTimer(Common::InSaveFile *in) {
+ debugC(2, kDebugSaveload, "Loading time");
+
+ gameTime = in->readUint32LE();
+
+ debugC(3, kDebugSaveload, "... time = %d", gameTime);
+}
+
/* ====================================================================== *
Alarms
* ====================================================================== */
Commit: a7650b1039732ad6cbe5762ae33a7d22ab17f306
https://github.com/scummvm/scummvm/commit/a7650b1039732ad6cbe5762ae33a7d22ab17f306
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-07T00:13:15+09:00
Commit Message:
SAGA2: Implement Worlds loading
Changed paths:
engines/saga2/loadsave.cpp
engines/saga2/objects.cpp
engines/saga2/objects.h
diff --git a/engines/saga2/loadsave.cpp b/engines/saga2/loadsave.cpp
index b657bc3454..34033a7031 100644
--- a/engines/saga2/loadsave.cpp
+++ b/engines/saga2/loadsave.cpp
@@ -147,9 +147,9 @@ Common::Error saveGameState(int16 saveNo, char *saveName) {
saveGlobals(out);
saveTimer(out);
saveCalender(out);
+ saveWorlds(out);
#if 0
- saveWorlds(saveGame);
saveActors(saveGame);
saveObjects(saveGame);
saveBands(saveGame);
@@ -251,12 +251,12 @@ void loadSavedGameState(int16 saveNo) {
loadCalender(in);
loadFlags |= loadCalenderFlag;
break;
-#if 0
case MKTAG('W', 'R', 'L', 'D'):
- loadWorlds(saveGame);
+ loadWorlds(in);
loadFlags |= loadWorldsFlag;
break;
+#if 0
case MKTAG('A', 'C', 'T', 'R'):
loadActors(saveGame);
diff --git a/engines/saga2/objects.cpp b/engines/saga2/objects.cpp
index 5f2d4217d2..c6ae0aa5d7 100644
--- a/engines/saga2/objects.cpp
+++ b/engines/saga2/objects.cpp
@@ -2374,6 +2374,35 @@ GameWorld::GameWorld(void **buf) {
#endif
}
+GameWorld::GameWorld(Common::SeekableReadStream *stream) {
+ size.u = size.v = stream->readSint16LE();
+ mapNum = stream->readSint16LE();
+
+ debugC(3, kDebugSaveload, "World %d", thisID());
+ debugC(3, kDebugSaveload, "... size.u = size.v = %d", size.u);
+ debugC(3, kDebugSaveload, "... mapNum = %d", mapNum);
+
+ if (size.u != 0) {
+ int32 sectorArrayCount;
+
+ sectorArraySize = size.u / kSectorSize;
+ sectorArrayCount = sectorArraySize * sectorArraySize;
+ sectorArray = new Sector[sectorArrayCount]();
+
+ if (sectorArray == nullptr)
+ error("Unable to allocate world %d sector array", mapNum);
+
+ for (int i = 0; i < sectorArrayCount; ++i) {
+ sectorArray[i].read(stream);
+ debugC(4, kDebugSaveload, "...... sectArray[%d].activationCount = %d", i, sectorArray[i].activationCount);
+ debugC(4, kDebugSaveload, "...... sectArray[%d].childID = %d", i, sectorArray[i].childID);
+ }
+ } else {
+ sectorArraySize = 0;
+ sectorArray = nullptr;
+ }
+}
+
GameWorld::~GameWorld() {
if (sectorArray)
delete[] sectorArray;
@@ -2806,6 +2835,45 @@ void saveWorlds(SaveFileConstructor &saveGame) {
free(archiveBuffer);
}
+void saveWorlds(Common::OutSaveFile *out) {
+ debugC(2, kDebugSaveload, "Saving worlds");
+
+ int32 archiveBufSize = 0;
+
+ // Accumulate size of archive buffer
+
+ // Add size of the current world's ID
+ archiveBufSize += sizeof(ObjectID);
+
+ for (int i = 0; i < worldCount; i++)
+ archiveBufSize += worldList[i].archiveSize();
+
+ out->write("WRLD", 4);
+ out->writeUint32LE(archiveBufSize);
+
+ out->writeUint16LE(currentWorld->thisID());
+
+ debugC(3, kDebugSaveload, "... currentWorld->thisID() = %d", currentWorld->thisID());
+
+ for (int i = 0; i < worldCount; ++i) {
+ Sector *sectArray = worldList[i].sectorArray;
+ int32 sectorArrayCount = worldList[i].sectorArraySize *
+ worldList[i].sectorArraySize;
+
+ out->writeSint16LE(worldList[i].size.u);
+ out->writeSint16LE(worldList[i].mapNum);
+
+ debugC(3, kDebugSaveload, "... worldList[%d].size.u = %d", i, worldList[i].size.u);
+ debugC(3, kDebugSaveload, "... worldList[%d].mapNum = %d", i, worldList[i].mapNum);
+
+ for (int j = 0; j < sectorArrayCount; ++j) {
+ sectArray[j].write(out);
+ debugC(4, kDebugSaveload, "...... sectArray[%d].activationCount = %d", j, sectArray[j].activationCount);
+ debugC(4, kDebugSaveload, "...... sectArray[%d].childID = %d", j, sectArray[j].childID);
+ }
+ }
+}
+
//-------------------------------------------------------------------
// Load the worlds from a save game file
@@ -2848,6 +2916,27 @@ void loadWorlds(SaveFileReader &saveGame) {
setCurrentMap(currentWorld->mapNum);
}
+void loadWorlds(Common::InSaveFile *in) {
+ debugC(2, kDebugSaveload, "Loading worlds");
+
+ ObjectID currentWorldID;
+
+ worldList = new GameWorld[worldListSize]();
+ if (worldList == nullptr)
+ error("Unable to allocate world list");
+
+ currentWorldID = in->readUint16LE();
+
+ debugC(3, kDebugSaveload, "... currentWorldID = %d", currentWorldID);
+
+ for (int i = 0; i < worldCount; ++i)
+ new (&worldList[i]) GameWorld(in);
+
+ // Reset the current world
+ currentWorld = (GameWorld *)GameObject::objectAddress(currentWorldID);
+ setCurrentMap(currentWorld->mapNum);
+}
+
//-------------------------------------------------------------------
// Cleanup the GameWorld list
@@ -2858,7 +2947,10 @@ void cleanupWorlds(void) {
gw->cleanup();
}
- if (worldList != nullptr) delete[] worldList;
+ if (worldList != nullptr) {
+ delete[] worldList;
+ worldList = nullptr;
+ }
}
//-------------------------------------------------------------------
@@ -3140,6 +3232,17 @@ void Sector::deactivate(void) {
activationCount--;
}
+void Sector::read(Common::InSaveFile *in) {
+ activationCount = in->readUint16LE();
+ childID = in->readUint16LE();
+}
+
+void Sector::write(Common::OutSaveFile *out) {
+ out->writeUint16LE(activationCount);
+ out->writeUint16LE(childID);
+}
+
+
/* ======================================================================= *
ActiveRegion member functions
* ======================================================================= */
diff --git a/engines/saga2/objects.h b/engines/saga2/objects.h
index 78a0b6b84b..7f4d3b24aa 100644
--- a/engines/saga2/objects.h
+++ b/engines/saga2/objects.h
@@ -739,6 +739,9 @@ public:
void activate(void);
void deactivate(void);
+
+ void write(Common::OutSaveFile *out);
+ void read(Common::InSaveFile *in);
};
/* ======================================================================= *
@@ -761,10 +764,10 @@ class GameWorld : public GameObject {
friend class GameObject;
friend class ObjectIterator;
+public:
TilePoint size; // size of world in U/V coords
int16 sectorArraySize; // size of sector array
Sector *sectorArray; // array of sectors
-public:
int16 mapNum; // map number for this world.
// Default constructor
@@ -776,6 +779,8 @@ public:
// Constructor -- reconstruct from archive buffer
GameWorld(void **buf);
+ GameWorld(Common::SeekableReadStream *stream);
+
~GameWorld();
int32 archiveSize(void);
@@ -1405,9 +1410,11 @@ void initWorlds(void);
// Save worlds to the save file
void saveWorlds(SaveFileConstructor &saveGame);
+void saveWorlds(Common::OutSaveFile *out);
// Load worlds from the save file
void loadWorlds(SaveFileReader &saveGame);
+void loadWorlds(Common::InSaveFile *in);
// Cleanup game worlds
void cleanupWorlds(void);
More information about the Scummvm-git-logs
mailing list