[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