diff options
Diffstat (limited to 'engines/sci/engine/kgraphics.cpp')
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 87 |
1 files changed, 49 insertions, 38 deletions
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 8b790e6a58..cae5a09789 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -45,6 +45,7 @@ #include "sci/graphics/paint16.h" #include "sci/graphics/picture.h" #include "sci/graphics/ports.h" +#include "sci/graphics/remap.h" #include "sci/graphics/screen.h" #include "sci/graphics/text16.h" #include "sci/graphics/view.h" @@ -254,7 +255,7 @@ reg_t kGraph(EngineState *s, int argc, reg_t *argv) { } reg_t kGraphGetColorCount(EngineState *s, int argc, reg_t *argv) { - return make_reg(0, g_sci->_gfxPalette->getTotalColorCount()); + return make_reg(0, g_sci->_gfxPalette16->getTotalColorCount()); } reg_t kGraphDrawLine(EngineState *s, int argc, reg_t *argv) { @@ -359,12 +360,7 @@ reg_t kTextSize(EngineState *s, int argc, reg_t *argv) { uint16 languageSplitter = 0; Common::String splitText = g_sci->strSplitLanguage(text.c_str(), &languageSplitter, sep); -#ifdef ENABLE_SCI32 - if (g_sci->_gfxText32) - g_sci->_gfxText32->kernelTextSize(splitText.c_str(), font_nr, maxwidth, &textWidth, &textHeight); - else -#endif - g_sci->_gfxText16->kernelTextSize(splitText.c_str(), languageSplitter, font_nr, maxwidth, &textWidth, &textHeight); + g_sci->_gfxText16->kernelTextSize(splitText.c_str(), languageSplitter, font_nr, maxwidth, &textWidth, &textHeight); // One of the game texts in LB2 German contains loads of spaces in // its end. We trim the text here, otherwise the graphics code will @@ -445,8 +441,15 @@ reg_t kCantBeHere(EngineState *s, int argc, reg_t *argv) { reg_t curObject = argv[0]; reg_t listReference = (argc > 1) ? argv[1] : NULL_REG; - reg_t canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference); - return canBeHere; +#ifdef ENABLE_SCI32 + if (getSciVersion() >= SCI_VERSION_2) { + return g_sci->_gfxCompare->kernelCantBeHere32(curObject, listReference); + } else { +#endif + return g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference); +#ifdef ENABLE_SCI32 + } +#endif } reg_t kIsItSkip(EngineState *s, int argc, reg_t *argv) { @@ -492,7 +495,7 @@ reg_t kNumLoops(EngineState *s, int argc, reg_t *argv) { loopCount = g_sci->_gfxCache->kernelViewGetLoopCount(viewId); - debugC(kDebugLevelGraphics, "NumLoops(view.%d) = %d", viewId, loopCount); + debugC(9, kDebugLevelGraphics, "NumLoops(view.%d) = %d", viewId, loopCount); return make_reg(0, loopCount); } @@ -505,7 +508,7 @@ reg_t kNumCels(EngineState *s, int argc, reg_t *argv) { celCount = g_sci->_gfxCache->kernelViewGetCelCount(viewId, loopNo); - debugC(kDebugLevelGraphics, "NumCels(view.%d, %d) = %d", viewId, loopNo, celCount); + debugC(9, kDebugLevelGraphics, "NumCels(view.%d, %d) = %d", viewId, loopNo, celCount); return make_reg(0, celCount); } @@ -576,9 +579,17 @@ reg_t kBaseSetter(EngineState *s, int argc, reg_t *argv) { } reg_t kSetNowSeen(EngineState *s, int argc, reg_t *argv) { - g_sci->_gfxCompare->kernelSetNowSeen(argv[0]); - - return s->r_acc; +#ifdef ENABLE_SCI32 + if (getSciVersion() >= SCI_VERSION_2) { + g_sci->_gfxFrameout->kernelSetNowSeen(argv[0]); + return NULL_REG; + } else { +#endif + g_sci->_gfxCompare->kernelSetNowSeen(argv[0]); + return s->r_acc; +#ifdef ENABLE_SCI32 + } +#endif } reg_t kPalette(EngineState *s, int argc, reg_t *argv) { @@ -596,10 +607,10 @@ reg_t kPaletteSetFromResource(EngineState *s, int argc, reg_t *argv) { // Non-VGA games don't use palette resources. // This has been changed to 64 colors because Longbow Amiga does have // one palette (palette 999). - if (g_sci->_gfxPalette->getTotalColorCount() < 64) + if (g_sci->_gfxPalette16->getTotalColorCount() < 64) return s->r_acc; - g_sci->_gfxPalette->kernelSetFromResource(resourceId, force); + g_sci->_gfxPalette16->kernelSetFromResource(resourceId, force); return s->r_acc; } @@ -607,7 +618,7 @@ reg_t kPaletteSetFlag(EngineState *s, int argc, reg_t *argv) { uint16 fromColor = CLIP<uint16>(argv[0].toUint16(), 1, 255); uint16 toColor = CLIP<uint16>(argv[1].toUint16(), 1, 255); uint16 flags = argv[2].toUint16(); - g_sci->_gfxPalette->kernelSetFlag(fromColor, toColor, flags); + g_sci->_gfxPalette16->kernelSetFlag(fromColor, toColor, flags); return s->r_acc; } @@ -615,7 +626,7 @@ reg_t kPaletteUnsetFlag(EngineState *s, int argc, reg_t *argv) { uint16 fromColor = CLIP<uint16>(argv[0].toUint16(), 1, 255); uint16 toColor = CLIP<uint16>(argv[1].toUint16(), 1, 255); uint16 flags = argv[2].toUint16(); - g_sci->_gfxPalette->kernelUnsetFlag(fromColor, toColor, flags); + g_sci->_gfxPalette16->kernelUnsetFlag(fromColor, toColor, flags); return s->r_acc; } @@ -626,10 +637,10 @@ reg_t kPaletteSetIntensity(EngineState *s, int argc, reg_t *argv) { bool setPalette = (argc < 4) ? true : (argv[3].isNull()) ? true : false; // Palette intensity in non-VGA SCI1 games has been removed - if (g_sci->_gfxPalette->getTotalColorCount() < 256) + if (g_sci->_gfxPalette16->getTotalColorCount() < 256) return s->r_acc; - g_sci->_gfxPalette->kernelSetIntensity(fromColor, toColor, intensity, setPalette); + g_sci->_gfxPalette16->kernelSetIntensity(fromColor, toColor, intensity, setPalette); return s->r_acc; } @@ -637,7 +648,7 @@ reg_t kPaletteFindColor(EngineState *s, int argc, reg_t *argv) { uint16 r = argv[0].toUint16(); uint16 g = argv[1].toUint16(); uint16 b = argv[2].toUint16(); - return make_reg(0, g_sci->_gfxPalette->kernelFindColor(r, g, b)); + return make_reg(0, g_sci->_gfxPalette16->kernelFindColor(r, g, b)); } reg_t kPaletteAnimate(EngineState *s, int argc, reg_t *argv) { @@ -645,18 +656,18 @@ reg_t kPaletteAnimate(EngineState *s, int argc, reg_t *argv) { bool paletteChanged = false; // Palette animation in non-VGA SCI1 games has been removed - if (g_sci->_gfxPalette->getTotalColorCount() < 256) + if (g_sci->_gfxPalette16->getTotalColorCount() < 256) return s->r_acc; for (argNr = 0; argNr < argc; argNr += 3) { uint16 fromColor = argv[argNr].toUint16(); uint16 toColor = argv[argNr + 1].toUint16(); int16 speed = argv[argNr + 2].toSint16(); - if (g_sci->_gfxPalette->kernelAnimate(fromColor, toColor, speed)) + if (g_sci->_gfxPalette16->kernelAnimate(fromColor, toColor, speed)) paletteChanged = true; } if (paletteChanged) - g_sci->_gfxPalette->kernelAnimateSet(); + g_sci->_gfxPalette16->kernelAnimateSet(); // WORKAROUND: The game scripts in SQ4 floppy count the number of elapsed // cycles in the intro from the number of successive kAnimate calls during @@ -676,11 +687,11 @@ reg_t kPaletteAnimate(EngineState *s, int argc, reg_t *argv) { } reg_t kPaletteSave(EngineState *s, int argc, reg_t *argv) { - return g_sci->_gfxPalette->kernelSave(); + return g_sci->_gfxPalette16->kernelSave(); } reg_t kPaletteRestore(EngineState *s, int argc, reg_t *argv) { - g_sci->_gfxPalette->kernelRestore(argv[0]); + g_sci->_gfxPalette16->kernelRestore(argv[0]); return argv[0]; } @@ -695,7 +706,7 @@ reg_t kPalVaryInit(EngineState *s, int argc, reg_t *argv) { uint16 ticks = argv[1].toUint16(); uint16 stepStop = argc >= 3 ? argv[2].toUint16() : 64; uint16 direction = argc >= 4 ? argv[3].toUint16() : 1; - if (g_sci->_gfxPalette->kernelPalVaryInit(paletteId, ticks, stepStop, direction)) + if (g_sci->_gfxPalette16->kernelPalVaryInit(paletteId, ticks, stepStop, direction)) return SIGNAL_REG; return NULL_REG; } @@ -705,40 +716,40 @@ reg_t kPalVaryReverse(EngineState *s, int argc, reg_t *argv) { int16 stepStop = argc >= 2 ? argv[1].toUint16() : 0; int16 direction = argc >= 3 ? argv[2].toSint16() : -1; - return make_reg(0, g_sci->_gfxPalette->kernelPalVaryReverse(ticks, stepStop, direction)); + return make_reg(0, g_sci->_gfxPalette16->kernelPalVaryReverse(ticks, stepStop, direction)); } reg_t kPalVaryGetCurrentStep(EngineState *s, int argc, reg_t *argv) { - return make_reg(0, g_sci->_gfxPalette->kernelPalVaryGetCurrentStep()); + return make_reg(0, g_sci->_gfxPalette16->kernelPalVaryGetCurrentStep()); } reg_t kPalVaryDeinit(EngineState *s, int argc, reg_t *argv) { - g_sci->_gfxPalette->kernelPalVaryDeinit(); + g_sci->_gfxPalette16->kernelPalVaryDeinit(); return NULL_REG; } reg_t kPalVaryChangeTarget(EngineState *s, int argc, reg_t *argv) { GuiResourceId paletteId = argv[0].toUint16(); - int16 currentStep = g_sci->_gfxPalette->kernelPalVaryChangeTarget(paletteId); + int16 currentStep = g_sci->_gfxPalette16->kernelPalVaryChangeTarget(paletteId); return make_reg(0, currentStep); } reg_t kPalVaryChangeTicks(EngineState *s, int argc, reg_t *argv) { uint16 ticks = argv[0].toUint16(); - g_sci->_gfxPalette->kernelPalVaryChangeTicks(ticks); + g_sci->_gfxPalette16->kernelPalVaryChangeTicks(ticks); return NULL_REG; } reg_t kPalVaryPauseResume(EngineState *s, int argc, reg_t *argv) { bool pauseState = !argv[0].isNull(); - g_sci->_gfxPalette->kernelPalVaryPause(pauseState); + g_sci->_gfxPalette16->kernelPalVaryPause(pauseState); return NULL_REG; } reg_t kAssertPalette(EngineState *s, int argc, reg_t *argv) { GuiResourceId paletteId = argv[0].toUint16(); - g_sci->_gfxPalette->kernelAssertPalette(paletteId); + g_sci->_gfxPalette16->kernelAssertPalette(paletteId); return s->r_acc; } @@ -1253,16 +1264,16 @@ reg_t kRemapColors(EngineState *s, int argc, reg_t *argv) { switch (operation) { case 0: { // remap by percent uint16 percent = argv[1].toUint16(); - g_sci->_gfxPalette->resetRemapping(); - g_sci->_gfxPalette->setRemappingPercent(254, percent); + g_sci->_gfxRemap16->resetRemapping(); + g_sci->_gfxRemap16->setRemappingPercent(254, percent); } break; case 1: { // remap by range uint16 from = argv[1].toUint16(); uint16 to = argv[2].toUint16(); uint16 base = argv[3].toUint16(); - g_sci->_gfxPalette->resetRemapping(); - g_sci->_gfxPalette->setRemappingRange(254, from, to, base); + g_sci->_gfxRemap16->resetRemapping(); + g_sci->_gfxRemap16->setRemappingRange(254, from, to, base); } break; case 2: // turn remapping off (unused) |