aboutsummaryrefslogtreecommitdiff
path: root/engines/cine/anim.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-05-26 09:36:41 +0000
committerTorbjörn Andersson2006-05-26 09:36:41 +0000
commit985215a04a6dfa9a07d7a8987b639c95b1721c24 (patch)
treec2c0883ce60a3049a56be63010a49ae9c97687cf /engines/cine/anim.cpp
parent003504272565235710a9f742c8763d13182cca5f (diff)
downloadscummvm-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.cpp123
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;
}
{