[Scummvm-git-logs] scummvm master -> 54bc8126a27e272e7cd005b59a7707c7c35f6a6a

neuromancer noreply at scummvm.org
Thu Aug 15 11:18:57 UTC 2024


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

Summary:
909901c6b9 FREESCAPE: disallow saving when the game has not started
54bc8126a2 FREESCAPE: make sure savedScreen is always available before saving a game


Commit: 909901c6b918dad709111753737883e5c5b19f1e
    https://github.com/scummvm/scummvm/commit/909901c6b918dad709111753737883e5c5b19f1e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-08-15T11:56:45+02:00

Commit Message:
FREESCAPE: disallow saving when the game has not started

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index f4305688600..af1a8b31f92 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -1029,6 +1029,7 @@ Common::Error FreescapeEngine::saveGameStream(Common::WriteStream *stream, bool
 	if (isAutosave)
 		return Common::kNoError;
 
+	assert(_currentArea);
 	stream->writeUint16LE(_currentArea->getAreaID());
 
 	for (int i = 0; i < 3; i++)
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 2a1be1696db..a10200c9de5 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -532,7 +532,7 @@ public:
 	bool hasFeature(EngineFeature f) const override;
 	bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override { return true; }
 	bool canSaveAutosaveCurrently() override { return false; }
-	bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override { return true; }
+	bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override { return _gameStateControl == kFreescapeGameStatePlaying && _currentArea; }
 	Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
 	virtual Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false);


Commit: 54bc8126a27e272e7cd005b59a7707c7c35f6a6a
    https://github.com/scummvm/scummvm/commit/54bc8126a27e272e7cd005b59a7707c7c35f6a6a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-08-15T13:19:12+02:00

Commit Message:
FREESCAPE: make sure savedScreen is always available before saving a game

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/games/castle/castle.cpp
    engines/freescape/games/dark/dark.cpp
    engines/freescape/games/driller/driller.cpp
    engines/freescape/games/eclipse/eclipse.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index af1a8b31f92..30523f3ae3f 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -254,6 +254,11 @@ FreescapeEngine::~FreescapeEngine() {
 			free(it._value);
 		}
 	}
+
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
 }
 
 void FreescapeEngine::drawBorder() {
@@ -546,6 +551,7 @@ void FreescapeEngine::processInput() {
 				_gfx->computeScreenViewport();
 				_savedScreen->free();
 				delete _savedScreen;
+				_savedScreen = nullptr;
 				break;
 			case kActionChangeModeOrSkip:
 				_shootMode = !_shootMode;
@@ -1152,6 +1158,13 @@ void FreescapeEngine::removeTimers() {
 }
 
 void FreescapeEngine::pauseEngineIntern(bool pause) {
+	drawFrame();
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
+	_savedScreen = _gfx->getScreenshot();
+
 	Engine::pauseEngineIntern(pause);
 
 	// TODO: Handle the viewport here
@@ -1162,6 +1175,8 @@ void FreescapeEngine::pauseEngineIntern(bool pause) {
 	if (!_shootMode) {
 		_system->lockMouse(!pause);
 	}
+
+	// We don't know when savedScreen will be used, so we do not deallocate it here
 }
 
 } // namespace Freescape
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index 94da87898f2..e718ddfb6f7 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -269,6 +269,10 @@ void CastleEngine::pressedKey(const int keycode) {
 
 void CastleEngine::drawInfoMenu() {
 	PauseToken pauseToken = pauseEngine();
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
 	_savedScreen = _gfx->getScreenshot();
 
 	uint8 r, g, b;
@@ -358,6 +362,7 @@ void CastleEngine::drawInfoMenu() {
 
 	_savedScreen->free();
 	delete _savedScreen;
+	_savedScreen = nullptr;
 	surface->free();
 	delete surface;
 	delete menuTexture;
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 7b6422a474a..e384ff62bbd 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -814,6 +814,10 @@ void DarkEngine::drawSensorShoot(Sensor *sensor) {
 
 void DarkEngine::drawInfoMenu() {
 	PauseToken pauseToken = pauseEngine();
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
 	_savedScreen = _gfx->getScreenshot();
 	uint32 color = 0;
 	switch (_renderMode) {
@@ -906,6 +910,7 @@ void DarkEngine::drawInfoMenu() {
 
 	_savedScreen->free();
 	delete _savedScreen;
+	_savedScreen = nullptr;
 	surface->free();
 	delete surface;
 
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 644805f9c37..4d3e2d2e89f 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -300,6 +300,10 @@ void DrillerEngine::loadAssets() {
 
 void DrillerEngine::drawInfoMenu() {
 	PauseToken pauseToken = pauseEngine();
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
 	_savedScreen = _gfx->getScreenshot();
 
 	uint32 color = _gfx->_texturePixelFormat.ARGBToColor(0x00, 0x00, 0x00, 0x00);
@@ -441,6 +445,7 @@ void DrillerEngine::drawInfoMenu() {
 
 	_savedScreen->free();
 	delete _savedScreen;
+	_savedScreen = nullptr;
 	surface->free();
 	delete surface;
 	delete menuTexture;
diff --git a/engines/freescape/games/eclipse/eclipse.cpp b/engines/freescape/games/eclipse/eclipse.cpp
index 385a6bd1dd4..bcb89e8c18c 100644
--- a/engines/freescape/games/eclipse/eclipse.cpp
+++ b/engines/freescape/games/eclipse/eclipse.cpp
@@ -352,6 +352,10 @@ void EclipseEngine::borderScreen() {
 
 void EclipseEngine::drawInfoMenu() {
 	PauseToken pauseToken = pauseEngine();
+	if (_savedScreen) {
+		_savedScreen->free();
+		delete _savedScreen;
+	}
 	_savedScreen = _gfx->getScreenshot();
 	uint32 color = 0;
 	switch (_renderMode) {
@@ -434,6 +438,7 @@ void EclipseEngine::drawInfoMenu() {
 
 	_savedScreen->free();
 	delete _savedScreen;
+	_savedScreen = nullptr;
 	surface->free();
 	delete surface;
 	delete menuTexture;




More information about the Scummvm-git-logs mailing list