diff options
author | Eugene Sandulenko | 2006-02-22 22:40:53 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2006-02-22 22:40:53 +0000 |
commit | 71c170bb136ab94d70eb10d55cfd897dc89c9682 (patch) | |
tree | d555cf8177ba4f6fe3fbc0b0fd1d5d45df58874e /engines/cine/rel.cpp | |
parent | a467247e6ed972e0a13bf26af07811dda55bd69a (diff) | |
download | scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.tar.gz scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.tar.bz2 scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.zip |
Initial version of Cinematique engine evo 1.
svn-id: r20813
Diffstat (limited to 'engines/cine/rel.cpp')
-rw-r--r-- | engines/cine/rel.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/engines/cine/rel.cpp b/engines/cine/rel.cpp new file mode 100644 index 0000000000..a42d46f01a --- /dev/null +++ b/engines/cine/rel.cpp @@ -0,0 +1,127 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2006 The ScummVM project + * + * cinE Engine is (C) 2004-2005 by CinE Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "cine/cine.h" + +relStruct 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_PTR(currentHead); + + temp = currentHead->next; + + free(currentHead); + + currentHead = temp; + } + + resetObjectScriptHead(); +} + +void loadRel(char *pRelName) { + u16 numEntry; + u16 i; + u8 *ptr; + + checkDataDisk(-1); + + for (i = 0; i < NUM_MAX_REL; i++) { + if (relTable[i].ptr0) { + ASSERT_PTR(relTable[i].ptr0); + + free(relTable[i].ptr0); + + relTable[i].ptr0 = NULL; + + relTable[i].var4 = 0; + } + } + + ptr = readBundleFile(findFileInBundle(pRelName)); + + processPendingUpdates(1); + + numEntry = *(u16 *) ptr; + ptr += 2; + flipU16(&numEntry); + + ASSERT(numEntry <= NUM_MAX_REL); + + for (i = 0; i < numEntry; i++) { + relTable[i].var4 = *(u16 *) ptr; + ptr += 2; + flipU16(&relTable[i].var4); + + relTable[i].var6 = *(u16 *) ptr; + ptr += 2; + flipU16(&relTable[i].var6); + + relTable[i].var8 = *(u16 *) ptr; + ptr += 2; + flipU16(&relTable[i].var8); + + relTable[i].varA = *(u16 *) ptr; + ptr += 2; + flipU16(&relTable[i].varA); + } + + for (i = 0; i < numEntry; i++) { + if (relTable[i].var4) { + relTable[i].ptr0 = (char *)malloc(relTable[i].var4); + + ASSERT_PTR(relTable[i].ptr0); + + memcpy(relTable[i].ptr0, ptr, relTable[i].var4); + ptr += relTable[i].var4; + } + } + +#ifdef DUMP_SCRIPTS_OBJ + + { + u16 i; + u8 buffer[256]; + + for (i = 0; i < numEntry; i++) { + if (relTable[i].var4) { + sprintf(buffer, "%s_%03d.txt", pRelName, i); + + decompileScript(relTable[i].ptr0, NULL, + relTable[i].var4, i); + dumpScript(buffer); + } + } + } +#endif +} |