aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/scalpel/scalpel_people.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-06-07 11:37:15 -0400
committerPaul Gilbert2015-06-07 11:37:15 -0400
commit02ff4ce4950e09afb634feae4a7a854644418019 (patch)
treef5f5c2469438450f0ba656a9dd8a9b72e2e8df23 /engines/sherlock/scalpel/scalpel_people.cpp
parent6cc469dc5c1021764f0cf4a4e0a46e83f760ae5f (diff)
downloadscummvm-rg350-02ff4ce4950e09afb634feae4a7a854644418019.tar.gz
scummvm-rg350-02ff4ce4950e09afb634feae4a7a854644418019.tar.bz2
scummvm-rg350-02ff4ce4950e09afb634feae4a7a854644418019.zip
SHERLOCK: Implemented talk/listen sequence methods
Diffstat (limited to 'engines/sherlock/scalpel/scalpel_people.cpp')
-rw-r--r--engines/sherlock/scalpel/scalpel_people.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/engines/sherlock/scalpel/scalpel_people.cpp b/engines/sherlock/scalpel/scalpel_people.cpp
index 5e661fe16a..08100fef11 100644
--- a/engines/sherlock/scalpel/scalpel_people.cpp
+++ b/engines/sherlock/scalpel/scalpel_people.cpp
@@ -86,6 +86,36 @@ void ScalpelPeople::setTalking(int speaker) {
}
}
+void ScalpelPeople::setTalkSequence(int speaker, int sequenceNum) {
+ People &people = *_vm->_people;
+ Scene &scene = *_vm->_scene;
+
+ // If no speaker is specified, then nothing needs to be done
+ if (speaker == -1)
+ return;
+
+ if (speaker) {
+ int objNum = people.findSpeaker(speaker);
+ if (objNum != -1) {
+ Object &obj = scene._bgShapes[objNum];
+
+ if (obj._seqSize < MAX_TALK_SEQUENCES) {
+ warning("Tried to copy too many talk frames");
+ }
+ else {
+ for (int idx = 0; idx < MAX_TALK_SEQUENCES; ++idx) {
+ obj._sequences[idx] = people._characters[speaker]._talkSequences[idx];
+ if (idx > 0 && !obj._sequences[idx] && !obj._sequences[idx - 1])
+ return;
+
+ obj._frameNumber = 0;
+ obj._sequenceNumber = 0;
+ }
+ }
+ }
+ }
+}
+
} // End of namespace Scalpel
} // End of namespace Sherlock