diff options
Diffstat (limited to 'engines/sci/graphics')
-rw-r--r-- | engines/sci/graphics/animate.cpp | 4 | ||||
-rw-r--r-- | engines/sci/graphics/palette.cpp | 40 | ||||
-rw-r--r-- | engines/sci/graphics/palette.h | 13 |
3 files changed, 42 insertions, 15 deletions
diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp index 06054f3a19..339132a76c 100644 --- a/engines/sci/graphics/animate.cpp +++ b/engines/sci/graphics/animate.cpp @@ -35,6 +35,7 @@ #include "sci/graphics/cursor.h" #include "sci/graphics/ports.h" #include "sci/graphics/paint16.h" +#include "sci/graphics/palette.h" #include "sci/graphics/view.h" #include "sci/graphics/screen.h" #include "sci/graphics/transitions.h" @@ -592,6 +593,9 @@ void GfxAnimate::animateShowPic() { void GfxAnimate::kernelAnimate(reg_t listReference, bool cycle, int argc, reg_t *argv) { byte old_picNotValid = _screen->_picNotValid; + if (getSciVersion() >= SCI_VERSION_1_1) + _palette->palVaryUpdate(); + if (listReference.isNull()) { disposeLastCast(); if (_screen->_picNotValid) diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp index 56e2ff67a2..5a0a661a56 100644 --- a/engines/sci/graphics/palette.cpp +++ b/engines/sci/graphics/palette.cpp @@ -72,6 +72,8 @@ GfxPalette::GfxPalette(ResourceManager *resMan, GfxScreen *screen) _alwaysForceRealMerge = true; else if (g_sci->getGameId() == "pq1sci") _alwaysForceRealMerge = true; + + palVaryInit(); } GfxPalette::~GfxPalette() { @@ -473,7 +475,7 @@ void GfxPalette::kernelAssertPalette(GuiResourceId resourceId) { // Saving/restoring // need to save start and target-palette, when palVaryOn = true -void GfxPalette::startPalVary(GuiResourceId resourceId, uint16 ticks) { +void GfxPalette::kernelPalVaryInit(GuiResourceId resourceId, uint16 ticks) { kernelSetFromResource(resourceId, true); return; @@ -481,19 +483,23 @@ void GfxPalette::startPalVary(GuiResourceId resourceId, uint16 ticks) { return; _palVaryResourceId = resourceId; - _palVaryStart = g_system->getMillis(); - _palVaryEnd = _palVaryStart + ticks * 1000 / 60; - g_sci->getTimerManager()->installTimerProc(&palVaryCallback, 1000000 / 60, this); + _palVarySignal = 0; + // Call signal increase every [ticks] + g_sci->getTimerManager()->installTimerProc(&palVaryCallback, 1000000 / 60 * ticks, this); } -void GfxPalette::togglePalVary(bool pause) { +void GfxPalette::kernelPalVaryToggle(bool pause) { // this call is actually counting states, so calling this 3 times with true will require calling it later // 3 times with false to actually remove pause - - // TODO + if (pause) { + _palVaryPaused++; + } else { + if (_palVaryPaused) + _palVaryPaused--; + } } -void GfxPalette::stopPalVary() { +void GfxPalette::kernelPalVaryDeinit() { g_sci->getTimerManager()->removeTimerProc(&palVaryCallback); // HACK: just set the target palette @@ -502,12 +508,24 @@ void GfxPalette::stopPalVary() { _palVaryResourceId = -1; // invalidate the target palette } +void GfxPalette::palVaryInit() { + _palVaryResourceId = -1; + _palVaryPaused = 0; + _palVarySignal = 0; +} + void GfxPalette::palVaryCallback(void *refCon) { - ((GfxPalette *)refCon)->doPalVary(); + ((GfxPalette *)refCon)->palVaryIncreaseSignal(); +} + +void GfxPalette::palVaryIncreaseSignal() { + if (!_palVaryPaused) + _palVarySignal++; } -void GfxPalette::doPalVary() { - // TODO: do palette transition here... +// Actually do the pal vary processing +void GfxPalette::palVaryUpdate() { + } } // End of namespace Sci diff --git a/engines/sci/graphics/palette.h b/engines/sci/graphics/palette.h index 53eb97e6a1..af649015d5 100644 --- a/engines/sci/graphics/palette.h +++ b/engines/sci/graphics/palette.h @@ -62,21 +62,26 @@ public: void kernelAnimateSet(); void kernelAssertPalette(GuiResourceId resourceId); - void startPalVary(GuiResourceId resourceId, uint16 ticks); - void togglePalVary(bool pause); - void stopPalVary(); + void kernelPalVaryInit(GuiResourceId resourceId, uint16 ticks); + void kernelPalVaryToggle(bool pause); + void kernelPalVaryDeinit(); + void palVaryUpdate(); Palette _sysPalette; private: + void palVaryInit(); static void palVaryCallback(void *refCon); - void doPalVary(); + void palVaryIncreaseSignal(); GfxScreen *_screen; ResourceManager *_resMan; + GuiResourceId _palVaryResourceId; uint32 _palVaryStart; uint32 _palVaryEnd; + int _palVaryPaused; + int _palVarySignal; bool _sysPaletteChanged; bool _alwaysForceRealMerge; |