aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/mult_v2.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-06-07 18:49:20 +0000
committerSven Hesse2006-06-07 18:49:20 +0000
commit34dae22c1a1db184c380f5b30ecde367f0d12485 (patch)
tree0a924639163fd5bf2e92b736ca6dd6deb4aab4e7 /engines/gob/mult_v2.cpp
parentd5255cd2ad62bc44194028f991024e0fbf46c7b3 (diff)
downloadscummvm-rg350-34dae22c1a1db184c380f5b30ecde367f0d12485.tar.gz
scummvm-rg350-34dae22c1a1db184c380f5b30ecde367f0d12485.tar.bz2
scummvm-rg350-34dae22c1a1db184c380f5b30ecde367f0d12485.zip
More goblin handling functions, now the deactivated goblin shows
his boredom. It's the wrong goblin that's deactivated, though. Also, the entering animation is still missing (now nothing is drawn instead). svn-id: r22979
Diffstat (limited to 'engines/gob/mult_v2.cpp')
-rw-r--r--engines/gob/mult_v2.cpp66
1 files changed, 55 insertions, 11 deletions
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index d26919d53a..a1f80ea4e8 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -35,6 +35,7 @@
#include "gob/palanim.h"
#include "gob/parse.h"
#include "gob/music.h"
+#include "gob/map.h"
namespace Gob {
@@ -309,7 +310,9 @@ void Mult_v2::setMultData(uint16 multindex) {
void Mult_v2::multSub(uint16 multindex) {
uint16 flags;
int16 expr;
+ int16 textFrame;
int i;
+ int j;
int16 di;
flags = multindex;
@@ -353,7 +356,56 @@ void Mult_v2::multSub(uint16 multindex) {
expr = _vm->_parse->parseValExpr();
_multData2->animKeysIndices1[di] = expr;
_multData2->animKeysIndices2[di] = expr;
- // loc_5D0E
+
+ WRITE_VAR(18 + di, expr);
+ if (expr == -1) { // loc_5D0E
+ if (_objects)
+ for (i = 0; i < 4; i++)
+ if ((_multData2->field_124[di][i] != -1) && (_multData2->field_124[di][i] != 1024))
+ _objects[_multData2->field_124[di][i]].pAnimData->animType =
+ _objects[_multData2->field_124[di][i]].pAnimData->field_17;
+ } else { // loc_5DDC
+ if (_multData2->field_156 == 1) {
+ _multData2->field_157[di] = 32000;
+ for (i = 0; i < _multData2->textKeysCount; i++) {
+ textFrame = _multData2->textKeys[i].frame;
+ if ((textFrame > _multData2->animKeysIndices2[di]) &&
+ (textFrame < _multData2->field_157[di])) {
+ _multData2->field_157[di] = textFrame;
+ }
+ }
+ } else {
+ _multData2->field_157[di] = 0;
+ for (i = 0; i < _multData2->textKeysCount; i++) {
+ textFrame = _multData2->textKeys[i].frame;
+ if ((textFrame < _multData2->animKeysIndices2[di]) &&
+ (textFrame > _multData2->field_157[di])) {
+ _multData2->field_157[di] = textFrame;
+ }
+ }
+ }
+ if (_objects) {
+ for (i = 0; i < 4; i++) {
+ if ((_multData2->field_124[di][i] != -1) && (_multData2->field_124[di][i] != 1024))
+ _objects[_multData2->field_124[di][i]].pAnimData->field_17 =
+ _objects[_multData2->field_124[di][i]].pAnimData->animType;
+ }
+ }
+ // loc_5FCF
+ for (i = 0; i < 4; i++ /* var_C += 2, var_E += 4*/) {
+ _multData2->field_15F[di][i] = 0;
+ for (j = 0; j < _multData2->animKeysCount[i]; j++) {
+ if (_multData2->animKeys[i][j].frame >= _multData2->animKeysIndices2[di])
+ _multData2->field_15F[di][i] = j;
+ }
+ }
+ if (_multData2->field_156 == -1) { // loc_60CF
+ warning("Mult_v2::multSub(), somepointer05 and somepointer05indices");
+ }
+ // loc_6187
+ warning("Mult_v2::multSub(), somepointer05");
+ }
+
warning("GOB2 Stub! Mult_v2::multSub()");
}
@@ -412,14 +464,6 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,
_animArrayY = new int32[_objCount];
_animArrayData = new Mult_AnimData[_objCount];
- // TODO: Delete that after the code that initializes these fields exists!
- int i;
- for (i = 0; i < _objCount; i++) {
- _animArrayData[i].field_13 = 0;
- _animArrayData[i].field_14 = 0;
- _animArrayData[i].field_17 = 0;
- }
- // ---'
for (_counter = 0; _counter < _objCount; _counter++) {
multObj = &_objects[_counter];
@@ -1277,9 +1321,9 @@ void Mult_v2::animate(void) {
}
}
else if (animData1->animType == 100)
- warning("GOB2 Stub! sub_10C87(animObj1);");
+ _vm->_goblin->moveAdvance(animObj1, 0, 0, 0);
else if (animData1->animType == 101)
- warning("GOB2 Stub! sub_11984(animObj1);");
+ _vm->_goblin->sub_11984(animObj1);
} else
animObj1->tick++;
}