[Scummvm-git-logs] scummvm master -> 16208dc58952e985d36b80561ea7908aeb3d76b4
moralrecordings
noreply at scummvm.org
Sat Jun 22 07:10:30 UTC 2024
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
adc423c9b3 DIRECTOR: Update Mac entry for fishwish
8c20d10e0b DIRECTOR: Fix check for factory methods when calling
63b885e915 DIRECTOR: LINGO: Fix string conversion of floats
576cdfc180 DIRECTOR: Fix double-use-after-free in b_move
554b9a9987 DIRECTOR: Validate all palette cast member IDs before use
413c0aed2a COMMON: Add QuickTime IMA ADPCM decoder for AIFF
3853c3c6f9 DIRECTOR: Add timing debug messages to transition code
16208dc589 DIRECTOR: LINGO: Fix b_puppetTransition
Commit: adc423c9b36e51ac6dfe1e971ed91a33c1b9b311
https://github.com/scummvm/scummvm/commit/adc423c9b36e51ac6dfe1e971ed91a33c1b9b311
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:03:36+08:00
Commit Message:
DIRECTOR: Update Mac entry for fishwish
Changed paths:
engines/director/detection_tables.h
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index fe02b421df5..7b99da15f8d 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -4065,7 +4065,8 @@ static const DirectorGameDescription gameDescriptions[] = {
// Tivola edition is dual language De/En
// De vis die kon wensen localized by Bombilla, Amsterdam
// Published in English by Oxford University Press (1995)
- MACGAME1_l("fishwish", "", "Willy, der Zauberfisch", "ab2bda961c62f9deb2c1ba297d0a1ea9", 501559, Common::DE_DEU, 404),
+ MACGAME2_l("fishwish", "", "Willy, der Zauberfisch", "tr:9468b9c1e345d60113e6446bbdcf1bfc", 501559,
+ "eData/BUMPER.Dir", "t:8576a2bab07feb9f7055bfd5ceb3b2c4", 307048, Common::DE_DEU, 404),
WINGAME2_l("fishwish", "", "WILLY.EXE", "t:8b96b5ebd1e11d431e08971a2e3b6053", 2503499,
"EDATA/BUMPER.DIR", "t:8576a2bab07feb9f7055bfd5ceb3b2c4", 307048, Common::DE_DEU, 404),
WINGAME1_l("fishwish", "", "WENSVIS.EXE", "t:00f0a44e802160a22a28ef855942b91c", 696993, Common::NL_NLD, 404),
Commit: 8c20d10e0b7670808c7591c69aaf473136f7a376
https://github.com/scummvm/scummvm/commit/8c20d10e0b7670808c7591c69aaf473136f7a376
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:03:36+08:00
Commit Message:
DIRECTOR: Fix check for factory methods when calling
Fixes the horse screen in The Fish Who Could Wish.
Changed paths:
engines/director/lingo/lingo-code.cpp
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index a63ab5d7546..470f4789c7f 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1586,7 +1586,7 @@ void LC::call(const Common::String &name, int nargs, bool allowRetVal) {
if (g_lingo->_state->me.type == OBJECT) {
AbstractObject *target = g_lingo->_state->me.u.obj;
funcSym = target->getMethod(name);
- if (name.hasPrefixIgnoreCase("m") && funcSym.type != VOIDSYM) {
+ if (funcSym.type != VOIDSYM) {
if (nargs == 0) {
debugC(3, kDebugLingoExec, "Factory method call detected with missing first arg");
g_lingo->_stack.push_back(Datum());
Commit: 63b885e9153a500a27c666cebe967ffe340ed866
https://github.com/scummvm/scummvm/commit/63b885e9153a500a27c666cebe967ffe340ed866
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:03:36+08:00
Commit Message:
DIRECTOR: LINGO: Fix string conversion of floats
Fixes save games in AMBER: Journeys Beyond.
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index dbbf69d24fd..77be64bd11d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1120,8 +1120,6 @@ Common::String Datum::asString(bool printonly) const {
break;
case FLOAT:
s = Common::String::format(g_lingo->_floatPrecisionFormat.c_str(), u.f);
- if (printonly)
- s += "f"; // 0.0f
break;
case STRING:
if (!printonly) {
Commit: 576cdfc1809c640f89c4b301eaf307a6f2d4e33d
https://github.com/scummvm/scummvm/commit/576cdfc1809c640f89c4b301eaf307a6f2d4e33d
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:03:36+08:00
Commit Message:
DIRECTOR: Fix double-use-after-free in b_move
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 5b9c62a9ad0..2dc331e2467 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2508,10 +2508,9 @@ void LB::b_move(int nargs) {
score->renderFrame(frame, kRenderForceUpdate);
movie->eraseCastMember(dest.asMemberID());
-
CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
- movie->createOrReplaceCastMember(dest.asMemberID(), toMove);
- movie->createOrReplaceCastMember(src.asMemberID(), toReplace);
+ movie->createOrReplaceCastMember(dest.asMemberID(), toReplace);
+ movie->eraseCastMember(src.asMemberID());
score->refreshPointersForCastMemberID(dest.asMemberID());
Commit: 554b9a9987ed394b600d641841835fa23953de24
https://github.com/scummvm/scummvm/commit/554b9a9987ed394b600d641841835fa23953de24
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:07:37+08:00
Commit Message:
DIRECTOR: Validate all palette cast member IDs before use
Fixes the avalanche of error messages when entering the mirror
in AMBER: Journeys Beyond.
Changed paths:
engines/director/castmember/bitmap.cpp
engines/director/debugger.cpp
engines/director/debugger/dt-score.cpp
engines/director/graphics.cpp
engines/director/movie.cpp
engines/director/movie.h
engines/director/score.cpp
diff --git a/engines/director/castmember/bitmap.cpp b/engines/director/castmember/bitmap.cpp
index 5045ac5bc8c..47b418c4fa2 100644
--- a/engines/director/castmember/bitmap.cpp
+++ b/engines/director/castmember/bitmap.cpp
@@ -313,14 +313,13 @@ Graphics::Surface *BitmapCastMember::getDitherImg() {
// Convert indexed image to indexed palette
Movie *movie = g_director->getCurrentMovie();
- Cast *cast = movie->getCast();
Score *score = movie->getScore();
int targetBpp = g_director->_wm->_pixelformat.bytesPerPixel;
// Get the current score palette. Note that this is the ID of the palette in the list, not the cast member!
CastMemberID currentPaletteId = score->getCurrentPalette();
if (currentPaletteId.isNull())
- currentPaletteId = cast->_defaultPalette;
+ currentPaletteId = movie->_defaultPalette;
PaletteV4 *currentPalette = g_director->getPalette(currentPaletteId);
if (!currentPalette) {
currentPaletteId = CastMemberID(kClutSystemMac, -1);
@@ -423,11 +422,10 @@ bool BitmapCastMember::isModified() {
// to be recreated.
if (!_clut.isNull()) {
Movie *movie = g_director->getCurrentMovie();
- Cast *cast = movie->getCast();
Score *score = movie->getScore();
CastMemberID currentPaletteId = score->getCurrentPalette();
if (currentPaletteId.isNull())
- currentPaletteId = cast->_defaultPalette;
+ currentPaletteId = movie->_defaultPalette;
PaletteV4 *currentPalette = g_director->getPalette(currentPaletteId);
if (!currentPalette) {
currentPaletteId = CastMemberID(kClutSystemMac, -1);
@@ -435,7 +433,7 @@ bool BitmapCastMember::isModified() {
}
CastMemberID castPaletteId = _clut;
if (castPaletteId.isNull())
- castPaletteId = cast->_defaultPalette;
+ castPaletteId = movie->_defaultPalette;
return !_ditheredTargetClut.isNull() && _ditheredTargetClut != currentPaletteId;
}
diff --git a/engines/director/debugger.cpp b/engines/director/debugger.cpp
index 35e85c4984a..26da79edc1a 100644
--- a/engines/director/debugger.cpp
+++ b/engines/director/debugger.cpp
@@ -274,7 +274,7 @@ bool Debugger::cmdInfo(int argc, const char **argv) {
debugPrintf("Modified by: %s\n", movie->_changedBy.c_str());
debugPrintf("Original directory: %s\n", movie->_origDirectory.c_str());
debugPrintf("Stage size: %dx%d\n", movie->_movieRect.width(), movie->_movieRect.height());
- debugPrintf("Default palette ID: %s\n", cast->_defaultPalette.asString().c_str());
+ debugPrintf("Default palette ID: %s\n", movie->_defaultPalette.asString().c_str());
debugPrintf("Default stage color: %d\n", cast->_stageColor);
debugPrintf("Copy protected: %d\n", cast->_isProtected);
debugPrintf("Remap palettes when needed flag: %d\n", movie->_remapPalettesWhenNeeded);
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index 255136c05bf..1d3701d6478 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -526,7 +526,7 @@ void showChannels() {
Score *score = g_director->getCurrentMovie()->getScore();
Frame &frame = *score->_currentFrame;
- CastMemberID defaultPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
+ CastMemberID defaultPalette = g_director->getCurrentMovie()->_defaultPalette;
ImGui::Text("TMPO: tempo: %d, skipFrameFlag: %d, blend: %d, currentFPS: %d",
frame._mainChannels.tempo, frame._mainChannels.skipFrameFlag, frame._mainChannels.blend, score->_currentFrameRate);
if (!frame._mainChannels.palette.paletteId.isNull()) {
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 6393661cf42..420833c548f 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -133,6 +133,9 @@ void DirectorEngine::loadDefaultPalettes() {
}
PaletteV4 *DirectorEngine::getPalette(const CastMemberID &id) {
+ if (id.isNull())
+ return nullptr;
+
if (!_loadedPalettes.contains(id)) {
warning("DirectorEngine::getPalette(): Palette %s not found, hash %x", id.asString().c_str(), id.hash());
return nullptr;
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 7d16b72f052..58995fc429d 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -131,7 +131,6 @@ void Movie::setArchive(Archive *archive) {
// D4 or lower, only 1 cast
_cast->setArchive(archive);
}
-
// Frame Labels
if ((r = archive->getMovieResourceIfPresent(MKTAG('V', 'W', 'L', 'B')))) {
_score->loadLabels(*r);
@@ -216,6 +215,13 @@ bool Movie::loadArchive() {
it._value->loadCast();
}
_stageColor = _vm->transformColor(_cast->_stageColor);
+ // Need to check if the default palette is valid; if not, assume it's the Mac one.
+ if (isValidCastMember(_cast->_defaultPalette, kCastPalette)) {
+ _defaultPalette = _cast->_defaultPalette;
+ } else {
+ _defaultPalette = CastMemberID(kClutSystemMac, -1);
+ }
+ g_director->_lastPalette = CastMemberID();
bool recenter = false;
// If the stage dimensions are different, delete it and start again.
@@ -571,6 +577,11 @@ CastMemberInfo *Movie::getCastMemberInfo(CastMemberID memberID) {
return result;
}
+bool Movie::isValidCastMember(CastMemberID memberID, CastType type) {
+ CastMember *test = getCastMember(memberID);
+ return test && ((test->_type == type) || (type == kCastTypeAny));
+}
+
const Stxt *Movie::getStxt(CastMemberID memberID) {
const Stxt *result = nullptr;
if (_casts.contains(memberID.castLib)) {
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 9067d92fb8b..9de05a99af7 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -118,6 +118,7 @@ public:
CastMemberID getCastMemberIDByName(const Common::String &name);
CastMemberID getCastMemberIDByNameAndType(const Common::String &name, int castLib, CastType type);
CastMemberInfo *getCastMemberInfo(CastMemberID memberID);
+ bool isValidCastMember(CastMemberID memberID, CastType type);
const Stxt *getStxt(CastMemberID memberID);
LingoArchive *getMainLingoArch();
@@ -163,6 +164,7 @@ public:
Common::String _createdBy;
Common::String _changedBy;
Common::String _origDirectory;
+ CastMemberID _defaultPalette;
bool _videoPlayback;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 50712f51ab1..fd0f343ed23 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -949,15 +949,22 @@ void Score::setLastPalette() {
bool isCachedPalette = false;
CastMemberID currentPalette = _currentFrame->_mainChannels.palette.paletteId;
+ // Director allows you to use palette IDs for cast members
+ // that have long since been erased. Check all of them.
+ if (!_movie->isValidCastMember(currentPalette, kCastPalette))
+ currentPalette = CastMemberID();
// Palette not specified in the frame
if (currentPalette.isNull()) {
// Use the score cached palette ID
isCachedPalette = true;
currentPalette = _currentFrame->_mainChannels.scoreCachedPaletteId;
+ if (!_movie->isValidCastMember(currentPalette, kCastPalette))
+ currentPalette = CastMemberID();
// The cached ID is created before the cast gets loaded; if it's zero,
// this corresponds to the movie default palette.
- if (currentPalette.isNull())
- currentPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
+ if (currentPalette.isNull()) {
+ currentPalette = g_director->getCurrentMovie()->_defaultPalette;
+ }
// If for whatever reason this doesn't resolve, abort.
if (currentPalette.isNull())
return;
@@ -1883,7 +1890,7 @@ void Score::loadActions(Common::SeekableReadStreamEndian &stream) {
Common::String Score::formatChannelInfo() {
Frame &frame = *_currentFrame;
Common::String result;
- CastMemberID defaultPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
+ CastMemberID defaultPalette = g_director->getCurrentMovie()->_defaultPalette;
result += Common::String::format("TMPO: tempo: %d, skipFrameFlag: %d, blend: %d, currentFPS: %d\n",
frame._mainChannels.tempo, frame._mainChannels.skipFrameFlag, frame._mainChannels.blend, _currentFrameRate);
if (!frame._mainChannels.palette.paletteId.isNull()) {
Commit: 413c0aed2afbf18a36d6b35a183ab18733626243
https://github.com/scummvm/scummvm/commit/413c0aed2afbf18a36d6b35a183ab18733626243
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:07:41+08:00
Commit Message:
COMMON: Add QuickTime IMA ADPCM decoder for AIFF
Fixes numerous sound files in AMBER: Journeys Beyond.
Changed paths:
audio/decoders/aiff.cpp
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp
index fe92d6acf99..821e9d0ccc3 100644
--- a/audio/decoders/aiff.cpp
+++ b/audio/decoders/aiff.cpp
@@ -34,6 +34,7 @@
#include "audio/audiostream.h"
#include "audio/decoders/aiff.h"
+#include "audio/decoders/adpcm.h"
#include "audio/decoders/raw.h"
#include "audio/decoders/3do.h"
@@ -214,9 +215,8 @@ RewindableAudioStream *AIFFHeader::makeAIFFStream(Common::SeekableReadStream *st
return makeRawStream(_dataStream, _rate, rawFlags, disposeAfterUse);
}
case MKTAG('i', 'm', 'a', '4'):
- // TODO: Use QT IMA ADPCM
- warning("Unhandled AIFF-C QT IMA ADPCM compression");
- break;
+ // Apple QuickTime IMA ADPCM
+ return makeADPCMStream(_dataStream, disposeAfterUse, 0, kADPCMApple, _rate, _channels, 34);
case MKTAG('Q', 'D', 'M', '2'):
// TODO: Need to figure out how to integrate this
// (But hopefully never needed)
Commit: 3853c3c6f9476ba99c63a60ef9d94f7c127421aa
https://github.com/scummvm/scummvm/commit/3853c3c6f9476ba99c63a60ef9d94f7c127421aa
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:07:41+08:00
Commit Message:
DIRECTOR: Add timing debug messages to transition code
Changed paths:
engines/director/transitions.cpp
diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index 230cb049345..b866e1b8a64 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -167,6 +167,8 @@ void Window::playTransition(uint frame, RenderMode mode, uint16 transDuration, u
t.chunkSize = MAX<uint>(1, transChunkSize);
t.area = MAX<uint>(0, transArea);
+ debugC(2, kDebugImages, "Window::playTransition(): Playing transition %d", t.type);
+
// If we requested fast transitions, speed everything up
if (debugChannelSet(-1, kDebugFast))
t.duration = 250;
@@ -231,14 +233,13 @@ void Window::playTransition(uint frame, RenderMode mode, uint16 transDuration, u
Common::Rect rfrom, rto;
- uint32 transStartTime = g_system->getMillis();
- debugC(2, kDebugImages, "Window::playTransition(): Playing transition %d", t.type);
-
initTransParams(t, clipRect);
Graphics::ManagedSurface *blitFrom;
bool fullredraw = false;
+ uint32 transStartTime = g_system->getMillis();
+
debugC(2, kDebugImages, "Window::playTransition(): type: %d, duration: %d, area: %d, chunkSize: %d, steps: %d, stepDuration: %d, xpos: %d, ypos: %d, xStepSize: %d, yStepSize: %d, stripSize: %d, clipRect: %d %d %d %d", t.type, t.duration, t.area, t.chunkSize, t.steps, t.stepDuration, t.xpos, t.ypos, t.xStepSize, t.yStepSize, t.stripSize, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
switch (transProps[t.type].algo) {
@@ -574,8 +575,9 @@ void Window::playTransition(uint frame, RenderMode mode, uint16 transDuration, u
}
uint32 endTime = g_system->getMillis();
- int diff = (int)t.stepDuration - (int)(endTime - startTime);
- g_director->delayMillis(MAX(0, diff));
+ int diff = MAX(0, (int)t.stepDuration - (int)(endTime - startTime));
+ debugC(6, kDebugImages, "Window::playTransition(): delaying for %d", diff);
+ g_director->delayMillis(diff);
g_lingo->executePerFrameHook(t.frame, i);
}
@@ -778,8 +780,9 @@ void Window::dissolveTrans(TransParams &t, Common::Rect &clipRect, Graphics::Man
}
uint32 endTime = g_system->getMillis();
- int diff = (int)t.stepDuration - (int)(endTime - startTime);
- g_director->delayMillis(MAX(0, diff));
+ int diff = MAX(0, (int)t.stepDuration - (int)(endTime - startTime));
+ debugC(6, kDebugImages, "Window::dissolveTrans(): delaying for %d", diff);
+ g_director->delayMillis(diff);
}
}
@@ -902,8 +905,9 @@ void Window::dissolvePatternsTrans(TransParams &t, Common::Rect &clipRect, Graph
}
uint32 endTime = g_system->getMillis();
- int diff = (int)t.stepDuration - (int)(endTime - startTime);
- g_director->delayMillis(MAX(0, diff));
+ int diff = MAX(0, (int)t.stepDuration - (int)(endTime - startTime));
+ debugC(6, kDebugImages, "Window::dissolvePatternsTrans(): delaying for %d", diff);
+ g_director->delayMillis(diff);
}
}
@@ -1075,8 +1079,9 @@ void Window::transMultiPass(TransParams &t, Common::Rect &clipRect, Graphics::Ma
g_lingo->executePerFrameHook(t.frame, i);
uint32 endTime = g_system->getMillis();
- int diff = (int)t.stepDuration - (int)(endTime - startTime);
- g_director->delayMillis(MAX(0, diff));
+ int diff = MAX(0, (int)t.stepDuration - (int)(endTime - startTime));
+ debugC(6, kDebugImages, "Window::transMultiPass(): delaying for %d", diff);
+ g_director->delayMillis(diff);
if (_vm->processEvents(true)) {
exitTransition(t, nextFrame, clipRect);
@@ -1137,8 +1142,9 @@ void Window::transZoom(TransParams &t, Common::Rect &clipRect, Graphics::Managed
stepTransition(t, i);
uint32 endTime = g_system->getMillis();
- int diff = (int)t.stepDuration - (int)(endTime - startTime);
- g_director->delayMillis(MAX(0, diff));
+ int diff = MAX(0, (int)t.stepDuration - (int)(endTime - startTime));
+ debugC(6, kDebugImages, "Window::transZoom(): delaying for %d", diff);
+ g_director->delayMillis(diff);
g_lingo->executePerFrameHook(t.frame, i);
}
Commit: 16208dc58952e985d36b80561ea7908aeb3d76b4
https://github.com/scummvm/scummvm/commit/16208dc58952e985d36b80561ea7908aeb3d76b4
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T15:07:41+08:00
Commit Message:
DIRECTOR: LINGO: Fix b_puppetTransition
Transitions should be played when updateStage is called for whatever
sprite changes have been made by the code.
Fixes the movement transitions in AMBER: Journeys Beyond.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 2dc331e2467..ce25efed225 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2781,7 +2781,8 @@ void LB::b_puppetTransition(int nargs) {
chunkSize = g_lingo->pop().asInt();
// fall through
case 2:
- duration = g_lingo->pop().asInt();
+ // units are quarter-seconds
+ duration = g_lingo->pop().asInt() * 250;
// fall through
case 1:
type = ((TransitionType)(g_lingo->pop().asInt()));
@@ -2796,6 +2797,7 @@ void LB::b_puppetTransition(int nargs) {
warning("b_puppetTransition: Transition already queued");
return;
}
+ debugC(3, kDebugImages, "b_puppetTransition(): type: %d, duration: %d, chunkSize: %d, area: %d", type, duration, chunkSize, area);
stage->_puppetTransition = new TransParams(duration, area, chunkSize, ((TransitionType)type));
}
@@ -2960,9 +2962,16 @@ void LB::b_updateStage(int nargs) {
}
Score *score = movie->getScore();
+ Window *window = movie->getWindow();
score->updateWidgets(movie->_videoPlayback);
- movie->getWindow()->render();
+ if (window->_puppetTransition) {
+ window->playTransition(score->getCurrentFrameNum(), kRenderModeNormal, window->_puppetTransition->duration, window->_puppetTransition->area, window->_puppetTransition->chunkSize, window->_puppetTransition->type, score->_currentFrame->_mainChannels.scoreCachedPaletteId);
+ delete window->_puppetTransition;
+ window->_puppetTransition = nullptr;
+ } else {
+ movie->getWindow()->render();
+ }
// play any puppet sounds that have been queued
score->playSoundChannel(true);
More information about the Scummvm-git-logs
mailing list