mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-12 06:00:48 +00:00
SCI: implemented kPalVary(changeTicks)
svn-id: r50100
This commit is contained in:
parent
4a83b2c5f6
commit
6f195ae5a4
@ -673,7 +673,7 @@ reg_t kPalVary(EngineState *s, int argc, reg_t *argv) {
|
||||
warning("kPalVary(reverse) called with ticks = %d, stop = %d, direction = %d", ticks, stepStop, direction);
|
||||
return make_reg(0, result);
|
||||
} else {
|
||||
warning("kPalVary(1) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
warning("kPalVary(reverse) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
}
|
||||
}
|
||||
case 2: { // Get Current Step
|
||||
@ -694,13 +694,18 @@ reg_t kPalVary(EngineState *s, int argc, reg_t *argv) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4: { // Unknown
|
||||
warning("kPalVary(4) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
case 4: { // Change Target
|
||||
// seems to be 1 parameter, we should find a game that is using this feature before implementing it
|
||||
warning("kPalVary(changeTarget) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
break;
|
||||
}
|
||||
case 5: { // Unknown
|
||||
// Called in xmas 1992 demo (2 parameters)
|
||||
warning("kPalVary(5) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
case 5: { // Change ticks
|
||||
if (argc == 2) {
|
||||
uint16 ticks = argv[1].toUint16();
|
||||
g_sci->_gfxPalette->kernelPalVaryChangeTicks(ticks);
|
||||
} else {
|
||||
warning("kPalVary(changeTicks) called with parameter %d (argc %d)", argv[1].toUint16(), argc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6: { // Pause/Resume
|
||||
|
@ -519,6 +519,10 @@ void GfxPalette::palVaryInstallTimer() {
|
||||
g_sci->getTimerManager()->installTimerProc(&palVaryCallback, 1000000 / 60 * ticks, this);
|
||||
}
|
||||
|
||||
void GfxPalette::palVaryRemoveTimer() {
|
||||
g_sci->getTimerManager()->removeTimerProc(&palVaryCallback);
|
||||
}
|
||||
|
||||
bool GfxPalette::kernelPalVaryInit(GuiResourceId resourceId, uint16 ticks, uint16 stepStop, uint16 direction) {
|
||||
if (_palVaryResourceId != -1) // another palvary is taking place, return
|
||||
return false;
|
||||
@ -564,6 +568,14 @@ int16 GfxPalette::kernelPalVaryGetCurrentStep() {
|
||||
return -_palVaryStep;
|
||||
}
|
||||
|
||||
void GfxPalette::kernelPalVaryChangeTicks(uint16 ticks) {
|
||||
_palVaryTicks = ticks;
|
||||
if (_palVaryStep - _palVaryStepStop) {
|
||||
palVaryRemoveTimer();
|
||||
palVaryInstallTimer();
|
||||
}
|
||||
}
|
||||
|
||||
void GfxPalette::kernelPalVaryPause(bool pause) {
|
||||
if (_palVaryResourceId == -1)
|
||||
return;
|
||||
@ -578,7 +590,7 @@ void GfxPalette::kernelPalVaryPause(bool pause) {
|
||||
}
|
||||
|
||||
void GfxPalette::kernelPalVaryDeinit() {
|
||||
g_sci->getTimerManager()->removeTimerProc(&palVaryCallback);
|
||||
palVaryRemoveTimer();
|
||||
|
||||
_palVaryResourceId = -1; // invalidate the target palette
|
||||
}
|
||||
@ -624,7 +636,7 @@ void GfxPalette::palVaryProcess(int signal, bool setPalette) {
|
||||
|
||||
// We don't need updates anymore, if we reached end-position
|
||||
if (_palVaryStep == _palVaryStepStop)
|
||||
g_sci->getTimerManager()->removeTimerProc(&palVaryCallback);
|
||||
palVaryRemoveTimer();
|
||||
if (_palVaryStep == 0)
|
||||
_palVaryResourceId = -1;
|
||||
|
||||
|
@ -66,6 +66,7 @@ public:
|
||||
bool kernelPalVaryInit(GuiResourceId resourceId, uint16 ticks, uint16 stepStop, uint16 direction);
|
||||
int16 kernelPalVaryReverse(int16 ticks, uint16 stepStop, int16 direction);
|
||||
int16 kernelPalVaryGetCurrentStep();
|
||||
void kernelPalVaryChangeTicks(uint16 ticks);
|
||||
void kernelPalVaryPause(bool pause);
|
||||
void kernelPalVaryDeinit();
|
||||
void palVaryUpdate();
|
||||
@ -77,6 +78,7 @@ public:
|
||||
private:
|
||||
void palVaryInit();
|
||||
void palVaryInstallTimer();
|
||||
void palVaryRemoveTimer();
|
||||
bool palVaryLoadTargetPalette(GuiResourceId resourceId);
|
||||
static void palVaryCallback(void *refCon);
|
||||
void palVaryIncreaseSignal();
|
||||
|
Loading…
x
Reference in New Issue
Block a user