diff options
Diffstat (limited to 'engines/bladerunner/music.cpp')
-rw-r--r-- | engines/bladerunner/music.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/engines/bladerunner/music.cpp b/engines/bladerunner/music.cpp index 818d412ba9..05412dd8e0 100644 --- a/engines/bladerunner/music.cpp +++ b/engines/bladerunner/music.cpp @@ -26,6 +26,7 @@ #include "bladerunner/aud_stream.h" #include "bladerunner/bladerunner.h" #include "bladerunner/game_info.h" +#include "bladerunner/savefile.h" #include "common/timer.h" @@ -167,6 +168,68 @@ void Music::playSample() { } } +void Music::save(SaveFileWriteStream &f) { + f.writeBool(_isNextPresent); + f.writeBool(_isPlaying); + f.writeBool(_isPaused); + f.writeStringSz(_current.name, 13); + f.writeInt(_current.volume); + f.writeInt(_current.pan); + f.writeInt(_current.timeFadeIn); + f.writeInt(_current.timePlay); + f.writeInt(_current.loop); + f.writeInt(_current.timeFadeOut); + f.writeStringSz(_next.name, 13); + f.writeInt(_next.volume); + f.writeInt(_next.pan); + f.writeInt(_next.timeFadeIn); + f.writeInt(_next.timePlay); + f.writeInt(_next.loop); + f.writeInt(_next.timeFadeOut); +} + +void Music::load(SaveFileReadStream &f) { + _isNextPresent = f.readBool(); + _isPlaying = f.readBool(); + _isPaused = f.readBool(); + _current.name = f.readStringSz(13); + _current.volume = f.readInt(); + _current.pan = f.readInt(); + _current.timeFadeIn = f.readInt(); + _current.timePlay = f.readInt(); + _current.loop = f.readInt(); + _current.timeFadeOut = f.readInt(); + _next.name = f.readStringSz(13); + _next.volume = f.readInt(); + _next.pan = f.readInt(); + _next.timeFadeIn = f.readInt(); + _next.timePlay = f.readInt(); + _next.loop = f.readInt(); + _next.timeFadeOut = f.readInt(); + + stop(2); + if (_isPlaying) { + if (_channel == -1) { + play(_current.name, + _current.volume, + _current.pan, + _current.timeFadeIn, + _current.timePlay, + _current.loop, + _current.timeFadeOut); + } else { + _isNextPresent = true; + _next.name = _current.name; + _next.volume = _current.volume; + _next.pan = _current.pan; + _next.timeFadeIn = _current.timeFadeIn; + _next.timePlay = _current.timePlay; + _next.loop = _current.loop; + _next.timeFadeOut = _current.timeFadeOut; + } + } +} + void Music::adjustVolume(int volume, int delay) { if (_channel >= 0) { _vm->_audioMixer->adjustVolume(_channel, volume, delay); |