aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/hugo/file.cpp2
-rw-r--r--engines/hugo/object.cpp69
2 files changed, 56 insertions, 15 deletions
diff --git a/engines/hugo/file.cpp b/engines/hugo/file.cpp
index 336d44a1d3..0c2baffcae 100644
--- a/engines/hugo/file.cpp
+++ b/engines/hugo/file.cpp
@@ -420,7 +420,7 @@ void FileManager::restoreGame(int16 slot) {
status_t &gameStatus = _vm->getGameStatus();
- int score = in->readSint16LE();
+ int score = in->readSint16BE();
_vm->setScore(score);
gameStatus.storyModeFl = (in->readByte() == 1);
diff --git a/engines/hugo/object.cpp b/engines/hugo/object.cpp
index 0eede35dac..15f5e4fe06 100644
--- a/engines/hugo/object.cpp
+++ b/engines/hugo/object.cpp
@@ -47,7 +47,7 @@
namespace Hugo {
ObjectHandler::ObjectHandler(HugoEngine *vm) : _vm(vm), _objects(0) {
- _numObj = 0;
+ _numObj = 0;
}
ObjectHandler::~ObjectHandler() {
@@ -60,13 +60,13 @@ void ObjectHandler::saveSeq(object_t *obj) {
debugC(1, kDebugObject, "saveSeq");
bool found = false;
- for (int j = 0; !found && (j < obj->seqNumb); j++) {
- seq_t *q = obj->seqList[j].seqPtr;
- for (int k = 0; !found && (k < obj->seqList[j].imageNbr); k++) {
+ for (int i = 0; !found && (i < obj->seqNumb); i++) {
+ seq_t *q = obj->seqList[i].seqPtr;
+ for (int j = 0; !found && (j < obj->seqList[i].imageNbr); j++) {
if (obj->currImagePtr == q) {
found = true;
- obj->curSeqNum = j;
- obj->curImageNum = k;
+ obj->curSeqNum = i;
+ obj->curImageNum = j;
} else {
q = q->nextSeqPtr;
}
@@ -494,7 +494,31 @@ void ObjectHandler::saveObjects(Common::WriteStream *out) {
for (int i = 0; i < _numObj; i++) {
// Save where curr_seq_p is pointing to
saveSeq(&_objects[i]);
- out->write(&_objects[i], sizeof(object_t));
+
+ out->writeByte(_objects[i].pathType);
+ out->writeSint16BE(_objects[i].vxPath);
+ out->writeSint16BE(_objects[i].vyPath);
+ out->writeByte(_objects[i].cycling);
+ out->writeByte(_objects[i].cycleNumb);
+ out->writeByte(_objects[i].frameTimer);
+ out->writeByte(_objects[i].screenIndex);
+ out->writeSint16BE(_objects[i].x);
+ out->writeSint16BE(_objects[i].y);
+ out->writeSint16BE(_objects[i].oldx);
+ out->writeSint16BE(_objects[i].oldy);
+ out->writeSByte(_objects[i].vx);
+ out->writeSByte(_objects[i].vy);
+ out->writeByte(_objects[i].objValue);
+ out->writeByte((_objects[i].carriedFl) ? 1 : 0);
+ out->writeByte(_objects[i].state);
+ out->writeByte(_objects[i].priority);
+ out->writeSint16BE(_objects[i].viewx);
+ out->writeSint16BE(_objects[i].viewy);
+ out->writeSint16BE(_objects[i].direction);
+ out->writeByte(_objects[i].curSeqNum);
+ out->writeByte(_objects[i].curImageNum);
+ out->writeSByte(_objects[i].oldvx);
+ out->writeSByte(_objects[i].oldvy);
}
}
@@ -503,13 +527,30 @@ void ObjectHandler::saveObjects(Common::WriteStream *out) {
*/
void ObjectHandler::restoreObjects(Common::SeekableReadStream *in) {
for (int i = 0; i < _numObj; i++) {
- object_t *p = &_objects[i];
- seqList_t seqList[MAX_SEQUENCES];
- memcpy(seqList, p->seqList, sizeof(seqList_t));
- uint16 cmdIndex = p->cmdIndex;
- in->read(p, sizeof(object_t));
- p->cmdIndex = cmdIndex;
- memcpy(p->seqList, seqList, sizeof(seqList_t));
+ _objects[i].pathType = (path_t) in->readByte();
+ _objects[i].vxPath = in->readSint16BE();
+ _objects[i].vyPath = in->readSint16BE();
+ _objects[i].cycling = (cycle_t) in->readByte();
+ _objects[i].cycleNumb = in->readByte();
+ _objects[i].frameTimer = in->readByte();
+ _objects[i].screenIndex = in->readByte();
+ _objects[i].x = in->readSint16BE();
+ _objects[i].y = in->readSint16BE();
+ _objects[i].oldx = in->readSint16BE();
+ _objects[i].oldy = in->readSint16BE();
+ _objects[i].vx = in->readSByte();
+ _objects[i].vy = in->readSByte();
+ _objects[i].objValue = in->readByte();
+ _objects[i].carriedFl = (in->readByte() == 1);
+ _objects[i].state = in->readByte();
+ _objects[i].priority = in->readByte();
+ _objects[i].viewx = in->readSint16BE();
+ _objects[i].viewy = in->readSint16BE();
+ _objects[i].direction = in->readSint16BE();
+ _objects[i].curSeqNum = in->readByte();
+ _objects[i].curImageNum = in->readByte();
+ _objects[i].oldvx = in->readSByte();
+ _objects[i].oldvy = in->readSByte();
}
}