[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