diff options
author | Torbjörn Andersson | 2006-05-26 09:36:41 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2006-05-26 09:36:41 +0000 |
commit | 985215a04a6dfa9a07d7a8987b639c95b1721c24 (patch) | |
tree | c2c0883ce60a3049a56be63010a49ae9c97687cf /engines/cine/anim.cpp | |
parent | 003504272565235710a9f742c8763d13182cca5f (diff) | |
download | scummvm-rg350-985215a04a6dfa9a07d7a8987b639c95b1721c24.tar.gz scummvm-rg350-985215a04a6dfa9a07d7a8987b639c95b1721c24.tar.bz2 scummvm-rg350-985215a04a6dfa9a07d7a8987b639c95b1721c24.zip |
As far as I can tell, there's no longer any reason for PartBuffer and AnimData
to be packed, so I've removed the packing and added the 'refresh' field to
AnimData instead of having it as a separate array.
On the other hand, animHeaderStruct and animHeader2Struct *should* have been
packed, but weren't. I've changed they way they are initialised so that the
packing should no longer matter for them either.
svn-id: r22651
Diffstat (limited to 'engines/cine/anim.cpp')
-rw-r--r-- | engines/cine/anim.cpp | 123 |
1 files changed, 88 insertions, 35 deletions
diff --git a/engines/cine/anim.cpp b/engines/cine/anim.cpp index b5a52bed2b..10aee450cb 100644 --- a/engines/cine/anim.cpp +++ b/engines/cine/anim.cpp @@ -24,6 +24,7 @@ #include "common/stdafx.h" #include "common/endian.h" +#include "common/stream.h" #include "cine/cine.h" #include "cine/anim.h" @@ -404,14 +405,28 @@ void loadMsk(const char *resourceName) { foundFileIdx = findFileInBundle(resourceName); dataPtr = readBundleFile(foundFileIdx); - ptr = dataPtr; - - memcpy(&animHeader, ptr, sizeof(animHeaderStruct)); - ptr += sizeof(animHeaderStruct); - - animHeader.frameWidth = TO_BE_16(animHeader.frameWidth); - animHeader.frameHeight = TO_BE_16(animHeader.frameHeight); - animHeader.numFrames = TO_BE_16(animHeader.numFrames); + Common::MemoryReadStream readS(dataPtr, 0x16); + + animHeader.field_0 = readS.readByte(); + animHeader.field_1 = readS.readByte(); + animHeader.field_2 = readS.readByte(); + animHeader.field_3 = readS.readByte(); + animHeader.frameWidth = readS.readUint16BE(); + animHeader.frameHeight = readS.readUint16BE(); + animHeader.field_8 = readS.readByte(); + animHeader.field_9 = readS.readByte(); + animHeader.field_A = readS.readByte(); + animHeader.field_B = readS.readByte(); + animHeader.field_C = readS.readByte(); + animHeader.field_D = readS.readByte(); + animHeader.numFrames = readS.readUint16BE(); + animHeader.field_10 = readS.readByte(); + animHeader.field_11 = readS.readByte(); + animHeader.field_12 = readS.readByte(); + animHeader.field_13 = readS.readByte(); + animHeader.field_14 = readS.readUint16BE(); + + ptr = dataPtr + 0x16; for (i = 0; i < animHeader.numFrames; i++) { entry = allocFrame(animHeader.frameWidth * 2, animHeader.frameHeight, 1); @@ -439,14 +454,28 @@ void loadAni(const char *resourceName) { foundFileIdx = findFileInBundle(resourceName); dataPtr = readBundleFile(foundFileIdx); - ptr = dataPtr; - - memcpy(&animHeader, ptr, sizeof(animHeaderStruct)); - ptr += sizeof(animHeaderStruct); - - animHeader.frameWidth = TO_BE_16(animHeader.frameWidth); - animHeader.frameHeight = TO_BE_16(animHeader.frameHeight); - animHeader.numFrames = TO_BE_16(animHeader.numFrames); + Common::MemoryReadStream readS(dataPtr, 0x16); + + animHeader.field_0 = readS.readByte(); + animHeader.field_1 = readS.readByte(); + animHeader.field_2 = readS.readByte(); + animHeader.field_3 = readS.readByte(); + animHeader.frameWidth = readS.readUint16BE(); + animHeader.frameHeight = readS.readUint16BE(); + animHeader.field_8 = readS.readByte(); + animHeader.field_9 = readS.readByte(); + animHeader.field_A = readS.readByte(); + animHeader.field_B = readS.readByte(); + animHeader.field_C = readS.readByte(); + animHeader.field_D = readS.readByte(); + animHeader.numFrames = readS.readUint16BE(); + animHeader.field_10 = readS.readByte(); + animHeader.field_11 = readS.readByte(); + animHeader.field_12 = readS.readByte(); + animHeader.field_13 = readS.readByte(); + animHeader.field_14 = readS.readUint16BE(); + + ptr = dataPtr + 0x16; transparentColor = getAnimTransparentColor(resourceName); @@ -631,13 +660,17 @@ void loadSet(const char *resourceName) { int16 typeParam; byte table[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - memcpy(&header2, ptr, 0x10); - ptr += 0x10; + Common::MemoryReadStream readS(ptr, 0x10); - header2.field_0 = TO_BE_32(header2.field_0); - header2.width = TO_BE_16(header2.width); - header2.height = TO_BE_16(header2.height); - header2.type = TO_BE_16(header2.type); + header2.field_0 = readS.readUint32BE(); + header2.width = readS.readUint16BE(); + header2.height = readS.readUint16BE(); + header2.type = readS.readUint16BE(); + header2.field_A = readS.readUint16BE(); + header2.field_C = readS.readUint16BE(); + header2.field_E = readS.readUint16BE(); + + ptr += 0x10; fullSize = header2.width * header2.height; @@ -714,13 +747,17 @@ void loadSetAbs(const char *resourceName, uint16 idx) { int16 typeParam; byte table[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - memcpy(&header2, ptr, 0x10); - ptr += 0x10; + Common::MemoryReadStream readS(ptr, 0x10); - header2.field_0 = TO_BE_32(header2.field_0); - header2.width = TO_BE_16(header2.width); - header2.height = TO_BE_16(header2.height); - header2.type = TO_BE_16(header2.type); + header2.field_0 = readS.readUint32BE(); + header2.width = readS.readUint16BE(); + header2.height = readS.readUint16BE(); + header2.type = readS.readUint16BE(); + header2.field_A = readS.readUint16BE(); + header2.field_C = readS.readUint16BE(); + header2.field_E = readS.readUint16BE(); + + ptr += 0x10; fullSize = header2.width * header2.height; @@ -855,7 +892,7 @@ void loadResourcesFromSave() { for (currentAnim = 0; currentAnim < NUM_MAX_ANIMDATA; currentAnim++) { AnimData *currentPtr = &animDataTable[currentAnim]; - if (refreshAnimData[currentAnim] && currentPtr->fileIdx != -1) { + if (currentPtr->refresh && currentPtr->fileIdx != -1) { int8 isMask = 0; int8 isSpl = 0; int16 foundFileIdx; @@ -892,12 +929,28 @@ void loadResourcesFromSave() { animHeader.numFrames = 1; isMask = -1; } else { - memcpy(&animHeader, ptr, sizeof(animHeaderStruct)); - ptr += sizeof(animHeaderStruct); - - animHeader.frameWidth = TO_BE_16(animHeader.frameWidth); - animHeader.frameHeight = TO_BE_16(animHeader.frameHeight); - animHeader.numFrames = TO_BE_16(animHeader.numFrames); + Common::MemoryReadStream readS(ptr, 0x22); + + animHeader.field_0 = readS.readByte(); + animHeader.field_1 = readS.readByte(); + animHeader.field_2 = readS.readByte(); + animHeader.field_3 = readS.readByte(); + animHeader.frameWidth = readS.readUint16BE(); + animHeader.frameHeight = readS.readUint16BE(); + animHeader.field_8 = readS.readByte(); + animHeader.field_9 = readS.readByte(); + animHeader.field_A = readS.readByte(); + animHeader.field_B = readS.readByte(); + animHeader.field_C = readS.readByte(); + animHeader.field_D = readS.readByte(); + animHeader.numFrames = readS.readUint16BE(); + animHeader.field_10 = readS.readByte(); + animHeader.field_11 = readS.readByte(); + animHeader.field_12 = readS.readByte(); + animHeader.field_13 = readS.readByte(); + animHeader.field_14 = readS.readUint16BE(); + + ptr += 0x16; } { |