[Scummvm-git-logs] scummvm master -> da8be8c0dbbf5127acb997774fa8a1803a8fdb34
AndywinXp
noreply at scummvm.org
Thu Sep 14 13:12:22 UTC 2023
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:
da8be8c0db SCUMM: Don't pause sound engine for temporary saves
Commit: da8be8c0dbbf5127acb997774fa8a1803a8fdb34
https://github.com/scummvm/scummvm/commit/da8be8c0dbbf5127acb997774fa8a1803a8fdb34
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-09-14T15:12:11+02:00
Commit Message:
SCUMM: Don't pause sound engine for temporary saves
This get rids of a whole class of sound glitches across the
engine, where temporary saves paused sound for a fraction
of second, resulting in a hiccup.
Examples: reading the dialogue of Plato in INDY4, looking
at the recipe book in COMI.
Concept suggested by eriktorbjorn, and proved by the fact
that disasms do not pause audio at when saving.
Changed paths:
engines/scumm/saveload.cpp
engines/scumm/scumm.cpp
engines/scumm/scumm.h
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 02fd0e8d77a..84e73f472ec 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -567,8 +567,14 @@ bool ScummEngine::saveState(Common::WriteStream *out, bool writeHeader) {
bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) {
bool saveFailed = false;
+ // We can't just use _saveTemporaryState here, because at
+ // this point it might not contain an updated value.
+ _pauseSoundsDuringSave = !compat;
+
PauseToken pt = pauseEngine();
+ _pauseSoundsDuringSave = true;
+
Common::WriteStream *out = openSaveFileForWriting(slot, compat, filename);
if (!out) {
saveFailed = true;
@@ -698,7 +704,8 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) {
_sound->stopCD();
- _sound->pauseSounds(true);
+ if (!_saveTemporaryState)
+ _sound->pauseSounds(true);
closeRoom();
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 9cfda0ae8df..0577b9b78d0 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -3753,7 +3753,7 @@ bool ScummEngine::startManiac() {
void ScummEngine::pauseEngineIntern(bool pause) {
if (pause) {
// Pause sound & video
- if (_sound) {
+ if (_sound && canPauseSoundsDuringSave()) {
_oldSoundsPaused = _sound->_soundsPaused;
_sound->pauseSounds(true);
}
@@ -3770,7 +3770,7 @@ void ScummEngine::pauseEngineIntern(bool pause) {
_system->updateScreen();
// Resume sound & video
- if (_sound)
+ if (_sound && canPauseSoundsDuringSave())
_sound->pauseSounds(_oldSoundsPaused);
}
}
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 20b0ab0774b..918af67abc7 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -903,6 +903,7 @@ protected:
byte _saveLoadFlag = 0, _saveLoadSlot = 0;
uint32 _lastSaveTime = 0;
bool _saveTemporaryState = false;
+ bool _pauseSoundsDuringSave = true;
bool _loadFromLauncher = false;
bool _videoModeChanged = false;
Common::String _saveLoadFileName;
@@ -939,6 +940,7 @@ public:
void requestLoad(int slot);
Common::String getTargetName() const { return _targetName; }
+ bool canPauseSoundsDuringSave() const { return _pauseSoundsDuringSave; }
// thumbnail + info stuff
public:
More information about the Scummvm-git-logs
mailing list