aboutsummaryrefslogtreecommitdiff
path: root/engines/cge
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cge')
-rw-r--r--engines/cge/cge.h2
-rw-r--r--engines/cge/cge_main.cpp4
-rw-r--r--engines/cge/snail.cpp23
-rw-r--r--engines/cge/vga13h.cpp7
4 files changed, 20 insertions, 16 deletions
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index 98f9ba8bc2..2ad66fc74a 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -41,7 +41,7 @@ namespace CGE {
class Console;
class Sprite;
-#define kSavegameVersion 1
+#define kSavegameVersion 2
#define kSavegameStrSize 11
#define kPocketX 174
#define kPocketY 176
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index 4b834c9800..aa332ed8ea 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -266,7 +266,7 @@ void CGEEngine::saveGame(int slotNumber, const Common::String &desc) {
writeSavegameHeader(saveFile, header);
// Write out the data of the savegame
- syncGame(NULL, saveFile);
+ syncGame(NULL, saveFile, false);
// Finish writing out game data
saveFile->finalize();
@@ -324,7 +324,7 @@ void CGEEngine::syncGame(Common::SeekableReadStream *readStream, Common::WriteSt
if (s.isSaving()) {
// Loop through saving the sprite data
for (Sprite *spr = _vga->_spareQ->first(); spr; spr = spr->_next) {
- if ((spr->_ref >= 1000) && !s.err())
+ if (!s.err())
spr->sync(s);
}
} else {
diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp
index 7893b9d539..0e9d834d17 100644
--- a/engines/cge/snail.cpp
+++ b/engines/cge/snail.cpp
@@ -826,17 +826,26 @@ void CGEEngine::snBackPt(Sprite *spr, int stp) {
void CGEEngine::snLevel(Sprite *spr, int lev) {
debugC(1, kCGEDebugEngine, "CGEEngine::snLevel(spr, %d)", lev);
- while (_lev < lev) {
- _lev++;
- spr = _vga->_spareQ->locate(100 + _lev);
+ assert((lev >= 0) && (lev < 5));
+
+ for (int i = 0; i < 5; i++) {
+ spr = _vga->_spareQ->locate(100 + i);
if (spr) {
- spr->backShow(true);
- spr->_cave = 0;
+ if (i <= lev) {
+ spr->backShow(true);
+ spr->_cave = 0;
+ spr->_flags._hide = false;
+ } else {
+ spr->_flags._hide = true;
+ spr->_cave = -1;
+ }
+ } else {
+ warning("SPR not found! ref: %d", 100 + i);
}
}
+
+ _lev = lev;
_maxCave = _maxCaveArr[_lev];
- if (spr)
- spr->_flags._hide = false;
}
void CGEEngine::snFlag(int indx, bool v) {
diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp
index d510b98f45..3db504425f 100644
--- a/engines/cge/vga13h.cpp
+++ b/engines/cge/vga13h.cpp
@@ -99,13 +99,8 @@ BitmapPtr Sprite::shp() {
return NULL;
int i = e->_seq[_seqPtr]._now;
- if (i >= _shpCnt) {
- //char s[256];
- //sprintf(s, "Seq=%p ShpCnt=%d SeqPtr=%d Now=%d Next=%d",
- // Seq, ShpCnt, SeqPtr, Seq[SeqPtr].Now, Seq[SeqPtr].Next);
- //VGA::Exit(s, File);
+ if (i >= _shpCnt)
error("Invalid PHASE in SPRITE::Shp() %s", _file);
- }
return e->_shpList[i];
}