diff options
author | Sven Hesse | 2006-06-10 14:37:48 +0000 |
---|---|---|
committer | Sven Hesse | 2006-06-10 14:37:48 +0000 |
commit | 897fa6a5a64a3424ae4ea83b1c7cad77ac7e8200 (patch) | |
tree | 527cb68aa7f5c9cff8f7f01038c4ef2c100db883 /engines/gob/mult_v2.cpp | |
parent | f5fdbcddfb54510ef9f44e4f57d68d84f9055757 (diff) | |
download | scummvm-rg350-897fa6a5a64a3424ae4ea83b1c7cad77ac7e8200.tar.gz scummvm-rg350-897fa6a5a64a3424ae4ea83b1c7cad77ac7e8200.tar.bz2 scummvm-rg350-897fa6a5a64a3424ae4ea83b1c7cad77ac7e8200.zip |
More stub-filling + small clean-up
svn-id: r23012
Diffstat (limited to 'engines/gob/mult_v2.cpp')
-rw-r--r-- | engines/gob/mult_v2.cpp | 208 |
1 files changed, 124 insertions, 84 deletions
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp index a1f80ea4e8..91b922dc7e 100644 --- a/engines/gob/mult_v2.cpp +++ b/engines/gob/mult_v2.cpp @@ -42,6 +42,7 @@ namespace Gob { Mult_v2::Mult_v2(GobEngine *vm) : Mult_v1(vm) { int i; + _renderData2 = 0; _multData2 = 0; for (i = 0; i < 8; i++) _multDatas[i] = 0; } @@ -147,9 +148,9 @@ void Mult_v2::loadMult(int16 resId) { } for (i = 0; i < 4; i++) { - _multData2->somepointer05size[i] = 0; - _multData2->somepointer05[i] = 0; - _multData2->somepointer05indices[i] = -1; + _multData2->someKeysCount[i] = 0; + _multData2->someKeys[i] = 0; + _multData2->someKeysIndices[i] = -1; for (j = 0; j < 4; j++) { _multData2->field_15F[i][j] = 0; @@ -284,11 +285,18 @@ void Mult_v2::loadMult(int16 resId) { _vm->_global->_inter_execPtr += size * 14; _dataPtr += 2; for (i = 0; i < 4; i++) { - _multData2->somepointer05size[i] = (int16)READ_LE_UINT16(_dataPtr); + _multData2->someKeysCount[i] = (int16)READ_LE_UINT16(_dataPtr); _dataPtr += 2; - _multData2->somepointer05[i] = new char[_multData2->somepointer05size[i] * 16]; - for (j = 0; j < _multData2->somepointer05size[i]; j++) { - memcpy(_multData2->somepointer05[i]+j*16, _dataPtr, 16); + _multData2->someKeys[i] = new Mult_SomeKey[_multData2->someKeysCount[i]]; + for (j = 0; j < _multData2->someKeysCount[i]; j++) { + _multData2->someKeys[i][j].frame = (int16)READ_LE_UINT16(_dataPtr); + _multData2->someKeys[i][j].field_2 = (int16)READ_LE_UINT16(_dataPtr + 2); + _multData2->someKeys[i][j].field_4 = (int16)READ_LE_UINT16(_dataPtr + 4); + _multData2->someKeys[i][j].field_6 = (int16)READ_LE_UINT16(_dataPtr + 6); + _multData2->someKeys[i][j].field_8 = (int16)READ_LE_UINT16(_dataPtr + 8); + _multData2->someKeys[i][j].field_A = (int16)READ_LE_UINT16(_dataPtr + 10); + _multData2->someKeys[i][j].field_C = (int16)READ_LE_UINT16(_dataPtr + 12); + _multData2->someKeys[i][j].field_E = (int16)READ_LE_UINT16(_dataPtr + 14); _dataPtr += 16; } } @@ -311,9 +319,9 @@ void Mult_v2::multSub(uint16 multindex) { uint16 flags; int16 expr; int16 textFrame; + int16 index; // di int i; int j; - int16 di; flags = multindex; multindex = (multindex >> 12) & 0xF; @@ -333,13 +341,13 @@ void Mult_v2::multSub(uint16 multindex) { } if (flags & 0x200) - di = 3; + index = 3; else if (flags & 0x100) - di = 2; + index = 2; else if (flags & 0x80) - di = 1; + index = 1; else - di = 0; + index = 0; if (flags & 0x400) { flags = 0x400; @@ -349,64 +357,78 @@ void Mult_v2::multSub(uint16 multindex) { flags &= 0x7F; } - _multData2->field_124[di][0] = flags; + _multData2->field_124[index][0] = flags; for (i = 1; i < 4; i++) { - _multData2->field_124[di][i] = _vm->_parse->parseValExpr(); + _multData2->field_124[index][i] = _vm->_parse->parseValExpr(); } expr = _vm->_parse->parseValExpr(); - _multData2->animKeysIndices1[di] = expr; - _multData2->animKeysIndices2[di] = expr; + _multData2->animKeysIndices1[index] = expr; + _multData2->animKeysIndices2[index] = expr; - WRITE_VAR(18 + di, expr); - if (expr == -1) { // loc_5D0E + WRITE_VAR(18 + index, expr); + if (expr == -1) { 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_124[index][i] != -1) && (_multData2->field_124[index][i] != 1024)) + _objects[_multData2->field_124[index][i]].pAnimData->animType = + _objects[_multData2->field_124[index][i]].pAnimData->field_17; + } else { if (_multData2->field_156 == 1) { - _multData2->field_157[di] = 32000; + _multData2->field_157[index] = 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; + if ((textFrame > _multData2->animKeysIndices2[index]) && + (textFrame < _multData2->field_157[index])) { + _multData2->field_157[index] = textFrame; } } } else { - _multData2->field_157[di] = 0; + _multData2->field_157[index] = 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 ((textFrame < _multData2->animKeysIndices2[index]) && + (textFrame > _multData2->field_157[index])) { + _multData2->field_157[index] = 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; + if ((_multData2->field_124[index][i] != -1) && (_multData2->field_124[index][i] != 1024)) + _objects[_multData2->field_124[index][i]].pAnimData->field_17 = + _objects[_multData2->field_124[index][i]].pAnimData->animType; } } - // loc_5FCF - for (i = 0; i < 4; i++ /* var_C += 2, var_E += 4*/) { - _multData2->field_15F[di][i] = 0; + + for (i = 0; i < 4; i++) { + _multData2->field_15F[index][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->animKeys[i][j].frame >= _multData2->animKeysIndices2[index]) + _multData2->field_15F[index][i] = j; } } + if (_multData2->field_156 == -1) { // loc_60CF - warning("Mult_v2::multSub(), somepointer05 and somepointer05indices"); + warning("Mult_v2::multSub(), someKeys and someKeysIndices"); } - // loc_6187 - warning("Mult_v2::multSub(), somepointer05"); - } - warning("GOB2 Stub! Mult_v2::multSub()"); + for (i = 0; i < 4; i++) { + _multData2->field_17F[index][i] = 0; + for (j = 0; j < _multData2->someKeysCount[i]; j++) { + if (_multData2->field_156 == 1) { + if (_multData2->someKeys[i][j].frame >= _multData2->animKeysIndices2[index]) { + _multData2->field_17F[index][i] = j; + break; + } + } else { + if (_multData2->someKeys[i][j].frame >= _multData2->field_157[index]) { + _multData2->field_17F[index][i] = j; + break; + } + } + } + } + } } void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape, @@ -445,8 +467,8 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape, delete[] _objects; if (_orderArray) delete[] _orderArray; - if (_renderData) - delete[] _renderData; +/* if (_renderData) + delete[] _renderData;*/ if (_renderData2) delete[] _renderData2; @@ -455,8 +477,8 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape, _orderArray = new int8[_objCount]; memset(_orderArray, 0, _objCount * sizeof(int8)); - _renderData = new int16[9 * _objCount]; - memset(_renderData, 0, _objCount * 9 * sizeof(int16)); +/* _renderData = new int16[9 * _objCount]; + memset(_renderData, 0, _objCount * 9 * sizeof(int16));*/ _renderData2 = new Mult_Object*[_objCount]; memset(_renderData2, 0, _objCount * sizeof(Mult_Object*)); @@ -464,6 +486,7 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape, _animArrayY = new int32[_objCount]; _animArrayData = new Mult_AnimData[_objCount]; + memset(_animArrayData, 0, _objCount * sizeof(Mult_AnimData)); for (_counter = 0; _counter < _objCount; _counter++) { multObj = &_objects[_counter]; @@ -784,9 +807,12 @@ void Mult_v2::doPalAnim(void) { off = palKey->subst[(_multData2->palAnimIndices[_index] + 1) % 16][_index] - 1; off2 = palKey->subst[_multData2->palAnimIndices[_index]][_index] - 1; - _vm->_global->_pPaletteDesc->vgaPal[off2].red = _vm->_global->_pPaletteDesc->vgaPal[off].red; - _vm->_global->_pPaletteDesc->vgaPal[off2].green = _vm->_global->_pPaletteDesc->vgaPal[off].green; - _vm->_global->_pPaletteDesc->vgaPal[off2].blue = _vm->_global->_pPaletteDesc->vgaPal[off].blue; + _vm->_global->_pPaletteDesc->vgaPal[off2].red = + _vm->_global->_pPaletteDesc->vgaPal[off].red; + _vm->_global->_pPaletteDesc->vgaPal[off2].green = + _vm->_global->_pPaletteDesc->vgaPal[off].green; + _vm->_global->_pPaletteDesc->vgaPal[off2].blue = + _vm->_global->_pPaletteDesc->vgaPal[off].blue; } _multData2->palAnimIndices[_index] = (_multData2->palAnimIndices[_index] + 1) % 16; @@ -897,7 +923,7 @@ char Mult_v2::doSoundAnim(char stop, int16 frame) { void Mult_v2::sub_62DD(int16 index) { Mult_Object *animObj; Mult_AnimKey *animKey; -// void *somep05, *somep05l; + Mult_SomeKey *someKey1, *someKey2; int16 frame; int16 layer; int16 layers; @@ -952,41 +978,41 @@ void Mult_v2::sub_62DD(int16 index) { } } if (_multData2->field_124[index][i] != -1) { - warning("GOB2 Stub! Messing about with _multData2->somepointer05"); - for (j = _multData2->field_17F[index][i]; j < _multData2->somepointer05size[i]; j++) { -/* - somep05 = &_multData2->somepointer05[i][j]; - somep05l = &_multData2->somepointer05[i][j-1]; - if (somep05->field_0 > frame) +// warning("GOB2 Stub! Messing about with _multData2->someKeys, %d, %d", _multData2->field_17F[index][i], _multData2->someKeysCount[i]); + for (j = _multData2->field_17F[index][i]; j < _multData2->someKeysCount[i]; j++) { + + someKey1 = &_multData2->someKeys[i][j]; + someKey2 = &_multData2->someKeys[i][j-1]; + if (someKey1->frame > frame) break; - else if (somep05->field_0 == frame) { - if (somep05->field_2 == -1) - _multData2->somepointer05indices[i] = -1; + else if (someKey1->frame == frame) { + if (someKey1->field_2 == -1) + _multData2->someKeysIndices[i] = -1; else { - _multData2->somepointer05indices[0] = -1; - _multData2->somepointer05indices[1] = -1; - _multData2->somepointer05indices[2] = -1; - _multData2->somepointer05indices[3] = -1; - if ((_multData2->field_156 == 1) || (somep05l->field_2 == 1)) - _multData2->somepointer05indices[i] = j; + _multData2->someKeysIndices[0] = -1; + _multData2->someKeysIndices[1] = -1; + _multData2->someKeysIndices[2] = -1; + _multData2->someKeysIndices[3] = -1; + if ((_multData2->field_156 == 1) || (someKey2->field_2 == 1)) + _multData2->someKeysIndices[i] = j; else if (_multData2->field_157[index] == frame) - _multData2->somepointer05indices[i] = -1; + _multData2->someKeysIndices[i] = -1; else - _multData2->somepointer05indices[i] = j - 1; + _multData2->someKeysIndices[i] = j - 1; } } -*/ + } } - if (_multData2->somepointer05indices[i] != -1) { + if (_multData2->someKeysIndices[i] != -1) { /* - int arg3 = frame - _multData2->somepointer05[i][_multData2->somepointer05indices[i]].field_0; + int arg3 = frame - _multData2->someKeys[i][_multData2->someKeysIndices[i]].field_0; int arg2 = _multData2->field_156; if ((arg2 != 1) && (--arg3 > 0)) arg3 = 0; - int arg1 = _multData2->somepointer05[i][_multData2->somepointer05indices[i]]; + int arg1 = _multData2->someKeys[i][_multData2->someKeysIndices[i]]; // somepointer09 is 14 bytes wide (surely a struct) - int arg0 = _multData2->somepointer09[-_multData2->somepointer05[i][_multData2->somepointer05indices[i]].field_2 - 2]; + int arg0 = _multData2->somepointer09[-_multData2->someKeys[i][_multData2->someKeysIndices[i]].field_2 - 2]; */ warning("GOB2 Stub! sub_1CBF8(arg0, arg1, arg2, arg3);"); } @@ -997,10 +1023,10 @@ void Mult_v2::sub_62DD(int16 index) { if (_multData2->field_156 == 1) { // loc_6809 frame++; if (_multData2->field_157[index] == (frame-1)) { - _multData2->somepointer05indices[0] = -1; - _multData2->somepointer05indices[1] = -1; - _multData2->somepointer05indices[2] = -1; - _multData2->somepointer05indices[3] = -1; + _multData2->someKeysIndices[0] = -1; + _multData2->someKeysIndices[1] = -1; + _multData2->someKeysIndices[2] = -1; + _multData2->someKeysIndices[3] = -1; frame = -1; for (i = 0; i < 4; i++) { if ((_multData2->field_124[index][i] == -1) || (_multData2->field_124[index][i] == 1024)) @@ -1012,10 +1038,10 @@ void Mult_v2::sub_62DD(int16 index) { } else { // loc_68F3 frame--; if (_multData2->field_157[index] == (frame+1)) { - _multData2->somepointer05indices[0] = -1; - _multData2->somepointer05indices[1] = -1; - _multData2->somepointer05indices[2] = -1; - _multData2->somepointer05indices[3] = -1; + _multData2->someKeysIndices[0] = -1; + _multData2->someKeysIndices[1] = -1; + _multData2->someKeysIndices[2] = -1; + _multData2->someKeysIndices[3] = -1; frame = -1; for (i = 0; i < 4; i++) { if ((_multData2->field_124[index][i] == -1) || (_multData2->field_124[index][i] == 1024)) @@ -1186,7 +1212,7 @@ void Mult_v2::animate(void) { if ((animObj1->pAnimData->order == animObj2->pAnimData->order) && ((animObj1->somethingBottom > animObj2->somethingBottom) || ((animObj1->somethingBottom == animObj2->somethingBottom) && - (animObj1->pAnimData->someFlag == 1)))) + (animObj1->pAnimData->isBusy == 1)))) SWAP(orderArray[i], orderArray[j]); } } @@ -1365,6 +1391,20 @@ void Mult_v2::playSound(Snd::SoundDesc * soundDesc, int16 repCount, int16 freq, } } +void Mult_v2::freeMult(void) { + if (_vm->_anim->_animSurf != 0) + delete _vm->_anim->_animSurf; + + delete[] _objects; + delete[] _renderData2; + delete[] _orderArray; + + _objects = 0; + _renderData2 = 0; + _orderArray = 0; + _vm->_anim->_animSurf = 0; +} + void Mult_v2::freeMultKeys(void) { int i; char animCount; @@ -1390,8 +1430,8 @@ void Mult_v2::freeMultKeys(void) { for (i = 0; i < 4; i++) { // loc_73BA delete[] _multData2->animKeys[i]; - if (_multData2->somepointer05[i] != 0) - delete[] _multData2->somepointer05[i]; + if (_multData2->someKeys[i] != 0) + delete[] _multData2->someKeys[i]; } delete[] _multData2->palFadeKeys; |