diff options
author | Eugene Sandulenko | 2008-04-07 20:24:40 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2008-04-07 20:24:40 +0000 |
commit | 732774fd8de3cb6cebcd78730813d26e0330e66e (patch) | |
tree | 4576a02c29f1b62ad4da8c49c3225096dba256aa /engines/cine/rel.cpp | |
parent | 9377fc7dc8548eb5369c99f5ab3e2437e756a003 (diff) | |
download | scummvm-rg350-732774fd8de3cb6cebcd78730813d26e0330e66e.tar.gz scummvm-rg350-732774fd8de3cb6cebcd78730813d26e0330e66e.tar.bz2 scummvm-rg350-732774fd8de3cb6cebcd78730813d26e0330e66e.zip |
Patch #1913862: "CinE Script system"
svn-id: r31444
Diffstat (limited to 'engines/cine/rel.cpp')
-rw-r--r-- | engines/cine/rel.cpp | 64 |
1 files changed, 19 insertions, 45 deletions
diff --git a/engines/cine/rel.cpp b/engines/cine/rel.cpp index c9c5755ac6..f550efed27 100644 --- a/engines/cine/rel.cpp +++ b/engines/cine/rel.cpp @@ -31,45 +31,21 @@ namespace Cine { -RelObjectScript relTable[NUM_MAX_REL]; - -void resetObjectScriptHead(void) { - objScriptList.next = NULL; - objScriptList.scriptIdx = -1; -} - -void releaseObjectScripts(void) { - prcLinkedListStruct *currentHead = objScriptList.next; - - while (currentHead) { - prcLinkedListStruct *temp; - - assert(currentHead); - - temp = currentHead->next; - - delete currentHead; - - currentHead = temp; - } - - resetObjectScriptHead(); -} +RawObjectScriptArray relTable; ///< Object script bytecode table +/*! \todo Is script size of 0 valid? + * \todo Fix script dump code + */ void loadRel(char *pRelName) { uint16 numEntry; uint16 i; + uint16 size, p1, p2, p3; byte *ptr, *dataPtr; checkDataDisk(-1); - for (i = 0; i < NUM_MAX_REL; i++) { - if (relTable[i].data) { - free(relTable[i].data); - relTable[i].data = NULL; - relTable[i].size = 0; - } - } + objectScripts.clear(); + relTable.clear(); ptr = dataPtr = readBundleFile(findFileInBundle(pRelName)); @@ -77,24 +53,22 @@ void loadRel(char *pRelName) { numEntry = READ_BE_UINT16(ptr); ptr += 2; - assert(numEntry <= NUM_MAX_REL); - for (i = 0; i < numEntry; i++) { - relTable[i].size = READ_BE_UINT16(ptr); ptr += 2; - relTable[i].obj1Param1 = READ_BE_UINT16(ptr); ptr += 2; - relTable[i].obj1Param2 = READ_BE_UINT16(ptr); ptr += 2; - relTable[i].obj2Param = READ_BE_UINT16(ptr); ptr += 2; - relTable[i].runCount = 0; + size = READ_BE_UINT16(ptr); ptr += 2; + p1 = READ_BE_UINT16(ptr); ptr += 2; + p2 = READ_BE_UINT16(ptr); ptr += 2; + p3 = READ_BE_UINT16(ptr); ptr += 2; + RawObjectScriptPtr tmp(new RawObjectScript(size, p1, p2, p3)); + assert(tmp); + relTable.push_back(tmp); } for (i = 0; i < numEntry; i++) { - if (relTable[i].size) { - relTable[i].data = (byte *)malloc(relTable[i].size); - - assert(relTable[i].data); - - memcpy(relTable[i].data, ptr, relTable[i].size); - ptr += relTable[i].size; + size = relTable[i]->_size; + // TODO: delete the test? + if (size) { + relTable[i]->setData(*scriptInfo, ptr); + ptr += size; } } |