[Scummvm-git-logs] scummvm branch-3-0 -> f8a998632e1cb7481fed390ba362351acb9fc1fb
moralrecordings
noreply at scummvm.org
Sat Nov 29 09:08:33 UTC 2025
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
7d33d5e870 DIRECTOR: Add full version of rednex to detection table
618bd760ce DIRECTOR: Add guardrail for zero-rectangle transition area
f4697c1d3a DIRECTOR: Fix regression in score audio playback
f8a998632e DIRECTOR: Improve accuracy of sound playback on movie switch
Commit: 7d33d5e8703ce9360d82335db7485d4f561b6d15
https://github.com/scummvm/scummvm/commit/7d33d5e8703ce9360d82335db7485d4f561b6d15
Author: Scott Percival (code at moral.net.au)
Date: 2025-11-29T17:08:17+08:00
Commit Message:
DIRECTOR: Add full version of rednex to detection table
Changed paths:
engines/director/detection_tables.h
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index dd7aaf65246..18d7f4b3536 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -890,9 +890,9 @@ static const PlainGameDescriptor directorGames[] = {
{ "listen7up", "Listen 7UP! Music Mix CD: Volume 1" },
{ "nyack", "Nyack 11-Track Player" },
{ "princerave", "Prince: Rave Un2 the Joy Fantastic" },
+ { "rednex", "Inbred With REDNEX" },
{ "relaxation", "Solitudes: Natural Relaxation" },
{ "relaxplayer", "Solitudes: Natural Relaxation Audio Player" },
- { "rednex", "Inbred with Rednex" },
{ "royksoppam", "Röyksopp: Melody A.M." },
{ "sarahsurfacing", "Sarah McLachlan: Surfacing" },
{ "smashchillin", "Smash Hits: Chillin' Out Summer 2001" },
@@ -4836,10 +4836,8 @@ static const DirectorGameDescription gameDescriptions[] = {
WINGAME2_l("ios", "How To Game", "HOW.EXE", "a526a724f26e266b17815b4f7f7ae079", 1863309,
"HOW02", "86a19681ed45c043b5756f5a6ea189de", 2116536, Common::JA_JPN, 404),
- MACGAME1("isaslm", "", "install this stuff/VM folder/VMplay", "27519b873d23565470f627ad2f3d1b03", 322465, 400),
- // WINGAME1t("isaslm", "", "PLAY_IT.EXE", "ab30cc755f44ac3844fee3214cfc5ead", 691009, 400),
- WINGAME1t("isaslm", "", "VMCD.EXE", "02b7441caf27724af5d055259d0d8e30", 1104401, 400),
-
+ MACGAME1("isaslm", "", "install this stuff/VM folder/VMplay", "rt:1762dd0cfeef33753ccda4ef0a61544e", 322465, 404),
+ WINGAME1t("isaslm", "", "VMCD.EXE", "t:02b7441caf27724af5d055259d0d8e30", 1104401, 404),
MACGAME1("isis", "", "ISIS", "dedfabf9ee7bf5aab003bdab4137bca6", 777630, 404),
WINGAME2("isis", "", "ISIS.EXE", "59c1cb960199dd3f041262ab5271bb23", 14747213,
@@ -5848,6 +5846,8 @@ static const DirectorGameDescription gameDescriptions[] = {
// MacFormat #40
MACDEMO1("rednex", "Demo", "RedNex", "rt:99a4f9d7fb487053826c42e97aa96b33", 483490, 404),
WINDEMO1("rednex", "Demo", "REDNEX.EXE", "t:e1d181303fd8c2aed5cd1d69b0c985e7", 696877, 404),
+ MACGAME1("rednex", "", "RedNex PPC", "tr:00263777ffe8ac57a58fbc931d52ac51", 58292, 404),
+ WINGAME1("rednex", "", "REDNEX.EXE", "t:14fae6eca2a359b6b10ff9a98c217f65", 692585, 404),
MACDEMO1("redshift", "1994 Demo", "RSDEMO.MAC", "r:4f7ff33ce95ed9f42befdae4f9b6b690", 291988, 403),
// Sound / No Sound demos found on MacFormat August '94
Commit: 618bd760cec3c0911ca6b8161493a6657306cf60
https://github.com/scummvm/scummvm/commit/618bd760cec3c0911ca6b8161493a6657306cf60
Author: Scott Percival (code at moral.net.au)
Date: 2025-11-29T17:08:17+08:00
Commit Message:
DIRECTOR: Add guardrail for zero-rectangle transition area
Fixes crash when starting rednex.
Changed paths:
engines/director/transitions.cpp
diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index d8168e519a8..7e0d6bbe87e 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -282,6 +282,10 @@ void Window::playTransition(uint frame, RenderMode mode, uint16 transDuration, u
uint w = clipRect.width();
uint h = clipRect.height();
+ if (w == 0 || h == 0) {
+ warning("Window::playTransition(): zero-sized clip rect, aborting");
+ return;
+ }
for (uint16 i = 1; i < t.steps + 1; i++) {
uint32 startTime = g_system->getMillis();
Commit: f4697c1d3a90408d599926ff86f8a032d5969cff
https://github.com/scummvm/scummvm/commit/f4697c1d3a90408d599926ff86f8a032d5969cff
Author: Scott Percival (code at moral.net.au)
Date: 2025-11-29T17:08:17+08:00
Commit Message:
DIRECTOR: Fix regression in score audio playback
This reverts commit 169fd65780d90e9208ba6b7f0c190fb424584a3d.
Fixes missing sound in the introduction (after picking up the furoshiki)
and clicking the nose of the big head in Eastern Mind.
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index b72becc0869..b573b303647 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -773,7 +773,7 @@ void Score::update() {
bool sound1Changed = true;
bool sound2Changed = true;
- if (!_firstRun) {
+ if (_version >= kFileVer600 && !_firstRun) {
// We check if the sound channels have changed, and only restart
// the sound if they have. Even if the sound was stopped
//
Commit: f8a998632e1cb7481fed390ba362351acb9fc1fb
https://github.com/scummvm/scummvm/commit/f8a998632e1cb7481fed390ba362351acb9fc1fb
Author: Scott Percival (code at moral.net.au)
Date: 2025-11-29T17:08:17+08:00
Commit Message:
DIRECTOR: Improve accuracy of sound playback on movie switch
Fixes music playback in The Saboten Man. Confirmed to work with the
INTRO3.DXR/INTRO4.DXR cutscene switch in Elroy Goes Bugzerk.
Changed paths:
engines/director/score.cpp
engines/director/sound.cpp
engines/director/sound.h
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index b573b303647..de958d337e9 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -337,9 +337,6 @@ void Score::startPlay() {
_channels.push_back(new Channel(this, _currentFrame->_sprites[i], i));
updateSprites(kRenderForceUpdate, true);
-
- _soundManager->disablePuppetSound(1);
- _soundManager->disablePuppetSound(2);
}
void Score::step() {
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index 0e93ad4fa8c..b8b03a25698 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -95,6 +95,7 @@ void DirectorSound::playFile(Common::String filename, int soundChannel) {
// Set the last played sound so that cast member 0 in the sound channel doesn't stop this file.
setLastPlayedSound(soundChannel, SoundID(), false);
+ _channels[soundChannel]->fromLastMovie = false;
}
void DirectorSound::playMCI(Audio::AudioStream &stream, uint32 from, uint32 to) {
@@ -143,6 +144,7 @@ void DirectorSound::playStream(Audio::AudioStream &stream, int soundChannel) {
if (_channels[soundChannel]->pitchShiftPercent != 100) {
_mixer->setChannelRate(_channels[soundChannel]->handle, _channels[soundChannel]->originalRate*_channels[soundChannel]->pitchShiftPercent/100);
}
+ _channels[soundChannel]->fromLastMovie = false;
}
void DirectorSound::playSound(SoundID soundID, int soundChannel, bool forPuppet) {
@@ -171,7 +173,7 @@ void DirectorSound::playCastMember(CastMemberID memberID, int soundChannel, bool
stopSound(soundChannel);
// Director 4 will stop after the current loop iteration, but
// Director 3 will continue looping until the sound is replaced.
- } else if (g_director->getVersion() >= 400) {
+ } else if (g_director->getVersion() >= 400 && !_channels[soundChannel]->fromLastMovie) {
// If there is a loopable stream specified, set the loop to expire by itself
if (_channels[soundChannel]->loopPtr) {
debugC(5, kDebugSound, "DirectorSound::playCastMember(): telling loop in channel %d to stop", soundChannel);
@@ -481,8 +483,11 @@ void DirectorSound::playExternalSound(uint16 menu, uint16 submenu, int soundChan
void DirectorSound::changingMovie() {
for (auto &it : _channels) {
it._value->movieChanged = true;
+
+ // When switching movies, the puppetSound flag is disabled. This means any sound (channel or script)
+ // can take over. Any existing sound that is playing (sample or loop) will continue to play until that happens.
if (isChannelPuppet(it._key)) {
- setPuppetSound(SoundID(), it._key); // disable puppet sound
+ disablePuppetSound(it._key); // disable puppet sound
}
if (isChannelActive(it._key)) {
@@ -498,6 +503,9 @@ void DirectorSound::changingMovie() {
_mixer->loopChannel(it._value->handle);
}
}
+
+ // Flag that this is from a previous movie, therefore looping should continue.
+ it._value->fromLastMovie = true;
}
}
unloadSampleSounds(); // TODO: we can possibly keep this between movies
@@ -527,6 +535,7 @@ void DirectorSound::stopSound(int soundChannel) {
cancelFade(soundChannel);
_mixer->stopHandle(_channels[soundChannel]->handle);
setLastPlayedSound(soundChannel, SoundID());
+ _channels[soundChannel]->fromLastMovie = false;
return;
}
@@ -542,6 +551,7 @@ void DirectorSound::stopSound() {
_mixer->stopHandle(it._value->handle);
setLastPlayedSound(it._key, SoundID());
+ it._value->fromLastMovie = false;
}
_mixer->stopHandle(_scriptSound);
diff --git a/engines/director/sound.h b/engines/director/sound.h
index fae22ba74a8..6c895163dc9 100644
--- a/engines/director/sound.h
+++ b/engines/director/sound.h
@@ -141,6 +141,7 @@ struct SoundChannel {
Audio::SoundHandle handle;
SoundID lastPlayedSound;
bool stopOnZero; // Should the sound be stopped when the channel contains cast member 0?
+ bool fromLastMovie; // Was this sound carried over from a movie switch?
byte volume;
int pitchShiftPercent;
int originalRate;
@@ -159,7 +160,7 @@ struct SoundChannel {
// a stop at the end of a loop.
Audio::LoopableAudioStream *loopPtr;
- SoundChannel(): handle(), lastPlayedSound(SoundID()), stopOnZero(true), volume(255), originalRate(-1),
+ SoundChannel(): handle(), lastPlayedSound(SoundID()), stopOnZero(true), fromLastMovie(false), volume(255), originalRate(-1),
pitchShiftPercent(100), fade(nullptr), puppet(SoundID()), newPuppet(false), movieChanged(false), loopPtr(nullptr),
lastCuePointIndex(-1) {}
};
More information about the Scummvm-git-logs
mailing list