aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2009-05-11 19:31:55 +0000
committerEugene Sandulenko2009-05-11 19:31:55 +0000
commitd5b9437fb315292292ffa21c04b1003e656a2838 (patch)
tree9e2bd481172e0f0d8227ea42788a22eefd00c1d2 /engines
parent2ba1da41e8e189ea5c89b56bb6d6faca80a0268f (diff)
downloadscummvm-rg350-d5b9437fb315292292ffa21c04b1003e656a2838.tar.gz
scummvm-rg350-d5b9437fb315292292ffa21c04b1003e656a2838.tar.bz2
scummvm-rg350-d5b9437fb315292292ffa21c04b1003e656a2838.zip
Fix bug #2055836: "FW: Music is not restarted when loading a saved game"
svn-id: r40465
Diffstat (limited to 'engines')
-rw-r--r--engines/cine/cine.cpp3
-rw-r--r--engines/cine/saveload.cpp15
-rw-r--r--engines/cine/script_fw.cpp13
-rw-r--r--engines/cine/various.cpp1
-rw-r--r--engines/cine/various.h1
5 files changed, 25 insertions, 8 deletions
diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp
index fde1fb6621..64a9a9dfb8 100644
--- a/engines/cine/cine.cpp
+++ b/engines/cine/cine.cpp
@@ -172,6 +172,9 @@ void CineEngine::initialize() {
var2 = var3 = var4 = var5 = 0;
+ musicIsPlaying = 0;
+ currentDatName[0] = 0;
+
_preLoad = false;
if (ConfMan.hasKey("save_slot")) {
char saveNameBuffer[256];
diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp
index 4a6ea321c8..2c6ff4dcae 100644
--- a/engines/cine/saveload.cpp
+++ b/engines/cine/saveload.cpp
@@ -29,6 +29,7 @@
#include "cine/cine.h"
#include "cine/bg_list.h"
#include "cine/saveload.h"
+#include "cine/sound.h"
#include "cine/various.h"
namespace Cine {
@@ -646,7 +647,7 @@ bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFor
in.read(currentDatName, 13);
// At 0x001C:
- saveVar2 = in.readSint16BE();
+ musicIsPlaying = in.readSint16BE();
// At 0x001E:
in.read(currentPrcName, 13);
@@ -748,12 +749,10 @@ bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFor
}
if (strlen(currentDatName)) {
-/* i = saveVar2;
- saveVar2 = 0;
- loadMusic();
- if (i) {
- playMusic();
- }*/
+ g_sound->loadMusic(currentDatName);
+ if (musicIsPlaying) {
+ g_sound->playMusic();
+ }
}
return !in.ioFailed();
@@ -835,7 +834,7 @@ void CineEngine::makeSaveFW(Common::OutSaveFile &out) {
out.writeUint16BE(currentDisk);
out.write(currentPartName, 13);
out.write(currentDatName, 13);
- out.writeUint16BE(saveVar2);
+ out.writeUint16BE(musicIsPlaying);
out.write(currentPrcName, 13);
out.write(currentRelName, 13);
out.write(currentMsgName, 13);
diff --git a/engines/cine/script_fw.cpp b/engines/cine/script_fw.cpp
index f7037db61c..0c92beb650 100644
--- a/engines/cine/script_fw.cpp
+++ b/engines/cine/script_fw.cpp
@@ -1632,24 +1632,37 @@ int FWScript::o1_loadMusic() {
debugC(5, kCineDebugScript, "Line: %d: loadMusic(%s)", _line, param);
g_sound->loadMusic(param);
+
+ strncpy(currentDatName, param, 30);
+ musicIsPlaying = 0;
+
return 0;
}
int FWScript::o1_playMusic() {
debugC(5, kCineDebugScript, "Line: %d: playMusic()", _line);
g_sound->playMusic();
+
+ musicIsPlaying = 1;
+
return 0;
}
int FWScript::o1_fadeOutMusic() {
debugC(5, kCineDebugScript, "Line: %d: fadeOutMusic()", _line);
g_sound->fadeOutMusic();
+
+ musicIsPlaying = 0;
+
return 0;
}
int FWScript::o1_stopSample() {
debugC(5, kCineDebugScript, "Line: %d: stopSample()", _line);
g_sound->stopMusic();
+
+ musicIsPlaying = 0;
+
return 0;
}
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 5b54bccc25..1ec558c217 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -89,6 +89,7 @@ char newMsgName[20];
char currentCtName[15];
char currentPartName[15];
char currentDatName[30];
+uint16 musicIsPlaying;
byte isInPause = 0;
diff --git a/engines/cine/various.h b/engines/cine/various.h
index 34c56cd5db..bdbbc6fb86 100644
--- a/engines/cine/various.h
+++ b/engines/cine/various.h
@@ -78,6 +78,7 @@ extern int16 commandVar2;
extern int16 commandVar3[4];
extern char currentDatName[30];
+extern uint16 musicIsPlaying;
void setTextWindow(uint16 param1, uint16 param2, uint16 param3, uint16 param4);