From 654155bbe0db06ff23adbba748bc1c749c4f7e4c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 5 Oct 2015 22:47:14 -0400 Subject: 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. --- engines/sherlock/journal.cpp | 3 +++ engines/sherlock/scalpel/scalpel_journal.cpp | 8 ++++++++ engines/sherlock/scalpel/scalpel_journal.h | 5 +++++ engines/sherlock/scalpel/scalpel_talk.cpp | 4 ++++ 4 files changed, 20 insertions(+) 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 @@ -70,6 +70,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 */ 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; -- cgit v1.2.3