Skip to content

Commit

Permalink
SHERLOCK: RT: Cleanup and fleshing out of saving
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Jul 5, 2015
1 parent 2466302 commit 8570f05
Show file tree
Hide file tree
Showing 10 changed files with 98 additions and 49 deletions.
20 changes: 20 additions & 0 deletions engines/sherlock/journal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
10 changes: 5 additions & 5 deletions engines/sherlock/journal.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ class Journal {
* 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
Expand All @@ -93,11 +98,6 @@ class Journal {
* 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
Expand Down
11 changes: 11 additions & 0 deletions engines/sherlock/objects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
6 changes: 6 additions & 0 deletions engines/sherlock/objects.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "common/str.h"
#include "sherlock/image_file.h"
#include "sherlock/fixed_text.h"
#include "sherlock/saveload.h"

namespace Sherlock {

Expand Down Expand Up @@ -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 {
Expand Down
20 changes: 0 additions & 20 deletions engines/sherlock/scalpel/scalpel_journal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 0 additions & 5 deletions engines/sherlock/scalpel/scalpel_journal.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,6 @@ class ScalpelJournal: public Journal {
* 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
Expand Down
4 changes: 0 additions & 4 deletions engines/sherlock/tattoo/tattoo_journal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 0 additions & 5 deletions engines/sherlock/tattoo/tattoo_journal.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,6 @@ class TattooJournal : public Journal {
* 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
Expand Down
61 changes: 51 additions & 10 deletions engines/sherlock/tattoo/tattoo_people.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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);

Expand Down
5 changes: 5 additions & 0 deletions engines/sherlock/tattoo/tattoo_people.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,11 @@ class TattooPerson: public Person {
*/
void checkWalkGraphics();

/**
* Synchronize the data for a savegame
*/
void synchronize(Serializer &s);

/**
* This adjusts the sprites position, as well as it's animation sequence:
*/
Expand Down

0 comments on commit 8570f05

Please sign in to comment.