From 732774fd8de3cb6cebcd78730813d26e0330e66e Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Mon, 7 Apr 2008 20:24:40 +0000 Subject: Patch #1913862: "CinE Script system" svn-id: r31444 --- engines/cine/rel.cpp | 64 ++++++++++++++++------------------------------------ 1 file changed, 19 insertions(+), 45 deletions(-) (limited to 'engines/cine/rel.cpp') 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; } } -- cgit v1.2.3