aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--engines/cine/anim.cpp123
-rw-r--r--engines/cine/bg.cpp5
-rw-r--r--engines/cine/part.cpp3
-rw-r--r--engines/cine/part.h12
-rw-r--r--engines/cine/various.cpp9
-rw-r--r--engines/cine/various.h2
6 files changed, 97 insertions, 57 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;
}
{
diff --git a/engines/cine/bg.cpp b/engines/cine/bg.cpp
index d2dcf60c75..397557d905 100644
--- a/engines/cine/bg.cpp
+++ b/engines/cine/bg.cpp
@@ -24,6 +24,7 @@
#include "common/stdafx.h"
#include "common/endian.h"
+#include "common/stream.h"
#include "cine/cine.h"
#include "cine/various.h"
@@ -58,10 +59,10 @@ byte loadCt(const char *ctName) {
assert(strstr(ctName, ".NEO"));
- memcpy(header, ptr, 32);
+ Common::MemoryReadStream readS(ptr, 32);
for (int i = 0; i < 16; i++) {
- header[i] = TO_BE_16(header[i]);
+ header[i] = readS.readUint16BE();
}
gfxConvertSpriteToRaw(page3Raw, ptr + 0x80, 160, 200);
diff --git a/engines/cine/part.cpp b/engines/cine/part.cpp
index 37bf41ec69..5346a380a9 100644
--- a/engines/cine/part.cpp
+++ b/engines/cine/part.cpp
@@ -193,8 +193,7 @@ void readFromPart(int16 idx, byte *dataPtr) {
byte *readBundleFile(int16 foundFileIdx) {
byte *dataPtr;
- dataPtr = (byte *) malloc(partBuffer[foundFileIdx].unpackedSize);
- memset(dataPtr, 0, partBuffer[foundFileIdx].unpackedSize);
+ dataPtr = (byte *)calloc(partBuffer[foundFileIdx].unpackedSize, 1);
if (partBuffer[foundFileIdx].unpackedSize != partBuffer[foundFileIdx].packedSize) {
byte *unpackBuffer;
diff --git a/engines/cine/part.h b/engines/cine/part.h
index f02cf2996d..ff51f8e307 100644
--- a/engines/cine/part.h
+++ b/engines/cine/part.h
@@ -26,16 +26,13 @@
#define CINE_PART_H_
namespace Cine {
-#if !defined(__GNUC__)
- #pragma START_PACK_STRUCTS
-#endif
struct PartBuffer {
char partName[14];
uint32 offset;
uint32 packedSize;
uint32 unpackedSize;
-} GCC_PACK;
+};
struct AnimData {
uint16 width;
@@ -48,11 +45,10 @@ struct AnimData {
int16 fileIdx;
int16 frameIdx;
char name[10];
-} GCC_PACK;
-#if !defined(__GNUC__)
- #pragma END_PACK_STRUCTS
-#endif
+ // Not part of the data, but used when saving/restoring it.
+ bool refresh;
+};
#define NUM_MAX_PARTDATA 255
#define NUM_MAX_ANIMDATA 255
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 4ea8f8712f..a36dd7b229 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -54,13 +54,6 @@ uint16 var5;
int16 buildObjectListCommand(void);
-// TODO: This could/should be a field in the AnimData struct, but as long as it
-// is marked as packed I don't dare add anything to it without knowing more
-// about how it's used. (It's quite possible that it no longer needs to be
-// packed.)
-
-bool refreshAnimData[NUM_MAX_ANIMDATA];
-
void drawString(const char *string, byte param) {
}
@@ -760,7 +753,7 @@ int16 makeLoad(char *saveName) {
animDataTable[i].fileIdx = fHandle->readSint16BE();
animDataTable[i].frameIdx = fHandle->readSint16BE();
fHandle->read(animDataTable[i].name, 10);
- refreshAnimData[i] = (fHandle->readByte() != 0);
+ animDataTable[i].refresh = (fHandle->readByte() != 0);
}
// TODO: handle screen params (really required ?)
diff --git a/engines/cine/various.h b/engines/cine/various.h
index a7d20b8397..b4fd60ade8 100644
--- a/engines/cine/various.h
+++ b/engines/cine/various.h
@@ -84,8 +84,6 @@ extern uint16 var3;
extern uint16 var4;
extern uint16 var5;
-extern bool refreshAnimData[NUM_MAX_ANIMDATA];
-
extern Common::File palFileHandle;
extern Common::File partFileHandle;