aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2015-07-05 19:16:54 -0400
committerPaul Gilbert2015-07-05 19:16:54 -0400
commit8570f052a39eb6ba4efe3764eb152076fbcd2f76 (patch)
treeeb71d36ac795fdb5118fb1a864a7843f5edec889 /engines
parent24663029035ec9bfd228e2dada39235656ac1daa (diff)
downloadscummvm-rg350-8570f052a39eb6ba4efe3764eb152076fbcd2f76.tar.gz
scummvm-rg350-8570f052a39eb6ba4efe3764eb152076fbcd2f76.tar.bz2
scummvm-rg350-8570f052a39eb6ba4efe3764eb152076fbcd2f76.zip
SHERLOCK: RT: Cleanup and fleshing out of saving
Diffstat (limited to 'engines')
-rw-r--r--engines/sherlock/journal.cpp20
-rw-r--r--engines/sherlock/journal.h10
-rw-r--r--engines/sherlock/objects.cpp11
-rw-r--r--engines/sherlock/objects.h6
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.cpp20
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.h5
-rw-r--r--engines/sherlock/tattoo/tattoo_journal.cpp4
-rw-r--r--engines/sherlock/tattoo/tattoo_journal.h5
-rw-r--r--engines/sherlock/tattoo/tattoo_people.cpp61
-rw-r--r--engines/sherlock/tattoo/tattoo_people.h5
10 files changed, 98 insertions, 49 deletions
diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp
index 6a4347ae04..9441d6682a 100644
--- a/engines/sherlock/journal.cpp
+++ b/engines/sherlock/journal.cpp
@@ -683,4 +683,24 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
}
}
+void Journal::synchronize(Serializer &s) {
+ s.syncAsSint16LE(_index);
+ s.syncAsSint16LE(_sub);
+ s.syncAsSint16LE(_page);
+ s.syncAsSint16LE(_maxPage);
+
+ int journalCount = _journal.size();
+ s.syncAsUint16LE(journalCount);
+ if (s.isLoading())
+ _journal.resize(journalCount);
+
+ for (uint idx = 0; idx < _journal.size(); ++idx) {
+ JournalEntry &je = _journal[idx];
+
+ s.syncAsSint16LE(je._converseNum);
+ s.syncAsByte(je._replyOnly);
+ s.syncAsSint16LE(je._statementNum);
+ }
+}
+
} // End of namespace Sherlock
diff --git a/engines/sherlock/journal.h b/engines/sherlock/journal.h
index 93fdf25098..d2baae11a9 100644
--- a/engines/sherlock/journal.h
+++ b/engines/sherlock/journal.h
@@ -77,6 +77,11 @@ public:
* Displays a page of the journal at the current index
*/
bool drawJournal(int direction, int howFar);
+
+ /**
+ * Synchronize the data for a savegame
+ */
+ void synchronize(Serializer &s);
public:
/**
* Draw the journal background, frame, and interface buttons
@@ -93,11 +98,6 @@ public:
* Reset viewing position to the start of the journal
*/
virtual void resetPosition() {}
-
- /**
- * Synchronize the data for a savegame
- */
- virtual void synchronize(Serializer &s) = 0;
};
} // End of namespace Sherlock
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp
index 24c91cb0b4..6471710ae3 100644
--- a/engines/sherlock/objects.cpp
+++ b/engines/sherlock/objects.cpp
@@ -918,6 +918,17 @@ void UseType::load3DO(Common::SeekableReadStream &s) {
_target = Common::String(buffer);
}
+void UseType::synchronize(Serializer &s) {
+ s.syncString(_verb);
+ s.syncAsSint16LE(_cAnimNum);
+ s.syncAsSint16LE(_cAnimSpeed);
+ s.syncAsSint16LE(_useFlag);
+
+ for (int idx = 0; idx < 4; ++idx)
+ s.syncString(_names[idx]);
+ s.syncString(_target);
+}
+
/*----------------------------------------------------------------*/
Object::Object(): BaseObject() {
diff --git a/engines/sherlock/objects.h b/engines/sherlock/objects.h
index 7b42445f48..ef62ff9d26 100644
--- a/engines/sherlock/objects.h
+++ b/engines/sherlock/objects.h
@@ -29,6 +29,7 @@
#include "common/str.h"
#include "sherlock/image_file.h"
#include "sherlock/fixed_text.h"
+#include "sherlock/saveload.h"
namespace Sherlock {
@@ -176,6 +177,11 @@ struct UseType: public ActionType {
*/
void load(Common::SeekableReadStream &s, bool isRoseTattoo);
void load3DO(Common::SeekableReadStream &s);
+
+ /**
+ * Synchronize the data for a savegame
+ */
+ void synchronize(Serializer &s);
};
class BaseObject {
diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp
index e3421cdf99..8e356c0f65 100644
--- a/engines/sherlock/scalpel/scalpel_journal.cpp
+++ b/engines/sherlock/scalpel/scalpel_journal.cpp
@@ -662,26 +662,6 @@ void ScalpelJournal::resetPosition() {
_page = 1;
}
-void ScalpelJournal::synchronize(Serializer &s) {
- s.syncAsSint16LE(_index);
- s.syncAsSint16LE(_sub);
- s.syncAsSint16LE(_page);
- s.syncAsSint16LE(_maxPage);
-
- int journalCount = _journal.size();
- s.syncAsUint16LE(journalCount);
- if (s.isLoading())
- _journal.resize(journalCount);
-
- for (uint idx = 0; idx < _journal.size(); ++idx) {
- JournalEntry &je = _journal[idx];
-
- s.syncAsSint16LE(je._converseNum);
- s.syncAsByte(je._replyOnly);
- s.syncAsSint16LE(je._statementNum);
- }
-}
-
} // End of namespace Scalpel
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/scalpel_journal.h b/engines/sherlock/scalpel/scalpel_journal.h
index 9790461dbe..6bc0aa012c 100644
--- a/engines/sherlock/scalpel/scalpel_journal.h
+++ b/engines/sherlock/scalpel/scalpel_journal.h
@@ -93,11 +93,6 @@ public:
* Reset viewing position to the start of the journal
*/
virtual void resetPosition();
-
- /**
- * Synchronize the data for a savegame
- */
- virtual void synchronize(Serializer &s);
};
} // End of namespace Scalpel
diff --git a/engines/sherlock/tattoo/tattoo_journal.cpp b/engines/sherlock/tattoo/tattoo_journal.cpp
index 7fdb80ee66..6df5ee7458 100644
--- a/engines/sherlock/tattoo/tattoo_journal.cpp
+++ b/engines/sherlock/tattoo/tattoo_journal.cpp
@@ -428,10 +428,6 @@ void TattooJournal::drawFrame() {
}
-void TattooJournal::synchronize(Serializer &s) {
- // TODO
-}
-
void TattooJournal::drawControls(int mode) {
TattooEngine &vm = *(TattooEngine *)_vm;
Screen &screen = *_vm->_screen;
diff --git a/engines/sherlock/tattoo/tattoo_journal.h b/engines/sherlock/tattoo/tattoo_journal.h
index 7169e60359..5e5cfda8c2 100644
--- a/engines/sherlock/tattoo/tattoo_journal.h
+++ b/engines/sherlock/tattoo/tattoo_journal.h
@@ -94,11 +94,6 @@ public:
* Draw the journal background, frame, and interface buttons
*/
virtual void drawFrame();
-
- /**
- * Synchronize the data for a savegame
- */
- virtual void synchronize(Serializer &s);
};
} // End of namespace Tattoo
diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp
index 5956d98144..a7d7d2426c 100644
--- a/engines/sherlock/tattoo/tattoo_people.cpp
+++ b/engines/sherlock/tattoo/tattoo_people.cpp
@@ -967,6 +967,55 @@ void TattooPerson::checkWalkGraphics() {
setImageFrame();
}
+void TattooPerson::synchronize(Serializer &s) {
+ s.syncAsSint32LE(_position.x);
+ s.syncAsSint32LE(_position.y);
+ s.syncAsSint16LE(_sequenceNumber);
+ s.syncAsSint16LE(_type);
+ s.syncString(_walkVGSName);
+ s.syncString(_description);
+ s.syncString(_examine);
+
+ // NPC specific properties
+ s.syncBytes(&_npcPath[0], MAX_NPC_PATH);
+ s.syncString(_npcName);
+ s.syncAsSint32LE(_npcPause);
+ s.syncAsByte(_lookHolmes);
+ s.syncAsByte(_updateNPCPath);
+
+ // Walk to list
+ uint count = _walkTo.size();
+ s.syncAsUint16LE(count);
+ if (s.isLoading()) {
+ // Load path
+ for (uint idx = 0; idx < count; ++count) {
+ int xp = 0, yp = 0;
+ s.syncAsSint16LE(xp);
+ s.syncAsSint16LE(yp);
+ _walkTo.push(Common::Point(xp, yp));
+ }
+ } else {
+ // Save path
+ Common::Array<Common::Point> path;
+
+ // Save the points of the path
+ for (uint idx = 0; idx < count; ++idx) {
+ Common::Point pt = _walkTo.pop();
+ s.syncAsSint16LE(pt.x);
+ s.syncAsSint16LE(pt.y);
+ path.push_back(pt);
+ }
+
+ // Re-add the pending points back to the _walkTo queue
+ for (uint idx = 0; idx < count; ++idx)
+ _walkTo.push(path[idx]);
+ }
+
+ // Verbs
+ for (int idx = 0; idx < 2; ++idx)
+ _use[idx].synchronize(s);
+}
+
/*----------------------------------------------------------------*/
TattooPeople::TattooPeople(SherlockEngine *vm) : People(vm) {
@@ -1176,16 +1225,8 @@ int TattooPeople::findSpeaker(int speaker) {
void TattooPeople::synchronize(Serializer &s) {
s.syncAsByte(_holmesOn);
- for (uint idx = 0; idx < _data.size(); ++idx) {
- Person &p = *_data[idx];
- s.syncAsSint32LE(p._position.x);
- s.syncAsSint32LE(p._position.y);
- s.syncAsSint16LE(p._sequenceNumber);
- s.syncAsSint16LE(p._type);
- s.syncString(p._walkVGSName);
- s.syncString(p._description);
- s.syncString(p._examine);
- }
+ for (uint idx = 0; idx < _data.size(); ++idx)
+ (*this)[idx].synchronize(s);
s.syncAsSint16LE(_holmesQuotient);
diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h
index 79794c2dae..4b35998cb4 100644
--- a/engines/sherlock/tattoo/tattoo_people.h
+++ b/engines/sherlock/tattoo/tattoo_people.h
@@ -173,6 +173,11 @@ public:
void checkWalkGraphics();
/**
+ * Synchronize the data for a savegame
+ */
+ void synchronize(Serializer &s);
+
+ /**
* This adjusts the sprites position, as well as it's animation sequence:
*/
virtual void adjustSprite();