diff options
Diffstat (limited to 'engines/cine/prc.cpp')
-rw-r--r-- | engines/cine/prc.cpp | 53 |
1 files changed, 14 insertions, 39 deletions
diff --git a/engines/cine/prc.cpp b/engines/cine/prc.cpp index a8a14cc013..0f068a197e 100644 --- a/engines/cine/prc.cpp +++ b/engines/cine/prc.cpp @@ -33,34 +33,14 @@ namespace Cine { -prcLinkedListStruct globalScriptsHead; -prcLinkedListStruct objScriptList; +ScriptList globalScripts; +ScriptList objectScripts; //char currentPrcName[20]; -void resetglobalScriptsHead(void) { - globalScriptsHead.next = NULL; - globalScriptsHead.scriptIdx = -1; -} - -void freePrcLinkedList(void) { - prcLinkedListStruct *currentHead = globalScriptsHead.next; - - while (currentHead) { - prcLinkedListStruct *temp; - - assert(currentHead); - - temp = currentHead->next; - - delete currentHead; - - currentHead = temp; - } - - resetglobalScriptsHead(); -} - +/*! \todo Is script size of 0 valid? + * \todo Fix script dump code + */ void loadPrc(const char *pPrcName) { byte i; uint16 numScripts; @@ -68,14 +48,8 @@ void loadPrc(const char *pPrcName) { assert(pPrcName); - for (i = 0; i < NUM_MAX_SCRIPT; i++) { - if (scriptTable[i].ptr) { - assert(scriptTable[i].ptr); - free(scriptTable[i].ptr); - scriptTable[i].ptr = NULL; - scriptTable[i].size = 0; - } - } + globalScripts.clear(); + scriptTable.clear(); // This is copy protection. Used to hang the machine if (!scumm_stricmp(pPrcName, "L201.ANI")) { @@ -100,17 +74,18 @@ void loadPrc(const char *pPrcName) { assert(numScripts <= NUM_MAX_SCRIPT); for (i = 0; i < numScripts; i++) { - scriptTable[i].size = READ_BE_UINT16(scriptPtr); scriptPtr += 2; + RawScriptPtr tmp(new RawScript(READ_BE_UINT16(scriptPtr))); + scriptPtr += 2; + assert(tmp); + scriptTable.push_back(tmp); } for (i = 0; i < numScripts; i++) { - uint16 size = scriptTable[i].size; + uint16 size = scriptTable[i]->_size; + // TODO: delete the test? if (size) { - scriptTable[i].ptr = (byte *) malloc(size); - assert(scriptTable[i].ptr); - memcpy(scriptTable[i].ptr, scriptPtr, size); + scriptTable[i]->setData(*scriptInfo, scriptPtr); scriptPtr += size; - computeScriptStack(scriptTable[i].ptr, scriptTable[i].stack, size); } } |