[Scummvm-cvs-logs] SF.net SVN: scummvm: [22651] scummvm/trunk/engines/cine
eriktorbjorn at users.sourceforge.net
eriktorbjorn at users.sourceforge.net
Fri May 26 02:38:02 CEST 2006
Revision: 22651
Author: eriktorbjorn
Date: 2006-05-26 02:36:41 -0700 (Fri, 26 May 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=22651&view=rev
Log Message:
-----------
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.
Modified Paths:
--------------
scummvm/trunk/engines/cine/anim.cpp
scummvm/trunk/engines/cine/bg.cpp
scummvm/trunk/engines/cine/part.cpp
scummvm/trunk/engines/cine/part.h
scummvm/trunk/engines/cine/various.cpp
scummvm/trunk/engines/cine/various.h
Modified: scummvm/trunk/engines/cine/anim.cpp
===================================================================
--- scummvm/trunk/engines/cine/anim.cpp 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/anim.cpp 2006-05-26 09:36:41 UTC (rev 22651)
@@ -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 @@
foundFileIdx = findFileInBundle(resourceName);
dataPtr = readBundleFile(foundFileIdx);
- ptr = dataPtr;
+ Common::MemoryReadStream readS(dataPtr, 0x16);
- memcpy(&animHeader, ptr, sizeof(animHeaderStruct));
- ptr += sizeof(animHeaderStruct);
+ 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();
- animHeader.frameWidth = TO_BE_16(animHeader.frameWidth);
- animHeader.frameHeight = TO_BE_16(animHeader.frameHeight);
- animHeader.numFrames = TO_BE_16(animHeader.numFrames);
+ ptr = dataPtr + 0x16;
for (i = 0; i < animHeader.numFrames; i++) {
entry = allocFrame(animHeader.frameWidth * 2, animHeader.frameHeight, 1);
@@ -439,14 +454,28 @@
foundFileIdx = findFileInBundle(resourceName);
dataPtr = readBundleFile(foundFileIdx);
- ptr = dataPtr;
+ Common::MemoryReadStream readS(dataPtr, 0x16);
- memcpy(&animHeader, ptr, sizeof(animHeaderStruct));
- ptr += sizeof(animHeaderStruct);
+ 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();
- animHeader.frameWidth = TO_BE_16(animHeader.frameWidth);
- animHeader.frameHeight = TO_BE_16(animHeader.frameHeight);
- animHeader.numFrames = TO_BE_16(animHeader.numFrames);
+ ptr = dataPtr + 0x16;
transparentColor = getAnimTransparentColor(resourceName);
@@ -631,14 +660,18 @@
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);
+ Common::MemoryReadStream readS(ptr, 0x10);
+
+ 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;
- 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);
-
fullSize = header2.width * header2.height;
typeParam = 0;
@@ -714,14 +747,18 @@
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);
+ Common::MemoryReadStream readS(ptr, 0x10);
+
+ 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;
- 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);
-
fullSize = header2.width * header2.height;
typeParam = 0;
@@ -855,7 +892,7 @@
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 @@
animHeader.numFrames = 1;
isMask = -1;
} else {
- memcpy(&animHeader, ptr, sizeof(animHeaderStruct));
- ptr += sizeof(animHeaderStruct);
+ Common::MemoryReadStream readS(ptr, 0x22);
- animHeader.frameWidth = TO_BE_16(animHeader.frameWidth);
- animHeader.frameHeight = TO_BE_16(animHeader.frameHeight);
- animHeader.numFrames = TO_BE_16(animHeader.numFrames);
+ 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;
}
{
Modified: scummvm/trunk/engines/cine/bg.cpp
===================================================================
--- scummvm/trunk/engines/cine/bg.cpp 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/bg.cpp 2006-05-26 09:36:41 UTC (rev 22651)
@@ -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 @@
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);
Modified: scummvm/trunk/engines/cine/part.cpp
===================================================================
--- scummvm/trunk/engines/cine/part.cpp 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/part.cpp 2006-05-26 09:36:41 UTC (rev 22651)
@@ -193,8 +193,7 @@
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;
Modified: scummvm/trunk/engines/cine/part.h
===================================================================
--- scummvm/trunk/engines/cine/part.h 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/part.h 2006-05-26 09:36:41 UTC (rev 22651)
@@ -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 @@
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
Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/various.cpp 2006-05-26 09:36:41 UTC (rev 22651)
@@ -54,13 +54,6 @@
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 @@
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 ?)
Modified: scummvm/trunk/engines/cine/various.h
===================================================================
--- scummvm/trunk/engines/cine/various.h 2006-05-26 09:34:53 UTC (rev 22650)
+++ scummvm/trunk/engines/cine/various.h 2006-05-26 09:36:41 UTC (rev 22651)
@@ -84,8 +84,6 @@
extern uint16 var4;
extern uint16 var5;
-extern bool refreshAnimData[NUM_MAX_ANIMDATA];
-
extern Common::File palFileHandle;
extern Common::File partFileHandle;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list