diff options
Diffstat (limited to 'engines/sherlock/scalpel/scalpel.cpp')
-rw-r--r-- | engines/sherlock/scalpel/scalpel.cpp | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp index 9d2c3b8d81..e7d8ef18c3 100644 --- a/engines/sherlock/scalpel/scalpel.cpp +++ b/engines/sherlock/scalpel/scalpel.cpp @@ -182,7 +182,16 @@ ScalpelEngine::~ScalpelEngine() { } void ScalpelEngine::initialize() { - initGraphics(320, 200, false); + // 3DO actually uses RGB555, but some platforms of ours only support RGB565, so we use that + const Graphics::PixelFormat *pixelFormatRGB565 = new Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0); + + if (getPlatform() == Common::kPlatform3DO) { + // 320x200 16-bit RGB565 for 3DO support + initGraphics(320, 200, false, pixelFormatRGB565); + } else { + // 320x200 palettized + initGraphics(320, 200, false); + } // Let the base engine intialize SherlockEngine::initialize(); @@ -231,6 +240,14 @@ void ScalpelEngine::showOpening() { // 3DO animations are in directory Prologue/ // .3DX seem to be just like .VDX except that all INT16LE are INT16BE // .3DA however seems to be completely different + if (!showCityCutscene3DO()) + return; + if (!showAlleyCutscene3DO()) + return; + if (!showStreetCutscene3DO()) + return; + if (!showOfficeCutscene3DO()) + return; return; } @@ -507,6 +524,53 @@ bool ScalpelEngine::showOfficeCutscene() { return finished; } +// 3DO variant +bool ScalpelEngine::showCityCutscene3DO() { + + bool finished = _animation->play3DO("26open1", 1, 255, 2); + + if (finished) + finished = _animation->play3DO("26open2", 1, 0, 2); + + return finished; +} + +bool ScalpelEngine::showAlleyCutscene3DO() { + bool finished = _animation->play3DO("27PRO1", 1, 3, 2); + + if (finished) + finished = _animation->play3DO("27PRO2", 1, 0, 2); + + if (finished) + finished = _animation->play3DO("27PRO3", 1, 0, 2); + + return finished; +} + +bool ScalpelEngine::showStreetCutscene3DO() { + bool finished = _animation->play3DO("14KICK", 1, 3, 2); + + if (finished) + finished = _animation->play3DO("14NOTE", 1, 0, 3); + + return finished; +} + +bool ScalpelEngine::showOfficeCutscene3DO() { + bool finished = _animation->play3DO("COFF1", 1, 3, 3); + + if (finished) + finished = _animation->play3DO("COFF2", 1, 0, 3); + + if (finished) + finished = _animation->play3DO("COFF3", 1, 0, 3); + + if (finished) + finished = _animation->play3DO("COFF4", 1, 0, 3); + + return finished; +} + void ScalpelEngine::loadInventory() { Inventory &inv = *_inventory; |