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

elasota noreply at scummvm.org
Sat May 27 18:17:24 UTC 2023


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:
e829070ba5 VCRUISE: Fix missing runScript function


Commit: e829070ba5f1221f1f4e76085024b9d4b2e25cca
    https://github.com/scummvm/scummvm/commit/e829070ba5f1221f1f4e76085024b9d4b2e25cca
Author: elasota (ejlasota at gmail.com)
Date: 2023-05-27T14:17:10-04:00

Commit Message:
VCRUISE: Fix missing runScript function

Changed paths:
    engines/vcruise/runtime_scriptexec.cpp


diff --git a/engines/vcruise/runtime_scriptexec.cpp b/engines/vcruise/runtime_scriptexec.cpp
index ae2446c7434..8a3626215dc 100644
--- a/engines/vcruise/runtime_scriptexec.cpp
+++ b/engines/vcruise/runtime_scriptexec.cpp
@@ -2047,4 +2047,225 @@ OPCODE_STUB(Fn)
 #undef PEEK_STACK
 #undef OPCODE_STUB
 
+
+#ifdef DISPATCH_OP
+#error "DISPATCH_OP already defined"
+#endif
+
+#define DISPATCH_OP(op)          \
+	case ScriptOps::k##op:       \
+		this->scriptOp##op(arg); \
+		break
+
+bool Runtime::runScript() {
+	if (_scriptCallStack.empty()) {
+		terminateScript();
+		return true;
+	}
+
+	CallStackFrame &frame = _scriptCallStack.back();
+	const Common::Array<Instruction> &instrs = frame._script->instrs;
+
+	while (_gameState == kGameStateScript) {
+		uint instrNum = frame._nextInstruction;
+
+		if (instrNum >= instrs.size()) {
+			_scriptCallStack.pop_back();
+			return true;
+		}
+
+		frame._nextInstruction = instrNum + 1u;
+
+		const Instruction &instr = instrs[instrNum];
+		int32 arg = instr.arg;
+
+		switch (instr.op) {
+			DISPATCH_OP(Number);
+			DISPATCH_OP(Rotate);
+			DISPATCH_OP(Angle);
+			DISPATCH_OP(AngleGGet);
+			DISPATCH_OP(Speed);
+			DISPATCH_OP(SAnimL);
+			DISPATCH_OP(ChangeL);
+
+			DISPATCH_OP(AnimR);
+			DISPATCH_OP(AnimF);
+			DISPATCH_OP(AnimN);
+			DISPATCH_OP(AnimG);
+			DISPATCH_OP(AnimS);
+			DISPATCH_OP(Anim);
+
+			DISPATCH_OP(Static);
+			DISPATCH_OP(VarLoad);
+			DISPATCH_OP(VarStore);
+			DISPATCH_OP(VarAddAndStore);
+			DISPATCH_OP(VarGlobalLoad);
+			DISPATCH_OP(VarGlobalStore);
+			DISPATCH_OP(ItemCheck);
+			DISPATCH_OP(ItemRemove);
+			DISPATCH_OP(ItemHighlightSet);
+			DISPATCH_OP(ItemAdd);
+			DISPATCH_OP(ItemHaveSpace);
+			DISPATCH_OP(ItemClear);
+			DISPATCH_OP(SetCursor);
+			DISPATCH_OP(SetRoom);
+			DISPATCH_OP(LMB);
+			DISPATCH_OP(LMB1);
+			DISPATCH_OP(SoundS1);
+			DISPATCH_OP(SoundS2);
+			DISPATCH_OP(SoundS3);
+			DISPATCH_OP(SoundL1);
+			DISPATCH_OP(SoundL2);
+			DISPATCH_OP(SoundL3);
+			DISPATCH_OP(3DSoundS2);
+			DISPATCH_OP(3DSoundL2);
+			DISPATCH_OP(3DSoundL3);
+			DISPATCH_OP(StopAL);
+			DISPATCH_OP(Range);
+			DISPATCH_OP(AddXSound);
+			DISPATCH_OP(ClrXSound);
+			DISPATCH_OP(StopSndLA);
+			DISPATCH_OP(StopSndLO);
+
+			DISPATCH_OP(Music);
+			DISPATCH_OP(MusicVolRamp);
+			DISPATCH_OP(Parm0);
+			DISPATCH_OP(Parm1);
+			DISPATCH_OP(Parm2);
+			DISPATCH_OP(Parm3);
+			DISPATCH_OP(ParmG);
+			DISPATCH_OP(SParmX);
+			DISPATCH_OP(SAnimX);
+
+			DISPATCH_OP(VolumeDn2);
+			DISPATCH_OP(VolumeDn3);
+			DISPATCH_OP(VolumeDn4);
+			DISPATCH_OP(VolumeUp3);
+			DISPATCH_OP(Random);
+			DISPATCH_OP(Drop);
+			DISPATCH_OP(Dup);
+			DISPATCH_OP(Swap);
+			DISPATCH_OP(Say1);
+			DISPATCH_OP(Say2);
+			DISPATCH_OP(Say3);
+			DISPATCH_OP(Say3Get);
+			DISPATCH_OP(SetTimer);
+			DISPATCH_OP(GetTimer);
+			DISPATCH_OP(Delay);
+			DISPATCH_OP(LoSet);
+			DISPATCH_OP(LoGet);
+			DISPATCH_OP(HiSet);
+			DISPATCH_OP(HiGet);
+
+			DISPATCH_OP(Not);
+			DISPATCH_OP(And);
+			DISPATCH_OP(Or);
+			DISPATCH_OP(Add);
+			DISPATCH_OP(Sub);
+			DISPATCH_OP(Negate);
+			DISPATCH_OP(CmpEq);
+			DISPATCH_OP(CmpGt);
+			DISPATCH_OP(CmpLt);
+
+			DISPATCH_OP(BitLoad);
+			DISPATCH_OP(BitSet0);
+			DISPATCH_OP(BitSet1);
+
+			DISPATCH_OP(Disc1);
+			DISPATCH_OP(Disc2);
+			DISPATCH_OP(Disc3);
+
+			DISPATCH_OP(Goto);
+
+			DISPATCH_OP(EscOn);
+			DISPATCH_OP(EscOff);
+			DISPATCH_OP(EscGet);
+			DISPATCH_OP(BackStart);
+			DISPATCH_OP(SaveAs);
+			DISPATCH_OP(Save0);
+			DISPATCH_OP(Exit);
+			DISPATCH_OP(BlockSaves);
+
+			DISPATCH_OP(AnimName);
+			DISPATCH_OP(ValueName);
+			DISPATCH_OP(VarName);
+			DISPATCH_OP(SoundName);
+			DISPATCH_OP(CursorName);
+			DISPATCH_OP(Dubbing);
+
+			DISPATCH_OP(CheckValue);
+			DISPATCH_OP(Jump);
+
+			// Schizm ops
+			DISPATCH_OP(CallFunction);
+			DISPATCH_OP(Return);
+
+			DISPATCH_OP(MusicStop);
+			DISPATCH_OP(MusicPlayScore);
+			DISPATCH_OP(ScoreAlways);
+			DISPATCH_OP(ScoreNormal);
+			DISPATCH_OP(SndPlay);
+			DISPATCH_OP(SndPlayEx);
+			DISPATCH_OP(SndPlay3D);
+			DISPATCH_OP(SndPlaying);
+			DISPATCH_OP(SndWait);
+			DISPATCH_OP(SndHalt);
+			DISPATCH_OP(SndToBack);
+			DISPATCH_OP(SndStop);
+			DISPATCH_OP(SndStopAll);
+			DISPATCH_OP(SndAddRandom);
+			DISPATCH_OP(SndClearRandom);
+			DISPATCH_OP(VolumeAdd);
+			DISPATCH_OP(VolumeChange);
+			DISPATCH_OP(AnimVolume);
+			DISPATCH_OP(AnimChange);
+			DISPATCH_OP(ScreenName);
+			DISPATCH_OP(ExtractByte);
+			DISPATCH_OP(InsertByte);
+			DISPATCH_OP(String);
+			DISPATCH_OP(CmpNE);
+			DISPATCH_OP(CmpLE);
+			DISPATCH_OP(CmpGE);
+			DISPATCH_OP(Speech);
+			DISPATCH_OP(SpeechEx);
+			DISPATCH_OP(SpeechTest);
+			DISPATCH_OP(Say);
+			DISPATCH_OP(RandomInclusive);
+			DISPATCH_OP(HeroOut);
+			DISPATCH_OP(HeroGetPos);
+			DISPATCH_OP(HeroSetPos);
+			DISPATCH_OP(HeroGet);
+			DISPATCH_OP(Garbage);
+			DISPATCH_OP(GetRoom);
+			DISPATCH_OP(BitAnd);
+			DISPATCH_OP(BitOr);
+			DISPATCH_OP(AngleGet);
+			DISPATCH_OP(IsCDVersion);
+			DISPATCH_OP(IsDVDVersion);
+			DISPATCH_OP(Disc);
+			DISPATCH_OP(HidePanel);
+			DISPATCH_OP(RotateUpdate);
+			DISPATCH_OP(Mul);
+			DISPATCH_OP(Div);
+			DISPATCH_OP(Mod);
+			DISPATCH_OP(GetDigit);
+			DISPATCH_OP(PuzzleInit);
+			DISPATCH_OP(PuzzleCanPress);
+			DISPATCH_OP(PuzzleDoMove1);
+			DISPATCH_OP(PuzzleDoMove2);
+			DISPATCH_OP(PuzzleDone);
+			DISPATCH_OP(PuzzleWhoWon);
+			DISPATCH_OP(Fn);
+			DISPATCH_OP(ItemHighlightSetTrue);
+
+		default:
+			error("Unimplemented opcode %i", static_cast<int>(instr.op));
+		}
+	}
+
+	return true;
+}
+
+#undef DISPATCH_OP
+
 } // End of namespace VCruise




More information about the Scummvm-git-logs mailing list