From f4e7b593dc9d841640bda26da59de716772b4411 Mon Sep 17 00:00:00 2001 From: D G Turner Date: Tue, 18 Mar 2014 22:49:36 +0000 Subject: [PATCH] SCUMM: Fix bug #6009 "DC: FT/Dig - Sound disappears when VMU save fails" This was introduced by fd3970aa52a0c7f411afdddfebad208f783281c8: Apply patch #2984508 - "GSoC: SCUMM stopped audio from playing while saving" This was not quite correct as if the save fails, the function exits without unpausing the engine, which resulted in sound and music remaining muted. This corrects the logic to unpause in all cases. --- engines/scumm/saveload.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 67bd6f617d1..8d278f6ddf0 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -188,32 +188,31 @@ bool ScummEngine::saveState(Common::WriteStream *out, bool writeHeader) { } bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) { - bool saveFailed; + bool saveFailed = false; pauseEngine(true); Common::WriteStream *out = openSaveFileForWriting(slot, compat, filename); - if (!out) - return false; - - saveFailed = false; - if (!saveState(out)) + if (!out) { saveFailed = true; + } else { + if (!saveState(out)) + saveFailed = true; - out->finalize(); - if (out->err()) - saveFailed = true; - delete out; - - if (saveFailed) { - debug(1, "State save as '%s' FAILED", filename.c_str()); - return false; + out->finalize(); + if (out->err()) + saveFailed = true; + delete out; } - debug(1, "State saved as '%s'", filename.c_str()); + + if (saveFailed) + debug(1, "State save as '%s' FAILED", filename.c_str()); + else + debug(1, "State saved as '%s'", filename.c_str()); pauseEngine(false); - return true; + return !saveFailed; }