aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/dataLoader.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2007-04-27 22:33:45 +0000
committerEugene Sandulenko2007-04-27 22:33:45 +0000
commitffce26ebfea301ec33f3d485fa9dbaa0dffccb5b (patch)
treeb62bf14bf84b48b602f12c3aacd9c652a49bef46 /engines/cruise/dataLoader.cpp
parent101fbdd64f1a9d62c40dcdd20d618a098dc9df7e (diff)
downloadscummvm-rg350-ffce26ebfea301ec33f3d485fa9dbaa0dffccb5b.tar.gz
scummvm-rg350-ffce26ebfea301ec33f3d485fa9dbaa0dffccb5b.tar.bz2
scummvm-rg350-ffce26ebfea301ec33f3d485fa9dbaa0dffccb5b.zip
Fix code formatting (partially) and guard defines in includes.
svn-id: r26631
Diffstat (limited to 'engines/cruise/dataLoader.cpp')
-rw-r--r--engines/cruise/dataLoader.cpp822
1 files changed, 397 insertions, 425 deletions
diff --git a/engines/cruise/dataLoader.cpp b/engines/cruise/dataLoader.cpp
index f56fd73fd4..774262aef0 100644
--- a/engines/cruise/dataLoader.cpp
+++ b/engines/cruise/dataLoader.cpp
@@ -26,15 +26,15 @@
namespace Cruise {
-void loadSetEntry(uint8* name, uint8* ptr, int currentEntryIdx, int currentDestEntry);
-void loadFNTSub(uint8* ptr, int destIdx);
-
-enum fileTypeEnum
-{
- type_UNK,
- type_SPL,
- type_SET,
- type_FNT
+void loadSetEntry(uint8 * name, uint8 * ptr, int currentEntryIdx,
+ int currentDestEntry);
+void loadFNTSub(uint8 * ptr, int destIdx);
+
+enum fileTypeEnum {
+ type_UNK,
+ type_SPL,
+ type_SET,
+ type_FNT
};
typedef enum fileTypeEnum fileTypeEnum;
@@ -43,384 +43,352 @@ int loadSingleFile;
// TODO: Unify decodeGfxFormat1, decodeGfxFormat4 and decodeGfxFormat5
-void decodeGfxFormat1(dataFileEntry* pCurrentFileEntry)
-{
- uint8* buffer;
- uint8* dataPtr = pCurrentFileEntry->subData.ptr;
+void decodeGfxFormat1(dataFileEntry *pCurrentFileEntry) {
+ uint8 *buffer;
+ uint8 *dataPtr = pCurrentFileEntry->subData.ptr;
- int spriteSize = pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn * 8;
- int x = 0;
+ int spriteSize =
+ pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn * 8;
+ int x = 0;
- buffer = (uint8*)malloc(spriteSize);
+ buffer = (uint8 *) malloc(spriteSize);
- while (x < spriteSize)
- {
- uint8 c;
- uint16 p0;
+ while (x < spriteSize) {
+ uint8 c;
+ uint16 p0;
- p0 = (dataPtr[0] << 8) | dataPtr[1];
+ p0 = (dataPtr[0] << 8) | dataPtr[1];
- /* decode planes */
- for (c = 0; c < 16; c++)
- {
- buffer[x+c] = ((p0 >> 15) & 1);
+ /* decode planes */
+ for (c = 0; c < 16; c++) {
+ buffer[x + c] = ((p0 >> 15) & 1);
- p0 <<= 1;
- }
+ p0 <<= 1;
+ }
- x+=16;
+ x += 16;
- dataPtr+=2;
- }
+ dataPtr += 2;
+ }
- pCurrentFileEntry->subData.ptr = buffer;
+ pCurrentFileEntry->subData.ptr = buffer;
}
+void decodeGfxFormat4(dataFileEntry *pCurrentFileEntry) {
+ uint8 *buffer;
+ uint8 *dataPtr = pCurrentFileEntry->subData.ptr;
+
+ int spriteSize =
+ pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn * 2;
+ int x = 0;
+
+ buffer = (uint8 *) malloc(spriteSize);
+
+ while (x < spriteSize) {
+ uint8 c;
+ uint16 p0;
+ uint16 p1;
+ uint16 p2;
+ uint16 p3;
+
+ p0 = (dataPtr[0] << 8) | dataPtr[1];
+ p1 = (dataPtr[2] << 8) | dataPtr[3];
+ p2 = (dataPtr[4] << 8) | dataPtr[5];
+ p3 = (dataPtr[6] << 8) | dataPtr[7];
+
+ /* decode planes */
+ for (c = 0; c < 16; c++) {
+ buffer[x + c] =
+ ((p0 >> 15) & 1) | ((p1 >> 14) & 2) | ((p2 >> 13) &
+ 4) | ((p3 >> 12) & 8);
+
+ p0 <<= 1;
+ p1 <<= 1;
+ p2 <<= 1;
+ p3 <<= 1;
+ }
-void decodeGfxFormat4(dataFileEntry* pCurrentFileEntry)
-{
- uint8* buffer;
- uint8* dataPtr = pCurrentFileEntry->subData.ptr;
-
- int spriteSize = pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn * 2;
- int x = 0;
-
- buffer = (uint8*)malloc(spriteSize);
-
- while (x < spriteSize)
- {
- uint8 c;
- uint16 p0;
- uint16 p1;
- uint16 p2;
- uint16 p3;
-
- p0 = (dataPtr[0] << 8) | dataPtr[1];
- p1 = (dataPtr[2] << 8) | dataPtr[3];
- p2 = (dataPtr[4] << 8) | dataPtr[5];
- p3 = (dataPtr[6] << 8) | dataPtr[7];
+ x += 16;
- /* decode planes */
- for (c = 0; c < 16; c++)
- {
- buffer[x+c] = ((p0 >> 15) & 1) | ((p1 >> 14) & 2) | ((p2 >> 13) & 4) | ((p3 >> 12) & 8);
+ dataPtr += 8;
+ }
- p0 <<= 1;
- p1 <<= 1;
- p2 <<= 1;
- p3 <<= 1;
- }
+ pCurrentFileEntry->subData.ptr = buffer;
+}
- x+=16;
+void decodeGfxFormat5(dataFileEntry *pCurrentFileEntry) {
+ uint8 *buffer;
+ uint8 *dataPtr = pCurrentFileEntry->subData.ptr;
+
+ int spriteSize =
+ pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn;
+ int x = 0;
+ int range = pCurrentFileEntry->height * pCurrentFileEntry->width;
+
+ buffer = (uint8 *) malloc(spriteSize);
+
+ while (x < spriteSize) {
+ uint8 c;
+ uint16 p0;
+ uint16 p1;
+ uint16 p2;
+ uint16 p3;
+ uint16 p4;
+
+ p0 = (dataPtr[0 + range * 0] << 8) | dataPtr[1 + range * 0];
+ p1 = (dataPtr[0 + range * 1] << 8) | dataPtr[1 + range * 1];
+ p2 = (dataPtr[0 + range * 2] << 8) | dataPtr[1 + range * 2];
+ p3 = (dataPtr[0 + range * 3] << 8) | dataPtr[1 + range * 3];
+ p4 = (dataPtr[0 + range * 4] << 8) | dataPtr[1 + range * 4];
+
+ /* decode planes */
+ for (c = 0; c < 16; c++) {
+ buffer[x + c] =
+ ((p0 >> 15) & 1) | ((p1 >> 14) & 2) | ((p2 >> 13) &
+ 4) | ((p3 >> 12) & 8) | ((p4 >> 11) & 16);
+
+ p0 <<= 1;
+ p1 <<= 1;
+ p2 <<= 1;
+ p3 <<= 1;
+ p4 <<= 1;
+ }
- dataPtr+=8;
- }
+ x += 16;
- pCurrentFileEntry->subData.ptr = buffer;
-}
+ dataPtr += 2;
+ }
-void decodeGfxFormat5(dataFileEntry* pCurrentFileEntry)
-{
- uint8* buffer;
- uint8* dataPtr = pCurrentFileEntry->subData.ptr;
-
- int spriteSize = pCurrentFileEntry->height * pCurrentFileEntry->widthInColumn;
- int x = 0;
- int range = pCurrentFileEntry->height * pCurrentFileEntry->width;
-
- buffer = (uint8*)malloc(spriteSize);
-
- while (x < spriteSize)
- {
- uint8 c;
- uint16 p0;
- uint16 p1;
- uint16 p2;
- uint16 p3;
- uint16 p4;
-
- p0 = (dataPtr[0 + range * 0] << 8) | dataPtr[1 + range * 0];
- p1 = (dataPtr[0 + range * 1] << 8) | dataPtr[1 + range * 1];
- p2 = (dataPtr[0 + range * 2] << 8) | dataPtr[1 + range * 2];
- p3 = (dataPtr[0 + range * 3] << 8) | dataPtr[1 + range * 3];
- p4 = (dataPtr[0 + range * 4] << 8) | dataPtr[1 + range * 4];
-
- /* decode planes */
- for (c = 0; c < 16; c++)
- {
- buffer[x+c] = ((p0 >> 15) & 1) | ((p1 >> 14) & 2) | ((p2 >> 13) & 4) | ((p3 >> 12) & 8) | ((p4 >> 11) & 16);
-
- p0 <<= 1;
- p1 <<= 1;
- p2 <<= 1;
- p3 <<= 1;
- p4 <<= 1;
- }
-
- x+=16;
-
- dataPtr+=2;
- }
-
- pCurrentFileEntry->subData.ptr = buffer;
+ pCurrentFileEntry->subData.ptr = buffer;
}
-int updateResFileEntry(int height, int width, int entryNumber, int resType)
-{
- int div = 0;
- int size;
+int updateResFileEntry(int height, int width, int entryNumber, int resType) {
+ int div = 0;
+ int size;
- resetFileEntry(entryNumber);
+ resetFileEntry(entryNumber);
- filesDatabase[entryNumber].subData.field_1C = 0;
+ filesDatabase[entryNumber].subData.field_1C = 0;
- size = height * width; // for sprites: width * height
+ size = height * width; // for sprites: width * height
- if(resType == 4)
- {
- div = size / 4;
- }
- else if (resType == 5)
- {
- width = (width * 8) / 5;
- }
+ if (resType == 4) {
+ div = size / 4;
+ } else if (resType == 5) {
+ width = (width * 8) / 5;
+ }
- filesDatabase[entryNumber].subData.ptr = (uint8*)mallocAndZero(size + div);
+ filesDatabase[entryNumber].subData.ptr =
+ (uint8 *) mallocAndZero(size + div);
- if(!filesDatabase[entryNumber].subData.ptr)
- return(-2);
+ if (!filesDatabase[entryNumber].subData.ptr)
+ return (-2);
- filesDatabase[entryNumber].widthInColumn = width;
- filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr+size;
- filesDatabase[entryNumber].width = width / 8;
- filesDatabase[entryNumber].resType = resType;
- filesDatabase[entryNumber].height = height;
- filesDatabase[entryNumber].subData.index = -1;
+ filesDatabase[entryNumber].widthInColumn = width;
+ filesDatabase[entryNumber].subData.ptr2 =
+ filesDatabase[entryNumber].subData.ptr + size;
+ filesDatabase[entryNumber].width = width / 8;
+ filesDatabase[entryNumber].resType = resType;
+ filesDatabase[entryNumber].height = height;
+ filesDatabase[entryNumber].subData.index = -1;
- return entryNumber;
+ return entryNumber;
}
+int createResFileEntry(int width, int height, int resType) {
+ int i;
+ int entryNumber;
+ int div = 0;
+ int size;
-int createResFileEntry(int width, int height, int resType)
-{
- int i;
- int entryNumber;
- int div = 0;
- int size;
-
- printf("Executing untested createResFileEntry!\n");
- exit(1);
+ printf("Executing untested createResFileEntry!\n");
+ exit(1);
- for(i = 0; i < 257; i++)
- {
- if(!filesDatabase[i].subData.ptr)
- break;
- }
+ for (i = 0; i < 257; i++) {
+ if (!filesDatabase[i].subData.ptr)
+ break;
+ }
- if(i >= 257)
- {
- return(-19);
- }
+ if (i >= 257) {
+ return (-19);
+ }
- entryNumber = i;
+ entryNumber = i;
- filesDatabase[entryNumber].subData.field_1C = 0;
+ filesDatabase[entryNumber].subData.field_1C = 0;
- size = width * height; // for sprites: width * height
+ size = width * height; // for sprites: width * height
- if(resType == 4)
- {
- div = size / 4;
- }
- else if (resType == 5)
- {
- width = (width * 8) / 5;
- }
+ if (resType == 4) {
+ div = size / 4;
+ } else if (resType == 5) {
+ width = (width * 8) / 5;
+ }
- filesDatabase[entryNumber].subData.ptr = (uint8*)mallocAndZero(size + div);
+ filesDatabase[entryNumber].subData.ptr =
+ (uint8 *) mallocAndZero(size + div);
- if(filesDatabase[entryNumber].subData.ptr)
- {
- return(-2);
- }
+ if (filesDatabase[entryNumber].subData.ptr) {
+ return (-2);
+ }
- filesDatabase[entryNumber].widthInColumn = width;
- filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr + size;
- filesDatabase[entryNumber].width = width / 8;
- filesDatabase[entryNumber].resType = resType;
- filesDatabase[entryNumber].height = height;
- filesDatabase[entryNumber].subData.index = -1;
+ filesDatabase[entryNumber].widthInColumn = width;
+ filesDatabase[entryNumber].subData.ptr2 =
+ filesDatabase[entryNumber].subData.ptr + size;
+ filesDatabase[entryNumber].width = width / 8;
+ filesDatabase[entryNumber].resType = resType;
+ filesDatabase[entryNumber].height = height;
+ filesDatabase[entryNumber].subData.index = -1;
- return entryNumber;
+ return entryNumber;
}
-fileTypeEnum getFileType(uint8* name)
-{
- char extentionBuffer[16];
+fileTypeEnum getFileType(uint8 *name) {
+ char extentionBuffer[16];
- fileTypeEnum newFileType = type_UNK;
+ fileTypeEnum newFileType = type_UNK;
- getFileExtention((char*)name,extentionBuffer);
+ getFileExtention((char *)name, extentionBuffer);
- if(!strcmp(extentionBuffer,".SPL"))
- {
- newFileType = type_SPL;
- }
- else
- if(!strcmp(extentionBuffer,".SET"))
- {
- newFileType = type_SET;
- }
- else
- if(!strcmp(extentionBuffer,".FNT"))
- {
- newFileType = type_FNT;
- }
+ if (!strcmp(extentionBuffer, ".SPL")) {
+ newFileType = type_SPL;
+ } else if (!strcmp(extentionBuffer, ".SET")) {
+ newFileType = type_SET;
+ } else if (!strcmp(extentionBuffer, ".FNT")) {
+ newFileType = type_FNT;
+ }
- ASSERT(newFileType != type_UNK);
+ ASSERT(newFileType != type_UNK);
- return newFileType;
+ return newFileType;
}
-int getNumMaxEntiresInSet(uint8* ptr)
-{
- uint16 numEntries = *(uint16*)(ptr + 4);
- flipShort(&numEntries);
+int getNumMaxEntiresInSet(uint8 *ptr) {
+ uint16 numEntries = *(uint16 *) (ptr + 4);
+ flipShort(&numEntries);
- return numEntries;
+ return numEntries;
}
-int loadFileMode2(uint8* name, int startIdx, int currentEntryIdx, int numIdx)
-{
- uint8* ptr = NULL;
- fileTypeEnum fileType;
-
- fileType = getFileType(name);
-
- loadFileSub1(&ptr, name, NULL);
-
- switch(fileType)
- {
- case type_SET:
- {
- int i;
- int numMaxEntriesInSet = getNumMaxEntiresInSet(ptr);
-
- for(i = 0; i < numIdx; i++)
- {
- if ((currentEntryIdx + i) > numMaxEntriesInSet)
+int loadFileMode2(uint8 *name, int startIdx, int currentEntryIdx, int numIdx) {
+ uint8 *ptr = NULL;
+ fileTypeEnum fileType;
+
+ fileType = getFileType(name);
+
+ loadFileSub1(&ptr, name, NULL);
+
+ switch (fileType) {
+ case type_SET:
{
- return 0; // exit if limit is reached
+ int i;
+ int numMaxEntriesInSet = getNumMaxEntiresInSet(ptr);
+
+ for (i = 0; i < numIdx; i++) {
+ if ((currentEntryIdx + i) > numMaxEntriesInSet) {
+ return 0; // exit if limit is reached
+ }
+ loadSetEntry(name, ptr, currentEntryIdx + i,
+ startIdx + i);
+ }
+
+ break;
+ }
+ case type_FNT:
+ {
+ loadFNTSub(ptr, startIdx);
+ break;
+ }
+ case type_UNK:
+ {
+ break;
+ }
+ case type_SPL:
+ {
+ break;
}
- loadSetEntry(name, ptr, currentEntryIdx + i, startIdx + i);
- }
-
- break;
- }
- case type_FNT:
- {
- loadFNTSub(ptr, startIdx);
- break;
- }
- case type_UNK:
- {
- break;
- }
- case type_SPL:
- {
- break;
}
- }
- return 0;
+ return 0;
}
-int loadFullBundle(uint8* name, int startIdx)
-{
- uint8* ptr = NULL;
- fileTypeEnum fileType;
-
- fileType = getFileType(name);
-
- loadFileSub1(&ptr,name,NULL);
-
- switch(fileType)
- {
- case type_SET:
- {
- int i;
- int numMaxEntriesInSet;
-
- numMaxEntriesInSet = getNumMaxEntiresInSet(ptr); // get maximum number of sprites/animations in SET file
-
- for(i = 0; i < numMaxEntriesInSet; i++)
- {
- loadSetEntry(name, ptr, i, startIdx+i);
- }
-
- break;
- }
- case type_FNT:
- {
- loadFNTSub(ptr, startIdx);
- break;
- }
- case type_UNK:
- {
- break;
- }
- case type_SPL:
- {
- break;
+int loadFullBundle(uint8 *name, int startIdx) {
+ uint8 *ptr = NULL;
+ fileTypeEnum fileType;
+
+ fileType = getFileType(name);
+
+ loadFileSub1(&ptr, name, NULL);
+
+ switch (fileType) {
+ case type_SET:
+ {
+ int i;
+ int numMaxEntriesInSet;
+
+ numMaxEntriesInSet = getNumMaxEntiresInSet(ptr); // get maximum number of sprites/animations in SET file
+
+ for (i = 0; i < numMaxEntriesInSet; i++) {
+ loadSetEntry(name, ptr, i, startIdx + i);
+ }
+
+ break;
+ }
+ case type_FNT:
+ {
+ loadFNTSub(ptr, startIdx);
+ break;
+ }
+ case type_UNK:
+ {
+ break;
+ }
+ case type_SPL:
+ {
+ break;
+ }
}
- }
- return 0;
+ return 0;
}
-void loadFNTSub(uint8* ptr, int destIdx)
-{
- uint8* ptr2 = ptr;
- uint8* destPtr;
- int fileIndex;
- uint32 fontSize;
-
- ptr2 += 4;
- memcpy(&loadFileVar1, ptr2, 4);
+void loadFNTSub(uint8 *ptr, int destIdx) {
+ uint8 *ptr2 = ptr;
+ uint8 *destPtr;
+ int fileIndex;
+ uint32 fontSize;
- flipLong(&loadFileVar1);
+ ptr2 += 4;
+ memcpy(&loadFileVar1, ptr2, 4);
- if(destIdx == -1)
- {
- fileIndex = createResFileEntry(loadFileVar1, 1 ,1);
- }
- else
- {
- fileIndex = updateResFileEntry(loadFileVar1, 1, destIdx, 1);
- }
+ flipLong(&loadFileVar1);
- destPtr = filesDatabase[fileIndex].subData.ptr;
+ if (destIdx == -1) {
+ fileIndex = createResFileEntry(loadFileVar1, 1, 1);
+ } else {
+ fileIndex = updateResFileEntry(loadFileVar1, 1, destIdx, 1);
+ }
- memcpy(destPtr, ptr2, loadFileVar1);
+ destPtr = filesDatabase[fileIndex].subData.ptr;
- memcpy(&fontSize,ptr2,4);
- flipLong(&fontSize);
+ memcpy(destPtr, ptr2, loadFileVar1);
- if(destPtr!=NULL)
- {
+ memcpy(&fontSize, ptr2, 4);
+ flipLong(&fontSize);
+
+ if (destPtr != NULL) {
int32 i;
- uint8* currentPtr;
+ uint8 *currentPtr;
destPtr = filesDatabase[fileIndex].subData.ptr;
- flipLong((int32*) destPtr);
- flipLong((int32*) (destPtr + 4));
+ flipLong((int32 *) destPtr);
+ flipLong((int32 *) (destPtr + 4));
flipGen(destPtr + 8, 6);
currentPtr = destPtr + 14;
- for(i = 0; i < *(int16*) (destPtr + 8); i++)
- {
- flipLong((int32*) currentPtr);
+ for (i = 0; i < *(int16 *) (destPtr + 8); i++) {
+ flipLong((int32 *) currentPtr);
currentPtr += 4;
flipGen(currentPtr, 8);
@@ -429,120 +397,124 @@ void loadFNTSub(uint8* ptr, int destIdx)
}
}
-void loadSetEntry(uint8* name, uint8* ptr, int currentEntryIdx, int currentDestEntry)
-{
- uint8* ptr2;
- uint8* ptr3;
- int offset;
- int sec = 0;
- uint16 numIdx;
-
- if (!strcmpuint8(ptr,"SEC"))
- {
- sec = 1;
- }
-
- ptr2 = ptr + 4;
-
- memcpy(&numIdx,ptr2,2);
- flipShort(&numIdx);
-
- ptr3 = ptr + 6;
-
- offset = currentEntryIdx*16;
-
- {
- uint8* ptr4;
- int resourceSize;
- int fileIndex;
- setHeaderEntry localBuffer;
- uint8* ptr5;
-
- ptr4 = ptr + offset + 6;
-
- memcpy(&localBuffer, ptr4, sizeof(setHeaderEntry));
-
- flipLong((int32*) &localBuffer.field_0);
- flipGen(&localBuffer.width, 12);
-
- if ((sec == 1) || (localBuffer.type == 5))
- {
- localBuffer.width = localBuffer.width - (localBuffer.type * 2); // Type 1: Width - (1*2) , Type 5: Width - (5*2)
- }
-
- resourceSize = localBuffer.width * localBuffer.height;
-
- if(currentDestEntry == -1)
- {
- fileIndex = createResFileEntry(localBuffer.width,localBuffer.height,localBuffer.type);
- }
- else
- {
- fileIndex = updateResFileEntry(localBuffer.height, localBuffer.width, currentDestEntry, localBuffer.type);
- }
-
- if(fileIndex < 0)
- {
- return; // TODO: buffer is not freed
- }
-
- ptr5 = ptr3 + localBuffer.field_0 + numIdx * 16;
-
- memcpy(filesDatabase[fileIndex].subData.ptr,ptr5, resourceSize);
- ptr5 += resourceSize;
-
- switch(localBuffer.type)
- {
- case 0:
- {
- filesDatabase[fileIndex].subData.resourceType = 8;
- break;
- }
- case 1:
- {
- filesDatabase[fileIndex].subData.resourceType = 2;
- decodeGfxFormat1(&filesDatabase[fileIndex]);
- break;
- }
- case 4:
- {
- filesDatabase[fileIndex].width *= 2;
- filesDatabase[fileIndex].subData.resourceType = 4;
- decodeGfxFormat4(&filesDatabase[fileIndex]);
- break;
- }
- case 5:
- {
- if (sec == 0)
- {
- // TODO sec type 5 needs special conversion. cut out 2 bytes at every width/5 position.
- return;
- }
- filesDatabase[fileIndex].subData.resourceType = 4;
- decodeGfxFormat5(&filesDatabase[fileIndex]);
- break;
- }
- case 8:
- {
- filesDatabase[fileIndex].subData.resourceType = 4; // dummy !
- break;
- }
- default:
- {
- printf("Unsuported gfx loading type: %d\n", localBuffer.type);
- break;
- }
- }
-
- filesDatabase[fileIndex].subData.index = currentDestEntry;
- filesDatabase[fileIndex].subData.transparency = localBuffer.transparency; /*% 0x10*/;
-
- strcpyuint8(filesDatabase[fileIndex].subData.name,name);
- }
-
- // TODO: free
-
- return;
+void loadSetEntry(uint8 *name, uint8 *ptr, int currentEntryIdx,
+ int currentDestEntry) {
+ uint8 *ptr2;
+ uint8 *ptr3;
+ int offset;
+ int sec = 0;
+ uint16 numIdx;
+
+ if (!strcmpuint8(ptr, "SEC")) {
+ sec = 1;
+ }
+
+ ptr2 = ptr + 4;
+
+ memcpy(&numIdx, ptr2, 2);
+ flipShort(&numIdx);
+
+ ptr3 = ptr + 6;
+
+ offset = currentEntryIdx * 16;
+
+ {
+ uint8 *ptr4;
+ int resourceSize;
+ int fileIndex;
+ setHeaderEntry localBuffer;
+ uint8 *ptr5;
+
+ ptr4 = ptr + offset + 6;
+
+ memcpy(&localBuffer, ptr4, sizeof(setHeaderEntry));
+
+ flipLong((int32 *) & localBuffer.field_0);
+ flipGen(&localBuffer.width, 12);
+
+ if ((sec == 1) || (localBuffer.type == 5)) {
+ localBuffer.width = localBuffer.width - (localBuffer.type * 2); // Type 1: Width - (1*2) , Type 5: Width - (5*2)
+ }
+
+ resourceSize = localBuffer.width * localBuffer.height;
+
+ if (currentDestEntry == -1) {
+ fileIndex =
+ createResFileEntry(localBuffer.width,
+ localBuffer.height, localBuffer.type);
+ } else {
+ fileIndex =
+ updateResFileEntry(localBuffer.height,
+ localBuffer.width, currentDestEntry,
+ localBuffer.type);
+ }
+
+ if (fileIndex < 0) {
+ return; // TODO: buffer is not freed
+ }
+
+ ptr5 = ptr3 + localBuffer.field_0 + numIdx * 16;
+
+ memcpy(filesDatabase[fileIndex].subData.ptr, ptr5,
+ resourceSize);
+ ptr5 += resourceSize;
+
+ switch (localBuffer.type) {
+ case 0:
+ {
+ filesDatabase[fileIndex].subData.resourceType =
+ 8;
+ break;
+ }
+ case 1:
+ {
+ filesDatabase[fileIndex].subData.resourceType =
+ 2;
+ decodeGfxFormat1(&filesDatabase[fileIndex]);
+ break;
+ }
+ case 4:
+ {
+ filesDatabase[fileIndex].width *= 2;
+ filesDatabase[fileIndex].subData.resourceType =
+ 4;
+ decodeGfxFormat4(&filesDatabase[fileIndex]);
+ break;
+ }
+ case 5:
+ {
+ if (sec == 0) {
+ // TODO sec type 5 needs special conversion. cut out 2 bytes at every width/5 position.
+ return;
+ }
+ filesDatabase[fileIndex].subData.resourceType =
+ 4;
+ decodeGfxFormat5(&filesDatabase[fileIndex]);
+ break;
+ }
+ case 8:
+ {
+ filesDatabase[fileIndex].subData.resourceType = 4; // dummy !
+ break;
+ }
+ default:
+ {
+ printf("Unsuported gfx loading type: %d\n",
+ localBuffer.type);
+ break;
+ }
+ }
+
+ filesDatabase[fileIndex].subData.index = currentDestEntry;
+ filesDatabase[fileIndex].subData.transparency =
+ localBuffer.transparency; /*% 0x10 */ ;
+
+ strcpyuint8(filesDatabase[fileIndex].subData.name, name);
+ }
+
+ // TODO: free
+
+ return;
}
} // End of namespace Cruise