[Scummvm-git-logs] scummvm master -> f005aa607fb5762a14774216af4b374b903e1388
elasota
noreply at scummvm.org
Wed May 10 01:54:06 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:
f005aa607f VCRUISE: Fix some save restore problems in Schizm and add more script ops.
Commit: f005aa607fb5762a14774216af4b374b903e1388
https://github.com/scummvm/scummvm/commit/f005aa607fb5762a14774216af4b374b903e1388
Author: elasota (ejlasota at gmail.com)
Date: 2023-05-09T21:53:44-04:00
Commit Message:
VCRUISE: Fix some save restore problems in Schizm and add more script 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 f226180758b..a1cbdb6b717 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -816,7 +816,7 @@ LoadGameOutcome SaveGameSnapshot::read(Common::ReadStream *stream) {
else
numStates = 1;
- if (numStates < 1 || numStates >= kMaxStates)
+ if (numStates < 1 || numStates > kMaxStates)
return kLoadGameOutcomeSaveDataCorrupted;
for (uint sti = 0; sti < numStates; sti++) {
@@ -2047,7 +2047,6 @@ bool Runtime::runScript() {
DISPATCH_OP(SndClearRandom);
DISPATCH_OP(VolumeAdd);
DISPATCH_OP(VolumeChange);
- DISPATCH_OP(VolumeDown);
DISPATCH_OP(AnimVolume);
DISPATCH_OP(AnimChange);
DISPATCH_OP(ScreenName);
@@ -4651,6 +4650,9 @@ void Runtime::recordSaveGameSnapshot() {
if (_musicVolumeRampRatePerMSec != 0)
mainState->musicVolume = _musicVolumeRampEnd;
+ mainState->scoreSection = _scoreSection;
+ mainState->scoreTrack = _scoreTrack;
+
mainState->loadedAnimation = _loadedAnimation;
mainState->animDisplayingFrame = _animDisplayingFrame;
@@ -4742,7 +4744,15 @@ void Runtime::restoreSaveGameSnapshot() {
_musicActive = mainState->musicActive;
- changeMusicTrack(mainState->musicTrack);
+ if (_gameID == GID_REAH)
+ changeMusicTrack(mainState->musicTrack);
+ if (_gameID == GID_SCHIZM) {
+ if (_musicActive) {
+ _scoreSection = mainState->scoreSection;
+ _scoreTrack = mainState->scoreTrack;
+ startScoreSection();
+ }
+ }
// Stop all sounds since the player instances are stored in the sound cache.
for (Common::SharedPtr<SoundInstance> &snd : _activeSounds)
@@ -5670,7 +5680,7 @@ void Runtime::scriptOpVolumeDn2(ScriptArg_t arg) {
resolveSoundByNameOrID(sndIDArgs[0], true, soundID, cachedSound);
if (cachedSound)
- triggerSoundRamp(*cachedSound, durationMSec, 0, true);
+ triggerSoundRamp(*cachedSound, durationMSec, getSilentSoundVolume(), true);
}
}
@@ -6261,7 +6271,26 @@ void Runtime::scriptOpSndPlay(ScriptArg_t arg) {
}
OPCODE_STUB(SndPlayEx)
-OPCODE_STUB(SndPlay3D)
+
+void Runtime::scriptOpSndPlay3D(ScriptArg_t arg) {
+ TAKE_STACK_INT_NAMED(5, sndParamArgs);
+ TAKE_STACK_STR_NAMED(1, sndNameArgs);
+
+ StackInt_t soundID = 0;
+ SoundInstance *cachedSound = nullptr;
+ resolveSoundByName(sndNameArgs[0], true, soundID, cachedSound);
+
+ SoundParams3D sndParams;
+ sndParams.unknownRange = sndParamArgs[2];
+ sndParams.minRange = sndParamArgs[3];
+ sndParams.maxRange = sndParamArgs[4];
+
+ if (cachedSound) {
+ setSound3DParameters(*cachedSound, sndParamArgs[0], sndParamArgs[1], sndParams);
+ triggerSound(true, *cachedSound, getSilentSoundVolume(), 0, true, false);
+ }
+}
+
OPCODE_STUB(SndPlaying)
void Runtime::scriptOpSndWait(ScriptArg_t arg) {
@@ -6291,8 +6320,6 @@ void Runtime::scriptOpVolumeChange(ScriptArg_t arg) {
triggerSoundRamp(*cachedSound, stackArgs[1] * 100, stackArgs[2], false);
}
-OPCODE_STUB(VolumeDown)
-
void Runtime::scriptOpAnimVolume(ScriptArg_t arg) {
TAKE_STACK_INT(1);
@@ -6399,7 +6426,10 @@ OPCODE_STUB(Garbage)
OPCODE_STUB(GetRoom)
OPCODE_STUB(BitAnd)
OPCODE_STUB(BitOr)
-OPCODE_STUB(AngleGet)
+
+void Runtime::scriptOpAngleGet(ScriptArg_t arg) {
+ _scriptStack.push_back(StackValue(_direction));
+}
void Runtime::scriptOpIsDVDVersion(ScriptArg_t arg) {
_scriptStack.push_back(StackValue(_isCDVariant ? 0 : 1));
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 45810b9e39d..6a827870f0d 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -1001,7 +1001,6 @@ private:
void scriptOpSndClearRandom(ScriptArg_t arg);
void scriptOpVolumeAdd(ScriptArg_t arg);
void scriptOpVolumeChange(ScriptArg_t arg);
- void scriptOpVolumeDown(ScriptArg_t arg);
void scriptOpAnimVolume(ScriptArg_t arg);
void scriptOpAnimChange(ScriptArg_t arg);
void scriptOpScreenName(ScriptArg_t arg);
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 1340754b53a..6e6f031e128 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -678,7 +678,7 @@ static ScriptNamedInstruction g_schizmNamedInstructions[] = {
{"SndStopAll", ProtoOp::kProtoOpScript, ScriptOps::kSndStopAll},
{"VolumeAdd", ProtoOp::kProtoOpScript, ScriptOps::kVolumeAdd},
{"VolumeChange", ProtoOp::kProtoOpScript, ScriptOps::kVolumeChange},
- {"VolumeDown", ProtoOp::kProtoOpScript, ScriptOps::kVolumeDown},
+ {"VolumeDown", ProtoOp::kProtoOpScript, ScriptOps::kVolumeDn2},
{"esc_on", ProtoOp::kProtoOpScript, ScriptOps::kEscOn},
{"esc_off", ProtoOp::kProtoOpScript, ScriptOps::kEscOff},
{"esc_get@", ProtoOp::kProtoOpScript, ScriptOps::kEscGet},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 00562195dff..40cac394e91 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -176,7 +176,6 @@ enum ScriptOp {
kSndClearRandom,
kVolumeAdd,
kVolumeChange,
- kVolumeDown,
kAnimVolume,
kAnimChange,
kScreenName,
More information about the Scummvm-git-logs
mailing list