diff options
-rw-r--r-- | sword2/interpreter.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/sword2/interpreter.cpp b/sword2/interpreter.cpp index cb6fbc8ea8..0b66286730 100644 --- a/sword2/interpreter.cpp +++ b/sword2/interpreter.cpp @@ -274,8 +274,8 @@ int Logic::runScript(char *scriptData, char *objectData, uint32 *offset) { code += noScripts * sizeof(int32); - // Code should nop be pointing at an identifier and a checksum - const int *checksumBlock = (const int *) code; + // Code should now be pointing at an identifier and a checksum + const char *checksumBlock = code; code += sizeof(int32) * 3; @@ -284,15 +284,18 @@ int Logic::runScript(char *scriptData, char *objectData, uint32 *offset) { return 0; } - int codeLen = READ_LE_UINT32(checksumBlock + 1); - int checksum = 0; + int32 codeLen = READ_LE_UINT32(checksumBlock + 4); + int32 checksum = 0; for (int i = 0; i < codeLen; i++) checksum += (unsigned char) code[i]; - if (checksum != (int32) READ_LE_UINT32(checksumBlock + 2)) { - error("Checksum error in object %s", header->name); - return 0; + if (checksum != (int32) READ_LE_UINT32(checksumBlock + 8)) { + debug(1, "Checksum error in object %s", header->name); + // This could be bad, but there has been a report about someone + // who had problems running the German version because of + // checksum errors. Could there be a version where checksums + // weren't properly calculated? } bool runningScript = true; |