[Scummvm-git-logs] scummvm master -> 99ea2f68d86345c5c322b639875feb138561f05d

bluegr noreply at scummvm.org
Thu Dec 30 20:59:13 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
99ea2f68d8 BURIED: Adapt more cases of flag offsets with hardcoded global flags


Commit: 99ea2f68d86345c5c322b639875feb138561f05d
    https://github.com/scummvm/scummvm/commit/99ea2f68d86345c5c322b639875feb138561f05d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-12-30T22:58:55+02:00

Commit Message:
BURIED: Adapt more cases of flag offsets with hardcoded global flags

Also, remove some dead code from SpaceDoor() and SpaceDoorTimer() in
the process

Changed paths:
    engines/buried/environ/ai_lab.cpp
    engines/buried/environ/da_vinci.cpp
    engines/buried/environ/future_apartment.cpp


diff --git a/engines/buried/environ/ai_lab.cpp b/engines/buried/environ/ai_lab.cpp
index 80a65398bf6..14ede01d7ba 100644
--- a/engines/buried/environ/ai_lab.cpp
+++ b/engines/buried/environ/ai_lab.cpp
@@ -180,8 +180,7 @@ class SpaceDoorTimer : public BaseOxygenTimer {
 public:
 	SpaceDoorTimer(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
 			int left = -1, int top = -1, int right = -1, int bottom = -1, int openFrame = -1, int closedFrame = -1, int depth = -1,
-			int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1,
-			int doorFlag = -1, int doorFlagValue = 0);
+			int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1);
 	int mouseDown(Window *viewWindow, const Common::Point &pointLocation) override;
 	int mouseUp(Window *viewWindow, const Common::Point &pointLocation) override;
 	int specifyCursor(Window *viewWindow, const Common::Point &pointLocation) override;
@@ -192,20 +191,15 @@ private:
 	DestinationScene _destData;
 	int _openFrame;
 	int _closedFrame;
-	int _doorFlag;
-	int _doorFlagValue;
 };
 
 SpaceDoorTimer::SpaceDoorTimer(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
 		int left, int top, int right, int bottom, int openFrame, int closedFrame, int depth,
-		int transitionType, int transitionData, int transitionStartFrame, int transitionLength,
-		int doorFlag, int doorFlagValue) :
+		int transitionType, int transitionData, int transitionStartFrame, int transitionLength) :
 		BaseOxygenTimer(vm, viewWindow, sceneStaticData, priorLocation) {
 	_clicked = false;
 	_openFrame = openFrame;
 	_closedFrame = closedFrame;
-	_doorFlag = doorFlag;
-	_doorFlagValue = doorFlagValue;
 	_clickable = Common::Rect(left, top, right, bottom);
 	_destData.destinationScene = _staticData.location;
 	_destData.destinationScene.depth = depth;
@@ -248,30 +242,15 @@ int SpaceDoorTimer::mouseUp(Window *viewWindow, const Common::Point &pointLocati
 			return SC_TRUE;
 		}
 
-		if (_doorFlag < 0 || ((SceneViewWindow *)viewWindow)->getGlobalFlagByte(_doorFlag) == _doorFlagValue) {
-			// Change the still frame to the new one
-			if (_openFrame >= 0) {
-				_staticData.navFrameIndex = _openFrame;
-				viewWindow->invalidateWindow(false);
-				_vm->_sound->playSynchronousSoundEffect("BITDATA/AILAB/AI_LOCK.BTA"); // Broken in 1.01
-			}
-
-			((SceneViewWindow *)viewWindow)->moveToDestination(_destData);
-		} else {
-			// Display the closed frame
-			if (_closedFrame >= 0) {
-				int oldFrame = _staticData.navFrameIndex;
-				_staticData.navFrameIndex = _closedFrame;
-				viewWindow->invalidateWindow(false);
-
-				_vm->_sound->playSynchronousSoundEffect(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 12));
-				_vm->_sound->playSynchronousSoundEffect(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 13));
-
-				_staticData.navFrameIndex = oldFrame;
-				viewWindow->invalidateWindow(false);
-			}
+		// Change the still frame to the new one
+		if (_openFrame >= 0) {
+			_staticData.navFrameIndex = _openFrame;
+			viewWindow->invalidateWindow(false);
+			_vm->_sound->playSynchronousSoundEffect("BITDATA/AILAB/AI_LOCK.BTA"); // Broken in 1.01
 		}
 
+		((SceneViewWindow *)viewWindow)->moveToDestination(_destData);
+
 		_clicked = false;
 		return SC_TRUE;
 	}
@@ -364,14 +343,12 @@ int UseCheeseGirlPropellant::droppedItem(Window *viewWindow, int itemID, const C
 class PlayArthurOffsetTimed : public BaseOxygenTimer {
 public:
 	PlayArthurOffsetTimed(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-			int stingerVolume = 127, int lastStingerFlagOffset = -1, int effectIDFlagOffset = -1, int firstStingerFileID = -1,
+			int stingerVolume = 127, int firstStingerFileID = -1,
 			int lastStingerFileID = -1, int stingerDelay = 1);
 	int postEnterRoom(Window *viewWindow, const Location &priorLocation) override;
 
 private:
 	int _stingerVolume;
-	int _lastStingerFlagOffset;
-	int _effectIDFlagOffset;
 	int _firstStingerFileID;
 	int _lastStingerFileID;
 	int _stingerDelay;
@@ -379,23 +356,24 @@ private:
 };
 
 PlayArthurOffsetTimed::PlayArthurOffsetTimed(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-		int stingerVolume, int lastStingerFlagOffset, int effectIDFlagOffset, int firstStingerFileID,
+		int stingerVolume, int firstStingerFileID,
 		int lastStingerFileID, int stingerDelay) :
 		BaseOxygenTimer(vm, viewWindow, sceneStaticData, priorLocation) {
 	_stingerVolume = stingerVolume;
-	_lastStingerFlagOffset = lastStingerFlagOffset;
-	_effectIDFlagOffset = effectIDFlagOffset;
 	_firstStingerFileID = firstStingerFileID;
 	_lastStingerFileID = lastStingerFileID;
 	_stingerDelay = stingerDelay;
 }
 
 int PlayArthurOffsetTimed::postEnterRoom(Window *viewWindow, const Location &priorLocation) {
-	if (_effectIDFlagOffset >= 0 && (priorLocation.node != _staticData.location.node || priorLocation.environment != _staticData.location.environment)) {
-		byte effectID = ((SceneViewWindow *)viewWindow)->getGlobalFlagByte(_effectIDFlagOffset);
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
+	if ((priorLocation.node != _staticData.location.node || priorLocation.environment != _staticData.location.environment)) {
+		byte effectID = globalFlags.aiHWStingerChannelID;
 
 		if (!_vm->_sound->isSoundEffectPlaying(effectID - 1)) {
-			int lastStinger = ((SceneViewWindow *)viewWindow)->getGlobalFlagByte(_lastStingerFlagOffset) + 1;
+			int lastStinger = globalFlags.aiHWStingerID + 1;
 
 			if ((lastStinger % _stingerDelay) == 0) {
 				if (lastStinger <= (_lastStingerFileID - _firstStingerFileID) * _stingerDelay) {
@@ -414,12 +392,12 @@ int PlayArthurOffsetTimed::postEnterRoom(Window *viewWindow, const Location &pri
 						newStingerID = _vm->_sound->playSoundEffect(_vm->getFilePath(fileNameIndex), _stingerVolume, false, true) + 1;
 					}
 
-					((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_effectIDFlagOffset, newStingerID);
-					((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_lastStingerFlagOffset, lastStinger);
+					globalFlags.aiHWStingerChannelID = newStingerID;
+					globalFlags.aiHWStingerID = lastStinger;
 				}
 			} else {
-				((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_effectIDFlagOffset, 0xFF);
-				((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_lastStingerFlagOffset, lastStinger);
+				globalFlags.aiHWStingerChannelID = 0xFF;
+				globalFlags.aiHWStingerID = lastStinger;
 			}
 		}
 	}
@@ -3491,8 +3469,7 @@ class SpaceDoor : public SceneBase {
 public:
 	SpaceDoor(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
 			int left = -1, int top = -1, int right = -1, int bottom = -1, int openFrame = -1, int closedFrame = -1, int depth = -1,
-			int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1,
-			int doorFlag = -1, int doorFlagValue = 0);
+			int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1);
 	int mouseDown(Window *viewWindow, const Common::Point &pointLocation) override;
 	int mouseUp(Window *viewWindow, const Common::Point &pointLocation) override;
 	int specifyCursor(Window *viewWindow, const Common::Point &pointLocation) override;
@@ -3503,20 +3480,15 @@ private:
 	DestinationScene _destData;
 	int _openFrame;
 	int _closedFrame;
-	int _doorFlag;
-	int _doorFlagValue;
 };
 
 SpaceDoor::SpaceDoor(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
 		int left, int top, int right, int bottom, int openFrame, int closedFrame, int depth,
-		int transitionType, int transitionData, int transitionStartFrame, int transitionLength,
-		int doorFlag, int doorFlagValue) :
+		int transitionType, int transitionData, int transitionStartFrame, int transitionLength) :
 		SceneBase(vm, viewWindow, sceneStaticData, priorLocation) {
 	_clicked = false;
 	_openFrame = openFrame;
 	_closedFrame = closedFrame;
-	_doorFlag = doorFlag;
-	_doorFlagValue = doorFlagValue;
 	_clickable = Common::Rect(left, top, right, bottom);
 	_destData.destinationScene = _staticData.location;
 	_destData.destinationScene.depth = depth;
@@ -3547,23 +3519,15 @@ int SpaceDoor::mouseUp(Window *viewWindow, const Common::Point &pointLocation) {
 			return SC_TRUE;
 		}
 
-		if (_doorFlag < 0 || ((SceneViewWindow *)viewWindow)->getGlobalFlagByte(_doorFlag) == _doorFlagValue) {
-			// Change the still frame to the new one
-			if (_openFrame >= 0) {
-				_staticData.navFrameIndex = _openFrame;
-				viewWindow->invalidateWindow(false);
-				_vm->_sound->playSynchronousSoundEffect("BITDATA/AILAB/AI_LOCK.BTA");
-			}
-
-			((SceneViewWindow *)viewWindow)->moveToDestination(_destData);
-		} else {
-			// Display the closed frame
-			if (_closedFrame >= 0) {
-				_staticData.navFrameIndex = _closedFrame;
-				viewWindow->invalidateWindow(false);
-			}
+		// Change the still frame to the new one
+		if (_openFrame >= 0) {
+			_staticData.navFrameIndex = _openFrame;
+			viewWindow->invalidateWindow(false);
+			_vm->_sound->playSynchronousSoundEffect("BITDATA/AILAB/AI_LOCK.BTA");
 		}
 
+		((SceneViewWindow *)viewWindow)->moveToDestination(_destData);
+
 		_clicked = false;
 		return SC_TRUE;
 	}
@@ -3782,11 +3746,11 @@ SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const
 	case 1:
 		return new UseCheeseGirlPropellant(_vm, viewWindow, sceneStaticData, priorLocation);
 	case 3:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 172, 46, 262, 136, 87, -1, 1, TRANSITION_VIDEO, 2, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 172, 46, 262, 136, 87, -1, 1, TRANSITION_VIDEO, 2, -1, -1);
 	case 4:
-		return new PlayArthurOffsetTimed(_vm, viewWindow, sceneStaticData, priorLocation, 127, offsetof(GlobalFlags, aiHWStingerID), offsetof(GlobalFlags, aiHWStingerChannelID), 4, 10, 1); // 1.01 uses a delay of 2, clone2727 likes that better
+		return new PlayArthurOffsetTimed(_vm, viewWindow, sceneStaticData, priorLocation, 127, 4, 10, 1); // 1.01 uses a delay of 2, clone2727 likes that better
 	case 5:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 144, 30, 268, 152, 88, -1, 1, TRANSITION_VIDEO, 4, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 144, 30, 268, 152, 88, -1, 1, TRANSITION_VIDEO, 4, -1, -1);
 	case 6:
 		return new PlaySoundExitingFromScene(_vm, viewWindow, sceneStaticData, priorLocation, 14);
 	case 7:
@@ -3820,11 +3784,11 @@ SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const
 	case 30:
 		return new PlaySoundEnteringScene(_vm, viewWindow, sceneStaticData, priorLocation, 5, offsetof(GlobalFlags, aiDBPlayedFirstArthur));
 	case 31:
-		return new SpaceDoor(_vm, viewWindow, sceneStaticData, priorLocation, 174, 70, 256, 152, 166, -1, 1, TRANSITION_VIDEO, 0, -1, -1, -1, 0);
+		return new SpaceDoor(_vm, viewWindow, sceneStaticData, priorLocation, 174, 70, 256, 152, 166, -1, 1, TRANSITION_VIDEO, 0, -1, -1);
 	case 32:
 		return new PlaySoundExitingFromScene(_vm, viewWindow, sceneStaticData, priorLocation, 14);
 	case 33:
-		return new SpaceDoor(_vm, viewWindow, sceneStaticData, priorLocation, 185, 42, 253, 110, 167, -1, 1, TRANSITION_VIDEO, 1, -1, -1, -1, 0);
+		return new SpaceDoor(_vm, viewWindow, sceneStaticData, priorLocation, 185, 42, 253, 110, 167, -1, 1, TRANSITION_VIDEO, 1, -1, -1);
 	case 35:
 		return new DockingBayPlaySoundEntering(_vm, viewWindow, sceneStaticData, priorLocation, 4);
 	case 36:
@@ -3860,9 +3824,9 @@ SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const
 	case 51:
 		return new IceteroidPodTimed(_vm, viewWindow, sceneStaticData, priorLocation, 174, 96, 246, 118, 3, 6, 6, 0, 0, 1, 0);
 	case 52:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 40, 276, 140, -1, -1, 1, TRANSITION_VIDEO, 0, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 40, 276, 140, -1, -1, 1, TRANSITION_VIDEO, 0, -1, -1);
 	case 53:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 40, 276, 140, -1, -1, 1, TRANSITION_VIDEO, 2, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 40, 276, 140, -1, -1, 1, TRANSITION_VIDEO, 2, -1, -1);
 	case 54:
 		return new PlaySoundExitingFromSceneDeux(_vm, viewWindow, sceneStaticData, priorLocation, 14);
 	case 55:
@@ -3886,9 +3850,9 @@ SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const
 	case 64:
 		return new IceteroidPodTimed(_vm, viewWindow, sceneStaticData, priorLocation, 174, 96, 246, 118, 15, 6, 6, 4, 0, 1, 0);
 	case 65:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 26, 268, 124, -1, -1, 1, TRANSITION_VIDEO, 13, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 26, 268, 124, -1, -1, 1, TRANSITION_VIDEO, 13, -1, -1);
 	case 66:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 26, 268, 124, -1, -1, 1, TRANSITION_VIDEO, 16, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 164, 26, 268, 124, -1, -1, 1, TRANSITION_VIDEO, 16, -1, -1);
 	case 67:
 		return new TakeWaterCanister(_vm, viewWindow, sceneStaticData, priorLocation);
 	case 68:
@@ -3896,7 +3860,7 @@ SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const
 	case 69:
 		return new PlaySoundExitingForward(_vm, viewWindow, sceneStaticData, priorLocation, 14);
 	case 70:
-		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 92, 92, 212, 189, 48, -1, 1, TRANSITION_VIDEO, 0, -1, -1, -1, -1);
+		return new SpaceDoorTimer(_vm, viewWindow, sceneStaticData, priorLocation, 92, 92, 212, 189, 48, -1, 1, TRANSITION_VIDEO, 0, -1, -1);
 	case 71:
 		return new ScienceWingZoomIntoPanel(_vm, viewWindow, sceneStaticData, priorLocation);
 	case 72:
diff --git a/engines/buried/environ/da_vinci.cpp b/engines/buried/environ/da_vinci.cpp
index 8869314d40e..ac51fb68c95 100644
--- a/engines/buried/environ/da_vinci.cpp
+++ b/engines/buried/environ/da_vinci.cpp
@@ -42,15 +42,16 @@ namespace Buried {
 
 class SwapStillOnFlag : public SceneBase {
 public:
-	SwapStillOnFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-			int flagOffset = -1, int flagValue = -1);
+	SwapStillOnFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation);
 };
 
-SwapStillOnFlag::SwapStillOnFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-		int flagOffset, int flagValue) :
+SwapStillOnFlag::SwapStillOnFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) :
 		SceneBase(vm, viewWindow, sceneStaticData, priorLocation) {
-	if (((SceneViewWindow *)viewWindow)->getGlobalFlagByte(flagOffset) >= flagValue) {
-		int curStillFrame = _staticData.navFrameIndex;
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
+	if (globalFlags.dsPTElevatorPresent >= 1) {
+			int curStillFrame = _staticData.navFrameIndex;
 		_staticData.navFrameIndex = _staticData.miscFrameIndex;
 		_staticData.miscFrameIndex = curStillFrame;
 	}
@@ -473,7 +474,7 @@ int PaintingTowerInsideDoor::specifyCursor(Window *viewWindow, const Common::Poi
 class WheelAssemblyItemAcquire : public SceneBase {
 public:
 	WheelAssemblyItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-			int left = 0, int top = 0, int right = 0, int bottom = 0, int itemID = 0, int clearStillFrame = 0, int itemFlagOffset = 0);
+			int left = 0, int top = 0, int right = 0, int bottom = 0, int itemID = 0, int clearStillFrame = 0);
 	int mouseDown(Window *viewWindow, const Common::Point &pointLocation) override;
 	int mouseUp(Window *viewWindow, const Common::Point &pointLocation) override;
 	int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags) override;
@@ -485,35 +486,38 @@ private:
 	int _fullFrameIndex;
 	int _clearFrameIndex;
 	int _itemID;
-	int _itemFlagOffset;
 	Common::Rect _zoomUpRegion;
 };
 
 WheelAssemblyItemAcquire::WheelAssemblyItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-		int left, int top, int right, int bottom, int itemID, int clearStillFrame, int itemFlagOffset) :
+		int left, int top, int right, int bottom, int itemID, int clearStillFrame) :
 		SceneBase(vm, viewWindow, sceneStaticData, priorLocation) {
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
 	_itemPresent = true;
 	_itemID = itemID;
 	_acquireRegion = Common::Rect(left, top, right, bottom);
 	_fullFrameIndex = _staticData.navFrameIndex;
 	_clearFrameIndex = clearStillFrame;
-	_itemFlagOffset = itemFlagOffset;
 	_zoomUpRegion = Common::Rect(134, 168, 200, 189);
 
-	if (((SceneViewWindow *)viewWindow)->getGlobalFlagByte(_itemFlagOffset) != 0) {
+	if (globalFlags.dsWSPickedUpWheelAssembly != 0) {
 		_itemPresent = false;
 		_staticData.navFrameIndex = _clearFrameIndex;
 	}
 }
 
 int WheelAssemblyItemAcquire::mouseDown(Window *viewWindow, const Common::Point &pointLocation) {
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
 	if (_itemPresent && _acquireRegion.contains(pointLocation)) {
 		_itemPresent = false;
 		_staticData.navFrameIndex = _clearFrameIndex;
 		viewWindow->invalidateWindow(false);
 
-		if (_itemFlagOffset >= 0)
-			((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_itemFlagOffset, 1);
+		globalFlags.dsWSPickedUpWheelAssembly = 1;
 
 		Common::Point ptInventoryWindow = viewWindow->convertPointToGlobal(pointLocation);
 		ptInventoryWindow = ((GameUIWindow *)viewWindow->getParent())->_inventoryWindow->convertPointToLocal(ptInventoryWindow);
@@ -539,6 +543,9 @@ int WheelAssemblyItemAcquire::mouseUp(Window *viewWindow, const Common::Point &p
 }
 
 int WheelAssemblyItemAcquire::droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags) {
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
 	if (pointLocation.x == -1 && pointLocation.y == -1)
 		return SIC_REJECT;
 
@@ -546,8 +553,7 @@ int WheelAssemblyItemAcquire::droppedItem(Window *viewWindow, int itemID, const
 		_itemPresent = true;
 		_staticData.navFrameIndex = _fullFrameIndex;
 
-		if (_itemFlagOffset >= 0)
-			((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_itemFlagOffset, 0);
+		globalFlags.dsWSPickedUpWheelAssembly = 0;
 
 		viewWindow->invalidateWindow(false);
 		return SIC_ACCEPT;
@@ -1069,7 +1075,6 @@ private:
 	int _fullFrameIndex;
 	int _clearFrameIndex;
 	int _itemID;
-	int _itemFlagOffset;
 	Common::Rect _eyeRegion;
 };
 
@@ -1080,7 +1085,6 @@ CodexTowerGrabHeart::CodexTowerGrabHeart(BuriedEngine *vm, Window *viewWindow, c
 	_acquireRegion = Common::Rect(214, 118, 270, 189);
 	_fullFrameIndex = _staticData.navFrameIndex;
 	_clearFrameIndex = 162;
-	_itemFlagOffset = offsetof(GlobalFlags, dsCTTakenHeart);
 	_eyeRegion = Common::Rect(248, 116, 286, 180);
 
 	if (((SceneViewWindow *)viewWindow)->getGlobalFlags().dsCTTakenHeart != 0) {
@@ -1097,12 +1101,14 @@ int CodexTowerGrabHeart::postExitRoom(Window *viewWindow, const Location &newLoc
 }
 
 int CodexTowerGrabHeart::mouseDown(Window *viewWindow, const Common::Point &pointLocation) {
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
 	if (_acquireRegion.contains(pointLocation) && _itemPresent) {
 		_itemPresent = false;
 		_staticData.navFrameIndex = _clearFrameIndex;
 
-		if (_itemFlagOffset >= 0)
-			((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_itemFlagOffset, 1);
+		globalFlags.dsCTTakenHeart = 1;
 
 		// Call inventory drag start function
 		Common::Point ptInventoryWindow = viewWindow->convertPointToGlobal(pointLocation);
@@ -1129,6 +1135,9 @@ int CodexTowerGrabHeart::mouseUp(Window *viewWindow, const Common::Point &pointL
 }
 
 int CodexTowerGrabHeart::droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags) {
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+
 	if (pointLocation.x == -1 && pointLocation.y == -1)
 		return SIC_REJECT;
 
@@ -1137,8 +1146,7 @@ int CodexTowerGrabHeart::droppedItem(Window *viewWindow, int itemID, const Commo
 		_itemPresent = true;
 		_staticData.navFrameIndex = _fullFrameIndex;
 
-		if (_itemFlagOffset >= 0)
-			((SceneViewWindow *)viewWindow)->setGlobalFlagByte(_itemFlagOffset, 0);
+		globalFlags.dsCTTakenHeart = 0;
 
 		viewWindow->invalidateWindow();
 
@@ -2593,7 +2601,7 @@ SceneBase *SceneViewWindow::constructDaVinciSceneObject(Window *viewWindow, cons
 		// Default scene
 		break;
 	case 1:
-		return new SwapStillOnFlag(_vm, viewWindow, sceneStaticData, priorLocation, offsetof(GlobalFlags, dsPTElevatorPresent), 1);
+		return new SwapStillOnFlag(_vm, viewWindow, sceneStaticData, priorLocation);
 	case 2:
 		return new DisplayMessageWithEvidenceWhenEnteringNode(_vm, viewWindow, sceneStaticData, priorLocation, DAVINCI_EVIDENCE_FOOTPRINT, IDS_MBT_EVIDENCE_PRESENT);
 	case 3:
@@ -2659,7 +2667,7 @@ SceneBase *SceneViewWindow::constructDaVinciSceneObject(Window *viewWindow, cons
 	case 33:
 		return new GenericItemAcquire(_vm, viewWindow, sceneStaticData, priorLocation, 164, 126, 276, 160, kItemWoodenPegs, 96, offsetof(GlobalFlags, dsWSPickedUpPegs));
 	case 34:
-		return new WheelAssemblyItemAcquire(_vm, viewWindow, sceneStaticData, priorLocation, 150, 150, 276, 189, kItemWheelAssembly, 100, offsetof(GlobalFlags, dsWSPickedUpWheelAssembly));
+		return new WheelAssemblyItemAcquire(_vm, viewWindow, sceneStaticData, priorLocation, 150, 150, 276, 189, kItemWheelAssembly, 100);
 	case 35:
 		return new ViewSiegeCyclePlans(_vm, viewWindow, sceneStaticData, priorLocation);
 	case 36:
diff --git a/engines/buried/environ/future_apartment.cpp b/engines/buried/environ/future_apartment.cpp
index 0fbc9bed74d..f18e97779bc 100644
--- a/engines/buried/environ/future_apartment.cpp
+++ b/engines/buried/environ/future_apartment.cpp
@@ -1079,13 +1079,16 @@ int EnvironGenoVideo::specifyCursor(Window *viewWindow, const Common::Point &poi
 class FlagChangeBackground : public SceneBase {
 public:
 	FlagChangeBackground(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-			int flagOffset = -1, byte minFlagValue = 1, int newStillFrame = 0);
+			byte minFlagValue = 1, int newStillFrame = 0);
 };
 
 FlagChangeBackground::FlagChangeBackground(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
-		int flagOffset, byte minFlagValue, int newStillFrame) :
+		byte minFlagValue, int newStillFrame) :
 		SceneBase(vm, viewWindow, sceneStaticData, priorLocation) {
-	if (flagOffset >= 0 && ((SceneViewWindow *)viewWindow)->getGlobalFlagByte(flagOffset) >= minFlagValue)
+	SceneViewWindow *sceneView = ((SceneViewWindow *)viewWindow);
+	GlobalFlags &globalFlags = sceneView->getGlobalFlags();
+	
+	if (globalFlags.faERTakenRemoteControl >= minFlagValue)
 		_staticData.navFrameIndex = newStillFrame;
 }
 
@@ -2004,11 +2007,11 @@ SceneBase *SceneViewWindow::constructFutureApartmentSceneObject(Window *viewWind
 	case 23:
 		return new GenericItemAcquire(_vm, viewWindow, sceneStaticData, priorLocation, 81, 146, 134, 189, kItemRemoteControl, 45, offsetof(GlobalFlags, faERTakenRemoteControl));
 	case 24:
-		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, offsetof(GlobalFlags, faERTakenRemoteControl), 1, 33);
+		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, 1, 33);
 	case 25:
-		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, offsetof(GlobalFlags, faERTakenRemoteControl), 1, 21);
+		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, 1, 21);
 	case 26:
-		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, offsetof(GlobalFlags, faERTakenRemoteControl), 1, 9);
+		return new FlagChangeBackground(_vm, viewWindow, sceneStaticData, priorLocation, 1, 9);
 	case 30:
 		return new PlayStingers(_vm, viewWindow, sceneStaticData, priorLocation, 128, offsetof(GlobalFlags, faStingerID), offsetof(GlobalFlags, faStingerChannelID), 10, 14);
 	case 31:




More information about the Scummvm-git-logs mailing list