diff options
Diffstat (limited to 'engines/sci')
52 files changed, 397 insertions, 307 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index b1b5f81995..2f69d5caa1 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -255,7 +255,7 @@ void Console::postEnter() { videoDecoder = new RobotDecoder(g_system->getMixer(), _engine->getPlatform() == Common::kPlatformMacintosh); } else if (_videoFile.hasSuffix(".duk")) { duckMode = true; - videoDecoder = new Video::AviDecoder(g_system->getMixer()); + videoDecoder = new Video::AviDecoder(g_system->getMixer()); #endif } else if (_videoFile.hasSuffix(".avi")) { videoDecoder = new Video::AviDecoder(g_system->getMixer()); @@ -895,7 +895,7 @@ bool Console::cmdVerifyScripts(int argc, const char **argv) { return true; } -// Same as in sound/drivers/midi.cpp +// Same as in sound/drivers/midi.cpp uint8 getGmInstrument(const Mt32ToGmMap &Mt32Ins) { if (Mt32Ins.gmInstr == MIDI_MAPPED_TO_RHYTHM) return Mt32Ins.gmRhythmKey + 0x80; @@ -913,7 +913,7 @@ bool Console::cmdShowInstruments(int argc, const char **argv) { MidiPlayer *player = MidiPlayer_Midi_create(doSoundVersion); MidiParser_SCI *parser = new MidiParser_SCI(doSoundVersion, 0); parser->setMidiDriver(player); - + Common::List<ResourceId> *resources = _engine->getResMan()->listResources(kResourceTypeSound); Common::sort(resources->begin(), resources->end()); Common::List<ResourceId>::iterator itr = resources->begin(); @@ -984,7 +984,7 @@ bool Console::cmdShowInstruments(int argc, const char **argv) { if (channel != 15) { // SCI special byte instrument = *channelData++; if (!firstOneShown) - firstOneShown = true; + firstOneShown = true; else DebugPrintf(","); @@ -1577,7 +1577,7 @@ bool Console::cmdPlayVideo(int argc, const char **argv) { Common::String filename = argv[1]; filename.toLowercase(); - if (filename.hasSuffix(".seq") || filename.hasSuffix(".avi") || filename.hasSuffix(".vmd") || + if (filename.hasSuffix(".seq") || filename.hasSuffix(".avi") || filename.hasSuffix(".vmd") || filename.hasSuffix(".rbt") || filename.hasSuffix(".duk")) { _videoFile = filename; _videoFrameDelay = (argc == 2) ? 10 : atoi(argv[2]); @@ -1699,7 +1699,7 @@ bool Console::cmdShowSavedBits(int argc, const char **argv) { return true; } - // Now we _finally_ know these are valid saved bits + // Now we _finally_ know these are valid saved bits Common::Rect rect; byte mask; @@ -1829,7 +1829,7 @@ bool Console::cmdPrintSegmentTable(int argc, const char **argv) { case SEG_TYPE_STRING: DebugPrintf("T SCI32 strings (%d)", (*(StringTable *)mobj).entries_used); break; -#endif +#endif default: DebugPrintf("I Invalid (type = %x)", mobj->getType()); @@ -2954,8 +2954,8 @@ void Console::printKernelCallsFound(int kernelFuncNum, bool showFoundScripts) { uint16 argc2 = opparams[1]; if (kFuncNum == kernelFuncNum) { - DebugPrintf("Called from script %d, object %s, method %s(%d) with %d bytes for arguments\n", - itr->getNumber(), objName, + DebugPrintf("Called from script %d, object %s, method %s(%d) with %d bytes for arguments\n", + itr->getNumber(), objName, _engine->getKernel()->getSelectorName(obj->getFuncSelector(i)).c_str(), i, argc2); } } diff --git a/engines/sci/decompressor.cpp b/engines/sci/decompressor.cpp index 03a06d240d..82af6eca43 100644 --- a/engines/sci/decompressor.cpp +++ b/engines/sci/decompressor.cpp @@ -181,16 +181,27 @@ int DecompressorLZW::unpackLZW(Common::ReadStream *src, byte *dest, uint32 nPack init(src, dest, nPacked, nUnpacked); uint16 token; // The last received value - - uint16 tokenlist[4096]; // pointers to dest[] - uint16 tokenlengthlist[4096]; // char length of each token uint16 tokenlastlength = 0; + uint16 *tokenlist = (uint16 *)malloc(4096 * sizeof(uint16)); // pointers to dest[] + uint16* tokenlengthlist = (uint16 *)malloc(4096 * sizeof(uint16)); // char length of each token + if (!tokenlist || !tokenlengthlist) { + free(tokenlist); + free(tokenlengthlist); + + error("[DecompressorLZW::unpackLZW] Cannot allocate token memory buffers"); + } + while (!isFinished()) { token = getBitsLSB(_numbits); - if (token == 0x101) + if (token == 0x101) { + free(tokenlist); + free(tokenlengthlist); + return 0; // terminator + } + if (token == 0x100) { // reset command _numbits = 9; _endtoken = 0x1FF; @@ -199,6 +210,10 @@ int DecompressorLZW::unpackLZW(Common::ReadStream *src, byte *dest, uint32 nPack if (token > 0xff) { if (token >= _curtoken) { warning("unpackLZW: Bad token %x", token); + + free(tokenlist); + free(tokenlengthlist); + return SCI_ERROR_DECOMPRESSION_ERROR; } tokenlastlength = tokenlengthlist[token] + 1; @@ -231,6 +246,9 @@ int DecompressorLZW::unpackLZW(Common::ReadStream *src, byte *dest, uint32 nPack } } + free(tokenlist); + free(tokenlengthlist); + return _dwWrote == _szUnpacked ? 0 : SCI_ERROR_DECOMPRESSION_ERROR; } @@ -238,12 +256,20 @@ int DecompressorLZW::unpackLZW1(Common::ReadStream *src, byte *dest, uint32 nPac uint32 nUnpacked) { init(src, dest, nPacked, nUnpacked); - byte stak[0x1014]; + byte *stak = (byte *)malloc(0x1014); + unsigned int tokensSize = 0x1004 * sizeof(Tokenlist); + Tokenlist *tokens = (Tokenlist *)malloc(tokensSize); + if (!stak || !tokens) { + free(stak); + free(tokens); + + error("[DecompressorLZW::unpackLZW1] Cannot allocate decompression buffers"); + } + + memset(tokens, 0, tokensSize); + byte lastchar = 0; uint16 stakptr = 0, lastbits = 0; - Tokenlist tokens[0x1004]; - memset(tokens, 0, sizeof(tokens)); - byte decryptstart = 0; uint16 bitstring; @@ -310,6 +336,10 @@ int DecompressorLZW::unpackLZW1(Common::ReadStream *src, byte *dest, uint32 nPac break; } } + + free(stak); + free(tokens); + return _dwWrote == _szUnpacked ? 0 : SCI_ERROR_DECOMPRESSION_ERROR; } diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp index 7bc9699e9b..2285e512bd 100644 --- a/engines/sci/detection.cpp +++ b/engines/sci/detection.cpp @@ -23,6 +23,7 @@ #include "engines/advancedDetector.h" #include "base/plugins.h" #include "common/file.h" +#include "common/ptr.h" #include "common/savefile.h" #include "common/system.h" #include "graphics/thumbnail.h" @@ -224,6 +225,7 @@ static const OldNewIdTableEntry s_oldNewTable[] = { { "emc", "funseeker", SCI_VERSION_NONE }, { "gk", "gk1", SCI_VERSION_NONE }, // gk2 is the same + { "gk2demo", "gk2", SCI_VERSION_NONE }, { "hoyledemo", "hoyle1", SCI_VERSION_NONE }, { "cardgames", "hoyle1", SCI_VERSION_NONE }, { "solitare", "hoyle2", SCI_VERSION_NONE }, @@ -235,7 +237,7 @@ static const OldNewIdTableEntry s_oldNewTable[] = { { "kq4", "kq4sci", SCI_VERSION_NONE }, // kq5 is the same // kq6 is the same - // kq7 is the same + { "kq7cd", "kq7", SCI_VERSION_NONE }, { "mm1", "laurabow", SCI_VERSION_NONE }, { "cb1", "laurabow", SCI_VERSION_NONE }, { "lb2", "laurabow2", SCI_VERSION_NONE }, @@ -323,7 +325,7 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R for (const OldNewIdTableEntry *cur = s_oldNewTable; cur->oldId[0]; ++cur) { if (sierraId == cur->oldId) { - // Distinguish same IDs from the SCI version + // Distinguish same IDs via the SCI version if (cur->version != SCI_VERSION_NONE && cur->version != getSciVersion()) continue; @@ -428,64 +430,57 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, s_fallbackDesc.flags = ADGF_NO_FLAGS; s_fallbackDesc.platform = Common::kPlatformPC; // default to PC platform s_fallbackDesc.gameid = "sci"; + s_fallbackDesc.guioptions = Common::GUIO_NONE; - // First grab all filenames - // TODO: Consider using allFiles instead of fslist - for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { - if (file->isDirectory()) - continue; - - Common::String filename = file->getName(); - filename.toLowercase(); + if (allFiles.contains("resource.map") || allFiles.contains("Data1") + || allFiles.contains("resmap.001") || allFiles.contains("resmap.001")) { + foundResMap = true; + } - if (filename.contains("resource.map") || filename.contains("resmap.00") || filename.contains("Data1")) { - foundResMap = true; + // Determine if we got a CD version and set the CD flag accordingly, by checking for + // resource.aud for SCI1.1 CD games, or audio001.002 for SCI1 CD games. We assume that + // the file should be over 10MB, as it contains all the game speech and is usually + // around 450MB+. The size check is for some floppy game versions like KQ6 floppy, which + // also have a small resource.aud file + if (allFiles.contains("resource.aud") || allFiles.contains("audio001.002")) { + Common::FSNode file = allFiles.contains("resource.aud") ? allFiles["resource.aud"] : allFiles["audio001.002"]; + Common::SeekableReadStream *tmpStream = file.createReadStream(); + if (tmpStream->size() > 10 * 1024 * 1024) { + // We got a CD version, so set the CD flag accordingly + s_fallbackDesc.flags |= ADGF_CD; } + delete tmpStream; + } - // Determine if we got a CD version and set the CD flag accordingly, by checking for - // resource.aud for SCI1.1 CD games, or audio001.002 for SCI1 CD games. We assume that - // the file should be over 10MB, as it contains all the game speech and is usually - // around 450MB+. The size check is for some floppy game versions like KQ6 floppy, which - // also have a small resource.aud file - if (filename.contains("resource.aud") || filename.contains("audio001.002")) { - Common::SeekableReadStream *tmpStream = file->createReadStream(); - if (tmpStream->size() > 10 * 1024 * 1024) { - // We got a CD version, so set the CD flag accordingly - s_fallbackDesc.flags |= ADGF_CD; - s_fallbackDesc.extra = "CD"; - } - delete tmpStream; - } + if (allFiles.contains("resource.000") || allFiles.contains("resource.001") + || allFiles.contains("ressci.000") || allFiles.contains("ressci.001")) + foundRes000 = true; - if (filename.contains("resource.000") || filename.contains("resource.001") - || filename.contains("ressci.000") || filename.contains("ressci.001")) - foundRes000 = true; + // Data1 contains both map and volume for SCI1.1+ Mac games + if (allFiles.contains("Data1")) { + foundResMap = foundRes000 = true; + s_fallbackDesc.platform = Common::kPlatformMacintosh; + } - // Data1 contains both map and volume for SCI1.1+ Mac games - if (filename.contains("Data1")) { - foundResMap = foundRes000 = true; - s_fallbackDesc.platform = Common::kPlatformMacintosh; - } + // Determine the game platform + // The existence of any of these files indicates an Amiga game + if (allFiles.contains("9.pat") || allFiles.contains("spal") || + allFiles.contains("patch.005") || allFiles.contains("bank.001")) + s_fallbackDesc.platform = Common::kPlatformAmiga; - // Determine the game platform - // The existence of any of these files indicates an Amiga game - if (filename.contains("9.pat") || filename.contains("spal") || - filename.contains("patch.005") || filename.contains("bank.001")) - s_fallbackDesc.platform = Common::kPlatformAmiga; + // The existence of 7.pat or patch.200 indicates a Mac game + if (allFiles.contains("7.pat") || allFiles.contains("patch.200")) + s_fallbackDesc.platform = Common::kPlatformMacintosh; - // The existence of 7.pat or patch.200 indicates a Mac game - if (filename.contains("7.pat") || filename.contains("patch.200")) - s_fallbackDesc.platform = Common::kPlatformMacintosh; + // The data files for Atari ST versions are the same as their DOS counterparts - // The data files for Atari ST versions are the same as their DOS counterparts - } // If these files aren't found, it can't be SCI if (!foundResMap && !foundRes000) { return 0; } - ResourceManager *resMan = new ResourceManager(); + Common::ScopedPtr<ResourceManager> resMan(new ResourceManager()); assert(resMan); resMan->addAppropriateSources(fslist); resMan->init(true); @@ -495,7 +490,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, // Is SCI32 compiled in? If not, and this is a SCI32 game, // stop here if (getSciVersion() >= SCI_VERSION_2) { - delete resMan; return (const ADGameDescription *)&s_fallbackDesc; } #endif @@ -506,7 +500,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, // Can't be SCI (or unsupported SCI views). Pinball Creep by sierra also uses resource.map/resource.000 files // but doesnt share sci format at all, if we dont return 0 here we will detect this game as SCI if (gameViews == kViewUnknown) { - delete resMan; return 0; } @@ -519,7 +512,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, // If we don't have a game id, the game is not SCI if (sierraGameId.empty()) { - delete resMan; return 0; } @@ -558,24 +550,43 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, } - // Fill in extras field + // Fill in "extra" field + + // Is this an EGA version that might have a VGA pendant? Then we want + // to mark it as such in the "extra" field. + const bool markAsEGA = (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga + && getSciVersion() > SCI_VERSION_1_EGA_ONLY); + + const bool isDemo = (s_fallbackDesc.flags & ADGF_DEMO); + const bool isCD = (s_fallbackDesc.flags & ADGF_CD); + + if (!isCD) + s_fallbackDesc.guioptions |= Common::GUIO_NOSPEECH; if (gameId.hasSuffix("sci")) { s_fallbackDesc.extra = "SCI"; // Differentiate EGA versions from the VGA ones, where needed - if (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga) + if (markAsEGA) s_fallbackDesc.extra = "SCI/EGA"; + + // Mark as demo. + // Note: This overwrites the 'EGA' info, if it was previously set. + if (isDemo) + s_fallbackDesc.extra = "SCI/Demo"; } else { - if (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga) + if (markAsEGA) s_fallbackDesc.extra = "EGA"; - } - - // Add "demo" to the description for demos - if (s_fallbackDesc.flags & ADGF_DEMO) - s_fallbackDesc.extra = (gameId.hasSuffix("sci")) ? "SCI/Demo" : "Demo"; - delete resMan; + // Set "CD" and "Demo" as appropriate. + // Note: This overwrites the 'EGA' info, if it was previously set. + if (isDemo && isCD) + s_fallbackDesc.extra = "CD Demo"; + else if (isDemo) + s_fallbackDesc.extra = "Demo"; + else if (isCD) + s_fallbackDesc.extra = "CD"; + } return (const ADGameDescription *)&s_fallbackDesc; } diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index def3879945..3b18a1f68d 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -60,7 +60,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH }, - // Castle of Dr. Brain - German Amiga (from www.back2roots.org, also includes english language) + // Castle of Dr. Brain - German Amiga (from www.back2roots.org, also includes English language) // Executable scanning reports "1.005.001" // SCI interpreter version 1.000.510 {"castlebrain", "", { @@ -72,6 +72,16 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::DE_DEU, Common::kPlatformAmiga, ADGF_ADDENGLISH, GUIO_NOSPEECH }, + // Castle of Dr. Brain Macintosh (from omer_mor, bug report #3328251) + {"castlebrain", "", { + {"resource.map", 0, "75cb06a94d2e0641295edd043f26f3a8", 2763}, + {"resource.000", 0, "27ec5fa09cd12a7fd16e86d96a2ed245", 476566}, + {"resource.001", 0, "7f7da982f5cd868e1e608cd4f6515656", 400521}, + {"resource.002", 0, "e1a6b6f1060f60be9dcb6d28ad7a2a20", 1168310}, + {"resource.003", 0, "6c3d1bb26ad532c94046bc9ac49b5ff4", 891295}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformMacintosh, 0, GUIO_NOSPEECH }, + // Castle of Dr. Brain - English DOS Non-Interactive Demo // SCI interpreter version 1.000.005 {"castlebrain", "Demo", { @@ -617,7 +627,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS Floppy (supplied my markcoolio in bug report #2723777) // SCI interpreter version 2.000.000 @@ -625,7 +635,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "65e8c14092e4c9b3b3538b7602c8c5ec", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS Floppy // SCI interpreter version 2.000.000, VERSION file reports "1.0\nGabriel Knight\n11/22/10:33 pm\n\x1A" @@ -633,7 +643,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ef41df08cf2c1f680216cdbeed0f8311", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - German DOS Floppy (supplied my markcoolio in bug report #2723775) // SCI interpreter version 2.000.000 @@ -641,7 +651,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ad6508b0296b25c07b1f58828dc33696", 10789}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13077029}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -649,7 +659,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - English Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -657,7 +667,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - German DOS CD (from Tobis87) // SCI interpreter version 2.000.000 @@ -665,7 +675,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a7d3e55114c65647310373cb390815ba", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - Spanish DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -673,7 +683,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::ES_ESP, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - French DOS CD (from Hkz) // VERSION file reports "1.000.000, May 3, 1994" @@ -681,7 +691,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "55f909ba93a2515042a08d8a2da8414e", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13325145}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - German Windows CD (from Tobis87) // SCI interpreter version 2.000.000 @@ -689,7 +699,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a7d3e55114c65647310373cb390815ba", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - Spanish Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -697,7 +707,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - English Macintosh {"gk1", "", { @@ -706,7 +716,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"Data3", 0, "f25068b408b09275d8b698866462f578", 3677599}, {"Data4", 0, "1cceebbe411b26c860a74f91c337fdf3", 3230086}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight 2 - English Windows Non-Interactive Demo // Executable scanning reports "2.100.002" @@ -714,7 +724,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0effce11c4908f4b91838741716c83d", 1351}, {"resource.000", 0, "d04cfc7f04b6f74d13025378be49ec2b", 4640330}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - English DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.1" @@ -732,7 +742,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "ce9359037277b7d7976da185c2fa0aad", 2977}, {"ressci.006", 0, "8e44e03890205a7be12f45aaba9644b4", 60659424}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - French DOS (6-CDs Sierra Originals reedition) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -750,7 +760,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "11b2e722170b8c93fdaa5428e2c7676f", 3001}, {"ressci.006", 0, "4037d941aec39d2e654e20960429aefc", 60568486}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - English Macintosh @@ -763,7 +773,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"Data4", 0, "8b843c62eb53136a855d6e0087e3cb0d", 5889553}, {"Data5", 0, "f9fcf9ab2eb13b2125c33a1cda03a093", 14349984}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 @@ -1446,7 +1456,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195}, {"resource.map", 0, "40ccafb2195301504eba2e4f4f2c7f3d", 18925}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English Windows (from the King's Quest Collection) // Executable scanning reports "2.100.002", VERSION file reports "1.4" @@ -1454,7 +1464,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2be9ab94429c721af8e05c507e048a15", 18697}, {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 203882535}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English DOS (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1462,7 +1472,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English Windows (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1470,7 +1480,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - German Windows (supplied by markcoolio in bug report #2727402) // SCI interpreter version 2.100.002 @@ -1478,7 +1488,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "838b9ff132bd6962026fee832e8a7ddb", 18697}, {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - Spanish DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "2.00" @@ -1486,7 +1496,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0b62693cbe87e3aaca3e8655a437f27f", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English DOS Non-Interactive Demo // SCI interpreter version 2.100.002 @@ -1494,7 +1504,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "b44f774108d63faa1d021101221c5a54", 1690}, {"resource.000", 0, "d9659d2cf0c269c6a9dc776707f5bea0", 2433827}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI32 @@ -1660,6 +1670,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Larry 1 VGA Remake - English Macintosh (from omer_mor, bug report #3328262) + {"lsl1sci", "SCI", { + {"resource.map", 0, "6395e7f7881e37e39d81ff5175a35f6f", 3237}, + {"resource.000", 0, "5933df4ea688584d6f59fdea5a9404f8", 989066}, + {"resource.001", 0, "aa6f153f70f1e32d1bde465fff08eecf", 1137418}, + {"resource.002", 0, "b22c616aa789ebef990290c7ffd86548", 1097477}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformMacintosh, 0, GUIO_NOSPEECH }, + // Larry 1 VGA Remake - English DOS Non-Interactive Demo // SCI interpreter version 1.000.084 {"lsl1sci", "SCI/Demo", { @@ -1923,6 +1942,20 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Larry 5 - English Macintosh (from omer_mor, bug report #3328257) + {"lsl5", "", { + {"resource.map", 0, "f12439da78b9878e16436661deb83f84", 6525}, + {"resource.000", 0, "f2537473213d70e7f4fc82e988ab90ca", 702403}, + {"resource.001", 0, "db4a1381d88028876a99303bfaaba893", 704679}, + {"resource.002", 0, "e86aeb27711f4a673e06ec32cfc84125", 1125854}, + {"resource.003", 0, "13fd4942bb818f9acd2970d66fca6509", 854733}, + {"resource.004", 0, "999f407c9f38f937d4b8c4230ff5bb38", 1046644}, + {"resource.005", 0, "0cc8d35a744031c772ca7cd21ae95273", 1008293}, + {"resource.006", 0, "dda27ce00682aa76198dac124bbbe334", 1110043}, + {"resource.007", 0, "ac443fae1285fb359bf2b2bc6a7301ae", 989801}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformMacintosh, 0, GUIO_NOSPEECH }, + // Larry 5 - German DOS (from Tobis87) // SCI interpreter version T.A00.196 {"lsl5", "", { @@ -2087,7 +2120,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0c0804434ea62278dd15032b1947426c", 8872}, {"resource.000", 0, "9a9f4870504444cda863dd14d077a680", 18520872}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 6 - German DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2095,7 +2128,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "badfdf446ffed569a310d2c63a249421", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18534274}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 6 - French DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2103,7 +2136,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "d184e9aa4f2d4b5670ddb3669db82cda", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18538987}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - English DOS Demo (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2111,7 +2144,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "5cc6159688b2dc03790a67c90ccc67f9", 10195878}, {"resmap.000", 0, "6a2b2811eef82e87cde91cf1de845af8", 2695}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #ifdef ENABLE_SCI3_GAMES // Larry 7 - English DOS CD (from spookypeanut) @@ -2120,7 +2153,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188}, {"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - German DOS (from Tobis87) // SCI interpreter version 3.000.000 @@ -2128,7 +2161,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "c11e6bfcfc2f2d05da47e5a7df3e9b1a", 8188}, {"ressci.000", 0, "a8c6817bb94f332ff498a71c8b47f893", 66971724}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Larry 7 - French DOS (provided by richiefs in bug report #2670691) // SCI interpreter version 3.000.000 @@ -2136,7 +2169,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "4407849fd52fe3efb0c30fba60cd5cd4", 8206}, {"ressci.000", 0, "dc37c3055fffbefb494ff22b145d377b", 66964472}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Larry 7 - Italian DOS CD (from glorifindel) // SCI interpreter version 3.000.000 @@ -2144,7 +2177,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9852a97141f789413f29bf956052acdb", 8212}, {"ressci.000", 0, "440b9fed89590abb4e4386ed6f948ee2", 67140181}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - Spanish DOS (from the Leisure Suit Larry Collection) // Executable scanning reports "3.000.000", VERSION file reports "1.0s" @@ -2152,7 +2185,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "8f3d603e1acc834a5d598b30cdfc93f3", 8188}, {"ressci.000", 0, "32792f9bc1bf3633a88b382bb3f6e40d", 67071418}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // Lighthouse - English Windows Demo (from jvprat) @@ -2161,7 +2194,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "543124606352bfa5e07696ddf2a669be", 64}, {"resource.000", 0, "5d7714416b612463d750fb9c5690c859", 28952}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #ifdef ENABLE_SCI3_GAMES // Lighthouse - English Windows Demo @@ -2170,7 +2203,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "3bdee7a16926975a4729f75cf6b80a92", 1525}, {"ressci.000", 0, "3c585827fa4a82f4c04a56a0bc52ccee", 11494351}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Lighthouse - English DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2180,7 +2213,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "c68db5333f152fea6ca2dfc75cad8b34", 7573}, {"ressci.002", 0, "175468431a979b9f317c294ce3bc1430", 94628315}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Lighthouse - Spanish DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2190,7 +2223,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "e7dc85884a2417e2eff9de0c63dd65fa", 7630}, {"ressci.002", 0, "3c8d627c555b0e3e4f1d9955bc0f0df4", 94631127}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI3_GAMES #endif // ENABLE_SCI32 @@ -2307,7 +2340,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "5159a1578c4306bfe070a3e4d8c2e1d3", 4741}, {"resource.000", 0, "1926925c95d82f0999590e93b02887c5", 15150768}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Mixed-Up Mother Goose Deluxe - Multilingual Windows CD (English/French/German/Spanish) // Executable scanning reports "2.100.002" @@ -2315,7 +2348,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "ef611af561898dcfea87846919ebf3eb", 4969}, {"ressci.000", 0, "227685bc59d90821978d330713e44a7a", 17205800}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // Ms. Astro Chicken - English DOS @@ -2345,15 +2378,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.007", 0, "afbd16ea77869a720afa1c5371de107d", 7972}, //{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 25859038}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, - + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, + // Phantasmagoria - English DOS Demo // Executable scanning reports "2.100.002" {"phantasmagoria", "Demo", { {"resmap.001", 0, "416138651ea828219ca454cae18341a3", 11518}, {"ressci.001", 0, "3aae6559aa1df273bc542d5ac6330d75", 65844612}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria - English DOS/Windows (GOG version) - ressci.* merged in ressci.000 // Windows executable scanning reports "2.100.002" - "Sep 19 1995 15:09:43" @@ -2364,7 +2397,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "cd5967f9b9586e3380645961c0765be3", 116822037}, {"resmap.000", 0, "3cafc1c6a53945c1f3babbfd6380c64c", 16468}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria - English Macintosh // NOTE: This only contains disc 1 files (as well as the two persistent files: @@ -2380,7 +2413,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { // Data8-12 are empty {"Data13", 0, "6d2c450fca19a69b5af74ed5b03c0a17", 14923328}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, #ifdef ENABLE_SCI3_GAMES // Phantasmagoria 2 - English Windows (from jvprat) @@ -2397,7 +2430,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "8bd5ceeedcbe16dfe55d1b90dcd4be84", 1942}, {"ressci.005", 0, "05f9fe2bee749659acb3cd2c90252fc5", 67905112}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria 2 - English DOS (GOG version) - ressci.* merged in ressci.000 // Executable scanning reports "3.000.000" - "Dec 07 1996 09:29:03" @@ -2407,7 +2440,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "c54f26d9f43f908151263254b6d97053", 108134481}, {"resmap.000", 0, "de154a223a9ef4ea7358b76adc38ef5b", 2956}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI3_GAMES #endif // ENABLE_SCI32 @@ -2614,7 +2647,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "379dfe80ed6bd16c47e4b950c4722eac", 11374}, {"resource.000", 0, "fd316a09b628b7032248139003369022", 18841068}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Police Quest 4 - English DOS // SCI interpreter version 2.000.000 (a guess?) @@ -2622,7 +2655,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aed9643158ccf01b71f359db33137f82", 9895}, {"resource.000", 0, "da383857b3be1e4514daeba2524359e0", 15141432}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest 4 - French DOS (supplied by abevi in bug report #2612718) // SCI interpreter version 2.000.000 @@ -2630,7 +2663,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "008030846edcc7c5c7a812c7f4ae4ceb", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730153}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest 4 - German DOS (supplied by markcoolio in bug report #2723840) // SCI interpreter version 2.000.000 (a guess?) @@ -2638,7 +2671,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2393ee728ab930b2762cb5889f9b5aff", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730155}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest: SWAT - English DOS/Windows Demo (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "0.001.200" @@ -2646,7 +2679,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8c96733ef94c21526792f7ca4e3f2120", 1648}, {"resource.000", 0, "d8892f1b8c56c8f7704325460f49b300", 3676175}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest: SWAT - English DOS (from GOG.com) // Executable scanning reports "2.100.002", VERSION file reports "1.0c" @@ -2654,7 +2687,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "1c2563fee189885e29d9348f37306d94", 12175}, {"ressci.000", 0, "b2e1826ca81ce2e7e764587f5a14eee9", 127149181}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Police Quest: SWAT - English Windows (from the Police Quest Collection) // Executable scanning reports "2.100.002", VERSION file reports "1.0c" @@ -2669,7 +2702,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.004", 0, "4228038906f041623e65789500b22285", 6835}, {"ressci.004", 0, "b7e619e6ecf62fe65d5116a3a422e5f0", 46223872}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // Quest for Glory 1 / Hero's Quest - English DOS 3.5" Floppy (supplied by merkur in bug report #2718784) @@ -2980,7 +3013,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "685bdb1ed47bbbb0e5e25db392da83ce", 9301}, {"resource.000", 0, "f64fd6aa3977939a86ff30783dd677e1", 11004993}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 1.1 Floppy - English DOS (supplied by abevi in bug report #2612718) // SCI interpreter version 2.000.000 @@ -2988,7 +3021,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "d10a4cc177d2091d744e2ad8c049b0ae", 9295}, {"resource.000", 0, "f64fd6aa3977939a86ff30783dd677e1", 11003589}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 1.1 Floppy - German DOS (supplied by markcool in bug report #2723850) // Executable scanning reports "2.000.000", VERSION file reports "1.1" @@ -2996,7 +3029,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "9e0abba8746f40565bc7eb5720522ecd", 9301}, {"resource.000", 0, "57f22cdc54eeb35fce1f26b31b5c3ee1", 11076197}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 CD - English DOS/Windows (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -3004,7 +3037,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aba367f2102e81782d961b14fbe3d630", 10246}, {"resource.000", 0, "263dce4aa34c49d3ad29bec889007b1c", 11571394}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // RAMA - English DOS/Windows Demo // Executable scanning reports "2.100.002", VERSION file reports "000.000.008" @@ -3012,7 +3045,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.001", 0, "775304e9b2a545156be4d94209550094", 1393}, {"ressci.001", 0, "259437fd75fdf51e8207fda8c01fa4fd", 2334384}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, #ifdef ENABLE_SCI3_GAMES // RAMA - English Windows (from jvprat) @@ -3025,7 +3058,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "31ef4c0621711585d031f0ae81707251", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6860492}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // RAMA - English Windows (from Quietust, in bug report #2850645) {"rama", "", { @@ -3036,7 +3069,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "48841e4b84ef1b98b48d43566fda9e13", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6870356}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // RAMA - Italian Windows CD (from glorifindel) // SCI interpreter version 3.000.000 (a guess?) @@ -3044,7 +3077,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.001", 0, "2a68edd064e5e4937b5e9c74b38f2082", 70611091}, {"resmap.001", 0, "70ba2ff04a2b7fb2c52420ba7fbd47c2", 8338}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI3_GAMES // Shivers - English Windows (from jvprat) @@ -3053,14 +3086,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "f2ead37749ed8f6535a2445a7d05a0cc", 46525}, {"ressci.000", 0, "4294c6d7510935f2e0a52e302073c951", 262654836}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // Shivers - German Windows (from Tobis87) {"shivers", "", { {"resmap.000", 0, "f483d0a1f78334c18052e92785c3086e", 46537}, {"ressci.000", 0, "6751b144671e2deed919eb9d284b07eb", 262390692}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // Shivers - English Windows Demo // Executable scanning reports "2.100.002" @@ -3068,7 +3101,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "d9e0bc5eddefcbe47f528760085d8927", 1186}, {"ressci.000", 0, "3a93c6340b54e07e65d0e5583354d186", 10505469}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, // Shivers 2 doesn't contain SCI scripts. The whole game logic has // been reimplemented from SCI in native code placed in DLL files. @@ -3086,7 +3119,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "d8659188b84beaef076bd869837cd530", 634}, {"ressci.000", 0, "7fbac0807a044c9543e8ac376d200e59", 4925003}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, // Shivers 2 - English Windows (from abevi) // VERSION.TXT Version 1.0 (3/25/97) @@ -3094,7 +3127,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.001", 0, "a79d03d6eb75be0a79324f14e3d2ace4", 95346793}, {"resmap.001", 0, "a4804d436d90c4ec2e46b537f5e954db", 6268}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif @@ -3117,6 +3150,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + + // Slater & Charlie Go Camping - English DOS/Windows (Sierra Originals) + {"slater", "", { + {"resource.000", 0, "d7b4cc8e2c0b3a4768f8dfb5de27f206", 2256126}, + {"resource.map", 0, "21f85414124dc23e54544a5536dc35cd", 4044}, + {"resource.msg", 0, "c44f51fb955eae266fecf360ebcd5ad2", 1132}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Space Quest 1 VGA Remake - English Amiga (from www.back2roots.org) // SCI interpreter version 1.000.510 (just a guess) {"sq1sci", "SCI", { @@ -3479,7 +3521,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { // Space Quest 4 - English Macintosh // Executable scanning reports "x.yyy.zzz" - // VERSION file reports "1.148" + // VERSION file reports "1.148" {"sq4", "", { {"resource.map", 0, "6ffc6f76c4127d140759a512ab9a07be", 6042}, {"resource.000", 0, "6a538b389705232cf9b2d7de2cf9c0a7", 224833}, @@ -3572,7 +3614,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "6dddfa3a8f3a3a513ec9dfdfae955005", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - English DOS/Win3.11 CD ver 1.11 (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -3580,7 +3622,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0615d6e4e10e37ae42e6a2a95aaf145", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - French DOS/Win3.11 CD (from French magazine Joystick - September 1997) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -3588,7 +3630,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "3c831625931d5079b73ae8c275f52c95", 10534}, {"resource.000", 0, "4195ca940f759424f62b90e262cc1737", 40932397}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - German DOS (from Tobis87, updated info from markcoolio in bug report #2723884) // SCI interpreter version 2.100.002 (just a guess) @@ -3596,7 +3638,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "664d797415484f85c90b1b45aedc7686", 10534}, {"resource.000", 0, "ba87ba91e5bdabb4169dd0df75777722", 40933685}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - English DOS/Win3.11 Interactive Demo (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -3604,7 +3646,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "368f07b07433db3f819fa3fa0e5efee5", 2572}, {"resource.000", 0, "ab12724e078dea34b624e0d2a38dcd7c", 2272050}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI32 // The Island of Dr. Brain - English DOS CD (from jvprat) @@ -3638,7 +3680,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9a3e172cde9963d0a969f26469318cec", 3403}, {"ressci.000", 0, "db3e290481c35c3224e9602e71e4a1f1", 5073868}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - English Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3646,7 +3688,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - Spanish Windows (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -3655,7 +3697,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, // TODO: depend on one of the patches? AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - French Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3663,7 +3705,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - German Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3671,7 +3713,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - Italian Windows CD (from glorifindel) // SCI interpreter version 2.100.002 (just a guess) @@ -3679,7 +3721,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // SCI Fanmade Games diff --git a/engines/sci/engine/features.h b/engines/sci/engine/features.h index 07ba626d15..4592c5be9c 100644 --- a/engines/sci/engine/features.h +++ b/engines/sci/engine/features.h @@ -75,7 +75,7 @@ public: * @return Message function type, SCI_VERSION_1_LATE / SCI_VERSION_1_1 */ SciVersion detectMessageFunctionType(); - + #ifdef ENABLE_SCI32 /** * Autodetects the kernel functions used in SCI2.1 diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 68b1601580..ff3c67c84b 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -272,7 +272,7 @@ private: // Kernel-related lists Common::StringArray _selectorNames; Common::StringArray _kernelNames; - + const Common::String _invalid; }; diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index 31ef64d109..0c5d4e680d 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -558,16 +558,16 @@ static SciKernelMapEntry s_kernelMap[] = { // SetWindowsOption is used to set Windows specific options, like for example the title bar visibility of // the game window in Phantasmagoria 2. We ignore these settings completely. { MAP_EMPTY(SetWindowsOption), SIG_EVERYWHERE, "ii", NULL, NULL }, - + // Used by the Windows version of Phantasmagoria 1 to get the video speed setting. This is called after - // kGetConfig and overrides the setting obtained by it. It is a dummy function in the DOS Version. We can + // kGetConfig and overrides the setting obtained by it. It is a dummy function in the DOS Version. We can // just use GetConfig and mark this one as empty, like the DOS version does. { MAP_EMPTY(GetSierraProfileInt), SIG_EVERYWHERE, "(.*)", NULL, NULL }, // Unused / debug SCI2.1 unused functions, always mapped to kDummy // The debug functions are called from the inbuilt debugger or polygon - // editor in SCI2.1 games. Related objects are: PEditor, EditablePolygon, + // editor in SCI2.1 games. Related objects are: PEditor, EditablePolygon, // aeDisplayClass and scalerCode { MAP_DUMMY(FindSelector), SIG_EVERYWHERE, "(.*)", NULL, NULL }, { MAP_DUMMY(FindClass), SIG_EVERYWHERE, "(.*)", NULL, NULL }, diff --git a/engines/sci/engine/kevent.cpp b/engines/sci/engine/kevent.cpp index 2cd6b198de..df3b3efd57 100644 --- a/engines/sci/engine/kevent.cpp +++ b/engines/sci/engine/kevent.cpp @@ -194,7 +194,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) { // Wait a bit here, so that the CPU isn't maxed out when the game // is waiting for user input (e.g. when showing text boxes) - bug // #3037874. Make sure that we're not delaying while the game is - // benchmarking, as that will affect the final benchmarked result - + // benchmarking, as that will affect the final benchmarked result - // check bugs #3058865 and #3127824 if (s->_gameIsBenchmarking) { // Game is benchmarking, don't add a delay diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index e1e52215d2..1bd6754ca5 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -208,7 +208,7 @@ reg_t kFClose(EngineState *s, int argc, reg_t *argv) { reg_t kFPuts(EngineState *s, int argc, reg_t *argv) { int handle = argv[0].toUint16(); Common::String data = s->_segMan->getString(argv[1]); - + FileHandle *f = getFileFromHandle(s, handle); if (f) f->_out->write(data.c_str(), data.size()); @@ -812,7 +812,7 @@ reg_t kFileIOReadRaw(EngineState *s, int argc, reg_t *argv) { int bytesRead = 0; char *buf = new char[size]; debugC(kDebugLevelFile, "kFileIO(readRaw): %d, %d", handle, size); - + FileHandle *f = getFileFromHandle(s, handle); if (f) { bytesRead = f->_in->read(buf, size); @@ -910,7 +910,7 @@ reg_t kFileIOSeek(EngineState *s, int argc, reg_t *argv) { int offset = argv[1].toUint16(); int whence = argv[2].toUint16(); debugC(kDebugLevelFile, "kFileIO(seek): %d, %d, %d", handle, offset, whence); - + FileHandle *f = getFileFromHandle(s, handle); if (f) diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 6c96266922..36de767464 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -151,7 +151,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) { case 2: pos.y = argv[1].toSint16(); pos.x = argv[0].toSint16(); - + g_sci->_gfxCursor->kernelSetPos(pos); break; case 4: { @@ -192,7 +192,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) { break; case 10: // Freddy pharkas, when using the whiskey glass to read the prescription (bug #3034973) - g_sci->_gfxCursor->kernelSetZoomZone(argv[0].toUint16(), + g_sci->_gfxCursor->kernelSetZoomZone(argv[0].toUint16(), Common::Rect(argv[1].toUint16(), argv[2].toUint16(), argv[3].toUint16(), argv[4].toUint16()), argv[5].toUint16(), argv[6].toUint16(), argv[7].toUint16(), argv[8].toUint16(), argv[9].toUint16()); @@ -428,7 +428,7 @@ reg_t kCanBeHere(EngineState *s, int argc, reg_t *argv) { reg_t kCantBeHere(EngineState *s, int argc, reg_t *argv) { reg_t curObject = argv[0]; reg_t listReference = (argc > 1) ? argv[1] : NULL_REG; - + reg_t canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference); return canBeHere; } @@ -1279,7 +1279,7 @@ reg_t kCantBeHere32(EngineState *s, int argc, reg_t *argv) { // TODO // reg_t curObject = argv[0]; // reg_t listReference = (argc > 1) ? argv[1] : NULL_REG; - + return NULL_REG; } @@ -1642,8 +1642,8 @@ reg_t kScrollWindow(EngineState *s, int argc, reg_t *argv) { reg_t kSetFontRes(EngineState *s, int argc, reg_t *argv) { // TODO: This defines the resolution that the fonts are supposed to be displayed // in. Currently, this is only used for showing high-res fonts in GK1 Mac, but - // should be extended to handle other font resolutions such as those - + // should be extended to handle other font resolutions such as those + int xResolution = argv[0].toUint16(); //int yResolution = argv[1].toUint16(); diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index daed248db1..e6837242e4 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -75,11 +75,11 @@ reg_t kGameIsRestarting(EngineState *s, int argc, reg_t *argv) { } break; case GID_SQ4: - // In SQ4 (floppy and CD) the sequel police appear way too quickly in + // In SQ4 (floppy and CD) the sequel police appear way too quickly in // the Skate-o-rama rooms, resulting in all sorts of timer issues, like // #3109139 (which occurs because a police officer instantly teleports // just before Roger exits and shoots him). We throttle these scenes a - // bit more, in order to prevent timer bugs related to the sequel police + // bit more, in order to prevent timer bugs related to the sequel police if (s->currentRoomNumber() == 405 || s->currentRoomNumber() == 406 || s->currentRoomNumber() == 410 || s->currentRoomNumber() == 411) { s->_throttleTrigger = true; @@ -186,7 +186,7 @@ reg_t kSetDebug(EngineState *s, int argc, reg_t *argv) { if (g_sci->getGameId() != GID_GK1) { debug("Debug mode activated"); - + g_sci->getDebugger()->attach(); } diff --git a/engines/sci/engine/kmovement.cpp b/engines/sci/engine/kmovement.cpp index 31715f19d3..14f7db47a0 100644 --- a/engines/sci/engine/kmovement.cpp +++ b/engines/sci/engine/kmovement.cpp @@ -239,7 +239,7 @@ reg_t kInitBresen(EngineState *s, int argc, reg_t *argv) { client_step--; if (!client_step) - error("kInitBresen failed"); + error("kInitBresen failed"); client_xStep--; } @@ -440,7 +440,7 @@ reg_t kDoAvoider(EngineState *s, int argc, reg_t *argv) { invokeSelector(s, clientLooper, SELECTOR(doit), argc, argv, 2, params); } s->r_acc = SIGNAL_REG; - + } else { // is blocked if (avoiderHeading == -1) diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index 8904a48978..375aeaa06b 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -1110,7 +1110,7 @@ static Polygon *convert_polygon(EngineState *s, reg_t polygon) { // Make sure that we have enough points if (pointList.maxSize < size * POLY_POINT_SIZE) { warning("convert_polygon: Not enough memory allocated for polygon points. " - "Expected %d, got %d. Skipping polygon", + "Expected %d, got %d. Skipping polygon", size * POLY_POINT_SIZE, pointList.maxSize); return NULL; } @@ -1202,7 +1202,7 @@ static PathfindingState *convert_polygon_set(EngineState *s, reg_t poly_list, Co change_polygons_opt_0(pf_s); Common::Point *new_start = fixup_start_point(pf_s, start); - + if (!new_start) { warning("AvoidPath: Couldn't fixup start position for pathfinding"); delete pf_s; @@ -1210,7 +1210,7 @@ static PathfindingState *convert_polygon_set(EngineState *s, reg_t poly_list, Co } Common::Point *new_end = fixup_end_point(pf_s, end); - + if (!new_end) { warning("AvoidPath: Couldn't fixup end position for pathfinding"); delete new_start; diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp index d83254b2c4..93c1fffe3c 100644 --- a/engines/sci/engine/kscripts.cpp +++ b/engines/sci/engine/kscripts.cpp @@ -163,7 +163,7 @@ reg_t kClone(EngineState *s, int argc, reg_t *argv) { // extend the internal storage size. if (infoSelector & kInfoFlagClone) parentObj = s->_segMan->getObject(parentAddr); - + *cloneObj = *parentObj; // Mark as clone diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp index c3c10bd2a2..b383f88840 100644 --- a/engines/sci/engine/kstring.cpp +++ b/engines/sci/engine/kstring.cpp @@ -238,14 +238,14 @@ reg_t kFormat(EngineState *s, int argc, reg_t *argv) { /* int writelength; -- unused atm */ - if (xfer && (isdigit(xfer) || xfer == '-' || xfer == '=')) { + if (xfer && (isdigit(static_cast<unsigned char>(xfer)) || xfer == '-' || xfer == '=')) { char *destp; if (xfer == '0') fillchar = '0'; else if (xfer == '=') align = ALIGN_CENTER; - else if (isdigit(xfer) || (xfer == '-')) + else if (isdigit(static_cast<unsigned char>(xfer)) || (xfer == '-')) source--; // Go to start of length argument str_leng = strtol(source, &destp, 10); @@ -336,8 +336,9 @@ reg_t kFormat(EngineState *s, int argc, reg_t *argv) { if (align >= 0) while (str_leng-- > 1) *target++ = ' '; /* Format into the text */ - - *target++ = arguments[paramindex++]; + char argchar = arguments[paramindex++]; + if (argchar) + *target++ = argchar; mode = 0; } break; @@ -427,7 +428,7 @@ reg_t kGetFarText(EngineState *s, int argc, reg_t *argv) { } seeker = (char *)textres->data; - + // The second parameter (counter) determines the number of the string // inside the text resource. while (counter--) { @@ -715,7 +716,7 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { // triggers an assert when doing string2[i + index2]. for (uint16 i = 0; i < count; i++) string1->setValue(i + index1, string2[i + index2]); - + return strAddress; } case 7: { // Cmp @@ -730,6 +731,10 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { case 8: { // Dup const char *rawString = 0; uint32 size = 0; + reg_t stringHandle; + // We allocate the new string first because if the StringTable needs to + // grow, our rawString pointer will be invalidated + SciString *dupString = s->_segMan->allocateString(&stringHandle); if (argv[1].segment == s->_segMan->getStringSegmentId()) { SciString *string = s->_segMan->lookupString(argv[1]); @@ -741,8 +746,6 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { size = string.size() + 1; } - reg_t stringHandle; - SciString *dupString = s->_segMan->allocateString(&stringHandle); dupString->setSize(size); for (uint32 i = 0; i < size; i++) @@ -781,14 +784,14 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { return NULL_REG; case 15: { // upper Common::String string = s->_segMan->getString(argv[1]); - + string.toUppercase(); s->_segMan->strcpy(argv[1], string.c_str()); return NULL_REG; } case 16: { // lower Common::String string = s->_segMan->getString(argv[1]); - + string.toLowercase(); s->_segMan->strcpy(argv[1], string.c_str()); return NULL_REG; diff --git a/engines/sci/engine/kvideo.cpp b/engines/sci/engine/kvideo.cpp index 9a60f39c85..6d810d516c 100644 --- a/engines/sci/engine/kvideo.cpp +++ b/engines/sci/engine/kvideo.cpp @@ -65,7 +65,7 @@ void playVideo(Video::VideoDecoder *videoDecoder, VideoState videoState) { scaleBuffer = new byte[width * height * bytesPerPixel]; } - uint16 x, y; + uint16 x, y; // Sanity check... if (videoState.x > 0 && videoState.y > 0 && isVMD) { @@ -94,7 +94,7 @@ void playVideo(Video::VideoDecoder *videoDecoder, VideoState videoState) { if (frame) { if (scaleBuffer) { - // TODO: Probably should do aspect ratio correction in e.g. GK1 Windows + // TODO: Probably should do aspect ratio correction in e.g. GK1 Windows g_sci->_gfxScreen->scale2x((byte *)frame->pixels, scaleBuffer, videoDecoder->getWidth(), videoDecoder->getHeight(), bytesPerPixel); g_system->copyRectToScreen(scaleBuffer, pitch, x, y, width, height); } else { @@ -130,7 +130,7 @@ reg_t kShowMovie(EngineState *s, int argc, reg_t *argv) { uint16 screenWidth = g_system->getWidth(); uint16 screenHeight = g_system->getHeight(); - + Video::VideoDecoder *videoDecoder = 0; if (argv[0].segment != 0) { diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp index f09f18298a..a1854a2723 100644 --- a/engines/sci/engine/object.cpp +++ b/engines/sci/engine/object.cpp @@ -259,13 +259,13 @@ void Object::initSelectorsSci3(const byte *buf) { // two selectors are always reserved (because their storage // space is used by the typeMask). // We don't know beforehand how many methods and properties - // there are, so we count them first. + // there are, so we count them first. for (int groupNr = 0; groupNr < groups; ++groupNr) { byte groupLocation = groupInfo[groupNr]; const byte *seeker = selectorBase + groupLocation * 32 * 2; if (groupLocation != 0) { - // This object actually has selectors belonging to this group + // This object actually has selectors belonging to this group int typeMask = READ_SCI11ENDIAN_UINT32(seeker); for (int bit = 2; bit < 32; ++bit) { @@ -277,7 +277,7 @@ void Object::initSelectorsSci3(const byte *buf) { } else { // Undefined selector } - + } } } @@ -296,7 +296,7 @@ void Object::initSelectorsSci3(const byte *buf) { const byte *seeker = selectorBase + groupLocation * 32 * 2; if (groupLocation != 0) { - // This object actually has selectors belonging to this group + // This object actually has selectors belonging to this group int typeMask = READ_SCI11ENDIAN_UINT32(seeker); int groupBaseId = groupNr * 32; @@ -323,7 +323,7 @@ void Object::initSelectorsSci3(const byte *buf) { } else { // Undefined selector } - + } } } diff --git a/engines/sci/engine/object.h b/engines/sci/engine/object.h index 80c8e9e83d..0ca16b48a2 100644 --- a/engines/sci/engine/object.h +++ b/engines/sci/engine/object.h @@ -79,7 +79,7 @@ public: } reg_t getSpeciesSelector() const { - if (getSciVersion() <= SCI_VERSION_2_1) + if (getSciVersion() <= SCI_VERSION_2_1) return _variables[_offset]; else // SCI3 return _speciesSelectorSci3; @@ -93,7 +93,7 @@ public: } reg_t getSuperClassSelector() const { - if (getSciVersion() <= SCI_VERSION_2_1) + if (getSciVersion() <= SCI_VERSION_2_1) return _variables[_offset + 1]; else // SCI3 return _superClassPosSci3; diff --git a/engines/sci/engine/savegame.h b/engines/sci/engine/savegame.h index fbd77eb076..1d899b0d37 100644 --- a/engines/sci/engine/savegame.h +++ b/engines/sci/engine/savegame.h @@ -51,7 +51,7 @@ struct EngineState; * 19 - exportsAreWide * 18 - SCI32 arrays/strings * 17 - sound - * + * */ enum { diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index a38aa06bc4..01e1afe5ea 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -160,7 +160,7 @@ void Script::load(ResourceManager *resMan) { _numExports = 0; _synonyms = 0; _numSynonyms = 0; - + if (getSciVersion() <= SCI_VERSION_1_LATE) { _exportTable = (const uint16 *)findBlockSCI0(SCI_OBJ_EXPORTS); if (_exportTable) { diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index 2d3d8f6155..a714980a35 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -209,7 +209,7 @@ const byte ecoquest2SignatureEcorderTutorial[] = { const uint16 ecoquest2PatchEcorderTutorial[] = { 0x31, 0x23, // bnt [next state] (save 1 byte) - // The parameter count below should be 7, but we're out of bytes + // The parameter count below should be 7, but we're out of bytes // to patch! A workaround has been added because of this 0x78, // push1 (parameter count) //0x39, 0x07, // pushi 07 (parameter count) @@ -221,7 +221,7 @@ const uint16 ecoquest2PatchEcorderTutorial[] = { 0x78, // push1 (visual screen) 0x39, 0x17, // pushi 17 (color) 0x43, 0x6c, 0x0e, // call kGraph - // The parameter count below should be 5, but we're out of bytes + // The parameter count below should be 5, but we're out of bytes // to patch! A workaround has been added because of this 0x78, // push1 (parameter count) //0x39, 0x05, // pushi 05 (parameter count) @@ -697,7 +697,7 @@ const SciScriptSignature laurabow2Signatures[] = { // =========================================================================== // Mother Goose SCI1/SCI1.1 -// MG::replay somewhat calculates the savedgame-id used when saving again +// MG::replay somewhat calculates the savedgame-id used when saving again // this doesn't work right and we remove the code completely. // We set the savedgame-id directly right after restoring in kRestoreGame. const byte mothergoose256SignatureReplay[] = { @@ -1034,7 +1034,7 @@ const uint16 sq1vgaPatchEgoShowsCard[] = { // script, description, magic DWORD, adjust const SciScriptSignature sq1vgaSignatures[] = { - { 58, "Sarien armory droid zapping ego first time", 1, PATCH_MAGICDWORD( 0x72, 0x88, 0x15, 0x36 ), -70, + { 58, "Sarien armory droid zapping ego first time", 1, PATCH_MAGICDWORD( 0x72, 0x88, 0x15, 0x36 ), -70, sq1vgaSignatureEgoShowsCard, sq1vgaPatchEgoShowsCard }, SCI_SIGNATUREENTRY_TERMINATOR}; @@ -1087,7 +1087,7 @@ void Script::applyPatch(const uint16 *patch, byte *scriptData, const uint32 scri } patch++; patchWord = *patch; - } + } } // will return -1 if no match was found, otherwise an offset to the start of the signature match diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 957930784b..3a18fbc68f 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -72,7 +72,7 @@ reg_t disassemble(EngineState *s, reg_t pos, bool printBWTag, bool printBytecode const byte *scr; int scr_size; reg_t retval = make_reg(pos.segment, pos.offset + 1); - uint16 param_value = 0xffff; // Suppress GCC warning by setting default value, chose value as invalid to getKernelName etc. + uint16 param_value = 0xffff; // Suppress GCC warning by setting default value, chose value as invalid to getKernelName etc. int i = 0; Kernel *kernel = g_sci->getKernel(); @@ -617,8 +617,8 @@ void debugSelectorCall(reg_t send_obj, Selector selector, int argc, StackPtr arg Console *con = g_sci->getSciDebugger(); #ifdef VM_DEBUG_SEND - debugN("Send to %04x:%04x (%s), selector %04x (%s):", PRINT_REG(send_obj), - s->_segMan->getObjectName(send_obj), selector, + debugN("Send to %04x:%04x (%s), selector %04x (%s):", PRINT_REG(send_obj), + s->_segMan->getObjectName(send_obj), selector, g_sci->getKernel()->getSelectorName(selector).c_str()); #endif // VM_DEBUG_SEND @@ -644,18 +644,18 @@ void debugSelectorCall(reg_t send_obj, Selector selector, int argc, StackPtr arg reg_t selectorValue = *varp.getPointer(segMan); if (!argc && (activeBreakpointTypes & BREAK_SELECTORREAD)) { if (g_sci->checkSelectorBreakpoint(BREAK_SELECTORREAD, send_obj, selector)) - con->DebugPrintf("Read from selector (%s:%s): %04x:%04x\n", + con->DebugPrintf("Read from selector (%s:%s): %04x:%04x\n", objectName, selectorName, PRINT_REG(selectorValue)); } else if (argc && (activeBreakpointTypes & BREAK_SELECTORWRITE)) { if (g_sci->checkSelectorBreakpoint(BREAK_SELECTORWRITE, send_obj, selector)) - con->DebugPrintf("Write to selector (%s:%s): change %04x:%04x to %04x:%04x\n", + con->DebugPrintf("Write to selector (%s:%s): change %04x:%04x to %04x:%04x\n", objectName, selectorName, PRINT_REG(selectorValue), PRINT_REG(argp[1])); } if (argc > 1) - debug(kDebugLevelScripts, "Write to selector (%s:%s): change %04x:%04x to %04x:%04x, argc == %d\n", + debug(kDebugLevelScripts, "Write to selector (%s:%s): change %04x:%04x to %04x:%04x, argc == %d\n", objectName, selectorName, PRINT_REG(selectorValue), PRINT_REG(argp[1]), argc); } diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index 5d8a81a7f1..3f11d6ff49 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -255,7 +255,7 @@ SegmentRef ArrayTable::dereference(reg_t pointer) { return ret; } -void ArrayTable::freeAtAddress(SegManager *segMan, reg_t sub_addr) { +void ArrayTable::freeAtAddress(SegManager *segMan, reg_t sub_addr) { _table[sub_addr.offset].destroy(); freeEntry(sub_addr.offset); } diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp index 2edbea9676..c2f857f319 100644 --- a/engines/sci/engine/selector.cpp +++ b/engines/sci/engine/selector.cpp @@ -212,7 +212,7 @@ void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t *address.getPointer(segMan) = value; } -void invokeSelector(EngineState *s, reg_t object, int selectorId, +void invokeSelector(EngineState *s, reg_t object, int selectorId, int k_argc, StackPtr k_argp, int argc, const reg_t *argv) { int i; int framesize = 2 + 1 * argc; diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h index f13c13e00c..085dd6e832 100644 --- a/engines/sci/engine/selector.h +++ b/engines/sci/engine/selector.h @@ -185,7 +185,7 @@ void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t /** * Invokes a selector from an object. */ -void invokeSelector(EngineState *s, reg_t object, int selectorId, +void invokeSelector(EngineState *s, reg_t object, int selectorId, int k_argc, StackPtr k_argp, int argc = 0, const reg_t *argv = 0); } // End of namespace Sci diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index 3328f80de1..4ea9f72054 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -144,7 +144,7 @@ void EngineState::wait(int16 ticks) { void EngineState::initGlobals() { Script *script_000 = _segMan->getScript(1); - + if (!script_000->_localsBlock) error("Script 0 has no locals block"); @@ -331,7 +331,7 @@ void SciEngine::checkVocabularySwitch() { uint16 parserLanguage = 1; if (SELECTOR(parseLang) != -1) parserLanguage = readSelectorValue(_gamestate->_segMan, _gameObjectAddress, SELECTOR(parseLang)); - + if (parserLanguage != _vocabularyLanguage) { delete _vocabulary; _vocabulary = new Vocabulary(_resMan, parserLanguage > 1 ? true : false); diff --git a/engines/sci/engine/static_selectors.cpp b/engines/sci/engine/static_selectors.cpp index 6526eff2db..cca4c47be8 100644 --- a/engines/sci/engine/static_selectors.cpp +++ b/engines/sci/engine/static_selectors.cpp @@ -96,7 +96,7 @@ static const char * const sci2Selectors[] = { "center", "all", "show", "textLeft", "textTop", // 115 - 119 "textRight", "textBottom", "borderColor", "titleFore", "titleBack", // 120 - 124 "titleFont", "dimmed", "frameOut", "lastKey", "magnifier", // 125 - 129 - "magPower", "mirrored", "pitch", "roll", "yaw", // 130 - 134 + "magPower", "mirrored", "pitch", "roll", "yaw", // 130 - 134 "left", "right", "top", "bottom", "numLines" // 135 - 139 }; #endif @@ -265,8 +265,8 @@ void Kernel::findSpecificSelectors(Common::StringArray &selectorNames) { if (targetClass) { if (classReferences[i].selectorType == kSelectorMethod) { if (targetClass->getMethodCount() < selectorOffset + 1) - error("The %s class has less than %d methods (%d)", - classReferences[i].className, selectorOffset + 1, + error("The %s class has less than %d methods (%d)", + classReferences[i].className, selectorOffset + 1, targetClass->getMethodCount()); targetSelectorPos = targetClass->getFuncSelector(selectorOffset); @@ -275,7 +275,7 @@ void Kernel::findSpecificSelectors(Common::StringArray &selectorNames) { selectorOffset += (getSciVersion() <= SCI_VERSION_1_LATE) ? 3 : 8; if (targetClass->getVarCount() < selectorOffset + 1) - error("The %s class has less than %d variables (%d)", + error("The %s class has less than %d variables (%d)", classReferences[i].className, selectorOffset + 1, targetClass->getVarCount()); diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 1517355365..274b0bbbc9 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -42,7 +42,7 @@ const reg_t NULL_REG = {0, 0}; const reg_t SIGNAL_REG = {0, SIGNAL_OFFSET}; const reg_t TRUE_REG = {0, 1}; //#define VM_DEBUG_SEND -// Enable the define below to have the VM abort on cases where a conditional +// Enable the define below to have the VM abort on cases where a conditional // statement is followed by an unconditional jump (which will most likely lead // to an infinite loop). Aids in detecting script bugs such as #3040722. //#define ABORT_ON_INFINITE_LOOP @@ -130,14 +130,14 @@ static reg_t read_var(EngineState *s, int type, int index) { if (solution.type == WORKAROUND_NONE) { #ifdef RELEASE_BUILD // If we are running an official ScummVM release -> fake 0 in unknown cases - warning("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", + warning("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", index, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); s->variables[type][index] = NULL_REG; break; #else - error("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", + error("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", index, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); #endif @@ -366,8 +366,8 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) { switch (solution.type) { case WORKAROUND_NONE: kernel->signatureDebug(kernelCall.signature, argc, argv); - error("[VM] k%s[%x]: signature mismatch via method %s::%s (room %d, script %d, localCall 0x%x)", - kernelCall.name, kernelCallNr, originReply.objectName.c_str(), originReply.methodName.c_str(), + error("[VM] k%s[%x]: signature mismatch via method %s::%s (room %d, script %d, localCall 0x%x)", + kernelCall.name, kernelCallNr, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); break; case WORKAROUND_IGNORE: // don't do kernel call, leave acc alone @@ -418,12 +418,12 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) { int callNameLen = strlen(kernelCall.name); if (strncmp(kernelCall.name, kernelSubCall.name, callNameLen) == 0) { const char *subCallName = kernelSubCall.name + callNameLen; - error("[VM] k%s(%s): signature mismatch via method %s::%s (room %d, script %d, localCall %x)", - kernelCall.name, subCallName, originReply.objectName.c_str(), originReply.methodName.c_str(), + error("[VM] k%s(%s): signature mismatch via method %s::%s (room %d, script %d, localCall %x)", + kernelCall.name, subCallName, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); } - error("[VM] k%s: signature mismatch via method %s::%s (room %d, script %d, localCall %x)", - kernelSubCall.name, originReply.objectName.c_str(), originReply.methodName.c_str(), + error("[VM] k%s: signature mismatch via method %s::%s (room %d, script %d, localCall %x)", + kernelSubCall.name, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); break; } @@ -462,7 +462,7 @@ int readPMachineInstruction(const byte *src, byte &extOpcode, int16 opparams[4]) extOpcode = src[offset++]; // Get "extended" opcode (lower bit has special meaning) const byte opcode = extOpcode >> 1; // get the actual opcode - memset(opparams, 0, sizeof(opparams)); + memset(opparams, 0, 4*sizeof(int16)); for (int i = 0; g_opcode_formats[opcode][i]; ++i) { //debugN("Opcode: 0x%x, Opnumber: 0x%x, temp: %d\n", opcode, opcode, temp); @@ -828,10 +828,10 @@ void run_vm(EngineState *s) { uint16 localCallOffset = s->xs->addr.pc.offset + opparams[0]; - ExecStack xstack(s->xs->objp, s->xs->objp, s->xs->sp, + ExecStack xstack(s->xs->objp, s->xs->objp, s->xs->sp, (call_base->requireUint16()) + s->r_rest, call_base, s->xs->local_segment, make_reg(s->xs->addr.pc.segment, localCallOffset), - NULL_SELECTOR, -1, localCallOffset, s->_executionStack.size() - 1, + NULL_SELECTOR, -1, localCallOffset, s->_executionStack.size() - 1, EXEC_STACK_TYPE_CALL); s->_executionStack.push_back(xstack); diff --git a/engines/sci/engine/vm_types.cpp b/engines/sci/engine/vm_types.cpp index e39c7708ad..b95fd58129 100644 --- a/engines/sci/engine/vm_types.cpp +++ b/engines/sci/engine/vm_types.cpp @@ -32,8 +32,8 @@ reg_t reg_t::lookForWorkaround(const reg_t right) const { SciTrackOriginReply originReply; SciWorkaroundSolution solution = trackOriginAndFindWorkaround(0, arithmeticWorkarounds, &originReply); if (solution.type == WORKAROUND_NONE) - error("Invalid arithmetic operation (params: %04x:%04x and %04x:%04x) from method %s::%s (room %d, script %d, localCall %x)", - PRINT_REG(*this), PRINT_REG(right), originReply.objectName.c_str(), + error("Invalid arithmetic operation (params: %04x:%04x and %04x:%04x) from method %s::%s (room %d, script %d, localCall %x)", + PRINT_REG(*this), PRINT_REG(right), originReply.objectName.c_str(), originReply.methodName.c_str(), g_sci->getEngineState()->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); assert(solution.type == WORKAROUND_FAKE); @@ -56,7 +56,7 @@ reg_t reg_t::operator+(const reg_t right) const { return make_reg(segment, offset + right.toSint16()); default: return lookForWorkaround(right); - } + } } else if (isNumber() && right.isPointer()) { // Adding a pointer to a number, flip the order return right + *this; @@ -94,9 +94,9 @@ reg_t reg_t::operator/(const reg_t right) const { reg_t reg_t::operator%(const reg_t right) const { if (isNumber() && right.isNumber() && !right.isNull()) { - // Support for negative numbers was added in Iceman, and perhaps in + // Support for negative numbers was added in Iceman, and perhaps in // SCI0 0.000.685 and later. Theoretically, this wasn't really used - // in SCI0, so the result is probably unpredictable. Such a case + // in SCI0, so the result is probably unpredictable. Such a case // would indicate either a script bug, or a modulo on an unsigned // integer larger than 32767. In any case, such a case should be // investigated, instead of being silently accepted. @@ -178,7 +178,7 @@ int reg_t::cmp(const reg_t right, bool treatAsUnsigned) const { if (treatAsUnsigned || !isNumber()) return toUint16() - right.toUint16(); else - return toSint16() - right.toSint16(); + return toSint16() - right.toSint16(); } else if (pointerComparisonWithInteger(right)) { return 1; } else if (right.pointerComparisonWithInteger(*this)) { diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index 464b4d8d5b..b2cde47f4a 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -77,6 +77,7 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_HOYLE4, 700, 700, 1, "BridgeHand", "calcQTS", -1, 3, { WORKAROUND_FAKE, 0 } }, // sometimes when placing a bid in bridge { GID_HOYLE4, 300, 300, 0, "", "export 2", 0x1d4d, 0, { WORKAROUND_FAKE, 0 } }, // after passing around cards in hearts { GID_HOYLE4, 400, 400, 1, "GinHand", "calcRuns", -1, 4, { WORKAROUND_FAKE, 0 } }, // sometimes while playing Gin Rummy (e.g. when knocking and placing a card) - bug #3292334 + { GID_HOYLE4, 500, 17, 1, "Character", "say", -1, 504, { WORKAROUND_FAKE, 0 } }, // sometimes while playing Cribbage (e.g. when the opponent says "Last Card") - bug #3292327 { GID_ISLANDBRAIN, 100, 937, 0, "IconBar", "dispatchEvent", -1, 58, { WORKAROUND_FAKE, 0 } }, // when using ENTER at the startup menu - bug #3045225 { GID_ISLANDBRAIN, 140, 140, 0, "piece", "init", -1, 3, { WORKAROUND_FAKE, 1 } }, // first puzzle right at the start, some initialization variable. bnt is done on it, and it should be non-0 { GID_ISLANDBRAIN, 200, 268, 0, "anElement", "select", -1, 0, { WORKAROUND_FAKE, 0 } }, // elements puzzle, gets used before super TextIcon @@ -282,6 +283,8 @@ const SciWorkaroundEntry kGraphSaveBox_workarounds[] = { // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kGraphRestoreBox_workarounds[] = { + { GID_LSL6, -1, 86, 0, "LL6Inv", "show", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // happens when restoring, is called with hunk segment, but hunk is not allocated at that time + // ^^ TODO: check, if this is really a script error or an issue with our restore code { GID_LSL6, -1, 86, 0, "LL6Inv", "hide", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // happens during the game, gets called with 1 extra parameter { GID_SQ5, 850, 850, 0, NULL, "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // happens while playing Battle Cruiser (invalid segment) - bug #3056811 SCI_WORKAROUNDENTRY_TERMINATOR @@ -447,7 +450,7 @@ SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroun do { workaround = workaroundList; while (workaround->methodName) { - bool objectNameMatches = (workaround->objectName == NULL) || + bool objectNameMatches = (workaround->objectName == NULL) || (workaround->objectName == g_sci->getSciLanguageString(searchObjectName, K_LANG_ENGLISH)); // Special case: in the fanmade Russian translation of SQ4, all diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp index 74879f6c63..c14cfada07 100644 --- a/engines/sci/event.cpp +++ b/engines/sci/event.cpp @@ -261,7 +261,7 @@ SciEvent EventManager::getScummVMEvent() { else if ((modifiers & Common::KBD_CTRL) && input.character > 0 && input.character < 27) input.character += 96; // 0x01 -> 'a' } - + // If no actual key was pressed (e.g. if only a modifier key was pressed), // ignore the event if (!input.character) @@ -277,7 +277,7 @@ void EventManager::updateScreen() { if (g_system->getMillis() - s->_screenUpdateTime >= 1000 / 60) { g_system->updateScreen(); s->_screenUpdateTime = g_system->getMillis(); - // Throttle the checking of shouldQuit() to 60fps as well, since + // Throttle the checking of shouldQuit() to 60fps as well, since // Engine::shouldQuit() invokes 2 virtual functions // (EventManager::shouldQuit() and EventManager::shouldRTL()), // which is very expensive to invoke constantly without any diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp index c36ecd112a..18f8511953 100644 --- a/engines/sci/graphics/animate.cpp +++ b/engines/sci/graphics/animate.cpp @@ -201,7 +201,7 @@ void GfxAnimate::fill(byte &old_picNotValid) { adjustInvalidCels(view, it); processViewScaling(view, it); setNsRect(view, it); - + //warning("%s view %d, loop %d, cel %d, signal %x", _s->_segMan->getObjectName(curObject), it->viewId, it->loopNo, it->celNo, it->signal); // Calculate current priority according to y-coordinate @@ -659,7 +659,7 @@ void GfxAnimate::throttleSpeed() { // No entries drawn -> no speed throttler triggering break; case 1: { - + // One entry drawn -> check if that entry was a speed benchmark view, if not enable speed throttler AnimateEntry *onlyCast = &_lastCastData[0]; if ((onlyCast->viewId == 0) && (onlyCast->loopNo == 13) && (onlyCast->celNo == 0)) { diff --git a/engines/sci/graphics/compare.h b/engines/sci/graphics/compare.h index 83b4f49c08..bacb6e71e2 100644 --- a/engines/sci/graphics/compare.h +++ b/engines/sci/graphics/compare.h @@ -51,7 +51,7 @@ private: GfxCoordAdjuster *_coordAdjuster; uint16 isOnControl(uint16 screenMask, const Common::Rect &rect); - + /** * This function checks whether any of the objects in the given list, * *different* from checkObject, has a brRect which is contained inside diff --git a/engines/sci/graphics/coordadjuster.h b/engines/sci/graphics/coordadjuster.h index 1b8a3e2679..23cf79d209 100644 --- a/engines/sci/graphics/coordadjuster.h +++ b/engines/sci/graphics/coordadjuster.h @@ -68,7 +68,7 @@ public: void moveCursor(Common::Point &pos); Common::Rect pictureGetDisplayArea(); - + private: GfxPorts *_ports; @@ -90,7 +90,7 @@ public: void pictureSetDisplayArea(Common::Rect displayArea); Common::Rect pictureGetDisplayArea(); - + private: SegManager *_segMan; diff --git a/engines/sci/graphics/menu.cpp b/engines/sci/graphics/menu.cpp index 913f680e99..673729784f 100644 --- a/engines/sci/graphics/menu.cpp +++ b/engines/sci/graphics/menu.cpp @@ -423,8 +423,8 @@ reg_t GfxMenu::kernelSelect(reg_t eventObject, bool pauseSound) { default: while (itemIterator != itemEnd) { itemEntry = *itemIterator; - if (itemEntry->keyPress == keyPress && - itemEntry->keyModifier == keyModifier && + if (itemEntry->keyPress == keyPress && + itemEntry->keyModifier == keyModifier && itemEntry->enabled) break; itemIterator++; diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp index 899ef10b33..c5a3545701 100644 --- a/engines/sci/graphics/palette.cpp +++ b/engines/sci/graphics/palette.cpp @@ -71,7 +71,7 @@ GfxPalette::GfxPalette(ResourceManager *resMan, GfxScreen *screen, bool useMergi _macClut = 0; loadMacIconBarPalette(); - + #ifdef ENABLE_SCI32 _clutTable = 0; #endif @@ -236,7 +236,7 @@ static byte blendColors(byte c1, byte c2) { // return (c1/2+c2/2)+((c1&1)+(c2&1))/2; // gamma 2.2 - double t = (pow(c1/255.0, 2.2/1.0) * 255.0) + + double t = (pow(c1/255.0, 2.2/1.0) * 255.0) + (pow(c2/255.0, 2.2/1.0) * 255.0); return (byte)(0.5 + (pow(0.5*t/255.0, 1.0/2.2) * 255.0)); } @@ -378,7 +378,7 @@ bool GfxPalette::merge(Palette *newPalette, bool force, bool forceRealMerge) { break; } } - + // if still no luck - set an approximate color if (j == 256) { newPalette->mapping[i] = res & 0xFF; @@ -991,7 +991,7 @@ void GfxPalette::unloadClut() { delete[] _clutTable; _clutTable = 0; } - + #endif } // End of namespace Sci diff --git a/engines/sci/graphics/palette.h b/engines/sci/graphics/palette.h index 9b0c45baf6..243420cc47 100644 --- a/engines/sci/graphics/palette.h +++ b/engines/sci/graphics/palette.h @@ -125,7 +125,7 @@ private: void loadMacIconBarPalette(); byte *_macClut; - + #ifdef ENABLE_SCI32 byte *_clutTable; #endif diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp index ce69ba8922..ecb54e89e8 100644 --- a/engines/sci/graphics/picture.cpp +++ b/engines/sci/graphics/picture.cpp @@ -357,7 +357,7 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos curByte = *ptr++; if ((curByte != clearColor) && (priority >= _screen->getPriority(x, y))) _screen->putPixel(x, y, drawMask, curByte, priority, 0); - + if (x == leftX) { ptr += sourcePixelSkipPerRow; x = rightX; @@ -515,7 +515,7 @@ void GfxPicture::drawVectorData(byte *data, int dataSize) { icemanDrawFix = true; } if (g_sci->getGameId() == GID_KQ5) { - // WORKAROUND: ignore the seemingly broken priority of picture 48 + // WORKAROUND: ignore the seemingly broken priority of picture 48 // (island overview). Fixes bug #3041044. if (_resourceId == 48) ignoreBrokenPriority = true; @@ -551,7 +551,7 @@ void GfxPicture::drawVectorData(byte *data, int dataSize) { case PIC_OP_SET_PRIORITY: pic_priority = data[curPos++] & 0x0F; - if (isEGA) + if (isEGA) pic_priority = EGApriority[pic_priority]; if (ignoreBrokenPriority) pic_priority = 255; diff --git a/engines/sci/graphics/ports.cpp b/engines/sci/graphics/ports.cpp index 9412976d5b..6b4c8180bf 100644 --- a/engines/sci/graphics/ports.cpp +++ b/engines/sci/graphics/ports.cpp @@ -721,7 +721,7 @@ void GfxPorts::printWindowList(Console *con) { if ((*it)->isWindow()) { Window *wnd = ((Window *)*it); con->DebugPrintf("%d: '%s' at %d, %d, (%d, %d, %d, %d), drawn: %d, style: %d\n", - wnd->id, wnd->title.c_str(), wnd->left, wnd->top, + wnd->id, wnd->title.c_str(), wnd->left, wnd->top, wnd->rect.left, wnd->rect.top, wnd->rect.right, wnd->rect.bottom, wnd->bDrawn, wnd->wndStyle); } diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 4ab0b9719f..dbe2135143 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -338,7 +338,7 @@ void GfxScreen::drawLine(Common::Point startPoint, Common::Point endPoint, byte void GfxScreen::putKanjiChar(Graphics::FontSJIS *commonFont, int16 x, int16 y, uint16 chr, byte color) { byte *displayPtr = _displayScreen + y * _displayWidth * 2 + x * 2; // we don't use outline, so color 0 is actually not used - commonFont->drawChar(displayPtr, chr, _displayWidth, 1, color, 0); + commonFont->drawChar(displayPtr, chr, _displayWidth, 1, color, 0, -1, -1); } byte GfxScreen::getVisual(int x, int y) { diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp index c2f71a0e54..84547d9828 100644 --- a/engines/sci/graphics/text16.cpp +++ b/engines/sci/graphics/text16.cpp @@ -100,7 +100,7 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 // cX -> sets textColor to _textColors[X-1] curCode = textCode[0]; curCodeParm = textCode[1]; - if (isdigit(curCodeParm)) { + if (isdigit(static_cast<unsigned char>(curCodeParm))) { curCodeParm -= '0'; } else { curCodeParm = -1; diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp index afb4c184e8..6ca4903e17 100644 --- a/engines/sci/graphics/view.cpp +++ b/engines/sci/graphics/view.cpp @@ -202,7 +202,7 @@ void GfxView::initData(GuiResourceId resourceId) { palOffset = READ_SCI11ENDIAN_UINT32(_resourceData + 8); // For SCI32, this is a scale flag - if (getSciVersion() >= SCI_VERSION_2) { + if (getSciVersion() >= SCI_VERSION_2) { _sci2ScaleRes = (Sci32ViewNativeResolution)_resourceData[5]; if (_screen->getUpscaledHires() == GFX_SCREEN_UPSCALED_DISABLED) _sci2ScaleRes = SCI_VIEW_NATIVERES_NONE; @@ -426,7 +426,7 @@ void unpackCelData(byte *inBuffer, byte *celBitmap, byte clearColor, int pixelCo // compression for SCI1.1+ Mac while (pixelNr < pixelCount) { uint32 pixelLine = pixelNr; - + if (hasByteLengths) { pixelNr += *rlePtr++; runLength = *rlePtr++; @@ -500,7 +500,7 @@ void unpackCelData(byte *inBuffer, byte *celBitmap, byte clearColor, int pixelCo } else { memcpy(outPtr + pixelNr, literalPtr, MIN<uint16>(runLength, pixelCount - pixelNr)); literalPtr += runLength; - } + } break; case 0x80: // fill with color if (!literalPos) diff --git a/engines/sci/parser/said.cpp b/engines/sci/parser/said.cpp index 827e28073a..01c25ef401 100644 --- a/engines/sci/parser/said.cpp +++ b/engines/sci/parser/said.cpp @@ -224,7 +224,7 @@ static bool parsePart2(ParseTreeNode* parentNode, bool& nonempty) } else if (said_tokens[said_token] == TOKEN_BRACKETO) { said_token++; - + found = parsePart2(newNode, nonempty); if (found) { @@ -282,7 +282,7 @@ static bool parsePart3(ParseTreeNode* parentNode, bool& nonempty) } else if (said_tokens[said_token] == TOKEN_BRACKETO) { said_token++; - + found = parsePart3(newNode, nonempty); if (found) { @@ -366,7 +366,7 @@ static bool parseRef(ParseTreeNode* parentNode) said_attach_subtree(newParent, 0x144, 0x14f, newNode); newParent = newParent->right; - + newNode = said_branch_node(said_next_node(), 0, 0); found = parseRef(newNode); @@ -381,14 +381,14 @@ static bool parseRef(ParseTreeNode* parentNode) } - } + } // NB: This is not an "else if'. // If there is a "< [ ... ]", that is parsed as "< ..." if (said_tokens[said_token] == TOKEN_BRACKETO) { said_token++; - + found = parseRef(newNode); if (found) { diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 308bd92ef4..f18b6c91f5 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -128,7 +128,7 @@ static const char *s_resourceTypeSuffixes[] = { "trn", "rbt", "vmd", "chk", "", "etc", "duk", "clu", "tga", "zzz", "", "", "" -}; +}; const char *getResourceTypeName(ResourceType restype) { if (restype != kResourceTypeInvalid) @@ -449,11 +449,11 @@ bool MacResourceForkResourceSource::isCompressableResource(ResourceType type) co *ptr++ = value; \ } -void MacResourceForkResourceSource::decompressResource(Common::SeekableReadStream *stream, Resource *resource) const { +void MacResourceForkResourceSource::decompressResource(Common::SeekableReadStream *stream, Resource *resource) const { // KQ6 Mac is the only game not compressed. It's not worth writing a // heuristic just for that game. Also, skip over any resource that cannot // be compressed. - bool canBeCompressed = !(g_sci && g_sci->getGameId() == GID_KQ6) && isCompressableResource(resource->_id.getType()); + bool canBeCompressed = !(g_sci && g_sci->getGameId() == GID_KQ6) && isCompressableResource(resource->_id.getType()); uint32 uncompressedSize = 0; // GK2 Mac is crazy. In its Patches resource fork, picture 2315 is not @@ -503,7 +503,7 @@ void MacResourceForkResourceSource::decompressResource(Common::SeekableReadStrea // Copy chunk expanded extraByte1 = stream->readByte(); extraByte2 = stream->readByte(); - + literalLength = extraByte2 & 3; OUTPUT_LITERAL() @@ -824,7 +824,7 @@ void ChunkResourceSource::scanSource(ResourceManager *resMan) { byte *ptr = chunk->data; uint32 firstOffset = 0; - + for (;;) { ResourceType type = resMan->convertResType(*ptr); uint16 number = READ_LE_UINT16(ptr + 1); @@ -844,7 +844,7 @@ void ChunkResourceSource::scanSource(ResourceManager *resMan) { // There's no end marker to the data table, but the first resource // begins directly after the entry table. So, when we hit the first // resource, we're at the end of the entry table. - + if (!firstOffset) firstOffset = entry.offset; @@ -1243,7 +1243,7 @@ ResVersion ResourceManager::detectVolVersion() { for (Common::List<ResourceSource *>::iterator it = _sources.begin(); it != _sources.end(); ++it) { rsrc = *it; - + if (rsrc->getSourceType() == kSourceVolume) { if (rsrc->_resourceFile) { fileStream = rsrc->_resourceFile->createReadStream(); @@ -1291,7 +1291,7 @@ ResVersion ResourceManager::detectVolVersion() { // loading SCI3 volumes, the format is otherwise // identical to SCI2. We therefore get the compression // indicator here, but disregard it in the following - // code. + // code. wCompression = fileStream->readUint16LE(); if (fileStream->eos()) { @@ -1473,7 +1473,7 @@ void ResourceManager::readResourcePatchesBase36() { name = (*x)->getName(); ResourceId resource36 = convertPatchNameBase36((ResourceType)i, name); - + /* if (i == kResourceTypeAudio36) debug("audio36 patch: %s => %s. tuple:%d, %s\n", name.c_str(), inputName.c_str(), resource36.tuple, resource36.toString().c_str()); @@ -1494,7 +1494,7 @@ void ResourceManager::readResourcePatchesBase36() { // Check for SOL as well tag = (tag << 16) | stream->readUint16BE(); - + if (tag != MKTAG('S','O','L',0)) { delete stream; continue; @@ -1555,7 +1555,7 @@ void ResourceManager::readResourcePatches() { name = (*x)->getName(); // SCI1 scheme - if (isdigit(name[0])) { + if (isdigit(static_cast<unsigned char>(name[0]))) { char *end = 0; resourceNr = strtol(name.c_str(), &end, 10); bAdd = (*end == '.'); // Ensure the next character is the period @@ -1563,7 +1563,7 @@ void ResourceManager::readResourcePatches() { // SCI0 scheme int resname_len = strlen(szResType); if (scumm_strnicmp(name.c_str(), szResType, resname_len) == 0 - && !isalpha(name[resname_len + 1])) { + && !isalpha(static_cast<unsigned char>(name[resname_len + 1]))) { resourceNr = atoi(name.c_str() + resname_len + 1); bAdd = true; } @@ -1613,7 +1613,7 @@ int ResourceManager::readResourceMapSCI0(ResourceSource *map) { warning("Error while reading %s", map->getLocationName().c_str()); return SCI_ERROR_RESMAP_NOT_FOUND; } - + if (offset == 0xFFFFFFFF) break; @@ -2129,7 +2129,7 @@ void ResourceManager::detectSciVersion() { bool oldDecompressors = true; ResourceCompression viewCompression; -#ifdef ENABLE_SCI32 +#ifdef ENABLE_SCI32 viewCompression = getViewCompression(); #else if (_volVersion >= kResVersionSci2) { @@ -2173,7 +2173,7 @@ void ResourceManager::detectSciVersion() { } #endif } - + if (_volVersion == kResVersionSci11Mac) { // SCI32 doesn't have the resource.cfg file, so we can figure out // which of the games are SCI1.1. Note that there are no Mac SCI2 games. diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index 588ea76ea5..f3a3c8dd5b 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -197,7 +197,7 @@ void ResourceManager::readWaveAudioPatches() { for (Common::ArchiveMemberList::const_iterator x = files.begin(); x != files.end(); ++x) { Common::String name = (*x)->getName(); - if (isdigit(name[0])) + if (isdigit(static_cast<unsigned char>(name[0]))) processWavePatch(ResourceId(kResourceTypeAudio, atoi(name.c_str())), name); } } @@ -356,14 +356,14 @@ int ResourceManager::readAudioMapSCI11(ResourceSource *map) { stream->seek(offset + 1); byte headerSize = stream->readByte(); assert(headerSize == 11 || headerSize == 12); - + stream->skip(5); uint32 size = stream->readUint32LE() + headerSize + 2; addResource(ResourceId(kResourceTypeAudio, n), src, offset, size); } } else { - bool isEarly = (entrySize != 11); + bool isEarly = (entrySize != 11); if (!isEarly) { offset = READ_LE_UINT32(ptr); diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index cc9042ceb7..792b2b2055 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -282,7 +282,7 @@ Common::Error SciEngine::run() { // without this games would be pretty badly broken } - // Show any special warnings for buggy scripts with severe game bugs, + // Show any special warnings for buggy scripts with severe game bugs, // which have been patched by Sierra if (getGameId() == GID_LONGBOW) { // Longbow 1.0 has a buggy script which prevents the game @@ -868,8 +868,9 @@ void SciEngine::syncIngameAudioOptions() { _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2); // speech } else if (subtitlesOn && speechOn) { // Is it a game that supports simultaneous speech and subtitles? - if (getGameId() == GID_SQ4 + if (getGameId() == GID_SQ4 || getGameId() == GID_FREDDYPHARKAS + || getGameId() == GID_ECOQUEST // TODO: The following need script patches for simultaneous speech and subtitles //|| getGameId() == GID_KQ6 //|| getGameId() == GID_LAURABOW2 @@ -907,7 +908,7 @@ void SciEngine::loadMacExecutable() { // KQ6/Freddy require the executable to load their icon bar palettes if (hasMacIconBar()) error("Could not load Mac resource fork '%s'", filename.c_str()); - + // TODO: Show some sort of warning dialog saying they can't get any // high-res Mac fonts, when we get to that point ;) } diff --git a/engines/sci/sci.h b/engines/sci/sci.h index 04ccbd97d2..b419d862a4 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -38,7 +38,7 @@ struct ADGameDescription; * Status of this engine: ??? * * Games using this engine: - * - Newer Sierra adventure games (based on FreeSCI) + * - Newer Sierra adventure games (based on FreeSCI) * * @todo give a concrete list of supported games. Could also * list future games, with status for each. @@ -176,7 +176,7 @@ enum SciGameId { GID_FANMADE // FIXME: Do we really need/want this? }; -/** +/** * SCI versions * For more information, check here: * http://wiki.scummvm.org/index.php/Sierra_Game_Versions#SCI_Games diff --git a/engines/sci/sound/audio.cpp b/engines/sci/sound/audio.cpp index 592caa5814..123dd21894 100644 --- a/engines/sci/sound/audio.cpp +++ b/engines/sci/sound/audio.cpp @@ -285,7 +285,7 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32 // instead. memcpy(compressedData, audioRes->data, audioRes->size); Common::SeekableReadStream *compressedStream = new Common::MemoryReadStream(compressedData, audioRes->size, DisposeAfterUse::YES); - + switch (audioCompressionType) { case MKTAG('M','P','3',' '): #ifdef USE_MAD diff --git a/engines/sci/sound/drivers/amigamac.cpp b/engines/sci/sound/drivers/amigamac.cpp index 1436ca45a7..3c750401b9 100644 --- a/engines/sci/sound/drivers/amigamac.cpp +++ b/engines/sci/sound/drivers/amigamac.cpp @@ -178,7 +178,7 @@ int MidiDriver_AmigaMac::interpolate(int8 *samples, frac_t offset, bool isUnsign int diff = (s2 - s1) << 8; return (s1 << 8) + fracToInt(diff * (offset & FRAC_LO_MASK)); } - + int diff = (samples[x + 1] - samples[x]) << 8; return (samples[x] << 8) + fracToInt(diff * (offset & FRAC_LO_MASK)); } @@ -373,7 +373,7 @@ void MidiDriver_AmigaMac::setOutputFrac(int voice) { fnote -= instrument->baseNote; fnote *= 4; // FIXME: check how SSCI maps this - fnote += (_channels[_voices[voice].hw_channel].pitch - 0x2000) / 169; + fnote += (_channels[_voices[voice].hw_channel].pitch - 0x2000) / 169; while (fnote < 0) { divFact *= 2; @@ -617,7 +617,7 @@ int MidiDriver_AmigaMac::open() { } else if (!loadInstrumentsSCI0Mac(stream)) return Common::kUnknownError; } - + MidiDriver_Emulated::open(); _mixer->playStream(Audio::Mixer::kPlainSoundType, &_mixerSoundHandle, this, -1, _mixer->kMaxChannelVolume, 0, DisposeAfterUse::NO); diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 96cbf135ed..2afab3858d 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -291,8 +291,8 @@ void SciMusic::soundInitSnd(MusicEntry *pSnd) { if (_soundVersion >= SCI_VERSION_1_EARLY && g_sci->getPlatform() == Common::kPlatformAmiga) flags = 0; int endPart = track->digitalSampleEnd > 0 ? (track->digitalSampleSize - track->digitalSampleEnd) : 0; - pSnd->pStreamAud = Audio::makeRawStream(channelData + track->digitalSampleStart, - track->digitalSampleSize - track->digitalSampleStart - endPart, + pSnd->pStreamAud = Audio::makeRawStream(channelData + track->digitalSampleStart, + track->digitalSampleSize - track->digitalSampleStart - endPart, track->digitalSampleRate, flags, DisposeAfterUse::NO); delete pSnd->pLoopStream; pSnd->pLoopStream = 0; diff --git a/engines/sci/video/robot_decoder.cpp b/engines/sci/video/robot_decoder.cpp index d394fd0b2b..77f45e0788 100644 --- a/engines/sci/video/robot_decoder.cpp +++ b/engines/sci/video/robot_decoder.cpp @@ -53,14 +53,14 @@ namespace Sci { // Taken from http://anthonylarme.tripod.com/phantas/phintgtp.html // // (...) What we needed was a way of playing video, but have it blend into -// normal room art instead of occupying its own rectangular area. Room art -// consists of a background pic overlaid with various animating cels -// (traditional lingo: sprites). The cels each have a priority that determines -// who is on top and who is behind in the drawing order. Cels are read from -// *.v56 files (another proprietary format). A Robot is video frames with -// transparent background including priority and x,y information. Thus, it is +// normal room art instead of occupying its own rectangular area. Room art +// consists of a background pic overlaid with various animating cels +// (traditional lingo: sprites). The cels each have a priority that determines +// who is on top and who is behind in the drawing order. Cels are read from +// *.v56 files (another proprietary format). A Robot is video frames with +// transparent background including priority and x,y information. Thus, it is // like a cel, except it comes from an RBT - not a v56. Because it blends into -// our graphics engine, it looks just like a part of the room. A RBT can move +// our graphics engine, it looks just like a part of the room. A RBT can move // around the screen and go behind other objects. (...) #ifdef ENABLE_SCI32 @@ -105,7 +105,7 @@ bool RobotDecoder::loadStream(Common::SeekableReadStream *stream) { _surface = new Graphics::Surface(); readHeaderChunk(); - + // There are several versions of robot files, ranging from 3 to 6. // v3: no known examples // v4: PQ:SWAT demo @@ -223,7 +223,7 @@ void RobotDecoder::calculateVideoDimensions() { // This is an O(n) operation, as each frame has a different size. // We need to know the actual frame size to have a constant video size. uint32 pos = _fileStream->pos(); - + for (uint32 curFrame = 0; curFrame < _header.frameCount; curFrame++) { _fileStream->skip(4); uint16 frameWidth = _fileStream->readUint16(); @@ -327,8 +327,8 @@ const Graphics::Surface *RobotDecoder::decodeNextFrame() { // FIXME: For some reason, there are audio hiccups/gaps if (_header.hasSound) { _fileStream->skip(8); // header - _audioStream->queueBuffer(g_sci->_audio->getDecodedRobotAudioFrame(_fileStream, audioChunkSize - 8), - (audioChunkSize - 8) * 2, DisposeAfterUse::NO, + _audioStream->queueBuffer(g_sci->_audio->getDecodedRobotAudioFrame(_fileStream, audioChunkSize - 8), + (audioChunkSize - 8) * 2, DisposeAfterUse::NO, Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN); } else { _fileStream->skip(audioChunkSize); @@ -359,7 +359,7 @@ void RobotDecoder::close() { } reset(); -} +} #endif diff --git a/engines/sci/video/seq_decoder.h b/engines/sci/video/seq_decoder.h index f5e8ad9b05..800a3c9024 100644 --- a/engines/sci/video/seq_decoder.h +++ b/engines/sci/video/seq_decoder.h @@ -58,7 +58,7 @@ public: Graphics::PixelFormat getPixelFormat() const { return Graphics::PixelFormat::createFormatCLUT8(); } const byte *getPalette() { _dirtyPalette = false; return _palette; } bool hasDirtyPalette() const { return _dirtyPalette; } - + protected: Common::Rational getFrameRate() const { assert(_frameDelay); return Common::Rational(60, _frameDelay); } |