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:
parent
d11f5724f9
commit
0d67640a58
16 changed files with 688 additions and 1391 deletions
1
README
1
README
|
@ -1224,7 +1224,6 @@ An example config file looks as follows:
|
|||
|
||||
The following keywords are recognized:
|
||||
|
||||
basename string
|
||||
path string The path to where a game's data files are
|
||||
read_only bool If true, ScummVM will never try to overwrite
|
||||
the configuration 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,
|
||||
};
|
||||
|
||||
ScummEngine_v5::ScummEngine_v5(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine(syst, dr) {
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
memcpy(_cursorImages[i], default_cursor_images[i], 32);
|
||||
|
|
|
@ -83,7 +83,7 @@ ScummDebugger::ScummDebugger(ScummEngine *s)
|
|||
DVar_Register("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables);
|
||||
|
||||
// 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);
|
||||
|
||||
// Register commands
|
||||
|
|
|
@ -51,7 +51,7 @@ protected:
|
|||
Common::File _hFileTable[17];
|
||||
|
||||
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();
|
||||
|
||||
|
@ -116,7 +116,7 @@ protected:
|
|||
bool _skipProcessActors;
|
||||
|
||||
public:
|
||||
ScummEngine_v70he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v70he(OSystem *syst, const DetectorResult &dr);
|
||||
~ScummEngine_v70he();
|
||||
|
||||
Wiz *_wiz;
|
||||
|
@ -181,7 +181,7 @@ protected:
|
|||
|
||||
class ScummEngine_v71he : public ScummEngine_v70he {
|
||||
public:
|
||||
ScummEngine_v71he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v71he(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
protected:
|
||||
virtual void saveOrLoad(Serializer *s);
|
||||
|
@ -236,7 +236,7 @@ protected:
|
|||
WizParameters _wizParams;
|
||||
|
||||
public:
|
||||
ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v72he(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
virtual void scummInit();
|
||||
|
||||
|
@ -347,7 +347,7 @@ protected:
|
|||
int32 _heSndResId, _curSndId, _sndPtrOffs, _sndTmrOffs;
|
||||
|
||||
public:
|
||||
ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v80he(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
protected:
|
||||
virtual void setupOpcodes();
|
||||
|
@ -420,7 +420,7 @@ protected:
|
|||
int32 _curSpriteGroupId;
|
||||
|
||||
public:
|
||||
ScummEngine_v90he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v90he(OSystem *syst, const DetectorResult &dr);
|
||||
~ScummEngine_v90he();
|
||||
|
||||
virtual void scummInit();
|
||||
|
@ -517,7 +517,7 @@ protected:
|
|||
|
||||
class ScummEngine_v99he : public ScummEngine_v90he {
|
||||
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();
|
||||
|
||||
|
@ -548,7 +548,7 @@ protected:
|
|||
const OpcodeEntryV100he *_opcodesV100he;
|
||||
|
||||
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:
|
||||
virtual void setupOpcodes();
|
||||
|
|
|
@ -42,7 +42,6 @@ namespace Scumm {
|
|||
ResExtractor::ResExtractor(ScummEngine_v70he *scumm)
|
||||
: _vm(scumm) {
|
||||
|
||||
_fileName[0] = 0;
|
||||
memset(_cursorCache, 0, sizeof(_cursorCache));
|
||||
}
|
||||
|
||||
|
@ -159,21 +158,15 @@ int Win32ResExtractor::extractResource_(const char *resType, char *resName, byte
|
|||
fi.memory = NULL;
|
||||
fi.file = new Common::File;
|
||||
|
||||
if (!_fileName[0]) { // We are running for the first time
|
||||
snprintf(_fileName, 256, "%s.he3", _vm->getBaseName());
|
||||
|
||||
if (_vm->_substResFileName.almostGameID != 0) {
|
||||
char buf1[128];
|
||||
_vm->generateSubstResFileName(_fileName, buf1, sizeof(buf1));
|
||||
strcpy(_fileName, buf1);
|
||||
}
|
||||
if (_fileName.empty()) { // We are running for the first time
|
||||
_fileName = _vm->generateFilename(3);
|
||||
}
|
||||
|
||||
|
||||
/* get file size */
|
||||
fi.file->open(_fileName);
|
||||
if (!fi.file->isOpen()) {
|
||||
error("Cannot open file %s", _fileName);
|
||||
error("Cannot open file %s", _fileName.c_str());
|
||||
}
|
||||
|
||||
fi.total_size = fi.file->size();
|
||||
|
@ -1288,24 +1281,22 @@ int MacResExtractor::extractResource(int id, byte **buf) {
|
|||
Common::File in;
|
||||
int size;
|
||||
|
||||
if (!_fileName[0]) // We are running for the first time
|
||||
if (_vm->_substResFileName.almostGameID != 0) {
|
||||
char buf1[128];
|
||||
|
||||
snprintf(buf1, 128, "%s.he3", _vm->getBaseName());
|
||||
_vm->generateSubstResFileName(buf1, _fileName, sizeof(buf1));
|
||||
if (_fileName.empty()) { // We are running for the first time
|
||||
_fileName = _vm->generateFilename(3);
|
||||
|
||||
// Some programs write it as .bin. Try that too
|
||||
if (!in.exists(_fileName)) {
|
||||
strcpy(buf1, _fileName);
|
||||
snprintf(_fileName, 128, "%s.bin", buf1);
|
||||
Common::String tmp(_fileName);
|
||||
|
||||
_fileName += ".bin";
|
||||
|
||||
if (!in.exists(_fileName)) {
|
||||
// And finally check if we have dumped resource fork
|
||||
snprintf(_fileName, 128, "%s.rsrc", buf1);
|
||||
_fileName = tmp;
|
||||
_fileName += ".bin";
|
||||
if (!in.exists(_fileName)) {
|
||||
error("Cannot open file any of files '%s', '%s.bin', '%s.rsrc",
|
||||
buf1, buf1, buf1);
|
||||
tmp.c_str(), tmp.c_str(), tmp.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1313,13 +1304,13 @@ int MacResExtractor::extractResource(int id, byte **buf) {
|
|||
|
||||
in.open(_fileName);
|
||||
if (!in.isOpen()) {
|
||||
error("Cannot open file %s", _fileName);
|
||||
error("Cannot open file %s", _fileName.c_str());
|
||||
}
|
||||
|
||||
// we haven't calculated it
|
||||
if (_resOffset == -1) {
|
||||
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.open(_fileName);
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ public:
|
|||
ResExtractor::CachedCursor *getCachedCursorSlot();
|
||||
|
||||
bool _arg_raw;
|
||||
char _fileName[256];
|
||||
Common::String _fileName;
|
||||
CachedCursor _cursorCache[MAX_CACHED_CURSORS];
|
||||
|
||||
typedef Common::MemoryReadStream MemoryReadStream;
|
||||
|
|
|
@ -161,15 +161,9 @@ void Sound::setOverrideFreq(int freq) {
|
|||
|
||||
void Sound::setupHEMusicFile() {
|
||||
int i, total_size;
|
||||
char buf[32], buf1[128];
|
||||
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) {
|
||||
musicFile.seek(4, SEEK_SET);
|
||||
total_size = musicFile.readUint32BE();
|
||||
|
@ -360,17 +354,11 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {
|
|||
|
||||
if (soundID > _vm->_numSounds) {
|
||||
int music_offs;
|
||||
char buf[32], buf1[128];
|
||||
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) {
|
||||
warning("playHESound: Can't open music file %s", buf);
|
||||
warning("playHESound: Can't open music file %s", buf.c_str());
|
||||
return;
|
||||
}
|
||||
if (!getHEMusicDetails(soundID, music_offs, size)) {
|
||||
|
|
|
@ -50,7 +50,7 @@ protected:
|
|||
byte _cursorHotspots[2 * 4];
|
||||
|
||||
public:
|
||||
ScummEngine_v5(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v5(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
protected:
|
||||
virtual void setupOpcodes();
|
||||
|
@ -193,7 +193,7 @@ protected:
|
|||
*/
|
||||
class ScummEngine_v4 : public ScummEngine_v5 {
|
||||
public:
|
||||
ScummEngine_v4(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v4(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
virtual void scummInit();
|
||||
|
||||
|
@ -212,7 +212,7 @@ protected:
|
|||
*/
|
||||
class ScummEngine_v3 : public ScummEngine_v4 {
|
||||
public:
|
||||
ScummEngine_v3(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v3(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
protected:
|
||||
virtual void readRoomsOffsets();
|
||||
|
@ -224,7 +224,7 @@ protected:
|
|||
*/
|
||||
class ScummEngine_v3old : public ScummEngine_v3 {
|
||||
public:
|
||||
ScummEngine_v3old(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v3old(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
protected:
|
||||
virtual void readResTypeList(int id, const char *name);
|
||||
|
@ -257,7 +257,7 @@ protected:
|
|||
int8 _mouseOverBoxV2;
|
||||
|
||||
public:
|
||||
ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v2(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
virtual void scummInit();
|
||||
|
||||
|
@ -403,7 +403,7 @@ protected:
|
|||
|
||||
int _currentMode;
|
||||
public:
|
||||
ScummEngine_c64(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_c64(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
virtual void scummInit();
|
||||
|
||||
|
@ -555,7 +555,7 @@ protected:
|
|||
|
||||
|
||||
public:
|
||||
ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
|
||||
|
||||
virtual void scummInit();
|
||||
|
||||
|
@ -784,7 +784,7 @@ protected:
|
|||
#ifndef DISABLE_SCUMM_7_8
|
||||
class ScummEngine_v7 : public ScummEngine_v6 {
|
||||
public:
|
||||
ScummEngine_v7(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v7(OSystem *syst, const DetectorResult &dr);
|
||||
~ScummEngine_v7();
|
||||
|
||||
struct LangIndexNode {
|
||||
|
@ -865,7 +865,7 @@ protected:
|
|||
ObjectNameId *_objectIDMap;
|
||||
|
||||
public:
|
||||
ScummEngine_v8(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine_v8(OSystem *syst, const DetectorResult &dr);
|
||||
~ScummEngine_v8();
|
||||
|
||||
protected:
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -42,22 +42,37 @@ struct GameSettings {
|
|||
|
||||
};
|
||||
|
||||
enum GenMethods {
|
||||
kGenMac,
|
||||
kGenMacNoParens,
|
||||
kGenPC,
|
||||
kGenAsIs
|
||||
enum FilenameGenMethod {
|
||||
kGenDiskNum,
|
||||
kGenRoomNum,
|
||||
kGenHEMac,
|
||||
kGenHEMacNoParens,
|
||||
kGenHEPC,
|
||||
kGenUnchanged
|
||||
};
|
||||
|
||||
struct SubstResFileNames {
|
||||
const char *almostGameID;
|
||||
const char *expandedName;
|
||||
GenMethods genMethod;
|
||||
struct FilenamePattern {
|
||||
const char *pattern;
|
||||
FilenameGenMethod 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);
|
||||
int findSubstResFileName(SubstResFileNames &subst, const char *filename, int index);
|
||||
struct DetectorResult {
|
||||
FilenamePattern fp;
|
||||
GameSettings game;
|
||||
Common::Language language;
|
||||
Common::String md5;
|
||||
uint8 md5sum[16];
|
||||
const char *extra;
|
||||
};
|
||||
|
||||
} // End of namespace Scumm
|
||||
|
||||
|
|
|
@ -65,8 +65,6 @@ static bool checkTryMedia(BaseScummFile *handle);
|
|||
/* Open a room */
|
||||
void ScummEngine::openRoom(const int room) {
|
||||
bool result;
|
||||
char buf[128];
|
||||
char buf2[128] = "";
|
||||
byte encByte = 0;
|
||||
|
||||
debugC(DEBUG_GENERAL, "openRoom(%d)", room);
|
||||
|
@ -90,6 +88,9 @@ void ScummEngine::openRoom(const int room) {
|
|||
const int diskNumber = room ? res.roomno[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) {
|
||||
|
||||
if (room_offs != 0 && room != 0 && _game.heversion < 98) {
|
||||
|
@ -97,50 +98,9 @@ void ScummEngine::openRoom(const int room) {
|
|||
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.version <= 3)
|
||||
encByte = 0xFF;
|
||||
|
@ -154,26 +114,8 @@ void ScummEngine::openRoom(const int room) {
|
|||
if (room > 0 && (_game.version == 8))
|
||||
VAR(VAR_CURRENTDISK) = diskNumber;
|
||||
|
||||
// If we have substitute
|
||||
if (_substResFileName.almostGameID != 0 && !(_game.platform == Common::kPlatformNES || _game.platform == Common::kPlatformC64)) {
|
||||
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;
|
||||
}
|
||||
// Try to open the file
|
||||
result = openResourceFile(filename.c_str(), encByte);
|
||||
|
||||
if (result) {
|
||||
if (room == 0)
|
||||
|
@ -185,14 +127,15 @@ void ScummEngine::openRoom(const int room) {
|
|||
if (_fileOffset != 8)
|
||||
return;
|
||||
|
||||
error("Room %d not in %s", room, buf);
|
||||
error("Room %d not in %s", room, filename.c_str());
|
||||
return;
|
||||
}
|
||||
askForDisk(buf, diskNumber);
|
||||
askForDisk(filename.c_str(), diskNumber);
|
||||
}
|
||||
|
||||
do {
|
||||
sprintf(buf, "%.3d.lfl", room);
|
||||
char buf[16];
|
||||
snprintf(buf, sizeof(buf), "%.3d.lfl", room);
|
||||
encByte = 0;
|
||||
if (openResourceFile(buf, encByte))
|
||||
break;
|
||||
|
@ -246,39 +189,11 @@ bool ScummEngine::openFile(BaseScummFile &file, const char *filename, bool resou
|
|||
bool result = false;
|
||||
|
||||
if (!_containerFile.empty()) {
|
||||
char name[128];
|
||||
|
||||
file.close();
|
||||
file.open(_containerFile);
|
||||
assert(file.isOpen());
|
||||
|
||||
strncpy(name, filename, 128);
|
||||
|
||||
// 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);
|
||||
result = file.openSubFile(filename);
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
|
|
|
@ -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!
|
||||
*/
|
||||
|
||||
|
@ -36,7 +36,7 @@ static const MD5Table md5table[] = {
|
|||
{ "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", "HE 60", "", Common::RU_RUS, Common::kPlatformPC },
|
||||
{ "0c45eb4baff0c12c3d9dfa889c8070ab", "pajama3", "", "Demo", Common::DE_DEU, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "0e9b01430e31d9fcd94071d433bbc6bf", "loom", "No Adlib", "EGA", Common::FR_FRA, Common::kPlatformAtariST },
|
||||
{ "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 },
|
||||
{ "0fb73eddfcf584c02ba097984df131ba", "samnmax", "", "CD", Common::DE_DEU, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "11e6e244078ff09b0f3832e35420e0a7", "catalog", "", "Demo", Common::EN_ANY, Common::kPlatformWindows },
|
||||
{ "132bff65e6367c09cc69318ce1b59333", "monkey2", "", "", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "145bd3373574feb668cc2eea2ec6cf86", "balloon", "HE 80", "", Common::RU_RUS, Common::kPlatformWindows },
|
||||
{ "14d48c95b43ddeb983254cf6c43851f1", "freddi4", "", "", Common::NL_NLD, 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 },
|
||||
{ "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkey", "VGA", "VGA", Common::EN_ANY, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "", "Demo", Common::FR_FRA, 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 },
|
||||
{ "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 },
|
||||
{ "19bf6938a94698296bcb0c99c31c91a7", "spyfox2", "", "Demo", Common::EN_GRB, Common::kPlatformWindows },
|
||||
{ "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 },
|
||||
{ "257f8c14d8c584f7ddd601bcb00920c7", "maniac", "NES", "", Common::DE_DEU, Common::kPlatformNES },
|
||||
{ "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 },
|
||||
{ "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", "EGA", "EGA", Common::EN_ANY, 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 },
|
||||
{ "3df6ead57930488bc61e6e41901d0e97", "fbear", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "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 },
|
||||
{ "425205754fa749f4f0b0dd9d09fa45fd", "football", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "48b9f04b348bc5013327753f0d12a144", "loom", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga },
|
||||
{ "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 },
|
||||
{ "4af4a6b248103c1fe9edef619677f540", "puttmoon", "", "Demo", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "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 },
|
||||
{ "51305e929e330e24a75a0351c8f9975e", "freddi2", "HE 99", "Updated", 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 },
|
||||
{ "54a936ad06161ff7bfefcb96200f7bff", "monkey", "VGA", "VGA Demo", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "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 },
|
||||
{ "566165a7338fa11029e7c14d94fa70d0", "freddi", "HE 73", "Demo", Common::EN_ANY, Common::kPlatformWindows },
|
||||
{ "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 },
|
||||
{ "5fbe557049892eb4b709d90916ec97ca", "indy3", "EGA", "EGA", Common::EN_ANY, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "62b8c16b6db226ba95aaa8be73f9885c", "indy3", "EGA", "EGA", Common::ES_ESP, Common::kPlatformAmiga },
|
||||
{ "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 },
|
||||
{ "66fd5ff9a810dfeb6d6bdada18221140", "monkey", "VGA", "VGA", Common::IT_ITA, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "684732efb5799c0f78804c99d8de9aba", "puttputt", "HE 61", "", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "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 },
|
||||
{ "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", "HE 90", "Updated", Common::RU_RUS, 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 },
|
||||
{ "771bc18ec6f93837b839c992b211904b", "monkey", "Demo", "EGA Demo", Common::DE_DEU, Common::kPlatformPC },
|
||||
{ "77f5c9cc0986eb729c1a6b4c8823bbae", "zak", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
|
||||
|
@ -264,15 +264,15 @@ static const MD5Table md5table[] = {
|
|||
{ "7fc6cdb46b4c9d384c52327f4bca6416", "football", "", "", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "810a9da887aefa597b0cf3c77d262897", "BluesABCTime", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "83cedbe26aa8b58988e984e3d34cac8e", "freddi3", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "86c9902b7bec1a17926d4dae85beaa45", "airport", "HE 71", "Demo", Common::EN_ANY, Common::kPlatformWindows },
|
||||
{ "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 },
|
||||
{ "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "", "CD", Common::ES_ESP, Common::kPlatformUnknown },
|
||||
{ "898ce8eb1234a955ef75e87141902bb3", "freddi3", "", "", Common::RU_RUS, Common::kPlatformWindows },
|
||||
|
@ -288,12 +288,12 @@ static const MD5Table md5table[] = {
|
|||
{ "8eb84cee9b429314c7f0bdcf560723eb", "monkey", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
|
||||
{ "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", "", "", Common::HB_ISR, Common::kPlatformPC },
|
||||
{ "90c755e1c9b9b8a4129d37b2259d0655", "chase", "HE 100", "Updated", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "927a764615c7fcdd72f591355e089d8c", "monkey", "No Adlib", "EGA", Common::DE_DEU, Common::kPlatformAtariST },
|
||||
{ "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 },
|
||||
{ "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", "HE 98", "", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "9bda5fee51d2fda5253d02c642016bf4", "spyfox", "HE 98.5", "", Common::NL_NLD, Common::kPlatformWindows },
|
||||
{ "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 },
|
||||
{ "a525c1753c1db5011c00417da37887ef", "PuttTime", "HE 100", "", Common::EN_USA, 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 },
|
||||
{ "a7cacad9c40c4dc9e1812abf6c8af9d5", "puttcircus", "", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "a85856675429fe88051744f755b72f93", "farm", "", "", Common::EN_ANY, Common::kPlatformWindows },
|
||||
|
@ -345,7 +345,7 @@ static const MD5Table md5table[] = {
|
|||
{ "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", "", "Floppy", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "ae94f110a14ce71fc515d5b648827a8f", "tentacle", "", "Floppy", Common::ES_ESP, 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 },
|
||||
{ "b5298a5c15ffbe8b381d51ea4e26d35c", "freddi4", "HE 99", "", Common::DE_DEU, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "bd126753de619a495f9f22adc951c8d5", "monkey2", "", "", Common::IT_ITA, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", "", "", Common::EN_ANY, 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 },
|
||||
{ "c3b22fa4654bb580b20325ebf4174841", "puttzoo", "", "", Common::NL_NLD, Common::kPlatformWindows },
|
||||
{ "c3df37df9d3b481b45f75283a9907c47", "loom", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC },
|
||||
{ "c4787c3e8b5e2dfda90850ee800af00f", "zak", "", "V2", Common::FR_FRA, Common::kPlatformPC },
|
||||
{ "c4a7f7398ac9ae588940f9912ea5fd8f", "maniac", "", "", Common::DE_DEU, Common::kPlatformC64 },
|
||||
{ "c4787c3e8b5e2dfda90850ee800af00f", "zak", "V2", "V2", Common::FR_FRA, Common::kPlatformPC },
|
||||
{ "c4a7f7398ac9ae588940f9912ea5fd8f", "maniac", "C64", "", Common::DE_DEU, Common::kPlatformC64 },
|
||||
{ "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", "", "", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "c5d10e190d4b4d59114b824f2fdbd00e", "loom", "FM-TOWNS", "", Common::EN_ANY, Common::kPlatformFMTowns },
|
||||
{ "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformPC },
|
||||
|
@ -384,16 +384,16 @@ static const MD5Table md5table[] = {
|
|||
{ "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "", "CD", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "cc8ba2b0df2f9c450bcf055fe2711979", "samnmax", "", "Demo", Common::DE_DEU, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", "", "", Common::RU_RUS, Common::kPlatformUnknown },
|
||||
{ "cf4ef315214c7d8cdab6302cdb7e50db", "freddi", "HE 73", "Demo", Common::DE_DEU, Common::kPlatformWindows },
|
||||
{ "cf8d13446ec6cb6222287a925fd47c1d", "baseball", "", "", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "cf8ef3a1fb483c5c4b1c584d1167b2c4", "freddi", "HE 73", "", Common::DE_DEU, 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 },
|
||||
{ "d220d154aafbfa12bd6f3ab1b2dae420", "puttzoo", "", "Demo", Common::DE_DEU, Common::kPlatformMacintosh },
|
||||
{ "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 },
|
||||
{ "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", "HE 71", "", Common::UNK_LANG, Common::kPlatformWindows },
|
||||
{ "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 },
|
||||
{ "d62d248c3df6ec177405e2cb23d923b2", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformPC },
|
||||
{ "d6334a5a9b61afe18c368540fdf522ca", "airport", "", "", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "d6dd0646404768a63e963891a96daadd", "atlantis", "", "Floppy", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "d7ab7cd6105546016e6a0d46fb36b964", "pajama", "HE 100", "Demo", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
{ "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 },
|
||||
{ "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", "NES", "", Common::EN_USA, Common::kPlatformNES },
|
||||
{ "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "", "CD", Common::EN_ANY, Common::kPlatformUnknown },
|
||||
|
@ -417,9 +417,9 @@ static const MD5Table md5table[] = {
|
|||
{ "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", "", "", Common::EN_ANY, Common::kPlatformFMTowns },
|
||||
{ "da6269b18fcb08189c0aa9c95533cce2", "monkey", "CD", "CD", Common::IT_ITA, Common::kPlatformPC },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "df03ee021aa9b81d90cab9c26da07614", "indy3", "EGA", "EGA", Common::IT_ITA, Common::kPlatformAmiga },
|
||||
{ "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 },
|
||||
{ "e6cd81b25ab1453a8a6d3482118c391e", "pass", "", "", Common::EN_ANY, Common::kPlatformPC },
|
||||
{ "e72bb4c2b613db2cf50f89ff6350e70a", "ft", "", "", Common::ES_ESP, Common::kPlatformUnknown },
|
||||
{ "e781230da44a44e2f0770edb2b3b3633", "maniac", "", "V2", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "e94c7cc3686fce406d3c91b5eae5a72d", "zak", "", "V2", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "e781230da44a44e2f0770edb2b3b3633", "maniac", "V2", "V2", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "e94c7cc3686fce406d3c91b5eae5a72d", "zak", "V2", "V2", Common::EN_ANY, Common::kPlatformAmiga },
|
||||
{ "e98b982ceaf9d253d730bde8903233d6", "monkey", "EGA", "EGA", Common::DE_DEU, Common::kPlatformPC },
|
||||
{ "eae95b2b3546d8ba86ae1d397c383253", "dog", "", "", 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 },
|
||||
{ "fce4b8010704b103acfeea9413788f32", "freddi2", "HE 80", "", Common::DE_DEU, Common::kPlatformUnknown },
|
||||
{ "fe381e45117878b1e942cb876b050fd6", "ft", "", "", Common::EN_ANY, Common::kPlatformMacintosh },
|
||||
{ "fe60d6b5ff51b0553ac59963123b5777", "comi", "", "", Common::UNK_LANG, Common::kPlatformUnknown },
|
||||
{ "ff05c07990061d97647f059c48c1d05a", "zak", "", "V2", Common::DE_DEU, Common::kPlatformAtariST },
|
||||
{ "fe60d6b5ff51b0553ac59963123b5777", "comi", "", "", Common::UNK_LANG, Common::kPlatformWindows },
|
||||
{ "ff05c07990061d97647f059c48c1d05a", "zak", "V2", "V2", Common::DE_DEU, Common::kPlatformAtariST },
|
||||
{ 0, 0, 0, 0, Common::UNK_LANG, Common::kPlatformUnknown }
|
||||
};
|
||||
|
|
|
@ -78,10 +78,11 @@ namespace Scumm {
|
|||
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),
|
||||
_game(gs),
|
||||
_substResFileName(subst),
|
||||
_game(dr.game),
|
||||
_filenamePattern(dr.fp),
|
||||
_language(dr.language),
|
||||
_debugger(0),
|
||||
_currentScript(0xFF), // Let debug() work on init stage
|
||||
gdi(this),
|
||||
|
@ -89,10 +90,7 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
|
|||
_pauseDialog(0), _mainMenuDialog(0), _versionDialog(0) {
|
||||
|
||||
// Copy MD5 checksum
|
||||
memcpy(_gameMD5, md5sum, 16);
|
||||
|
||||
// Clean _substResFileNameBundle
|
||||
memset(&_substResFileNameBundle, 0, sizeof(_substResFileNameBundle));
|
||||
memcpy(_gameMD5, dr.md5sum, 16);
|
||||
|
||||
// Add default file directories.
|
||||
if (((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) && (_game.version <= 4)) {
|
||||
|
@ -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.
|
||||
// Note: All of these can also occur in 'extracted' form, in which case they
|
||||
// are treated like any other SCUMM game.
|
||||
if (_substResFileName.almostGameID && _substResFileName.genMethod == kGenAsIs) {
|
||||
if (_filenamePattern.genMethod == kGenUnchanged) {
|
||||
|
||||
if (_game.platform == Common::kPlatformNES) {
|
||||
// We read data directly from NES ROM instead of extracting it with
|
||||
// external tool
|
||||
assert(_game.id == GID_MANIAC);
|
||||
_fileHandle = new ScummNESFile();
|
||||
_containerFile = _substResFileName.expandedName;
|
||||
_containerFile = _filenamePattern.pattern;
|
||||
|
||||
_filenamePattern.pattern = "%.2d.LFL";
|
||||
_filenamePattern.genMethod = kGenRoomNum;
|
||||
} else if (_game.platform == Common::kPlatformC64) {
|
||||
// Read data from C64 disk images.
|
||||
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);
|
||||
_containerFile = tmpBuf1;
|
||||
|
||||
_filenamePattern.pattern = "%.2d.LFL";
|
||||
_filenamePattern.genMethod = kGenRoomNum;
|
||||
} else if (_game.platform == Common::kPlatformMacintosh) {
|
||||
// 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
|
||||
|
@ -179,13 +183,53 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
|
|||
// handling).
|
||||
assert(_game.version >= 5 && _game.heversion == 0);
|
||||
_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 {
|
||||
error("kGenAsIs used with unsupported platform");
|
||||
}
|
||||
|
||||
// If a container file is used, we can turn of file name substitution.
|
||||
_substResFileName.almostGameID = 0;
|
||||
} else {
|
||||
// Regular access, no container file involved
|
||||
_fileHandle = new ScummFile();
|
||||
|
@ -537,11 +581,6 @@ ScummEngine::ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16]
|
|||
if (_bootParam)
|
||||
_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");
|
||||
if (ConfMan.getBool("demo_mode"))
|
||||
_game.features |= GF_DEMO;
|
||||
|
@ -673,22 +712,22 @@ ScummEngine::~ScummEngine() {
|
|||
delete _debugger;
|
||||
}
|
||||
|
||||
ScummEngine_v4::ScummEngine_v4(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v5(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v4::ScummEngine_v4(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v5(syst, dr) {
|
||||
_resourceHeaderSize = 6;
|
||||
}
|
||||
|
||||
ScummEngine_v3::ScummEngine_v3(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v4(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v3::ScummEngine_v3(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v4(syst, dr) {
|
||||
}
|
||||
|
||||
ScummEngine_v3old::ScummEngine_v3old(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v3(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v3old::ScummEngine_v3old(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v3(syst, dr) {
|
||||
_resourceHeaderSize = 4;
|
||||
}
|
||||
|
||||
ScummEngine_v2::ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v3old(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v2::ScummEngine_v2(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v3old(syst, dr) {
|
||||
|
||||
VAR_SENTENCE_VERB = 0xFF;
|
||||
VAR_SENTENCE_OBJECT1 = 0xFF;
|
||||
|
@ -701,14 +740,14 @@ ScummEngine_v2::ScummEngine_v2(OSystem *syst, const GameSettings &gs, uint8 md5s
|
|||
VAR_CLICK_OBJECT = 0xFF;
|
||||
}
|
||||
|
||||
ScummEngine_c64::ScummEngine_c64(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v2(syst, gs, md5sum, subst) {
|
||||
ScummEngine_c64::ScummEngine_c64(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v2(syst, dr) {
|
||||
|
||||
_currentMode = 0;
|
||||
}
|
||||
|
||||
ScummEngine_v6::ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v6::ScummEngine_v6(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine(syst, dr) {
|
||||
_blastObjectQueuePos = 0;
|
||||
memset(_blastObjectQueue, 0, sizeof(_blastObjectQueue));
|
||||
_blastTextQueuePos = 0;
|
||||
|
@ -729,8 +768,8 @@ ScummEngine_v6::ScummEngine_v6(OSystem *syst, const GameSettings &gs, uint8 md5s
|
|||
}
|
||||
|
||||
#ifndef DISABLE_HE
|
||||
ScummEngine_v70he::ScummEngine_v70he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v60he(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v70he::ScummEngine_v70he(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v60he(syst, dr) {
|
||||
if (_game.platform == Common::kPlatformMacintosh && (_game.heversion >= 72 && _game.heversion <= 73))
|
||||
_resExtractor = new MacResExtractor(this);
|
||||
else
|
||||
|
@ -761,16 +800,16 @@ ScummEngine_v70he::~ScummEngine_v70he() {
|
|||
free(_storedFlObjects);
|
||||
}
|
||||
|
||||
ScummEngine_v71he::ScummEngine_v71he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v70he(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v71he::ScummEngine_v71he(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v70he(syst, dr) {
|
||||
_auxBlocksNum = 0;
|
||||
memset(_auxBlocks, 0, sizeof(_auxBlocks));
|
||||
_auxEntriesNum = 0;
|
||||
memset(_auxEntries, 0, sizeof(_auxEntries));
|
||||
}
|
||||
|
||||
ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v71he(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v71he(syst, dr) {
|
||||
VAR_NUM_ROOMS = 0xFF;
|
||||
VAR_NUM_SCRIPTS = 0xFF;
|
||||
VAR_NUM_SOUNDS = 0xFF;
|
||||
|
@ -780,8 +819,8 @@ ScummEngine_v72he::ScummEngine_v72he(OSystem *syst, const GameSettings &gs, uint
|
|||
VAR_POLYGONS_ONLY = 0xFF;
|
||||
}
|
||||
|
||||
ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v72he(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v72he(syst, dr) {
|
||||
_heSndResId = 0;
|
||||
_curSndId = 0;
|
||||
_sndPtrOffs = 0;
|
||||
|
@ -793,8 +832,8 @@ ScummEngine_v80he::ScummEngine_v80he(OSystem *syst, const GameSettings &gs, uint
|
|||
VAR_COLOR_DEPTH = 0xFF;
|
||||
}
|
||||
|
||||
ScummEngine_v90he::ScummEngine_v90he(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v80he(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v90he::ScummEngine_v90he(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v80he(syst, dr) {
|
||||
_sprite = new Sprite(this);
|
||||
|
||||
VAR_NUM_SPRITE_GROUPS = 0xFF;
|
||||
|
@ -818,8 +857,8 @@ ScummEngine_v90he::~ScummEngine_v90he() {
|
|||
#endif
|
||||
|
||||
#ifndef DISABLE_SCUMM_7_8
|
||||
ScummEngine_v7::ScummEngine_v7(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v6(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v7::ScummEngine_v7(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v6(syst, dr) {
|
||||
_verbCharset = 0;
|
||||
_existLanguageFile = false;
|
||||
_languageBuffer = NULL;
|
||||
|
@ -832,8 +871,8 @@ ScummEngine_v7::~ScummEngine_v7() {
|
|||
free(_languageIndex);
|
||||
}
|
||||
|
||||
ScummEngine_v8::ScummEngine_v8(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
|
||||
: ScummEngine_v7(syst, gs, md5sum, subst) {
|
||||
ScummEngine_v8::ScummEngine_v8(OSystem *syst, const DetectorResult &dr)
|
||||
: ScummEngine_v7(syst, dr) {
|
||||
_objectIDMap = 0;
|
||||
}
|
||||
|
||||
|
@ -881,7 +920,6 @@ int ScummEngine::init() {
|
|||
setupMusic(_game.midi);
|
||||
|
||||
// Load localization data, if present
|
||||
_language = Common::parseLanguage(ConfMan.get("language"));
|
||||
loadLanguageBundle();
|
||||
|
||||
// Load CJK font, if present
|
||||
|
@ -1305,19 +1343,10 @@ void ScummEngine_v99he::scummInit() {
|
|||
_hePalettes = (uint8 *)malloc((_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
|
||||
int len = resStrLen(basename);
|
||||
int len = strlen(_filenamePattern.pattern);
|
||||
ArrayHeader *ah = defineArray(129, kStringArray, 0, 0, 0, len);
|
||||
memcpy(ah->data, basename, len);
|
||||
memcpy(ah->data, _filenamePattern.pattern, len);
|
||||
}
|
||||
#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
|
||||
|
|
|
@ -444,7 +444,7 @@ protected:
|
|||
|
||||
public:
|
||||
// Constructor / Destructor
|
||||
ScummEngine(OSystem *syst, const GameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
|
||||
ScummEngine(OSystem *syst, const DetectorResult &dr);
|
||||
virtual ~ScummEngine();
|
||||
|
||||
/** Startup function, main loop. */
|
||||
|
@ -473,7 +473,6 @@ public:
|
|||
|
||||
// Misc utility functions
|
||||
uint32 _debugFlags;
|
||||
const char *getBaseName() const { return _baseName.c_str(); }
|
||||
|
||||
// Cursor/palette
|
||||
void updateCursor();
|
||||
|
@ -587,9 +586,9 @@ public:
|
|||
int _roomResource; // FIXME - should be protected but Sound::pauseSounds uses it
|
||||
bool _egoPositioned; // Used by Actor::putActor, hence public
|
||||
|
||||
void generateSubstResFileName(const char *filename, char *buf, int bufsize);
|
||||
SubstResFileNames _substResFileName;
|
||||
SubstResFileNames _substResFileNameBundle; // Used with Mac bundles
|
||||
FilenamePattern _filenamePattern;
|
||||
|
||||
Common::String generateFilename(const int room) const;
|
||||
|
||||
protected:
|
||||
int _keyPressed;
|
||||
|
@ -733,11 +732,10 @@ public:
|
|||
/** The name of the (macintosh/rescumm style) container file, if any. */
|
||||
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:
|
||||
int _resourceHeaderSize;
|
||||
Common::String _baseName; // This is the name we use for opening resource files
|
||||
byte _resourceMapper[128];
|
||||
byte *_heV7DiskOffsets;
|
||||
uint32 *_heV7RoomIntOffsets;
|
||||
|
@ -749,8 +747,8 @@ protected:
|
|||
void closeRoom();
|
||||
void deleteRoomOffsets();
|
||||
virtual void readRoomsOffsets();
|
||||
void askForDisk(const char *filename, int disknum);
|
||||
bool openResourceFile(const char *filename, byte encByte);
|
||||
void askForDisk(const char *filename, int disknum); // TODO: Use Common::String
|
||||
bool openResourceFile(const char *filename, byte encByte); // TODO: Use Common::String
|
||||
|
||||
void loadPtrToResource(int type, int i, const byte *ptr);
|
||||
virtual void readResTypeList(int id, const char *name);
|
||||
|
|
|
@ -996,7 +996,6 @@ ScummFile *Sound::openSfxFile() {
|
|||
};
|
||||
|
||||
char buf[256];
|
||||
char buf1[128];
|
||||
ScummFile *file = new ScummFile();
|
||||
_offsetTable = NULL;
|
||||
|
||||
|
@ -1004,19 +1003,22 @@ ScummFile *Sound::openSfxFile() {
|
|||
* That way, you can keep .sou files for multiple games in the
|
||||
* same directory */
|
||||
|
||||
const char *basename[4] = { 0, 0, 0, 0 };
|
||||
basename[0] = _vm->getBaseName();
|
||||
basename[1] = "monster";
|
||||
Common::String basename[2];
|
||||
|
||||
if (_vm->_substResFileName.almostGameID != 0) {
|
||||
_vm->generateSubstResFileName(basename[0], buf1, sizeof(buf1));
|
||||
basename[2] = buf1;
|
||||
const char *ptr = strchr(_vm->_filenamePattern.pattern, '.');
|
||||
if (ptr) {
|
||||
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) {
|
||||
sprintf(buf, "%s.%s", basename[j], extensions[i].ext);
|
||||
if (_vm->openFile(*file, buf)) {
|
||||
Common::String tmp(basename[j]);
|
||||
tmp += extensions[i].ext;
|
||||
if (_vm->openFile(*file, tmp.c_str())) {
|
||||
_soundMode = extensions[i].mode;
|
||||
break;
|
||||
}
|
||||
|
@ -1025,15 +1027,11 @@ ScummFile *Sound::openSfxFile() {
|
|||
|
||||
if (!file->isOpen()) {
|
||||
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 {
|
||||
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)
|
||||
file->setEnc(0x69);
|
||||
_soundMode = kVOCMode;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
# that their description in the launcher doesn't start with "Zak McKracken"
|
||||
#
|
||||
maniac Maniac Mansion
|
||||
d831f7c048574dd9d5d85db2a1468099 en C64 - - -
|
||||
c4a7f7398ac9ae588940f9912ea5fd8f de C64 - - -
|
||||
d831f7c048574dd9d5d85db2a1468099 en C64 C64 - -
|
||||
c4a7f7398ac9ae588940f9912ea5fd8f de C64 C64 - -
|
||||
7f45ddd6dbfbf8f80c0c0efea4c295bc en DOS V1 V1 -
|
||||
|
||||
d8d07efcb88f396bee0b402b10c3b1c9 us NES NES - -
|
||||
|
@ -39,49 +39,49 @@ maniac Maniac Mansion
|
|||
3a5ec90d556d4920976c5578bfbfaf79 de NES NES extracted -
|
||||
6b5a3fef241e90d4b2e77f1e222773ee se NES NES extracted -
|
||||
|
||||
e781230da44a44e2f0770edb2b3b3633 en Amiga - V2 - dhewg, Andrea Petrucci
|
||||
ce7733f185b838e248927c7ba1a04204 fr Amiga - V2 - Tobias Fleischer
|
||||
9bc548e179cdb0767009401c094d0895 de Amiga - V2 - Norbert Lange
|
||||
a570381b028972d891052ee1e51dc011 en Atari - V2 - Andreas Bylund
|
||||
dd30a53035393baa5a5e222e716559af fr Atari - V2 - Andreas Bylund
|
||||
be83e882b44f2767bc08d4f766ebc347 de Atari - V2 - Joachim Eberhard
|
||||
15240c59d3681ed53f714f8d925cb2d6 es Atari - V2 - VooD
|
||||
624cdb93654667c869d204a64af7e57f en DOS - V2 - Kirben, Andrea Petrucci
|
||||
b250d0f9cc83f80ced56fe11a4fb057c en DOS - V2 alt? Andrea Petrucci
|
||||
114acdc2659a273c220f86ee9edb24c1 fr DOS - V2 - Nicolas Sauzède
|
||||
99a3699f80b8f776efae592b44b9b991 fr DOS - V2 from DOTT Nicolas Sauzède, Andrea Petrucci
|
||||
183d7464902d40d00800e8ee1f04117c de DOS - V2 -
|
||||
87f6e8037b7cc996e13474b491a7a98e it DOS - V2 from DOTT Andrea Petrucci
|
||||
0d1b69471605201ef2fa9cec1f5f02d2 es DOS - V2 - abnog, Andrea Petrucci
|
||||
e781230da44a44e2f0770edb2b3b3633 en Amiga V2 V2 - dhewg, Andrea Petrucci
|
||||
ce7733f185b838e248927c7ba1a04204 fr Amiga V2 V2 - Tobias Fleischer
|
||||
9bc548e179cdb0767009401c094d0895 de Amiga V2 V2 - Norbert Lange
|
||||
a570381b028972d891052ee1e51dc011 en Atari V2 V2 - Andreas Bylund
|
||||
dd30a53035393baa5a5e222e716559af fr Atari V2 V2 - Andreas Bylund
|
||||
be83e882b44f2767bc08d4f766ebc347 de Atari V2 V2 - Joachim Eberhard
|
||||
15240c59d3681ed53f714f8d925cb2d6 es Atari V2 V2 - VooD
|
||||
624cdb93654667c869d204a64af7e57f en DOS V2 V2 - Kirben, Andrea Petrucci
|
||||
b250d0f9cc83f80ced56fe11a4fb057c en DOS V2 V2 alt? Andrea Petrucci
|
||||
114acdc2659a273c220f86ee9edb24c1 fr DOS V2 V2 - Nicolas Sauzède
|
||||
99a3699f80b8f776efae592b44b9b991 fr DOS V2 V2 from DOTT Nicolas Sauzède, Andrea Petrucci
|
||||
183d7464902d40d00800e8ee1f04117c de DOS V2 V2 -
|
||||
87f6e8037b7cc996e13474b491a7a98e it DOS V2 V2 from DOTT 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
|
||||
55d3987641bf229c83bc729210173383 en C64 - - -
|
||||
4973bbc3899e3826dbf316e1d7271ec7 de C64 - - -
|
||||
55d3987641bf229c83bc729210173383 en C64 V1 - -
|
||||
4973bbc3899e3826dbf316e1d7271ec7 de C64 V1 - -
|
||||
7020931d5a2be0a49d68e7a1882363e4 en DOS V1 V1 -
|
||||
b23f7cd7c304d7dff08e92a96120d5b4 en DOS V1 V1 alt? Andrea Petrucci
|
||||
|
||||
e94c7cc3686fce406d3c91b5eae5a72d en Amiga - V2 - dhweg
|
||||
91469353f7be1b122fa88d23480a1320 fr Amiga - V2 - Tobias Fleischer
|
||||
6027e9ca9c35746d95dee2068cec17e5 de Amiga - V2 - Norbert Lange
|
||||
27b3a4224ad63d5b04627595c1c1a025 it Amiga - V2 - Andrea Petrucci
|
||||
d55eff37c2100f5065cde9de428621fa en Atari - V2 -
|
||||
613f64f78ea26c7353b2a5940eb61d6a fr Atari - V2 - Andreas Bylund
|
||||
ff05c07990061d97647f059c48c1d05a de Atari - V2 -
|
||||
675d71151e9b5a968c8ce46d9fbf4cbf en DOS - V2 - Kirben
|
||||
debe337f73d660e951ece7c1f1c81add en DOS - V2 alt? Andrea Petrucci
|
||||
52a4bae0746a11d7b1e8554e91a6645c fr DOS - V2 - Andrea Petrucci
|
||||
c4787c3e8b5e2dfda90850ee800af00f fr DOS - V2 alt? Qvist
|
||||
cdd760228cf1010c2903f37e788ea31c de DOS - V2 - Max Horn
|
||||
d06fbe28818fef7bfc45c2cdf0c0849d de DOS - V2 from 5.25\" floppies Nicolas Sauzède, Andrea Petrucci
|
||||
1900e501a52fbf55bde6e4196f6d2aa6 it DOS - V2 - Andrea Petrucci
|
||||
75ba23fff4fd63fa446c02864f2a5a4b it DOS - V2 alt? Antti Leimi, Andrea Petrucci
|
||||
e94c7cc3686fce406d3c91b5eae5a72d en Amiga V2 V2 - dhweg
|
||||
91469353f7be1b122fa88d23480a1320 fr Amiga V2 V2 - Tobias Fleischer
|
||||
6027e9ca9c35746d95dee2068cec17e5 de Amiga V2 V2 - Norbert Lange
|
||||
27b3a4224ad63d5b04627595c1c1a025 it Amiga V2 V2 - Andrea Petrucci
|
||||
d55eff37c2100f5065cde9de428621fa en Atari V2 V2 -
|
||||
613f64f78ea26c7353b2a5940eb61d6a fr Atari V2 V2 - Andreas Bylund
|
||||
ff05c07990061d97647f059c48c1d05a de Atari V2 V2 -
|
||||
675d71151e9b5a968c8ce46d9fbf4cbf en DOS V2 V2 - Kirben
|
||||
debe337f73d660e951ece7c1f1c81add en DOS V2 V2 alt? Andrea Petrucci
|
||||
52a4bae0746a11d7b1e8554e91a6645c fr DOS V2 V2 - Andrea Petrucci
|
||||
c4787c3e8b5e2dfda90850ee800af00f fr DOS V2 V2 alt? Qvist
|
||||
cdd760228cf1010c2903f37e788ea31c de DOS V2 V2 - Max Horn
|
||||
d06fbe28818fef7bfc45c2cdf0c0849d de DOS V2 V2 from 5.25\" floppies Nicolas Sauzède, Andrea Petrucci
|
||||
1900e501a52fbf55bde6e4196f6d2aa6 it DOS V2 V2 - Andrea Petrucci
|
||||
75ba23fff4fd63fa446c02864f2a5a4b it DOS V2 V2 alt? Antti Leimi, Andrea Petrucci
|
||||
|
||||
2d4536a56e01da4b02eb021e7770afa2 en FM-TOWNS FM-TOWNS - -
|
||||
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
|
||||
9c0fee288ad564a7d25ec3e841810d79 en Amiga EGA EGA - dhewg
|
||||
|
@ -311,10 +311,10 @@ dig The Dig
|
|||
cd9c05e755d7bf8e9b9590ad1ebe273e en Mac Demo Demo Mac bundle fingolfin
|
||||
|
||||
comi The Curse of Monkey Island
|
||||
fe60d6b5ff51b0553ac59963123b5777 All All - - -
|
||||
861e59ed72a1cd0e6d454f7ee7e2bf3d ru All - - -
|
||||
fe60d6b5ff51b0553ac59963123b5777 All Windows - - -
|
||||
861e59ed72a1cd0e6d454f7ee7e2bf3d ru Windows - - -
|
||||
|
||||
8fec68383202d38c0d25e9e3b757c5df All All Demo Demo -
|
||||
8fec68383202d38c0d25e9e3b757c5df All Windows Demo Demo -
|
||||
|
||||
baseball Backyard Baseball
|
||||
cf8d13446ec6cb6222287a925fd47c1d en All - - - sev
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue