diff options
author | Eugene Sandulenko | 2008-01-02 18:44:20 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2008-01-02 18:44:20 +0000 |
commit | 2d94049bead04ae42d4051ec855fbcb2bda645ee (patch) | |
tree | 6e86ea60bc622803f9df4ec255d00ae75d9e0112 | |
parent | 4e7fe0275128ebde8a4d7a3a8c2ffe662558678a (diff) | |
download | scummvm-rg350-2d94049bead04ae42d4051ec855fbcb2bda645ee.tar.gz scummvm-rg350-2d94049bead04ae42d4051ec855fbcb2bda645ee.tar.bz2 scummvm-rg350-2d94049bead04ae42d4051ec855fbcb2bda645ee.zip |
Workaround for bug #1804278: "MONKEY: Mouse is invisible after loading"
svn-id: r30160
-rw-r--r-- | engines/scumm/cursor.cpp | 35 | ||||
-rw-r--r-- | engines/scumm/debugger.cpp | 10 | ||||
-rw-r--r-- | engines/scumm/debugger.h | 4 | ||||
-rw-r--r-- | engines/scumm/intern.h | 3 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 32 | ||||
-rw-r--r-- | engines/scumm/scumm.h | 2 |
6 files changed, 54 insertions, 32 deletions
diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp index 7b5e8421d7..22e13c8b01 100644 --- a/engines/scumm/cursor.cpp +++ b/engines/scumm/cursor.cpp @@ -467,6 +467,41 @@ void ScummEngine_v2::setBuiltinCursor(int idx) { updateCursor(); } +void ScummEngine_v5::resetCursors() { + // All "classic" games (V5 and older) encrypted their data files + // with exception of the GF_OLD256 games and the PC-Engine version + // of Loom. + if (!(_game.features & GF_OLD256) && _game.platform != Common::kPlatformPCEngine) + _game.features |= GF_USE_KEY; + + static const uint16 default_cursor_images[4][16] = { + /* cross-hair */ + { 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000, 0x7e3f, + 0x0000, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000 }, + /* hourglass */ + { 0x0000, 0x7ffe, 0x6006, 0x300c, 0x1818, 0x0c30, 0x0660, 0x03c0, + 0x0660, 0x0c30, 0x1998, 0x33cc, 0x67e6, 0x7ffe, 0x0000, 0x0000 }, + /* arrow */ + { 0x0000, 0x4000, 0x6000, 0x7000, 0x7800, 0x7c00, 0x7e00, 0x7f00, + 0x7f80, 0x78c0, 0x7c00, 0x4600, 0x0600, 0x0300, 0x0300, 0x0180 }, + /* hand */ + { 0x1e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x13ff, 0x1249, 0x1249, + 0xf249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x8001, 0xffff }, + }; + + static const byte default_cursor_hotspots[10] = { + 8, 7, 8, 7, 1, 1, 5, 0, + 8, 7, //zak256 + }; + + + for (int i = 0; i < 4; i++) { + memcpy(_cursorImages[i], default_cursor_images[i], 32); + } + memcpy(_cursorHotspots, default_cursor_hotspots, 8); + +} + void ScummEngine_v5::setBuiltinCursor(int idx) { int i, j; byte color = default_cursor_colors[idx]; diff --git a/engines/scumm/debugger.cpp b/engines/scumm/debugger.cpp index 83507abf76..954e400c2c 100644 --- a/engines/scumm/debugger.cpp +++ b/engines/scumm/debugger.cpp @@ -99,6 +99,8 @@ ScummDebugger::ScummDebugger(ScummEngine *s) DCmd_Register("hide", WRAP_METHOD(ScummDebugger, Cmd_Hide)); DCmd_Register("imuse", WRAP_METHOD(ScummDebugger, Cmd_IMuse)); + + DCmd_Register("resetcursors", WRAP_METHOD(ScummDebugger, Cmd_ResetCursors)); } ScummDebugger::~ScummDebugger() { @@ -863,4 +865,12 @@ bool ScummDebugger::Cmd_PrintDraft(int argc, const char **argv) { return true; } +bool ScummDebugger::Cmd_ResetCursors(int argc, const char **argv) { + _vm->resetCursors(); + + _detach_now = true; + + return false; +} + } // End of namespace Scumm diff --git a/engines/scumm/debugger.h b/engines/scumm/debugger.h index 043983bbd9..8046bf03aa 100644 --- a/engines/scumm/debugger.h +++ b/engines/scumm/debugger.h @@ -68,7 +68,9 @@ protected: bool Cmd_Show(int argc, const char **argv); bool Cmd_Hide(int argc, const char **argv); - bool Cmd_IMuse (int argc, const char **argv); + bool Cmd_IMuse(int argc, const char **argv); + + bool Cmd_ResetCursors(int argc, const char **argv); void printBox(int box); void drawBox(int box); diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h index 0ed64aa178..0fc6e3cfb4 100644 --- a/engines/scumm/intern.h +++ b/engines/scumm/intern.h @@ -68,6 +68,9 @@ public: ScummEngine_v5(OSystem *syst, const DetectorResult &dr); void clearFlashlight(); + + virtual void resetCursors(); + protected: virtual void setupOpcodes(); virtual void executeOpcode(byte i); diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 2460c24fbc..bc907c0520 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -602,37 +602,7 @@ ScummEngine::~ScummEngine() { ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr) : ScummEngine(syst, dr) { - // All "classic" games (V5 and older) encrypted their data files - // with exception of the GF_OLD256 games and the PC-Engine version - // of Loom. - if (!(_game.features & GF_OLD256) && _game.platform != Common::kPlatformPCEngine) - _game.features |= GF_USE_KEY; - - static const uint16 default_cursor_images[4][16] = { - /* cross-hair */ - { 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000, 0x7e3f, - 0x0000, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000 }, - /* hourglass */ - { 0x0000, 0x7ffe, 0x6006, 0x300c, 0x1818, 0x0c30, 0x0660, 0x03c0, - 0x0660, 0x0c30, 0x1998, 0x33cc, 0x67e6, 0x7ffe, 0x0000, 0x0000 }, - /* arrow */ - { 0x0000, 0x4000, 0x6000, 0x7000, 0x7800, 0x7c00, 0x7e00, 0x7f00, - 0x7f80, 0x78c0, 0x7c00, 0x4600, 0x0600, 0x0300, 0x0300, 0x0180 }, - /* hand */ - { 0x1e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x13ff, 0x1249, 0x1249, - 0xf249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x8001, 0xffff }, - }; - - static const byte default_cursor_hotspots[10] = { - 8, 7, 8, 7, 1, 1, 5, 0, - 8, 7, //zak256 - }; - - - for (int i = 0; i < 4; i++) { - memcpy(_cursorImages[i], default_cursor_images[i], 32); - } - memcpy(_cursorHotspots, default_cursor_hotspots, 8); + resetCursors(); // Setup flashlight memset(&_flashlight, 0, sizeof(_flashlight)); diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 8fb5914435..89a606cde1 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -491,6 +491,8 @@ protected: virtual void animateCursor() {} virtual void updatePalette(); + virtual void resetCursors() {} + public: void pauseGame(); void restart(); |