aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2008-01-02 18:44:20 +0000
committerEugene Sandulenko2008-01-02 18:44:20 +0000
commit2d94049bead04ae42d4051ec855fbcb2bda645ee (patch)
tree6e86ea60bc622803f9df4ec255d00ae75d9e0112
parent4e7fe0275128ebde8a4d7a3a8c2ffe662558678a (diff)
downloadscummvm-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.cpp35
-rw-r--r--engines/scumm/debugger.cpp10
-rw-r--r--engines/scumm/debugger.h4
-rw-r--r--engines/scumm/intern.h3
-rw-r--r--engines/scumm/scumm.cpp32
-rw-r--r--engines/scumm/scumm.h2
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();