diff options
author | Strangerke | 2013-02-11 00:15:00 +0100 |
---|---|---|
committer | Strangerke | 2013-02-11 00:15:00 +0100 |
commit | 705d00470a092da515e12e1f5c192d3ed36a0b42 (patch) | |
tree | 92668cb453de94b21731f67116ba1607a28c98ad | |
parent | 0f09b3d79349caaa7c249a81c38d74e7d3a20089 (diff) | |
download | scummvm-rg350-705d00470a092da515e12e1f5c192d3ed36a0b42.tar.gz scummvm-rg350-705d00470a092da515e12e1f5c192d3ed36a0b42.tar.bz2 scummvm-rg350-705d00470a092da515e12e1f5c192d3ed36a0b42.zip |
HOPKINS: Move _bob to ObjectsManager
-rw-r--r-- | engines/hopkins/globals.cpp | 4 | ||||
-rw-r--r-- | engines/hopkins/globals.h | 31 | ||||
-rw-r--r-- | engines/hopkins/lines.cpp | 12 | ||||
-rw-r--r-- | engines/hopkins/objects.cpp | 280 | ||||
-rw-r--r-- | engines/hopkins/objects.h | 31 | ||||
-rw-r--r-- | engines/hopkins/talk.cpp | 22 |
6 files changed, 190 insertions, 190 deletions
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index 5a44ce8788..d4bbc89824 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -74,8 +74,6 @@ Globals::Globals() { Common::fill((byte *)&Bqe_Anim[i], (byte *)&Bqe_Anim[i] + sizeof(BqeAnimItem), 0); for (int i = 0; i < 8; ++i) Common::fill((byte *)&Bank[i], (byte *)&Bank[i] + sizeof(BankItem), 0); - for (int i = 0; i < 36; ++i) - Common::fill((byte *)&_bob[i], (byte *)&_bob[i] + sizeof(BobItem), 0); for (int i = 0; i < 6; ++i) Common::fill((byte *)&Liste[i], (byte *)&Liste[i] + sizeof(ListeItem), 0); for (int i = 0; i < 35; ++i) @@ -411,7 +409,7 @@ void Globals::CACHE_OFF() { void Globals::B_CACHE_OFF(int idx) { assert(idx < 36); - _bob[idx].field34 = true; + _vm->_objectsManager._bob[idx].field34 = true; } void Globals::CACHE_SUB(int idx) { diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index ba42b9d0f2..e50ec48324 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -68,36 +68,6 @@ struct ListeItem { int _height; }; -struct BobItem { - int field0; - byte *_spriteData; - int _xp; - int _yp; - int _frameIndex; - int _animDataIdx; - int field12; - int field14; - bool _disabledAnimationFl; - byte *_animData; - bool field1C; - int field1E; - int field20; - int field22; - int _offsetY; // Unused variable? - bool field34; // Set to true in B_CACHE_OFF() - int _zoomFactor; - bool _flipFl; - bool _isSpriteFl; - bool _activeFl; - int _oldX; - int _oldY; - int _oldWidth; - int _oldHeight; - int _oldX2; - int _zooInmFactor; - int _zoomOutFactor; -}; - struct LockAnimItem { bool _enableFl; int _posX; @@ -307,7 +277,6 @@ public: Sauvegarde *_saveData; Language _language; HopkinsItem Hopkins[70]; - BobItem _bob[36]; SortItem _sortedDisplay[51]; CreditItem _creditsItem[200]; diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp index 32190d896f..93ffd5647c 100644 --- a/engines/hopkins/lines.cpp +++ b/engines/hopkins/lines.cpp @@ -2966,17 +2966,17 @@ int LinesManager::MZONE() { if ((_vm->_eventsManager._mousePos.y + _vm->_eventsManager._mouseOffset.y) > 19) { for (int bobZoneId = 0; bobZoneId <= 48; bobZoneId++) { int bobId = _vm->_globals.BOBZONE[bobZoneId]; - if (bobId && _vm->_globals.BOBZONE_FLAG[bobZoneId] && _vm->_globals._bob[bobId].field0 && _vm->_globals._bob[bobId]._frameIndex != 250 && - !_vm->_globals._bob[bobId]._disabledAnimationFl && xp > _vm->_globals._bob[bobId]._oldX && - xp < _vm->_globals._bob[bobId]._oldWidth + _vm->_globals._bob[bobId]._oldX && yp > _vm->_globals._bob[bobId]._oldY) { - if (yp < _vm->_globals._bob[bobId]._oldHeight + _vm->_globals._bob[bobId]._oldY) { + if (bobId && _vm->_globals.BOBZONE_FLAG[bobZoneId] && _vm->_objectsManager._bob[bobId].field0 && _vm->_objectsManager._bob[bobId]._frameIndex != 250 && + !_vm->_objectsManager._bob[bobId]._disabledAnimationFl && xp > _vm->_objectsManager._bob[bobId]._oldX && + xp < _vm->_objectsManager._bob[bobId]._oldWidth + _vm->_objectsManager._bob[bobId]._oldX && yp > _vm->_objectsManager._bob[bobId]._oldY) { + if (yp < _vm->_objectsManager._bob[bobId]._oldHeight + _vm->_objectsManager._bob[bobId]._oldY) { if (_vm->_globals.ZONEP[bobZoneId]._spriteIndex == -1) { _vm->_globals.ZONEP[bobZoneId]._destX = 0; _vm->_globals.ZONEP[bobZoneId]._destY = 0; } if (!_vm->_globals.ZONEP[bobZoneId]._destX && !_vm->_globals.ZONEP[bobZoneId]._destY) { - _vm->_globals.ZONEP[bobZoneId]._destX = _vm->_globals._bob[bobId]._oldWidth + _vm->_globals._bob[bobId]._oldX; - _vm->_globals.ZONEP[bobZoneId]._destY = _vm->_globals._bob[bobId]._oldHeight + _vm->_globals._bob[bobId]._oldY + 6; + _vm->_globals.ZONEP[bobZoneId]._destX = _vm->_objectsManager._bob[bobId]._oldWidth + _vm->_objectsManager._bob[bobId]._oldX; + _vm->_globals.ZONEP[bobZoneId]._destY = _vm->_objectsManager._bob[bobId]._oldHeight + _vm->_objectsManager._bob[bobId]._oldY + 6; _vm->_globals.ZONEP[bobZoneId]._spriteIndex = -1; } return bobZoneId; diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 03ded6eb40..8173a1ff2b 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -37,6 +37,8 @@ ObjectsManager::ObjectsManager() { for (int i = 0; i < 6; ++i) { Common::fill((byte *)&_sprite[i], (byte *)&_sprite[i] + sizeof(SpriteItem), 0); } + for (int i = 0; i < 36; ++i) + Common::fill((byte *)&_bob[i], (byte *)&_bob[i] + sizeof(BobItem), 0); _helicopterFl = false; _priorityFl = false; @@ -482,7 +484,7 @@ void ObjectsManager::initBob() { } void ObjectsManager::resetBob(int idx) { - BobItem &bob = _vm->_globals._bob[idx]; + BobItem &bob = _bob[idx]; ListeItem &item = _vm->_globals.Liste2[idx]; bob.field0 = 0; @@ -513,27 +515,27 @@ void ObjectsManager::resetBob(int idx) { } void ObjectsManager::setBobInfo(int idx) { - if (!_vm->_globals._bob[idx]._activeFl) + if (!_bob[idx]._activeFl) return; - int xp = _vm->_globals._bob[idx]._oldX; - int yp = _vm->_globals._bob[idx]._oldY; + int xp = _bob[idx]._oldX; + int yp = _bob[idx]._oldY; - if (_vm->_globals._bob[idx]._isSpriteFl) - _vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._bob[idx]._spriteData, - xp + 300, yp + 300, _vm->_globals._bob[idx]._frameIndex); + if (_bob[idx]._isSpriteFl) + _vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _bob[idx]._spriteData, + xp + 300, yp + 300, _bob[idx]._frameIndex); else _vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, - _vm->_globals._bob[idx]._spriteData, xp + 300, yp + 300, _vm->_globals._bob[idx]._frameIndex, - _vm->_globals._bob[idx]._zoomOutFactor, _vm->_globals._bob[idx]._zooInmFactor, - _vm->_globals._bob[idx]._flipFl); + _bob[idx]._spriteData, xp + 300, yp + 300, _bob[idx]._frameIndex, + _bob[idx]._zoomOutFactor, _bob[idx]._zooInmFactor, + _bob[idx]._flipFl); _vm->_globals.Liste2[idx]._visibleFl = true; _vm->_globals.Liste2[idx]._posX = xp; _vm->_globals.Liste2[idx]._posY = yp; - _vm->_globals.Liste2[idx]._width = _vm->_globals._bob[idx]._oldWidth; - _vm->_globals.Liste2[idx]._height = _vm->_globals._bob[idx]._oldHeight; + _vm->_globals.Liste2[idx]._width = _bob[idx]._oldWidth; + _vm->_globals.Liste2[idx]._height = _bob[idx]._oldHeight; if (_vm->_globals.Liste2[idx]._posX < _vm->_graphicsManager._minX) { _vm->_globals.Liste2[idx]._width -= _vm->_graphicsManager._minX - _vm->_globals.Liste2[idx]._posX; @@ -565,7 +567,7 @@ void ObjectsManager::setBobInfo(int idx) { void ObjectsManager::BOB_VISU(int idx) { _priorityFl = true; - if (_vm->_globals._bob[idx].field0) + if (_bob[idx].field0) return; resetBob(idx); @@ -588,31 +590,31 @@ void ObjectsManager::BOB_VISU(int idx) { if (!v6) v6 = -1; - _vm->_globals._bob[idx]._isSpriteFl = false; + _bob[idx]._isSpriteFl = false; if (_vm->_globals.Bank[bankIdx]._fileHeader == 1) { - _vm->_globals._bob[idx]._isSpriteFl = true; - _vm->_globals._bob[idx]._zoomFactor = 0; - _vm->_globals._bob[idx]._flipFl = false; + _bob[idx]._isSpriteFl = true; + _bob[idx]._zoomFactor = 0; + _bob[idx]._flipFl = false; } - _vm->_globals._bob[idx]._animData = _vm->_globals.Bqe_Anim[idx]._data; - _vm->_globals._bob[idx].field0 = 10; - _vm->_globals._bob[idx]._spriteData = _vm->_globals.Bank[bankIdx]._data; + _bob[idx]._animData = _vm->_globals.Bqe_Anim[idx]._data; + _bob[idx].field0 = 10; + _bob[idx]._spriteData = _vm->_globals.Bank[bankIdx]._data; - _vm->_globals._bob[idx].field1E = v9; - _vm->_globals._bob[idx].field20 = v6; - _vm->_globals._bob[idx].field22 = v8; - _vm->_globals._bob[idx]._offsetY = offsetY; + _bob[idx].field1E = v9; + _bob[idx].field20 = v6; + _bob[idx].field22 = v8; + _bob[idx]._offsetY = offsetY; } void ObjectsManager::BOB_OFF(int idx) { - if ((_vm->_globals._bob[idx].field0 == 3) || (_vm->_globals._bob[idx].field0 == 10)) - _vm->_globals._bob[idx].field0++; + if ((_bob[idx].field0 == 3) || (_bob[idx].field0 == 10)) + _bob[idx].field0++; } void ObjectsManager::BOB_OFFSET(int idx, int offset) { - _vm->_globals._bob[idx]._oldX2 = offset; + _bob[idx]._oldX2 = offset; } void ObjectsManager::SCBOB(int idx) { @@ -620,17 +622,17 @@ void ObjectsManager::SCBOB(int idx) { return; for (int i = 0; i <= 20; i++) { - if ((_vm->_globals._bob[i].field0) && (!_vm->_globals._bob[i]._disabledAnimationFl) && (!_vm->_globals._bob[i].field34) && (_vm->_globals._bob[i]._frameIndex != 250)) { - int oldRight = _vm->_globals._bob[i]._oldX + _vm->_globals._bob[i]._oldWidth; - int oldBottom = _vm->_globals._bob[i]._oldY + _vm->_globals._bob[i]._oldHeight; + if ((_bob[i].field0) && (!_bob[i]._disabledAnimationFl) && (!_bob[i].field34) && (_bob[i]._frameIndex != 250)) { + int oldRight = _bob[i]._oldX + _bob[i]._oldWidth; + int oldBottom = _bob[i]._oldY + _bob[i]._oldHeight; int cachedRight = _vm->_globals.Cache[idx]._width + _vm->_globals.Cache[idx]._x; if ((oldBottom > _vm->_globals.Cache[idx]._y) && (oldBottom < _vm->_globals.Cache[idx].field14 +_vm->_globals.Cache[idx]._height + _vm->_globals.Cache[idx]._y)) { if ((oldRight >= _vm->_globals.Cache[idx]._x && oldRight <= cachedRight) - || (cachedRight >= _vm->_globals._bob[i]._oldWidth && _vm->_globals._bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x) - || (cachedRight >= _vm->_globals._bob[i]._oldWidth && _vm->_globals._bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x) - || (_vm->_globals._bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x && oldRight <= cachedRight) - || (_vm->_globals._bob[i]._oldWidth <= _vm->_globals.Cache[idx]._x && oldRight >= cachedRight)) + || (cachedRight >= _bob[i]._oldWidth && _bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x) + || (cachedRight >= _bob[i]._oldWidth && _bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x) + || (_bob[i]._oldWidth >= _vm->_globals.Cache[idx]._x && oldRight <= cachedRight) + || (_bob[i]._oldWidth <= _vm->_globals.Cache[idx]._x && oldRight >= cachedRight)) ++_vm->_globals.Cache[idx]._useCount; } } @@ -638,33 +640,33 @@ void ObjectsManager::SCBOB(int idx) { } void ObjectsManager::CALCUL_BOB(int idx) { - _vm->_globals._bob[idx]._activeFl = false; - if (_vm->_globals._bob[idx]._isSpriteFl) { - _vm->_globals._bob[idx]._flipFl = false; - _vm->_globals._bob[idx]._zoomFactor = 0; + _bob[idx]._activeFl = false; + if (_bob[idx]._isSpriteFl) { + _bob[idx]._flipFl = false; + _bob[idx]._zoomFactor = 0; } - int spriteIdx = _vm->_globals._bob[idx]._frameIndex; + int spriteIdx = _bob[idx]._frameIndex; if (spriteIdx == 250) return; int deltaY, deltaX; - if (_vm->_globals._bob[idx]._flipFl) { - deltaX = getOffsetX(_vm->_globals._bob[idx]._spriteData, spriteIdx, true); - deltaY = getOffsetY(_vm->_globals._bob[idx]._spriteData, _vm->_globals._bob[idx]._frameIndex, true); + if (_bob[idx]._flipFl) { + deltaX = getOffsetX(_bob[idx]._spriteData, spriteIdx, true); + deltaY = getOffsetY(_bob[idx]._spriteData, _bob[idx]._frameIndex, true); } else { - deltaX = getOffsetX(_vm->_globals._bob[idx]._spriteData, spriteIdx, false); - deltaY = getOffsetY(_vm->_globals._bob[idx]._spriteData, _vm->_globals._bob[idx]._frameIndex, false); + deltaX = getOffsetX(_bob[idx]._spriteData, spriteIdx, false); + deltaY = getOffsetY(_bob[idx]._spriteData, _bob[idx]._frameIndex, false); } int negZoom = 0; int posZoom = 0; - if (_vm->_globals._bob[idx]._zoomFactor < 0) { - negZoom = -_vm->_globals._bob[idx]._zoomFactor; + if (_bob[idx]._zoomFactor < 0) { + negZoom = -_bob[idx]._zoomFactor; if (negZoom > 95) negZoom = 95; } else - posZoom = _vm->_globals._bob[idx]._zoomFactor; + posZoom = _bob[idx]._zoomFactor; if (posZoom) { if (deltaX >= 0) @@ -690,20 +692,20 @@ void ObjectsManager::CALCUL_BOB(int idx) { deltaY = -_vm->_graphicsManager.zoomOut(abs(deltaX), negZoom); } - int newX = _vm->_globals._bob[idx]._xp - deltaX; - int newY = _vm->_globals._bob[idx]._yp - deltaY; - _vm->_globals._bob[idx]._activeFl = true; - _vm->_globals._bob[idx]._oldX = newX; - _vm->_globals._bob[idx]._oldY = newY; - _vm->_globals._bob[idx]._zooInmFactor = posZoom; - _vm->_globals._bob[idx]._zoomOutFactor = negZoom; + int newX = _bob[idx]._xp - deltaX; + int newY = _bob[idx]._yp - deltaY; + _bob[idx]._activeFl = true; + _bob[idx]._oldX = newX; + _bob[idx]._oldY = newY; + _bob[idx]._zooInmFactor = posZoom; + _bob[idx]._zoomOutFactor = negZoom; _vm->_globals.Liste2[idx]._visibleFl = true; _vm->_globals.Liste2[idx]._posX = newX; _vm->_globals.Liste2[idx]._posY = newY; - int width = getWidth(_vm->_globals._bob[idx]._spriteData, _vm->_globals._bob[idx]._frameIndex); - int height = getHeight(_vm->_globals._bob[idx]._spriteData, _vm->_globals._bob[idx]._frameIndex); + int width = getWidth(_bob[idx]._spriteData, _bob[idx]._frameIndex); + int height = getHeight(_bob[idx]._spriteData, _bob[idx]._frameIndex); if (posZoom) { width = _vm->_graphicsManager.zoomIn(width, posZoom); @@ -716,8 +718,8 @@ void ObjectsManager::CALCUL_BOB(int idx) { _vm->_globals.Liste2[idx]._width = width; _vm->_globals.Liste2[idx]._height = height; - _vm->_globals._bob[idx]._oldWidth = width; - _vm->_globals._bob[idx]._oldHeight = height; + _bob[idx]._oldWidth = width; + _bob[idx]._oldHeight = height; } void ObjectsManager::checkCache() { @@ -725,7 +727,7 @@ void ObjectsManager::checkCache() { if (_vm->_globals.Cache[cacheIdx]._useCount == 0) continue; - int _oldEnableCount = _vm->_globals.Cache[cacheIdx]._useCount; + int _oldUseCount = _vm->_globals.Cache[cacheIdx]._useCount; for (int spriteIdx = 0; spriteIdx <= 4; spriteIdx++) { if (_sprite[spriteIdx]._animationType == 1 && _sprite[spriteIdx]._spriteIndex != 250) { int right = _sprite[spriteIdx]._width + _sprite[spriteIdx]._destX; @@ -744,7 +746,7 @@ void ObjectsManager::checkCache() { } SCBOB(cacheIdx); - if (_vm->_globals.Cache[cacheIdx]._useCount == _oldEnableCount) { + if (_vm->_globals.Cache[cacheIdx]._useCount == _oldUseCount) { if (_vm->_globals.Cache[cacheIdx].field10) { _vm->_globals.Cache[cacheIdx].field10 = false; _vm->_globals.Cache[cacheIdx]._useCount = 1; @@ -906,106 +908,106 @@ void ObjectsManager::beforeSort(SortMode sortMode, int index, int priority) { void ObjectsManager::displayBobAnim() { for (int idx = 1; idx <= 35; idx++) { if (idx <= 20 && PERSO_ON) { - _vm->_globals._bob[idx].field1C = false; + _bob[idx].field1C = false; continue; } - if (_vm->_globals._bob[idx].field0 != 10) + if (_bob[idx].field0 != 10) continue; - _vm->_globals._bob[idx].field1C = false; - int v1 = _vm->_globals._bob[idx].field20; + _bob[idx].field1C = false; + int v1 = _bob[idx].field20; if (v1 == -1) v1 = 50; - if (_vm->_globals._bob[idx]._animData == g_PTRNUL || _vm->_globals._bob[idx]._disabledAnimationFl || v1 <= 0) { - if (_vm->_globals._bob[idx].field1E == 1 || _vm->_globals._bob[idx].field1E == 2) - _vm->_globals._bob[idx].field1C = true; + if (_bob[idx]._animData == g_PTRNUL || _bob[idx]._disabledAnimationFl || v1 <= 0) { + if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) + _bob[idx].field1C = true; continue; } - if (_vm->_globals._bob[idx].field12 == _vm->_globals._bob[idx].field14) { - _vm->_globals._bob[idx].field1C = true; + if (_bob[idx].field12 == _bob[idx].field14) { + _bob[idx].field1C = true; } else { - _vm->_globals._bob[idx].field14++; - _vm->_globals._bob[idx].field1C = false; + _bob[idx].field14++; + _bob[idx].field1C = false; } - if (!_vm->_globals._bob[idx].field1C) { - if (_vm->_globals._bob[idx].field1E == 1 || _vm->_globals._bob[idx].field1E == 2) - _vm->_globals._bob[idx].field1C = true; + if (!_bob[idx].field1C) { + if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) + _bob[idx].field1C = true; continue; } - byte *dataPtr = _vm->_globals._bob[idx]._animData + 20; - int dataIdx = _vm->_globals._bob[idx]._animDataIdx; - _vm->_globals._bob[idx]._xp = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx); + byte *dataPtr = _bob[idx]._animData + 20; + int dataIdx = _bob[idx]._animDataIdx; + _bob[idx]._xp = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx); if (_vm->_globals._lockedAnims[idx]._enableFl) - _vm->_globals._bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX; + _bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX; if ( PERSO_ON && idx > 20 ) - _vm->_globals._bob[idx]._xp += _vm->_eventsManager._startPos.x; + _bob[idx]._xp += _vm->_eventsManager._startPos.x; - _vm->_globals._bob[idx]._yp = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 2); - _vm->_globals._bob[idx].field12 = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 4); - _vm->_globals._bob[idx]._zoomFactor = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 6); - _vm->_globals._bob[idx]._frameIndex = dataPtr[2 * dataIdx + 8]; - _vm->_globals._bob[idx]._flipFl = (dataPtr[2 * dataIdx + 9] != 0); - _vm->_globals._bob[idx]._animDataIdx += 5; + _bob[idx]._yp = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 2); + _bob[idx].field12 = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 4); + _bob[idx]._zoomFactor = (int16)READ_LE_UINT16(dataPtr + 2 * dataIdx + 6); + _bob[idx]._frameIndex = dataPtr[2 * dataIdx + 8]; + _bob[idx]._flipFl = (dataPtr[2 * dataIdx + 9] != 0); + _bob[idx]._animDataIdx += 5; - int v5 = _vm->_globals._bob[idx].field12; + int v5 = _bob[idx].field12; if (v5 > 0) { int v6 = v5 / _vm->_globals._speed; - _vm->_globals._bob[idx].field12 = v5 / _vm->_globals._speed; + _bob[idx].field12 = v5 / _vm->_globals._speed; if (v6 > 0) { - _vm->_globals._bob[idx].field14 = 1; - if (_vm->_globals._bob[idx].field1E == 1 || _vm->_globals._bob[idx].field1E == 2) - _vm->_globals._bob[idx].field1C = true; + _bob[idx].field14 = 1; + if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) + _bob[idx].field1C = true; continue; } - _vm->_globals._bob[idx].field12 = 1; + _bob[idx].field12 = 1; } - if (!_vm->_globals._bob[idx].field12) { - if (_vm->_globals._bob[idx].field20 > 0) - _vm->_globals._bob[idx].field20--; - if (_vm->_globals._bob[idx].field20 != -1 && _vm->_globals._bob[idx].field20 <= 0) { - _vm->_globals._bob[idx].field0 = 11; + if (!_bob[idx].field12) { + if (_bob[idx].field20 > 0) + _bob[idx].field20--; + if (_bob[idx].field20 != -1 && _bob[idx].field20 <= 0) { + _bob[idx].field0 = 11; } else { - _vm->_globals._bob[idx]._animDataIdx = 0; - byte *v21 = _vm->_globals._bob[idx]._animData + 20; - _vm->_globals._bob[idx]._xp = (int16)READ_LE_UINT16(v21); + _bob[idx]._animDataIdx = 0; + byte *v21 = _bob[idx]._animData + 20; + _bob[idx]._xp = (int16)READ_LE_UINT16(v21); if (_vm->_globals._lockedAnims[idx]._enableFl) - _vm->_globals._bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX; + _bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX; if (PERSO_ON && idx > 20) - _vm->_globals._bob[idx]._xp += _vm->_eventsManager._startPos.x; + _bob[idx]._xp += _vm->_eventsManager._startPos.x; - _vm->_globals._bob[idx]._yp = (int16)READ_LE_UINT16(v21 + 2); - _vm->_globals._bob[idx].field12 = (int16)READ_LE_UINT16(v21 + 4); - _vm->_globals._bob[idx]._zoomFactor = (int16)READ_LE_UINT16(v21 + 6); - _vm->_globals._bob[idx]._frameIndex = v21[8]; - _vm->_globals._bob[idx]._flipFl = (v21[9] != 0); - _vm->_globals._bob[idx]._animDataIdx += 5; - int v10 = _vm->_globals._bob[idx].field12; + _bob[idx]._yp = (int16)READ_LE_UINT16(v21 + 2); + _bob[idx].field12 = (int16)READ_LE_UINT16(v21 + 4); + _bob[idx]._zoomFactor = (int16)READ_LE_UINT16(v21 + 6); + _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; - _vm->_globals._bob[idx].field12 = v11; + _bob[idx].field12 = v11; // Original code. It can't be negative, so the check is on == 0 if (v11 <= 0) - _vm->_globals._bob[idx].field12 = 1; + _bob[idx].field12 = 1; } } } - _vm->_globals._bob[idx].field14 = 1; - if (_vm->_globals._bob[idx].field1E == 1 || _vm->_globals._bob[idx].field1E == 2) - _vm->_globals._bob[idx].field1C = true; + _bob[idx].field14 = 1; + if (_bob[idx].field1E == 1 || _bob[idx].field1E == 2) + _bob[idx].field1C = true; } if (!PERSO_ON && BOBTOUS) { for (int i = 0; i < 35; i++) { - if (_vm->_globals._bob[i].field0 == 10 && !_vm->_globals._bob[i]._disabledAnimationFl) - _vm->_globals._bob[i].field1C = true; + if (_bob[i].field0 == 10 && !_bob[i]._disabledAnimationFl) + _bob[i].field1C = true; } } @@ -1013,8 +1015,8 @@ void ObjectsManager::displayBobAnim() { for (int i = 1; i <= 35; i++) { if (i > 20 || !PERSO_ON) { - if ((_vm->_globals._bob[i].field0 == 10) && (_vm->_globals._bob[i].field1C)) { - if ((_vm->_globals._bob[i].field1E != 2) && (_vm->_globals._bob[i].field1E != 4)) { + if ((_bob[i].field0 == 10) && (_bob[i].field1C)) { + if ((_bob[i].field1E != 2) && (_bob[i].field1E != 4)) { if (_vm->_globals.Liste2[i]._visibleFl) { _vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, _vm->_globals.Liste2[i]._posX, _vm->_globals.Liste2[i]._posY, @@ -1026,7 +1028,7 @@ void ObjectsManager::displayBobAnim() { } } - if (_vm->_globals._bob[i].field0 == 11) { + if (_bob[i].field0 == 11) { if (_vm->_globals.Liste2[i]._visibleFl) { _vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, _vm->_globals.Liste2[i]._posX, _vm->_globals.Liste2[i]._posY, @@ -1036,21 +1038,21 @@ void ObjectsManager::displayBobAnim() { _vm->_globals.Liste2[i]._visibleFl = false; } - _vm->_globals._bob[i].field0 = 0; + _bob[i].field0 = 0; } } } for (int i = 1; i <= 35; i++) { - _vm->_globals._bob[i]._oldY = 0; - if (_vm->_globals._bob[i].field0 == 10 && !_vm->_globals._bob[i]._disabledAnimationFl && _vm->_globals._bob[i].field1C) { + _bob[i]._oldY = 0; + if (_bob[i].field0 == 10 && !_bob[i]._disabledAnimationFl && _bob[i].field1C) { CALCUL_BOB(i); - int v19 = _vm->_globals._bob[i]._oldX2 + _vm->_globals._bob[i]._oldHeight + _vm->_globals._bob[i]._oldY; + int v19 = _bob[i]._oldX2 + _bob[i]._oldHeight + _bob[i]._oldY; if (v19 > 450) v19 = 600; - if (_vm->_globals._bob[i]._activeFl) + if (_bob[i]._activeFl) beforeSort(SORT_BOB, i, v19); } } @@ -3080,57 +3082,57 @@ void ObjectsManager::OPTI_ONE(int idx, int animIdx, int destPosi, int animAction if (!animAction) stopBobAnimation(idx); else if (animAction == 4) { - _vm->_graphicsManager.fastDisplay(_vm->_globals._bob[idx]._spriteData, - _vm->_globals._bob[idx]._oldX, _vm->_globals._bob[idx]._oldY, _vm->_globals._bob[idx]._frameIndex); + _vm->_graphicsManager.fastDisplay(_bob[idx]._spriteData, + _bob[idx]._oldX, _bob[idx]._oldY, _bob[idx]._frameIndex); stopBobAnimation(idx); _vm->_eventsManager.VBL(); } } int ObjectsManager::getBobAnimDataIdx(int idx) { - return _vm->_globals._bob[idx]._animDataIdx / 5; + return _bob[idx]._animDataIdx / 5; } void ObjectsManager::setBobAnimDataIdx(int idx, int animIdx) { - _vm->_globals._bob[idx]._animDataIdx = 5 * animIdx; - _vm->_globals._bob[idx].field12 = 0; - _vm->_globals._bob[idx].field14 = 0; + _bob[idx]._animDataIdx = 5 * animIdx; + _bob[idx].field12 = 0; + _bob[idx].field14 = 0; } /** * Set Hopkins animation */ void ObjectsManager::setBobAnimation(int idx) { - if (!_vm->_globals._bob[idx]._disabledAnimationFl) + if (!_bob[idx]._disabledAnimationFl) return; - _vm->_globals._bob[idx]._disabledAnimationFl = false; - _vm->_globals._bob[idx]._animDataIdx = 5; - _vm->_globals._bob[idx]._frameIndex = 250; - _vm->_globals._bob[idx].field12 = 0; - _vm->_globals._bob[idx].field14 = 0; + _bob[idx]._disabledAnimationFl = false; + _bob[idx]._animDataIdx = 5; + _bob[idx]._frameIndex = 250; + _bob[idx].field12 = 0; + _bob[idx].field14 = 0; } /** * Stop Hopkins animation */ void ObjectsManager::stopBobAnimation(int idx) { - _vm->_globals._bob[idx]._disabledAnimationFl = true; + _bob[idx]._disabledAnimationFl = true; } /** * Get X position */ int ObjectsManager::getBobPosX(int idx) { - return _vm->_globals._bob[idx]._xp; + return _bob[idx]._xp; } int ObjectsManager::getBobPosY(int idx) { - return _vm->_globals._bob[idx]._yp; + return _bob[idx]._yp; } int ObjectsManager::getBobFrameIndex(int idx) { - return _vm->_globals._bob[idx]._frameIndex; + return _bob[idx]._frameIndex; } void ObjectsManager::INILINK(const Common::String &file) { diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h index 424b57de99..a75e36acd5 100644 --- a/engines/hopkins/objects.h +++ b/engines/hopkins/objects.h @@ -50,6 +50,36 @@ struct SpriteItem { int _reducePct; }; +struct BobItem { + int field0; + byte *_spriteData; + int _xp; + int _yp; + int _frameIndex; + int _animDataIdx; + int field12; + int field14; + bool _disabledAnimationFl; + byte *_animData; + bool field1C; + int field1E; + int field20; + int field22; + int _offsetY; // Unused variable? + bool field34; // Set to true in B_CACHE_OFF() + int _zoomFactor; + bool _flipFl; + bool _isSpriteFl; + bool _activeFl; + int _oldX; + int _oldY; + int _oldWidth; + int _oldHeight; + int _oldX2; + int _zooInmFactor; + int _zoomOutFactor; +}; + class HopkinsEngine; class ObjectsManager { @@ -133,6 +163,7 @@ public: byte *_saveLoadSprite; byte *_saveLoadSprite2; SpriteItem _sprite[6]; + BobItem _bob[36]; bool PERSO_ON; bool BOBTOUS; diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp index 338144b4b5..f0d3a38bce 100644 --- a/engines/hopkins/talk.cpp +++ b/engines/hopkins/talk.cpp @@ -595,24 +595,24 @@ void TalkManager::VISU_PARLE() { void TalkManager::BOB_VISU_PARLE(int idx) { _vm->_objectsManager._priorityFl = true; - if (!_vm->_globals._bob[idx].field0) { + if (!_vm->_objectsManager._bob[idx].field0) { _vm->_objectsManager.resetBob(idx); byte *v5 = _vm->_globals.Bqe_Anim[idx]._data; int v4 = (int16)READ_LE_UINT16(v5 + 2); if (!v4) v4 = 1; if ((int16)READ_LE_UINT16(v5 + 24)) { - _vm->_globals._bob[idx]._isSpriteFl = true; - _vm->_globals._bob[idx]._zoomFactor = 0; - _vm->_globals._bob[idx]._flipFl = false; - _vm->_globals._bob[idx]._animData = _vm->_globals.Bqe_Anim[idx]._data; - _vm->_globals._bob[idx].field0 = 10; + _vm->_objectsManager._bob[idx]._isSpriteFl = true; + _vm->_objectsManager._bob[idx]._zoomFactor = 0; + _vm->_objectsManager._bob[idx]._flipFl = false; + _vm->_objectsManager._bob[idx]._animData = _vm->_globals.Bqe_Anim[idx]._data; + _vm->_objectsManager._bob[idx].field0 = 10; v5 = _characterSprite; - _vm->_globals._bob[idx]._spriteData = _characterSprite; - _vm->_globals._bob[idx].field1E = v4; - _vm->_globals._bob[idx].field20 = -1; - _vm->_globals._bob[idx].field22 = 0; - _vm->_globals._bob[idx]._offsetY = 0; + _vm->_objectsManager._bob[idx]._spriteData = _characterSprite; + _vm->_objectsManager._bob[idx].field1E = v4; + _vm->_objectsManager._bob[idx].field20 = -1; + _vm->_objectsManager._bob[idx].field22 = 0; + _vm->_objectsManager._bob[idx]._offsetY = 0; } } } |