aboutsummaryrefslogtreecommitdiff
path: root/engines/cine/anim.cpp
diff options
context:
space:
mode:
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;
}
{