[Scummvm-git-logs] scummvm master -> d8d1b62a978a525c697cdbf9ae7a50f05819be98

elasota noreply at scummvm.org
Tue Mar 14 03:20:00 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:
ff35ee19ab VCRUISE: Partly implement vertical panning, add "minus" op
d8d1b62a97 VCRUISE: Add some ops for the citadel


Commit: ff35ee19ab0886da4ae2955ac22122933ba392f6
    https://github.com/scummvm/scummvm/commit/ff35ee19ab0886da4ae2955ac22122933ba392f6
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-13T23:19:36-04:00

Commit Message:
VCRUISE: Partly implement vertical panning, add "minus" op

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 ba03c51e9c9..750034cc8d1 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1052,6 +1052,7 @@ bool Runtime::runScript() {
 			DISPATCH_OP(Or);
 			DISPATCH_OP(Add);
 			DISPATCH_OP(Sub);
+			DISPATCH_OP(Negate);
 			DISPATCH_OP(CmpEq);
 			DISPATCH_OP(CmpGt);
 			DISPATCH_OP(CmpLt);
@@ -1480,6 +1481,10 @@ bool Runtime::dischargeIdleMouseMove() {
 				interactionID = kPanLeftInteraction;
 			else if (panRelMouse.x >= kPanoramaPanningMarginX)
 				interactionID = kPanRightInteraction;
+			else if (panRelMouse.y <= -kPanoramaPanningMarginY)
+				interactionID = kPanUpInteraction;
+			else if (panRelMouse.y >= kPanoramaPanningMarginY)
+				interactionID = kPanDownInteraction;
 
 			if (interactionID) {
 				// If there's an interaction script for this direction, execute it
@@ -2155,6 +2160,12 @@ void Runtime::detectPanoramaDirections() {
 
 	if (_havePanAnimations)
 		_panoramaDirectionFlags |= kPanoramaHorizFlags;
+
+	if (_havePanDownFromDirection[_direction])
+		_panoramaDirectionFlags |= kPanoramaDownFlag;
+
+	if (_havePanUpFromDirection[_direction])
+		_panoramaDirectionFlags |= kPanoramaUpFlag;
 }
 
 void Runtime::detectPanoramaMouseMovement(uint32 timestamp) {
@@ -2174,7 +2185,7 @@ void Runtime::panoramaActivate() {
 			panCursor |= kPanCursorDraggableHoriz;
 		if (_panoramaDirectionFlags & kPanoramaUpFlag)
 			panCursor |= kPanCursorDraggableUp;
-		if (_panoramaDirectionFlags & kPanoramaUpFlag)
+		if (_panoramaDirectionFlags & kPanoramaDownFlag)
 			panCursor |= kPanCursorDraggableDown;
 
 		cursorID = _panCursors[panCursor];
@@ -2712,9 +2723,9 @@ void Runtime::scriptOpAnimS(ScriptArg_t arg) {
 	TAKE_STACK(kAnimDefStackArgs + 2);
 
 	AnimationDef animDef = stackArgsToAnimDef(stackArgs + 0);
-	animDef.firstFrame = animDef.lastFrame; // Static animation
 
-	changeAnimation(animDef, false);
+	// Static animations start on the last frame
+	changeAnimation(animDef, animDef.lastFrame, false);
 
 	_gameState = kGameStateWaitingForAnimation;
 	_screenNumber = stackArgs[kAnimDefStackArgs + 0];
@@ -2743,8 +2754,7 @@ void Runtime::scriptOpStatic(ScriptArg_t arg) {
 
 	AnimationDef animDef = stackArgsToAnimDef(stackArgs);
 
-	animDef.firstFrame = animDef.lastFrame;
-	changeAnimation(animDef, false);
+	changeAnimation(animDef, animDef.lastFrame, false);
 
 	_havePendingReturnToIdleState = true;
 	_havePanAnimations = false;
@@ -3170,7 +3180,7 @@ void Runtime::scriptOpVerticalPanSet(bool *flags) {
 
 	uint rDir = baseDirection;
 	uint lDir = baseDirection;
-	for (uint i = 1; i < radius; i++) {
+	for (uint i = 1; i <= radius; i++) {
 		rDir++;
 		if (rDir == kNumDirections)
 			rDir = 0;
@@ -3230,6 +3240,12 @@ void Runtime::scriptOpSub(ScriptArg_t arg) {
 	_scriptStack.push_back(stackArgs[0] - stackArgs[1]);
 }
 
+void Runtime::scriptOpNegate(ScriptArg_t arg) {
+	TAKE_STACK(1);
+
+	_scriptStack.push_back(-stackArgs[0]);
+}
+
 void Runtime::scriptOpCmpEq(ScriptArg_t arg) {
 	TAKE_STACK(2);
 
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 44e979eac23..1bb8b19934e 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -583,6 +583,7 @@ private:
 	void scriptOpOr(ScriptArg_t arg);
 	void scriptOpAdd(ScriptArg_t arg);
 	void scriptOpSub(ScriptArg_t arg);
+	void scriptOpNegate(ScriptArg_t arg);
 	void scriptOpCmpEq(ScriptArg_t arg);
 	void scriptOpCmpLt(ScriptArg_t arg);
 	void scriptOpCmpGt(ScriptArg_t arg);
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 402dcc42ba5..6c6204f917c 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -363,6 +363,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"+", ProtoOp::kProtoOpScript, ScriptOps::kAdd},
 	{"-", ProtoOp::kProtoOpScript, ScriptOps::kSub},
 	{"not", ProtoOp::kProtoOpScript, ScriptOps::kNot},
+	{"minus", ProtoOp::kProtoOpScript, ScriptOps::kNegate},
 	{"=", ProtoOp::kProtoOpScript, ScriptOps::kCmpEq},
 	{">", ProtoOp::kProtoOpScript, ScriptOps::kCmpGt},
 	{"<", ProtoOp::kProtoOpScript, ScriptOps::kCmpLt},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 3fbc12845a5..3b78b761eef 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -111,6 +111,7 @@ enum ScriptOp {
 	kOr,
 	kSub,
 	kAdd,
+	kNegate,
 	kCmpEq,
 	kCmpLt,
 	kCmpGt,


Commit: d8d1b62a978a525c697cdbf9ae7a50f05819be98
    https://github.com/scummvm/scummvm/commit/d8d1b62a978a525c697cdbf9ae7a50f05819be98
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-13T23:19:36-04:00

Commit Message:
VCRUISE: Add some ops for the citadel

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 750034cc8d1..ae804aaed58 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -336,7 +336,7 @@ Runtime::Runtime(OSystem *system, Audio::Mixer *mixer, const Common::FSNode &roo
 	  _scriptNextInstruction(0), _escOn(false), _debugMode(false), _panoramaDirectionFlags(0),
 	  _loadedAnimation(0), _animPendingDecodeFrame(0), _animDisplayingFrame(0), _animFirstFrame(0), _animLastFrame(0), _animStopFrame(0),
 	  _animFrameRateLock(0), _animStartTime(0), _animFramesDecoded(0), _animDecoderState(kAnimDecoderStateStopped),
-	  _animPlayWhileIdle(false), _idleIsOnInteraction(false), _idleHaveClickInteraction(false), _idleHaveDragInteraction(false), _idleInteractionID(0),
+	  _animPlayWhileIdle(false), _idleIsOnInteraction(false), _idleHaveClickInteraction(false), _idleHaveDragInteraction(false), _idleInteractionID(0), _haveIdleStaticAnimation(false),
 	  _loadedArea(0), _lmbDown(false), _lmbDragging(false), _lmbReleaseWasClick(false), _lmbDownTime(0),
 	  _panoramaState(kPanoramaStateInactive),
 	  _listenerX(0), _listenerY(0), _listenerAngle(0) {
@@ -1004,6 +1004,7 @@ bool Runtime::runScript() {
 			DISPATCH_OP(ItemRemove);
 			DISPATCH_OP(ItemHighlightSet);
 			DISPATCH_OP(ItemAdd);
+			DISPATCH_OP(ItemHaveSpace);
 			DISPATCH_OP(SetCursor);
 			DISPATCH_OP(SetRoom);
 			DISPATCH_OP(LMB);
@@ -1014,7 +1015,9 @@ bool Runtime::runScript() {
 			DISPATCH_OP(SoundL1);
 			DISPATCH_OP(SoundL2);
 			DISPATCH_OP(SoundL3);
+			DISPATCH_OP(3DSoundS2);
 			DISPATCH_OP(3DSoundL2);
+			DISPATCH_OP(StopAL);
 			DISPATCH_OP(Range);
 			DISPATCH_OP(AddXSound);
 			DISPATCH_OP(ClrXSound);
@@ -1387,6 +1390,7 @@ void Runtime::changeToScreen(uint roomNumber, uint screenNumber) {
 			_haveIdleAnimations[i] = false;
 
 		_havePendingReturnToIdleState = true;
+		_haveIdleStaticAnimation = false;
 	}
 }
 
@@ -2752,12 +2756,19 @@ void Runtime::scriptOpAnim(ScriptArg_t arg) {
 void Runtime::scriptOpStatic(ScriptArg_t arg) {
 	TAKE_STACK(kAnimDefStackArgs);
 
+	// QUIRK/BUG WORKAROUND: Static animations don't override other static animations!
+	// In Reah Room05, the script for 0b8 (NGONG) sets the static animation to :NNAWA_NGONG and then
+	// to :NSWIT_SGONG, but NNAWA_NGONG is the correct one, so we must ignore the second static animation
+	if (_haveIdleStaticAnimation)
+		return;
+
 	AnimationDef animDef = stackArgsToAnimDef(stackArgs);
 
 	changeAnimation(animDef, animDef.lastFrame, false);
 
 	_havePendingReturnToIdleState = true;
 	_havePanAnimations = false;
+	_haveIdleStaticAnimation = true;
 
 	_gameState = kGameStateWaitingForAnimation;
 }
@@ -2833,6 +2844,17 @@ void Runtime::scriptOpItemAdd(ScriptArg_t arg) {
 	inventoryAddItem(stackArgs[0]);
 }
 
+void Runtime::scriptOpItemHaveSpace(ScriptArg_t arg) {
+	for (const InventoryItem &item : _inventory) {
+		if (item.itemID == 0) {
+			_scriptStack.push_back(1);
+			return;
+		}
+	}
+
+	_scriptStack.push_back(0);
+}
+
 void Runtime::scriptOpSetCursor(ScriptArg_t arg) {
 	TAKE_STACK(1);
 
@@ -2911,6 +2933,17 @@ void Runtime::scriptOp3DSoundL2(ScriptArg_t arg) {
 	triggerSound(true, stackArgs[0], stackArgs[1], 0, true);
 }
 
+void Runtime::scriptOp3DSoundS2(ScriptArg_t arg) {
+	TAKE_STACK(4);
+
+	setSound3DParameters(stackArgs[0], stackArgs[2], stackArgs[3], _pendingSoundParams3D);
+	triggerSound(false, stackArgs[0], stackArgs[1], 0, true);
+}
+
+void Runtime::scriptOpStopAL(ScriptArg_t arg) {
+	warning("stopaL not implemented yet");
+}
+
 void Runtime::scriptOpAddXSound(ScriptArg_t arg) {
 	TAKE_STACK(4);
 
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 1bb8b19934e..419b2ede1aa 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -534,6 +534,7 @@ private:
 	void scriptOpItemRemove(ScriptArg_t arg);
 	void scriptOpItemHighlightSet(ScriptArg_t arg);
 	void scriptOpItemAdd(ScriptArg_t arg);
+	void scriptOpItemHaveSpace(ScriptArg_t arg);
 
 	void scriptOpSetCursor(ScriptArg_t arg);
 	void scriptOpSetRoom(ScriptArg_t arg);
@@ -545,7 +546,9 @@ private:
 	void scriptOpSoundL1(ScriptArg_t arg);
 	void scriptOpSoundL2(ScriptArg_t arg);
 	void scriptOpSoundL3(ScriptArg_t arg);
+	void scriptOp3DSoundS2(ScriptArg_t arg);
 	void scriptOp3DSoundL2(ScriptArg_t arg);
+	void scriptOpStopAL(ScriptArg_t arg);
 	void scriptOpRange(ScriptArg_t arg);
 	void scriptOpAddXSound(ScriptArg_t arg);
 	void scriptOpClrXSound(ScriptArg_t arg);
@@ -646,6 +649,7 @@ private:
 
 	StaticAnimation _idleAnimations[kNumDirections];
 	bool _haveIdleAnimations[kNumDirections];
+	bool _haveIdleStaticAnimation;
 	StaticAnimParams _pendingStaticAnimParams;
 
 	AnimationDef _postFacingAnimDef;
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 6c6204f917c..b5dcb8dfa70 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -337,6 +337,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"cr?", ProtoOp::kProtoOpScript, ScriptOps::kItemCheck},
 	{"cr!", ProtoOp::kProtoOpScript, ScriptOps::kItemRemove},
 	{"sr!", ProtoOp::kProtoOpScript, ScriptOps::kItemHighlightSet},
+	{"r?", ProtoOp::kProtoOpScript, ScriptOps::kItemHaveSpace},
 	{"r!", ProtoOp::kProtoOpScript, ScriptOps::kItemAdd},
 	{"cursor!", ProtoOp::kProtoOpScript, ScriptOps::kSetCursor},
 	{"room!", ProtoOp::kProtoOpScript, ScriptOps::kSetRoom},
@@ -347,7 +348,8 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"rnd", ProtoOp::kProtoOpScript, ScriptOps::kRandom},
 	{"drop", ProtoOp::kProtoOpScript, ScriptOps::kDrop},
 	{"dup", ProtoOp::kProtoOpScript, ScriptOps::kDup},
-	{"say2", ProtoOp::kProtoOpScript, ScriptOps::kSay3},	// FIXME: Figure out what the difference is between say2 and say3
+	{"say1", ProtoOp::kProtoOpScript, ScriptOps::kSay3}, // FIXME: Figure out what the difference is between the say ops
+	{"say2", ProtoOp::kProtoOpScript, ScriptOps::kSay3}, // FIXME: Figure out what the difference is between the say ops
 	{"say3", ProtoOp::kProtoOpScript, ScriptOps::kSay3},
 	{"say3@", ProtoOp::kProtoOpScript, ScriptOps::kSay3Get},
 	{"setTimer", ProtoOp::kProtoOpScript, ScriptOps::kSetTimer},
@@ -378,7 +380,9 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"soundL1", ProtoOp::kProtoOpScript, ScriptOps::kSoundL1},
 	{"soundL2", ProtoOp::kProtoOpScript, ScriptOps::kSoundL2},
 	{"soundL3", ProtoOp::kProtoOpScript, ScriptOps::kSoundL3},
+	{"3DsoundS2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundS2},
 	{"3DsoundL2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundL2},
+	{"stopaL", ProtoOp::kProtoOpScript, ScriptOps::kStopAL},
 	{"range", ProtoOp::kProtoOpScript, ScriptOps::kRange},
 	{"addXsound", ProtoOp::kProtoOpScript, ScriptOps::kAddXSound},
 	{"clrXsound", ProtoOp::kProtoOpScript, ScriptOps::kClrXSound},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 3b78b761eef..912a978492c 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -62,6 +62,7 @@ enum ScriptOp {
 	kVarLoad,
 	kVarStore,
 	kItemCheck,
+	kItemHaveSpace,
 	kItemRemove,
 	kItemHighlightSet,
 	kItemAdd,
@@ -75,7 +76,9 @@ enum ScriptOp {
 	kSoundL1,
 	kSoundL2,
 	kSoundL3,
+	k3DSoundS2,
 	k3DSoundL2,
+	kStopAL,
 	kRange,
 	kAddXSound,
 	kClrXSound,




More information about the Scummvm-git-logs mailing list