aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/objects.cpp
diff options
context:
space:
mode:
authorStrangerke2013-03-25 08:02:07 +0100
committerStrangerke2013-03-25 08:02:07 +0100
commit91469d7d386d5eca3f471d0a57cc5bf333212b89 (patch)
tree8652223ce96426a46c64725828229043dbadea87 /engines/hopkins/objects.cpp
parent6f2eb50d2affac01556f068e6efd1888ed5e9b99 (diff)
downloadscummvm-rg350-91469d7d386d5eca3f471d0a57cc5bf333212b89.tar.gz
scummvm-rg350-91469d7d386d5eca3f471d0a57cc5bf333212b89.tar.bz2
scummvm-rg350-91469d7d386d5eca3f471d0a57cc5bf333212b89.zip
HOPKINS: More work on Globals
Diffstat (limited to 'engines/hopkins/objects.cpp')
-rw-r--r--engines/hopkins/objects.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index 5810daad7b..531c32c831 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -45,6 +45,7 @@ ObjectsManager::ObjectsManager(HopkinsEngine *vm) {
Common::fill((byte *)&_bob[i], (byte *)&_bob[i] + sizeof(BobItem), 0);
for (int i = 0; i < 30; ++i) {
+ Common::fill((byte *)&VBob[i], (byte *)&VBob[i] + sizeof(VBobItem), 0);
Common::fill((byte *)&_lockedAnims[i], (byte *)&_lockedAnims[i] + sizeof(LockAnimItem), 0);
}
@@ -116,6 +117,7 @@ ObjectsManager::~ObjectsManager() {
_vm->_globals->freeMemory(_gestureBuf);
_vm->_globals->freeMemory(_headSprites);
_vm->_globals->freeMemory(_objectDataBuf);
+ clearVBob();
for (int idx = 0; idx < 6; ++idx)
_hidingItemData[idx] = _vm->_globals->freeMemory(_hidingItemData[idx]);
@@ -132,6 +134,7 @@ void ObjectsManager::clearAll() {
_hidingItemData[idx] = _vm->_globals->freeMemory(_hidingItemData[idx]);
_objectDataBuf = _vm->_globals->freeMemory(_objectDataBuf);
+ initVBob();
}
// Load Object
@@ -652,11 +655,11 @@ void ObjectsManager::displayBob(int idx) {
resetBob(idx);
- const byte *data = _vm->_globals->_animBqe[idx]._data;
+ const byte *data = _vm->_animationManager->_animBqe[idx]._data;
int bankIdx = READ_LE_INT16(data);
if (!bankIdx)
return;
- if ((!_vm->_globals->Bank[bankIdx]._loadedFl) || (!READ_LE_UINT16(data + 24)))
+ if ((!_vm->_animationManager->Bank[bankIdx]._loadedFl) || (!READ_LE_UINT16(data + 24)))
return;
@@ -672,15 +675,15 @@ void ObjectsManager::displayBob(int idx) {
_bob[idx]._isSpriteFl = false;
- if (_vm->_globals->Bank[bankIdx]._fileHeader == 1) {
+ if (_vm->_animationManager->Bank[bankIdx]._fileHeader == 1) {
_bob[idx]._isSpriteFl = true;
_bob[idx]._zoomFactor = 0;
_bob[idx]._flipFl = false;
}
- _bob[idx]._animData = _vm->_globals->_animBqe[idx]._data;
+ _bob[idx]._animData = _vm->_animationManager->_animBqe[idx]._data;
_bob[idx]._bobMode = 10;
- _bob[idx]._spriteData = _vm->_globals->Bank[bankIdx]._data;
+ _bob[idx]._spriteData = _vm->_animationManager->Bank[bankIdx]._data;
_bob[idx]._bobModeChange = bobModeChange;
_bob[idx].field20 = newField20;
@@ -1139,7 +1142,7 @@ void ObjectsManager::displayVBob() {
int width, height;
for (int idx = 0; idx <= 29; idx++) {
- VBobItem *vbob = &_vm->_globals->VBob[idx];
+ VBobItem *vbob = &VBob[idx];
if (vbob->_displayMode == 4) {
width = getWidth(vbob->_spriteData, vbob->_frameIndex);
height = getHeight(vbob->_spriteData, vbob->_frameIndex);
@@ -2120,7 +2123,7 @@ void ObjectsManager::clearScreen() {
_vm->_graphicsManager->endDisplayBob();
_vm->_fontManager->hideText(5);
_vm->_fontManager->hideText(9);
- _vm->_globals->clearVBob();
+ clearVBob();
_vm->_animationManager->clearAnim();
_vm->_linesManager->clearAllZones();
_vm->_linesManager->resetLines();
@@ -2776,7 +2779,7 @@ void ObjectsManager::VBOB(byte *src, int idx, int xp, int yp, int frameIndex) {
if (idx > 29)
error("MAX_VBOB exceeded");
- VBobItem *vbob = &_vm->_globals->VBob[idx];
+ VBobItem *vbob = &VBob[idx];
if (vbob->_displayMode <= 1) {
vbob->_displayMode = 1;
vbob->_xp = xp;
@@ -2805,7 +2808,7 @@ void ObjectsManager::VBOB_OFF(int idx) {
if (idx > 29)
error("MAX_VBOB exceeded");
- VBobItem *vbob = &_vm->_globals->VBob[idx];
+ VBobItem *vbob = &VBob[idx];
if (vbob->_displayMode <= 1)
vbob->_displayMode = 0;
else
@@ -4007,6 +4010,30 @@ void ObjectsManager::loadHidingItems(const Common::String &file) {
_vm->_globals->freeMemory(ptr);
}
+void ObjectsManager::initVBob() {
+ for (int idx = 0; idx < 30; ++idx) {
+ VBob[idx]._displayMode = 0;
+ VBob[idx]._xp = 0;
+ VBob[idx]._yp = 0;
+ VBob[idx]._frameIndex = 0;
+ VBob[idx]._surface = g_PTRNUL;
+ VBob[idx]._spriteData = g_PTRNUL;
+ VBob[idx]._oldSpriteData = g_PTRNUL;
+ }
+}
+
+void ObjectsManager::clearVBob() {
+ for (int idx = 0; idx < 30; ++idx) {
+ VBob[idx]._displayMode = 0;
+ VBob[idx]._xp = 0;
+ VBob[idx]._yp = 0;
+ VBob[idx]._frameIndex = 0;
+ VBob[idx]._surface = _vm->_globals->freeMemory(VBob[idx]._surface);
+ VBob[idx]._spriteData = g_PTRNUL;
+ VBob[idx]._oldSpriteData = g_PTRNUL;
+ }
+}
+
void ObjectsManager::enableHiding() {
_hidingActiveFl = true;
}