diff options
| author | Colin Snover | 2016-07-09 12:40:47 -0500 | 
|---|---|---|
| committer | Colin Snover | 2016-07-11 10:39:50 -0500 | 
| commit | 7f53a26d9e8b55a865efea2f912189b01ca56258 (patch) | |
| tree | 189de16bf0f0a490293300f3a01788f7a141bcd7 | |
| parent | ec73fa1e4af4acc9806e948993f702dfc363a094 (diff) | |
| download | scummvm-rg350-7f53a26d9e8b55a865efea2f912189b01ca56258.tar.gz scummvm-rg350-7f53a26d9e8b55a865efea2f912189b01ca56258.tar.bz2 scummvm-rg350-7f53a26d9e8b55a865efea2f912189b01ca56258.zip  | |
SCI32: Split kPalCycle into subop functions
| -rw-r--r-- | engines/sci/engine/kernel.h | 8 | ||||
| -rw-r--r-- | engines/sci/engine/kernel_tables.h | 12 | ||||
| -rw-r--r-- | engines/sci/engine/kgraphics32.cpp | 104 | 
3 files changed, 66 insertions, 58 deletions
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 845e63af79..143903b96d 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -549,6 +549,14 @@ reg_t kSetScroll(EngineState *s, int argc, reg_t *argv);  reg_t kPalCycle(EngineState *s, int argc, reg_t *argv);  reg_t kPaletteSetFade(EngineState *s, int argc, reg_t *argv); + +reg_t kPalCycle(EngineState *s, int argc, reg_t *argv); +reg_t kPalCycleSetCycle(EngineState *s, int argc, reg_t *argv); +reg_t kPalCycleDoCycle(EngineState *s, int argc, reg_t *argv); +reg_t kPalCyclePause(EngineState *s, int argc, reg_t *argv); +reg_t kPalCycleOn(EngineState *s, int argc, reg_t *argv); +reg_t kPalCycleOff(EngineState *s, int argc, reg_t *argv); +  reg_t kPalVarySetVary(EngineState *s, int argc, reg_t *argv);  reg_t kPalVarySetPercent(EngineState *s, int argc, reg_t *argv);  reg_t kPalVaryGetPercent(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index 31a9938514..0e1262b299 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -335,6 +335,16 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {  #ifdef ENABLE_SCI32  //    version,         subId, function-mapping,                    signature,              workarounds +static const SciKernelMapSubEntry kPalCycle_subops[] = { +	{ SIG_SCI32,           0, MAP_CALL(PalCycleSetCycle),          "iii(i)",               NULL }, +	{ SIG_SCI32,           1, MAP_CALL(PalCycleDoCycle),           "i(i)",                 NULL }, +	{ SIG_SCI32,           2, MAP_CALL(PalCyclePause),             "(i)",                  NULL }, +	{ SIG_SCI32,           3, MAP_CALL(PalCycleOn),                "(i)",                  NULL }, +	{ SIG_SCI32,           4, MAP_CALL(PalCycleOff),               "(i)",                  NULL }, +	SCI_SUBOPENTRY_TERMINATOR +}; + +//    version,         subId, function-mapping,                    signature,              workarounds  static const SciKernelMapSubEntry kSave_subops[] = {  	{ SIG_SCI32,           0, MAP_CALL(SaveGame),                  "[r0]i[r0](r0)",        NULL },  	{ SIG_SCI32,           1, MAP_CALL(RestoreGame),               "[r0]i[r0]",            NULL }, @@ -762,7 +772,7 @@ static SciKernelMapEntry s_kernelMap[] = {  	{ MAP_CALL(MakeSaveCatName),   SIG_EVERYWHERE,           "rr",                    NULL,            NULL },  	{ MAP_CALL(MakeSaveFileName),  SIG_EVERYWHERE,           "rri",                   NULL,            NULL },  	{ MAP_CALL(SetScroll),         SIG_EVERYWHERE,           "oiiiii(i)",             NULL,            NULL }, -	{ MAP_CALL(PalCycle),          SIG_EVERYWHERE,           "i(.*)",                 NULL,            NULL }, +	{ MAP_CALL(PalCycle),          SIG_EVERYWHERE,           "(.*)",                  kPalCycle_subops, NULL },  	// SCI2 Empty functions diff --git a/engines/sci/engine/kgraphics32.cpp b/engines/sci/engine/kgraphics32.cpp index 019a06930c..f0c08d105b 100644 --- a/engines/sci/engine/kgraphics32.cpp +++ b/engines/sci/engine/kgraphics32.cpp @@ -862,67 +862,57 @@ reg_t kPalVaryMergeStart(EngineState *s, int argc, reg_t *argv) {  	return make_reg(0, g_sci->_gfxPalette32->getVaryPercent());  } -enum { -	kSetCycle = 0, -	kDoCycle = 1, -	kCyclePause = 2, -	kCycleOn = 3, -	kCycleOff = 4 -}; -  reg_t kPalCycle(EngineState *s, int argc, reg_t *argv) { -	// Examples: GK1 room 480 (Bayou ritual), LSL6 room 100 (title screen) +	if (!s) +		return make_reg(0, getSciVersion()); +	error("not supposed to call this"); +} -	switch (argv[0].toUint16()) { -	case kSetCycle: { -		uint16 fromColor = argv[1].toUint16(); -		uint16 toColor = argv[2].toUint16(); -		int16 direction = argv[3].toSint16(); -		uint16 delay = (argc == 4 ? 0 : argv[4].toUint16()); - -		g_sci->_gfxPalette32->setCycle(fromColor, toColor, direction, delay); -		} -		break; -	case kDoCycle: { -		uint16 fromColor = argv[1].toUint16(); -		int16 speed = (argc == 2) ? 1 : argv[2].toSint16(); -		g_sci->_gfxPalette32->doCycle(fromColor, speed); -		} -		break; -	case kCyclePause: { -		if (argc == 1) { -			g_sci->_gfxPalette32->cycleAllPause(); -		} else { -			uint16 fromColor = argv[1].toUint16(); -			g_sci->_gfxPalette32->cyclePause(fromColor); -		} -		} -		break; -	case kCycleOn: { -		if (argc == 1) { -			g_sci->_gfxPalette32->cycleAllOn(); -		} else { -			uint16 fromColor = argv[1].toUint16(); -			g_sci->_gfxPalette32->cycleOn(fromColor); -		} -		} -		break; -	case kCycleOff: { -		if (argc == 1) { -			g_sci->_gfxPalette32->cycleAllOff(); -		} else { -			uint16 fromColor = argv[1].toUint16(); -			g_sci->_gfxPalette32->cycleOff(fromColor); -		} -		break; -		} -	default: -		// In SCI2.1 there are no values above 4, so should never get here; -		// SCI just returns early if this ever happens. -		assert(false); -		break; +reg_t kPalCycleSetCycle(EngineState *s, int argc, reg_t *argv) { +	const uint16 fromColor = argv[0].toUint16(); +	const uint16 toColor = argv[1].toUint16(); +	const int16 direction = argv[2].toSint16(); +	const uint16 delay = argc > 3 ? argv[3].toUint16() : 0; + +	g_sci->_gfxPalette32->setCycle(fromColor, toColor, direction, delay); +	return s->r_acc; +} + +reg_t kPalCycleDoCycle(EngineState *s, int argc, reg_t *argv) { +	const uint16 fromColor = argv[0].toUint16(); +	const int16 speed = argc > 1 ? argv[1].toSint16() : 1; + +	g_sci->_gfxPalette32->doCycle(fromColor, speed); +	return s->r_acc; +} + +reg_t kPalCyclePause(EngineState *s, int argc, reg_t *argv) { +	if (argc == 0) { +		g_sci->_gfxPalette32->cycleAllPause(); +	} else { +		const uint16 fromColor = argv[0].toUint16(); +		g_sci->_gfxPalette32->cyclePause(fromColor);  	} +	return s->r_acc; +} +reg_t kPalCycleOn(EngineState *s, int argc, reg_t *argv) { +	if (argc == 0) { +		g_sci->_gfxPalette32->cycleAllOn(); +	} else { +		const uint16 fromColor = argv[0].toUint16(); +		g_sci->_gfxPalette32->cycleOn(fromColor); +	} +	return s->r_acc; +} + +reg_t kPalCycleOff(EngineState *s, int argc, reg_t *argv) { +	if (argc == 0) { +		g_sci->_gfxPalette32->cycleAllOff(); +	} else { +		const uint16 fromColor = argv[0].toUint16(); +		g_sci->_gfxPalette32->cycleOff(fromColor); +	}  	return s->r_acc;  }  | 
