aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2015-10-05 22:47:14 -0400
committerPaul Gilbert2015-10-05 22:47:14 -0400
commit654155bbe0db06ff23adbba748bc1c749c4f7e4c (patch)
treec6b8d4284f3334c7dc8177c31565d54de67f2a12
parent6aa5566a0f67a033ff02ae47a4c21aa3edc3c3ec (diff)
downloadscummvm-rg350-654155bbe0db06ff23adbba748bc1c749c4f7e4c.tar.gz
scummvm-rg350-654155bbe0db06ff23adbba748bc1c749c4f7e4c.tar.bz2
scummvm-rg350-654155bbe0db06ff23adbba748bc1c749c4f7e4c.zip
SHERLOCK: SS: Fix garbage text in German version conversation
Talking to Watson in the Alleyway scene can result in the text "Change Speaker to Sherlock Holmes" appearing mid-conversation, even in DosBox. This workaround fixes this by skipping the text.
-rw-r--r--engines/sherlock/journal.cpp3
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.cpp8
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.h5
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.cpp4
4 files changed, 20 insertions, 0 deletions
diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp
index 44b966f70b..d5d029589b 100644
--- a/engines/sherlock/journal.cpp
+++ b/engines/sherlock/journal.cpp
@@ -525,6 +525,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
else
journalString += people._characters[c]._name;
+ if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::DE_DEU)
+ Scalpel::ScalpelJournal::skipBadText(replyP);
+
const byte *strP = replyP;
byte v;
do {
diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp
index 787d899aee..e068e3bc48 100644
--- a/engines/sherlock/scalpel/scalpel_journal.cpp
+++ b/engines/sherlock/scalpel/scalpel_journal.cpp
@@ -631,6 +631,14 @@ void ScalpelJournal::record(int converseNum, int statementNum, bool replyOnly) {
Journal::record(converseNum, statementNum, replyOnly);
}
+void ScalpelJournal::skipBadText(const byte *&msgP) {
+ // WORKAROUND: Skip over bad text in the original game
+ const char *BAD_PHRASE1 = "Change Speaker to Sherlock Holmes ";
+
+ if (!strncmp((const char *)msgP, BAD_PHRASE1, strlen(BAD_PHRASE1)))
+ msgP += strlen(BAD_PHRASE1);
+}
+
} // 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 c8e9c01739..2f64141bb2 100644
--- a/engines/sherlock/scalpel/scalpel_journal.h
+++ b/engines/sherlock/scalpel/scalpel_journal.h
@@ -71,6 +71,11 @@ public:
void drawInterface();
/**
+ * Handles skipping over bad text in conversations
+ */
+ static void skipBadText(const byte *&msgP);
+
+ /**
* Handle events whilst the journal is being displayed
*/
bool handleEvents(int key);
diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp
index 88a718ea4e..0458c309d7 100644
--- a/engines/sherlock/scalpel/scalpel_talk.cpp
+++ b/engines/sherlock/scalpel/scalpel_talk.cpp
@@ -22,6 +22,7 @@
#include "sherlock/scalpel/scalpel_talk.h"
#include "sherlock/scalpel/scalpel_fixed_text.h"
+#include "sherlock/scalpel/scalpel_journal.h"
#include "sherlock/scalpel/scalpel_map.h"
#include "sherlock/scalpel/scalpel_people.h"
#include "sherlock/scalpel/scalpel_scene.h"
@@ -189,6 +190,9 @@ void ScalpelTalk::talkInterface(const byte *&str) {
ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen;
UserInterface &ui = *_vm->_ui;
+ if (_vm->getLanguage() == Common::DE_DEU)
+ ScalpelJournal::skipBadText(str);
+
// If the window isn't yet open, draw the window before printing starts
if (!ui._windowOpen && _noTextYet) {
_noTextYet = false;