diff options
author | Sven Hesse | 2006-01-10 11:30:23 +0000 |
---|---|---|
committer | Sven Hesse | 2006-01-10 11:30:23 +0000 |
commit | 71af473b7601eff1640fc2f489760733ab712cb9 (patch) | |
tree | e9fd271aade20d383ce6ed445a9e9a80f69d2a64 /gob/goblin.cpp | |
parent | 17a9edaf25d9447d3f09d40207fc4994dc49a358 (diff) | |
download | scummvm-rg350-71af473b7601eff1640fc2f489760733ab712cb9.tar.gz scummvm-rg350-71af473b7601eff1640fc2f489760733ab712cb9.tar.bz2 scummvm-rg350-71af473b7601eff1640fc2f489760733ab712cb9.zip |
Moved Goblin::interFunc() to Inter_v1::o1_goblinFunc(), converting its switch() into an array of function pointers + lookup table
svn-id: r19969
Diffstat (limited to 'gob/goblin.cpp')
-rw-r--r-- | gob/goblin.cpp | 882 |
1 files changed, 0 insertions, 882 deletions
diff --git a/gob/goblin.cpp b/gob/goblin.cpp index 90a43fc4bd..19efa22f37 100644 --- a/gob/goblin.cpp +++ b/gob/goblin.cpp @@ -2376,886 +2376,4 @@ int16 Goblin::treatItem(int16 action) { } } -void Goblin::interFunc(void) { - int16 cmd; - int16 extraData = 0; - Gob_Object *objDesc = NULL; - Gob_Object *gobDesc; - int16 xPos; - int16 yPos; - int16 x; - int16 y; - int16 item; - int16 val; - int16 layer; - int16 state; - int32 *retVarPtr; - bool objDescSet = false; - - retVarPtr = (int32 *)VAR_ADDRESS(59); - - cmd = _vm->_inter->load16(); - _vm->_global->_inter_execPtr += 2; - if (cmd > 0 && cmd < 17) { - extraData = _vm->_inter->load16(); - objDesc = _objects[extraData]; - objDescSet = true; - extraData = _vm->_inter->load16(); - } - - if (cmd > 90 && cmd < 107) { - extraData = _vm->_inter->load16(); - objDesc = _goblins[extraData]; - objDescSet = true; - extraData = _vm->_inter->load16(); - cmd -= 90; - } - - if (cmd > 110 && cmd < 128) { - extraData = _vm->_inter->load16(); - objDesc = _goblins[extraData]; - objDescSet = true; - cmd -= 90; - } else if (cmd > 20 && cmd < 38) { - extraData = _vm->_inter->load16(); - objDesc = _objects[extraData]; - objDescSet = true; - } - -/* - NB: The original gobliiins engine did not initialize the objDesc - variable, so we manually check if objDesc is properly set before - checking if it is zero. If it was not set, we do not return. This - fixes a crash in the EGA version if the life bar is depleted, because - interFunc is called multiple times with cmd == 39. - Bug #1324814 -*/ - - - if (cmd < 40 && objDescSet && objDesc == 0) - return; - - debug(5, "cmd = %d", cmd); - switch (cmd) { - case 1: - objDesc->state = extraData; - - if (objDesc == _actDestItemDesc) - *_destItemStateVarPtr = extraData; - break; - - case 2: - objDesc->curFrame = extraData; - if (objDesc == _actDestItemDesc) - *_destItemFrameVarPtr = extraData; - break; - - case 3: - objDesc->nextState = extraData; - if (objDesc == _actDestItemDesc) - *_destItemNextStateVarPtr = extraData; - break; - - case 4: - objDesc->multState = extraData; - if (objDesc == _actDestItemDesc) - *_destItemMultStateVarPtr = extraData; - break; - - case 5: - objDesc->order = extraData; - if (objDesc == _actDestItemDesc) - *_destItemOrderVarPtr = extraData; - break; - - case 6: - objDesc->actionStartState = extraData; - if (objDesc == _actDestItemDesc) - *_destItemActStartStVarPtr = extraData; - break; - - case 7: - objDesc->curLookDir = extraData; - if (objDesc == _actDestItemDesc) - *_destItemLookDirVarPtr = extraData; - break; - - case 8: - objDesc->type = extraData; - if (objDesc == _actDestItemDesc) - *_destItemTypeVarPtr = extraData; - - if (extraData == 0) - objDesc->toRedraw = 1; - break; - - case 9: - objDesc->noTick = extraData; - if (objDesc == _actDestItemDesc) - *_destItemNoTickVarPtr = extraData; - break; - - case 10: - objDesc->pickable = extraData; - if (objDesc == _actDestItemDesc) - *_destItemPickableVarPtr = extraData; - break; - - case 12: - objDesc->xPos = extraData; - if (objDesc == _actDestItemDesc) - *_destItemScrXVarPtr = extraData; - break; - - case 13: - objDesc->yPos = extraData; - if (objDesc == _actDestItemDesc) - *_destItemScrYVarPtr = extraData; - break; - - case 14: - objDesc->doAnim = extraData; - if (objDesc == _actDestItemDesc) - *_destItemDoAnimVarPtr = extraData; - break; - - case 15: - objDesc->relaxTime = extraData; - if (objDesc == _actDestItemDesc) - *_destItemRelaxVarPtr = extraData; - break; - - case 16: - objDesc->maxTick = extraData; - if (objDesc == _actDestItemDesc) - *_destItemMaxTickVarPtr = extraData; - break; - - case 21: - *retVarPtr = objDesc->state; - break; - - case 22: - *retVarPtr = objDesc->curFrame; - break; - - case 23: - *retVarPtr = objDesc->nextState; - break; - - case 24: - *retVarPtr = objDesc->multState; - break; - - case 25: - *retVarPtr = objDesc->order; - break; - - case 26: - *retVarPtr = objDesc->actionStartState; - break; - - case 27: - *retVarPtr = objDesc->curLookDir; - break; - - case 28: - *retVarPtr = objDesc->type; - break; - - case 29: - *retVarPtr = objDesc->noTick; - break; - - case 30: - *retVarPtr = objDesc->pickable; - break; - - case 32: - *retVarPtr = getObjMaxFrame(objDesc); - break; - - case 33: - *retVarPtr = objDesc->xPos; - break; - - case 34: - *retVarPtr = objDesc->yPos; - break; - - case 35: - *retVarPtr = objDesc->doAnim; - break; - - case 36: - *retVarPtr = objDesc->relaxTime; - break; - - case 37: - *retVarPtr = objDesc->maxTick; - break; - - case 40: - case 42: - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - item = _vm->_inter->load16(); - - if (cmd == 42) { - xPos = VAR(xPos); - yPos = VAR(yPos); - item = VAR(item); - } - - for (y = 0; y < Map::kMapHeight; y++) { - for (x = 0; x < Map::kMapWidth; x++) { - if ((_vm->_map->_itemsMap[y][x] & 0xff) == item) { - _vm->_map->_itemsMap[y][x] &= 0xff00; - } else if (((_vm->_map->_itemsMap[y][x] & 0xff00) >> 8) - == item) { - _vm->_map->_itemsMap[y][x] &= 0xff; - } - } - } - - if (xPos < Map::kMapWidth - 1) { - if (yPos > 0) { - if ((_vm->_map->_itemsMap[yPos][xPos] & 0xff00) != 0 || - (_vm->_map->_itemsMap[yPos - 1][xPos] & 0xff00) != - 0 - || (_vm->_map->_itemsMap[yPos][xPos + - 1] & 0xff00) != 0 - || (_vm->_map->_itemsMap[yPos - 1][xPos + - 1] & 0xff00) != 0) { - - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff00) - + item; - - _vm->_map->_itemsMap[yPos - 1][xPos] = - (_vm->_map->_itemsMap[yPos - - 1][xPos] & 0xff00) + item; - - _vm->_map->_itemsMap[yPos][xPos + 1] = - (_vm->_map->_itemsMap[yPos][xPos + - 1] & 0xff00) + item; - - _vm->_map->_itemsMap[yPos - 1][xPos + 1] = - (_vm->_map->_itemsMap[yPos - 1][xPos + - 1] & 0xff00) + item; - } else { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff) + - (item << 8); - - _vm->_map->_itemsMap[yPos - 1][xPos] = - (_vm->_map->_itemsMap[yPos - - 1][xPos] & 0xff) + (item << 8); - - _vm->_map->_itemsMap[yPos][xPos + 1] = - (_vm->_map->_itemsMap[yPos][xPos + - 1] & 0xff) + (item << 8); - - _vm->_map->_itemsMap[yPos - 1][xPos + 1] = - (_vm->_map->_itemsMap[yPos - 1][xPos + - 1] & 0xff) + (item << 8); - } - } else { - if ((_vm->_map->_itemsMap[yPos][xPos] & 0xff00) != 0 || - (_vm->_map->_itemsMap[yPos][xPos + 1] & 0xff00) != - 0) { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff00) - + item; - - _vm->_map->_itemsMap[yPos][xPos + 1] = - (_vm->_map->_itemsMap[yPos][xPos + - 1] & 0xff00) + item; - } else { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff) + - (item << 8); - - _vm->_map->_itemsMap[yPos][xPos + 1] = - (_vm->_map->_itemsMap[yPos][xPos + - 1] & 0xff) + (item << 8); - } - } - } else { - if (yPos > 0) { - if ((_vm->_map->_itemsMap[yPos][xPos] & 0xff00) != 0 || - (_vm->_map->_itemsMap[yPos - 1][xPos] & 0xff00) != - 0) { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff00) - + item; - - _vm->_map->_itemsMap[yPos - 1][xPos] = - (_vm->_map->_itemsMap[yPos - - 1][xPos] & 0xff00) + item; - } else { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff) + - (item << 8); - - _vm->_map->_itemsMap[yPos - 1][xPos] = - (_vm->_map->_itemsMap[yPos - - 1][xPos] & 0xff) + (item << 8); - } - } else { - if ((_vm->_map->_itemsMap[yPos][xPos] & 0xff00) != 0) { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff00) - + item; - } else { - _vm->_map->_itemsMap[yPos][xPos] = - (_vm->_map->_itemsMap[yPos][xPos] & 0xff) + - (item << 8); - } - } - } - - if (item < 0 || item >= 20) - break; - - if (xPos > 1 && _vm->_map->_passMap[yPos][xPos - 2] == 1) { - _vm->_map->_itemPoses[item].x = xPos - 2; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = 4; - break; - } - - if (xPos < Map::kMapWidth - 2 && _vm->_map->_passMap[yPos][xPos + 2] == 1) { - _vm->_map->_itemPoses[item].x = xPos + 2; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = 0; - break; - } - - if (xPos < Map::kMapWidth - 1 && _vm->_map->_passMap[yPos][xPos + 1] == 1) { - _vm->_map->_itemPoses[item].x = xPos + 1; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = 0; - break; - } - - if (xPos > 0 && _vm->_map->_passMap[yPos][xPos - 1] == 1) { - _vm->_map->_itemPoses[item].x = xPos - 1; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = 4; - break; - } - break; - - case 41: - case 43: - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - - if (cmd == 43) { - xPos = VAR(xPos); - yPos = VAR(yPos); - } - - if ((_vm->_map->_itemsMap[yPos][xPos] & 0xff00) != 0) { - *retVarPtr = (_vm->_map->_itemsMap[yPos][xPos] & 0xff00) >> 8; - } else { - *retVarPtr = _vm->_map->_itemsMap[yPos][xPos]; - } - break; - - case 44: - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - val = _vm->_inter->load16(); - _vm->_map->_passMap[yPos][xPos] = val; - break; - - case 50: - item = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - - _gobPositions[item].x = xPos * 2; - _gobPositions[item].y = yPos * 2; - - objDesc = _goblins[item]; - objDesc->nextState = 21; - - nextLayer(objDesc); - - layer = objDesc->stateMach[objDesc->state][0]->layer; - - _vm->_scenery->updateAnim(layer, 0, objDesc->animation, 0, - objDesc->xPos, objDesc->yPos, 0); - - objDesc->yPos = - (_gobPositions[item].y * 6 + 6) - (_vm->_scenery->_toRedrawBottom - - _vm->_scenery->_animTop); - objDesc->xPos = - _gobPositions[item].x * 12 - (_vm->_scenery->_toRedrawLeft - - _vm->_scenery->_animLeft); - - objDesc->curFrame = 0; - objDesc->state = 21; - if (_currentGoblin == item) { - *_curGobScrXVarPtr = objDesc->xPos; - *_curGobScrYVarPtr = objDesc->yPos; - - *_curGobFrameVarPtr = 0; - *_curGobStateVarPtr = 18; - _pressedMapX = _gobPositions[item].x; - _pressedMapY = _gobPositions[item].y; - } - break; - - case 52: - item = _vm->_inter->load16(); - *retVarPtr = _gobPositions[item].x >> 1; - break; - - case 53: - item = _vm->_inter->load16(); - *retVarPtr = _gobPositions[item].y >> 1; - break; - - case 150: - item = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - - objDesc = _goblins[item]; - if (yPos == 0) { - objDesc->multState = xPos; - objDesc->nextState = xPos; - nextLayer(objDesc); - - layer = objDesc->stateMach[objDesc->state][0]->layer; - - objDesc->xPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]-> - posX; - objDesc->yPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]-> - posY; - - *_curGobScrXVarPtr = objDesc->xPos; - *_curGobScrYVarPtr = objDesc->yPos; - *_curGobFrameVarPtr = 0; - *_curGobStateVarPtr = objDesc->state; - *_curGobNextStateVarPtr = objDesc->nextState; - *_curGobMultStateVarPtr = objDesc->multState; - *_curGobMaxFrameVarPtr = - getObjMaxFrame(objDesc); - _noPick = 1; - break; - } - - objDesc->multState = 21; - objDesc->nextState = 21; - objDesc->state = 21; - nextLayer(objDesc); - layer = objDesc->stateMach[objDesc->state][0]->layer; - - _vm->_scenery->updateAnim(layer, 0, objDesc->animation, 0, - objDesc->xPos, objDesc->yPos, 0); - - objDesc->yPos = - (yPos * 6 + 6) - (_vm->_scenery->_toRedrawBottom - _vm->_scenery->_animTop); - objDesc->xPos = - xPos * 12 - (_vm->_scenery->_toRedrawLeft - _vm->_scenery->_animLeft); - - _gobPositions[item].x = xPos; - _pressedMapX = xPos; - _vm->_map->_curGoblinX = xPos; - - _gobPositions[item].y = yPos; - _pressedMapY = yPos; - _vm->_map->_curGoblinY = yPos; - - *_curGobScrXVarPtr = objDesc->xPos; - *_curGobScrYVarPtr = objDesc->yPos; - *_curGobFrameVarPtr = 0; - *_curGobStateVarPtr = 21; - *_curGobNextStateVarPtr = 21; - *_curGobMultStateVarPtr = -1; - _noPick = 0; - break; - - case 250: - item = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - - _gobPositions[item].x = xPos; - _gobPositions[item].y = yPos; - - objDesc = _goblins[item]; - objDesc->nextState = 21; - nextLayer(objDesc); - - layer = objDesc->stateMach[objDesc->state][0]->layer; - - _vm->_scenery->updateAnim(layer, 0, objDesc->animation, 0, - objDesc->xPos, objDesc->yPos, 0); - - objDesc->yPos = - (yPos * 6 + 6) - (_vm->_scenery->_toRedrawBottom - _vm->_scenery->_animTop); - objDesc->xPos = - xPos * 12 - (_vm->_scenery->_toRedrawLeft - _vm->_scenery->_animLeft); - - objDesc->curFrame = 0; - objDesc->state = 21; - - if (_currentGoblin == item) { - *_curGobScrXVarPtr = objDesc->xPos; - *_curGobScrYVarPtr = objDesc->yPos; - *_curGobFrameVarPtr = 0; - *_curGobStateVarPtr = 18; - - _pressedMapX = _gobPositions[item].x; - _pressedMapY = _gobPositions[item].y; - } - break; - - case 251: - item = _vm->_inter->load16(); - state = _vm->_inter->load16(); - - objDesc = _goblins[item]; - objDesc->nextState = state; - - nextLayer(objDesc); - layer = objDesc->stateMach[objDesc->state][0]->layer; - - objDesc->xPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]->posX; - objDesc->yPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]->posY; - - if (item == _currentGoblin) { - *_curGobScrXVarPtr = objDesc->xPos; - *_curGobScrYVarPtr = objDesc->yPos; - *_curGobFrameVarPtr = 0; - *_curGobStateVarPtr = objDesc->state; - *_curGobMultStateVarPtr = objDesc->multState; - } - break; - - case 252: - item = _vm->_inter->load16(); - state = _vm->_inter->load16(); - objDesc = _objects[item]; - - objDesc->nextState = state; - - nextLayer(objDesc); - layer = objDesc->stateMach[objDesc->state][0]->layer; - objDesc->xPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]->posX; - objDesc->yPos = - _vm->_scenery->_animations[objDesc->animation].layers[layer]->posY; - - objDesc->toRedraw = 1; - objDesc->type = 0; - if (objDesc == _actDestItemDesc) { - *_destItemScrXVarPtr = objDesc->xPos; - *_destItemScrYVarPtr = objDesc->yPos; - - *_destItemStateVarPtr = objDesc->state; - *_destItemNextStateVarPtr = -1; - *_destItemMultStateVarPtr = -1; - *_destItemFrameVarPtr = 0; - } - break; - - case 152: - item = _vm->_inter->load16(); - val = _vm->_inter->load16(); - objDesc = _objects[item]; - objDesc->unk14 = val; - break; - - case 200: - _itemIdInPocket = _vm->_inter->load16(); - break; - - case 201: - _itemIndInPocket = _vm->_inter->load16(); - break; - - case 202: - *retVarPtr = _itemIdInPocket; - break; - - case 203: - *retVarPtr = _itemIndInPocket; - break; - - case 204: - item = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - val = _vm->_inter->load16(); - - _vm->_map->_itemPoses[item].x = xPos; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = val; - break; - - case 500: - extraData = _vm->_inter->load16(); - objDesc = _objects[extraData]; - - objDesc->relaxTime--; - if (objDesc->relaxTime < 0 && - getObjMaxFrame(objDesc) == objDesc->curFrame) { - objDesc->relaxTime = _vm->_util->getRandom(100) + 50; - objDesc->curFrame = 0; - objDesc->toRedraw = 1; - } - break; - - case 502: - item = _vm->_inter->load16(); - *retVarPtr = _gobPositions[item].x; - break; - - case 503: - item = _vm->_inter->load16(); - *retVarPtr = _gobPositions[item].y; - break; - - case 600: - _pathExistence = 0; - break; - - case 601: - extraData = _vm->_inter->load16(); - _goblins[extraData]->visible = 1; - break; - - case 602: - extraData = _vm->_inter->load16(); - _goblins[extraData]->visible = 0; - break; - - case 603: - extraData = _vm->_inter->load16(); - item = _vm->_inter->load16(); - - objDesc = _objects[extraData]; - if (objIntersected(objDesc, _goblins[item]) != 0) - *retVarPtr = 1; - else - *retVarPtr = 0; - break; - - case 604: - extraData = _vm->_inter->load16(); - item = _vm->_inter->load16(); - - objDesc = _goblins[extraData]; - if (objIntersected(objDesc, _goblins[item]) != 0) - *retVarPtr = 1; - else - *retVarPtr = 0; - break; - - case 605: - item = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - yPos = _vm->_inter->load16(); - val = _vm->_inter->load16(); - - _vm->_map->_itemPoses[item].x = xPos; - _vm->_map->_itemPoses[item].y = yPos; - _vm->_map->_itemPoses[item].orient = val; - break; - - case 1000: - extraData = _vm->_inter->load16(); - if (_vm->_game->_extHandle >= 0) - _vm->_dataio->closeData(_vm->_game->_extHandle); - - loadObjects((char *)VAR_ADDRESS(extraData)); - _vm->_game->_extHandle = _vm->_dataio->openData(_vm->_game->_curExtFile); - break; - - case 1001: - freeAllObjects(); - break; - - case 1002: - animateObjects(); - break; - - case 1003: - drawObjects(); - - if (_vm->_features & GF_MAC) - _vm->_music->playBgMusic(); - else if (_vm->_cdrom->getTrackPos() == -1) - _vm->_cdrom->playBgMusic(); - break; - - case 1004: - _vm->_map->loadMapsInitGobs(); - break; - - case 1005: - extraData = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - - if ((uint16)VAR(xPos) == 0) { - item = - doMove(_goblins[_currentGoblin], 1, - (uint16)VAR(extraData)); - } else { - item = - doMove(_goblins[_currentGoblin], 1, 3); - } - - if (item != 0) - switchGoblin(item); - break; - - case 1006: - switchGoblin(0); - break; - - case 1008: - loadGobDataFromVars(); - break; - - case 1009: - extraData = _vm->_inter->load16(); - cmd = _vm->_inter->load16(); - xPos = _vm->_inter->load16(); - - if ((uint16)VAR(xPos) == 0) { - WRITE_VAR(cmd, treatItem((uint16)VAR(extraData))); - break; - } - - WRITE_VAR(cmd, treatItem(3)); - break; - - case 1010: - doMove(_goblins[_currentGoblin], 0, 0); - break; - - case 1011: - extraData = _vm->_inter->load16(); - if (VAR(extraData) != 0) - _goesAtTarget = 1; - else - _goesAtTarget = 0; - break; - - case 1015: - extraData = _vm->_inter->load16(); - extraData = VAR(extraData); - _objects[10]->xPos = extraData; - - extraData = _vm->_inter->load16(); - extraData = VAR(extraData); - _objects[10]->yPos = extraData; - break; - - case 2005: - gobDesc = _goblins[0]; - if (_currentGoblin != 0) { - _goblins[_currentGoblin]->doAnim = 1; - _goblins[_currentGoblin]->nextState = 21; - - nextLayer(_goblins[_currentGoblin]); - _currentGoblin = 0; - - gobDesc->doAnim = 0; - gobDesc->type = 0; - gobDesc->toRedraw = 1; - - _pressedMapX = _gobPositions[0].x; - _vm->_map->_destX = _gobPositions[0].x; - _gobDestX = _gobPositions[0].x; - - _pressedMapY = _gobPositions[0].y; - _vm->_map->_destY = _gobPositions[0].y; - _gobDestY = _gobPositions[0].y; - - *_curGobVarPtr = 0; - _pathExistence = 0; - _readyToAct = 0; - } - - if (gobDesc->state != 10 && _itemIndInPocket != -1 && - getObjMaxFrame(gobDesc) == gobDesc->curFrame) { - - gobDesc->stateMach = gobDesc->realStateMach; - xPos = _gobPositions[0].x; - yPos = _gobPositions[0].y; - - gobDesc->nextState = 10; - layer = nextLayer(gobDesc); - - _vm->_scenery->updateAnim(layer, 0, gobDesc->animation, 0, - gobDesc->xPos, gobDesc->yPos, 0); - - gobDesc->yPos = - (yPos * 6 + 6) - (_vm->_scenery->_toRedrawBottom - - _vm->_scenery->_animTop); - gobDesc->xPos = - xPos * 12 - (_vm->_scenery->_toRedrawLeft - _vm->_scenery->_animLeft); - } - - if (gobDesc->state != 10) - break; - - if (_itemIndInPocket == -1) - break; - - if (gobDesc->curFrame != 10) - break; - - objDesc = _objects[_itemIndInPocket]; - objDesc->type = 0; - objDesc->toRedraw = 1; - objDesc->curFrame = 0; - - objDesc->order = gobDesc->order; - objDesc->animation = - objDesc->stateMach[objDesc->state][0]->animation; - - layer = objDesc->stateMach[objDesc->state][0]->layer; - - _vm->_scenery->updateAnim(layer, 0, objDesc->animation, 0, - objDesc->xPos, objDesc->yPos, 0); - - objDesc->yPos += - (_gobPositions[0].y * 6 + 5) - _vm->_scenery->_toRedrawBottom; - - if (gobDesc->curLookDir == 4) { - objDesc->xPos += _gobPositions[0].x * 12 + 14 - - (_vm->_scenery->_toRedrawLeft + _vm->_scenery->_toRedrawRight) / 2; - } else { - objDesc->xPos += _gobPositions[0].x * 12 - - (_vm->_scenery->_toRedrawLeft + _vm->_scenery->_toRedrawRight) / 2; - } - - _itemIndInPocket = -1; - _itemIdInPocket = -1; - _vm->_util->beep(50); - break; - - default: - warning("interFunc: Unknown command %d!", cmd); - _vm->_global->_inter_execPtr -= 2; - cmd = _vm->_inter->load16(); - _vm->_global->_inter_execPtr += cmd * 2; - break; - } - return; -} - } // End of namespace Gob |