diff options
Diffstat (limited to 'engines/bladerunner/actor_dialogue_queue.cpp')
-rw-r--r-- | engines/bladerunner/actor_dialogue_queue.cpp | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/engines/bladerunner/actor_dialogue_queue.cpp b/engines/bladerunner/actor_dialogue_queue.cpp index 5f0ad60426..48fcf8a6ab 100644 --- a/engines/bladerunner/actor_dialogue_queue.cpp +++ b/engines/bladerunner/actor_dialogue_queue.cpp @@ -54,7 +54,7 @@ void ActorDialogueQueue::add(int actorId, int sentenceId, int animationMode) { if (actorId == 0 || actorId == BladeRunnerEngine::kActorVoiceOver) { animationMode = -1; } - if (_entries.size() < 25) { + if (_entries.size() < kMaxEntries) { Entry entry; entry.isNotPause = true; entry.isPause = false; @@ -68,7 +68,7 @@ void ActorDialogueQueue::add(int actorId, int sentenceId, int animationMode) { } void ActorDialogueQueue::addPause(int delay) { - if (_entries.size() < 25) { + if (_entries.size() < kMaxEntries) { Entry entry; entry.isNotPause = false; entry.isPause = true; @@ -160,30 +160,58 @@ void ActorDialogueQueue::tick() { } } -void ActorDialogueQueue::save(SaveFile &f) { +void ActorDialogueQueue::save(SaveFileWriteStream &f) { int count = (int)_entries.size(); - f.write(count); + f.writeInt(count); for (int i = 0; i < count; ++i) { Entry &e = _entries[i]; - f.write(e.isNotPause); - f.write(e.isPause); - f.write(e.actorId); - f.write(e.sentenceId); - f.write(e.animationMode); - f.write(e.delay); + f.writeBool(e.isNotPause); + f.writeBool(e.isPause); + f.writeInt(e.actorId); + f.writeInt(e.sentenceId); + f.writeInt(e.animationMode); + f.writeInt(e.delay); } - f.padBytes((25 - count) * 24); - - f.write(_isNotPause); - f.write(_actorId); - f.write(_sentenceId); - f.write(_animationMode); - f.write(_animationModePrevious); - f.write(_isPause); - f.write(_delay); + f.padBytes((kMaxEntries - count) * 24); + + f.writeBool(_isNotPause); + f.writeInt(_actorId); + f.writeInt(_sentenceId); + f.writeInt(_animationMode); + f.writeInt(_animationModePrevious); + f.writeBool(_isPause); + f.writeInt(_delay); // f.write(_timeLast); } +void ActorDialogueQueue::load(SaveFileReadStream &f) { + _entries.clear(); + int count = f.readInt(); + assert(count <= kMaxEntries); + _entries.resize(count); + for (int i = 0; i < count; ++i) { + Entry &e = _entries[i]; + e.isNotPause = f.readBool(); + e.isPause = f.readBool(); + e.actorId = f.readInt(); + e.sentenceId = f.readInt(); + e.animationMode = f.readInt(); + e.delay = f.readInt(); + } + + f.skip((kMaxEntries - count) * 24); + + _isNotPause = f.readBool(); + _actorId = f.readInt(); + _sentenceId = f.readInt(); + _animationMode = f.readInt(); + _animationModePrevious = f.readInt(); + _isPause = f.readBool(); + _delay = f.readInt(); + + _timeLast = 0; +} + void ActorDialogueQueue::clear() { _entries.clear(); _isNotPause = false; |