From 4858adb72d8d83ea5ae9f024bbe978023a19ef06 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Fri, 12 Jun 2015 18:33:23 +0200 Subject: SHERLOCK: 3DO: mouse cursor support --- engines/sherlock/events.cpp | 16 ++++++++++++++-- engines/sherlock/image_file.cpp | 4 ++-- engines/sherlock/image_file.h | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/engines/sherlock/events.cpp b/engines/sherlock/events.cpp index f7031f012e..1ae19c1890 100644 --- a/engines/sherlock/events.cpp +++ b/engines/sherlock/events.cpp @@ -54,7 +54,13 @@ void Events::loadCursors(const Common::String &filename) { hideCursor(); delete _cursorImages; - _cursorImages = new ImageFile(filename); + if (_vm->getPlatform() != Common::kPlatform3DO) { + // PC + _cursorImages = new ImageFile3DO(filename); + } else { + // 3DO + _cursorImages = new ImageFile3DO(filename, true); + } _cursorId = INVALID_CURSOR; } @@ -82,7 +88,13 @@ void Events::setCursor(CursorId cursorId) { void Events::setCursor(const Graphics::Surface &src, int hotspotX, int hotspotY) { _cursorId = INVALID_CURSOR; - CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0xff); + if (_vm->getPlatform() != Common::kPlatform3DO) { + // PC 8-bit palettized + CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0xff); + } else { + // 3DO RGB565 + CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0x0000, false, &src.format); + } showCursor(); } diff --git a/engines/sherlock/image_file.cpp b/engines/sherlock/image_file.cpp index d47f2c59a3..43d3cf3de2 100644 --- a/engines/sherlock/image_file.cpp +++ b/engines/sherlock/image_file.cpp @@ -243,14 +243,14 @@ void ImageFile3DO::setVm(SherlockEngine *vm) { _vm = vm; } -ImageFile3DO::ImageFile3DO(const Common::String &name) { +ImageFile3DO::ImageFile3DO(const Common::String &name, bool isRoomDataFormat) { Common::File *dataStream = new Common::File(); if (!dataStream->open(name)) { error("unable to open %s\n", name.c_str()); } - load(*dataStream, false); // this is never called for room data + load(*dataStream, isRoomDataFormat); delete dataStream; } diff --git a/engines/sherlock/image_file.h b/engines/sherlock/image_file.h index 5cdf1db4be..ddca4b883e 100644 --- a/engines/sherlock/image_file.h +++ b/engines/sherlock/image_file.h @@ -135,7 +135,7 @@ private: void loadAnimationFile(Common::SeekableReadStream &stream); public: - ImageFile3DO(const Common::String &name); + ImageFile3DO(const Common::String &name, bool isRoomDataFormat = false); ImageFile3DO(Common::SeekableReadStream &stream, bool isRoomData = false); ~ImageFile3DO(); static void setVm(SherlockEngine *vm); -- cgit v1.2.3