diff options
Diffstat (limited to 'engines/tinsel')
-rw-r--r-- | engines/tinsel/handle.cpp | 135 |
1 files changed, 1 insertions, 134 deletions
diff --git a/engines/tinsel/handle.cpp b/engines/tinsel/handle.cpp index c839cb39e3..3921414b01 100644 --- a/engines/tinsel/handle.cpp +++ b/engines/tinsel/handle.cpp @@ -85,7 +85,6 @@ static char g_szCdPlayFile[100]; //----------------- FORWARD REFERENCES -------------------- static void LoadFile(MEMHANDLE *pH); // load a memory block as a file -static void convertFileToLE(MEMHANDLE *pH); /** * Loads the graphics handle table index file and preloads all the @@ -301,10 +300,7 @@ void LoadFile(MEMHANDLE *pH) { // discardable - unlock the memory MemoryUnlock(pH->_node); - - if (TinselV1Mac) - convertFileToLE(pH); - + // set the loaded flag pH->filesize |= fLoaded; @@ -380,135 +376,6 @@ byte *LockMem(SCNHANDLE offset) { return MemoryDeref(pH->_node) + (offset & OFFSETMASK); } -void convertFileToLE(MEMHANDLE *pH) { - assert(TinselV1Mac); - - char szFilename[sizeof(pH->szName) + 1]; - // extract and zero terminate the filename - memcpy(szFilename, pH->szName, sizeof(pH->szName)); - szFilename[sizeof(pH->szName)] = 0; - - debug("Converting file: %s", szFilename); - - byte *data = MemoryDeref(pH->_node); - byte *ptr = data; - - // Process each chunk - - while (true) { - uint32 pos = ptr - data; - - uint32 chunkId = READ_BE_UINT32(ptr); - WRITE_LE_UINT32(ptr, chunkId); ptr += 4; - - uint32 nextChunkOffset = READ_BE_UINT32(ptr); - WRITE_LE_UINT32(ptr, nextChunkOffset); ptr += 4; - - uint32 chunkSize = (nextChunkOffset > 0 ? nextChunkOffset : pH->filesize & FSIZE_MASK) - pos; - uint32 chunkDataSize = chunkSize - 4 - 4; // chunk ID, chunk length - - debug("Chunk ID: %x, size %d, next chunk: %d", chunkId, chunkSize, nextChunkOffset); - - switch (chunkId) { - case CHUNK_SCENE - 1: - assert(chunkDataSize == 8 * 4); - for (uint32 i = 0; i < 8; i++) { - // numEntrance, numPoly, numTaggedActor, defRefer, hSceneScript, - // hEntrance, hPoly, hTaggedActor - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_TOTAL_ACTORS - 1: - case CHUNK_TOTAL_GLOBALS - 1: - case CHUNK_TOTAL_OBJECTS - 1: - case CHUNK_TOTAL_POLY - 1: - assert(chunkDataSize == 4); - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - break; - case CHUNK_OBJECTS - 1: - // INV_OBJECT structure - assert(chunkDataSize % 16 == 0); - for (uint32 i = 0; i < chunkDataSize / 16; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // id - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // hIconFilm - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // hScript - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // attribute - } - break; - case CHUNK_FONT: - assert(chunkDataSize == 4 * 11 + 4 * 300 + 4 * 223); - // FONT structure: xSpacing, ySpacing, xShadow, yShadow, spaceSize - // OBJ_INIT: hObjImg, objFlags, objID, objX, objY, objZ - for (uint32 i = 0; i < 11; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - // SCNHANDLE fontDef[300] - for (uint32 i = 0; i < 300; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - // TODO: the font chunk in dw.scn is 2136 bytes, we've only processed the - // first 44 + 300 * 4 = 1244 ones, so we're left with 892 more... - // Since all resources are BE in the Mac version, I assume that these are - // 32-bit integers that should be byte swapped as well. - for (uint32 i = 0; i < 223; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_BITMAP: - // TODO - break; - case CHUNK_PALETTE: - // Palette entries: 32-bit integers, each one with [R, G, B, unused] bytes - assert(chunkDataSize % 256 == 0); - for (uint32 i = 0; i < 256; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_IMAGE: - assert(chunkDataSize % 16 == 0); - for (uint32 i = 0; i < chunkDataSize / 16; i++) { - WRITE_LE_UINT16(ptr, READ_BE_UINT16(ptr)); ptr += 2; // width - WRITE_LE_UINT16(ptr, READ_BE_UINT16(ptr)); ptr += 2; // height - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_ANI_FRAME: - assert(chunkDataSize % 8 == 0); - for (uint32 i = 0; i < chunkDataSize / 8; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // SCNHANDLE - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_FILM: - // Filled with 32-bit integers - assert(chunkDataSize % 4 == 0); - for (uint32 i = 0; i < chunkDataSize / 4; i++) { - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; - } - break; - case CHUNK_PCODE: - // Too complicated to handle here - handled by the script parser - break; - case CHUNK_ENTRANCE: - // Entrance structure (ENTRANCE_STRUC) - assert(chunkDataSize == 8); - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // eNumber - entrance number - WRITE_LE_UINT32(ptr, READ_BE_UINT32(ptr)); ptr += 4; // hScript - handle to entrance script - break; - default: - error("Unknown chunk ID: %x", chunkId); - } - - // Jump to the next chunk - if (!nextChunkOffset) - break; - - ptr = data + nextChunkOffset; - } -} - /** * Called to lock the current scene and make it non-discardable. * @param offset Handle and offset to data |