[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