aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/boxes.cpp4
-rw-r--r--engines/scumm/detection.cpp4
-rw-r--r--engines/scumm/detection_tables.h6
-rw-r--r--engines/scumm/dialogs.cpp15
-rw-r--r--engines/scumm/dialogs.h1
-rw-r--r--engines/scumm/gfx.cpp10
-rw-r--r--engines/scumm/he/intern_he.h3
-rw-r--r--engines/scumm/he/logic_he.cpp4
-rw-r--r--engines/scumm/he/resource_he.cpp4
-rw-r--r--engines/scumm/he/script_v71he.cpp2
-rw-r--r--engines/scumm/he/wiz_he.cpp5
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.cpp6
-rw-r--r--engines/scumm/input.cpp289
-rw-r--r--engines/scumm/object.cpp5
-rw-r--r--engines/scumm/palette.cpp70
-rw-r--r--engines/scumm/player_v2.h4
-rw-r--r--engines/scumm/player_v2cms.cpp4
-rw-r--r--engines/scumm/resource.cpp10
-rw-r--r--engines/scumm/saveload.cpp2
-rw-r--r--engines/scumm/script.cpp13
-rw-r--r--engines/scumm/script_v5.cpp2
-rw-r--r--engines/scumm/script_v6.cpp5
-rw-r--r--engines/scumm/scumm-md5.h64
-rw-r--r--engines/scumm/scumm.cpp3
-rw-r--r--engines/scumm/scumm.h15
-rw-r--r--engines/scumm/scumm_v6.h1
-rw-r--r--engines/scumm/scumm_v7.h1
-rw-r--r--engines/scumm/smush/imuse_channel.cpp2
-rw-r--r--engines/scumm/sound.cpp2
-rw-r--r--engines/scumm/string.cpp3
-rw-r--r--engines/scumm/verbs.cpp2
31 files changed, 304 insertions, 257 deletions
diff --git a/engines/scumm/boxes.cpp b/engines/scumm/boxes.cpp
index f1429d4261..472e04b5f3 100644
--- a/engines/scumm/boxes.cpp
+++ b/engines/scumm/boxes.cpp
@@ -369,7 +369,7 @@ void ScummEngine::convertScaleTableToScaleSlot(int slot) {
*/
// Search for the bend on the left side
- m = (resptr[199] - resptr[0]) / 199.0;
+ m = (resptr[199] - resptr[0]) / 199.0f;
for (lowerIdx = 0; lowerIdx < 199 && (resptr[lowerIdx] == 1 || resptr[lowerIdx] == 255); lowerIdx++) {
oldM = m;
m = (resptr[199] - resptr[lowerIdx+1]) / (float)(199 - (lowerIdx+1));
@@ -383,7 +383,7 @@ void ScummEngine::convertScaleTableToScaleSlot(int slot) {
}
// Search for the bend on the right side
- m = (resptr[199] - resptr[0]) / 199.0;
+ m = (resptr[199] - resptr[0]) / 199.0f;
for (upperIdx = 199; upperIdx > 1 && (resptr[upperIdx] == 1 || resptr[upperIdx] == 255); upperIdx--) {
oldM = m;
m = (resptr[upperIdx-1] - resptr[0]) / (float)(upperIdx-1);
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index cf88ded3b8..5fa74d22c3 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -882,6 +882,10 @@ Common::Error ScummMetaEngine::createInstance(OSystem *syst, Engine **engine) co
if (res.game.platform == Common::kPlatformFMTowns && res.game.version == 3)
res.game.midi = MDT_TOWNS;
+ // If the GUI options were updated, we catch this here and update them in the users config
+ // file transparently.
+ Common::updateGameGUIOptions(res.game.guioptions);
+
// Finally, we have massaged the GameDescriptor to our satisfaction, and can
// instantiate the appropriate game engine. Hooray!
switch (res.game.version) {
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index 2ea593c571..92024a21cc 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -230,13 +230,13 @@ static const GameSettings gameVariantsTable[] = {
{"monkey2", 0, 0, GID_MONKEY2, 5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
- {"atlantis", 0, 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
+ {"atlantis", "", 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
{"atlantis", "CD" , 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NONE},
- {"tentacle", 0, 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
+ {"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
{"tentacle", "CD", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NONE},
- {"samnmax", 0, 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
+ {"samnmax", "", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
{"samnmax", "CD", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NONE},
#ifdef ENABLE_SCUMM_7_8
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 9fb107f9fc..880fab04a5 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -641,6 +641,8 @@ HelpDialog::HelpDialog(const GameSettings &game)
new GUI::ButtonWidget(this, "ScummHelp.Close", "Close", kCloseCmd, 'C');
_prevButton->clearFlags(WIDGET_ENABLED);
+ _numLines = HELP_NUM_LINES;
+
// Dummy entries
for (int i = 0; i < HELP_NUM_LINES; i++) {
_key[i] = new StaticTextWidget(this, 0, 0, 10, 10, "", Graphics::kTextAlignRight);
@@ -658,22 +660,25 @@ void HelpDialog::reflowLayout() {
g_gui.xmlEval()->getWidgetData("ScummHelp.HelpText", x, y, w, h);
+ // Make sure than we don't have more lines than what we can fit
+ // on the space that the layout reserves for text
+ _numLines = MIN(HELP_NUM_LINES, (int)(h / lineHeight));
+
int keyW = w * 20 / 100;
int dscX = x + keyW + 32;
int dscW = w * 80 / 100;
int xoff = (_w >> 1) - (w >> 1);
- for (int i = 0; i < HELP_NUM_LINES; i++) {
- _key[i]->resize(xoff + x, y + lineHeight * i, keyW, lineHeight + 2);
- _dsc[i]->resize(xoff + dscX, y + lineHeight * i, dscW, lineHeight + 2);
+ for (int i = 0; i < _numLines; i++) {
+ _key[i]->resize(xoff + x, y + lineHeight * i, keyW, lineHeight);
+ _dsc[i]->resize(xoff + dscX, y + lineHeight * i, dscW, lineHeight);
}
displayKeyBindings();
}
void HelpDialog::displayKeyBindings() {
-
String titleStr, *keyStr, *dscStr;
#ifndef __DS__
@@ -684,7 +689,7 @@ void HelpDialog::displayKeyBindings() {
#endif
_title->setLabel(titleStr);
- for (int i = 0; i < HELP_NUM_LINES; i++) {
+ for (int i = 0; i < _numLines; i++) {
_key[i]->setLabel(keyStr[i]);
_dsc[i]->setLabel(dscStr[i]);
}
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index 290b3450dc..af844272fa 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -124,6 +124,7 @@ protected:
int _page;
int _numPages;
+ int _numLines;
const GameSettings _game;
diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp
index 62e18561d3..5961ec4013 100644
--- a/engines/scumm/gfx.cpp
+++ b/engines/scumm/gfx.cpp
@@ -36,7 +36,7 @@
#include "scumm/util.h"
#ifdef USE_ARM_GFX_ASM
-extern "C" void asmDrawStripToScreen(int height, int width, byte const* text, byte const* src, byte* dst,
+extern "C" void asmDrawStripToScreen(int height, int width, void const* text, void const* src, byte* dst,
int vsPitch, int vmScreenWidth, int textSurfacePitch);
extern "C" void asmCopy8Col(byte* dst, int dstPitch, const byte* src, int height);
#endif /* USE_ARM_GFX_ASM */
@@ -574,13 +574,13 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i
if (width <= 0 || height <= 0)
return;
- const byte *src = vs->getPixels(x, top);
+ const void *src = vs->getPixels(x, top);
int m = _textSurfaceMultiplier;
int vsPitch;
int pitch = vs->pitch;
if (_useCJKMode && _textSurfaceMultiplier == 2) {
- scale2x(_fmtownsBuf, _screenWidth * m, src, vs->pitch, width, height);
+ scale2x(_fmtownsBuf, _screenWidth * m, (const byte *)src, vs->pitch, width, height);
src = _fmtownsBuf;
vsPitch = _screenWidth * m - width * m;
@@ -599,7 +599,7 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i
// Compute pointer to the text surface
assert(_compositeBuf);
- const byte *text = (byte *)_textSurface.getBasePtr(x * m, y * m);
+ const void *text = _textSurface.getBasePtr(x * m, y * m);
// The values x, width, etc. are all multiples of 8 at this point,
// so loop unrolloing might be a good idea...
@@ -677,7 +677,7 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i
}
// Finally blit the whole thing to the screen
- _system->copyRectToScreen(src, pitch, x, y, width, height);
+ _system->copyRectToScreen((const byte *)src, pitch, x, y, width, height);
}
// CGA
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index c2079fa5fe..4c2da19cc5 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -359,6 +359,8 @@ protected:
virtual void setupScummVars();
virtual void resetScummVars();
+ virtual void parseEvent(Common::Event event);
+
virtual void initCharset(int charset);
virtual void clearDrawQueues();
@@ -386,6 +388,7 @@ protected:
byte VAR_PLATFORM;
byte VAR_PLATFORM_VERSION;
byte VAR_CURRENT_CHARSET;
+ byte VAR_KEY_STATE;
byte VAR_COLOR_DEPTH;
};
diff --git a/engines/scumm/he/logic_he.cpp b/engines/scumm/he/logic_he.cpp
index a095622173..a24f4d4665 100644
--- a/engines/scumm/he/logic_he.cpp
+++ b/engines/scumm/he/logic_he.cpp
@@ -357,8 +357,8 @@ int32 LogicHErace::op_1140(int32 *args) {
const double scalarProduct = x * args[0] + y * args[1];
// Finally compute the projection of (arg2,arg3) onto (arg0,arg1)
- double projX = args[0] - 2 * scalarProduct * args[2];
- double projY = args[1] - 2 * scalarProduct * args[3];
+ double projX = args[0] - 2 * scalarProduct * x;
+ double projY = args[1] - 2 * scalarProduct * y;
projX = projX * 20.0 / 23.0; // FIXME: Why is this here?
diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp
index 1b5b467512..ce29bf0319 100644
--- a/engines/scumm/he/resource_he.cpp
+++ b/engines/scumm/he/resource_he.cpp
@@ -474,7 +474,7 @@ bool Win32ResExtractor::check_offset(byte *memory, int total_size, const char *n
int need_size = (int)((byte *)offset - memory + size);
debugC(DEBUG_RESOURCE, "check_offset: size=%x vs %x offset=%x size=%x",
- need_size, total_size, (byte *)offset - memory, size);
+ need_size, total_size, (uint)((byte *)offset - memory), size);
if (need_size < 0 || need_size > total_size) {
error("%s: premature end", name);
@@ -913,7 +913,7 @@ int Win32ResExtractor::convertIcons(byte *data, int datasize, byte **cursor, int
if (entries[c].dib_size != bitmap.size + image_size + mask_size + palette_count * sizeof(Win32RGBQuad))
debugC(DEBUG_RESOURCE, "incorrect total size of bitmap (%d specified; %d real)",
entries[c].dib_size,
- bitmap.size + image_size + mask_size + palette_count * sizeof(Win32RGBQuad)
+ (int)(bitmap.size + image_size + mask_size + palette_count * sizeof(Win32RGBQuad))
);
image_data = (byte *)malloc(image_size);
diff --git a/engines/scumm/he/script_v71he.cpp b/engines/scumm/he/script_v71he.cpp
index 316d51b12d..c832d64316 100644
--- a/engines/scumm/he/script_v71he.cpp
+++ b/engines/scumm/he/script_v71he.cpp
@@ -59,7 +59,7 @@ byte *ScummEngine_v71he::heFindResourceData(uint32 tag, byte *ptr) {
byte *ScummEngine_v71he::heFindResource(uint32 tag, byte *searchin) {
uint32 curpos, totalsize, size;
- debugC(DEBUG_RESOURCE, "heFindResource(%s, %lx)", tag2str(tag), searchin);
+ debugC(DEBUG_RESOURCE, "heFindResource(%s, %p)", tag2str(tag), (const void *)searchin);
assert(searchin);
searchin += 4;
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index b23b7ac869..4c20ed7835 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -831,6 +831,11 @@ void Wiz::decompressWizImage(uint8 *dst, int dstPitch, const uint8 *src, const C
}
}
+// NOTE: These templates are used outside this file. We don't want the compiler to optimize them away, so we need to explicitely instantiate them.
+template void Wiz::decompressWizImage<kWizXMap>(uint8 *dst, int dstPitch, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr);
+template void Wiz::decompressWizImage<kWizRMap>(uint8 *dst, int dstPitch, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr);
+template void Wiz::decompressWizImage<kWizCopy>(uint8 *dst, int dstPitch, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr);
+
template <int type>
void Wiz::decompressRawWizImage(uint8 *dst, int dstPitch, const uint8 *src, int srcPitch, int w, int h, int transColor, const uint8 *palPtr) {
if (type == kWizRMap) {
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 6ded6d23b2..a389c0e7e7 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -22,6 +22,7 @@
* $Id$
*/
+#include "common/config-manager.h"
#include "common/timer.h"
#include "scumm/actor.h"
@@ -136,6 +137,11 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
track->pan = a->_talkPan;
track->vol = a->_talkVolume * 1000;
}
+
+ // The volume is set to zero, when using subtitles only setting in COMI
+ if (ConfMan.getBool("speech_mute") || _vm->VAR(_vm->VAR_VOICE_MODE) == 2) {
+ track->vol = 0;
+ }
}
assert(bits == 8 || bits == 12 || bits == 16);
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index f378f2225e..61b714a3e2 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -55,145 +55,173 @@ enum MouseButtonStatus {
msClicked = 2
};
-void ScummEngine::parseEvents() {
- Common::Event event;
-
- while (_eventMan->pollEvent(event)) {
-
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode >= '0' && event.kbd.keycode <= '9'
- && (event.kbd.flags == Common::KBD_ALT ||
- event.kbd.flags == Common::KBD_CTRL)) {
- _saveLoadSlot = event.kbd.keycode - '0';
-
- // don't overwrite autosave (slot 0)
- if (_saveLoadSlot == 0)
- _saveLoadSlot = 10;
-
- sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot);
- _saveLoadFlag = (event.kbd.flags == Common::KBD_ALT) ? 1 : 2;
- _saveTemporaryState = false;
- } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'f') {
- _fastMode ^= 1;
- } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'g') {
- _fastMode ^= 2;
- } else if ((event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'd') ||
- event.kbd.ascii == '~' || event.kbd.ascii == '#') {
- _debugger->attach();
- } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 's') {
- _res->resourceStats();
- } else {
- // Normal key press, pass on to the game.
- _keyPressed = event.kbd;
- }
+#ifdef ENABLE_HE
+void ScummEngine_v80he::parseEvent(Common::Event event) {
+ ScummEngine::parseEvent(event);
- if (_game.heversion >= 80) {
- // FIXME: Move this code & VAR_KEY_STATE to class ScummEngine_v80he
+ // Keyboard is controlled via variable
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_LEFT)
+ VAR(VAR_KEY_STATE) |= 1;
- // Keyboard is controlled via variable
- int keyState = 0;
+ if (event.kbd.keycode == Common::KEYCODE_RIGHT)
+ VAR(VAR_KEY_STATE) |= 2;
- if (event.kbd.keycode == Common::KEYCODE_LEFT) // Left
- keyState = 1;
+ if (event.kbd.keycode == Common::KEYCODE_UP)
+ VAR(VAR_KEY_STATE) |= 4;
- if (event.kbd.keycode == Common::KEYCODE_RIGHT) // Right
- keyState |= 2;
+ if (event.kbd.keycode == Common::KEYCODE_DOWN)
+ VAR(VAR_KEY_STATE) |= 8;
- if (event.kbd.keycode == Common::KEYCODE_UP) // Up
- keyState |= 4;
+ if (event.kbd.keycode == Common::KEYCODE_LSHIFT || event.kbd.keycode == Common::KEYCODE_RSHIFT)
+ VAR(VAR_KEY_STATE) |= 16;
- if (event.kbd.keycode == Common::KEYCODE_DOWN) // Down
- keyState |= 8;
+ if (event.kbd.keycode == Common::KEYCODE_LCTRL || event.kbd.keycode == Common::KEYCODE_RCTRL)
+ VAR(VAR_KEY_STATE) |= 32;
+ break;
- if (event.kbd.flags == Common::KBD_SHIFT)
- keyState |= 16;
+ case Common::EVENT_KEYUP:
+ if (event.kbd.keycode == Common::KEYCODE_LEFT)
+ VAR(VAR_KEY_STATE) &= ~1;
- if (event.kbd.flags == Common::KBD_CTRL)
- keyState |= 32;
+ if (event.kbd.keycode == Common::KEYCODE_RIGHT)
+ VAR(VAR_KEY_STATE) &= ~2;
- VAR(VAR_KEY_STATE) = keyState;
- }
+ if (event.kbd.keycode == Common::KEYCODE_UP)
+ VAR(VAR_KEY_STATE) &= ~4;
- // FIXME: We are using ASCII values to index the _keyDownMap here,
- // yet later one code which checks _keyDownMap will use KEYCODEs
- // to do so. That is, we are mixing ascii and keycode values here,
- // which is bad. We probably should be only using keycodes, but at
- // least INSANE checks for "Shift-V" by looking for the 'V' key
- // being pressed. It would be easy to solve that by also storing
- // the modifier flags. However, since getKeyState() is also called
- // by scripts, we have to be careful with semantic changes.
- if (_keyPressed.ascii >= 512)
- debugC(DEBUG_GENERAL, "_keyPressed > 512 (%d)", _keyPressed.ascii);
- else
- _keyDownMap[_keyPressed.ascii] = true;
- break;
+ if (event.kbd.keycode == Common::KEYCODE_DOWN)
+ VAR(VAR_KEY_STATE) &= ~8;
- case Common::EVENT_KEYUP:
- if (event.kbd.ascii >= 512) {
- debugC(DEBUG_GENERAL, "keyPressed > 512 (%d)", event.kbd.ascii);
- } else {
- _keyDownMap[event.kbd.ascii] = false;
-
- // Due to some weird bug with capslock key pressed
- // generated keydown event is for lower letter but
- // keyup is for upper letter
- // On most (all?) keyboards it is safe to assume that
- // both upper and lower letters are unpressed on keyup event
- //
- // Fixes bug #1709430: "FT: CAPSLOCK + V enables cheating for all fights"
- //
- // Fingolfin remarks: This wouldn't be a problem if we used keycodes.
- _keyDownMap[toupper(event.kbd.ascii)] = false;
- }
- break;
+ if (event.kbd.keycode == Common::KEYCODE_LSHIFT || event.kbd.keycode == Common::KEYCODE_RSHIFT)
+ VAR(VAR_KEY_STATE) &= ~16;
+ if (event.kbd.keycode == Common::KEYCODE_LCTRL || event.kbd.keycode == Common::KEYCODE_RCTRL)
+ VAR(VAR_KEY_STATE) &= ~32;
+ break;
- // We update the mouse position whenever the mouse moves or a click occurs.
- // The latter is done to accomodate systems with a touchpad / pen controller.
- case Common::EVENT_LBUTTONDOWN:
- case Common::EVENT_RBUTTONDOWN:
- case Common::EVENT_MOUSEMOVE:
- if (event.type == Common::EVENT_LBUTTONDOWN)
- _leftBtnPressed |= msClicked|msDown;
- else if (event.type == Common::EVENT_RBUTTONDOWN)
- _rightBtnPressed |= msClicked|msDown;
- _mouse.x = event.mouse.x;
- _mouse.y = event.mouse.y;
-
- if (_renderMode == Common::kRenderHercA || _renderMode == Common::kRenderHercG) {
- _mouse.x -= (Common::kHercW - _screenWidth * 2) / 2;
- _mouse.x >>= 1;
- _mouse.y = _mouse.y * 4 / 7;
- } else if (_useCJKMode && _textSurfaceMultiplier == 2) {
- _mouse.x >>= 1;
- _mouse.y >>= 1;
- }
- break;
- case Common::EVENT_LBUTTONUP:
- _leftBtnPressed &= ~msDown;
- break;
+ default:
+ break;
+ }
+}
+#endif
- case Common::EVENT_RBUTTONUP:
- _rightBtnPressed &= ~msDown;
- break;
+void ScummEngine::parseEvent(Common::Event event) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode >= '0' && event.kbd.keycode <= '9'
+ && (event.kbd.flags == Common::KBD_ALT ||
+ event.kbd.flags == Common::KBD_CTRL)) {
+ _saveLoadSlot = event.kbd.keycode - '0';
+
+ // don't overwrite autosave (slot 0)
+ if (_saveLoadSlot == 0)
+ _saveLoadSlot = 10;
+
+ sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot);
+ _saveLoadFlag = (event.kbd.flags == Common::KBD_ALT) ? 1 : 2;
+ _saveTemporaryState = false;
+ } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'f') {
+ _fastMode ^= 1;
+ } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'g') {
+ _fastMode ^= 2;
+ } else if ((event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 'd') ||
+ event.kbd.ascii == '~' || event.kbd.ascii == '#') {
+ _debugger->attach();
+ } else if (event.kbd.flags == Common::KBD_CTRL && event.kbd.keycode == 's') {
+ _res->resourceStats();
+ } else {
+ // Normal key press, pass on to the game.
+ _keyPressed = event.kbd;
+ }
- // The following two cases enable dialog choices to be scrolled
- // through in the SegaCD version of MI. Values are taken from script-14.
- // See bug report #1193185 for details.
- case Common::EVENT_WHEELDOWN:
- if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD)
- _keyPressed = Common::KeyState(Common::KEYCODE_7, 55); // '7'
- break;
+ // FIXME: We are using ASCII values to index the _keyDownMap here,
+ // yet later one code which checks _keyDownMap will use KEYCODEs
+ // to do so. That is, we are mixing ascii and keycode values here,
+ // which is bad. We probably should be only using keycodes, but at
+ // least INSANE checks for "Shift-V" by looking for the 'V' key
+ // being pressed. It would be easy to solve that by also storing
+ // the modifier flags. However, since getKeyState() is also called
+ // by scripts, we have to be careful with semantic changes.
+ if (_keyPressed.ascii >= 512)
+ debugC(DEBUG_GENERAL, "_keyPressed > 512 (%d)", _keyPressed.ascii);
+ else
+ _keyDownMap[_keyPressed.ascii] = true;
+ break;
+
+ case Common::EVENT_KEYUP:
+ if (event.kbd.ascii >= 512) {
+ debugC(DEBUG_GENERAL, "keyPressed > 512 (%d)", event.kbd.ascii);
+ } else {
+ _keyDownMap[event.kbd.ascii] = false;
+
+ // Due to some weird bug with capslock key pressed
+ // generated keydown event is for lower letter but
+ // keyup is for upper letter
+ // On most (all?) keyboards it is safe to assume that
+ // both upper and lower letters are unpressed on keyup event
+ //
+ // Fixes bug #1709430: "FT: CAPSLOCK + V enables cheating for all fights"
+ //
+ // Fingolfin remarks: This wouldn't be a problem if we used keycodes.
+ _keyDownMap[toupper(event.kbd.ascii)] = false;
+ }
+ break;
+
+
+ // We update the mouse position whenever the mouse moves or a click occurs.
+ // The latter is done to accomodate systems with a touchpad / pen controller.
+ case Common::EVENT_LBUTTONDOWN:
+ case Common::EVENT_RBUTTONDOWN:
+ case Common::EVENT_MOUSEMOVE:
+ if (event.type == Common::EVENT_LBUTTONDOWN)
+ _leftBtnPressed |= msClicked|msDown;
+ else if (event.type == Common::EVENT_RBUTTONDOWN)
+ _rightBtnPressed |= msClicked|msDown;
+ _mouse.x = event.mouse.x;
+ _mouse.y = event.mouse.y;
+
+ if (_renderMode == Common::kRenderHercA || _renderMode == Common::kRenderHercG) {
+ _mouse.x -= (Common::kHercW - _screenWidth * 2) / 2;
+ _mouse.x >>= 1;
+ _mouse.y = _mouse.y * 4 / 7;
+ } else if (_useCJKMode && _textSurfaceMultiplier == 2) {
+ _mouse.x >>= 1;
+ _mouse.y >>= 1;
+ }
+ break;
+ case Common::EVENT_LBUTTONUP:
+ _leftBtnPressed &= ~msDown;
+ break;
+
+ case Common::EVENT_RBUTTONUP:
+ _rightBtnPressed &= ~msDown;
+ break;
+
+ // The following two cases enable dialog choices to be scrolled
+ // through in the SegaCD version of MI. Values are taken from script-14.
+ // See bug report #1193185 for details.
+ case Common::EVENT_WHEELDOWN:
+ if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD)
+ _keyPressed = Common::KeyState(Common::KEYCODE_7, 55); // '7'
+ break;
+
+ case Common::EVENT_WHEELUP:
+ if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD)
+ _keyPressed = Common::KeyState(Common::KEYCODE_6, 54); // '6'
+ break;
+
+ default:
+ break;
+ }
+}
- case Common::EVENT_WHEELUP:
- if (_game.id == GID_MONKEY && _game.platform == Common::kPlatformSegaCD)
- _keyPressed = Common::KeyState(Common::KEYCODE_6, 54); // '6'
- break;
+void ScummEngine::parseEvents() {
+ Common::Event event;
- default:
- break;
- }
+ while (_eventMan->pollEvent(event)) {
+ parseEvent(event);
}
}
@@ -230,6 +258,18 @@ void ScummEngine_v0::processInput() {
ScummEngine::processInput();
}
+#ifdef ENABLE_SCUMM_7_8
+void ScummEngine_v7::processInput() {
+ ScummEngine::processInput();
+
+ if (_skipVideo && !_smushActive) {
+ abortCutscene();
+ _mouseAndKeyboardStat = Common::ASCII_ESCAPE;
+ _skipVideo = false;
+ }
+}
+#endif
+
void ScummEngine::processInput() {
Common::KeyState lastKeyHit = _keyPressed;
_keyPressed.reset();
@@ -364,9 +404,10 @@ void ScummEngine_v7::processKeyboard(Common::KeyState lastKeyHit) {
_insane->escapeKeyHandler();
else
_smushVideoShouldFinish = true;
- }
- if (!_smushActive || _smushVideoShouldFinish)
+ _skipVideo = true;
+ } else {
abortCutscene();
+ }
_mouseAndKeyboardStat = Common::ASCII_ESCAPE;
diff --git a/engines/scumm/object.cpp b/engines/scumm/object.cpp
index 372fcd9e45..f29be071e0 100644
--- a/engines/scumm/object.cpp
+++ b/engines/scumm/object.cpp
@@ -1816,9 +1816,8 @@ void ScummEngine::loadFlObject(uint object, uint room) {
assert(flob);
// Copy object code + object image to floating object
- ((uint32 *)flob)[0] = MKID_BE('FLOB');
- ((uint32 *)flob)[1] = TO_BE_32(flob_size);
-
+ WRITE_UINT32(flob, MKID_BE('FLOB'));
+ WRITE_BE_UINT32(flob + 4, flob_size);
memcpy(flob + 8, foir.obcd, obcd_size);
memcpy(flob + 8 + obcd_size, foir.obim, obim_size);
diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp
index 44249a8715..6adf5c524e 100644
--- a/engines/scumm/palette.cpp
+++ b/engines/scumm/palette.cpp
@@ -417,13 +417,9 @@ void ScummEngine::moveMemInPalRes(int start, int end, byte direction) {
}
void ScummEngine::palManipulateInit(int resID, int start, int end, int time) {
- byte *pal, *target, *between;
- byte *string1, *string2, *string3;
- int i;
-
- string1 = getStringAddress(resID);
- string2 = getStringAddress(resID + 1);
- string3 = getStringAddress(resID + 2);
+ byte *string1 = getStringAddress(resID);
+ byte *string2 = getStringAddress(resID + 1);
+ byte *string3 = getStringAddress(resID + 2);
if (!string1 || !string2 || !string3) {
error("palManipulateInit(%d,%d,%d,%d): Cannot obtain string resources %d, %d and %d",
resID, start, end, time, resID, resID + 1, resID + 2);
@@ -443,29 +439,24 @@ void ScummEngine::palManipulateInit(int resID, int start, int end, int time) {
if (!_palManipIntermediatePal)
_palManipIntermediatePal = (byte *)calloc(0x600, 1);
- pal = _currentPalette + start * 3;
- target = _palManipPalette + start * 3;
- between = _palManipIntermediatePal + start * 6;
+ byte *pal = _currentPalette + start * 3;
+ byte *target = _palManipPalette + start * 3;
+ uint16 *between = (uint16 *)(_palManipIntermediatePal + start * 6);
- for (i = start; i < end; ++i) {
+ for (int i = start; i < end; ++i) {
*target++ = *string1++;
*target++ = *string2++;
*target++ = *string3++;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
+ *between++ = ((uint16) *pal++) << 8;
+ *between++ = ((uint16) *pal++) << 8;
+ *between++ = ((uint16) *pal++) << 8;
}
_palManipCounter = time;
}
void ScummEngine_v6::palManipulateInit(int resID, int start, int end, int time) {
- byte *pal, *target, *between;
const byte *new_pal;
- int i;
new_pal = getPalettePtr(resID, _roomResource);
@@ -480,20 +471,17 @@ void ScummEngine_v6::palManipulateInit(int resID, int start, int end, int time)
if (!_palManipIntermediatePal)
_palManipIntermediatePal = (byte *)calloc(0x600, 1);
- pal = _currentPalette + start * 3;
- target = _palManipPalette + start * 3;
- between = _palManipIntermediatePal + start * 6;
+ byte *pal = _currentPalette + start * 3;
+ byte *target = _palManipPalette + start * 3;
+ uint16 *between = (uint16 *)(_palManipIntermediatePal + start * 6);
- for (i = start; i < end; ++i) {
+ for (int i = start; i < end; ++i) {
*target++ = *new_pal++;
*target++ = *new_pal++;
*target++ = *new_pal++;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
- *(uint16 *)between = ((uint16) *pal++) << 8;
- between += 2;
+ *between++ = ((uint16) *pal++) << 8;
+ *between++ = ((uint16) *pal++) << 8;
+ *between++ = ((uint16) *pal++) << 8;
}
_palManipCounter = time;
@@ -501,26 +489,24 @@ void ScummEngine_v6::palManipulateInit(int resID, int start, int end, int time)
void ScummEngine::palManipulate() {
- byte *target, *pal, *between;
- int i, j;
-
if (!_palManipCounter || !_palManipPalette || !_palManipIntermediatePal)
return;
- target = _palManipPalette + _palManipStart * 3;
- pal = _currentPalette + _palManipStart * 3;
- between = _palManipIntermediatePal + _palManipStart * 6;
+ byte *target = _palManipPalette + _palManipStart * 3;
+ byte *pal = _currentPalette + _palManipStart * 3;
+ uint16 *between = (uint16 *)(_palManipIntermediatePal + _palManipStart * 6);
- for (i = _palManipStart; i < _palManipEnd; ++i) {
- j = (*((uint16 *)between) += ((*target++ << 8) - *((uint16 *)between)) / _palManipCounter);
+ for (int i = _palManipStart; i < _palManipEnd; ++i) {
+ int j;
+ j = (*between += ((*target++ << 8) - *between) / _palManipCounter);
*pal++ = j >> 8;
- between += 2;
- j = (*((uint16 *)between) += ((*target++ << 8) - *((uint16 *)between)) / _palManipCounter);
+ between++;
+ j = (*between += ((*target++ << 8) - *between) / _palManipCounter);
*pal++ = j >> 8;
- between += 2;
- j = (*((uint16 *)between) += ((*target++ << 8) - *((uint16 *)between)) / _palManipCounter);
+ between++;
+ j = (*between += ((*target++ << 8) - *between) / _palManipCounter);
*pal++ = j >> 8;
- between += 2;
+ between++;
}
setDirtyColors(_palManipStart, _palManipEnd);
_palManipCounter--;
diff --git a/engines/scumm/player_v2.h b/engines/scumm/player_v2.h
index f0e14cdde3..5b375fb1e5 100644
--- a/engines/scumm/player_v2.h
+++ b/engines/scumm/player_v2.h
@@ -242,8 +242,8 @@ protected:
Voice2 _cmsVoices[8];
MusicChip _cmsChips[2];
- char _tempo;
- char _tempoSum;
+ int8 _tempo;
+ int8 _tempoSum;
byte _looping;
byte _octaveMask;
int16 _midiDelay;
diff --git a/engines/scumm/player_v2cms.cpp b/engines/scumm/player_v2cms.cpp
index 97efb4dc63..d628293d7d 100644
--- a/engines/scumm/player_v2cms.cpp
+++ b/engines/scumm/player_v2cms.cpp
@@ -1428,6 +1428,10 @@ int Player_V2CMS::readBuffer(int16 *buffer, const int numSamples) {
}
_tempoSum += _tempo;
+ // FIXME: _tempoSum is declared as char; on some systems char is unsigned.
+ // E.g. on OS X. Hence the following check is always false.
+ // Moral of the story: Use uint8, int8 or any of the other types provided by
+ // ScummVM if you want to ensure signedness and number of available bits.
if (_tempoSum < 0) {
// this have to be called in the same rate as in the original (I think)
processMidiData(1);
diff --git a/engines/scumm/resource.cpp b/engines/scumm/resource.cpp
index 874b787615..88802a205f 100644
--- a/engines/scumm/resource.cpp
+++ b/engines/scumm/resource.cpp
@@ -787,8 +787,6 @@ void ResourceManager::setResourceCounter(int type, int idx, byte flag) {
#define SAFETY_AREA 2
byte *ResourceManager::createResource(int type, int idx, uint32 size) {
- byte *ptr;
-
debugC(DEBUG_RESOURCE, "_res->createResource(%s,%d,%d)", resTypeFromId(type), idx, size);
if (!validateResource("allocating", type, idx))
@@ -807,17 +805,17 @@ byte *ResourceManager::createResource(int type, int idx, uint32 size) {
expireResources(size);
- ptr = (byte *)calloc(size + sizeof(MemBlkHeader) + SAFETY_AREA, 1);
+ void *ptr = calloc(size + sizeof(MemBlkHeader) + SAFETY_AREA, 1);
if (ptr == NULL) {
error("createResource(%s,%d): Out of memory while allocating %d", resTypeFromId(type), idx, size);
}
_allocatedSize += size;
- address[type][idx] = ptr;
+ address[type][idx] = (byte *)ptr;
((MemBlkHeader *)ptr)->size = size;
setResourceCounter(type, idx, 1);
- return ptr + sizeof(MemBlkHeader); /* skip header */
+ return (byte *)ptr + sizeof(MemBlkHeader); /* skip header */
}
ResourceManager::ResourceManager(ScummEngine *vm) {
@@ -1374,7 +1372,7 @@ const byte *ResourceIterator::findNext(uint32 tag) {
const byte *ScummEngine::findResource(uint32 tag, const byte *searchin) {
uint32 curpos, totalsize, size;
- debugC(DEBUG_RESOURCE, "findResource(%s, %lx)", tag2str(tag), searchin);
+ debugC(DEBUG_RESOURCE, "findResource(%s, %p)", tag2str(tag), (const void *)searchin);
if (!searchin) {
if (_game.heversion >= 70) {
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index cef13341b5..d474a43b05 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -137,7 +137,7 @@ bool ScummEngine::saveState(Common::OutSaveFile *out, bool writeHeader) {
memcpy(hdr.name, _saveLoadName, sizeof(hdr.name));
saveSaveGameHeader(out, hdr);
}
-#if !defined(__DS__)
+#if !defined(__DS__) /* && !defined(__PLAYSTATION2__) */
Graphics::saveThumbnail(*out);
#endif
saveInfos(out);
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index c70c819b69..4d9447bee5 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -462,7 +462,7 @@ void ScummEngine::executeScript() {
vm.slot[_currentScript].didexec = true;
debugC(DEBUG_OPCODES, "Script %d, offset 0x%x: [%X] %s()",
vm.slot[_currentScript].number,
- _scriptPointer - _scriptOrgPointer,
+ (uint)(_scriptPointer - _scriptOrgPointer),
_opcode,
getOpcodeDesc(_opcode));
if (_hexdumpScripts == true) {
@@ -1367,17 +1367,6 @@ void ScummEngine::abortCutscene() {
VAR(VAR_OVERRIDE) = 1;
vm.cutScenePtr[idx] = 0;
-
- // HACK to fix issues with SMUSH and the way it does keyboard handling.
- // In particular, normally abortCutscene() is being called while no
- // scripts are active. But SMUSH runs from *inside* the script engine.
- // And it calls abortCutscene() if ESC is pressed... not good.
- // Proper fix might be to let SMUSH/INSANE run from outside the script
- // engine but that would require lots of changes and may actually have
- // negative effects, too. So we cheat here, to fix bug #751670.
- if (_game.version == 7)
- getScriptEntryPoint();
-
}
}
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index 00d01143d6..1ce38fd800 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -1750,7 +1750,7 @@ void ScummEngine_v5::o5_roomOps() {
while ((chr = fetchScriptByte()))
filename += chr;
- if (filename.hasPrefix("iq-") || filename.hasPrefix("IQ-") || filename.hasSuffix("-iq")) {
+ if (filename.hasPrefix("iq-") || filename.hasPrefix("IQ-") || filename.hasSuffix("-iq") || filename.hasSuffix("-IQ")) {
filename = _targetName + ".iq";
} else {
error("SO_SAVE_STRING: Unsupported filename %s", filename.c_str());
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index c23a64be5b..dcd60352c7 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -1396,6 +1396,7 @@ void ScummEngine_v6::o6_getVerbFromXY() {
void ScummEngine_v6::o6_beginOverride() {
beginOverride();
+ _skipVideo = 0;
}
void ScummEngine_v6::o6_endOverride() {
@@ -2457,7 +2458,7 @@ void ScummEngine_v7::o6_kernelSetFunctions() {
break;
case 6: {
// SMUSH movie playback
- if (args[1] == 0) {
+ if (args[1] == 0 && !_skipVideo) {
const char *videoname = (const char *)getStringAddressVar(VAR_VIDEONAME);
assert(videoname);
@@ -2474,7 +2475,7 @@ void ScummEngine_v7::o6_kernelSetFunctions() {
if (_game.id == GID_DIG) {
_disableFadeInEffect = true;
}
- } else if (_game.id == GID_FT) {
+ } else if (_game.id == GID_FT && !_skipVideo) {
const int insaneVarNum = ((_game.features & GF_DEMO) && (_game.platform == Common::kPlatformPC))
? 232 : 233;
diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h
index 8ab4e00caa..5bb0e097dc 100644
--- a/engines/scumm/scumm-md5.h
+++ b/engines/scumm/scumm-md5.h
@@ -1,5 +1,5 @@
/*
- This file was generated by the md5table tool on Fri May 15 10:19:51 2009
+ This file was generated by the md5table tool on Sat Jul 11 01:37:44 2009
DO NOT EDIT MANUALLY!
*/
@@ -20,7 +20,7 @@ static const MD5Table md5table[] = {
{ "035deab53b47bc43abc763560d0f8d4b", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
{ "037385a953789190298494d92b89b3d0", "catalog", "HE 72", "Demo", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "03d3b18ee3fd68114e2a687c871e38d5", "freddi4", "HE 99", "Mini Game", -1, Common::EN_USA, Common::kPlatformWindows },
- { "0425954a9db5c340861672892c3e678d", "samnmax", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
+ { "0425954a9db5c340861672892c3e678d", "samnmax", "CD", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "04401d747f1a2c1c4b388daff71ed378", "ft", "", "", 535405461, Common::DE_DEU, Common::kPlatformMacintosh },
{ "04687cdf7f975a89d2474929f7b80946", "indy3", "FM-TOWNS", "", 7552, Common::EN_ANY, Common::kPlatformFMTowns },
{ "0557df19f046a84c2fdc63507c6616cb", "farm", "HE 72", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
@@ -53,10 +53,10 @@ static const MD5Table md5table[] = {
{ "0e96ab45a4eb72acc1b46813976589fd", "activity", "", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "0e9b01430e31d9fcd94071d433bbc6bf", "loom", "No Adlib", "EGA", -1, Common::FR_FRA, Common::kPlatformAtariST },
{ "0f5935bd5e88ba6f09e558d64459746d", "thinker1", "", "Demo", 30919, Common::EN_USA, Common::kPlatformWindows },
- { "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", "", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
+ { "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", "CD", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
{ "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3", "No Adlib", "EGA", -1, Common::FR_FRA, Common::kPlatformAtariST },
{ "0f9d3317910ac7a9f449243118884ada", "puttzoo", "", "", 42070, Common::DE_DEU, Common::kPlatformWindows },
- { "0fb73eddfcf584c02ba097984df131ba", "samnmax", "", "CD", 9080, Common::DE_DEU, Common::kPlatformUnknown },
+ { "0fb73eddfcf584c02ba097984df131ba", "samnmax", "CD", "CD", 9080, Common::DE_DEU, Common::kPlatformUnknown },
{ "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", "", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
{ "100b4c8403ad6a83d4bf7dbf83e44dc4", "spyfox", "", "", -1, Common::FR_FRA, Common::kPlatformWindows },
{ "10d8e66cd11049ce64815ebb9fd76eb3", "spyozon", "", "", -1, Common::FR_FRA, Common::kPlatformUnknown },
@@ -74,20 +74,20 @@ static const MD5Table md5table[] = {
{ "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkey", "VGA", "VGA", 8357, Common::EN_ANY, Common::kPlatformPC },
{ "15f588e887e857e8c56fe6ade4956168", "atlantis", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformAmiga },
{ "16542a7342a918bfe4ba512007d36c47", "FreddisFunShop", "HE 99L", "", -1, Common::EN_USA, Common::kPlatformUnknown },
- { "166553538ff320c69edafeee29525419", "samnmax", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "166553538ff320c69edafeee29525419", "samnmax", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "16effd200aa6b8abe9c569c3e578814d", "freddi4", "HE 99", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
{ "179879b6e35c1ead0d93aab26db0951b", "fbear", "HE 70", "", 13381, Common::EN_ANY, Common::kPlatformWindows },
{ "17b5d5e6af4ae89d62631641d66d5a05", "indy3", "VGA", "VGA", -1, Common::IT_ITA, Common::kPlatformPC },
{ "17f7296f63c78642724f057fd8e736a7", "maniac", "NES", "extracted", -1, Common::EN_GRB, Common::kPlatformNES },
- { "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "", "Demo", -1, Common::FR_FRA, Common::kPlatformPC },
- { "182344899c2e2998fca0bebcd82aa81a", "atlantis", "", "CD", 12035, Common::EN_ANY, Common::kPlatformPC },
+ { "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "CD", "Demo", -1, Common::FR_FRA, Common::kPlatformPC },
+ { "182344899c2e2998fca0bebcd82aa81a", "atlantis", "CD", "CD", 12035, Common::EN_ANY, Common::kPlatformPC },
{ "183d7464902d40d00800e8ee1f04117c", "maniac", "V2", "V2", 1988, Common::DE_DEU, Common::kPlatformPC },
{ "1875b90fade138c9253a8e967007031a", "indy3", "VGA", "VGA", 6295, Common::EN_ANY, Common::kPlatformPC },
{ "187d315f6b5168f68680dfe8c3d76a3e", "loom", "EGA", "EGA", -1, Common::HB_ISR, Common::kPlatformPC },
{ "1900e501a52fbf55bde6e4196f6d2aa6", "zak", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformPC },
{ "19263586f749a560c1adf8b3393a9593", "socks", "HE 85", "", -1, Common::RU_RUS, Common::kPlatformWindows },
{ "19bf6938a94698296bcb0c99c31c91a7", "spyfox2", "", "Demo", -1, Common::EN_GRB, Common::kPlatformWindows },
- { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "1c792d28376d45e145cb916bca0400a2", "spyfox2", "", "Demo", -1, Common::NL_NLD, Common::kPlatformUnknown },
{ "1c7e7db2cfab1ad62746ab680a634204", "maniac", "NES", "extracted", -1, Common::FR_FRA, Common::kPlatformNES },
{ "1ca86e2cf9aaa2068738a1e5ba477e60", "zak", "FM-TOWNS", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
@@ -117,11 +117,11 @@ static const MD5Table md5table[] = {
{ "2723fea3dae0cb47768c424b145ae0e7", "tentacle", "", "Floppy", 7932, Common::EN_ANY, Common::kPlatformPC },
{ "27b2ef1653089fe5b897d9cc89ce784f", "balloon", "HE 80", "", -1, Common::RU_RUS, Common::kPlatformWindows },
{ "27b3a4224ad63d5b04627595c1c1a025", "zak", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformAmiga },
- { "28d24a33448fab6795850bc9f159a4a2", "atlantis", "", "Demo", 11170, Common::JA_JPN, Common::kPlatformFMTowns },
+ { "28d24a33448fab6795850bc9f159a4a2", "atlantis", "CD", "Demo", 11170, Common::JA_JPN, Common::kPlatformFMTowns },
{ "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", "EGA", "EGA", 5748, Common::EN_ANY, Common::kPlatformPC },
{ "28f07458f1b6c24e118a1ea056827701", "lost", "HE 99", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
{ "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformPC },
- { "2a41b53cf1a90b6e6f26c10cc6041084", "tentacle", "", "Demo", 2439158, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "2a41b53cf1a90b6e6f26c10cc6041084", "tentacle", "CD", "Demo", 2439158, Common::EN_ANY, Common::kPlatformMacintosh },
{ "2a446817ffcabfef8716e0c456ecaf81", "puttzoo", "", "Demo", -1, Common::DE_DEU, Common::kPlatformWindows },
{ "2a8658dbd13d84d1bce64a71a35995eb", "pajama2", "HE 99", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
{ "2c04aacffb8428f30ccf4f734fbe3adc", "activity", "", "", -1, Common::EN_ANY, Common::kPlatformPC },
@@ -130,7 +130,7 @@ static const MD5Table md5table[] = {
{ "2d388339d6050d8ccaa757b64633954e", "zak", "FM-TOWNS", "Demo", 7520, Common::EN_ANY, Common::kPlatformFMTowns },
{ "2d4536a56e01da4b02eb021e7770afa2", "zak", "FM-TOWNS", "", 7520, Common::EN_ANY, Common::kPlatformFMTowns },
{ "2d4acbdcfd8e374c9da8c2e7303a5cd0", "BluesBirthday", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
- { "2d9d46f23cb07bbc90b8ad464d3e4ff8", "atlantis", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "2d9d46f23cb07bbc90b8ad464d3e4ff8", "atlantis", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "2e85f7aa054930c692a5b1bed1dfc295", "football2002", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "2e8a1f76ea33bc5e04347646feee173d", "pajama3", "", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
{ "2fe369ad70f52a8cf7ad6077ee64f81a", "loom", "EGA", "EGA", -1, Common::DE_DEU, Common::kPlatformAmiga },
@@ -165,7 +165,7 @@ static const MD5Table md5table[] = {
{ "3a03dab514e4038df192d8a8de469788", "atlantis", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformAmiga },
{ "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3", "FM-TOWNS", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
{ "3a3e592b074f595489f7f11e150c398d", "puttzoo", "HE 99", "Updated", -1, Common::EN_USA, Common::kPlatformWindows },
- { "3a5d13675e9a23aedac0bac7730f0ac1", "samnmax", "", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
+ { "3a5d13675e9a23aedac0bac7730f0ac1", "samnmax", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
{ "3a5ec90d556d4920976c5578bfbfaf79", "maniac", "NES", "extracted", -1, Common::DE_DEU, Common::kPlatformNES },
{ "3af61c5edf8e15b43dbafd285b2e9777", "puttcircus", "", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
{ "3b301b7892f883ce42ab4be6a274fea6", "samnmax", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformPC },
@@ -176,7 +176,7 @@ static const MD5Table md5table[] = {
{ "3df6ead57930488bc61e6e41901d0e97", "fbear", "HE 61", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "3e48298920fab9b7aec5a971e1bd1fab", "pajama3", "", "Demo", -1, Common::EN_GRB, Common::kPlatformWindows },
{ "40564ec47da48a67787d1f9bd043902a", "maniac", "V2 Demo", "V2 Demo", 1988, Common::EN_ANY, Common::kPlatformPC },
- { "4167a92a1d46baa4f4127d918d561f88", "tentacle", "", "CD", 7932, Common::EN_ANY, Common::kPlatformUnknown },
+ { "4167a92a1d46baa4f4127d918d561f88", "tentacle", "CD", "CD", 7932, Common::EN_ANY, Common::kPlatformUnknown },
{ "41958e24d03181ff9a381a66d048a581", "ft", "", "", -1, Common::PT_BRA, Common::kPlatformUnknown },
{ "425205754fa749f4f0b0dd9d09fa45fd", "football", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "430bc518017b6fac046f58bab6baad5d", "monkey2", "", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
@@ -195,13 +195,13 @@ static const MD5Table md5table[] = {
{ "4aa93cb30e485b728504ba3a693f12bf", "pajama", "HE 100", "", -1, Common::RU_RUS, Common::kPlatformWindows },
{ "4af4a6b248103c1fe9edef619677f540", "puttmoon", "", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "4ba37f835be11a59d969f90f272f575b", "water", "HE 80", "", -1, Common::EN_USA, Common::kPlatformUnknown },
- { "4ba7fb331296c283e73d8f5b2096e551", "samnmax", "", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
+ { "4ba7fb331296c283e73d8f5b2096e551", "samnmax", "CD", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
{ "4bedb49943df95a9c900a5a82ccbe9de", "ft", "", "", -1, Common::FR_FRA, Common::kPlatformUnknown },
{ "4bfa4a43684bcb437f7fb47f457a0aa5", "socks", "HE 99", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
{ "4c4820518e16e1a0e3616a3b021a04f3", "catalog", "HE CUP", "Preview", 10927456, Common::DE_DEU, Common::kPlatformUnknown },
{ "4cb9c3618f71668f8e4346c8f323fa82", "monkey2", "", "", 10700, Common::EN_ANY, Common::kPlatformMacintosh },
{ "4ce2d5b355964bbcb5e5ce73236ef868", "freddicove", "HE 100", "", -1, Common::RU_RUS, Common::kPlatformWindows },
- { "4d34042713958b971cb139fba4658586", "atlantis", "", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
+ { "4d34042713958b971cb139fba4658586", "atlantis", "CD", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
{ "4dbff3787aedcd96b0b325f2d92d7ad9", "maze", "HE 100", "Updated", -1, Common::EN_USA, Common::kPlatformUnknown },
{ "4dc780f1bc587a193ce8a97652791438", "loom", "EGA", "EGA", -1, Common::EN_ANY, Common::kPlatformAmiga },
{ "4e5867848ee61bc30d157e2c94eee9b4", "PuttTime", "HE 90", "Demo", 18394, Common::EN_USA, Common::kPlatformUnknown },
@@ -212,7 +212,7 @@ static const MD5Table md5table[] = {
{ "4f267a901719623de7dde83e47d5b474", "atlantis", "", "Floppy", -1, Common::DE_DEU, Common::kPlatformAmiga },
{ "4f580a021eee026f3b4589e17d130d78", "freddi4", "", "", -1, Common::UNK_LANG, Common::kPlatformUnknown },
{ "4fa6870d9bc8c313b65d54b1da5a1891", "pajama", "", "", -1, Common::NL_NLD, Common::kPlatformWindows },
- { "4fbbe9f64b8bc547503a379a301183ce", "tentacle", "", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
+ { "4fbbe9f64b8bc547503a379a301183ce", "tentacle", "CD", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
{ "4fe6a2e8df3c4536b278fdd2fbcb181e", "pajama3", "", "Mini Game", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "5057fb0e99e5aa29df1836329232f101", "freddi2", "HE 80", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
{ "507bb360688dc4180fdf0d7597352a69", "freddi", "HE 73", "", 26402, Common::SE_SWE, Common::kPlatformWindows },
@@ -289,9 +289,9 @@ static const MD5Table md5table[] = {
{ "6bf70eee5de3d24d2403e0dd3d267e8a", "spyfox", "", "", 49221, Common::UNK_LANG, Common::kPlatformWindows },
{ "6c2bff0e327f2962e809c2e1a82d7309", "monkey", "VGA", "VGA", -1, Common::EN_ANY, Common::kPlatformAmiga },
{ "6d1baa1065ac5f7b210be8ebe4235e49", "freddi", "HE 73", "", -1, Common::NL_NLD, Common::kPlatformMacintosh },
- { "6dead580b0ff14d5f7b33b4219f04159", "samnmax", "", "Demo", 16556335, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "6dead580b0ff14d5f7b33b4219f04159", "samnmax", "CD", "Demo", 16556335, Common::EN_ANY, Common::kPlatformMacintosh },
{ "6df20c50c1ab19799de9be7ae7716881", "fbear", "HE 61", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
- { "6e959d65358eedf9b68b81e304b97fa4", "tentacle", "", "CD", 7932, Common::DE_DEU, Common::kPlatformUnknown },
+ { "6e959d65358eedf9b68b81e304b97fa4", "tentacle", "CD", "CD", 7932, Common::DE_DEU, Common::kPlatformUnknown },
{ "6ea966b4d660c870b9ee790d1fbfc535", "monkey2", "", "", -1, Common::ES_ESP, Common::kPlatformAmiga },
{ "6f0be328c64d689bb606d22a389e1b0f", "loom", "No Adlib", "EGA", 5748, Common::EN_ANY, Common::kPlatformMacintosh },
{ "6f6ef668c608c7f534fea6e6d3878dde", "indy3", "EGA", "EGA", -1, Common::DE_DEU, Common::kPlatformPC },
@@ -332,7 +332,7 @@ static const MD5Table md5table[] = {
{ "7ddeaf52c8b9a50551ce0aa2ac811d07", "BluesABCTime", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "7e151c17adf624f1966c8fc5827c95e9", "puttputt", "HE 61", "", -1, Common::EN_ANY, Common::kPlatform3DO },
{ "7ea2da67ebabea4ac20cee9f4f9d2934", "airport", "", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
- { "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", "", "CD", -1, Common::FR_FRA, Common::kPlatformUnknown },
+ { "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformUnknown },
{ "7f45ddd6dbfbf8f80c0c0efea4c295bc", "maniac", "V1", "V1", 1972, Common::EN_ANY, Common::kPlatformPC },
{ "7f945525abcd48015adf1632637a44a1", "pajama", "", "Demo", -1, Common::FR_FRA, Common::kPlatformUnknown },
{ "7fc6cdb46b4c9d384c52327f4bca6416", "football", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
@@ -354,12 +354,12 @@ static const MD5Table md5table[] = {
{ "87df3e0074624040407764b7c5e710b9", "pajama", "", "Demo", 18354, Common::NL_NLD, Common::kPlatformWindows },
{ "87f6e8037b7cc996e13474b491a7a98e", "maniac", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformPC },
{ "8801fb4a1200b347f7a38523339526dd", "jungle", "", "", -1, Common::EN_ANY, Common::kPlatformWindows },
- { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
+ { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "CD", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
{ "898ce8eb1234a955ef75e87141902bb3", "freddi3", "", "", -1, Common::RU_RUS, Common::kPlatformWindows },
{ "898eaa21f79cf8d4f08db856244689ff", "pajama", "HE 99", "Updated", 66505, Common::EN_ANY, Common::kPlatformWindows },
{ "89cfc425566003ff74b7dc7b3e6fd469", "indy3", "EGA", "EGA", -1, Common::FR_FRA, Common::kPlatformPC },
{ "8a484262363a8e18be87112454f1456b", "pjgames", "", "", -1, Common::EN_USA, Common::kPlatformUnknown },
- { "8aa05d3cdb0e795436043f0546af2da2", "tentacle", "", "CD?", -1, Common::FR_FRA, Common::kPlatformUnknown },
+ { "8aa05d3cdb0e795436043f0546af2da2", "tentacle", "CD", "CD?", -1, Common::FR_FRA, Common::kPlatformUnknown },
{ "8aed489aba45d2b9fb8a04079c9c6e6a", "baseball", "HE CUP", "Preview", 12876596, Common::UNK_LANG, Common::kPlatformUnknown },
{ "8afb3cf9f95abf208358e984f0c9e738", "funpack", "", "", -1, Common::EN_ANY, Common::kPlatform3DO },
{ "8bdb0bf87b5e303dd35693afb9351215", "ft", "", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
@@ -367,7 +367,7 @@ static const MD5Table md5table[] = {
{ "8de13897f0121c79d29a2377159f9ad0", "socks", "HE 99", "Updated", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "8e3241ddd6c8dadf64305e8740d45e13", "balloon", "HE 100", "Updated", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "8e4ee4db46954bfe2912e259a16fad82", "monkey2", "", "", -1, Common::FR_FRA, Common::kPlatformPC },
- { "8e9417564f33790815445b2136efa667", "atlantis", "", "CD", 11915, Common::JA_JPN, Common::kPlatformMacintosh },
+ { "8e9417564f33790815445b2136efa667", "atlantis", "CD", "CD", 11915, Common::JA_JPN, Common::kPlatformMacintosh },
{ "8e9830a6f2702be5b22c8fa0a6aaf977", "freddi2", "HE 80", "", -1, Common::NL_NLD, Common::kPlatformMacintosh },
{ "8eb84cee9b429314c7f0bdcf560723eb", "monkey", "FM-TOWNS", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
{ "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", "HE 100", "Updated", -1, Common::EN_USA, Common::kPlatformUnknown },
@@ -395,7 +395,7 @@ static const MD5Table md5table[] = {
{ "98744fe66ff730e8c2b3b1f58803ab0b", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
{ "99128b6a5bdd9831d9682fb8b5cbf8d4", "BluesBirthday", "", "Yellow", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "99a3699f80b8f776efae592b44b9b991", "maniac", "V2", "V2", -1, Common::FR_FRA, Common::kPlatformPC },
- { "99b6f822b0b2612415407865438697d6", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
+ { "99b6f822b0b2612415407865438697d6", "atlantis", "CD", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
{ "9b7452b5cd6d3ffb2b2f5118010af84f", "ft", "Demo", "Demo", 116463537, Common::EN_ANY, Common::kPlatformMacintosh },
{ "9bc548e179cdb0767009401c094d0895", "maniac", "V2", "V2", -1, Common::DE_DEU, Common::kPlatformAmiga },
{ "9bd2a8f72613e715c199246dd511e10f", "atlantis", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformPC },
@@ -441,7 +441,7 @@ static const MD5Table md5table[] = {
{ "aaa587701cde7e74692c68c1024b85eb", "puttrace", "HE 99", "Demo", -1, Common::NL_NLD, Common::kPlatformUnknown },
{ "aaa7f36a253f277dd29dd1c051b0e4b9", "indy3", "No Adlib", "EGA", -1, Common::DE_DEU, Common::kPlatformAtariST },
{ "ab0693e9324cfcf498fdcbb12acf8bb4", "puttcircus", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
- { "ac1642b6edfb8521ca03760126f1c250", "tentacle", "", "Demo", -1, Common::DE_DEU, Common::kPlatformPC },
+ { "ac1642b6edfb8521ca03760126f1c250", "tentacle", "CD", "Demo", -1, Common::DE_DEU, Common::kPlatformPC },
{ "ac62d50e39492ee3738b4e83a5ac780f", "freddi2", "HE 80", "", -1, Common::NL_NLD, Common::kPlatformWindows },
{ "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "ae94f110a14ce71fc515d5b648827a8f", "tentacle", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformPC },
@@ -492,15 +492,15 @@ static const MD5Table md5table[] = {
{ "c6907d44f1166941d982864cd42cdc89", "pajama2", "HE 99", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
{ "c782fbbe74a987c3df8ac73cd3e289ed", "freddi", "HE 73", "", -1, Common::SE_SWE, Common::kPlatformMacintosh },
{ "c7890e038806df2bb5c0c8c6f1986ea2", "monkey", "VGA", "VGA", -1, Common::EN_ANY, Common::kPlatformPC },
- { "c7be10f775404fd9785a8b92a06d240c", "atlantis", "", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
+ { "c7be10f775404fd9785a8b92a06d240c", "atlantis", "CD", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
{ "c7c492a107ec520d7a7943037d0ca54a", "freddi", "HE 71", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
- { "c83079157ec765a28de445aec9768d60", "tentacle", "", "Demo", 7477, Common::EN_ANY, Common::kPlatformUnknown },
+ { "c83079157ec765a28de445aec9768d60", "tentacle", "CD", "Demo", 7477, Common::EN_ANY, Common::kPlatformUnknown },
{ "c8575e0b973ff1723aba6cd92c642db2", "puttrace", "HE 99", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
{ "c8aac5e3e701874e2fa4117896f9e1b1", "freddi", "HE 73", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "c8c5baadcbfc8d0372ed4335abace8a7", "pajama3", "", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
{ "c9717ee6059f1e43b768b464493d2fba", "fbpack", "", "", -1, Common::JA_JPN, Common::kPlatform3DO },
{ "cb1559e8405d17a5a278a6b5ad9338d1", "freddi3", "", "Demo", 22718, Common::EN_ANY, Common::kPlatformUnknown },
- { "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "", "CD", 282467632, Common::EN_ANY, Common::kPlatformMacintosh },
+ { "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "CD", "CD", 282467632, Common::EN_ANY, Common::kPlatformMacintosh },
{ "cc0c4111449054f1692bb3c0c5e04629", "BluesBirthday", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "cc8ba2b0df2f9c450bcf055fe2711979", "samnmax", "", "Demo", 7485, Common::DE_DEU, Common::kPlatformPC },
{ "cd424f143a141bc59226ad83a6e40f51", "maze", "HE 98.5", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
@@ -525,7 +525,7 @@ static const MD5Table md5table[] = {
{ "d220d154aafbfa12bd6f3ab1b2dae420", "puttzoo", "", "Demo", -1, Common::DE_DEU, Common::kPlatformMacintosh },
{ "d2cc8e31bce61e6cf2951249e10638fe", "basketball", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "d37c55388294b66e53e7ced3af88fa68", "freddi2", "HE 100", "Updated Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
- { "d43352a805d78b5f4936c6d7779bf575", "samnmax", "", "CD", -1, Common::RU_RUS, Common::kPlatformPC },
+ { "d43352a805d78b5f4936c6d7779bf575", "samnmax", "CD", "CD", -1, Common::RU_RUS, Common::kPlatformPC },
{ "d4aac997e2f4e15341f0bfbf905419bd", "PuttTime", "HE 99", "", 62698, Common::EN_GRB, Common::kPlatformWindows },
{ "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", "HE 99", "", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", "HE 71", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
@@ -543,8 +543,8 @@ static const MD5Table md5table[] = {
{ "d831f7c048574dd9d5d85db2a1468099", "maniac", "C64", "", -1, Common::EN_ANY, Common::kPlatformC64 },
{ "d8323015ecb8b10bf53474f6e6b0ae33", "dig", "", "", 16304, Common::UNK_LANG, Common::kPlatformUnknown },
{ "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", "NES", "", 262144, Common::EN_GRB, Common::kPlatformNES },
- { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "", "CD", 9080, Common::EN_ANY, Common::kPlatformUnknown },
- { "d9d0dd93d16ab4dec55cabc2b86bbd17", "samnmax", "", "Demo", 6478, Common::EN_ANY, Common::kPlatformPC },
+ { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "CD", "CD", 9080, Common::EN_ANY, Common::kPlatformUnknown },
+ { "d9d0dd93d16ab4dec55cabc2b86bbd17", "samnmax", "CD", "Demo", 6478, Common::EN_ANY, Common::kPlatformPC },
{ "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", "", "", 11135, Common::EN_ANY, Common::kPlatformFMTowns },
{ "da6269b18fcb08189c0aa9c95533cce2", "monkey", "CD", "CD", 8955, Common::IT_ITA, Common::kPlatformPC },
{ "da669b20271b85182e9c17a2a37ea02e", "monkey2", "", "", -1, Common::DE_DEU, Common::kPlatformAmiga },
@@ -584,7 +584,7 @@ static const MD5Table md5table[] = {
{ "ecc4340c2b801f5af8da4e00c0e432d9", "puttcircus", "", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
{ "ed2b074bc3166087a747acb2a3c6abb0", "freddi3", "HE 98.5", "Demo", -1, Common::DE_DEU, Common::kPlatformUnknown },
{ "ed361270102e355afe5236954216aba2", "lost", "", "", -1, Common::EN_USA, Common::kPlatformUnknown },
- { "ede149fda3edfc1dbd7347e0737cb583", "tentacle", "", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
+ { "ede149fda3edfc1dbd7347e0737cb583", "tentacle", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
{ "edfdb24a499d92c59f824c52987c0eec", "atlantis", "", "Floppy", -1, Common::FR_FRA, Common::kPlatformPC },
{ "ee41f6afbc5b26fa475754b56fe92048", "puttputt", "HE 61", "", 8032, Common::JA_JPN, Common::kPlatform3DO },
{ "ee785fe2569bc9965526e774f7ab86f1", "spyfox", "HE 99", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },
@@ -602,7 +602,7 @@ static const MD5Table md5table[] = {
{ "f3d55aea441e260e9e9c7d2a187097e0", "puttzoo", "", "Demo", 14337, Common::EN_ANY, Common::kPlatformWindows },
{ "f40a7f495f59188ca57a9d1d50301bb6", "puttputt", "Demo", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
{ "f5228b0cc1c19e6ea8268ba2eeb61f60", "freddi", "HE 73", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
- { "f73883f13b5a302749a5bad31d909780", "tentacle", "", "CD", -1, Common::DE_DEU, Common::kPlatformMacintosh },
+ { "f73883f13b5a302749a5bad31d909780", "tentacle", "CD", "CD", -1, Common::DE_DEU, Common::kPlatformMacintosh },
{ "f7711f9264d4d43c2a1518ec7c10a607", "pajama3", "", "", 79382, Common::EN_USA, Common::kPlatformUnknown },
{ "f79e60c17cca601e411f1f75e8ee9b5a", "spyfox2", "", "", 51286, Common::UNK_LANG, Common::kPlatformUnknown },
{ "f8be685007a8b425ba2a455da732f59f", "pajama2", "HE 99", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 6716fda3fd..b02c3b3346 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -443,7 +443,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
VAR_SCRIPT_CYCLE = 0xFF;
VAR_NUM_GLOBAL_OBJS = 0xFF;
- VAR_KEY_STATE = 0xFF;
// Use g_scumm from error() ONLY
g_scumm = this;
@@ -685,6 +684,7 @@ ScummEngine_v6::ScummEngine_v6(OSystem *syst, const DetectorResult &dr)
_curVerbSlot = 0;
_forcedWaitForMessage = false;
+ _skipVideo = false;
VAR_VIDEONAME = 0xFF;
VAR_RANDOM_NR = 0xFF;
@@ -786,6 +786,7 @@ ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const DetectorResult &dr)
VAR_PLATFORM = 0xFF;
VAR_PLATFORM_VERSION = 0xFF;
VAR_CURRENT_CHARSET = 0xFF;
+ VAR_KEY_STATE = 0xFF;
VAR_COLOR_DEPTH = 0xFF;
}
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index b74104ea3c..143051c162 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -28,6 +28,7 @@
#include "engines/engine.h"
#include "common/endian.h"
+#include "common/events.h"
#include "common/file.h"
#include "common/savefile.h"
#include "common/keyboard.h"
@@ -128,7 +129,7 @@ enum GameFeatures {
};
/* SCUMM Debug Channels */
-void debugC(int level, const char *s, ...);
+void debugC(int level, const char *s, ...) GCC_PRINTF(2, 3);
enum {
DEBUG_GENERAL = 1 << 0, // General debug
@@ -498,6 +499,8 @@ protected:
public:
void parseEvents(); // Used by IMuseDigital::startSound
protected:
+ virtual void parseEvent(Common::Event event);
+
void waitForTimer(int msec_delay);
virtual void processInput();
virtual void processKeyboard(Common::KeyState lastKeyHit);
@@ -528,7 +531,7 @@ protected:
void versionDialog();
void scummMenuDialog();
- char displayMessage(const char *altButton, const char *message, ...);
+ char displayMessage(const char *altButton, const char *message, ...) GCC_PRINTF(3, 4);
byte _fastMode;
@@ -543,15 +546,13 @@ public:
// VAR is a wrapper around scummVar, which attempts to include additional
// useful information should an illegal var access be detected.
#define VAR(x) scummVar(x, #x, __FILE__, __LINE__)
- int32& scummVar(byte var, const char *varName, const char *file, int line)
- {
+ int32& scummVar(byte var, const char *varName, const char *file, int line) {
if (var == 0xFF) {
error("Illegal access to variable %s in file %s, line %d", varName, file, line);
}
return _scummVars[var];
}
- int32 scummVar(byte var, const char *varName, const char *file, int line) const
- {
+ int32 scummVar(byte var, const char *varName, const char *file, int line) const {
if (var == 0xFF) {
error("Illegal access to variable %s in file %s, line %d", varName, file, line);
}
@@ -1378,8 +1379,6 @@ public:
byte VAR_SCRIPT_CYCLE; // Used in runScript()/runObjectScript()
byte VAR_NUM_SCRIPT_CYCLES; // Used in runAllScripts()
- byte VAR_KEY_STATE; // Used in parseEvents()
-
// Exists both in V7 and in V72HE:
byte VAR_NUM_GLOBAL_OBJS;
};
diff --git a/engines/scumm/scumm_v6.h b/engines/scumm/scumm_v6.h
index d4768a7e92..eb55b83596 100644
--- a/engines/scumm/scumm_v6.h
+++ b/engines/scumm/scumm_v6.h
@@ -93,6 +93,7 @@ protected:
int _curVerbSlot;
bool _forcedWaitForMessage;
+ bool _skipVideo;
public:
ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
diff --git a/engines/scumm/scumm_v7.h b/engines/scumm/scumm_v7.h
index fdc1d6de9c..fcadadb04d 100644
--- a/engines/scumm/scumm_v7.h
+++ b/engines/scumm/scumm_v7.h
@@ -103,6 +103,7 @@ protected:
virtual void scummLoop_handleSound();
virtual void scummLoop_handleDrawing();
+ virtual void processInput();
virtual void processKeyboard(Common::KeyState lastKeyHit);
virtual void setupScumm();
diff --git a/engines/scumm/smush/imuse_channel.cpp b/engines/scumm/smush/imuse_channel.cpp
index e39397eded..c1167a57c1 100644
--- a/engines/scumm/smush/imuse_channel.cpp
+++ b/engines/scumm/smush/imuse_channel.cpp
@@ -158,7 +158,7 @@ void ImuseChannel::decode() {
_sbufferSize -= remaining_size;
} else {
debugC(DEBUG_SMUSH, "impossible ! : %p, %d, %d, %p(%d), %p(%d, %d)",
- this, _dataSize, _inData, _tbuffer, _tbufferSize, _sbuffer, _sbufferSize, _srbufferSize);
+ (const void *)this, _dataSize, _inData, _tbuffer, _tbufferSize, _sbuffer, _sbufferSize, _srbufferSize);
byte *old = _tbuffer;
int new_size = remaining_size + _tbufferSize;
_tbuffer = new byte[new_size];
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index 970b3970b6..2a681ffd62 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -1690,7 +1690,7 @@ static void convertADResource(ResourceManager *res, const GameSettings& game, in
} else {
dw = 500000 * 256 / ticks;
}
- debugC(DEBUG_SOUND, " ticks = %d, speed = %ld", ticks, dw);
+ debugC(DEBUG_SOUND, " ticks = %d, speed = %d", ticks, dw);
// Write a tempo change Meta event
memcpy(ptr, "\x00\xFF\x51\x03", 4); ptr += 4;
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index d40bbb9aaa..f00f4ff33b 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -1415,6 +1415,9 @@ void ScummEngine_v7::loadLanguageBundle() {
}
void ScummEngine_v7::playSpeech(const byte *ptr) {
+ if (_game.id == GID_DIG && (ConfMan.getBool("speech_mute") || VAR(VAR_VOICE_MODE) == 2))
+ return;
+
if ((_game.id == GID_DIG || _game.id == GID_CMI) && ptr[0]) {
char pointer[20];
strcpy(pointer, (const char *)ptr);
diff --git a/engines/scumm/verbs.cpp b/engines/scumm/verbs.cpp
index e62d9406d3..81b28ce563 100644
--- a/engines/scumm/verbs.cpp
+++ b/engines/scumm/verbs.cpp
@@ -567,7 +567,7 @@ void ScummEngine::checkExecVerbs() {
}
if (_game.platform == Common::kPlatformFMTowns && _game.version == 3) {
- // HACK: In the FM-Towns games Indy3, Loom and Zak the most significant bit is set for special keys
+ // HACK: In the FM-TOWNS games Indy3, Loom and Zak the most significant bit is set for special keys
// like F5 (=0x8005) or joystick buttons (mask 0xFE00, e.g. SELECT=0xFE40 for the save/load menu).
// Hence the distinction with (_mouseAndKeyboardStat < MBS_MAX_KEY) between mouse- and key-events is not applicable
// to this games, so we have to remap the special keys here.