aboutsummaryrefslogtreecommitdiff
path: root/saveload.cpp
diff options
context:
space:
mode:
authorLudvig Strigeus2001-11-14 18:40:39 +0000
committerLudvig Strigeus2001-11-14 18:40:39 +0000
commitb8d259d60eed2f8edc321dcba6116bddabbc35e8 (patch)
tree84d98395311081717250ea496df496fe88b5707d /saveload.cpp
parent279d5b2fd73057dc48b9f18a8753a2a5cff1c2e6 (diff)
downloadscummvm-rg350-b8d259d60eed2f8edc321dcba6116bddabbc35e8.tar.gz
scummvm-rg350-b8d259d60eed2f8edc321dcba6116bddabbc35e8.tar.bz2
scummvm-rg350-b8d259d60eed2f8edc321dcba6116bddabbc35e8.zip
music support,
fixed timing bugs svn-id: r3491
Diffstat (limited to 'saveload.cpp')
-rw-r--r--saveload.cpp44
1 files changed, 29 insertions, 15 deletions
diff --git a/saveload.cpp b/saveload.cpp
index 49c4cdd1e9..615d89ad78 100644
--- a/saveload.cpp
+++ b/saveload.cpp
@@ -21,6 +21,7 @@
#include "stdafx.h"
#include "scumm.h"
+#include "sound.h"
struct SaveGameHeader {
uint32 type;
@@ -29,7 +30,7 @@ struct SaveGameHeader {
char name[32];
};
-#define CURRENT_VER 4
+#define CURRENT_VER 5
bool Scumm::saveState(int slot, bool compat) {
char filename[256];
@@ -67,6 +68,7 @@ bool Scumm::loadState(int slot, bool compat) {
SaveGameHeader hdr;
Serializer ser;
int sb,sh;
+ SoundEngine *se;
makeSavegameName(filename, slot, compat);
out = fopen(filename,"rb");
@@ -88,7 +90,9 @@ bool Scumm::loadState(int slot, bool compat) {
}
memcpy(_saveLoadName, hdr.name, sizeof(hdr.name));
-
+
+ pauseSounds(true);
+
CHECK_HEAP
openRoom(-1);
@@ -134,6 +138,8 @@ bool Scumm::loadState(int slot, bool compat) {
debug(1,"State loaded from '%s'", filename);
+ pauseSounds(false);
+
return true;
}
@@ -413,20 +419,22 @@ void Scumm::saveOrLoad(Serializer *s) {
};
const SaveLoadEntry stringTabEntries[] = {
+ MKLINE(StringTab,xpos,sleInt16),
MKLINE(StringTab,t_xpos,sleInt16),
+ MKLINE(StringTab,ypos,sleInt16),
MKLINE(StringTab,t_ypos,sleInt16),
+ MKLINE(StringTab,right,sleInt16),
+ MKLINE(StringTab,t_right,sleInt16),
+ MKLINE(StringTab,color,sleInt8),
+ MKLINE(StringTab,t_color,sleInt8),
+ MKLINE(StringTab,charset,sleInt8),
+ MKLINE(StringTab,t_charset,sleInt8),
+ MKLINE(StringTab,center,sleByte),
MKLINE(StringTab,t_center,sleByte),
+ MKLINE(StringTab,overhead,sleByte),
MKLINE(StringTab,t_overhead,sleByte),
+ MKLINE(StringTab,no_talk_anim,sleByte),
MKLINE(StringTab,t_no_talk_anim,sleByte),
- MKLINE(StringTab,t_right,sleInt16),
- MKLINE(StringTab,t_color,sleInt16),
- MKLINE(StringTab,t_charset,sleInt16),
- MKLINE(StringTab,xpos,sleInt16),
- MKLINE(StringTab,ypos,sleInt16),
- MKLINE(StringTab,center,sleInt16),
- MKLINE(StringTab,overhead,sleInt16),
- MKLINE(StringTab,no_talk_anim,sleInt16),
- MKLINE(StringTab,right,sleInt16),
MKEND()
};
@@ -478,6 +486,9 @@ void Scumm::saveOrLoad(Serializer *s) {
res.flags[r][s->loadWord()] |= 0x80;
}
}
+
+ if (_soundDriver)
+ ((SoundEngine*)_soundDriver)->save_or_load(s);
}
void Scumm::saveLoadResource(Serializer *ser, int type, int index) {
@@ -630,9 +641,10 @@ void Serializer::saveLoadEntries(void *d, const SaveLoadEntry *sle) {
int replen;
byte type;
byte *at;
-
int size;
int value;
+ int num;
+ void *ptr;
while(sle->offs != 0xFFFF) {
at = (byte*)d + sle->offs;
@@ -642,10 +654,12 @@ void Serializer::saveLoadEntries(void *d, const SaveLoadEntry *sle) {
if (size==0xFF) {
if (_saveOrLoad) {
/* save reference */
- saveWord((*_save_ref)(_ref_me, type, *((void**)at)));
+ ptr = *((void**)at);
+ saveWord(ptr ? ((*_save_ref)(_ref_me, type, ptr ) + 1) : 0);
} else {
/* load reference */
- *((void**)at) = (*_load_ref)(_ref_me, type, loadWord());
+ num = loadWord();
+ *((void**)at) = num ? (*_load_ref)(_ref_me, type, num-1) : NULL;
}
} else {
replen = 1;
@@ -655,8 +669,8 @@ void Serializer::saveLoadEntries(void *d, const SaveLoadEntry *sle) {
type&=~128;
}
saveLoadArrayOf(at, replen, size, type);
- sle++;
}
+ sle++;
}
}