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.cpp44
1 files changed, 32 insertions, 12 deletions
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index f57d5ecb0c..86a2a260de 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -346,28 +346,42 @@ void Mult_v2::freeMultKeys() {
_multData = 0;
}
-void Mult_v2::setMultData(uint16 multindex) {
- if (multindex > 7)
+bool Mult_v2::hasMultData(uint16 multIndex) {
+ if (multIndex > 7)
error("Multindex out of range");
- debugC(4, kDebugGameFlow, "Switching to mult %d", multindex);
- _multData = _multDatas[multindex];
+ return _multDatas[multIndex] != 0;
}
-void Mult_v2::multSub(uint16 multindex) {
+void Mult_v2::setMultData(uint16 multIndex) {
+ if (multIndex > 7)
+ error("Multindex out of range");
+
+ debugC(4, kDebugGameFlow, "Switching to mult %d", multIndex);
+ _multData = _multDatas[multIndex];
+}
+
+void Mult_v2::zeroMultData(uint16 multIndex) {
+ if (multIndex > 7)
+ error("Multindex out of range");
+
+ _multDatas[multIndex] = 0;
+}
+
+void Mult_v2::multSub(uint16 multIndex) {
uint16 flags;
int16 expr;
int16 index;
int16 startFrame, stopFrame, firstFrame;
- flags = multindex;
- multindex = (multindex >> 12) & 0xF;
+ flags = multIndex;
+ multIndex = (multIndex >> 12) & 0xF;
- if (multindex > 7)
+ if (multIndex > 7)
error("Multindex out of range");
- debugC(4, kDebugGameFlow, "Sub mult %d", multindex);
- _multData = _multDatas[multindex];
+ debugC(4, kDebugGameFlow, "Sub mult %d", multIndex);
+ _multData = _multDatas[multIndex];
if (!_multData) {
_vm->_parse->parseValExpr();
@@ -1074,13 +1088,19 @@ void Mult_v2::advanceObjects(int16 index) {
return;
for (int i = 0; i < 4; i++) {
+ int obj = _multData->animObjs[index][i];
+
if (_multData->animObjs[index][i] != -1) {
int keyIndex = _multData->animKeysIndices[index][i];
int count = _multData->animKeysCount[i];
for (int j = keyIndex; j < count; j++) {
+
+ if ((obj == -1) || (obj == 1024))
+ continue;
+
Mult_AnimKey &key = _multData->animKeys[i][j];
- Mult_Object &animObj = _objects[_multData->animObjs[index][i]];
+ Mult_Object &animObj = _objects[obj];
Mult_AnimData &animData = *(animObj.pAnimData);
if (key.frame > frame)
@@ -1122,7 +1142,7 @@ void Mult_v2::advanceObjects(int16 index) {
}
}
- if (_multData->animObjs[index][i] != -1) {
+ if (obj != -1) {
int keyIndex = _multData->imdKeysIndices[index][i];
int count = _multData->imdKeysCount[i];