[Scummvm-git-logs] scummvm master -> 64c316eaaaae2f2dc4da2d289d338a792dc67260
OMGPizzaGuy
noreply at scummvm.org
Wed Dec 7 01:34:12 UTC 2022
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:
64c316eaaa ULTIMA8: Add process flag to prevent saving instead of checking running process is a specific type
Commit: 64c316eaaaae2f2dc4da2d289d338a792dc67260
https://github.com/scummvm/scummvm/commit/64c316eaaaae2f2dc4da2d289d338a792dc67260
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2022-12-06T19:33:26-06:00
Commit Message:
ULTIMA8: Add process flag to prevent saving instead of checking running process is a specific type
Changed paths:
engines/ultima/ultima8/games/start_crusader_process.cpp
engines/ultima/ultima8/games/start_u8_process.cpp
engines/ultima/ultima8/kernel/kernel.cpp
engines/ultima/ultima8/kernel/kernel.h
engines/ultima/ultima8/kernel/process.h
engines/ultima/ultima8/ultima8.cpp
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index d942d4ce625..967ea9ea78d 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -40,6 +40,7 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(StartCrusaderProcess)
StartCrusaderProcess::StartCrusaderProcess(int saveSlot) : Process(),
_initStage(PlayFirstMovie), _saveSlot(saveSlot) {
+ _flags |= PROC_PREVENT_SAVE;
}
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 8ee01baff12..a95b5099c2e 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -41,6 +41,7 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(StartU8Process)
StartU8Process::StartU8Process(int saveSlot) : Process(),
_init(false), _saveSlot(saveSlot), _skipStart(saveSlot >= 0) {
+ _flags |= PROC_PREVENT_SAVE;
}
diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index 9dda85a4249..6896dceec69 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -370,6 +370,17 @@ void Kernel::killAllProcessesNotOfTypeExcludeCurrent(uint16 processtype, bool fa
}
}
+bool Kernel::canSave() {
+ for (ProcessIterator it = _processes.begin(); it != _processes.end(); ++it) {
+ Process *p = *it;
+
+ if (!p->is_terminated() && p->_flags & Process::PROC_PREVENT_SAVE) {
+ return false;
+ }
+ }
+
+ return true;
+}
void Kernel::save(Common::WriteStream *ws) {
ws->writeUint32LE(_tickNum);
diff --git a/engines/ultima/ultima8/kernel/kernel.h b/engines/ultima/ultima8/kernel/kernel.h
index bfb310291b0..2650fa9f9ba 100644
--- a/engines/ultima/ultima8/kernel/kernel.h
+++ b/engines/ultima/ultima8/kernel/kernel.h
@@ -101,6 +101,7 @@ public:
void kernelStats();
void processTypes();
+ bool canSave();
void save(Common::WriteStream *ws);
bool load(Common::ReadStream *rs, uint32 version);
diff --git a/engines/ultima/ultima8/kernel/process.h b/engines/ultima/ultima8/kernel/process.h
index 555698d8824..dfe1240d31d 100644
--- a/engines/ultima/ultima8/kernel/process.h
+++ b/engines/ultima/ultima8/kernel/process.h
@@ -155,6 +155,7 @@ public:
PROC_FAILED = 0x0010,
PROC_RUNPAUSED = 0x0020, //!< run even if game is paused
PROC_TERM_DISPOSE = 0x0040, //!< Dispose after termination
+ PROC_PREVENT_SAVE = 0x0080 //!< When set, prevent game from saving
};
};
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 31e64fa0d33..7512d9e6eb3 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -944,11 +944,10 @@ bool Ultima8Engine::canSaveGameStateCurrently(bool isAutosave) {
return false;
}
-
- if (dynamic_cast<StartU8Process *>(_kernel->getRunningProcess())
- || dynamic_cast<StartCrusaderProcess *>(_kernel->getRunningProcess()))
- // Don't save while starting up.
+ // Check for processes that prevent saving
+ if (!_kernel->canSave()) {
return false;
+ }
// Don't allow saving when avatar is dead.
MainActor *av = getMainActor();
More information about the Scummvm-git-logs
mailing list