diff options
Diffstat (limited to 'engines/hopkins/objects.cpp')
-rw-r--r-- | engines/hopkins/objects.cpp | 313 |
1 files changed, 150 insertions, 163 deletions
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 26c0d1c2a8..4c1b5949dc 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -278,7 +278,7 @@ void ObjectsManager::addObject(int objIndex) { for (;;) { ++arrIndex; if ((!_vm->_globals._inventory[arrIndex]) || (arrIndex == 32)) - break;; + break; } _vm->_globals._inventory[arrIndex] = objIndex; @@ -620,7 +620,7 @@ void ObjectsManager::hideBob(int idx) { _bob[idx].field0++; } -void ObjectsManager::BOB_OFFSET(int idx, int offset) { +void ObjectsManager::setBobOffset(int idx, int offset) { _bob[idx]._oldX2 = offset; } @@ -838,9 +838,9 @@ void ObjectsManager::computeSprite(int idx) { offY = getOffsetY(spr->_spriteData, spr->_spriteIndex, false); } - int tmpX = spr->field12 + offX; + int tmpX = spr->_deltaX + offX; int deltaX = tmpX; - int tmpY = spr->field14 + offY; + int tmpY = spr->_deltaY + offY; int deltaY = tmpY; int zoomPercent = 0; int reducePercent = 0; @@ -927,10 +927,7 @@ void ObjectsManager::displayBobAnim() { continue; _bob[idx].field1C = false; - int v1 = _bob[idx].field20; - if (v1 == -1) - v1 = 50; - if (_bob[idx]._animData == g_PTRNUL || _bob[idx]._disabledAnimationFl || v1 <= 0) { + if (_bob[idx]._animData == g_PTRNUL || _bob[idx]._disabledAnimationFl || _bob[idx].field20 == 0 || _bob[idx].field20 < -1) { if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) _bob[idx].field1C = true; continue; @@ -964,11 +961,9 @@ void ObjectsManager::displayBobAnim() { _bob[idx]._flipFl = (dataPtr[2 * dataIdx + 9] != 0); _bob[idx]._animDataIdx += 5; - int v5 = _bob[idx].field12; - if (v5 > 0) { - int v6 = v5 / _vm->_globals._speed; - _bob[idx].field12 = v5 / _vm->_globals._speed; - if (v6 > 0) { + if (_bob[idx].field12 > 0) { + _bob[idx].field12 /= _vm->_globals._speed; + if (_bob[idx].field12 > 0) { _bob[idx].field14 = 1; if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) _bob[idx].field1C = true; @@ -998,13 +993,11 @@ void ObjectsManager::displayBobAnim() { _bob[idx]._frameIndex = v21[8]; _bob[idx]._flipFl = (v21[9] != 0); _bob[idx]._animDataIdx += 5; - int v10 = _bob[idx].field12; - if (v10 > 0) { - int v11 = v10 / _vm->_globals._speed; - _bob[idx].field12 = v11; + if (_bob[idx].field12 > 0) { + _bob[idx].field12 /= _vm->_globals._speed; // Original code. It can't be negative, so the check is on == 0 - if (v11 <= 0) + if (_bob[idx].field12 <= 0) _bob[idx].field12 = 1; } } @@ -1058,13 +1051,13 @@ void ObjectsManager::displayBobAnim() { _bob[i]._oldY = 0; if (_bob[i].field0 == 10 && !_bob[i]._disabledAnimationFl && _bob[i].field1C) { CALCUL_BOB(i); - int v19 = _bob[i]._oldX2 + _bob[i]._oldHeight + _bob[i]._oldY; + int priority = _bob[i]._oldX2 + _bob[i]._oldHeight + _bob[i]._oldY; - if (v19 > 450) - v19 = 600; + if (priority > 450) + priority = 600; if (_bob[i]._activeFl) - beforeSort(SORT_BOB, i, v19); + beforeSort(SORT_BOB, i, priority); } } } @@ -1194,7 +1187,7 @@ void ObjectsManager::animateSprite(int idx) { _sprite[idx]._animationType = 1; } -void ObjectsManager::addStaticSprite(const byte *spriteData, Common::Point pos, int idx, int spriteIndex, int zoomFactor, bool flipFl, int a8, int a9) { +void ObjectsManager::addStaticSprite(const byte *spriteData, Common::Point pos, int idx, int spriteIndex, int zoomFactor, bool flipFl, int deltaX, int deltaY) { assert (idx <= MAX_SPRITE); SpriteItem *spr = &_sprite[idx]; @@ -1203,8 +1196,8 @@ void ObjectsManager::addStaticSprite(const byte *spriteData, Common::Point pos, spr->_spriteIndex = spriteIndex; spr->_zoomFactor = zoomFactor; spr->_flipFl = flipFl; - spr->field12 = a8; - spr->field14 = a9; + spr->_deltaX = deltaX; + spr->_deltaY = deltaY; spr->_animationType = 0; if (READ_BE_UINT24(spriteData) == MKTAG24('R', 'L', 'E')) { @@ -1296,7 +1289,7 @@ void ObjectsManager::GOHOME() { _vm->_globals._actionDirection = DIR_NONE; int zoneId; if (_vm->_globals._actionMoveTo) - zoneId = _vm->_globals._saveData->_data[svField2]; + zoneId = _vm->_globals._saveData->_data[svLastZoneNum]; else zoneId = _zoneNum; _vm->_linesManager._route = (RouteItem *)g_PTRNUL; @@ -1514,7 +1507,7 @@ void ObjectsManager::GOHOME() { if (newPosX == -1 && newPosY == -1) { int zoneId; if (_vm->_globals._actionMoveTo) - zoneId = _vm->_globals._saveData->_data[svField2]; + zoneId = _vm->_globals._saveData->_data[svLastZoneNum]; else zoneId = _zoneNum; setSpriteIndex(0, _vm->_globals._oldDirection + 59); @@ -1766,7 +1759,7 @@ void ObjectsManager::handleCityMap() { _vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0); for (int i = 0; i <= 4; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_globals.iRegul = 1; _vm->_graphicsManager.fadeInLong(); @@ -1777,15 +1770,17 @@ void ObjectsManager::handleCityMap() { do { int mouseButton = _vm->_eventsManager.getMouseButton(); if (mouseButton) { - if (_vm->_globals._saveData->_data[svField170] == 1 && !_vm->_globals._saveData->_data[svField171]) { - _vm->_globals._saveData->_data[svField171] = 1; + // First cop call : Go to the bank and free the hostages + if (_vm->_globals._saveData->_data[svBankAttackAnimPlayedFl] == 1 && !_vm->_globals._saveData->_data[svCopCall1PlayedFl]) { + _vm->_globals._saveData->_data[svCopCall1PlayedFl] = 1; _vm->_globals._introSpeechOffFl = true; _vm->_talkManager.startAnimatedCharacterDialogue("APPEL1.pe2"); _vm->_globals._introSpeechOffFl = false; mouseButton = 0; } - if (_vm->_globals._saveData->_data[svField80] == 1 && !_vm->_globals._saveData->_data[svField172]) { - _vm->_globals._saveData->_data[svField172] = 1; + // Second cop call: Helico has been found in the empty lot + if (_vm->_globals._saveData->_data[svFreedHostageFl] == 1 && !_vm->_globals._saveData->_data[svCopCall2PlayedFl]) { + _vm->_globals._saveData->_data[svCopCall2PlayedFl] = 1; _vm->_globals._introSpeechOffFl = true; _vm->_talkManager.startAnimatedCharacterDialogue("APPEL2.pe2"); _vm->_globals._introSpeechOffFl = false; @@ -1801,7 +1796,7 @@ void ObjectsManager::handleCityMap() { if (_vm->_linesManager._route == (RouteItem *)g_PTRNUL && _vm->_globals._actionMoveTo) PARADISE(); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (_vm->_globals._exitId) loopCond = true; @@ -1869,18 +1864,18 @@ void ObjectsManager::handleLeftButton() { return; int routeIdx = 0; do { - _vm->_linesManager.essai2[routeIdx] = _vm->_linesManager._route[routeIdx]; + _vm->_linesManager._testRoute2[routeIdx] = _vm->_linesManager._route[routeIdx]; ++routeIdx; } while (_vm->_linesManager._route[routeIdx]._x != -1); - _vm->_linesManager.essai2[routeIdx].invalidate();; + _vm->_linesManager._testRoute2[routeIdx].invalidate(); } if (_vm->_globals._actionMoveTo) { _vm->_linesManager.checkZone(); _vm->_globals._actionMoveTo = false; - _vm->_globals._saveData->_data[svField1] = 0; - _vm->_globals._saveData->_data[svField2] = 0; + _vm->_globals._saveData->_data[svLastMouseCursor] = 0; + _vm->_globals._saveData->_data[svLastZoneNum] = 0; } if (_vm->_globals._cityMapEnabledFl && (_vm->_eventsManager._mouseCursorId != 4 || _zoneNum <= 0)) @@ -1937,14 +1932,14 @@ void ObjectsManager::handleLeftButton() { if (_zoneNum != -1 && _zoneNum != 0) { if (_vm->_eventsManager._mouseCursorId == 23) - _vm->_globals._saveData->_data[svField1] = 5; + _vm->_globals._saveData->_data[svLastMouseCursor] = 5; else - _vm->_globals._saveData->_data[svField1] = _vm->_eventsManager._mouseCursorId; + _vm->_globals._saveData->_data[svLastMouseCursor] = _vm->_eventsManager._mouseCursorId; if (_vm->_globals._cityMapEnabledFl) - _vm->_globals._saveData->_data[svField1] = 6; - _vm->_globals._saveData->_data[svField2] = _zoneNum; - _vm->_globals._saveData->_data[svField3] = _curObjectIndex; + _vm->_globals._saveData->_data[svLastMouseCursor] = 6; + _vm->_globals._saveData->_data[svLastZoneNum] = _zoneNum; + _vm->_globals._saveData->_data[svLastObjectIndex] = _curObjectIndex; _vm->_globals._actionMoveTo = true; } _vm->_fontManager.hideText(5); @@ -1960,8 +1955,8 @@ void ObjectsManager::handleLeftButton() { } void ObjectsManager::PARADISE() { - char result = _vm->_globals._saveData->_data[svField1]; - if (result && _vm->_globals._saveData->_data[svField2] && result != 4 && result > 3) { + char result = _vm->_globals._saveData->_data[svLastMouseCursor]; + if (result && _vm->_globals._saveData->_data[svLastZoneNum] && result != 4 && result > 3) { _vm->_fontManager.hideText(5); if (!_forestFl || _zoneNum < 20 || _zoneNum > 23) { if (_vm->_graphicsManager._largeScreenFl) { @@ -1981,7 +1976,7 @@ void ObjectsManager::PARADISE() { if (_vm->_eventsManager.getMouseX() > _vm->_graphicsManager._scrollPosX + 620) _vm->_eventsManager.setMouseXY(_vm->_eventsManager._mousePos.x - 4, _vm->_eventsManager.getMouseY()); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } while (!loopCond && _vm->_eventsManager._startPos.x > getSpriteX(0) - 320); } else if (_vm->_eventsManager._startPos.x + 320 - getSpriteX(0) < -160) { bool loopCond = false; @@ -1998,30 +1993,30 @@ void ObjectsManager::PARADISE() { if (_vm->_eventsManager.getMouseX() < _vm->_graphicsManager._scrollPosX + 10) _vm->_eventsManager.setMouseXY(_vm->_eventsManager._mousePos.x + 4, _vm->_eventsManager.getMouseY()); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } while (!loopCond && _vm->_eventsManager._startPos.x < getSpriteX(0) - 320); } if (_vm->_eventsManager.getMouseX() > _vm->_graphicsManager._scrollPosX + 620) _vm->_eventsManager.setMouseXY(_vm->_graphicsManager._scrollPosX + 610, 0); if (_vm->_eventsManager.getMouseX() < _vm->_graphicsManager._scrollPosX + 10) _vm->_eventsManager.setMouseXY(_vm->_graphicsManager._scrollPosX + 10, 0); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_graphicsManager._scrollStatus = 0; } - _vm->_talkManager.REPONSE(_vm->_globals._saveData->_data[svField2], _vm->_globals._saveData->_data[svField1]); + _vm->_talkManager.REPONSE(_vm->_globals._saveData->_data[svLastZoneNum], _vm->_globals._saveData->_data[svLastMouseCursor]); } else { - _vm->_talkManager.REPONSE2(_vm->_globals._saveData->_data[svField2], _vm->_globals._saveData->_data[svField1]); + _vm->_talkManager.REPONSE2(_vm->_globals._saveData->_data[svLastZoneNum], _vm->_globals._saveData->_data[svLastMouseCursor]); } _vm->_eventsManager.changeMouseCursor(4); if (_zoneNum != -1 && _zoneNum != 0 && !_vm->_linesManager.ZONEP[_zoneNum]._enabledFl) { _zoneNum = -1; _forceZoneFl = true; } - if (_zoneNum != _vm->_globals._saveData->_data[svField2] || _zoneNum == -1 || _zoneNum == 0) { + if (_zoneNum != _vm->_globals._saveData->_data[svLastZoneNum] || _zoneNum == -1 || _zoneNum == 0) { _vm->_eventsManager._mouseCursorId = 4; _changeVerbFl = false; } else { - _vm->_eventsManager._mouseCursorId = _vm->_globals._saveData->_data[svField1]; + _vm->_eventsManager._mouseCursorId = _vm->_globals._saveData->_data[svLastMouseCursor]; if (_changeVerbFl) { nextVerbIcon(); _changeVerbFl = false; @@ -2032,8 +2027,8 @@ void ObjectsManager::PARADISE() { if (_vm->_eventsManager._mouseCursorId != 23) _vm->_eventsManager.changeMouseCursor(_vm->_eventsManager._mouseCursorId); _zoneNum = 0; - _vm->_globals._saveData->_data[svField1] = 0; - _vm->_globals._saveData->_data[svField2] = 0; + _vm->_globals._saveData->_data[svLastMouseCursor] = 0; + _vm->_globals._saveData->_data[svLastZoneNum] = 0; } if (_vm->_globals._cityMapEnabledFl) { _vm->_eventsManager._mouseCursorId = 0; @@ -2075,8 +2070,8 @@ void ObjectsManager::clearScreen() { _vm->_globals.SPRITE_ECRAN = _vm->_globals.freeMemory(_vm->_globals.SPRITE_ECRAN); _vm->_eventsManager._startPos.x = 0; _vm->_eventsManager._mouseSpriteId = 0; - _vm->_globals._saveData->_data[svField1] = 0; - _vm->_globals._saveData->_data[svField2] = 0; + _vm->_globals._saveData->_data[svLastMouseCursor] = 0; + _vm->_globals._saveData->_data[svLastZoneNum] = 0; _vm->_globals._actionMoveTo = false; _forceZoneFl = true; _changeVerbFl = false; @@ -2181,21 +2176,21 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha switch (newCharacter) { case CHARACTER_HOPKINS: - _vm->_globals._saveData->_data[svField121] = 0; + _vm->_globals._saveData->_data[svHopkinsCloneFl] = 0; _vm->_globals._saveData->_data[svField354] = 0; _vm->_globals._saveData->_data[svField356] = 0; _vm->_globals._saveData->_data[svField357] = 1; _vm->_globals._exitId = _vm->_globals._saveData->_realHopkins._location; break; case CHARACTER_HOPKINS_CLONE: - _vm->_globals._saveData->_data[svField121] = 1; + _vm->_globals._saveData->_data[svHopkinsCloneFl] = 1; _vm->_globals._saveData->_data[svField354] = 1; _vm->_globals._saveData->_data[svField356] = 0; _vm->_globals._saveData->_data[svField357] = 0; _vm->_globals._exitId = _vm->_globals._saveData->_cloneHopkins._location; break; case CHARACTER_SAMANTHA: - _vm->_globals._saveData->_data[svField121] = 0; + _vm->_globals._saveData->_data[svHopkinsCloneFl] = 0; _vm->_globals._saveData->_data[svField354] = 0; _vm->_globals._saveData->_data[svField356] = 1; _vm->_globals._saveData->_data[svField357] = 0; @@ -2535,7 +2530,7 @@ void ObjectsManager::OPTI_OBJET() { int lastOpcodeResult = 1; file = "OBJET1.ini"; - data = _vm->_fileManager.searchCat(file, 1); + data = _vm->_fileManager.searchCat(file, RES_INI); if (data == g_PTRNUL) { data = _vm->_fileManager.loadFile(file); if (data == g_PTRNUL) @@ -2613,7 +2608,7 @@ void ObjectsManager::handleSpecialGames() { memcpy(_vm->_graphicsManager._vesaBuffer, _vm->_graphicsManager._vesaScreen, 614399); _vm->_graphicsManager._scrollStatus = 0; - _vm->_graphicsManager.DD_VBL(); + _vm->_graphicsManager.updateScreen(); break; case 20: _vm->_globals._saveData->_data[svField132] = (getSpriteX(0) > 65 && getSpriteX(0) <= 124 && getSpriteY(0) > 372 && getSpriteY(0) <= 398) ? 1 : 0; @@ -2685,7 +2680,7 @@ void ObjectsManager::handleSpecialGames() { _vm->_globals._disableInventFl = true; do - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); while (getBobAnimDataIdx(8) != 3); _vm->_globals._introSpeechOffFl = true; _vm->_talkManager.startAnimatedCharacterDialogue("GM3.PE2"); @@ -2757,34 +2752,34 @@ void ObjectsManager::doActionBack(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 8, false); break; case 2: - SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,-1,", 8, false); break; case 3: - SPACTION1(_gestureBuf, "12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8); break; case 4: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,8,9,10,11,12,13,12,11,12,13,12,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,8,9,10,11,12,13,12,11,12,13,12,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8, false); break; case 5: - SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 8, false); break; case 6: - SPACTION1(_gestureBuf, "20,19,18,17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "20,19,18,17,16,15,-1,", 8); break; case 7: - SPACTION(_gestureBuf, "15,16,17,18,19,20,21,22,23,24,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,19,20,21,22,23,24,-1,", 8, false); break; case 8: - SPACTION1(_gestureBuf, "23,22,21,20,19,18,17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "23,22,21,20,19,18,17,16,15,-1,", 8); break; case 9: - SPACTION(_gestureBuf, "15,16,17,18,19,20,21,22,23,24,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,19,20,21,22,23,24,-1,", 8, false); break; case 10: - SPACTION1(_gestureBuf, "23,22,21,20,19,18,17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "23,22,21,20,19,18,17,16,15,-1,", 8); break; } } @@ -2798,34 +2793,34 @@ void ObjectsManager::doActionRight(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 8, false); break; case 2: - SPACTION(_gestureBuf, "1,2,3,4,5,6,7,8,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "1,2,3,4,5,6,7,8,-1,", 8, false); break; case 3: - SPACTION1(_gestureBuf, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 8); break; case 4: - ACTION(_gestureBuf, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 8, false); break; case 5: - SPACTION(_gestureBuf, "23,24,25,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "23,24,25,-1,", 8, false); break; case 6: - SPACTION1(_gestureBuf, "24,,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "24,,23,-1,", 8); break; case 7: - SPACTION(_gestureBuf, "23,24,25,26,27,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "23,24,25,26,27,-1,", 8, false); break; case 8: - SPACTION1(_gestureBuf, "26,25,24,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "26,25,24,23,-1,", 8); break; case 9: - SPACTION(_gestureBuf, "23,24,25,26,27,28,29,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "23,24,25,26,27,28,29,-1,", 8, false); break; case 10: - SPACTION1(_gestureBuf, "28,27,26,25,24,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "28,27,26,25,24,23,-1,", 8); break; } } @@ -2839,34 +2834,34 @@ void ObjectsManager::doActionDiagRight(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 8, false); break; case 2: - SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 8, false); break; case 3: - SPACTION1(_gestureBuf, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8); break; case 4: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8, false); break; case 5: - SPACTION(_gestureBuf, "15,16,17,18,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,-1,", 8, false); break; case 6: - SPACTION1(_gestureBuf, "17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "17,16,15,-1,", 8); break; case 7: - SPACTION(_gestureBuf, "15,16,17,18,19,20-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,19,20-1,", 8, false); break; case 8: - SPACTION1(_gestureBuf, "19,18,17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "19,18,17,16,15,-1,", 8); break; case 9: - SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 8, false); break; case 10: - SPACTION1(_gestureBuf, "20,19,18,17,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "20,19,18,17,15,-1,", 8); break; } } @@ -2880,16 +2875,16 @@ void ObjectsManager::doActionFront(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,9,9,9,9,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,9,9,9,9,9,7,6,5,4,3,2,1,0,-1,", 8, false); break; case 2: - SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,-1,", 0, 0, 8, false); + SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,-1,", 8, false); break; case 3: - SPACTION1(_gestureBuf, "14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 8); break; case 4: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, false); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 8, false); break; } } @@ -2903,34 +2898,34 @@ void ObjectsManager::doActionDiagLeft(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, true); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 8, true); break; case 2: - SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 8, true); break; case 3: - SPACTION1(_gestureBuf, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8); break; case 4: - ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, true); + ACTION(_gestureBuf, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 8, true); break; case 5: - SPACTION(_gestureBuf, "15,16,17,18,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "15,16,17,18,-1,", 8, true); break; case 6: - SPACTION1(_gestureBuf, "17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "17,16,15,-1,", 8); break; case 7: - SPACTION(_gestureBuf, "15,16,17,18,19,20,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "15,16,17,18,19,20,-1,", 8, true); break; case 8: - SPACTION1(_gestureBuf, "19,18,17,16,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "19,18,17,16,15,-1,", 8); break; case 9: - SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "15,16,17,18,19,20,21,-1,", 8, true); break; case 10: - SPACTION1(_gestureBuf, "20,19,18,17,15,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "20,19,18,17,15,-1,", 8); break; } } @@ -2944,34 +2939,34 @@ void ObjectsManager::doActionLeft(int idx) { switch (idx) { case 1: - ACTION(_gestureBuf, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 0, 0, 8, true); + ACTION(_gestureBuf, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 8, true); break; case 2: - SPACTION(_gestureBuf, "1,2,3,4,5,6,7,8,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "1,2,3,4,5,6,7,8,-1,", 8, true); break; case 3: - SPACTION1(_gestureBuf, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 8); break; case 4: - ACTION(_gestureBuf, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 0, 0, 8, true); + ACTION(_gestureBuf, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 8, true); break; case 5: - SPACTION(_gestureBuf, "23,24,25,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "23,24,25,-1,", 8, true); break; case 6: - SPACTION1(_gestureBuf, "24,,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "24,,23,-1,", 8); break; case 7: - SPACTION(_gestureBuf, "23,24,25,26,27,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "23,24,25,26,27,-1,", 8, true); break; case 8: - SPACTION1(_gestureBuf, "26,25,24,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "26,25,24,23,-1,", 8); break; case 9: - SPACTION(_gestureBuf, "23,24,25,26,27,28,29,-1,", 0, 0, 8, true); + SPACTION(_gestureBuf, "23,24,25,26,27,28,29,-1,", 8, true); break; case 10: - SPACTION1(_gestureBuf, "28,27,26,25,24,23,-1,", 0, 0, 8); + SPACTION1(_gestureBuf, "28,27,26,25,24,23,-1,", 8); break; } } @@ -2985,7 +2980,7 @@ void ObjectsManager::OPTI_ONE(int idx, int animIdx, int destPosi, int animAction // Make Hopkins walk to the expected place do { - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } while (destPosi != getBobAnimDataIdx(idx)); if (!animAction) @@ -2994,7 +2989,7 @@ void ObjectsManager::OPTI_ONE(int idx, int animIdx, int destPosi, int animAction _vm->_graphicsManager.fastDisplay(_bob[idx]._spriteData, _bob[idx]._oldX, _bob[idx]._oldY, _bob[idx]._frameIndex); stopBobAnimation(idx); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } } @@ -3047,7 +3042,7 @@ int ObjectsManager::getBobFrameIndex(int idx) { void ObjectsManager::loadLinkFile(const Common::String &file) { Common::File f; Common::String filename = file + ".LNK"; - byte *ptr = _vm->_fileManager.searchCat(filename, 3); + byte *ptr = _vm->_fileManager.searchCat(filename, RES_LIN); size_t nbytes = _vm->_globals._catalogSize; if (ptr == g_PTRNUL) { if (!f.open(filename)) @@ -3068,7 +3063,7 @@ void ObjectsManager::loadLinkFile(const Common::String &file) { Common::String filename2 = Common::String((const char *)ptr + 1000); if (!filename2.empty()) { - _vm->_globals._hidingItemData[1] = _vm->_fileManager.searchCat(filename2, 8); + _vm->_globals._hidingItemData[1] = _vm->_fileManager.searchCat(filename2, RES_SLI); if (_vm->_globals._hidingItemData[1] || _vm->_globals._hidingItemData[1] == g_PTRNUL) { _vm->_globals._hidingItemData[1] = _vm->_fileManager.loadFile(filename2); @@ -3152,22 +3147,23 @@ void ObjectsManager::loadLinkFile(const Common::String &file) { } int curLineIdx = 0; - int v28; - do { - v28 = READ_LE_INT16(curDataPtr + 2 * curDataIdx); - if (v28 != -1) { + for (;;) { + int bobZoneId = READ_LE_INT16(curDataPtr + 2 * curDataIdx); + if (bobZoneId != -1) { _vm->_linesManager.addZoneLine( curLineIdx, READ_LE_INT16(curDataPtr + 2 * curDataIdx + 2), READ_LE_INT16(curDataPtr + 2 * curDataIdx + 4), READ_LE_INT16(curDataPtr + 2 * curDataIdx + 6), READ_LE_INT16(curDataPtr + 2 * curDataIdx + 8), - v28); - _vm->_linesManager.ZONEP[v28]._enabledFl = true; + bobZoneId); + _vm->_linesManager.ZONEP[bobZoneId]._enabledFl = true; } curDataIdx += 5; ++curLineIdx; - } while (v28 != -1); + if (bobZoneId == -1) + break; + } for (int i = 1; i <= 100; i++) { _vm->_linesManager.ZONEP[i]._destX = READ_LE_INT16(curDataPtr + 2 * curDataIdx); _vm->_linesManager.ZONEP[i]._destY = READ_LE_INT16(curDataPtr + 2 * curDataIdx + 2); @@ -3201,7 +3197,7 @@ void ObjectsManager::loadLinkFile(const Common::String &file) { _vm->_globals.freeMemory(ptr); } -void ObjectsManager::SPECIAL_INI() { +void ObjectsManager::sceneSpecialIni() { switch (_vm->_globals._screenId) { case 17: if (_vm->_globals._prevScreenId == 20) { @@ -3211,11 +3207,11 @@ void ObjectsManager::SPECIAL_INI() { _vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100); _vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0); for (int i = 0; i <= 4; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_graphicsManager.fadeInLong(); animateSprite(0); for (int i = 0; i <= 4; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); VBOB(_vm->_globals.SPRITE_ECRAN, 5, 15, 28, 1); _vm->_fontManager.hideText(9); bool displayedTxtFl = false; @@ -3231,12 +3227,12 @@ void ObjectsManager::SPECIAL_INI() { _vm->_globals._saveData->_data[svField320] = 1; if (_vm->_soundManager._voiceOffFl) { for (int i = 0; i <= 199; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } _vm->_fontManager.hideText(9); VBOB_OFF(5); for (int i = 0; i <= 3; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_graphicsManager._noFadingFl = true; _vm->_globals._disableInventFl = false; } @@ -3246,7 +3242,7 @@ void ObjectsManager::SPECIAL_INI() { if (_vm->_globals._prevScreenId == 17) { _vm->_eventsManager._mouseSpriteId = 4; for (int i = 0; i <= 4; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_graphicsManager.fadeInLong(); _vm->_globals.iRegul = 1; _vm->_globals._disableInventFl = false; @@ -3281,14 +3277,14 @@ void ObjectsManager::SPECIAL_INI() { _vm->_linesManager.ZONEP[21]._messageId = 30; _vm->_linesManager.ZONEP[22]._messageId = 30; _vm->_linesManager.ZONEP[23]._messageId = 30; - for (int i = 200; i <= 214; i++) { + for (int i = svField200; i <= svField214; i++) { if (_vm->_globals._saveData->_data[i] != 2) _vm->_globals._saveData->_data[i] = 0; } break; case 73: - if (!_vm->_globals._saveData->_data[svField318]) { + if (!_vm->_globals._saveData->_data[svSecondElevatorAvailableFl]) { _vm->_globals.resetHidingUseCount(0); _vm->_globals.resetHidingUseCount(1); } @@ -3316,7 +3312,7 @@ void ObjectsManager::OPTI_BOBON(int idx1, int idx2, int idx3, int anim1Idx, int setBobAnimDataIdx(idx3, anim3Idx); } -void ObjectsManager::SCI_OPTI_ONE(int idx, int animIdx, int a3, int a4) { +void ObjectsManager::SCI_OPTI_ONE(int idx, int animIdx, int animDataIdx, int a4) { _vm->_eventsManager._curMouseButton = 0; _vm->_eventsManager._mouseButton = 0; @@ -3326,10 +3322,10 @@ void ObjectsManager::SCI_OPTI_ONE(int idx, int animIdx, int a3, int a4) { } do { - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (_vm->_eventsManager._curMouseButton) break; - } while (a3 != getBobAnimDataIdx(idx)); + } while (animDataIdx != getBobAnimDataIdx(idx)); if (!a4) stopBobAnimation(idx); } @@ -3444,7 +3440,7 @@ void ObjectsManager::enableVerb(int idx, int a2) { } } -void ObjectsManager::ACTION(const byte *spriteData, const Common::String &actionStr, int a3, int a4, int speed, bool flipFl) { +void ObjectsManager::ACTION(const byte *spriteData, const Common::String &actionStr, int speed, bool flipFl) { Common::String tmpStr = ""; int realSpeed = speed; if (_vm->_globals._speed == 2) @@ -3454,8 +3450,6 @@ void ObjectsManager::ACTION(const byte *spriteData, const Common::String &action const byte *oldSpriteData = _sprite[0]._spriteData; int spriteIndex = _sprite[0]._spriteIndex; bool oldFlipFl = _sprite[0]._flipFl; - _sprite[0].field12 += a3; - _sprite[0].field14 += a4; _sprite[0]._flipFl = flipFl; int idx = 0; @@ -3474,22 +3468,20 @@ void ObjectsManager::ACTION(const byte *spriteData, const Common::String &action if (idx == -1) { _sprite[0]._spriteData = oldSpriteData; _sprite[0]._spriteIndex = spriteIndex; - _sprite[0].field12 -= a3; - _sprite[0].field14 -= a4; _sprite[0]._flipFl = oldFlipFl; } else { _sprite[0]._spriteData = spriteData; _sprite[0]._spriteIndex = idx; } for (int i = 0; i < realSpeed; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (idx == -1) break; } } } -void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationSeq, int a3, int a4, int speed, bool flipFl) { +void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationSeq, int speed, bool flipFl) { Common::String tmpStr = ""; int realSpeed = speed; @@ -3501,8 +3493,6 @@ void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationS _oldSpriteData = _sprite[0]._spriteData; _oldSpriteIndex = _sprite[0]._spriteIndex; _oldFlipFl = _sprite[0]._flipFl; - _sprite[0].field12 += a3; - _sprite[0].field14 += a4; _sprite[0]._flipFl = flipFl; uint strPos = 0; @@ -3529,11 +3519,11 @@ void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationS _sprite[0]._spriteIndex = spriteIndex; } for (int i = 0; i < realSpeed; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } while (spriteIndex != -1); } -void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animString, int a3, int a4, int speed) { +void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animString, int speed) { Common::String tmpStr = ""; int realSpeed = speed; if (_vm->_globals._speed == 2) @@ -3560,8 +3550,6 @@ void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animStrin if (spriteIndex == -1) { _sprite[0]._spriteData = _oldSpriteData; _sprite[0]._spriteIndex = _oldSpriteIndex; - _sprite[0].field12 -= a3; - _sprite[0].field14 -= a4; _sprite[0]._flipFl = _oldFlipFl; } else { _sprite[0]._spriteData = spriteData; @@ -3569,7 +3557,7 @@ void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animStrin } for (int i = 0; i < realSpeed; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (spriteIndex == -1) break; @@ -3708,7 +3696,7 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo _vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0); _vm->_eventsManager.changeMouseCursor(4); for (int i = 0; i <= 4; i++) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_graphicsManager.fadeInLong(); if (_vm->_globals._screenId == 61) { _vm->_animationManager.playSequence("OUVRE.SEQ", 10, 4, 10); @@ -3722,7 +3710,7 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo _vm->_globals._checkDistanceFl = true; do { GOHOME(); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); } while (_vm->_linesManager._route != (RouteItem *)g_PTRNUL); setSpriteIndex(0, 64); } @@ -3738,7 +3726,7 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo if (_vm->_globals._actionMoveTo) PARADISE(); if (!_vm->_globals._exitId) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (_vm->_globals._exitId) break; @@ -3793,17 +3781,16 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm _vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100); _vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0); if (_vm->_globals._characterType) { - if (!_vm->_globals._saveData->_data[svField122] && !_vm->_globals._saveData->_data[svField356]) { + if (!_vm->_globals._saveData->_data[svAlternateSpriteFl] && !_vm->_globals._saveData->_data[svField356]) { _vm->_globals.PERSO = _vm->_fileManager.loadFile("PERSO.SPR"); _vm->_globals._characterType = 0; } } - if (!_vm->_globals._characterType) { - if (_vm->_globals._saveData->_data[svField122] == 1) { - _vm->_globals.PERSO = _vm->_fileManager.loadFile("HOPFEM.SPR"); - _vm->_globals._characterType = 1; - } + if (!_vm->_globals._characterType && _vm->_globals._saveData->_data[svAlternateSpriteFl] == 1) { + _vm->_globals.PERSO = _vm->_fileManager.loadFile("HOPFEM.SPR"); + _vm->_globals._characterType = 1; } + if (_vm->_globals._characterType != 2 && _vm->_globals._saveData->_data[svField356] == 1) { _vm->_globals.PERSO = _vm->_fileManager.loadFile("PSAMAN.SPR"); _vm->_globals._characterType = 2; @@ -3828,7 +3815,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm _vm->_globals.enableHiding(); _vm->_linesManager._route = (RouteItem *)g_PTRNUL; computeAndSetSpriteSize(); - SPECIAL_INI(); + sceneSpecialIni(); _vm->_eventsManager._mouseSpriteId = 4; _oldCharacterPosX = _characterPos.x; _oldCharacterPosY = _characterPos.y; @@ -3836,7 +3823,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm _vm->_globals.Compteur = 0; for (int idx = 0; idx < 5; ++idx) - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); _vm->_globals.iRegul = 1; if (!_vm->_graphicsManager._noFadingFl) @@ -3879,7 +3866,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm PARADISE(); } handleSpecialGames(); - _vm->_eventsManager.VBL(); + _vm->_eventsManager.refreshScreenAndEvents(); if (!_vm->_globals._exitId) continue; } |