diff options
author | Sven Hesse | 2006-06-07 18:49:20 +0000 |
---|---|---|
committer | Sven Hesse | 2006-06-07 18:49:20 +0000 |
commit | 34dae22c1a1db184c380f5b30ecde367f0d12485 (patch) | |
tree | 0a924639163fd5bf2e92b736ca6dd6deb4aab4e7 /engines/gob/mult_v2.cpp | |
parent | d5255cd2ad62bc44194028f991024e0fbf46c7b3 (diff) | |
download | scummvm-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.cpp | 66 |
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++; } |