[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