From bce47e7eb68d62476fd2fcd6cc4ec1bf33618d51 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sat, 16 May 2009 05:34:16 +0000 Subject: Add initial support for DOS non-interactive demos of The Feeble Files. svn-id: r40619 --- engines/agos/animation.cpp | 47 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 14 deletions(-) (limited to 'engines/agos/animation.cpp') diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index cf02286e3e..143c1d7cff 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -43,7 +43,7 @@ namespace AGOS { -MoviePlayer::MoviePlayer(AGOSEngine *vm) +MoviePlayer::MoviePlayer(AGOSEngine_Feeble *vm) : _vm(vm) { _mixer = _vm->_mixer; @@ -227,7 +227,7 @@ const char * MoviePlayerDXA::_sequenceList[90] = { "wurbatak" }; -MoviePlayerDXA::MoviePlayerDXA(AGOSEngine *vm, const char *name) +MoviePlayerDXA::MoviePlayerDXA(AGOSEngine_Feeble *vm, const char *name) : MoviePlayer(vm) { debug(0, "Creating DXA cutscene player"); @@ -316,18 +316,28 @@ void MoviePlayerDXA::startSound() { } void MoviePlayerDXA::nextFrame() { - if (_vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < (uint32)getCurFrame()) { + if (_bgSoundStream && _vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < (uint32)getCurFrame()) { copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); return; } if (getCurFrame() < getFrameCount()) { decodeNextFrame(); - copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); + if (_vm->_interactiveVideo == TYPE_OMNITV) { + copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); + } else if (_vm->_interactiveVideo == TYPE_LOOPING) { + copyFrameToBuffer(_vm->getBackBuf(), (_vm->_screenWidth - getWidth()) / 2, (_vm->_screenHeight - getHeight()) / 2, _vm->_screenWidth); + } } else { - closeFile(); - _vm->_omniTV = false; - _vm->_variableArray[254] = 6747; + if (_vm->_interactiveVideo == TYPE_OMNITV) { + closeFile(); + _vm->_interactiveVideo = 0; + _vm->_variableArray[254] = 6747; + } else if (_vm->_interactiveVideo == TYPE_LOOPING) { + _fileStream->seek(_videoInfo.frameOffs); + _videoInfo.currentFrame = 0; + startSound(); + } } } @@ -374,7 +384,7 @@ bool MoviePlayerDXA::processFrame() { // sync case for the subsequent frames. _ticks = _vm->_system->getMillis(); } else { - _ticks += getFrameDelay(); + _ticks += getFrameWaitTime(); while (_vm->_system->getMillis() < _ticks) _vm->_system->delayMillis(10); } @@ -392,7 +402,7 @@ bool MoviePlayerDXA::processFrame() { /////////////////////////////////////////////////////////////////////////////// -MoviePlayerSMK::MoviePlayerSMK(AGOSEngine *vm, const char *name) +MoviePlayerSMK::MoviePlayerSMK(AGOSEngine_Feeble *vm, const char *name) : MoviePlayer(vm), SmackerDecoder(vm->_mixer) { debug(0, "Creating SMK cutscene player"); @@ -436,11 +446,20 @@ void MoviePlayerSMK::handleNextFrame() { void MoviePlayerSMK::nextFrame() { if (getCurFrame() < getFrameCount()) { decodeNextFrame(); - copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); + if (_vm->_interactiveVideo == TYPE_OMNITV) { + copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth); + } else if (_vm->_interactiveVideo == TYPE_LOOPING) { + copyFrameToBuffer(_vm->getBackBuf(), (_vm->_screenWidth - getWidth()) / 2, (_vm->_screenHeight - getHeight()) / 2, _vm->_screenWidth); + } } else { - closeFile(); - _vm->_omniTV = false; - _vm->_variableArray[254] = 6747; + if (_vm->_interactiveVideo == TYPE_OMNITV) { + closeFile(); + _vm->_interactiveVideo = 0; + _vm->_variableArray[254] = 6747; + } else if (_vm->_interactiveVideo == TYPE_LOOPING) { + _fileStream->seek(_videoInfo.frameOffs); + _videoInfo.currentFrame = 0; + } } } @@ -481,7 +500,7 @@ bool MoviePlayerSMK::processFrame() { // Factory function for creating the appropriate cutscene player /////////////////////////////////////////////////////////////////////////////// -MoviePlayer *makeMoviePlayer(AGOSEngine *vm, const char *name) { +MoviePlayer *makeMoviePlayer(AGOSEngine_Feeble *vm, const char *name) { char baseName[40]; char filename[20]; -- cgit v1.2.3