diff options
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 Binary files differindex 4225994810..96f21eb277 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat 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 "" @@ -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 "" |