Workaround for bug #1804278: "MONKEY: Mouse is invisible after loading"
svn-id: r30160
This commit is contained in:
parent
4e7fe02751
commit
2d94049bea
6 changed files with 54 additions and 32 deletions
|
@ -467,6 +467,41 @@ void ScummEngine_v2::setBuiltinCursor(int idx) {
|
||||||
updateCursor();
|
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) {
|
void ScummEngine_v5::setBuiltinCursor(int idx) {
|
||||||
int i, j;
|
int i, j;
|
||||||
byte color = default_cursor_colors[idx];
|
byte color = default_cursor_colors[idx];
|
||||||
|
|
|
@ -99,6 +99,8 @@ ScummDebugger::ScummDebugger(ScummEngine *s)
|
||||||
DCmd_Register("hide", WRAP_METHOD(ScummDebugger, Cmd_Hide));
|
DCmd_Register("hide", WRAP_METHOD(ScummDebugger, Cmd_Hide));
|
||||||
|
|
||||||
DCmd_Register("imuse", WRAP_METHOD(ScummDebugger, Cmd_IMuse));
|
DCmd_Register("imuse", WRAP_METHOD(ScummDebugger, Cmd_IMuse));
|
||||||
|
|
||||||
|
DCmd_Register("resetcursors", WRAP_METHOD(ScummDebugger, Cmd_ResetCursors));
|
||||||
}
|
}
|
||||||
|
|
||||||
ScummDebugger::~ScummDebugger() {
|
ScummDebugger::~ScummDebugger() {
|
||||||
|
@ -863,4 +865,12 @@ bool ScummDebugger::Cmd_PrintDraft(int argc, const char **argv) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ScummDebugger::Cmd_ResetCursors(int argc, const char **argv) {
|
||||||
|
_vm->resetCursors();
|
||||||
|
|
||||||
|
_detach_now = true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace Scumm
|
} // End of namespace Scumm
|
||||||
|
|
|
@ -68,7 +68,9 @@ protected:
|
||||||
bool Cmd_Show(int argc, const char **argv);
|
bool Cmd_Show(int argc, const char **argv);
|
||||||
bool Cmd_Hide(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 printBox(int box);
|
||||||
void drawBox(int box);
|
void drawBox(int box);
|
||||||
|
|
|
@ -68,6 +68,9 @@ public:
|
||||||
ScummEngine_v5(OSystem *syst, const DetectorResult &dr);
|
ScummEngine_v5(OSystem *syst, const DetectorResult &dr);
|
||||||
|
|
||||||
void clearFlashlight();
|
void clearFlashlight();
|
||||||
|
|
||||||
|
virtual void resetCursors();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setupOpcodes();
|
virtual void setupOpcodes();
|
||||||
virtual void executeOpcode(byte i);
|
virtual void executeOpcode(byte i);
|
||||||
|
|
|
@ -602,37 +602,7 @@ ScummEngine::~ScummEngine() {
|
||||||
ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr)
|
ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr)
|
||||||
: ScummEngine(syst, dr) {
|
: ScummEngine(syst, dr) {
|
||||||
|
|
||||||
// All "classic" games (V5 and older) encrypted their data files
|
resetCursors();
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Setup flashlight
|
// Setup flashlight
|
||||||
memset(&_flashlight, 0, sizeof(_flashlight));
|
memset(&_flashlight, 0, sizeof(_flashlight));
|
||||||
|
|
|
@ -491,6 +491,8 @@ protected:
|
||||||
virtual void animateCursor() {}
|
virtual void animateCursor() {}
|
||||||
virtual void updatePalette();
|
virtual void updatePalette();
|
||||||
|
|
||||||
|
virtual void resetCursors() {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void pauseGame();
|
void pauseGame();
|
||||||
void restart();
|
void restart();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue