[Scummvm-git-logs] scummvm master -> 9a52d47ce63b92f4489bb85a29e37dc9726c0734

elasota noreply at scummvm.org
Thu Mar 23 02:51:16 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:
12b16bed60 VCRUISE: Add save0, exit, 3DsoundL3, dubbing, BIN, and setaX+ opcodes.
9a52d47ce6 VCRUISE: Add delay opcode.


Commit: 12b16bed6037ca8e30648f44046b24928dff7612
    https://github.com/scummvm/scummvm/commit/12b16bed6037ca8e30648f44046b24928dff7612
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-22T22:48:24-04:00

Commit Message:
VCRUISE: Add save0, exit, 3DsoundL3, dubbing, BIN, and setaX+ opcodes.

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 b3044432301..8c3a74e1f61 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1022,6 +1022,7 @@ bool Runtime::runScript() {
 			DISPATCH_OP(Static);
 			DISPATCH_OP(VarLoad);
 			DISPATCH_OP(VarStore);
+			DISPATCH_OP(VarAddAndStore);
 			DISPATCH_OP(VarGlobalLoad);
 			DISPATCH_OP(VarGlobalStore);
 			DISPATCH_OP(ItemCheck);
@@ -1042,6 +1043,7 @@ bool Runtime::runScript() {
 			DISPATCH_OP(SoundL3);
 			DISPATCH_OP(3DSoundS2);
 			DISPATCH_OP(3DSoundL2);
+			DISPATCH_OP(3DSoundL3);
 			DISPATCH_OP(StopAL);
 			DISPATCH_OP(Range);
 			DISPATCH_OP(AddXSound);
@@ -1104,12 +1106,15 @@ bool Runtime::runScript() {
 			DISPATCH_OP(EscGet);
 			DISPATCH_OP(BackStart);
 			DISPATCH_OP(SaveAs);
+			DISPATCH_OP(Save0);
+			DISPATCH_OP(Exit);
 
 			DISPATCH_OP(AnimName);
 			DISPATCH_OP(ValueName);
 			DISPATCH_OP(VarName);
 			DISPATCH_OP(SoundName);
 			DISPATCH_OP(CursorName);
+			DISPATCH_OP(Dubbing);
 
 			DISPATCH_OP(CheckValue);
 			DISPATCH_OP(Jump);
@@ -2852,6 +2857,18 @@ void Runtime::scriptOpVarStore(ScriptArg_t arg) {
 	_variables[varID] = stackArgs[0];
 }
 
+void Runtime::scriptOpVarAddAndStore(ScriptArg_t arg) {
+	TAKE_STACK(2);
+
+	uint32 varID = (static_cast<uint32>(_roomNumber) << 16) | static_cast<uint32>(stackArgs[0]);
+
+	Common::HashMap<uint32, int32>::iterator it = _variables.find(varID);
+	if (it == _variables.end())
+		_variables[varID] = stackArgs[1];
+	else
+		it->_value += stackArgs[1];
+}
+
 void Runtime::scriptOpVarGlobalLoad(ScriptArg_t arg) {
 	TAKE_STACK(1);
 
@@ -3021,6 +3038,13 @@ void Runtime::scriptOp3DSoundL2(ScriptArg_t arg) {
 	triggerSound(true, stackArgs[0], stackArgs[1], 0, true);
 }
 
+void Runtime::scriptOp3DSoundL3(ScriptArg_t arg) {
+	TAKE_STACK(5);
+
+	setSound3DParameters(stackArgs[0], stackArgs[3], stackArgs[4], _pendingSoundParams3D);
+	triggerSound(true, stackArgs[0], stackArgs[1], stackArgs[2], true);
+}
+
 void Runtime::scriptOp3DSoundS2(ScriptArg_t arg) {
 	TAKE_STACK(4);
 
@@ -3156,8 +3180,8 @@ void Runtime::scriptOpSParmX(ScriptArg_t arg) {
 	_pendingStaticAnimParams.repeatDelay = stackArgs[1];
 	_pendingStaticAnimParams.lockInteractions = (stackArgs[2] != 0);
 
-	if (_pendingStaticAnimParams.lockInteractions)
-		error("Locking interactions for animation is not implemented yet");
+	//if (_pendingStaticAnimParams.lockInteractions)
+	//	error("Locking interactions for animation is not implemented yet");
 }
 
 void Runtime::scriptOpSAnimX(ScriptArg_t arg) {
@@ -3370,6 +3394,14 @@ void Runtime::scriptOpSaveAs(ScriptArg_t arg) {
 	(void)stackArgs;
 }
 
+void Runtime::scriptOpSave0(ScriptArg_t arg) {
+	warning("save0 op not implemented");
+}
+
+void Runtime::scriptOpExit(ScriptArg_t arg) {
+	warning("exit op not implemented");
+}
+
 void Runtime::scriptOpNot(ScriptArg_t arg) {
 	TAKE_STACK(1);
 
@@ -3596,6 +3628,10 @@ void Runtime::scriptOpCursorName(ScriptArg_t arg) {
 	_scriptStack.push_back(namedCursorIt->_value);
 }
 
+void Runtime::scriptOpDubbing(ScriptArg_t arg) {
+	warning("Dubbing op not implemented");
+}
+
 void Runtime::scriptOpCheckValue(ScriptArg_t arg) {
 	PEEK_STACK(1);
 
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 9c2256104f9..742536b1d44 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -531,6 +531,7 @@ private:
 	void scriptOpStatic(ScriptArg_t arg);
 	void scriptOpVarLoad(ScriptArg_t arg);
 	void scriptOpVarStore(ScriptArg_t arg);
+	void scriptOpVarAddAndStore(ScriptArg_t arg);
 	void scriptOpVarGlobalLoad(ScriptArg_t arg);
 	void scriptOpVarGlobalStore(ScriptArg_t arg);
 
@@ -553,6 +554,7 @@ private:
 	void scriptOpSoundL3(ScriptArg_t arg);
 	void scriptOp3DSoundS2(ScriptArg_t arg);
 	void scriptOp3DSoundL2(ScriptArg_t arg);
+	void scriptOp3DSoundL3(ScriptArg_t arg);
 	void scriptOpStopAL(ScriptArg_t arg);
 	void scriptOpRange(ScriptArg_t arg);
 	void scriptOpAddXSound(ScriptArg_t arg);
@@ -615,12 +617,15 @@ private:
 	void scriptOpEscGet(ScriptArg_t arg);
 	void scriptOpBackStart(ScriptArg_t arg);
 	void scriptOpSaveAs(ScriptArg_t arg);
+	void scriptOpSave0(ScriptArg_t arg);
+	void scriptOpExit(ScriptArg_t arg);
 
 	void scriptOpAnimName(ScriptArg_t arg);
 	void scriptOpValueName(ScriptArg_t arg);
 	void scriptOpVarName(ScriptArg_t arg);
 	void scriptOpSoundName(ScriptArg_t arg);
 	void scriptOpCursorName(ScriptArg_t arg);
+	void scriptOpDubbing(ScriptArg_t arg);
 
 	void scriptOpCheckValue(ScriptArg_t arg);
 	void scriptOpJump(ScriptArg_t arg);
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 52d62778d49..346eb56ed6d 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -152,6 +152,7 @@ private:
 	bool parseNumber(const Common::String &token, uint32 &outNumber) const;
 	static bool parseDecNumber(const Common::String &token, uint start, uint32 &outNumber);
 	static bool parseHexNumber(const Common::String &token, uint start, uint32 &outNumber);
+	static bool parseBinNumber(const Common::String &token, uint start, uint32 &outNumber);
 	void expectNumber(uint32 &outNumber);
 
 	void compileRoomScriptSet(RoomScriptSet *rss);
@@ -165,6 +166,7 @@ private:
 	enum NumberParsingMode {
 		kNumberParsingDec,
 		kNumberParsingHex,
+		kNumberParsingBin,
 	};
 
 	TextParser &_parser;
@@ -191,6 +193,8 @@ bool ScriptCompiler::parseNumber(const Common::String &token, uint32 &outNumber)
 			return parseDecNumber(token, 0, outNumber);
 		case kNumberParsingHex:
 			return parseHexNumber(token, 0, outNumber);
+		case kNumberParsingBin:
+			return parseBinNumber(token, 0, outNumber);
 		default:
 			error("Unknown number parsing mode");
 			return false;
@@ -224,6 +228,23 @@ bool ScriptCompiler::parseHexNumber(const Common::String &token, uint start, uin
 	return true;
 }
 
+bool ScriptCompiler::parseBinNumber(const Common::String &token, uint start, uint32 &outNumber) {
+	if (start == token.size())
+		return false;
+
+	uint num = 0;
+	for (char c : token) {
+		num <<= 1;
+		if (c == '1')
+			num |= 1;
+		else if (c != '0')
+			return false;
+	}
+
+	outNumber = num;
+	return true;
+}
+
 void ScriptCompiler::expectNumber(uint32 &outNumber) {
 	TextParserState state;
 	Common::String token;
@@ -313,6 +334,12 @@ void ScriptCompiler::compileScreenScriptSet(ScreenScriptSet *sss) {
 			_numberParsingMode = kNumberParsingDec;
 		} else if (token == "HEX") {
 			_numberParsingMode = kNumberParsingHex;
+		} else if (token == "BIN") {
+			_numberParsingMode = kNumberParsingBin;
+		} else if (token == "dubbing") {
+			Common::String dubbingName;
+			_parser.expectToken(dubbingName, _blamePath);
+			protoScript.instrs.push_back(ProtoInstruction(ScriptOps::kDubbing, indexString(dubbingName)));
 		} else if (compileInstructionToken(protoScript, token)) {
 			// Nothing
 		} else {
@@ -340,6 +367,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"yes!", ProtoOp::kProtoOpScript, ScriptOps::kVarStore},
 	{"yesg@", ProtoOp::kProtoOpScript, ScriptOps::kVarGlobalLoad},
 	{"yesg!", ProtoOp::kProtoOpScript, ScriptOps::kVarGlobalStore},
+	{"setaX+!", ProtoOp::kProtoOpScript, ScriptOps::kVarAddAndStore},
 	{"cr?", ProtoOp::kProtoOpScript, ScriptOps::kItemCheck},
 	{"cr!", ProtoOp::kProtoOpScript, ScriptOps::kItemRemove},
 	{"sr!", ProtoOp::kProtoOpScript, ScriptOps::kItemHighlightSet},
@@ -392,6 +420,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"soundL3", ProtoOp::kProtoOpScript, ScriptOps::kSoundL3},
 	{"3DsoundS2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundS2},
 	{"3DsoundL2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundL2},
+	{"3DsoundL3", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundL3},
 	{"stopaL", ProtoOp::kProtoOpScript, ScriptOps::kStopAL},
 	{"range", ProtoOp::kProtoOpScript, ScriptOps::kRange},
 	{"addXsound", ProtoOp::kProtoOpScript, ScriptOps::kAddXSound},
@@ -431,6 +460,8 @@ static ScriptNamedInstruction g_namedInstructions[] = {
 	{"esc_get@", ProtoOp::kProtoOpScript, ScriptOps::kEscGet},
 	{"backStart", ProtoOp::kProtoOpScript, ScriptOps::kBackStart},
 	{"saveAs", ProtoOp::kProtoOpScript, ScriptOps::kSaveAs},
+	{"save0", ProtoOp::kProtoOpNoop, ScriptOps::kSave0},
+	{"exit", ProtoOp::kProtoOpNoop, ScriptOps::kExit},
 	{"allowedSave", ProtoOp::kProtoOpNoop, ScriptOps::kInvalid},
 };
 
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 9e72966b26f..5f69d5aaae4 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -61,6 +61,7 @@ enum ScriptOp {
 	kStatic,
 	kVarLoad,
 	kVarStore,
+	kVarAddAndStore,
 	kVarGlobalLoad,
 	kVarGlobalStore,
 	kItemCheck,
@@ -81,6 +82,7 @@ enum ScriptOp {
 	kSoundL3,
 	k3DSoundS2,
 	k3DSoundL2,
+	k3DSoundL3,
 	kStopAL,
 	kRange,
 	kAddXSound,
@@ -141,12 +143,15 @@ enum ScriptOp {
 	kEscGet,
 	kBackStart,
 	kSaveAs,
+	kSave0,
+	kExit,
 
 	kAnimName,
 	kValueName,
 	kVarName,
 	kSoundName,
 	kCursorName,
+	kDubbing,
 
 	kCheckValue,	// Check if stack top is equal to arg.  If it is, pop the argument, otherwise leave it on the stack and skip the next instruction.
 	kJump,			// Offset instruction index by arg.


Commit: 9a52d47ce63b92f4489bb85a29e37dc9726c0734
    https://github.com/scummvm/scummvm/commit/9a52d47ce63b92f4489bb85a29e37dc9726c0734
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-22T22:50:29-04:00

Commit Message:
VCRUISE: Add delay opcode.

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


diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index 8c3a74e1f61..0651d42bd46 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -355,6 +355,7 @@ Runtime::Runtime(OSystem *system, Audio::Mixer *mixer, const Common::FSNode &roo
 	  _animFrameRateLock(0), _animStartTime(0), _animFramesDecoded(0), _animDecoderState(kAnimDecoderStateStopped),
 	  _animPlayWhileIdle(false), _idleIsOnInteraction(false), _idleHaveClickInteraction(false), _idleHaveDragInteraction(false), _idleInteractionID(0), _haveIdleStaticAnimation(false),
 	  /*_loadedArea(0), */_lmbDown(false), _lmbDragging(false), _lmbReleaseWasClick(false), _lmbDownTime(0),
+	  _delayCompletionTime(0),
 	  _panoramaState(kPanoramaStateInactive),
 	  _listenerX(0), _listenerY(0), _listenerAngle(0) {
 
@@ -459,6 +460,9 @@ bool Runtime::runFrame() {
 		case kGameStateIdle:
 			moreActions = runIdle();
 			break;
+		case kGameStateDelay:
+			moreActions = runDelay();
+			break;
 		case kGameStatePanLeft:
 			moreActions = runHorizontalPan(false);
 			break;
@@ -621,6 +625,15 @@ bool Runtime::runIdle() {
 	return false;
 }
 
+bool Runtime::runDelay() {
+	if (g_system->getMillis() >= _delayCompletionTime) {
+		_gameState = kGameStateScript;
+		return true;
+	}
+
+	return false;
+}
+
 bool Runtime::runHorizontalPan(bool isRight) {
 	bool animEnded = false;
 	continuePlayingAnimation(true, false, animEnded);
@@ -3326,8 +3339,8 @@ void Runtime::scriptOpGetTimer(ScriptArg_t arg) {
 void Runtime::scriptOpDelay(ScriptArg_t arg) {
 	TAKE_STACK(1);
 
-	warning("Delay opcode is not implemented yet");
-	(void)stackArgs;
+	_gameState = kGameStateDelay;
+	_delayCompletionTime = g_system->getMillis() + stackArgs[0];
 }
 
 void Runtime::scriptOpLoSet(ScriptArg_t arg) {
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 742536b1d44..553c0eb4662 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -78,6 +78,7 @@ enum GameState {
 	kGameStateWaitingForFacingToAnim,		// Waiting for a blocking animation to complete, then playing _postFacingAnimDef and switching to kGameStateWaitingForAnimation
 	kGameStateQuit,							// Quitting
 	kGameStateIdle,							// Waiting for input events
+	kGameStateDelay,						// Waiting for delay completion time
 	kGameStateScript,						// Running a script
 	kGameStateGyroIdle,						// Waiting for mouse movement to run a gyro
 	kGameStateGyroAnimation,				// Animating a gyro
@@ -443,6 +444,7 @@ private:
 	typedef int32 StackValue_t;
 
 	bool runIdle();
+	bool runDelay();
 	bool runHorizontalPan(bool isRight);
 	bool runScript();
 	bool runWaitForAnimation();
@@ -668,6 +670,8 @@ private:
 	Common::String _idleCurrentStaticAnimation;
 	StaticAnimParams _pendingStaticAnimParams;
 
+	uint32 _delayCompletionTime;
+
 	AnimationDef _postFacingAnimDef;
 
 	Common::HashMap<uint32, int32> _variables;




More information about the Scummvm-git-logs mailing list