From dfc7a242f55d78fc8a551fcef735f8b5b8e61235 Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Sun, 4 May 2008 02:26:25 +0000 Subject: Properly close the object videos when the objects are destroyed svn-id: r31856 --- engines/gob/inter_v2.cpp | 3 +++ engines/gob/mult.cpp | 11 +++++++++++ engines/gob/mult.h | 2 ++ engines/gob/mult_v1.cpp | 2 ++ 4 files changed, 18 insertions(+) diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 62b2f26c7b..be510df08a 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -880,6 +880,9 @@ void Inter_v2::o2_initMult() { if (_vm->_mult->_objects && (oldObjCount != _vm->_mult->_objCount)) { warning("Initializing new objects without having " "cleaned up the old ones at first"); + + _vm->_mult->clearObjectVideos(); + delete[] _vm->_mult->_objects; delete[] _vm->_mult->_renderObjs; delete[] _vm->_mult->_orderArray; diff --git a/engines/gob/mult.cpp b/engines/gob/mult.cpp index 924cc9a4a7..70b6d33136 100644 --- a/engines/gob/mult.cpp +++ b/engines/gob/mult.cpp @@ -36,6 +36,7 @@ #include "gob/scenery.h" #include "gob/sound.h" #include "gob/video.h" +#include "gob/videoplayer.h" namespace Gob { @@ -120,6 +121,8 @@ void Mult::freeAll(void) { } void Mult::freeMult() { + clearObjectVideos(); + delete[] _objects; delete[] _renderData; delete[] _renderObjs; @@ -198,6 +201,8 @@ void Mult::playMult(int16 startFrame, int16 endFrame, char checkEscape, if (!stopNoClear) { if (_animDataAllocated) { + clearObjectVideos(); + delete[] _objects; delete[] _renderData; delete[] _renderObjs; @@ -424,4 +429,10 @@ void Mult::doSoundAnim(bool &stop, int16 frame) { } } +void Mult::clearObjectVideos() { + for (int i = 0; i < _objCount; i++) + if (_objects[i].videoSlot > 0) + _vm->_vidPlayer->slotClose(_objects[i].videoSlot - 1); +} + } // End of namespace Gob diff --git a/engines/gob/mult.h b/engines/gob/mult.h index ccc87849df..c283191ec8 100644 --- a/engines/gob/mult.h +++ b/engines/gob/mult.h @@ -245,6 +245,8 @@ public: void playMult(int16 startFrame, int16 endFrame, char checkEscape, char handleMouse); + void clearObjectVideos(); + virtual void loadMult(int16 resId) = 0; virtual void freeMultKeys() = 0; virtual bool hasMultData(uint16 multIndex) = 0; diff --git a/engines/gob/mult_v1.cpp b/engines/gob/mult_v1.cpp index 4a5a817449..78071f1dd8 100644 --- a/engines/gob/mult_v1.cpp +++ b/engines/gob/mult_v1.cpp @@ -215,6 +215,8 @@ void Mult_v1::freeMultKeys() { delete[] _multData->sndKeys; if (_animDataAllocated) { + clearObjectVideos(); + delete[] _objects; delete[] _renderData; delete[] _animArrayX; -- cgit v1.2.3