diff options
Diffstat (limited to 'engines/scumm/file_nes.cpp')
-rw-r--r-- | engines/scumm/file_nes.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/engines/scumm/file_nes.cpp b/engines/scumm/file_nes.cpp index 0caf63b410..d9d84f04ff 100644 --- a/engines/scumm/file_nes.cpp +++ b/engines/scumm/file_nes.cpp @@ -27,8 +27,7 @@ #include "common/debug.h" #include "common/endian.h" #include "common/md5.h" - -using Common::File; +#include "common/memstream.h" namespace Scumm { @@ -49,10 +48,6 @@ struct ScummNESFile::ResourceGroup { ScummNESFile::ScummNESFile() : _stream(0), _buf(0), _ROMset(kROMsetNum) { } -void ScummNESFile::setEnc(byte enc) { - _stream->setEnc(enc); -} - static const ScummNESFile::Resource res_roomgfx_usa[40] = { { 0x04001, 0x03C9 }, { 0x043CA, 0x069E }, { 0x04A68, 0x0327 }, { 0x04D8F, 0x053B }, { 0x052CA, 0x06BE }, { 0x05988, 0x0682 }, { 0x0600A, 0x0778 }, { 0x06782, 0x0517 }, { 0x06C99, 0x07FB }, { 0x07494, 0x07BE }, @@ -1077,7 +1072,7 @@ uint16 ScummNESFile::extractResource(Common::WriteStream *output, const Resource case NES_PREPLIST: len = res->length; - reslen += write_word(output, 0x002A); + reslen += write_word(output, 0x002A); reslen += write_byte(output, ' '); for (i = 1; i < 8; i++) @@ -1371,34 +1366,36 @@ bool ScummNESFile::generateIndex() { bool ScummNESFile::open(const Common::String &filename) { if (_ROMset == kROMsetNum) { - char md5str[32+1]; + Common::String md5str; File f; f.open(filename); - if (f.isOpen() && Common::md5_file_string(f, md5str)) { + if (f.isOpen()) + md5str = Common::computeStreamMD5AsString(f); + if (!md5str.empty()) { - if (!strcmp(md5str, "3905799e081b80a61d4460b7b733c206")) { + if (md5str == "3905799e081b80a61d4460b7b733c206") { _ROMset = kROMsetUSA; debug(1, "ROM contents verified as Maniac Mansion (USA)"); - } else if (!strcmp(md5str, "d8d07efcb88f396bee0b402b10c3b1c9")) { + } else if (md5str == "d8d07efcb88f396bee0b402b10c3b1c9") { _ROMset = kROMsetEurope; debug(1, "ROM contents verified as Maniac Mansion (Europe)"); - } else if (!strcmp(md5str, "22d07d6c386c9c25aca5dac2a0c0d94b")) { + } else if (md5str == "22d07d6c386c9c25aca5dac2a0c0d94b") { _ROMset = kROMsetSweden; debug(1, "ROM contents verified as Maniac Mansion (Sweden)"); - } else if (!strcmp(md5str, "81bbfa181184cb494e7a81dcfa94fbd9")) { + } else if (md5str == "81bbfa181184cb494e7a81dcfa94fbd9") { _ROMset = kROMsetFrance; debug(2, "ROM contents verified as Maniac Mansion (France)"); - } else if (!strcmp(md5str, "257f8c14d8c584f7ddd601bcb00920c7")) { + } else if (md5str == "257f8c14d8c584f7ddd601bcb00920c7") { _ROMset = kROMsetGermany; debug(2, "ROM contents verified as Maniac Mansion (Germany)"); - } else if (!strcmp(md5str, "f163cf53f7850e43fb482471e5c52e1a")) { + } else if (md5str == "f163cf53f7850e43fb482471e5c52e1a") { _ROMset = kROMsetSpain; debug(2, "ROM contents verified as Maniac Mansion (Spain)"); - } else if (!strcmp(md5str, "54a68a5f5e3c86da42b7ca5f51e79b1d")) { + } else if (md5str == "54a68a5f5e3c86da42b7ca5f51e79b1d") { _ROMset = kROMsetItaly; debug(2, "ROM contents verified as Maniac Mansion (Italy)"); } else { - error("Unsupported Maniac Mansion ROM, md5: %s", md5str); + error("Unsupported Maniac Mansion ROM, md5: %s", md5str.c_str()); return false; } } else { @@ -1450,5 +1447,17 @@ bool ScummNESFile::openSubFile(const Common::String &filename) { } } +uint32 ScummNESFile::read(void *dataPtr, uint32 dataSize) { + uint32 realLen = _stream->read(dataPtr, dataSize); + + if (_encbyte) { + byte *p = (byte *)dataPtr; + byte *end = p + realLen; + while (p < end) + *p++ ^= _encbyte; + } + + return realLen; +} } // End of namespace Scumm |