diff options
author | Vincent Hamm | 2007-11-10 17:15:48 +0000 |
---|---|---|
committer | Vincent Hamm | 2007-11-10 17:15:48 +0000 |
commit | faf78d582a2b2e9245f17ab86a3cc326de5c37cf (patch) | |
tree | a2f5a5fccb1fa1932453ebd893526964400eb02a /engines/cruise/dataLoader.cpp | |
parent | 83eec141c8da24fa710c304e0b18ec42381a2b58 (diff) | |
download | scummvm-rg350-faf78d582a2b2e9245f17ab86a3cc326de5c37cf.tar.gz scummvm-rg350-faf78d582a2b2e9245f17ab86a3cc326de5c37cf.tar.bz2 scummvm-rg350-faf78d582a2b2e9245f17ab86a3cc326de5c37cf.zip |
-Cleanup strings
-Fix load saves from original interpreter
-Add all background merge functions
svn-id: r29467
Diffstat (limited to 'engines/cruise/dataLoader.cpp')
-rw-r--r-- | engines/cruise/dataLoader.cpp | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/engines/cruise/dataLoader.cpp b/engines/cruise/dataLoader.cpp index 6d12aecd75..4b8d4072dc 100644 --- a/engines/cruise/dataLoader.cpp +++ b/engines/cruise/dataLoader.cpp @@ -27,10 +27,6 @@ namespace Cruise { -void loadSetEntry(uint8 * name, uint8 * ptr, int currentEntryIdx, - int currentDestEntry); -void loadFNTSub(uint8 * ptr, int destIdx); - enum fileTypeEnum { type_UNK, type_SPL, @@ -232,12 +228,12 @@ int createResFileEntry(int width, int height, int resType) { return entryNumber; } -fileTypeEnum getFileType(uint8 *name) { +fileTypeEnum getFileType(const char *name) { char extentionBuffer[16]; fileTypeEnum newFileType = type_UNK; - getFileExtention((char *)name, extentionBuffer); + getFileExtention(name, extentionBuffer); if (!strcmp(extentionBuffer, ".SPL")) { newFileType = type_SPL; @@ -259,7 +255,46 @@ int getNumMaxEntiresInSet(uint8 *ptr) { return numEntries; } -int loadFileMode2(uint8 *name, int startIdx, int currentEntryIdx, int numIdx) { +int loadFile(const char* name, int idx, int destIdx) +{ + uint8 *ptr = NULL; + fileTypeEnum fileType; + + fileType = getFileType(name); + + loadFileSub1(&ptr, name, NULL); + + switch (fileType) { + case type_SET: + { + + int numMaxEntriesInSet = getNumMaxEntiresInSet(ptr); + + if (idx > numMaxEntriesInSet) { + return 0; // exit if limit is reached + } + return loadSetEntry(name, ptr, idx, destIdx ); + + break; + } + case type_FNT: + { + return loadFNTSub(ptr, idx); + break; + } + case type_UNK: + { + break; + } + case type_SPL: + { + break; + } + } + return -1; +} + +int loadFileRange(const char *name, int startIdx, int currentEntryIdx, int numIdx) { uint8 *ptr = NULL; fileTypeEnum fileType; @@ -274,11 +309,10 @@ int loadFileMode2(uint8 *name, int startIdx, int currentEntryIdx, int numIdx) { int numMaxEntriesInSet = getNumMaxEntiresInSet(ptr); for (i = 0; i < numIdx; i++) { - if ((currentEntryIdx + i) > numMaxEntriesInSet) { + if ((startIdx + i) > numMaxEntriesInSet) { return 0; // exit if limit is reached } - loadSetEntry(name, ptr, currentEntryIdx + i, - startIdx + i); + loadSetEntry(name, ptr, startIdx + i, currentEntryIdx + i ); } break; @@ -300,7 +334,7 @@ int loadFileMode2(uint8 *name, int startIdx, int currentEntryIdx, int numIdx) { return 0; } -int loadFullBundle(uint8 *name, int startIdx) { +int loadFullBundle(const char *name, int startIdx) { uint8 *ptr = NULL; fileTypeEnum fileType; @@ -340,7 +374,7 @@ int loadFullBundle(uint8 *name, int startIdx) { return 0; } -void loadFNTSub(uint8 *ptr, int destIdx) { +int loadFNTSub(uint8 *ptr, int destIdx) { uint8 *ptr2 = ptr; uint8 *destPtr; int fileIndex; @@ -384,16 +418,18 @@ void loadFNTSub(uint8 *ptr, int destIdx) { currentPtr += 8; } } + + return 1; } -void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx, int currentDestEntry) { +int loadSetEntry(const char *name, uint8 *ptr, int currentEntryIdx, int currentDestEntry) { uint8 *ptr2; uint8 *ptr3; int offset; int sec = 0; uint16 numIdx; - if (!strcmpuint8(ptr, "SEC")) { + if (!strcmp((char*)ptr, "SEC")) { sec = 1; } @@ -433,7 +469,7 @@ void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx, int currentDestE } if (fileIndex < 0) { - return; // TODO: buffer is not freed + return -1; // TODO: buffer is not freed } ptr5 = ptr3 + localBuffer.field_0 + numIdx * 16; @@ -470,7 +506,7 @@ void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx, int currentDestE if (sec == 0) { // TODO sec type 5 needs special conversion. cut out 2 bytes at every width/5 position. ASSERT(0); - return; + return -1; } filesDatabase[fileIndex].subData.resourceType = 4; @@ -495,7 +531,7 @@ void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx, int currentDestE } } - strcpyuint8(filesDatabase[fileIndex].subData.name, name); + strcpy(filesDatabase[fileIndex].subData.name, name); // create the mask switch(localBuffer.type) @@ -530,7 +566,7 @@ void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx, int currentDestE // TODO: free - return; + return 1; } } // End of namespace Cruise |