[Scummvm-git-logs] scummvm master -> 771f3e8ad4f449b12879bf8bf921a6ca2c7a7858

aquadran aquadran at gmail.com
Sat Mar 13 14:46:37 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
771f3e8ad4 ICB: Cleanup save code


Commit: 771f3e8ad4f449b12879bf8bf921a6ca2c7a7858
    https://github.com/scummvm/scummvm/commit/771f3e8ad4f449b12879bf8bf921a6ca2c7a7858
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2021-03-13T15:46:30+01:00

Commit Message:
ICB: Cleanup save code

Changed paths:
    engines/icb/event_manager.cpp
    engines/icb/event_timer.h
    engines/icb/mission.cpp
    engines/icb/set_pc.cpp
    engines/icb/set_pc.h
    engines/icb/surface_manager.cpp
    engines/icb/surface_manager.h


diff --git a/engines/icb/event_manager.cpp b/engines/icb/event_manager.cpp
index 6702de4396..eb7f57daff 100644
--- a/engines/icb/event_manager.cpp
+++ b/engines/icb/event_manager.cpp
@@ -263,12 +263,12 @@ void _event_manager::Save(Common::WriteStream *stream) const {
 	}
 
 	// Write the number of active event timers in the file.
-	stream->write(&nNumActiveTimers, sizeof(nNumActiveTimers)); // TODO: DON'T WRITE LIKE THIS
+	stream->writeUint32LE(nNumActiveTimers);
 
 	// Now write the actual active event timers.
 	for (i = 0; i < EVENT_MANAGER_MAX_TIMERS; ++i) {
 		if (m_pbActiveTimers[i])
-			stream->write(&m_pEventTimers[i], sizeof(_event_timer)); // TODO: DON'T WRITE LIKE THIS
+			m_pEventTimers[i].Save(stream);
 	}
 }
 
@@ -283,18 +283,16 @@ void _event_manager::Restore(Common::SeekableReadStream *stream) {
 
 	// Find out how many timers we are going to read in.
 	nNumActiveTimers = stream->readUint32LE();
-	if (stream->err())
-		Fatal_error("Error restoring event timers from save file");
 
 	// Read them in.
 	for (i = 0; i < nNumActiveTimers; ++i) {
-		if (stream->read(&oEventTimer, sizeof(oEventTimer)) != sizeof(oEventTimer)) { // TODO: We REALLY shouldn't read structs this way. FIXME HACK
-			Fatal_error("Error restoring %d event timers from save file", nNumActiveTimers);
-		} else {
-			m_pEventTimers[i] = oEventTimer;
-			m_pbActiveTimers[i] = TRUE8;
-		}
+		oEventTimer.Restore(stream);
+		m_pEventTimers[i] = oEventTimer;
+		m_pbActiveTimers[i] = TRUE8;
 	}
+
+	if (stream->err())
+		Fatal_error("Error restoring event timers from save file");
 }
 
 } // End of namespace ICB
diff --git a/engines/icb/event_timer.h b/engines/icb/event_timer.h
index 4782d00abb..e62b4ce803 100644
--- a/engines/icb/event_timer.h
+++ b/engines/icb/event_timer.h
@@ -28,6 +28,8 @@
 #ifndef ICB_EVENTTIMER_H_INCLUDED
 #define ICB_EVENTTIMER_H_INCLUDED
 
+#include "common/stream.h"
+
 #include "engines/icb/string_vest.h"
 #include "engines/icb/common/px_string.h"
 #include "engines/icb/event_list.h"
@@ -64,6 +66,23 @@ public:
 	uint32 GetEventTime() const { return (m_nCurrentTime); }
 	const char *GetEventName() const { return (m_pcEventName); }
 
+	void Save(Common::WriteStream *stream) const {
+		stream->writeSint32LE(m_nObjectID);
+		stream->writeUint32LE(m_nStart);
+		stream->writeUint32LE(m_nEnd);
+		stream->writeUint32LE(m_nInterval);
+		stream->writeUint32LE(m_nCurrentTime);
+		stream->write(m_pcEventName, MAXLEN_EVENT_NAME);
+	}
+	void Restore(Common::SeekableReadStream *stream) {
+		m_nObjectID = stream->readSint32LE();
+		m_nStart = stream->readUint32LE();
+		m_nEnd = stream->readUint32LE();
+		m_nInterval = stream->readUint32LE();
+		m_nCurrentTime = stream->readUint32LE();
+		stream->read(m_pcEventName, MAXLEN_EVENT_NAME);
+	}
+
 private:
 	int32 m_nObjectID;                     // ID of object initiating this timer.
 	uint32 m_nStart;                       // When the event should start, relative to the time the event was placed.
diff --git a/engines/icb/mission.cpp b/engines/icb/mission.cpp
index 0fd75bf33f..e119b43466 100644
--- a/engines/icb/mission.cpp
+++ b/engines/icb/mission.cpp
@@ -810,7 +810,7 @@ void _mission::Save_game_position(const char *filename, const char *slot_label,
 	g_oRemora->Save(stream);
 
 	// save gfx init info for initing a set...
-	MSS.SaveGFXInfo(stream);
+	surface_manager->SaveGFXInfo(stream);
 	SavePlatformSpecific(stream);
 
 	delete stream;
@@ -1090,7 +1090,7 @@ __load_result Load_game(const char *filename) {
 	g_oRemora->Restore(stream);
 
 	// load gfx init info for initing a set...
-	MSS.LoadGFXInfo(stream);
+	surface_manager->LoadGFXInfo(stream);
 	g_mission->LoadPlatformSpecific(stream);
 
 	delete stream;
diff --git a/engines/icb/set_pc.cpp b/engines/icb/set_pc.cpp
index 8ac3a9cbd2..bf83a802f1 100644
--- a/engines/icb/set_pc.cpp
+++ b/engines/icb/set_pc.cpp
@@ -1825,46 +1825,4 @@ void _set::HackMakeCamera() {
 	m_camera.pan = scrnPan;
 }
 
-// read in init values for set from file
-void _set::LoadGFXInfo(Common::SeekableReadStream *stream) {
-	surface_manager->BorderRect().left = stream->readSint32LE();
-	surface_manager->BorderRect().top = stream->readSint32LE();
-	surface_manager->BorderRect().right = stream->readSint32LE();
-	surface_manager->BorderRect().bottom = stream->readSint32LE();
-	surface_manager->BorderRed() = stream->readByte();
-	surface_manager->BorderGreen() = stream->readByte();
-	surface_manager->BorderBlue() = stream->readByte();
-	surface_manager->BorderAlpha() = stream->readByte();
-	surface_manager->BorderMode() = stream->readUint32LE();
-	surface_manager->FadeMode() = stream->readUint32LE();
-	surface_manager->FadeToRed() = stream->readByte();
-	surface_manager->FadeToGreen() = stream->readByte();
-	surface_manager->FadeToBlue() = stream->readByte();
-	surface_manager->FadeFromRed() = stream->readByte();
-	surface_manager->FadeFromGreen() = stream->readByte();
-	surface_manager->FadeFromBlue() = stream->readByte();
-	surface_manager->FadeAlpha() = stream->readByte();
-}
-
-// write out current init values1 to file
-void _set::SaveGFXInfo(Common::WriteStream *stream) {
-	stream->writeSint32LE(surface_manager->BorderRect().left);
-	stream->writeSint32LE(surface_manager->BorderRect().top);
-	stream->writeSint32LE(surface_manager->BorderRect().right);
-	stream->writeSint32LE(surface_manager->BorderRect().bottom);
-	stream->writeByte(surface_manager->BorderRed());
-	stream->writeByte(surface_manager->BorderGreen());
-	stream->writeByte(surface_manager->BorderBlue());
-	stream->writeByte(surface_manager->BorderAlpha());
-	stream->writeUint32LE(surface_manager->BorderMode());
-	stream->writeUint32LE(surface_manager->FadeMode());
-	stream->writeByte(surface_manager->FadeToRed());
-	stream->writeByte(surface_manager->FadeToGreen());
-	stream->writeByte(surface_manager->FadeToBlue());
-	stream->writeByte(surface_manager->FadeFromRed());
-	stream->writeByte(surface_manager->FadeFromGreen());
-	stream->writeByte(surface_manager->FadeFromBlue());
-	stream->writeByte(surface_manager->FadeAlpha());
-}
-
 } // End of namespace ICB
diff --git a/engines/icb/set_pc.h b/engines/icb/set_pc.h
index 2cd9e92122..35645887e5 100644
--- a/engines/icb/set_pc.h
+++ b/engines/icb/set_pc.h
@@ -87,10 +87,6 @@ public:
 	void Reset();
 	bool8 DoesCameraExist(const char *camera_name, const char *camera_cluster_name);
 
-	/* Save game compliance */
-	void LoadGFXInfo(Common::SeekableReadStream *stream);
-	void SaveGFXInfo(Common::WriteStream *stream);
-
 private:
 	void HackMakeCamera();
 
diff --git a/engines/icb/surface_manager.cpp b/engines/icb/surface_manager.cpp
index fc6e4d066a..d4fd77e3fc 100644
--- a/engines/icb/surface_manager.cpp
+++ b/engines/icb/surface_manager.cpp
@@ -824,6 +824,46 @@ void _surface_manager::DrawEffects(uint32 surface_id) {
 	effect_time = (GetMicroTimer() - effect_time);
 }
 
+void _surface_manager::LoadGFXInfo(Common::SeekableReadStream *stream) {
+	m_borders.left = stream->readSint32LE();
+	m_borders.top = stream->readSint32LE();
+	m_borders.right = stream->readSint32LE();
+	m_borders.bottom = stream->readSint32LE();
+	m_borderRed = stream->readByte();
+	m_borderGreen = stream->readByte();
+	m_borderBlue = stream->readByte();
+	m_borderAlpha = stream->readByte();
+	m_borderMode = stream->readUint32LE();
+	m_fadeMode = stream->readUint32LE();
+	m_fadeToRed = stream->readByte();
+	m_fadeToGreen = stream->readByte();
+	m_fadeToBlue = stream->readByte();
+	m_fadeFromRed = stream->readByte();
+	m_fadeFromGreen = stream->readByte();
+	m_fadeFromBlue = stream->readByte();
+	m_fadeAlpha = stream->readByte();
+}
+
+void _surface_manager::SaveGFXInfo(Common::WriteStream *stream) {
+	stream->writeSint32LE(m_borders.left);
+	stream->writeSint32LE(m_borders.top);
+	stream->writeSint32LE(m_borders.right);
+	stream->writeSint32LE(m_borders.bottom);
+	stream->writeByte(m_borderRed);
+	stream->writeByte(m_borderGreen);
+	stream->writeByte(m_borderBlue);
+	stream->writeByte(m_borderAlpha);
+	stream->writeUint32LE(m_borderMode);
+	stream->writeUint32LE(m_fadeMode);
+	stream->writeByte(m_fadeToRed);
+	stream->writeByte(m_fadeToGreen);
+	stream->writeByte(m_fadeToBlue);
+	stream->writeByte(m_fadeFromRed);
+	stream->writeByte(m_fadeFromGreen);
+	stream->writeByte(m_fadeFromBlue);
+	stream->writeByte(m_fadeAlpha);
+}
+
 void _surface_manager::RecordFrame(const char *path) {
 	Common::DumpFile dumpFile;
 	bool result = dumpFile.open(path);
diff --git a/engines/icb/surface_manager.h b/engines/icb/surface_manager.h
index 622916453f..039f38bacb 100644
--- a/engines/icb/surface_manager.h
+++ b/engines/icb/surface_manager.h
@@ -127,6 +127,9 @@ public:
 	}
 	uint32 &BorderMode() { return m_borderMode; }
 
+	void LoadGFXInfo(Common::SeekableReadStream *stream);
+	void SaveGFXInfo(Common::WriteStream *stream);
+
 private:
 	LRECT m_borders;     // The border to add to the screen
 	uint8 m_borderRed;   // The colour of the border




More information about the Scummvm-git-logs mailing list