aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/mult_v2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/mult_v2.cpp')
-rw-r--r--engines/gob/mult_v2.cpp38
1 files changed, 37 insertions, 1 deletions
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 79269a1100..e199df4a95 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -44,6 +44,21 @@ Mult_v2::Mult_v2(GobEngine *vm) : Mult_v1(vm) {
for (i = 0; i < 8; i++) _multDatas[i] = 0;
}
+Mult_v2::~Mult_v2() {
+ int i;
+
+ freeMultKeys();
+ for (i = 0; i < 8; i++) {
+ _multData2 = _multDatas[i];
+ freeMultKeys();
+ }
+
+ if (_orderArray)
+ delete[] _orderArray;
+ if (_renderData2)
+ delete[] _renderData2;
+}
+
void Mult_v2::loadMult(int16 resId) {
int16 i, j;
int8 index;
@@ -57,6 +72,7 @@ void Mult_v2::loadMult(int16 resId) {
index = (resId & 0x8000) ? *_vm->_global->_inter_execPtr++ : 0;
_multData2 = new Mult_Data;
+ memset(_multData2, 0, sizeof(Mult_Data));
// ---.
for (i = 0; i < 4; i++) {
@@ -372,11 +388,24 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,
_vm->_anim->_areaHeight = 200;
_objCount = 4;
+ if (_objects)
+ delete[] _objects;
+ if (_orderArray)
+ delete[] _orderArray;
+ if (_renderData)
+ delete[] _renderData;
+ if (_renderData2)
+ delete[] _renderData2;
+
_objects = new Mult_Object[_objCount];
+ memset(_objects, 0, _objCount * sizeof(Mult_Object));
_orderArray = new int8[_objCount];
+ memset(_orderArray, 0, _objCount * sizeof(int8));
_renderData = new int16[9 * _objCount];
+ memset(_renderData, 0, _objCount * 9 * sizeof(int16));
_renderData2 = new Mult_Object*[_objCount];
+ memset(_renderData2, 0, _objCount * sizeof(Mult_Object*));
_animArrayX = new int32[_objCount];
_animArrayY = new int32[_objCount];
@@ -485,7 +514,7 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,
_frame++;
_vm->_util->waitEndFrame();
- } while (stop == 0 && stopNoClear == 0);
+ } while (stop == 0 && stopNoClear == 0 && !_vm->_quitRequested);
if (stopNoClear == 0) {
if (_animDataAllocated) {
@@ -504,6 +533,9 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,
delete[] _animArrayData;
_animArrayData = 0;
+ delete[] _orderArray;
+ _orderArray = 0;
+
if (_vm->_anim->_animSurf)
_vm->_video->freeSurfDesc(_vm->_anim->_animSurf);
_vm->_anim->_animSurf = 0;
@@ -1348,6 +1380,10 @@ void Mult_v2::freeMultKeys(void) {
_animDataAllocated = 0;
}
+ for (i = 0; i < 8; i++)
+ if (_multDatas[i] == _multData2)
+ _multDatas[i] = 0;
+
delete _multData2;
_multData2 = 0;
}