aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorTravis Howell2007-06-12 06:08:47 +0000
committerTravis Howell2007-06-12 06:08:47 +0000
commit12c9fb03820c383d5d10fa3c3ba8e2cffad8db98 (patch)
tree153e2ac588eae58913bf3c1b5ec30e41a7c80fef /engines
parent9c07235a938e668cf3b4728a11ec8161d7d67c6b (diff)
downloadscummvm-rg350-12c9fb03820c383d5d10fa3c3ba8e2cffad8db98.tar.gz
scummvm-rg350-12c9fb03820c383d5d10fa3c3ba8e2cffad8db98.tar.bz2
scummvm-rg350-12c9fb03820c383d5d10fa3c3ba8e2cffad8db98.zip
Add support for pausing/resume cutscenes shown on the OmniTV in The Feeble Files.
svn-id: r27371
Diffstat (limited to 'engines')
-rw-r--r--engines/agos/animation.cpp45
-rw-r--r--engines/agos/animation.h3
-rw-r--r--engines/scumm/he/animation_he.cpp8
-rw-r--r--engines/sword1/animation.cpp2
-rw-r--r--engines/sword2/animation.cpp2
5 files changed, 41 insertions, 19 deletions
diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp
index a482f73c98..1cbf74549d 100644
--- a/engines/agos/animation.cpp
+++ b/engines/agos/animation.cpp
@@ -44,6 +44,8 @@ MoviePlayer::MoviePlayer(AGOSEngine *vm, Audio::Mixer *mixer)
: DXAPlayer(), _vm(vm), _mixer(mixer) {
_omniTV = false;
+ _omniTVFile = 0;
+
_leftButtonDown = false;
_rightButtonDown = false;
@@ -103,14 +105,21 @@ bool MoviePlayer::load(const char *filename) {
void MoviePlayer::playOmniTV() {
// Load OmniTV video
- if (!_fd.isOpen()) {
- _vm->_variableArray[254] = 6747;
- return;
- } else {
+ if (_fd) {
_vm->setBitFlag(42, false);
_omniTV = true;
startSound();
- return;
+ } else {
+ if (_omniTVFile) {
+ // Restore state
+ _fd = _omniTVFile;
+ _mixer->pauseHandle(_omniTVSound, false);
+
+ _vm->setBitFlag(42, false);
+ _omniTV = true;
+ } else {
+ _vm->_variableArray[254] = 6747;
+ }
}
}
@@ -120,7 +129,7 @@ void MoviePlayer::play() {
return;
}
- if (!_fd.isOpen()) {
+ if (!_fd) {
return;
}
@@ -161,14 +170,14 @@ void MoviePlayer::startSound() {
byte *buffer;
uint32 offset, size, tag;
- tag = _fd.readUint32BE();
+ tag = _fd->readUint32BE();
if (tag == MKID_BE('WAVE')) {
- size = _fd.readUint32BE();
+ size = _fd->readUint32BE();
if (_sequenceNum) {
Common::File in;
- _fd.seek(size, SEEK_CUR);
+ _fd->seek(size, SEEK_CUR);
in.open((const char *)"audio.wav");
if (!in.isOpen()) {
@@ -185,7 +194,7 @@ void MoviePlayer::startSound() {
in.close();
} else {
buffer = (byte *)malloc(size);
- _fd.read(buffer, size);
+ _fd->read(buffer, size);
}
Common::MemoryReadStream stream(buffer, size);
@@ -196,8 +205,13 @@ void MoviePlayer::startSound() {
}
if (_bgSoundStream != NULL) {
- _mixer->stopHandle(_bgSound);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream);
+ if (_omniTV) {
+ _mixer->stopHandle(_omniTVSound);
+ _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_omniTVSound, _bgSoundStream);
+ } else {
+ _mixer->stopHandle(_bgSound);
+ _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream);
+ }
}
}
@@ -206,8 +220,12 @@ void MoviePlayer::nextFrame() {
return;
if (_vm->getBitFlag(42)) {
+ // Save state
+ _omniTVFile = _fd;
+ _mixer->pauseHandle(_omniTVSound, true);
+
+ _fd = 0;
_omniTV = false;
- closeFile();
return;
}
@@ -222,6 +240,7 @@ void MoviePlayer::nextFrame() {
_frameNum++;
} else {
_omniTV = false;
+ _omniTVFile = 0;
closeFile();
_vm->_variableArray[254] = 6747;
}
diff --git a/engines/agos/animation.h b/engines/agos/animation.h
index 310cd0c05f..6776395ab7 100644
--- a/engines/agos/animation.h
+++ b/engines/agos/animation.h
@@ -44,6 +44,9 @@ class MoviePlayer : public Graphics::DXAPlayer {
Audio::SoundHandle _bgSound;
Audio::AudioStream *_bgSoundStream;
+ Audio::SoundHandle _omniTVSound;
+ Common::SeekableReadStream *_omniTVFile;
+
bool _omniTV;
bool _leftButtonDown;
bool _rightButtonDown;
diff --git a/engines/scumm/he/animation_he.cpp b/engines/scumm/he/animation_he.cpp
index da0855e1a3..3bc2f3e5d7 100644
--- a/engines/scumm/he/animation_he.cpp
+++ b/engines/scumm/he/animation_he.cpp
@@ -40,7 +40,7 @@ MoviePlayer::MoviePlayer(ScummEngine_v90he *vm, Audio::Mixer *mixer)
}
int MoviePlayer::getImageNum() {
- if (!_fd.isOpen())
+ if (!_fd)
return 0;
return _wizResNum;
}
@@ -48,7 +48,7 @@ int MoviePlayer::getImageNum() {
int MoviePlayer::load(const char *filename, int flags, int image) {
char videoName[100];
- if (_fd.isOpen()) {
+ if (_fd) {
closeFile();
}
@@ -66,7 +66,7 @@ int MoviePlayer::load(const char *filename, int flags, int image) {
debug(1, "Playing video %s", videoName);
// Skip sound tag
- _fd.readUint32BE();
+ _fd->readUint32BE();
if (flags & 2) {
_vm->_wiz->createWizEmptyImage(image, 0, 0, _width, _height);
@@ -85,7 +85,7 @@ int MoviePlayer::load(const char *filename, int flags, int image) {
}
void MoviePlayer::handleNextFrame() {
- if (_fd.isOpen() == false) {
+ if (_fd == false) {
return;
}
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp
index d66db9347d..4aad6194e9 100644
--- a/engines/sword1/animation.cpp
+++ b/engines/sword1/animation.cpp
@@ -410,7 +410,7 @@ bool MoviePlayerDXA::load(uint32 id) {
snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]);
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd.readUint32BE() != MKID_BE('NULL'))
+ if (_fd->readUint32BE() != MKID_BE('NULL'))
return false;
_frameWidth = getWidth();
_frameHeight = getHeight();
diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp
index 2eb24430c7..c3b20d9f57 100644
--- a/engines/sword2/animation.cpp
+++ b/engines/sword2/animation.cpp
@@ -518,7 +518,7 @@ bool MoviePlayerDXA::load() {
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd.readUint32BE() != MKID_BE('NULL'))
+ if (_fd->readUint32BE() != MKID_BE('NULL'))
return false;
_frameBuffer = _vm->_screen->getScreen();