aboutsummaryrefslogtreecommitdiff
path: root/gob/goblin.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-01-10 11:30:23 +0000
committerSven Hesse2006-01-10 11:30:23 +0000
commit71af473b7601eff1640fc2f489760733ab712cb9 (patch)
treee9fd271aade20d383ce6ed445a9e9a80f69d2a64 /gob/goblin.cpp
parent17a9edaf25d9447d3f09d40207fc4994dc49a358 (diff)
downloadscummvm-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.cpp882
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