Behold, the new SCUMM detector finally has arrived. Unified detection & engine instantiation, reduced code duplication, more powerful detection in case MD5 is not known / can't be computed, and many other nifty improvements.

svn-id: r22110
This commit is contained in:
Max Horn 2006-04-23 17:33:16 +00:00
parent d11f5724f9
commit 0d67640a58
16 changed files with 688 additions and 1391 deletions

1
README
View file

@ -1224,7 +1224,6 @@ An example config file looks as follows:
The following keywords are recognized: The following keywords are recognized:
basename string
path string The path to where a game's data files are path string The path to where a game's data files are
read_only bool If true, ScummVM will never try to overwrite read_only bool If true, ScummVM will never try to overwrite
the configuration file. the configuration file.

View file

@ -93,8 +93,8 @@ static const byte default_v6_cursor[] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x0F,0x00, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x0F,0x00, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
}; };
ScummEngine_v5::ScummEngine_v5(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr)
: ScummEngine(syst, gs, md5sum, subst) { : ScummEngine(syst, dr) {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
memcpy(_cursorImages[i], default_cursor_images[i], 32); memcpy(_cursorImages[i], default_cursor_images[i], 32);

View file

@ -83,7 +83,7 @@ ScummDebugger::ScummDebugger(ScummEngine *s)
DVar_Register("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables); DVar_Register("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables);
// DVar_Register("scumm_gamename", &_vm->_targetName, DVAR_STRING, 0); // DVar_Register("scumm_gamename", &_vm->_targetName, DVAR_STRING, 0);
DVar_Register("scumm_exename", &_vm->_baseName, DVAR_STRING, 0); // DVar_Register("scumm_exename", &_vm->_baseName, DVAR_STRING, 0);
DVar_Register("scumm_gameid", &_vm->_game.id, DVAR_BYTE, 0); DVar_Register("scumm_gameid", &_vm->_game.id, DVAR_BYTE, 0);
// Register commands // Register commands

View file

@ -51,7 +51,7 @@ protected:
Common::File _hFileTable[17]; Common::File _hFileTable[17];
public: public:
ScummEngine_v60he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) : ScummEngine_v6(syst, gs, md5sum, subst) {} ScummEngine_v60he(OSystem *syst, const DetectorResult &dr) : ScummEngine_v6(syst, dr) {}
virtual void scummInit(); virtual void scummInit();
@ -116,7 +116,7 @@ protected:
bool _skipProcessActors; bool _skipProcessActors;
public: public:
ScummEngine_v70he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v70he(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v70he(); ~ScummEngine_v70he();
Wiz *_wiz; Wiz *_wiz;
@ -181,7 +181,7 @@ protected:
class ScummEngine_v71he : public ScummEngine_v70he { class ScummEngine_v71he : public ScummEngine_v70he {
public: public:
ScummEngine_v71he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v71he(OSystem *syst, const DetectorResult &dr);
protected: protected:
virtual void saveOrLoad(Serializer *s); virtual void saveOrLoad(Serializer *s);
@ -236,7 +236,7 @@ protected:
WizParameters _wizParams; WizParameters _wizParams;
public: public:
ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v72he(OSystem *syst, const DetectorResult &dr);
virtual void scummInit(); virtual void scummInit();
@ -347,7 +347,7 @@ protected:
int32 _heSndResId, _curSndId, _sndPtrOffs, _sndTmrOffs; int32 _heSndResId, _curSndId, _sndPtrOffs, _sndTmrOffs;
public: public:
ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v80he(OSystem *syst, const DetectorResult &dr);
protected: protected:
virtual void setupOpcodes(); virtual void setupOpcodes();
@ -420,7 +420,7 @@ protected:
int32 _curSpriteGroupId; int32 _curSpriteGroupId;
public: public:
ScummEngine_v90he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v90he(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v90he(); ~ScummEngine_v90he();
virtual void scummInit(); virtual void scummInit();
@ -517,7 +517,7 @@ protected:
class ScummEngine_v99he : public ScummEngine_v90he { class ScummEngine_v99he : public ScummEngine_v90he {
public: public:
ScummEngine_v99he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) : ScummEngine_v90he(syst, gs, md5sum, subst) {} ScummEngine_v99he(OSystem *syst, const DetectorResult &dr) : ScummEngine_v90he(syst, dr) {}
virtual void scummInit(); virtual void scummInit();
@ -548,7 +548,7 @@ protected:
const OpcodeEntryV100he *_opcodesV100he; const OpcodeEntryV100he *_opcodesV100he;
public: public:
ScummEngine_v100he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) : ScummEngine_v99he(syst, gs, md5sum, subst) {} ScummEngine_v100he(OSystem *syst, const DetectorResult &dr) : ScummEngine_v99he(syst, dr) {}
protected: protected:
virtual void setupOpcodes(); virtual void setupOpcodes();

View file

@ -42,7 +42,6 @@ namespace Scumm {
ResExtractor::ResExtractor(ScummEngine_v70he *scumm) ResExtractor::ResExtractor(ScummEngine_v70he *scumm)
: _vm(scumm) { : _vm(scumm) {
_fileName[0] = 0;
memset(_cursorCache, 0, sizeof(_cursorCache)); memset(_cursorCache, 0, sizeof(_cursorCache));
} }
@ -159,21 +158,15 @@ int Win32ResExtractor::extractResource_(const char *resType, char *resName, byte
fi.memory = NULL; fi.memory = NULL;
fi.file = new Common::File; fi.file = new Common::File;
if (!_fileName[0]) { // We are running for the first time if (_fileName.empty()) { // We are running for the first time
snprintf(_fileName, 256, "%s.he3", _vm->getBaseName()); _fileName = _vm->generateFilename(3);
if (_vm->_substResFileName.almostGameID != 0) {
char buf1[128];
_vm->generateSubstResFileName(_fileName, buf1, sizeof(buf1));
strcpy(_fileName, buf1);
}
} }
/* get file size */ /* get file size */
fi.file->open(_fileName); fi.file->open(_fileName);
if (!fi.file->isOpen()) { if (!fi.file->isOpen()) {
error("Cannot open file %s", _fileName); error("Cannot open file %s", _fileName.c_str());
} }
fi.total_size = fi.file->size(); fi.total_size = fi.file->size();
@ -1288,38 +1281,36 @@ int MacResExtractor::extractResource(int id, byte **buf) {
Common::File in; Common::File in;
int size; int size;
if (!_fileName[0]) // We are running for the first time if (_fileName.empty()) { // We are running for the first time
if (_vm->_substResFileName.almostGameID != 0) { _fileName = _vm->generateFilename(3);
char buf1[128];
snprintf(buf1, 128, "%s.he3", _vm->getBaseName()); // Some programs write it as .bin. Try that too
_vm->generateSubstResFileName(buf1, _fileName, sizeof(buf1)); if (!in.exists(_fileName)) {
Common::String tmp(_fileName);
_fileName += ".bin";
// Some programs write it as .bin. Try that too
if (!in.exists(_fileName)) { if (!in.exists(_fileName)) {
strcpy(buf1, _fileName); // And finally check if we have dumped resource fork
snprintf(_fileName, 128, "%s.bin", buf1); _fileName = tmp;
_fileName += ".bin";
if (!in.exists(_fileName)) { if (!in.exists(_fileName)) {
// And finally check if we have dumped resource fork error("Cannot open file any of files '%s', '%s.bin', '%s.rsrc",
snprintf(_fileName, 128, "%s.rsrc", buf1); tmp.c_str(), tmp.c_str(), tmp.c_str());
if (!in.exists(_fileName)) {
error("Cannot open file any of files '%s', '%s.bin', '%s.rsrc",
buf1, buf1, buf1);
}
} }
} }
} }
}
in.open(_fileName); in.open(_fileName);
if (!in.isOpen()) { if (!in.isOpen()) {
error("Cannot open file %s", _fileName); error("Cannot open file %s", _fileName.c_str());
} }
// we haven't calculated it // we haven't calculated it
if (_resOffset == -1) { if (_resOffset == -1) {
if (!init(in)) if (!init(in))
error("Resource fork is missing in file '%s'", _fileName); error("Resource fork is missing in file '%s'", _fileName.c_str());
in.close(); in.close();
in.open(_fileName); in.open(_fileName);
} }

View file

@ -150,7 +150,7 @@ public:
ResExtractor::CachedCursor *getCachedCursorSlot(); ResExtractor::CachedCursor *getCachedCursorSlot();
bool _arg_raw; bool _arg_raw;
char _fileName[256]; Common::String _fileName;
CachedCursor _cursorCache[MAX_CACHED_CURSORS]; CachedCursor _cursorCache[MAX_CACHED_CURSORS];
typedef Common::MemoryReadStream MemoryReadStream; typedef Common::MemoryReadStream MemoryReadStream;

View file

@ -161,15 +161,9 @@ void Sound::setOverrideFreq(int freq) {
void Sound::setupHEMusicFile() { void Sound::setupHEMusicFile() {
int i, total_size; int i, total_size;
char buf[32], buf1[128];
Common::File musicFile; Common::File musicFile;
Common::String buf(_vm->generateFilename(4));
sprintf(buf, "%s.he4", _vm->getBaseName());
if (_vm->_substResFileName.almostGameID != 0) {
_vm->generateSubstResFileName(buf, buf1, sizeof(buf1));
strcpy(buf, buf1);
}
if (musicFile.open(buf) == true) { if (musicFile.open(buf) == true) {
musicFile.seek(4, SEEK_SET); musicFile.seek(4, SEEK_SET);
total_size = musicFile.readUint32BE(); total_size = musicFile.readUint32BE();
@ -360,17 +354,11 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {
if (soundID > _vm->_numSounds) { if (soundID > _vm->_numSounds) {
int music_offs; int music_offs;
char buf[32], buf1[128];
Common::File musicFile; Common::File musicFile;
Common::String buf(_vm->generateFilename(4));
sprintf(buf, "%s.he4", _vm->getBaseName());
if (_vm->_substResFileName.almostGameID != 0) {
_vm->generateSubstResFileName(buf, buf1, sizeof(buf1));
strcpy(buf, buf1);
}
if (musicFile.open(buf) == false) { if (musicFile.open(buf) == false) {
warning("playHESound: Can't open music file %s", buf); warning("playHESound: Can't open music file %s", buf.c_str());
return; return;
} }
if (!getHEMusicDetails(soundID, music_offs, size)) { if (!getHEMusicDetails(soundID, music_offs, size)) {

View file

@ -50,7 +50,7 @@ protected:
byte _cursorHotspots[2 * 4]; byte _cursorHotspots[2 * 4];
public: public:
ScummEngine_v5(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v5(OSystem *syst, const DetectorResult &dr);
protected: protected:
virtual void setupOpcodes(); virtual void setupOpcodes();
@ -193,7 +193,7 @@ protected:
*/ */
class ScummEngine_v4 : public ScummEngine_v5 { class ScummEngine_v4 : public ScummEngine_v5 {
public: public:
ScummEngine_v4(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v4(OSystem *syst, const DetectorResult &dr);
virtual void scummInit(); virtual void scummInit();
@ -212,7 +212,7 @@ protected:
*/ */
class ScummEngine_v3 : public ScummEngine_v4 { class ScummEngine_v3 : public ScummEngine_v4 {
public: public:
ScummEngine_v3(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v3(OSystem *syst, const DetectorResult &dr);
protected: protected:
virtual void readRoomsOffsets(); virtual void readRoomsOffsets();
@ -224,7 +224,7 @@ protected:
*/ */
class ScummEngine_v3old : public ScummEngine_v3 { class ScummEngine_v3old : public ScummEngine_v3 {
public: public:
ScummEngine_v3old(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v3old(OSystem *syst, const DetectorResult &dr);
protected: protected:
virtual void readResTypeList(int id, const char *name); virtual void readResTypeList(int id, const char *name);
@ -257,7 +257,7 @@ protected:
int8 _mouseOverBoxV2; int8 _mouseOverBoxV2;
public: public:
ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v2(OSystem *syst, const DetectorResult &dr);
virtual void scummInit(); virtual void scummInit();
@ -403,7 +403,7 @@ protected:
int _currentMode; int _currentMode;
public: public:
ScummEngine_c64(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_c64(OSystem *syst, const DetectorResult &dr);
virtual void scummInit(); virtual void scummInit();
@ -555,7 +555,7 @@ protected:
public: public:
ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
virtual void scummInit(); virtual void scummInit();
@ -784,7 +784,7 @@ protected:
#ifndef DISABLE_SCUMM_7_8 #ifndef DISABLE_SCUMM_7_8
class ScummEngine_v7 : public ScummEngine_v6 { class ScummEngine_v7 : public ScummEngine_v6 {
public: public:
ScummEngine_v7(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v7(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v7(); ~ScummEngine_v7();
struct LangIndexNode { struct LangIndexNode {
@ -865,7 +865,7 @@ protected:
ObjectNameId *_objectIDMap; ObjectNameId *_objectIDMap;
public: public:
ScummEngine_v8(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine_v8(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v8(); ~ScummEngine_v8();
protected: protected:

File diff suppressed because it is too large Load diff

View file

@ -42,22 +42,37 @@ struct GameSettings {
}; };
enum GenMethods { enum FilenameGenMethod {
kGenMac, kGenDiskNum,
kGenMacNoParens, kGenRoomNum,
kGenPC, kGenHEMac,
kGenAsIs kGenHEMacNoParens,
kGenHEPC,
kGenUnchanged
}; };
struct SubstResFileNames { struct FilenamePattern {
const char *almostGameID; const char *pattern;
const char *expandedName; FilenameGenMethod genMethod;
GenMethods genMethod;
}; };
struct GameFilenamePattern {
const char *gameid;
const char *pattern;
FilenameGenMethod genMethod;
Common::Language language;
Common::Platform platform;
const char *variant;
};
bool applySubstResFileName(const SubstResFileNames &subst, const char *filename, char *buf, int bufsize); struct DetectorResult {
int findSubstResFileName(SubstResFileNames &subst, const char *filename, int index); FilenamePattern fp;
GameSettings game;
Common::Language language;
Common::String md5;
uint8 md5sum[16];
const char *extra;
};
} // End of namespace Scumm } // End of namespace Scumm

View file

@ -65,8 +65,6 @@ static bool checkTryMedia(BaseScummFile *handle);
/* Open a room */ /* Open a room */
void ScummEngine::openRoom(const int room) { void ScummEngine::openRoom(const int room) {
bool result; bool result;
char buf[128];
char buf2[128] = "";
byte encByte = 0; byte encByte = 0;
debugC(DEBUG_GENERAL, "openRoom(%d)", room); debugC(DEBUG_GENERAL, "openRoom(%d)", room);
@ -90,57 +88,19 @@ void ScummEngine::openRoom(const int room) {
const int diskNumber = room ? res.roomno[rtRoom][room] : 0; const int diskNumber = room ? res.roomno[rtRoom][room] : 0;
const int room_offs = room ? res.roomoffs[rtRoom][room] : 0; const int room_offs = room ? res.roomoffs[rtRoom][room] : 0;
// FIXME: Since room_offs is const, clearly the following loop either
// is never entered, or loops forever (if it wasn't for the return/error
// statements in it, that is). -> This should be cleaned up!
while (room_offs != -1) { while (room_offs != -1) {
if (room_offs != 0 && room != 0 && _game.heversion < 98) { if (room_offs != 0 && room != 0 && _game.heversion < 98) {
_fileOffset = res.roomoffs[rtRoom][room]; _fileOffset = res.roomoffs[rtRoom][room];
return; return;
} }
/* Either xxx.lfl or monkey.xxx file name */
if (_game.version <= 3) {
sprintf(buf, "%.2d.lfl", room);
// Maniac Mansion demo has .man instead of .lfl
if (_game.id == GID_MANIAC)
sprintf(buf2, "%.2d.man", room);
} else if (_game.version == 4) {
if (room == 0 || room >= 900) {
sprintf(buf, "%.3d.lfl", room);
} else {
sprintf(buf, "disk%.2d.lec", diskNumber);
}
} else if (_game.heversion >= 98) {
int disk = 0;
if (_heV7DiskOffsets)
disk = _heV7DiskOffsets[room];
switch(disk) {
case 2:
sprintf(buf, "%s.(b)", _baseName.c_str());
break;
case 1:
sprintf(buf, "%s.(a)", _baseName.c_str());
break;
default:
sprintf(buf, "%s.he0", _baseName.c_str());
}
} else if (_game.heversion >= 70) {
sprintf(buf, "%s.he%d", _baseName.c_str(), room == 0 ? 0 : 1);
} else if (_game.heversion >= 60) {
sprintf(buf, "%s.he%d", _baseName.c_str(), diskNumber);
} else if (_game.version >= 7) {
sprintf(buf, "%s.la%d", _baseName.c_str(), diskNumber);
// Used by PC version of Full Throttle demo
if (_game.id == GID_FT && (_game.features & GF_DEMO) && _game.platform == Common::kPlatformPC)
sprintf(buf2, "%s.%.3d", _baseName.c_str(), diskNumber);
} else {
sprintf(buf, "%s.%.3d", _baseName.c_str(), diskNumber);
if (_game.id == GID_SAMNMAX)
sprintf(buf2, "%s.sm%d", _baseName.c_str(), diskNumber);
}
Common::String filename(generateFilename(room));
// Determine the encryption, if any.
if (_game.features & GF_USE_KEY) { if (_game.features & GF_USE_KEY) {
if (_game.version <= 3) if (_game.version <= 3)
encByte = 0xFF; encByte = 0xFF;
@ -154,26 +114,8 @@ void ScummEngine::openRoom(const int room) {
if (room > 0 && (_game.version == 8)) if (room > 0 && (_game.version == 8))
VAR(VAR_CURRENTDISK) = diskNumber; VAR(VAR_CURRENTDISK) = diskNumber;
// If we have substitute // Try to open the file
if (_substResFileName.almostGameID != 0 && !(_game.platform == Common::kPlatformNES || _game.platform == Common::kPlatformC64)) { result = openResourceFile(filename.c_str(), encByte);
char tmpBuf[128];
generateSubstResFileName(buf, tmpBuf, sizeof(tmpBuf));
strcpy(buf, tmpBuf);
if (buf2[0]) {
generateSubstResFileName(buf2, tmpBuf, sizeof(tmpBuf));
strcpy(buf2, tmpBuf);
}
}
// Try to open the file with name 'buf'. If that fails, try buf2 (if
// specified).
result = openResourceFile(buf, encByte);
if (!result && buf2[0]) {
result = openResourceFile(buf2, encByte);
// We have .man files so set demo mode
if (_game.id == GID_MANIAC)
_game.features |= GF_DEMO;
}
if (result) { if (result) {
if (room == 0) if (room == 0)
@ -185,14 +127,15 @@ void ScummEngine::openRoom(const int room) {
if (_fileOffset != 8) if (_fileOffset != 8)
return; return;
error("Room %d not in %s", room, buf); error("Room %d not in %s", room, filename.c_str());
return; return;
} }
askForDisk(buf, diskNumber); askForDisk(filename.c_str(), diskNumber);
} }
do { do {
sprintf(buf, "%.3d.lfl", room); char buf[16];
snprintf(buf, sizeof(buf), "%.3d.lfl", room);
encByte = 0; encByte = 0;
if (openResourceFile(buf, encByte)) if (openResourceFile(buf, encByte))
break; break;
@ -246,39 +189,11 @@ bool ScummEngine::openFile(BaseScummFile &file, const char *filename, bool resou
bool result = false; bool result = false;
if (!_containerFile.empty()) { if (!_containerFile.empty()) {
char name[128];
file.close(); file.close();
file.open(_containerFile); file.open(_containerFile);
assert(file.isOpen()); assert(file.isOpen());
strncpy(name, filename, 128); result = file.openSubFile(filename);
// Some Mac demos (i.e. DOTT) have bundled file names different
// from target name. dottdemo.000 vs tentacle.000. So we should
// substitute those names too
if (resourceFile == true) {
if (_substResFileNameBundle.almostGameID == 0) {
int substLastIndex = 0;
do {
if (file.openSubFile(name))
break;
substLastIndex = findSubstResFileName(_substResFileNameBundle, filename, substLastIndex);
applySubstResFileName(_substResFileNameBundle, filename, name, sizeof(name));
} while (_substResFileNameBundle.almostGameID != 0);
if (_substResFileNameBundle.almostGameID != 0) {
debug(5, "Generated substitute in Mac bundle: [%s -> %s]", filename, _substResFileNameBundle.almostGameID);
}
}
if (_substResFileNameBundle.almostGameID != 0)
applySubstResFileName(_substResFileNameBundle, filename, name, sizeof(name));
}
result = file.openSubFile(name);
} }
if (!result) { if (!result) {

View file

@ -1,5 +1,5 @@
/* /*
This file was generated by the md5table tool on Sun Apr 23 13:24:24 2006 This file was generated by the md5table tool on Sun Apr 23 13:52:04 2006
DO NOT EDIT MANUALLY! DO NOT EDIT MANUALLY!
*/ */
@ -36,7 +36,7 @@ static const MD5Table md5table[] = {
{ "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", "HE 60", "", Common::RU_RUS, Common::kPlatformPC }, { "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", "HE 60", "", Common::RU_RUS, Common::kPlatformPC },
{ "0c45eb4baff0c12c3d9dfa889c8070ab", "pajama3", "", "Demo", Common::DE_DEU, Common::kPlatformUnknown }, { "0c45eb4baff0c12c3d9dfa889c8070ab", "pajama3", "", "Demo", Common::DE_DEU, Common::kPlatformUnknown },
{ "0cccfa5223099a60e76cfcca57a1a141", "freddi3", "", "", Common::NL_NLD, Common::kPlatformWindows }, { "0cccfa5223099a60e76cfcca57a1a141", "freddi3", "", "", Common::NL_NLD, Common::kPlatformWindows },
{ "0d1b69471605201ef2fa9cec1f5f02d2", "maniac", "", "V2", Common::ES_ESP, Common::kPlatformPC }, { "0d1b69471605201ef2fa9cec1f5f02d2", "maniac", "V2", "V2", Common::ES_ESP, Common::kPlatformPC },
{ "0e4c5d54a0ad4b26132e78b5ea76642a", "samnmax", "", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "0e4c5d54a0ad4b26132e78b5ea76642a", "samnmax", "", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "0e9b01430e31d9fcd94071d433bbc6bf", "loom", "No Adlib", "EGA", Common::FR_FRA, Common::kPlatformAtariST }, { "0e9b01430e31d9fcd94071d433bbc6bf", "loom", "No Adlib", "EGA", Common::FR_FRA, Common::kPlatformAtariST },
{ "0f5935bd5e88ba6f09e558d64459746d", "thinker1", "", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "0f5935bd5e88ba6f09e558d64459746d", "thinker1", "", "Demo", Common::EN_ANY, Common::kPlatformWindows },
@ -44,14 +44,14 @@ static const MD5Table md5table[] = {
{ "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3", "No Adlib", "EGA", Common::FR_FRA, Common::kPlatformAtariST }, { "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3", "No Adlib", "EGA", Common::FR_FRA, Common::kPlatformAtariST },
{ "0fb73eddfcf584c02ba097984df131ba", "samnmax", "", "CD", Common::DE_DEU, Common::kPlatformUnknown }, { "0fb73eddfcf584c02ba097984df131ba", "samnmax", "", "CD", Common::DE_DEU, Common::kPlatformUnknown },
{ "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", "", "", Common::UNK_LANG, Common::kPlatformWindows }, { "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", "", "", Common::UNK_LANG, Common::kPlatformWindows },
{ "114acdc2659a273c220f86ee9edb24c1", "maniac", "", "V2", Common::FR_FRA, Common::kPlatformPC }, { "114acdc2659a273c220f86ee9edb24c1", "maniac", "V2", "V2", Common::FR_FRA, Common::kPlatformPC },
{ "11ddf1fde76e3156eb3a38da213f484e", "monkey2", "", "", Common::IT_ITA, Common::kPlatformAmiga }, { "11ddf1fde76e3156eb3a38da213f484e", "monkey2", "", "", Common::IT_ITA, Common::kPlatformAmiga },
{ "11e6e244078ff09b0f3832e35420e0a7", "catalog", "", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "11e6e244078ff09b0f3832e35420e0a7", "catalog", "", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "132bff65e6367c09cc69318ce1b59333", "monkey2", "", "", Common::EN_ANY, Common::kPlatformAmiga }, { "132bff65e6367c09cc69318ce1b59333", "monkey2", "", "", Common::EN_ANY, Common::kPlatformAmiga },
{ "145bd3373574feb668cc2eea2ec6cf86", "balloon", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows }, { "145bd3373574feb668cc2eea2ec6cf86", "balloon", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows },
{ "14d48c95b43ddeb983254cf6c43851f1", "freddi4", "", "", Common::NL_NLD, Common::kPlatformWindows }, { "14d48c95b43ddeb983254cf6c43851f1", "freddi4", "", "", Common::NL_NLD, Common::kPlatformWindows },
{ "151071053a1d0021198216713939521d", "freddi2", "HE 80", "", Common::EN_ANY, Common::kPlatformWindows }, { "151071053a1d0021198216713939521d", "freddi2", "HE 80", "", Common::EN_ANY, Common::kPlatformWindows },
{ "15240c59d3681ed53f714f8d925cb2d6", "maniac", "", "V2", Common::ES_ESP, Common::kPlatformAtariST }, { "15240c59d3681ed53f714f8d925cb2d6", "maniac", "V2", "V2", Common::ES_ESP, Common::kPlatformAtariST },
{ "157367c3c21e0d03a0cba44361b4cf65", "indy3", "No Adlib", "EGA", Common::EN_ANY, Common::kPlatformAtariST }, { "157367c3c21e0d03a0cba44361b4cf65", "indy3", "No Adlib", "EGA", Common::EN_ANY, Common::kPlatformAtariST },
{ "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkey", "VGA", "VGA", Common::EN_ANY, Common::kPlatformPC }, { "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkey", "VGA", "VGA", Common::EN_ANY, Common::kPlatformPC },
{ "15f588e887e857e8c56fe6ade4956168", "atlantis", "", "Floppy", Common::ES_ESP, Common::kPlatformAmiga }, { "15f588e887e857e8c56fe6ade4956168", "atlantis", "", "Floppy", Common::ES_ESP, Common::kPlatformAmiga },
@ -63,10 +63,10 @@ static const MD5Table md5table[] = {
{ "17f7296f63c78642724f057fd8e736a7", "maniac", "NES", "extracted", Common::EN_USA, Common::kPlatformNES }, { "17f7296f63c78642724f057fd8e736a7", "maniac", "NES", "extracted", Common::EN_USA, Common::kPlatformNES },
{ "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "", "Demo", Common::FR_FRA, Common::kPlatformPC }, { "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "", "Demo", Common::FR_FRA, Common::kPlatformPC },
{ "182344899c2e2998fca0bebcd82aa81a", "atlantis", "", "CD", Common::EN_ANY, Common::kPlatformPC }, { "182344899c2e2998fca0bebcd82aa81a", "atlantis", "", "CD", Common::EN_ANY, Common::kPlatformPC },
{ "183d7464902d40d00800e8ee1f04117c", "maniac", "", "V2", Common::DE_DEU, Common::kPlatformPC }, { "183d7464902d40d00800e8ee1f04117c", "maniac", "V2", "V2", Common::DE_DEU, Common::kPlatformPC },
{ "1875b90fade138c9253a8e967007031a", "indy3", "VGA", "VGA", Common::EN_ANY, Common::kPlatformPC }, { "1875b90fade138c9253a8e967007031a", "indy3", "VGA", "VGA", Common::EN_ANY, Common::kPlatformPC },
{ "187d315f6b5168f68680dfe8c3d76a3e", "loom", "EGA", "EGA", Common::HB_ISR, Common::kPlatformPC }, { "187d315f6b5168f68680dfe8c3d76a3e", "loom", "EGA", "EGA", Common::HB_ISR, Common::kPlatformPC },
{ "1900e501a52fbf55bde6e4196f6d2aa6", "zak", "", "V2", Common::IT_ITA, Common::kPlatformPC }, { "1900e501a52fbf55bde6e4196f6d2aa6", "zak", "V2", "V2", Common::IT_ITA, Common::kPlatformPC },
{ "19263586f749a560c1adf8b3393a9593", "socks", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows }, { "19263586f749a560c1adf8b3393a9593", "socks", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows },
{ "19bf6938a94698296bcb0c99c31c91a7", "spyfox2", "", "Demo", Common::EN_GRB, Common::kPlatformWindows }, { "19bf6938a94698296bcb0c99c31c91a7", "spyfox2", "", "Demo", Common::EN_GRB, Common::kPlatformWindows },
{ "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "", "CD", Common::EN_ANY, Common::kPlatformMacintosh }, { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "", "CD", Common::EN_ANY, Common::kPlatformMacintosh },
@ -90,7 +90,7 @@ static const MD5Table md5table[] = {
{ "22f4ea88a09da12df9308ba30bcb7d0f", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC }, { "22f4ea88a09da12df9308ba30bcb7d0f", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
{ "257f8c14d8c584f7ddd601bcb00920c7", "maniac", "NES", "", Common::DE_DEU, Common::kPlatformNES }, { "257f8c14d8c584f7ddd601bcb00920c7", "maniac", "NES", "", Common::DE_DEU, Common::kPlatformNES },
{ "2723fea3dae0cb47768c424b145ae0e7", "tentacle", "", "Floppy", Common::EN_ANY, Common::kPlatformPC }, { "2723fea3dae0cb47768c424b145ae0e7", "tentacle", "", "Floppy", Common::EN_ANY, Common::kPlatformPC },
{ "27b3a4224ad63d5b04627595c1c1a025", "zak", "", "V2", Common::IT_ITA, Common::kPlatformAmiga }, { "27b3a4224ad63d5b04627595c1c1a025", "zak", "V2", "V2", Common::IT_ITA, Common::kPlatformAmiga },
{ "28d24a33448fab6795850bc9f159a4a2", "atlantis", "", "Demo", Common::JA_JPN, Common::kPlatformFMTowns }, { "28d24a33448fab6795850bc9f159a4a2", "atlantis", "", "Demo", Common::JA_JPN, Common::kPlatformFMTowns },
{ "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC }, { "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
{ "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC }, { "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC },
@ -138,7 +138,7 @@ static const MD5Table md5table[] = {
{ "3de99ef0523f8ca7958faa3afccd035a", "spyfox", "HE 100", "", Common::EN_ANY, Common::kPlatformUnknown }, { "3de99ef0523f8ca7958faa3afccd035a", "spyfox", "HE 100", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "3df6ead57930488bc61e6e41901d0e97", "fbear", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh }, { "3df6ead57930488bc61e6e41901d0e97", "fbear", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh },
{ "3e48298920fab9b7aec5a971e1bd1fab", "pajama3", "", "Demo", Common::EN_GRB, Common::kPlatformWindows }, { "3e48298920fab9b7aec5a971e1bd1fab", "pajama3", "", "Demo", Common::EN_GRB, Common::kPlatformWindows },
{ "40564ec47da48a67787d1f9bd043902a", "maniac", "", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "40564ec47da48a67787d1f9bd043902a", "maniac", "Demo", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "4167a92a1d46baa4f4127d918d561f88", "tentacle", "", "CD", Common::EN_ANY, Common::kPlatformUnknown }, { "4167a92a1d46baa4f4127d918d561f88", "tentacle", "", "CD", Common::EN_ANY, Common::kPlatformUnknown },
{ "425205754fa749f4f0b0dd9d09fa45fd", "football", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "425205754fa749f4f0b0dd9d09fa45fd", "football", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
{ "430bc518017b6fac046f58bab6baad5d", "monkey2", "", "", Common::JA_JPN, Common::kPlatformFMTowns }, { "430bc518017b6fac046f58bab6baad5d", "monkey2", "", "", Common::JA_JPN, Common::kPlatformFMTowns },
@ -151,7 +151,7 @@ static const MD5Table md5table[] = {
{ "47e75b1bdcb44c78cb94883d1731ccf8", "fbear", "HE 61", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "47e75b1bdcb44c78cb94883d1731ccf8", "fbear", "HE 61", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "48b9f04b348bc5013327753f0d12a144", "loom", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga }, { "48b9f04b348bc5013327753f0d12a144", "loom", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga },
{ "49210e124e4c2b30f1290a9ef6306301", "monkey", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC }, { "49210e124e4c2b30f1290a9ef6306301", "monkey", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
{ "4973bbc3899e3826dbf316e1d7271ec7", "zak", "", "", Common::DE_DEU, Common::kPlatformC64 }, { "4973bbc3899e3826dbf316e1d7271ec7", "zak", "V1", "", Common::DE_DEU, Common::kPlatformC64 },
{ "499c958affc394f2a3868f1eb568c3ee", "freddi4", "HE 99", "Demo", Common::NL_NLD, Common::kPlatformWindows }, { "499c958affc394f2a3868f1eb568c3ee", "freddi4", "HE 99", "Demo", Common::NL_NLD, Common::kPlatformWindows },
{ "4af4a6b248103c1fe9edef619677f540", "puttmoon", "", "Demo", Common::EN_ANY, Common::kPlatformMacintosh }, { "4af4a6b248103c1fe9edef619677f540", "puttmoon", "", "Demo", Common::EN_ANY, Common::kPlatformMacintosh },
{ "4ba37f835be11a59d969f90f272f575b", "water", "HE 80", "", Common::EN_ANY, Common::kPlatformUnknown }, { "4ba37f835be11a59d969f90f272f575b", "water", "HE 80", "", Common::EN_ANY, Common::kPlatformUnknown },
@ -174,11 +174,11 @@ static const MD5Table md5table[] = {
{ "50fcdc982a25063b78ad46bf389b8e8d", "tentacle", "", "Floppy", Common::IT_ITA, Common::kPlatformPC }, { "50fcdc982a25063b78ad46bf389b8e8d", "tentacle", "", "Floppy", Common::IT_ITA, Common::kPlatformPC },
{ "51305e929e330e24a75a0351c8f9975e", "freddi2", "HE 99", "Updated", Common::EN_ANY, Common::kPlatformUnknown }, { "51305e929e330e24a75a0351c8f9975e", "freddi2", "HE 99", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
{ "5262a27afcaee04e5c4900220bd463e7", "PuttsFunShop", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "5262a27afcaee04e5c4900220bd463e7", "PuttsFunShop", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "52a4bae0746a11d7b1e8554e91a6645c", "zak", "", "V2", Common::FR_FRA, Common::kPlatformPC }, { "52a4bae0746a11d7b1e8554e91a6645c", "zak", "V2", "V2", Common::FR_FRA, Common::kPlatformPC },
{ "53e94115b55dd51d4b8ff0871aa1df1e", "spyfox", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "53e94115b55dd51d4b8ff0871aa1df1e", "spyfox", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
{ "54a936ad06161ff7bfefcb96200f7bff", "monkey", "VGA", "VGA Demo", Common::EN_ANY, Common::kPlatformAmiga }, { "54a936ad06161ff7bfefcb96200f7bff", "monkey", "VGA", "VGA Demo", Common::EN_ANY, Common::kPlatformAmiga },
{ "55518cd73cf9c6d23ea29c51ee06bdfe", "ft", "", "", Common::IT_ITA, Common::kPlatformUnknown }, { "55518cd73cf9c6d23ea29c51ee06bdfe", "ft", "", "", Common::IT_ITA, Common::kPlatformUnknown },
{ "55d3987641bf229c83bc729210173383", "zak", "", "", Common::EN_ANY, Common::kPlatformC64 }, { "55d3987641bf229c83bc729210173383", "zak", "V1", "", Common::EN_ANY, Common::kPlatformC64 },
{ "55e4cc866ff9046824e1c638ba2b8c7f", "ft", "", "", Common::RU_RUS, Common::kPlatformUnknown }, { "55e4cc866ff9046824e1c638ba2b8c7f", "ft", "", "", Common::RU_RUS, Common::kPlatformUnknown },
{ "566165a7338fa11029e7c14d94fa70d0", "freddi", "HE 73", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "566165a7338fa11029e7c14d94fa70d0", "freddi", "HE 73", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "5798972220cd458be2626d54c80f71d7", "atlantis", "", "Floppy", Common::IT_ITA, Common::kPlatformAmiga }, { "5798972220cd458be2626d54c80f71d7", "atlantis", "", "Floppy", Common::IT_ITA, Common::kPlatformAmiga },
@ -196,11 +196,11 @@ static const MD5Table md5table[] = {
{ "5e8fb66971a60e523e5afbc4c129c0e8", "socks", "HE 80", "", Common::EN_ANY, Common::kPlatformUnknown }, { "5e8fb66971a60e523e5afbc4c129c0e8", "socks", "HE 80", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "5fbe557049892eb4b709d90916ec97ca", "indy3", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC }, { "5fbe557049892eb4b709d90916ec97ca", "indy3", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
{ "600abd3e9f47e63e670188b7e4e86ac7", "spyozon", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "600abd3e9f47e63e670188b7e4e86ac7", "spyozon", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "6027e9ca9c35746d95dee2068cec17e5", "zak", "", "V2", Common::DE_DEU, Common::kPlatformAmiga }, { "6027e9ca9c35746d95dee2068cec17e5", "zak", "V2", "V2", Common::DE_DEU, Common::kPlatformAmiga },
{ "60ba818dc3bede86d40357e3913f8505", "ft", "", "Version B", Common::EN_ANY, Common::kPlatformUnknown }, { "60ba818dc3bede86d40357e3913f8505", "ft", "", "Version B", Common::EN_ANY, Common::kPlatformUnknown },
{ "613f64f78ea26c7353b2a5940eb61d6a", "zak", "", "V2", Common::FR_FRA, Common::kPlatformAtariST }, { "613f64f78ea26c7353b2a5940eb61d6a", "zak", "V2", "V2", Common::FR_FRA, Common::kPlatformAtariST },
{ "62050da376483d8edcbd98cd26b6cb57", "puttrace", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows }, { "62050da376483d8edcbd98cd26b6cb57", "puttrace", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows },
{ "624cdb93654667c869d204a64af7e57f", "maniac", "", "V2", Common::EN_ANY, Common::kPlatformPC }, { "624cdb93654667c869d204a64af7e57f", "maniac", "V2", "V2", Common::EN_ANY, Common::kPlatformPC },
{ "6271130f440066830eca9056c1d7926f", "water", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows }, { "6271130f440066830eca9056c1d7926f", "water", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows },
{ "62b8c16b6db226ba95aaa8be73f9885c", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga }, { "62b8c16b6db226ba95aaa8be73f9885c", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga },
{ "63fdcdc95cdeea00060883aed38e5504", "PuttTime", "HE 80", "", Common::EN_ANY, Common::kPlatformWindows }, { "63fdcdc95cdeea00060883aed38e5504", "PuttTime", "HE 80", "", Common::EN_ANY, Common::kPlatformWindows },
@ -210,7 +210,7 @@ static const MD5Table md5table[] = {
{ "663743c03ae0c007f3d665cf631c0e6b", "puttrace", "HE 99", "Demo", Common::DE_DEU, Common::kPlatformUnknown }, { "663743c03ae0c007f3d665cf631c0e6b", "puttrace", "HE 99", "Demo", Common::DE_DEU, Common::kPlatformUnknown },
{ "66fd5ff9a810dfeb6d6bdada18221140", "monkey", "VGA", "VGA", Common::IT_ITA, Common::kPlatformPC }, { "66fd5ff9a810dfeb6d6bdada18221140", "monkey", "VGA", "VGA", Common::IT_ITA, Common::kPlatformPC },
{ "672dec94b82f7f0877ebb5b5cf7f4bc1", "pajama", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "672dec94b82f7f0877ebb5b5cf7f4bc1", "pajama", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "675d71151e9b5a968c8ce46d9fbf4cbf", "zak", "", "V2", Common::EN_ANY, Common::kPlatformPC }, { "675d71151e9b5a968c8ce46d9fbf4cbf", "zak", "V2", "V2", Common::EN_ANY, Common::kPlatformPC },
{ "68155a6bf082221525f431c2cbdac8ab", "SamsFunShop", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "68155a6bf082221525f431c2cbdac8ab", "SamsFunShop", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "684732efb5799c0f78804c99d8de9aba", "puttputt", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh }, { "684732efb5799c0f78804c99d8de9aba", "puttputt", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh },
{ "688328c5bdc4c8ec4145688dfa077bf2", "freddi4", "HE 99", "Demo", Common::DE_DEU, Common::kPlatformUnknown }, { "688328c5bdc4c8ec4145688dfa077bf2", "freddi4", "HE 99", "Demo", Common::DE_DEU, Common::kPlatformUnknown },
@ -244,7 +244,7 @@ static const MD5Table md5table[] = {
{ "73e5ab7dbb9a8061cc6d25df02dbd1e7", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC }, { "73e5ab7dbb9a8061cc6d25df02dbd1e7", "loom", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
{ "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", "HE 90", "Updated", Common::RU_RUS, Common::kPlatformWindows }, { "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", "HE 90", "Updated", Common::RU_RUS, Common::kPlatformWindows },
{ "754feb59d3bf86b8a00840df74fd7b26", "freddi3", "", "Demo", Common::NL_NLD, Common::kPlatformWindows }, { "754feb59d3bf86b8a00840df74fd7b26", "freddi3", "", "Demo", Common::NL_NLD, Common::kPlatformWindows },
{ "75ba23fff4fd63fa446c02864f2a5a4b", "zak", "", "V2", Common::IT_ITA, Common::kPlatformPC }, { "75ba23fff4fd63fa446c02864f2a5a4b", "zak", "V2", "V2", Common::IT_ITA, Common::kPlatformPC },
{ "75bff95816b84672b877d22a911ab811", "freddi3", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows }, { "75bff95816b84672b877d22a911ab811", "freddi3", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows },
{ "771bc18ec6f93837b839c992b211904b", "monkey", "Demo", "EGA Demo", Common::DE_DEU, Common::kPlatformPC }, { "771bc18ec6f93837b839c992b211904b", "monkey", "Demo", "EGA Demo", Common::DE_DEU, Common::kPlatformPC },
{ "77f5c9cc0986eb729c1a6b4c8823bbae", "zak", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns }, { "77f5c9cc0986eb729c1a6b4c8823bbae", "zak", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
@ -264,15 +264,15 @@ static const MD5Table md5table[] = {
{ "7fc6cdb46b4c9d384c52327f4bca6416", "football", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "7fc6cdb46b4c9d384c52327f4bca6416", "football", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "810a9da887aefa597b0cf3c77d262897", "BluesABCTime", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "810a9da887aefa597b0cf3c77d262897", "BluesABCTime", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
{ "81bbfa181184cb494e7a81dcfa94fbd9", "maniac", "NES", "", Common::FR_FRA, Common::kPlatformNES }, { "81bbfa181184cb494e7a81dcfa94fbd9", "maniac", "NES", "", Common::FR_FRA, Common::kPlatformNES },
{ "8299d9b8a1b0e7b881bae7a9971dc5e2", "zak", "", "Demo", Common::EN_ANY, Common::kPlatformAtariST }, { "8299d9b8a1b0e7b881bae7a9971dc5e2", "zak", "V2", "Demo", Common::EN_ANY, Common::kPlatformAtariST },
{ "8368f552b1e3eba559f8d559bcc4cadb", "freddi3", "", "", Common::UNK_LANG, Common::kPlatformUnknown }, { "8368f552b1e3eba559f8d559bcc4cadb", "freddi3", "", "", Common::UNK_LANG, Common::kPlatformUnknown },
{ "83cedbe26aa8b58988e984e3d34cac8e", "freddi3", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown }, { "83cedbe26aa8b58988e984e3d34cac8e", "freddi3", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown },
{ "84e3c23a49ded8a6f9197735c8eb3de7", "PuttTime", "HE 80", "", Common::DE_DEU, Common::kPlatformWindows }, { "84e3c23a49ded8a6f9197735c8eb3de7", "PuttTime", "HE 80", "", Common::DE_DEU, Common::kPlatformWindows },
{ "861e59ed72a1cd0e6d454f7ee7e2bf3d", "comi", "", "", Common::RU_RUS, Common::kPlatformUnknown }, { "861e59ed72a1cd0e6d454f7ee7e2bf3d", "comi", "", "", Common::RU_RUS, Common::kPlatformWindows },
{ "86be8ada36371d4fdc35659d0e912a26", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC }, { "86be8ada36371d4fdc35659d0e912a26", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC },
{ "86c9902b7bec1a17926d4dae85beaa45", "airport", "HE 71", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "86c9902b7bec1a17926d4dae85beaa45", "airport", "HE 71", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "870d1e3c86bc50846d808d14a36b4e08", "monkey", "VGA", "VGA", Common::ES_ESP, Common::kPlatformAmiga }, { "870d1e3c86bc50846d808d14a36b4e08", "monkey", "VGA", "VGA", Common::ES_ESP, Common::kPlatformAmiga },
{ "87f6e8037b7cc996e13474b491a7a98e", "maniac", "", "V2", Common::IT_ITA, Common::kPlatformPC }, { "87f6e8037b7cc996e13474b491a7a98e", "maniac", "V2", "V2", Common::IT_ITA, Common::kPlatformPC },
{ "8801fb4a1200b347f7a38523339526dd", "jungle", "", "", Common::EN_ANY, Common::kPlatformWindows }, { "8801fb4a1200b347f7a38523339526dd", "jungle", "", "", Common::EN_ANY, Common::kPlatformWindows },
{ "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "", "CD", Common::ES_ESP, Common::kPlatformUnknown }, { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "", "CD", Common::ES_ESP, Common::kPlatformUnknown },
{ "898ce8eb1234a955ef75e87141902bb3", "freddi3", "", "", Common::RU_RUS, Common::kPlatformWindows }, { "898ce8eb1234a955ef75e87141902bb3", "freddi3", "", "", Common::RU_RUS, Common::kPlatformWindows },
@ -288,12 +288,12 @@ static const MD5Table md5table[] = {
{ "8eb84cee9b429314c7f0bdcf560723eb", "monkey", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns }, { "8eb84cee9b429314c7f0bdcf560723eb", "monkey", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
{ "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown }, { "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
{ "8f3758ff98c9c5d78e5d635222cad026", "atlantis", "", "Floppy", Common::IT_ITA, Common::kPlatformPC }, { "8f3758ff98c9c5d78e5d635222cad026", "atlantis", "", "Floppy", Common::IT_ITA, Common::kPlatformPC },
{ "8fec68383202d38c0d25e9e3b757c5df", "comi", "Demo", "Demo", Common::UNK_LANG, Common::kPlatformUnknown }, { "8fec68383202d38c0d25e9e3b757c5df", "comi", "Demo", "Demo", Common::UNK_LANG, Common::kPlatformWindows },
{ "8ffd618a776a4c0d8922bb28b09f8ce8", "airport", "", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "8ffd618a776a4c0d8922bb28b09f8ce8", "airport", "", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", "", "", Common::HB_ISR, Common::kPlatformPC }, { "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", "", "", Common::HB_ISR, Common::kPlatformPC },
{ "90c755e1c9b9b8a4129d37b2259d0655", "chase", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown }, { "90c755e1c9b9b8a4129d37b2259d0655", "chase", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
{ "910e31cffb28226bd68c569668a0d6b4", "monkey", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC }, { "910e31cffb28226bd68c569668a0d6b4", "monkey", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC },
{ "91469353f7be1b122fa88d23480a1320", "zak", "", "V2", Common::FR_FRA, Common::kPlatformAmiga }, { "91469353f7be1b122fa88d23480a1320", "zak", "V2", "V2", Common::FR_FRA, Common::kPlatformAmiga },
{ "91d5db93187fab54d823f73bd6441cb6", "maniac", "NES", "extracted", Common::EN_GRB, Common::kPlatformNES }, { "91d5db93187fab54d823f73bd6441cb6", "maniac", "NES", "extracted", Common::EN_GRB, Common::kPlatformNES },
{ "927a764615c7fcdd72f591355e089d8c", "monkey", "No Adlib", "EGA", Common::DE_DEU, Common::kPlatformAtariST }, { "927a764615c7fcdd72f591355e089d8c", "monkey", "No Adlib", "EGA", Common::DE_DEU, Common::kPlatformAtariST },
{ "92b078d9d6d9d751da9c26b8b3075779", "tentacle", "", "Floppy", Common::FR_FRA, Common::kPlatformPC }, { "92b078d9d6d9d751da9c26b8b3075779", "tentacle", "", "Floppy", Common::FR_FRA, Common::kPlatformPC },
@ -305,10 +305,10 @@ static const MD5Table md5table[] = {
{ "9708cf716ed8bcc9ff3fcfc69413b746", "puttputt", "HE 61", "", Common::EN_ANY, Common::kPlatformPC }, { "9708cf716ed8bcc9ff3fcfc69413b746", "puttputt", "HE 61", "", Common::EN_ANY, Common::kPlatformPC },
{ "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", "HE 98", "", Common::EN_ANY, Common::kPlatformUnknown }, { "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", "HE 98", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "98744fe66ff730e8c2b3b1f58803ab0b", "atlantis", "", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "98744fe66ff730e8c2b3b1f58803ab0b", "atlantis", "", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "99a3699f80b8f776efae592b44b9b991", "maniac", "", "V2", Common::FR_FRA, Common::kPlatformPC }, { "99a3699f80b8f776efae592b44b9b991", "maniac", "V2", "V2", Common::FR_FRA, Common::kPlatformPC },
{ "99b6f822b0b2612415407865438697d6", "atlantis", "", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "99b6f822b0b2612415407865438697d6", "atlantis", "", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "9b7452b5cd6d3ffb2b2f5118010af84f", "ft", "Demo", "Demo", Common::EN_ANY, Common::kPlatformMacintosh }, { "9b7452b5cd6d3ffb2b2f5118010af84f", "ft", "Demo", "Demo", Common::EN_ANY, Common::kPlatformMacintosh },
{ "9bc548e179cdb0767009401c094d0895", "maniac", "", "V2", Common::DE_DEU, Common::kPlatformAmiga }, { "9bc548e179cdb0767009401c094d0895", "maniac", "V2", "V2", Common::DE_DEU, Common::kPlatformAmiga },
{ "9bd2a8f72613e715c199246dd511e10f", "atlantis", "", "Floppy", Common::ES_ESP, Common::kPlatformPC }, { "9bd2a8f72613e715c199246dd511e10f", "atlantis", "", "Floppy", Common::ES_ESP, Common::kPlatformPC },
{ "9bda5fee51d2fda5253d02c642016bf4", "spyfox", "HE 98.5", "", Common::NL_NLD, Common::kPlatformWindows }, { "9bda5fee51d2fda5253d02c642016bf4", "spyfox", "HE 98.5", "", Common::NL_NLD, Common::kPlatformWindows },
{ "9c0fee288ad564a7d25ec3e841810d79", "indy3", "EGA", "EGA", Common::EN_ANY, Common::kPlatformAmiga }, { "9c0fee288ad564a7d25ec3e841810d79", "indy3", "EGA", "EGA", Common::EN_ANY, Common::kPlatformAmiga },
@ -328,7 +328,7 @@ static const MD5Table md5table[] = {
{ "a3036878840720fbefa41e6965fa4a0a", "samnmax", "", "Floppy", Common::EN_ANY, Common::kPlatformPC }, { "a3036878840720fbefa41e6965fa4a0a", "samnmax", "", "Floppy", Common::EN_ANY, Common::kPlatformPC },
{ "a525c1753c1db5011c00417da37887ef", "PuttTime", "HE 100", "", Common::EN_USA, Common::kPlatformUnknown }, { "a525c1753c1db5011c00417da37887ef", "PuttTime", "HE 100", "", Common::EN_USA, Common::kPlatformUnknown },
{ "a561d2e2413cc1c71d5a1bf87bf493ea", "lost", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown }, { "a561d2e2413cc1c71d5a1bf87bf493ea", "lost", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
{ "a570381b028972d891052ee1e51dc011", "maniac", "", "V2", Common::EN_ANY, Common::kPlatformAtariST }, { "a570381b028972d891052ee1e51dc011", "maniac", "V2", "V2", Common::EN_ANY, Common::kPlatformAtariST },
{ "a654fb60c3b67d6317a7894ffd9f25c5", "pajama3", "", "Demo", Common::EN_USA, Common::kPlatformUnknown }, { "a654fb60c3b67d6317a7894ffd9f25c5", "pajama3", "", "Demo", Common::EN_USA, Common::kPlatformUnknown },
{ "a7cacad9c40c4dc9e1812abf6c8af9d5", "puttcircus", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "a7cacad9c40c4dc9e1812abf6c8af9d5", "puttcircus", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
{ "a85856675429fe88051744f755b72f93", "farm", "", "", Common::EN_ANY, Common::kPlatformWindows }, { "a85856675429fe88051744f755b72f93", "farm", "", "", Common::EN_ANY, Common::kPlatformWindows },
@ -345,7 +345,7 @@ static const MD5Table md5table[] = {
{ "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", "", "Floppy", Common::EN_ANY, Common::kPlatformUnknown }, { "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", "", "Floppy", Common::EN_ANY, Common::kPlatformUnknown },
{ "ae94f110a14ce71fc515d5b648827a8f", "tentacle", "", "Floppy", Common::ES_ESP, Common::kPlatformPC }, { "ae94f110a14ce71fc515d5b648827a8f", "tentacle", "", "Floppy", Common::ES_ESP, Common::kPlatformPC },
{ "b23f7cd7c304d7dff08e92a96120d5b4", "zak", "V1", "V1", Common::EN_ANY, Common::kPlatformPC }, { "b23f7cd7c304d7dff08e92a96120d5b4", "zak", "V1", "V1", Common::EN_ANY, Common::kPlatformPC },
{ "b250d0f9cc83f80ced56fe11a4fb057c", "maniac", "", "V2", Common::EN_ANY, Common::kPlatformPC }, { "b250d0f9cc83f80ced56fe11a4fb057c", "maniac", "V2", "V2", Common::EN_ANY, Common::kPlatformPC },
{ "b289a2a8cbedbf45786e0b4ad2f510f1", "samnmax", "", "Floppy", Common::IT_ITA, Common::kPlatformPC }, { "b289a2a8cbedbf45786e0b4ad2f510f1", "samnmax", "", "Floppy", Common::IT_ITA, Common::kPlatformPC },
{ "b5298a5c15ffbe8b381d51ea4e26d35c", "freddi4", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown }, { "b5298a5c15ffbe8b381d51ea4e26d35c", "freddi4", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown },
{ "b597e0403cc0002f69170e6caba7edd9", "indy3", "EGA", "EGA Demo", Common::EN_ANY, Common::kPlatformPC }, { "b597e0403cc0002f69170e6caba7edd9", "indy3", "EGA", "EGA Demo", Common::EN_ANY, Common::kPlatformPC },
@ -358,7 +358,7 @@ static const MD5Table md5table[] = {
{ "bc4700bc0e12879f6d25d14d6be6cfdd", "spyfox2", "", "", Common::DE_DEU, Common::kPlatformUnknown }, { "bc4700bc0e12879f6d25d14d6be6cfdd", "spyfox2", "", "", Common::DE_DEU, Common::kPlatformUnknown },
{ "bd126753de619a495f9f22adc951c8d5", "monkey2", "", "", Common::IT_ITA, Common::kPlatformPC }, { "bd126753de619a495f9f22adc951c8d5", "monkey2", "", "", Common::IT_ITA, Common::kPlatformPC },
{ "be39a5d4db60e8aa736b9086778cb45c", "spyozon", "", "", Common::EN_ANY, Common::kPlatformWindows }, { "be39a5d4db60e8aa736b9086778cb45c", "spyozon", "", "", Common::EN_ANY, Common::kPlatformWindows },
{ "be83e882b44f2767bc08d4f766ebc347", "maniac", "", "V2", Common::DE_DEU, Common::kPlatformAtariST }, { "be83e882b44f2767bc08d4f766ebc347", "maniac", "V2", "V2", Common::DE_DEU, Common::kPlatformAtariST },
{ "bf8b52fdd9a69c67f34e8e9fec72661c", "farm", "HE 71", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "bf8b52fdd9a69c67f34e8e9fec72661c", "farm", "HE 71", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", "", "", Common::EN_ANY, Common::kPlatformWindows }, { "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", "", "", Common::EN_ANY, Common::kPlatformWindows },
{ "c0039ad982999c92d0de81910d640fa0", "freddi", "HE 71", "", Common::NL_NLD, Common::kPlatformWindows }, { "c0039ad982999c92d0de81910d640fa0", "freddi", "HE 71", "", Common::NL_NLD, Common::kPlatformWindows },
@ -369,8 +369,8 @@ static const MD5Table md5table[] = {
{ "c3196c5349e53e387aaff1533d95e53a", "samnmax", "", "Demo", Common::EN_ANY, Common::kPlatformPC }, { "c3196c5349e53e387aaff1533d95e53a", "samnmax", "", "Demo", Common::EN_ANY, Common::kPlatformPC },
{ "c3b22fa4654bb580b20325ebf4174841", "puttzoo", "", "", Common::NL_NLD, Common::kPlatformWindows }, { "c3b22fa4654bb580b20325ebf4174841", "puttzoo", "", "", Common::NL_NLD, Common::kPlatformWindows },
{ "c3df37df9d3b481b45f75283a9907c47", "loom", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC }, { "c3df37df9d3b481b45f75283a9907c47", "loom", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC },
{ "c4787c3e8b5e2dfda90850ee800af00f", "zak", "", "V2", Common::FR_FRA, Common::kPlatformPC }, { "c4787c3e8b5e2dfda90850ee800af00f", "zak", "V2", "V2", Common::FR_FRA, Common::kPlatformPC },
{ "c4a7f7398ac9ae588940f9912ea5fd8f", "maniac", "", "", Common::DE_DEU, Common::kPlatformC64 }, { "c4a7f7398ac9ae588940f9912ea5fd8f", "maniac", "C64", "", Common::DE_DEU, Common::kPlatformC64 },
{ "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "c5d10e190d4b4d59114b824f2fdbd00e", "loom", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns }, { "c5d10e190d4b4d59114b824f2fdbd00e", "loom", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
{ "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformPC }, { "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformPC },
@ -384,16 +384,16 @@ static const MD5Table md5table[] = {
{ "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "", "CD", Common::EN_ANY, Common::kPlatformMacintosh }, { "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "", "CD", Common::EN_ANY, Common::kPlatformMacintosh },
{ "cc8ba2b0df2f9c450bcf055fe2711979", "samnmax", "", "Demo", Common::DE_DEU, Common::kPlatformPC }, { "cc8ba2b0df2f9c450bcf055fe2711979", "samnmax", "", "Demo", Common::DE_DEU, Common::kPlatformPC },
{ "cd9c05e755d7bf8e9b9590ad1ebe273e", "dig", "Demo", "Demo", Common::EN_ANY, Common::kPlatformMacintosh }, { "cd9c05e755d7bf8e9b9590ad1ebe273e", "dig", "Demo", "Demo", Common::EN_ANY, Common::kPlatformMacintosh },
{ "cdd760228cf1010c2903f37e788ea31c", "zak", "", "V2", Common::DE_DEU, Common::kPlatformPC }, { "cdd760228cf1010c2903f37e788ea31c", "zak", "V2", "V2", Common::DE_DEU, Common::kPlatformPC },
{ "ce6a4cef315b20fef58a95bc40a2d8d3", "monkey", "EGA", "EGA", Common::FR_FRA, Common::kPlatformPC }, { "ce6a4cef315b20fef58a95bc40a2d8d3", "monkey", "EGA", "EGA", Common::FR_FRA, Common::kPlatformPC },
{ "ce7733f185b838e248927c7ba1a04204", "maniac", "", "V2", Common::FR_FRA, Common::kPlatformAmiga }, { "ce7733f185b838e248927c7ba1a04204", "maniac", "V2", "V2", Common::FR_FRA, Common::kPlatformAmiga },
{ "ce7fd0c382389a6791fc3e199c117ef4", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC }, { "ce7fd0c382389a6791fc3e199c117ef4", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformPC },
{ "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", "", "", Common::RU_RUS, Common::kPlatformUnknown }, { "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", "", "", Common::RU_RUS, Common::kPlatformUnknown },
{ "cf4ef315214c7d8cdab6302cdb7e50db", "freddi", "HE 73", "Demo", Common::DE_DEU, Common::kPlatformWindows }, { "cf4ef315214c7d8cdab6302cdb7e50db", "freddi", "HE 73", "Demo", Common::DE_DEU, Common::kPlatformWindows },
{ "cf8d13446ec6cb6222287a925fd47c1d", "baseball", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "cf8d13446ec6cb6222287a925fd47c1d", "baseball", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "cf8ef3a1fb483c5c4b1c584d1167b2c4", "freddi", "HE 73", "", Common::DE_DEU, Common::kPlatformWindows }, { "cf8ef3a1fb483c5c4b1c584d1167b2c4", "freddi", "HE 73", "", Common::DE_DEU, Common::kPlatformWindows },
{ "cf90b4db5486ef798db78fe6fbf897e5", "pajama3", "", "Demo", Common::EN_USA, Common::kPlatformWindows }, { "cf90b4db5486ef798db78fe6fbf897e5", "pajama3", "", "Demo", Common::EN_USA, Common::kPlatformWindows },
{ "d06fbe28818fef7bfc45c2cdf0c0849d", "zak", "", "V2", Common::DE_DEU, Common::kPlatformPC }, { "d06fbe28818fef7bfc45c2cdf0c0849d", "zak", "V2", "V2", Common::DE_DEU, Common::kPlatformPC },
{ "d0b531227a27c6662018d2bd05aac52a", "monkey", "VGA", "VGA", Common::DE_DEU, Common::kPlatformPC }, { "d0b531227a27c6662018d2bd05aac52a", "monkey", "VGA", "VGA", Common::DE_DEU, Common::kPlatformPC },
{ "d220d154aafbfa12bd6f3ab1b2dae420", "puttzoo", "", "Demo", Common::DE_DEU, Common::kPlatformMacintosh }, { "d220d154aafbfa12bd6f3ab1b2dae420", "puttzoo", "", "Demo", Common::DE_DEU, Common::kPlatformMacintosh },
{ "d37c55388294b66e53e7ced3af88fa68", "freddi2", "HE 100", "Updated Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "d37c55388294b66e53e7ced3af88fa68", "freddi2", "HE 100", "Updated Demo", Common::EN_ANY, Common::kPlatformUnknown },
@ -402,14 +402,14 @@ static const MD5Table md5table[] = {
{ "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", "HE 99", "", Common::EN_ANY, Common::kPlatformWindows }, { "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", "HE 99", "", Common::EN_ANY, Common::kPlatformWindows },
{ "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", "HE 71", "", Common::UNK_LANG, Common::kPlatformWindows }, { "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", "HE 71", "", Common::UNK_LANG, Common::kPlatformWindows },
{ "d4e79c3d8645b8266cd78c325bc35154", "pajama2", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "d4e79c3d8645b8266cd78c325bc35154", "pajama2", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "d55eff37c2100f5065cde9de428621fa", "zak", "", "V2", Common::EN_ANY, Common::kPlatformAtariST }, { "d55eff37c2100f5065cde9de428621fa", "zak", "V2", "V2", Common::EN_ANY, Common::kPlatformAtariST },
{ "d62047a6729349ab36f7ee065bf26509", "dig", "", "", Common::RU_RUS, Common::kPlatformUnknown }, { "d62047a6729349ab36f7ee065bf26509", "dig", "", "", Common::RU_RUS, Common::kPlatformUnknown },
{ "d62d248c3df6ec177405e2cb23d923b2", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC }, { "d62d248c3df6ec177405e2cb23d923b2", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC },
{ "d6334a5a9b61afe18c368540fdf522ca", "airport", "", "", Common::EN_ANY, Common::kPlatformMacintosh }, { "d6334a5a9b61afe18c368540fdf522ca", "airport", "", "", Common::EN_ANY, Common::kPlatformMacintosh },
{ "d6dd0646404768a63e963891a96daadd", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformMacintosh }, { "d6dd0646404768a63e963891a96daadd", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformMacintosh },
{ "d7ab7cd6105546016e6a0d46fb36b964", "pajama", "HE 100", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "d7ab7cd6105546016e6a0d46fb36b964", "pajama", "HE 100", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
{ "d7b247c26bf1f01f8f7daf142be84de3", "balloon", "HE 99", "Updated", Common::EN_ANY, Common::kPlatformWindows }, { "d7b247c26bf1f01f8f7daf142be84de3", "balloon", "HE 99", "Updated", Common::EN_ANY, Common::kPlatformWindows },
{ "d831f7c048574dd9d5d85db2a1468099", "maniac", "", "", Common::EN_ANY, Common::kPlatformC64 }, { "d831f7c048574dd9d5d85db2a1468099", "maniac", "C64", "", Common::EN_ANY, Common::kPlatformC64 },
{ "d8323015ecb8b10bf53474f6e6b0ae33", "dig", "", "", Common::UNK_LANG, Common::kPlatformUnknown }, { "d8323015ecb8b10bf53474f6e6b0ae33", "dig", "", "", Common::UNK_LANG, Common::kPlatformUnknown },
{ "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", "NES", "", Common::EN_USA, Common::kPlatformNES }, { "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", "NES", "", Common::EN_USA, Common::kPlatformNES },
{ "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "", "CD", Common::EN_ANY, Common::kPlatformUnknown }, { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "", "CD", Common::EN_ANY, Common::kPlatformUnknown },
@ -417,9 +417,9 @@ static const MD5Table md5table[] = {
{ "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", "", "", Common::EN_ANY, Common::kPlatformFMTowns }, { "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", "", "", Common::EN_ANY, Common::kPlatformFMTowns },
{ "da6269b18fcb08189c0aa9c95533cce2", "monkey", "CD", "CD", Common::IT_ITA, Common::kPlatformPC }, { "da6269b18fcb08189c0aa9c95533cce2", "monkey", "CD", "CD", Common::IT_ITA, Common::kPlatformPC },
{ "da669b20271b85182e9c17a2a37ea02e", "monkey2", "", "", Common::DE_DEU, Common::kPlatformAmiga }, { "da669b20271b85182e9c17a2a37ea02e", "monkey2", "", "", Common::DE_DEU, Common::kPlatformAmiga },
{ "dd30a53035393baa5a5e222e716559af", "maniac", "", "V2", Common::FR_FRA, Common::kPlatformAtariST }, { "dd30a53035393baa5a5e222e716559af", "maniac", "V2", "V2", Common::FR_FRA, Common::kPlatformAtariST },
{ "de4efb910210736813c9a1185384bace", "puttzoo", "", "Demo", Common::EN_ANY, Common::kPlatformWindows }, { "de4efb910210736813c9a1185384bace", "puttzoo", "", "Demo", Common::EN_ANY, Common::kPlatformWindows },
{ "debe337f73d660e951ece7c1f1c81add", "zak", "", "V2", Common::EN_ANY, Common::kPlatformPC }, { "debe337f73d660e951ece7c1f1c81add", "zak", "V2", "V2", Common::EN_ANY, Common::kPlatformPC },
{ "defb8cb9ec4b0f91acfb6b61c6129ad9", "PuttTime", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows }, { "defb8cb9ec4b0f91acfb6b61c6129ad9", "PuttTime", "HE 99", "", Common::RU_RUS, Common::kPlatformWindows },
{ "df03ee021aa9b81d90cab9c26da07614", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformAmiga }, { "df03ee021aa9b81d90cab9c26da07614", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformAmiga },
{ "df047cc4792150f601290357566d36a6", "freddi", "HE 90", "Updated", Common::EN_ANY, Common::kPlatformUnknown }, { "df047cc4792150f601290357566d36a6", "freddi", "HE 90", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
@ -435,8 +435,8 @@ static const MD5Table md5table[] = {
{ "e689bdf67f98b1d760ce4487ec0e8d06", "indy3", "EGA", "EGA", Common::FR_FRA, Common::kPlatformAmiga }, { "e689bdf67f98b1d760ce4487ec0e8d06", "indy3", "EGA", "EGA", Common::FR_FRA, Common::kPlatformAmiga },
{ "e6cd81b25ab1453a8a6d3482118c391e", "pass", "", "", Common::EN_ANY, Common::kPlatformPC }, { "e6cd81b25ab1453a8a6d3482118c391e", "pass", "", "", Common::EN_ANY, Common::kPlatformPC },
{ "e72bb4c2b613db2cf50f89ff6350e70a", "ft", "", "", Common::ES_ESP, Common::kPlatformUnknown }, { "e72bb4c2b613db2cf50f89ff6350e70a", "ft", "", "", Common::ES_ESP, Common::kPlatformUnknown },
{ "e781230da44a44e2f0770edb2b3b3633", "maniac", "", "V2", Common::EN_ANY, Common::kPlatformAmiga }, { "e781230da44a44e2f0770edb2b3b3633", "maniac", "V2", "V2", Common::EN_ANY, Common::kPlatformAmiga },
{ "e94c7cc3686fce406d3c91b5eae5a72d", "zak", "", "V2", Common::EN_ANY, Common::kPlatformAmiga }, { "e94c7cc3686fce406d3c91b5eae5a72d", "zak", "V2", "V2", Common::EN_ANY, Common::kPlatformAmiga },
{ "e98b982ceaf9d253d730bde8903233d6", "monkey", "EGA", "EGA", Common::DE_DEU, Common::kPlatformPC }, { "e98b982ceaf9d253d730bde8903233d6", "monkey", "EGA", "EGA", Common::DE_DEU, Common::kPlatformPC },
{ "eae95b2b3546d8ba86ae1d397c383253", "dog", "", "", Common::EN_ANY, Common::kPlatformUnknown }, { "eae95b2b3546d8ba86ae1d397c383253", "dog", "", "", Common::EN_ANY, Common::kPlatformUnknown },
{ "ebd0b2c8a387f18887282afe6cad894a", "spyozon", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown }, { "ebd0b2c8a387f18887282afe6cad894a", "spyozon", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
@ -469,7 +469,7 @@ static const MD5Table md5table[] = {
{ "fcb78ebecab2757264c590890c319cc5", "PuttTime", "HE 100", "", Common::NL_NLD, Common::kPlatformWindows }, { "fcb78ebecab2757264c590890c319cc5", "PuttTime", "HE 100", "", Common::NL_NLD, Common::kPlatformWindows },
{ "fce4b8010704b103acfeea9413788f32", "freddi2", "HE 80", "", Common::DE_DEU, Common::kPlatformUnknown }, { "fce4b8010704b103acfeea9413788f32", "freddi2", "HE 80", "", Common::DE_DEU, Common::kPlatformUnknown },
{ "fe381e45117878b1e942cb876b050fd6", "ft", "", "", Common::EN_ANY, Common::kPlatformMacintosh }, { "fe381e45117878b1e942cb876b050fd6", "ft", "", "", Common::EN_ANY, Common::kPlatformMacintosh },
{ "fe60d6b5ff51b0553ac59963123b5777", "comi", "", "", Common::UNK_LANG, Common::kPlatformUnknown }, { "fe60d6b5ff51b0553ac59963123b5777", "comi", "", "", Common::UNK_LANG, Common::kPlatformWindows },
{ "ff05c07990061d97647f059c48c1d05a", "zak", "", "V2", Common::DE_DEU, Common::kPlatformAtariST }, { "ff05c07990061d97647f059c48c1d05a", "zak", "V2", "V2", Common::DE_DEU, Common::kPlatformAtariST },
{ 0, 0, 0, 0, Common::UNK_LANG, Common::kPlatformUnknown } { 0, 0, 0, 0, Common::UNK_LANG, Common::kPlatformUnknown }
}; };

View file

@ -78,10 +78,11 @@ namespace Scumm {
ScummEngine *g_scumm = 0; ScummEngine *g_scumm = 0;
ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
: Engine(syst), : Engine(syst),
_game(gs), _game(dr.game),
_substResFileName(subst), _filenamePattern(dr.fp),
_language(dr.language),
_debugger(0), _debugger(0),
_currentScript(0xFF), // Let debug() work on init stage _currentScript(0xFF), // Let debug() work on init stage
gdi(this), gdi(this),
@ -89,11 +90,8 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
_pauseDialog(0), _mainMenuDialog(0), _versionDialog(0) { _pauseDialog(0), _mainMenuDialog(0), _versionDialog(0) {
// Copy MD5 checksum // Copy MD5 checksum
memcpy(_gameMD5, md5sum, 16); memcpy(_gameMD5, dr.md5sum, 16);
// Clean _substResFileNameBundle
memset(&_substResFileNameBundle, 0, sizeof(_substResFileNameBundle));
// Add default file directories. // Add default file directories.
if (((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) && (_game.version <= 4)) { if (((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) && (_game.version <= 4)) {
// This is for the Amiga version of Indy3/Loom/Maniac/Zak // This is for the Amiga version of Indy3/Loom/Maniac/Zak
@ -146,14 +144,17 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
// This is the case of the NES, C64 and Mac versions of certain games. // This is the case of the NES, C64 and Mac versions of certain games.
// Note: All of these can also occur in 'extracted' form, in which case they // Note: All of these can also occur in 'extracted' form, in which case they
// are treated like any other SCUMM game. // are treated like any other SCUMM game.
if (_substResFileName.almostGameID && _substResFileName.genMethod == kGenAsIs) { if (_filenamePattern.genMethod == kGenUnchanged) {
if (_game.platform == Common::kPlatformNES) { if (_game.platform == Common::kPlatformNES) {
// We read data directly from NES ROM instead of extracting it with // We read data directly from NES ROM instead of extracting it with
// external tool // external tool
assert(_game.id == GID_MANIAC); assert(_game.id == GID_MANIAC);
_fileHandle = new ScummNESFile(); _fileHandle = new ScummNESFile();
_containerFile = _substResFileName.expandedName; _containerFile = _filenamePattern.pattern;
_filenamePattern.pattern = "%.2d.LFL";
_filenamePattern.genMethod = kGenRoomNum;
} else if (_game.platform == Common::kPlatformC64) { } else if (_game.platform == Common::kPlatformC64) {
// Read data from C64 disk images. // Read data from C64 disk images.
const char *tmpBuf1, *tmpBuf2; const char *tmpBuf1, *tmpBuf2;
@ -168,6 +169,9 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
_fileHandle = new ScummC64File(tmpBuf1, tmpBuf2, _game.id == GID_MANIAC); _fileHandle = new ScummC64File(tmpBuf1, tmpBuf2, _game.id == GID_MANIAC);
_containerFile = tmpBuf1; _containerFile = tmpBuf1;
_filenamePattern.pattern = "%.2d.LFL";
_filenamePattern.genMethod = kGenRoomNum;
} else if (_game.platform == Common::kPlatformMacintosh) { } else if (_game.platform == Common::kPlatformMacintosh) {
// The mac versions of Indy4, Sam&Max, DOTT, FT and The Dig used a // The mac versions of Indy4, Sam&Max, DOTT, FT and The Dig used a
// special meta (container) file format to store the actual SCUMM data // special meta (container) file format to store the actual SCUMM data
@ -179,13 +183,53 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
// handling). // handling).
assert(_game.version >= 5 && _game.heversion == 0); assert(_game.version >= 5 && _game.heversion == 0);
_fileHandle = new ScummFile(); _fileHandle = new ScummFile();
_containerFile = _substResFileName.expandedName; _containerFile = _filenamePattern.pattern;
// We now have to determine the correct _filenamePattern. To do this
// we simply hardcode the possibilites.
const char *p1 = 0, *p2 = 0;
switch (_game.id) {
case GID_INDY4:
p1 = "atlantis.%03d";
break;
case GID_TENTACLE:
p1 = "tentacle.%03d";
p2 = "dottdemo.%03d";
break;
case GID_SAMNMAX:
p1 = "samnmax.%03d";
p2 = "samdemo.%03d";
break;
case GID_FT:
p1 = "ft.la%d";
p2 = "ftdemo.la%d";
break;
case GID_DIG:
p1 = "dig.la%d";
break;
default:
break;
}
// Test which file name to use
_filenamePattern.genMethod = kGenDiskNum;
if (!_fileHandle->open(_containerFile))
error("Couldn't open container file '%s'", _containerFile.c_str());
if ((_filenamePattern.pattern = p1) && _fileHandle->openSubFile(generateFilename(0))) {
// Found regular version
} else if ((_filenamePattern.pattern = p2) && _fileHandle->openSubFile(generateFilename(0))) {
// Found demo
_game.features |= GF_DEMO;
} else
error("Couldn't find known subfile inside container file '%s'", _containerFile.c_str());
_fileHandle->close();
} else { } else {
error("kGenAsIs used with unsupported platform"); error("kGenAsIs used with unsupported platform");
} }
// If a container file is used, we can turn of file name substitution.
_substResFileName.almostGameID = 0;
} else { } else {
// Regular access, no container file involved // Regular access, no container file involved
_fileHandle = new ScummFile(); _fileHandle = new ScummFile();
@ -537,11 +581,6 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
if (_bootParam) if (_bootParam)
_debugMode = true; _debugMode = true;
// Allow the user to override the game name with a custom string.
// This allows some game versions to work which use filenames
// differing from the regular version(s) of that game.
_baseName = ConfMan.hasKey("basename") ? ConfMan.get("basename") : gs.gameid;
_copyProtection = ConfMan.getBool("copy_protection"); _copyProtection = ConfMan.getBool("copy_protection");
if (ConfMan.getBool("demo_mode")) if (ConfMan.getBool("demo_mode"))
_game.features |= GF_DEMO; _game.features |= GF_DEMO;
@ -673,22 +712,22 @@ ScummEngine::~ScummEngine() {
delete _debugger; delete _debugger;
} }
ScummEngine_v4::ScummEngine_v4(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v4::ScummEngine_v4(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v5(syst, gs, md5sum, subst) { : ScummEngine_v5(syst, dr) {
_resourceHeaderSize = 6; _resourceHeaderSize = 6;
} }
ScummEngine_v3::ScummEngine_v3(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v3::ScummEngine_v3(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v4(syst, gs, md5sum, subst) { : ScummEngine_v4(syst, dr) {
} }
ScummEngine_v3old::ScummEngine_v3old(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v3old::ScummEngine_v3old(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v3(syst, gs, md5sum, subst) { : ScummEngine_v3(syst, dr) {
_resourceHeaderSize = 4; _resourceHeaderSize = 4;
} }
ScummEngine_v2::ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v2::ScummEngine_v2(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v3old(syst, gs, md5sum, subst) { : ScummEngine_v3old(syst, dr) {
VAR_SENTENCE_VERB = 0xFF; VAR_SENTENCE_VERB = 0xFF;
VAR_SENTENCE_OBJECT1 = 0xFF; VAR_SENTENCE_OBJECT1 = 0xFF;
@ -701,14 +740,14 @@ ScummEngine_v2::ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5s
VAR_CLICK_OBJECT = 0xFF; VAR_CLICK_OBJECT = 0xFF;
} }
ScummEngine_c64::ScummEngine_c64(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_c64::ScummEngine_c64(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v2(syst, gs, md5sum, subst) { : ScummEngine_v2(syst, dr) {
_currentMode = 0; _currentMode = 0;
} }
ScummEngine_v6::ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v6::ScummEngine_v6(OSystem *syst, const DetectorResult &dr)
: ScummEngine(syst, gs, md5sum, subst) { : ScummEngine(syst, dr) {
_blastObjectQueuePos = 0; _blastObjectQueuePos = 0;
memset(_blastObjectQueue, 0, sizeof(_blastObjectQueue)); memset(_blastObjectQueue, 0, sizeof(_blastObjectQueue));
_blastTextQueuePos = 0; _blastTextQueuePos = 0;
@ -729,8 +768,8 @@ ScummEngine_v6::ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5s
} }
#ifndef DISABLE_HE #ifndef DISABLE_HE
ScummEngine_v70he::ScummEngine_v70he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v70he::ScummEngine_v70he(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v60he(syst, gs, md5sum, subst) { : ScummEngine_v60he(syst, dr) {
if (_game.platform == Common::kPlatformMacintosh && (_game.heversion >= 72 && _game.heversion <= 73)) if (_game.platform == Common::kPlatformMacintosh && (_game.heversion >= 72 && _game.heversion <= 73))
_resExtractor = new MacResExtractor(this); _resExtractor = new MacResExtractor(this);
else else
@ -761,16 +800,16 @@ ScummEngine_v70he::~ScummEngine_v70he() {
free(_storedFlObjects); free(_storedFlObjects);
} }
ScummEngine_v71he::ScummEngine_v71he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v71he::ScummEngine_v71he(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v70he(syst, gs, md5sum, subst) { : ScummEngine_v70he(syst, dr) {
_auxBlocksNum = 0; _auxBlocksNum = 0;
memset(_auxBlocks, 0, sizeof(_auxBlocks)); memset(_auxBlocks, 0, sizeof(_auxBlocks));
_auxEntriesNum = 0; _auxEntriesNum = 0;
memset(_auxEntries, 0, sizeof(_auxEntries)); memset(_auxEntries, 0, sizeof(_auxEntries));
} }
ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v71he(syst, gs, md5sum, subst) { : ScummEngine_v71he(syst, dr) {
VAR_NUM_ROOMS = 0xFF; VAR_NUM_ROOMS = 0xFF;
VAR_NUM_SCRIPTS = 0xFF; VAR_NUM_SCRIPTS = 0xFF;
VAR_NUM_SOUNDS = 0xFF; VAR_NUM_SOUNDS = 0xFF;
@ -780,8 +819,8 @@ ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint
VAR_POLYGONS_ONLY = 0xFF; VAR_POLYGONS_ONLY = 0xFF;
} }
ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v72he(syst, gs, md5sum, subst) { : ScummEngine_v72he(syst, dr) {
_heSndResId = 0; _heSndResId = 0;
_curSndId = 0; _curSndId = 0;
_sndPtrOffs = 0; _sndPtrOffs = 0;
@ -793,8 +832,8 @@ ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint
VAR_COLOR_DEPTH = 0xFF; VAR_COLOR_DEPTH = 0xFF;
} }
ScummEngine_v90he::ScummEngine_v90he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v90he::ScummEngine_v90he(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v80he(syst, gs, md5sum, subst) { : ScummEngine_v80he(syst, dr) {
_sprite = new Sprite(this); _sprite = new Sprite(this);
VAR_NUM_SPRITE_GROUPS = 0xFF; VAR_NUM_SPRITE_GROUPS = 0xFF;
@ -818,8 +857,8 @@ ScummEngine_v90he::~ScummEngine_v90he() {
#endif #endif
#ifndef DISABLE_SCUMM_7_8 #ifndef DISABLE_SCUMM_7_8
ScummEngine_v7::ScummEngine_v7(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v7::ScummEngine_v7(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v6(syst, gs, md5sum, subst) { : ScummEngine_v6(syst, dr) {
_verbCharset = 0; _verbCharset = 0;
_existLanguageFile = false; _existLanguageFile = false;
_languageBuffer = NULL; _languageBuffer = NULL;
@ -832,8 +871,8 @@ ScummEngine_v7::~ScummEngine_v7() {
free(_languageIndex); free(_languageIndex);
} }
ScummEngine_v8::ScummEngine_v8(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst) ScummEngine_v8::ScummEngine_v8(OSystem *syst, const DetectorResult &dr)
: ScummEngine_v7(syst, gs, md5sum, subst) { : ScummEngine_v7(syst, dr) {
_objectIDMap = 0; _objectIDMap = 0;
} }
@ -881,7 +920,6 @@ int ScummEngine::init() {
setupMusic(_game.midi); setupMusic(_game.midi);
// Load localization data, if present // Load localization data, if present
_language = Common::parseLanguage(ConfMan.get("language"));
loadLanguageBundle(); loadLanguageBundle();
// Load CJK font, if present // Load CJK font, if present
@ -1305,19 +1343,10 @@ void ScummEngine_v99he::scummInit() {
_hePalettes = (uint8 *)malloc((_numPalettes + 1) * 1024); _hePalettes = (uint8 *)malloc((_numPalettes + 1) * 1024);
memset(_hePalettes, 0, (_numPalettes + 1) * 1024); memset(_hePalettes, 0, (_numPalettes + 1) * 1024);
byte basename[256];
char buf1[128];
strcpy((char *)basename, _baseName.c_str());
if (_substResFileName.almostGameID != 0) {
generateSubstResFileName((char *)basename, buf1, sizeof(buf1));
strcpy((char *)basename, buf1);
}
// Array 129 is set to base name // Array 129 is set to base name
int len = resStrLen(basename); int len = strlen(_filenamePattern.pattern);
ArrayHeader *ah = defineArray(129, kStringArray, 0, 0, 0, len); ArrayHeader *ah = defineArray(129, kStringArray, 0, 0, 0, len);
memcpy(ah->data, basename, len); memcpy(ah->data, _filenamePattern.pattern, len);
} }
#endif #endif
@ -2015,9 +2044,5 @@ void ScummEngine::errorString(const char *buf1, char *buf2) {
} }
} }
void ScummEngine::generateSubstResFileName(const char *filename, char *buf, int bufsize) {
applySubstResFileName(_substResFileName, filename, buf, bufsize);
}
} // End of namespace Scumm } // End of namespace Scumm

View file

@ -444,7 +444,7 @@ protected:
public: public:
// Constructor / Destructor // Constructor / Destructor
ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst); ScummEngine(OSystem *syst, const DetectorResult &dr);
virtual ~ScummEngine(); virtual ~ScummEngine();
/** Startup function, main loop. */ /** Startup function, main loop. */
@ -473,7 +473,6 @@ public:
// Misc utility functions // Misc utility functions
uint32 _debugFlags; uint32 _debugFlags;
const char *getBaseName() const { return _baseName.c_str(); }
// Cursor/palette // Cursor/palette
void updateCursor(); void updateCursor();
@ -587,9 +586,9 @@ public:
int _roomResource; // FIXME - should be protected but Sound::pauseSounds uses it int _roomResource; // FIXME - should be protected but Sound::pauseSounds uses it
bool _egoPositioned; // Used by Actor::putActor, hence public bool _egoPositioned; // Used by Actor::putActor, hence public
void generateSubstResFileName(const char *filename, char *buf, int bufsize); FilenamePattern _filenamePattern;
SubstResFileNames _substResFileName;
SubstResFileNames _substResFileNameBundle; // Used with Mac bundles Common::String generateFilename(const int room) const;
protected: protected:
int _keyPressed; int _keyPressed;
@ -733,11 +732,10 @@ public:
/** The name of the (macintosh/rescumm style) container file, if any. */ /** The name of the (macintosh/rescumm style) container file, if any. */
Common::String _containerFile; Common::String _containerFile;
bool openFile(BaseScummFile &file, const char *filename, bool resourceFile = false); bool openFile(BaseScummFile &file, const char *filename, bool resourceFile = false); // TODO: Use Common::String
protected: protected:
int _resourceHeaderSize; int _resourceHeaderSize;
Common::String _baseName; // This is the name we use for opening resource files
byte _resourceMapper[128]; byte _resourceMapper[128];
byte *_heV7DiskOffsets; byte *_heV7DiskOffsets;
uint32 *_heV7RoomIntOffsets; uint32 *_heV7RoomIntOffsets;
@ -749,8 +747,8 @@ protected:
void closeRoom(); void closeRoom();
void deleteRoomOffsets(); void deleteRoomOffsets();
virtual void readRoomsOffsets(); virtual void readRoomsOffsets();
void askForDisk(const char *filename, int disknum); void askForDisk(const char *filename, int disknum); // TODO: Use Common::String
bool openResourceFile(const char *filename, byte encByte); bool openResourceFile(const char *filename, byte encByte); // TODO: Use Common::String
void loadPtrToResource(int type, int i, const byte *ptr); void loadPtrToResource(int type, int i, const byte *ptr);
virtual void readResTypeList(int id, const char *name); virtual void readResTypeList(int id, const char *name);

View file

@ -996,7 +996,6 @@ ScummFile *Sound::openSfxFile() {
}; };
char buf[256]; char buf[256];
char buf1[128];
ScummFile *file = new ScummFile(); ScummFile *file = new ScummFile();
_offsetTable = NULL; _offsetTable = NULL;
@ -1004,19 +1003,22 @@ ScummFile *Sound::openSfxFile() {
* That way, you can keep .sou files for multiple games in the * That way, you can keep .sou files for multiple games in the
* same directory */ * same directory */
const char *basename[4] = { 0, 0, 0, 0 }; Common::String basename[2];
basename[0] = _vm->getBaseName();
basename[1] = "monster";
if (_vm->_substResFileName.almostGameID != 0) { const char *ptr = strchr(_vm->_filenamePattern.pattern, '.');
_vm->generateSubstResFileName(basename[0], buf1, sizeof(buf1)); if (ptr) {
basename[2] = buf1; basename[0] = Common::String(_vm->_filenamePattern.pattern, ptr - _vm->_filenamePattern.pattern + 1);
} else {
basename[0] = _vm->_filenamePattern.pattern;
basename[0] += '.';
} }
basename[1] = "monster.";
for (int j = 0; basename[j] && !file->isOpen(); ++j) { for (uint j = 0; j < 2 && !file->isOpen(); ++j) {
for (int i = 0; extensions[i].ext; ++i) { for (int i = 0; extensions[i].ext; ++i) {
sprintf(buf, "%s.%s", basename[j], extensions[i].ext); Common::String tmp(basename[j]);
if (_vm->openFile(*file, buf)) { tmp += extensions[i].ext;
if (_vm->openFile(*file, tmp.c_str())) {
_soundMode = extensions[i].mode; _soundMode = extensions[i].mode;
break; break;
} }
@ -1025,15 +1027,11 @@ ScummFile *Sound::openSfxFile() {
if (!file->isOpen()) { if (!file->isOpen()) {
if ((_vm->_game.heversion <= 61 && _vm->_game.platform == Common::kPlatformMacintosh) || (_vm->_game.heversion >= 70)) { if ((_vm->_game.heversion <= 61 && _vm->_game.platform == Common::kPlatformMacintosh) || (_vm->_game.heversion >= 70)) {
sprintf(buf, "%s.he2", _vm->getBaseName()); strncpy(buf, _vm->generateFilename(2).c_str(), sizeof(buf));
} else { } else {
sprintf(buf, "%s.tlk", _vm->getBaseName()); sprintf(buf, "%s.tlk", _vm->_filenamePattern.pattern);
} }
if (_vm->_substResFileName.almostGameID != 0) {
_vm->generateSubstResFileName(buf, buf1, sizeof(buf1));
strcpy(buf, buf1);
}
if (file->open(buf) && _vm->_game.heversion <= 73) if (file->open(buf) && _vm->_game.heversion <= 73)
file->setEnc(0x69); file->setEnc(0x69);
_soundMode = kVOCMode; _soundMode = kVOCMode;

View file

@ -24,8 +24,8 @@
# that their description in the launcher doesn't start with "Zak McKracken" # that their description in the launcher doesn't start with "Zak McKracken"
# #
maniac Maniac Mansion maniac Maniac Mansion
d831f7c048574dd9d5d85db2a1468099 en C64 - - - d831f7c048574dd9d5d85db2a1468099 en C64 C64 - -
c4a7f7398ac9ae588940f9912ea5fd8f de C64 - - - c4a7f7398ac9ae588940f9912ea5fd8f de C64 C64 - -
7f45ddd6dbfbf8f80c0c0efea4c295bc en DOS V1 V1 - 7f45ddd6dbfbf8f80c0c0efea4c295bc en DOS V1 V1 -
d8d07efcb88f396bee0b402b10c3b1c9 us NES NES - - d8d07efcb88f396bee0b402b10c3b1c9 us NES NES - -
@ -39,49 +39,49 @@ maniac Maniac Mansion
3a5ec90d556d4920976c5578bfbfaf79 de NES NES extracted - 3a5ec90d556d4920976c5578bfbfaf79 de NES NES extracted -
6b5a3fef241e90d4b2e77f1e222773ee se NES NES extracted - 6b5a3fef241e90d4b2e77f1e222773ee se NES NES extracted -
e781230da44a44e2f0770edb2b3b3633 en Amiga - V2 - dhewg, Andrea Petrucci e781230da44a44e2f0770edb2b3b3633 en Amiga V2 V2 - dhewg, Andrea Petrucci
ce7733f185b838e248927c7ba1a04204 fr Amiga - V2 - Tobias Fleischer ce7733f185b838e248927c7ba1a04204 fr Amiga V2 V2 - Tobias Fleischer
9bc548e179cdb0767009401c094d0895 de Amiga - V2 - Norbert Lange 9bc548e179cdb0767009401c094d0895 de Amiga V2 V2 - Norbert Lange
a570381b028972d891052ee1e51dc011 en Atari - V2 - Andreas Bylund a570381b028972d891052ee1e51dc011 en Atari V2 V2 - Andreas Bylund
dd30a53035393baa5a5e222e716559af fr Atari - V2 - Andreas Bylund dd30a53035393baa5a5e222e716559af fr Atari V2 V2 - Andreas Bylund
be83e882b44f2767bc08d4f766ebc347 de Atari - V2 - Joachim Eberhard be83e882b44f2767bc08d4f766ebc347 de Atari V2 V2 - Joachim Eberhard
15240c59d3681ed53f714f8d925cb2d6 es Atari - V2 - VooD 15240c59d3681ed53f714f8d925cb2d6 es Atari V2 V2 - VooD
624cdb93654667c869d204a64af7e57f en DOS - V2 - Kirben, Andrea Petrucci 624cdb93654667c869d204a64af7e57f en DOS V2 V2 - Kirben, Andrea Petrucci
b250d0f9cc83f80ced56fe11a4fb057c en DOS - V2 alt? Andrea Petrucci b250d0f9cc83f80ced56fe11a4fb057c en DOS V2 V2 alt? Andrea Petrucci
114acdc2659a273c220f86ee9edb24c1 fr DOS - V2 - Nicolas Sauz&egrave;de 114acdc2659a273c220f86ee9edb24c1 fr DOS V2 V2 - Nicolas Sauz&egrave;de
99a3699f80b8f776efae592b44b9b991 fr DOS - V2 from DOTT Nicolas Sauz&egrave;de, Andrea Petrucci 99a3699f80b8f776efae592b44b9b991 fr DOS V2 V2 from DOTT Nicolas Sauz&egrave;de, Andrea Petrucci
183d7464902d40d00800e8ee1f04117c de DOS - V2 - 183d7464902d40d00800e8ee1f04117c de DOS V2 V2 -
87f6e8037b7cc996e13474b491a7a98e it DOS - V2 from DOTT Andrea Petrucci 87f6e8037b7cc996e13474b491a7a98e it DOS V2 V2 from DOTT Andrea Petrucci
0d1b69471605201ef2fa9cec1f5f02d2 es DOS - V2 - abnog, Andrea Petrucci 0d1b69471605201ef2fa9cec1f5f02d2 es DOS V2 V2 - abnog, Andrea Petrucci
40564ec47da48a67787d1f9bd043902a en DOS - Demo non-interactive 40564ec47da48a67787d1f9bd043902a en DOS Demo Demo non-interactive
zak Zak McKracken and the Alien Mindbenders zak Zak McKracken and the Alien Mindbenders
55d3987641bf229c83bc729210173383 en C64 - - - 55d3987641bf229c83bc729210173383 en C64 V1 - -
4973bbc3899e3826dbf316e1d7271ec7 de C64 - - - 4973bbc3899e3826dbf316e1d7271ec7 de C64 V1 - -
7020931d5a2be0a49d68e7a1882363e4 en DOS V1 V1 - 7020931d5a2be0a49d68e7a1882363e4 en DOS V1 V1 -
b23f7cd7c304d7dff08e92a96120d5b4 en DOS V1 V1 alt? Andrea Petrucci b23f7cd7c304d7dff08e92a96120d5b4 en DOS V1 V1 alt? Andrea Petrucci
e94c7cc3686fce406d3c91b5eae5a72d en Amiga - V2 - dhweg e94c7cc3686fce406d3c91b5eae5a72d en Amiga V2 V2 - dhweg
91469353f7be1b122fa88d23480a1320 fr Amiga - V2 - Tobias Fleischer 91469353f7be1b122fa88d23480a1320 fr Amiga V2 V2 - Tobias Fleischer
6027e9ca9c35746d95dee2068cec17e5 de Amiga - V2 - Norbert Lange 6027e9ca9c35746d95dee2068cec17e5 de Amiga V2 V2 - Norbert Lange
27b3a4224ad63d5b04627595c1c1a025 it Amiga - V2 - Andrea Petrucci 27b3a4224ad63d5b04627595c1c1a025 it Amiga V2 V2 - Andrea Petrucci
d55eff37c2100f5065cde9de428621fa en Atari - V2 - d55eff37c2100f5065cde9de428621fa en Atari V2 V2 -
613f64f78ea26c7353b2a5940eb61d6a fr Atari - V2 - Andreas Bylund 613f64f78ea26c7353b2a5940eb61d6a fr Atari V2 V2 - Andreas Bylund
ff05c07990061d97647f059c48c1d05a de Atari - V2 - ff05c07990061d97647f059c48c1d05a de Atari V2 V2 -
675d71151e9b5a968c8ce46d9fbf4cbf en DOS - V2 - Kirben 675d71151e9b5a968c8ce46d9fbf4cbf en DOS V2 V2 - Kirben
debe337f73d660e951ece7c1f1c81add en DOS - V2 alt? Andrea Petrucci debe337f73d660e951ece7c1f1c81add en DOS V2 V2 alt? Andrea Petrucci
52a4bae0746a11d7b1e8554e91a6645c fr DOS - V2 - Andrea Petrucci 52a4bae0746a11d7b1e8554e91a6645c fr DOS V2 V2 - Andrea Petrucci
c4787c3e8b5e2dfda90850ee800af00f fr DOS - V2 alt? Qvist c4787c3e8b5e2dfda90850ee800af00f fr DOS V2 V2 alt? Qvist
cdd760228cf1010c2903f37e788ea31c de DOS - V2 - Max Horn cdd760228cf1010c2903f37e788ea31c de DOS V2 V2 - Max Horn
d06fbe28818fef7bfc45c2cdf0c0849d de DOS - V2 from 5.25\" floppies Nicolas Sauz&egrave;de, Andrea Petrucci d06fbe28818fef7bfc45c2cdf0c0849d de DOS V2 V2 from 5.25\" floppies Nicolas Sauz&egrave;de, Andrea Petrucci
1900e501a52fbf55bde6e4196f6d2aa6 it DOS - V2 - Andrea Petrucci 1900e501a52fbf55bde6e4196f6d2aa6 it DOS V2 V2 - Andrea Petrucci
75ba23fff4fd63fa446c02864f2a5a4b it DOS - V2 alt? Antti Leimi, Andrea Petrucci 75ba23fff4fd63fa446c02864f2a5a4b it DOS V2 V2 alt? Antti Leimi, Andrea Petrucci
2d4536a56e01da4b02eb021e7770afa2 en FM-TOWNS FM-TOWNS - - 2d4536a56e01da4b02eb021e7770afa2 en FM-TOWNS FM-TOWNS - -
1ca86e2cf9aaa2068738a1e5ba477e60 jp FM-TOWNS FM-TOWNS - - Andrea Petrucci 1ca86e2cf9aaa2068738a1e5ba477e60 jp FM-TOWNS FM-TOWNS - - Andrea Petrucci
8299d9b8a1b0e7b881bae7a9971dc5e2 en Atari - Demo non-interactive 8299d9b8a1b0e7b881bae7a9971dc5e2 en Atari V2 Demo non-interactive
indy3 Indiana Jones and the Last Crusade indy3 Indiana Jones and the Last Crusade
9c0fee288ad564a7d25ec3e841810d79 en Amiga EGA EGA - dhewg 9c0fee288ad564a7d25ec3e841810d79 en Amiga EGA EGA - dhewg
@ -311,10 +311,10 @@ dig The Dig
cd9c05e755d7bf8e9b9590ad1ebe273e en Mac Demo Demo Mac bundle fingolfin cd9c05e755d7bf8e9b9590ad1ebe273e en Mac Demo Demo Mac bundle fingolfin
comi The Curse of Monkey Island comi The Curse of Monkey Island
fe60d6b5ff51b0553ac59963123b5777 All All - - - fe60d6b5ff51b0553ac59963123b5777 All Windows - - -
861e59ed72a1cd0e6d454f7ee7e2bf3d ru All - - - 861e59ed72a1cd0e6d454f7ee7e2bf3d ru Windows - - -
8fec68383202d38c0d25e9e3b757c5df All All Demo Demo - 8fec68383202d38c0d25e9e3b757c5df All Windows Demo Demo -
baseball Backyard Baseball baseball Backyard Baseball
cf8d13446ec6cb6222287a925fd47c1d en All - - - sev cf8d13446ec6cb6222287a925fd47c1d en All - - - sev