aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/midiparser_xmidi.cpp2
-rw-r--r--backends/platform/sdl/win32/win32-main.cpp5
-rw-r--r--doc/de/Neues7
-rw-r--r--engines/scumm/POTFILES1
-rw-r--r--engines/scumm/input.cpp9
-rw-r--r--engines/sherlock/detection_tables.h2
-rw-r--r--engines/sherlock/events.h2
-rw-r--r--engines/sherlock/fonts.cpp68
-rw-r--r--engines/sherlock/image_file.cpp98
-rw-r--r--engines/sherlock/journal.cpp8
-rw-r--r--engines/sherlock/music.cpp5
-rw-r--r--engines/sherlock/music.h1
-rw-r--r--engines/sherlock/people.cpp5
-rw-r--r--engines/sherlock/scalpel/scalpel.cpp143
-rw-r--r--engines/sherlock/scalpel/scalpel_fixed_text.cpp218
-rw-r--r--engines/sherlock/scalpel/scalpel_fixed_text.h68
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.cpp19
-rw-r--r--engines/sherlock/scalpel/scalpel_map.cpp15
-rw-r--r--engines/sherlock/scalpel/scalpel_scene.cpp146
-rw-r--r--engines/sherlock/scalpel/scalpel_scene.h2
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.cpp22
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.h7
-rw-r--r--engines/sherlock/scalpel/scalpel_user_interface.cpp45
-rw-r--r--engines/sherlock/scalpel/scalpel_user_interface.h2
-rw-r--r--engines/sherlock/scene.cpp63
-rw-r--r--engines/sherlock/scene.h2
-rw-r--r--engines/sherlock/screen.cpp2
-rw-r--r--engines/sherlock/sound.cpp88
-rw-r--r--engines/sherlock/sound.h13
-rw-r--r--engines/sherlock/surface.cpp4
-rw-r--r--engines/sherlock/talk.cpp24
-rw-r--r--engines/sherlock/talk.h4
-rw-r--r--engines/sherlock/tattoo/tattoo.cpp9
-rw-r--r--engines/sherlock/tattoo/tattoo_fixed_text.cpp507
-rw-r--r--engines/sherlock/tattoo/tattoo_fixed_text.h120
-rw-r--r--engines/sherlock/tattoo/tattoo_map.cpp13
-rw-r--r--engines/sherlock/tattoo/tattoo_people.cpp11
-rw-r--r--engines/sherlock/tattoo/tattoo_people.h2
-rw-r--r--engines/sherlock/tattoo/tattoo_resources.cpp394
-rw-r--r--engines/sherlock/tattoo/tattoo_resources.h9
-rw-r--r--engines/sherlock/tattoo/tattoo_scene.cpp6
-rw-r--r--engines/sherlock/tattoo/tattoo_talk.cpp5
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.cpp4
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.h3
-rw-r--r--engines/tucker/staticres.cpp8
-rw-r--r--engines/tucker/tucker.h9
-rw-r--r--gui/recorderdialog.cpp2
-rw-r--r--gui/themes/translations.datbin468051 -> 471806 bytes
-rw-r--r--po/be_BY.po31
-rw-r--r--po/ca_ES.po31
-rw-r--r--po/cs_CZ.po31
-rw-r--r--po/da_DA.po31
-rw-r--r--po/de_DE.po66
-rw-r--r--po/es_ES.po31
-rw-r--r--po/eu.po31
-rw-r--r--po/fi_FI.po31
-rw-r--r--po/fr_FR.po31
-rw-r--r--po/gl_ES.po31
-rw-r--r--po/hu_HU.po182
-rw-r--r--po/it_IT.po31
-rw-r--r--po/nb_NO.po31
-rw-r--r--po/nl_NL.po31
-rw-r--r--po/nn_NO.po31
-rw-r--r--po/pl_PL.po31
-rw-r--r--po/pt_BR.po31
-rw-r--r--po/ru_RU.po31
-rw-r--r--po/scummvm.pot27
-rw-r--r--po/se_SE.po31
-rw-r--r--po/uk_UA.po31
69 files changed, 2178 insertions, 857 deletions
diff --git a/audio/midiparser_xmidi.cpp b/audio/midiparser_xmidi.cpp
index 8742d7aad1..042e663a13 100644
--- a/audio/midiparser_xmidi.cpp
+++ b/audio/midiparser_xmidi.cpp
@@ -146,7 +146,7 @@ void MidiParser_XMIDI::parseNextEvent(EventInfo &info) {
break;
}
- case 0x75: // XMIDI_CONTORLLER_NEXT_BREAK
+ case 0x75: // XMIDI_CONTROLLER_NEXT_BREAK
if (_loopCount >= 0) {
if (info.basic.param2 < 64) {
// End the current loop.
diff --git a/backends/platform/sdl/win32/win32-main.cpp b/backends/platform/sdl/win32/win32-main.cpp
index c6c15c00e8..c6339f0c8c 100644
--- a/backends/platform/sdl/win32/win32-main.cpp
+++ b/backends/platform/sdl/win32/win32-main.cpp
@@ -43,7 +43,12 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC
#if !SDL_VERSION_ATLEAST(2, 0, 0)
SDL_SetModuleHandle(GetModuleHandle(NULL));
#endif
+// HACK: __argc, __argv are broken and return zero when using mingwrt 4.0+ on MinGW
+#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__)
+ return main(_argc, _argv);
+#else
return main(__argc, __argv);
+#endif
}
int main(int argc, char *argv[]) {
diff --git a/doc/de/Neues b/doc/de/Neues
index 2b67913359..3d155be825 100644
--- a/doc/de/Neues
+++ b/doc/de/Neues
@@ -17,7 +17,7 @@ Sie auf Englisch unter:
AGI:
- Es ist nun möglich, die Maus-Unterstützung zu deaktivieren (außer bei
-Amiga-Versionen und Fan-Spielen, die eine Maus benötigen).
+ Amiga-Versionen und Fan-Spielen, die eine Maus benötigen).
- Fehlerhafte Lautstärke-Dämpfung im PCjr-Sound-Code behoben (Fehler #6858).
AGOS:
@@ -26,6 +26,8 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benötigen).
- Verb-Feld in der Amiga-Version von Simon the Sorcerer 1 repariert.
- Accolade AdLib- und MT32-Treiber für folgende Spiele hinzugefügt:
Elvira 1, Elvira 2, Waxworks und Simon the Sorcerer 1 (Demoversion)
+ - AdLib-Ausgabe in Simon the Sorcerer 1 hinzugefügt. Dies verbessert die AdLib-
+ Ausgabe erheblich und erhöht die Originaltreue.
Baphomets Fluch 1:
- Erkennung der Byte-Reihenfolge der Sprachausgabe auf Big-Endian-Systemen
@@ -34,6 +36,9 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benötigen).
das Spiel in der Szene am Bull's Head Hill befindet, behoben
(Fehler #6728). Dieser Fehler trat womöglich auch in anderen Szenen auf.
+ CinE:
+ - Unterstützung für Musik in der CD-Version von Future Wars hinzugefügt.
+
MADE:
- Unterstützung für AdLib-Musik in Return to Zork verbessert.
diff --git a/engines/scumm/POTFILES b/engines/scumm/POTFILES
index 6d10537d3c..246f14d3f0 100644
--- a/engines/scumm/POTFILES
+++ b/engines/scumm/POTFILES
@@ -1,5 +1,6 @@
engines/scumm/dialogs.cpp
engines/scumm/help.cpp
+engines/scumm/input.cpp
engines/scumm/scumm.cpp
engines/scumm/players/player_v3m.cpp
engines/scumm/players/player_v5m.cpp
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index 86048af57c..3ce053f6bc 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -23,6 +23,7 @@
#include "common/config-manager.h"
#include "common/events.h"
#include "common/system.h"
+#include "common/translation.h"
#include "gui/message.h"
#include "gui/gui-manager.h"
@@ -568,9 +569,9 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
lastKeyHit.hasFlags(Common::KBD_CTRL)) {
_snapScroll ^= 1;
if (_snapScroll) {
- messageDialog("Snap scroll on");
+ messageDialog(_("Snap scroll on"));
} else {
- messageDialog("Snap scroll off");
+ messageDialog(_("Snap scroll off"));
}
if (VAR_CAMERA_FAST_X != 0xFF)
@@ -583,7 +584,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
vol--;
// Display the music volume
- ValueDisplayDialog dlg("Music volume: ", 0, 16, vol, ']', '[');
+ ValueDisplayDialog dlg(_("Music volume: "), 0, 16, vol, ']', '[');
vol = runDialog(dlg);
vol *= 16;
@@ -600,7 +601,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
_defaultTalkDelay++;
// Display the talk speed
- ValueDisplayDialog dlg("Subtitle speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-');
+ ValueDisplayDialog dlg(_("Subtitle speed: "), 0, 9, 9 - _defaultTalkDelay, '+', '-');
_defaultTalkDelay = 9 - runDialog(dlg);
// Save the new talkspeed value to ConfMan
diff --git a/engines/sherlock/detection_tables.h b/engines/sherlock/detection_tables.h
index d028c4af6c..6567369528 100644
--- a/engines/sherlock/detection_tables.h
+++ b/engines/sherlock/detection_tables.h
@@ -162,7 +162,7 @@ static const SherlockGameDescription gameDescriptions[] = {
"rosetattoo",
"CD",
AD_ENTRY1s("talk.lib", "22e8e6406dd2fbbb238c9898928df42e", 770756),
- Common::EN_ANY,
+ Common::FR_FRA,
Common::kPlatformDOS,
ADGF_TESTING,
GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS)
diff --git a/engines/sherlock/events.h b/engines/sherlock/events.h
index e13ef18822..c3fa147399 100644
--- a/engines/sherlock/events.h
+++ b/engines/sherlock/events.h
@@ -30,7 +30,7 @@
namespace Sherlock {
-#define GAME_FRAME_RATE 30
+#define GAME_FRAME_RATE 40
#define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE)
enum CursorId { ARROW = 0, MAGNIFY = 1, WAIT = 2, EXIT_ZONES_START = 5, INVALID_CURSOR = -1 };
diff --git a/engines/sherlock/fonts.cpp b/engines/sherlock/fonts.cpp
index 482e795b6d..4d0991a47c 100644
--- a/engines/sherlock/fonts.cpp
+++ b/engines/sherlock/fonts.cpp
@@ -62,6 +62,43 @@ void Fonts::setFont(int fontNum) {
// load font data
_font = new ImageFile(fontFilename);
+
+ if (IS_SERRATED_SCALPEL) {
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ if (_fontNumber == 1) {
+ // Create a new character - inverted exclamation mark (0x88)
+ // Seems this wasn't included originally, but some text has it
+ // This was obviously not done in the original game interpreter
+ ImageFrame &frameExclamationMark = (*_font)[0]; // get actual exclamation mark
+ ImageFrame frameRevExclamationMark;
+
+ frameRevExclamationMark._width = frameExclamationMark._width;
+ frameRevExclamationMark._height = frameExclamationMark._height;
+ frameRevExclamationMark._paletteBase = frameExclamationMark._paletteBase;
+ frameRevExclamationMark._rleEncoded = frameExclamationMark._rleEncoded;
+ frameRevExclamationMark._size = frameExclamationMark._size;
+ frameRevExclamationMark._frame.create(frameExclamationMark._width, frameExclamationMark._height, Graphics::PixelFormat::createFormatCLUT8());
+
+ byte *frameExclMarkPixels = (byte *)frameExclamationMark._frame.getPixels();
+ byte *frameRevExclMarkPixels = (byte *)frameRevExclamationMark._frame.getPixels();
+
+ uint16 revExclMarkY = frameExclamationMark._height - 1;
+ frameRevExclMarkPixels += frameExclamationMark._width * (frameExclamationMark._height - 1);
+ for (uint16 exclMarkY = 0; exclMarkY < frameExclamationMark._height; exclMarkY++) {
+ memcpy(frameRevExclMarkPixels, frameExclMarkPixels, frameExclamationMark._width);
+ revExclMarkY--;
+ frameRevExclMarkPixels -= frameExclamationMark._width;
+ frameExclMarkPixels += frameExclamationMark._width;
+ }
+
+ frameRevExclamationMark._offset.x = frameExclamationMark._offset.x;
+ frameRevExclamationMark._offset.y = frameExclamationMark._offset.y + 1;
+
+ _font->push_back(frameRevExclamationMark);
+ }
+ }
+ }
+
} else {
// 3DO
switch (fontNum) {
@@ -81,7 +118,7 @@ void Fonts::setFont(int fontNum) {
}
_charCount = _font->size();
-
+
// Iterate through the frames to find the widest and tallest font characters
_fontHeight = _widestChar = 0;
for (uint idx = 0; idx < _charCount; ++idx) {
@@ -118,6 +155,24 @@ inline byte Fonts::translateChar(byte c) {
return 135; // and this for SH1
default:
if (IS_SERRATED_SCALPEL) {
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ if (_fontNumber == 1) {
+ // Special workarounds for translated game text, which was skipped because of effectively a bug
+ // This was not done in the original interpreter
+ // It seems at least the inverted exclamation mark was skipped by the original interpreter /
+ // wasn't shown at all.
+ // This character is used for example in the alley room, when talking with the inspector after
+ // searching the corpse. "[0xAD]Claro! Mi experiencia profesional revela que esta mujer fue asesinada..."
+ // The same text gets put inside Watson's journal as well and should be on page 10 right after
+ // talking with the inspector. For further study see bug #6931
+ // Inverted question mark was also skipped, but at least that character is inside the font already.
+ if (c == 0xAD) {
+ // inverted exclamation mark
+ return 0x88; // our own font character, created during setFont()
+ }
+ // Inverted question mask is 0x86 (mapped from 0x88)
+ }
+ }
if (c >= 0x80) { // German SH1 version did this, but not German SH2
c--;
}
@@ -147,10 +202,13 @@ void Fonts::writeString(Surface *surface, const Common::String &str,
}
curChar = translateChar(curChar);
- assert(curChar < _charCount);
- ImageFrame &frame = (*_font)[curChar];
- surface->transBlitFrom(frame, Common::Point(charPos.x, charPos.y + _yOffsets[curChar]), false, overrideColor);
- charPos.x += frame._frame.w + 1;
+ if (curChar < _charCount) {
+ ImageFrame &frame = (*_font)[curChar];
+ surface->transBlitFrom(frame, Common::Point(charPos.x, charPos.y + _yOffsets[curChar]), false, overrideColor);
+ charPos.x += frame._frame.w + 1;
+ } else {
+ warning("Invalid character encountered - %d", (int)curChar);
+ }
}
}
diff --git a/engines/sherlock/image_file.cpp b/engines/sherlock/image_file.cpp
index 3d881eb655..a1636e9195 100644
--- a/engines/sherlock/image_file.cpp
+++ b/engines/sherlock/image_file.cpp
@@ -961,59 +961,57 @@ void ImageFile3DO::loadFont(Common::SeekableReadStream &stream) {
for (curChar = 33; curChar < header_charCount; curChar++) {
// create frame
- {
- ImageFrame imageFrame;
-
- imageFrame._width = widthTablePtr[curChar];
- imageFrame._height = header_fontHeight;
- imageFrame._paletteBase = 0;
- imageFrame._offset.x = 0;
- imageFrame._offset.y = 0;
- imageFrame._rleEncoded = false;
- imageFrame._size = 0;
-
- // Extract pixels
- imageFrame._frame.create(imageFrame._width, imageFrame._height, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
- uint16 *dest = (uint16 *)imageFrame._frame.getPixels();
- Common::fill(dest, dest + imageFrame._width * imageFrame._height, 0);
-
- curCharHeightLeft = header_fontHeight;
- while (curCharHeightLeft) {
- curCharWidthLeft = widthTablePtr[curChar];
- curBitsPtr = curBitsLinePtr;
- curBitsLeft = 8;
- curPosX = 0;
-
- while (curCharWidthLeft) {
- if (!(curPosX & 1)) {
- curBits = *curBitsPtr >> 4;
- } else {
- curBits = *curBitsPtr & 0x0F;
- curBitsPtr++;
- }
- // doing this properly is complicated
- // the 3DO has built-in anti-aliasing
- // this here at least results in somewhat readable text
- // TODO: make it better
- if (curBits) {
- curBitsReversed = (curBits >> 3) | ((curBits & 0x04) >> 1) | ((curBits & 0x02) << 1) | ((curBits & 0x01) << 3);
- curBits = 20 - curBits;
- }
-
- byte curIntensity = curBits;
- *dest = (curIntensity << 11) | (curIntensity << 6) | curIntensity;
- dest++;
-
- curCharWidthLeft--;
- curPosX++;
+ ImageFrame imageFrame;
+
+ imageFrame._width = widthTablePtr[curChar];
+ imageFrame._height = header_fontHeight;
+ imageFrame._paletteBase = 0;
+ imageFrame._offset.x = 0;
+ imageFrame._offset.y = 0;
+ imageFrame._rleEncoded = false;
+ imageFrame._size = 0;
+
+ // Extract pixels
+ imageFrame._frame.create(imageFrame._width, imageFrame._height, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
+ uint16 *dest = (uint16 *)imageFrame._frame.getPixels();
+ Common::fill(dest, dest + imageFrame._width * imageFrame._height, 0);
+
+ curCharHeightLeft = header_fontHeight;
+ while (curCharHeightLeft) {
+ curCharWidthLeft = widthTablePtr[curChar];
+ curBitsPtr = curBitsLinePtr;
+ curBitsLeft = 8;
+ curPosX = 0;
+
+ while (curCharWidthLeft) {
+ if (!(curPosX & 1)) {
+ curBits = *curBitsPtr >> 4;
+ } else {
+ curBits = *curBitsPtr & 0x0F;
+ curBitsPtr++;
+ }
+ // doing this properly is complicated
+ // the 3DO has built-in anti-aliasing
+ // this here at least results in somewhat readable text
+ // TODO: make it better
+ if (curBits) {
+ curBitsReversed = (curBits >> 3) | ((curBits & 0x04) >> 1) | ((curBits & 0x02) << 1) | ((curBits & 0x01) << 3);
+ curBits = 20 - curBits;
}
- curCharHeightLeft--;
- curBitsLinePtr += header_bytesPerLine;
+ byte curIntensity = curBits;
+ *dest = (curIntensity << 11) | (curIntensity << 6) | curIntensity;
+ dest++;
+
+ curCharWidthLeft--;
+ curPosX++;
}
- push_back(imageFrame);
+ curCharHeightLeft--;
+ curBitsLinePtr += header_bytesPerLine;
}
+
+ push_back(imageFrame);
}
// Warning below being used to silence unused variable warnings for now
@@ -1051,6 +1049,7 @@ void StreamingImageFile::close() {
_stream = nullptr;
_frameNumber = -1;
_active = false;
+ _imageFrame._frame.free();
}
bool StreamingImageFile::getNextFrame() {
@@ -1081,6 +1080,9 @@ bool StreamingImageFile::getNextFrame() {
_imageFrame._size = frameStream->readUint16LE() - 11;
_imageFrame._rleMarker = frameStream->readByte();
+ // Free the previous frame
+ _imageFrame._frame.free();
+
// Decode the frame
if (_compressed) {
delete frameStream;
diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp
index e442a3c903..e443b6f727 100644
--- a/engines/sherlock/journal.cpp
+++ b/engines/sherlock/journal.cpp
@@ -24,6 +24,7 @@
#include "sherlock/scalpel/scalpel.h"
#include "sherlock/scalpel/scalpel_fixed_text.h"
#include "sherlock/scalpel/scalpel_journal.h"
+#include "sherlock/scalpel/scalpel_talk.h"
#include "sherlock/tattoo/tattoo.h"
#include "sherlock/tattoo/tattoo_fixed_text.h"
#include "sherlock/tattoo/tattoo_journal.h"
@@ -485,9 +486,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
// Copy text from the place until either the reply ends, a comment
// {} block is started, or a control character is encountered
journalString += c;
- do {
+ while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}') {
journalString += *replyP++;
- } while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}');
+ }
commentJustPrinted = false;
}
@@ -525,6 +526,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
else
journalString += people._characters[c]._name;
+ if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::DE_DEU)
+ Scalpel::ScalpelTalk::skipBadText(replyP);
+
const byte *strP = replyP;
byte v;
do {
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp
index 7ab5cd4b4f..8b8f359de3 100644
--- a/engines/sherlock/music.cpp
+++ b/engines/sherlock/music.cpp
@@ -225,6 +225,7 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
_musicOn = false;
_midiOption = false;
_musicVolume = 0;
+ _midiMusicData = nullptr;
if (IS_3DO) {
// 3DO - uses digital samples for music
@@ -470,8 +471,8 @@ bool Music::playMusic(const Common::String &name) {
}
}
+ _midiMusicData = midiMusicData;
_midiParser->loadMusic(midiMusicData, midiMusicDataSize);
-
} else {
// 3DO: sample based
Audio::AudioStream *musicStream;
@@ -517,6 +518,8 @@ void Music::freeSong() {
_midiParser->unloadMusic();
}
+ delete[] _midiMusicData;
+ _midiMusicData = nullptr;
_musicPlaying = false;
}
diff --git a/engines/sherlock/music.h b/engines/sherlock/music.h
index 72a5f48833..186e2aa2dc 100644
--- a/engines/sherlock/music.h
+++ b/engines/sherlock/music.h
@@ -68,6 +68,7 @@ private:
MidiDriver *_midiDriver;
Audio::SoundHandle _digitalMusicHandle;
MusicType _musicType;
+ byte *_midiMusicData;
/**
* Play the specified music resource
diff --git a/engines/sherlock/people.cpp b/engines/sherlock/people.cpp
index b1f4abba47..8057e26204 100644
--- a/engines/sherlock/people.cpp
+++ b/engines/sherlock/people.cpp
@@ -184,8 +184,9 @@ void People::reset() {
Person &p = *_data[idx];
if (IS_SERRATED_SCALPEL) {
- p._type = CHARACTER;
- p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER);
+ p._type = _holmesOn ? CHARACTER : HIDDEN;
+ if (!saves._justLoaded)
+ p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER);
} else if (!talk._scriptMoreFlag && !saves._justLoaded) {
p._type = (idx == 0) ? CHARACTER : INVALID;
p._position = Point32(36 * FIXED_INT_MULTIPLIER, 29 * FIXED_INT_MULTIPLIER);
diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp
index 17e60f5365..b17f38b218 100644
--- a/engines/sherlock/scalpel/scalpel.cpp
+++ b/engines/sherlock/scalpel/scalpel.cpp
@@ -102,78 +102,78 @@ static const byte MAP_SEQUENCES[3][MAX_FRAME] = {
struct PeopleData {
const char *portrait;
- const char *name;
+ int fixedTextId;
byte stillSequences[MAX_TALK_SEQUENCES];
byte talkSequences[MAX_TALK_SEQUENCES];
};
const PeopleData PEOPLE_DATA[MAX_PEOPLE] = {
- { "HOLM", "Sherlock Holmes", { 1, 0, 0 }, { 1, 0, 0 } },
- { "WATS", "Dr. Watson", { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } },
- { "LEST", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } },
- { "CON1", "Constable O'Brien", { 2, 0, 0 }, { 1, 0, 0 } },
- { "CON2", "Constable Lewis", { 2, 0, 0 }, { 1, 0, 0 } },
- { "SHEI", "Sheila Parker", { 2, 0, 0 }, { 2, 3, 0, 0 } },
- { "HENR", "Henry Carruthers", { 3, 0, 0 }, { 3, 0, 0 } },
- { "LESL", "Lesley", { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } },
- { "USH1", "An Usher", { 13, 0, 0 }, { 13, 14, 0, 0 } },
- { "USH2", "An Usher", { 2, 0, 0 }, { 2, 0, 0 } },
- { "FRED", "Fredrick Epstein", { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } },
- { "WORT", "Mrs. Worthington", { 9, 0, 0 }, { 8, 0, 0 } },
- { "COAC", "The Coach", { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } },
- { "PLAY", "A Player", { 8, 0, 0 }, { 7, 8, 0, 0 } },
- { "WBOY", "Tim", { 13, 0, 0 }, { 12, 13, 0, 0 } },
- { "JAME", "James Sanders", { 6, 0, 0 }, { 3, 4, 0, 0 } },
- { "BELL", "Belle", { 1, 0, 0 }, { 4, 5, 0, 0 } },
- { "GIRL", "Cleaning Girl", { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } },
- { "EPST", "Fredrick Epstein", { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } },
- { "WIGG", "Wiggins", { 3, 0, 0 }, { 2, 3, 0, 0 } },
- { "PAUL", "Paul", { 2, 0, 0 }, { 1, 2, 0, 0 } },
- { "BART", "The Bartender", { 1, 0, 0 }, { 1, 0, 0 } },
- { "DIRT", "A Dirty Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SHOU", "A Shouting Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "STAG", "A Staggering Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BOUN", "The Bouncer", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SAND", "James Sanders", { 6, 0, 0 }, { 5, 6, 0, 0 } },
- { "CORO", "The Coroner", { 6, 0, 0 }, { 4, 5, 0, 0 } },
- { "EQUE", "Reginald Snipes", { 1, 0, 0 }, { 1, 0, 0 } },
- { "GEOR", "George Blackwood", { 1, 0, 0 }, { 1, 0, 0 } },
- { "LARS", "Lars", { 7, 0, 0 }, { 5, 6, 0, 0 } },
- { "PARK", "Sheila Parker", { 1, 0, 0 }, { 1, 0, 0 } },
- { "CHEM", "The Chemist", { 8, 0, 0 }, { 8, 9, 0, 0 } },
- { "GREG", "Inspector Gregson", { 6, 0, 0 }, { 5, 6, 0, 0 } },
- { "LAWY", "Jacob Farthington", { 1, 0, 0 }, { 1, 0, 0 } },
- { "MYCR", "Mycroft", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SHER", "Old Sherman", { 7, 0, 0 }, { 7, 8, 0, 0 } },
- { "CHMB", "Richard", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BARM", "The Barman", { 1, 0, 0 }, { 1, 0, 0 } },
- { "DAND", "A Dandy Player", { 1, 0, 0 }, { 1, 0, 0 } },
- { "ROUG", "A Rough-looking Player", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SPEC", "A Spectator", { 1, 0, 0 }, { 1, 0, 0 } },
- { "HUNT", "Robert Hunt", { 1, 0, 0 }, { 1, 0, 0 } },
- { "VIOL", "Violet", { 3, 0, 0 }, { 3, 4, 0, 0 } },
- { "PETT", "Pettigrew", { 1, 0, 0 }, { 1, 0, 0 } },
- { "APPL", "Augie", { 8, 0, 0 }, { 14, 15, 0, 0 } },
- { "ANNA", "Anna Carroway", { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } },
- { "GUAR", "A Guard", { 1, 0, 0 }, { 4, 5, 6, 0, 0 } },
- { "ANTO", "Antonio Caruso", { 8, 0, 0 }, { 7, 8, 0, 0 } },
- { "TOBY", "Toby the Dog", { 1, 0, 0 }, { 1, 0, 0 } },
- { "KING", "Simon Kingsley", { 13, 0, 0 }, { 13, 14, 0, 0 } },
- { "ALFR", "Alfred", { 2, 0, 0 }, { 2, 3, 0, 0 } },
- { "LADY", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } },
- { "ROSA", "Madame Rosa", { 1, 0, 0 }, { 1, 30, 0, 0 } },
- { "LADB", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } },
- { "MOOR", "Joseph Moorehead", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BEAL", "Mrs. Beale", { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } },
- { "LION", "Felix", { 1, 0, 0 }, { 1, 0, 0 } },
- { "HOLL", "Hollingston", { 1, 0, 0 }, { 1, 0, 0 } },
- { "CALL", "Constable Callaghan", { 1, 0, 0 }, { 1, 0, 0 } },
- { "JERE", "Sergeant Duncan", { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } },
- { "LORD", "Lord Brumwell", { 1, 0, 0 }, { 9, 10, 0, 0 } },
- { "NIGE", "Nigel Jaimeson", { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } },
- { "JONA", "Jonas", { 1, 0, 0 }, { 1, 8, 0, 0 } },
- { "DUGA", "Constable Dugan", { 1, 0, 0 }, { 1, 0, 0 } },
- { "INSP", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } }
+ { "HOLM", kFixedText_People_SherlockHolmes, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "WATS", kFixedText_People_DrWatson, { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } },
+ { "LEST", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } },
+ { "CON1", kFixedText_People_ConstableOBrien, { 2, 0, 0 }, { 1, 0, 0 } },
+ { "CON2", kFixedText_People_ConstableLewis, { 2, 0, 0 }, { 1, 0, 0 } },
+ { "SHEI", kFixedText_People_SheilaParker, { 2, 0, 0 }, { 2, 3, 0, 0 } },
+ { "HENR", kFixedText_People_HenryCarruthers, { 3, 0, 0 }, { 3, 0, 0 } },
+ { "LESL", kFixedText_People_Lesley, { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } },
+ { "USH1", kFixedText_People_AnUsher, { 13, 0, 0 }, { 13, 14, 0, 0 } },
+ { "USH2", kFixedText_People_AnUsher, { 2, 0, 0 }, { 2, 0, 0 } },
+ { "FRED", kFixedText_People_FredrickEpstein, { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } },
+ { "WORT", kFixedText_People_MrsWorthington, { 9, 0, 0 }, { 8, 0, 0 } },
+ { "COAC", kFixedText_People_TheCoach, { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } },
+ { "PLAY", kFixedText_People_APlayer, { 8, 0, 0 }, { 7, 8, 0, 0 } },
+ { "WBOY", kFixedText_People_Tim, { 13, 0, 0 }, { 12, 13, 0, 0 } },
+ { "JAME", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 3, 4, 0, 0 } },
+ { "BELL", kFixedText_People_Belle, { 1, 0, 0 }, { 4, 5, 0, 0 } },
+ { "GIRL", kFixedText_People_CleaningGirl, { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } },
+ { "EPST", kFixedText_People_FredrickEpstein, { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } },
+ { "WIGG", kFixedText_People_Wiggins, { 3, 0, 0 }, { 2, 3, 0, 0 } },
+ { "PAUL", kFixedText_People_Paul, { 2, 0, 0 }, { 1, 2, 0, 0 } },
+ { "BART", kFixedText_People_TheBartender, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "DIRT", kFixedText_People_ADirtyDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SHOU", kFixedText_People_AShoutingDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "STAG", kFixedText_People_AStaggeringDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BOUN", kFixedText_People_TheBouncer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SAND", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 5, 6, 0, 0 } },
+ { "CORO", kFixedText_People_TheCoroner, { 6, 0, 0 }, { 4, 5, 0, 0 } },
+ { "EQUE", kFixedText_People_ReginaldSnipes, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "GEOR", kFixedText_People_GeorgeBlackwood, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "LARS", kFixedText_People_Lars, { 7, 0, 0 }, { 5, 6, 0, 0 } },
+ { "PARK", kFixedText_People_SheilaParker, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "CHEM", kFixedText_People_TheChemist, { 8, 0, 0 }, { 8, 9, 0, 0 } },
+ { "GREG", kFixedText_People_InspectorGregson, { 6, 0, 0 }, { 5, 6, 0, 0 } },
+ { "LAWY", kFixedText_People_JacobFarthington, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "MYCR", kFixedText_People_Mycroft, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SHER", kFixedText_People_OldSherman, { 7, 0, 0 }, { 7, 8, 0, 0 } },
+ { "CHMB", kFixedText_People_Richard, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BARM", kFixedText_People_TheBarman, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "DAND", kFixedText_People_ADandyPlayer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "ROUG", kFixedText_People_ARoughlookingPlayer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SPEC", kFixedText_People_ASpectator, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "HUNT", kFixedText_People_RobertHunt, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "VIOL", kFixedText_People_Violet, { 3, 0, 0 }, { 3, 4, 0, 0 } },
+ { "PETT", kFixedText_People_Pettigrew, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "APPL", kFixedText_People_Augie, { 8, 0, 0 }, { 14, 15, 0, 0 } },
+ { "ANNA", kFixedText_People_AnnaCarroway, { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } },
+ { "GUAR", kFixedText_People_AGuard, { 1, 0, 0 }, { 4, 5, 6, 0, 0 } },
+ { "ANTO", kFixedText_People_AntonioCaruso, { 8, 0, 0 }, { 7, 8, 0, 0 } },
+ { "TOBY", kFixedText_People_TobyTheDog, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "KING", kFixedText_People_SimonKingsley, { 13, 0, 0 }, { 13, 14, 0, 0 } },
+ { "ALFR", kFixedText_People_Alfred, { 2, 0, 0 }, { 2, 3, 0, 0 } },
+ { "LADY", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } },
+ { "ROSA", kFixedText_People_MadameRosa, { 1, 0, 0 }, { 1, 30, 0, 0 } },
+ { "LADB", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } },
+ { "MOOR", kFixedText_People_JosephMoorehead, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BEAL", kFixedText_People_MrsBeale, { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } },
+ { "LION", kFixedText_People_Felix, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "HOLL", kFixedText_People_Hollingston, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "CALL", kFixedText_People_ConstableCallaghan, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "JERE", kFixedText_People_SergeantDuncan, { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } },
+ { "LORD", kFixedText_People_LordBrumwell, { 1, 0, 0 }, { 9, 10, 0, 0 } },
+ { "NIGE", kFixedText_People_NigelJaimeson, { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } },
+ { "JONA", kFixedText_People_Jonas, { 1, 0, 0 }, { 1, 8, 0, 0 } },
+ { "DUGA", kFixedText_People_ConstableDugan, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "INSP", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } }
};
uint INFO_BLACK;
@@ -295,9 +295,14 @@ void ScalpelEngine::initialize() {
loadInventory();
// Set up list of people
- for (int idx = 0; idx < MAX_PEOPLE; ++idx)
- _people->_characters.push_back(PersonData(PEOPLE_DATA[idx].name, PEOPLE_DATA[idx].portrait,
+ ScalpelFixedText &fixedText = *(ScalpelFixedText *)_fixedText;
+ const char *peopleNamePtr = nullptr;
+
+ for (int idx = 0; idx < MAX_PEOPLE; ++idx) {
+ peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId);
+ _people->_characters.push_back(PersonData(peopleNamePtr, PEOPLE_DATA[idx].portrait,
PEOPLE_DATA[idx].stillSequences, PEOPLE_DATA[idx].talkSequences));
+ }
_animation->setPrologueNames(&PROLOGUE_NAMES[0], PROLOGUE_NAMES_COUNT);
_animation->setPrologueFrames(&PROLOGUE_FRAMES[0][0], 6, 9);
diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.cpp b/engines/sherlock/scalpel/scalpel_fixed_text.cpp
index 63f84d68c6..372fbc3e7e 100644
--- a/engines/sherlock/scalpel/scalpel_fixed_text.cpp
+++ b/engines/sherlock/scalpel/scalpel_fixed_text.cpp
@@ -55,6 +55,11 @@ static const char *const fixedTextEN[] = {
"Backward",
"Forward",
"Text Not Found !",
+ // SH1: Press key text
+ "Press any Key for More.",
+ "P",
+ "Press any Key to Continue.",
+ "P",
// SH1: Initial Inventory
"A message requesting help",
"A number of business cards",
@@ -68,11 +73,67 @@ static const char *const fixedTextEN[] = {
"Tarot Cards",
"An ornate key",
"A pawn ticket",
- // SH2: Verbs
- "Open",
- "Look",
- "Talk",
- "Journal"
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Inspector Lestrade",
+ "Constable O'Brien",
+ "Constable Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "An Usher",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "The Coach",
+ "A Player",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "Cleaning Girl",
+ "Wiggins",
+ "Paul",
+ "The Bartender",
+ "A Dirty Drunk",
+ "A Shouting Drunk",
+ "A Staggering Drunk",
+ "The Bouncer",
+ "The Coroner",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "The Chemist",
+ "Inspector Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "The Barman",
+ "A Dandy Player",
+ "A Rough-looking Player",
+ "A Spectator",
+ "Robert Hunt",
+ "Violet",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "A Guard",
+ "Antonio Caruso",
+ "Toby the Dog",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "Constable Callaghan",
+ "Sergeant Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "Constable Dugan"
};
// sharp-s : 0xE1 / octal 341
@@ -107,6 +168,11 @@ static const char *const fixedTextDE[] = {
"R\201ckw\204rts", // original: "Backward"
"Vorw\204rts", // original: "Forward"
"Text nicht gefunden!",
+ // SH1: Press key text
+ "Mehr auf Tastendruck...",
+ "M",
+ "Beliebige Taste dr\201cken.",
+ "B",
// SH1: Initial Inventory
"Ein Hilferuf von Lestrade",
"Holmes' Visitenkarten",
@@ -117,14 +183,70 @@ static const char *const fixedTextDE[] = {
"Eine offene Taschenuhr",
"Ein Zettel mit Zahlen drauf",
"Ein mehrfach gefalteter Briefbogen",
- "Ein Tarock-Kartenspiel", // [sic]
+ "Ein Tarot-Kartenspiel", // original interpreter: "Ein Tarock-Kartenspiel" [sic]
"Ein verzierter Schl\201ssel",
"Ein Pfandschein",
- // SH2: Verbs
- "\231ffne",
- "Schau",
- "Rede",
- "Tagebuch"
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Inspektor Lestrade",
+ "Konstabler O'Brien",
+ "Konstabler Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "Platzanweiser",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "Der Trainer",
+ "Ein Spieler",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "Putzm\204dchen",
+ "Wiggins",
+ "Paul",
+ "Gastwirt",
+ "Schmutziger Betrunkener",
+ "Lallender Betrunkener",
+ "Torkelnder Betrunkener",
+ "The Bouncer",
+ "Der Leichenbeschauer",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "Apotheker",
+ "Inspektor Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "Barkeeper",
+ "Jock Mahoney",
+ "Nobby Charleton",
+ "Zuschauer",
+ "Robert Hunt",
+ "Violet",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "Wache",
+ "Antonio Caruso",
+ "Toby the Dog",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "Konstabler Callaghan",
+ "Sergeant Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "Konstabler Dugan"
};
// up-side down exclamation mark - 0xAD / octal 255
@@ -132,11 +254,11 @@ static const char *const fixedTextDE[] = {
// n with a wave on top - 0xA4 / octal 244
static const char *const fixedTextES[] = {
// SH1: Window buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Subir",
"Bajar",
// SH1: Inventory buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Mirar",
"Usar",
"Dar",
@@ -144,7 +266,7 @@ static const char *const fixedTextES[] = {
"Diario de Watson",
"Pagina %d",
// SH1: Journal buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Retroceder",
"Subir",
"baJar",
@@ -154,10 +276,15 @@ static const char *const fixedTextES[] = {
"Ult pagina",
"Imprimir",
// SH1: Journal search
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Retroceder",
"Avanzar",
"Texto no encontrado!",
+ // SH1: Press key text
+ "Tecla para ver mas",
+ "T",
+ "Tecla para continuar",
+ "T",
// SH1: Initial Inventory
"Un mensaje solicitando ayuda",
"Unas cuantas tarjetas de visita",
@@ -171,6 +298,67 @@ static const char *const fixedTextES[] = {
"Unas cartas de Tarot",
"Una llave muy vistosa",
"Una papeleta de empe\244o",
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "El inspector Lestrade",
+ "El agente O'Brien",
+ "El agente Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "Un ujier",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "El entrenador",
+ "El jugador",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "La chica de la limpieza",
+ "Wiggins",
+ "Paul",
+ "El barman",
+ "Un sucio borracho",
+ "Un borracho griton",
+ "Un tambaleante borracho",
+ "El gorila",
+ "El forense",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "El quimico",
+ "El inspector Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "El barman",
+ "Un jugador dandy",
+ "Un duro jugador",
+ "Un espectador",
+ "Robert Hunt",
+ "Violeta",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "Un guarda",
+ "Antonio Caruso",
+ "El perro Toby",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "El agente Callaghan",
+ "El sargento Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "El agente Dugan"
};
// =========================================
diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.h b/engines/sherlock/scalpel/scalpel_fixed_text.h
index eae86b8f27..f46587ce81 100644
--- a/engines/sherlock/scalpel/scalpel_fixed_text.h
+++ b/engines/sherlock/scalpel/scalpel_fixed_text.h
@@ -57,6 +57,11 @@ enum FixedTextId {
kFixedText_JournalSearch_Backward,
kFixedText_JournalSearch_Forward,
kFixedText_JournalSearch_NotFound,
+ // Press key text
+ kFixedText_PressKey_ForMore,
+ kFixedText_PressKey_ForMoreHotkey,
+ kFixedText_PressKey_ToContinue,
+ kFixedText_PressKey_ToContinueHotkey,
// Initial inventory
kFixedText_InitInventory_Message,
kFixedText_InitInventory_HolmesCard,
@@ -69,7 +74,68 @@ enum FixedTextId {
kFixedText_InitInventory_Letter,
kFixedText_InitInventory_Tarot,
kFixedText_InitInventory_OrnateKey,
- kFixedText_InitInventory_PawnTicket
+ kFixedText_InitInventory_PawnTicket,
+ // People names
+ kFixedText_People_SherlockHolmes,
+ kFixedText_People_DrWatson,
+ kFixedText_People_InspectorLestrade,
+ kFixedText_People_ConstableOBrien,
+ kFixedText_People_ConstableLewis,
+ kFixedText_People_SheilaParker,
+ kFixedText_People_HenryCarruthers,
+ kFixedText_People_Lesley,
+ kFixedText_People_AnUsher,
+ kFixedText_People_FredrickEpstein,
+ kFixedText_People_MrsWorthington,
+ kFixedText_People_TheCoach,
+ kFixedText_People_APlayer,
+ kFixedText_People_Tim,
+ kFixedText_People_JamesSanders,
+ kFixedText_People_Belle,
+ kFixedText_People_CleaningGirl,
+ kFixedText_People_Wiggins,
+ kFixedText_People_Paul,
+ kFixedText_People_TheBartender,
+ kFixedText_People_ADirtyDrunk,
+ kFixedText_People_AShoutingDrunk,
+ kFixedText_People_AStaggeringDrunk,
+ kFixedText_People_TheBouncer,
+ kFixedText_People_TheCoroner,
+ kFixedText_People_ReginaldSnipes,
+ kFixedText_People_GeorgeBlackwood,
+ kFixedText_People_Lars,
+ kFixedText_People_TheChemist,
+ kFixedText_People_InspectorGregson,
+ kFixedText_People_JacobFarthington,
+ kFixedText_People_Mycroft,
+ kFixedText_People_OldSherman,
+ kFixedText_People_Richard,
+ kFixedText_People_TheBarman,
+ kFixedText_People_ADandyPlayer,
+ kFixedText_People_ARoughlookingPlayer,
+ kFixedText_People_ASpectator,
+ kFixedText_People_RobertHunt,
+ kFixedText_People_Violet,
+ kFixedText_People_Pettigrew,
+ kFixedText_People_Augie,
+ kFixedText_People_AnnaCarroway,
+ kFixedText_People_AGuard,
+ kFixedText_People_AntonioCaruso,
+ kFixedText_People_TobyTheDog,
+ kFixedText_People_SimonKingsley,
+ kFixedText_People_Alfred,
+ kFixedText_People_LadyBrumwell,
+ kFixedText_People_MadameRosa,
+ kFixedText_People_JosephMoorehead,
+ kFixedText_People_MrsBeale,
+ kFixedText_People_Felix,
+ kFixedText_People_Hollingston,
+ kFixedText_People_ConstableCallaghan,
+ kFixedText_People_SergeantDuncan,
+ kFixedText_People_LordBrumwell,
+ kFixedText_People_NigelJaimeson,
+ kFixedText_People_Jonas,
+ kFixedText_People_ConstableDugan
};
struct FixedTextActionEntry {
diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp
index 787d899aee..5c2b8f77f3 100644
--- a/engines/sherlock/scalpel/scalpel_journal.cpp
+++ b/engines/sherlock/scalpel/scalpel_journal.cpp
@@ -104,6 +104,25 @@ void ScalpelJournal::loadLocations() {
while ((c = loc->readByte()) != 0)
line += c;
+ // WORKAROUND: Special fixes for faulty translations
+ // Was obviously not done in the original interpreter
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ // Spanish version
+ // We fix all sorts of typos
+ // see bug #6931
+ if (line == "En el cajellon destras del teatro Regency") {
+ line = "En el callejon detras del teatro Regency";
+ } else if (line == "En el apartamente de Simon Kingsley") {
+ line = "En el apartamento de Simon Kingsley";
+ } else if (line == "Bajo la muelle de Savoy Pier") {
+ line = "Bajo el muelle de Savoy Pier";
+ } else if (line == "En le viejo Sherman") {
+ line = "En el viejo Sherman";
+ } else if (line == "En la entrada de la cada de Anna Carroway") {
+ line = "En la entrada de la casa de Anna Carroway";
+ }
+ }
+
_locations.push_back(line);
}
diff --git a/engines/sherlock/scalpel/scalpel_map.cpp b/engines/sherlock/scalpel/scalpel_map.cpp
index 369822ba02..0924581e38 100644
--- a/engines/sherlock/scalpel/scalpel_map.cpp
+++ b/engines/sherlock/scalpel/scalpel_map.cpp
@@ -100,6 +100,21 @@ void ScalpelMap::loadData() {
while ((c = txtStream->readByte()) != '\0')
line += c;
+ // WORKAROUND: Special fixes for faulty translations
+ // Was obviously not done in the original interpreter
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ // Spanish version
+ if (line == " Alley") {
+ // The "Alley" location was not translated, we do this now
+ // see bug #6931
+ line = " Callejon";
+ } else if (line == " Alamacen") {
+ // "Warehouse" location has a typo, we fix it
+ // see bug #6931
+ line = " Almacen";
+ }
+ }
+
_locationNames.push_back(line);
}
diff --git a/engines/sherlock/scalpel/scalpel_scene.cpp b/engines/sherlock/scalpel/scalpel_scene.cpp
index b2c7339363..b62703e0fb 100644
--- a/engines/sherlock/scalpel/scalpel_scene.cpp
+++ b/engines/sherlock/scalpel/scalpel_scene.cpp
@@ -40,6 +40,11 @@ const int FS_TRANS[8] = {
/*----------------------------------------------------------------*/
+ScalpelScene::~ScalpelScene() {
+ for (uint idx = 0; idx < _canimShapes.size(); ++idx)
+ delete _canimShapes[idx];
+}
+
bool ScalpelScene::loadScene(const Common::String &filename) {
ScalpelMap &map = *(ScalpelMap *)_vm->_map;
bool result = Scene::loadScene(filename);
@@ -71,9 +76,9 @@ void ScalpelScene::drawAllShapes() {
// Draw all canimations which are behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == BEHIND)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame,
- _canimShapes[idx]._position, _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == BEHIND)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame,
+ _canimShapes[idx]->_position, _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw all active shapes which are normal and behind the person
@@ -84,9 +89,9 @@ void ScalpelScene::drawAllShapes() {
// Draw all canimations which are normal and behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == NORMAL_BEHIND)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == NORMAL_BEHIND)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw any active characters
@@ -113,10 +118,10 @@ void ScalpelScene::drawAllShapes() {
// Draw all static and active canimations that are NORMAL and are in front of the player
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) &&
- _canimShapes[idx]._misc == NORMAL_FORWARD)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) &&
+ _canimShapes[idx]->_misc == NORMAL_FORWARD)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw all static and active shapes that are FORWARD
@@ -133,10 +138,10 @@ void ScalpelScene::drawAllShapes() {
// Draw all static and active canimations that are forward
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) &&
- _canimShapes[idx]._misc == FORWARD)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) &&
+ _canimShapes[idx]->_misc == FORWARD)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
screen.resetDisplayBounds();
@@ -152,7 +157,7 @@ void ScalpelScene::checkBgShapes() {
// Iterate through the canim list
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &obj = _canimShapes[idx];
+ Object &obj = *_canimShapes[idx];
if (obj._type == STATIC_BG_SHAPE || obj._type == ACTIVE_BG_SHAPE) {
if ((obj._flags & 5) == 1) {
obj._misc = (pt.y < (obj._position.y + obj._imageFrame->_frame.h - 1)) ?
@@ -221,8 +226,8 @@ void ScalpelScene::doBgAnim() {
people._portrait.checkObject();
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type != INVALID && _canimShapes[idx]._type != REMOVE)
- _canimShapes[idx].checkObject();
+ if (_canimShapes[idx]->_type != INVALID && _canimShapes[idx]->_type != REMOVE)
+ _canimShapes[idx]->checkObject();
}
if (_currentScene == DRAWING_ROOM)
@@ -266,7 +271,7 @@ void ScalpelScene::doBgAnim() {
}
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE || o._type == HIDE_SHAPE || o._type == REMOVE)
screen.restoreBackground(Common::Rect(o._oldPosition.x, o._oldPosition.y,
o._oldPosition.x + o._oldSize.x, o._oldPosition.y + o._oldSize.y));
@@ -287,8 +292,8 @@ void ScalpelScene::doBgAnim() {
people._portrait.adjustObject();
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type != INVALID)
- _canimShapes[idx].adjustObject();
+ if (_canimShapes[idx]->_type != INVALID)
+ _canimShapes[idx]->adjustObject();
}
if (people[HOLMES]._type == CHARACTER && people._holmesOn)
@@ -309,7 +314,7 @@ void ScalpelScene::doBgAnim() {
// Draw all canimations which are behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE && o._misc == BEHIND) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -324,14 +329,14 @@ void ScalpelScene::doBgAnim() {
// Draw all canimations which are NORMAL and behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE && o._misc == NORMAL_BEHIND) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
}
- // Draw the person if not animating
- if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded) {
+ // Draw the player if he's active and his walk has been loaded into memory
+ if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded && people._holmesOn) {
// If Holmes is too far to the right, move him back so he's on-screen
int xRight = SHERLOCK_SCREEN_WIDTH - 2 - people[HOLMES]._imageFrame->_frame.w;
int tempX = MIN(people[HOLMES]._position.x / FIXED_INT_MULTIPLIER, xRight);
@@ -352,7 +357,7 @@ void ScalpelScene::doBgAnim() {
// Draw all static and active canimations that are NORMAL and are in front of the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == NORMAL_FORWARD) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -372,7 +377,7 @@ void ScalpelScene::doBgAnim() {
// Draw all static and active canimations that are in front of the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == FORWARD) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -450,16 +455,18 @@ void ScalpelScene::doBgAnim() {
}
for (int idx = _canimShapes.size() - 1; idx >= 0; --idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == INVALID) {
// Anim shape was invalidated by checkEndOfSequence, so at this point we can remove it
+ delete _canimShapes[idx];
_canimShapes.remove_at(idx);
} else if (o._type == REMOVE) {
if (_goToScene == -1)
screen.slamArea(o._position.x, o._position.y, o._delta.x, o._delta.y);
// Shape for an animation is no longer needed, so remove it completely
+ delete _canimShapes[idx];
_canimShapes.remove_at(idx);
} else if (o._type == ACTIVE_BG_SHAPE) {
screen.flushImage(o._imageFrame, o._position,
@@ -496,6 +503,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
int tpDir, walkDir;
int tFrames = 0;
int gotoCode = -1;
+ Object *cObj;
// Validation
if (cAnimNum >= (int)_cAnim.size())
@@ -533,33 +541,33 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
return 1;
// Add new anim shape entry for displaying the animation
- _canimShapes.push_back(Object());
- Object &cObj = _canimShapes[_canimShapes.size() - 1];
+ cObj = new Object();
+ _canimShapes.push_back(cObj);
// Copy the canimation into the bgShapes type canimation structure so it can be played
- cObj._allow = cAnimNum + 1; // Keep track of the parent structure
- cObj._name = _cAnim[cAnimNum]._name; // Copy name
+ cObj->_allow = cAnimNum + 1; // Keep track of the parent structure
+ cObj->_name = _cAnim[cAnimNum]._name; // Copy name
// Remove any attempt to draw object frame
if (cAnim._type == NO_SHAPE && cAnim._sequences[0] < 100)
cAnim._sequences[0] = 0;
- cObj._sequences = cAnim._sequences;
- cObj._images = nullptr;
- cObj._position = cAnim._position;
- cObj._delta = Common::Point(0, 0);
- cObj._type = cAnim._type;
- cObj._flags = cAnim._flags;
-
- cObj._maxFrames = 0;
- cObj._frameNumber = -1;
- cObj._sequenceNumber = cAnimNum;
- cObj._oldPosition = Common::Point(0, 0);
- cObj._oldSize = Common::Point(0, 0);
- cObj._goto = Common::Point(0, 0);
- cObj._status = 0;
- cObj._misc = 0;
- cObj._imageFrame = nullptr;
+ cObj->_sequences = cAnim._sequences;
+ cObj->_images = nullptr;
+ cObj->_position = cAnim._position;
+ cObj->_delta = Common::Point(0, 0);
+ cObj->_type = cAnim._type;
+ cObj->_flags = cAnim._flags;
+
+ cObj->_maxFrames = 0;
+ cObj->_frameNumber = -1;
+ cObj->_sequenceNumber = cAnimNum;
+ cObj->_oldPosition = Common::Point(0, 0);
+ cObj->_oldSize = Common::Point(0, 0);
+ cObj->_goto = Common::Point(0, 0);
+ cObj->_status = 0;
+ cObj->_misc = 0;
+ cObj->_imageFrame = nullptr;
if (cAnim._name.size() > 0 && cAnim._type != NO_SHAPE) {
if (tpPos.x != -1)
@@ -584,25 +592,25 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
// Now load the resource as an image
if (!IS_3DO) {
- cObj._images = new ImageFile(fname);
+ cObj->_images = new ImageFile(fname);
} else {
- cObj._images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat);
+ cObj->_images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat);
}
- cObj._imageFrame = &(*cObj._images)[0];
- cObj._maxFrames = cObj._images->size();
+ cObj->_imageFrame = &(*cObj->_images)[0];
+ cObj->_maxFrames = cObj->_images->size();
int frames = 0;
if (playRate < 0) {
// Reverse direction
// Count number of frames
- while (frames < MAX_FRAME && cObj._sequences[frames])
+ while (frames < MAX_FRAME && cObj->_sequences[frames])
++frames;
} else {
// Forward direction
BaseObject::_countCAnimFrames = true;
- while (cObj._type == ACTIVE_BG_SHAPE) {
- cObj.checkObject();
+ while (cObj->_type == ACTIVE_BG_SHAPE) {
+ cObj->checkObject();
++frames;
if (frames >= 1000)
@@ -614,10 +622,10 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
BaseObject::_countCAnimFrames = false;
- cObj._type = cAnim._type;
- cObj._frameNumber = -1;
- cObj._position = cAnim._position;
- cObj._delta = Common::Point(0, 0);
+ cObj->_type = cAnim._type;
+ cObj->_frameNumber = -1;
+ cObj->_position = cAnim._position;
+ cObj->_delta = Common::Point(0, 0);
}
// Return if animation has no frames in it
@@ -631,7 +639,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
if (playRate < 0) {
// Play in reverse
dir = -2;
- cObj._frameNumber = frames - 3;
+ cObj->_frameNumber = frames - 3;
} else {
dir = 0;
}
@@ -648,14 +656,14 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
// Repeat same frame
int temp = repeat;
while (--temp > 0) {
- cObj._frameNumber--;
+ cObj->_frameNumber--;
doBgAnim();
if (_vm->shouldQuit())
return 0;
}
- cObj._frameNumber += dir;
+ cObj->_frameNumber += dir;
}
people[HOLMES]._type = CHARACTER;
@@ -670,14 +678,18 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
if (playRate < 0)
// Reverse direction - set to end sequence
- cObj._frameNumber = tFrames - 1;
+ cObj->_frameNumber = tFrames - 1;
- if (cObj._frameNumber <= 26)
- gotoCode = cObj._sequences[cObj._frameNumber + 3];
+ if (cObj->_frameNumber <= 26)
+ gotoCode = cObj->_sequences[cObj->_frameNumber + 3];
- // Unless anim shape has already been freed, set it to REMOVE so doBgAnim can free it
- if (_canimShapes.indexOf(cObj) != -1)
- cObj.checkObject();
+ // Unless anim shape has already been removed, do a final check to allow it to become REMOVEd
+ for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
+ if (_canimShapes[idx] == cObj) {
+ cObj->checkObject();
+ break;
+ }
+ }
if (gotoCode > 0 && !talk._talkToAbort) {
_goToScene = gotoCode;
diff --git a/engines/sherlock/scalpel/scalpel_scene.h b/engines/sherlock/scalpel/scalpel_scene.h
index 8fe3b66b38..8711fea2d0 100644
--- a/engines/sherlock/scalpel/scalpel_scene.h
+++ b/engines/sherlock/scalpel/scalpel_scene.h
@@ -75,6 +75,8 @@ protected:
public:
ScalpelScene(SherlockEngine *vm) : Scene(vm) {}
+ virtual ~ScalpelScene();
+
/**
* Draw all objects and characters.
*/
diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp
index 88a718ea4e..2c447b09ab 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)
+ skipBadText(str);
+
// If the window isn't yet open, draw the window before printing starts
if (!ui._windowOpen && _noTextYet) {
_noTextYet = false;
@@ -705,10 +709,14 @@ void ScalpelTalk::drawInterface() {
screen.makeButton(Common::Rect(181, CONTROLS_Y, 221, CONTROLS_Y + 10),
200 - screen.stringWidth(fixedText_Down) / 2, fixedText_Down);
} else {
- int strWidth = screen.stringWidth(Scalpel::PRESS_KEY_TO_CONTINUE);
+ Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue);
+ Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey);
+ int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 273, CONTROLS_Y + 10),
- 160 - strWidth / 2, Scalpel::PRESS_KEY_TO_CONTINUE);
- screen.gPrint(Common::Point(160 - strWidth / 2, CONTROLS_Y), COMMAND_FOREGROUND, "P");
+ 160 - fixedText_PressKeyToContinueLen / 2, fixedText_PressKeyToContinue);
+ screen.gPrint(Common::Point(160 - fixedText_PressKeyToContinueLen / 2, CONTROLS_Y), COMMAND_FOREGROUND,
+ "%s", fixedText_PressKeyToContinueHotkey.c_str());
}
}
@@ -1006,6 +1014,14 @@ void ScalpelTalk::clearSequences() {
_sequenceStack.clear();
}
+void ScalpelTalk::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_talk.h b/engines/sherlock/scalpel/scalpel_talk.h
index 4d54273f4a..3ba61dadc1 100644
--- a/engines/sherlock/scalpel/scalpel_talk.h
+++ b/engines/sherlock/scalpel/scalpel_talk.h
@@ -132,6 +132,11 @@ public:
bool talk3DOMovieTrigger(int subIndex);
/**
+ * Handles skipping over bad text in conversations
+ */
+ static void skipBadText(const byte *&msgP);
+
+ /**
* Push the details of a passed object onto the saved sequences stack
*/
virtual void pushSequenceEntry(Object *obj);
@@ -145,7 +150,7 @@ public:
/**
* Returns true if the script stack is empty
*/
- virtual bool isSequencesEmpty() const { return _scriptStack.empty(); }
+ virtual bool isSequencesEmpty() const { return _sequenceStack.empty(); }
/**
* Clears the stack of pending object sequences associated with speakers in the scene
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp
index be8f1aaa0c..79d74ba999 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.cpp
+++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp
@@ -67,8 +67,6 @@ const int INVENTORY_POINTS[8][3] = {
const char COMMANDS[13] = "LMTPOCIUGJFS";
const char COMMANDS_3DO[13] = "LMTPOCIUGSFF";
const char INVENTORY_COMMANDS[9] = { "ELUG-+,." };
-const char *const PRESS_KEY_FOR_MORE = "Press any Key for More.";
-const char *const PRESS_KEY_TO_CONTINUE = "Press any Key to Continue.";
const int UI_OFFSET_3DO = 16; // (320 - 288) / 2
/*----------------------------------------------------------------*/
@@ -777,7 +775,7 @@ void ScalpelUserInterface::doEnvControl() {
} else if ((found == 1 && events._released) || _key == 'L') {
saves._envMode = SAVEMODE_LOAD;
if (_selector != -1) {
- saves.loadGame(_selector + 1);
+ saves.loadGame(_selector);
}
} else if ((found == 2 && events._released) || _key == 'S') {
saves._envMode = SAVEMODE_SAVE;
@@ -786,7 +784,7 @@ void ScalpelUserInterface::doEnvControl() {
_oldSelector = _selector;
if (saves.promptForDescription(_selector)) {
- saves.saveGame(_selector + 1, saves._savegames[_selector]);
+ saves.saveGame(_selector, saves._savegames[_selector]);
banishWindow(1);
_windowBounds.top = CONTROLS_Y1;
@@ -950,14 +948,14 @@ void ScalpelUserInterface::doEnvControl() {
if (_selector != -1) {
// Are we already in Load mode?
if (saves._envMode == SAVEMODE_LOAD) {
- saves.loadGame(_selector + 1);
+ saves.loadGame(_selector);
} else if (saves._envMode == SAVEMODE_SAVE || saves.isSlotEmpty(_selector)) {
// We're already in save mode, or pointing to an empty save slot
if (saves.checkGameOnScreen(_selector))
_oldSelector = _selector;
if (saves.promptForDescription(_selector)) {
- saves.saveGame(_selector + 1, saves._savegames[_selector]);
+ saves.saveGame(_selector, saves._savegames[_selector]);
banishWindow();
_windowBounds.top = CONTROLS_Y1;
_key = _oldKey = -1;
@@ -1300,9 +1298,11 @@ void ScalpelUserInterface::doMainControl() {
// Keyboard control
_keyboardInput = true;
- if (_keyPress >= 'A' && _keyPress <= 'Z') {
- const char *c = strchr(commands, _keyPress);
- _temp = !c ? 12 : c - commands;
+ char key = toupper(_keyPress);
+ const char *c = strchr(commands, key);
+ if (c) {
+ _temp = c - commands;
+ _key = key;
} else {
_temp = 12;
}
@@ -1808,6 +1808,7 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first
ScalpelInventory &inv = *(ScalpelInventory *)_vm->_inventory;
ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen;
Talk &talk = *_vm->_talk;
+ FixedText &fixedText = *_vm->_fixedText;
if (str.hasPrefix("_")) {
_lookScriptFlag = true;
@@ -1938,20 +1939,26 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first
// Handle display depending on whether all the message was shown
if (!endOfStr) {
+ Common::String fixedText_PressKeyForMore = fixedText.getText(kFixedText_PressKey_ForMore);
+ Common::String fixedText_PressKeyForMoreHotkey = fixedText.getText(kFixedText_PressKey_ForMoreHotkey);
+ int fixedText_PressKeyForMoreLen = screen.stringWidth(fixedText_PressKeyForMore);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10),
- (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2,
- PRESS_KEY_FOR_MORE);
- screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH -
- screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2, CONTROLS_Y),
- COMMAND_FOREGROUND, "P");
+ (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2,
+ fixedText_PressKeyForMore);
+ screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2, CONTROLS_Y),
+ COMMAND_FOREGROUND, "%s", fixedText_PressKeyForMoreHotkey.c_str());
_descStr = msgP;
} else {
+ Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue);
+ Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey);
+ int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10),
- (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2,
- PRESS_KEY_TO_CONTINUE);
- screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH -
- screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2, CONTROLS_Y),
- COMMAND_FOREGROUND, "P");
+ (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2,
+ fixedText_PressKeyToContinue);
+ screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2, CONTROLS_Y),
+ COMMAND_FOREGROUND, "%s", fixedText_PressKeyToContinueHotkey.c_str());
_descStr = "";
}
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.h b/engines/sherlock/scalpel/scalpel_user_interface.h
index d88e607c2a..8c2f3f9e3b 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.h
+++ b/engines/sherlock/scalpel/scalpel_user_interface.h
@@ -39,8 +39,6 @@ extern const int MENU_POINTS[12][4];
extern const int INVENTORY_POINTS[8][3];
extern const char INVENTORY_COMMANDS[9];
-extern const char *const PRESS_KEY_FOR_MORE;
-extern const char *const PRESS_KEY_TO_CONTINUE;
class Settings;
diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp
index ea12fafd7b..c86282fe0e 100644
--- a/engines/sherlock/scene.cpp
+++ b/engines/sherlock/scene.cpp
@@ -563,34 +563,37 @@ bool Scene::loadScene(const Common::String &filename) {
// Read in the walk data
size = rrmStream->readUint16LE();
- Common::SeekableReadStream *walkStream = !_compressed ? rrmStream :
+ Common::SeekableReadStream *walkStream = !_compressed ? rrmStream->readStream(size) :
res.decompress(*rrmStream, size);
- int startPos = walkStream->pos();
- while ((walkStream->pos() - startPos) < size) {
- _walkPoints.push_back(WalkArray());
- _walkPoints[_walkPoints.size() - 1]._fileOffset = walkStream->pos() - startPos;
- _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
- }
-
- if (_compressed)
- delete walkStream;
-
// Translate the file offsets of the walk directory to indexes in the loaded walk data
for (uint idx1 = 0; idx1 < _zones.size(); ++idx1) {
for (uint idx2 = 0; idx2 < _zones.size(); ++idx2) {
- int fileOffset = _walkDirectory[idx1][idx2];
- if (fileOffset == -1)
+ int dataOffset = _walkDirectory[idx1][idx2];
+ if (dataOffset == -1)
continue;
+ // Check to see if we've already loaded the walk set for the given data offset
uint dataIndex = 0;
- while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != fileOffset)
+ while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != dataOffset)
++dataIndex;
- assert(dataIndex < _walkPoints.size());
+
+ if (dataIndex == _walkPoints.size()) {
+ // Walk data for that offset hasn't been loaded yet, so load it now
+ _walkPoints.push_back(WalkArray());
+
+ walkStream->seek(dataOffset);
+ _walkPoints[_walkPoints.size() - 1]._fileOffset = dataOffset;
+ _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
+ dataIndex = _walkPoints.size() - 1;
+ }
+
_walkDirectory[idx1][idx2] = dataIndex;
}
}
+ delete walkStream;
+
if (IS_ROSE_TATTOO) {
// Read in the entrance
_entrance.load(*rrmStream);
@@ -893,28 +896,38 @@ bool Scene::loadScene(const Common::String &filename) {
// === WALK DATA === Read in the walk data
roomStream->seek(header3DO_walkData_offset);
- int startPos = roomStream->pos();
- while ((roomStream->pos() - startPos) < (int)header3DO_walkData_size) {
- _walkPoints.push_back(WalkArray());
- _walkPoints[_walkPoints.size() - 1]._fileOffset = roomStream->pos() - startPos;
- _walkPoints[_walkPoints.size() - 1].load(*roomStream, false);
- }
+ // Read in the walk data
+ Common::SeekableReadStream *walkStream = !_compressed ? roomStream->readStream(header3DO_walkData_size) :
+ res.decompress(*roomStream, header3DO_walkData_size);
// Translate the file offsets of the walk directory to indexes in the loaded walk data
for (uint idx1 = 0; idx1 < _zones.size(); ++idx1) {
for (uint idx2 = 0; idx2 < _zones.size(); ++idx2) {
- int fileOffset = _walkDirectory[idx1][idx2];
- if (fileOffset == -1)
+ int dataOffset = _walkDirectory[idx1][idx2];
+ if (dataOffset == -1)
continue;
+ // Check to see if we've already loaded the walk set for the given data offset
uint dataIndex = 0;
- while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != fileOffset)
+ while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != dataOffset)
++dataIndex;
- assert(dataIndex < _walkPoints.size());
+
+ if (dataIndex == _walkPoints.size()) {
+ // Walk data for that offset hasn't been loaded yet, so load it now
+ _walkPoints.push_back(WalkArray());
+
+ walkStream->seek(dataOffset);
+ _walkPoints[_walkPoints.size() - 1]._fileOffset = dataOffset;
+ _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
+ dataIndex = _walkPoints.size() - 1;
+ }
+
_walkDirectory[idx1][idx2] = dataIndex;
}
}
+ delete walkStream;
+
// === EXITS === Read in the exits
roomStream->seek(header3DO_exits_offset);
diff --git a/engines/sherlock/scene.h b/engines/sherlock/scene.h
index f75dfb40cd..3e3bed6f96 100644
--- a/engines/sherlock/scene.h
+++ b/engines/sherlock/scene.h
@@ -229,7 +229,7 @@ public:
Common::Array<Exit> _exits;
SceneEntry _entrance;
Common::Array<SceneSound> _sounds;
- ObjectArray _canimShapes;
+ Common::Array<Object *> _canimShapes;
Common::Array<ScaleZone> _scaleZones;
Common::StringArray _objSoundList;
bool _restoreFlag;
diff --git a/engines/sherlock/screen.cpp b/engines/sherlock/screen.cpp
index 208487d0ca..74da2a80ea 100644
--- a/engines/sherlock/screen.cpp
+++ b/engines/sherlock/screen.cpp
@@ -223,7 +223,7 @@ void Screen::verticalTransition() {
void Screen::restoreBackground(const Common::Rect &r) {
if (r.width() > 0 && r.height() > 0)
- _backBuffer1.blitFrom(_backBuffer2, Common::Point(r.left, r.top), r);
+ _backBuffer->blitFrom(_backBuffer2, Common::Point(r.left, r.top), r);
}
void Screen::slamArea(int16 xp, int16 yp, int16 width, int16 height) {
diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp
index 66b5b5bf5c..56ac2a5d9a 100644
--- a/engines/sherlock/sound.cpp
+++ b/engines/sherlock/sound.cpp
@@ -90,7 +90,7 @@ Sound::Sound(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
void Sound::syncSoundSettings() {
_digitized = !ConfMan.getBool("mute");
_speechOn = !ConfMan.getBool("mute") && !ConfMan.getBool("speech_mute");
- _voices = _speechOn ? 1 : 0;
+ _voices = _digitized ? 1 : 0;
}
void Sound::loadSound(const Common::String &name, int priority) {
@@ -123,25 +123,9 @@ byte Sound::decodeSample(byte sample, byte &reference, int16 &scale) {
bool Sound::playSound(const Common::String &name, WaitType waitType, int priority, const char *libraryFilename) {
stopSound();
- Common::String filename = name;
- if (!filename.contains('.')) {
- if (!IS_3DO) {
- if (IS_SERRATED_SCALPEL) {
- filename += ".SND";
- } else {
- filename += ".WAV";
- }
- } else {
- // 3DO uses .aiff extension
- filename += ".AIFF";
- if (!filename.contains('/')) {
- // if no directory was given, use the room sounds directory
- filename = "rooms/sounds/" + filename;
- }
- }
- }
+ Common::String filename = formFilename(name);
- Audio::SoundHandle soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle();
+ Audio::SoundHandle &soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle();
if (!playSoundResource(filename, libraryFilename, Audio::Mixer::kSFXSoundType, soundHandle))
error("Could not find sound resource - %s", filename.c_str());
@@ -168,6 +152,29 @@ bool Sound::playSound(const Common::String &name, WaitType waitType, int priorit
return retval;
}
+Common::String Sound::formFilename(const Common::String &name) {
+ Common::String filename = name;
+
+ if (!filename.contains('.')) {
+ if (!IS_3DO) {
+ if (IS_SERRATED_SCALPEL) {
+ filename += ".SND";
+ } else {
+ filename += ".WAV";
+ }
+ } else {
+ // 3DO uses .aiff extension
+ filename += ".AIFF";
+ if (!filename.contains('/')) {
+ // if no directory was given, use the room sounds directory
+ filename = "rooms/sounds/" + filename;
+ }
+ }
+ }
+
+ return filename;
+}
+
void Sound::playAiff(const Common::String &name, int volume, bool loop) {
Common::File *file = new Common::File();
if (!file->open(name)) {
@@ -222,7 +229,7 @@ void Sound::freeDigiSound() {
_soundPlaying = false;
}
-Audio::SoundHandle Sound::getFreeSoundHandle() {
+Audio::SoundHandle &Sound::getFreeSoundHandle() {
for (int i = 0; i < MAX_MIXER_CHANNELS; i++) {
if (!_mixer->isSoundHandleActive(_tattooEffectsHandle[i]))
return _tattooEffectsHandle[i];
@@ -238,29 +245,32 @@ void Sound::setVolume(int volume) {
void Sound::playSpeech(const Common::String &name) {
Resources &res = *_vm->_res;
Scene &scene = *_vm->_scene;
- stopSpeech();
-
- // TODO: Technically Scalpel has an sfx command which I've set to call this method because it sets the
- // _voice variable as if it were speech. Need to do a play-through of Scalpel and see if it's ever called.
- // If so, will need to enhance this method to handle the Serrated Scalpel voice resources
- assert(IS_ROSE_TATTOO);
- // Figure out which speech library to use
- Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene);
- if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7))
- || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7)))
- libraryName = "SPEECH12.LIB";
+ // Stop any previously playing speech
+ stopSpeech();
- // If the speech library file doesn't even exist, then we can't play anything
- Common::File f;
- if (!f.exists(libraryName))
- return;
+ if (IS_SERRATED_SCALPEL) {
+ Common::String filename = formFilename(name);
+ if (playSoundResource(filename, Common::String(), Audio::Mixer::kSFXSoundType, _speechHandle))
+ _speechPlaying = true;
+ } else {
+ // Figure out which speech library to use
+ Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene);
+ if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7))
+ || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7)))
+ libraryName = "SPEECH12.LIB";
+
+ // If the speech library file doesn't even exist, then we can't play anything
+ Common::File f;
+ if (!f.exists(libraryName))
+ return;
- // Ensure the given library is in the cache
- res.addToCache(libraryName);
+ // Ensure the given library is in the cache
+ res.addToCache(libraryName);
- if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle))
- _speechPlaying = true;
+ if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle))
+ _speechPlaying = true;
+ }
}
void Sound::stopSpeech() {
diff --git a/engines/sherlock/sound.h b/engines/sherlock/sound.h
index 44969b8923..0a0ff83d1f 100644
--- a/engines/sherlock/sound.h
+++ b/engines/sherlock/sound.h
@@ -61,6 +61,11 @@ private:
*/
bool playSoundResource(const Common::String &name, const Common::String &libFilename,
Audio::Mixer::SoundType soundType, Audio::SoundHandle &handle);
+
+ /**
+ * Form a filename from a passed sound resource name
+ */
+ Common::String formFilename(const Common::String &name);
public:
bool _digitized;
int _voices;
@@ -116,8 +121,14 @@ public:
void freeDigiSound();
- Audio::SoundHandle getFreeSoundHandle();
+ /**
+ * Return a sound handle to use
+ */
+ Audio::SoundHandle &getFreeSoundHandle();
+ /**
+ * Set the volume
+ */
void setVolume(int volume);
/**
diff --git a/engines/sherlock/surface.cpp b/engines/sherlock/surface.cpp
index d7d5cd95e8..b7fc76325c 100644
--- a/engines/sherlock/surface.cpp
+++ b/engines/sherlock/surface.cpp
@@ -155,8 +155,8 @@ void Surface::transBlitFromUnscaled(const Graphics::Surface &src, const Common::
return;
if (flipped)
- drawRect = Common::Rect(src.w - drawRect.right, src.h - drawRect.bottom,
- src.w - drawRect.left, src.h - drawRect.top);
+ drawRect = Common::Rect(src.w - drawRect.right, drawRect.top,
+ src.w - drawRect.left, drawRect.bottom);
Common::Point destPt(destRect.left, destRect.top);
addDirtyRect(Common::Rect(destPt.x, destPt.y, destPt.x + drawRect.width(),
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp
index 950905084b..795c4eb9c7 100644
--- a/engines/sherlock/talk.cpp
+++ b/engines/sherlock/talk.cpp
@@ -597,7 +597,7 @@ void Talk::stripVoiceCommands() {
// rest of the name following it
statement._reply = Common::String(statement._reply.c_str(),
statement._reply.c_str() + idx) + " " +
- Common::String(statement._reply.c_str() + 9);
+ Common::String(statement._reply.c_str() + idx + 9);
}
}
@@ -751,6 +751,22 @@ void Talk::doScript(const Common::String &script) {
while (*str++ != '}')
;
} else if (isOpcode(c)) {
+ // the original interpreter checked for c being >= 0x80
+ // and if that is the case, it tried to process it as opcode, BUT ALSO ALWAYS skipped over it
+ // This was done inside the Spanish + German interpreters of Serrated Scalpel, not the original
+ // English interpreter (reverse engineered from the binaries).
+ //
+ // This resulted in special characters not getting shown in case they occurred at the start
+ // of sentences like for example the inverted exclamation mark and the inverted question mark.
+ // For further study see fonts.cpp
+ //
+ // We create an inverted exclamation mark for the Spanish version and we show it.
+ //
+ // Us not skipping over those characters may result in an assert() happening inside fonts.cpp
+ // in case more invalid characters exist.
+ // More information see bug #6931
+ //
+
// Handle control code
switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) {
case RET_EXIT:
@@ -830,7 +846,7 @@ int Talk::waitForMore(int delay) {
playingSpeech = sound.isSpeechPlaying();
do {
- if (IS_SERRATED_SCALPEL && sound._speechOn && !sound.isSpeechPlaying())
+ if (IS_SERRATED_SCALPEL && playingSpeech && !sound.isSpeechPlaying())
people._portrait._frameNumber = -1;
scene.doBgAnim();
@@ -874,7 +890,7 @@ int Talk::waitForMore(int delay) {
} while (!_vm->shouldQuit() && key2 == 254 && (delay || (playingSpeech && sound.isSpeechPlaying()))
&& !events._released && !events._rightReleased);
- // If voices was set 2 to indicate a voice file was place, then reset it back to 1
+ // If voices was set 2 to indicate a Scalpel voice file was playing, then reset it back to 1
if (sound._voices == 2)
sound._voices = 1;
@@ -1023,6 +1039,7 @@ OpcodeReturn Talk::cmdEndTextWindow(const byte *&str) {
OpcodeReturn Talk::cmdHolmesOff(const byte *&str) {
People &people = *_vm->_people;
people[HOLMES]._type = REMOVE;
+ people._holmesOn = false;
return RET_SUCCESS;
}
@@ -1030,6 +1047,7 @@ OpcodeReturn Talk::cmdHolmesOff(const byte *&str) {
OpcodeReturn Talk::cmdHolmesOn(const byte *&str) {
People &people = *_vm->_people;
people[HOLMES]._type = CHARACTER;
+ people._holmesOn = true;
return RET_SUCCESS;
}
diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h
index f354c28c1b..2c0da24d69 100644
--- a/engines/sherlock/talk.h
+++ b/engines/sherlock/talk.h
@@ -215,10 +215,10 @@ protected:
OpcodeReturn cmdWalkToCAnimation(const byte *&str);
protected:
/**
- * Checks, if a character is an opcode
+ * Checks if a character is an opcode
*/
bool isOpcode(byte checkCharacter);
-
+
/**
* Form a table of the display indexes for statements
*/
diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp
index bfb35565bc..3131df7649 100644
--- a/engines/sherlock/tattoo/tattoo.cpp
+++ b/engines/sherlock/tattoo/tattoo.cpp
@@ -65,10 +65,15 @@ void TattooEngine::initialize() {
_res->addToCache("walk.lib");
// Set up list of people
+ TattooFixedText &fixedText = *(TattooFixedText *)_fixedText;
+ const char *peopleNamePtr = nullptr;
+
for (int idx = 0; idx < TATTOO_MAX_PEOPLE; ++idx) {
+ peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId);
+
_people->_characters.push_back(PersonData(
- getLanguage() == Common::FR_FRA ? FRENCH_NAMES[idx] : ENGLISH_NAMES[idx],
- PORTRAITS[idx], nullptr, nullptr));
+ peopleNamePtr,
+ PEOPLE_DATA[idx].portrait, nullptr, nullptr));
}
// Load the inventory
diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.cpp b/engines/sherlock/tattoo/tattoo_fixed_text.cpp
index c9345e44d1..571a697153 100644
--- a/engines/sherlock/tattoo/tattoo_fixed_text.cpp
+++ b/engines/sherlock/tattoo/tattoo_fixed_text.cpp
@@ -27,23 +27,22 @@ namespace Sherlock {
namespace Tattoo {
-static const char *const FIXED_TEXT_ENGLISH[] = {
+static const char *const fixedTextEN[] = {
"Money",
- "Card",
- "Tobacco",
- "Timetable",
- "Summons",
- "Foolscap",
- "Damp Paper",
- "Bull's Eye",
-
"Money",
"Card",
+ "Card",
+ "Tobacco",
"Tobacco",
"Timetable",
+ "Timetable",
+ "Summons",
"Summons",
"Foolscap",
"Foolscap",
+ "Damp Paper",
+ "Foolscap",
+ "Bull's Eye",
"Bull's Eye Lantern",
"Open",
@@ -71,19 +70,19 @@ static const char *const FIXED_TEXT_ENGLISH[] = {
"Holmes",
"Jock",
"Bull",
- "Round",
- "Turn Total",
- "Dart",
+ "Round: %d",
+ "Turn Total: %d",
+ "Dart # %d",
"to start",
"Hit a key",
"Press a key",
- "bullseye",
+ "bullseye", // ??
"GAME OVER",
"BUSTED",
"Wins",
- "Scored",
- "points",
- "Hit",
+ "Scored %d points",
+ "points", // ??
+ "Hit %s %d",
"Double",
"Triple",
@@ -106,65 +105,167 @@ static const char *const FIXED_TEXT_ENGLISH[] = {
"Yes",
"No",
"Enter Password",
- "Going East"
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Mrs. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Police Constable Burns",
+ "Augustus Trimble",
+ "Police Constable Daley",
+ "Matron",
+ "Sister Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Police Constable Roach",
+ "James Dewar",
+ "Sergeant Jeremy Duncan",
+ "Inspector Gregson",
+ "Inspector Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "Mr. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Old Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Bartender",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professor Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "The Lascar",
+ "Parrot",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "A Patient",
+ "A Patient",
+ "Patron",
+ "Queen Victoria",
+ "Patient in white",
+ "Lush",
+ "Drunk",
+ "Prostitute",
+ "Mudlark",
+ "Grinder",
+ "Bouncer",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Real Estate Agent",
+ "Candy Clerk",
+ "Beadle",
+ "Prussian",
+ "Mrs. Rowbottom",
+ "Miss Lloyd-Jones",
+ "Tavern patron",
+ "User",
+ "Toby",
+ "Stationer",
+ "Law Clerk",
+ "Ministry Clerk",
+ "Bather",
+ "Maid",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Boy",
+ "Patron",
+ "Constable Brit",
+ "Wagon Driver"
};
-static const char *const FIXED_TEXT_GERMAN[] = {
+// sharp-s : 0xE1 / octal 341
+// small a-umlaut: 0x84 / octal 204
+// small o-umlaut: 0x94 / octal 224
+// small u-umlaut: 0x81 / octal 201
+// large O-umlaut: 0x99 / octal 231
+static const char *const fixedTextDE[] = {
"Geld",
- "S. Holmes",
- "Tabak",
- "Plan",
- "Aufforderg.",
- "Blatt pap.",
- "Dunstig pap",
- "Handlampe",
-
"Geld",
"S. Holmes",
+ "S. Holmes",
+ "Tabak",
"Tabak",
"Plan",
+ "Plan",
+ "Aufforderg.",
"Aufforderg.",
+ "Blatt pap.",
"Pergament",
"Dunstig pap",
+ "Dunstig pap",
+ "Handlampe",
"Handlampe",
- "ffne",
+ "\231ffne",
"Schau",
"Rede",
"Benutze",
- "Journal",
- "Inventory",
- "Options",
- "Losen",
+ "Tagebuch",
+ "Tasche",
+ "Optionen",
+ "L\224osen",
"mit",
"Keine Wirkung...",
- "Diese Person weic im Augenblick nichts zu berichten.",
+ "Diese Person wei\341 im Augenblick nichts zu berichten.",
+ "Picked up", // <-- ??
"Seite %d",
- "Schliecen",
- "Lessen",
+ "Schlie\341en",
+ "Lessen", // <--
"In Datei sichern",
"Suche abbrechen",
- "Rbckwarts suchen ",
+ "R\201ckw\204rts suchen ",
"Vorwarts suchen ",
"Text nicht gefunden",
"Holmes",
"Jock",
"Bull",
- "Runde",
- "Gesamt",
- "Pfeil",
+ "Runde: %d",
+ "Gesamt: %d",
+ "Pfeil # %d",
"zum Starten",
- "Taste dracken",
- "Taste dracken",
- "Bullseye",
- "SPIEL BEENDET",
- "VERLOREN",
- "Gewinnt",
- "Erzielte",
- "Punkte",
- "Treffer",
+ "Taste dr\201cken",
+ "Taste dr\201cken",
+ "Bullseye", // ??
+ "SPIEL BEENDET!",
+ "VERLOREN!",
+ "Gewinnt!", // "Holmes Gewinnt!", "%s Gewinnt!"
+ "Erzielte %d Punkte",
+ "Punkte", // ??
+ "Treffer %s %d",
"Doppel",
"Dreifach",
@@ -177,7 +278,7 @@ static const char *const FIXED_TEXT_GERMAN[] = {
"Soundeffekte",
"Voices",
"Textfenster",
- "Transparente Menbs",
+ "Transparente Men\201s",
"Schriftart andern",
"Aus",
"An",
@@ -186,19 +287,315 @@ static const char *const FIXED_TEXT_GERMAN[] = {
"Sind Sie sicher ?",
"Ja",
"Nein",
- "Pacwort eingeben",
- "Going East"
+ "Pa\341wort eingeben",
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes", // note: People names were not translated in the German interpreter
+ "Dr. Watson",
+ "Mrs. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Police Constable Burns",
+ "Augustus Trimble",
+ "Police Constable Daley",
+ "Matron",
+ "Sister Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Police Constable Roach",
+ "James Dewar",
+ "Sergeant Jeremy Duncan",
+ "Inspector Gregson",
+ "Inspector Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "Mr. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Old Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Bartender",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professor Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "The Lascar",
+ "Parrot",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "A Patient",
+ "A Patient",
+ "Patron",
+ "Queen Victoria",
+ "Patient in white",
+ "Lush",
+ "Drunk",
+ "Prostitute",
+ "Mudlark",
+ "Grinder",
+ "Bouncer",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Real Estate Agent",
+ "Candy Clerk",
+ "Beadle",
+ "Prussian",
+ "Mrs. Rowbottom",
+ "Miss Lloyd-Jones",
+ "Tavern patron",
+ "User",
+ "Toby",
+ "Stationer",
+ "Law Clerk",
+ "Ministry Clerk",
+ "Bather",
+ "Maid",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Boy",
+ "Patron",
+ "Constable Brit",
+ "Wagon Driver"
+};
+
+// small a w/ accent grave: 0x85 / octal 205
+// small e w/ accent acute: 0x82 / octal 202
+// small e w/ accent grave: 0x8A / octal 212
+// small e w/ circonflexe: 0x88 / octal 210
+// small cedilla: 0x87 / octal 207
+static const char *const fixedTextFR[] = {
+ "Argent",
+ "Argent",
+ "S. Holmes",
+ "S. Holmes",
+ "Tabac",
+ "Tabac",
+ "Horaire",
+ "Horaire",
+ "Convocation",
+ "Convocation",
+ "Feuille",
+ "Feuille",
+ "F. humide",
+ "Feuille",
+ "Lanterne",
+ "Lanterne",
+
+ "Ouvrir",
+ "Regarder",
+ "Parler",
+ "Utiliser",
+ "Journal", // <--
+ "Inventaire",
+ "Options",
+ "R\202soudre",
+ "avec",
+ "Sans effet...",
+ "Cette personne n'a rien \205 ajouter pour le moment.",
+ "Picked up", // <-- ??
+
+ "Page %d",
+ "Fermer",
+ "Lessen", // <--
+ "Sauvegarder",
+ "Annuler ",
+ "Chercher avant",
+ "Chercher apr\212s",
+ "Texte introuvable !",
+
+ "Holmes",
+ "Jock",
+ "Bull",
+ "Tour: %d",
+ "Total: %d",
+ "Fl\202chette # %d",
+ "pour commencer",
+ "Appuyez sur C",
+ "Appuyez sur C",
+ "Bullseye", // ??
+ "FIN DE LA PARTIE!", // original: "Fin de la partie!"
+ "FIASCO!",
+ "Gagnant!", // "Holmes Gagnant!", "%s Gagnant!"
+ "Total des points: %d",
+ "Punkte", // ??
+ "Treffer %s %d",
+ "double",
+ "triple",
+
+ "Mouillez",
+ "Puis",
+ "Chauffez",
+ "Charger",
+ "Sauvegarder",
+ "Musique",
+ "Sons",
+ "Voix",
+ "Fen\210tres de texte", // 0x88
+ "Menu Transparent",
+ "Changer la fonte",
+ "Aus", // ???
+ "An", // ???
+ "Quitter",
+ "Voulez-vous quitter?",
+ "Sind Sie sicher ?", // ???
+ "Oui",
+ "Non",
+ "Entrez le mot de passe",
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Mme. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Sergent Burns",
+ "Augustus Trimble",
+ "Sergent Daley",
+ "Infirmi\212re chef",
+ "Mme. Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Sergent Roach",
+ "James Dewar",
+ "Sergent Jeremy Duncan",
+ "Inspecteur Gregson",
+ "Inspecteur Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "M. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Serveur",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professeur Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "Le Lascar",
+ "Oiseau",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "Patient",
+ "Patient",
+ "Client",
+ "Queen Victoria",
+ "Patient en blanc",
+ "Ivrogne",
+ "Ivrogne",
+ "Belle femme",
+ "Mudlark",
+ "Broyeur",
+ "Videur",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Immobilier",
+ "Gar\207on",
+ "Beadle",
+ "Prussian",
+ "Mme. Rowbottom",
+ "Mme Lloyd-Jones",
+ "Tavern Client",
+ "User",
+ "Toby",
+ "Papeterie",
+ "Law Clerc",
+ "Ministry Employ\202",
+ "Clint du thermes",
+ "Bonne",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Gar\207on",
+ "Client",
+ "Sergent Brit",
+ "Wagon Driver"
+};
+
+// TODO: There also was a Spanish version of Sherlock Holmes 2
+static const FixedTextLanguageEntry fixedTextLanguages[] = {
+ { Common::DE_DEU, fixedTextDE },
+ // { Common::ES_ESP, fixedTextES },
+ { Common::EN_ANY, fixedTextEN },
+ { Common::FR_FRA, fixedTextFR },
+ { Common::UNK_LANG, fixedTextEN }
};
TattooFixedText::TattooFixedText(SherlockEngine *vm) : FixedText(vm) {
- if (vm->getLanguage() == Common::DE_DEU)
- _fixedText = FIXED_TEXT_GERMAN;
- else
- _fixedText = FIXED_TEXT_ENGLISH;
+ // Figure out which fixed texts to use
+ Common::Language curLanguage = _vm->getLanguage();
+
+ const FixedTextLanguageEntry *curLanguageEntry = fixedTextLanguages;
+
+ while (curLanguageEntry->language != Common::UNK_LANG) {
+ if (curLanguageEntry->language == curLanguage)
+ break; // found current language
+ curLanguageEntry++;
+ }
+ _curLanguageEntry = curLanguageEntry;
}
const char *TattooFixedText::getText(int fixedTextId) {
- return _fixedText[fixedTextId];
+ return _curLanguageEntry->fixedTextArray[fixedTextId];
}
const Common::String TattooFixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) {
diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.h b/engines/sherlock/tattoo/tattoo_fixed_text.h
index 3f43678ca2..48d237db3c 100644
--- a/engines/sherlock/tattoo/tattoo_fixed_text.h
+++ b/engines/sherlock/tattoo/tattoo_fixed_text.h
@@ -31,20 +31,20 @@ namespace Tattoo {
enum FixedTextId {
kFixedText_Inv1,
- kFixedText_Inv2,
- kFixedText_Inv3,
- kFixedText_Inv4,
- kFixedText_Inv5,
- kFixedText_Inv6,
- kFixedText_Inv7,
- kFixedText_Inv8,
kFixedText_InvDesc1,
+ kFixedText_Inv2,
kFixedText_InvDesc2,
+ kFixedText_Inv3,
kFixedText_InvDesc3,
+ kFixedText_Inv4,
kFixedText_InvDesc4,
+ kFixedText_Inv5,
kFixedText_InvDesc5,
+ kFixedText_Inv6,
kFixedText_InvDesc6,
+ kFixedText_Inv7,
kFixedText_InvDesc7,
+ kFixedText_Inv8,
kFixedText_InvDesc8,
kFixedText_Open,
kFixedText_Look,
@@ -106,12 +106,114 @@ enum FixedTextId {
kFixedText_Yes,
kFixedText_No,
kFixedText_EnterPassword,
- kFixedText_CorrectPassword
+ kFixedText_CorrectPassword,
+ // SH2: People names
+ kFixedText_People_SherlockHolmes,
+ kFixedText_People_DrWatson,
+ kFixedText_People_MrsHudson,
+ kFixedText_People_StanleyForbes,
+ kFixedText_People_MycroftHolmes,
+ kFixedText_People_Wiggins,
+ kFixedText_People_PoliceConstableBurns,
+ kFixedText_People_AugustusTrimble,
+ kFixedText_People_PoliceConstableDaley,
+ kFixedText_People_Matron,
+ kFixedText_People_SisterGrace,
+ kFixedText_People_PrestonMcCabe,
+ kFixedText_People_BobColleran,
+ kFixedText_People_JonasRigby,
+ kFixedText_People_PoliceConstableRoach,
+ kFixedText_People_JamesDewar,
+ kFixedText_People_SergeantJeremyDuncan,
+ kFixedText_People_InspectorGregson,
+ kFixedText_People_InspectorLestrade,
+ kFixedText_People_JesseNeedhem,
+ kFixedText_People_ArthurFleming,
+ kFixedText_People_MrThomasPratt,
+ kFixedText_People_MathildaTillieMason,
+ kFixedText_People_AdrianRussell,
+ kFixedText_People_EldridgeWhitney,
+ kFixedText_People_Hepplethwaite,
+ kFixedText_People_HoraceSilverbridge,
+ kFixedText_People_OldSherman,
+ kFixedText_People_MaxwellVerner,
+ kFixedText_People_MillicentRedding,
+ kFixedText_People_VirgilSilverbridge,
+ kFixedText_People_GeorgeOKeeffe,
+ kFixedText_People_LordDenysLawton,
+ kFixedText_People_Jenkins,
+ kFixedText_People_JockMahoney,
+ kFixedText_People_Bartender,
+ kFixedText_People_LadyCordeliaLockridge,
+ kFixedText_People_Pettigrew,
+ kFixedText_People_SirAveryFanshawe,
+ kFixedText_People_Hodgkins,
+ kFixedText_People_WilburBirdyHeywood,
+ kFixedText_People_JacobFarthington,
+ kFixedText_People_PhilipBledsoe,
+ kFixedText_People_SidneyFowler,
+ kFixedText_People_ProfessorTheodoreTotman,
+ kFixedText_People_RoseHinchem,
+ kFixedText_People_Tallboy,
+ kFixedText_People_EthlebertStitchRumsey,
+ kFixedText_People_CharlesFreedman,
+ kFixedText_People_NigelHemmings,
+ kFixedText_People_FairfaxCarter,
+ kFixedText_People_WilhelmII,
+ kFixedText_People_Wachthund,
+ kFixedText_People_JonathanWilson,
+ kFixedText_People_DavidLloydJones,
+ kFixedText_People_EdwardHargrove,
+ kFixedText_People_Misteray,
+ kFixedText_People_TheLascar,
+ kFixedText_People_Parrot,
+ kFixedText_People_VincentScarrett,
+ kFixedText_People_Alexandra,
+ kFixedText_People_QueenVictoria,
+ kFixedText_People_JohnBrown,
+ kFixedText_People_APatient1,
+ kFixedText_People_APatient2,
+ kFixedText_People_Patron,
+ kFixedText_People_QueenVictoria2,
+ kFixedText_People_PatientInWhite,
+ kFixedText_People_Lush,
+ kFixedText_People_Drunk,
+ kFixedText_People_Prostitute,
+ kFixedText_People_Mudlark,
+ kFixedText_People_Grinder,
+ kFixedText_People_Bouncer,
+ kFixedText_People_AgnesRatchet,
+ kFixedText_People_AloysiusRatchet,
+ kFixedText_People_RealEstateAgent,
+ kFixedText_People_CandyClerk,
+ kFixedText_People_Beadle,
+ kFixedText_People_Prussian,
+ kFixedText_People_MrsRowbottom,
+ kFixedText_People_MissLloydJones,
+ kFixedText_People_TavernPatron,
+ kFixedText_People_User,
+ kFixedText_People_Toby,
+ kFixedText_People_Stationer,
+ kFixedText_People_LawClerk,
+ kFixedText_People_MinistryClerk,
+ kFixedText_People_Bather,
+ kFixedText_People_Maid,
+ kFixedText_People_LadyFanshawe,
+ kFixedText_People_SidneyRatchet,
+ kFixedText_People_Boy,
+ kFixedText_People_Patron2,
+ kFixedText_People_ConstableBrit,
+ kFixedText_People_WagonDriver
+};
+
+struct FixedTextLanguageEntry {
+ Common::Language language;
+ const char *const *fixedTextArray;
};
class TattooFixedText: public FixedText {
private:
- const char *const *_fixedText;
+ const FixedTextLanguageEntry *_curLanguageEntry;
public:
TattooFixedText(SherlockEngine *vm);
virtual ~TattooFixedText() {}
diff --git a/engines/sherlock/tattoo/tattoo_map.cpp b/engines/sherlock/tattoo/tattoo_map.cpp
index 8438734996..4c7e8c8fef 100644
--- a/engines/sherlock/tattoo/tattoo_map.cpp
+++ b/engines/sherlock/tattoo/tattoo_map.cpp
@@ -365,8 +365,7 @@ void TattooMap::showCloseUp(int closeUpNum) {
Events &events = *_vm->_events;
Screen &screen = *_vm->_screen;
- // Reset scroll position
- screen._currentScroll = Common::Point(0, 0);
+ // Hide the cursor
events.hideCursor();
// Get the closeup images
@@ -404,7 +403,8 @@ void TattooMap::showCloseUp(int closeUpNum) {
for (int step = 0; step < CLOSEUP_STEPS; ++step) {
Common::Point picSize(pic[0].sDrawXSize(scaleVal), pic[0].sDrawYSize(scaleVal));
- Common::Point pt(closeUp.x / 100 - picSize.x / 2, closeUp.y / 100 - picSize.y / 2);
+ Common::Point pt(screen._currentScroll.x + closeUp.x / 100 - picSize.x / 2,
+ screen._currentScroll.y + closeUp.y / 100 - picSize.y / 2);
restoreArea(oldBounds);
screen._backBuffer1.transBlitFrom(pic[0], pt, false, 0, scaleVal);
@@ -420,9 +420,10 @@ void TattooMap::showCloseUp(int closeUpNum) {
}
// Handle final drawing of closeup
- Common::Rect r(SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2, SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2,
- SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2 + pic[0]._width,
- SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2 + pic[0]._height);
+ Common::Rect r(screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2,
+ screen._currentScroll.y + SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2,
+ screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2 + pic[0]._width,
+ screen._currentScroll.y + SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2 + pic[0]._height);
restoreArea(oldBounds);
screen._backBuffer1.transBlitFrom(pic[0], Common::Point(r.left, r.top));
diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp
index 46d91cead8..0af8deff9f 100644
--- a/engines/sherlock/tattoo/tattoo_people.cpp
+++ b/engines/sherlock/tattoo/tattoo_people.cpp
@@ -121,12 +121,13 @@ TattooPerson::TattooPerson() : Person() {
_lookHolmes = false;
}
-void TattooPerson::freeAltGraphics() {
- if (_altImages != nullptr) {
- delete _altImages;
- _altImages = nullptr;
- }
+TattooPerson::~TattooPerson() {
+ delete _altImages;
+}
+void TattooPerson::freeAltGraphics() {
+ delete _altImages;
+ _altImages = nullptr;
_altSeq = 0;
}
diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h
index 722c4a9aaa..e0d53c67dd 100644
--- a/engines/sherlock/tattoo/tattoo_people.h
+++ b/engines/sherlock/tattoo/tattoo_people.h
@@ -128,7 +128,7 @@ public:
bool _lookHolmes;
public:
TattooPerson();
- virtual ~TattooPerson() {}
+ virtual ~TattooPerson();
/**
* Clear the NPC related data
diff --git a/engines/sherlock/tattoo/tattoo_resources.cpp b/engines/sherlock/tattoo/tattoo_resources.cpp
index 3be41e2650..4b73356d58 100644
--- a/engines/sherlock/tattoo/tattoo_resources.cpp
+++ b/engines/sherlock/tattoo/tattoo_resources.cpp
@@ -21,309 +21,111 @@
*/
#include "sherlock/tattoo/tattoo_resources.h"
+#include "sherlock/tattoo/tattoo_fixed_text.h"
namespace Sherlock {
namespace Tattoo {
-const char PORTRAITS[TATTOO_MAX_PEOPLE][5] = {
- { "HOLM" }, // Sherlock Holmes
- { "WATS" }, // Dr. Watson
- { "HUDS" }, // Mrs. Hudson
- { "FORB" }, // Stanley Forbes
- { "MYCR" }, // Mycroft Holmes
- { "WIGG" }, // Wiggins
- { "BURN" }, // Police Constable Burns
- { "TRIM" }, // Augustus Trimble
- { "DALE" }, // Police Constable Daley
- { "MATR" }, // Matron
- { "GRAC" }, // Sister Grace
- { "MCCA" }, // Preston McCabe
- { "COLL" }, // Bob Colleran
- { "JONA" }, // Jonas Rigby
- { "ROAC" }, // Police Constable Roach
- { "DEWA" }, // James Dewar
- { "JERE" }, // Sergeant Jeremy Duncan
- { "GREG" }, // Inspector Gregson
- { "LEST" }, // Inspector Lestrade
- { "NEED" }, // Jesse Needhem
- { "FLEM" }, // Arthur Fleming
- { "PRAT" }, // Mr. Thomas Pratt
- { "TILL" }, // Mathilda (Tillie) Mason
- { "RUSS" }, // Adrian Russell
- { "WHIT" }, // Eldridge Whitney
- { "HEPP" }, // Hepplethwaite
- { "HORA" }, // Horace Silverbridge
- { "SHER" }, // Old Sherman
- { "VERN" }, // Maxwell Verner
- { "REDD" }, // Millicent Redding
- { "VIRG" }, // Virgil Silverbridge
- { "GEOR" }, // George O'Keeffe
- { "LAWT" }, // Lord Denys Lawton
- { "JENK" }, // Jenkins
- { "JOCK" }, // Jock Mahoney
- { "BART" }, // Bartender
- { "LADY" }, // Lady Cordelia Lockridge
- { "PETT" }, // Pettigrew
- { "FANS" }, // Sir Avery Fanshawe
- { "HODG" }, // Hodgkins
- { "WILB" }, // Wilbur "Birdy" Heywood
- { "JACO" }, // Jacob Farthington
- { "BLED" }, // Philip Bledsoe
- { "FOWL" }, // Sidney Fowler
- { "PROF" }, // Professor Theodore Totman
- { "ROSE" }, // Rose Hinchem
- { "TALL" }, // Tallboy
- { "STIT" }, // Ethlebert "Stitch" Rumsey
- { "FREE" }, // Charles Freedman
- { "HEMM" }, // Nigel Hemmings
- { "CART" }, // Fairfax Carter
- { "WILH" }, // Wilhelm II
- { "WACH" }, // Wachthund
- { "WILS" }, // Jonathan Wilson
- { "DAVE" }, // David Lloyd-Jones
- { "HARG" }, // Edward Hargrove
- { "MORI" }, // Professor James Moriarty
- { "LASC" }, // The Lascar
- { "PARR" }, // Parrot
- { "SCAR" }, // Vincent Scarrett
- { "ALEX" }, // Alexandra
- { "QUEE" }, // Queen Victoria
- { "JOHN" }, // John Brown
- { "PAT1" }, // Patient #1
- { "PAT2" }, // Patient #2
- { "PATR" }, // Patron
- { "QUEN" }, // Queen Victoria
- { "WITE" }, // Patient in White
- { "LUSH" }, // Lush
- { "DRNK" }, // Drunk
- { "PROS" }, // Prostitute
- { "MUDL" }, // Mudlark
- { "GRIN" }, // Grinder
- { "BOUN" }, // Bouncer
- { "RATC" }, // Agnes Ratchet
- { "ALOY" }, // Aloysius Ratchet
- { "REAL" }, // Real Estate Agent
- { "CAND" }, // Candy Clerk
- { "BEAD" }, // Beadle
- { "PRUS" }, // Prussian
- { "ROWB" }, // Mrs. Rowbottom
- { "MSLJ" }, // Miss Lloyd-Jones
- { "TPAT" }, // Tavern patron
- { "USER" }, // User
- { "TOBY" }, // Toby
- { "STAT" }, // Stationer
- { "CLRK" }, // Law Clerk
- { "CLER" }, // Ministry Clerk
- { "BATH" }, // Bather
- { "MAID" }, // Maid
- { "LADF" }, // Lady Fanshawe
- { "SIDN" }, // Sidney Ratchet
- { "BOYO" }, // Boy
- { "PTR2" }, // Second Patron
- { "BRIT" }, // Constable Brit
- { "DROV" } // Wagon Driver
+const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE] = {
+ { "HOLM", kFixedText_People_SherlockHolmes },
+ { "WATS", kFixedText_People_DrWatson },
+ { "HUDS", kFixedText_People_MrsHudson },
+ { "FORB", kFixedText_People_StanleyForbes },
+ { "MYCR", kFixedText_People_MycroftHolmes },
+ { "WIGG", kFixedText_People_Wiggins },
+ { "BURN", kFixedText_People_PoliceConstableBurns },
+ { "TRIM", kFixedText_People_AugustusTrimble },
+ { "DALE", kFixedText_People_PoliceConstableDaley },
+ { "MATR", kFixedText_People_Matron },
+ { "GRAC", kFixedText_People_SisterGrace },
+ { "MCCA", kFixedText_People_PrestonMcCabe },
+ { "COLL", kFixedText_People_BobColleran },
+ { "JONA", kFixedText_People_JonasRigby },
+ { "ROAC", kFixedText_People_PoliceConstableRoach },
+ { "DEWA", kFixedText_People_JamesDewar },
+ { "JERE", kFixedText_People_SergeantJeremyDuncan },
+ { "GREG", kFixedText_People_InspectorGregson },
+ { "LEST", kFixedText_People_InspectorLestrade },
+ { "NEED", kFixedText_People_JesseNeedhem },
+ { "FLEM", kFixedText_People_ArthurFleming },
+ { "PRAT", kFixedText_People_MrThomasPratt },
+ { "TILL", kFixedText_People_MathildaTillieMason },
+ { "RUSS", kFixedText_People_AdrianRussell },
+ { "WHIT", kFixedText_People_EldridgeWhitney },
+ { "HEPP", kFixedText_People_Hepplethwaite },
+ { "HORA", kFixedText_People_HoraceSilverbridge },
+ { "SHER", kFixedText_People_OldSherman },
+ { "VERN", kFixedText_People_MaxwellVerner },
+ { "REDD", kFixedText_People_MillicentRedding },
+ { "VIRG", kFixedText_People_VirgilSilverbridge },
+ { "GEOR", kFixedText_People_GeorgeOKeeffe },
+ { "LAWT", kFixedText_People_LordDenysLawton },
+ { "JENK", kFixedText_People_Jenkins },
+ { "JOCK", kFixedText_People_JockMahoney },
+ { "BART", kFixedText_People_Bartender },
+ { "LADY", kFixedText_People_LadyCordeliaLockridge },
+ { "PETT", kFixedText_People_Pettigrew },
+ { "FANS", kFixedText_People_SirAveryFanshawe },
+ { "HODG", kFixedText_People_Hodgkins },
+ { "WILB", kFixedText_People_WilburBirdyHeywood },
+ { "JACO", kFixedText_People_JacobFarthington },
+ { "BLED", kFixedText_People_PhilipBledsoe },
+ { "FOWL", kFixedText_People_SidneyFowler },
+ { "PROF", kFixedText_People_ProfessorTheodoreTotman },
+ { "ROSE", kFixedText_People_RoseHinchem },
+ { "TALL", kFixedText_People_Tallboy },
+ { "STIT", kFixedText_People_EthlebertStitchRumsey },
+ { "FREE", kFixedText_People_CharlesFreedman },
+ { "HEMM", kFixedText_People_NigelHemmings },
+ { "CART", kFixedText_People_FairfaxCarter },
+ { "WILH", kFixedText_People_WilhelmII },
+ { "WACH", kFixedText_People_Wachthund },
+ { "WILS", kFixedText_People_JonathanWilson },
+ { "DAVE", kFixedText_People_DavidLloydJones },
+ { "HARG", kFixedText_People_EdwardHargrove },
+ { "MORI", kFixedText_People_Misteray },
+ { "LASC", kFixedText_People_TheLascar },
+ { "PARR", kFixedText_People_Parrot },
+ { "SCAR", kFixedText_People_VincentScarrett },
+ { "ALEX", kFixedText_People_Alexandra },
+ { "QUEE", kFixedText_People_QueenVictoria },
+ { "JOHN", kFixedText_People_JohnBrown },
+ { "PAT1", kFixedText_People_APatient1 },
+ { "PAT2", kFixedText_People_APatient2 },
+ { "PATR", kFixedText_People_Patron },
+ { "QUEN", kFixedText_People_QueenVictoria },
+ { "WITE", kFixedText_People_PatientInWhite },
+ { "LUSH", kFixedText_People_Lush },
+ { "DRNK", kFixedText_People_Drunk },
+ { "PROS", kFixedText_People_Prostitute },
+ { "MUDL", kFixedText_People_Mudlark },
+ { "GRIN", kFixedText_People_Grinder },
+ { "BOUN", kFixedText_People_Bouncer },
+ { "RATC", kFixedText_People_AgnesRatchet },
+ { "ALOY", kFixedText_People_AloysiusRatchet },
+ { "REAL", kFixedText_People_RealEstateAgent },
+ { "CAND", kFixedText_People_CandyClerk },
+ { "BEAD", kFixedText_People_Beadle },
+ { "PRUS", kFixedText_People_Prussian },
+ { "ROWB", kFixedText_People_MrsRowbottom },
+ { "MSLJ", kFixedText_People_MissLloydJones },
+ { "TPAT", kFixedText_People_TavernPatron },
+ { "USER", kFixedText_People_User },
+ { "TOBY", kFixedText_People_Toby },
+ { "STAT", kFixedText_People_Stationer },
+ { "CLRK", kFixedText_People_LawClerk },
+ { "CLER", kFixedText_People_MinistryClerk },
+ { "BATH", kFixedText_People_Bather },
+ { "MAID", kFixedText_People_Maid },
+ { "LADF", kFixedText_People_LadyFanshawe },
+ { "SIDN", kFixedText_People_SidneyRatchet },
+ { "BOYO", kFixedText_People_Boy },
+ { "PTR2", kFixedText_People_Patron2 },
+ { "BRIT", kFixedText_People_ConstableBrit },
+ { "DROV", kFixedText_People_WagonDriver }
};
-const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE] = {
- "Sherlock Holmes",
- "Dr. Watson",
- "Mme. Hudson",
- "Stanley Forbes",
- "Mycroft Holmes",
- "Wiggins",
- "Sergent Burns",
- "Augustus Trimble",
- "Sergent Daley",
- "Infirmi?re chef",
- "Mme. Grace",
- "Preston McCabe",
- "Bob Colleran",
- "Jonas Rigby",
- "Sergent Roach",
- "James Dewar",
- "Sergent Jeremy Duncan",
- "Inspecteur Gregson",
- "Inspecteur Lestrade",
- "Jesse Needhem",
- "Arthur Fleming",
- "M. Thomas Pratt",
- "Mathilda (Tillie) Mason",
- "Adrian Russell",
- "Eldridge Whitney",
- "Hepplethwaite",
- "Horace Silverbridge",
- "Sherman",
- "Maxwell Verner",
- "Millicent Redding",
- "Virgil Silverbridge",
- "George O'Keeffe",
- "Lord Denys Lawton",
- "Jenkins",
- "Jock Mahoney",
- "Serveur",
- "Lady Cordelia Lockridge",
- "Pettigrew",
- "Sir Avery Fanshawe",
- "Hodgkins",
- "Wilbur \"Birdy\" Heywood",
- "Jacob Farthington",
- "Philip Bledsoe",
- "Sidney Fowler",
- "Professeur Theodore Totman",
- "Rose Hinchem",
- "Tallboy",
- "Ethlebert \"Stitch\" Rumsey",
- "Charles Freedman",
- "Nigel Hemmings",
- "Fairfax Carter",
- "Wilhelm II",
- "Wachthund",
- "Jonathan Wilson",
- "David Lloyd-Jones",
- "Edward Hargrove",
- "Misteray",
- "Le Lascar",
- "Oiseau",
- "Vincent Scarrett",
- "Alexandra",
- "Queen Victoria",
- "John Brown",
- "Patient",
- "Patient",
- "Client",
- "Queen Victoria",
- "Patient en blanc",
- "Ivrogne",
- "Ivrogne",
- "Belle femme",
- "Mudlark",
- "Broyeur",
- "Videur",
- "Agnes Ratchet",
- "Aloysius Ratchet",
- "Immobilier",
- "Gar?on",
- "Beadle",
- "Prussian",
- "Mme. Rowbottom",
- "Mme Lloyd-Jones",
- "Tavern Client",
- "User",
- "Toby",
- "Papeterie",
- "Law Clerc",
- "Ministry Employ?",
- "Clint du thermes",
- "Bonne",
- "Lady Fanshawe",
- "Sidney Ratchet",
- "Gar?on",
- "Client",
- "Sergent Brit",
- "Wagon Driver"
-};
-
-const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE] = {
- "Sherlock Holmes",
- "Dr. Watson",
- "Mrs. Hudson",
- "Stanley Forbes",
- "Mycroft Holmes",
- "Wiggins",
- "Police Constable Burns",
- "Augustus Trimble",
- "Police Constable Daley",
- "Matron",
- "Sister Grace",
- "Preston McCabe",
- "Bob Colleran",
- "Jonas Rigby",
- "Police Constable Roach",
- "James Dewar",
- "Sergeant Jeremy Duncan",
- "Inspector Gregson",
- "Inspector Lestrade",
- "Jesse Needhem",
- "Arthur Fleming",
- "Mr. Thomas Pratt",
- "Mathilda (Tillie) Mason",
- "Adrian Russell",
- "Eldridge Whitney",
- "Hepplethwaite",
- "Horace Silverbridge",
- "Old Sherman",
- "Maxwell Verner",
- "Millicent Redding",
- "Virgil Silverbridge",
- "George O'Keeffe",
- "Lord Denys Lawton",
- "Jenkins",
- "Jock Mahoney",
- "Bartender",
- "Lady Cordelia Lockridge",
- "Pettigrew",
- "Sir Avery Fanshawe",
- "Hodgkins",
- "Wilbur \"Birdy\" Heywood",
- "Jacob Farthington",
- "Philip Bledsoe",
- "Sidney Fowler",
- "Professor Theodore Totman",
- "Rose Hinchem",
- "Tallboy",
- "Ethlebert \"Stitch\" Rumsey",
- "Charles Freedman",
- "Nigel Hemmings",
- "Fairfax Carter",
- "Wilhelm II",
- "Wachthund",
- "Jonathan Wilson",
- "David Lloyd-Jones",
- "Edward Hargrove",
- "Misteray",
- "The Lascar",
- "Parrot",
- "Vincent Scarrett",
- "Alexandra",
- "Queen Victoria",
- "John Brown",
- "A Patient",
- "A Patient",
- "Patron",
- "Queen Victoria",
- "Patient in white",
- "Lush",
- "Drunk",
- "Prostitute",
- "Mudlark",
- "Grinder",
- "Bouncer",
- "Agnes Ratchet",
- "Aloysius Ratchet",
- "Real Estate Agent",
- "Candy Clerk",
- "Beadle",
- "Prussian",
- "Mrs. Rowbottom",
- "Miss Lloyd-Jones",
- "Tavern patron",
- "User",
- "Toby",
- "Stationer",
- "Law Clerk",
- "Ministry Clerk",
- "Bather",
- "Maid",
- "Lady Fanshawe",
- "Sidney Ratchet",
- "Boy",
- "Patron",
- "Constable Brit",
- "Wagon Driver"
-};
-
-
} // End of namespace Tattoo
} // End of namespace Sherlock
diff --git a/engines/sherlock/tattoo/tattoo_resources.h b/engines/sherlock/tattoo/tattoo_resources.h
index b706d90f2d..85a78734b9 100644
--- a/engines/sherlock/tattoo/tattoo_resources.h
+++ b/engines/sherlock/tattoo/tattoo_resources.h
@@ -31,9 +31,12 @@ namespace Tattoo {
#define TATTOO_MAX_PEOPLE 96
-extern const char PORTRAITS[TATTOO_MAX_PEOPLE][5];
-extern const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE];
-extern const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE];
+struct PeopleData {
+ const char *portrait;
+ int fixedTextId;
+};
+
+extern const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE];
} // End of namespace Tattoo
diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp
index ca536f3e64..3b3e10d814 100644
--- a/engines/sherlock/tattoo/tattoo_scene.cpp
+++ b/engines/sherlock/tattoo/tattoo_scene.cpp
@@ -655,7 +655,9 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) {
if (ui._windowOpen)
ui.banishWindow();
- //_activeCAnim._filesize = cAnim._size;
+ if (_currentScene == 3 && cAnimNum == 21)
+ // Set framerate for correct playing of violin in Holmes' bedroom
+ events.setFrameRate(30);
// Open up the room resource file and get the data for the animation
Common::SeekableReadStream *stream = res.load(_roomFilename);
@@ -718,6 +720,8 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) {
// Flag the Canimation to be cleared
_activeCAnim._zPlacement = REMOVE;
_activeCAnim._removeBounds = _activeCAnim._oldBounds;
+ _vm->_ui->_bgFound = -1;
+ events.setFrameRate(GAME_FRAME_RATE);
// Free up the animation
_activeCAnim.close();
diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp
index a4ceca042b..dd5c821d22 100644
--- a/engines/sherlock/tattoo/tattoo_talk.cpp
+++ b/engines/sherlock/tattoo/tattoo_talk.cpp
@@ -192,6 +192,9 @@ void TattooTalk::talkTo(const Common::String filename) {
if (filename == "wilb29a")
events.incWaitCounter();
+ if (filename == "keys33d")
+ events.setFrameRate(30);
+
Talk::talkTo(filename);
if (filename == "wilb29a")
@@ -200,6 +203,8 @@ void TattooTalk::talkTo(const Common::String filename) {
events.decWaitCounter();
events.setCursor(ARROW);
}
+ if (filename == "keys33d")
+ events.setFrameRate(GAME_FRAME_RATE);
}
void TattooTalk::talkInterface(const byte *&str) {
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp
index 139497a8a4..623fb8dbf5 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.cpp
+++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp
@@ -215,9 +215,10 @@ void TattooUserInterface::doJournal() {
TattooJournal &journal = *(TattooJournal *)_vm->_journal;
TattooScene &scene = *(TattooScene *)_vm->_scene;
Screen &screen = *_vm->_screen;
- byte lookupTable[PALETTE_COUNT];
+ byte lookupTable[PALETTE_COUNT], lookupTable1[PALETTE_COUNT];
Common::copy(&_lookupTable[0], &_lookupTable[PALETTE_COUNT], &lookupTable[0]);
+ Common::copy(&_lookupTable1[0], &_lookupTable1[PALETTE_COUNT], &lookupTable1[0]);
_menuMode = JOURNAL_MODE;
journal.show();
@@ -229,6 +230,7 @@ void TattooUserInterface::doJournal() {
screen.clear();
screen.setPalette(screen._cMap);
Common::copy(&lookupTable[0], &lookupTable[PALETTE_COUNT], &_lookupTable[0]);
+ Common::copy(&lookupTable1[0], &lookupTable1[PALETTE_COUNT], &_lookupTable1[0]);
// Restore the scene
screen._backBuffer1.blitFrom(screen._backBuffer2);
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.h b/engines/sherlock/tattoo/tattoo_user_interface.h
index c92ff21dd1..d89da4a6da 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.h
+++ b/engines/sherlock/tattoo/tattoo_user_interface.h
@@ -185,6 +185,9 @@ public:
*/
void doBgAnimEraseBackground();
+ /**
+ * Draws overlays onto the scene. Basically, the smoke effects some scenes have
+ */
void drawMaskArea(bool mode);
/**
diff --git a/engines/tucker/staticres.cpp b/engines/tucker/staticres.cpp
index b884851d7e..b9f6a6efee 100644
--- a/engines/tucker/staticres.cpp
+++ b/engines/tucker/staticres.cpp
@@ -329,8 +329,13 @@ static const SoundSequenceData _soundDataSeq19_20[] = {
{ 53, 2, 14, 100, 1 }, { 78, 2, 0, 100, 2 }, { 80, 0, 0, 100, 4 },
};
+// I've been told that there are versions of the game that don't play the
+// "introdub" music (130) for the first scene of the intro. The English "Euro
+// power pack" release does however, and I see no harm in doing it for every
+// version here. The volume is just a guess, though.
+
const SoundSequenceDataList AnimationSequencePlayer::_soundSeqDataList[] = {
- { 0, 0, 14, 10, 58, _soundDataSeq3_4 },
+ { 130, 80, 14, 10, 58, _soundDataSeq3_4 },
{ 0, 0, 14, 5, 60, _soundDataSeq9_10 },
{ 0, 0, 14, 9, 48, _soundDataSeq21_20 },
{ 1, 80, 14, 4, 25, _soundDataSeq13_14 },
@@ -471,6 +476,7 @@ const char *const AnimationSequencePlayer::_audioFileNamesTable[] = {
"rdfx38.wav",
"rdfx8.wav",
"rdfx9.wav",
+ "introdub.raw",
};
} // namespace Tucker
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index a423915a5f..3bbf6a57f5 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -246,6 +246,15 @@ private:
};
inline int scaleMixerVolume(int volume, int max = 100) {
+ if (volume > max) {
+ // This happens for instance for Bud's line, "Is that the
+ // great mystery invention you had hidden away?" in the intro,
+ // which is played at volume 110 out of 100. This made it very
+ // hard to hear. I'm not sure if this was a bug in the original
+ // game, or if it had the ability to amplify sounds.
+ warning("scaleMixerVolume: Adjusting volume %d to %d", volume, max);
+ volume = max;
+ }
return volume * Audio::Mixer::kMaxChannelVolume / max;
}
diff --git a/gui/recorderdialog.cpp b/gui/recorderdialog.cpp
index 5617d2ba9a..2d74cebbb6 100644
--- a/gui/recorderdialog.cpp
+++ b/gui/recorderdialog.cpp
@@ -171,7 +171,7 @@ void RecorderDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
const EnginePlugin *plugin = 0;
GameDescriptor desc = EngineMan.findGame(gameId, &plugin);
g_system->getTimeAndDate(t);
- EditRecordDialog editDlg("Unknown Author", Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
+ EditRecordDialog editDlg(_("Unknown Author"), Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
if (editDlg.runModal() != kOKCmd) {
return;
}
diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat
index 4225994810..96f21eb277 100644
--- a/gui/themes/translations.dat
+++ b/gui/themes/translations.dat
Binary files differ
diff --git a/po/be_BY.po b/po/be_BY.po
index 66697d9899..5b22098c1c 100644
--- a/po/be_BY.po
+++ b/po/be_BY.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 17:22+0300\n"
"Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n"
"Language-Team: Ivan Lukyanov <greencis@mail.ru>\n"
@@ -1044,6 +1044,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "²ë áÐßàÐþÔë ÖÐÔÐÕæÕ ÒëÔÐÛöæì ÓíâÐ ×ÐåÐÒÐÝÝÕ?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "½ÕÒïÔÞÜÐï ßÐÜëÛÚÐ"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "²ëÓÛïÔ áßöáã"
@@ -1827,8 +1832,9 @@ msgstr "ÅãâÚö àíÖëÜ"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ëåÐÔ"
@@ -3333,6 +3339,25 @@ msgstr "»ïæÕæì ÝÐßàÐÒÐ"
msgid "Fly to lower right"
msgstr "»ïæÕæì ÝÐßàÐÒÐ-þÝö×"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "¿ÛëþÝÐï ßàÐÓÞàâÚÐ"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "³ãçÝ. Üã×ëÚö:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "ÅãâÚÐáæì âëâàÐþ:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 1a0a756253..096990848c 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2013-05-05 14:16+0100\n"
"Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n"
"Language-Team: Catalan <scummvm-devel@lists.sf.net>\n"
@@ -1047,6 +1047,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Realment voleu suprimir aquesta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Error desconegut"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vista de llistat"
@@ -1832,8 +1837,9 @@ msgstr "Mode ràpid"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Surt"
@@ -3338,6 +3344,25 @@ msgstr "Vola a la dreta"
msgid "Fly to lower right"
msgstr "Vola avall i a la dreta"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desplaçament suau"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volum de música:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocitat de subt.:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 28c50ed514..aa3fc856b8 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-07-26 18:51+0200\n"
"Last-Translator: Zbynìk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: \n"
@@ -1039,6 +1039,11 @@ msgstr "Poznámky:"
msgid "Do you really want to delete this record?"
msgstr "Opravdu chcete tento záznam smazat?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Neznámá chyba"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Seznam"
@@ -1820,8 +1825,9 @@ msgstr "Rychlý re¾im"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Ukonèit"
@@ -3332,6 +3338,25 @@ msgstr "Letìt doprava"
msgid "Fly to lower right"
msgstr "Letìt doprava dolù"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Plynulé posunování"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Hlasitost hudby"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Rychlost titulkù:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/da_DA.po b/po/da_DA.po
index 8556dd7734..0da2db01f3 100644
--- a/po/da_DA.po
+++ b/po/da_DA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-09 17:34+0100\n"
"Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n"
"Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n"
@@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette denne gemmer?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukendt fejl"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Liste visning"
@@ -1820,8 +1825,9 @@ msgstr "Hurtig tilstand"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Afslut"
@@ -3323,6 +3329,25 @@ msgstr "Flyv til højre"
msgid "Fly to lower right"
msgstr "Flyv nederst til højre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Jævn bevægelse"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musik lydstyrke:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Tekst hastighed:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/de_DE.po b/po/de_DE.po
index 56d363b597..24edf7b0bc 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
-"PO-Revision-Date: 2015-07-04 12:06+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-10-11 15:49+0200\n"
"Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n"
"Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari "
"<scummvm@rootfather.de>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.2\n"
+"X-Generator: Poedit 1.8.5\n"
#: gui/about.cpp:94
#, c-format
@@ -75,7 +75,6 @@ msgid "Choose"
msgstr "Auswählen"
#: gui/editrecorddialog.cpp:58
-#, fuzzy
msgid "Author:"
msgstr "Autor:"
@@ -84,13 +83,12 @@ msgid "Name:"
msgstr "Name:"
#: gui/editrecorddialog.cpp:60
-#, fuzzy
msgid "Notes:"
msgstr "Notizen:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
-msgstr ""
+msgstr "OK"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@@ -579,19 +577,17 @@ msgstr "%d neue Spiele gefunden, %d bereits hinzugefügte Spiele ignoriert..."
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
-msgstr ""
+msgstr "Anhalten"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
-msgstr ""
+msgstr "Aufnahme-Beschreibung ändern"
#: gui/onscreendialog.cpp:108
-#, fuzzy
msgid "Switch to Game"
msgstr "Wechsle"
#: gui/onscreendialog.cpp:110
-#, fuzzy
msgid "Fast replay"
msgstr "Schneller Modus"
@@ -879,7 +875,7 @@ msgstr "Musiklautstärke:"
#: gui/options.cpp:968
msgid "Mute All"
-msgstr "Alles stumm"
+msgstr "Alles aus"
#: gui/options.cpp:971
msgid "SFX volume:"
@@ -1000,29 +996,29 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
-msgstr ""
+msgstr "# nächste"
#: gui/predictivedialog.cpp:88
msgid "add"
-msgstr ""
+msgstr "hinzufügen"
#: gui/predictivedialog.cpp:92
-#, fuzzy
msgid "Delete char"
msgstr "Löschen"
#: gui/predictivedialog.cpp:96
msgid "<"
-msgstr ""
+msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
+#, fuzzy
msgid "* Pre"
-msgstr ""
+msgstr "* Vorschau"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr "Spiel aufzeichnen oder wiedergeben"
+msgstr "Spiel aufzeichnen/wiedergeben"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -1055,6 +1051,11 @@ msgstr "Notizen:"
msgid "Do you really want to delete this record?"
msgstr "Möchten Sie diese Aufnahme wirklich löschen?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Unbekannter Fehler"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listenansicht"
@@ -1520,7 +1521,7 @@ msgstr "DOSBox-OPL-Emulator"
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
-msgstr ""
+msgstr "ALSA Direct FM"
#: audio/mididrv.cpp:209
#, c-format
@@ -1843,8 +1844,9 @@ msgstr "Schneller Modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Beenden"
@@ -3371,6 +3373,25 @@ msgstr "Nach rechts fliegen"
msgid "Fly to lower right"
msgstr "Nach unten rechts fliegen"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Gleichmäßiges Scrollen"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musiklautstärke:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Untertitel-Tempo:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3538,7 +3559,6 @@ msgstr ""
"Zeige die aktuelle Anzahl von Bildern pro Sekunde in der oberen linken Ecke"
#: engines/zvision/detection_tables.h:52
-#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
"Verwendet die originalen Menüs zum Speichern und Laden statt der von ScummVM."
@@ -3548,7 +3568,6 @@ msgid "Double FPS"
msgstr "FPS verdoppeln"
#: engines/zvision/detection_tables.h:62
-#, fuzzy
msgid "Increase framerate from 30 to 60 FPS"
msgstr "Bilder pro Sekunde im Spiel von 30 auf 60 erhöhen"
@@ -3565,17 +3584,14 @@ msgid "Disable animation while turning"
msgstr "Animation während Drehen ausschalten"
#: engines/zvision/detection_tables.h:82
-#, fuzzy
msgid "Disable animation while turning in panorama mode"
msgstr "Animation während Drehen im Panorama-Modus ausschalten"
#: engines/zvision/detection_tables.h:91
-#, fuzzy
msgid "Use high resolution MPEG video"
msgstr "Nutze hochauflösende MPEG-Filme"
#: engines/zvision/detection_tables.h:92
-#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Verwende hochauflösende MPEG-Filme der DVD-Version anstelle der AVI-Filme"
diff --git a/po/es_ES.po b/po/es_ES.po
index 3398957b22..9d2e236d46 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-06 20:39+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -1045,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "¿Seguro que quieres borrar esta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Error desconocido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Modo lista"
@@ -1828,8 +1833,9 @@ msgstr "Modo rápido"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Salir"
@@ -3335,6 +3341,25 @@ msgstr "Volar a la derecha"
msgid "Fly to lower right"
msgstr "Volar abajo y a la derecha"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desplazamiento suave"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Música:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Vel. de subtítulos:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/eu.po b/po/eu.po
index 913338606e..97e13810e5 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-12-15 14:53+0100\n"
"Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n"
"Language-Team: Librezale <librezale@librezale.org>\n"
@@ -1045,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Ezabatu partida gorde hau?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Errore ezezaguna"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1834,8 +1839,9 @@ msgstr "Modu bizkorra"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Irten"
@@ -3340,6 +3346,25 @@ msgstr "Eskuinera hegan egin"
msgid "Fly to lower right"
msgstr "Behera eta eskuinera hegan egin"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Behera"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musika:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Azpitit. abiadura:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 7851775712..aeed76304e 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2012-12-01 19:37+0200\n"
"Last-Translator: Toni Saarela <saarela@gmail.com>\n"
"Language-Team: Finnish\n"
@@ -1046,6 +1046,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Haluatko varmasti poistaa tämän pelitallennuksen?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Tuntematon virhe"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listanäkymä"
@@ -1834,8 +1839,9 @@ msgstr "Nopea moodi"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Lopeta"
@@ -3334,6 +3340,25 @@ msgstr "Lennä oikealle"
msgid "Fly to lower right"
msgstr "Lennä alas oikealle"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Pehmeä vieritys"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musiikki:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Tekstin nopeus:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 64247a45bf..c6b785c794 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-05 13:49-0000\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <scummvm-devel@lists.sf.net>\n"
@@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erreur inconnue"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vue en liste"
@@ -1833,8 +1838,9 @@ msgstr "Mode rapide"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Quitter"
@@ -3342,6 +3348,25 @@ msgstr "Voler vers la droite"
msgid "Fly to lower right"
msgstr "Voler vers la bas à droite"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Défilement régulier"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume Musique:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Vitesse des ST:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/gl_ES.po b/po/gl_ES.po
index cec2582c0a..905c87d316 100644
--- a/po/gl_ES.po
+++ b/po/gl_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 09:51+0100\n"
"Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n"
"Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n"
@@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Seguro que queres eliminar esta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erro descoñecido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lista"
@@ -1820,8 +1825,9 @@ msgstr "Modo rápido"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Saír"
@@ -3325,6 +3331,25 @@ msgstr "Voar á dereita"
msgid "Fly to lower right"
msgstr "Voar á dereita abaixo"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desprazamento suave"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume de música:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocidade dos subtítulos:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/hu_HU.po b/po/hu_HU.po
index ac48bd5e62..89538e9f61 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
-"PO-Revision-Date: 2014-02-18 06:30+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-10-12 11:10+0200\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian\n"
"Language: Magyar\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
-"X-Generator: Poedit 1.6.4\n"
+"X-Generator: Poedit 1.8.5\n"
#: gui/about.cpp:94
#, c-format
@@ -75,7 +75,7 @@ msgstr "Választ"
#: gui/editrecorddialog.cpp:58
msgid "Author:"
-msgstr ""
+msgstr "Szerzõ:"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
@@ -83,11 +83,11 @@ msgstr "Név:"
#: gui/editrecorddialog.cpp:60
msgid "Notes:"
-msgstr ""
+msgstr "Megjegyzés:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@@ -414,7 +414,7 @@ msgstr "A választott játék indítása"
#: gui/launcher.cpp:633
msgid "~L~oad..."
-msgstr "Betöltés"
+msgstr "~B~etölt..."
#: gui/launcher.cpp:633
msgid "Load saved game for selected game"
@@ -545,7 +545,7 @@ msgstr "Masszív mód..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr ""
+msgstr "Felvétel..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@@ -572,21 +572,19 @@ msgstr "%d új játékot találtam, %d elõzõleg hozzáadott játék kihagyva..."
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
-msgstr ""
+msgstr "Állj"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
-msgstr ""
+msgstr "Felvétel leírás szerkesztése"
#: gui/onscreendialog.cpp:108
-#, fuzzy
msgid "Switch to Game"
-msgstr "Kapcsol"
+msgstr "Átvált játékra"
#: gui/onscreendialog.cpp:110
-#, fuzzy
msgid "Fast replay"
-msgstr "Gyors mód"
+msgstr "Gyors visszajátszás"
#: gui/options.cpp:85
msgid "Never"
@@ -980,29 +978,28 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
-msgstr ""
+msgstr "# következõ"
#: gui/predictivedialog.cpp:88
msgid "add"
-msgstr ""
+msgstr "hozzáad"
#: gui/predictivedialog.cpp:92
-#, fuzzy
msgid "Delete char"
-msgstr "Töröl"
+msgstr "Karakter törlés"
#: gui/predictivedialog.cpp:96
msgid "<"
-msgstr ""
+msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
-msgstr ""
+msgstr "* Elõzõ"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr ""
+msgstr "Játékmenet felvétel vagy lejátszás"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -1011,31 +1008,33 @@ msgstr "Töröl"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr ""
+msgstr "Felvétel"
#: gui/recorderdialog.cpp:72
-#, fuzzy
msgid "Playback"
-msgstr "Játék"
+msgstr "Visszajátszás"
#: gui/recorderdialog.cpp:74
msgid "Edit"
-msgstr ""
+msgstr "Javít"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
-msgstr ""
+msgstr "Szerzõ:"
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr ""
+msgstr "Megjegyzés:"
#: gui/recorderdialog.cpp:155
-#, fuzzy
msgid "Do you really want to delete this record?"
-msgstr "Biztos hogy törölni akarod ezt a játékállást?"
+msgstr "Biztos hogy törölni akarod ezt a felvételt?"
+
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr "Ismeretlen Szerzõ"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1336,7 +1335,7 @@ msgstr "Folytatás"
#: engines/dialogs.cpp:87
msgid "~L~oad"
-msgstr "Betöltés"
+msgstr "~B~etöltés"
#: engines/dialogs.cpp:91
msgid "~S~ave"
@@ -1410,7 +1409,7 @@ msgstr "~O~K"
#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110
#: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107
msgid "~C~ancel"
-msgstr "Mégse"
+msgstr "~M~égse"
#: engines/dialogs.cpp:311
msgid "~K~eys"
@@ -1493,7 +1492,7 @@ msgstr "DOSBox OPL emulátor"
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
-msgstr ""
+msgstr "ALSA Direct FM"
#: audio/mididrv.cpp:209
#, c-format
@@ -1609,7 +1608,7 @@ msgstr "ScummVM Fõmenü"
#: backends/platform/ds/arm9/source/dsoptions.cpp:63
msgid "~L~eft handed mode"
-msgstr "Balkezes mód:"
+msgstr "~B~alkezes mód"
#: backends/platform/ds/arm9/source/dsoptions.cpp:64
msgid "~I~ndy fight controls"
@@ -1814,8 +1813,9 @@ msgstr "Gyors mód"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Kilépés"
@@ -2069,7 +2069,7 @@ msgstr "Válassz egy billentyût az 'Eszköztár rejtés' mûvelethez"
#: backends/platform/wince/wince-sdl.cpp:542
msgid "Map Zoom Up action (optional)"
-msgstr "Nagyítás mûvelet (opcionális)"
+msgstr "Térkép nagyítás mûvelet (opcionális)"
#: backends/platform/wince/wince-sdl.cpp:545
msgid "Map Zoom Down action (optional)"
@@ -2182,25 +2182,27 @@ msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Az eredeti mentés/betöltés képernyõ használata a ScummVM képek helyett"
#: engines/agi/detection.cpp:157
-#, fuzzy
msgid "Use an alternative palette"
-msgstr "Alternatív játékintro használata (csak CD verziónál)"
+msgstr "Alternatív paletta használat"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
+"Alternatív paletta használat, közös minden Amiga játéknál. Ez egy régi "
+"megoldás"
#: engines/agi/detection.cpp:167
-#, fuzzy
msgid "Mouse support"
-msgstr "Átugrás támogatás"
+msgstr "Egér támogatás"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
+"Egérmód engélyezve. Lehetõvé teszi az egérrel mozgatást játékban és "
+"játékmenükben."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@@ -2253,13 +2255,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "'%s' átvezetõ fájl nem található"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
-#, fuzzy
msgid "Color Blind Mode"
-msgstr "Kattintás Mód"
+msgstr "Színvak Mód"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr ""
+msgstr "Szinvak mód engedélyezve alapértelmezett"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2314,11 +2315,11 @@ msgstr "Játék mentés nem sikerült"
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr ""
+msgstr "Gore Mód"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr ""
+msgstr "Gore mód engedélyezés ha elérhetõ"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2450,6 +2451,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
+"A következõ eredeti játékmentés fájlt találtam a játékkönyvtárban:\n"
+"\n"
+"%s %s\n"
+"\n"
+"Akarod hogy ezt a játékmentés fájlt használja a ScummVM?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@@ -2457,6 +2464,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
+"Játékmentés található a választott %d slotban. Felülírjam?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@@ -2468,6 +2477,11 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
+"%d eredeti játékmentés fájlt sikeresen importálta a\n"
+"ScummVM. Ha késõbb manuálisan akarod importálni az eredeti játékmentéseket\n"
+"meg kell nyitnod a ScummVM debug konzolt és használd az 'import_savefile' "
+"utasítást.\n"
+"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@@ -2476,7 +2490,7 @@ msgstr "~Z~ip Mód aktiválva"
#: engines/mohawk/dialogs.cpp:93
msgid "~T~ransitions Enabled"
-msgstr "Átmenetek engedélyezve"
+msgstr "~Á~tmenetek engedélyezve"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
@@ -2607,11 +2621,12 @@ msgstr "Alternatív játékintro használata (csak CD verziónál)"
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
-msgstr ""
+msgstr "EGA színmoduláció átugrása (Színes háttereknél)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
+"Színmoduláció átugrása EGA játékoknál, grafikák teljes színben láthatók"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@@ -2682,15 +2697,13 @@ msgstr "Játék szünetel. SPACE a folytatáshoz."
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
-msgstr "Biztos hogy újra akarod indítani? (Y/N)"
+msgstr "Biztos hogy újra akarod indítani? (I/N)I"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
-msgstr "Biztos hogy ki akarsz lépni? (Y/N)"
+msgstr "Biztos hogy ki akarsz lépni? (I/N)I"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@@ -2737,7 +2750,7 @@ msgstr "Játék címe)"
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:288
msgid "~P~revious"
-msgstr "Elõzõ"
+msgstr "~E~lõzõ"
#. I18N: Next page button
#: engines/scumm/dialogs.cpp:290
@@ -3198,25 +3211,24 @@ msgid "Third kid"
msgstr "Harmadik gyerek"
#: engines/scumm/help.cpp:292
-#, fuzzy
msgid "Toggle Inventory/IQ Points display"
-msgstr "Adatképernyõ kapcsoló"
+msgstr "Leltár/IQ pont kijelzõ kapcsoló"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr ""
+msgstr "Billentyûzet/Egér harc kapcsoló (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr ""
+msgstr "* Harc billentyûzetrõl mindíg aktív,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr ""
+msgstr " so despite the in-game message this"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr ""
+msgstr " egérrel harcolás mód átkapcsolás Be/Ki"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@@ -3253,7 +3265,7 @@ msgstr "Alsó ütés"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr ""
+msgstr "Váratlan ütés"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3311,6 +3323,22 @@ msgstr "Jobbra repülés"
msgid "Fly to lower right"
msgstr "Jobbra le repülés"
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr "Finomgörgetés be"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr "Finomgörgetés ki"
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr "Zene hangereje:"
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr "Felirat sebesség:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3321,27 +3349,30 @@ msgstr ""
"a %s hiányzik. AdLib-ot használok helyette."
#: engines/scumm/scumm.cpp:2644
-#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha "
-"játszani akarsz vele menj a ScummVM fõmenüben a 'Játék hozzáadás' ra és "
-"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában."
+"Általában a Maniac Mansion indulna most. De a mûködéshez a Maniac Mansion "
+"fájljainak, a 'Maniac' mappában kell lenni a Tentacle játékmappáján belül, "
+"és a játékot így adja hozzá a ScummVM a listához."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Nem található a 'Loom' Macintosh futtató állomány, hogy \n"
+"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Nem található a 'Monkey Island' Macintosh futtató állomány, hogy \n"
+"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/sky/compact.cpp:130
msgid ""
@@ -3457,51 +3488,48 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr ""
+msgstr "FPS számláló látszik"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
+"A jelenlegi másodpercenkénti képkocka szám kijelzése a bal felsõ sarokban"
#: engines/zvision/detection_tables.h:52
-#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
-msgstr "Az eredeti mentés/betöltés képernyõ használata a ScummVM képek helyett"
+msgstr "Használd az eredeti mentés/töltés képet a ScummVM felület helyett"
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr ""
+msgstr "Dupla FPS"
#: engines/zvision/detection_tables.h:62
msgid "Increase framerate from 30 to 60 FPS"
-msgstr ""
+msgstr "Növeli a képfrissítést 30 ról 60 FPS-re"
#: engines/zvision/detection_tables.h:71
-#, fuzzy
msgid "Enable Venus"
-msgstr "Helium mód engedélyezve"
+msgstr "Venus engedélyezve"
#: engines/zvision/detection_tables.h:72
-#, fuzzy
msgid "Enable the Venus help system"
-msgstr "Helium mód engedélyezve"
+msgstr "Venus súgórendszer engedélyezve"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr ""
+msgstr "Animáció tiltás bekapcsolás közben"
#: engines/zvision/detection_tables.h:82
msgid "Disable animation while turning in panorama mode"
-msgstr ""
+msgstr "Animáció tiltása panoráma mód bekapcsolása közben"
#: engines/zvision/detection_tables.h:91
msgid "Use high resolution MPEG video"
-msgstr ""
+msgstr "Nagyfelbontású MPEG videó használat"
#: engines/zvision/detection_tables.h:92
-#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
-msgstr "Alternatív ezüst kurzorszett használata, a normál arany helyett"
+msgstr "MPEG videót használ DVD verziónál, a kisebb felbontású AVI helyett"
#~ msgid "EGA undithering"
#~ msgstr "EGA szinjavítás"
diff --git a/po/it_IT.po b/po/it_IT.po
index 28ec2960db..21c4341570 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-03 17:59-0600\n"
"Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n"
"Language-Team: Italian\n"
@@ -1042,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Sei sicuro di voler eliminare questo salvataggio?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Errore sconosciuto"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Elenco"
@@ -1827,8 +1832,9 @@ msgstr "Modalità veloce"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Esci"
@@ -3332,6 +3338,25 @@ msgstr "Vola a destra"
msgid "Fly to lower right"
msgstr "Vola in basso a destra"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Scorrimento morbido"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume musica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocità testo:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 0b2816ad2f..086cb488a7 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:02+0100\n"
"Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -1039,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette dette lagrede spillet?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukjent feil"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@@ -1820,8 +1825,9 @@ msgstr "Rask modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avslutt"
@@ -3322,6 +3328,25 @@ msgstr "Fly til høyre"
msgid "Fly to lower right"
msgstr "Fly til nedre høyre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Myk scrolling"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikkvolum:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Teksthastighet:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 0cca1a004e..0f4548951d 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-11-25 20:46+0100\n"
"Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n"
"Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n"
@@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Wilt u dit opgeslagen spel echt verwijderen?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Onbekende fout"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lijstopmaak"
@@ -1837,8 +1842,9 @@ msgstr "Snelle modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Stoppen"
@@ -3358,6 +3364,25 @@ msgstr "Vlieg naar rechts"
msgid "Fly to lower right"
msgstr "Vlieg naar rechts omlaag"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Vloeiend scrollen"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Muziek volume:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Snelheid tekst:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 35f461e6d2..a6af5e4b60 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:04+0100\n"
"Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du verkeleg slette det lagra spelet?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukjend feil"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@@ -1802,8 +1807,9 @@ msgstr "Rask modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avslutt"
@@ -3304,6 +3310,25 @@ msgstr "Fly til høgre"
msgid "Fly to lower right"
msgstr "Fly til nedre høgre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Bla liste ned"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikkvolum:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Undertekstfart:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 233fa02599..477ecb6e69 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 12:28+0100\n"
"Last-Translator: Micha³ Zi±bkowski <mziab@o2.pl>\n"
"Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n"
@@ -1039,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Na pewno chcesz skasowaæ ten zapis?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Nieznany b³±d"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Widok listy"
@@ -1815,8 +1820,9 @@ msgstr "Tryb szybki"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Zakoñcz"
@@ -3312,6 +3318,25 @@ msgstr "Leæ w prawo"
msgid "Fly to lower right"
msgstr "Leæ w dó³, w prawo"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "P³ynne przewijanie"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "G³o¶no¶æ muzyki:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Prêd. napisów:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/pt_BR.po b/po/pt_BR.po
index dae84f8e09..a406d5e096 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-10-21 21:30-0300\n"
"Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n"
"Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n"
@@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Você realmente quer excluir este jogo salvo?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erro desconhecido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1849,8 +1854,9 @@ msgstr "Modo rápido"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Sair"
@@ -3366,6 +3372,25 @@ msgstr "Voar para direita"
msgid "Fly to lower right"
msgstr "Voar para direita inferior"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Descer na lista"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume da Música:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Rapidez legendas:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 6941d5773a..871f7cd414 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 17:20+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Russian\n"
@@ -1044,6 +1044,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "²ë ÔÕÙáâÒØâÕÛìÝÞ åÞâØâÕ ãÔÐÛØâì íâÞ áÞåàÐÝÕÝØÕ?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "½ÕØ×ÒÕáâÝÐï ÞèØÑÚÐ"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "²ØÔ áߨáÚÐ"
@@ -1829,8 +1834,9 @@ msgstr "±ëáâàëÙ àÕÖØÜ"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ëåÞÔ"
@@ -3335,6 +3341,25 @@ msgstr "»ÕâÕâì ÒßàÐÒÞ"
msgid "Fly to lower right"
msgstr "»ÕâÕâì ÒßàÐÒÞ-ÒÝØ×"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "¿ÛÐÒÝÐï ßàÞÚàãâÚÐ"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "³àÞÜÚ. Üã×ëÚØ:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "ÁÚÞàÞáâì âØâàÞÒ:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/scummvm.pot b/po/scummvm.pot
index 7036c41f91..1d6b4028bc 100644
--- a/po/scummvm.pot
+++ b/po/scummvm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1017,6 +1017,10 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr ""
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr ""
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1768,8 +1772,9 @@ msgstr ""
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr ""
@@ -3222,6 +3227,22 @@ msgstr ""
msgid "Fly to lower right"
msgstr ""
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr ""
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr ""
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr ""
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/se_SE.po b/po/se_SE.po
index b74f82805c..814a5b1e86 100644
--- a/po/se_SE.po
+++ b/po/se_SE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 16:30+0100\n"
"Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n"
"Language-Team: \n"
@@ -1042,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vill du verkligen radera den här spardatan?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Okänt fel"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Visa som lista"
@@ -1825,8 +1830,9 @@ msgstr "Snabbläge"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avsluta"
@@ -3328,6 +3334,25 @@ msgstr "Flyg åt höger"
msgid "Fly to lower right"
msgstr "Flyg åt nedre höger"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Mjuk rullning"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikvolym:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Texthastighet:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
diff --git a/po/uk_UA.po b/po/uk_UA.po
index c9f722c700..12e601bb06 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-09-06 15:14+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-01 02:34+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Ukrainian\n"
@@ -1044,6 +1044,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 æÕ ×ÑÕàÕÖÕÝÝï?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "½ÕÒöÔÞÜÐ ßÞÜØÛÚÐ"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "²ØÓÛïÔ áߨáÚã"
@@ -1825,8 +1830,9 @@ msgstr "ÈÒØÔÚØÙ àÕÖØÜ"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ØåöÔ"
@@ -3326,6 +3332,25 @@ msgstr "»ÕâöâØ ÝÐßàÐÒÞ"
msgid "Fly to lower right"
msgstr "»ÕâöâØ ÔÞÝØ×ã ÝÐßàÐÒÞ"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "¿ÛÐÒÝÐ ßàÞÚàãâÚÐ"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "³ãçÝöáâì Üã×ØÚØ:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "ÈÒØÔ. áãÑâØâàöÒ:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""