diff options
Diffstat (limited to 'engines/cine/prc.cpp')
-rw-r--r-- | engines/cine/prc.cpp | 77 |
1 files changed, 21 insertions, 56 deletions
diff --git a/engines/cine/prc.cpp b/engines/cine/prc.cpp index 4034eeca4f..876937f0d7 100644 --- a/engines/cine/prc.cpp +++ b/engines/cine/prc.cpp @@ -59,16 +59,15 @@ void freePrcLinkedList(void) { void loadPrc(const char *pPrcName) { uint8 i; - uint16 numEntry; + uint16 numScripts; + const uint8 *scriptPtr; ASSERT_PTR(pPrcName); for (i = 0; i < NUM_MAX_SCRIPT; i++) { if (scriptTable[i].ptr) { ASSERT_PTR(scriptTable[i].ptr); - free(scriptTable[i].ptr); - scriptTable[i].ptr = NULL; scriptTable[i].size = 0; } @@ -76,64 +75,30 @@ void loadPrc(const char *pPrcName) { checkDataDisk(-1); if ((gameType == Cine::GID_FW) && (!strcmp(pPrcName, "AUTO00.PRC"))) { - const unsigned char *readPtr = AUT000; - - processPendingUpdates(1); - - numEntry = READ_BE_UINT16(readPtr); readPtr += 2; - - ASSERT(numEntry <= NUM_MAX_SCRIPT); - - for (i = 0; i < numEntry; i++) { - scriptTable[i].size = READ_BE_UINT16(readPtr); readPtr += 2; - } - - for (i = 0; i < numEntry; i++) { - uint16 size; - - size = scriptTable[i].size; - - if (size) { - scriptTable[i].ptr = (byte *)malloc(size); - - ASSERT_PTR(scriptTable[i].ptr); - - memcpy(scriptTable[i].ptr, readPtr, size); - readPtr += size; - - computeScriptStack(scriptTable[i].ptr, scriptTable[i].stack, size); - } - } + // bypass protection + scriptPtr = AUT000; } else { - uint8 *ptr = readBundleFile(findFileInBundle(pPrcName)); - - ASSERT_PTR(ptr); - - processPendingUpdates(1); - - numEntry = READ_BE_UINT16(ptr); ptr += 2; - - ASSERT(numEntry <= NUM_MAX_SCRIPT); - - for (i = 0; i < numEntry; i++) { - scriptTable[i].size = READ_BE_UINT16(ptr); ptr += 2; - } - - for (i = 0; i < numEntry; i++) { - uint16 size; - - size = scriptTable[i].size; + scriptPtr = readBundleFile(findFileInBundle(pPrcName)); + ASSERT_PTR(scriptPtr); + } - if (size) { - scriptTable[i].ptr = (byte *) malloc(size); + processPendingUpdates(1); - ASSERT_PTR(scriptTable[i].ptr); + numScripts = READ_BE_UINT16(scriptPtr); scriptPtr += 2; + ASSERT(numScripts <= NUM_MAX_SCRIPT); - memcpy(scriptTable[i].ptr, ptr, size); - ptr += size; + for (i = 0; i < numScripts; i++) { + scriptTable[i].size = READ_BE_UINT16(scriptPtr); scriptPtr += 2; + } - computeScriptStack(scriptTable[i].ptr, scriptTable[i].stack, size); - } + for (i = 0; i < numScripts; i++) { + uint16 size = scriptTable[i].size; + if (size) { + scriptTable[i].ptr = (byte *) malloc(size); + ASSERT_PTR(scriptTable[i].ptr); + memcpy(scriptTable[i].ptr, scriptPtr, size); + scriptPtr += size; + computeScriptStack(scriptTable[i].ptr, scriptTable[i].stack, size); } } } |