aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/cine/anim.cpp2
-rw-r--r--engines/cine/various.cpp11
-rw-r--r--engines/cine/various.h2
3 files changed, 14 insertions, 1 deletions
diff --git a/engines/cine/anim.cpp b/engines/cine/anim.cpp
index 51a1deeb7a..b5a52bed2b 100644
--- a/engines/cine/anim.cpp
+++ b/engines/cine/anim.cpp
@@ -855,7 +855,7 @@ void loadResourcesFromSave() {
for (currentAnim = 0; currentAnim < NUM_MAX_ANIMDATA; currentAnim++) {
AnimData *currentPtr = &animDataTable[currentAnim];
- if (currentPtr->ptr1 && currentPtr->fileIdx != -1) {
+ if (refreshAnimData[currentAnim] && currentPtr->fileIdx != -1) {
int8 isMask = 0;
int8 isSpl = 0;
int16 foundFileIdx;
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 78dc6e2ae6..5e54e17aec 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -52,6 +52,8 @@ uint16 var3;
uint16 var4;
uint16 var5;
+bool refreshAnimData[NUM_MAX_ANIMDATA];
+
void drawString(const char *string, byte param) {
}
@@ -651,6 +653,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);
}
// TODO: handle screen params (realy required ?)
@@ -811,6 +814,14 @@ void makeSave(char *saveFileName) {
fHandle->writeSint16BE(animDataTable[i].fileIdx);
fHandle->writeSint16BE(animDataTable[i].frameIdx);
fHandle->write(animDataTable[i].name, 10);
+
+ // Horrifyingly, cinE used to dump the entire struct to the
+ // save file, including the data pointers. While these pointers
+ // would be invalid after loading, the loadResourcesFromSave()
+ // function would still test if ptr1 was non-NULL, presumably
+ // to see if the object was present in the room.
+
+ fHandle->writeByte(animDataTable[i].ptr1 ? 1 : 0);
}
fHandle->writeUint16BE(0); // Screen params, unhandled
diff --git a/engines/cine/various.h b/engines/cine/various.h
index eb71fd6835..079b458ec9 100644
--- a/engines/cine/various.h
+++ b/engines/cine/various.h
@@ -81,6 +81,8 @@ extern uint16 var3;
extern uint16 var4;
extern uint16 var5;
+extern bool refreshAnimData[NUM_MAX_ANIMDATA];
+
extern Common::File palFileHandle;
extern Common::File partFileHandle;