aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/graphics')
-rw-r--r--engines/sci/graphics/animate.cpp4
-rw-r--r--engines/sci/graphics/palette.cpp40
-rw-r--r--engines/sci/graphics/palette.h13
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;