[Scummvm-git-logs] scummvm master -> 59864bf38cf55aa64340b72e55a024ad7d4a1027

elasota noreply at scummvm.org
Fri Mar 17 04:55:39 UTC 2023


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

Summary:
8daf91afed VCRUISE: Fix vertical pans not working in scenes with no horizontal pans
59864bf38c VCRUISE: Add global var ops


Commit: 8daf91afede262c1c688cc872a4810201f0016c9
    https://github.com/scummvm/scummvm/commit/8daf91afede262c1c688cc872a4810201f0016c9
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-16T23:38:41-04:00

Commit Message:
VCRUISE: Fix vertical pans not working in scenes with no horizontal pans

Changed paths:
    engines/vcruise/runtime.cpp
    engines/vcruise/runtime.h


diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index 79d005a3e43..2b60a6d4303 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -349,7 +349,7 @@ InventoryItem::InventoryItem() : itemID(0), highlighted(false) {
 }
 
 Runtime::Runtime(OSystem *system, Audio::Mixer *mixer, const Common::FSNode &rootFSNode, VCruiseGameID gameID)
-	: _system(system), _mixer(mixer), _roomNumber(1), _screenNumber(0), _direction(0), _havePanAnimations(0), _loadedRoomNumber(0), _activeScreenNumber(0),
+	: _system(system), _mixer(mixer), _roomNumber(1), _screenNumber(0), _direction(0), _haveHorizPanAnimations(false), _loadedRoomNumber(0), _activeScreenNumber(0),
 	  _gameState(kGameStateBoot), _gameID(gameID), _havePendingScreenChange(false), _forceScreenChange(false), _havePendingReturnToIdleState(false), _havePendingCompletionCheck(false),
 	  _scriptNextInstruction(0), _escOn(false), _debugMode(false), _panoramaDirectionFlags(0),
 	  _loadedAnimation(0), _animPendingDecodeFrame(0), _animDisplayingFrame(0), _animFirstFrame(0), _animLastFrame(0), _animStopFrame(0),
@@ -1409,7 +1409,7 @@ void Runtime::changeToScreen(uint roomNumber, uint screenNumber) {
 			}
 		}
 
-		_havePanAnimations = false;
+		_haveHorizPanAnimations = false;
 		for (uint i = 0; i < kNumDirections; i++) {
 			_havePanUpFromDirection[i] = false;
 			_havePanDownFromDirection[i] = false;
@@ -1509,28 +1509,32 @@ bool Runtime::dischargeIdleMouseMove() {
 		uint interactionID = 0;
 
 		Common::Point panRelMouse = _mousePos - _panoramaAnchor;
-		if (_havePanAnimations) {
+		if (_haveHorizPanAnimations) {
 			if (panRelMouse.x <= -kPanoramaPanningMarginX)
 				interactionID = kPanLeftInteraction;
 			else if (panRelMouse.x >= kPanoramaPanningMarginX)
 				interactionID = kPanRightInteraction;
-			else if (panRelMouse.y <= -kPanoramaPanningMarginY)
+		}
+
+		if (!interactionID) {
+			if (_havePanUpFromDirection[_direction] && panRelMouse.y <= -kPanoramaPanningMarginY) {
 				interactionID = kPanUpInteraction;
-			else if (panRelMouse.y >= kPanoramaPanningMarginY)
+			} else if (_havePanDownFromDirection[_direction] && panRelMouse.y >= kPanoramaPanningMarginY) {
 				interactionID = kPanDownInteraction;
+			}
+		}
 
-			if (interactionID) {
-				// If there's an interaction script for this direction, execute it
-				Common::SharedPtr<Script> script = findScriptForInteraction(interactionID);
+		if (interactionID) {
+			// If there's an interaction script for this direction, execute it
+			Common::SharedPtr<Script> script = findScriptForInteraction(interactionID);
 
-				if (script) {
-					resetInventoryHighlights();
+			if (script) {
+				resetInventoryHighlights();
 
-					ScriptEnvironmentVars vars;
-					vars.panInteractionID = interactionID;
-					activateScript(script, vars);
-					return true;
-				}
+				ScriptEnvironmentVars vars;
+				vars.panInteractionID = interactionID;
+				activateScript(script, vars);
+				return true;
 			}
 		}
 	}
@@ -2194,7 +2198,7 @@ Common::SharedPtr<Script> Runtime::findScriptForInteraction(uint interactionID)
 void Runtime::detectPanoramaDirections() {
 	_panoramaDirectionFlags = 0;
 
-	if (_havePanAnimations)
+	if (_haveHorizPanAnimations)
 		_panoramaDirectionFlags |= kPanoramaHorizFlags;
 
 	if (_havePanDownFromDirection[_direction])
@@ -2215,7 +2219,7 @@ void Runtime::panoramaActivate() {
 	_panoramaAnchor = _mousePos;
 
 	uint cursorID = 0;
-	if (_havePanAnimations) {
+	if (_haveHorizPanAnimations || _havePanUpFromDirection[_direction] || _havePanDownFromDirection[_direction]) {
 		uint panCursor = 0;
 		if (_panoramaDirectionFlags & kPanoramaHorizFlags)
 			panCursor |= kPanCursorDraggableHoriz;
@@ -2235,7 +2239,7 @@ void Runtime::panoramaActivate() {
 }
 
 bool Runtime::computeFaceDirectionAnimation(uint desiredDirection, const AnimationDef *&outAnimDef, uint &outInitialFrame, uint &outStopFrame) {
-	if (_direction == desiredDirection || !_havePanAnimations)
+	if (_direction == desiredDirection || !_haveHorizPanAnimations)
 		return false;
 
 	uint leftPanDistance = ((_direction + kNumDirections) - desiredDirection) % kNumDirections;
@@ -2595,7 +2599,7 @@ void Runtime::scriptOpRotate(ScriptArg_t arg) {
 
 	_panLeftAnimationDef = stackArgsToAnimDef(stackArgs + 0);
 	_panRightAnimationDef = stackArgsToAnimDef(stackArgs + kAnimDefStackArgs);
-	_havePanAnimations = true;
+	_haveHorizPanAnimations = true;
 }
 
 void Runtime::scriptOpAngle(ScriptArg_t arg) {
@@ -2687,7 +2691,7 @@ void Runtime::scriptOpAnimR(ScriptArg_t arg) {
 
 	
 	uint cursorID = 0;
-	if (_havePanAnimations) {
+	if (_haveHorizPanAnimations) {
 		uint panCursor = 0;
 		if (_panoramaDirectionFlags & kPanoramaHorizFlags)
 			panCursor |= kPanCursorDraggableHoriz;
@@ -2820,7 +2824,7 @@ void Runtime::scriptOpStatic(ScriptArg_t arg) {
 	changeAnimation(animDef, animDef.lastFrame, false);
 
 	_havePendingReturnToIdleState = true;
-	_havePanAnimations = false;
+	_haveHorizPanAnimations = false;
 	_haveIdleStaticAnimation = true;
 	_idleCurrentStaticAnimation = animDef.animName;
 
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 46f86f68483..dcc15f30ff8 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -651,7 +651,7 @@ private:
 
 	AnimationDef _panLeftAnimationDef;
 	AnimationDef _panRightAnimationDef;
-	bool _havePanAnimations;
+	bool _haveHorizPanAnimations;
 	bool _havePanUpFromDirection[kNumDirections];
 	bool _havePanDownFromDirection[kNumDirections];
 


Commit: 59864bf38cf55aa64340b72e55a024ad7d4a1027
    https://github.com/scummvm/scummvm/commit/59864bf38cf55aa64340b72e55a024ad7d4a1027
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-17T00:54:13-04:00

Commit Message:
VCRUISE: Add global var ops

Changed paths:
    engines/vcruise/runtime.cpp
    engines/vcruise/runtime.h
    engines/vcruise/script.cpp
    engines/vcruise/script.h


diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index 2b60a6d4303..b32bb99e6f2 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1023,6 +1023,8 @@ bool Runtime::runScript() {
 			DISPATCH_OP(Static);
 			DISPATCH_OP(VarLoad);
 			DISPATCH_OP(VarStore);
+			DISPATCH_OP(VarGlobalLoad);
+			DISPATCH_OP(VarGlobalStore);
 			DISPATCH_OP(ItemCheck);
 			DISPATCH_OP(ItemRemove);
 			DISPATCH_OP(ItemHighlightSet);
@@ -2851,6 +2853,26 @@ void Runtime::scriptOpVarStore(ScriptArg_t arg) {
 	_variables[varID] = stackArgs[0];
 }
 
+void Runtime::scriptOpVarGlobalLoad(ScriptArg_t arg) {
+	TAKE_STACK(1);
+
+	uint32 varID = static_cast<uint32>(stackArgs[0]);
+
+	Common::HashMap<uint32, int32>::const_iterator it = _variables.find(varID);
+	if (it == _variables.end())
+		_scriptStack.push_back(0);
+	else
+		_scriptStack.push_back(it->_value);
+}
+
+void Runtime::scriptOpVarGlobalStore(ScriptArg_t arg) {
+	TAKE_STACK(2);
+
+	uint32 varID = static_cast<uint32>(stackArgs[1]);
+
+	_variables[varID] = stackArgs[0];
+}
+
 void Runtime::scriptOpItemCheck(ScriptArg_t arg) {
 	TAKE_STACK(1);
 
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index dcc15f30ff8..a165a8ca580 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -531,6 +531,8 @@ private:
 	void scriptOpStatic(ScriptArg_t arg);
 	void scriptOpVarLoad(ScriptArg_t arg);
 	void scriptOpVarStore(ScriptArg_t arg);
+	void scriptOpVarGlobalLoad(ScriptArg_t arg);
+	void scriptOpVarGlobalStore(ScriptArg_t arg);
 
 	void scriptOpItemCheck(ScriptArg_t arg);
 	void scriptOpItemRemove(ScriptArg_t arg);
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index f0afd91c5e2..52d62778d49 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -338,6 +338,8 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"static", ProtoOp::kProtoOpScript, ScriptOps::kStatic},
 	{"yes@", ProtoOp::kProtoOpScript, ScriptOps::kVarLoad},
 	{"yes!", ProtoOp::kProtoOpScript, ScriptOps::kVarStore},
+	{"yesg@", ProtoOp::kProtoOpScript, ScriptOps::kVarGlobalLoad},
+	{"yesg!", ProtoOp::kProtoOpScript, ScriptOps::kVarGlobalStore},
 	{"cr?", ProtoOp::kProtoOpScript, ScriptOps::kItemCheck},
 	{"cr!", ProtoOp::kProtoOpScript, ScriptOps::kItemRemove},
 	{"sr!", ProtoOp::kProtoOpScript, ScriptOps::kItemHighlightSet},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 28179907650..9e72966b26f 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -61,6 +61,8 @@ enum ScriptOp {
 	kStatic,
 	kVarLoad,
 	kVarStore,
+	kVarGlobalLoad,
+	kVarGlobalStore,
 	kItemCheck,
 	kItemHaveSpace,
 	kItemRemove,




More information about the Scummvm-git-logs mailing list