diff options
289 files changed, 19189 insertions, 8754 deletions
@@ -112,6 +112,10 @@ ScummVM Team Vladimir Menshakov - (retired) Willem Jan Palenstijn + Gnap: + Arnaud Boutonne + Benjamin Haisch + Gob: Torbjorn Andersson Arnaud Boutonne @@ -2,6 +2,11 @@ For a more comprehensive changelog of the latest experimental code, see: https://github.com/scummvm/scummvm/commits/ 1.9.0 (YYYY-MM-DD) + New Games: + - Added support for Myst. + - Added support for Myst: Masterpiece Edition. + - Added support for U.F.O.s. + AGI: - Added support for Hercules rendering. Both green and amber modes are supported. @@ -15,6 +20,9 @@ For a more comprehensive changelog of the latest experimental code, see: points. This is a bug in the original game interpreter. Due to this bug, it was not possible to get all points in the original game. + Windows port: + - Fixed taskbar support on Windows 10 onwards. + 1.8.1 (2016-05-25) New ports: - Added Nintendo 3DS port. diff --git a/audio/decoders/adpcm.cpp b/audio/decoders/adpcm.cpp index fe5eec5dcc..fd97d5d109 100644 --- a/audio/decoders/adpcm.cpp +++ b/audio/decoders/adpcm.cpp @@ -433,7 +433,7 @@ int16 Ima_ADPCMStream::decodeIMA(byte code, int channel) { return samp; } -RewindableAudioStream *makeADPCMStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse, uint32 size, ADPCMType type, int rate, int channels, uint32 blockAlign) { +SeekableAudioStream *makeADPCMStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse, uint32 size, ADPCMType type, int rate, int channels, uint32 blockAlign) { // If size is 0, report the entire size of the stream if (!size) size = stream->size(); diff --git a/audio/decoders/adpcm.h b/audio/decoders/adpcm.h index 650bc341b3..353fd3b71d 100644 --- a/audio/decoders/adpcm.h +++ b/audio/decoders/adpcm.h @@ -45,7 +45,7 @@ class SeekableReadStream; namespace Audio { class PacketizedAudioStream; -class RewindableAudioStream; +class SeekableAudioStream; // There are several types of ADPCM encoding, only some are supported here // For all the different encodings, refer to: @@ -74,7 +74,7 @@ enum ADPCMType { * @param blockAlign block alignment ??? * @return a new RewindableAudioStream, or NULL, if an error occurred */ -RewindableAudioStream *makeADPCMStream( +SeekableAudioStream *makeADPCMStream( Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse, uint32 size, ADPCMType type, diff --git a/audio/decoders/adpcm_intern.h b/audio/decoders/adpcm_intern.h index 92be704cca..3a2af91c90 100644 --- a/audio/decoders/adpcm_intern.h +++ b/audio/decoders/adpcm_intern.h @@ -39,7 +39,7 @@ namespace Audio { -class ADPCMStream : public RewindableAudioStream { +class ADPCMStream : public SeekableAudioStream { protected: Common::DisposablePtr<Common::SeekableReadStream> _stream; int32 _startpos; @@ -67,6 +67,8 @@ public: virtual int getRate() const { return _rate; } virtual bool rewind(); + virtual bool seek(const Timestamp &where) { return false; } + virtual Timestamp getLength() const { return -1; } /** * This table is used by some ADPCM variants (IMA and OKI) to adjust the diff --git a/audio/decoders/wave.cpp b/audio/decoders/wave.cpp index adee749b37..cdd6412aa8 100644 --- a/audio/decoders/wave.cpp +++ b/audio/decoders/wave.cpp @@ -158,7 +158,7 @@ bool loadWAVFromStream(Common::SeekableReadStream &stream, int &size, int &rate, return true; } -RewindableAudioStream *makeWAVStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { +SeekableAudioStream *makeWAVStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { int size, rate; byte flags; uint16 type; diff --git a/audio/decoders/wave.h b/audio/decoders/wave.h index 6bc9f72101..a7fb76978c 100644 --- a/audio/decoders/wave.h +++ b/audio/decoders/wave.h @@ -56,7 +56,7 @@ class SeekableReadStream; namespace Audio { -class RewindableAudioStream; +class SeekableAudioStream; /** * Try to load a WAVE from the given seekable stream. Returns true if @@ -82,9 +82,9 @@ extern bool loadWAVFromStream( * * @param stream the SeekableReadStream from which to read the WAVE data * @param disposeAfterUse whether to delete the stream after use - * @return a new RewindableAudioStream, or NULL, if an error occurred + * @return a new SeekableAudioStream, or NULL, if an error occurred */ -RewindableAudioStream *makeWAVStream( +SeekableAudioStream *makeWAVStream( Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse); diff --git a/audio/mods/maxtrax.cpp b/audio/mods/maxtrax.cpp index f5754a5f96..b0cdaef95a 100644 --- a/audio/mods/maxtrax.cpp +++ b/audio/mods/maxtrax.cpp @@ -708,7 +708,7 @@ int8 MaxTrax::noteOn(ChannelContext &channel, const byte note, uint16 volume, ui voiceNum = pickvoice((channel.flags & ChannelContext::kFlagRightChannel) != 0 ? 1 : 0, pri); } else { VoiceContext *voice = ARRAYEND(_voiceCtx); - for (voiceNum = ARRAYSIZE(_voiceCtx); voiceNum-- != 0 && --voice->channel != &channel;) + for (voiceNum = ARRAYSIZE(_voiceCtx); voiceNum >= 0 && voice->channel != &channel; voiceNum--, voice--) ; if (voiceNum < 0) voiceNum = pickvoice((channel.flags & ChannelContext::kFlagRightChannel) != 0 ? 1 : 0, pri); diff --git a/backends/module.mk b/backends/module.mk index 7574db4009..4c1ca42f06 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -119,6 +119,7 @@ MODULE_OBJS += \ midi/windows.o \ plugins/win32/win32-provider.o \ saves/windows/windows-saves.o \ + updates/win32/win32-updates.o \ taskbar/win32/win32-taskbar.o endif diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk index 38128c62b0..4a29526941 100644 --- a/backends/platform/android/android.mk +++ b/backends/platform/android/android.mk @@ -1,7 +1,7 @@ # Android specific build targets # These must be incremented for each market upload -ANDROID_VERSIONCODE = 6 +ANDROID_VERSIONCODE = 16 ANDROID_TARGET_VERSION = 23 diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index fbab7eb782..fcc0849624 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -41,6 +41,7 @@ #include "backends/saves/windows/windows-saves.h" #include "backends/fs/windows/windows-fs-factory.h" #include "backends/taskbar/win32/win32-taskbar.h" +#include "backends/updates/win32/win32-updates.h" #include "common/memstream.h" @@ -82,6 +83,11 @@ void OSystem_Win32::initBackend() { if (_savefileManager == 0) _savefileManager = new WindowsSaveFileManager(); +#if defined(USE_SPARKLE) + // Initialize updates manager + _updateManager = new Win32UpdateManager(); +#endif + // Invoke parent implementation of this method OSystem_SDL::initBackend(); } diff --git a/backends/taskbar/win32/win32-taskbar.cpp b/backends/taskbar/win32/win32-taskbar.cpp index f3339fb917..b2810e55b4 100644 --- a/backends/taskbar/win32/win32-taskbar.cpp +++ b/backends/taskbar/win32/win32-taskbar.cpp @@ -85,7 +85,7 @@ const PROPERTYKEY PKEY_Title = { /* fmtid = */ { 0xF29F85E0, 0x4FF9, 0x1068, { 0 Win32TaskbarManager::Win32TaskbarManager(SdlWindow *window) : _window(window), _taskbar(NULL), _count(0), _icon(NULL) { // Do nothing if not running on Windows 7 or later - if (!isWin7OrLater()) + if (!confirmWindowsVersion(10, 0) && !confirmWindowsVersion(6, 1)) return; CoInitialize(NULL); @@ -400,14 +400,14 @@ BOOL VerifyVersionInfoFunc(LPOSVERSIONINFOEXA lpVersionInformation, DWORD dwType return verifyVersionInfo(lpVersionInformation, dwTypeMask, dwlConditionMask); } -bool Win32TaskbarManager::isWin7OrLater() { +bool Win32TaskbarManager::confirmWindowsVersion(uint majorVersion, uint minorVersion) { OSVERSIONINFOEX versionInfo; DWORDLONG conditionMask = 0; ZeroMemory(&versionInfo, sizeof(OSVERSIONINFOEX)); versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - versionInfo.dwMajorVersion = 6; - versionInfo.dwMinorVersion = 1; + versionInfo.dwMajorVersion = majorVersion; + versionInfo.dwMinorVersion = minorVersion; conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); diff --git a/backends/taskbar/win32/win32-taskbar.h b/backends/taskbar/win32/win32-taskbar.h index a6d1b49213..a5c024b21b 100644 --- a/backends/taskbar/win32/win32-taskbar.h +++ b/backends/taskbar/win32/win32-taskbar.h @@ -64,7 +64,7 @@ private: Common::String getIconPath(Common::String target); // Helper functions - bool isWin7OrLater(); + bool confirmWindowsVersion(uint majorVersion, uint minorVersion); LPWSTR ansiToUnicode(const char *s); HWND getHwnd(); }; diff --git a/backends/updates/win32/win32-updates.cpp b/backends/updates/win32/win32-updates.cpp new file mode 100644 index 0000000000..356ff9c903 --- /dev/null +++ b/backends/updates/win32/win32-updates.cpp @@ -0,0 +1,132 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// Disable symbol overrides so that we can use system headers. +#define FORBIDDEN_SYMBOL_ALLOW_ALL + +#include "common/system.h" +#include "backends/updates/win32/win32-updates.h" + +#ifdef USE_SPARKLE +#include "common/translation.h" +#include "common/config-manager.h" + +#include <time.h> +#include <winsparkle.h> + +/** + * Sparkle is a software update framework for Mac OS X which uses appcasts for + * release information. Appcasts are RSS-like XML feeds which contain information + * about the most current version at the time. If a new version is available, the + * user is presented the release-notes/changes/fixes and is asked if he wants to + * update, and if yes the Sparkle framework downloads a signed update package + * from the server and automatically installs and restarts the software. + * More detailed information is available at the following address: + * http://sparkle.andymatuschak.org/ + * + * WinSparkle is a heavily (to the point of being its almost-port) inspired by the + * Sparkle framework originally by Andy Matuschak that became the de facto standard + * for software updates on OS X. + * More detailed information is available at the following address: + * https://winsparkle.org/ + * + */ +Win32UpdateManager::Win32UpdateManager() { + const char *appcastUrl = "https://www.scummvm.org/appcasts/macosx/release.xml"; + + win_sparkle_set_appcast_url(appcastUrl); + win_sparkle_init(); + + if (!ConfMan.hasKey("updates_check") + || ConfMan.getInt("updates_check") == Common::UpdateManager::kUpdateIntervalNotSupported) { + setAutomaticallyChecksForUpdates(kUpdateStateDisabled); + } else { + setAutomaticallyChecksForUpdates(kUpdateStateEnabled); + setUpdateCheckInterval(normalizeInterval(ConfMan.getInt("updates_check"))); + } +} + +Win32UpdateManager::~Win32UpdateManager() { + win_sparkle_cleanup(); +} + +void Win32UpdateManager::checkForUpdates() { + win_sparkle_check_update_with_ui(); +} + +void Win32UpdateManager::setAutomaticallyChecksForUpdates(UpdateManager::UpdateState state) { + if (state == kUpdateStateNotSupported) + return; + + win_sparkle_set_automatic_check_for_updates(state == kUpdateStateEnabled ? 1 : 0); +} + +Common::UpdateManager::UpdateState Win32UpdateManager::getAutomaticallyChecksForUpdates() { + if (win_sparkle_get_automatic_check_for_updates() == 1) + return kUpdateStateEnabled; + else + return kUpdateStateDisabled; +} + +void Win32UpdateManager::setUpdateCheckInterval(int interval) { + if (interval == kUpdateIntervalNotSupported) + return; + + interval = normalizeInterval(interval); + + win_sparkle_set_update_check_interval(interval); +} + +int Win32UpdateManager::getUpdateCheckInterval() { + // This is kind of a hack but necessary, as the value stored by Sparkle + // might have been changed outside of ScummVM (in which case we return the + // default interval of one day) + + int updateInterval = win_sparkle_get_update_check_interval(); + switch (updateInterval) { + case kUpdateIntervalOneDay: + case kUpdateIntervalOneWeek: + case kUpdateIntervalOneMonth: + return updateInterval; + + default: + // Return the default value (one day) + return kUpdateIntervalOneDay; + } +} + +bool Win32UpdateManager::getLastUpdateCheckTimeAndDate(TimeDate &t) { + time_t updateTime = win_sparkle_get_last_check_time(); + tm *ut = localtime(&updateTime); + + t.tm_wday = ut->tm_wday; + t.tm_year = ut->tm_year; + t.tm_mon = ut->tm_mon; + t.tm_mday = ut->tm_mday; + t.tm_hour = ut->tm_hour; + t.tm_min = ut->tm_min; + t.tm_sec = ut->tm_sec; + + return true; +} + +#endif diff --git a/backends/updates/win32/win32-updates.h b/backends/updates/win32/win32-updates.h new file mode 100644 index 0000000000..71ed9ef685 --- /dev/null +++ b/backends/updates/win32/win32-updates.h @@ -0,0 +1,50 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKENDS_UPDATES_WIN32_H +#define BACKENDS_UPDATES_WIN32_H + +#include "common/scummsys.h" + +#if defined(WIN32) && defined(USE_SPARKLE) + +#include "common/updates.h" + +class Win32UpdateManager : public Common::UpdateManager { +public: + Win32UpdateManager(); + virtual ~Win32UpdateManager(); + + virtual void checkForUpdates(); + + virtual void setAutomaticallyChecksForUpdates(UpdateState state); + virtual UpdateState getAutomaticallyChecksForUpdates(); + + virtual void setUpdateCheckInterval(int interval); + virtual int getUpdateCheckInterval(); + + virtual bool getLastUpdateCheckTimeAndDate(TimeDate &t); +}; + +#endif + +#endif // BACKENDS_UPDATES_WIN32_H diff --git a/base/main.cpp b/base/main.cpp index 1df90c2d57..349f719ed5 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -388,7 +388,8 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { if (settings.contains("debugflags")) { specialDebug = settings["debugflags"]; settings.erase("debugflags"); - } + } else if (ConfMan.hasKey("debugflags")) + specialDebug = ConfMan.get("debugflags"); PluginManager::instance().init(); PluginManager::instance().loadAllPlugins(); // load plugins for cached plugin manager diff --git a/common/array.h b/common/array.h index e9b97aa38a..04ec9f9ccb 100644 --- a/common/array.h +++ b/common/array.h @@ -383,56 +383,59 @@ public: return; } - T *where = (T *)bsearchMin(element, this->front(), this->_size, sizeof(T), _comparator); - insert(where, element); + T *where = bsearchMin(element); + + if (where > this->_storage + this->_size) + Array<T>::push_back(element); + else + Array<T>::insert(where, element); } T &operator[](size_type idx) { - error("Operation not allowed with SortedArray"); + error("Operation []= not allowed with SortedArray"); } void insert_at(size_type idx, const T &element) { - error("Operation not allowed with SortedArray"); + error("Operation insert_at(idx, element) not allowed with SortedArray"); } void insert_at(size_type idx, const Array<T> &array) { - error("Operation not allowed with SortedArray"); + error("Operation insert_at(idx, array) not allowed with SortedArray"); } void insert(iterator pos, const T &element) { - error("Operation not allowed with SortedArray"); + error("Operation insert(pos, elemnet) not allowed with SortedArray"); } void push_back(const T &element) { - error("Operation not allowed with SortedArray"); + error("Operation push_back(element) not allowed with SortedArray"); } void push_back(const Array<T> &array) { - error("Operation not allowed with SortedArray"); + error("Operation push_back(array) not allowed with SortedArray"); } private: // Based on code Copyright (C) 2008-2009 Ksplice, Inc. // Author: Tim Abbott <tabbott@ksplice.com> // Licensed under GPLv2+ - void *bsearchMin(void *key, void *base, uint num, uint size_, - int (*cmp)(const void *key, const void *elt)) { - uint start_ = 0, end_ = num; + T *bsearchMin(void *key) { + uint start_ = 0, end_ = this->_size; int result; while (start_ < end_) { uint mid = start_ + (end_ - start_) / 2; - result = cmp(key, (byte *)base + mid * size_); + result = this->_comparator(key, this->_storage[mid]); if (result < 0) end_ = mid; else if (result > 0) start_ = mid + 1; else - return (void *)((byte *)base + mid * size_); + return &this->_storage[mid]; } - return (void *)((byte *)base + start_ * size_); + return &this->_storage[start_]; } private: @@ -809,18 +809,6 @@ get_subengines_build_string() { } # -# Greet user -# -echo "Running ScummVM configure..." -echo "Configure run on" `date` > $TMPLOG -cat >> $TMPLOG <<EOF -Invocation command line was: -$0 $@ -Saved environment variables: -LDFLAGS="$SAVED_LDFLAGS" CXX="$SAVED_CXX" CXXFLAGS="$SAVED_CXXFLAGS" CPPFLAGS="$SAVED_CPPFLAGS" ASFLAGS="$SAVED_ASFLAGS" WINDRESFLAGS="$SAVED_WINDRESFLAGS" SDL_CONFIG="$SAVED_SDL_CONFIG" -EOF - -# # Check any parameters we received # # TODO: @@ -992,8 +980,8 @@ Optional Libraries: installed (optional) --disable-fluidsynth disable fluidsynth MIDI driver [autodetect] - --with-sparkle-prefix=DIR Prefix where sparkle is installed (Mac OS X only - optional) - --disable-sparkle disable sparkle automatic update support [Mac OS X only - autodetect] + --with-sparkle-prefix=DIR Prefix where sparkle is installed (OS X/Windows only - optional) + --disable-sparkle disable sparkle automatic update support [OS X/Windows only - autodetect] --disable-osx-dock-plugin disable the NSDockTilePlugin support [Mac OS X only - autodetect] @@ -1031,6 +1019,20 @@ EOF fi done # for parm in ... + +# +# If we're not showing help, greet the user and start the log file +# +echo "Running ScummVM configure..." +echo "Configure run on" `date` > $TMPLOG +cat >> $TMPLOG <<EOF +Invocation command line was: +$0 $@ +Saved environment variables: +LDFLAGS="$SAVED_LDFLAGS" CXX="$SAVED_CXX" CXXFLAGS="$SAVED_CXXFLAGS" CPPFLAGS="$SAVED_CPPFLAGS" ASFLAGS="$SAVED_ASFLAGS" WINDRESFLAGS="$SAVED_WINDRESFLAGS" SDL_CONFIG="$SAVED_SDL_CONFIG" +EOF + + for ac_option in $@; do case "$ac_option" in --disable-16bit) _16bit=no ;; @@ -4038,6 +4040,31 @@ EOF fi echo "$_sparkle" ;; + mingw*) + echocheck "Sparkle" + if test "$_updates" = no; then + _sparkle=no + else + if test ! -z $_sparklepath ; then + SPARKLE_CFLAGS="-I$_sparklepath/include" + SPARKLE_LIBS="-L$_sparklepath/Release -L$_sparklepath/x64/Release" + fi + if test "$_sparkle" = auto ; then + _sparkle=no + cat > $TMPC << EOF +#include <winsparkle.h> +int main(void) { win_sparkle_get_update_check_interval(); return 0; } +EOF + cc_check $SPARKLE_CFLAGS $SPARKLE_LIBS -lWinSparkle && _sparkle=yes + fi + if test "$_sparkle" = yes ; then + append_var LIBS "$SPARKLE_LIBS -lWinSparkle" + append_var INCLUDES "$SPARKLE_CFLAGS" + fi + define_in_config_if_yes "$_sparkle" 'USE_SPARKLE' + fi + echo "$_sparkle" + ;; *) _sparkle=no ;; diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index de5936b94d..7e39fa829a 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -347,6 +347,20 @@ int main(int argc, char *argv[]) { setup.defines.push_back("MACOSX"); setup.defines.push_back("IPHONE"); } + + bool updatesEnabled = false; + for (FeatureList::const_iterator i = setup.features.begin(); i != setup.features.end(); ++i) { + if (i->enable && !strcmp(i->name, "updates")) + updatesEnabled = true; + } + if (updatesEnabled) { + setup.defines.push_back("USE_SPARKLE"); + if (projectType != kProjectXcode) + setup.libraries.push_back("winsparkle"); + else + setup.libraries.push_back("sparkle"); + } + setup.defines.push_back("SDL_BACKEND"); if (!setup.useSDL2) { cout << "\nBuilding against SDL 1.2\n\n"; @@ -964,6 +978,7 @@ const Feature s_features[] = { { "vkeybd", "ENABLE_VKEYBD", "", false, "Virtual keyboard support"}, { "keymapper", "ENABLE_KEYMAPPER", "", false, "Keymapper support"}, { "eventrecorder", "ENABLE_EVENTRECORDER", "", false, "Event recorder support"}, + { "updates", "USE_UPDATES", "", false, "Updates support"}, { "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there // is just no current way of properly detecting this... }; diff --git a/devtools/credits.pl b/devtools/credits.pl index 80f4c6d487..33e9c82830 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -614,6 +614,11 @@ begin_credits("Credits"); add_person("Willem Jan Palenstijn", "wjp", ""); end_section(); + begin_section("Gnap"); + add_person("Arnaud Boutonné", "Strangerke", ""); + add_person("Benjamin Haisch", "john_doe", ""); + end_section(); + begin_section("Gob"); add_person("Torbjörn Andersson", "eriktorbjorn", ""); add_person("Arnaud Boutonné", "Strangerke", ""); diff --git a/dists/android/AndroidManifest.xml b/dists/android/AndroidManifest.xml index 14161668fe..c091039266 100644 --- a/dists/android/AndroidManifest.xml +++ b/dists/android/AndroidManifest.xml @@ -40,17 +40,8 @@ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - <!-- Always needs some sort of qwerty keyboard. - Can work with a D-pad / trackball --> - <uses-configuration android:reqFiveWayNav="true" - android:reqKeyboardType="qwerty"/> - - <!-- .. or touchscreen --> - <uses-configuration android:reqTouchScreen="finger" - android:reqKeyboardType="qwerty"/> - - <uses-configuration android:reqTouchScreen="stylus" - android:reqKeyboardType="qwerty"/> + <uses-feature android:name="android.hardware.screen.landscape" + android:required="false" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> diff --git a/dists/android/AndroidManifest.xml.in b/dists/android/AndroidManifest.xml.in index de2f2d905e..7eaece9d1f 100644 --- a/dists/android/AndroidManifest.xml.in +++ b/dists/android/AndroidManifest.xml.in @@ -40,17 +40,8 @@ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - <!-- Always needs some sort of qwerty keyboard. - Can work with a D-pad / trackball --> - <uses-configuration android:reqFiveWayNav="true" - android:reqKeyboardType="qwerty"/> - - <!-- .. or touchscreen --> - <uses-configuration android:reqTouchScreen="finger" - android:reqKeyboardType="qwerty"/> - - <uses-configuration android:reqTouchScreen="stylus" - android:reqKeyboardType="qwerty"/> + <uses-feature android:name="android.hardware.screen.landscape" + android:required="false" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> diff --git a/dists/androidsdl/scummvm/AndroidAppSettings.cfg b/dists/androidsdl/scummvm/AndroidAppSettings.cfg index 73d794e1ab..d9f05ad2f4 100644 --- a/dists/androidsdl/scummvm/AndroidAppSettings.cfg +++ b/dists/androidsdl/scummvm/AndroidAppSettings.cfg @@ -41,7 +41,7 @@ NeedGles2=n # Application uses software video buffer - you're calling SDL_SetVideoMode() without SDL_HWSURFACE and without SDL_OPENGL, # this will allow small speed optimization. Enable this even when you're using SDL_HWSURFACE. (y) or (n) -SwVideoMode=n +SwVideoMode=y # Application video output will be resized to fit into native device screen (y)/(n) SdlVideoResize=y @@ -165,16 +165,16 @@ FirstStartMenuOptions='' # Enable multi-ABI binary, with hardware FPU support - it will also work on old devices, # but .apk size is 2x bigger (y) / (n) / (x86) / (all) -MultiABI="armeabi-v7a" +MultiABI="armeabi" # Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower AppMinimumRAM=256 # Application version code (integer) -AppVersionCode=19002 +AppVersionCode=@ANDROID_VERSIONCODE@ # Application user-visible version name (string) -AppVersionName="1.9.0git1661" +AppVersionName="1.9.0git" # Reset SDL config when updating application to the new version (y) / (n) ResetSdlConfigForThisVersion=y @@ -227,4 +227,4 @@ AdmobBannerSize= UseGlshim=n -AccessSdCard=y
\ No newline at end of file +AccessSdCard=y diff --git a/dists/androidsdl/scummvm/AndroidAppSettings.cfg.in b/dists/androidsdl/scummvm/AndroidAppSettings.cfg.in new file mode 100644 index 0000000000..bb437d2a7d --- /dev/null +++ b/dists/androidsdl/scummvm/AndroidAppSettings.cfg.in @@ -0,0 +1,230 @@ +# The application settings for Android libSDL port + +AppSettingVersion=19 + +# libSDL version to use (1.2 or 1.3, specify 1.3 for SDL2) +LibSdlVersion=1.2 + +# Specify application name (e.x. My Application) +AppName="ScummVM-SDL" + +# Specify reversed site name of application (e.x. com.mysite.myapp) +AppFullName=org.scummvm.sdl + +# Specify screen orientation: (v)ertical/(p)ortrait or (h)orizontal/(l)andscape +ScreenOrientation=h + +# Do not allow device to sleep when the application is in foreground, set this for video players or apps which use accelerometer +InhibitSuspend=y + +# Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' +# If you'll start Description with '!' symbol it will be enabled by default, other downloads should be selected by user from startup config menu +# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped +# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir - +# these files are put inside .apk package by build system +# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS +AppDataDownloadUrl="!!App data|scummvm190-git-appdata.zip" + +# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only +# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32) +VideoDepthBpp=32 + +# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedDepthBuffer=y + +# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedStencilBuffer=y + +# Try to use GLES 2.x context - will revert to GLES 1.X if unsupported by device +# you need this option only if you're developing 3-d app (y) or (n) +NeedGles2=n + +# Application uses software video buffer - you're calling SDL_SetVideoMode() without SDL_HWSURFACE and without SDL_OPENGL, +# this will allow small speed optimization. Enable this even when you're using SDL_HWSURFACE. (y) or (n) +SwVideoMode=n + +# Application video output will be resized to fit into native device screen (y)/(n) +SdlVideoResize=y + +# Application resizing will keep 4:3 aspect ratio, with black bars at sides (y)/(n) +SdlVideoResizeKeepAspect=n + +# Application does not call SDL_Flip() or SDL_UpdateRects() appropriately, or draws from non-main thread - +# enabling the compatibility mode will force screen update every 100 milliseconds, which is laggy and inefficient (y) or (n) +CompatibilityHacks=n + +# Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n) +CompatibilityHacksStaticInit=n + +# On-screen Android soft text input emulates hardware keyboard, this will only work with Hackers Keyboard app (y)/(n) +CompatibilityHacksTextInputEmulatesHwKeyboard=y +TextInputKeyboard=1 + +# Hack for broken devices: prevent audio chopping, by sleeping a bit after pushing each audio chunk (y)/(n) +CompatibilityHacksPreventAudioChopping=n + +# Hack for broken apps: application ignores audio buffer size returned by SDL (y)/(n) +CompatibilityHacksAppIgnoresAudioBufferSize=n + +# Hack for VCMI: preload additional shared libraries before aplication start +CompatibilityHacksAdditionalPreloadedSharedLibraries="" + +# Hack for Free Heroes 2, which redraws the screen inside SDL_PumpEvents(): slow and compatible SDL event queue - +# do not use it with accelerometer/gyroscope, or your app may freeze at random (y)/(n) +CompatibilityHacksSlowCompatibleEventQueue=n + +# Save and restore OpenGL state when drawing on-screen keyboard for apps that use SDL_OPENGL +CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=y + +# Application uses mouse (y) or (n), this will show mouse emulation dialog to the user +AppUsesMouse=y + +# Application needs two-button mouse, will also enable advanced point-and-click features (y) or (n) +AppNeedsTwoButtonMouse=y + +# Show SDL mouse cursor, for applications that do not draw cursor at all (y) or (n) +ShowMouseCursor=n + +# Force relative (laptop) mouse movement mode, useful when both on-screen keyboard and mouse are needed (y) or (n) +ForceRelativeMouseMode=n + +# Application needs arrow keys (y) or (n), will show on-screen dpad/joystick (y) or (n) +AppNeedsArrowKeys=n + +# Application needs text input (y) or (n), enables button for text input on screen +AppNeedsTextInput=y + +# Application uses joystick (y) or (n), the on-screen DPAD will be used as joystick 0 axes 0-1 +AppUsesJoystick=n + +# Application uses second on-screen joystick, as SDL joystick 0 axes 2-3 (y)/(n) +AppUsesSecondJoystick=n + +# Application uses accelerometer (y) or (n), the accelerometer will be used as joystick 1 axes 0-1 and 5-7 +AppUsesAccelerometer=n + +# Application uses gyroscope (y) or (n), the gyroscope will be used as joystick 1 axes 2-4 +AppUsesGyroscope=n + +# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0 +AppUsesMultitouch=y + +# Application records audio (it will use any available source, such a s microphone) +# API is defined in file SDL_android.h: int SDL_ANDROID_OpenAudioRecording(SDL_AudioSpec *spec); void SDL_ANDROID_CloseAudioRecording(void); +# This option will add additional permission to Android manifest (y)/(n) +AppRecordsAudio=n + +# Application implements Android-specific routines to put to background, and will not draw anything to screen +# between SDL_ACTIVEEVENT lost / gained notifications - you should check for them +# rigth after SDL_Flip(), if (n) then SDL_Flip() will block till app in background (y) or (n) +# This option is reported to be buggy, sometimes failing to restore video state +NonBlockingSwapBuffers=n + +# Redefine common hardware keys to SDL keysyms +# BACK hardware key is available on all devices, MENU is available on pre-ICS devices, other keys may be absent +# SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices +# Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys are 3-rd and 4-th) +# Keys: TOUCHSCREEN (works only when AppUsesMouse=n), DPAD_CENTER/SEARCH, VOLUMEUP, VOLUMEDOWN, MENU, BACK, CAMERA +RedefinedKeys="SPACE RETURN NO_REMAP NO_REMAP ESCAPE LCTRL F7 F4 F2 MOUSE_LEFT" + +# Number of virtual keyboard keys (currently 6 is maximum) +AppTouchscreenKeyboardKeysAmount=0 + +# Number of virtual keyboard keys that support autofire (currently 2 is maximum) +AppTouchscreenKeyboardKeysAmountAutoFire=0 + +# Redefine on-screen keyboard keys to SDL keysyms - 6 keyboard keys + 4 multitouch gestures (zoom in/out and rotate left/right) +RedefinedKeysScreenKb="MOUSE_RIGHT F7 LCTRL" + +# Names for on-screen keyboard keys, such as Fire, Jump, Run etc, separated by spaces, they are used in SDL config menu +RedefinedKeysScreenKbNames="MOUSE_RIGHT F7 LCTRL" + +# On-screen keys theme +# 0 = Ultimate Droid by Sean Stieber (green, with gamepad joystick) +# 1 = Simple Theme by Beholder (white, with gamepad joystick) +# 2 = Sun by Sirea (yellow, with round joystick) +# 3 = Keen by Gerstrong (multicolor, with round joystick) +TouchscreenKeysTheme=1 + +# Redefine gamepad keys to SDL keysyms, button order is: +# A B X Y L1 R1 L2 R2 LThumb RThumb +RedefinedKeysGamepad="MOUSE_RIGHT F7 LCTRL ESCAPE F5 SPACE RETURN MOUSE_LEFT" + +# How long to show startup menu button, in msec, 0 to disable startup menu +StartupMenuButtonTimeout=3000 + +# Menu items to hide from startup menu, available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +HiddenMenuOptions='SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMouse.DisplaySizeConfig' + +# Menu items to show at startup - this is Java code snippet, leave empty for default +# new SettingsMenuMisc.ShowReadme(), (AppUsesMouse \&\& \! ForceRelativeMouseMode \? new SettingsMenuMouse.DisplaySizeConfig(true) : new SettingsMenu.DummyMenu()), new SettingsMenuMisc.OptionalDownloadConfig(true), new SettingsMenuMisc.GyroscopeCalibration() +# Available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +FirstStartMenuOptions='' + +# Enable multi-ABI binary, with hardware FPU support - it will also work on old devices, +# but .apk size is 2x bigger (y) / (n) / (x86) / (all) +MultiABI="armeabi-v7a" + +# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower +AppMinimumRAM=256 + +# Application version code (integer) +AppVersionCode=@ANDROID_VERSIONCODE@ + +# Application user-visible version name (string) +AppVersionName="@VERSION@" + +# Reset SDL config when updating application to the new version (y) / (n) +ResetSdlConfigForThisVersion=y + +# Delete application data files when upgrading (specify file/dir paths separated by spaces) +DeleteFilesOnUpgrade="%" + +# Optional shared libraries to compile - removing some of them will save space +# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed +# Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 +CompiledLibraries="mad vorbis flac ogg jpeg png theora freetype faad" + +# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) +CustomBuildScript=y + +# Aditional CFLAGS for application +AppCflags='' + +# Additional LDFLAGS for application +AppLdflags='' + +# If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable +AppOverlapsSystemHeaders= + +# Build only following subdirs (empty will build all dirs, ignored with custom script) +AppSubdirsBuild='' + +# Exclude these files from build +AppBuildExclude='' + +# Application command line parameters, including app name as 0-th param +AppCmdline='' + +# Here you may type readme text, which will be shown during startup. Format is: +# Text in English, use \\\\n to separate lines^de:Text in Deutsch^ru:Text in Russian, and so on (that's four backslashes, nice isn't it?) +ReadmeText='^You may press "Home" now - the data will be downloaded in background' + +# Screen size is used by Google Play to prevent an app to be installed on devices with smaller screens +# Minimum screen size that application supports: (s)mall / (m)edium / (l)arge +MinimumScreenSize=s + +# Your AdMob Publisher ID, (n) if you don't want advertisements +AdmobPublisherId=n + +# Your AdMob test device ID, to receive a test ad +AdmobTestDeviceId= + +# Your AdMob banner size (BANNER/IAB_BANNER/IAB_LEADERBOARD/IAB_MRECT/IAB_WIDE_SKYSCRAPER/SMART_BANNER) +AdmobBannerSize= + +UseGlshim=n + +AccessSdCard=y diff --git a/dists/androidsdl/scummvm/AndroidBuild.sh b/dists/androidsdl/scummvm/AndroidBuild.sh index a7bf6ed446..5cc6863f5e 100644 --- a/dists/androidsdl/scummvm/AndroidBuild.sh +++ b/dists/androidsdl/scummvm/AndroidBuild.sh @@ -10,6 +10,6 @@ ln -sf libtheora.so $LOCAL_PATH/../../../obj/local/$1/libtheoradec.so ln -sf libglshim.a $LOCAL_PATH/../../../obj/local/$1/libGL.a if [ \! -f scummvm/config.mk ] ; then - ../setEnvironment-$1.sh sh -c "cd scummvm && env LIBS='-lflac -lvorbis -logg -lmad -lz -lgcc -ltheora -lpng -lfreetype -lfaad -lgnustl_static' ./configure --host=androidsdl-$1 --enable-zlib --enable-vorbis --enable-mad --enable-flac --enable-png --enable-theoradec --enable-vkeybd --enable-verbose-build --disable-readline --disable-nasm --disable-mt32emu --disable-timidity --disable-fluidsynth --opengl-mode=gles --enable-all-engines --datadir=. " + ../setEnvironment-$1.sh sh -c "cd scummvm && env LIBS='-lflac -lvorbis -logg -lmad -lz -lgcc -ltheora -lpng -lfreetype -lfaad -lgnustl_static' ./configure --host=androidsdl-$1 --enable-zlib --enable-vorbis --enable-mad --enable-flac --enable-png --enable-theoradec --enable-vkeybd --enable-release --disable-readline --disable-nasm --disable-mt32emu --disable-timidity --disable-fluidsynth --datadir=. " fi ../setEnvironment-$1.sh make -C scummvm -j2 && cp -f scummvm/scummvm libapplication-$1.so diff --git a/dists/gcw0/default.gcw0.desktop b/dists/gcw0/default.gcw0.desktop index 890852184f..9bbb8d5b59 100644 --- a/dists/gcw0/default.gcw0.desktop +++ b/dists/gcw0/default.gcw0.desktop @@ -14,3 +14,4 @@ Type=Application Categories=games; StartupNotify=false X-OD-Manual=README.man.txt +X-OD-NeedsDownscaling=true diff --git a/dists/scummvm.rc b/dists/scummvm.rc index aad521fddd..873feaa419 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -81,6 +81,7 @@ BEGIN BLOCK "040904b0" // US English, Unicode BEGIN VALUE "Comments", "Look! A three headed monkey (TM)! .. Nice use of the TM!\0" + VALUE "CompanyName", "scummvm.org\0" VALUE "FileDescription", "http://www.scummvm.org/\0" VALUE "FileVersion", "1.9.0git\0" VALUE "InternalName", "scummvm\0" diff --git a/dists/scummvm.rc.in b/dists/scummvm.rc.in index 34a4948381..2e0a5ff745 100644 --- a/dists/scummvm.rc.in +++ b/dists/scummvm.rc.in @@ -81,6 +81,7 @@ BEGIN BLOCK "040904b0" // US English, Unicode BEGIN VALUE "Comments", "Look! A three headed monkey (TM)! .. Nice use of the TM!\0" + VALUE "CompanyName", "scummvm.org\0" VALUE "FileDescription", "http://www.scummvm.org/\0" VALUE "FileVersion", "@VERSION@\0" VALUE "InternalName", "scummvm\0" diff --git a/doc/de/Neues b/doc/de/Neues index 8d459a1864..6870accf40 100644 --- a/doc/de/Neues +++ b/doc/de/Neues @@ -3,6 +3,11 @@ Programmcodes finden Sie auf Englisch unter: https://github.com/scummvm/scummvm/commits/ 1.9.0 (DD.MM.YYYY) + Neue Spiele: + - UnterstĆ¼tzung fĆ¼r Myst hinzugefĆ¼gt. + - UnterstĆ¼tzung fĆ¼r Myst: Masterpiece Edition hinzugefĆ¼gt. + - UnterstĆ¼tzung fĆ¼r U.F.O.s./Gnap: Der Schurke aus dem All hinzugefĆ¼gt. + AGI: - UnterstĆ¼tzung fĆ¼r Hercules-Darstellung (GrĆ¼n + Bernstein) hinzugefĆ¼gt. - UnterstĆ¼tzung fĆ¼r hochauflƶsende Hercules-Schriftart hinzugefĆ¼gt @@ -16,6 +21,9 @@ Programmcodes finden Sie auf Englisch unter: belohnt wird. Diese Dialogzeile fehlt im Originalspiel, weshalb es bislang unmƶglich war, die maximale Punktzahl im Spiel zu erreichen. + Windows-Portierung: + - Taskleisten-Integration unter Windows 10 und hƶher repariert. + 1.8.1 (25.05.2016) Neue Portierungen: - Portierung fĆ¼r den Nintendo 3DS hinzugefĆ¼gt. diff --git a/engines/access/detection.cpp b/engines/access/detection.cpp index 2cd7e50f0f..368753f117 100644 --- a/engines/access/detection.cpp +++ b/engines/access/detection.cpp @@ -94,7 +94,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Access Engine (c) 1989-1994 Access Software"; + return "Access Engine (C) 1989-1994 Access Software"; } virtual bool hasFeature(MetaEngineFeature f) const; diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index 448f630501..cf52bc58c5 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -35,10 +35,12 @@ namespace Access { SoundManager::SoundManager(AccessEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) { + _effectsHandle = new Audio::SoundHandle(); } SoundManager::~SoundManager() { clearSounds(); + delete _effectsHandle; } void SoundManager::clearSounds() { @@ -49,8 +51,8 @@ void SoundManager::clearSounds() { _soundTable.clear(); - if (_mixer->isSoundHandleActive(_effectsHandle)) - _mixer->stopHandle(_effectsHandle); + if (_mixer->isSoundHandleActive(*_effectsHandle)) + _mixer->stopHandle(*_effectsHandle); while (_queue.size()) { delete _queue[0]._stream; @@ -159,8 +161,8 @@ void SoundManager::playSound(Resource *res, int priority, bool loop, int soundIn _queue.push_back(QueuedSound(audioStream, soundIndex)); } - if (!_mixer->isSoundHandleActive(_effectsHandle)) - _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, + if (!_mixer->isSoundHandleActive(*_effectsHandle)) + _mixer->playStream(Audio::Mixer::kSFXSoundType, _effectsHandle, _queue[0]._stream, -1, _mixer->kMaxChannelVolume, 0, DisposeAfterUse::NO); } @@ -168,20 +170,20 @@ void SoundManager::playSound(Resource *res, int priority, bool loop, int soundIn void SoundManager::checkSoundQueue() { debugC(5, kDebugSound, "checkSoundQueue"); - if (_queue.empty() || _mixer->isSoundHandleActive(_effectsHandle)) + if (_queue.empty() || _mixer->isSoundHandleActive(*_effectsHandle)) return; delete _queue[0]._stream; _queue.remove_at(0); if (_queue.size() && _queue[0]._stream) - _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, + _mixer->playStream(Audio::Mixer::kSFXSoundType, _effectsHandle, _queue[0]._stream, -1, _mixer->kMaxChannelVolume, 0, DisposeAfterUse::NO); } bool SoundManager::isSFXPlaying() { - return _mixer->isSoundHandleActive(_effectsHandle); + return _mixer->isSoundHandleActive(*_effectsHandle); } void SoundManager::loadSounds(Common::Array<RoomInfo::SoundIdent> &sounds) { @@ -198,7 +200,7 @@ void SoundManager::loadSounds(Common::Array<RoomInfo::SoundIdent> &sounds) { void SoundManager::stopSound() { debugC(3, kDebugSound, "stopSound"); - _mixer->stopHandle(_effectsHandle); + _mixer->stopHandle(*_effectsHandle); } void SoundManager::freeSounds() { diff --git a/engines/access/sound.h b/engines/access/sound.h index d82ee956b1..d75540dd13 100644 --- a/engines/access/sound.h +++ b/engines/access/sound.h @@ -24,7 +24,6 @@ #define ACCESS_SOUND_H #include "common/scummsys.h" -#include "audio/mixer.h" #include "access/files.h" #include "audio/midiplayer.h" @@ -32,6 +31,7 @@ namespace Audio { class AudioStream; +class SoundHandle; } namespace Access { @@ -57,7 +57,7 @@ class SoundManager { private: AccessEngine *_vm; Audio::Mixer *_mixer; - Audio::SoundHandle _effectsHandle; + Audio::SoundHandle *_effectsHandle; Common::Array<QueuedSound> _queue; void clearSounds(); diff --git a/engines/adl/POTFILES b/engines/adl/POTFILES new file mode 100644 index 0000000000..ca485932f7 --- /dev/null +++ b/engines/adl/POTFILES @@ -0,0 +1 @@ +engines/adl/detection.cpp diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp index 1ab74c3cf6..b6af54962e 100644 --- a/engines/adl/adl.cpp +++ b/engines/adl/adl.cpp @@ -38,25 +38,61 @@ #include "adl/adl.h" #include "adl/display.h" #include "adl/detection.h" +#include "adl/graphics.h" +#include "adl/speaker.h" namespace Adl { AdlEngine::~AdlEngine() { delete _display; + delete _graphics; + delete _speaker; + delete _console; + delete _dumpFile; } AdlEngine::AdlEngine(OSystem *syst, const AdlGameDescription *gd) : Engine(syst), + _dumpFile(nullptr), _display(nullptr), - _gameDescription(gd), + _graphics(nullptr), _isRestarting(false), _isRestoring(false), + _skipOneCommand(false), + _gameDescription(gd), _saveVerb(0), _saveNoun(0), _restoreVerb(0), _restoreNoun(0), _canSaveNow(false), _canRestoreNow(false) { + + DebugMan.addDebugChannel(kDebugChannelScript, "Script", "Trace script execution"); +} + +bool AdlEngine::pollEvent(Common::Event &event) const { + _console->onFrame(); + + if (g_system->getEventManager()->pollEvent(event)) { + if (event.type != Common::EVENT_KEYDOWN) + return false; + + if (event.kbd.flags & Common::KBD_CTRL) { + if (event.kbd.keycode == Common::KEYCODE_q) { + quitGame(); + return false; + } + + if (event.kbd.keycode == Common::KEYCODE_d) { + _console->attach(); + return false; + } + } + + return true; + } + + return false; } Common::String AdlEngine::readString(Common::ReadStream &stream, byte until) const { @@ -82,33 +118,28 @@ Common::String AdlEngine::readStringAt(Common::SeekableReadStream &stream, uint return readString(stream, until); } -void AdlEngine::printMessage(uint idx, bool wait) const { - Common::String msg = _messages[idx - 1]; - wordWrap(msg); - _display->printString(msg); +void AdlEngine::openFile(Common::File &file, const Common::String &name) const { + if (!file.open(name)) + error("Error opening '%s'", name.c_str()); +} - if (wait) - delay(14 * 166018 / 1000); +void AdlEngine::printMessage(uint idx) { + printString(loadMessage(idx)); } -void AdlEngine::delay(uint32 ms) const { - Common::EventManager *ev = g_system->getEventManager(); +Common::String AdlEngine::getItemDescription(const Item &item) const { + if (item.description > 0) + return loadMessage(item.description); + else + return Common::String(); +} +void AdlEngine::delay(uint32 ms) const { uint32 start = g_system->getMillis(); - while (!g_engine->shouldQuit() && g_system->getMillis() - start < ms) { + while (!shouldQuit() && g_system->getMillis() - start < ms) { Common::Event event; - if (ev->pollEvent(event)) { - if (event.type == Common::EVENT_KEYDOWN && (event.kbd.flags & Common::KBD_CTRL)) { - switch(event.kbd.keycode) { - case Common::KEYCODE_q: - g_engine->quitGame(); - break; - default: - break; - } - } - } + pollEvent(event); g_system->delayMillis(16); } } @@ -122,7 +153,7 @@ Common::String AdlEngine::inputString(byte prompt) const { while (1) { byte b = inputKey(); - if (g_engine->shouldQuit() || _isRestoring) + if (shouldQuit() || _isRestoring) return 0; if (b == 0) @@ -153,25 +184,18 @@ Common::String AdlEngine::inputString(byte prompt) const { } } -byte AdlEngine::inputKey() const { - Common::EventManager *ev = g_system->getEventManager(); - +byte AdlEngine::inputKey(bool showCursor) const { byte key = 0; - _display->showCursor(true); + if (showCursor) + _display->showCursor(true); - while (!g_engine->shouldQuit() && !_isRestoring && key == 0) { + while (!shouldQuit() && !_isRestoring && key == 0) { Common::Event event; - if (ev->pollEvent(event)) { + if (pollEvent(event)) { if (event.type != Common::EVENT_KEYDOWN) continue; - if (event.kbd.flags & Common::KBD_CTRL) { - if (event.kbd.keycode == Common::KEYCODE_q) - g_engine->quitGame(); - continue; - } - switch (event.kbd.keycode) { case Common::KEYCODE_BACKSPACE: case Common::KEYCODE_RETURN: @@ -192,9 +216,12 @@ byte AdlEngine::inputKey() const { return key; } -void AdlEngine::loadWords(Common::ReadStream &stream, WordMap &map) const { +void AdlEngine::loadWords(Common::ReadStream &stream, WordMap &map, Common::StringArray &pri) const { uint index = 0; + map.clear(); + pri.clear(); + while (1) { ++index; @@ -208,6 +235,8 @@ void AdlEngine::loadWords(Common::ReadStream &stream, WordMap &map) const { if (!map.contains(word)) map[word] = index; + pri.push_back(Console::toAscii(word)); + byte synonyms = stream.readByte(); if (stream.err() || stream.eos()) @@ -229,6 +258,8 @@ void AdlEngine::loadWords(Common::ReadStream &stream, WordMap &map) const { } void AdlEngine::readCommands(Common::ReadStream &stream, Commands &commands) { + commands.clear(); + while (1) { Command command; command.room = stream.readByte(); @@ -264,10 +295,238 @@ void AdlEngine::readCommands(Common::ReadStream &stream, Commands &commands) { } } +void AdlEngine::checkInput(byte verb, byte noun) { + // Try room-local command list first + if (doOneCommand(_roomData.commands, verb, noun)) + return; + + // If no match was found, try the global list + if (!doOneCommand(_roomCommands, verb, noun)) + printMessage(_messageIds.dontUnderstand); +} + +bool AdlEngine::isInputValid(byte verb, byte noun, bool &is_any) { + if (isInputValid(_roomData.commands, verb, noun, is_any)) + return true; + return isInputValid(_roomCommands, verb, noun, is_any); +} + +bool AdlEngine::isInputValid(const Commands &commands, byte verb, byte noun, bool &is_any) { + Commands::const_iterator cmd; + + is_any = false; + for (cmd = commands.begin(); cmd != commands.end(); ++cmd) { + ScriptEnv env(*cmd, _state.room, verb, noun); + if (matchCommand(env)) { + if (cmd->verb == IDI_ANY || cmd->noun == IDI_ANY) + is_any = true; + return true; + } + } + + return false; +} + +typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine> OpcodeV1; +#define SetOpcodeTable(x) table = &x; +#define Opcode(x) table->push_back(new OpcodeV1(this, &AdlEngine::x)) +#define OpcodeUnImpl() table->push_back(new OpcodeV1(this, 0)) + +void AdlEngine::setupOpcodeTables() { + Common::Array<const Opcode *> *table = 0; + + SetOpcodeTable(_condOpcodes); + // 0x00 + OpcodeUnImpl(); + OpcodeUnImpl(); + OpcodeUnImpl(); + Opcode(o1_isItemInRoom); + // 0x04 + OpcodeUnImpl(); + Opcode(o1_isMovesGT); + Opcode(o1_isVarEQ); + OpcodeUnImpl(); + // 0x08 + OpcodeUnImpl(); + Opcode(o1_isCurPicEQ); + Opcode(o1_isItemPicEQ); + + SetOpcodeTable(_actOpcodes); + // 0x00 + OpcodeUnImpl(); + Opcode(o1_varAdd); + Opcode(o1_varSub); + Opcode(o1_varSet); + // 0x04 + Opcode(o1_listInv); + Opcode(o1_moveItem); + Opcode(o1_setRoom); + Opcode(o1_setCurPic); + // 0x08 + Opcode(o1_setPic); + Opcode(o1_printMsg); + Opcode(o1_setLight); + Opcode(o1_setDark); + // 0x0c + OpcodeUnImpl(); + Opcode(o1_quit); + OpcodeUnImpl(); + Opcode(o1_save); + // 0x10 + Opcode(o1_restore); + Opcode(o1_restart); + Opcode(o1_placeItem); + Opcode(o1_setItemPic); + // 0x14 + Opcode(o1_resetPic); + Opcode(o1_goDirection<IDI_DIR_NORTH>); + Opcode(o1_goDirection<IDI_DIR_SOUTH>); + Opcode(o1_goDirection<IDI_DIR_EAST>); + // 0x18 + Opcode(o1_goDirection<IDI_DIR_WEST>); + Opcode(o1_goDirection<IDI_DIR_UP>); + Opcode(o1_goDirection<IDI_DIR_DOWN>); + Opcode(o1_takeItem); + // 0x1c + Opcode(o1_dropItem); + Opcode(o1_setRoomPic); +} + +void AdlEngine::initState() { + _state = State(); + + initGameState(); +} + +byte AdlEngine::roomArg(byte room) const { + return room; +} + +void AdlEngine::clearScreen() const { + _display->setMode(DISPLAY_MODE_MIXED); + _display->clear(0x00); +} + +void AdlEngine::drawPic(byte pic, Common::Point pos) const { + if (_roomData.pictures.contains(pic)) + _graphics->drawPic(*_roomData.pictures[pic]->createReadStream(), pos); + else + _graphics->drawPic(*_pictures[pic]->createReadStream(), pos); +} + +void AdlEngine::bell(uint count) const { + _speaker->bell(count); +} + +const Room &AdlEngine::getRoom(uint i) const { + if (i < 1 || i > _state.rooms.size()) + error("Room %i out of range [1, %i]", i, _state.rooms.size()); + + return _state.rooms[i - 1]; +} + +Room &AdlEngine::getRoom(uint i) { + if (i < 1 || i > _state.rooms.size()) + error("Room %i out of range [1, %i]", i, _state.rooms.size()); + + return _state.rooms[i - 1]; +} + +const Room &AdlEngine::getCurRoom() const { + return getRoom(_state.room); +} + +Room &AdlEngine::getCurRoom() { + return getRoom(_state.room); +} + +const Item &AdlEngine::getItem(uint i) const { + Common::List<Item>::const_iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->id == i) + return *item; + + error("Item %i not found", i); +} + +Item &AdlEngine::getItem(uint i) { + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->id == i) + return *item; + + error("Item %i not found", i); +} + +byte AdlEngine::getVar(uint i) const { + if (i >= _state.vars.size()) + error("Variable %i out of range [0, %i]", i, _state.vars.size() - 1); + + return _state.vars[i]; +} + +void AdlEngine::setVar(uint i, byte value) { + if (i >= _state.vars.size()) + error("Variable %i out of range [0, %i]", i, _state.vars.size() - 1); + + _state.vars[i] = value; +} + +void AdlEngine::takeItem(byte noun) { + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + if (item->noun != noun || item->room != _state.room) + continue; + + if (item->state == IDI_ITEM_DOESNT_MOVE) { + printMessage(_messageIds.itemDoesntMove); + return; + } + + if (item->state == IDI_ITEM_DROPPED) { + item->room = IDI_ANY; + return; + } + + Common::Array<byte>::const_iterator pic; + for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { + if (*pic == getCurRoom().curPicture) { + item->room = IDI_ANY; + item->state = IDI_ITEM_DROPPED; + return; + } + } + } + + printMessage(_messageIds.itemNotHere); +} + +void AdlEngine::dropItem(byte noun) { + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + if (item->noun != noun || item->room != IDI_ANY) + continue; + + item->room = _state.room; + item->state = IDI_ITEM_DROPPED; + return; + } + + printMessage(_messageIds.dontUnderstand); +} + Common::Error AdlEngine::run() { + _console = new Console(this); + _speaker = new Speaker(); _display = new Display(); - loadData(); + setupOpcodeTables(); + + init(); int saveSlot = ConfMan.getInt("save_slot"); if (saveSlot >= 0) { @@ -278,13 +537,14 @@ Common::Error AdlEngine::run() { } else { runIntro(); initState(); + _display->printAsciiString(_strings.lineFeeds); } _display->setMode(DISPLAY_MODE_MIXED); - _display->printAsciiString("\r\r\r\r\r"); while (1) { uint verb = 0, noun = 0; + _isRestarting = false; // When restoring from the launcher, we don't read // input on the first iteration. This is needed to @@ -292,9 +552,11 @@ Common::Error AdlEngine::run() { // restoring in-game brings us to the same game state. // (Also see comment below.) if (!_isRestoring) { - clearScreen(); showRoom(); + if (_isRestarting) + continue; + _canSaveNow = _canRestoreNow = true; getInput(verb, noun); _canSaveNow = _canRestoreNow = false; @@ -305,8 +567,7 @@ Common::Error AdlEngine::run() { // If we just restored from the GMM, we skip this command // set, as no command has been input by the user if (!_isRestoring) - if (!doOneCommand(_roomCommands, verb, noun)) - printMessage(_messageIds.dontUnderstand); + checkInput(verb, noun); } if (_isRestoring) { @@ -323,12 +584,15 @@ Common::Error AdlEngine::run() { } // Restarting does end command processing - if (_isRestarting) { - _isRestarting = false; + if (_isRestarting) continue; - } doAllCommands(_globalCommands, verb, noun); + + if (_isRestarting) + continue; + + advanceClock(); _state.moves++; } @@ -382,6 +646,8 @@ Common::Error AdlEngine::loadGameState(int slot) { _state.room = inFile->readByte(); _state.moves = inFile->readByte(); _state.isDark = inFile->readByte(); + _state.time.hours = inFile->readByte(); + _state.time.minutes = inFile->readByte(); uint32 size = inFile->readUint32BE(); if (size != _state.rooms.size()) @@ -390,18 +656,20 @@ Common::Error AdlEngine::loadGameState(int slot) { for (uint i = 0; i < size; ++i) { _state.rooms[i].picture = inFile->readByte(); _state.rooms[i].curPicture = inFile->readByte(); + _state.rooms[i].isFirstTime = inFile->readByte(); } size = inFile->readUint32BE(); if (size != _state.items.size()) error("Item count mismatch (expected %i; found %i)", _state.items.size(), size); - for (uint i = 0; i < size; ++i) { - _state.items[i].room = inFile->readByte(); - _state.items[i].picture = inFile->readByte(); - _state.items[i].position.x = inFile->readByte(); - _state.items[i].position.y = inFile->readByte(); - _state.items[i].state = inFile->readByte(); + Common::List<Item>::iterator item; + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + item->room = inFile->readByte(); + item->picture = inFile->readByte(); + item->position.x = inFile->readByte(); + item->position.y = inFile->readByte(); + item->state = inFile->readByte(); } size = inFile->readUint32BE(); @@ -467,20 +735,24 @@ Common::Error AdlEngine::saveGameState(int slot, const Common::String &desc) { outFile->writeByte(_state.room); outFile->writeByte(_state.moves); outFile->writeByte(_state.isDark); + outFile->writeByte(_state.time.hours); + outFile->writeByte(_state.time.minutes); outFile->writeUint32BE(_state.rooms.size()); for (uint i = 0; i < _state.rooms.size(); ++i) { outFile->writeByte(_state.rooms[i].picture); outFile->writeByte(_state.rooms[i].curPicture); + outFile->writeByte(_state.rooms[i].isFirstTime); } outFile->writeUint32BE(_state.items.size()); - for (uint i = 0; i < _state.items.size(); ++i) { - outFile->writeByte(_state.items[i].room); - outFile->writeByte(_state.items[i].picture); - outFile->writeByte(_state.items[i].position.x); - outFile->writeByte(_state.items[i].position.y); - outFile->writeByte(_state.items[i].state); + Common::List<Item>::const_iterator item; + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + outFile->writeByte(item->room); + outFile->writeByte(item->picture); + outFile->writeByte(item->position.x); + outFile->writeByte(item->position.y); + outFile->writeByte(item->state); } outFile->writeUint32BE(_state.vars.size()); @@ -509,29 +781,14 @@ bool AdlEngine::canSaveGameStateCurrently() { // "SAVE GAME". This prevents saving via the GMM in situations where // it wouldn't otherwise be possible to do so. for (cmd = _roomCommands.begin(); cmd != _roomCommands.end(); ++cmd) { - uint offset; - if (matchCommand(*cmd, _saveVerb, _saveNoun, &offset)) - return cmd->script[offset] == IDO_ACT_SAVE; + ScriptEnv env(*cmd, _state.room, _saveVerb, _saveNoun); + if (matchCommand(env)) + return env.op() == IDO_ACT_SAVE; } return false; } -void AdlEngine::wordWrap(Common::String &str) const { - uint end = 39; - - while (1) { - if (str.size() <= end) - return; - - while (str[end] != APPLECHAR(' ')) - --end; - - str.setChar(APPLECHAR('\r'), end); - end += 40; - } -} - byte AdlEngine::convertKey(uint16 ascii) const { ascii = toupper(ascii); @@ -598,6 +855,22 @@ Common::String AdlEngine::getWord(const Common::String &line, uint &index) const } } +Common::String AdlEngine::formatVerbError(const Common::String &verb) const { + Common::String err = _strings.verbError; + for (uint i = 0; i < verb.size(); ++i) + err.setChar(verb[i], i + 19); + return err; +} + +Common::String AdlEngine::formatNounError(const Common::String &verb, const Common::String &noun) const { + Common::String err = _strings.nounError; + for (uint i = 0; i < verb.size(); ++i) + err.setChar(verb[i], i + 19); + for (uint i = 0; i < noun.size(); ++i) + err.setChar(noun[i], i + 30); + return err; +} + void AdlEngine::getInput(uint &verb, uint &noun) { while (1) { _display->printString(_strings.enterCommand); @@ -607,421 +880,349 @@ void AdlEngine::getInput(uint &verb, uint &noun) { return; uint index = 0; - Common::String verbStr = getWord(line, index); + Common::String verbString = getWord(line, index); - if (!_verbs.contains(verbStr)) { - Common::String err = _strings.verbError; - for (uint i = 0; i < verbStr.size(); ++i) - err.setChar(verbStr[i], i + 19); - _display->printString(err); + if (!_verbs.contains(verbString)) { + _display->printString(formatVerbError(verbString)); continue; } - verb = _verbs[verbStr]; + verb = _verbs[verbString]; - Common::String nounStr = getWord(line, index); + Common::String nounString = getWord(line, index); - if (!_nouns.contains(nounStr)) { - Common::String err = _strings.nounError; - for (uint i = 0; i < verbStr.size(); ++i) - err.setChar(verbStr[i], i + 19); - for (uint i = 0; i < nounStr.size(); ++i) - err.setChar(nounStr[i], i + 30); - _display->printString(err); + if (!_nouns.contains(nounString)) { + _display->printString(formatNounError(verbString, nounString)); continue; } - noun = _nouns[nounStr]; + noun = _nouns[nounString]; return; } } -void AdlEngine::showRoom() const { - if (!_state.isDark) { - drawPic(getCurRoom().curPicture); - drawItems(); +bool AdlEngine::op_debug(const char *fmt, ...) const { + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) { + va_list va; + va_start(va, fmt); + Common::String output = Common::String::vformat(fmt, va); + va_end(va); + + output += '\n'; + if (_dumpFile) { + _dumpFile->write(output.c_str(), output.size()); + return true; + } else + debugN("%s", output.c_str()); } - _display->updateHiResScreen(); - printMessage(getCurRoom().description, false); + return false; } -void AdlEngine::clearScreen() const { - _display->setMode(DISPLAY_MODE_MIXED); - _display->clear(0x00); +int AdlEngine::o1_isItemInRoom(ScriptEnv &e) { + OP_DEBUG_2("\t&& GET_ITEM_ROOM(%s) == %s", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); + + if (getItem(e.arg(1)).room == roomArg(e.arg(2))) + return 2; + + return -1; } -void AdlEngine::drawItems() const { - Common::Array<Item>::const_iterator item; +int AdlEngine::o1_isMovesGT(ScriptEnv &e) { + OP_DEBUG_1("\t&& MOVES > %d", e.arg(1)); - uint dropped = 0; + if (_state.moves > e.arg(1)) + return 1; - for (item = _state.items.begin(); item != _state.items.end(); ++item) { - if (item->room != _state.room) - continue; + return -1; +} - if (item->state == IDI_ITEM_MOVED) { - if (getCurRoom().picture == getCurRoom().curPicture) { - const Common::Point &p = _itemOffsets[dropped]; - if (item->isLineArt) - drawLineArt(_lineArt[item->picture - 1], p); - else - drawPic(item->picture, p); - ++dropped; - } - continue; - } +int AdlEngine::o1_isVarEQ(ScriptEnv &e) { + OP_DEBUG_2("\t&& VARS[%d] == %d", e.arg(1), e.arg(2)); - Common::Array<byte>::const_iterator pic; + if (getVar(e.arg(1)) == e.arg(2)) + return 2; - for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { - if (*pic == getCurRoom().curPicture) { - if (item->isLineArt) - drawLineArt(_lineArt[item->picture - 1], item->position); - else - drawPic(item->picture, item->position); - continue; - } - } - } + return -1; } -void AdlEngine::drawNextPixel(Common::Point &p, byte color, byte bits, byte quadrant) const { - if (bits & 4) - _display->putPixel(p, color); +int AdlEngine::o1_isCurPicEQ(ScriptEnv &e) { + OP_DEBUG_1("\t&& GET_CURPIC() == %d", e.arg(1)); - bits += quadrant; + if (getCurRoom().curPicture == e.arg(1)) + return 1; - if (bits & 1) - p.x += (bits & 2 ? -1 : 1); - else - p.y += (bits & 2 ? 1 : -1); + return -1; } -void AdlEngine::drawLineArt(const Common::Array<byte> &lineArt, const Common::Point &pos, byte rotation, byte scaling, byte color) const { - const byte stepping[] = { - 0xff, 0xfe, 0xfa, 0xf4, 0xec, 0xe1, 0xd4, 0xc5, - 0xb4, 0xa1, 0x8d, 0x78, 0x61, 0x49, 0x31, 0x18, - 0xff - }; +int AdlEngine::o1_isItemPicEQ(ScriptEnv &e) { + OP_DEBUG_2("\t&& GET_ITEM_PIC(%s) == %d", itemStr(e.arg(1)).c_str(), e.arg(2)); - byte quadrant = rotation >> 4; - rotation &= 0xf; - byte xStep = stepping[rotation]; - byte yStep = stepping[(rotation ^ 0xf) + 1] + 1; - - Common::Point p(pos); - - for (uint i = 0; i < lineArt.size(); ++i) { - byte b = lineArt[i]; - - do { - byte xFrac = 0x80; - byte yFrac = 0x80; - for (uint j = 0; j < scaling; ++j) { - if (xFrac + xStep + 1 > 255) - drawNextPixel(p, color, b, quadrant); - xFrac += xStep + 1; - if (yFrac + yStep > 255) - drawNextPixel(p, color, b, quadrant + 1); - yFrac += yStep; - } - b >>= 3; - } while (b != 0); - } + if (getItem(e.arg(1)).picture == e.arg(2)) + return 2; + + return -1; } -const Room &AdlEngine::getRoom(uint i) const { - if (i < 1 || i > _state.rooms.size()) - error("Room %i out of range [1, %i]", i, _state.rooms.size()); +int AdlEngine::o1_varAdd(ScriptEnv &e) { + OP_DEBUG_2("\tVARS[%d] += %d", e.arg(2), e.arg(1)); - return _state.rooms[i - 1]; + setVar(e.arg(2), getVar(e.arg(2) + e.arg(1))); + return 2; } -Room &AdlEngine::getRoom(uint i) { - if (i < 1 || i > _state.rooms.size()) - error("Room %i out of range [1, %i]", i, _state.rooms.size()); +int AdlEngine::o1_varSub(ScriptEnv &e) { + OP_DEBUG_2("\tVARS[%d] -= %d", e.arg(2), e.arg(1)); - return _state.rooms[i - 1]; + setVar(e.arg(2), getVar(e.arg(2)) - e.arg(1)); + return 2; } -const Room &AdlEngine::getCurRoom() const { - return getRoom(_state.room); +int AdlEngine::o1_varSet(ScriptEnv &e) { + OP_DEBUG_2("\tVARS[%d] = %d", e.arg(1), e.arg(2)); + + setVar(e.arg(1), e.arg(2)); + return 2; } -Room &AdlEngine::getCurRoom() { - return getRoom(_state.room); +int AdlEngine::o1_listInv(ScriptEnv &e) { + OP_DEBUG_0("\tLIST_INVENTORY()"); + + Common::List<Item>::const_iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->room == IDI_ANY) + printMessage(item->description); + + return 0; } -const Item &AdlEngine::getItem(uint i) const { - if (i < 1 || i > _state.items.size()) - error("Item %i out of range [1, %i]", i, _state.items.size()); +int AdlEngine::o1_moveItem(ScriptEnv &e) { + OP_DEBUG_2("\tSET_ITEM_ROOM(%s, %s)", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); - return _state.items[i - 1]; + getItem(e.arg(1)).room = e.arg(2); + return 2; } -Item &AdlEngine::getItem(uint i) { - if (i < 1 || i > _state.items.size()) - error("Item %i out of range [1, %i]", i, _state.items.size()); +int AdlEngine::o1_setRoom(ScriptEnv &e) { + OP_DEBUG_1("\tROOM = %d", e.arg(1)); - return _state.items[i - 1]; + getCurRoom().curPicture = getCurRoom().picture; + _state.room = e.arg(1); + return 1; } -byte AdlEngine::getVar(uint i) const { - if (i >= _state.vars.size()) - error("Variable %i out of range [0, %i]", i, _state.vars.size() - 1); +int AdlEngine::o1_setCurPic(ScriptEnv &e) { + OP_DEBUG_1("\tSET_CURPIC(%d)", e.arg(1)); - return _state.vars[i]; + getCurRoom().curPicture = e.arg(1); + return 1; } -void AdlEngine::setVar(uint i, byte value) { - if (i >= _state.vars.size()) - error("Variable %i out of range [0, %i]", i, _state.vars.size() - 1); +int AdlEngine::o1_setPic(ScriptEnv &e) { + OP_DEBUG_1("\tSET_PIC(%d)", e.arg(1)); - _state.vars[i] = value; + getCurRoom().picture = getCurRoom().curPicture = e.arg(1); + return 1; } -void AdlEngine::takeItem(byte noun) { - Common::Array<Item>::iterator item; +int AdlEngine::o1_printMsg(ScriptEnv &e) { + OP_DEBUG_1("\tPRINT(%s)", msgStr(e.arg(1)).c_str()); - for (item = _state.items.begin(); item != _state.items.end(); ++item) { - if (item->noun != noun || item->room != _state.room) - continue; + printMessage(e.arg(1)); + return 1; +} - if (item->state == IDI_ITEM_DOESNT_MOVE) { - printMessage(_messageIds.itemDoesntMove); - return; - } +int AdlEngine::o1_setLight(ScriptEnv &e) { + OP_DEBUG_0("\tLIGHT()"); - if (item->state == IDI_ITEM_MOVED) { - item->room = IDI_NONE; - return; - } + _state.isDark = false; + return 0; +} - Common::Array<byte>::const_iterator pic; - for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { - if (*pic == getCurRoom().curPicture) { - item->room = IDI_NONE; - item->state = IDI_ITEM_MOVED; - return; - } - } +int AdlEngine::o1_setDark(ScriptEnv &e) { + OP_DEBUG_0("\tDARK()"); + + _state.isDark = true; + return 0; +} + +int AdlEngine::o1_save(ScriptEnv &e) { + OP_DEBUG_0("\tSAVE_GAME()"); + + saveGameState(0, ""); + return 0; +} + +int AdlEngine::o1_restore(ScriptEnv &e) { + OP_DEBUG_0("\tRESTORE_GAME()"); + + loadGameState(0); + _isRestoring = false; + return 0; +} + +int AdlEngine::o1_restart(ScriptEnv &e) { + OP_DEBUG_0("\tRESTART_GAME()"); + + _display->printString(_strings.playAgain); + Common::String input = inputString(); + + if (input.size() == 0 || input[0] != APPLECHAR('N')) { + _isRestarting = true; + _display->clear(0x00); + _display->updateHiResScreen(); + _display->printString(_strings.pressReturn); + initState(); + _display->printAsciiString(_strings.lineFeeds); + return -1; } - printMessage(_messageIds.itemNotHere); + return o1_quit(e); } -void AdlEngine::dropItem(byte noun) { - Common::Array<Item>::iterator item; +int AdlEngine::o1_quit(ScriptEnv &e) { + OP_DEBUG_0("\tQUIT_GAME()"); - for (item = _state.items.begin(); item != _state.items.end(); ++item) { - if (item->noun != noun || item->room != IDI_NONE) - continue; + printMessage(_messageIds.thanksForPlaying); + quitGame(); + return -1; +} - item->room = _state.room; - item->state = IDI_ITEM_MOVED; - return; +int AdlEngine::o1_placeItem(ScriptEnv &e) { + OP_DEBUG_4("\tPLACE_ITEM(%s, %s, (%d, %d))", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str(), e.arg(3), e.arg(4)); + + Item &item = getItem(e.arg(1)); + + item.room = roomArg(e.arg(2)); + item.position.x = e.arg(3); + item.position.y = e.arg(4); + return 4; +} + +int AdlEngine::o1_setItemPic(ScriptEnv &e) { + OP_DEBUG_2("\tSET_ITEM_PIC(%s, %d)", itemStr(e.arg(2)).c_str(), e.arg(1)); + + getItem(e.arg(2)).picture = e.arg(1); + return 2; +} + +int AdlEngine::o1_resetPic(ScriptEnv &e) { + OP_DEBUG_0("\tRESET_PIC()"); + + getCurRoom().curPicture = getCurRoom().picture; + return 0; +} + +template <Direction D> +int AdlEngine::o1_goDirection(ScriptEnv &e) { + OP_DEBUG_0((Common::String("\tGO_") + dirStr(D) + "()").c_str()); + + byte room = getCurRoom().connections[D]; + + if (room == 0) { + printMessage(_messageIds.cantGoThere); + return -1; } - printMessage(_messageIds.dontUnderstand); + getCurRoom().curPicture = getCurRoom().picture; + _state.room = room; + return -1; } -#define ARG(N) (command.script[offset + (N)]) +int AdlEngine::o1_takeItem(ScriptEnv &e) { + OP_DEBUG_0("\tTAKE_ITEM()"); -bool AdlEngine::matchCommand(const Command &command, byte verb, byte noun, uint *actions) const { - if (command.room != IDI_NONE && command.room != _state.room) - return false; + takeItem(e.getNoun()); + return 0; +} - if (command.verb != IDI_NONE && command.verb != verb) - return false; +int AdlEngine::o1_dropItem(ScriptEnv &e) { + OP_DEBUG_0("\tDROP_ITEM()"); + + dropItem(e.getNoun()); + return 0; +} + +int AdlEngine::o1_setRoomPic(ScriptEnv &e) { + OP_DEBUG_2("\tSET_ROOM_PIC(%d, %d)", e.arg(1), e.arg(2)); - if (command.noun != IDI_NONE && command.noun != noun) + getRoom(e.arg(1)).picture = getRoom(e.arg(1)).curPicture = e.arg(2); + return 2; +} + +bool AdlEngine::matchCommand(ScriptEnv &env) const { + if (!env.isMatch() && !_dumpFile) return false; - uint offset = 0; - for (uint i = 0; i < command.numCond; ++i) { - switch (ARG(0)) { - case IDO_CND_ITEM_IN_ROOM: - if (getItem(ARG(1)).room != ARG(2)) - return false; - offset += 3; - break; - case IDO_CND_MOVES_GE: - if (ARG(1) > _state.moves) - return false; - offset += 2; - break; - case IDO_CND_VAR_EQ: - if (getVar(ARG(1)) != ARG(2)) - return false; - offset += 3; - break; - case IDO_CND_CUR_PIC_EQ: - if (getCurRoom().curPicture != ARG(1)) - return false; - offset += 2; - break; - case IDO_CND_ITEM_PIC_EQ: - if (getItem(ARG(1)).picture != ARG(2)) - return false; - offset += 3; - break; - default: - error("Invalid condition opcode %02x", command.script[offset]); - } + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) { + op_debug("IF\n\tROOM == %s", roomStr(env.getCommand().room).c_str()); + op_debug("\t&& SAID(%s, %s)", verbStr(env.getCommand().verb).c_str(), nounStr(env.getCommand().noun).c_str()); } - if (actions) - *actions = offset; + for (uint i = 0; i < env.getCondCount(); ++i) { + byte op = env.op(); + + if (op >= _condOpcodes.size() || !_condOpcodes[op] || !_condOpcodes[op]->isValid()) + error("Unimplemented condition opcode %02x", op); + + int numArgs = (*_condOpcodes[op])(env); + + if (numArgs < 0) { + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) + op_debug("FAIL\n"); + return false; + } + + env.skip(numArgs + 1); + } return true; } -void AdlEngine::doActions(const Command &command, byte noun, byte offset) { - for (uint i = 0; i < command.numAct; ++i) { - switch (ARG(0)) { - case IDO_ACT_VAR_ADD: - setVar(ARG(2), getVar(ARG(2) + ARG(1))); - offset += 3; - break; - case IDO_ACT_VAR_SUB: - setVar(ARG(2), getVar(ARG(2)) - ARG(1)); - offset += 3; - break; - case IDO_ACT_VAR_SET: - setVar(ARG(1), ARG(2)); - offset += 3; - break; - case IDO_ACT_LIST_ITEMS: { - Common::Array<Item>::const_iterator item; +void AdlEngine::doActions(ScriptEnv &env) { + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) + op_debug("THEN"); - for (item = _state.items.begin(); item != _state.items.end(); ++item) - if (item->room == IDI_NONE) - printMessage(item->description); + for (uint i = 0; i < env.getActCount(); ++i) { + byte op = env.op(); - ++offset; - break; - } - case IDO_ACT_MOVE_ITEM: - getItem(ARG(1)).room = ARG(2); - offset += 3; - break; - case IDO_ACT_SET_ROOM: - getCurRoom().curPicture = getCurRoom().picture; - _state.room = ARG(1); - offset += 2; - break; - case IDO_ACT_SET_CUR_PIC: - getCurRoom().curPicture = ARG(1); - offset += 2; - break; - case IDO_ACT_SET_PIC: - getCurRoom().picture = getCurRoom().curPicture = ARG(1); - offset += 2; - break; - case IDO_ACT_PRINT_MSG: - printMessage(ARG(1)); - offset += 2; - break; - case IDO_ACT_SET_LIGHT: - _state.isDark = false; - ++offset; - break; - case IDO_ACT_SET_DARK: - _state.isDark = true; - ++offset; - break; - case IDO_ACT_SAVE: - saveGameState(0, ""); - ++offset; - break; - case IDO_ACT_LOAD: - loadGameState(0); - ++offset; - // Original engine does not jump out of the loop, - // so we don't either. - // We reset the restore flag, as the restore game - // process is complete - _isRestoring = false; - break; - case IDO_ACT_RESTART: { - _display->printString(_strings.playAgain); - Common::String input = inputString(); - if (input.size() == 0 || input[0] != APPLECHAR('N')) { - _isRestarting = true; - _display->clear(0x00); - _display->updateHiResScreen(); - restartGame(); - return; - } - // Fall-through - } - case IDO_ACT_QUIT: - printMessage(_messageIds.thanksForPlaying); - quitGame(); - return; - case IDO_ACT_PLACE_ITEM: - getItem(ARG(1)).room = ARG(2); - getItem(ARG(1)).position.x = ARG(3); - getItem(ARG(1)).position.y = ARG(4); - offset += 5; - break; - case IDO_ACT_SET_ITEM_PIC: - getItem(ARG(2)).picture = ARG(1); - offset += 3; - break; - case IDO_ACT_RESET_PIC: - getCurRoom().curPicture = getCurRoom().picture; - ++offset; - break; - case IDO_ACT_GO_NORTH: - case IDO_ACT_GO_SOUTH: - case IDO_ACT_GO_EAST: - case IDO_ACT_GO_WEST: - case IDO_ACT_GO_UP: - case IDO_ACT_GO_DOWN: { - byte room = getCurRoom().connections[ARG(0) - IDO_ACT_GO_NORTH]; - - if (room == 0) { - printMessage(_messageIds.cantGoThere); - return; - } + if (op >= _actOpcodes.size() || !_actOpcodes[op] || !_actOpcodes[op]->isValid()) + error("Unimplemented action opcode %02x", op); + + int numArgs = (*_actOpcodes[op])(env); - getCurRoom().curPicture = getCurRoom().picture; - _state.room = room; + if (numArgs < 0) { + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) + op_debug("ABORT\n"); return; } - case IDO_ACT_TAKE_ITEM: - takeItem(noun); - ++offset; - break; - case IDO_ACT_DROP_ITEM: - dropItem(noun); - ++offset; - break; - case IDO_ACT_SET_ROOM_PIC: - getRoom(ARG(1)).picture = getRoom(ARG(1)).curPicture = ARG(2); - offset += 3; - break; - default: - error("Invalid action opcode %02x", ARG(0)); - } + + env.skip(numArgs + 1); } -} -#undef ARG + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript)) + op_debug("END\n"); +} bool AdlEngine::doOneCommand(const Commands &commands, byte verb, byte noun) { Commands::const_iterator cmd; for (cmd = commands.begin(); cmd != commands.end(); ++cmd) { - uint offset = 0; - if (matchCommand(*cmd, verb, noun, &offset)) { - doActions(*cmd, noun, offset); + + if (_skipOneCommand) { + _skipOneCommand = false; + continue; + } + + ScriptEnv env(*cmd, _state.room, verb, noun); + if (matchCommand(env)) { + doActions(env); return true; } } + _skipOneCommand = false; return false; } @@ -1029,10 +1230,87 @@ void AdlEngine::doAllCommands(const Commands &commands, byte verb, byte noun) { Commands::const_iterator cmd; for (cmd = commands.begin(); cmd != commands.end(); ++cmd) { - uint offset = 0; - if (matchCommand(*cmd, verb, noun, &offset)) - doActions(*cmd, noun, offset); + if (_skipOneCommand) { + _skipOneCommand = false; + continue; + } + + ScriptEnv env(*cmd, _state.room, verb, noun); + if (matchCommand(env)) { + doActions(env); + // The original long jumps on restart, so we need to abort here + if (_isRestarting) + return; + } + } + + _skipOneCommand = false; +} + +Common::String AdlEngine::toAscii(const Common::String &str) { + Common::String ascii = Console::toAscii(str); + if (ascii.lastChar() == '\r') + ascii.deleteLastChar(); + // FIXME: remove '\r's inside string? + return ascii; +} + +Common::String AdlEngine::itemStr(uint i) const { + byte desc = getItem(i).description; + byte noun = getItem(i).noun; + Common::String name = Common::String::format("%d", i); + if (noun > 0) { + name += "/"; + name += _priNouns[noun - 1]; + } + if (desc > 0) { + name += "/"; + name += toAscii(loadMessage(desc)); } + return name; +} + +Common::String AdlEngine::itemRoomStr(uint i) const { + switch (i) { + case IDI_ANY: + return "CARRYING"; + case IDI_VOID_ROOM: + return "GONE"; + case IDI_CUR_ROOM: + return "HERE"; + default: + return Common::String::format("%d", i); + } +} + +Common::String AdlEngine::roomStr(uint i) const { + if (i == IDI_ANY) + return "*"; + else + return Common::String::format("%d", i); +} + +Common::String AdlEngine::verbStr(uint i) const { + if (i == IDI_ANY) + return "*"; + else + return Common::String::format("%d/%s", i, _priVerbs[i - 1].c_str()); +} + +Common::String AdlEngine::nounStr(uint i) const { + if (i == IDI_ANY) + return "*"; + else + return Common::String::format("%d/%s", i, _priNouns[i - 1].c_str()); +} + +Common::String AdlEngine::msgStr(uint i) const { + return Common::String::format("%d/%s", i, toAscii(loadMessage(i)).c_str()); +} + +Common::String AdlEngine::dirStr(Direction dir) const { + static const char *dirs[] = { "NORTH", "SOUTH", "EAST", "WEST", "UP", "DOWN" }; + return dirs[dir]; } } // End of namespace Adl diff --git a/engines/adl/adl.h b/engines/adl/adl.h index 4ea7566669..c9d77fcc62 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -23,88 +23,125 @@ #ifndef ADL_ADL_H #define ADL_ADL_H +#include "common/debug-channels.h" #include "common/array.h" #include "common/rect.h" #include "common/str.h" +#include "common/hashmap.h" +#include "common/hash-str.h" +#include "common/func.h" +#include "common/scummsys.h" #include "engines/engine.h" +#include "audio/mixer.h" +#include "audio/softsynth/pcspk.h" + +#include "adl/console.h" +#include "adl/disk.h" + namespace Common { class ReadStream; class SeekableReadStream; +class File; +struct Event; } namespace Adl { +class Console; class Display; +class GraphicsMan; +class Speaker; struct AdlGameDescription; +class ScriptEnv; -// Conditional opcodes -#define IDO_CND_ITEM_IN_ROOM 0x03 -#define IDO_CND_MOVES_GE 0x05 -#define IDO_CND_VAR_EQ 0x06 -#define IDO_CND_CUR_PIC_EQ 0x09 -#define IDO_CND_ITEM_PIC_EQ 0x0a - -// Action opcodes -#define IDO_ACT_VAR_ADD 0x01 -#define IDO_ACT_VAR_SUB 0x02 -#define IDO_ACT_VAR_SET 0x03 -#define IDO_ACT_LIST_ITEMS 0x04 -#define IDO_ACT_MOVE_ITEM 0x05 -#define IDO_ACT_SET_ROOM 0x06 -#define IDO_ACT_SET_CUR_PIC 0x07 -#define IDO_ACT_SET_PIC 0x08 -#define IDO_ACT_PRINT_MSG 0x09 -#define IDO_ACT_SET_LIGHT 0x0a -#define IDO_ACT_SET_DARK 0x0b -#define IDO_ACT_QUIT 0x0d +enum kDebugChannels { + kDebugChannelScript = 1 << 0 +}; + +// Save and restore opcodes #define IDO_ACT_SAVE 0x0f #define IDO_ACT_LOAD 0x10 -#define IDO_ACT_RESTART 0x11 -#define IDO_ACT_PLACE_ITEM 0x12 -#define IDO_ACT_SET_ITEM_PIC 0x13 -#define IDO_ACT_RESET_PIC 0x14 -#define IDO_ACT_GO_NORTH 0x15 -#define IDO_ACT_GO_SOUTH 0x16 -#define IDO_ACT_GO_EAST 0x17 -#define IDO_ACT_GO_WEST 0x18 -#define IDO_ACT_GO_UP 0x19 -#define IDO_ACT_GO_DOWN 0x1a -#define IDO_ACT_TAKE_ITEM 0x1b -#define IDO_ACT_DROP_ITEM 0x1c -#define IDO_ACT_SET_ROOM_PIC 0x1d + +#define IDI_CUR_ROOM 0xfc +#define IDI_VOID_ROOM 0xfd +#define IDI_ANY 0xfe #define IDI_WORD_SIZE 8 +enum Direction { + IDI_DIR_NORTH, + IDI_DIR_SOUTH, + IDI_DIR_EAST, + IDI_DIR_WEST, + IDI_DIR_UP, + IDI_DIR_DOWN, + IDI_DIR_TOTAL +}; + struct Room { + Room() : + description(0), + picture(0), + curPicture(0) { + memset(connections, 0, sizeof(connections)); + } + byte description; - byte connections[6]; + byte connections[IDI_DIR_TOTAL]; + DataBlockPtr data; byte picture; byte curPicture; + bool isFirstTime; }; -struct Picture { - byte block; - uint16 offset; -}; +typedef Common::HashMap<byte, DataBlockPtr> PictureMap; + +typedef Common::Array<byte> Script; struct Command { byte room; byte verb, noun; byte numCond, numAct; - Common::Array<byte> script; + Script script; +}; + +class ScriptEnv { +public: + ScriptEnv(const Command &cmd, byte room, byte verb, byte noun) : + _cmd(cmd), _room(room), _verb(verb), _noun(noun), _ip(0) { } + + byte op() const { return _cmd.script[_ip]; } + // We keep this 1-based for easier comparison with the original engine + byte arg(uint i) const { return _cmd.script[_ip + i]; } + void skip(uint i) { _ip += i; } + + bool isMatch() const { + return (_cmd.room == IDI_ANY || _cmd.room == _room) && + (_cmd.verb == IDI_ANY || _cmd.verb == _verb) && + (_cmd.noun == IDI_ANY || _cmd.noun == _noun); + } + + byte getCondCount() const { return _cmd.numCond; } + byte getActCount() const { return _cmd.numAct; } + byte getNoun() const { return _noun; } + const Command &getCommand() const { return _cmd; } + +private: + const Command &_cmd; + const byte _room, _verb, _noun; + byte _ip; }; enum { IDI_ITEM_NOT_MOVED, - IDI_ITEM_MOVED, + IDI_ITEM_DROPPED, IDI_ITEM_DOESNT_MOVE }; -#define IDI_NONE 0xfe - struct Item { + byte id; byte noun; byte room; byte picture; @@ -113,67 +150,200 @@ struct Item { int state; byte description; Common::Array<byte> roomPictures; + bool isOnScreen; +}; + +struct Time { + byte hours, minutes; + + Time() : hours(12), minutes(0) { } }; struct State { Common::Array<Room> rooms; - Common::Array<Item> items; + Common::List<Item> items; Common::Array<byte> vars; byte room; uint16 moves; bool isDark; + Time time; - State() : room(1), moves(0), isDark(false) { } + State() : room(1), moves(1), isDark(false) { } }; typedef Common::List<Command> Commands; typedef Common::HashMap<Common::String, uint> WordMap; +struct RoomData { + Common::String description; + PictureMap pictures; + Commands commands; +}; + +// Opcode debugging macros +#define OP_DEBUG_0(F) do { \ + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript) && op_debug(F)) \ + return 0; \ +} while (0) + +#define OP_DEBUG_1(F, P1) do { \ + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript) && op_debug(F, P1)) \ + return 1; \ +} while (0) + +#define OP_DEBUG_2(F, P1, P2) do { \ + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript) && op_debug(F, P1, P2)) \ + return 2; \ +} while (0) + +#define OP_DEBUG_3(F, P1, P2, P3) do { \ + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript) && op_debug(F, P1, P2, P3)) \ + return 3; \ +} while (0) + +#define OP_DEBUG_4(F, P1, P2, P3, P4) do { \ + if (DebugMan.isDebugChannelEnabled(kDebugChannelScript) && op_debug(F, P1, P2, P3, P4)) \ + return 4; \ +} while (0) + class AdlEngine : public Engine { +friend class Console; public: virtual ~AdlEngine(); + bool pollEvent(Common::Event &event) const; + protected: AdlEngine(OSystem *syst, const AdlGameDescription *gd); + // Engine + Common::Error loadGameState(int slot); + Common::Error saveGameState(int slot, const Common::String &desc); + Common::String readString(Common::ReadStream &stream, byte until = 0) const; Common::String readStringAt(Common::SeekableReadStream &stream, uint offset, byte until = 0) const; + void openFile(Common::File &file, const Common::String &name) const; - virtual void printMessage(uint idx, bool wait = true) const; + virtual void printString(const Common::String &str) = 0; + virtual Common::String loadMessage(uint idx) const = 0; + virtual void printMessage(uint idx); + virtual Common::String getItemDescription(const Item &item) const; void delay(uint32 ms) const; Common::String inputString(byte prompt = 0) const; - byte inputKey() const; + byte inputKey(bool showCursor = true) const; - void loadWords(Common::ReadStream &stream, WordMap &map) const; + virtual Common::String formatVerbError(const Common::String &verb) const; + virtual Common::String formatNounError(const Common::String &verb, const Common::String &noun) const; + void loadWords(Common::ReadStream &stream, WordMap &map, Common::StringArray &pri) const; void readCommands(Common::ReadStream &stream, Commands &commands); + void checkInput(byte verb, byte noun); + virtual bool isInputValid(byte verb, byte noun, bool &is_any); + virtual bool isInputValid(const Commands &commands, byte verb, byte noun, bool &is_any); + + virtual void setupOpcodeTables(); + virtual void initState(); + virtual byte roomArg(byte room) const; + virtual void advanceClock() { } + + // Opcodes + int o1_isItemInRoom(ScriptEnv &e); + int o1_isMovesGT(ScriptEnv &e); + int o1_isVarEQ(ScriptEnv &e); + int o1_isCurPicEQ(ScriptEnv &e); + int o1_isItemPicEQ(ScriptEnv &e); + + int o1_varAdd(ScriptEnv &e); + int o1_varSub(ScriptEnv &e); + int o1_varSet(ScriptEnv &e); + int o1_listInv(ScriptEnv &e); + int o1_moveItem(ScriptEnv &e); + int o1_setRoom(ScriptEnv &e); + int o1_setCurPic(ScriptEnv &e); + int o1_setPic(ScriptEnv &e); + int o1_printMsg(ScriptEnv &e); + int o1_setLight(ScriptEnv &e); + int o1_setDark(ScriptEnv &e); + int o1_save(ScriptEnv &e); + int o1_restore(ScriptEnv &e); + int o1_restart(ScriptEnv &e); + int o1_quit(ScriptEnv &e); + int o1_placeItem(ScriptEnv &e); + int o1_setItemPic(ScriptEnv &e); + int o1_resetPic(ScriptEnv &e); + template <Direction D> + int o1_goDirection(ScriptEnv &e); + int o1_takeItem(ScriptEnv &e); + int o1_dropItem(ScriptEnv &e); + int o1_setRoomPic(ScriptEnv &e); + + // Graphics + void clearScreen() const; + void drawPic(byte pic, Common::Point pos = Common::Point()) const; + + // Sound + void bell(uint count = 1) const; + + // Game state functions + const Room &getRoom(uint i) const; + Room &getRoom(uint i); + const Room &getCurRoom() const; + Room &getCurRoom(); + const Item &getItem(uint i) const; + Item &getItem(uint i); + byte getVar(uint i) const; + void setVar(uint i, byte value); + virtual void takeItem(byte noun); + void dropItem(byte noun); + bool matchCommand(ScriptEnv &env) const; + void doActions(ScriptEnv &env); + bool doOneCommand(const Commands &commands, byte verb, byte noun); + void doAllCommands(const Commands &commands, byte verb, byte noun); + + // Debug functions + static Common::String toAscii(const Common::String &str); + Common::String itemStr(uint i) const; + Common::String roomStr(uint i) const; + Common::String itemRoomStr(uint i) const; + Common::String verbStr(uint i) const; + Common::String nounStr(uint i) const; + Common::String msgStr(uint i) const; + Common::String dirStr(Direction dir) const; + bool op_debug(const char *fmt, ...) const; + Common::DumpFile *_dumpFile; Display *_display; + GraphicsMan *_graphics; + Speaker *_speaker; + // Opcodes + typedef Common::Functor1<ScriptEnv &, int> Opcode; + Common::Array<const Opcode *> _condOpcodes, _actOpcodes; // Message strings in data file - Common::Array<Common::String> _messages; + Common::Array<DataBlockPtr> _messages; // Picture data - Common::Array<Picture> _pictures; + PictureMap _pictures; // Dropped item screen offsets Common::Array<Common::Point> _itemOffsets; - // Drawings consisting of horizontal and vertical lines only, but - // supporting scaling and rotation - Common::Array<Common::Array<byte> > _lineArt; // <room, verb, noun, script> lists Commands _roomCommands; Commands _globalCommands; + // Data related to the current room + RoomData _roomData; WordMap _verbs; WordMap _nouns; + Common::StringArray _priVerbs; + Common::StringArray _priNouns; struct { Common::String enterCommand; - Common::String dontHaveIt; - Common::String gettingDark; Common::String verbError; Common::String nounError; Common::String playAgain; + Common::String pressReturn; + Common::String lineFeeds; } _strings; struct { @@ -187,61 +357,37 @@ protected: // Game state State _state; + bool _isRestarting, _isRestoring; + bool _skipOneCommand; + private: virtual void runIntro() const { } - virtual void loadData() = 0; - virtual void initState() = 0; - virtual void restartGame() = 0; - virtual void drawPic(byte pic, Common::Point pos = Common::Point()) const = 0; + virtual void init() = 0; + virtual void initGameState() = 0; + virtual void drawItems() = 0; + virtual void drawItem(Item &item, const Common::Point &pos) = 0; + virtual void loadRoom(byte roomNr) = 0; + virtual void showRoom() = 0; // Engine Common::Error run(); bool hasFeature(EngineFeature f) const; - Common::Error loadGameState(int slot); bool canLoadGameStateCurrently(); - Common::Error saveGameState(int slot, const Common::String &desc); bool canSaveGameStateCurrently(); - // Text output - void wordWrap(Common::String &str) const; - // Text input byte convertKey(uint16 ascii) const; Common::String getLine() const; Common::String getWord(const Common::String &line, uint &index) const; void getInput(uint &verb, uint &noun); - // Graphics - void showRoom() const; - void clearScreen() const; - void drawItems() const; - void drawNextPixel(Common::Point &p, byte color, byte bits, byte quadrant) const; - void drawLineArt(const Common::Array<byte> &lineArt, const Common::Point &pos, byte rotation = 0, byte scaling = 1, byte color = 0x7f) const; - - // Game state functions - const Room &getRoom(uint i) const; - Room &getRoom(uint i); - const Room &getCurRoom() const; - Room &getCurRoom(); - const Item &getItem(uint i) const; - Item &getItem(uint i); - byte getVar(uint i) const; - void setVar(uint i, byte value); - void takeItem(byte noun); - void dropItem(byte noun); - bool matchCommand(const Command &command, byte verb, byte noun, uint *actions = nullptr) const; - void doActions(const Command &command, byte noun, byte offset); - bool doOneCommand(const Commands &commands, byte verb, byte noun); - void doAllCommands(const Commands &commands, byte verb, byte noun); - + Console *_console; + GUI::Debugger *getDebugger() { return _console; } const AdlGameDescription *_gameDescription; - bool _isRestarting, _isRestoring; byte _saveVerb, _saveNoun, _restoreVerb, _restoreNoun; bool _canSaveNow, _canRestoreNow; }; -AdlEngine *HiRes1Engine__create(OSystem *syst, const AdlGameDescription *gd); - } // End of namespace Adl #endif diff --git a/engines/adl/adl_v2.cpp b/engines/adl/adl_v2.cpp new file mode 100644 index 0000000000..4fdf796701 --- /dev/null +++ b/engines/adl/adl_v2.cpp @@ -0,0 +1,539 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/random.h" +#include "common/error.h" + +#include "adl/adl_v2.h" +#include "adl/display.h" +#include "adl/graphics.h" + +namespace Adl { + +AdlEngine_v2::~AdlEngine_v2() { + delete _random; + delete _disk; +} + +AdlEngine_v2::AdlEngine_v2(OSystem *syst, const AdlGameDescription *gd) : + AdlEngine(syst, gd), + _linesPrinted(0), + _disk(nullptr), + _itemRemoved(false), + _roomOnScreen(0), + _picOnScreen(0), + _itemsOnScreen(0) { + _random = new Common::RandomSource("adl"); +} + +typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine_v2> OpcodeV2; +#define SetOpcodeTable(x) table = &x; +#define Opcode(x) table->push_back(new OpcodeV2(this, &AdlEngine_v2::x)) +#define OpcodeUnImpl() table->push_back(new OpcodeV2(this, 0)) + +void AdlEngine_v2::setupOpcodeTables() { + Common::Array<const Opcode *> *table = 0; + + SetOpcodeTable(_condOpcodes); + // 0x00 + OpcodeUnImpl(); + Opcode(o2_isFirstTime); + Opcode(o2_isRandomGT); + Opcode(o1_isItemInRoom); + // 0x04 + Opcode(o2_isNounNotInRoom); + Opcode(o1_isMovesGT); + Opcode(o1_isVarEQ); + Opcode(o2_isCarryingSomething); + // 0x08 + OpcodeUnImpl(); + Opcode(o1_isCurPicEQ); + Opcode(o1_isItemPicEQ); + + SetOpcodeTable(_actOpcodes); + // 0x00 + OpcodeUnImpl(); + Opcode(o1_varAdd); + Opcode(o1_varSub); + Opcode(o1_varSet); + // 0x04 + Opcode(o1_listInv); + Opcode(o2_moveItem); + Opcode(o1_setRoom); + Opcode(o1_setCurPic); + // 0x08 + Opcode(o1_setPic); + Opcode(o1_printMsg); + Opcode(o1_setLight); + Opcode(o1_setDark); + // 0x0c + Opcode(o2_moveAllItems); + Opcode(o1_quit); + OpcodeUnImpl(); + Opcode(o2_save); + // 0x10 + Opcode(o2_restore); + Opcode(o1_restart); + Opcode(o2_placeItem); + Opcode(o1_setItemPic); + // 0x14 + Opcode(o1_resetPic); + Opcode(o1_goDirection<IDI_DIR_NORTH>); + Opcode(o1_goDirection<IDI_DIR_SOUTH>); + Opcode(o1_goDirection<IDI_DIR_EAST>); + // 0x18 + Opcode(o1_goDirection<IDI_DIR_WEST>); + Opcode(o1_goDirection<IDI_DIR_UP>); + Opcode(o1_goDirection<IDI_DIR_DOWN>); + Opcode(o1_takeItem); + // 0x1c + Opcode(o1_dropItem); + Opcode(o1_setRoomPic); + Opcode(o2_tellTime); + Opcode(o2_setRoomFromVar); + // 0x20 + Opcode(o2_initDisk); +} + +void AdlEngine_v2::initState() { + AdlEngine::initState(); + + _linesPrinted = 0; + _picOnScreen = 0; + _roomOnScreen = 0; + _itemRemoved = false; + _itemsOnScreen = 0; +} + +byte AdlEngine_v2::roomArg(byte room) const { + if (room == IDI_CUR_ROOM) + return _state.room; + return room; +} + +void AdlEngine_v2::advanceClock() { + Time &time = _state.time; + + time.minutes += 5; + + if (time.minutes == 60) { + time.minutes = 0; + + ++time.hours; + + if (time.hours == 13) + time.hours = 1; + } +} + +void AdlEngine_v2::checkTextOverflow(char c) { + if (c != APPLECHAR('\r')) + return; + + ++_linesPrinted; + + if (_linesPrinted < 4) + return; + + _linesPrinted = 0; + _display->updateTextScreen(); + bell(); + + while (true) { + char key = inputKey(false); + + if (shouldQuit()) + return; + + if (key == APPLECHAR('\r')) + break; + + bell(3); + } +} + +Common::String AdlEngine_v2::loadMessage(uint idx) const { + if (_messages[idx]) { + StreamPtr strStream(_messages[idx]->createReadStream()); + return readString(*strStream, 0xff); + } + + return Common::String(); +} + +void AdlEngine_v2::printString(const Common::String &str) { + Common::String s(str); + byte endPos = TEXT_WIDTH - 1; + byte pos = 0; + + while (true) { + while (pos <= endPos && pos != s.size()) { + s.setChar(APPLECHAR(s[pos]), pos); + ++pos; + } + + if (pos == s.size()) + break; + + while (s[pos] != APPLECHAR(' ') && s[pos] != APPLECHAR('\r')) + --pos; + + s.setChar(APPLECHAR('\r'), pos); + endPos = pos + TEXT_WIDTH; + ++pos; + } + + pos = 0; + while (pos != s.size()) { + checkTextOverflow(s[pos]); + _display->printChar(s[pos]); + ++pos; + } + + checkTextOverflow(APPLECHAR('\r')); + _display->printChar(APPLECHAR('\r')); + _display->updateTextScreen(); +} + +void AdlEngine_v2::drawItem(Item &item, const Common::Point &pos) { + item.isOnScreen = true; + StreamPtr stream(_itemPics[item.picture - 1]->createReadStream()); + stream->readByte(); // Skip clear opcode + _graphics->drawPic(*stream, pos); +} + +void AdlEngine_v2::loadRoom(byte roomNr) { + Room &room = getRoom(roomNr); + StreamPtr stream(room.data->createReadStream()); + + uint16 descOffset = stream->readUint16LE(); + uint16 commandOffset = stream->readUint16LE(); + + _roomData.pictures.clear(); + // There's no picture count. The original engine always checks at most + // five pictures. We use the description offset to bound our search. + uint16 picCount = (descOffset - 4) / 5; + + for (uint i = 0; i < picCount; ++i) { + byte nr = stream->readByte(); + _roomData.pictures[nr] = readDataBlockPtr(*stream); + } + + _roomData.description = readStringAt(*stream, descOffset, 0xff); + + _roomData.commands.clear(); + if (commandOffset != 0) { + stream->seek(commandOffset); + readCommands(*stream, _roomData.commands); + } +} + +void AdlEngine_v2::showRoom() { + bool redrawPic = false; + + if (_state.room != _roomOnScreen) { + loadRoom(_state.room); + clearScreen(); + + if (!_state.isDark) + redrawPic = true; + } else { + if (getCurRoom().curPicture != _picOnScreen || _itemRemoved) + redrawPic = true; + } + + if (redrawPic) { + _roomOnScreen = _state.room; + _picOnScreen = getCurRoom().curPicture; + + drawPic(getCurRoom().curPicture); + _itemRemoved = false; + _itemsOnScreen = 0; + + Common::List<Item>::iterator item; + for (item = _state.items.begin(); item != _state.items.end(); ++item) + item->isOnScreen = false; + } + + if (!_state.isDark) + drawItems(); + + _display->updateHiResScreen(); + printString(_roomData.description); + + // FIXME: move to main loop? + _linesPrinted = 0; +} + +void AdlEngine_v2::takeItem(byte noun) { + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + if (item->noun != noun || item->room != _state.room) + continue; + + if (item->state == IDI_ITEM_DOESNT_MOVE) { + printMessage(_messageIds.itemDoesntMove); + return; + } + + if (item->state == IDI_ITEM_DROPPED) { + item->room = IDI_ANY; + _itemRemoved = true; + return; + } + + Common::Array<byte>::const_iterator pic; + for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { + if (*pic == getCurRoom().curPicture || *pic == IDI_ANY) { + item->room = IDI_ANY; + _itemRemoved = true; + item->state = IDI_ITEM_DROPPED; + return; + } + } + } + + printMessage(_messageIds.itemNotHere); +} + +void AdlEngine_v2::drawItems() { + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + // Skip items not in this room + if (item->room != _state.room) + continue; + + if (item->isOnScreen) + continue; + + if (item->state == IDI_ITEM_DROPPED) { + // Draw dropped item if in normal view + if (getCurRoom().picture == getCurRoom().curPicture) + drawItem(*item, _itemOffsets[_itemsOnScreen++]); + } else { + // Draw fixed item if current view is in the pic list + Common::Array<byte>::const_iterator pic; + + for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { + if (*pic == getCurRoom().curPicture || *pic == IDI_ANY) { + drawItem(*item, item->position); + break; + } + } + } + } +} + +DataBlockPtr AdlEngine_v2::readDataBlockPtr(Common::ReadStream &f) const { + byte track = f.readByte(); + byte sector = f.readByte(); + byte offset = f.readByte(); + byte size = f.readByte(); + + if (f.eos() || f.err()) + error("Error reading DataBlockPtr"); + + if (track == 0 && sector == 0 && offset == 0 && size == 0) + return DataBlockPtr(); + + return _disk->getDataBlock(track, sector, offset, size); +} + +int AdlEngine_v2::o2_isFirstTime(ScriptEnv &e) { + OP_DEBUG_0("\t&& IS_FIRST_TIME()"); + + bool oldFlag = getCurRoom().isFirstTime; + + getCurRoom().isFirstTime = false; + + if (!oldFlag) + return -1; + + return 0; +} + +int AdlEngine_v2::o2_isRandomGT(ScriptEnv &e) { + OP_DEBUG_1("\t&& RAND() > %d", e.arg(1)); + + byte rnd = _random->getRandomNumber(255); + + if (rnd > e.arg(1)) + return 1; + + return -1; +} + +int AdlEngine_v2::o2_isNounNotInRoom(ScriptEnv &e) { + OP_DEBUG_1("\t&& NO_SUCH_ITEMS_IN_ROOM(%s)", itemRoomStr(e.arg(1)).c_str()); + + Common::List<Item>::const_iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->noun == e.getNoun() && (item->room == roomArg(e.arg(1)))) + return -1; + + return 1; +} + +int AdlEngine_v2::o2_isCarryingSomething(ScriptEnv &e) { + OP_DEBUG_0("\t&& IS_CARRYING_SOMETHING()"); + + Common::List<Item>::const_iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->room == IDI_ANY) + return 0; + return -1; +} + +int AdlEngine_v2::o2_moveItem(ScriptEnv &e) { + OP_DEBUG_2("\tSET_ITEM_ROOM(%s, %s)", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); + + byte room = roomArg(e.arg(2)); + + Item &item = getItem(e.arg(1)); + + if (item.room == _roomOnScreen) + _picOnScreen = 0; + + // Set items that move from inventory to a room to state "dropped" + if (item.room == IDI_ANY && room != IDI_VOID_ROOM) + item.state = IDI_ITEM_DROPPED; + + item.room = room; + return 2; +} + +int AdlEngine_v2::o2_moveAllItems(ScriptEnv &e) { + OP_DEBUG_2("\tMOVE_ALL_ITEMS(%s, %s)", itemRoomStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); + + byte room1 = roomArg(e.arg(1)); + + if (room1 == _state.room) + _picOnScreen = 0; + + byte room2 = roomArg(e.arg(2)); + + Common::List<Item>::iterator item; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->room == room1) { + item->room = room2; + if (room1 == IDI_ANY) + item->state = IDI_ITEM_DROPPED; + } + + return 2; +} + +int AdlEngine_v2::o2_save(ScriptEnv &e) { + OP_DEBUG_0("\tSAVE_GAME()"); + + int slot = askForSlot(_strings_v2.saveInsert); + + if (slot < 0) + return -1; + + saveGameState(slot, ""); + + _display->printString(_strings_v2.saveReplace); + inputString(); + return 0; +} + +int AdlEngine_v2::o2_restore(ScriptEnv &e) { + OP_DEBUG_0("\tRESTORE_GAME()"); + + int slot = askForSlot(_strings_v2.restoreInsert); + + if (slot < 0) + return -1; + + loadGameState(slot); + _isRestoring = false; + + _display->printString(_strings_v2.restoreReplace); + inputString(); + _picOnScreen = 0; + _roomOnScreen = 0; + return 0; +} + +int AdlEngine_v2::o2_placeItem(ScriptEnv &e) { + OP_DEBUG_4("\tPLACE_ITEM(%s, %s, (%d, %d))", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str(), e.arg(3), e.arg(4)); + + Item &item = getItem(e.arg(1)); + + item.room = roomArg(e.arg(2)); + item.position.x = e.arg(3); + item.position.y = e.arg(4); + item.state = IDI_ITEM_NOT_MOVED; + + return 4; +} + +int AdlEngine_v2::o2_tellTime(ScriptEnv &e) { + OP_DEBUG_0("\tTELL_TIME()"); + + Common::String time = _strings_v2.time; + + time.setChar(APPLECHAR('0') + _state.time.hours / 10, 12); + time.setChar(APPLECHAR('0') + _state.time.hours % 10, 13); + time.setChar(APPLECHAR('0') + _state.time.minutes / 10, 15); + time.setChar(APPLECHAR('0') + _state.time.minutes % 10, 16); + + printString(time); + + return 0; +} + +int AdlEngine_v2::o2_setRoomFromVar(ScriptEnv &e) { + OP_DEBUG_1("\tROOM = VAR[%d]", e.arg(1)); + getCurRoom().curPicture = getCurRoom().picture; + _state.room = getVar(e.arg(1)); + return 1; +} + +int AdlEngine_v2::o2_initDisk(ScriptEnv &e) { + OP_DEBUG_0("\tINIT_DISK()"); + + _display->printAsciiString("NOT REQUIRED\r"); + return 0; +} + +int AdlEngine_v2::askForSlot(const Common::String &question) { + while (1) { + _display->printString(question); + + Common::String input = inputString(); + + if (shouldQuit()) + return -1; + + if (input.size() > 0 && input[0] >= APPLECHAR('A') && input[0] <= APPLECHAR('O')) + return input[0] - APPLECHAR('A'); + } +} + +} // End of namespace Adl diff --git a/engines/adl/adl_v2.h b/engines/adl/adl_v2.h new file mode 100644 index 0000000000..f18972b74b --- /dev/null +++ b/engines/adl/adl_v2.h @@ -0,0 +1,95 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_ADL_V2_H +#define ADL_ADL_V2_H + +#include "adl/adl.h" + +// Note: this version of ADL redraws only when necessary, but +// this is not currently implemented. + +namespace Common { +class RandomSource; +} + +namespace Adl { + +class AdlEngine_v2 : public AdlEngine { +public: + virtual ~AdlEngine_v2(); + +protected: + AdlEngine_v2(OSystem *syst, const AdlGameDescription *gd); + + // AdlEngine + virtual void setupOpcodeTables(); + virtual void initState(); + byte roomArg(byte room) const; + void advanceClock(); + virtual void printString(const Common::String &str); + virtual Common::String loadMessage(uint idx) const; + void drawItems(); + void drawItem(Item &item, const Common::Point &pos); + void loadRoom(byte roomNr); + virtual void showRoom(); + void takeItem(byte noun); + + virtual DataBlockPtr readDataBlockPtr(Common::ReadStream &f) const; + + void checkTextOverflow(char c); + + int o2_isFirstTime(ScriptEnv &e); + int o2_isRandomGT(ScriptEnv &e); + int o2_isNounNotInRoom(ScriptEnv &e); + int o2_isCarryingSomething(ScriptEnv &e); + + int o2_moveItem(ScriptEnv &e); + int o2_moveAllItems(ScriptEnv &e); + int o2_save(ScriptEnv &e); + int o2_restore(ScriptEnv &e); + int o2_placeItem(ScriptEnv &e); + int o2_tellTime(ScriptEnv &e); + int o2_setRoomFromVar(ScriptEnv &e); + int o2_initDisk(ScriptEnv &e); + + struct { + Common::String time; + Common::String saveInsert, saveReplace; + Common::String restoreInsert, restoreReplace; + } _strings_v2; + + uint _linesPrinted; + DiskImage *_disk; + Common::Array<DataBlockPtr> _itemPics; + bool _itemRemoved; + byte _roomOnScreen, _picOnScreen, _itemsOnScreen; + +private: + int askForSlot(const Common::String &question); + + Common::RandomSource *_random; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/adl_v3.cpp b/engines/adl/adl_v3.cpp new file mode 100644 index 0000000000..623db661bc --- /dev/null +++ b/engines/adl/adl_v3.cpp @@ -0,0 +1,259 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/random.h" +#include "common/error.h" + +#include "adl/adl_v3.h" +#include "adl/display.h" +#include "adl/graphics.h" + +namespace Adl { + +AdlEngine_v3::AdlEngine_v3(OSystem *syst, const AdlGameDescription *gd) : + AdlEngine_v2(syst, gd), + _curDisk(0) { +} + +Common::String AdlEngine_v3::loadMessage(uint idx) const { + Common::String str = AdlEngine_v2::loadMessage(idx); + + for (uint i = 0; i < str.size(); ++i) { + const char *xorStr = "AVISDURGAN"; + str.setChar(str[i] ^ xorStr[i % strlen(xorStr)], i); + } + + return str; +} + +Common::String AdlEngine_v3::getItemDescription(const Item &item) const { + return _itemDesc[item.id - 1]; +} + +void AdlEngine_v3::applyDiskOffset(byte &track, byte §or) const { + sector += _diskOffsets[_curDisk].sector; + if (sector >= 16) { + sector -= 16; + ++track; + } + + track += _diskOffsets[_curDisk].track; +} + +DataBlockPtr AdlEngine_v3::readDataBlockPtr(Common::ReadStream &f) const { + byte track = f.readByte(); + byte sector = f.readByte(); + byte offset = f.readByte(); + byte size = f.readByte(); + + if (f.eos() || f.err()) + error("Error reading DataBlockPtr"); + + if (track == 0 && sector == 0 && offset == 0 && size == 0) + return DataBlockPtr(); + + applyDiskOffset(track, sector); + + return _disk->getDataBlock(track, sector, offset, size); +} + +typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine_v3> OpcodeV3; +#define SetOpcodeTable(x) table = &x; +#define Opcode(x) table->push_back(new OpcodeV3(this, &AdlEngine_v3::x)) +#define OpcodeUnImpl() table->push_back(new OpcodeV3(this, 0)) + +void AdlEngine_v3::setupOpcodeTables() { + Common::Array<const Opcode *> *table = 0; + + SetOpcodeTable(_condOpcodes); + // 0x00 + OpcodeUnImpl(); + Opcode(o2_isFirstTime); + Opcode(o2_isRandomGT); + Opcode(o3_isItemInRoom); + // 0x04 + Opcode(o3_isNounNotInRoom); + Opcode(o1_isMovesGT); + Opcode(o1_isVarEQ); + Opcode(o2_isCarryingSomething); + // 0x08 + Opcode(o3_isVarGT); + Opcode(o1_isCurPicEQ); + Opcode(o3_skipOneCommand); + + SetOpcodeTable(_actOpcodes); + // 0x00 + OpcodeUnImpl(); + Opcode(o1_varAdd); + Opcode(o1_varSub); + Opcode(o1_varSet); + // 0x04 + Opcode(o1_listInv); + Opcode(o3_moveItem); + Opcode(o1_setRoom); + Opcode(o1_setCurPic); + // 0x08 + Opcode(o1_setPic); + Opcode(o1_printMsg); + Opcode(o3_dummy); + Opcode(o3_setTextMode); + // 0x0c + Opcode(o2_moveAllItems); + Opcode(o1_quit); + Opcode(o3_dummy); + Opcode(o2_save); + // 0x10 + Opcode(o2_restore); + Opcode(o1_restart); + Opcode(o3_setDisk); + Opcode(o3_dummy); + // 0x14 + Opcode(o1_resetPic); + Opcode(o1_goDirection<IDI_DIR_NORTH>); + Opcode(o1_goDirection<IDI_DIR_SOUTH>); + Opcode(o1_goDirection<IDI_DIR_EAST>); + // 0x18 + Opcode(o1_goDirection<IDI_DIR_WEST>); + Opcode(o1_goDirection<IDI_DIR_UP>); + Opcode(o1_goDirection<IDI_DIR_DOWN>); + Opcode(o1_takeItem); + // 0x1c + Opcode(o1_dropItem); + Opcode(o1_setRoomPic); + Opcode(o3_sound); + OpcodeUnImpl(); + // 0x20 + Opcode(o2_initDisk); +} + +int AdlEngine_v3::o3_isVarGT(ScriptEnv &e) { + OP_DEBUG_2("\t&& VARS[%d] > %d", e.arg(1), e.arg(2)); + + if (getVar(e.arg(1)) > e.arg(2)) + return 2; + + return -1; +} + +int AdlEngine_v3::o3_skipOneCommand(ScriptEnv &e) { + OP_DEBUG_0("\t&& SKIP_ONE_COMMAND()"); + + _skipOneCommand = true; + setVar(2, 0); + + return -1; +} + +// FIXME: Rename "isLineArt" and look at code duplication +int AdlEngine_v3::o3_isItemInRoom(ScriptEnv &e) { + OP_DEBUG_2("\t&& GET_ITEM_ROOM(%s) == %s", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); + + const Item &item = getItem(e.arg(1)); + + if (e.arg(2) != IDI_ANY && item.isLineArt != _curDisk) + return -1; + + if (item.room == roomArg(e.arg(2))) + return 2; + + return -1; +} + +int AdlEngine_v3::o3_isNounNotInRoom(ScriptEnv &e) { + OP_DEBUG_1("\t&& NO_SUCH_ITEMS_IN_ROOM(%s)", itemRoomStr(e.arg(1)).c_str()); + + Common::List<Item>::const_iterator item; + + setVar(24, 0); + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->noun == e.getNoun()) { + setVar(24, 1); + + if (item->room == roomArg(e.arg(1))) + return -1; + } + + return 1; +} + +int AdlEngine_v3::o3_moveItem(ScriptEnv &e) { + OP_DEBUG_2("\tSET_ITEM_ROOM(%s, %s)", itemStr(e.arg(1)).c_str(), itemRoomStr(e.arg(2)).c_str()); + + byte room = roomArg(e.arg(2)); + + Item &item = getItem(e.arg(1)); + + if (item.room == _roomOnScreen) + _picOnScreen = 0; + + // Set items that move from inventory to a room to state "dropped" + if (item.room == IDI_ANY && room != IDI_VOID_ROOM) + item.state = IDI_ITEM_DROPPED; + + item.room = room; + item.isLineArt = _curDisk; + return 2; +} + +int AdlEngine_v3::o3_dummy(ScriptEnv &e) { + OP_DEBUG_0("\tDUMMY()"); + + return 0; +} + +int AdlEngine_v3::o3_setTextMode(ScriptEnv &e) { + OP_DEBUG_1("\tSET_TEXT_MODE(%d)", e.arg(1)); + + // TODO + // 1: 4-line mode + // 2: 24-line mode + + switch (e.arg(1)) { + case 3: + // We re-use the restarting flag here, to simulate a long jump + _isRestarting = true; + return -1; + } + + return 1; +} + +int AdlEngine_v3::o3_setDisk(ScriptEnv &e) { + OP_DEBUG_2("\tSET_DISK(%d, %d)", e.arg(1), e.arg(2)); + + // TODO + // Arg 1: disk + // Arg 2: room + + return 2; +} + +int AdlEngine_v3::o3_sound(ScriptEnv &e) { + OP_DEBUG_0("\tSOUND()"); + + // TODO + + return 0; +} + +} // End of namespace Adl diff --git a/engines/adl/adl_v3.h b/engines/adl/adl_v3.h new file mode 100644 index 0000000000..61dd5852e7 --- /dev/null +++ b/engines/adl/adl_v3.h @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_ADL_V3_H +#define ADL_ADL_V3_H + +#include "adl/adl_v2.h" + +// Note: this version of ADL redraws only when necessary, but +// this is not currently implemented. + +namespace Common { +class RandomSource; +} + +struct DiskOffset { + byte track; + byte sector; +}; + +namespace Adl { + +class AdlEngine_v3 : public AdlEngine_v2 { +public: + virtual ~AdlEngine_v3() { } + +protected: + AdlEngine_v3(OSystem *syst, const AdlGameDescription *gd); + + // AdlEngine + virtual void setupOpcodeTables(); + virtual Common::String loadMessage(uint idx) const; + Common::String getItemDescription(const Item &item) const; + + // AdlEngine_v2 + virtual DataBlockPtr readDataBlockPtr(Common::ReadStream &f) const; + + void applyDiskOffset(byte &track, byte §or) const; + + int o3_isVarGT(ScriptEnv &e); + int o3_isItemInRoom(ScriptEnv &e); + int o3_isNounNotInRoom(ScriptEnv &e); + int o3_skipOneCommand(ScriptEnv &e); + int o3_moveItem(ScriptEnv &e); + int o3_dummy(ScriptEnv &e); + int o3_setTextMode(ScriptEnv &e); + int o3_setDisk(ScriptEnv &e); + int o3_sound(ScriptEnv &e); + + Common::Array<Common::String> _itemDesc; + byte _curDisk; + Common::Array<DiskOffset> _diskOffsets; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/console.cpp b/engines/adl/console.cpp new file mode 100644 index 0000000000..c35e8b02aa --- /dev/null +++ b/engines/adl/console.cpp @@ -0,0 +1,333 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/debug-channels.h" + +#include "adl/console.h" +#include "adl/display.h" +#include "adl/adl.h" + +namespace Adl { + +Console::Console(AdlEngine *engine) : GUI::Debugger() { + _engine = engine; + + registerCmd("nouns", WRAP_METHOD(Console, Cmd_Nouns)); + registerCmd("verbs", WRAP_METHOD(Console, Cmd_Verbs)); + registerCmd("dump_scripts", WRAP_METHOD(Console, Cmd_DumpScripts)); + registerCmd("valid_cmds", WRAP_METHOD(Console, Cmd_ValidCommands)); + registerCmd("room", WRAP_METHOD(Console, Cmd_Room)); + registerCmd("items", WRAP_METHOD(Console, Cmd_Items)); + registerCmd("give_item", WRAP_METHOD(Console, Cmd_GiveItem)); + registerCmd("vars", WRAP_METHOD(Console, Cmd_Vars)); + registerCmd("var", WRAP_METHOD(Console, Cmd_Var)); +} + +Common::String Console::toAscii(const Common::String &str) { + Common::String ascii(str); + + for (uint i = 0; i < ascii.size(); ++i) + ascii.setChar(ascii[i] & 0x7f, i); + + return ascii; +} + +Common::String Console::toAppleWord(const Common::String &str) { + Common::String apple(str); + + if (apple.size() > IDI_WORD_SIZE) + apple.erase(IDI_WORD_SIZE); + apple.toUppercase(); + + for (uint i = 0; i < apple.size(); ++i) + apple.setChar(APPLECHAR(apple[i]), i); + + while (apple.size() < IDI_WORD_SIZE) + apple += APPLECHAR(' '); + + return apple; +} + +bool Console::Cmd_Verbs(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + debugPrintf("Verbs in alphabetical order:\n"); + printWordMap(_engine->_verbs); + return true; +} + +bool Console::Cmd_Nouns(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + debugPrintf("Nouns in alphabetical order:\n"); + printWordMap(_engine->_nouns); + return true; +} + +bool Console::Cmd_ValidCommands(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + WordMap::const_iterator verb, noun; + bool is_any; + + for (verb = _engine->_verbs.begin(); verb != _engine->_verbs.end(); ++verb) { + for (noun = _engine->_nouns.begin(); noun != _engine->_nouns.end(); ++noun) { + if (_engine->isInputValid(verb->_value, noun->_value, is_any) && !is_any) + debugPrintf("%s %s\n", toAscii(verb->_key).c_str(), toAscii(noun->_key).c_str()); + } + if (_engine->isInputValid(verb->_value, IDI_ANY, is_any)) + debugPrintf("%s *\n", toAscii(verb->_key).c_str()); + } + if (_engine->isInputValid(IDI_ANY, IDI_ANY, is_any)) + debugPrintf("* *\n"); + + return true; +} + +bool Console::Cmd_DumpScripts(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + bool oldFlag = DebugMan.isDebugChannelEnabled(kDebugChannelScript); + + DebugMan.enableDebugChannel("Script"); + + _engine->_dumpFile = new Common::DumpFile(); + + for (byte roomNr = 1; roomNr <= _engine->_state.rooms.size(); ++roomNr) { + _engine->loadRoom(roomNr); + if (_engine->_roomData.commands.size() != 0) { + _engine->_dumpFile->open(Common::String::format("%03d.ADL", roomNr).c_str()); + _engine->doAllCommands(_engine->_roomData.commands, IDI_ANY, IDI_ANY); + _engine->_dumpFile->close(); + } + } + _engine->loadRoom(_engine->_state.room); + + _engine->_dumpFile->open("GLOBAL.ADL"); + _engine->doAllCommands(_engine->_globalCommands, IDI_ANY, IDI_ANY); + _engine->_dumpFile->close(); + + _engine->_dumpFile->open("RESPONSE.ADL"); + _engine->doAllCommands(_engine->_roomCommands, IDI_ANY, IDI_ANY); + _engine->_dumpFile->close(); + + delete _engine->_dumpFile; + _engine->_dumpFile = nullptr; + + if (!oldFlag) + DebugMan.disableDebugChannel("Script"); + + return true; +} + +bool Console::Cmd_Room(int argc, const char **argv) { + if (argc > 2) { + debugPrintf("Usage: %s [<new_room>]\n", argv[0]); + return true; + } + + if (argc == 2) { + if (!_engine->_canRestoreNow) { + debugPrintf("Cannot change rooms right now\n"); + return true; + } + + uint roomCount = _engine->_state.rooms.size(); + uint room = strtoul(argv[1], NULL, 0); + if (room < 1 || room > roomCount) { + debugPrintf("Room %u out of valid range [1, %u]\n", room, roomCount); + return true; + } + + _engine->_state.room = room; + _engine->clearScreen(); + _engine->loadRoom(_engine->_state.room); + _engine->showRoom(); + _engine->_display->updateTextScreen(); + _engine->_display->updateHiResScreen(); + } + + debugPrintf("Current room: %u\n", _engine->_state.room); + + return true; +} + +bool Console::Cmd_Items(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + Common::List<Item>::const_iterator item; + + for (item = _engine->_state.items.begin(); item != _engine->_state.items.end(); ++item) + printItem(*item); + + return true; +} + +bool Console::Cmd_GiveItem(int argc, const char **argv) { + if (argc != 2) { + debugPrintf("Usage: %s <ID | name>\n", argv[0]); + return true; + } + + Common::List<Item>::iterator item; + + char *end; + uint id = strtoul(argv[1], &end, 0); + + if (*end != 0) { + Common::Array<Item *> matches; + + Common::String name = toAppleWord(argv[1]); + + if (!_engine->_nouns.contains(name)) { + debugPrintf("Item '%s' not found\n", argv[1]); + return true; + } + + byte noun = _engine->_nouns[name]; + + for (item = _engine->_state.items.begin(); item != _engine->_state.items.end(); ++item) { + if (item->noun == noun) + matches.push_back(&*item); + } + + if (matches.size() == 0) { + debugPrintf("Item '%s' not found\n", argv[1]); + return true; + } + + if (matches.size() > 1) { + debugPrintf("Multiple matches found, please use item ID:\n"); + for (uint i = 0; i < matches.size(); ++i) + printItem(*matches[i]); + return true; + } + + matches[0]->room = IDI_ANY; + debugPrintf("OK\n"); + return true; + } + + for (item = _engine->_state.items.begin(); item != _engine->_state.items.end(); ++item) + if (item->id == id) { + item->room = IDI_ANY; + debugPrintf("OK\n"); + return true; + } + + debugPrintf("Item %i not found\n", id); + return true; +} + +bool Console::Cmd_Vars(int argc, const char **argv) { + if (argc != 1) { + debugPrintf("Usage: %s\n", argv[0]); + return true; + } + + Common::StringArray vars; + for (uint i = 0; i < _engine->_state.vars.size(); ++i) + vars.push_back(Common::String::format("%3d: %3d", i, _engine->_state.vars[i])); + + debugPrintf("Variables:\n"); + debugPrintColumns(vars); + + return true; +} + +bool Console::Cmd_Var(int argc, const char **argv) { + if (argc < 2 || argc > 3) { + debugPrintf("Usage: %s <index> [<value>]\n", argv[0]); + return true; + } + + uint varCount = _engine->_state.vars.size(); + uint var = strtoul(argv[1], NULL, 0); + + if (var >= varCount) { + debugPrintf("Variable %u out of valid range [0, %u]\n", var, varCount - 1); + return true; + } + + if (argc == 3) { + uint value = strtoul(argv[2], NULL, 0); + _engine->_state.vars[var] = value; + } + + debugPrintf("%3d: %3d\n", var, _engine->_state.vars[var]); + + return true; +} + +void Console::printItem(const Item &item) { + Common::String name, desc, state; + + if (item.noun > 0) + name = _engine->_priNouns[item.noun - 1]; + + desc = toAscii(_engine->getItemDescription(item)); + if (desc.lastChar() == '\r') + desc.deleteLastChar(); + + switch (item.state) { + case IDI_ITEM_NOT_MOVED: + state = "PLACED"; + break; + case IDI_ITEM_DROPPED: + state = "DROPPED"; + break; + case IDI_ITEM_DOESNT_MOVE: + state = "FIXED"; + break; + } + + debugPrintf("%3d %s %-30s %-10s %-8s (%3d, %3d)\n", item.id, name.c_str(), desc.c_str(), _engine->itemRoomStr(item.room).c_str(), state.c_str(), item.position.x, item.position.y); +} + +void Console::printWordMap(const WordMap &wordMap) { + Common::StringArray words; + WordMap::const_iterator verb; + + for (verb = wordMap.begin(); verb != wordMap.end(); ++verb) + words.push_back(Common::String::format("%s: %3d", toAscii(verb->_key).c_str(), wordMap[verb->_key])); + + Common::sort(words.begin(), words.end()); + + debugPrintColumns(words); +} + +} // End of namespace Adl diff --git a/engines/adl/console.h b/engines/adl/console.h new file mode 100644 index 0000000000..a8c6adc1cc --- /dev/null +++ b/engines/adl/console.h @@ -0,0 +1,65 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_CONSOLE_H +#define ADL_CONSOLE_H + +#include "gui/debugger.h" + +#include "common/hashmap.h" + +namespace Common { +class String; +} + +namespace Adl { + +class AdlEngine; +struct Item; + +class Console : public GUI::Debugger { +public: + Console(AdlEngine *engine); + + static Common::String toAscii(const Common::String &str); + static Common::String toAppleWord(const Common::String &str); + +private: + bool Cmd_Nouns(int argc, const char **argv); + bool Cmd_Verbs(int argc, const char **argv); + bool Cmd_DumpScripts(int argc, const char **argv); + bool Cmd_ValidCommands(int argc, const char **argv); + bool Cmd_Room(int argc, const char **argv); + bool Cmd_Items(int argc, const char **argv); + bool Cmd_GiveItem(int argc, const char **argv); + bool Cmd_Vars(int argc, const char **argv); + bool Cmd_Var(int argc, const char **argv); + + void printItem(const Item &item); + void printWordMap(const Common::HashMap<Common::String, uint> &wordMap); + + AdlEngine *_engine; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/detection.cpp b/engines/adl/detection.cpp index 1a8c5025e8..12405e7c5e 100644 --- a/engines/adl/detection.cpp +++ b/engines/adl/detection.cpp @@ -32,8 +32,9 @@ namespace Adl { -#define GAMEOPTION_COLOR GUIO_GAMEOPTIONS1 -#define GAMEOPTION_SCANLINES GUIO_GAMEOPTIONS2 +#define GAMEOPTION_COLOR GUIO_GAMEOPTIONS1 +#define GAMEOPTION_SCANLINES GUIO_GAMEOPTIONS2 +#define GAMEOPTION_MONO GUIO_GAMEOPTIONS3 static const ADExtraGuiOptionsMap optionsList[] = { { @@ -47,6 +48,16 @@ static const ADExtraGuiOptionsMap optionsList[] = { }, { + GAMEOPTION_MONO, + { + _s("Color mode"), + _s("Use color graphics"), + "color", + true + } + }, + + { GAMEOPTION_SCANLINES, { _s("Scanlines"), @@ -60,27 +71,89 @@ static const ADExtraGuiOptionsMap optionsList[] = { }; static const PlainGameDescriptor adlGames[] = { - {"hires1", "Hi-Res Adventure #1: Mystery House"}, - {0, 0} + { "hires0", "Hi-Res Adventure #0: Mission Asteroid" }, + { "hires1", "Hi-Res Adventure #1: Mystery House" }, + { "hires2", "Hi-Res Adventure #2: Wizard and the Princess" }, + { "hires6", "Hi-Res Adventure #6: The Dark Crystal" }, + { 0, 0 } }; static const AdlGameDescription gameDescriptions[] = { - { // Hi-Res Adventure #1: Mystery House - Apple II - 1987 PD release + { // Hi-Res Adventure #1: Mystery House - Apple II - 1987 PD release - Plain files { "hires1", 0, { - {"ADVENTURE", 0, "22d9e63a11d69fa033ba1738715ad09a", 29952}, - {"AUTO LOAD OBJ", 0, "23bfccfe9fcff9b22cf6c41bde9078ac", 12291}, - {"MYSTERY.HELLO", 0, "2289b7fea300b506e902a4c597968369", 836}, + { "ADVENTURE", 0, "22d9e63a11d69fa033ba1738715ad09a", 29952 }, + { "AUTO LOAD OBJ", 0, "23bfccfe9fcff9b22cf6c41bde9078ac", 12291 }, + { "MYSTERY.HELLO", 0, "2289b7fea300b506e902a4c597968369", 836 }, AD_LISTEND }, Common::EN_ANY, Common::kPlatformApple2GS, // FIXME - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO2(GAMEOPTION_COLOR, GAMEOPTION_SCANLINES) }, GAME_TYPE_HIRES1 }, + { // Hi-Res Adventure #1: Mystery House - Apple II - 1987 PD release - .DSK format + { + "hires1", 0, + { + { "MYSTHOUS.DSK", 0, "34ba05e62bf51404c4475c349ca48921", 143360 }, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformApple2GS, // FIXME + ADGF_UNSTABLE, + GUIO2(GAMEOPTION_COLOR, GAMEOPTION_SCANLINES) + }, + GAME_TYPE_HIRES1 + }, + { // Hi-Res Adventure #2: Wizard and the Princess - Apple II - Roberta Williams Anthology + { + "hires2", 0, + { + { "WIZARD.DSK", 0, "816fdfc35e25496213c8db40ecf26569", 143360 }, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformApple2GS, // FIXME + ADGF_UNSTABLE, + GUIO2(GAMEOPTION_MONO, GAMEOPTION_SCANLINES) + }, + GAME_TYPE_HIRES2 + }, + { // Hi-Res Adventure #0: Mission Asteroid - Apple II - Roberta Williams Anthology + { + "hires0", 0, + { + { "MISSION.NIB", 0, "b158f6f79681d4edd651e1932f9e01d7", 232960 }, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformApple2GS, // FIXME + ADGF_UNSTABLE, + GUIO2(GAMEOPTION_MONO, GAMEOPTION_SCANLINES) + }, + GAME_TYPE_HIRES0 + }, + { // Hi-Res Adventure #6: The Dark Crystal - Apple II - Roberta Williams Anthology + { + "hires6", 0, + { + { "DARK1A.DSK", 0, "00c2646d6943d1405717332a6f42d493", 143360 }, + { "DARK2A.NIB", 0, "271eb92db107e8d5829437f8ba77991e", 232960 }, + { "DARK1B.NIB", 0, "dbedd736617343ade0e6bead8bf2b10c", 232960 }, + { "DARK2B.NIB", 0, "cb72044a9b391c4285f4752f746bea2e", 232960 }, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformApple2GS, // FIXME + ADGF_UNSTABLE, + GUIO2(GAMEOPTION_MONO, GAMEOPTION_SCANLINES) + }, + GAME_TYPE_HIRES6 + }, { AD_TABLE_END_MARKER, GAME_TYPE_NONE } }; @@ -220,6 +293,8 @@ void AdlMetaEngine::removeSaveState(const char *target, int slot) const { } Engine *HiRes1Engine_create(OSystem *syst, const AdlGameDescription *gd); +Engine *HiRes2Engine_create(OSystem *syst, const AdlGameDescription *gd); +Engine *HiRes6Engine_create(OSystem *syst, const AdlGameDescription *gd); bool AdlMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const { if (!gd) @@ -231,6 +306,12 @@ bool AdlMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameD case GAME_TYPE_HIRES1: *engine = HiRes1Engine_create(syst, adlGd); break; + case GAME_TYPE_HIRES2: + *engine = HiRes2Engine_create(syst, adlGd); + break; + case GAME_TYPE_HIRES6: + *engine = HiRes6Engine_create(syst, adlGd); + break; default: error("Unknown GameType"); } diff --git a/engines/adl/detection.h b/engines/adl/detection.h index c646aeb5b9..533466c094 100644 --- a/engines/adl/detection.h +++ b/engines/adl/detection.h @@ -32,7 +32,10 @@ namespace Adl { enum GameType { GAME_TYPE_NONE, - GAME_TYPE_HIRES1 + GAME_TYPE_HIRES0, + GAME_TYPE_HIRES1, + GAME_TYPE_HIRES2, + GAME_TYPE_HIRES6 }; struct AdlGameDescription { diff --git a/engines/adl/disk.cpp b/engines/adl/disk.cpp new file mode 100644 index 0000000000..214f76aeae --- /dev/null +++ b/engines/adl/disk.cpp @@ -0,0 +1,460 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/substream.h" +#include "common/memstream.h" + +#include "adl/disk.h" + +namespace Adl { + +const DataBlockPtr DiskImage_DSK::getDataBlock(uint track, uint sector, uint offset, uint size) const { + return Common::SharedPtr<DiskImage::DataBlock>(new DiskImage::DataBlock(this, track, sector, offset, size)); +} + +Common::SeekableReadStream *DiskImage_DSK::createReadStream(uint track, uint sector, uint offset, uint size) const { + _f->seek((track * _sectorsPerTrack + sector) * _bytesPerSector + offset); + Common::SeekableReadStream *stream = _f->readStream(size * _bytesPerSector + _bytesPerSector - offset); + + if (_f->eos() || _f->err()) + error("Error reading disk image"); + + return stream; +} + +bool DiskImage_DSK::open(const Common::String &filename) { + assert(!_f->isOpen()); + + if (!_f->open(filename)) + return false; + + uint filesize = _f->size(); + switch (filesize) { + case 143360: + _tracks = 35; + _sectorsPerTrack = 16; + _bytesPerSector = 256; + break; + default: + warning("Unrecognized disk image '%s' of size %d bytes", filename.c_str(), filesize); + return false; + } + + return true; +} + +const DataBlockPtr DiskImage_NIB::getDataBlock(uint track, uint sector, uint offset, uint size) const { + return Common::SharedPtr<DiskImage::DataBlock>(new DiskImage::DataBlock(this, track, sector, offset, size)); +} + +Common::SeekableReadStream *DiskImage_NIB::createReadStream(uint track, uint sector, uint offset, uint size) const { + _memStream->seek((track * _sectorsPerTrack + sector) * _bytesPerSector + offset); + Common::SeekableReadStream *stream = _memStream->readStream(size * _bytesPerSector + _bytesPerSector - offset); + + if (_memStream->eos() || _memStream->err()) + error("Error reading NIB image"); + + return stream; +} + +// 4-and-4 encoding (odd-even) +static uint8 read44(Common::SeekableReadStream *f) { + // 1s in the other fields, so we can just AND + uint8 ret = f->readByte(); + return ((ret << 1) | 1) & f->readByte(); +} + +bool DiskImage_NIB::open(const Common::String &filename) { + assert(!_f->isOpen()); + + if (!_f->open(filename)) + return false; + + uint filesize = _f->size(); + switch (filesize) { + case 232960: + _tracks = 35; + _sectorsPerTrack = 16; // we always pad it out + _bytesPerSector = 256; + break; + default: + error("Unrecognized NIB image '%s' of size %d bytes", filename.c_str(), filesize); + } + + // starting at 0xaa, 32 is invalid (see below) + const byte c_5and3_lookup[] = { 32, 0, 32, 1, 2, 3, 32, 32, 32, 32, 32, 4, 5, 6, 32, 32, 7, 8, 32, 9, 10, 11, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 12, 13, 32, 32, 14, 15, 32, 16, 17, 18, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 19, 20, 32, 21, 22, 23, 32, 32, 32, 32, 32, 24, 25, 26, 32, 32, 27, 28, 32, 29, 30, 31 }; + // starting at 0x96, 64 is invalid (see below) + const byte c_6and2_lookup[] = { 0, 1, 64, 64, 2, 3, 64, 4, 5, 6, 64, 64, 64, 64, 64, 64, 7, 8, 64, 64, 64, 9, 10, 11, 12, 13, 64, 64, 14, 15, 16, 17, 18, 19, 64, 20, 21, 22, 23, 24, 25, 26, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 27, 64, 28, 29, 30, 64, 64, 64, 31, 64, 64, 32, 33, 64, 34, 35, 36, 37, 38, 39, 40, 64, 64, 64, 64, 64, 41, 42, 43, 64, 44, 45, 46, 47, 48, 49, 50, 64, 64, 51, 52, 53, 54, 55, 56, 64, 57, 58, 59, 60, 61, 62, 63 }; + + uint32 diskSize = _tracks * _sectorsPerTrack * _bytesPerSector; + byte *diskImage = (byte *)calloc(diskSize, 1); + _memStream = new Common::MemoryReadStream(diskImage, diskSize, DisposeAfterUse::YES); + + bool sawAddress = false; + uint8 volNo, track, sector; + bool newStyle; + + while (_f->pos() < _f->size()) { + // Read until we find two sync bytes. + if (_f->readByte() != 0xd5 || _f->readByte() != 0xaa) + continue; + + byte prologue = _f->readByte(); + + if (sawAddress && (prologue == 0xb5 || prologue == 0x96)) { + warning("NIB: data for %02x/%02x/%02x missing", volNo, track, sector); + sawAddress = false; + } + + if (!sawAddress) { + sawAddress = true; + newStyle = false; + + // We should always find the address field first. + if (prologue != 0xb5) { + // Accept a DOS 3.3(?) header at the start. + if (prologue == 0x96) { + newStyle = true; + } else { + error("unknown NIB field prologue %02x", prologue); + } + } + + volNo = read44(_f); + track = read44(_f); + sector = read44(_f); + uint8 checksum = read44(_f); + if ((volNo ^ track ^ sector) != checksum) + error("invalid NIB checksum"); + + // FIXME: This is a hires0/hires2-specific hack. + if (volNo == 0xfe) { + if (track == 1) + track = 2; + else if (track == 2) + track = 1; + } + + // Epilogue is de/aa plus a gap, but we don't care. + continue; + } + + sawAddress = false; + + // We should always find the data field after an address field. + // TODO: we ignore volNo? + byte *output = diskImage + (track * _sectorsPerTrack + sector) * _bytesPerSector; + + if (newStyle) { + // We hardcode the DOS 3.3 mapping here. TODO: Do we also need raw/prodos? + int raw2dos[16] = { 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15 }; + sector = raw2dos[sector]; + output = diskImage + (track * _sectorsPerTrack + sector) * _bytesPerSector; + + // 6-and-2 uses 342 on-disk bytes + byte inbuffer[342]; + _f->read(inbuffer, 342); + + byte oldVal = 0; + for (uint n = 0; n < 342; ++n) { + // expand + assert(inbuffer[n] >= 0x96); // corrupt file (TODO: assert?) + byte val = c_6and2_lookup[inbuffer[n] - 0x96]; + if (val == 0x40) { + error("NIB: invalid nibble value %02x", inbuffer[n]); + } + // undo checksum + oldVal = val ^ oldVal; + inbuffer[n] = oldVal; + } + + byte checksum = _f->readByte(); + if (checksum < 0x96 || oldVal != c_6and2_lookup[checksum - 0x96]) + warning("NIB: checksum mismatch @ (%x, %x)", track, sector); + + for (uint n = 0; n < 256; ++n) { + output[n] = inbuffer[86 + n] << 2; + if (n < 86) { // use first pair of bits + output[n] |= ((inbuffer[n] & 1) << 1); + output[n] |= ((inbuffer[n] & 2) >> 1); + } else if (n < 86*2) { // second pair + output[n] |= ((inbuffer[n-86] & 4) >> 1); + output[n] |= ((inbuffer[n-86] & 8) >> 3); + } else { // third pair + output[n] |= ((inbuffer[n-86*2] & 0x10) >> 3); + output[n] |= ((inbuffer[n-86*2] & 0x20) >> 5); + } + } + } else { + // 5-and-3 uses 410 on-disk bytes, decoding to just over 256 bytes + byte inbuffer[410]; + _f->read(inbuffer, 410); + + bool truncated = false; + byte oldVal = 0; + for (uint n = 0; n < 410; ++n) { + // expand + assert(inbuffer[n] >= 0xaa); // corrupt file (TODO: assert?) + if (inbuffer[n] == 0xd5) { + // Early end of block. + truncated = true; + _f->seek(-(410 - n), SEEK_CUR); + warning("NIB: early end of block @ 0x%x (%x, %x)", _f->pos(), track, sector); + break; + } + byte val = c_5and3_lookup[inbuffer[n] - 0xaa]; + if (val == 0x20) { + // Badly-encoded nibbles, stop trying to decode here. + truncated = true; + warning("NIB: bad nibble %02x @ 0x%x (%x, %x)", inbuffer[n], _f->pos(), track, sector); + _f->seek(-(410 - n), SEEK_CUR); + break; + } + // undo checksum + oldVal = val ^ oldVal; + inbuffer[n] = oldVal; + } + if (!truncated) { + byte checksum = _f->readByte(); + if (checksum < 0xaa || oldVal != c_5and3_lookup[checksum - 0xaa]) + warning("NIB: checksum mismatch @ (%x, %x)", track, sector); + } + + // 8 bytes of nibbles expand to 5 bytes + // so we have 51 of these batches (255 bytes), plus 2 bytes of 'leftover' nibbles for byte 256 + for (uint n = 0; n < 51; ++n) { + // e.g. figure 3.18 of Beneath Apple DOS + byte lowbits1 = inbuffer[51*3 - n]; + byte lowbits2 = inbuffer[51*2 - n]; + byte lowbits3 = inbuffer[51*1 - n]; + byte lowbits4 = (lowbits1 & 2) << 1 | (lowbits2 & 2) | (lowbits3 & 2) >> 1; + byte lowbits5 = (lowbits1 & 1) << 2 | (lowbits2 & 1) << 1 | (lowbits3 & 1); + output[250 - 5*n] = (inbuffer[n + 51*3 + 1] << 3) | ((lowbits1 >> 2) & 0x7); + output[251 - 5*n] = (inbuffer[n + 51*4 + 1] << 3) | ((lowbits2 >> 2) & 0x7); + output[252 - 5*n] = (inbuffer[n + 51*5 + 1] << 3) | ((lowbits3 >> 2) & 0x7); + output[253 - 5*n] = (inbuffer[n + 51*6 + 1] << 3) | lowbits4; + output[254 - 5*n] = (inbuffer[n + 51*7 + 1] << 3) | lowbits5; + } + output[255] = (inbuffer[409] << 3) | (inbuffer[0] & 0x7); + } + } + + return true; +} + +const DataBlockPtr Files_Plain::getDataBlock(const Common::String &filename, uint offset) const { + return Common::SharedPtr<Files::DataBlock>(new Files::DataBlock(this, filename, offset)); +} + +Common::SeekableReadStream *Files_Plain::createReadStream(const Common::String &filename, uint offset) const { + Common::File *f(new Common::File()); + + if (!f->open(filename)) + error("Failed to open '%s'", filename.c_str()); + + if (offset == 0) + return f; + else + return new Common::SeekableSubReadStream(f, offset, f->size(), DisposeAfterUse::YES); +} + +Files_DOS33::~Files_DOS33() { + delete _disk; +} + +Files_DOS33::Files_DOS33() : + _disk(nullptr) { +} + +void Files_DOS33::readSectorList(TrackSector start, Common::Array<TrackSector> &list) { + TrackSector index = start; + + while (index.track != 0) { + Common::ScopedPtr<Common::SeekableReadStream> stream(_disk->createReadStream(index.track, index.sector)); + + stream->readByte(); + index.track = stream->readByte(); + index.sector = stream->readByte(); + + stream->seek(9, SEEK_CUR); + + // This only handles sequential files + TrackSector ts; + ts.track = stream->readByte(); + ts.sector = stream->readByte(); + + while (ts.track != 0) { + list.push_back(ts); + + ts.track = stream->readByte(); + ts.sector = stream->readByte(); + + if (stream->err()) + error("Error reading sector list"); + + if (stream->eos()) + break; + } + } +} + +void Files_DOS33::readVTOC() { + Common::ScopedPtr<Common::SeekableReadStream> stream(_disk->createReadStream(0x11, 0x00)); + stream->readByte(); + byte track = stream->readByte(); + byte sector = stream->readByte(); + + while (track != 0) { + char name[kFilenameLen + 1] = { }; + + stream.reset(_disk->createReadStream(track, sector)); + stream->readByte(); + track = stream->readByte(); + sector = stream->readByte(); + stream->seek(8, SEEK_CUR); + + for (uint i = 0; i < 7; ++i) { + TOCEntry entry; + TrackSector sectorList; + sectorList.track = stream->readByte(); + sectorList.sector = stream->readByte(); + entry.type = stream->readByte(); + stream->read(name, kFilenameLen); + + // Convert to ASCII + for (uint j = 0; j < kFilenameLen; j++) + name[j] &= 0x7f; + + // Strip trailing spaces + for (int j = kFilenameLen - 1; j >= 0; --j) { + if (name[j] == ' ') + name[j] = 0; + else + break; + } + + entry.totalSectors = stream->readUint16BE(); + + if (sectorList.track != 0) { + readSectorList(sectorList, entry.sectors); + _toc[name] = entry; + } + } + } +} + +const DataBlockPtr Files_DOS33::getDataBlock(const Common::String &filename, uint offset) const { + return Common::SharedPtr<Files::DataBlock>(new Files::DataBlock(this, filename, offset)); +} + +Common::SeekableReadStream *Files_DOS33::createReadStreamText(const TOCEntry &entry) const { + byte *buf = (byte *)malloc(entry.sectors.size() * kSectorSize); + byte *p = buf; + + for (uint i = 0; i < entry.sectors.size(); ++i) { + Common::ScopedPtr<Common::SeekableReadStream> stream(_disk->createReadStream(entry.sectors[i].track, entry.sectors[i].sector)); + + assert(stream->size() == kSectorSize); + + while (true) { + byte textChar = stream->readByte(); + + if (stream->eos() || textChar == 0) + break; + + if (stream->err()) + error("Error reading text file"); + + *p++ = textChar; + } + } + + return new Common::MemoryReadStream(buf, p - buf, DisposeAfterUse::YES); +} + +Common::SeekableReadStream *Files_DOS33::createReadStreamBinary(const TOCEntry &entry) const { + byte *buf = (byte *)malloc(entry.sectors.size() * kSectorSize); + + Common::ScopedPtr<Common::SeekableReadStream> stream(_disk->createReadStream(entry.sectors[0].track, entry.sectors[0].sector)); + + if (entry.type == kFileTypeBinary) + stream->readUint16LE(); // Skip start address + + uint16 size = stream->readUint16LE(); + uint16 offset = 0; + uint16 sectorIdx = 1; + + while (true) { + offset += stream->read(buf + offset, size - offset); + + if (offset == size) + break; + + if (stream->err()) + error("Error reading binary file"); + + assert(stream->eos()); + + if (sectorIdx == entry.sectors.size()) + error("Not enough sectors for binary file size"); + + stream.reset(_disk->createReadStream(entry.sectors[sectorIdx].track, entry.sectors[sectorIdx].sector)); + ++sectorIdx; + } + + return new Common::MemoryReadStream(buf, size, DisposeAfterUse::YES); +} + +Common::SeekableReadStream *Files_DOS33::createReadStream(const Common::String &filename, uint offset) const { + if (!_toc.contains(filename)) + error("Failed to locate '%s'", filename.c_str()); + + const TOCEntry &entry = _toc[filename]; + + Common::SeekableReadStream *stream; + + switch(entry.type) { + case kFileTypeText: + stream = createReadStreamText(entry); + break; + case kFileTypeAppleSoft: + case kFileTypeBinary: + stream = createReadStreamBinary(entry); + break; + default: + error("Unsupported file type %i", entry.type); + } + + return new Common::SeekableSubReadStream(stream, offset, stream->size(), DisposeAfterUse::YES); +} + +bool Files_DOS33::open(const Common::String &filename) { + _disk = new DiskImage_DSK(); + if (!_disk->open(filename)) + return false; + + readVTOC(); + return true; +} + +} // End of namespace Adl diff --git a/engines/adl/disk.h b/engines/adl/disk.h new file mode 100644 index 0000000000..43b9e387ba --- /dev/null +++ b/engines/adl/disk.h @@ -0,0 +1,188 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/ptr.h" +#include "common/file.h" +#include "common/debug.h" + +#ifndef ADL_DISK_H +#define ADL_DISK_H + +namespace Common { +class SeekableReadStream; +class String; +} + +namespace Adl { + +class DataBlock { +public: + virtual ~DataBlock() { } + + virtual Common::SeekableReadStream *createReadStream() const = 0; +}; + +typedef Common::SharedPtr<DataBlock> DataBlockPtr; +typedef Common::ScopedPtr<Common::SeekableReadStream> StreamPtr; + +class Files { +public: + virtual ~Files() { } + + virtual const DataBlockPtr getDataBlock(const Common::String &filename, uint offset = 0) const = 0; + virtual Common::SeekableReadStream *createReadStream(const Common::String &filename, uint offset = 0) const = 0; + +protected: + class DataBlock : public Adl::DataBlock { + public: + DataBlock(const Files *files, const Common::String &filename, uint offset) : + _files(files), + _filename(filename), + _offset(offset) { } + + Common::SeekableReadStream *createReadStream() const { + return _files->createReadStream(_filename, _offset); + } + + private: + const Common::String _filename; + uint _offset; + const Files *_files; + }; +}; + +class DiskImage { +public: + DiskImage() : + _tracks(0), + _sectorsPerTrack(0), + _bytesPerSector(0) { + _f = new Common::File(); + } + + virtual ~DiskImage() { + delete _f; + } + + virtual bool open(const Common::String &filename) = 0; + virtual const DataBlockPtr getDataBlock(uint track, uint sector, uint offset = 0, uint size = 0) const = 0; + virtual Common::SeekableReadStream *createReadStream(uint track, uint sector, uint offset = 0, uint size = 0) const = 0; + +protected: + class DataBlock : public Adl::DataBlock { + public: + DataBlock(const DiskImage *disk, uint track, uint sector, uint offset, uint size) : + _track(track), + _sector(sector), + _offset(offset), + _size(size), + _disk(disk) { } + + Common::SeekableReadStream *createReadStream() const { + return _disk->createReadStream(_track, _sector, _offset, _size); + } + + private: + uint _track, _sector, _offset, _size; + const DiskImage *_disk; + }; + + Common::File *_f; + uint _tracks, _sectorsPerTrack, _bytesPerSector; +}; + +// Data in plain files +class Files_Plain : public Files { +public: + const DataBlockPtr getDataBlock(const Common::String &filename, uint offset = 0) const; + Common::SeekableReadStream *createReadStream(const Common::String &filename, uint offset = 0) const; +}; + +// .DSK disk image - 35 tracks, 16 sectors per track, 256 bytes per sector +class DiskImage_DSK : public DiskImage { +public: + bool open(const Common::String &filename); + const DataBlockPtr getDataBlock(uint track, uint sector, uint offset = 0, uint size = 0) const; + Common::SeekableReadStream *createReadStream(uint track, uint sector, uint offset = 0, uint size = 0) const; +}; + +// .NIB disk image +class DiskImage_NIB : public DiskImage { +public: + DiskImage_NIB() : _memStream(nullptr) { } + virtual ~DiskImage_NIB() { + delete _memStream; + } + + bool open(const Common::String &filename); + const DataBlockPtr getDataBlock(uint track, uint sector, uint offset = 0, uint size = 0) const; + Common::SeekableReadStream *createReadStream(uint track, uint sector, uint offset = 0, uint size = 0) const; + +private: + Common::SeekableReadStream *_memStream; +}; + +// Data in files contained in Apple DOS 3.3 disk image +class Files_DOS33 : public Files { +public: + Files_DOS33(); + ~Files_DOS33(); + + bool open(const Common::String &filename); + const DataBlockPtr getDataBlock(const Common::String &filename, uint offset = 0) const; + Common::SeekableReadStream *createReadStream(const Common::String &filename, uint offset = 0) const; + +private: + enum FileType { + kFileTypeText = 0, + kFileTypeAppleSoft = 2, + kFileTypeBinary = 4 + }; + + enum { + kSectorSize = 256, + kFilenameLen = 30 + }; + + struct TrackSector { + byte track; + byte sector; + }; + + struct TOCEntry { + byte type; + uint16 totalSectors; + Common::Array<TrackSector> sectors; + }; + + void readVTOC(); + void readSectorList(TrackSector start, Common::Array<TrackSector> &list); + Common::SeekableReadStream *createReadStreamText(const TOCEntry &entry) const; + Common::SeekableReadStream *createReadStreamBinary(const TOCEntry &entry) const; + + DiskImage *_disk; + Common::HashMap<Common::String, TOCEntry> _toc; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/display.cpp b/engines/adl/display.cpp index 6342504bc3..b7f6eb9923 100644 --- a/engines/adl/display.cpp +++ b/engines/adl/display.cpp @@ -41,8 +41,6 @@ namespace Adl { #define DISPLAY_PITCH (DISPLAY_WIDTH / 7) #define DISPLAY_SIZE (DISPLAY_PITCH * DISPLAY_HEIGHT) -#define TEXT_WIDTH 40 -#define TEXT_HEIGHT 24 #define TEXT_BUF_SIZE (TEXT_WIDTH * TEXT_HEIGHT) #define COLOR_PALETTE_ENTRIES 8 @@ -221,17 +219,35 @@ void Display::loadFrameBuffer(Common::ReadStream &stream) { void Display::putPixel(const Common::Point &p, byte color) { byte offset = p.x / 7; + byte mask = 0x80 | (1 << (p.x % 7)); + // Since white and black are in both palettes, we leave + // the palette bit alone + if ((color & 0x7f) == 0x7f || (color & 0x7f) == 0) + mask &= 0x7f; + + // Adjust colors starting with bits '01' or '10' for + // odd offsets if (offset & 1) { byte c = color << 1; if (c >= 0x40 && c < 0xc0) color ^= 0x7f; } - byte *b = _frameBuf + p.y * DISPLAY_PITCH + offset; - color ^= *b; - color &= 1 << (p.x % 7); - *b ^= color; + writeFrameBuffer(p, color, mask); +} + +void Display::setPixelBit(const Common::Point &p, byte color) { + writeFrameBuffer(p, color, 1 << (p.x % 7)); +} + +void Display::setPixelPalette(const Common::Point &p, byte color) { + writeFrameBuffer(p, color, 0x80); +} + +bool Display::getPixelBit(const Common::Point &p) const { + byte *b = _frameBuf + p.y * DISPLAY_PITCH + p.x / 7; + return *b & (1 << (p.x % 7)); } void Display::clear(byte color) { @@ -271,21 +287,23 @@ void Display::moveCursorTo(const Common::Point &pos) { error("Cursor position (%i, %i) out of bounds", pos.x, pos.y); } +// FIXME: This does not currently update the surfaces +void Display::printChar(char c) { + if (c == APPLECHAR('\r')) + _cursorPos = (_cursorPos / TEXT_WIDTH + 1) * TEXT_WIDTH; + else if ((byte)c < 0x80 || (byte)c >= 0xa0) { + setCharAtCursor(c); + ++_cursorPos; + } + + if (_cursorPos == TEXT_BUF_SIZE) + scrollUp(); +} + void Display::printString(const Common::String &str) { Common::String::const_iterator c; - for (c = str.begin(); c != str.end(); ++c) { - byte b = *c; - - if (*c == APPLECHAR('\r')) - _cursorPos = (_cursorPos / TEXT_WIDTH + 1) * TEXT_WIDTH; - else if (b < 0x80 || b >= 0xa0) { - setCharAtCursor(b); - ++_cursorPos; - } - - if (_cursorPos == TEXT_BUF_SIZE) - scrollUp(); - } + for (c = str.begin(); c != str.end(); ++c) + printChar(*c); updateTextScreen(); } @@ -308,6 +326,13 @@ void Display::showCursor(bool enable) { _showCursor = enable; } +void Display::writeFrameBuffer(const Common::Point &p, byte color, byte mask) { + byte *b = _frameBuf + p.y * DISPLAY_PITCH + p.x / 7; + color ^= *b; + color &= mask; + *b ^= color; +} + void Display::showScanlines(bool enable) { byte pal[COLOR_PALETTE_ENTRIES * 3] = { }; diff --git a/engines/adl/display.h b/engines/adl/display.h index ff01e3faf2..bc27b7cb6b 100644 --- a/engines/adl/display.h +++ b/engines/adl/display.h @@ -40,6 +40,8 @@ namespace Adl { #define DISPLAY_WIDTH 280 #define DISPLAY_HEIGHT 192 +#define TEXT_WIDTH 40 +#define TEXT_HEIGHT 24 enum DisplayMode { DISPLAY_MODE_HIRES, @@ -62,6 +64,9 @@ public: // Graphics void loadFrameBuffer(Common::ReadStream &stream); void putPixel(const Common::Point &p, byte color); + void setPixelBit(const Common::Point &p, byte color); + void setPixelPalette(const Common::Point &p, byte color); + bool getPixelBit(const Common::Point &p) const; void clear(byte color); // Text @@ -69,12 +74,14 @@ public: void moveCursorTo(const Common::Point &pos); void moveCursorForward(); void moveCursorBackward(); + void printChar(char c); void printString(const Common::String &str); void printAsciiString(const Common::String &str); void setCharAtCursor(byte c); void showCursor(bool enable); private: + void writeFrameBuffer(const Common::Point &p, byte color, byte mask); void updateHiResSurface(); void showScanlines(bool enable); diff --git a/engines/adl/graphics.cpp b/engines/adl/graphics.cpp new file mode 100644 index 0000000000..f9af442a9f --- /dev/null +++ b/engines/adl/graphics.cpp @@ -0,0 +1,69 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/rect.h" + +#include "adl/display.h" +#include "adl/graphics.h" + +namespace Adl { + +// Draws a four-connected line +void GraphicsMan::drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const { + int16 deltaX = p2.x - p1.x; + int8 xStep = 1; + + if (deltaX < 0) { + deltaX = -deltaX; + xStep = -1; + } + + int16 deltaY = p2.y - p1.y; + int8 yStep = -1; + + if (deltaY > 0) { + deltaY = -deltaY; + yStep = 1; + } + + Common::Point p(p1); + int16 steps = deltaX - deltaY + 1; + int16 err = deltaX + deltaY; + + while (true) { + _display.putPixel(p, color); + + if (--steps == 0) + return; + + if (err < 0) { + p.y += yStep; + err += deltaX; + } else { + p.x += xStep; + err += deltaY; + } + } +} + +} // End of namespace Adl diff --git a/engines/adl/graphics.h b/engines/adl/graphics.h new file mode 100644 index 0000000000..aab807696c --- /dev/null +++ b/engines/adl/graphics.h @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_PICTURE_H +#define ADL_PICTURE_H + +namespace Common { +class SeekableReadStream; +struct Point; +} + +namespace Adl { + +class Display; + +class GraphicsMan { +public: + virtual ~GraphicsMan() { } + virtual void drawPic(Common::SeekableReadStream &pic, const Common::Point &pos) = 0; + +protected: + GraphicsMan(Display &display) : _display(display) { } + void drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const; + + Display &_display; +}; + +class Graphics_v1 : public GraphicsMan { +public: + Graphics_v1(Display &display) : GraphicsMan(display) { } + void drawPic(Common::SeekableReadStream &pic, const Common::Point &pos); + void drawCorners(Common::ReadStream &corners, const Common::Point &pos, byte rotation = 0, byte scaling = 1, byte color = 0x7f) const; + +private: + void drawCornerPixel(Common::Point &p, byte color, byte bits, byte quadrant) const; +}; + +class Graphics_v2 : public GraphicsMan { +public: + Graphics_v2(Display &display) : GraphicsMan(display), _color(0) { } + void drawPic(Common::SeekableReadStream &pic, const Common::Point &pos); + +private: + void clear(); + void drawCorners(Common::SeekableReadStream &pic, bool yFirst); + void drawRelativeLines(Common::SeekableReadStream &pic); + void drawAbsoluteLines(Common::SeekableReadStream &pic); + void fillRow(const Common::Point &p, bool fillBit, byte pattern); + void fill(Common::SeekableReadStream &pic); + + byte _color; + Common::Point _offset; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/graphics_v1.cpp b/engines/adl/graphics_v1.cpp new file mode 100644 index 0000000000..29c5ef47af --- /dev/null +++ b/engines/adl/graphics_v1.cpp @@ -0,0 +1,120 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/rect.h" +#include "common/textconsole.h" + +#include "adl/display.h" +#include "adl/graphics.h" + +namespace Adl { + +void Graphics_v1::drawPic(Common::SeekableReadStream &pic, const Common::Point &pos) { + byte x, y; + bool bNewLine = false; + byte oldX = 0, oldY = 0; + while (1) { + x = pic.readByte(); + y = pic.readByte(); + + if (pic.err() || pic.eos()) + error("Error reading picture"); + + if (x == 0xff && y == 0xff) + return; + + if (x == 0 && y == 0) { + bNewLine = true; + continue; + } + + x += pos.x; + y += pos.y; + + if (y > 160) + y = 160; + + if (bNewLine) { + _display.putPixel(Common::Point(x, y), 0x7f); + bNewLine = false; + } else { + drawLine(Common::Point(oldX, oldY), Common::Point(x, y), 0x7f); + } + + oldX = x; + oldY = y; + } +} + +void Graphics_v1::drawCornerPixel(Common::Point &p, byte color, byte bits, byte quadrant) const { + if (bits & 4) + _display.putPixel(p, color); + + bits += quadrant; + + if (bits & 1) + p.x += (bits & 2 ? -1 : 1); + else + p.y += (bits & 2 ? 1 : -1); +} + +void Graphics_v1::drawCorners(Common::ReadStream &corners, const Common::Point &pos, byte rotation, byte scaling, byte color) const { + const byte stepping[] = { + 0xff, 0xfe, 0xfa, 0xf4, 0xec, 0xe1, 0xd4, 0xc5, + 0xb4, 0xa1, 0x8d, 0x78, 0x61, 0x49, 0x31, 0x18, + 0xff + }; + + byte quadrant = rotation >> 4; + rotation &= 0xf; + byte xStep = stepping[rotation]; + byte yStep = stepping[(rotation ^ 0xf) + 1] + 1; + + Common::Point p(pos); + + while (true) { + byte b = corners.readByte(); + + if (corners.eos() || corners.err()) + error("Error reading corners"); + + if (b == 0) + return; + + do { + byte xFrac = 0x80; + byte yFrac = 0x80; + for (uint j = 0; j < scaling; ++j) { + if (xFrac + xStep + 1 > 255) + drawCornerPixel(p, color, b, quadrant); + xFrac += xStep + 1; + if (yFrac + yStep > 255) + drawCornerPixel(p, color, b, quadrant + 1); + yFrac += yStep; + } + b >>= 3; + } while (b != 0); + } +} + +} // End of namespace Adl diff --git a/engines/adl/graphics_v2.cpp b/engines/adl/graphics_v2.cpp new file mode 100644 index 0000000000..40936f5b7d --- /dev/null +++ b/engines/adl/graphics_v2.cpp @@ -0,0 +1,304 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/rect.h" +#include "common/textconsole.h" + +#include "adl/display.h" +#include "adl/graphics.h" +#include "adl/adl.h" + +namespace Adl { + +// FIXME: Add clipping + +#define NUM_PATTERNS 22 +#define PATTERN_LEN 4 +static const byte fillPatterns[NUM_PATTERNS][PATTERN_LEN] = { + { 0x00, 0x00, 0x00, 0x00 }, + { 0x80, 0x80, 0x80, 0x80 }, + { 0xff, 0xff, 0xff, 0xff }, + { 0x7f, 0x7f, 0x7f, 0x7f }, + { 0x2a, 0x55, 0x2a, 0x55 }, + { 0xaa, 0xd5, 0xaa, 0xd5 }, + { 0x55, 0x2a, 0x55, 0x2a }, + { 0xd5, 0xaa, 0xd5, 0xaa }, + { 0x33, 0x66, 0x4c, 0x19 }, + { 0xb3, 0xe6, 0xcc, 0x99 }, + { 0x22, 0x44, 0x08, 0x11 }, + { 0xa2, 0xc4, 0x88, 0x91 }, + { 0x11, 0x22, 0x44, 0x08 }, + { 0x91, 0xa2, 0xc4, 0x88 }, + { 0x6e, 0x5d, 0x3b, 0x77 }, + { 0xee, 0xdd, 0xbb, 0xf7 }, + { 0x5d, 0x3b, 0x77, 0x6e }, + { 0xdd, 0xbb, 0xf7, 0xee }, + { 0x66, 0x4c, 0x19, 0x33 }, + { 0xe6, 0xcc, 0x99, 0xb3 }, + { 0x33, 0x66, 0x4c, 0x19 }, + { 0xb3, 0xe6, 0xcc, 0x99 } +}; + +#define MIN_COMMAND 0xe0 + +#define CHECK_COMMAND(X) \ + do { \ + if ((X) >= MIN_COMMAND) { \ + pic.seek(-1, SEEK_CUR); \ + return; \ + } \ + } while (0) + +#define READ_BYTE(b) \ + do { \ + b = pic.readByte(); \ + if (pic.eos() || pic.err()) \ + error("Error reading picture"); \ + CHECK_COMMAND(b); \ + } while (0) + +#define READ_POINT(p) \ + do { \ + READ_BYTE(p.x); \ + p.x += _offset.x; \ + p.x <<= 1; \ + READ_BYTE(p.y); \ + p.y += _offset.y; \ + } while (0) + +void Graphics_v2::clear() { + _display.clear(0xff); + _color = 0; +} + +void Graphics_v2::drawCorners(Common::SeekableReadStream &pic, bool yFirst) { + Common::Point p; + + READ_POINT(p); + + if (yFirst) + goto doYStep; + + while (true) { + int16 n; + + READ_BYTE(n); + n += _offset.x; + + _display.putPixel(p, _color); + + n <<= 1; + drawLine(p, Common::Point(n, p.y), _color); + p.x = n; + +doYStep: + READ_BYTE(n); + n += _offset.y; + + _display.putPixel(p, _color); + drawLine(p, Common::Point(p.x, n), _color); + + _display.putPixel(Common::Point(p.x + 1, p.y), _color); + drawLine(Common::Point(p.x + 1, p.y), Common::Point(p.x + 1, n), _color); + + p.y = n; + } +} + +void Graphics_v2::drawRelativeLines(Common::SeekableReadStream &pic) { + Common::Point p1; + + READ_POINT(p1); + _display.putPixel(p1, _color); + + while (true) { + Common::Point p2(p1); + + byte n; + READ_BYTE(n); + + byte h = (n & 0x70) >> 4; + byte l = n & 7; + + if (n & 0x80) + p2.x -= (h << 1); + else + p2.x += (h << 1); + + if (n & 8) + p2.y -= l; + else + p2.y += l; + + drawLine(p1, p2, _color); + p1 = p2; + } +} + +void Graphics_v2::drawAbsoluteLines(Common::SeekableReadStream &pic) { + Common::Point p1; + + READ_POINT(p1); + _display.putPixel(p1, _color); + + while (true) { + Common::Point p2; + + READ_POINT(p2); + drawLine(p1, p2, _color); + p1 = p2; + } +} + +static byte getPatternColor(const Common::Point &p, byte pattern) { + if (pattern >= NUM_PATTERNS) + error("Invalid fill pattern %i encountered in picture", pattern); + + byte offset = (p.y & 1) << 1; + offset += (p.x / 7) & 3; + + return fillPatterns[pattern][offset % PATTERN_LEN]; +} + +void Graphics_v2::fillRow(const Common::Point &p, bool stopBit, byte pattern) { + const byte color = getPatternColor(p, pattern); + _display.setPixelPalette(p, color); + _display.setPixelBit(p, color); + + Common::Point q(p); + byte c = color; + + while (++q.x < DISPLAY_WIDTH) { + if ((q.x % 7) == 0) { + c = getPatternColor(q, pattern); + // Palette is set before the first bit is tested + _display.setPixelPalette(q, c); + } + if (_display.getPixelBit(q) == stopBit) + break; + _display.setPixelBit(q, c); + } + + q = p; + c = color; + while (--q.x >= 0) { + if ((q.x % 7) == 6) { + c = getPatternColor(q, pattern); + _display.setPixelPalette(q, c); + } + if (_display.getPixelBit(q) == stopBit) + break; + _display.setPixelBit(q, c); + } +} + +// Basic flood fill +void Graphics_v2::fill(Common::SeekableReadStream &pic) { + byte pattern; + READ_BYTE(pattern); + + while (true) { + Common::Point p; + READ_POINT(p); + + bool stopBit = !_display.getPixelBit(p); + + while (--p.y >= 0) { + if (_display.getPixelBit(p) == stopBit) + break; + if (_display.getPixelBit(Common::Point(p.x + 1, p.y)) == stopBit) + break; + } + + while (++p.y < DISPLAY_HEIGHT) { + if (_display.getPixelBit(p) == stopBit) + break; + if (_display.getPixelBit(Common::Point(p.x + 1, p.y)) == stopBit) + break; + fillRow(p, stopBit, pattern); + } + } +} + +void Graphics_v2::drawPic(Common::SeekableReadStream &pic, const Common::Point &pos) { + _color = 0; + _offset = pos; + + while (true) { + byte opcode = pic.readByte(); + + if (pic.eos() || pic.err()) + error("Error reading picture"); + + switch (opcode) { + case 0xe0: + drawCorners(pic, false); + break; + case 0xe1: + drawCorners(pic, true); + break; + case 0xe2: + drawRelativeLines(pic); + break; + case 0xe3: + drawAbsoluteLines(pic); + break; + case 0xe4: + fill(pic); + break; + case 0xe5: + clear(); + break; + case 0xf0: + _color = 0x00; + break; + case 0xf1: + _color = 0x2a; + break; + case 0xf2: + _color = 0x55; + break; + case 0xf3: + _color = 0x7f; + break; + case 0xf4: + _color = 0x80; + break; + case 0xf5: + _color = 0xaa; + break; + case 0xf6: + _color = 0xd5; + break; + case 0xf7: + _color = 0xff; + break; + case 0xff: + return; + default: + error("Invalid pic opcode %02x", opcode); + } + } +} + +} // End of namespace Adl diff --git a/engines/adl/hires1.cpp b/engines/adl/hires1.cpp index 6e1e31df9f..096d8ef496 100644 --- a/engines/adl/hires1.cpp +++ b/engines/adl/hires1.cpp @@ -25,6 +25,7 @@ #include "common/error.h" #include "common/file.h" #include "common/stream.h" +#include "common/ptr.h" #include "adl/hires1.h" #include "adl/display.h" @@ -32,14 +33,11 @@ namespace Adl { void HiRes1Engine::runIntro() const { - Common::File file; + StreamPtr stream(_files->createReadStream(IDS_HR1_EXE_0)); - if (!file.open(IDS_HR1_EXE_0)) - error("Failed to open file '" IDS_HR1_EXE_0 "'"); - - file.seek(IDI_HR1_OFS_LOGO_0); + stream->seek(IDI_HR1_OFS_LOGO_0); _display->setMode(DISPLAY_MODE_HIRES); - _display->loadFrameBuffer(file); + _display->loadFrameBuffer(*stream); _display->updateHiResScreen(); delay(4000); @@ -48,22 +46,19 @@ void HiRes1Engine::runIntro() const { _display->setMode(DISPLAY_MODE_TEXT); - Common::File basic; - if (!basic.open(IDS_HR1_LOADER)) - error("Failed to open file '" IDS_HR1_LOADER "'"); - + StreamPtr basic(_files->createReadStream(IDS_HR1_LOADER)); Common::String str; - str = readStringAt(basic, IDI_HR1_OFS_PD_TEXT_0, '"'); + str = readStringAt(*basic, IDI_HR1_OFS_PD_TEXT_0, '"'); _display->printAsciiString(str + '\r'); - str = readStringAt(basic, IDI_HR1_OFS_PD_TEXT_1, '"'); + str = readStringAt(*basic, IDI_HR1_OFS_PD_TEXT_1, '"'); _display->printAsciiString(str + "\r\r"); - str = readStringAt(basic, IDI_HR1_OFS_PD_TEXT_2, '"'); + str = readStringAt(*basic, IDI_HR1_OFS_PD_TEXT_2, '"'); _display->printAsciiString(str + "\r\r"); - str = readStringAt(basic, IDI_HR1_OFS_PD_TEXT_3, '"'); + str = readStringAt(*basic, IDI_HR1_OFS_PD_TEXT_3, '"'); _display->printAsciiString(str + '\r'); inputKey(); @@ -72,7 +67,7 @@ void HiRes1Engine::runIntro() const { _display->setMode(DISPLAY_MODE_MIXED); - str = readStringAt(file, IDI_HR1_OFS_GAME_OR_HELP); + str = readStringAt(*stream, IDI_HR1_OFS_GAME_OR_HELP); bool instructions = false; @@ -96,7 +91,7 @@ void HiRes1Engine::runIntro() const { if (instructions) { _display->setMode(DISPLAY_MODE_TEXT); - file.seek(IDI_HR1_OFS_INTRO_TEXT); + stream->seek(IDI_HR1_OFS_INTRO_TEXT); const uint pages[] = { 6, 6, 4, 5, 8, 7, 0 }; @@ -106,9 +101,9 @@ void HiRes1Engine::runIntro() const { uint count = pages[page++]; for (uint i = 0; i < count; ++i) { - str = readString(file); + str = readString(*stream); _display->printString(str); - file.seek(3, SEEK_CUR); + stream->seek(3, SEEK_CUR); } inputString(); @@ -116,54 +111,47 @@ void HiRes1Engine::runIntro() const { if (g_engine->shouldQuit()) return; - file.seek(6, SEEK_CUR); + stream->seek(6, SEEK_CUR); } } _display->printAsciiString("\r"); - file.close(); - _display->setMode(DISPLAY_MODE_MIXED); - if (!file.open(IDS_HR1_EXE_1)) - error("Failed to open file '" IDS_HR1_EXE_1 "'"); - // Title screen shown during loading - file.seek(IDI_HR1_OFS_LOGO_1); - _display->loadFrameBuffer(file); + stream.reset(_files->createReadStream(IDS_HR1_EXE_1)); + stream->seek(IDI_HR1_OFS_LOGO_1); + _display->loadFrameBuffer(*stream); _display->updateHiResScreen(); delay(2000); } -void HiRes1Engine::loadData() { - Common::File f; - - if (!f.open(IDS_HR1_MESSAGES)) - error("Failed to open file '" IDS_HR1_MESSAGES "'"); +void HiRes1Engine::init() { + if (Common::File::exists("MYSTHOUS.DSK")) { + _files = new Files_DOS33(); + if (!static_cast<Files_DOS33 *>(_files)->open("MYSTHOUS.DSK")) + error("Failed to open MYSTHOUS.DSK"); + } else + _files = new Files_Plain(); - for (uint i = 0; i < IDI_HR1_NUM_MESSAGES; ++i) - _messages.push_back(readString(f, APPLECHAR('\r')) + APPLECHAR('\r')); + _graphics = new Graphics_v1(*_display); - f.close(); - - if (!f.open(IDS_HR1_EXE_1)) - error("Failed to open file '" IDS_HR1_EXE_1 "'"); + StreamPtr stream(_files->createReadStream(IDS_HR1_EXE_1)); // Some messages have overrides inside the executable - _messages[IDI_HR1_MSG_CANT_GO_THERE - 1] = readStringAt(f, IDI_HR1_OFS_STR_CANT_GO_THERE); - _messages[IDI_HR1_MSG_DONT_HAVE_IT - 1] = readStringAt(f, IDI_HR1_OFS_STR_DONT_HAVE_IT); - _messages[IDI_HR1_MSG_DONT_UNDERSTAND - 1] = readStringAt(f, IDI_HR1_OFS_STR_DONT_UNDERSTAND); - _messages[IDI_HR1_MSG_GETTING_DARK - 1] = readStringAt(f, IDI_HR1_OFS_STR_GETTING_DARK); + _gameStrings.cantGoThere = readStringAt(*stream, IDI_HR1_OFS_STR_CANT_GO_THERE); + _gameStrings.dontHaveIt = readStringAt(*stream, IDI_HR1_OFS_STR_DONT_HAVE_IT); + _gameStrings.dontUnderstand = readStringAt(*stream, IDI_HR1_OFS_STR_DONT_UNDERSTAND); + _gameStrings.gettingDark = readStringAt(*stream, IDI_HR1_OFS_STR_GETTING_DARK); // Load other strings from executable - _strings.enterCommand = readStringAt(f, IDI_HR1_OFS_STR_ENTER_COMMAND); - _strings.dontHaveIt = readStringAt(f, IDI_HR1_OFS_STR_DONT_HAVE_IT); - _strings.gettingDark = readStringAt(f, IDI_HR1_OFS_STR_GETTING_DARK); - _strings.verbError = readStringAt(f, IDI_HR1_OFS_STR_VERB_ERROR); - _strings.nounError = readStringAt(f, IDI_HR1_OFS_STR_NOUN_ERROR); - _strings.playAgain = readStringAt(f, IDI_HR1_OFS_STR_PLAY_AGAIN); - _gameStrings.pressReturn = readStringAt(f, IDI_HR1_OFS_STR_PRESS_RETURN); + _strings.enterCommand = readStringAt(*stream, IDI_HR1_OFS_STR_ENTER_COMMAND); + _strings.verbError = readStringAt(*stream, IDI_HR1_OFS_STR_VERB_ERROR); + _strings.nounError = readStringAt(*stream, IDI_HR1_OFS_STR_NOUN_ERROR); + _strings.playAgain = readStringAt(*stream, IDI_HR1_OFS_STR_PLAY_AGAIN); + _strings.pressReturn = readStringAt(*stream, IDI_HR1_OFS_STR_PRESS_RETURN); + _strings.lineFeeds = readStringAt(*stream, IDI_HR1_OFS_STR_LINE_FEEDS); // Set message IDs _messageIds.cantGoThere = IDI_HR1_MSG_CANT_GO_THERE; @@ -172,129 +160,118 @@ void HiRes1Engine::loadData() { _messageIds.itemNotHere = IDI_HR1_MSG_ITEM_NOT_HERE; _messageIds.thanksForPlaying = IDI_HR1_MSG_THANKS_FOR_PLAYING; + // Load message offsets + stream->seek(IDI_HR1_OFS_MSGS); + for (uint i = 0; i < IDI_HR1_NUM_MESSAGES; ++i) + _messages.push_back(_files->getDataBlock(IDS_HR1_MESSAGES, stream->readUint16LE())); + // Load picture data from executable - f.seek(IDI_HR1_OFS_PICS); - for (uint i = 0; i < IDI_HR1_NUM_PICS; ++i) { - struct Picture pic; - pic.block = f.readByte(); - pic.offset = f.readUint16LE(); - _pictures.push_back(pic); + stream->seek(IDI_HR1_OFS_PICS); + for (uint i = 1; i <= IDI_HR1_NUM_PICS; ++i) { + byte block = stream->readByte(); + Common::String name = Common::String::format("BLOCK%i", block); + uint16 offset = stream->readUint16LE(); + _pictures[i] = _files->getDataBlock(name, offset); } // Load commands from executable - f.seek(IDI_HR1_OFS_CMDS_1); - readCommands(f, _roomCommands); + stream->seek(IDI_HR1_OFS_CMDS_1); + readCommands(*stream, _roomCommands); - f.seek(IDI_HR1_OFS_CMDS_0); - readCommands(f, _globalCommands); + stream->seek(IDI_HR1_OFS_CMDS_0); + readCommands(*stream, _globalCommands); // Load dropped item offsets - f.seek(IDI_HR1_OFS_ITEM_OFFSETS); + stream->seek(IDI_HR1_OFS_ITEM_OFFSETS); for (uint i = 0; i < IDI_HR1_NUM_ITEM_OFFSETS; ++i) { Common::Point p; - p.x = f.readByte(); - p.y = f.readByte(); + p.x = stream->readByte(); + p.y = stream->readByte(); _itemOffsets.push_back(p); } // Load right-angle line art - f.seek(IDI_HR1_OFS_LINE_ART); - uint16 lineArtTotal = f.readUint16LE(); - for (uint i = 0; i < lineArtTotal; ++i) { - f.seek(IDI_HR1_OFS_LINE_ART + 2 + i * 2); - uint16 offset = f.readUint16LE(); - f.seek(IDI_HR1_OFS_LINE_ART + offset); - - Common::Array<byte> lineArt; - byte b = f.readByte(); - while (b != 0) { - lineArt.push_back(b); - b = f.readByte(); - } - _lineArt.push_back(lineArt); - } + stream->seek(IDI_HR1_OFS_CORNERS); + uint16 cornersCount = stream->readUint16LE(); + for (uint i = 0; i < cornersCount; ++i) + _corners.push_back(_files->getDataBlock(IDS_HR1_EXE_1, IDI_HR1_OFS_CORNERS + stream->readUint16LE())); - if (f.eos() || f.err()) + if (stream->eos() || stream->err()) error("Failed to read game data from '" IDS_HR1_EXE_1 "'"); - f.seek(IDI_HR1_OFS_VERBS); - loadWords(f, _verbs); + stream->seek(IDI_HR1_OFS_VERBS); + loadWords(*stream, _verbs, _priVerbs); - f.seek(IDI_HR1_OFS_NOUNS); - loadWords(f, _nouns); + stream->seek(IDI_HR1_OFS_NOUNS); + loadWords(*stream, _nouns, _priNouns); } -void HiRes1Engine::initState() { - Common::File f; - - _state.room = 1; - _state.moves = 0; - _state.isDark = false; - - _state.vars.clear(); +void HiRes1Engine::initGameState() { _state.vars.resize(IDI_HR1_NUM_VARS); - if (!f.open(IDS_HR1_EXE_1)) - error("Failed to open file '" IDS_HR1_EXE_1 "'"); + StreamPtr stream(_files->createReadStream(IDS_HR1_EXE_1)); // Load room data from executable - _state.rooms.clear(); - f.seek(IDI_HR1_OFS_ROOMS); + _roomDesc.clear(); + stream->seek(IDI_HR1_OFS_ROOMS); for (uint i = 0; i < IDI_HR1_NUM_ROOMS; ++i) { Room room; - f.readByte(); - room.description = f.readByte(); + stream->readByte(); + _roomDesc.push_back(stream->readByte()); for (uint j = 0; j < 6; ++j) - room.connections[j] = f.readByte(); - room.picture = f.readByte(); - room.curPicture = f.readByte(); + room.connections[j] = stream->readByte(); + room.picture = stream->readByte(); + room.curPicture = stream->readByte(); _state.rooms.push_back(room); } // Load item data from executable - _state.items.clear(); - f.seek(IDI_HR1_OFS_ITEMS); - while (f.readByte() != 0xff) { - Item item; - item.noun = f.readByte(); - item.room = f.readByte(); - item.picture = f.readByte(); - item.isLineArt = f.readByte(); - item.position.x = f.readByte(); - item.position.y = f.readByte(); - item.state = f.readByte(); - item.description = f.readByte(); - - f.readByte(); - - byte size = f.readByte(); + stream->seek(IDI_HR1_OFS_ITEMS); + byte id; + while ((id = stream->readByte()) != 0xff) { + Item item = Item(); + item.id = id; + item.noun = stream->readByte(); + item.room = stream->readByte(); + item.picture = stream->readByte(); + item.isLineArt = stream->readByte(); + item.position.x = stream->readByte(); + item.position.y = stream->readByte(); + item.state = stream->readByte(); + item.description = stream->readByte(); + + stream->readByte(); + + byte size = stream->readByte(); for (uint i = 0; i < size; ++i) - item.roomPictures.push_back(f.readByte()); + item.roomPictures.push_back(stream->readByte()); _state.items.push_back(item); } } void HiRes1Engine::restartGame() { + _display->printString(_strings.pressReturn); initState(); - _display->printString(_gameStrings.pressReturn); - inputString(); // Missing in the original - _display->printAsciiString("\r\r\r\r\r"); + _display->printAsciiString(_strings.lineFeeds); } -void HiRes1Engine::drawPic(byte pic, Common::Point pos) const { - Common::File f; - Common::String name = Common::String::format("BLOCK%i", _pictures[pic].block); +void HiRes1Engine::printString(const Common::String &str) { + Common::String wrap = str; + wordWrap(wrap); + _display->printString(wrap); - if (!f.open(name)) - error("Failed to open file '%s'", name.c_str()); + if (_messageDelay) + delay(14 * 166018 / 1000); +} - f.seek(_pictures[pic].offset); - drawPic(f, pos); +Common::String HiRes1Engine::loadMessage(uint idx) const { + StreamPtr stream(_messages[idx]->createReadStream()); + return readString(*stream, APPLECHAR('\r')) + APPLECHAR('\r'); } -void HiRes1Engine::printMessage(uint idx, bool wait) const { +void HiRes1Engine::printMessage(uint idx) { // Messages with hardcoded overrides don't delay after printing. // It's unclear if this is a bug or not. In some cases the result // is that these strings will scroll past the four-line text window @@ -304,88 +281,89 @@ void HiRes1Engine::printMessage(uint idx, bool wait) const { // that system for this game as well. switch (idx) { case IDI_HR1_MSG_CANT_GO_THERE: + _display->printString(_gameStrings.cantGoThere); + return; case IDI_HR1_MSG_DONT_HAVE_IT: + _display->printString(_gameStrings.dontHaveIt); + return; case IDI_HR1_MSG_DONT_UNDERSTAND: + _display->printString(_gameStrings.dontUnderstand); + return; case IDI_HR1_MSG_GETTING_DARK: - wait = false; + _display->printString(_gameStrings.gettingDark); + return; + default: + printString(loadMessage(idx)); } - - AdlEngine::printMessage(idx, wait); } -void HiRes1Engine::drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const { - // This draws a four-connected line - - int16 deltaX = p2.x - p1.x; - int8 xStep = 1; - - if (deltaX < 0) { - deltaX = -deltaX; - xStep = -1; - } - - int16 deltaY = p2.y - p1.y; - int8 yStep = -1; - - if (deltaY > 0) { - deltaY = -deltaY; - yStep = 1; - } - - Common::Point p(p1); - int16 steps = deltaX - deltaY + 1; - int16 err = deltaX + deltaY; +void HiRes1Engine::drawItems() { + Common::List<Item>::iterator item; - while (1) { - _display->putPixel(p, color); + uint dropped = 0; - if (--steps == 0) - return; + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + // Skip items not in this room + if (item->room != _state.room) + continue; - if (err < 0) { - p.y += yStep; - err += deltaX; + if (item->state == IDI_ITEM_DROPPED) { + // Draw dropped item if in normal view + if (getCurRoom().picture == getCurRoom().curPicture) + drawItem(*item, _itemOffsets[dropped++]); } else { - p.x += xStep; - err += deltaY; + // Draw fixed item if current view is in the pic list + Common::Array<byte>::const_iterator pic; + + for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { + if (*pic == getCurRoom().curPicture) { + drawItem(*item, item->position); + break; + } + } } } } -void HiRes1Engine::drawPic(Common::ReadStream &stream, const Common::Point &pos) const { - byte x, y; - bool bNewLine = false; - byte oldX = 0, oldY = 0; - while (1) { - x = stream.readByte(); - y = stream.readByte(); +void HiRes1Engine::drawItem(Item &item, const Common::Point &pos) { + if (item.isLineArt) { + StreamPtr stream(_corners[item.picture - 1]->createReadStream()); + static_cast<Graphics_v1 *>(_graphics)->drawCorners(*stream, pos); + } else + drawPic(item.picture, pos); +} + +void HiRes1Engine::loadRoom(byte roomNr) { + _roomData.description = loadMessage(_roomDesc[_state.room - 1]); +} - if (stream.err() || stream.eos()) - error("Failed to read picture"); +void HiRes1Engine::showRoom() { + clearScreen(); + loadRoom(_state.room); - if (x == 0xff && y == 0xff) - return; + if (!_state.isDark) { + drawPic(getCurRoom().curPicture); + drawItems(); + } - if (x == 0 && y == 0) { - bNewLine = true; - continue; - } + _display->updateHiResScreen(); + _messageDelay = false; + printString(_roomData.description); + _messageDelay = true; +} - x += pos.x; - y += pos.y; +void HiRes1Engine::wordWrap(Common::String &str) const { + uint end = 39; - if (y > 160) - y = 160; + while (1) { + if (str.size() <= end) + return; - if (bNewLine) { - _display->putPixel(Common::Point(x, y), 0x7f); - bNewLine = false; - } else { - drawLine(Common::Point(oldX, oldY), Common::Point(x, y), 0x7f); - } + while (str[end] != APPLECHAR(' ')) + --end; - oldX = x; - oldY = y; + str.setChar(APPLECHAR('\r'), end); + end += 40; } } diff --git a/engines/adl/hires1.h b/engines/adl/hires1.h index 25f4744d26..c060bc892e 100644 --- a/engines/adl/hires1.h +++ b/engines/adl/hires1.h @@ -26,6 +26,8 @@ #include "common/str.h" #include "adl/adl.h" +#include "adl/graphics.h" +#include "adl/disk.h" namespace Common { class ReadStream; @@ -40,10 +42,10 @@ namespace Adl { #define IDS_HR1_MESSAGES "MESSAGES" #define IDI_HR1_NUM_ROOMS 41 -#define IDI_HR1_NUM_PICS 98 +#define IDI_HR1_NUM_PICS 97 #define IDI_HR1_NUM_VARS 20 #define IDI_HR1_NUM_ITEM_OFFSETS 21 -#define IDI_HR1_NUM_MESSAGES 167 +#define IDI_HR1_NUM_MESSAGES 168 // Messages used outside of scripts #define IDI_HR1_MSG_CANT_GO_THERE 137 @@ -63,6 +65,7 @@ namespace Adl { #define IDI_HR1_OFS_STR_DONT_UNDERSTAND 0x6c51 #define IDI_HR1_OFS_STR_GETTING_DARK 0x6c7c #define IDI_HR1_OFS_STR_PRESS_RETURN 0x5f68 +#define IDI_HR1_OFS_STR_LINE_FEEDS 0x59d4 #define IDI_HR1_OFS_PD_TEXT_0 0x005d #define IDI_HR1_OFS_PD_TEXT_1 0x012b @@ -77,34 +80,52 @@ namespace Adl { #define IDI_HR1_OFS_ITEMS 0x0100 #define IDI_HR1_OFS_ROOMS 0x050a -#define IDI_HR1_OFS_PICS 0x4b00 +#define IDI_HR1_OFS_PICS 0x4b03 #define IDI_HR1_OFS_CMDS_0 0x3c00 #define IDI_HR1_OFS_CMDS_1 0x3d00 +#define IDI_HR1_OFS_MSGS 0x4d00 #define IDI_HR1_OFS_ITEM_OFFSETS 0x68ff -#define IDI_HR1_OFS_LINE_ART 0x4f00 +#define IDI_HR1_OFS_CORNERS 0x4f00 #define IDI_HR1_OFS_VERBS 0x3800 #define IDI_HR1_OFS_NOUNS 0x0f00 class HiRes1Engine : public AdlEngine { public: - HiRes1Engine(OSystem *syst, const AdlGameDescription *gd) : AdlEngine(syst, gd) { } + HiRes1Engine(OSystem *syst, const AdlGameDescription *gd) : + AdlEngine(syst, gd), + _files(nullptr), + _messageDelay(true) { } + ~HiRes1Engine() { delete _files; } private: // AdlEngine void runIntro() const; - void loadData(); - void initState(); + void init(); + void initGameState(); void restartGame(); - void drawPic(byte pic, Common::Point pos) const; - void printMessage(uint idx, bool wait = true) const; - - void drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const; - void drawPic(Common::ReadStream &stream, const Common::Point &pos) const; + void printString(const Common::String &str); + Common::String loadMessage(uint idx) const; + void printMessage(uint idx); + void drawItems(); + void drawItem(Item &item, const Common::Point &pos); + void loadRoom(byte roomNr); + void showRoom(); + + void wordWrap(Common::String &str) const; + + Files *_files; + Common::File _exe; + Common::Array<DataBlockPtr> _corners; + Common::Array<byte> _roomDesc; + bool _messageDelay; struct { - Common::String pressReturn; + Common::String cantGoThere; + Common::String dontHaveIt; + Common::String dontUnderstand; + Common::String gettingDark; } _gameStrings; }; diff --git a/engines/adl/hires2.cpp b/engines/adl/hires2.cpp new file mode 100644 index 0000000000..d8e8a65e29 --- /dev/null +++ b/engines/adl/hires2.cpp @@ -0,0 +1,183 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/system.h" +#include "common/debug.h" +#include "common/error.h" +#include "common/file.h" +#include "common/stream.h" + +#include "adl/hires2.h" +#include "adl/display.h" +#include "adl/graphics.h" +#include "adl/disk.h" + +namespace Adl { + +void HiRes2Engine::runIntro() const { + StreamPtr stream(_disk->createReadStream(0x00, 0xd, 0x17, 1)); + + _display->setMode(DISPLAY_MODE_TEXT); + + Common::String str = readString(*stream); + + if (stream->eos() || stream->err()) + error("Error reading disk image"); + + _display->printString(str); + delay(2000); +} + +void HiRes2Engine::init() { + _graphics = new Graphics_v2(*_display); + + _disk = new DiskImage_DSK(); + if (!_disk->open(IDS_HR2_DISK_IMAGE)) + error("Failed to open disk image '" IDS_HR2_DISK_IMAGE "'"); + + StreamPtr stream(_disk->createReadStream(0x1f, 0x2, 0x00, 4)); + + for (uint i = 0; i < IDI_HR2_NUM_MESSAGES; ++i) + _messages.push_back(readDataBlockPtr(*stream)); + + // Read parser messages + stream.reset(_disk->createReadStream(0x1a, 0x1)); + _strings.verbError = readStringAt(*stream, 0x4f); + _strings.nounError = readStringAt(*stream, 0x8e); + _strings.enterCommand = readStringAt(*stream, 0xbc); + + // Read time string + stream.reset(_disk->createReadStream(0x19, 0x7, 0xd7)); + _strings_v2.time = readString(*stream, 0xff); + + // Read line feeds + stream.reset(_disk->createReadStream(0x19, 0xb, 0xf8, 1)); + _strings.lineFeeds = readString(*stream); + + // Read opcode strings + stream.reset(_disk->createReadStream(0x1a, 0x6, 0x00, 2)); + _strings_v2.saveInsert = readStringAt(*stream, 0x5f); + _strings_v2.saveReplace = readStringAt(*stream, 0xe5); + _strings_v2.restoreInsert = readStringAt(*stream, 0x132); + _strings_v2.restoreReplace = readStringAt(*stream, 0x1c2); + _strings.playAgain = readStringAt(*stream, 0x225); + _strings.pressReturn = readStringAt(*stream, 0x25f); + + _messageIds.cantGoThere = IDI_HR2_MSG_CANT_GO_THERE; + _messageIds.dontUnderstand = IDI_HR2_MSG_DONT_UNDERSTAND; + _messageIds.itemDoesntMove = IDI_HR2_MSG_ITEM_DOESNT_MOVE; + _messageIds.itemNotHere = IDI_HR2_MSG_ITEM_NOT_HERE; + _messageIds.thanksForPlaying = IDI_HR2_MSG_THANKS_FOR_PLAYING; + + // Load global picture data + stream.reset(_disk->createReadStream(0x19, 0xa, 0x80, 0)); + byte picNr; + while ((picNr = stream->readByte()) != 0xff) { + if (stream->eos() || stream->err()) + error("Error reading global pic list"); + + _pictures[picNr] = readDataBlockPtr(*stream); + } + + // Load item picture data + stream.reset(_disk->createReadStream(0x1e, 0x9, 0x05)); + for (uint i = 0; i < IDI_HR2_NUM_ITEM_PICS; ++i) { + stream->readByte(); // number + _itemPics.push_back(readDataBlockPtr(*stream)); + } + + // Load commands from executable + stream.reset(_disk->createReadStream(0x1d, 0x7, 0x00, 4)); + readCommands(*stream, _roomCommands); + + stream.reset(_disk->createReadStream(0x1f, 0x7, 0x00, 2)); + readCommands(*stream, _globalCommands); + + // Load dropped item offsets + stream.reset(_disk->createReadStream(0x1b, 0x4, 0x15)); + for (uint i = 0; i < IDI_HR2_NUM_ITEM_OFFSETS; ++i) { + Common::Point p; + p.x = stream->readByte(); + p.y = stream->readByte(); + _itemOffsets.push_back(p); + } + + // Load verbs + stream.reset(_disk->createReadStream(0x19, 0x0, 0x00, 3)); + loadWords(*stream, _verbs, _priVerbs); + + // Load nouns + stream.reset(_disk->createReadStream(0x22, 0x2, 0x00, 7)); + loadWords(*stream, _nouns, _priNouns); +} + +void HiRes2Engine::initGameState() { + _state.vars.resize(IDI_HR2_NUM_VARS); + + StreamPtr stream(_disk->createReadStream(0x21, 0x5, 0x0e, 7)); + + for (uint i = 0; i < IDI_HR2_NUM_ROOMS; ++i) { + Room room; + stream->readByte(); // number + for (uint j = 0; j < 6; ++j) + room.connections[j] = stream->readByte(); + room.data = readDataBlockPtr(*stream); + room.picture = stream->readByte(); + room.curPicture = stream->readByte(); + room.isFirstTime = stream->readByte(); + _state.rooms.push_back(room); + } + + stream.reset(_disk->createReadStream(0x21, 0x0, 0x00, 2)); + + byte id; + while ((id = stream->readByte()) != 0xff) { + Item item = Item(); + item.id = id; + item.noun = stream->readByte(); + item.room = stream->readByte(); + item.picture = stream->readByte(); + item.isLineArt = stream->readByte(); // Is this still used in this way? + item.position.x = stream->readByte(); + item.position.y = stream->readByte(); + item.state = stream->readByte(); + item.description = stream->readByte(); + + stream->readByte(); // Struct size + + byte picListSize = stream->readByte(); + + // Flag to keep track of what has been drawn on the screen + stream->readByte(); + + for (uint i = 0; i < picListSize; ++i) + item.roomPictures.push_back(stream->readByte()); + + _state.items.push_back(item); + } +} + +Engine *HiRes2Engine_create(OSystem *syst, const AdlGameDescription *gd) { + return new HiRes2Engine(syst, gd); +} + +} // End of namespace Adl diff --git a/engines/adl/hires2.h b/engines/adl/hires2.h new file mode 100644 index 0000000000..50016725d6 --- /dev/null +++ b/engines/adl/hires2.h @@ -0,0 +1,66 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_HIRES2_H +#define ADL_HIRES2_H + +#include "common/str.h" + +#include "adl/adl_v2.h" +#include "adl/disk.h" + +namespace Common { +class ReadStream; +struct Point; +} + +namespace Adl { + +#define IDS_HR2_DISK_IMAGE "WIZARD.DSK" + +#define IDI_HR2_NUM_ROOMS 135 +#define IDI_HR2_NUM_MESSAGES 255 +#define IDI_HR2_NUM_VARS 40 +#define IDI_HR2_NUM_ITEM_PICS 38 +#define IDI_HR2_NUM_ITEM_OFFSETS 16 + +// Messages used outside of scripts +#define IDI_HR2_MSG_CANT_GO_THERE 123 +#define IDI_HR2_MSG_DONT_UNDERSTAND 19 +#define IDI_HR2_MSG_ITEM_DOESNT_MOVE 242 +#define IDI_HR2_MSG_ITEM_NOT_HERE 4 +#define IDI_HR2_MSG_THANKS_FOR_PLAYING 239 + +class HiRes2Engine : public AdlEngine_v2 { +public: + HiRes2Engine(OSystem *syst, const AdlGameDescription *gd) : AdlEngine_v2(syst, gd) { } + +private: + // AdlEngine + void runIntro() const; + void init(); + void initGameState(); +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/hires6.cpp b/engines/adl/hires6.cpp new file mode 100644 index 0000000000..c42b4165a6 --- /dev/null +++ b/engines/adl/hires6.cpp @@ -0,0 +1,444 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/system.h" +#include "common/debug.h" +#include "common/error.h" +#include "common/file.h" +#include "common/stream.h" +#include "common/memstream.h" + +#include "adl/hires6.h" +#include "adl/display.h" +#include "adl/graphics.h" +#include "adl/disk.h" + +namespace Adl { + +static const char *disks[] = { "DARK1A.DSK", "DARK1B.NIB", "DARK2A.NIB", "DARK2B.NIB" }; + +#define SECTORS_PER_TRACK 16 +#define BYTES_PER_SECTOR 256 + +static Common::MemoryReadStream *loadSectors(DiskImage *disk, byte track, byte sector = SECTORS_PER_TRACK - 1, byte count = SECTORS_PER_TRACK) { + const int bufSize = count * BYTES_PER_SECTOR; + byte *const buf = (byte *)malloc(bufSize); + byte *p = buf; + + while (count-- > 0) { + StreamPtr stream(disk->createReadStream(track, sector, 0, 0)); + stream->read(p, BYTES_PER_SECTOR); + + if (stream->err() || stream->eos()) + error("Error loading from disk image"); + + p += BYTES_PER_SECTOR; + if (sector > 0) + --sector; + else { + ++track; + + // Skip VTOC track + if (track == 17) + ++track; + + sector = SECTORS_PER_TRACK - 1; + } + } + + return new Common::MemoryReadStream(buf, bufSize, DisposeAfterUse::YES); +} + +void HiRes6Engine::runIntro() const { + DiskImage_DSK *boot(new DiskImage_DSK()); + + if (!boot->open(disks[0])) + error("Failed to open disk image '%s'", disks[0]); + + StreamPtr stream(loadSectors(boot, 11, 1, 96)); + + _display->setMode(DISPLAY_MODE_HIRES); + _display->loadFrameBuffer(*stream); + _display->updateHiResScreen(); + delay(256 * 8609 / 1000); + + _display->loadFrameBuffer(*stream); + _display->updateHiResScreen(); + delay(256 * 8609 / 1000); + + _display->loadFrameBuffer(*stream); + + delete boot; + + // Load copyright string from boot file + Files_DOS33 *files(new Files_DOS33()); + + if (!files->open(disks[0])) + error("Failed to open disk image '%s'", disks[0]); + + stream.reset(files->createReadStream("\010\010\010\010\010\010")); + Common::String copyright(readStringAt(*stream, 0x103, APPLECHAR('\r'))); + + delete files; + + _display->updateHiResScreen(); + _display->home(); + _display->setMode(DISPLAY_MODE_MIXED); + _display->moveCursorTo(Common::Point(0, 21)); + _display->printString(copyright); + delay(256 * 8609 / 1000); +} + +void HiRes6Engine::init() { + _boot = new DiskImage_DSK(); + _graphics = new Graphics_v2(*_display); + + if (!_boot->open(disks[0])) + error("Failed to open disk image '%s'", disks[0]); + + StreamPtr stream(loadSectors(_boot, 0x7)); + + // Read parser messages + _strings.verbError = readStringAt(*stream, 0x666); + _strings.nounError = readStringAt(*stream, 0x6bd); + _strings.enterCommand = readStringAt(*stream, 0x6e9); + + // Read line feeds + _strings.lineFeeds = readStringAt(*stream, 0x408); + + // Read opcode strings (TODO) + _strings_v2.saveInsert = readStringAt(*stream, 0xad8); + readStringAt(*stream, 0xb95); // Confirm save + // _strings_v2.saveReplace + _strings_v2.restoreInsert = readStringAt(*stream, 0xc07); + // _strings_v2.restoreReplace + _strings.playAgain = readStringAt(*stream, 0xcdf, 0xff); + + _messageIds.cantGoThere = IDI_HR6_MSG_CANT_GO_THERE; + _messageIds.dontUnderstand = IDI_HR6_MSG_DONT_UNDERSTAND; + _messageIds.itemDoesntMove = IDI_HR6_MSG_ITEM_DOESNT_MOVE; + _messageIds.itemNotHere = IDI_HR6_MSG_ITEM_NOT_HERE; + _messageIds.thanksForPlaying = IDI_HR6_MSG_THANKS_FOR_PLAYING; + + // Item descriptions + stream.reset(loadSectors(_boot, 0x6, 0xb, 2)); + stream->seek(0x34); + for (uint i = 0; i < IDI_HR6_NUM_ITEM_DESCS; ++i) + _itemDesc.push_back(readString(*stream, 0xff)); + + // Load dropped item offsets + stream.reset(_boot->createReadStream(0x8, 0x9, 0x16)); + for (uint i = 0; i < IDI_HR6_NUM_ITEM_OFFSETS; ++i) { + Common::Point p; + p.x = stream->readByte(); + p.y = stream->readByte(); + _itemOffsets.push_back(p); + } + + // Location of game data for each disc + stream.reset(_boot->createReadStream(0x5, 0xa, 0x03)); + for (uint i = 0; i < sizeof(disks); ++i) { + DiskDataDesc desc; + desc.track = stream->readByte(); + desc.sector = stream->readByte(); + desc.offset = stream->readByte(); + desc.volume = stream->readByte(); + _diskDataDesc.push_back(desc); + } + + // DataBlockPtr offsets for each disk + stream.reset(_boot->createReadStream(0x3, 0xf, 0x03)); + for (uint i = 0; i < sizeof(disks); ++i) { + DiskOffset offset; + offset.track = stream->readByte(); + offset.sector = stream->readByte(); + _diskOffsets.push_back(offset); + } +} + +void HiRes6Engine::loadDisk(byte disk) { + delete _disk; + _disk = new DiskImage_NIB(); + + if (!_disk->open(disks[disk])) + error("Failed to open disk image '%s'", disks[disk]); + + _curDisk = 0; + + // Load item picture data (indexed on boot disk) + StreamPtr stream(_boot->createReadStream(0xb, 0xd, 0x08)); + _itemPics.clear(); + for (uint i = 0; i < IDI_HR6_NUM_ITEM_PICS; ++i) { + stream->readByte(); + _itemPics.push_back(readDataBlockPtr(*stream)); + } + + _curDisk = disk; + + byte track = _diskDataDesc[disk].track; + byte sector = _diskDataDesc[disk].sector; + uint offset = _diskDataDesc[disk].offset; + + applyDiskOffset(track, sector); + + for (uint block = 0; block < 7; ++block) { + stream.reset(_disk->createReadStream(track, sector, offset, 1)); + + uint16 addr = stream->readUint16LE(); + uint16 size = stream->readUint16LE(); + + stream.reset(_disk->createReadStream(track, sector, offset, size / 256 + 1)); + stream->skip(4); + + switch (addr) { + case 0x9000: { + // Messages + _messages.clear(); + uint count = size / 4; + for (uint i = 0; i < count; ++i) + _messages.push_back(readDataBlockPtr(*stream)); + break; + } + case 0x4a80: { + // Global pics + _pictures.clear(); + byte picNr; + while ((picNr = stream->readByte()) != 0xff) { + if (stream->eos() || stream->err()) + error("Error reading global pic list"); + _pictures[picNr] = readDataBlockPtr(*stream); + } + break; + } + case 0x4000: + // Verbs + loadWords(*stream, _verbs, _priVerbs); + break; + case 0x1800: + // Nouns + loadWords(*stream, _nouns, _priNouns); + break; + case 0x0e00: { + // Rooms + uint count = size / 14 - 1; + stream->skip(14); // Skip invalid room 0 + + _state.rooms.clear(); + for (uint i = 0; i < count; ++i) { + Room room; + stream->readByte(); // number + for (uint j = 0; j < 6; ++j) + room.connections[j] = stream->readByte(); + room.data = readDataBlockPtr(*stream); + room.picture = stream->readByte(); + room.curPicture = stream->readByte(); + room.isFirstTime = stream->readByte(); + _state.rooms.push_back(room); + } + break; + } + case 0x7b00: + // Global commands + readCommands(*stream, _globalCommands); + break; + case 0x9500: + // Room commands + readCommands(*stream, _roomCommands); + break; + default: + error("Unknown data block found (addr %04x; size %04x)", addr, size); + } + + offset += 4 + size; + while (offset >= 256) { + offset -= 256; + ++sector; + if (sector >= 16) { + sector = 0; + ++track; + } + } + } +} + +void HiRes6Engine::initGameState() { + _state.vars.resize(IDI_HR6_NUM_VARS); + + loadDisk(1); + + StreamPtr stream(_boot->createReadStream(0x3, 0xe, 0x03)); + + byte id; + while ((id = stream->readByte()) != 0xff) { + Item item = Item(); + item.id = id; + item.noun = stream->readByte(); + item.room = stream->readByte(); + item.picture = stream->readByte(); + item.isLineArt = stream->readByte(); // Now seems to be disk number + item.position.x = stream->readByte(); + item.position.y = stream->readByte(); + item.state = stream->readByte(); + item.description = stream->readByte(); + + stream->readByte(); // Struct size + + byte picListSize = stream->readByte(); + + // Flag to keep track of what has been drawn on the screen + stream->readByte(); + + for (uint i = 0; i < picListSize; ++i) + item.roomPictures.push_back(stream->readByte()); + + _state.items.push_back(item); + } + + _currVerb = _currNoun = 0; +} + +void HiRes6Engine::showRoom() { + bool redrawPic = false; + + if (getVar(26) == 0xfe) + setVar(26, 0); + else if (getVar(26) != 0xff) + setVar(26, _state.room); + + if (_state.room != _roomOnScreen) { + loadRoom(_state.room); + + if (getVar(26) < 0x80 && getCurRoom().isFirstTime) + setVar(26, 0); + + clearScreen(); + + if (!_state.isDark) + redrawPic = true; + } else { + if (getCurRoom().curPicture != _picOnScreen || _itemRemoved) + redrawPic = true; + } + + if (redrawPic) { + _roomOnScreen = _state.room; + _picOnScreen = getCurRoom().curPicture; + + drawPic(getCurRoom().curPicture); + _itemRemoved = false; + _itemsOnScreen = 0; + + Common::List<Item>::iterator item; + for (item = _state.items.begin(); item != _state.items.end(); ++item) + item->isOnScreen = false; + } + + if (!_state.isDark) + drawItems(); + + _display->updateHiResScreen(); + setVar(2, 0xff); + printString(_roomData.description); + + // FIXME: move to main loop? + _linesPrinted = 0; +} + +Common::String HiRes6Engine::formatVerbError(const Common::String &verb) const { + Common::String err = _strings.verbError; + + for (uint i = 0; i < verb.size(); ++i) + err.setChar(verb[i], i + 24); + + err.setChar(APPLECHAR(' '), 32); + + uint i = 24; + while (err[i] != APPLECHAR(' ')) + ++i; + + err.setChar(APPLECHAR('.'), i); + + return err; +} + +Common::String HiRes6Engine::formatNounError(const Common::String &verb, const Common::String &noun) const { + Common::String err = _strings.nounError; + + for (uint i = 0; i < noun.size(); ++i) + err.setChar(noun[i], i + 24); + + for (uint i = 35; i > 31; --i) + err.setChar(APPLECHAR(' '), i); + + uint i = 24; + while (err[i] != APPLECHAR(' ')) + ++i; + + err.setChar(APPLECHAR('I'), i + 1); + err.setChar(APPLECHAR('S'), i + 2); + err.setChar(APPLECHAR('.'), i + 3); + + return err; +} + +void HiRes6Engine::printString(const Common::String &str) { + Common::String s; + uint found = 0; + + // This does not emulate the corner cases of the original, hence this check + if (getVar(27) > 1) + error("Invalid value %i encountered for variable 27", getVar(27)); + + for (uint i = 0; i < str.size(); ++i) { + if (str[i] == '%') { + ++found; + if (found == 3) + found = 0; + } else { + if (found == 0 || found - 1 == getVar(27)) + s += str[i]; + } + } + + if (getVar(2) != 0xff) { + AdlEngine_v2::printString(s); + } else { + if (getVar(26) == 0) { + if (str.size() != 1 || APPLECHAR(str[0]) != APPLECHAR(' ')) + return AdlEngine_v2::printString(s); + setVar(2, APPLECHAR(' ')); + } else if (getVar(26) != 0xff) { + setVar(2, 'P'); + } else { + setVar(26, _state.room); + setVar(2, 1); + } + + doAllCommands(_globalCommands, _currVerb, _currNoun); + } +} + +Engine *HiRes6Engine_create(OSystem *syst, const AdlGameDescription *gd) { + return new HiRes6Engine(syst, gd); +} + +} // End of namespace Adl diff --git a/engines/adl/hires6.h b/engines/adl/hires6.h new file mode 100644 index 0000000000..4bd2bcc7cc --- /dev/null +++ b/engines/adl/hires6.h @@ -0,0 +1,92 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ADL_HIRES6_H +#define ADL_HIRES6_H + +#include "common/str.h" + +#include "adl/adl_v3.h" +#include "adl/disk.h" + +namespace Common { +class ReadStream; +struct Point; +} + +namespace Adl { + +#define IDI_HR6_NUM_ROOMS 35 +#define IDI_HR6_NUM_MESSAGES 256 +#define IDI_HR6_NUM_VARS 40 +#define IDI_HR6_NUM_ITEM_DESCS 15 +#define IDI_HR6_NUM_ITEM_PICS 15 +#define IDI_HR6_NUM_ITEM_OFFSETS 16 + +// Messages used outside of scripts +#define IDI_HR6_MSG_CANT_GO_THERE 249 +#define IDI_HR6_MSG_DONT_UNDERSTAND 247 +#define IDI_HR6_MSG_ITEM_DOESNT_MOVE 253 +#define IDI_HR6_MSG_ITEM_NOT_HERE 254 +#define IDI_HR6_MSG_THANKS_FOR_PLAYING 252 + +struct DiskDataDesc { + byte track; + byte sector; + byte offset; + byte volume; +}; + +class HiRes6Engine : public AdlEngine_v3 { +public: + HiRes6Engine(OSystem *syst, const AdlGameDescription *gd) : + AdlEngine_v3(syst, gd), + _boot(nullptr), + _currVerb(0), + _currNoun(0) { + } + + ~HiRes6Engine() { delete _boot; } + +private: + // AdlEngine + void runIntro() const; + void init(); + void initGameState(); + void printRoomDescription(); + void showRoom(); + Common::String formatVerbError(const Common::String &verb) const; + Common::String formatNounError(const Common::String &verb, const Common::String &noun) const; + + // AdlEngine_v2 + void printString(const Common::String &str); + + void loadDisk(byte disk); + + DiskImage_DSK *_boot; + byte _currVerb, _currNoun; + Common::Array<DiskDataDesc> _diskDataDesc; +}; + +} // End of namespace Adl + +#endif diff --git a/engines/adl/module.mk b/engines/adl/module.mk index 6acd06f6de..7ab37efc67 100644 --- a/engines/adl/module.mk +++ b/engines/adl/module.mk @@ -2,9 +2,19 @@ MODULE := engines/adl MODULE_OBJS := \ adl.o \ + adl_v2.o \ + adl_v3.o \ + console.o \ detection.o \ + disk.o \ display.o \ - hires1.o + graphics.o \ + graphics_v1.o \ + graphics_v2.o \ + hires1.o \ + hires2.o \ + hires6.o \ + speaker.o MODULE_DIRS += \ engines/adl diff --git a/engines/adl/speaker.cpp b/engines/adl/speaker.cpp new file mode 100644 index 0000000000..532d361cd9 --- /dev/null +++ b/engines/adl/speaker.cpp @@ -0,0 +1,94 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/system.h" +#include "common/events.h" + +#include "engines/engine.h" + +#include "audio/audiostream.h" +#include "audio/decoders/raw.h" + +#include "adl/speaker.h" +#include "adl/adl.h" + +namespace Adl { + +// Number of times to duplicate each sample +#define SAMPLE_DUP 4 +// Bell frequency in Hz +#define BELL_FREQ 1000 +// Sample rate +#define SAMPLE_RATE (BELL_FREQ * SAMPLE_DUP * 2) +// Number of waves per 0.1 seconds (bell length) +#define BELL_WAVE_COUNT (SAMPLE_RATE / 10 / SAMPLE_DUP / 2) +// Length of bell in samples +#define BELL_LEN (BELL_WAVE_COUNT * SAMPLE_DUP * 2) +// Length of silence in samples +#define SILENCE_LEN (SAMPLE_RATE / 80) + +Speaker::~Speaker() { + delete[] _bell; + delete[] _silence; +} + +Speaker::Speaker() { + _bell = new byte[BELL_LEN]; + + byte *buf = _bell; + for (uint i = 0; i < BELL_WAVE_COUNT; ++i) { + for (uint j = 0; j < SAMPLE_DUP; ++j) + *buf++ = 0x00; + for (uint j = 0; j < SAMPLE_DUP; ++j) + *buf++ = 0xff; + } + + _silence = new byte[SILENCE_LEN]; + + buf = _silence; + for (uint i = 0; i < SILENCE_LEN; ++i) + *buf++ = 0x80; +} + +void Speaker::bell(uint count) { + Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SAMPLE_RATE, false); + Audio::SoundHandle handle; + + stream->queueBuffer(_bell, BELL_LEN, DisposeAfterUse::NO, Audio::FLAG_UNSIGNED); + + for (uint i = 1; i < count; ++i) { + stream->queueBuffer(_silence, SILENCE_LEN, DisposeAfterUse::NO, Audio::FLAG_UNSIGNED); + stream->queueBuffer(_bell, BELL_LEN, DisposeAfterUse::NO, Audio::FLAG_UNSIGNED); + } + + stream->finish(); + + g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &handle, stream); + + while (!g_engine->shouldQuit() && g_system->getMixer()->isSoundHandleActive(handle)) { + Common::Event event; + static_cast<AdlEngine *>(g_engine)->pollEvent(event); + g_system->delayMillis(16); + } +} + +} // End of namespace Adl diff --git a/engines/sci/graphics/paint.h b/engines/adl/speaker.h index b2277131d5..31aaac32d2 100644 --- a/engines/sci/graphics/paint.h +++ b/engines/adl/speaker.h @@ -20,20 +20,30 @@ * */ -#ifndef SCI_GRAPHICS_PAINT_H -#define SCI_GRAPHICS_PAINT_H +#ifndef ADL_SPEAKER_H +#define ADL_SPEAKER_H -namespace Sci { +#include "common/types.h" -class GfxPaint { +#include "audio/mixer.h" + +namespace Audio { +class AudioStream; +} + +namespace Adl { + +class Speaker { public: - GfxPaint(); - virtual ~GfxPaint(); + Speaker(); + ~Speaker(); + + void bell(uint count); - virtual void kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo); - virtual void kernelGraphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control); +private: + byte *_bell, *_silence; }; -} // End of namespace Sci +} // End of namespace Adl #endif diff --git a/engines/agi/global.cpp b/engines/agi/global.cpp index 23256f27fb..6f83f02a4e 100644 --- a/engines/agi/global.cpp +++ b/engines/agi/global.cpp @@ -21,6 +21,7 @@ */ #include "common/config-manager.h" +#include "audio/mixer.h" #include "agi/agi.h" #include "agi/graphics.h" diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp index 24cd4f43d3..3b1b99f458 100644 --- a/engines/agi/graphics.cpp +++ b/engines/agi/graphics.cpp @@ -61,6 +61,14 @@ GfxMgr::GfxMgr(AgiBase *vm, GfxFont *font) : _vm(vm), _font(font) { _displayWidthMulAdjust = 0; // visualPos * (2+0) = displayPos _displayHeightMulAdjust = 0; // visualPos * (1+0) = displayPos + + _pixels = 0; + _displayPixels = 0; + + _activeScreen = NULL; + _gameScreen = NULL; + _priorityScreen = NULL; + _displayScreen = NULL; } /** diff --git a/engines/agi/lzw.cpp b/engines/agi/lzw.cpp index bf41e1f3b4..ecb69543d7 100644 --- a/engines/agi/lzw.cpp +++ b/engines/agi/lzw.cpp @@ -72,6 +72,7 @@ LZWDecoder::LZWDecoder() { appendCharacter = (uint8 *)malloc(TABLE_SIZE * sizeof(uint8)); inputBitCount = 0; // Number of bits in input bit buffer inputBitBuffer = 0L; + BITS = MAX_VALUE = MAX_CODE = 0; } LZWDecoder::~LZWDecoder() { diff --git a/engines/agi/picture.cpp b/engines/agi/picture.cpp index a80e811f44..2b3bba89db 100644 --- a/engines/agi/picture.cpp +++ b/engines/agi/picture.cpp @@ -44,6 +44,8 @@ PictureMgr::PictureMgr(AgiBase *agi, GfxMgr *gfx) { _minCommand = 0xf0; _flags = 0; _currentStep = 0; + + _width = _height = 0; } void PictureMgr::putVirtPixel(int x, int y) { diff --git a/engines/agi/preagi.cpp b/engines/agi/preagi.cpp index 7e2e65a3eb..f8630db0b6 100644 --- a/engines/agi/preagi.cpp +++ b/engines/agi/preagi.cpp @@ -20,6 +20,7 @@ * */ +#include "audio/mixer.h" #include "audio/softsynth/pcspk.h" #include "common/debug-channels.h" @@ -50,6 +51,8 @@ PreAgiEngine::PreAgiEngine(OSystem *syst, const AGIGameDescription *gameDesc) : memset(&_game, 0, sizeof(struct AgiGame)); memset(&_debug, 0, sizeof(struct AgiDebug)); memset(&_mouse, 0, sizeof(struct Mouse)); + + _speakerHandle = new Audio::SoundHandle(); } void PreAgiEngine::initialize() { @@ -74,7 +77,7 @@ void PreAgiEngine::initialize() { _gfx->initVideo(); _speakerStream = new Audio::PCSpeaker(_mixer->getOutputRate()); - _mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle, + _mixer->playStream(Audio::Mixer::kSFXSoundType, _speakerHandle, _speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); debugC(2, kDebugLevelMain, "Detect game"); @@ -89,8 +92,9 @@ void PreAgiEngine::initialize() { } PreAgiEngine::~PreAgiEngine() { - _mixer->stopHandle(_speakerHandle); + _mixer->stopHandle(*_speakerHandle); delete _speakerStream; + delete _speakerHandle; delete _picture; delete _gfx; diff --git a/engines/agi/preagi.h b/engines/agi/preagi.h index d6026a5d4d..6950aa30cd 100644 --- a/engines/agi/preagi.h +++ b/engines/agi/preagi.h @@ -26,6 +26,7 @@ #include "agi/agi.h" namespace Audio { +class SoundHandle; class PCSpeaker; } @@ -110,7 +111,7 @@ private: int _defaultColor; Audio::PCSpeaker *_speakerStream; - Audio::SoundHandle _speakerHandle; + Audio::SoundHandle *_speakerHandle; }; } // End of namespace Agi diff --git a/engines/agi/preagi_mickey.cpp b/engines/agi/preagi_mickey.cpp index e1545cdb68..0584aab683 100644 --- a/engines/agi/preagi_mickey.cpp +++ b/engines/agi/preagi_mickey.cpp @@ -255,7 +255,7 @@ bool MickeyEngine::checkMenu() { return parse(menu.cmd[iSel0].data[iSel1], menu.arg[iSel0].data[iSel1]); } -void MickeyEngine::drawMenu(MSA_MENU menu, int sel0, int sel1) { +void MickeyEngine::drawMenu(MSA_MENU &menu, int sel0, int sel1) { int iWord; int iRow; int sel; @@ -286,7 +286,7 @@ void MickeyEngine::drawMenu(MSA_MENU menu, int sel0, int sel1) { _gfx->updateScreen(); } -void MickeyEngine::getMouseMenuSelRow(MSA_MENU menu, int *sel0, int *sel1, int iRow, int x, int y) { +void MickeyEngine::getMouseMenuSelRow(MSA_MENU &menu, int *sel0, int *sel1, int iRow, int x, int y) { int iWord; int *sel = 0; @@ -313,7 +313,7 @@ void MickeyEngine::getMouseMenuSelRow(MSA_MENU menu, int *sel0, int *sel1, int i } } -bool MickeyEngine::getMenuSelRow(MSA_MENU menu, int *sel0, int *sel1, int iRow) { +bool MickeyEngine::getMenuSelRow(MSA_MENU &menu, int *sel0, int *sel1, int iRow) { Common::Event event; int *sel = 0; int nWords; diff --git a/engines/agi/preagi_mickey.h b/engines/agi/preagi_mickey.h index 81565d3982..066880d324 100644 --- a/engines/agi/preagi_mickey.h +++ b/engines/agi/preagi_mickey.h @@ -710,9 +710,9 @@ protected: void printExeMsg(int); void printDesc(int); bool checkMenu(); - void drawMenu(MSA_MENU, int, int); - void getMouseMenuSelRow(MSA_MENU, int *, int *, int, int, int); - bool getMenuSelRow(MSA_MENU, int *, int *, int); + void drawMenu(MSA_MENU &, int, int); + void getMouseMenuSelRow(MSA_MENU &, int *, int *, int, int, int); + bool getMenuSelRow(MSA_MENU &, int *, int *, int); void getMenuSel(char *, int *, int *); void centerMenu(MSA_MENU *); void patchMenu(MSA_MENU *); diff --git a/engines/agi/sound.cpp b/engines/agi/sound.cpp index edf17960ad..2c1eb021f9 100644 --- a/engines/agi/sound.cpp +++ b/engines/agi/sound.cpp @@ -29,9 +29,19 @@ #include "agi/sound_pcjr.h" #include "common/textconsole.h" +#include "audio/mixer.h" namespace Agi { +SoundGen::SoundGen(AgiBase *vm, Audio::Mixer *pMixer) : _vm(vm), _mixer(pMixer) { + _sampleRate = pMixer->getOutputRate(); + _soundHandle = new Audio::SoundHandle(); +} + +SoundGen::~SoundGen() { + delete _soundHandle; +} + // // TODO: add support for variable sampling rate in the output device // @@ -183,6 +193,7 @@ SoundMgr::SoundMgr(AgiBase *agi, Audio::Mixer *pMixer) { _playingSound = -1; switch (_vm->_soundemu) { + default: case SOUND_EMU_NONE: case SOUND_EMU_AMIGA: case SOUND_EMU_MAC: diff --git a/engines/agi/sound.h b/engines/agi/sound.h index 4b668e8cf2..8aa7a5d1df 100644 --- a/engines/agi/sound.h +++ b/engines/agi/sound.h @@ -23,7 +23,10 @@ #ifndef AGI_SOUND_H #define AGI_SOUND_H -#include "audio/mixer.h" +namespace Audio { +class Mixer; +class SoundHandle; +} namespace Agi { @@ -71,11 +74,8 @@ class SoundMgr; class SoundGen { public: - SoundGen(AgiBase *vm, Audio::Mixer *pMixer) : _vm(vm), _mixer(pMixer) { - _sampleRate = pMixer->getOutputRate(); - } - - virtual ~SoundGen() {} + SoundGen(AgiBase *vm, Audio::Mixer *pMixer); + virtual ~SoundGen(); virtual void play(int resnum) = 0; virtual void stop(void) = 0; @@ -83,7 +83,7 @@ public: AgiBase *_vm; Audio::Mixer *_mixer; - Audio::SoundHandle _soundHandle; + Audio::SoundHandle *_soundHandle; uint32 _sampleRate; }; diff --git a/engines/agi/sound_2gs.cpp b/engines/agi/sound_2gs.cpp index b1bcee3920..4992b6516c 100644 --- a/engines/agi/sound_2gs.cpp +++ b/engines/agi/sound_2gs.cpp @@ -27,6 +27,7 @@ #include "common/memstream.h" #include "common/str-array.h" #include "common/textconsole.h" +#include "audio/mixer.h" #include "agi/agi.h" #include "agi/sound_2gs.h" @@ -55,11 +56,11 @@ SoundGen2GS::SoundGen2GS(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixe // Load instruments _disableMidi = !loadInstruments(); - _mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); + _mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); } SoundGen2GS::~SoundGen2GS() { - _mixer->stopHandle(_soundHandle); + _mixer->stopHandle(*_soundHandle); delete[] _wavetable; delete[] _out; } diff --git a/engines/agi/sound_2gs.h b/engines/agi/sound_2gs.h index a7a23f5b06..49a375cdbc 100644 --- a/engines/agi/sound_2gs.h +++ b/engines/agi/sound_2gs.h @@ -126,6 +126,7 @@ public: memset(&osc, 0, sizeof(osc)); seg = 0; a = 0; + velocity = 0; } const IIgsInstrumentHeader *curInstrument; ///< Currently used instrument diff --git a/engines/agi/sound_pcjr.cpp b/engines/agi/sound_pcjr.cpp index 9d556e048a..0a0c456e14 100644 --- a/engines/agi/sound_pcjr.cpp +++ b/engines/agi/sound_pcjr.cpp @@ -54,6 +54,7 @@ * */ +#include "audio/mixer.h" #include "agi/agi.h" #include "agi/sound.h" #include "agi/sound_pcjr.h" @@ -123,7 +124,7 @@ SoundGenPCJr::SoundGenPCJr(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMi memset(_channel, 0, sizeof(_channel)); memset(_tchannel, 0, sizeof(_tchannel)); - _mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); + _mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); _v1data = NULL; _v1size = 0; @@ -132,7 +133,7 @@ SoundGenPCJr::SoundGenPCJr(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMi SoundGenPCJr::~SoundGenPCJr() { free(_chanData); - _mixer->stopHandle(_soundHandle); + _mixer->stopHandle(*_soundHandle); } void SoundGenPCJr::play(int resnum) { diff --git a/engines/agi/sound_sarien.cpp b/engines/agi/sound_sarien.cpp index 939c3d2c77..3e44546688 100644 --- a/engines/agi/sound_sarien.cpp +++ b/engines/agi/sound_sarien.cpp @@ -21,6 +21,7 @@ */ #include "common/random.h" +#include "audio/mixer.h" #include "agi/agi.h" @@ -73,6 +74,7 @@ SoundGenSarien::SoundGenSarien(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, _useChorus = true; // FIXME: Currently always true? switch (_vm->_soundemu) { + default: case SOUND_EMU_NONE: _waveform = waveformRamp; _env = true; @@ -92,11 +94,11 @@ SoundGenSarien::SoundGenSarien(AgiBase *vm, Audio::Mixer *pMixer) : SoundGen(vm, debug(0, "Initializing sound: envelopes disabled"); } - _mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); + _mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); } SoundGenSarien::~SoundGenSarien() { - _mixer->stopHandle(_soundHandle); + _mixer->stopHandle(*_soundHandle); free(_sndBuffer); } diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp index 274a654547..4aa42ffec3 100644 --- a/engines/agi/text.cpp +++ b/engines/agi/text.cpp @@ -39,6 +39,8 @@ TextMgr::TextMgr(AgiEngine *vm, Words *words, GfxMgr *gfx) { _words = words; _gfx = gfx; + _systemUI = NULL; + memset(&_messageState, 0, sizeof(_messageState)); _textPos.row = 0; _textPos.column = 0; diff --git a/engines/agi/view.h b/engines/agi/view.h index e59916da78..adcf7dd1b3 100644 --- a/engines/agi/view.h +++ b/engines/agi/view.h @@ -132,6 +132,8 @@ struct ScreenObjEntry { uint8 wander_count; // end of motion related variables uint8 loop_flag; + + ScreenObjEntry() { memset(this, 0, sizeof(ScreenObjEntry)); } }; // struct vt_entry } // End of namespace Agi diff --git a/engines/bbvs/spritemodule.cpp b/engines/bbvs/spritemodule.cpp index f8b0d9afd5..74c71e5aeb 100644 --- a/engines/bbvs/spritemodule.cpp +++ b/engines/bbvs/spritemodule.cpp @@ -32,7 +32,8 @@ byte *Sprite::getRow(int y) { } SpriteModule::SpriteModule() - : _spritesCount(0), _paletteStart(0), _paletteCount(0), _spriteData(0) { + : _spritesCount(0), _paletteStart(0), _paletteCount(0), _spriteData(0), _spriteDataSize(0), + _spriteTblOffs(0), _paletteOffs(0) { } SpriteModule::~SpriteModule() { diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 52168dc934..82d27f8d54 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -123,7 +123,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Soltys (c) 1994-1996 L.K. Avalon"; + return "Soltys (C) 1994-1996 L.K. Avalon"; } virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; diff --git a/engines/cge2/detection.cpp b/engines/cge2/detection.cpp index 01119bb1fd..2b84d167c7 100644 --- a/engines/cge2/detection.cpp +++ b/engines/cge2/detection.cpp @@ -119,7 +119,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Sfinx (c) 1994-1997 Janus B. Wisniewski and L.K. Avalon"; + return "Sfinx (C) 1994-1997 Janus B. Wisniewski and L.K. Avalon"; } virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; diff --git a/engines/engine.cpp b/engines/engine.cpp index d3b9b113cf..8fff99f3fc 100644 --- a/engines/engine.cpp +++ b/engines/engine.cpp @@ -269,8 +269,8 @@ void splashScreen() { // Load logo Graphics::Surface *logo = bitmap.getSurface()->convertTo(g_system->getOverlayFormat(), bitmap.getPalette()); - int lx = (g_system->getOverlayWidth() - logo->w) / 2; - int ly = (g_system->getOverlayHeight() - logo->h) / 2; + int lx = MAX((g_system->getOverlayWidth() - logo->w) / 2, 0); + int ly = MAX((g_system->getOverlayHeight() - logo->h) / 2, 0); // Print version information const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kConsoleFont); @@ -283,7 +283,10 @@ void splashScreen() { screen.free(); // Draw logo - g_system->copyRectToOverlay(logo->getPixels(), logo->pitch, lx, ly, logo->w, logo->h); + int lw = MIN<uint16>(logo->w, g_system->getOverlayWidth() - lx); + int lh = MIN<uint16>(logo->h, g_system->getOverlayHeight() - ly); + + g_system->copyRectToOverlay(logo->getPixels(), logo->pitch, lx, ly, lw, lh); logo->free(); delete logo; diff --git a/engines/gnap/character.cpp b/engines/gnap/character.cpp index 36d849acbf..56e520068d 100644 --- a/engines/gnap/character.cpp +++ b/engines/gnap/character.cpp @@ -402,22 +402,12 @@ int PlayerGnap::getSequenceId(int kind, Common::Point gridPos) { case kGSMoan1: if (gridPos.x > 0 && gridPos.y > 0) { - if (_pos.y > gridPos.y) { - if (_pos.x > gridPos.x) { - sequenceId = 0x832; - _idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _idleFacing = kDirBottomRight; - } + if (_pos.x > gridPos.x) { + sequenceId = 0x832; + _idleFacing = kDirBottomLeft; } else { - if (_pos.x > gridPos.x) { - sequenceId = 0x832; - _idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _idleFacing = kDirBottomRight; - } + sequenceId = 0x7AA; + _idleFacing = kDirBottomRight; } } else if (_idleFacing != kDirBottomRight && _idleFacing != kDirUpRight) { sequenceId = 0x832; diff --git a/engines/gnap/configure.engine b/engines/gnap/configure.engine index 7aa538fd2c..f3742ef0d2 100644 --- a/engines/gnap/configure.engine +++ b/engines/gnap/configure.engine @@ -1,3 +1,3 @@ # This file is included from the main "configure" script # add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] -add_engine gnap "UFOs" no +add_engine gnap "UFOs" no "" "" "highres" diff --git a/engines/gnap/datarchive.cpp b/engines/gnap/datarchive.cpp index c74766bd03..3a586c58ba 100644 --- a/engines/gnap/datarchive.cpp +++ b/engines/gnap/datarchive.cpp @@ -83,7 +83,6 @@ DatManager::~DatManager() { void DatManager::open(int index, const char *filename) { close(index); _datArchives[index] = new DatArchive(filename); - warning("Loading %s - %d", filename, index); } void DatManager::close(int index) { diff --git a/engines/gnap/detection.cpp b/engines/gnap/detection.cpp index a7e9eece4a..7e4ab56d1f 100644 --- a/engines/gnap/detection.cpp +++ b/engines/gnap/detection.cpp @@ -43,7 +43,7 @@ static const ADGameDescription gameDescriptions[] = { {"stock_n.dat", 0, "46819043d019a2f36b727cc2bdd6980f", 12515823}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO0() + Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING, GUIO0() }, { "gnap", "", @@ -51,7 +51,7 @@ static const ADGameDescription gameDescriptions[] = { {"stock_n.dat", 0, "46819043d019a2f36b727cc2bdd6980f", 12995485}, AD_LISTEND }, - Common::RU_RUS, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO0() + Common::RU_RUS, Common::kPlatformWindows, ADGF_TESTING, GUIO0() }, AD_TABLE_END_MARKER @@ -154,11 +154,10 @@ SaveStateDescriptor GnapMetaEngine::querySaveMetaInfos(const char *target, int s return SaveStateDescriptor(); } - char saveName[256]; + Common::String saveName; char ch; - int i = 0; while ((ch = (char)file->readByte()) != '\0') - saveName[i++] = ch; + saveName += ch; SaveStateDescriptor desc(slot, saveName); diff --git a/engines/gnap/fontdata.h b/engines/gnap/fontdata.h index ef39df960e..61128211fc 100644 --- a/engines/gnap/fontdata.h +++ b/engines/gnap/fontdata.h @@ -28,6 +28,8 @@ namespace Gnap { struct FONT_CHAR_INFO { const byte _width; // width, in bits (or pixels), of the character const uint16 _offset; // offset of the character's bitmap, in bytes, into the the FONT_INFO's data array + + FONT_CHAR_INFO(byte width, uint16 offset) : _width(width), _offset(offset) {} }; /* @@ -747,101 +749,101 @@ const byte _dejaVuSans9ptCharBitmaps[] = { /* Character descriptors for DejaVu Sans 9pt */ /* { [Char width in bits], [Offset into dejaVuSans9ptCharBitmaps in bytes] } */ const FONT_CHAR_INFO _dejaVuSans9ptCharDescriptors[] = { - {5, 0}, /* */ - {1, 10}, /* ! */ - {3, 12}, /* " */ - {8, 18}, /* # */ - {5, 34}, /* $ */ - {10, 44}, /* % */ - {8, 64}, /* & */ - {1, 80}, /* ' */ - {3, 82}, /* ( */ - {3, 88}, /* ) */ - {5, 94}, /* * */ - {7, 104}, /* + */ - {1, 118}, /* , */ - {3, 120}, /* - */ - {1, 126}, /* . */ - {4, 128}, /* / */ - {6, 136}, /* 0 */ - {5, 148}, /* 1 */ - {6, 158}, /* 2 */ - {6, 170}, /* 3 */ - {6, 182}, /* 4 */ - {6, 194}, /* 5 */ - {6, 206}, /* 6 */ - {6, 218}, /* 7 */ - {6, 230}, /* 8 */ - {6, 242}, /* 9 */ - {1, 254}, /* : */ - {1, 256}, /* ; */ - {8, 258}, /* < */ - {8, 274}, /* = */ - {8, 290}, /* > */ - {5, 306}, /* ? */ - {11, 316}, /* @ */ - {8, 338}, /* A */ - {6, 354}, /* B */ - {6, 366}, /* C */ - {7, 378}, /* D */ - {6, 392}, /* E */ - {5, 404}, /* F */ - {7, 414}, /* G */ - {7, 428}, /* H */ - {1, 442}, /* I */ - {3, 444}, /* J */ - {6, 450}, /* K */ - {5, 462}, /* L */ - {8, 472}, /* M */ - {7, 488}, /* N */ - {7, 502}, /* O */ - {6, 516}, /* P */ - {7, 528}, /* Q */ - {7, 542}, /* R */ - {6, 556}, /* S */ - {7, 568}, /* T */ - {7, 582}, /* U */ - {8, 596}, /* V */ - {11, 612}, /* W */ - {7, 634}, /* X */ - {7, 648}, /* Y */ - {7, 662}, /* Z */ - {2, 676}, /* [ */ - {4, 680}, /* \ */ - {2, 688}, /* ] */ - {6, 692}, /* ^ */ - {6, 704}, /* _ */ - {2, 716}, /* ` */ - {6, 720}, /* a */ - {6, 732}, /* b */ - {5, 744}, /* c */ - {6, 754}, /* d */ - {6, 766}, /* e */ - {4, 778}, /* f */ - {6, 786}, /* g */ - {6, 798}, /* h */ - {1, 810}, /* i */ - {2, 812}, /* j */ - {5, 816}, /* k */ - {1, 826}, /* l */ - {9, 828}, /* m */ - {6, 846}, /* n */ - {6, 858}, /* o */ - {6, 870}, /* p */ - {6, 882}, /* q */ - {4, 894}, /* r */ - {5, 902}, /* s */ - {4, 912}, /* t */ - {6, 920}, /* u */ - {6, 932}, /* v */ - {9, 944}, /* w */ - {6, 962}, /* x */ - {6, 974}, /* y */ - {5, 986}, /* z */ - {5, 996}, /* { */ - {1, 1006}, /* | */ - {5, 1008}, /* } */ - {8, 1018}, /* ~ */ + FONT_CHAR_INFO(5, 0), /* */ + FONT_CHAR_INFO(1, 10), /* ! */ + FONT_CHAR_INFO(3, 12), /* " */ + FONT_CHAR_INFO(8, 18), /* # */ + FONT_CHAR_INFO(5, 34), /* $ */ + FONT_CHAR_INFO(10, 44), /* % */ + FONT_CHAR_INFO(8, 64), /* & */ + FONT_CHAR_INFO(1, 80), /* ' */ + FONT_CHAR_INFO(3, 82), /* ( */ + FONT_CHAR_INFO(3, 88), /* ) */ + FONT_CHAR_INFO(5, 94), /* * */ + FONT_CHAR_INFO(7, 104), /* + */ + FONT_CHAR_INFO(1, 118), /* , */ + FONT_CHAR_INFO(3, 120), /* - */ + FONT_CHAR_INFO(1, 126), /* . */ + FONT_CHAR_INFO(4, 128), /* / */ + FONT_CHAR_INFO(6, 136), /* 0 */ + FONT_CHAR_INFO(5, 148), /* 1 */ + FONT_CHAR_INFO(6, 158), /* 2 */ + FONT_CHAR_INFO(6, 170), /* 3 */ + FONT_CHAR_INFO(6, 182), /* 4 */ + FONT_CHAR_INFO(6, 194), /* 5 */ + FONT_CHAR_INFO(6, 206), /* 6 */ + FONT_CHAR_INFO(6, 218), /* 7 */ + FONT_CHAR_INFO(6, 230), /* 8 */ + FONT_CHAR_INFO(6, 242), /* 9 */ + FONT_CHAR_INFO(1, 254), /* : */ + FONT_CHAR_INFO(1, 256), /* ; */ + FONT_CHAR_INFO(8, 258), /* < */ + FONT_CHAR_INFO(8, 274), /* = */ + FONT_CHAR_INFO(8, 290), /* > */ + FONT_CHAR_INFO(5, 306), /* ? */ + FONT_CHAR_INFO(11, 316), /* @ */ + FONT_CHAR_INFO(8, 338), /* A */ + FONT_CHAR_INFO(6, 354), /* B */ + FONT_CHAR_INFO(6, 366), /* C */ + FONT_CHAR_INFO(7, 378), /* D */ + FONT_CHAR_INFO(6, 392), /* E */ + FONT_CHAR_INFO(5, 404), /* F */ + FONT_CHAR_INFO(7, 414), /* G */ + FONT_CHAR_INFO(7, 428), /* H */ + FONT_CHAR_INFO(1, 442), /* I */ + FONT_CHAR_INFO(3, 444), /* J */ + FONT_CHAR_INFO(6, 450), /* K */ + FONT_CHAR_INFO(5, 462), /* L */ + FONT_CHAR_INFO(8, 472), /* M */ + FONT_CHAR_INFO(7, 488), /* N */ + FONT_CHAR_INFO(7, 502), /* O */ + FONT_CHAR_INFO(6, 516), /* P */ + FONT_CHAR_INFO(7, 528), /* Q */ + FONT_CHAR_INFO(7, 542), /* R */ + FONT_CHAR_INFO(6, 556), /* S */ + FONT_CHAR_INFO(7, 568), /* T */ + FONT_CHAR_INFO(7, 582), /* U */ + FONT_CHAR_INFO(8, 596), /* V */ + FONT_CHAR_INFO(11, 612), /* W */ + FONT_CHAR_INFO(7, 634), /* X */ + FONT_CHAR_INFO(7, 648), /* Y */ + FONT_CHAR_INFO(7, 662), /* Z */ + FONT_CHAR_INFO(2, 676), /* [ */ + FONT_CHAR_INFO(4, 680), /* \ */ + FONT_CHAR_INFO(2, 688), /* ] */ + FONT_CHAR_INFO(6, 692), /* ^ */ + FONT_CHAR_INFO(6, 704), /* _ */ + FONT_CHAR_INFO(2, 716), /* ` */ + FONT_CHAR_INFO(6, 720), /* a */ + FONT_CHAR_INFO(6, 732), /* b */ + FONT_CHAR_INFO(5, 744), /* c */ + FONT_CHAR_INFO(6, 754), /* d */ + FONT_CHAR_INFO(6, 766), /* e */ + FONT_CHAR_INFO(4, 778), /* f */ + FONT_CHAR_INFO(6, 786), /* g */ + FONT_CHAR_INFO(6, 798), /* h */ + FONT_CHAR_INFO(1, 810), /* i */ + FONT_CHAR_INFO(2, 812), /* j */ + FONT_CHAR_INFO(5, 816), /* k */ + FONT_CHAR_INFO(1, 826), /* l */ + FONT_CHAR_INFO(9, 828), /* m */ + FONT_CHAR_INFO(6, 846), /* n */ + FONT_CHAR_INFO(6, 858), /* o */ + FONT_CHAR_INFO(6, 870), /* p */ + FONT_CHAR_INFO(6, 882), /* q */ + FONT_CHAR_INFO(4, 894), /* r */ + FONT_CHAR_INFO(5, 902), /* s */ + FONT_CHAR_INFO(4, 912), /* t */ + FONT_CHAR_INFO(6, 920), /* u */ + FONT_CHAR_INFO(6, 932), /* v */ + FONT_CHAR_INFO(9, 944), /* w */ + FONT_CHAR_INFO(6, 962), /* x */ + FONT_CHAR_INFO(6, 974), /* y */ + FONT_CHAR_INFO(5, 986), /* z */ + FONT_CHAR_INFO(5, 996), /* { */ + FONT_CHAR_INFO(1, 1006), /* | */ + FONT_CHAR_INFO(5, 1008), /* ) */ + FONT_CHAR_INFO(8, 1018) /* ~ */ }; } // End of namespace Gnap diff --git a/engines/gnap/gamesys.cpp b/engines/gnap/gamesys.cpp index e59662f08a..08a4af39ee 100644 --- a/engines/gnap/gamesys.cpp +++ b/engines/gnap/gamesys.cpp @@ -48,6 +48,7 @@ GameSys::GameSys(GnapEngine *vm) : _vm(vm) { _removeSequenceItemValue = 0; _gfxItemsCount = 0; _animationsCount = 0; + _animationsDone = false; _backgroundImageValue3 = 0; _backgroundImageValue1 = 0; _backgroundImageValue4 = 1000; @@ -167,6 +168,9 @@ void GameSys::requestRemoveSequence(int sequenceId, int id) { void GameSys::waitForUpdate() { //ResetEvent(updateEvent); //WaitForSingleObject(updateEvent, INFINITE); + while ( !_animationsDone) { + _vm->gameUpdateTick(); + } } int GameSys::isSequenceActive(int sequenceId, int id) { @@ -638,9 +642,9 @@ void GameSys::blitSurface32(Graphics::Surface *destSurface, int x, int y, Graphi byte *rsrc = src; byte *rdst = dst; for (int xc = 0; xc < width; ++xc) { - uint32 pixel = READ_LE_UINT32(rsrc); + uint32 pixel = READ_UINT32(rsrc); if (!transparent || pixel != 0xFFFFFF00) - WRITE_LE_UINT32(rdst, pixel); + WRITE_UINT32(rdst, pixel); rsrc += 4; rdst += 4; } @@ -1006,6 +1010,8 @@ void GameSys::fatUpdateFrame() { if (clockDelta <= 0) return; + _animationsDone = true; + int duration, currFrameNum; for (int i = 0; i < _gfxItemsCount; ++i) { @@ -1091,10 +1097,12 @@ void GameSys::fatUpdateFrame() { } else { gfxItem->_prevFrame._duration -= duration; gfxItem->_updFlag = false; + _animationsDone = false; } } else { gfxItem->_delayTicks -= clockDelta; gfxItem->_updFlag = false; + _animationsDone = false; } } } else { @@ -1108,7 +1116,10 @@ void GameSys::fatUpdateFrame() { if (_newSpriteDrawItemsCount > 0) { debugC(kDebugBasic, "_newSpriteDrawItemsCount: %d", _newSpriteDrawItemsCount); for (int k = 0; k < _newSpriteDrawItemsCount; ++k) { - if (_gfxItemsCount < 50) { + // The original was allowing a buffer overflow. + // In order to fit in memory, insertIndex + 1 + (_gfxItemsCount - InsertIndex) must be + // smaller than the size _gfxItems array (50). + if (_gfxItemsCount + 1 < 50) { int insertIndex; seqLocateGfx(-1, _newSpriteDrawItems[k]._id, &insertIndex); if (_gfxItemsCount != insertIndex) @@ -1130,8 +1141,9 @@ void GameSys::fatUpdateFrame() { gfxItem->_currFrame._duration = 0; gfxItem->_currFrame._isScaled = false; gfxItem->_currFrame._rect = _newSpriteDrawItems[k]._rect; - gfxItem->_currFrame._spriteId = _newSpriteDrawItems[k]._surface ? 0xCAFEBABE : -1;// TODO + gfxItem->_currFrame._spriteId = _newSpriteDrawItems[k]._surface ? (int32)0xCAFEBABE : -1;// TODO gfxItem->_currFrame._soundId = -1; + _animationsDone = false; } } _newSpriteDrawItemsCount = 0; @@ -1149,6 +1161,7 @@ void GameSys::fatUpdateFrame() { gfxItem->_currFrame._soundId = -1; gfxItem->_updFlag = true; gfxItem->_surface = _grabSpriteSurface2; + _animationsDone = false; break; } } @@ -1175,6 +1188,7 @@ void GameSys::fatUpdateFrame() { found = true; } if (found) { + _animationsDone = false; seqRemoveGfx(seqItem->_sequenceId2, seqItem->_id2); seqRemoveGfx(seqItem->_sequenceId, seqItem->_id); _fatSequenceItems.remove_at(i); @@ -1197,6 +1211,7 @@ void GameSys::fatUpdateFrame() { found = true; } if (found) { + _animationsDone = false; seqRemoveGfx(seqItem->_sequenceId, seqItem->_id); _fatSequenceItems.remove_at(i); --i; @@ -1220,6 +1235,7 @@ void GameSys::fatUpdateFrame() { seqRemoveGfx(seqItem->_sequenceId, seqItem->_id); seqInsertGfx(i, gfxDuration); } + _animationsDone = false; } } else { _seqItems.remove_at(i); diff --git a/engines/gnap/gamesys.h b/engines/gnap/gamesys.h index 98014f1bac..b9752bde06 100644 --- a/engines/gnap/gamesys.h +++ b/engines/gnap/gamesys.h @@ -167,6 +167,8 @@ public: int _backgroundImageValue4, _backgroundImageValue2; int32 _gameSysClock, _lastUpdateClock; + bool _animationsDone; + Graphics::Surface *_backgroundSurface; Graphics::Surface *_frontSurface; diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ed2d25f3de..6a03bf8eb0 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -95,16 +95,45 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : DebugMan.addDebugChannel(kDebugBasic, "basic", "Basic debug level"); Engine::syncSoundSettings(); + + _exe = nullptr; + _dat = nullptr; + _spriteCache = nullptr; + _soundCache = nullptr; + _sequenceCache = nullptr; + _gameSys = nullptr; + _soundMan = nullptr; + _debugger = nullptr; + _gnap = nullptr; + _plat = nullptr; + _font = nullptr; _scene = nullptr; _music = nullptr; _tempThumbnail = nullptr; + _menuBackgroundSurface = nullptr; + _menuQuitQuerySprite = nullptr; + _largeSprite = nullptr; + _menuSaveLoadSprite = nullptr; + _menuSprite2 = nullptr; + _menuSprite1 = nullptr; + _spriteHandle = nullptr; + _cursorSprite = nullptr; + _pauseSprite = nullptr; + _backgroundSurface = nullptr; _wasSavegameLoaded = false; - for (int i = 0; i < kMaxTimers; ++i) - _savedTimers[i] = _timers[i] = 0; - _isWaiting = false; _sceneWaiting = false; + _menuDone = false; + _sceneDone = false; + _isLeavingScene = false; + _isStockDatLoaded = false; + _gameDone = false; + _isPaused = false; + _sceneSavegameLoaded = false; + + for (int i = 0; i < kMaxTimers; ++i) + _savedTimers[i] = _timers[i] = 0; _mousePos = Common::Point(0, 0); _currGrabCursorX = _currGrabCursorY = 0; @@ -112,15 +141,6 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _idleTimerIndex = -1; _menuStatus = 0; _menuSpritesIndex = -1; - _menuDone = false; - _menuBackgroundSurface = nullptr; - _menuQuitQuerySprite = nullptr; - _largeSprite = nullptr; - _menuSaveLoadSprite = nullptr; - _menuSprite2 = nullptr; - _menuSprite1 = nullptr; - _spriteHandle = nullptr; - _cursorSprite = nullptr; _savegameIndex = -1; _gridMinX = 0; _gridMinY = 0; @@ -138,6 +158,32 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _savegameSprites[i] = nullptr; for (int i = 0; i < 30; i++) _menuInventorySprites[i] = nullptr; + + _newSceneNum = 0; + _inventory = 0; + _gameFlags = 0; + _hotspotsCount = 0; + _sceneClickedHotspot = -1; + _newCursorValue = 0; + _cursorValue = 0; + _verbCursor = 0; + _cursorIndex = -1; + _leftClickMouseX = 0; + _leftClickMouseY = 0; + _grabCursorSprite = nullptr; + _grabCursorSpriteIndex = 0; + _newGrabCursorSpriteIndex = 0; + _fullScreenSprite = nullptr; + _fullScreenSpriteId = 0; + _deviceX1 = 0; + _deviceY1 = 0; + _soundTimerIndexA = 0; + _soundTimerIndexB = 0; + _soundTimerIndexC = 0; + _loadGameSlot = -1; + _lastUpdateClock = 0; + _prevSceneNum = -1; + _currentSceneNum = -1; } GnapEngine::~GnapEngine() { @@ -148,7 +194,11 @@ GnapEngine::~GnapEngine() { Common::Error GnapEngine::run() { // Initialize the graphics mode to RGBA8888 +#if defined(SCUMM_BIG_ENDIAN) + Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24); +#else Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); +#endif initGraphics(800, 600, true, &format); // We do not support color conversion yet @@ -161,7 +211,6 @@ Common::Error GnapEngine::run() { _cursorIndex = -1; _verbCursor = 1; - _loadGameSlot = -1; if (ConfMan.hasKey("save_slot")) _loadGameSlot = ConfMan.getInt("save_slot"); @@ -235,11 +284,11 @@ void GnapEngine::updateEvents() { _debugger->onFrame(); } - _keyPressState[event.kbd.keycode] = 1; - _keyDownState[event.kbd.keycode] = 1; + _keyPressState[event.kbd.keycode] = true; + _keyDownState[event.kbd.keycode] = true; break; case Common::EVENT_KEYUP: - _keyDownState[event.kbd.keycode] = 0; + _keyDownState[event.kbd.keycode] = false; break; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; @@ -476,9 +525,11 @@ void GnapEngine::updateMouseCursor() { } if (_isWaiting && ((_gnap->_actionStatus < 0 && _plat->_actionStatus < 0) || _sceneWaiting)) { setCursor(kDisabledCursors[_verbCursor]); + showCursor(); _isWaiting = false; } else if (!_isWaiting && (_gnap->_actionStatus >= 0 || _plat->_actionStatus >= 0) && !_sceneWaiting) { setCursor(WAIT_CURSOR); + hideCursor(); _isWaiting = true; } } @@ -627,19 +678,19 @@ void GnapEngine::removeDeviceIconActive() { void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int y2) { _deviceX1 = x1; - _deviceX2 = x2; _deviceY1 = y1; - _deviceY2 = y2; + int deviceX2 = x2; + int deviceY2 = y2; if (x1 == -1) _deviceX1 = 730; if (x2 == -1) - _deviceX2 = 780; + deviceX2 = 780; if (y1 == -1) _deviceY1 = 14; if (y2 == -1) - _deviceY2 = 79; + deviceY2 = 79; - _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, _deviceX2, _deviceY2); + _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, deviceX2, deviceY2); _hotspots[hotspotIndex]._flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; } @@ -959,21 +1010,19 @@ void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { } bool GnapEngine::isKeyStatus1(int key) { - return _keyPressState[key] != 0; + return _keyPressState[key]; } bool GnapEngine::isKeyStatus2(int key) { - return _keyDownState[key] != 0; + return _keyDownState[key]; } void GnapEngine::clearKeyStatus1(int key) { - _keyPressState[key] = 0; - _keyDownState[key] = 0; + _keyPressState[key] = false; + _keyDownState[key] = false; } void GnapEngine::clearAllKeyStatus1() { - _keyStatus1[0] = 0; - _keyStatus1[1] = 0; memset(_keyPressState, 0, sizeof(_keyPressState)); memset(_keyDownState, 0, sizeof(_keyDownState)); } diff --git a/engines/gnap/gnap.h b/engines/gnap/gnap.h index 84c40e2969..dbefa31795 100644 --- a/engines/gnap/gnap.h +++ b/engines/gnap/gnap.h @@ -253,8 +253,8 @@ public: int _lastUpdateClock; bool _gameDone; - byte _keyPressState[512]; - byte _keyDownState[512]; + bool _keyPressState[512]; + bool _keyDownState[512]; bool _isPaused; Graphics::Surface *_pauseSprite; @@ -263,8 +263,6 @@ public: MouseButtonState _mouseButtonState; MouseButtonState _mouseClickState; - uint32 _keyStatus1[2]; - bool _sceneSavegameLoaded, _wasSavegameLoaded; Graphics::Surface *_backgroundSurface; @@ -296,7 +294,7 @@ public: Graphics::Surface *_fullScreenSprite; int _fullScreenSpriteId; - int _deviceX1, _deviceY1, _deviceX2, _deviceY2; + int _deviceX1, _deviceY1; int _soundTimerIndexA; int _soundTimerIndexB; diff --git a/engines/gnap/resource.cpp b/engines/gnap/resource.cpp index 8244213a7f..c6390082b1 100644 --- a/engines/gnap/resource.cpp +++ b/engines/gnap/resource.cpp @@ -101,6 +101,10 @@ SpriteResource::SpriteResource(byte *data, uint32 size) { _colorsCount = READ_LE_UINT16(_data + 10); _palette = (uint32 *)(_data + 12); _pixels = _data + 12 + _colorsCount * 4; +#if defined(SCUMM_BIG_ENDIAN) + for (uint16 c = 0; c < _colorsCount; ++c) + _palette[c] = SWAP_BYTES_32(_palette[c]); +#endif debugC(kDebugBasic, "SpriteResource() width: %d; height: %d; colorsCount: %d", _width, _height, _colorsCount); } diff --git a/engines/gnap/scenes/arcade.cpp b/engines/gnap/scenes/arcade.cpp index 028a9006d0..db4999cb43 100644 --- a/engines/gnap/scenes/arcade.cpp +++ b/engines/gnap/scenes/arcade.cpp @@ -918,7 +918,6 @@ void Scene50::run() { _timesPlayedModifier = _timesPlayed / 4; _leftTongueRoundsWon = 0; _rightTongueRoundsWon = 0; - // initFont(); _leftTongueSequenceId = 186; _rightTongueSequenceId = 194; _rightTongueNextSequenceId = -1; @@ -1884,6 +1883,7 @@ Scene52::Scene52(GnapEngine *vm) : Scene(vm) { _aliensCount = 0; _nextUfoSequenceId = -1; _ufoSequenceId = -1; + _liveAlienRows = 0; } int Scene52::init() { @@ -2639,8 +2639,8 @@ void Scene52::run() { _shipMidY = _vm->_gameSys->getSpriteHeightById(15); _shipPosX = (800 - _shipMidX) / 2; _arcadeScreenBottom = 496; - _arcadeScreenRight = 595 - _shipMidX; - _arcadeScreenLeft = 210; + int arcadeScreenRight = 595 - _shipMidX; + int arcadeScreenLeft = 210; _shipsLeft = 3; _alienCounter = 0; @@ -2682,10 +2682,10 @@ void Scene52::run() { while (_vm->isKeyStatus2(Common::KEYCODE_RIGHT)) { update(); if (_vm->_gameSys->getAnimationStatus(7) == 2) { - if (_shipPosX < _arcadeScreenRight) { + if (_shipPosX < arcadeScreenRight) { _shipPosX += 15; - if (_shipPosX > _arcadeScreenRight) - _shipPosX = _arcadeScreenRight; + if (_shipPosX > arcadeScreenRight) + _shipPosX = arcadeScreenRight; _vm->_gameSys->setAnimation(_nextUfoSequenceId, 256, 7); _vm->_gameSys->insertSequence(_nextUfoSequenceId, 256, _ufoSequenceId, 256, kSeqSyncWait, 0, _shipPosX, _arcadeScreenBottom); _ufoSequenceId = _nextUfoSequenceId; @@ -2699,10 +2699,10 @@ void Scene52::run() { while (_vm->isKeyStatus2(Common::KEYCODE_LEFT)) { update(); if (_vm->_gameSys->getAnimationStatus(7) == 2) { - if (_shipPosX > _arcadeScreenLeft) { + if (_shipPosX > arcadeScreenLeft) { _shipPosX -= 15; - if (_shipPosX < _arcadeScreenLeft) - _shipPosX = _arcadeScreenLeft; + if (_shipPosX < arcadeScreenLeft) + _shipPosX = arcadeScreenLeft; _vm->_gameSys->setAnimation(_nextUfoSequenceId, 256, 7); _vm->_gameSys->insertSequence(_nextUfoSequenceId, 256, _ufoSequenceId, 256, kSeqSyncWait, 0, _shipPosX, _arcadeScreenBottom); _ufoSequenceId = _nextUfoSequenceId; diff --git a/engines/gnap/scenes/arcade.h b/engines/gnap/scenes/arcade.h index e472e00508..ab519ee00b 100644 --- a/engines/gnap/scenes/arcade.h +++ b/engines/gnap/scenes/arcade.h @@ -216,8 +216,6 @@ private: int _liveAlienRows; int _gameScore; bool _soundToggle; - int _arcadeScreenLeft; - int _arcadeScreenRight; int _arcadeScreenBottom; int _shipsLeft; int _shieldSpriteIds[3]; diff --git a/engines/gnap/scenes/group0.cpp b/engines/gnap/scenes/group0.cpp index b2351b08ad..e76fd9bbd2 100644 --- a/engines/gnap/scenes/group0.cpp +++ b/engines/gnap/scenes/group0.cpp @@ -2908,7 +2908,7 @@ void Scene08::updateHotspots() { _vm->setHotspot(kHS08Meat, 405, 450, 480, 485, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); _vm->setHotspot(kHS08Bone, 200, 405, 270, 465, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); _vm->setHotspot(kHS08Toy, 540, 430, 615, 465, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - _vm->setHotspot(kHS08WalkArea1, 290, 340, -1, -1); + _vm->setHotspot(kHS08WalkArea1, 0, 0, 290, 340); _vm->setHotspot(kHS08WalkArea2, 0, 0, 799, 420); _vm->setDeviceHotspot(kHS08Device, -1, -1, -1, -1); if (_vm->isFlag(kGFBarnPadlockOpen)) @@ -3379,7 +3379,7 @@ int Scene09::init() { } void Scene09::updateHotspots() { - _vm->setHotspot(kHS09Platypus, 0, 200, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHS09Platypus, 0, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); _vm->setHotspot(kHS09ExitKitchen, 280, 200, 380, 400, SF_EXIT_U_CURSOR); _vm->setHotspot(kHS09ExitHouse, 790, 200, 799, 450, SF_EXIT_R_CURSOR | SF_WALKABLE); _vm->setHotspot(kHS09Trash, 440, 310, 680, 420, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); diff --git a/engines/gnap/scenes/group1.cpp b/engines/gnap/scenes/group1.cpp index bd152c7f39..e50e8cc959 100644 --- a/engines/gnap/scenes/group1.cpp +++ b/engines/gnap/scenes/group1.cpp @@ -2324,7 +2324,8 @@ int Scene17::init() { } void Scene17::updateHotspots() { - _vm->setHotspot(kHS17Platypus, 1, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + // The original is using (1, 0, 0, 0) + _vm->setHotspot(kHS17Platypus, 0, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); _vm->setHotspot(kHS17Phone1, 61, 280, 97, 322, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR, 1, 7); _vm->setHotspot(kHS17Phone2, 80, 204, 178, 468, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR, 1, 7); _vm->setHotspot(kHS17ExitGrubCity, 196, 207, 280, 304, SF_EXIT_U_CURSOR, 3, 5); diff --git a/engines/gnap/scenes/group2.cpp b/engines/gnap/scenes/group2.cpp index 522a3f4337..1db3144c2d 100644 --- a/engines/gnap/scenes/group2.cpp +++ b/engines/gnap/scenes/group2.cpp @@ -1021,6 +1021,7 @@ Scene22::Scene22(GnapEngine *vm) : Scene(vm) { _caughtBefore = false; _cashierCtr = 3; _nextCashierSequenceId = -1; + _currCashierSequenceId = -1; } int Scene22::init() { diff --git a/engines/gnap/scenes/intro.cpp b/engines/gnap/scenes/intro.cpp index b4ba2f5201..5bb2239bab 100644 --- a/engines/gnap/scenes/intro.cpp +++ b/engines/gnap/scenes/intro.cpp @@ -88,12 +88,15 @@ void SceneIntro::run() { frame1->free(); delete frame1; } else { + Graphics::Surface *frame1 = frame->convertTo(_vm->_system->getScreenFormat()); + // The intro AVI is played upside down, it's the only video played in the English version - for (uint16 y = 0; y < frame->h / 2; y++) { - uint32 *ptrFrom = (uint32 *)frame->getBasePtr(0, y); - uint32 *ptrTo = (uint32 *)frame->getBasePtr(0, frame->h - y - 1); - for (uint16 x = 0; x < frame->w; x++) { - uint32 t = *ptrFrom; + for (uint16 y = 0; y < frame1->h / 2; y++) { + uint32 *ptrFrom = (uint32 *)frame1->getBasePtr(0, y); + uint32 *ptrTo = (uint32 *)frame1->getBasePtr(0, frame1->h - y - 1); + // in this else branch, bytesPerPixel equals 4 + for (uint16 x = 0; x < frame1->pitch / 4; x++) { + uint32 t = *ptrFrom; *ptrFrom = *ptrTo; *ptrTo = t; ptrFrom++; @@ -101,7 +104,6 @@ void SceneIntro::run() { } } - Graphics::Surface *frame1 = frame->convertTo(_vm->_system->getScreenFormat()); _vm->_system->copyRectToScreen(frame1->getPixels(), frame1->pitch, vidPosX, vidPosY, frame1->w, frame1->h); frame1->free(); delete frame1; diff --git a/engines/gnap/sound.cpp b/engines/gnap/sound.cpp index 75cfb5555c..b09cc7cafe 100644 --- a/engines/gnap/sound.cpp +++ b/engines/gnap/sound.cpp @@ -26,8 +26,7 @@ namespace Gnap { -SoundMan::SoundMan(GnapEngine *vm) - : _vm(vm) { +SoundMan::SoundMan(GnapEngine *vm) : _vm(vm) { } SoundMan::~SoundMan() { @@ -49,11 +48,12 @@ void SoundMan::playSound(int resourceId, bool looping) { void SoundMan::stopSound(int resourceId) { const int index = find(resourceId); - if (index >= 0) { - _vm->_soundCache->release(_items[index]._resourceId); - _vm->_mixer->stopHandle(_items[index]._handle); - _items.remove_at(index); - } + if (index < 0) + return; + + _vm->_soundCache->release(_items[index]._resourceId); + _vm->_mixer->stopHandle(_items[index]._handle); + _items.remove_at(index); } void SoundMan::setSoundVolume(int resourceId, int volume) { @@ -61,13 +61,19 @@ void SoundMan::setSoundVolume(int resourceId, int volume) { return; const int index = find(resourceId); + if (index < 0) + return; + int realVol = volume * 2.55; _vm->_mixer->setChannelVolume(_items[index]._handle, realVol); } bool SoundMan::isSoundPlaying(int resourceId) { const int index = find(resourceId); - return index >= 0 && _vm->_mixer->isSoundHandleActive(_items[index]._handle); + if (index < 0) + return false; + + return _vm->_mixer->isSoundHandleActive(_items[index]._handle); } void SoundMan::stopAll() { diff --git a/engines/hopkins/detection.cpp b/engines/hopkins/detection.cpp index cc1e84f5f8..cfdbf8030c 100644 --- a/engines/hopkins/detection.cpp +++ b/engines/hopkins/detection.cpp @@ -111,7 +111,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Hopkins FBI (c)1997-2003 MP Entertainment"; + return "Hopkins FBI (C)1997-2003 MP Entertainment"; } virtual bool hasFeature(MetaEngineFeature f) const; diff --git a/engines/lab/detection.cpp b/engines/lab/detection.cpp index 1fd3ca8944..30890b5acf 100644 --- a/engines/lab/detection.cpp +++ b/engines/lab/detection.cpp @@ -127,7 +127,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Labyrinth of Time (c) 2004 The Wyrmkeep Entertainment Co. and Terra Nova Development"; + return "Labyrinth of Time (C) 2004 The Wyrmkeep Entertainment Co. and Terra Nova Development"; } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { diff --git a/engines/mads/detection.cpp b/engines/mads/detection.cpp index b3ba60b6d0..4736503a38 100644 --- a/engines/mads/detection.cpp +++ b/engines/mads/detection.cpp @@ -149,7 +149,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "MADS (c)"; + return "MADS (C)"; } virtual bool hasFeature(MetaEngineFeature f) const; diff --git a/engines/mohawk/bitmap.cpp b/engines/mohawk/bitmap.cpp index 6435daf46f..d8c6d6aacd 100644 --- a/engines/mohawk/bitmap.cpp +++ b/engines/mohawk/bitmap.cpp @@ -53,6 +53,16 @@ MohawkBitmap::MohawkBitmap() { _drawTable = drawTable; _drawTableSize = ARRAYSIZE(drawTable); + + _header.width = 0; + _header.height = 0; + _header.bytesPerRow = 0; + _header.format = 0; + _header.colorTable.colorCount = 0; + _header.colorTable.palette = nullptr; + _header.colorTable.rgbBits = 0; + _header.colorTable.tableSize = 0; + _data = nullptr; } MohawkBitmap::~MohawkBitmap() { diff --git a/engines/mohawk/cstime.h b/engines/mohawk/cstime.h index f95222d3a1..bfb7daf945 100644 --- a/engines/mohawk/cstime.h +++ b/engines/mohawk/cstime.h @@ -111,7 +111,7 @@ enum { }; struct CSTimeEvent { - CSTimeEvent() { } + CSTimeEvent() : type(0), param1(0), param2(0) { } CSTimeEvent(uint16 t, uint16 p1, uint16 p2) : type(t), param1(p1), param2(p2) { } uint16 type; diff --git a/engines/mohawk/cstime_game.cpp b/engines/mohawk/cstime_game.cpp index 8eced701c3..c939d8bc24 100644 --- a/engines/mohawk/cstime_game.cpp +++ b/engines/mohawk/cstime_game.cpp @@ -94,6 +94,11 @@ CSTimeChar::CSTimeChar(MohawkEngine_CSTime *vm, CSTimeScene *scene, uint id) : _ _lastTime2 = 0; _lastTime3 = 0; + _unknown1 = _unknown2 = _unknown3 = 0; + _enabled = false; + _nextCue = 0; + _waveStatus = 0; + _playingWaveId = 0; } diff --git a/engines/mohawk/cstime_ui.cpp b/engines/mohawk/cstime_ui.cpp index f3fe27a966..59be95adf6 100644 --- a/engines/mohawk/cstime_ui.cpp +++ b/engines/mohawk/cstime_ui.cpp @@ -79,6 +79,8 @@ CSTimeInterface::CSTimeInterface(MohawkEngine_CSTime *vm) : _vm(vm) { _rolloverTextFeature = NULL; _bubbleTextFeature = NULL; + _draggedItem = 0; + _mouseWasInScene = false; _state = kCSTimeInterfaceStateNormal; @@ -1034,6 +1036,8 @@ CSTimeInventoryDisplay::CSTimeInventoryDisplay(MohawkEngine_CSTime *vm, Common:: _cuffsState = false; _cuffsShape = 10; + _draggedItem = 0; + _invRect = baseRect; for (uint i = 0; i < MAX_DISPLAYED_ITEMS; i++) { diff --git a/engines/mohawk/cstime_view.cpp b/engines/mohawk/cstime_view.cpp index 7879175bb0..8727560094 100644 --- a/engines/mohawk/cstime_view.cpp +++ b/engines/mohawk/cstime_view.cpp @@ -243,7 +243,7 @@ void CSTimeModule::defaultMoveProc(Feature *feature) { if ((feature->_flags & kFeatureNewDisable) || (feature->_flags & kFeatureNewDisableOnReset)) { feature->_data.enabled = 0; } - feature->_dirty = 1; + feature->_dirty = true; if (feature->_flags & kFeatureInternalRegion) { // TODO: create region [+140] (if not already done) } @@ -257,7 +257,7 @@ void CSTimeModule::defaultMoveProc(Feature *feature) { // TODO: or clip with bounds } } - feature->_dirty = 1; + feature->_dirty = true; if (feature->_flags & kFeatureNewInternalTiming) { feature->_nextTime += feature->_delayTime; } else { @@ -277,7 +277,7 @@ void CSTimeModule::defaultMoveProc(Feature *feature) { } feature->_data.currOffset = 26; - feature->_done = 0; + feature->_done = false; } if (feature->_flags & kFeatureNewDisable) feature->_data.enabled = 0; @@ -307,7 +307,7 @@ void CSTimeModule::defaultMoveProc(Feature *feature) { } case 0: // TODO: set ptr +176 to 1 - feature->_done = 1; + feature->_done = true; if (feature->_doneProc) { (this->*(feature->_doneProc))(feature); // TODO: with -1 } diff --git a/engines/mohawk/cursors.cpp b/engines/mohawk/cursors.cpp index 4b66829e6a..72eebca917 100644 --- a/engines/mohawk/cursors.cpp +++ b/engines/mohawk/cursors.cpp @@ -34,8 +34,8 @@ #include "graphics/wincursor.h" #ifdef ENABLE_MYST -#include "mohawk/bitmap.h" #include "mohawk/myst.h" +#include "mohawk/myst_graphics.h" #endif namespace Mohawk { @@ -86,11 +86,9 @@ void DefaultCursorManager::setCursor(uint16 id) { #ifdef ENABLE_MYST MystCursorManager::MystCursorManager(MohawkEngine_Myst *vm) : _vm(vm) { - _bmpDecoder = new MystBitmap(); } MystCursorManager::~MystCursorManager() { - delete _bmpDecoder; } void MystCursorManager::showCursor() { @@ -111,17 +109,18 @@ void MystCursorManager::setCursor(uint16 id) { return; } - // Both Myst and Myst ME use the "MystBitmap" format for cursor images. - MohawkSurface *mhkSurface = _bmpDecoder->decodeImage(_vm->getResource(ID_WDIB, id)); - Graphics::Surface *surface = mhkSurface->getSurface(); Common::SeekableReadStream *clrcStream = _vm->getResource(ID_CLRC, id); uint16 hotspotX = clrcStream->readUint16LE(); uint16 hotspotY = clrcStream->readUint16LE(); delete clrcStream; + // Both Myst and Myst ME use the "MystBitmap" format for cursor images. + MohawkSurface *mhkSurface = _vm->_gfx->findImage(id); + Graphics::Surface *surface = mhkSurface->getSurface(); + // Myst ME stores some cursors as 24bpp images instead of 8bpp if (surface->format.bytesPerPixel == 1) { - CursorMan.replaceCursor(surface->getPixels(), surface->w, surface->h, hotspotX, hotspotY, 0); + CursorMan.replaceCursor(surface->getPixels(), surface->w, surface->h, hotspotX, hotspotY, 255); // We're using the screen palette for the original game, but we need // to use this for any 8bpp cursor in ME. @@ -133,7 +132,6 @@ void MystCursorManager::setCursor(uint16 id) { } _vm->_needsUpdate = true; - delete mhkSurface; } void MystCursorManager::setDefaultCursor() { diff --git a/engines/mohawk/cursors.h b/engines/mohawk/cursors.h index c41b5c273e..742ae30107 100644 --- a/engines/mohawk/cursors.h +++ b/engines/mohawk/cursors.h @@ -102,7 +102,6 @@ enum { }; class MohawkEngine_Myst; -class MystBitmap; // The cursor manager for Myst // Uses WDIB + CLRC resources @@ -119,7 +118,6 @@ public: private: MohawkEngine_Myst *_vm; - MystBitmap *_bmpDecoder; }; #endif // ENABLE_MYST diff --git a/engines/mohawk/graphics.h b/engines/mohawk/graphics.h index 5f9b523e9a..f9fdeea15f 100644 --- a/engines/mohawk/graphics.h +++ b/engines/mohawk/graphics.h @@ -74,6 +74,10 @@ public: // Free all surfaces in the cache void clearCache(); + // findImage will search the cache to find the image. + // If not found, it will call decodeImage to get a new one. + MohawkSurface *findImage(uint16 id); + void preloadImage(uint16 image); virtual void setPalette(uint16 id); void copyAnimImageToScreen(uint16 image, int left = 0, int top = 0); @@ -85,10 +89,6 @@ public: protected: void copyAnimImageSectionToScreen(MohawkSurface *image, Common::Rect src, Common::Rect dest); - // findImage will search the cache to find the image. - // If not found, it will call decodeImage to get a new one. - MohawkSurface *findImage(uint16 id); - // decodeImage will always return a new image. virtual MohawkSurface *decodeImage(uint16 id) = 0; virtual Common::Array<MohawkSurface *> decodeImages(uint16 id); diff --git a/engines/mohawk/myst_graphics.cpp b/engines/mohawk/myst_graphics.cpp index 5db9697a78..427fba4d22 100644 --- a/engines/mohawk/myst_graphics.cpp +++ b/engines/mohawk/myst_graphics.cpp @@ -47,8 +47,7 @@ MystGraphics::MystGraphics(MohawkEngine_Myst* vm) : GraphicsManager(), _vm(vm) { } else { // Paletted initGraphics(_viewport.width(), _viewport.height(), true); - setBasePalette(); - setPaletteToScreen(); + clearScreenPalette(); } _pixelFormat = _vm->_system->getScreenFormat(); @@ -86,7 +85,7 @@ MohawkSurface *MystGraphics::decodeImage(uint16 id) { bool isPict = false; - if (_vm->getFeatures() & GF_ME) { + if ((_vm->getFeatures() & GF_ME) && dataStream->size() > 512 + 10 + 4) { // Here we detect whether it's really a PICT or a WDIB. Since a MystBitmap // would be compressed, there's no way to detect for the BM without a hack. // So, we search for the PICT version opcode for detection. @@ -109,8 +108,11 @@ MohawkSurface *MystGraphics::decodeImage(uint16 id) { } else { mhkSurface = _bmpDecoder->decodeImage(dataStream); - if (_vm->getFeatures() & GF_ME) + if (_vm->getFeatures() & GF_ME) { mhkSurface->convertToTrueColor(); + } else { + remapSurfaceToSystemPalette(mhkSurface); + } } assert(mhkSurface); @@ -204,7 +206,7 @@ void MystGraphics::copyImageSectionToBackBuffer(uint16 image, Common::Rect src, if (!(_vm->getFeatures() & GF_ME)) { // Make sure the palette is set assert(mhkSurface->getPalette()); - memcpy(_palette + 10 * 3, mhkSurface->getPalette() + 10 * 3, (256 - 10 * 2) * 3); + memcpy(_palette, mhkSurface->getPalette(), 256 * 3); setPaletteToScreen(); } } @@ -703,10 +705,10 @@ void MystGraphics::clearScreenPalette() { _vm->_system->getPaletteManager()->setPalette(palette, 0, 256); } -void MystGraphics::setBasePalette() { +void MystGraphics::remapSurfaceToSystemPalette(MohawkSurface *mhkSurface) { // Entries [0, 9] of the palette static const byte lowPalette[] = { - 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, @@ -729,15 +731,68 @@ void MystGraphics::setBasePalette() { 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0x00, 0x00, 0x00 + 0xFF, 0xFF, 0xFF }; - // Note that 0 and 255 are different from normal Windows. - // Myst seems to hack that to white, resp. black (probably for Mac compat). + byte *originalPalette = mhkSurface->getPalette(); + + // The target palette is made of the Windows reserved palette, and colors 10 to 245 + // of the bitmap palette. Entries 0 to 9 and 246 to 255 of the bitmap palette are + // discarded. + byte targetPalette[256 * 3]; + memcpy(targetPalette, lowPalette, sizeof(lowPalette)); + memcpy(targetPalette + sizeof(lowPalette), originalPalette + sizeof(lowPalette), sizeof(_palette) - sizeof(lowPalette) - sizeof(highPalette)); + memcpy(targetPalette + sizeof(_palette) - sizeof(highPalette), highPalette, sizeof(highPalette)); + + // Remap the discarded entries from the bitmap palette using the target palette. + byte lowColorMap[ARRAYSIZE(lowPalette) / 3]; + byte highColorMap[ARRAYSIZE(highPalette) / 3]; + + for (uint i = 0; i < ARRAYSIZE(lowColorMap); i++) { + uint colorIndex = 3 * i; + byte red = originalPalette[colorIndex + 0]; + byte green = originalPalette[colorIndex + 1]; + byte blue = originalPalette[colorIndex + 2]; + + lowColorMap[i] = getColorIndex(targetPalette, red, green, blue); + } + + for (uint i = 0; i < ARRAYSIZE(highColorMap); i++) { + uint colorIndex = 3 * (i + 246); + byte red = originalPalette[colorIndex + 0]; + byte green = originalPalette[colorIndex + 1]; + byte blue = originalPalette[colorIndex + 2]; + + highColorMap[i] = getColorIndex(targetPalette, red, green, blue); + } + + // Replace the original palette with the target palette + memcpy(originalPalette, targetPalette, sizeof(targetPalette)); + + // Remap the pixel data to the target palette + Graphics::Surface *surface = mhkSurface->getSurface(); + byte *pixels = (byte *) surface->getPixels(); + + for (int i = 0; i < surface->w * surface->h; i++) { + if (pixels[i] < ARRAYSIZE(lowColorMap)) { + pixels[i] = lowColorMap[pixels[i]]; + } else if (pixels[i] >= 246) { + pixels[i] = highColorMap[pixels[i] - 246]; + } + } +} + +byte MystGraphics::getColorIndex(const byte *palette, byte red, byte green, byte blue) { + for (uint i = 0; i < 256; i++) { + if (palette[(3 * i) + 0] == red && palette[(3 * i) + 1] == green && palette[(3 * i) + 2] == blue) { + return i; + } + } - memcpy(_palette, lowPalette, sizeof(lowPalette)); - memset(_palette + sizeof(lowPalette), 0, sizeof(_palette) - sizeof(lowPalette) - sizeof(highPalette)); - memcpy(_palette + sizeof(_palette) - sizeof(highPalette), highPalette, sizeof(highPalette)); + // GDI actually chooses the nearest color if no exact match is found, + // but this should not happen in Myst + debug(1, "Color (%d, %d, %d) not in target palette", red, green, blue); + return 0; } void MystGraphics::setPaletteToScreen() { diff --git a/engines/mohawk/myst_graphics.h b/engines/mohawk/myst_graphics.h index 93e388cb83..cd09a53a3a 100644 --- a/engines/mohawk/myst_graphics.h +++ b/engines/mohawk/myst_graphics.h @@ -56,7 +56,6 @@ public: void fadeFromBlack(); void clearScreenPalette(); - void setBasePalette(); void setPaletteToScreen(); const byte *getPalette() const { return _palette; } @@ -86,6 +85,9 @@ private: void transitionSlideToBottom(Common::Rect rect, uint16 steps, uint16 delay); void transitionPartialToRight(Common::Rect rect, uint32 width, uint32 steps); void transitionPartialToLeft(Common::Rect rect, uint32 width, uint32 steps); + + void remapSurfaceToSystemPalette(MohawkSurface *mhkSurface); + byte getColorIndex(const byte *palette, byte red, byte green, byte blue); }; } // End of namespace Mohawk diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index 178139ab76..0f764aeded 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -55,9 +55,19 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio _gameOver = false; _activatedSLST = false; _ignoreNextMouseUp = false; - _extrasFile = 0; + _extrasFile = nullptr; _curStack = kStackUnknown; - _hotspots = 0; + _hotspots = nullptr; + _gfx = nullptr; + _externalScriptHandler = nullptr; + _rnd = nullptr; + _scriptMan = nullptr; + _console = nullptr; + _saveLoad = nullptr; + _optionsDialog = nullptr; + _curCard = 0; + _hotspotCount = 0; + _curHotspot = -1; removeTimer(); // NOTE: We can never really support CD swapping. All of the music files diff --git a/engines/mohawk/riven_graphics.cpp b/engines/mohawk/riven_graphics.cpp index b44fbb828e..db22dde22d 100644 --- a/engines/mohawk/riven_graphics.cpp +++ b/engines/mohawk/riven_graphics.cpp @@ -51,6 +51,8 @@ RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm _creditsImage = 302; _creditsPos = 0; + + _transitionSpeed = 0; } RivenGraphics::~RivenGraphics() { diff --git a/engines/mohawk/view.cpp b/engines/mohawk/view.cpp index 1aaf32ea78..70d20270a5 100644 --- a/engines/mohawk/view.cpp +++ b/engines/mohawk/view.cpp @@ -37,6 +37,23 @@ Module::~Module() { } Feature::Feature(View *view) : _view(view) { + _next = _prev = nullptr; + _drawProc = nullptr; + _moveProc = nullptr; + _doneProc = nullptr; + _frameProc = nullptr; + _timeProc = nullptr; + _region = 0; + _id = 0; + _scrbId = 0; + _storedScrbId = 0; + _flags = 0; + _nextTime = 0; + _delayTime = 0; + _dirty = false; + _needsReset = false; + _justReset = false; + _done = false; } Feature::~Feature() { @@ -75,11 +92,10 @@ void Feature::setNodeDefaults(Feature *prev, Feature *next) { _flags = 0; - _dirty = 1; - _needsReset = 1; - _justReset = 0; // old - _notifyDone = 0; - _done = 0; // new + _dirty = true; + _needsReset = true; + _justReset = false; // old + _done = false; // new _nextTime = 0; _delayTime = 0; @@ -107,11 +123,11 @@ void Feature::resetFeatureScript(uint16 enabled, uint16 scrbId) { resetFrame(); _nextTime = 0; // New feature code uses _view->_lastIdleTime, but should be equivalent. _data.enabled = enabled; - _dirty = 1; + _dirty = true; finishResetFeatureScript(); - _needsReset = 0; + _needsReset = false; if (_region) { // TODO: mark _region as dirty @@ -123,7 +139,6 @@ void Feature::resetFeatureScript(uint16 enabled, uint16 scrbId) { void Feature::resetFeature(bool notifyDone, Module::FeatureProc doneProc, uint16 scrbId) { resetFeatureScript(1, scrbId); _doneProc = doneProc; - _notifyDone = notifyDone; } void Feature::hide(bool clip) { @@ -159,7 +174,7 @@ void Feature::moveAndUpdate(Common::Point newPos) { return; _nextTime = 0; - _dirty = 1; + _dirty = true; // TODO: mark _data.bounds as dirty if (_data.bitmapIds[0]) @@ -228,7 +243,7 @@ void OldFeature::resetScript() { } void OldFeature::finishResetFeatureScript() { - _justReset = 1; + _justReset = true; if (_flags & kFeatureOldAdjustByPos) { Common::SeekableReadStream *ourSCRB = _view->getSCRB(_data.scrbIndex, _scrbId); @@ -240,6 +255,13 @@ void OldFeature::finishResetFeatureScript() { } NewFeature::NewFeature(View *view) : Feature(view) { + _unknown168 = 0; + _pickupProc = nullptr; + _dropProc = nullptr; + _dragMoveProc = nullptr; + _oldMoveProc = nullptr; + _dragFlags = 0; + _oldFlags = 0; } NewFeature::~NewFeature() { @@ -307,7 +329,7 @@ void NewFeature::resetScript() { } void NewFeature::finishResetFeatureScript() { - _done = 0; + _done = false; } View::View(MohawkEngine *vm) : _vm(vm) { @@ -319,6 +341,12 @@ View::View(MohawkEngine *vm) : _vm(vm) { _compoundSHAPGroups[i] = 0; } _numSCRBGroups = 0; + + _lastIdleTime = 0; + _needsUpdate = false; + _gfx = nullptr; + _rootNode = nullptr; + _cursorNode = nullptr; } View::~View() { @@ -347,7 +375,7 @@ void View::idleView() { } if (node->_drawProc) (_currentModule->*(node->_drawProc))(node); - node->_dirty = 0; + node->_dirty = false; } if (_needsUpdate) { diff --git a/engines/mohawk/view.h b/engines/mohawk/view.h index 47853f056f..463715b765 100644 --- a/engines/mohawk/view.h +++ b/engines/mohawk/view.h @@ -138,11 +138,10 @@ public: uint32 _flags; uint32 _nextTime; uint32 _delayTime; - uint16 _dirty; // byte in old - byte _needsReset; - byte _justReset; // old - byte _notifyDone; // old - byte _done; // new + bool _dirty; // byte in old + bool _needsReset; + bool _justReset; // old + bool _done; // new FeatureData _data; @@ -192,13 +191,6 @@ protected: void finishResetFeatureScript(); }; -#define NUM_SYNC_CHANNELS 17 -struct SyncChannel { - uint16 masterId; - byte state; - bool alternate; -}; - class View { public: View(MohawkEngine *vm); @@ -234,7 +226,6 @@ public: void sortView(); uint32 _lastIdleTime; - SyncChannel _syncChannels[NUM_SYNC_CHANNELS]; virtual uint32 getTime() = 0; diff --git a/engines/mortevielle/saveload.cpp b/engines/mortevielle/saveload.cpp index 9f46940e1f..3065d6c551 100644 --- a/engines/mortevielle/saveload.cpp +++ b/engines/mortevielle/saveload.cpp @@ -237,7 +237,7 @@ bool SavegameManager::readSavegameHeader(Common::InSaveFile *in, SavegameHeader SaveStateList SavegameManager::listSaves(const Common::String &target) { Common::String pattern = target; - pattern += ".???"; + pattern += ".###"; Common::StringArray files = g_system->getSavefileManager()->listSavefiles(pattern); sort(files.begin(), files.end()); // Sort (hopefully ensuring we are sorted numerically..) diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp index cfddc2d6b4..0f409a6435 100644 --- a/engines/neverhood/detection.cpp +++ b/engines/neverhood/detection.cpp @@ -114,6 +114,23 @@ static const NeverhoodGameDescription gameDescriptions[] = { }, { + // Neverhood earlier English demo version + { + "neverhood", + "Demo", + AD_ENTRY1s("nevdemo.blb", "9cbc33bc8ebacacfc8071f3e26a9c85f", 22357020), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_DEMO, + GUIO1(GUIO_NONE) + }, + 0, + 0, + 0, + 0, + }, + + { // Neverhood Russian version. Dyadyushka Risech { "neverhood", diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp index 771715b95e..4dbedc8dbe 100644 --- a/engines/parallaction/dialogue.cpp +++ b/engines/parallaction/dialogue.cpp @@ -153,6 +153,8 @@ DialogueManager::DialogueManager(Parallaction *vm, ZonePtr z) : _vm(vm), _z(z) { _downKey = 0; _mouseButtons = 0; + + _state = DIALOGUE_START; } void DialogueManager::start() { diff --git a/engines/parallaction/font.cpp b/engines/parallaction/font.cpp index f1c3b89ae8..0476b15971 100644 --- a/engines/parallaction/font.cpp +++ b/engines/parallaction/font.cpp @@ -70,6 +70,8 @@ public: _data = (byte *)malloc(size); stream.read(_data, size); + _cp = 0; + _bufPitch = 0; } ~BraFont() { diff --git a/engines/parallaction/input.cpp b/engines/parallaction/input.cpp index 2cd85d7f1c..c62e7479d3 100644 --- a/engines/parallaction/input.cpp +++ b/engines/parallaction/input.cpp @@ -77,6 +77,8 @@ Input::Input(Parallaction *vm) : _vm(vm) { _dougCursor = 0; _donnaCursor = 0; _comboArrow = 0; + _mouseArrow = 0; + initCursors(); } diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index 5fd6d87985..ccf7130eb8 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -352,8 +352,8 @@ void Parallaction_ns::changeLocation() { } char location[200]; - strcpy(location, _newLocationName.c_str()); - strcpy(_location._name, _newLocationName.c_str()); + Common::strlcpy(location, _newLocationName.c_str(), 200); + Common::strlcpy(_location._name, _newLocationName.c_str(), 100); debugC(1, kDebugExec, "changeLocation(%s)", location); diff --git a/engines/pegasus/input.h b/engines/pegasus/input.h index ba6f11dba0..ac5b149413 100644 --- a/engines/pegasus/input.h +++ b/engines/pegasus/input.h @@ -451,7 +451,7 @@ protected: class Tracker : public InputHandler { public: - Tracker() : InputHandler(0) {} + Tracker() : InputHandler(0), _savedHandler(nullptr) {} virtual ~Tracker() {} virtual void handleInput(const Input &, const Hotspot *); diff --git a/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp b/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp index 688fb7860d..9a2cf8c4bb 100644 --- a/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp +++ b/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp @@ -104,6 +104,14 @@ static const ExtraID s_shutDownExtras[3][3] = { Caldoria4DSystem::Caldoria4DSystem(Neighborhood *owner) : GameInteraction(kCaldoria4DInteractionID, owner), _4DSpritesMovie(kCaldoria4DSpritesID) { + _4DSpritesScale = 0; + _whichMenu = k4DVideoMenu; + _videoChoice = k4DIslandChoice; + _audioChoice = k4DRockChoice; + _neighborhoodNotification = nullptr; + _loopStart = 0; + _clickedHotspotID = kNoHotSpotID; + g_AIArea->lockAIOut(); } diff --git a/engines/pegasus/neighborhood/caldoria/caldoriamessages.cpp b/engines/pegasus/neighborhood/caldoria/caldoriamessages.cpp index 2ae990d775..54c8b514d1 100644 --- a/engines/pegasus/neighborhood/caldoria/caldoriamessages.cpp +++ b/engines/pegasus/neighborhood/caldoria/caldoriamessages.cpp @@ -35,6 +35,8 @@ static const NotificationFlags kMessageDoneFlag = 1; CaldoriaMessages::CaldoriaMessages(Neighborhood *owner, const NotificationID id, NotificationManager *manager) : GameInteraction(kCaldoriaMessagesInteractionID, owner), Notification(id, manager), _messageMovie(kCaldoriaMessagesID) { + _neighborhoodNotification = nullptr; + _messageNumber = 0; } void CaldoriaMessages::openInteraction() { diff --git a/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp b/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp index ff4d1811d0..e0e9e2f22d 100644 --- a/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp +++ b/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp @@ -32,6 +32,7 @@ namespace Pegasus { CaldoriaMirror::CaldoriaMirror(Neighborhood *owner) : GameInteraction(kCaldoriaMirrorInteractionID, owner) { + _neighborhoodNotification = nullptr; } void CaldoriaMirror::openInteraction() { diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 7c4a8a98ba..0d5edd85ba 100644 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -100,6 +100,14 @@ Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextH _planetMovie(kNoDisplayElement), _junk(kNoDisplayElement), _energyChoiceSpot(kShuttleEnergySpotID), _gravitonChoiceSpot(kShuttleGravitonSpotID), _tractorChoiceSpot(kShuttleTractorSpotID), _shuttleViewSpot(kShuttleViewSpotID), _shuttleTransportSpot(kShuttleTransportSpotID) { + + _reactorStage = 0; + _nextGuess = 0; + _attackingItem = nullptr; + _marsEvent.mars = nullptr; + _marsEvent.event = kMarsLaunchTubeReached; + _weaponSelection = kNoWeapon; + _noAirFuse.setFunctor(new Common::Functor0Mem<void, Mars>(this, &Mars::airStageExpired)); setIsItemTaken(kMarsCard); setIsItemTaken(kAirMask); diff --git a/engines/pegasus/neighborhood/norad/alpha/noradalpha.cpp b/engines/pegasus/neighborhood/norad/alpha/noradalpha.cpp index 6a24113465..5c2af3eec2 100644 --- a/engines/pegasus/neighborhood/norad/alpha/noradalpha.cpp +++ b/engines/pegasus/neighborhood/norad/alpha/noradalpha.cpp @@ -93,6 +93,7 @@ NoradAlpha::NoradAlpha(InputHandler *nextHandler, PegasusEngine *owner) : Norad( _subControlRoom = kNorad22West; _subPrepFailed = false; + _fillingStationItem = nullptr; setIsItemTaken(kGasCanister); } diff --git a/engines/pegasus/neighborhood/norad/delta/globegame.cpp b/engines/pegasus/neighborhood/norad/delta/globegame.cpp index 9ea3036024..434b95c978 100644 --- a/engines/pegasus/neighborhood/norad/delta/globegame.cpp +++ b/engines/pegasus/neighborhood/norad/delta/globegame.cpp @@ -42,6 +42,9 @@ GlobeTracker::GlobeTracker(Movie *globeMovie, Picture *leftHighlight, Picture *r _rightHighlight = rightHighlight; _upHighlight = upHighlight; _downHighlight = downHighlight; + _trackSpot = nullptr; + _trackTime = -1; + _trackDirection = kTrackDown; } void GlobeTracker::setTrackParameters(const Hotspot *trackSpot, GlobeTrackDirection direction) { diff --git a/engines/pegasus/neighborhood/norad/pressuretracker.cpp b/engines/pegasus/neighborhood/norad/pressuretracker.cpp index 5aac19dcbe..390e3e33b6 100644 --- a/engines/pegasus/neighborhood/norad/pressuretracker.cpp +++ b/engines/pegasus/neighborhood/norad/pressuretracker.cpp @@ -34,6 +34,7 @@ PressureTracker::PressureTracker(PressureDoor *pressureDoor) { _pressureDoor = pressureDoor; _trackSpot = 0; _trackTime = 0; + _trackButton = nullptr; } void PressureTracker::setTrackParameters(const Hotspot *trackSpot, Sprite *trackButton) { diff --git a/engines/pegasus/neighborhood/wsc/wsc.cpp b/engines/pegasus/neighborhood/wsc/wsc.cpp index 5e35d8ccc1..c907bee289 100644 --- a/engines/pegasus/neighborhood/wsc/wsc.cpp +++ b/engines/pegasus/neighborhood/wsc/wsc.cpp @@ -486,6 +486,12 @@ static const CoordType kMoleculesMovieTop = kNavAreaTop + 40; WSC::WSC(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextHandler, owner, "WSC", kWSCID), _moleculesMovie(kNoDisplayElement) { + + _argonSprite = nullptr; + _cachedZoomSpot = nullptr; + _moleculeGameLevel = 0; + _numCorrect = 0; + setIsItemTaken(kArgonCanister); setIsItemTaken(kSinclairKey); setIsItemTaken(kNitrogenCanister); diff --git a/engines/prince/debugger.cpp b/engines/prince/debugger.cpp index fc216e0cfb..661b563944 100644 --- a/engines/prince/debugger.cpp +++ b/engines/prince/debugger.cpp @@ -37,6 +37,8 @@ Debugger::Debugger(PrinceEngine *vm, InterpreterFlags *flags) : GUI::Debugger(), registerCmd("initroom", WRAP_METHOD(Debugger, Cmd_InitRoom)); registerCmd("changecursor", WRAP_METHOD(Debugger, Cmd_ChangeCursor)); registerCmd("additem", WRAP_METHOD(Debugger, Cmd_AddItem)); + + _cursorNr = 0; } static int strToInt(const char *s) { diff --git a/engines/prince/graphics.cpp b/engines/prince/graphics.cpp index d5178efc17..ea8c52a45b 100644 --- a/engines/prince/graphics.cpp +++ b/engines/prince/graphics.cpp @@ -44,6 +44,8 @@ GraphicsMan::GraphicsMan(PrinceEngine *vm) : _vm(vm), _changed(false) { _shadowTable70 = (byte *)malloc(256); _shadowTable50 = (byte *)malloc(256); + + _roomBackground = 0; } GraphicsMan::~GraphicsMan() { diff --git a/engines/prince/mob.h b/engines/prince/mob.h index 0ea610dd8f..863fd3a319 100644 --- a/engines/prince/mob.h +++ b/engines/prince/mob.h @@ -35,7 +35,7 @@ namespace Prince { class Mob { public: - Mob() : _name(""), _examText("") {} + Mob() : _name(""), _examText(""), _visible(false), _type(0), _mask(0), _examDirection(kDirL), _useDirection(kDirL) {} bool loadFromStream(Common::SeekableReadStream &stream); diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index f1fd5a25d3..a1386c6b16 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -623,6 +623,8 @@ void PrinceEngine::changeCursor(uint16 curId) { const Graphics::Surface *curSurface = nullptr; switch (curId) { + default: + error("Unknown cursor Id: %d", curId); case 0: CursorMan.showMouse(false); _optionsFlag = 0; diff --git a/engines/prince/saveload.cpp b/engines/prince/saveload.cpp index 46e598be70..d3360badd1 100644 --- a/engines/prince/saveload.cpp +++ b/engines/prince/saveload.cpp @@ -63,7 +63,7 @@ SaveStateList PrinceMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = target; - pattern += ".???"; + pattern += ".###"; filenames = saveFileMan->listSavefiles(pattern); sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 4ed3cee6f3..89e22b586e 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -400,9 +400,12 @@ bool Script::loadAllMasks(Common::Array<Mask> &maskList, int offset) { return false; } delete msStream; + + tempMask._width = tempMask.getWidth(); + tempMask._height = tempMask.getHeight(); + } else { + return false; } - tempMask._width = tempMask.getWidth(); - tempMask._height = tempMask.getHeight(); } maskList.push_back(tempMask); diff --git a/engines/prince/sound.cpp b/engines/prince/sound.cpp index c9746842ef..22db9c4998 100644 --- a/engines/prince/sound.cpp +++ b/engines/prince/sound.cpp @@ -118,6 +118,7 @@ const uint8 MusicPlayer::_musRoomTable[] = { MusicPlayer::MusicPlayer(PrinceEngine *vm) : _vm(vm) { _data = nullptr; + _dataSize = 0; _isGM = false; MidiPlayer::createDriver(); diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp index b08534c7fa..c663313f01 100644 --- a/engines/saga/interface.cpp +++ b/engines/saga/interface.cpp @@ -1170,7 +1170,7 @@ void Interface::processStatusTextInput(Common::KeyState keystate) { _statusTextInputPos--; _statusTextInputString[_statusTextInputPos] = 0; default: - if (_statusTextInputPos > STATUS_TEXT_INPUT_MAX) { + if (_statusTextInputPos >= STATUS_TEXT_INPUT_MAX - 1) { // -1 because of the null termination break; } if (Common::isAlnum(keystate.ascii) || (keystate.ascii == ' ')) { diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index 2d798bb0d6..1a131bf5cc 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -185,7 +185,7 @@ void SagaEngine::save(const char *fileName, const char *saveName) { // Original game title memset(title, 0, TITLESIZE); - strncpy(title, _gameTitle.c_str(), TITLESIZE); + Common::strlcpy(title, _gameTitle.c_str(), TITLESIZE); out->write(title, TITLESIZE); // Thumbnail diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 51fb52bb21..27ac4fac49 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -41,9 +41,7 @@ #include "sci/graphics/cache.h" #include "sci/graphics/cursor.h" #include "sci/graphics/screen.h" -#include "sci/graphics/paint.h" #include "sci/graphics/paint16.h" -#include "sci/graphics/paint32.h" #include "sci/graphics/palette.h" #include "sci/graphics/ports.h" #include "sci/graphics/view.h" @@ -54,6 +52,7 @@ #include "sci/video/seq_decoder.h" #ifdef ENABLE_SCI32 #include "sci/graphics/frameout.h" +#include "sci/graphics/paint32.h" #include "video/coktel_decoder.h" #include "sci/video/robot_decoder.h" #endif @@ -1648,7 +1647,7 @@ bool Console::cmdDrawPic(int argc, const char **argv) { #endif uint16 resourceId = atoi(argv[1]); - _engine->_gfxPaint->kernelDrawPicture(resourceId, 100, false, false, false, 0); + _engine->_gfxPaint16->kernelDrawPicture(resourceId, 100, false, false, false, 0); _engine->_gfxScreen->copyToScreen(); _engine->sleep(2000); diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index c01613268a..0b69aa9221 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -3591,7 +3591,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aba367f2102e81782d961b14fbe3d630", 10246}, {"resource.000", 0, "263dce4aa34c49d3ad29bec889007b1c", 11571394}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_CD | ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_CD | ADGF_UNSTABLE, GUIO3(GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, // RAMA - English DOS/Windows Demo // Executable scanning reports "2.100.002", VERSION file reports "000.000.008" diff --git a/engines/sci/engine/gc.cpp b/engines/sci/engine/gc.cpp index 70c8c52bf0..b229490570 100644 --- a/engines/sci/engine/gc.cpp +++ b/engines/sci/engine/gc.cpp @@ -24,6 +24,10 @@ #include "common/array.h" #include "sci/graphics/ports.h" +#ifdef ENABLE_SCI32 +#include "sci/graphics/controls32.h" +#endif + namespace Sci { //#define GC_DEBUG_CODE @@ -150,6 +154,12 @@ AddrSet *findAllActiveReferences(EngineState *s) { } } +#ifdef ENABLE_SCI32 + // Init: ScrollWindows + if (g_sci->_gfxControls32) + wm.pushArray(g_sci->_gfxControls32->listObjectReferences()); +#endif + debugC(kDebugLevelGC, "[GC] -- Finished explicitly loaded scripts, done with root set"); processWorkList(s->_segMan, wm, heap); diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 62566a74b2..1202982986 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -412,7 +412,7 @@ reg_t kPlatform(EngineState *s, int argc, reg_t *argv); reg_t kTextColors(EngineState *s, int argc, reg_t *argv); reg_t kTextFonts(EngineState *s, int argc, reg_t *argv); reg_t kShow(EngineState *s, int argc, reg_t *argv); -reg_t kRemapColors16(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColors(EngineState *s, int argc, reg_t *argv); reg_t kDummy(EngineState *s, int argc, reg_t *argv); reg_t kEmpty(EngineState *s, int argc, reg_t *argv); reg_t kStub(EngineState *s, int argc, reg_t *argv); @@ -420,6 +420,26 @@ reg_t kStubNull(EngineState *s, int argc, reg_t *argv); #ifdef ENABLE_SCI32 // SCI2 Kernel Functions +reg_t kDoAudio32(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioInit(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioWaitForPlay(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioPlay(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioStop(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioPause(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioResume(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioPosition(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioRate(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioVolume(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioGetCapability(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioBitDepth(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioDistort(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioMixing(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioChannels(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioPreload(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioFade(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioHasSignal(EngineState *s, int argc, reg_t *argv); +reg_t kDoAudioSetLoop(EngineState *s, int argc, reg_t *argv); + reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv); reg_t kArray(EngineState *s, int argc, reg_t *argv); reg_t kListAt(EngineState *s, int argc, reg_t *argv); @@ -447,19 +467,28 @@ reg_t kStringTrnExclude(EngineState *s, int argc, reg_t *argv); reg_t kScrollWindowCreate(EngineState *s, int argc, reg_t *argv); reg_t kScrollWindowAdd(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowPageUp(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowPageDown(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowUpArrow(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowDownArrow(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowHome(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowEnd(EngineState *s, int argc, reg_t *argv); reg_t kScrollWindowWhere(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowGo(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowModify(EngineState *s, int argc, reg_t *argv); +reg_t kScrollWindowHide(EngineState *s, int argc, reg_t *argv); reg_t kScrollWindowShow(EngineState *s, int argc, reg_t *argv); reg_t kScrollWindowDestroy(EngineState *s, int argc, reg_t *argv); reg_t kMulDiv(EngineState *s, int argc, reg_t *argv); -reg_t kRemapColors(EngineState *s, int argc, reg_t *argv); -reg_t kRemapOff(EngineState *s, int argc, reg_t *argv); -reg_t kRemapByRange(EngineState *s, int argc, reg_t *argv); -reg_t kRemapByPercent(EngineState *s, int argc, reg_t *argv); -reg_t kRemapToGray(EngineState *s, int argc, reg_t *argv); -reg_t kRemapToPercentGray(EngineState *s, int argc, reg_t *argv); -reg_t kRemapSetNoMatchRange(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsOff(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsByRange(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsByPercent(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsToGray(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsToPercentGray(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColorsBlockRange(EngineState *s, int argc, reg_t *argv); reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv); reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv); @@ -537,6 +566,7 @@ reg_t kMoveToFront(EngineState *s, int argc, reg_t *argv); reg_t kMoveToEnd(EngineState *s, int argc, reg_t *argv); reg_t kGetWindowsOption(EngineState *s, int argc, reg_t *argv); reg_t kWinHelp(EngineState *s, int argc, reg_t *argv); +reg_t kMessageBox(EngineState *s, int argc, reg_t *argv); reg_t kGetConfig(EngineState *s, int argc, reg_t *argv); reg_t kGetSierraProfileInt(EngineState *s, int argc, reg_t *argv); reg_t kCelInfo(EngineState *s, int argc, reg_t *argv); @@ -558,7 +588,6 @@ reg_t kPlayDuck(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundInit(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundPlay(EngineState *s, int argc, reg_t *argv); -reg_t kDoSoundRestore(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundDispose(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundMute(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundStop(EngineState *s, int argc, reg_t *argv); @@ -573,7 +602,6 @@ reg_t kDoSoundUpdateCues(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundSendMidi(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundGlobalReverb(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundSetHold(EngineState *s, int argc, reg_t *argv); -reg_t kDoSoundDummy(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundGetAudioCapability(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundSuspend(EngineState *s, int argc, reg_t *argv); reg_t kDoSoundSetVolume(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index 0ede307e6b..dacaafe757 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -102,7 +102,7 @@ struct SciKernelMapSubEntry { static const SciKernelMapSubEntry kDoSound_subops[] = { { SIG_SOUNDSCI0, 0, MAP_CALL(DoSoundInit), "o", NULL }, { SIG_SOUNDSCI0, 1, MAP_CALL(DoSoundPlay), "o", NULL }, - { SIG_SOUNDSCI0, 2, MAP_CALL(DoSoundRestore), "(o)", NULL }, + { SIG_SOUNDSCI0, 2, MAP_EMPTY(DoSoundRestore), "(o)", NULL }, { SIG_SOUNDSCI0, 3, MAP_CALL(DoSoundDispose), "o", NULL }, { SIG_SOUNDSCI0, 4, MAP_CALL(DoSoundMute), "(i)", NULL }, { SIG_SOUNDSCI0, 5, MAP_CALL(DoSoundStop), "o", NULL }, @@ -115,7 +115,7 @@ static const SciKernelMapSubEntry kDoSound_subops[] = { { SIG_SOUNDSCI0, 12, MAP_CALL(DoSoundStopAll), "", NULL }, { SIG_SOUNDSCI1EARLY, 0, MAP_CALL(DoSoundMasterVolume), NULL, NULL }, { SIG_SOUNDSCI1EARLY, 1, MAP_CALL(DoSoundMute), NULL, NULL }, - { SIG_SOUNDSCI1EARLY, 2, MAP_CALL(DoSoundRestore), NULL, NULL }, + { SIG_SOUNDSCI1EARLY, 2, MAP_EMPTY(DoSoundRestore), NULL, NULL }, { SIG_SOUNDSCI1EARLY, 3, MAP_CALL(DoSoundGetPolyphony), NULL, NULL }, { SIG_SOUNDSCI1EARLY, 4, MAP_CALL(DoSoundUpdate), NULL, NULL }, { SIG_SOUNDSCI1EARLY, 5, MAP_CALL(DoSoundInit), NULL, NULL }, @@ -128,11 +128,11 @@ static const SciKernelMapSubEntry kDoSound_subops[] = { { SIG_SOUNDSCI1EARLY, 12, MAP_CALL(DoSoundSendMidi), "oiii", NULL }, { SIG_SOUNDSCI1EARLY, 13, MAP_CALL(DoSoundGlobalReverb), "(i)", NULL }, { SIG_SOUNDSCI1EARLY, 14, MAP_CALL(DoSoundSetHold), "oi", NULL }, - { SIG_SOUNDSCI1EARLY, 15, MAP_CALL(DoSoundDummy), "", NULL }, + { SIG_SOUNDSCI1EARLY, 15, MAP_EMPTY(DoSoundDummy), "", NULL }, // ^^ Longbow demo { SIG_SOUNDSCI1LATE, 0, MAP_CALL(DoSoundMasterVolume), NULL, NULL }, { SIG_SOUNDSCI1LATE, 1, MAP_CALL(DoSoundMute), NULL, NULL }, - { SIG_SOUNDSCI1LATE, 2, MAP_CALL(DoSoundRestore), "", NULL }, + { SIG_SOUNDSCI1LATE, 2, MAP_EMPTY(DoSoundRestore), "", NULL }, { SIG_SOUNDSCI1LATE, 3, MAP_CALL(DoSoundGetPolyphony), NULL, NULL }, { SIG_SOUNDSCI1LATE, 4, MAP_CALL(DoSoundGetAudioCapability), "", NULL }, { SIG_SOUNDSCI1LATE, 5, MAP_CALL(DoSoundSuspend), "i", NULL }, @@ -143,7 +143,7 @@ static const SciKernelMapSubEntry kDoSound_subops[] = { { SIG_SOUNDSCI1LATE, 10, MAP_CALL(DoSoundPause), NULL, NULL }, { SIG_SOUNDSCI1LATE, 11, MAP_CALL(DoSoundFade), "oiiii(i)", kDoSoundFade_workarounds }, { SIG_SOUNDSCI1LATE, 12, MAP_CALL(DoSoundSetHold), NULL, NULL }, - { SIG_SOUNDSCI1LATE, 13, MAP_CALL(DoSoundDummy), NULL, NULL }, + { SIG_SOUNDSCI1LATE, 13, MAP_EMPTY(DoSoundDummy), NULL, NULL }, { SIG_SOUNDSCI1LATE, 14, MAP_CALL(DoSoundSetVolume), "oi", NULL }, { SIG_SOUNDSCI1LATE, 15, MAP_CALL(DoSoundSetPriority), "oi", NULL }, { SIG_SOUNDSCI1LATE, 16, MAP_CALL(DoSoundSetLoop), "oi", NULL }, @@ -152,36 +152,97 @@ static const SciKernelMapSubEntry kDoSound_subops[] = { { SIG_SOUNDSCI1LATE, 19, MAP_CALL(DoSoundGlobalReverb), NULL, NULL }, { SIG_SOUNDSCI1LATE, 20, MAP_CALL(DoSoundUpdate), NULL, NULL }, #ifdef ENABLE_SCI32 - { SIG_SOUNDSCI21, 0, MAP_CALL(DoSoundMasterVolume), NULL, NULL }, - { SIG_SOUNDSCI21, 1, MAP_CALL(DoSoundMute), NULL, NULL }, - { SIG_SOUNDSCI21, 2, MAP_CALL(DoSoundRestore), NULL, NULL }, - { SIG_SOUNDSCI21, 3, MAP_CALL(DoSoundGetPolyphony), NULL, NULL }, - { SIG_SOUNDSCI21, 4, MAP_CALL(DoSoundGetAudioCapability), NULL, NULL }, - { SIG_SOUNDSCI21, 5, MAP_CALL(DoSoundSuspend), NULL, NULL }, - { SIG_SOUNDSCI21, 6, MAP_CALL(DoSoundInit), NULL, NULL }, - { SIG_SOUNDSCI21, 7, MAP_CALL(DoSoundDispose), NULL, NULL }, - { SIG_SOUNDSCI21, 8, MAP_CALL(DoSoundPlay), "o(i)", NULL }, + { SIG_SOUNDSCI21, 0, MAP_CALL(DoSoundMasterVolume), "(i)", NULL }, + { SIG_SOUNDSCI21, 1, MAP_CALL(DoSoundMute), "(i)", NULL }, + { SIG_SOUNDSCI21, 2, MAP_EMPTY(DoSoundRestore), NULL, NULL }, + { SIG_SOUNDSCI21, 3, MAP_CALL(DoSoundGetPolyphony), "", NULL }, + { SIG_SOUNDSCI21, 4, MAP_CALL(DoSoundGetAudioCapability), "", NULL }, + { SIG_SOUNDSCI21, 5, MAP_CALL(DoSoundSuspend), "i", NULL }, + { SIG_SOUNDSCI21, 6, MAP_CALL(DoSoundInit), "o", NULL }, + { SIG_SOUNDSCI21, 7, MAP_CALL(DoSoundDispose), "o", NULL }, + { SIG_SOUNDSCI21, 8, MAP_CALL(DoSoundPlay), "o", kDoSoundPlay_workarounds }, // ^^ TODO: if this is really the only change between SCI1LATE AND SCI21, we could rename the // SIG_SOUNDSCI1LATE #define to SIG_SINCE_SOUNDSCI1LATE and make it being SCI1LATE+. Although // I guess there are many more changes somewhere // TODO: Quest for Glory 4 (SCI2.1) uses the old scheme, we need to detect it accordingly // signature for SCI21 should be "o" - { SIG_SOUNDSCI21, 9, MAP_CALL(DoSoundStop), NULL, NULL }, - { SIG_SOUNDSCI21, 10, MAP_CALL(DoSoundPause), NULL, NULL }, - { SIG_SOUNDSCI21, 11, MAP_CALL(DoSoundFade), NULL, kDoSoundFade_workarounds }, - { SIG_SOUNDSCI21, 12, MAP_CALL(DoSoundSetHold), NULL, NULL }, - { SIG_SOUNDSCI21, 13, MAP_CALL(DoSoundDummy), NULL, NULL }, - { SIG_SOUNDSCI21, 14, MAP_CALL(DoSoundSetVolume), NULL, NULL }, - { SIG_SOUNDSCI21, 15, MAP_CALL(DoSoundSetPriority), NULL, NULL }, - { SIG_SOUNDSCI21, 16, MAP_CALL(DoSoundSetLoop), NULL, NULL }, - { SIG_SOUNDSCI21, 17, MAP_CALL(DoSoundUpdateCues), NULL, NULL }, - { SIG_SOUNDSCI21, 18, MAP_CALL(DoSoundSendMidi), NULL, NULL }, - { SIG_SOUNDSCI21, 19, MAP_CALL(DoSoundGlobalReverb), NULL, NULL }, - { SIG_SOUNDSCI21, 20, MAP_CALL(DoSoundUpdate), NULL, NULL }, + { SIG_SOUNDSCI21, 9, MAP_CALL(DoSoundStop), "o", NULL }, + { SIG_SOUNDSCI21, 10, MAP_CALL(DoSoundPause), "[o0]i", NULL }, + { SIG_SOUNDSCI21, 11, MAP_CALL(DoSoundFade), "oiiii", kDoSoundFade_workarounds }, + { SIG_SOUNDSCI21, 12, MAP_CALL(DoSoundSetHold), "oi", NULL }, + { SIG_SOUNDSCI21, 13, MAP_EMPTY(DoSoundDummy), NULL, NULL }, + { SIG_SOUNDSCI21, 14, MAP_CALL(DoSoundSetVolume), "oi", NULL }, + { SIG_SOUNDSCI21, 15, MAP_CALL(DoSoundSetPriority), "oi", NULL }, + { SIG_SOUNDSCI21, 16, MAP_CALL(DoSoundSetLoop), "oi", NULL }, + { SIG_SOUNDSCI21, 17, MAP_CALL(DoSoundUpdateCues), "o", NULL }, + { SIG_SOUNDSCI21, 18, MAP_CALL(DoSoundSendMidi), "oiiii", NULL }, + { SIG_SOUNDSCI21, 19, MAP_CALL(DoSoundGlobalReverb), "(i)", NULL }, + { SIG_SOUNDSCI21, 20, MAP_CALL(DoSoundUpdate), "o", NULL }, #endif SCI_SUBOPENTRY_TERMINATOR }; +#ifdef ENABLE_SCI32 +// NOTE: In SSCI, some 'unused' kDoAudio subops are actually +// called indirectly by kDoSound: +// +// kDoSoundGetAudioCapability -> kDoAudioGetCapability +// kDoSoundPlay -> kDoAudioPlay, kDoAudioStop +// kDoSoundPause -> kDoAudioPause, kDoAudioResume +// kDoSoundFade -> kDoAudioFade +// kDoSoundSetVolume -> kDoAudioVolume +// kDoSoundSetLoop -> kDoAudioSetLoop +// kDoSoundUpdateCues -> kDoAudioPosition +// +// In ScummVM, logic inside these kernel functions has been +// moved to methods of Audio32, and direct calls to Audio32 +// are made from kDoSound instead. +// +// Some kDoAudio methods are esoteric and appear to be used +// only by one or two games: +// +// kDoAudioMixing: Phantasmagoria (other games call this +// function, but only to disable the feature) +// kDoAudioHasSignal: SQ6 TalkRandCycle +// kDoAudioPan: Rama RegionSFX::pan method +// +// Finally, there is a split in SCI2.1mid audio code. +// QFG4CD & SQ6 do not have opcodes 18 and 19, but they +// exist in GK2, KQ7 2.00b, Phantasmagoria 1, PQ:SWAT, and +// Torin. (It is unknown if they exist in MUMG Deluxe or +// Shivers 1; they are not used in either of these games.) + +// version, subId, function-mapping, signature, workarounds +static const SciKernelMapSubEntry kDoAudio_subops[] = { + { SIG_SCI32, 0, MAP_CALL(DoAudioInit), "", NULL }, + // SCI2 includes a Sync script that would call + // kDoAudioWaitForPlay, but SSCI has no opcode 1 until + // SCI2.1early + { SIG_SINCE_SCI21, 1, MAP_CALL(DoAudioWaitForPlay), "(i)(i)(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 2, MAP_CALL(DoAudioPlay), "(i)(i)(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 3, MAP_CALL(DoAudioStop), "(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 4, MAP_CALL(DoAudioPause), "(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 5, MAP_CALL(DoAudioResume), "(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 6, MAP_CALL(DoAudioPosition), "(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 7, MAP_CALL(DoAudioRate), "(i)", NULL }, + { SIG_SCI32, 8, MAP_CALL(DoAudioVolume), "(i)(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 9, MAP_CALL(DoAudioGetCapability), "", NULL }, + { SIG_SCI32, 10, MAP_CALL(DoAudioBitDepth), "(i)", NULL }, + { SIG_SCI32, 11, MAP_DUMMY(DoAudioDistort), "(i)", NULL }, + { SIG_SCI32, 12, MAP_CALL(DoAudioMixing), "(i)", NULL }, + { SIG_SCI32, 13, MAP_CALL(DoAudioChannels), "(i)", NULL }, + { SIG_SCI32, 14, MAP_CALL(DoAudioPreload), "(i)", NULL }, + { SIG_SINCE_SCI21MID, 15, MAP_CALL(DoAudioFade), "(iiii)(i)(i)", NULL }, + { SIG_SINCE_SCI21MID, 16, MAP_DUMMY(DoAudioFade36), "iiiii(iii)(i)", NULL }, + { SIG_SINCE_SCI21MID, 17, MAP_CALL(DoAudioHasSignal), "", NULL }, + { SIG_SINCE_SCI21MID, 18, MAP_EMPTY(DoAudioCritical), "", NULL }, + { SIG_SINCE_SCI21MID, 19, MAP_CALL(DoAudioSetLoop), "iii(o)", NULL }, + { SIG_SCI3, 20, MAP_DUMMY(DoAudioPan), "", NULL }, + { SIG_SCI3, 21, MAP_DUMMY(DoAudioPanOff), "", NULL }, + SCI_SUBOPENTRY_TERMINATOR +}; +#endif + // version, subId, function-mapping, signature, workarounds static const SciKernelMapSubEntry kGraph_subops[] = { { SIG_SCI32, 1, MAP_CALL(StubNull), "", NULL }, // called by gk1 sci32 right at the start @@ -353,12 +414,12 @@ static const SciKernelMapSubEntry kList_subops[] = { // version, subId, function-mapping, signature, workarounds static const SciKernelMapSubEntry kRemapColors_subops[] = { - { SIG_SCI32, 0, MAP_CALL(RemapOff), "(i)", NULL }, - { SIG_SCI32, 1, MAP_CALL(RemapByRange), "iiii(i)", NULL }, - { SIG_SCI32, 2, MAP_CALL(RemapByPercent), "ii(i)", NULL }, - { SIG_SCI32, 3, MAP_CALL(RemapToGray), "ii(i)", NULL }, - { SIG_SCI32, 4, MAP_CALL(RemapToPercentGray), "iii(i)", NULL }, - { SIG_SCI32, 5, MAP_CALL(RemapSetNoMatchRange), "ii", NULL }, + { SIG_SCI32, 0, MAP_CALL(RemapColorsOff), "(i)", NULL }, + { SIG_SCI32, 1, MAP_CALL(RemapColorsByRange), "iiii(i)", NULL }, + { SIG_SCI32, 2, MAP_CALL(RemapColorsByPercent), "ii(i)", NULL }, + { SIG_SCI32, 3, MAP_CALL(RemapColorsToGray), "ii(i)", NULL }, + { SIG_SCI32, 4, MAP_CALL(RemapColorsToPercentGray), "iii(i)", NULL }, + { SIG_SCI32, 5, MAP_CALL(RemapColorsBlockRange), "ii", NULL }, SCI_SUBOPENTRY_TERMINATOR }; @@ -407,25 +468,30 @@ static const SciKernelMapSubEntry kString_subops[] = { // version, subId, function-mapping, signature, workarounds static const SciKernelMapSubEntry kScrollWindow_subops[] = { { SIG_SCI32, 0, MAP_CALL(ScrollWindowCreate), "oi", NULL }, - { SIG_SCI32, 1, MAP_CALL(ScrollWindowAdd), "o.ii.(.)", NULL }, - { SIG_SCI32, 2, MAP_DUMMY(ScrollWindowClear), "o", NULL }, - { SIG_SCI32, 3, MAP_DUMMY(ScrollWindowPageUp), "o", NULL }, - { SIG_SCI32, 4, MAP_DUMMY(ScrollWindowPageDown), "o", NULL }, - { SIG_SCI32, 5, MAP_DUMMY(ScrollWindowUpArrow), "o", NULL }, - { SIG_SCI32, 6, MAP_DUMMY(ScrollWindowDownArrow), "o", NULL }, - { SIG_SCI32, 7, MAP_DUMMY(ScrollWindowHome), "o", NULL }, - { SIG_SCI32, 8, MAP_DUMMY(ScrollWindowEnd), "o", NULL }, - { SIG_SCI32, 9, MAP_DUMMY(ScrollWindowResize), "o.", NULL }, - { SIG_SCI32, 10, MAP_CALL(ScrollWindowWhere), "oi", NULL }, - { SIG_SCI32, 11, MAP_DUMMY(ScrollWindowGo), "o..", NULL }, - { SIG_SCI32, 12, MAP_DUMMY(ScrollWindowInsert), "o.....", NULL }, - { SIG_SCI32, 13, MAP_DUMMY(ScrollWindowDelete), "o.", NULL }, - { SIG_SCI32, 14, MAP_DUMMY(ScrollWindowModify), "o.....(.)", NULL }, - { SIG_SCI32, 15, MAP_DUMMY(ScrollWindowHide), "o", NULL }, - { SIG_SCI32, 16, MAP_CALL(ScrollWindowShow), "o", NULL }, - { SIG_SCI32, 17, MAP_CALL(ScrollWindowDestroy), "o", NULL }, - { SIG_SCI32, 18, MAP_DUMMY(ScrollWindowText), "o", NULL }, - { SIG_SCI32, 19, MAP_DUMMY(ScrollWindowReconstruct), "o.", NULL }, + { SIG_SCI32, 1, MAP_CALL(ScrollWindowAdd), "iriii(i)", kScrollWindowAdd_workarounds }, + { SIG_SCI32, 2, MAP_DUMMY(ScrollWindowClear), "i", NULL }, + { SIG_SCI32, 3, MAP_CALL(ScrollWindowPageUp), "i", NULL }, + { SIG_SCI32, 4, MAP_CALL(ScrollWindowPageDown), "i", NULL }, + { SIG_SCI32, 5, MAP_CALL(ScrollWindowUpArrow), "i", NULL }, + { SIG_SCI32, 6, MAP_CALL(ScrollWindowDownArrow), "i", NULL }, + { SIG_SCI32, 7, MAP_CALL(ScrollWindowHome), "i", NULL }, + { SIG_SCI32, 8, MAP_CALL(ScrollWindowEnd), "i", NULL }, + { SIG_SCI32, 9, MAP_DUMMY(ScrollWindowResize), "i.", NULL }, + { SIG_SCI32, 10, MAP_CALL(ScrollWindowWhere), "ii", NULL }, + { SIG_SCI32, 11, MAP_CALL(ScrollWindowGo), "i..", NULL }, + { SIG_SCI32, 12, MAP_DUMMY(ScrollWindowInsert), "i.....", NULL }, + { SIG_SCI32, 13, MAP_DUMMY(ScrollWindowDelete), "i.", NULL }, + { SIG_SCI32, 14, MAP_CALL(ScrollWindowModify), "iiriii(i)", NULL }, + { SIG_SCI32, 15, MAP_CALL(ScrollWindowHide), "i", NULL }, + { SIG_SCI32, 16, MAP_CALL(ScrollWindowShow), "i", NULL }, + { SIG_SCI32, 17, MAP_CALL(ScrollWindowDestroy), "i", NULL }, + // LSL6hires uses kScrollWindowText and kScrollWindowReconstruct to try to save + // and restore the content of the game's subtitle window, but this feature did not + // use the normal save/load functionality of the engine and was actually broken + // (all text formatting was missing on restore). Since there is no real reason to + // save the subtitle scrollback anyway, we just ignore calls to these two functions. + { SIG_SCI32, 18, MAP_EMPTY(ScrollWindowText), "i", NULL }, + { SIG_SCI32, 19, MAP_EMPTY(ScrollWindowReconstruct), "i.", NULL }, SCI_SUBOPENTRY_TERMINATOR }; @@ -484,7 +550,10 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(DisposeList), SIG_EVERYWHERE, "l", NULL, NULL }, { MAP_CALL(DisposeScript), SIG_EVERYWHERE, "i(i*)", NULL, kDisposeScript_workarounds }, { MAP_CALL(DisposeWindow), SIG_EVERYWHERE, "i(i)", NULL, NULL }, - { MAP_CALL(DoAudio), SIG_EVERYWHERE, "i(.*)", NULL, NULL }, // subop + { MAP_CALL(DoAudio), SCI_VERSION_NONE, SCI_VERSION_2, SIGFOR_ALL, "i(.*)", NULL, NULL }, // subop +#ifdef ENABLE_SCI32 + { "DoAudio", kDoAudio32, SIG_SINCE_SCI21, SIGFOR_ALL, "(.*)", kDoAudio_subops, NULL }, +#endif { MAP_CALL(DoAvoider), SIG_EVERYWHERE, "o(i)", NULL, NULL }, { MAP_CALL(DoBresen), SIG_EVERYWHERE, "o", NULL, NULL }, { MAP_CALL(DoSound), SIG_EVERYWHERE, "i(.*)", kDoSound_subops, NULL }, @@ -565,9 +634,9 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(PriCoord), SIG_EVERYWHERE, "i", NULL, NULL }, { MAP_CALL(Random), SIG_EVERYWHERE, "i(i)(i)", NULL, NULL }, { MAP_CALL(ReadNumber), SIG_EVERYWHERE, "r", NULL, kReadNumber_workarounds }, - { "RemapColors", kRemapColors16, SIG_SCI11, SIGFOR_ALL, "i(i)(i)(i)(i)", NULL, NULL }, + { MAP_CALL(RemapColors), SIG_SCI11, SIGFOR_ALL, "i(i)(i)(i)(i)", NULL, NULL }, #ifdef ENABLE_SCI32 - { MAP_CALL(RemapColors), SIG_SCI32, SIGFOR_ALL, "i(i)(i)(i)(i)(i)", kRemapColors_subops, NULL }, + { "RemapColors", kRemapColors32, SIG_SCI32, SIGFOR_ALL, "i(i)(i)(i)(i)(i)", kRemapColors_subops, NULL }, #endif { MAP_CALL(ResCheck), SIG_EVERYWHERE, "ii(iiii)", NULL, NULL }, { MAP_CALL(RespondsTo), SIG_EVERYWHERE, ".i", NULL, NULL }, @@ -659,6 +728,8 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(ListEachElementDo), SIG_EVERYWHERE, "li(.*)", NULL, NULL }, { MAP_CALL(ListFirstTrue), SIG_EVERYWHERE, "li(.*)", NULL, NULL }, { MAP_CALL(ListIndexOf), SIG_EVERYWHERE, "l[o0]", NULL, NULL }, + // kMessageBox is used only by KQ7 1.51 + { MAP_CALL(MessageBox), SIG_SCI32, SIGFOR_ALL, "rri", NULL, NULL }, { "OnMe", kIsOnMe, SIG_EVERYWHERE, "iioi", NULL, NULL }, // Purge is used by the memory manager in SSCI to ensure that X number of bytes (the so called "unmovable // memory") are available when the current room changes. This is similar to the SCI0-SCI1.1 FlushResources @@ -736,9 +807,12 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(SetFontRes), SIG_SCI21EARLY, SIGFOR_ALL, "ii", NULL, NULL }, { MAP_CALL(Font), SIG_SINCE_SCI21MID, SIGFOR_ALL, "i(.*)", kFont_subops, NULL }, { MAP_CALL(Bitmap), SIG_EVERYWHERE, "(.*)", kBitmap_subops, NULL }, - { MAP_CALL(AddLine), SIG_EVERYWHERE, "oiiiiiiiii", NULL, NULL }, - { MAP_CALL(UpdateLine), SIG_EVERYWHERE, "[r0]oiiiiiiiii", NULL, NULL }, - { MAP_CALL(DeleteLine), SIG_EVERYWHERE, "[r0]o", NULL, NULL }, + { MAP_CALL(AddLine), SIG_EVERYWHERE, "oiiii(iiiii)", NULL, NULL }, + // The first argument is a ScreenItem instance ID that is created by the + // engine, not the VM; as a result, in ScummVM, this argument looks like + // an integer and not an object, although it is an object reference. + { MAP_CALL(UpdateLine), SIG_EVERYWHERE, "ioiiii(iiiii)", NULL, NULL }, + { MAP_CALL(DeleteLine), SIG_EVERYWHERE, "io", NULL, NULL }, // SCI2.1 Empty Functions diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index 335763a35f..d604bb85d0 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -806,25 +806,47 @@ reg_t kSaveGame(EngineState *s, int argc, reg_t *argv) { return NULL_REG; } else if (virtualId < SAVEGAMEID_OFFICIALRANGE_START) { // virtualId is low, we assume that scripts expect us to create new slot - if (g_sci->getGameId() == GID_JONES) { + switch (g_sci->getGameId()) { + case GID_JONES: // Jones has one save slot only savegameId = 0; - } else if (virtualId == s->_lastSaveVirtualId) { - // if last virtual id is the same as this one, we assume that caller wants to overwrite last save - savegameId = s->_lastSaveNewId; - } else { - uint savegameNr; - // savegameId is in lower range, scripts expect us to create a new slot - for (savegameId = SAVEGAMESLOT_FIRST; savegameId <= SAVEGAMESLOT_LAST; savegameId++) { - for (savegameNr = 0; savegameNr < saves.size(); savegameNr++) { - if (savegameId == saves[savegameNr].id) + break; + case GID_FANMADE: { + // Fanmade game, try to identify the game + const char *gameName = g_sci->getGameObjectName(); + + if (strcmp(gameName, "CascadeQuest") == 0) { + // Cascade Quest calls us directly to auto-save and uses slot 99, + // put that save into slot 0 (ScummVM auto-save slot) see bug #7007 + if (virtualId == (SAVEGAMEID_OFFICIALRANGE_START - 1)) { + savegameId = 0; + } + } + break; + } + default: + break; + } + + if (savegameId < 0) { + // savegameId not set yet + if (virtualId == s->_lastSaveVirtualId) { + // if last virtual id is the same as this one, we assume that caller wants to overwrite last save + savegameId = s->_lastSaveNewId; + } else { + uint savegameNr; + // savegameId is in lower range, scripts expect us to create a new slot + for (savegameId = SAVEGAMESLOT_FIRST; savegameId <= SAVEGAMESLOT_LAST; savegameId++) { + for (savegameNr = 0; savegameNr < saves.size(); savegameNr++) { + if (savegameId == saves[savegameNr].id) + break; + } + if (savegameNr == saves.size()) // Slot not found, seems to be good to go break; } - if (savegameNr == saves.size()) // Slot not found, seems to be good to go - break; + if (savegameId > SAVEGAMESLOT_LAST) + error("kSavegame: no more savegame slots available"); } - if (savegameId > SAVEGAMESLOT_LAST) - error("kSavegame: no more savegame slots available"); } } else { error("kSaveGame: invalid savegameId used"); diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 73236b98ed..cae5a09789 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1258,7 +1258,7 @@ reg_t kShow(EngineState *s, int argc, reg_t *argv) { } // Early variant of the SCI32 kRemapColors kernel function, used in the demo of QFG4 -reg_t kRemapColors16(EngineState *s, int argc, reg_t *argv) { +reg_t kRemapColors(EngineState *s, int argc, reg_t *argv) { uint16 operation = argv[0].toUint16(); switch (operation) { diff --git a/engines/sci/engine/kgraphics32.cpp b/engines/sci/engine/kgraphics32.cpp index 6c51ec4284..019a06930c 100644 --- a/engines/sci/engine/kgraphics32.cpp +++ b/engines/sci/engine/kgraphics32.cpp @@ -52,7 +52,9 @@ #include "sci/graphics/controls32.h" #include "sci/graphics/font.h" // TODO: remove once kBitmap is moved in a separate class #include "sci/graphics/frameout.h" +#include "sci/graphics/paint32.h" #include "sci/graphics/palette32.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/text32.h" #endif @@ -133,8 +135,6 @@ reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv) { reg_t kFrameOut(EngineState *s, int argc, reg_t *argv) { bool showBits = argc > 0 ? argv[0].toUint16() : true; g_sci->_gfxFrameout->kernelFrameOut(showBits); - s->speedThrottler(16); - s->_throttleTrigger = true; return s->r_acc; } @@ -255,6 +255,10 @@ reg_t kWinHelp(EngineState *s, int argc, reg_t *argv) { return s->r_acc; } +reg_t kMessageBox(EngineState *s, int argc, reg_t *argv) { + return g_sci->_gfxControls32->kernelMessageBox(s->_segMan->getString(argv[0]), s->_segMan->getString(argv[1]), argv[2].toUint16()); +} + /** * Causes an immediate plane transition with an optional transition * effect @@ -361,140 +365,138 @@ reg_t kScrollWindow(EngineState *s, int argc, reg_t *argv) { } reg_t kScrollWindowCreate(EngineState *s, int argc, reg_t *argv) { - debug("kScrollWindowCreate"); - kStub(s, argc, argv); - return argv[0]; + const reg_t object = argv[0]; + const uint16 maxNumEntries = argv[1].toUint16(); + + SegManager *segMan = s->_segMan; + const int16 borderColor = readSelectorValue(segMan, object, SELECTOR(borderColor)); + const TextAlign alignment = (TextAlign)readSelectorValue(segMan, object, SELECTOR(mode)); + const GuiResourceId fontId = (GuiResourceId)readSelectorValue(segMan, object, SELECTOR(font)); + const int16 backColor = readSelectorValue(segMan, object, SELECTOR(back)); + const int16 foreColor = readSelectorValue(segMan, object, SELECTOR(fore)); + const reg_t plane = readSelector(segMan, object, SELECTOR(plane)); + + Common::Rect rect; + rect.left = readSelectorValue(segMan, object, SELECTOR(nsLeft)); + rect.top = readSelectorValue(segMan, object, SELECTOR(nsTop)); + rect.right = readSelectorValue(segMan, object, SELECTOR(nsRight)) + 1; + rect.bottom = readSelectorValue(segMan, object, SELECTOR(nsBottom)) + 1; + const Common::Point position(rect.left, rect.top); + + return g_sci->_gfxControls32->makeScrollWindow(rect, position, plane, foreColor, backColor, fontId, alignment, borderColor, maxNumEntries); } reg_t kScrollWindowAdd(EngineState *s, int argc, reg_t *argv) { - debug("kScrollWindowAdd"); - return kStubNull(s, argc, argv); + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + const Common::String text = s->_segMan->getString(argv[1]); + const GuiResourceId fontId = argv[2].toSint16(); + const int16 color = argv[3].toSint16(); + const TextAlign alignment = (TextAlign)argv[4].toSint16(); + const bool scrollTo = argc > 5 ? (bool)argv[5].toUint16() : true; + + return scrollWindow->add(text, fontId, color, alignment, scrollTo); } reg_t kScrollWindowWhere(EngineState *s, int argc, reg_t *argv) { - debug("kScrollWindowWhere"); - return kStubNull(s, argc, argv); + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + const uint16 where = (argv[1].toUint16() * scrollWindow->where()).toInt(); + + return make_reg(0, where); +} + +reg_t kScrollWindowGo(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + const Ratio scrollTop(argv[1].toSint16(), argv[2].toSint16()); + scrollWindow->go(scrollTop); + + return s->r_acc; +} + +reg_t kScrollWindowModify(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + const reg_t entryId = argv[1]; + const Common::String newText = s->_segMan->getString(argv[2]); + const GuiResourceId fontId = argv[3].toSint16(); + const int16 color = argv[4].toSint16(); + const TextAlign alignment = (TextAlign)argv[5].toSint16(); + const bool scrollTo = argc > 6 ? (bool)argv[6].toUint16() : true; + + return scrollWindow->modify(entryId, newText, fontId, color, alignment, scrollTo); +} + +reg_t kScrollWindowHide(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->hide(); + + return s->r_acc; } reg_t kScrollWindowShow(EngineState *s, int argc, reg_t *argv) { - debug("kScrollWindowShow"); - return kStubNull(s, argc, argv); + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->show(); + + return s->r_acc; } -reg_t kScrollWindowDestroy(EngineState *s, int argc, reg_t *argv) { - debug("kScrollWindowDestroy"); - return kStubNull(s, argc, argv); +reg_t kScrollWindowPageUp(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->pageUp(); + + return s->r_acc; } -#if 0 -reg_t kScrollWindow(EngineState *s, int argc, reg_t *argv) { - // Used by SQ6 and LSL6 hires for the text area in the bottom of the - // screen. The relevant scripts also exist in Phantasmagoria 1, but they're - // unused. This is always called by scripts 64906 (ScrollerWindow) and - // 64907 (ScrollableWindow). - - reg_t kWindow = argv[1]; - uint16 op = argv[0].toUint16(); - switch (op) { - case 0: // Init - // TODO: Init reads the nsLeft, nsTop, nsRight, nsBottom, - // borderColor, fore, back, mode, font, plane selectors - // from the window in argv[1]. - g_sci->_gfxFrameout->initScrollText(argv[2].toUint16()); // maxItems - g_sci->_gfxFrameout->clearScrollTexts(); - return argv[1]; // kWindow - case 1: // Show message, called by ScrollableWindow::addString - case 14: // Modify message, called by ScrollableWindow::modifyString - // TODO: The parameters in Modify are shifted by one: the first - // argument is the handle of the text to modify. The others - // are as Add. - { - Common::String text = s->_segMan->getString(argv[2]); - uint16 x = 0; - uint16 y = 0; - // TODO: argv[3] is font - // TODO: argv[4] is color - // TODO: argv[5] is alignment (0 = left, 1 = center, 2 = right) - // font,color,alignment may also be -1. (Maybe same as previous?) - // TODO: argv[6] is an optional bool, defaulting to true if not present. - // If true, the old contents are scrolled out of view. - // TODO: Return a handle of the inserted text. (Used for modify/insert) - // This handle looks like it should also be usable by kString. - g_sci->_gfxFrameout->addScrollTextEntry(text, kWindow, x, y, (op == 14)); - } - break; - case 2: // Clear, called by ScrollableWindow::erase - g_sci->_gfxFrameout->clearScrollTexts(); - break; - case 3: // Page up, called by ScrollableWindow::scrollTo - // TODO - kStub(s, argc, argv); - break; - case 4: // Page down, called by ScrollableWindow::scrollTo - // TODO - kStub(s, argc, argv); - break; - case 5: // Up arrow, called by ScrollableWindow::scrollTo - g_sci->_gfxFrameout->prevScrollText(); - break; - case 6: // Down arrow, called by ScrollableWindow::scrollTo - g_sci->_gfxFrameout->nextScrollText(); - break; - case 7: // Home, called by ScrollableWindow::scrollTo - g_sci->_gfxFrameout->firstScrollText(); - break; - case 8: // End, called by ScrollableWindow::scrollTo - g_sci->_gfxFrameout->lastScrollText(); - break; - case 9: // Resize, called by ScrollableWindow::resize and ScrollerWindow::resize - // TODO: This reads the nsLeft, nsTop, nsRight, nsBottom - // selectors from the SCI object passed in argv[2]. - kStub(s, argc, argv); - break; - case 10: // Where, called by ScrollableWindow::where - // TODO: - // Gives the current relative scroll location as a fraction - // with argv[2] as the denominator. (Return value is the numerator.) - // Silenced the warnings because of the high amount of console spam - //kStub(s, argc, argv); - break; - case 11: // Go, called by ScrollableWindow::scrollTo - // TODO: - // Two arguments provide a fraction: argv[2] is num., argv[3] is denom. - // Scrolls to the relative location given by the fraction. - kStub(s, argc, argv); - break; - case 12: // Insert, called by ScrollableWindow::insertString - // 5 extra parameters here: - // handle of insert location (new string takes that position). - // text, font, color, alignment - // TODO - kStub(s, argc, argv); - break; - // case 13 (Delete) is handled below - // case 14 (Modify) is handled above - case 15: // Hide, called by ScrollableWindow::hide - g_sci->_gfxFrameout->toggleScrollText(false); - break; - case 16: // Show, called by ScrollableWindow::show - g_sci->_gfxFrameout->toggleScrollText(true); - break; - case 17: // Destroy, called by ScrollableWindow::dispose - g_sci->_gfxFrameout->clearScrollTexts(); - break; - case 13: // Delete, unused - case 18: // Text, unused - case 19: // Reconstruct, unused - error("kScrollWindow: Unused subop %d invoked", op); - break; - default: - error("kScrollWindow: unknown subop %d", op); - break; - } +reg_t kScrollWindowPageDown(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->pageDown(); + + return s->r_acc; +} + +reg_t kScrollWindowUpArrow(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->upArrow(); + + return s->r_acc; +} + +reg_t kScrollWindowDownArrow(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->downArrow(); + + return s->r_acc; +} + +reg_t kScrollWindowHome(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->home(); + + return s->r_acc; +} + +reg_t kScrollWindowEnd(EngineState *s, int argc, reg_t *argv) { + ScrollWindow *scrollWindow = g_sci->_gfxControls32->getScrollWindow(argv[0]); + + scrollWindow->end(); + + return s->r_acc; +} + +reg_t kScrollWindowDestroy(EngineState *s, int argc, reg_t *argv) { + g_sci->_gfxControls32->destroyScrollWindow(argv[0]); return s->r_acc; } -#endif reg_t kFont(EngineState *s, int argc, reg_t *argv) { if (!s) @@ -548,46 +550,31 @@ reg_t kBitmapDrawLine(EngineState *s, int argc, reg_t *argv) { } reg_t kBitmapDrawView(EngineState *s, int argc, reg_t *argv) { - // viewId, loopNo, celNo, displace x, displace y, unused, view x, view y + BitmapResource bitmap(argv[0]); + CelObjView view(argv[1].toUint16(), argv[2].toSint16(), argv[3].toSint16()); - // called e.g. from TiledBitmap::resize() in Torin's Passage, script 64869 - // The tiled view seems to always have 2 loops. - // These loops need to have 1 cel in loop 0 and 8 cels in loop 1. + const int16 x = argc > 4 ? argv[4].toSint16() : 0; + const int16 y = argc > 5 ? argv[5].toSint16() : 0; + const int16 alignX = argc > 7 ? argv[7].toSint16() : -1; + const int16 alignY = argc > 8 ? argv[8].toSint16() : -1; - return kStubNull(s, argc + 1, argv - 1); + Common::Point position( + x == -1 ? bitmap.getDisplace().x : x, + y == -1 ? bitmap.getDisplace().y : y + ); -#if 0 - // tiled surface - // 6 params, called e.g. from TiledBitmap::resize() in Torin's Passage, - // script 64869 - reg_t hunkId = argv[1]; // obtained from kBitmap(0) - // The tiled view seems to always have 2 loops. - // These loops need to have 1 cel in loop 0 and 8 cels in loop 1. - uint16 viewNum = argv[2].toUint16(); // vTiles selector - uint16 loop = argv[3].toUint16(); - uint16 cel = argv[4].toUint16(); - uint16 x = argv[5].toUint16(); - uint16 y = argv[6].toUint16(); - - byte *memoryPtr = s->_segMan->getHunkPointer(hunkId); - // Get totalWidth, totalHeight - uint16 totalWidth = READ_LE_UINT16(memoryPtr); - uint16 totalHeight = READ_LE_UINT16(memoryPtr + 2); - byte *bitmap = memoryPtr + BITMAP_HEADER_SIZE; - - GfxView *view = g_sci->_gfxCache->getView(viewNum); - uint16 tileWidth = view->getWidth(loop, cel); - uint16 tileHeight = view->getHeight(loop, cel); - const byte *tileBitmap = view->getBitmap(loop, cel); - uint16 width = MIN<uint16>(totalWidth - x, tileWidth); - uint16 height = MIN<uint16>(totalHeight - y, tileHeight); - - for (uint16 curY = 0; curY < height; curY++) { - for (uint16 curX = 0; curX < width; curX++) { - bitmap[(curY + y) * totalWidth + (curX + x)] = tileBitmap[curY * tileWidth + curX]; - } - } -#endif + position.x -= alignX == -1 ? view._displace.x : alignX; + position.y -= alignY == -1 ? view._displace.y : alignY; + + Common::Rect drawRect( + position.x, + position.y, + position.x + view._width, + position.y + view._height + ); + drawRect.clip(Common::Rect(bitmap.getWidth(), bitmap.getHeight())); + view.draw(bitmap.getBuffer(), drawRect, position, view._mirrorX); + return s->r_acc; } reg_t kBitmapDrawText(EngineState *s, int argc, reg_t *argv) { @@ -618,9 +605,8 @@ reg_t kBitmapDrawText(EngineState *s, int argc, reg_t *argv) { textRect.clip(Common::Rect(bitmap.getWidth(), bitmap.getHeight())); reg_t textBitmapObject = g_sci->_gfxText32->createFontBitmap(textRect.width(), textRect.height(), Common::Rect(textRect.width(), textRect.height()), text, foreColor, backColor, skipColor, fontId, alignment, borderColor, dimmed, false); - Buffer bitmapBuffer(bitmap.getWidth(), bitmap.getHeight(), bitmap.getPixels()); CelObjMem textCel(textBitmapObject); - textCel.draw(bitmapBuffer, textRect, Common::Point(textRect.left, textRect.top), false); + textCel.draw(bitmap.getBuffer(), textRect, Common::Point(textRect.left, textRect.top), false); s->_segMan->freeHunkEntry(textBitmapObject); return s->r_acc; @@ -637,8 +623,7 @@ reg_t kBitmapDrawColor(EngineState *s, int argc, reg_t *argv) { argv[4].toSint16() + 1 ); - Buffer buffer(bitmap.getWidth(), bitmap.getHeight(), bitmap.getPixels()); - buffer.fillRect(fillRect, argv[5].toSint16()); + bitmap.getBuffer().fillRect(fillRect, argv[5].toSint16()); return s->r_acc; } @@ -702,46 +687,77 @@ reg_t kEditText(EngineState *s, int argc, reg_t *argv) { } reg_t kAddLine(EngineState *s, int argc, reg_t *argv) { - return kStubNull(s, argc, argv); // return 0:0 for now, so that follow up calls won't create signature mismatches -#if 0 - reg_t plane = argv[0]; - Common::Point startPoint(argv[1].toUint16(), argv[2].toUint16()); - Common::Point endPoint(argv[3].toUint16(), argv[4].toUint16()); - byte priority = (byte)argv[5].toUint16(); - byte color = (byte)argv[6].toUint16(); - byte style = (byte)argv[7].toUint16(); // 0: solid, 1: dashed, 2: pattern - byte pattern = (byte)argv[8].toUint16(); - byte thickness = (byte)argv[9].toUint16(); -// return g_sci->_gfxFrameout->addPlaneLine(plane, startPoint, endPoint, color, priority, 0); - return s->r_acc; -#endif + const reg_t plane = argv[0]; + const Common::Point startPoint(argv[1].toSint16(), argv[2].toSint16()); + const Common::Point endPoint(argv[3].toSint16(), argv[4].toSint16()); + + int16 priority; + uint8 color; + LineStyle style; + uint16 pattern; + uint8 thickness; + + if (argc == 10) { + priority = argv[5].toSint16(); + color = (uint8)argv[6].toUint16(); + style = (LineStyle)argv[7].toSint16(); + pattern = argv[8].toUint16(); + thickness = (uint8)argv[9].toUint16(); + } else { + priority = 1000; + color = 255; + style = kLineStyleSolid; + pattern = 0; + thickness = 1; + } + + return g_sci->_gfxPaint32->kernelAddLine(plane, startPoint, endPoint, priority, color, style, pattern, thickness); } reg_t kUpdateLine(EngineState *s, int argc, reg_t *argv) { - return kStub(s, argc, argv); + const reg_t screenItemObject = argv[0]; + const reg_t planeObject = argv[1]; + const Common::Point startPoint(argv[2].toSint16(), argv[3].toSint16()); + const Common::Point endPoint(argv[4].toSint16(), argv[5].toSint16()); + + int16 priority; + uint8 color; + LineStyle style; + uint16 pattern; + uint8 thickness; + + Plane *plane = g_sci->_gfxFrameout->getPlanes().findByObject(planeObject); + if (plane == nullptr) { + error("kUpdateLine: Plane %04x:%04x not found", PRINT_REG(planeObject)); + } + + ScreenItem *screenItem = plane->_screenItemList.findByObject(screenItemObject); + if (screenItem == nullptr) { + error("kUpdateLine: Screen item %04x:%04x not found", PRINT_REG(screenItemObject)); + } + + if (argc == 11) { + priority = argv[6].toSint16(); + color = (uint8)argv[7].toUint16(); + style = (LineStyle)argv[8].toSint16(); + pattern = argv[9].toUint16(); + thickness = (uint8)argv[10].toUint16(); + } else { + priority = screenItem->_priority; + color = screenItem->_celInfo.color; + style = kLineStyleSolid; + pattern = 0; + thickness = 1; + } + + g_sci->_gfxPaint32->kernelUpdateLine(screenItem, plane, startPoint, endPoint, priority, color, style, pattern, thickness); -#if 0 - reg_t hunkId = argv[0]; - reg_t plane = argv[1]; - Common::Point startPoint(argv[2].toUint16(), argv[3].toUint16()); - Common::Point endPoint(argv[4].toUint16(), argv[5].toUint16()); - // argv[6] is unknown (a number, usually 200) - byte color = (byte)argv[7].toUint16(); - byte priority = (byte)argv[8].toUint16(); - byte control = (byte)argv[9].toUint16(); - // argv[10] is unknown (usually a small number, 1 or 2). Thickness, perhaps? -// g_sci->_gfxFrameout->updatePlaneLine(plane, hunkId, startPoint, endPoint, color, priority, control); return s->r_acc; -#endif } + reg_t kDeleteLine(EngineState *s, int argc, reg_t *argv) { - return kStub(s, argc, argv); -#if 0 - reg_t hunkId = argv[0]; - reg_t plane = argv[1]; -// g_sci->_gfxFrameout->deletePlaneLine(plane, hunkId); + g_sci->_gfxPaint32->kernelDeleteLine(argv[0], argv[1]); return s->r_acc; -#endif } reg_t kSetScroll(EngineState *s, int argc, reg_t *argv) { @@ -910,57 +926,69 @@ reg_t kPalCycle(EngineState *s, int argc, reg_t *argv) { return s->r_acc; } -reg_t kRemapColors(EngineState *s, int argc, reg_t *argv) { +reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv) { if (!s) return make_reg(0, getSciVersion()); error("not supposed to call this"); } -reg_t kRemapOff(EngineState *s, int argc, reg_t *argv) { - byte color = (argc >= 1) ? argv[0].toUint16() : 0; - g_sci->_gfxRemap32->remapOff(color); +reg_t kRemapColorsOff(EngineState *s, int argc, reg_t *argv) { + if (argc == 0) { + g_sci->_gfxRemap32->remapAllOff(); + } else { + const uint8 color = argv[0].toUint16(); + g_sci->_gfxRemap32->remapOff(color); + } return s->r_acc; } -reg_t kRemapByRange(EngineState *s, int argc, reg_t *argv) { - byte color = argv[0].toUint16(); - byte from = argv[1].toUint16(); - byte to = argv[2].toUint16(); - byte base = argv[3].toUint16(); - // The last parameter, depth, is unused - g_sci->_gfxRemap32->setRemappingRange(color, from, to, base); +reg_t kRemapColorsByRange(EngineState *s, int argc, reg_t *argv) { + const uint8 color = argv[0].toUint16(); + const int16 from = argv[1].toSint16(); + const int16 to = argv[2].toSint16(); + const int16 base = argv[3].toSint16(); + // NOTE: There is an optional last parameter after `base` + // which was only used by the priority map debugger, which + // does not exist in release versions of SSCI + g_sci->_gfxRemap32->remapByRange(color, from, to, base); return s->r_acc; } -reg_t kRemapByPercent(EngineState *s, int argc, reg_t *argv) { - byte color = argv[0].toUint16(); - byte percent = argv[1].toUint16(); - // The last parameter, depth, is unused - g_sci->_gfxRemap32->setRemappingPercent(color, percent); +reg_t kRemapColorsByPercent(EngineState *s, int argc, reg_t *argv) { + const uint8 color = argv[0].toUint16(); + const int16 percent = argv[1].toSint16(); + // NOTE: There is an optional last parameter after `percent` + // which was only used by the priority map debugger, which + // does not exist in release versions of SSCI + g_sci->_gfxRemap32->remapByPercent(color, percent); return s->r_acc; } -reg_t kRemapToGray(EngineState *s, int argc, reg_t *argv) { - byte color = argv[0].toUint16(); - byte gray = argv[1].toUint16(); - // The last parameter, depth, is unused - g_sci->_gfxRemap32->setRemappingToGray(color, gray); +reg_t kRemapColorsToGray(EngineState *s, int argc, reg_t *argv) { + const uint8 color = argv[0].toUint16(); + const int16 gray = argv[1].toSint16(); + // NOTE: There is an optional last parameter after `gray` + // which was only used by the priority map debugger, which + // does not exist in release versions of SSCI + g_sci->_gfxRemap32->remapToGray(color, gray); return s->r_acc; } -reg_t kRemapToPercentGray(EngineState *s, int argc, reg_t *argv) { - byte color = argv[0].toUint16(); - byte gray = argv[1].toUint16(); - byte percent = argv[2].toUint16(); - // The last parameter, depth, is unused - g_sci->_gfxRemap32->setRemappingToPercentGray(color, gray, percent); +reg_t kRemapColorsToPercentGray(EngineState *s, int argc, reg_t *argv) { + const uint8 color = argv[0].toUint16(); + const int16 gray = argv[1].toSint16(); + const int16 percent = argv[2].toSint16(); + // NOTE: There is an optional last parameter after `percent` + // which was only used by the priority map debugger, which + // does not exist in release versions of SSCI + g_sci->_gfxRemap32->remapToPercentGray(color, gray, percent); return s->r_acc; } -reg_t kRemapSetNoMatchRange(EngineState *s, int argc, reg_t *argv) { - byte from = argv[0].toUint16(); - byte count = argv[1].toUint16(); - g_sci->_gfxRemap32->setNoMatchRange(from, count); +reg_t kRemapColorsBlockRange(EngineState *s, int argc, reg_t *argv) { + const uint8 from = argv[0].toUint16(); + const uint8 count = argv[1].toUint16(); + g_sci->_gfxRemap32->blockRange(from, count); return s->r_acc; } diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index f4bb4ff85b..0a5f26476f 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -243,10 +243,18 @@ reg_t kGetTime(EngineState *s, int argc, reg_t *argv) { debugC(kDebugLevelTime, "GetTime(24h) returns %d", retval); break; case KGETTIME_DATE : - // Year since 1980 (0 = 1980, 1 = 1981, etc.) - retval = loc_time.tm_mday | ((loc_time.tm_mon + 1) << 5) | (((loc_time.tm_year - 80) & 0x7f) << 9); + { + // SCI0 late: Year since 1920 (0 = 1920, 1 = 1921, etc) + // SCI01 and newer: Year since 1980 (0 = 1980, 1 = 1981, etc) + // Atari ST SCI0 late versions use the newer base year. + int baseYear = 80; + if (getSciVersion() == SCI_VERSION_0_LATE && g_sci->getPlatform() == Common::kPlatformDOS) { + baseYear = 20; + } + retval = loc_time.tm_mday | ((loc_time.tm_mon + 1) << 5) | (((loc_time.tm_year - baseYear) & 0x7f) << 9); debugC(kDebugLevelTime, "GetTime(date) returns %d", retval); break; + } default: error("Attempt to use unknown GetTime mode %d", mode); break; diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index 7ac744f584..06f16299aa 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -326,7 +326,7 @@ static void draw_line(EngineState *s, Common::Point p1, Common::Point p2, int ty p2.y = CLIP<int16>(p2.y, 0, height - 1); assert(type >= 0 && type <= 3); - g_sci->_gfxPaint->kernelGraphDrawLine(p1, p2, poly_colors[type], 255, 255); + g_sci->_gfxPaint16->kernelGraphDrawLine(p1, p2, poly_colors[type], 255, 255); } static void draw_point(EngineState *s, Common::Point p, int start, int width, int height) { diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp index 398a623286..ed53b8d52f 100644 --- a/engines/sci/engine/ksound.cpp +++ b/engines/sci/engine/ksound.cpp @@ -26,7 +26,11 @@ #include "sci/engine/kernel.h" #include "sci/engine/vm.h" // for Object #include "sci/sound/audio.h" +#ifdef ENABLE_SCI32 +#include "sci/sound/audio32.h" +#endif #include "sci/sound/soundcmd.h" +#include "sci/sound/sync.h" #include "audio/mixer.h" #include "common/system.h" @@ -46,7 +50,6 @@ reg_t kDoSound(EngineState *s, int argc, reg_t *argv) { CREATE_DOSOUND_FORWARD(DoSoundInit) CREATE_DOSOUND_FORWARD(DoSoundPlay) -CREATE_DOSOUND_FORWARD(DoSoundRestore) CREATE_DOSOUND_FORWARD(DoSoundDispose) CREATE_DOSOUND_FORWARD(DoSoundMute) CREATE_DOSOUND_FORWARD(DoSoundStop) @@ -61,13 +64,41 @@ CREATE_DOSOUND_FORWARD(DoSoundUpdateCues) CREATE_DOSOUND_FORWARD(DoSoundSendMidi) CREATE_DOSOUND_FORWARD(DoSoundGlobalReverb) CREATE_DOSOUND_FORWARD(DoSoundSetHold) -CREATE_DOSOUND_FORWARD(DoSoundDummy) CREATE_DOSOUND_FORWARD(DoSoundGetAudioCapability) CREATE_DOSOUND_FORWARD(DoSoundSuspend) CREATE_DOSOUND_FORWARD(DoSoundSetVolume) CREATE_DOSOUND_FORWARD(DoSoundSetPriority) CREATE_DOSOUND_FORWARD(DoSoundSetLoop) +#ifdef ENABLE_SCI32 +reg_t kDoSoundPhantasmagoriaMac(EngineState *s, int argc, reg_t *argv) { + // Phantasmagoria Mac (and seemingly no other game (!)) uses this + // cutdown version of kDoSound. + + switch (argv[0].toUint16()) { + case 0: + return g_sci->_soundCmd->kDoSoundMasterVolume(argc - 1, argv + 1, s->r_acc); + case 2: + return g_sci->_soundCmd->kDoSoundInit(argc - 1, argv + 1, s->r_acc); + case 3: + return g_sci->_soundCmd->kDoSoundDispose(argc - 1, argv + 1, s->r_acc); + case 4: + return g_sci->_soundCmd->kDoSoundPlay(argc - 1, argv + 1, s->r_acc); + case 5: + return g_sci->_soundCmd->kDoSoundStop(argc - 1, argv + 1, s->r_acc); + case 8: + return g_sci->_soundCmd->kDoSoundSetVolume(argc - 1, argv + 1, s->r_acc); + case 9: + return g_sci->_soundCmd->kDoSoundSetLoop(argc - 1, argv + 1, s->r_acc); + case 10: + return g_sci->_soundCmd->kDoSoundUpdateCues(argc - 1, argv + 1, s->r_acc); + } + + error("Unknown kDoSound Phantasmagoria Mac subop %d", argv[0].toUint16()); + return s->r_acc; +} +#endif + reg_t kDoCdAudio(EngineState *s, int argc, reg_t *argv) { switch (argv[0].toUint16()) { case kSciAudioPlay: { @@ -113,7 +144,8 @@ reg_t kDoCdAudio(EngineState *s, int argc, reg_t *argv) { } /** - * Used for speech playback and digital soundtracks in CD games + * Used for speech playback and digital soundtracks in CD games. + * This is the SCI16 version; SCI32 is handled separately. */ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) { // JonesCD uses different functions based on the cdaudio.map file @@ -184,14 +216,6 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) { int16 volume = argv[1].toUint16(); volume = CLIP<int16>(volume, 0, AUDIO_VOLUME_MAX); debugC(kDebugLevelSound, "kDoAudio: set volume to %d", volume); -#ifdef ENABLE_SCI32 - if (getSciVersion() >= SCI_VERSION_2_1_EARLY) { - int16 volumePrev = mixer->getVolumeForSoundType(Audio::Mixer::kSpeechSoundType) / 2; - volumePrev = CLIP<int16>(volumePrev, 0, AUDIO_VOLUME_MAX); - mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, volume * 2); - return make_reg(0, volumePrev); - } else -#endif mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, volume * 2); break; } @@ -232,12 +256,6 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) { if (getSciVersion() <= SCI_VERSION_1_1) { debugC(kDebugLevelSound, "kDoAudio: CD audio subop"); return kDoCdAudio(s, argc - 1, argv + 1); -#ifdef ENABLE_SCI32 - } else { - // TODO: This isn't CD Audio in SCI32 anymore - warning("kDoAudio: Unhandled case 10, %d extra arguments passed", argc - 1); - break; -#endif } // 3 new subops in Pharkas CD (including CD demo). kDoAudio in Pharkas sits at seg026:038C @@ -286,14 +304,12 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) { } reg_t kDoSync(EngineState *s, int argc, reg_t *argv) { - SegManager *segMan = s->_segMan; switch (argv[0].toUint16()) { case kSciAudioSyncStart: { ResourceId id; - g_sci->_audio->stopSoundSync(); + g_sci->_sync->stop(); - // Load sound sync resource and lock it if (argc == 3) { id = ResourceId(kResourceTypeSync, argv[2].toUint16()); } else if (argc == 7) { @@ -304,14 +320,14 @@ reg_t kDoSync(EngineState *s, int argc, reg_t *argv) { return s->r_acc; } - g_sci->_audio->setSoundSync(id, argv[1], segMan); + g_sci->_sync->start(id, argv[1]); break; } case kSciAudioSyncNext: - g_sci->_audio->doSoundSync(argv[1], segMan); + g_sci->_sync->next(argv[1]); break; case kSciAudioSyncStop: - g_sci->_audio->stopSoundSync(); + g_sci->_sync->stop(); break; default: error("DoSync: Unhandled subfunction %d", argv[0].toUint16()); @@ -321,6 +337,155 @@ reg_t kDoSync(EngineState *s, int argc, reg_t *argv) { } #ifdef ENABLE_SCI32 +reg_t kDoAudio32(EngineState *s, int argc, reg_t *argv) { + if (!s) + return make_reg(0, getSciVersion()); + error("not supposed to call this"); +} + +reg_t kDoAudioInit(EngineState *s, int argc, reg_t *argv) { + return make_reg(0, 0); +} + +reg_t kDoAudioWaitForPlay(EngineState *s, int argc, reg_t *argv) { + return g_sci->_audio32->kernelPlay(false, argc, argv); +} + +reg_t kDoAudioPlay(EngineState *s, int argc, reg_t *argv) { + return g_sci->_audio32->kernelPlay(true, argc, argv); +} + +reg_t kDoAudioStop(EngineState *s, int argc, reg_t *argv) { + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 0, argc > 1 ? argv[1] : NULL_REG); + return make_reg(0, g_sci->_audio32->stop(channelIndex)); +} + +reg_t kDoAudioPause(EngineState *s, int argc, reg_t *argv) { + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 0, argc > 1 ? argv[1] : NULL_REG); + return make_reg(0, g_sci->_audio32->pause(channelIndex)); +} + +reg_t kDoAudioResume(EngineState *s, int argc, reg_t *argv) { + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 0, argc > 1 ? argv[1] : NULL_REG); + return make_reg(0, g_sci->_audio32->resume(channelIndex)); +} + +reg_t kDoAudioPosition(EngineState *s, int argc, reg_t *argv) { + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 0, argc > 1 ? argv[1] : NULL_REG); + return make_reg(0, g_sci->_audio32->getPosition(channelIndex)); +} + +reg_t kDoAudioRate(EngineState *s, int argc, reg_t *argv) { + // NOTE: In the original engine this would set the hardware + // DSP sampling rate; ScummVM mixer does not need this, so + // we only store the value to satisfy engine compatibility. + + if (argc > 0) { + const uint16 sampleRate = argv[0].toUint16(); + if (sampleRate != 0) { + g_sci->_audio32->setSampleRate(sampleRate); + } + } + + return make_reg(0, g_sci->_audio32->getSampleRate()); +} + +reg_t kDoAudioVolume(EngineState *s, int argc, reg_t *argv) { + const int16 volume = argc > 0 ? argv[0].toSint16() : -1; + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 1, argc > 2 ? argv[2] : NULL_REG); + + if (volume != -1) { + g_sci->_audio32->setVolume(channelIndex, volume); + } + + return make_reg(0, g_sci->_audio32->getVolume(channelIndex)); +} + +reg_t kDoAudioGetCapability(EngineState *s, int argc, reg_t *argv) { + return make_reg(0, 1); +} + +reg_t kDoAudioBitDepth(EngineState *s, int argc, reg_t *argv) { + // NOTE: In the original engine this would set the hardware + // DSP bit depth; ScummVM mixer does not need this, so + // we only store the value to satisfy engine compatibility. + + if (argc > 0) { + const uint16 bitDepth = argv[0].toUint16(); + if (bitDepth != 0) { + g_sci->_audio32->setBitDepth(bitDepth); + } + } + + return make_reg(0, g_sci->_audio32->getBitDepth()); +} + +reg_t kDoAudioMixing(EngineState *s, int argc, reg_t *argv) { + if (argc > 0) { + g_sci->_audio32->setAttenuatedMixing(argv[0].toUint16()); + } + + return make_reg(0, g_sci->_audio32->getAttenuatedMixing()); +} + +reg_t kDoAudioChannels(EngineState *s, int argc, reg_t *argv) { + // NOTE: In the original engine this would set the hardware + // DSP stereo output; ScummVM mixer does not need this, so + // we only store the value to satisfy engine compatibility. + + if (argc > 0) { + const int16 numChannels = argv[0].toSint16(); + if (numChannels != 0) { + g_sci->_audio32->setNumOutputChannels(numChannels); + } + } + + return make_reg(0, g_sci->_audio32->getNumOutputChannels()); +} + +reg_t kDoAudioPreload(EngineState *s, int argc, reg_t *argv) { + // NOTE: In the original engine this would cause audio + // data for new channels to be preloaded to memory when + // the channel was initialized; we do not need this, so + // we only store the value to satisfy engine compatibility. + + if (argc > 0) { + g_sci->_audio32->setPreload(argv[0].toUint16()); + } + + return make_reg(0, g_sci->_audio32->getPreload()); +} + +reg_t kDoAudioFade(EngineState *s, int argc, reg_t *argv) { + if (argc < 4) { + return make_reg(0, 0); + } + + // NOTE: Sierra did a nightmarish hack here, temporarily replacing + // the argc of the kernel arguments with 2 and then restoring it + // after findChannelByArgs was called. + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(2, argv, 0, argc > 5 ? argv[5] : NULL_REG); + + const int16 volume = argv[1].toSint16(); + const int16 speed = argv[2].toSint16(); + const int16 steps = argv[3].toSint16(); + const bool stopAfterFade = argc > 4 ? (bool)argv[4].toUint16() : false; + + return make_reg(0, g_sci->_audio32->fadeChannel(channelIndex, volume, speed, steps, stopAfterFade)); +} + +reg_t kDoAudioHasSignal(EngineState *s, int argc, reg_t *argv) { + return make_reg(0, g_sci->_audio32->hasSignal()); +} + +reg_t kDoAudioSetLoop(EngineState *s, int argc, reg_t *argv) { + const int16 channelIndex = g_sci->_audio32->findChannelByArgs(argc, argv, 0, argc == 3 ? argv[2] : NULL_REG); + + const bool loop = argv[0].toSint16() != 0 && argv[0].toSint16() != 1; + + g_sci->_audio32->setLoop(channelIndex, loop); + return s->r_acc; +} reg_t kSetLanguage(EngineState *s, int argc, reg_t *argv) { // This is used by script 90 of MUMG Deluxe from the main menu to toggle @@ -335,33 +500,6 @@ reg_t kSetLanguage(EngineState *s, int argc, reg_t *argv) { return s->r_acc; } -reg_t kDoSoundPhantasmagoriaMac(EngineState *s, int argc, reg_t *argv) { - // Phantasmagoria Mac (and seemingly no other game (!)) uses this - // cutdown version of kDoSound. - - switch (argv[0].toUint16()) { - case 0: - return g_sci->_soundCmd->kDoSoundMasterVolume(argc - 1, argv + 1, s->r_acc); - case 2: - return g_sci->_soundCmd->kDoSoundInit(argc - 1, argv + 1, s->r_acc); - case 3: - return g_sci->_soundCmd->kDoSoundDispose(argc - 1, argv + 1, s->r_acc); - case 4: - return g_sci->_soundCmd->kDoSoundPlay(argc - 1, argv + 1, s->r_acc); - case 5: - return g_sci->_soundCmd->kDoSoundStop(argc - 1, argv + 1, s->r_acc); - case 8: - return g_sci->_soundCmd->kDoSoundSetVolume(argc - 1, argv + 1, s->r_acc); - case 9: - return g_sci->_soundCmd->kDoSoundSetLoop(argc - 1, argv + 1, s->r_acc); - case 10: - return g_sci->_soundCmd->kDoSoundUpdateCues(argc - 1, argv + 1, s->r_acc); - } - - error("Unknown kDoSound Phantasmagoria Mac subop %d", argv[0].toUint16()); - return s->r_acc; -} - #endif } // End of namespace Sci diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 0cc1e752e1..0972aec4a4 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -48,8 +48,9 @@ #include "sci/sound/music.h" #ifdef ENABLE_SCI32 -#include "sci/graphics/palette32.h" #include "sci/graphics/frameout.h" +#include "sci/graphics/palette32.h" +#include "sci/graphics/remap32.h" #endif namespace Sci { @@ -806,8 +807,33 @@ void GfxPalette32::saveLoadWithSerializer(Common::Serializer &s) { s.syncAsUint16LE(cycler->numTimesPaused); } } +} + +void GfxRemap32::saveLoadWithSerializer(Common::Serializer &s) { + if (s.getVersion() < 35) { + return; + } + + s.syncAsByte(_numActiveRemaps); + s.syncAsByte(_blockedRangeStart); + s.syncAsSint16LE(_blockedRangeCount); + + for (uint i = 0; i < _remaps.size(); ++i) { + SingleRemap &singleRemap = _remaps[i]; + s.syncAsByte(singleRemap._type); + if (s.isLoading() && singleRemap._type != kRemapNone) { + singleRemap.reset(); + } + s.syncAsByte(singleRemap._from); + s.syncAsByte(singleRemap._to); + s.syncAsByte(singleRemap._delta); + s.syncAsByte(singleRemap._percent); + s.syncAsByte(singleRemap._gray); + } - // TODO: _clutTable + if (s.isLoading()) { + _needsUpdate = true; + } } #endif diff --git a/engines/sci/engine/savegame.h b/engines/sci/engine/savegame.h index 459e992e24..43909accf2 100644 --- a/engines/sci/engine/savegame.h +++ b/engines/sci/engine/savegame.h @@ -37,6 +37,7 @@ struct EngineState; * * Version - new/changed feature * ============================= + * 35 - SCI32 remap * 34 - SCI32 palettes, and store play time in ticks * 33 - new overridePriority flag in MusicEntry * 32 - new playBed flag in MusicEntry @@ -59,7 +60,7 @@ struct EngineState; */ enum { - CURRENT_SAVEGAME_VERSION = 34, + CURRENT_SAVEGAME_VERSION = 35, MINIMUM_SAVEGAME_VERSION = 14 }; diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index 66c4184c95..1302cc94ea 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -379,12 +379,40 @@ static const SciScriptPatcherEntry ecoquest2Signatures[] = { }; // =========================================================================== +// Fan-made games +// Attention: Try to make script patches as specific as possible + +// CascadeQuest::autosave in script 994 is called various times to auto-save the game. +// The script use a fixed slot "999" for this purpose. This doesn't work in ScummVM, because we do not let +// scripts save directly into specific slots, but instead use virtual slots / detect scripts wanting to +// create a new slot. +// +// For this game we patch the code to use slot 99 instead. kSaveGame also checks for Cascade Quest, +// will then check, if slot 99 is asked for and will then use the actual slot 0, which is the official +// ScummVM auto-save slot. +// +// Responsible method: CascadeQuest::autosave +// Fixes bug: #7007 +static const uint16 fanmadeSignatureCascadeQuestFixAutoSaving[] = { + SIG_MAGICDWORD, + 0x38, SIG_UINT16(0x03e7), // pushi 3E7 (999d) -> save game slot 999 + 0x74, SIG_UINT16(0x06f8), // lofss "AutoSave" + 0x89, 0x1e, // lsg global[1E] + 0x43, 0x2d, 0x08, // callk SaveGame + SIG_END +}; + +static const uint16 fanmadePatchCascadeQuestFixAutoSaving[] = { + 0x38, PATCH_UINT16((SAVEGAMEID_OFFICIALRANGE_START - 1)), // fix slot + PATCH_END +}; + // EventHandler::handleEvent in Demo Quest has a bug, and it jumps to the // wrong address when an incorrect word is typed, therefore leading to an // infinite loop. This script bug was not apparent in SSCI, probably because // event handling was slightly different there, so it was never discovered. // Fixes bug: #5120 -static const uint16 fanmadeSignatureInfiniteLoop[] = { +static const uint16 fanmadeSignatureDemoQuestInfiniteLoop[] = { 0x38, SIG_UINT16(0x004c), // pushi 004c 0x39, 0x00, // pushi 00 0x87, 0x01, // lap 01 @@ -395,15 +423,16 @@ static const uint16 fanmadeSignatureInfiniteLoop[] = { SIG_END }; -static const uint16 fanmadePatchInfiniteLoop[] = { +static const uint16 fanmadePatchDemoQuestInfiniteLoop[] = { PATCH_ADDTOOFFSET(+10), - 0x30, SIG_UINT16(0x0032), // bnt 0032 [06a8] --> pushi 004c + 0x30, PATCH_UINT16(0x0032), // bnt 0032 [06a8] --> pushi 004c PATCH_END }; -// script, description, signature patch +// script, description, signature patch static const SciScriptPatcherEntry fanmadeSignatures[] = { - { true, 999, "infinite loop on typo", 1, fanmadeSignatureInfiniteLoop, fanmadePatchInfiniteLoop }, + { true, 994, "Cascade Quest: fix auto-saving", 1, fanmadeSignatureCascadeQuestFixAutoSaving, fanmadePatchCascadeQuestFixAutoSaving }, + { true, 999, "Demo Quest: infinite loop on typo", 1, fanmadeSignatureDemoQuestInfiniteLoop, fanmadePatchDemoQuestInfiniteLoop }, SCI_SIGNATUREENTRY_TERMINATOR }; @@ -1654,9 +1683,160 @@ static const uint16 laurabow1PatchEasterEggViewFix[] = { PATCH_END }; +// When oiling the armor or opening the visor of the armor, the scripts +// first check if Laura/ego is near the armor and if she is not, they will move her +// to the armor. After that further code is executed. +// +// The current location is checked by a ego::inRect() call. +// +// The given rect for the inRect call inside openVisor::changeState was made larger for Atari ST/Amiga versions. +// We change the PC version to use the same rect. +// +// Additionally the coordinate, that Laura is moved to, is 152, 107 and may not be reachable depending on where +// Laura/ego was, when "use oil on helmet of armor" / "open visor of armor" got entered. +// Bad coordinates are for example 82, 110, which then cause collisions and effectively an endless loop. +// Game will effectively "freeze" and the user is only able to restore a previous game. +// This also happened, when using the original interpreter. +// We change the destination coordinate to 152, 110, which seems to be reachable all the time. +// +// The following patch fixes the rect for the PC version of the game. +// +// Applies to at least: English PC Floppy +// Responsible method: openVisor::changeState (script 37) +// Fixes bug: #7119 +static const uint16 laurabow1SignatureArmorOpenVisorFix[] = { + 0x39, 0x04, // pushi 04 + SIG_MAGICDWORD, + 0x39, 0x6a, // pushi 6a (106d) + 0x38, SIG_UINT16(0x96), // pushi 0096 (150d) + 0x39, 0x6c, // pushi 6c (108d) + 0x38, SIG_UINT16(0x98), // pushi 0098 (152d) + SIG_END +}; + +static const uint16 laurabow1PatchArmorOpenVisorFix[] = { + PATCH_ADDTOOFFSET(+2), + 0x39, 0x68, // pushi 68 (104d) (-2) + 0x38, SIG_UINT16(0x94), // pushi 0094 (148d) (-2) + 0x39, 0x6f, // pushi 6f (111d) (+3) + 0x38, SIG_UINT16(0x9a), // pushi 009a (154d) (+2) + PATCH_END +}; + +// This here fixes the destination coordinate (exact details are above). +// +// Applies to at least: English PC Floppy, English Atari ST Floppy, English Amiga Floppy +// Responsible method: openVisor::changeState, oiling::changeState (script 37) +// Fixes bug: #7119 +static const uint16 laurabow1SignatureArmorMoveToFix[] = { + SIG_MAGICDWORD, + 0x36, // push + 0x39, 0x6b, // pushi 6B (107d) + 0x38, SIG_UINT16(0x0098), // pushi 98 (152d) + 0x7c, // pushSelf + 0x81, 0x00, // lag global[0] + SIG_END +}; + +static const uint16 laurabow1PatchArmorMoveToFix[] = { + PATCH_ADDTOOFFSET(+1), + 0x39, 0x6e, // pushi 6E (110d) - adjust x, so that no collision can occur anymore + PATCH_END +}; + +// In some cases like for example when the player oils the arm of the armor, command input stays +// disabled, even when the player exits fast enough, so that Laura doesn't die. +// +// This is caused by the scripts only enabling control (directional movement), but do not enable command input as well. +// +// This bug also happens, when using the original interpreter. +// And it was fixed for the Atari ST + Amiga versions of the game. +// +// Applies to at least: English PC Floppy +// Responsible method: 2nd subroutine in script 37, called by oiling::changeState(7) +// Fixes bug: #7154 +static const uint16 laurabow1SignatureArmorOilingArmFix[] = { + 0x38, SIG_UINT16(0x0089), // pushi 89h + 0x76, // push0 + SIG_MAGICDWORD, + 0x72, SIG_UINT16(0x1a5c), // lofsa "Can" - offsets are not skipped to make sure only the PC version gets patched + 0x4a, 0x04, // send 04 + 0x38, SIG_UINT16(0x0089), // pushi 89h + 0x76, // push0 + 0x72, SIG_UINT16(0x19a1), // lofsa "Visor" + 0x4a, 0x04, // send 04 + 0x38, SIG_UINT16(0x0089), // pushi 89h + 0x76, // push0 + 0x72, SIG_UINT16(0x194a), // lofsa "note" + 0x4a, 0x04, // send 04 + 0x38, SIG_UINT16(0x0089), // pushi 89h + 0x76, // push0 + 0x72, SIG_UINT16(0x18f3), // lofsa "valve" + 0x4a, 0x04, // send 04 + 0x8b, 0x34, // lsl local[34h] + 0x35, 0x02, // ldi 02 + 0x1c, // ne? + 0x30, SIG_UINT16(0x0014), // bnt [to ret] + 0x8b, 0x34, // lsl local[34h] + 0x35, 0x05, // ldi 05 + 0x1c, // ne? + 0x30, SIG_UINT16(0x000c), // bnt [to ret] + 0x8b, 0x34, // lsl local[34h] + 0x35, 0x06, // ldi 06 + 0x1c, // ne? + 0x30, SIG_UINT16(0x0004), // bnt [to ret] + // followed by code to call script 0 export to re-enable controls and call setMotion + SIG_END +}; + +static const uint16 laurabow1PatchArmorOilingArmFix[] = { + PATCH_ADDTOOFFSET(+3), // skip over pushi 89h + 0x3c, // dup + 0x3c, // dup + 0x3c, // dup + // saves a total of 6 bytes + 0x76, // push0 + 0x72, SIG_UINT16(0x1a59), // lofsa "Can" + 0x4a, 0x04, // send 04 + 0x76, // push0 + 0x72, SIG_UINT16(0x19a1), // lofsa "Visor" + 0x4a, 0x04, // send 04 + 0x76, // push0 + 0x72, SIG_UINT16(0x194d), // lofsa "note" + 0x4a, 0x04, // send 04 + 0x76, // push0 + 0x72, SIG_UINT16(0x18f9), // lofsa "valve" 18f3 + 0x4a, 0x04, // send 04 + // new code to enable input as well, needs 9 spare bytes + 0x38, SIG_UINT16(0x00e2), // canInput + 0x78, // push1 + 0x78, // push1 + 0x51, 0x2b, // class User + 0x4a, 0x06, // send 06 -> call User::canInput(1) + // original code, but changed a bit to save some more bytes + 0x8b, 0x34, // lsl local[34h] + 0x35, 0x02, // ldi 02 + 0x04, // sub + 0x31, 0x12, // bnt [to ret] + 0x36, // push + 0x35, 0x03, // ldi 03 + 0x04, // sub + 0x31, 0x0c, // bnt [to ret] + 0x78, // push1 + 0x1a, // eq? + 0x2f, 0x08, // bt [to ret] + // saves 7 bytes, we only need 3, so waste 4 bytes + 0x35, 0x00, // ldi 0 + 0x35, 0x00, // ldi 0 + PATCH_END +}; + // script, description, signature patch static const SciScriptPatcherEntry laurabow1Signatures[] = { - { true, 4, "easter egg view fix", 1, laurabow1SignatureEasterEggViewFix, laurabow1PatchEasterEggViewFix }, + { true, 4, "easter egg view fix", 1, laurabow1SignatureEasterEggViewFix, laurabow1PatchEasterEggViewFix }, + { true, 37, "armor open visor fix", 1, laurabow1SignatureArmorOpenVisorFix, laurabow1PatchArmorOpenVisorFix }, + { true, 37, "armor move to fix", 2, laurabow1SignatureArmorMoveToFix, laurabow1PatchArmorMoveToFix }, + { true, 37, "allowing input, after oiling arm", 1, laurabow1SignatureArmorOilingArmFix, laurabow1PatchArmorOilingArmFix }, SCI_SIGNATUREENTRY_TERMINATOR }; @@ -2761,7 +2941,7 @@ static const uint16 qfg3PatchImportDialog[] = { // Teller::doChild. We jump to this call of hero::solvePuzzle to get that same // behaviour. // Applies to at least: English, German, Italian, French, Spanish Floppy -// Responsible method: unknown +// Responsible method: uhuraTell::doChild // Fixes bug: #5172 static const uint16 qfg3SignatureWooDialog[] = { SIG_MAGICDWORD, @@ -3597,24 +3777,35 @@ static const uint16 sq1vgaSignatureSpiderDroidTiming[] = { 0x30, SIG_UINT16(0x0005), // bnt [further method code] 0x35, 0x00, // ldi 00 0x32, SIG_UINT16(0x0052), // jmp [super-call] - 0x89, 0xa6, // lsg global[a6] + 0x89, 0xa6, // lsg global[a6] <-- flag gets set to 1 when ego went up the skeleton tail, when going down it's set to 2 0x35, 0x01, // ldi 01 0x1a, // eq? - 0x30, SIG_UINT16(0x0012), // bnt [2nd code], in case global A6 <> 1 + 0x30, SIG_UINT16(0x0012), // bnt [PChase set code], in case global A6 <> 1 0x81, 0xb5, // lag global[b5] - 0x30, SIG_UINT16(0x000d), // bnt [2nd code], in case global B5 == 0 + 0x30, SIG_UINT16(0x000d), // bnt [PChase set code], in case global B5 == 0 0x38, SIG_UINT16(0x008c), // pushi 008c 0x78, // push1 0x72, SIG_UINT16(0x1cb6), // lofsa 1CB6 (moveToPath) 0x36, // push 0x54, 0x06, // self 06 0x32, SIG_UINT16(0x0038), // jmp [super-call] + // PChase set call 0x81, 0xb5, // lag global[B5] 0x18, // not 0x30, SIG_UINT16(0x0032), // bnt [super-call], in case global B5 <> 0 + // followed by: + // is spider in current room + // is global A6h == 2? -> set PChase SIG_END }; // 58 bytes) +// Global A6h <> 1 (did NOT went up the skeleton) +// Global B5h = 0 -> set PChase +// Global B5h <> 0 -> do not do anything +// Global A6h = 1 (did went up the skeleton) +// Global B5h = 0 -> set PChase +// Global B5h <> 0 -> set moveToPath + static const uint16 sq1vgaPatchSpiderDroidTiming[] = { 0x63, 0x4e, // pToa script 0x2f, 0x68, // bt [super-call] @@ -3639,8 +3830,8 @@ static const uint16 sq1vgaPatchSpiderDroidTiming[] = { 0x65, 0x4c, // aTop cycleSpeed 0x65, 0x5e, // aTop moveSpeed // new code end - 0x89, 0xb5, // lsg global[B5] - 0x31, 0x13, // bnt [2nd code chunk] + 0x81, 0xb5, // lag global[B5] + 0x31, 0x13, // bnt [PChase code chunk] 0x89, 0xa6, // lsg global[A6] 0x35, 0x01, // ldi 01 0x1a, // eq? diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index 0cb8ff48d7..073bb93983 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -514,6 +514,14 @@ const SciWorkaroundEntry kDisposeScript_workarounds[] = { }; // gameID, room,script,lvl, object-name, method-name, local-call-signature, index, workaround +const SciWorkaroundEntry kDoSoundPlay_workarounds[] = { + { GID_LSL6HIRES, -1, 64989, 0, NULL, "play", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // always passes an extra null argument + { GID_QFG4, -1, 64989, 0, NULL, "play", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // always passes an extra null argument + { GID_PQ4, -1, 64989, 0, NULL, "play", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // always passes an extra null argument + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, local-call-signature, index, workaround const SciWorkaroundEntry kDoSoundFade_workarounds[] = { { GID_KQ5, 213, 989, 0, "globalSound3", "fade", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // english floppy: when bandits leave the secret temple, parameter 4 is an object - bug #5078 { GID_KQ6, 105, 989, 0, "globalSound", "fade", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // floppy: during intro, parameter 4 is an object @@ -745,6 +753,12 @@ const SciWorkaroundEntry kUnLoad_workarounds[] = { SCI_WORKAROUNDENTRY_TERMINATOR }; +// gameID, room,script,lvl, object-name, method-name, local-call-signature, index, workaround +const SciWorkaroundEntry kScrollWindowAdd_workarounds[] = { + { GID_PHANTASMAGORIA, 45, 64907, 0, "ScrollableWindow", "addString", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // ScrollWindow interface passes the last two parameters twice +}; + + SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroundEntry *workaroundList, SciTrackOriginReply *trackOrigin) { // HACK for SCI3: Temporarily ignore this if (getSciVersion() == SCI_VERSION_3) { diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h index 8f519a8c9c..248d37fc6c 100644 --- a/engines/sci/engine/workarounds.h +++ b/engines/sci/engine/workarounds.h @@ -74,6 +74,7 @@ extern const SciWorkaroundEntry kDeviceInfo_workarounds[]; extern const SciWorkaroundEntry kDisplay_workarounds[]; extern const SciWorkaroundEntry kDirLoop_workarounds[]; extern const SciWorkaroundEntry kDisposeScript_workarounds[]; +extern const SciWorkaroundEntry kDoSoundPlay_workarounds[]; extern const SciWorkaroundEntry kDoSoundFade_workarounds[]; extern const SciWorkaroundEntry kFindKey_workarounds[]; extern const SciWorkaroundEntry kDeleteKey_workarounds[]; @@ -98,6 +99,7 @@ extern const SciWorkaroundEntry kStrAt_workarounds[]; extern const SciWorkaroundEntry kStrCpy_workarounds[]; extern const SciWorkaroundEntry kStrLen_workarounds[]; extern const SciWorkaroundEntry kUnLoad_workarounds[]; +extern const SciWorkaroundEntry kScrollWindowAdd_workarounds[]; extern SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroundEntry *workaroundList, SciTrackOriginReply *trackOrigin); diff --git a/engines/sci/graphics/celobj32.cpp b/engines/sci/graphics/celobj32.cpp index 77d333a717..befa5cda18 100644 --- a/engines/sci/graphics/celobj32.cpp +++ b/engines/sci/graphics/celobj32.cpp @@ -26,13 +26,12 @@ #include "sci/graphics/celobj32.h" #include "sci/graphics/frameout.h" #include "sci/graphics/palette32.h" -#include "sci/graphics/picture.h" -#include "sci/graphics/remap.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/text32.h" -#include "sci/graphics/view.h" namespace Sci { #pragma mark CelScaler + CelScaler *CelObj::_scaler = nullptr; void CelScaler::activateScaleTables(const Ratio &scaleX, const Ratio &scaleY) { @@ -323,6 +322,10 @@ public: #pragma mark - #pragma mark CelObj - Remappers +/** + * Pixel mapper for a CelObj with transparent pixels and no + * remapping data. + */ struct MAPPER_NoMD { inline void draw(byte *target, const byte pixel, const uint8 skipColor) const { if (pixel != skipColor) { @@ -330,25 +333,49 @@ struct MAPPER_NoMD { } } }; + +/** + * Pixel mapper for a CelObj with no transparent pixels and + * no remapping data. + */ struct MAPPER_NoMDNoSkip { inline void draw(byte *target, const byte pixel, const uint8) const { *target = pixel; } }; +/** + * Pixel mapper for a CelObj with transparent pixels, + * remapping data, and remapping enabled. + */ struct MAPPER_Map { inline void draw(byte *target, const byte pixel, const uint8 skipColor) const { if (pixel != skipColor) { + // NOTE: For some reason, SSCI never checks if the source + // pixel is *above* the range of remaps. if (pixel < g_sci->_gfxRemap32->getStartColor()) { *target = pixel; - } else { - if (g_sci->_gfxRemap32->remapEnabled(pixel)) - *target = g_sci->_gfxRemap32->remapColor(pixel, *target); + } else if (g_sci->_gfxRemap32->remapEnabled(pixel)) { + *target = g_sci->_gfxRemap32->remapColor(pixel, *target); } } } }; +/** + * Pixel mapper for a CelObj with transparent pixels, + * remapping data, and remapping disabled. + */ +struct MAPPER_NoMap { + inline void draw(byte *target, const byte pixel, const uint8 skipColor) const { + // NOTE: For some reason, SSCI never checks if the source + // pixel is *above* the range of remaps. + if (pixel != skipColor && pixel < g_sci->_gfxRemap32->getStartColor()) { + *target = pixel; + } + } +}; + void CelObj::draw(Buffer &target, const ScreenItem &screenItem, const Common::Rect &targetRect) const { const Common::Point &scaledPosition = screenItem._scaledPosition; const Ratio &scaleX = screenItem._ratioX; @@ -523,6 +550,7 @@ void CelObj::submitPalette() const { #pragma mark - #pragma mark CelObj - Caching + int CelObj::_nextCacheId = 1; CelCache *CelObj::_cache = nullptr; @@ -624,33 +652,35 @@ void dummyFill(Buffer &target, const Common::Rect &targetRect) { } void CelObj::drawHzFlip(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("drawHzFlip"); - dummyFill(target, targetRect); + render<MAPPER_NoMap, SCALER_NoScale<true, READER_Compressed> >(target, targetRect, scaledPosition); } void CelObj::drawNoFlip(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("drawNoFlip"); - dummyFill(target, targetRect); + render<MAPPER_NoMap, SCALER_NoScale<false, READER_Compressed> >(target, targetRect, scaledPosition); } void CelObj::drawUncompNoFlip(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("drawUncompNoFlip"); - dummyFill(target, targetRect); + render<MAPPER_NoMap, SCALER_NoScale<false, READER_Uncompressed> >(target, targetRect, scaledPosition); } void CelObj::drawUncompHzFlip(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("drawUncompHzFlip"); - dummyFill(target, targetRect); + render<MAPPER_NoMap, SCALER_NoScale<true, READER_Uncompressed> >(target, targetRect, scaledPosition); } void CelObj::scaleDraw(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("scaleDraw"); - dummyFill(target, targetRect); + if (_drawMirrored) { + render<MAPPER_NoMap, SCALER_Scale<true, READER_Compressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } else { + render<MAPPER_NoMap, SCALER_Scale<false, READER_Compressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } } void CelObj::scaleDrawUncomp(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - debug("scaleDrawUncomp"); - dummyFill(target, targetRect); + if (_drawMirrored) { + render<MAPPER_NoMap, SCALER_Scale<true, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } else { + render<MAPPER_NoMap, SCALER_Scale<false, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } } void CelObj::drawHzFlipMap(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { @@ -670,17 +700,19 @@ void CelObj::drawUncompHzFlipMap(Buffer &target, const Common::Rect &targetRect, } void CelObj::scaleDrawMap(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - if (_drawMirrored) + if (_drawMirrored) { render<MAPPER_Map, SCALER_Scale<true, READER_Compressed> >(target, targetRect, scaledPosition, scaleX, scaleY); - else + } else { render<MAPPER_Map, SCALER_Scale<false, READER_Compressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } } void CelObj::scaleDrawUncompMap(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - if (_drawMirrored) + if (_drawMirrored) { render<MAPPER_Map, SCALER_Scale<true, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); - else + } else { render<MAPPER_Map, SCALER_Scale<false, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } } void CelObj::drawNoFlipNoMD(Buffer &target, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { @@ -715,14 +747,16 @@ void CelObj::scaleDrawNoMD(Buffer &target, const Ratio &scaleX, const Ratio &sca } void CelObj::scaleDrawUncompNoMD(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { - if (_drawMirrored) + if (_drawMirrored) { render<MAPPER_NoMD, SCALER_Scale<true, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); - else + } else { render<MAPPER_NoMD, SCALER_Scale<false, READER_Uncompressed> >(target, targetRect, scaledPosition, scaleX, scaleY); + } } #pragma mark - #pragma mark CelObjView + CelObjView::CelObjView(const GuiResourceId viewId, const int16 loopNo, const int16 celNo) { _info.type = kCelTypeView; _info.resourceId = viewId; @@ -765,8 +799,8 @@ CelObjView::CelObjView(const GuiResourceId viewId, const int16 loopNo, const int if (_scaledWidth == 0 || _scaledHeight == 0) { byte sizeFlag = data[5]; if (sizeFlag == 0) { - _scaledWidth = 320; - _scaledHeight = 200; + _scaledWidth = kLowResX; + _scaledHeight = kLowResY; } else if (sizeFlag == 1) { _scaledWidth = 640; _scaledHeight = 480; @@ -840,8 +874,12 @@ CelObjView::CelObjView(const GuiResourceId viewId, const int16 loopNo, const int bool CelObjView::analyzeUncompressedForRemap() const { byte *pixels = getResPointer() + READ_SCI11ENDIAN_UINT32(getResPointer() + _celHeaderOffset + 24); for (int i = 0; i < _width * _height; ++i) { - byte pixel = pixels[i]; - if (pixel >= g_sci->_gfxRemap32->getStartColor() && pixel <= g_sci->_gfxRemap32->getEndColor() && pixel != _transparentColor) { + const byte pixel = pixels[i]; + if ( + pixel >= g_sci->_gfxRemap32->getStartColor() && + pixel <= g_sci->_gfxRemap32->getEndColor() && + pixel != _transparentColor + ) { return true; } } @@ -853,8 +891,12 @@ bool CelObjView::analyzeForRemap() const { for (int y = 0; y < _height; y++) { const byte *curRow = reader.getRow(y); for (int x = 0; x < _width; x++) { - byte pixel = curRow[x]; - if (pixel >= g_sci->_gfxRemap32->getStartColor() && pixel <= g_sci->_gfxRemap32->getEndColor() && pixel != _transparentColor) { + const byte pixel = curRow[x]; + if ( + pixel >= g_sci->_gfxRemap32->getStartColor() && + pixel <= g_sci->_gfxRemap32->getEndColor() && + pixel != _transparentColor + ) { return true; } } @@ -881,6 +923,7 @@ byte *CelObjView::getResPointer() const { #pragma mark - #pragma mark CelObjPic + CelObjPic::CelObjPic(const GuiResourceId picId, const int16 celNo) { _info.type = kCelTypePic; _info.resourceId = picId; @@ -942,8 +985,8 @@ CelObjPic::CelObjPic(const GuiResourceId picId, const int16 celNo) { _scaledWidth = sizeFlag1; _scaledHeight = sizeFlag2; } else if (sizeFlag1 == 0) { - _scaledWidth = 320; - _scaledHeight = 200; + _scaledWidth = kLowResX; + _scaledHeight = kLowResY; } else if (sizeFlag1 == 1) { _scaledWidth = 640; _scaledHeight = 480; @@ -1002,6 +1045,7 @@ byte *CelObjPic::getResPointer() const { #pragma mark - #pragma mark CelObjMem + CelObjMem::CelObjMem(const reg_t bitmapObject) { _info.type = kCelTypeMem; _info.bitmap = bitmapObject; @@ -1031,6 +1075,7 @@ byte *CelObjMem::getResPointer() const { #pragma mark - #pragma mark CelObjColor + CelObjColor::CelObjColor(const uint8 color, const int16 width, const int16 height) { _info.type = kCelTypeColor; _info.color = color; diff --git a/engines/sci/graphics/celobj32.h b/engines/sci/graphics/celobj32.h index 6e401b3df4..e405592b5f 100644 --- a/engines/sci/graphics/celobj32.h +++ b/engines/sci/graphics/celobj32.h @@ -31,6 +31,20 @@ namespace Sci { typedef Common::Rational Ratio; +// SCI32 has four different coordinate systems: +// 1. low resolution, 2. game/script resolution, +// 3. text/bitmap resolution, 4. screen resolution +// +// In CelObj, these values are used when there is +// no baked in resolution of cels. +// +// In ScreenItem, it is used when deciding which +// path to take to calculate dimensions. +enum { + kLowResX = 320, + kLowResY = 200 +}; + enum CelType { kCelTypeView = 0, kCelTypePic = 1, diff --git a/engines/sci/graphics/controls32.cpp b/engines/sci/graphics/controls32.cpp index faf1d7d1a2..61dfbedfc5 100644 --- a/engines/sci/graphics/controls32.cpp +++ b/engines/sci/graphics/controls32.cpp @@ -21,7 +21,8 @@ */ #include "common/system.h" - +#include "common/translation.h" +#include "gui/message.h" #include "sci/sci.h" #include "sci/console.h" #include "sci/event.h" @@ -41,7 +42,31 @@ GfxControls32::GfxControls32(SegManager *segMan, GfxCache *cache, GfxText32 *tex _gfxCache(cache), _gfxText32(text), _overwriteMode(false), - _nextCursorFlashTick(0) {} + _nextCursorFlashTick(0), + // SSCI used a memory handle for a ScrollWindow object + // as ID. We use a simple numeric handle instead. + _nextScrollWindowId(10000) {} + +GfxControls32::~GfxControls32() { + ScrollWindowMap::iterator it; + for (it = _scrollWindows.begin(); it != _scrollWindows.end(); ++it) + delete it->_value; +} + +#pragma mark - +#pragma mark Garbage collection + +Common::Array<reg_t> GfxControls32::listObjectReferences() { + Common::Array<reg_t> ret; + ScrollWindowMap::const_iterator it; + for (it = _scrollWindows.begin(); it != _scrollWindows.end(); ++it) + ret.push_back(it->_value->getBitmap()); + + return ret; +} + +#pragma mark - +#pragma mark Text input control reg_t GfxControls32::kernelEditText(const reg_t controlObject) { SegManager *segMan = _segMan; @@ -350,4 +375,470 @@ void GfxControls32::flashCursor(TextEditor &editor) { _nextCursorFlashTick = g_sci->getTickCount() + 30; } } + +#pragma mark - +#pragma mark Scrollable window control + +ScrollWindow::ScrollWindow(SegManager *segMan, const Common::Rect &gameRect, const Common::Point &position, const reg_t plane, const uint8 defaultForeColor, const uint8 defaultBackColor, const GuiResourceId defaultFontId, const TextAlign defaultAlignment, const int16 defaultBorderColor, const uint16 maxNumEntries) : + _gfxText32(segMan, g_sci->_gfxCache), + _maxNumEntries(maxNumEntries), + _firstVisibleChar(0), + _topVisibleLine(0), + _lastVisibleChar(0), + _bottomVisibleLine(0), + _numLines(0), + _numVisibleLines(0), + _plane(plane), + _foreColor(defaultForeColor), + _backColor(defaultBackColor), + _borderColor(defaultBorderColor), + _fontId(defaultFontId), + _alignment(defaultAlignment), + _visible(false), + _position(position), + _screenItem(nullptr), + _nextEntryId(1) { + + _entries.reserve(maxNumEntries); + + _gfxText32.setFont(_fontId); + _pointSize = _gfxText32._font->getHeight(); + + const uint16 scriptWidth = g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth; + const uint16 scriptHeight = g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight; + + Common::Rect bitmapRect(gameRect); + mulinc(bitmapRect, Ratio(_gfxText32._scaledWidth, scriptWidth), Ratio(_gfxText32._scaledHeight, scriptHeight)); + + _textRect.left = 2; + _textRect.top = 2; + _textRect.right = bitmapRect.width() - 2; + _textRect.bottom = bitmapRect.height() - 2; + + uint8 skipColor = 0; + while (skipColor == _foreColor || skipColor == _backColor) { + skipColor++; + } + + assert(bitmapRect.width() > 0 && bitmapRect.height() > 0); + _bitmap = _gfxText32.createFontBitmap(bitmapRect.width(), bitmapRect.height(), _textRect, "", _foreColor, _backColor, skipColor, _fontId, _alignment, _borderColor, false, false); + + debugC(1, kDebugLevelGraphics, "New ScrollWindow: textRect size: %d x %d, bitmap: %04x:%04x", _textRect.width(), _textRect.height(), PRINT_REG(_bitmap)); +} + +ScrollWindow::~ScrollWindow() { + // _gfxText32._bitmap will get GCed once ScrollWindow is gone. + // _screenItem will be deleted by GfxFrameout +} + +Ratio ScrollWindow::where() const { + return Ratio(_topVisibleLine, MAX(_numLines, 1)); +} + +void ScrollWindow::show() { + if (_visible) { + return; + } + + if (_screenItem == nullptr) { + CelInfo32 celInfo; + celInfo.type = kCelTypeMem; + celInfo.bitmap = _bitmap; + + _screenItem = new ScreenItem(_plane, celInfo, _position, ScaleInfo()); + } + + Plane *plane = g_sci->_gfxFrameout->getPlanes().findByObject(_plane); + plane->_screenItemList.add(_screenItem); + + _visible = true; +} + +void ScrollWindow::hide() { + if (!_visible) { + return; + } + + g_sci->_gfxFrameout->deleteScreenItem(_screenItem, _plane); + _screenItem = nullptr; + g_sci->_gfxFrameout->frameOut(true); + + _visible = false; +} + +reg_t ScrollWindow::add(const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment, const bool scrollTo) { + if (_entries.size() == _maxNumEntries) { + ScrollWindowEntry removedEntry = _entries.remove_at(0); + _text.erase(0, removedEntry.text.size()); + // `_firstVisibleChar` will be reset shortly if + // `scrollTo` is true, so there is no reason to + // update it + if (!scrollTo) { + _firstVisibleChar -= removedEntry.text.size(); + } + } + + _entries.push_back(ScrollWindowEntry()); + ScrollWindowEntry &entry = _entries.back(); + + // NOTE: In SSCI the line ID was a memory handle for the + // string of this line. We use a numeric ID instead. + entry.id = make_reg(0, _nextEntryId++); + + if (_nextEntryId > _maxNumEntries) { + _nextEntryId = 1; + } + + // NOTE: In SSCI this was updated after _text was + // updated, which meant there was an extra unnecessary + // subtraction operation (subtracting `entry.text` size) + if (scrollTo) { + _firstVisibleChar = _text.size(); + } + + fillEntry(entry, text, fontId, foreColor, alignment); + _text += entry.text; + + computeLineIndices(); + update(true); + + return entry.id; +} + +void ScrollWindow::fillEntry(ScrollWindowEntry &entry, const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment) { + entry.alignment = alignment; + entry.foreColor = foreColor; + entry.fontId = fontId; + + Common::String formattedText; + + // NB: There are inconsistencies here. + // If there is a multi-line entry with non-default properties, and it + // is only partially displayed, it may not be displayed right, since the + // property directives are only added to the first line. + // (Verified by trying this in SSCI SQ6 with a custom ScrollWindowAdd call.) + // + // The converse is also a potential issue (but unverified), where lines + // with properties -1 can inherit properties from the previously rendered + // line instead of the defaults. + + // NOTE: SSCI added "|s<lineIndex>|" here, but |s| is + // not a valid control code, so it just always ended up + // getting skipped + if (entry.fontId != -1) { + formattedText += Common::String::format("|f%d|", entry.fontId); + } + if (entry.foreColor != -1) { + formattedText += Common::String::format("|c%d|", entry.foreColor); + } + if (entry.alignment != -1) { + formattedText += Common::String::format("|a%d|", entry.alignment); + } + formattedText += text; + entry.text = formattedText; +} + +reg_t ScrollWindow::modify(const reg_t id, const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment, const bool scrollTo) { + + EntriesList::iterator it = _entries.begin(); + uint firstCharLocation = 0; + for ( ; it != _entries.end(); ++it) { + if (it->id == id) { + break; + } + firstCharLocation += it->text.size(); + } + + if (it == _entries.end()) { + return make_reg(0, 0); + } + + ScrollWindowEntry &entry = *it; + + uint oldTextLength = entry.text.size(); + + fillEntry(entry, text, fontId, foreColor, alignment); + _text.replace(firstCharLocation, oldTextLength, entry.text); + + if (scrollTo) { + _firstVisibleChar = firstCharLocation; + } + + computeLineIndices(); + update(true); + + return entry.id; +} + +void ScrollWindow::upArrow() { + if (_topVisibleLine == 0) { + return; + } + + _topVisibleLine--; + _bottomVisibleLine--; + + if (_bottomVisibleLine - _topVisibleLine + 1 < _numVisibleLines) { + _bottomVisibleLine = _numLines - 1; + } + + _firstVisibleChar = _startsOfLines[_topVisibleLine]; + _lastVisibleChar = _startsOfLines[_bottomVisibleLine + 1] - 1; + + _visibleText = Common::String(_text.c_str() + _firstVisibleChar, _text.c_str() + _lastVisibleChar + 1); + + Common::String lineText(_text.c_str() + _startsOfLines[_topVisibleLine], _text.c_str() + _startsOfLines[_topVisibleLine + 1] - 1); + + debugC(3, kDebugLevelGraphics, "ScrollWindow::upArrow: top: %d, bottom: %d, num: %d, numvis: %d, lineText: %s", _topVisibleLine, _bottomVisibleLine, _numLines, _numVisibleLines, lineText.c_str()); + + _gfxText32.scrollLine(lineText, _numVisibleLines, _foreColor, _alignment, _fontId, kScrollUp); + + if (_visible) { + assert(_screenItem); + + _screenItem->update(); + g_sci->_gfxFrameout->frameOut(true); + } +} + +void ScrollWindow::downArrow() { + if (_topVisibleLine + 1 >= _numLines) { + return; + } + + _topVisibleLine++; + _bottomVisibleLine++; + + if (_bottomVisibleLine + 1 >= _numLines) { + _bottomVisibleLine = _numLines - 1; + } + + _firstVisibleChar = _startsOfLines[_topVisibleLine]; + _lastVisibleChar = _startsOfLines[_bottomVisibleLine + 1] - 1; + + _visibleText = Common::String(_text.c_str() + _firstVisibleChar, _text.c_str() + _lastVisibleChar + 1); + + Common::String lineText; + if (_bottomVisibleLine - _topVisibleLine + 1 == _numVisibleLines) { + lineText = Common::String(_text.c_str() + _startsOfLines[_bottomVisibleLine], _text.c_str() + _startsOfLines[_bottomVisibleLine + 1] - 1); + } else { + // scroll in empty string + } + + debugC(3, kDebugLevelGraphics, "ScrollWindow::downArrow: top: %d, bottom: %d, num: %d, numvis: %d, lineText: %s", _topVisibleLine, _bottomVisibleLine, _numLines, _numVisibleLines, lineText.c_str()); + + + _gfxText32.scrollLine(lineText, _numVisibleLines, _foreColor, _alignment, _fontId, kScrollDown); + + if (_visible) { + assert(_screenItem); + + _screenItem->update(); + g_sci->_gfxFrameout->frameOut(true); + } +} + +void ScrollWindow::go(const Ratio location) { + const int line = (location * _numLines).toInt(); + if (line < 0 || line > _numLines) { + error("Index is Out of Range in ScrollWindow"); + } + + _firstVisibleChar = _startsOfLines[line]; + update(true); + + // HACK: + // It usually isn't possible to set _topVisibleLine >= _numLines, and so + // update() doesn't. However, in this case we should set _topVisibleLine + // past the end. This is clearly visible in Phantasmagoria when dragging + // the slider in the About dialog to the very end. The slider ends up lower + // than where it can be moved by scrolling down with the arrows. + if (location.isOne()) { + _topVisibleLine = _numLines; + } +} + +void ScrollWindow::home() { + if (_firstVisibleChar == 0) { + return; + } + + _firstVisibleChar = 0; + update(true); +} + +void ScrollWindow::end() { + if (_bottomVisibleLine + 1 >= _numLines) { + return; + } + + int line = _numLines - _numVisibleLines; + if (line < 0) { + line = 0; + } + _firstVisibleChar = _startsOfLines[line]; + update(true); +} + +void ScrollWindow::pageUp() { + if (_topVisibleLine == 0) { + return; + } + + _topVisibleLine -= _numVisibleLines; + if (_topVisibleLine < 0) { + _topVisibleLine = 0; + } + + _firstVisibleChar = _startsOfLines[_topVisibleLine]; + update(true); +} + +void ScrollWindow::pageDown() { + if (_topVisibleLine + 1 >= _numLines) { + return; + } + + _topVisibleLine += _numVisibleLines; + if (_topVisibleLine + 1 >= _numLines) { + _topVisibleLine = _numLines - 1; + } + + _firstVisibleChar = _startsOfLines[_topVisibleLine]; + update(true); +} + +void ScrollWindow::computeLineIndices() { + _gfxText32.setFont(_fontId); + // NOTE: Unlike SSCI, foreColor and alignment are not + // set since these properties do not affect the width of + // lines + + if (_gfxText32._font->getHeight() != _pointSize) { + error("Illegal font size font = %d pointSize = %d, should be %d.", _fontId, _gfxText32._font->getHeight(), _pointSize); + } + + Common::Rect lineRect(0, 0, _textRect.width(), _pointSize + 3); + + _startsOfLines.clear(); + + // NOTE: The original engine had a 1000-line limit; we + // do not enforce any limit + for (uint charIndex = 0; charIndex < _text.size(); ) { + _startsOfLines.push_back(charIndex); + charIndex += _gfxText32.getTextCount(_text, charIndex, lineRect, false); + } + + _numLines = _startsOfLines.size(); + + _startsOfLines.push_back(_text.size()); + + _lastVisibleChar = _gfxText32.getTextCount(_text, 0, _fontId, _textRect, false) - 1; + + _bottomVisibleLine = 0; + while ( + _bottomVisibleLine < _numLines - 1 && + _startsOfLines[_bottomVisibleLine + 1] < _lastVisibleChar + ) { + ++_bottomVisibleLine; + } + + _numVisibleLines = _bottomVisibleLine + 1; +} + +void ScrollWindow::update(const bool doFrameOut) { + _topVisibleLine = 0; + while ( + _topVisibleLine < _numLines - 1 && + _firstVisibleChar >= _startsOfLines[_topVisibleLine + 1] + ) { + ++_topVisibleLine; + } + + _bottomVisibleLine = _topVisibleLine + _numVisibleLines - 1; + if (_bottomVisibleLine >= _numLines) { + _bottomVisibleLine = _numLines - 1; + } + + _firstVisibleChar = _startsOfLines[_topVisibleLine]; + + if (_bottomVisibleLine >= 0) { + _lastVisibleChar = _startsOfLines[_bottomVisibleLine + 1] - 1; + } else { + _lastVisibleChar = -1; + } + + _visibleText = Common::String(_text.c_str() + _firstVisibleChar, _text.c_str() + _lastVisibleChar + 1); + + _gfxText32.erase(_textRect, false); + _gfxText32.drawTextBox(_visibleText); + + if (_visible) { + assert(_screenItem); + + _screenItem->update(); + if (doFrameOut) { + g_sci->_gfxFrameout->frameOut(true); + } + } +} + +reg_t GfxControls32::makeScrollWindow(const Common::Rect &gameRect, const Common::Point &position, const reg_t planeObj, const uint8 defaultForeColor, const uint8 defaultBackColor, const GuiResourceId defaultFontId, const TextAlign defaultAlignment, const int16 defaultBorderColor, const uint16 maxNumEntries) { + + ScrollWindow *scrollWindow = new ScrollWindow(_segMan, gameRect, position, planeObj, defaultForeColor, defaultBackColor, defaultFontId, defaultAlignment, defaultBorderColor, maxNumEntries); + + const uint16 id = _nextScrollWindowId++; + _scrollWindows[id] = scrollWindow; + return make_reg(0, id); +} + +ScrollWindow *GfxControls32::getScrollWindow(const reg_t id) { + ScrollWindowMap::iterator it; + it = _scrollWindows.find(id.toUint16()); + if (it == _scrollWindows.end()) + error("Invalid ScrollWindow ID"); + + return it->_value; +} + +void GfxControls32::destroyScrollWindow(const reg_t id) { + ScrollWindow *scrollWindow = getScrollWindow(id); + scrollWindow->hide(); + _scrollWindows.erase(id.getOffset()); + delete scrollWindow; +} + +#pragma mark - +#pragma mark Message box + +int16 GfxControls32::showMessageBox(const Common::String &message, const char *const okLabel, const char *const altLabel, const int16 okValue, const int16 altValue) { + GUI::MessageDialog dialog(message, okLabel, altLabel); + return (dialog.runModal() == GUI::kMessageOK) ? okValue : altValue; +} + +reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Common::String &title, const uint16 style) { + if (g_engine) { + g_engine->pauseEngine(true); + } + + int16 result; + + switch (style & 0xF) { + case kMessageBoxOK: + result = showMessageBox(message, _("OK"), NULL, 1, 1); + break; + case kMessageBoxYesNo: + result = showMessageBox(message, _("Yes"), _("No"), 6, 7); + break; + default: + error("Unsupported MessageBox style 0x%x", style & 0xF); + } + + if (g_engine) { + g_engine->pauseEngine(false); + } + + return make_reg(0, result); +} + } // End of namespace Sci diff --git a/engines/sci/graphics/controls32.h b/engines/sci/graphics/controls32.h index 1bb7679ddd..460b0b5625 100644 --- a/engines/sci/graphics/controls32.h +++ b/engines/sci/graphics/controls32.h @@ -23,12 +23,19 @@ #ifndef SCI_GRAPHICS_CONTROLS32_H #define SCI_GRAPHICS_CONTROLS32_H +#include "sci/graphics/text32.h" + namespace Sci { class GfxCache; class GfxScreen; class GfxText32; +enum MessageBoxStyle { + kMessageBoxOK = 0x0, + kMessageBoxYesNo = 0x4 +}; + struct TextEditor { /** * The bitmap where the editor is rendered. @@ -100,24 +107,403 @@ struct TextEditor { }; /** + * A single block of text written to a ScrollWindow. + */ +struct ScrollWindowEntry { + /** + * ID of the line. In SSCI this was actually a memory + * handle for the string of this line. We use a simple + * numeric ID instead. + */ + reg_t id; + + /** + * The alignment to use when rendering this line of + * text. If -1, the default alignment from the + * corresponding ScrollWindow will be used. + */ + TextAlign alignment; + + /** + * The color to use to render this line of text. If -1, + * the default foreground color from the corresponding + * ScrollWindow will be used. + */ + int16 foreColor; + + /** + * The font to use to render this line of text. If -1, + * the default font from the corresponding ScrollWindow + * will be used. + */ + GuiResourceId fontId; + + /** + * The text. + */ + Common::String text; +}; + +class ScreenItem; + +/** + * A scrollable text window. + */ +class ScrollWindow { +public: + ScrollWindow(SegManager *segMan, const Common::Rect &gameRect, const Common::Point &position, const reg_t planeObj, const uint8 defaultForeColor, const uint8 defaultBackColor, const GuiResourceId defaultFontId, const TextAlign defaultAlignment, const int16 defaultBorderColor, const uint16 maxNumEntries); + ~ScrollWindow(); + + /** + * Adds a new text entry to the window. If `fontId`, + * `foreColor`, or `alignment` are `-1`, the + * ScrollWindow's default values will be used. + */ + reg_t add(const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment, const bool scrollTo); + + /** + * Modifies an existing text entry with the given ID. If + * `fontId`, `foreColor`, or `alignment` are `-1`, the + * ScrollWindow's default values will be used. + */ + reg_t modify(const reg_t id, const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment, const bool scrollTo); + + /** + * Shows the ScrollWindow if it is not already visible. + */ + void show(); + + /** + * Hides the ScrollWindow if it is currently visible. + */ + void hide(); + + /** + * Gets the number of lines that the content of a + * ScrollWindow is scrolled upward, as a ratio of the + * total number of lines of content. + */ + Ratio where() const; + + /** + * Scrolls the window to a specific location. + */ + void go(const Ratio location); + + /** + * Scrolls the window to the top. + */ + void home(); + + /** + * Scrolls the window to the bottom. + */ + void end(); + + /** + * Scrolls the window up one line. + */ + void upArrow(); + + /** + * Scrolls the window down one line. + */ + void downArrow(); + + /** + * Scrolls the window up by one page. + */ + void pageUp(); + + /** + * Scrolls the window down by one page. + */ + void pageDown(); + + /** + * Gets a reference to the in-memory bitmap that + * is used to render the text in the ScrollWindow. + */ + const reg_t getBitmap() const { return _bitmap; } + +private: + typedef Common::Array<ScrollWindowEntry> EntriesList; + + /** + * A convenience function that fills a + * ScrollWindowEntry's properties. + */ + void fillEntry(ScrollWindowEntry &entry, const Common::String &text, const GuiResourceId fontId, const int16 foreColor, const TextAlign alignment); + + /** + * Rescans the entire text of the ScrollWindow when an + * entry is added or modified, calculating the character + * offsets of all line endings, the total number of + * lines of text, the height of the viewport (in lines + * of text), the last character visible in the viewport + * (assuming the viewport is scrolled to the top), and + * the line index of the bottommost visible line + * (assuming the viewport is scrolled to the top). + */ + void computeLineIndices(); + + /** + * Calculates which text is visible within the + * ScrollWindow's viewport and renders the text to the + * internal bitmap. + * + * If `doFrameOut` is true, the screen will be refreshed + * immediately instead of waiting for the next call to + * `kFrameOut`. + */ + void update(const bool doFrameOut); + + /** + * The text renderer. + */ + GfxText32 _gfxText32; + + /** + * The individual text entries added to the + * ScrollWindow. + */ + EntriesList _entries; + + /** + * The maximum number of entries allowed. Once this + * limit is reached, the oldest entry will be removed + * when a new entry is added. + */ + uint _maxNumEntries; + + /** + * A mapping from a line index to the line's character + * offset in `_text`. + */ + Common::Array<int> _startsOfLines; + + /** + * All text added to the window. + */ + Common::String _text; + + /** + * Text that is within the viewport of the ScrollWindow. + */ + Common::String _visibleText; + + /** + * The offset of the first visible character in `_text`. + */ + int _firstVisibleChar; + + /** + * The index of the line that is at the top of the + * viewport. + */ + int _topVisibleLine; + + /** + * The index of the last visible character in `_text`, + * or -1 if there is no text. + */ + int _lastVisibleChar; + + /** + * The index of the line that is at the bottom of the + * viewport, or -1 if there is no text. + */ + int _bottomVisibleLine; + + /** + * The total number of lines in the backbuffer. This + * number may be higher than the total number of entries + * if an entry contains newlines. + */ + int _numLines; + + /** + * The number of lines that are currently visible in the + * text area of the window. + */ + int _numVisibleLines; + + /** + * The plane in which the ScrollWindow should be + * rendered. + */ + reg_t _plane; + + /** + * The default text color. + */ + uint8 _foreColor; + + /** + * The default background color of the text bitmap. + */ + uint8 _backColor; + + /** + * The default border color of the text bitmap. If -1, + * the viewport will have no border. + */ + int16 _borderColor; + + /** + * The default font used for rendering text into the + * ScrollWindow. + */ + GuiResourceId _fontId; + + /** + * The default text alignment used for rendering text + * into the ScrollWindow. + */ + TextAlign _alignment; + + /** + * The visibility of the ScrollWindow. + */ + bool _visible; + + /** + * The dimensions of the text box inside the font + * bitmap, in text-system coordinates. + */ + Common::Rect _textRect; + + /** + * The top-left corner of the ScrollWindow's screen + * item, in game script coordinates, relative to the + * parent plane. + */ + Common::Point _position; + + /** + * The height of the default font in screen pixels. All + * fonts rendered into the ScrollWindow must have this + * same height. + */ + uint8 _pointSize; + + /** + * The bitmap used to render text. + */ + reg_t _bitmap; + + /** + * A monotonically increasing ID used to identify + * text entries added to the ScrollWindow. + */ + uint16 _nextEntryId; + + /** + * The ScrollWindow's screen item. + */ + ScreenItem *_screenItem; +}; + +/** * Controls class, handles drawing of controls in SCI32 (SCI2, SCI2.1, SCI3) games */ class GfxControls32 { public: GfxControls32(SegManager *segMan, GfxCache *cache, GfxText32 *text); - - reg_t kernelEditText(const reg_t controlObject); + ~GfxControls32(); private: SegManager *_segMan; GfxCache *_gfxCache; GfxText32 *_gfxText32; +#pragma mark - +#pragma mark Garbage collection +public: + Common::Array<reg_t> listObjectReferences(); + +#pragma mark - +#pragma mark Text input control +public: + reg_t kernelEditText(const reg_t controlObject); + +private: + /** + * If true, typing will overwrite text that already + * exists at the text cursor's current position. + */ bool _overwriteMode; + + /** + * The tick at which the text cursor should be toggled + * by `flashCursor`. + */ uint32 _nextCursorFlashTick; + + /** + * Draws the text cursor for the given editor. + */ void drawCursor(TextEditor &editor); + + /** + * Erases the text cursor for the given editor. + */ void eraseCursor(TextEditor &editor); + + /** + * Toggles the text cursor for the given editor to be + * either drawn or erased. + */ void flashCursor(TextEditor &editor); + +#pragma mark - +#pragma mark Scrollable window control +public: + /** + * Creates a new scrollable window and returns the ID + * for the new window, which is used by game scripts to + * interact with scrollable windows. + */ + reg_t makeScrollWindow(const Common::Rect &gameRect, const Common::Point &position, const reg_t plane, const uint8 defaultForeColor, const uint8 defaultBackColor, const GuiResourceId defaultFontId, const TextAlign defaultAlignment, const int16 defaultBorderColor, const uint16 maxNumEntries); + + /** + * Gets a registered ScrollWindow instance by ID. + */ + ScrollWindow *getScrollWindow(const reg_t id); + + /** + * Destroys the scroll window with the given ID. + */ + void destroyScrollWindow(const reg_t id); + +private: + typedef Common::HashMap<uint16, ScrollWindow *> ScrollWindowMap; + + /** + * Monotonically increasing ID used to identify + * ScrollWindow instances. + */ + uint16 _nextScrollWindowId; + + /** + * A lookup table for registered ScrollWindow instances. + */ + ScrollWindowMap _scrollWindows; + +#pragma mark - +#pragma mark Message box +public: + /** + * Displays an OS-level message dialog. + */ + reg_t kernelMessageBox(const Common::String &message, const Common::String &title, const uint16 style); + +private: + /** + * Convenience function for creating and showing a + * message box. + */ + int16 showMessageBox(const Common::String &message, const char *const okLabel, const char *const altLabel, const int16 okValue, const int16 altValue); }; } // End of namespace Sci diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index 64ae828a50..fd37020896 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -42,15 +42,13 @@ #include "sci/graphics/coordadjuster.h" #include "sci/graphics/compare.h" #include "sci/graphics/font.h" -#include "sci/graphics/view.h" #include "sci/graphics/screen.h" #include "sci/graphics/paint32.h" #include "sci/graphics/palette32.h" -#include "sci/graphics/picture.h" -#include "sci/graphics/remap.h" -#include "sci/graphics/text32.h" #include "sci/graphics/plane32.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/screen_item32.h" +#include "sci/graphics/text32.h" #include "sci/graphics/frameout.h" #include "sci/video/robot_decoder.h" @@ -69,14 +67,14 @@ static int16 unknownCDefaults[2][16] = { /* SCI2.1mid+ */ { 0, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 0, 0, 7, 7, 0 } }; -GfxFrameout::GfxFrameout(SegManager *segMan, ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxCache *cache, GfxScreen *screen, GfxPalette32 *palette, GfxPaint32 *paint32) : +GfxFrameout::GfxFrameout(SegManager *segMan, ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxScreen *screen, GfxPalette32 *palette) : _isHiRes(false), - _cache(cache), _palette(palette), _resMan(resMan), _screen(screen), _segMan(segMan), - _paint32(paint32), + _benchmarkingFinished(false), + _throttleFrameOut(true), _showStyles(nullptr), // TODO: Stop using _gfxScreen _currentBuffer(screen->getDisplayWidth(), screen->getDisplayHeight(), nullptr), @@ -255,9 +253,55 @@ void GfxFrameout::syncWithScripts(bool addElements) { } #pragma mark - +#pragma mark Benchmarking + +bool GfxFrameout::checkForFred(const reg_t object) { + const int16 viewId = readSelectorValue(_segMan, object, SELECTOR(view)); + const SciGameId gameId = g_sci->getGameId(); + + if (gameId == GID_QFG4 && viewId == 9999) { + return true; + } + + if (gameId != GID_QFG4 && viewId == -556) { + return true; + } + + if (Common::String(_segMan->getObjectName(object)) == "fred") { + return true; + } + + return false; +} + +#pragma mark - #pragma mark Screen items +void GfxFrameout::deleteScreenItem(ScreenItem *screenItem, Plane *plane) { + if (screenItem->_created == 0) { + screenItem->_created = 0; + screenItem->_updated = 0; + screenItem->_deleted = getScreenCount(); + } else { + plane->_screenItemList.erase(screenItem); + plane->_screenItemList.pack(); + } +} + +void GfxFrameout::deleteScreenItem(ScreenItem *screenItem, const reg_t planeObject) { + Plane *plane = _planes.findByObject(planeObject); + deleteScreenItem(screenItem, plane); +} + void GfxFrameout::kernelAddScreenItem(const reg_t object) { + // The "fred" object is used to test graphics performance; + // it is impacted by framerate throttling, so disable the + // throttling when this item is on the screen for the + // performance check to pass. + if (!_benchmarkingFinished && _throttleFrameOut && checkForFred(object)) { + _throttleFrameOut = false; + } + const reg_t planeObject = readSelector(_segMan, object, SELECTOR(plane)); _segMan->getObject(object)->setInfoSelectorFlag(kInfoFlagViewInserted); @@ -297,6 +341,15 @@ void GfxFrameout::kernelUpdateScreenItem(const reg_t object) { } void GfxFrameout::kernelDeleteScreenItem(const reg_t object) { + // The "fred" object is used to test graphics performance; + // it is impacted by framerate throttling, so disable the + // throttling when this item is on the screen for the + // performance check to pass. + if (!_benchmarkingFinished && checkForFred(object)) { + _benchmarkingFinished = true; + _throttleFrameOut = true; + } + _segMan->getObject(object)->clearInfoSelectorFlag(kInfoFlagViewInserted); const reg_t planeObject = readSelector(_segMan, object, SELECTOR(plane)); @@ -310,14 +363,7 @@ void GfxFrameout::kernelDeleteScreenItem(const reg_t object) { return; } - if (screenItem->_created == 0) { - screenItem->_created = 0; - screenItem->_updated = 0; - screenItem->_deleted = getScreenCount(); - } else { - plane->_screenItemList.erase(screenItem); - plane->_screenItemList.pack(); - } + deleteScreenItem(screenItem, plane); } #pragma mark - @@ -446,7 +492,7 @@ void GfxFrameout::kernelAddPicAt(const reg_t planeObject, const GuiResourceId pi #pragma mark - #pragma mark Rendering -void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &rect) { +void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &eraseRect) { // TODO: Robot // if (_robot != nullptr) { // _robot.doRobot(); @@ -464,7 +510,7 @@ void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &rect) remapMarkRedraw(); } - calcLists(screenItemLists, eraseLists, rect); + calcLists(screenItemLists, eraseLists, eraseRect); for (ScreenItemListList::iterator list = screenItemLists.begin(); list != screenItemLists.end(); ++list) { list->sort(); @@ -507,130 +553,221 @@ void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &rect) // } } -// Determine the parts of 'r' that aren't overlapped by 'other'. -// Returns -1 if r and other have no intersection. -// Returns number of returned parts (in outRects) otherwise. -// (In particular, this returns 0 if r is contained in other.) +/** + * Determines the parts of `r` that aren't overlapped by `other`. + * Returns -1 if `r` and `other` have no intersection. + * Returns number of returned parts (in `outRects`) otherwise. + * (In particular, this returns 0 if `r` is contained in `other`.) + */ int splitRects(Common::Rect r, const Common::Rect &other, Common::Rect(&outRects)[4]) { if (!r.intersects(other)) { return -1; } - int count = 0; + int splitCount = 0; if (r.top < other.top) { - Common::Rect &t = outRects[count++]; + Common::Rect &t = outRects[splitCount++]; t = r; t.bottom = other.top; r.top = other.top; } if (r.bottom > other.bottom) { - Common::Rect &t = outRects[count++]; + Common::Rect &t = outRects[splitCount++]; t = r; t.top = other.bottom; r.bottom = other.bottom; } if (r.left < other.left) { - Common::Rect &t = outRects[count++]; + Common::Rect &t = outRects[splitCount++]; t = r; t.right = other.left; r.left = other.left; } if (r.right > other.right) { - Common::Rect &t = outRects[count++]; + Common::Rect &t = outRects[splitCount++]; t = r; t.left = other.right; } - return count; + return splitCount; } -void GfxFrameout::calcLists(ScreenItemListList &drawLists, EraseListList &eraseLists, const Common::Rect &calcRect) { - RectList rectlist; - Common::Rect outRects[4]; +/** + * Determines the parts of `middleRect` that aren't overlapped + * by `showRect`, optimised for contiguous memory writes. + * Returns -1 if `middleRect` and `showRect` have no intersection. + * Returns number of returned parts (in `outRects`) otherwise. + * (In particular, this returns 0 if `middleRect` is contained + * in `other`.) + * + * `middleRect` is modified directly to extend into the upper + * and lower rects. + */ +int splitRectsForRender(Common::Rect &middleRect, const Common::Rect &showRect, Common::Rect(&outRects)[2]) { + if (!middleRect.intersects(showRect)) { + return -1; + } + + const int16 minLeft = MIN(middleRect.left, showRect.left); + const int16 maxRight = MAX(middleRect.right, showRect.right); + + int16 upperLeft, upperTop, upperRight, upperMaxTop; + if (middleRect.top < showRect.top) { + upperLeft = middleRect.left; + upperTop = middleRect.top; + upperRight = middleRect.right; + upperMaxTop = showRect.top; + } + else { + upperLeft = showRect.left; + upperTop = showRect.top; + upperRight = showRect.right; + upperMaxTop = middleRect.top; + } + + int16 lowerLeft, lowerRight, lowerBottom, lowerMinBottom; + if (middleRect.bottom > showRect.bottom) { + lowerLeft = middleRect.left; + lowerRight = middleRect.right; + lowerBottom = middleRect.bottom; + lowerMinBottom = showRect.bottom; + } else { + lowerLeft = showRect.left; + lowerRight = showRect.right; + lowerBottom = showRect.bottom; + lowerMinBottom = middleRect.bottom; + } + + int splitCount = 0; + middleRect.left = minLeft; + middleRect.top = upperMaxTop; + middleRect.right = maxRight; + middleRect.bottom = lowerMinBottom; + + if (upperTop != upperMaxTop) { + Common::Rect &upperRect = outRects[0]; + upperRect.left = upperLeft; + upperRect.top = upperTop; + upperRect.right = upperRight; + upperRect.bottom = upperMaxTop; + + // Merge upper rect into middle rect if possible + if (upperRect.left == middleRect.left && upperRect.right == middleRect.right) { + middleRect.top = upperRect.top; + } else { + ++splitCount; + } + } + + if (lowerBottom != lowerMinBottom) { + Common::Rect &lowerRect = outRects[splitCount]; + lowerRect.left = lowerLeft; + lowerRect.top = lowerMinBottom; + lowerRect.right = lowerRight; + lowerRect.bottom = lowerBottom; + + // Merge lower rect into middle rect if possible + if (lowerRect.left == middleRect.left && lowerRect.right == middleRect.right) { + middleRect.bottom = lowerRect.bottom; + } else { + ++splitCount; + } + } + + assert(splitCount <= 2); + return splitCount; +} +// NOTE: The third rectangle parameter is only ever given a non-empty rect +// by VMD code, via `frameOut` +void GfxFrameout::calcLists(ScreenItemListList &drawLists, EraseListList &eraseLists, const Common::Rect &eraseRect) { + RectList eraseList; + Common::Rect outRects[4]; int deletedPlaneCount = 0; - bool addedToRectList = false; - int planeCount = _planes.size(); + bool addedToEraseList = false; bool foundTransparentPlane = false; - if (!calcRect.isEmpty()) { - addedToRectList = true; - rectlist.add(calcRect); + if (!eraseRect.isEmpty()) { + addedToEraseList = true; + eraseList.add(eraseRect); } + PlaneList::size_type planeCount = _planes.size(); for (int outerPlaneIndex = 0; outerPlaneIndex < planeCount; ++outerPlaneIndex) { - Plane *outerPlane = _planes[outerPlaneIndex]; + const Plane *outerPlane = _planes[outerPlaneIndex]; + const Plane *visiblePlane = _visiblePlanes.findByObject(outerPlane->_object); + // NOTE: SSCI only ever checks for kPlaneTypeTransparent here, even + // though kPlaneTypeTransparentPicture is also a transparent plane if (outerPlane->_type == kPlaneTypeTransparent) { foundTransparentPlane = true; } - Plane *visiblePlane = _visiblePlanes.findByObject(outerPlane->_object); - if (outerPlane->_deleted) { - if (visiblePlane != nullptr) { - if (!visiblePlane->_screenRect.isEmpty()) { - addedToRectList = true; - rectlist.add(visiblePlane->_screenRect); - } + if (visiblePlane != nullptr && !visiblePlane->_screenRect.isEmpty()) { + eraseList.add(visiblePlane->_screenRect); + addedToEraseList = true; } ++deletedPlaneCount; - } else if (visiblePlane != nullptr) { - if (outerPlane->_updated) { - --outerPlane->_updated; - - int splitcount = splitRects(visiblePlane->_screenRect, outerPlane->_screenRect, outRects); - if (splitcount) { - if (splitcount == -1) { - if (!visiblePlane->_screenRect.isEmpty()) { - rectlist.add(visiblePlane->_screenRect); - } + } else if (visiblePlane != nullptr && outerPlane->_moved) { + // _moved will be decremented in the final loop through the planes, + // at the end of this function + + { + const int splitCount = splitRects(visiblePlane->_screenRect, outerPlane->_screenRect, outRects); + if (splitCount) { + if (splitCount == -1 && !visiblePlane->_screenRect.isEmpty()) { + eraseList.add(visiblePlane->_screenRect); } else { - for (int i = 0; i < splitcount; ++i) { - rectlist.add(outRects[i]); + for (int i = 0; i < splitCount; ++i) { + eraseList.add(outRects[i]); } } - - addedToRectList = true; + addedToEraseList = true; } + } - if (!outerPlane->_redrawAllCount) { - int splitCount = splitRects(outerPlane->_screenRect, visiblePlane->_screenRect, outRects); - if (splitCount) { - for (int i = 0; i < splitCount; ++i) { - rectlist.add(outRects[i]); - } - addedToRectList = true; + if (!outerPlane->_redrawAllCount) { + const int splitCount = splitRects(outerPlane->_screenRect, visiblePlane->_screenRect, outRects); + if (splitCount) { + for (int i = 0; i < splitCount; ++i) { + eraseList.add(outRects[i]); } + addedToEraseList = true; } } } - if (addedToRectList) { - for (RectList::iterator rect = rectlist.begin(); rect != rectlist.end(); ++rect) { - for (int innerPlaneIndex = _planes.size() - 1; innerPlaneIndex >= 0; --innerPlaneIndex) { - Plane *innerPlane = _planes[innerPlaneIndex]; - - if (!innerPlane->_deleted && innerPlane->_type != kPlaneTypeTransparent && innerPlane->_screenRect.intersects(**rect)) { - if (innerPlane->_redrawAllCount == 0) { - eraseLists[innerPlaneIndex].add(innerPlane->_screenRect.findIntersectingRect(**rect)); + if (addedToEraseList) { + for (int rectIndex = 0; rectIndex < eraseList.size(); ++rectIndex) { + const Common::Rect &rect = *eraseList[rectIndex]; + for (int innerPlaneIndex = planeCount - 1; innerPlaneIndex >= 0; --innerPlaneIndex) { + const Plane &innerPlane = *_planes[innerPlaneIndex]; + + if ( + !innerPlane._deleted && + innerPlane._type != kPlaneTypeTransparent && + innerPlane._screenRect.intersects(rect) + ) { + if (!innerPlane._redrawAllCount) { + eraseLists[innerPlaneIndex].add(innerPlane._screenRect.findIntersectingRect(rect)); } - int splitCount = splitRects(**rect, innerPlane->_screenRect, outRects); + const int splitCount = splitRects(rect, innerPlane._screenRect, outRects); for (int i = 0; i < splitCount; ++i) { - rectlist.add(outRects[i]); + eraseList.add(outRects[i]); } - rectlist.erase(rect); + eraseList.erase_at(rectIndex); break; } } } - rectlist.pack(); + eraseList.pack(); } } @@ -642,9 +779,9 @@ void GfxFrameout::calcLists(ScreenItemListList &drawLists, EraseListList &eraseL if (plane->_deleted) { --plane->_deleted; if (plane->_deleted <= 0) { - PlaneList::iterator visiblePlaneIt = Common::find_if(_visiblePlanes.begin(), _visiblePlanes.end(), FindByObject<Plane *>(plane->_object)); - if (visiblePlaneIt != _visiblePlanes.end()) { - _visiblePlanes.erase(visiblePlaneIt); + const int visiblePlaneIndex = _visiblePlanes.findIndexByObject(plane->_object); + if (visiblePlaneIndex != -1) { + _visiblePlanes.remove_at(visiblePlaneIndex); } _planes.remove_at(planeIndex); @@ -659,103 +796,114 @@ void GfxFrameout::calcLists(ScreenItemListList &drawLists, EraseListList &eraseL } } + // Some planes may have been deleted, so re-retrieve count planeCount = _planes.size(); - for (int outerIndex = 0; outerIndex < planeCount; ++outerIndex) { - // "outer" just refers to the outer loop - Plane *outerPlane = _planes[outerIndex]; - if (outerPlane->_priorityChanged) { - --outerPlane->_priorityChanged; - Plane *visibleOuterPlane = _visiblePlanes.findByObject(outerPlane->_object); + for (PlaneList::size_type outerIndex = 0; outerIndex < planeCount; ++outerIndex) { + // "outer" just refers to the outer loop + Plane &outerPlane = *_planes[outerIndex]; + if (outerPlane._priorityChanged) { + --outerPlane._priorityChanged; + + const Plane *visibleOuterPlane = _visiblePlanes.findByObject(outerPlane._object); + if (visibleOuterPlane == nullptr) { + warning("calcLists could not find visible plane for %04x:%04x", PRINT_REG(outerPlane._object)); + continue; + } - rectlist.add(outerPlane->_screenRect.findIntersectingRect(visibleOuterPlane->_screenRect)); + eraseList.add(outerPlane._screenRect.findIntersectingRect(visibleOuterPlane->_screenRect)); - for (int innerIndex = planeCount - 1; innerIndex >= 0; --innerIndex) { + for (PlaneList::size_type innerIndex = planeCount - 1; innerIndex >= 0; --innerIndex) { // "inner" just refers to the inner loop - Plane *innerPlane = _planes[innerIndex]; - Plane *visibleInnerPlane = _visiblePlanes.findByObject(innerPlane->_object); - - int rectCount = rectlist.size(); - for (int rectIndex = 0; rectIndex < rectCount; ++rectIndex) { - int splitCount = splitRects(*rectlist[rectIndex], _planes[innerIndex]->_screenRect, outRects); + const Plane &innerPlane = *_planes[innerIndex]; + const Plane *visibleInnerPlane = _visiblePlanes.findByObject(innerPlane._object); + const RectList::size_type rectCount = eraseList.size(); + for (RectList::size_type rectIndex = 0; rectIndex < rectCount; ++rectIndex) { + const int splitCount = splitRects(*eraseList[rectIndex], innerPlane._screenRect, outRects); if (splitCount == 0) { - if (visibleInnerPlane != nullptr && visibleOuterPlane != nullptr) { + if (visibleInnerPlane != nullptr) { // same priority, or relative priority between inner/outer changed - if ((visibleOuterPlane->_priority - visibleInnerPlane->_priority) * (outerPlane->_priority - innerPlane->_priority) <= 0) { - if (outerPlane->_priority <= innerPlane->_priority) { - eraseLists[innerIndex].add(*rectlist[rectIndex]); + if ((visibleOuterPlane->_priority - visibleInnerPlane->_priority) * (outerPlane._priority - innerPlane._priority) <= 0) { + if (outerPlane._priority <= innerPlane._priority) { + eraseLists[innerIndex].add(*eraseList[rectIndex]); } else { - eraseLists[outerIndex].add(*rectlist[rectIndex]); + eraseLists[outerIndex].add(*eraseList[rectIndex]); } } } - rectlist.erase_at(rectIndex); + eraseList.erase_at(rectIndex); } else if (splitCount != -1) { for (int i = 0; i < splitCount; ++i) { - rectlist.add(outRects[i]); + eraseList.add(outRects[i]); } - if (visibleInnerPlane != nullptr && visibleOuterPlane != nullptr) { + if (visibleInnerPlane != nullptr) { // same priority, or relative priority between inner/outer changed - if ((visibleOuterPlane->_priority - visibleInnerPlane->_priority) * (outerPlane->_priority - innerPlane->_priority) <= 0) { - *rectlist[rectIndex] = outerPlane->_screenRect.findIntersectingRect(innerPlane->_screenRect); - if (outerPlane->_priority <= innerPlane->_priority) { - eraseLists[innerIndex].add(*rectlist[rectIndex]); - } - else { - eraseLists[outerIndex].add(*rectlist[rectIndex]); + if ((visibleOuterPlane->_priority - visibleInnerPlane->_priority) * (outerPlane._priority - innerPlane._priority) <= 0) { + *eraseList[rectIndex] = outerPlane._screenRect.findIntersectingRect(innerPlane._screenRect); + + if (outerPlane._priority <= innerPlane._priority) { + eraseLists[innerIndex].add(*eraseList[rectIndex]); + } else { + eraseLists[outerIndex].add(*eraseList[rectIndex]); } } } - rectlist.erase_at(rectIndex); + eraseList.erase_at(rectIndex); } } - rectlist.pack(); + eraseList.pack(); } } } - for (int planeIndex = 0; planeIndex < planeCount; ++planeIndex) { - Plane *plane = _planes[planeIndex]; - Plane *visiblePlane = nullptr; + for (PlaneList::size_type planeIndex = 0; planeIndex < planeCount; ++planeIndex) { + Plane &plane = *_planes[planeIndex]; + Plane *visiblePlane = _visiblePlanes.findByObject(plane._object); - PlaneList::iterator visiblePlaneIt = Common::find_if(_visiblePlanes.begin(), _visiblePlanes.end(), FindByObject<Plane *>(plane->_object)); - if (visiblePlaneIt != _visiblePlanes.end()) { - visiblePlane = *visiblePlaneIt; - } + if (!plane._screenRect.isEmpty()) { + if (plane._redrawAllCount) { + plane.redrawAll(visiblePlane, _planes, drawLists[planeIndex], eraseLists[planeIndex]); + } else { + if (visiblePlane == nullptr) { + error("Missing visible plane for source plane %04x:%04x", PRINT_REG(plane._object)); + } - if (plane->_redrawAllCount) { - plane->redrawAll(visiblePlane, _planes, drawLists[planeIndex], eraseLists[planeIndex]); - } else { - if (visiblePlane == nullptr) { - error("Missing visible plane for source plane %04x:%04x", PRINT_REG(plane->_object)); + plane.calcLists(*visiblePlane, _planes, drawLists[planeIndex], eraseLists[planeIndex]); } + } else { + plane.decrementScreenItemArrayCounts(visiblePlane, false); + } - plane->calcLists(*visiblePlane, _planes, drawLists[planeIndex], eraseLists[planeIndex]); + if (plane._moved) { + // the work for handling moved/resized planes was already done + // earlier in the function, we are just cleaning up now + --plane._moved; } - if (plane->_created) { - _visiblePlanes.add(new Plane(*plane)); - --plane->_created; - } else if (plane->_moved) { - assert(visiblePlaneIt != _visiblePlanes.end()); - **visiblePlaneIt = *plane; - --plane->_moved; + if (plane._created) { + _visiblePlanes.add(new Plane(plane)); + --plane._created; + } else if (plane._updated) { + *visiblePlane = plane; + --plane._updated; } } + // NOTE: SSCI only looks for kPlaneTypeTransparent, not + // kPlaneTypeTransparentPicture if (foundTransparentPlane) { - for (int planeIndex = 0; planeIndex < planeCount; ++planeIndex) { - for (int i = planeIndex + 1; i < planeCount; ++i) { + for (PlaneList::size_type planeIndex = 0; planeIndex < planeCount; ++planeIndex) { + for (PlaneList::size_type i = planeIndex + 1; i < planeCount; ++i) { if (_planes[i]->_type == kPlaneTypeTransparent) { _planes[i]->filterUpEraseRects(drawLists[i], eraseLists[planeIndex]); } } if (_planes[planeIndex]->_type == kPlaneTypeTransparent) { - for (int i = planeIndex - 1; i >= 0; --i) { + for (PlaneList::size_type i = planeIndex - 1; i >= 0; --i) { _planes[i]->filterDownEraseRects(drawLists[i], eraseLists[i], eraseLists[planeIndex]); } @@ -764,7 +912,7 @@ void GfxFrameout::calcLists(ScreenItemListList &drawLists, EraseListList &eraseL } } - for (int i = planeIndex + 1; i < planeCount; ++i) { + for (PlaneList::size_type i = planeIndex + 1; i < planeCount; ++i) { if (_planes[i]->_type == kPlaneTypeTransparent) { _planes[i]->filterUpDrawRects(drawLists[i], drawLists[planeIndex]); } @@ -778,17 +926,19 @@ void GfxFrameout::drawEraseList(const RectList &eraseList, const Plane &plane) { return; } - for (RectList::const_iterator it = eraseList.begin(); it != eraseList.end(); ++it) { - mergeToShowList(**it, _showList, _overdrawThreshold); - _currentBuffer.fillRect(**it, plane._back); + const RectList::size_type eraseListSize = eraseList.size(); + for (RectList::size_type i = 0; i < eraseListSize; ++i) { + mergeToShowList(*eraseList[i], _showList, _overdrawThreshold); + _currentBuffer.fillRect(*eraseList[i], plane._back); } } void GfxFrameout::drawScreenItemList(const DrawList &screenItemList) { - for (DrawList::const_iterator it = screenItemList.begin(); it != screenItemList.end(); ++it) { - DrawItem &drawItem = **it; + const DrawList::size_type drawListSize = screenItemList.size(); + for (DrawList::size_type i = 0; i < drawListSize; ++i) { + const DrawItem &drawItem = *screenItemList[i]; mergeToShowList(drawItem.rect, _showList, _overdrawThreshold); - ScreenItem &screenItem = *drawItem.screenItem; + const ScreenItem &screenItem = *drawItem.screenItem; // TODO: Remove // debug("Drawing item %04x:%04x to %d %d %d %d", PRINT_REG(screenItem._object), PRINT_RECT(drawItem.rect)); CelObj &celObj = *screenItem._celObj; @@ -797,36 +947,65 @@ void GfxFrameout::drawScreenItemList(const DrawList &screenItemList) { } void GfxFrameout::mergeToShowList(const Common::Rect &drawRect, RectList &showList, const int overdrawThreshold) { - Common::Rect merged(drawRect); - - bool didDelete = true; - RectList::size_type count = showList.size(); - while (didDelete && count) { - didDelete = false; - - for (RectList::size_type i = 0; i < count; ++i) { - Common::Rect existing = *showList[i]; - Common::Rect candidate; - candidate.left = MIN(merged.left, existing.left); - candidate.top = MIN(merged.top, existing.top); - candidate.right = MAX(merged.right, existing.right); - candidate.bottom = MAX(merged.bottom, existing.bottom); - - if (candidate.height() * candidate.width() - merged.width() * merged.height() - existing.width() * existing.height() <= overdrawThreshold) { - merged = candidate; - showList.erase_at(i); - didDelete = true; + RectList mergeList; + Common::Rect merged; + mergeList.add(drawRect); + + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + bool didMerge = false; + const Common::Rect &r1 = *mergeList[i]; + if (!r1.isEmpty()) { + for (RectList::size_type j = 0; j < showList.size(); ++j) { + const Common::Rect &r2 = *showList[j]; + if (!r2.isEmpty()) { + merged = r1; + merged.extend(r2); + + int difference = merged.width() * merged.height(); + difference -= r1.width() * r1.height(); + difference -= r2.width() * r2.height(); + if (r1.intersects(r2)) { + const Common::Rect overlap = r1.findIntersectingRect(r2); + difference += overlap.width() * overlap.height(); + } + + if (difference <= overdrawThreshold) { + mergeList.erase_at(i); + showList.erase_at(j); + mergeList.add(merged); + didMerge = true; + break; + } else { + Common::Rect outRects[2]; + int splitCount = splitRectsForRender(*mergeList[i], *showList[j], outRects); + if (splitCount != -1) { + mergeList.add(*mergeList[i]); + mergeList.erase_at(i); + showList.erase_at(j); + didMerge = true; + while (splitCount--) { + mergeList.add(outRects[splitCount]); + } + break; + } + } + } } - } - count = showList.pack(); + if (didMerge) { + showList.pack(); + } + } } - showList.add(merged); + mergeList.pack(); + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + showList.add(*mergeList[i]); + } } void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry *showStyle) { - Palette sourcePalette(*_palette->getNextPalette()); + Palette sourcePalette(_palette->getNextPalette()); alterVmap(sourcePalette, sourcePalette, -1, styleRanges); int16 prevRoom = g_sci->getEngineState()->variables[VAR_GLOBAL][12].toSint16(); @@ -835,8 +1014,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry _showList.add(rect); showBits(); - Common::Rect calcRect(0, 0); - // NOTE: The original engine allocated these as static arrays of 100 // pointers to ScreenItemList / RectList ScreenItemListList screenItemLists; @@ -849,7 +1026,7 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry remapMarkRedraw(); } - calcLists(screenItemLists, eraseLists, calcRect); + calcLists(screenItemLists, eraseLists); for (ScreenItemListList::iterator list = screenItemLists.begin(); list != screenItemLists.end(); ++list) { list->sort(); } @@ -868,7 +1045,7 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry drawScreenItemList(screenItemLists[i]); } - Palette nextPalette(*_palette->getNextPalette()); + Palette nextPalette(_palette->getNextPalette()); if (prevRoom < 1000) { for (int i = 0; i < ARRAYSIZE(sourcePalette.colors); ++i) { @@ -879,6 +1056,7 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry } } else { for (int i = 0; i < ARRAYSIZE(sourcePalette.colors); ++i) { + // TODO: Limiting range 72 to 103 is NOT present in every game if (styleRanges[i] == -1 || (styleRanges[i] == 0 && i > 71 && i < 104)) { sourcePalette.colors[i] = nextPalette.colors[i]; sourcePalette.colors[i].used = true; @@ -909,7 +1087,7 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry remapMarkRedraw(); } - calcLists(screenItemLists, eraseLists, calcRect); + calcLists(screenItemLists, eraseLists); for (ScreenItemListList::iterator list = screenItemLists.begin(); list != screenItemLists.end(); ++list) { list->sort(); } @@ -938,10 +1116,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, const ShowStyleEntry _frameNowVisible = true; } -// TODO: What does the bit masking for the show rects do, -// and does it cause an off-by-one error in rect calculations -// since SOL_Rect is BR inclusive and Common::Rect is BR -// exclusive? void GfxFrameout::showBits() { for (RectList::const_iterator rect = _showList.begin(); rect != _showList.end(); ++rect) { Common::Rect rounded(**rect); @@ -1391,6 +1565,11 @@ void GfxFrameout::kernelFrameOut(const bool shouldShowBits) { frameOut(shouldShowBits); } + + if (_throttleFrameOut) { + g_sci->getEngineState()->speedThrottler(16); + g_sci->getEngineState()->_throttleTrigger = true; + } } #pragma mark - diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h index 8ed95a00de..e736872773 100644 --- a/engines/sci/graphics/frameout.h +++ b/engines/sci/graphics/frameout.h @@ -149,10 +149,7 @@ struct ShowStyleEntry { typedef Common::Array<DrawList> ScreenItemListList; typedef Common::Array<RectList> EraseListList; -class GfxCache; class GfxCoordAdjuster32; -class GfxPaint32; -class GfxPalette; class GfxScreen; /** @@ -162,16 +159,14 @@ class GfxScreen; class GfxFrameout { private: bool _isHiRes; - GfxCache *_cache; GfxCoordAdjuster32 *_coordAdjuster; GfxPalette32 *_palette; ResourceManager *_resMan; GfxScreen *_screen; SegManager *_segMan; - GfxPaint32 *_paint32; public: - GfxFrameout(SegManager *segMan, ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxCache *cache, GfxScreen *screen, GfxPalette32 *palette, GfxPaint32 *paint32); + GfxFrameout(SegManager *segMan, ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxScreen *screen, GfxPalette32 *palette); ~GfxFrameout(); void clear(); @@ -179,12 +174,43 @@ public: void run(); #pragma mark - +#pragma mark Benchmarking +private: + /** + * Optimization to avoid the more expensive object name + * comparision on every call to kAddScreenItem and + * kRemoveScreenItem. + */ + bool _benchmarkingFinished; + + /** + * Whether or not calls to kFrameOut should be framerate + * limited to ~60fps. + */ + bool _throttleFrameOut; + + /** + * Determines whether or not a screen item is the "Fred" + * object. + */ + bool checkForFred(const reg_t object); + +#pragma mark - #pragma mark Screen items private: - void deleteScreenItem(ScreenItem *screenItem, const reg_t plane); void remapMarkRedraw(); public: + /** + * Deletes a screen item from the given plane. + */ + void deleteScreenItem(ScreenItem *screenItem, Plane *plane); + + /** + * Deletes a screen item from the given plane. + */ + void deleteScreenItem(ScreenItem *screenItem, const reg_t plane); + void kernelAddScreenItem(const reg_t object); void kernelUpdateScreenItem(const reg_t object); void kernelDeleteScreenItem(const reg_t object); @@ -350,8 +376,10 @@ private: * over the entire screen for rendering the next frame. * The draw and erase lists in `drawLists` and * `eraseLists` each represent one plane on the screen. + * The optional `eraseRect` argument allows a specific + * area of the screen to be erased. */ - void calcLists(ScreenItemListList &drawLists, EraseListList &eraseLists, const Common::Rect &calcRect); + void calcLists(ScreenItemListList &drawLists, EraseListList &eraseLists, const Common::Rect &eraseRect = Common::Rect()); /** * Erases the areas in the given erase list from the @@ -404,9 +432,10 @@ public: /** * Updates the internal screen buffer for the next * frame. If `shouldShowBits` is true, also sends the - * buffer to hardware. + * buffer to hardware. If `eraseRect` is non-empty, + * it is added to the erase list for this frame. */ - void frameOut(const bool shouldShowBits, const Common::Rect &rect = Common::Rect()); + void frameOut(const bool shouldShowBits, const Common::Rect &eraseRect = Common::Rect()); /** * Modifies the raw pixel data for the next frame with diff --git a/engines/sci/graphics/helpers.h b/engines/sci/graphics/helpers.h index 19dddd74b8..3fcc83c5e2 100644 --- a/engines/sci/graphics/helpers.h +++ b/engines/sci/graphics/helpers.h @@ -191,6 +191,12 @@ struct Buffer : public Graphics::Surface { uint16 scriptWidth; uint16 scriptHeight; + Buffer() : + screenWidth(0), + screenHeight(0), + scriptWidth(320), + scriptHeight(200) {} + Buffer(const uint16 width, const uint16 height, uint8 *const pix) : screenWidth(width), screenHeight(height), @@ -231,7 +237,7 @@ struct Color { return used == other.used && r == other.r && g == other.g && b == other.b; } inline bool operator!=(const Color &other) const { - return !(*this == other); + return !operator==(other); } #endif }; diff --git a/engines/sci/graphics/paint16.h b/engines/sci/graphics/paint16.h index 955cfdec8f..317388b2df 100644 --- a/engines/sci/graphics/paint16.h +++ b/engines/sci/graphics/paint16.h @@ -23,8 +23,6 @@ #ifndef SCI_GRAPHICS_PAINT16_H #define SCI_GRAPHICS_PAINT16_H -#include "sci/graphics/paint.h" - namespace Sci { class GfxPorts; @@ -36,7 +34,7 @@ class GfxView; /** * Paint16 class, handles painting/drawing for SCI16 (SCI0-SCI1.1) games */ -class GfxPaint16 : public GfxPaint { +class GfxPaint16 { public: GfxPaint16(ResourceManager *resMan, SegManager *segMan, GfxCache *cache, GfxPorts *ports, GfxCoordAdjuster *coordAdjuster, GfxScreen *screen, GfxPalette *palette, GfxTransitions *transitions, AudioPlayer *audio); ~GfxPaint16(); diff --git a/engines/sci/graphics/paint32.cpp b/engines/sci/graphics/paint32.cpp index a210a469f1..bfd46484e9 100644 --- a/engines/sci/graphics/paint32.cpp +++ b/engines/sci/graphics/paint32.cpp @@ -20,49 +20,162 @@ * */ -#include "sci/sci.h" -#include "sci/engine/state.h" -#include "sci/engine/selector.h" -#include "sci/graphics/coordadjuster.h" -#include "sci/graphics/cache.h" +#include "graphics/primitives.h" +#include "sci/engine/seg_manager.h" #include "sci/graphics/paint32.h" -#include "sci/graphics/font.h" -#include "sci/graphics/picture.h" -#include "sci/graphics/view.h" -#include "sci/graphics/screen.h" -#include "sci/graphics/palette.h" +#include "sci/graphics/text32.h" namespace Sci { -GfxPaint32::GfxPaint32(ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxScreen *screen, GfxPalette *palette) - : _resMan(resMan), _coordAdjuster(coordAdjuster), _screen(screen), _palette(palette) { +GfxPaint32::GfxPaint32(SegManager *segMan) : + _segMan(segMan) {} + +reg_t GfxPaint32::kernelAddLine(const reg_t planeObject, const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, const uint16 pattern, const uint8 thickness) { + Plane *plane = g_sci->_gfxFrameout->getPlanes().findByObject(planeObject); + if (plane == nullptr) { + error("kAddLine: Plane %04x:%04x not found", PRINT_REG(planeObject)); + } + + Common::Rect gameRect; + BitmapResource bitmap = makeLineBitmap(startPoint, endPoint, priority, color, style, pattern, thickness, gameRect); + + CelInfo32 celInfo; + celInfo.type = kCelTypeMem; + celInfo.bitmap = bitmap.getObject(); + // SSCI stores the line color on `celInfo`, even though + // this is not a `kCelTypeColor`, as a hack so that + // `kUpdateLine` can get the originally used color + celInfo.color = color; + + ScreenItem *screenItem = new ScreenItem(planeObject, celInfo, Common::Rect(startPoint.x, startPoint.y, startPoint.x + bitmap.getWidth(), startPoint.y + bitmap.getHeight())); + screenItem->_priority = priority; + screenItem->_fixedPriority = true; + + plane->_screenItemList.add(screenItem); + + return screenItem->_object; +} + +void GfxPaint32::kernelUpdateLine(ScreenItem *screenItem, Plane *plane, const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, const uint16 pattern, const uint8 thickness) { + + Common::Rect gameRect; + BitmapResource bitmap = makeLineBitmap(startPoint, endPoint, priority, color, style, pattern, thickness, gameRect); + + _segMan->freeHunkEntry(screenItem->_celInfo.bitmap); + screenItem->_celInfo.bitmap = bitmap.getObject(); + screenItem->_celInfo.color = color; + screenItem->_position = startPoint; + screenItem->_priority = priority; + screenItem->update(); } -GfxPaint32::~GfxPaint32() { +void GfxPaint32::kernelDeleteLine(const reg_t screenItemObject, const reg_t planeObject) { + Plane *plane = g_sci->_gfxFrameout->getPlanes().findByObject(planeObject); + if (plane == nullptr) { + return; + } + + ScreenItem *screenItem = plane->_screenItemList.findByObject(screenItemObject); + if (screenItem == nullptr) { + return; + } + + _segMan->freeHunkEntry(screenItem->_celInfo.bitmap); + g_sci->_gfxFrameout->deleteScreenItem(screenItem, plane); } -void GfxPaint32::fillRect(Common::Rect rect, byte color) { - int16 y, x; - Common::Rect clipRect = rect; +void GfxPaint32::plotter(int x, int y, int color, void *data) { + LineProperties &properties = *static_cast<LineProperties *>(data); + byte *pixels = properties.bitmap->getPixels(); + + const uint32 index = properties.bitmap->getWidth() * y + x; + + if (index < properties.bitmap->getDataSize()) { + if (properties.solid) { + pixels[index] = (uint8)color; + return; + } + + if (properties.horizontal && x != properties.lastAddress) { + properties.lastAddress = x; + ++properties.patternIndex; + } else if (!properties.horizontal && y != properties.lastAddress) { + properties.lastAddress = y; + ++properties.patternIndex; + } - clipRect.clip(_screen->getWidth(), _screen->getHeight()); + if (properties.pattern[properties.patternIndex]) { + pixels[index] = (uint8)color; + } - for (y = clipRect.top; y < clipRect.bottom; y++) { - for (x = clipRect.left; x < clipRect.right; x++) { - _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, color, 0, 0); + if (properties.patternIndex == ARRAYSIZE(properties.pattern)) { + properties.patternIndex = 0; } + } else { + warning("GfxPaint32::plotter: Attempted to write out of bounds (%u >= %u)", index, properties.bitmap->getDataSize()); } } -void GfxPaint32::kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo) { - GfxPicture *picture = new GfxPicture(_resMan, _coordAdjuster, 0, _screen, _palette, pictureId, false); +BitmapResource GfxPaint32::makeLineBitmap(const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, uint16 pattern, uint8 thickness, Common::Rect &outRect) { + const uint8 skipColor = color != 250 ? 250 : 0; - picture->draw(animationNr, mirroredFlag, addToFlag, EGApaletteNo); - delete picture; -} + // Thickness is expected to be 2n+1 + thickness = ((MAX((uint8)1, thickness) - 1) | 1); + const uint8 halfThickness = thickness >> 1; + + outRect.left = (startPoint.x < endPoint.x ? startPoint.x : endPoint.x) - halfThickness; + outRect.top = (startPoint.y < endPoint.y ? startPoint.y : endPoint.y) - halfThickness; + outRect.right = (startPoint.x > endPoint.x ? startPoint.x : endPoint.x) + halfThickness + 1; + outRect.bottom = (startPoint.y > endPoint.y ? startPoint.y : endPoint.y) + halfThickness + 1; + + BitmapResource bitmap(_segMan, outRect.width(), outRect.height(), skipColor, 0, 0, g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth, g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight, 0, false); + + byte *pixels = bitmap.getPixels(); + memset(pixels, skipColor, bitmap.getWidth() * bitmap.getHeight()); + + LineProperties properties; + properties.bitmap = &bitmap; + + switch (style) { + case kLineStyleSolid: + pattern = 0xFFFF; + properties.solid = true; + break; + case kLineStyleDashed: + pattern = 0xFF00; + properties.solid = false; + break; + case kLineStylePattern: + properties.solid = pattern == 0xFFFF; + break; + } + + const Common::Rect drawRect( + startPoint.x - outRect.left, + startPoint.y - outRect.top, + endPoint.x - outRect.left, + endPoint.y - outRect.top + ); -void GfxPaint32::kernelGraphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control) { - _screen->drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, color, priority, control); + if (!properties.solid) { + for (int i = 0; i < ARRAYSIZE(properties.pattern); ++i) { + properties.pattern[i] = (pattern & 0x8000); + pattern <<= 1; + } + + properties.patternIndex = 0; + properties.horizontal = ABS(drawRect.right - drawRect.left) > ABS(drawRect.bottom - drawRect.top); + properties.lastAddress = properties.horizontal ? drawRect.left : drawRect.top; + } + + if (thickness <= 1) { + Graphics::drawLine(drawRect.left, drawRect.top, drawRect.right, drawRect.bottom, color, plotter, &properties); + } else { + Graphics::drawThickLine2(drawRect.left, drawRect.top, drawRect.right, drawRect.bottom, thickness, color, plotter, &properties); + } + + return bitmap; } + } // End of namespace Sci diff --git a/engines/sci/graphics/paint32.h b/engines/sci/graphics/paint32.h index e7a3ec256d..6d5a957fcd 100644 --- a/engines/sci/graphics/paint32.h +++ b/engines/sci/graphics/paint32.h @@ -23,30 +23,48 @@ #ifndef SCI_GRAPHICS_PAINT32_H #define SCI_GRAPHICS_PAINT32_H -#include "sci/graphics/paint.h" - namespace Sci { +class BitmapResource; +class Plane; +class ScreenItem; +class SegManager; -class GfxPorts; +enum LineStyle { + kLineStyleSolid, + kLineStyleDashed, + kLineStylePattern +}; /** * Paint32 class, handles painting/drawing for SCI32 (SCI2+) games */ -class GfxPaint32 : public GfxPaint { +class GfxPaint32 { public: - GfxPaint32(ResourceManager *resMan, GfxCoordAdjuster *coordAdjuster, GfxScreen *screen, GfxPalette *palette); - ~GfxPaint32(); + GfxPaint32(SegManager *segMan); - void fillRect(Common::Rect rect, byte color); +private: + SegManager *_segMan; - void kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo); - void kernelGraphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control); +#pragma mark - +#pragma mark Line drawing +public: + reg_t kernelAddLine(const reg_t planeObject, const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, const uint16 pattern, const uint8 thickness); + void kernelUpdateLine(ScreenItem *screenItem, Plane *plane, const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, const uint16 pattern, const uint8 thickness); + void kernelDeleteLine(const reg_t screenItemObject, const reg_t planeObject); private: - ResourceManager *_resMan; - GfxCoordAdjuster *_coordAdjuster; - GfxScreen *_screen; - GfxPalette *_palette; + typedef struct { + BitmapResource *bitmap; + bool pattern[16]; + uint8 patternIndex; + bool solid; + bool horizontal; + int lastAddress; + } LineProperties; + + static void plotter(int x, int y, int color, void *data); + + BitmapResource makeLineBitmap(const Common::Point &startPoint, const Common::Point &endPoint, const int16 priority, const uint8 color, const LineStyle style, const uint16 pattern, const uint8 thickness, Common::Rect &outRect); }; } // End of namespace Sci diff --git a/engines/sci/graphics/palette32.cpp b/engines/sci/graphics/palette32.cpp index 6844011675..0840e82a40 100644 --- a/engines/sci/graphics/palette32.cpp +++ b/engines/sci/graphics/palette32.cpp @@ -28,7 +28,7 @@ #include "sci/event.h" #include "sci/resource.h" #include "sci/graphics/palette32.h" -#include "sci/graphics/remap.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/screen.h" namespace Sci { @@ -78,10 +78,6 @@ inline void mergePaletteInternal(Palette *const to, const Palette *const from) { } } -const Palette *GfxPalette32::getNextPalette() const { - return &_nextPalette; -} - void GfxPalette32::submit(Palette &palette) { // TODO: The resource manager in SCI32 retains raw data of palettes from // the ResourceManager (ResourceMgr) through SegManager (MemoryMgr), and @@ -178,49 +174,6 @@ void GfxPalette32::set(Palette *newPalette, bool force, bool forceRealMerge) { submit(*newPalette); } -// In SCI32 engine this method is SOLPalette::Match(Rgb24 *, int, int *, int *) -// and is used by Remap -// TODO: Anything that calls GfxPalette::matchColor(int, int, int) is going to -// match using an algorithm from SCI16 engine right now. This needs to be -// corrected in the future so either nothing calls -// GfxPalette::matchColor(int, int, int), or it is fixed to match the other -// SCI32 algorithms. -int16 GfxPalette32::matchColor(const byte r, const byte g, const byte b, const int defaultDifference, int &lastCalculatedDifference, const bool *const matchTable) { - int16 bestIndex = -1; - int bestDifference = 0xFFFFF; - int difference = defaultDifference; - - // SQ6 DOS really does check only the first 236 entries - for (int i = 0, channelDifference; i < 236; ++i) { - if (matchTable[i] == 0) { - continue; - } - - difference = _sysPalette.colors[i].r - r; - difference *= difference; - if (bestDifference <= difference) { - continue; - } - channelDifference = _sysPalette.colors[i].g - g; - difference += channelDifference * channelDifference; - if (bestDifference <= difference) { - continue; - } - channelDifference = _sysPalette.colors[i].b - b; - difference += channelDifference * channelDifference; - if (bestDifference <= difference) { - continue; - } - bestDifference = difference; - bestIndex = i; - } - - // NOTE: This value is only valid if the last index to - // perform a difference calculation was the best index - lastCalculatedDifference = difference; - return bestIndex; -} - bool GfxPalette32::updateForFrame() { applyAll(); _versionUpdated = false; diff --git a/engines/sci/graphics/palette32.h b/engines/sci/graphics/palette32.h index a5450776dc..7dda53e5c1 100644 --- a/engines/sci/graphics/palette32.h +++ b/engines/sci/graphics/palette32.h @@ -113,12 +113,12 @@ private: public: virtual void saveLoadWithSerializer(Common::Serializer &s) override; - const Palette *getNextPalette() const; + inline const Palette &getNextPalette() const { return _nextPalette; }; + inline const Palette &getCurrentPalette() const { return _sysPalette; }; bool kernelSetFromResource(GuiResourceId resourceId, bool force) override; int16 kernelFindColor(uint16 r, uint16 g, uint16 b) override; void set(Palette *newPalette, bool force, bool forceRealMerge = false) override; - int16 matchColor(const byte matchRed, const byte matchGreen, const byte matchBlue, const int defaultDifference, int &lastCalculatedDifference, const bool *const matchTable); /** * Submits a palette to display. Entries marked as āusedā in the @@ -133,7 +133,7 @@ public: void applyAll(); #pragma mark - -#pragma mark color look-up +#pragma mark Color look-up private: /** * An optional lookup table used to remap RGB565 colors to a palette @@ -240,6 +240,11 @@ private: * According to SCI engine code, when two cyclers overlap, * a fatal error has occurred and the engine will display * an error and then exit. + * + * The cycle map is also by the color remapping system to + * avoid attempting to remap to palette entries that are + * cycling (so won't be the expected color once the cycler + * runs again). */ bool _cycleMap[256]; inline void clearCycleMap(uint16 fromColor, uint16 numColorsToClear); @@ -257,7 +262,7 @@ public: void cycleAllOff(); void applyAllCycles(); void applyCycles(); - const bool *getCyclemap() { return _cycleMap; } + inline const bool *getCycleMap() const { return _cycleMap; } #pragma mark - #pragma mark Fading diff --git a/engines/sci/graphics/plane32.cpp b/engines/sci/graphics/plane32.cpp index 470986fb3c..175875c414 100644 --- a/engines/sci/graphics/plane32.cpp +++ b/engines/sci/graphics/plane32.cpp @@ -27,7 +27,7 @@ #include "sci/graphics/frameout.h" #include "sci/graphics/lists32.h" #include "sci/graphics/plane32.h" -#include "sci/graphics/remap.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/screen.h" #include "sci/graphics/screen_item32.h" @@ -163,11 +163,15 @@ void Plane::printDebugInfo(Console *con) const { void Plane::addPicInternal(const GuiResourceId pictureId, const Common::Point *position, const bool mirrorX) { uint16 celCount = 1000; + bool transparent = true; for (uint16 celNo = 0; celNo < celCount; ++celNo) { CelObjPic *celObj = new CelObjPic(pictureId, celNo); if (celCount == 1000) { celCount = celObj->_celCount; } + if (!celObj->_transparent) { + transparent = false; + } ScreenItem *screenItem = new ScreenItem(_object, celObj->_info); screenItem->_pictureId = pictureId; @@ -184,6 +188,7 @@ void Plane::addPicInternal(const GuiResourceId pictureId, const Common::Point *p delete screenItem->_celObj; screenItem->_celObj = celObj; } + _type = transparent ? kPlaneTypeTransparentPicture : kPlaneTypePicture; } void Plane::addPic(const GuiResourceId pictureId, const Common::Point &position, const bool mirrorX) { @@ -196,7 +201,7 @@ void Plane::addPic(const GuiResourceId pictureId, const Common::Point &position, void Plane::changePic() { _pictureChanged = false; - if (_type != kPlaneTypePicture) { + if (_type != kPlaneTypePicture && _type != kPlaneTypeTransparentPicture) { return; } @@ -240,16 +245,20 @@ void Plane::deleteAllPics() { #pragma mark Plane - Rendering void Plane::breakDrawListByPlanes(DrawList &drawList, const PlaneList &planeList) const { - int index = planeList.findIndexByObject(_object); + const int nextPlaneIndex = planeList.findIndexByObject(_object) + 1; + const PlaneList::size_type planeCount = planeList.size(); for (DrawList::size_type i = 0; i < drawList.size(); ++i) { - for (PlaneList::size_type j = index + 1; j < planeList.size(); ++j) { - if (planeList[j]->_type != kPlaneTypeTransparent) { - Common::Rect ptr[4]; - int count = splitRects(drawList[i]->rect, planeList[j]->_screenRect, ptr); - if (count != -1) { - for (int k = count - 1; k >= 0; --k) { - drawList.add(drawList[i]->screenItem, ptr[k]); + for (PlaneList::size_type j = nextPlaneIndex; j < planeCount; ++j) { + if ( + planeList[j]->_type != kPlaneTypeTransparent && + planeList[j]->_type != kPlaneTypeTransparentPicture + ) { + Common::Rect outRects[4]; + int splitCount = splitRects(drawList[i]->rect, planeList[j]->_screenRect, outRects); + if (splitCount != -1) { + while (splitCount--) { + drawList.add(drawList[i]->screenItem, outRects[splitCount]); } drawList.erase_at(i); @@ -262,17 +271,20 @@ void Plane::breakDrawListByPlanes(DrawList &drawList, const PlaneList &planeList } void Plane::breakEraseListByPlanes(RectList &eraseList, const PlaneList &planeList) const { - int index = planeList.findIndexByObject(_object); + const int nextPlaneIndex = planeList.findIndexByObject(_object) + 1; + const PlaneList::size_type planeCount = planeList.size(); for (RectList::size_type i = 0; i < eraseList.size(); ++i) { - for (PlaneList::size_type j = index + 1; j < planeList.size(); ++j) { - if (planeList[j]->_type != kPlaneTypeTransparent) { - Common::Rect ptr[4]; - - int count = splitRects(*eraseList[i], planeList[j]->_screenRect, ptr); - if (count != -1) { - for (int k = count - 1; k >= 0; --k) { - eraseList.add(ptr[k]); + for (PlaneList::size_type j = nextPlaneIndex; j < planeCount; ++j) { + if ( + planeList[j]->_type != kPlaneTypeTransparent && + planeList[j]->_type != kPlaneTypeTransparentPicture + ) { + Common::Rect outRects[4]; + int splitCount = splitRects(*eraseList[i], planeList[j]->_screenRect, outRects); + if (splitCount != -1) { + while (splitCount--) { + eraseList.add(outRects[splitCount]); } eraseList.erase_at(i); @@ -285,94 +297,109 @@ void Plane::breakEraseListByPlanes(RectList &eraseList, const PlaneList &planeLi } void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList &drawList, RectList &eraseList) { - ScreenItemList::size_type planeItemCount = _screenItemList.size(); - ScreenItemList::size_type visiblePlaneItemCount = visiblePlane._screenItemList.size(); + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + const ScreenItemList::size_type visiblePlaneItemCount = visiblePlane._screenItemList.size(); + + for (ScreenItemList::size_type i = 0; i < screenItemCount; ++i) { + // Items can be added to ScreenItemList and we don't want to process + // those new items, but the list also can grow smaller, so we need + // to check that we are still within the upper bound of the list and + // quit if we aren't any more + if (i >= _screenItemList.size()) { + break; + } + + ScreenItem *item = _screenItemList[i]; + if (item == nullptr) { + continue; + } - for (ScreenItemList::size_type i = 0; i < planeItemCount; ++i) { - ScreenItem *vitem = nullptr; // NOTE: The original engine used an array without bounds checking // so could just get the visible screen item directly; we need to // verify that the index is actually within the valid range for // the visible plane before accessing the item to avoid a range // error. + const ScreenItem *visibleItem = nullptr; if (i < visiblePlaneItemCount) { - vitem = visiblePlane._screenItemList[i]; + visibleItem = visiblePlane._screenItemList[i]; } - ScreenItem *item = _screenItemList[i]; - if (i < _screenItemList.size() && item != nullptr) { - if (item->_deleted) { - // add item's rect to erase list - if ( - i < visiblePlane._screenItemList.size() && - vitem != nullptr && - !vitem->_screenRect.isEmpty() - ) { - if (g_sci->_gfxRemap32->getRemapCount()) { - mergeToRectList(vitem->_screenRect, eraseList); - } else { - eraseList.add(vitem->_screenRect); - } - } - } else if (item->_created) { - // add item to draw list - item->calcRects(*this); - - if(!item->_screenRect.isEmpty()) { - if (g_sci->_gfxRemap32->getRemapCount()) { - drawList.add(item, item->_screenRect); - mergeToRectList(item->_screenRect, eraseList); - } else { - drawList.add(item, item->_screenRect); - } - } - } else if (item->_updated) { - // add old rect to erase list, new item to draw list - item->calcRects(*this); + // Keep erase rects for this screen item from drawing outside + // of its owner plane + Common::Rect visibleItemScreenRect; + if (visibleItem != nullptr) { + visibleItemScreenRect = visibleItem->_screenRect; + visibleItemScreenRect.clip(_screenRect); + } + + if (item->_deleted) { + // Add item's rect to erase list + if ( + visibleItem != nullptr && + !visibleItemScreenRect.isEmpty() + ) { if (g_sci->_gfxRemap32->getRemapCount()) { - // if item and vitem don't overlap, ... - if (item->_screenRect.isEmpty() || - i >= visiblePlaneItemCount || - vitem == nullptr || - vitem->_screenRect.isEmpty() || - !vitem->_screenRect.intersects(item->_screenRect) - ) { - // add item to draw list, and old rect to erase list - if (!item->_screenRect.isEmpty()) { - drawList.add(item, item->_screenRect); - mergeToRectList(item->_screenRect, eraseList); - } - if ( - i < visiblePlaneItemCount && - vitem != nullptr && - !vitem->_screenRect.isEmpty() - ) { - mergeToRectList(vitem->_screenRect, eraseList); - } - } else { - // otherwise, add bounding box of old+new to erase list, - // and item to draw list + mergeToRectList(visibleItemScreenRect, eraseList); + } else { + eraseList.add(visibleItemScreenRect); + } + } + } - // TODO: This was changed from disasm, verify please! - Common::Rect extendedScreenRect = vitem->_screenRect; - extendedScreenRect.extend(item->_screenRect); + if (!item->_created && !item->_updated) { + continue; + } - drawList.add(item, item->_screenRect); - mergeToRectList(extendedScreenRect, eraseList); - } + item->calcRects(*this); + const Common::Rect itemScreenRect(item->_screenRect); + + if (item->_created) { + // Add item to draw list + if(!itemScreenRect.isEmpty()) { + if (g_sci->_gfxRemap32->getRemapCount()) { + drawList.add(item, itemScreenRect); + mergeToRectList(itemScreenRect, eraseList); } else { - // if no active remaps, just add item to draw list and old rect - // to erase list - if (!item->_screenRect.isEmpty()) { - drawList.add(item, item->_screenRect); + drawList.add(item, itemScreenRect); + } + } + } else { + // Add old rect to erase list, new item to draw list + + if (g_sci->_gfxRemap32->getRemapCount()) { + // If item and visibleItem don't overlap... + if (itemScreenRect.isEmpty() || + visibleItem == nullptr || + visibleItemScreenRect.isEmpty() || + !visibleItemScreenRect.intersects(itemScreenRect) + ) { + // ...add item to draw list, and old rect to erase list... + if (!itemScreenRect.isEmpty()) { + drawList.add(item, itemScreenRect); + mergeToRectList(itemScreenRect, eraseList); } - if ( - i < visiblePlaneItemCount && - vitem != nullptr && - !vitem->_screenRect.isEmpty() - ) { - eraseList.add(vitem->_screenRect); + if (visibleItem != nullptr && !visibleItemScreenRect.isEmpty()) { + mergeToRectList(visibleItemScreenRect, eraseList); } + } else { + // ...otherwise, add bounding box of old+new to erase list, + // and item to draw list + Common::Rect extendedScreenRect = visibleItemScreenRect; + extendedScreenRect.extend(itemScreenRect); + + drawList.add(item, itemScreenRect); + mergeToRectList(extendedScreenRect, eraseList); + } + } else { + // If no active remaps, just add item to draw list and old rect + // to erase list + + // TODO: SCI3 update rects for VMD? + if (!itemScreenRect.isEmpty()) { + drawList.add(item, itemScreenRect); + } + if (visibleItem != nullptr && !visibleItemScreenRect.isEmpty()) { + eraseList.add(visibleItemScreenRect); } } } @@ -385,40 +412,44 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList // We store the current size of the drawlist, as we want to loop // over the currently inserted entries later. DrawList::size_type drawListSizePrimary = drawList.size(); + const RectList::size_type eraseListCount = eraseList.size(); - if (/* TODO: dword_C6288 */ false) { // "high resolution pictures"???? + // TODO: Figure out which games need which rendering method + if (/* TODO: dword_C6288 */ false) { // "high resolution pictures" _screenItemList.sort(); - bool encounteredPic = false; - bool v81 = false; + bool pictureDrawn = false; + bool screenItemDrawn = false; - for (RectList::size_type i = 0; i < eraseList.size(); ++i) { - const Common::Rect *rect = eraseList[i]; + for (RectList::size_type i = 0; i < eraseListCount; ++i) { + const Common::Rect &rect = *eraseList[i]; - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { ScreenItem *item = _screenItemList[j]; - if (j < _screenItemList.size() && item != nullptr) { - if (rect->intersects(item->_screenRect)) { - const Common::Rect intersection = rect->findIntersectingRect(item->_screenRect); - if (!item->_deleted) { - if (encounteredPic) { - if (item->_celInfo.type == kCelTypePic) { - if (v81 || item->_celInfo.celNo == 0) { - drawList.add(item, intersection); - } - } else { - if (!item->_updated && !item->_created) { - drawList.add(item, intersection); - } - v81 = true; + if (item == nullptr) { + continue; + } + + if (rect.intersects(item->_screenRect)) { + const Common::Rect intersection = rect.findIntersectingRect(item->_screenRect); + if (!item->_deleted) { + if (pictureDrawn) { + if (item->_celInfo.type == kCelTypePic) { + if (screenItemDrawn || item->_celInfo.celNo == 0) { + mergeToDrawList(j, intersection, drawList); } } else { if (!item->_updated && !item->_created) { - drawList.add(item, intersection); - } - if (item->_celInfo.type == kCelTypePic) { - encounteredPic = true; + mergeToDrawList(j, intersection, drawList); } + screenItemDrawn = true; + } + } else { + if (!item->_updated && !item->_created) { + mergeToDrawList(j, intersection, drawList); + } + if (item->_celInfo.type == kCelTypePic) { + pictureDrawn = true; } } } @@ -428,22 +459,23 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList _screenItemList.unsort(); } else { - // add all items overlapping the erase list to the draw list - for (RectList::size_type i = 0; i < eraseList.size(); ++i) { - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { + // Add all items overlapping the erase list to the draw list + for (RectList::size_type i = 0; i < eraseListCount; ++i) { + const Common::Rect &rect = *eraseList[i]; + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { ScreenItem *item = _screenItemList[j]; if ( item != nullptr && !item->_created && !item->_updated && !item->_deleted && - eraseList[i]->intersects(item->_screenRect) + rect.intersects(item->_screenRect) ) { - drawList.add(item, eraseList[i]->findIntersectingRect(item->_screenRect)); + drawList.add(item, rect.findIntersectingRect(item->_screenRect)); } } } } - if (g_sci->_gfxRemap32->getRemapCount() == 0) { // no remaps active? + if (g_sci->_gfxRemap32->getRemapCount() == 0) { // Add all items that overlap with items in the drawlist and have higher // priority. @@ -451,23 +483,28 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList // those that were added because of the erase list in the previous loop, // or those to be added in this loop. for (DrawList::size_type i = 0; i < drawListSizePrimary; ++i) { - DrawItem *dli = drawList[i]; + const DrawItem *drawListEntry = nullptr; + if (i < drawList.size()) { + drawListEntry = drawList[i]; + } - for (ScreenItemList::size_type j = 0; j < planeItemCount; ++j) { - ScreenItem *sli = _screenItemList[j]; + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { + ScreenItem *newItem = nullptr; + if (j < _screenItemList.size()) { + newItem = _screenItemList[j]; + } if ( - i < drawList.size() && dli != nullptr && - j < _screenItemList.size() && sli != nullptr && - !sli->_created && !sli->_updated && !sli->_deleted + drawListEntry != nullptr && newItem != nullptr && + !newItem->_created && !newItem->_updated && !newItem->_deleted ) { - ScreenItem *item = dli->screenItem; + const ScreenItem *drawnItem = drawListEntry->screenItem; if ( - (sli->_priority > item->_priority || (sli->_priority == item->_priority && sli->_object > item->_object)) && - dli->rect.intersects(sli->_screenRect) + (newItem->_priority > drawnItem->_priority || (newItem->_priority == drawnItem->_priority && newItem->_object > drawnItem->_object)) && + drawListEntry->rect.intersects(newItem->_screenRect) ) { - drawList.add(sli, dli->rect.findIntersectingRect(sli->_screenRect)); + mergeToDrawList(j, drawListEntry->rect.findIntersectingRect(newItem->_screenRect), drawList); } } } @@ -475,14 +512,11 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList } decrementScreenItemArrayCounts(&visiblePlane, false); - _screenItemList.pack(); - visiblePlane._screenItemList.pack(); } void Plane::decrementScreenItemArrayCounts(Plane *visiblePlane, const bool forceUpdate) { - // The size of the screenItemList may change, so it is - // critical to re-check the size on each iteration - for (ScreenItemList::size_type i = 0; i < _screenItemList.size(); ++i) { + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type i = 0; i < screenItemCount; ++i) { ScreenItem *item = _screenItemList[i]; if (item != nullptr) { @@ -495,7 +529,7 @@ void Plane::decrementScreenItemArrayCounts(Plane *visiblePlane, const bool force visiblePlane->_screenItemList.findByObject(item->_object) != nullptr ) ) { - *visiblePlane->_screenItemList[i] = *_screenItemList[i]; + *visiblePlane->_screenItemList[i] = *item; } if (item->_updated) { @@ -514,175 +548,180 @@ void Plane::decrementScreenItemArrayCounts(Plane *visiblePlane, const bool force if (item->_deleted) { item->_deleted--; if (!item->_deleted) { - visiblePlane->_screenItemList.erase_at(i); + if (visiblePlane != nullptr && visiblePlane->_screenItemList.findByObject(item->_object) != nullptr) { + visiblePlane->_screenItemList.erase_at(i); + } _screenItemList.erase_at(i); } } } } + + _screenItemList.pack(); + if (visiblePlane != nullptr) { + visiblePlane->_screenItemList.pack(); + } } -void Plane::filterDownEraseRects(DrawList &drawList, RectList &eraseList, RectList &transparentEraseList) const { - if (_type == kPlaneTypeTransparent) { - for (RectList::size_type i = 0; i < transparentEraseList.size(); ++i) { - const Common::Rect *r = transparentEraseList[i]; - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { - ScreenItem *item = _screenItemList[j]; - if (item != nullptr) { - if (r->intersects(item->_screenRect)) { - mergeToDrawList(j, *r, drawList); - } +void Plane::filterDownEraseRects(DrawList &drawList, RectList &eraseList, RectList &higherEraseList) const { + const RectList::size_type higherEraseCount = higherEraseList.size(); + + if (_type == kPlaneTypeTransparent || _type == kPlaneTypeTransparentPicture) { + for (RectList::size_type i = 0; i < higherEraseCount; ++i) { + const Common::Rect &r = *higherEraseList[i]; + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { + const ScreenItem *item = _screenItemList[j]; + if (item != nullptr && r.intersects(item->_screenRect)) { + mergeToDrawList(j, r, drawList); } } } } else { - for (RectList::size_type i = 0; i < transparentEraseList.size(); ++i) { - Common::Rect *r = transparentEraseList[i]; - if (r->intersects(_screenRect)) { - r->clip(_screenRect); - mergeToRectList(*r, eraseList); - - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { - ScreenItem *item = _screenItemList[j]; - - if (item != nullptr) { - if (r->intersects(item->_screenRect)) { - mergeToDrawList(j, *r, drawList); - } + for (RectList::size_type i = 0; i < higherEraseCount; ++i) { + Common::Rect r = *higherEraseList[i]; + if (r.intersects(_screenRect)) { + r.clip(_screenRect); + mergeToRectList(r, eraseList); + + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { + const ScreenItem *item = _screenItemList[j]; + if (item != nullptr && r.intersects(item->_screenRect)) { + mergeToDrawList(j, r, drawList); } } - Common::Rect ptr[4]; - const Common::Rect *r2 = transparentEraseList[i]; - int count = splitRects(*r2, *r, ptr); - for (int k = count - 1; k >= 0; --k) { - transparentEraseList.add(ptr[k]); + Common::Rect outRects[4]; + const Common::Rect &r2 = *higherEraseList[i]; + int splitCount = splitRects(r2, r, outRects); + while (splitCount--) { + higherEraseList.add(outRects[splitCount]); } - transparentEraseList.erase_at(i); + higherEraseList.erase_at(i); } } - transparentEraseList.pack(); + higherEraseList.pack(); } } -void Plane::filterUpDrawRects(DrawList &transparentDrawList, const DrawList &drawList) const { - for (DrawList::size_type i = 0; i < drawList.size(); ++i) { - const Common::Rect &r = drawList[i]->rect; - - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { - ScreenItem *item = _screenItemList[j]; - if (item != nullptr) { - if (r.intersects(item->_screenRect)) { - mergeToDrawList(j, r, transparentDrawList); - } +void Plane::filterUpDrawRects(DrawList &drawList, const DrawList &lowerDrawList) const { + const DrawList::size_type lowerDrawCount = lowerDrawList.size(); + for (DrawList::size_type i = 0; i < lowerDrawCount; ++i) { + const Common::Rect &r = lowerDrawList[i]->rect; + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { + const ScreenItem *item = _screenItemList[j]; + if (item != nullptr && r.intersects(item->_screenRect)) { + mergeToDrawList(j, r, drawList); } } } } -void Plane::filterUpEraseRects(DrawList &drawList, RectList &eraseList) const { - for (RectList::size_type i = 0; i < eraseList.size(); ++i) { - const Common::Rect &r = *eraseList[i]; - for (ScreenItemList::size_type j = 0; j < _screenItemList.size(); ++j) { - ScreenItem *item = _screenItemList[j]; - - if (item != nullptr) { - if (r.intersects(item->_screenRect)) { - mergeToDrawList(j, r, drawList); - } +void Plane::filterUpEraseRects(DrawList &drawList, const RectList &lowerEraseList) const { + const RectList::size_type lowerEraseCount = lowerEraseList.size(); + for (RectList::size_type i = 0; i < lowerEraseCount; ++i) { + const Common::Rect &r = *lowerEraseList[i]; + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type j = 0; j < screenItemCount; ++j) { + const ScreenItem *item = _screenItemList[j]; + if (item != nullptr && r.intersects(item->_screenRect)) { + mergeToDrawList(j, r, drawList); } } } } void Plane::mergeToDrawList(const ScreenItemList::size_type index, const Common::Rect &rect, DrawList &drawList) const { - RectList rects; - - ScreenItem *item = _screenItemList[index]; - Common::Rect r = item->_screenRect; + RectList mergeList; + ScreenItem &item = *_screenItemList[index]; + Common::Rect r = item._screenRect; r.clip(rect); - rects.add(r); + mergeList.add(r); - for (RectList::size_type i = 0; i < rects.size(); ++i) { - r = *rects[i]; + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + r = *mergeList[i]; - for (DrawList::size_type j = 0; j < drawList.size(); ++j) { - const DrawItem *drawitem = drawList[j]; - if (item->_object == drawitem->screenItem->_object) { - if (drawitem->rect.contains(r)) { - rects.erase_at(i); + const DrawList::size_type drawCount = drawList.size(); + for (DrawList::size_type j = 0; j < drawCount; ++j) { + const DrawItem &drawItem = *drawList[j]; + if (item._object == drawItem.screenItem->_object) { + if (drawItem.rect.contains(r)) { + mergeList.erase_at(i); break; } Common::Rect outRects[4]; - const int count = splitRects(r, drawitem->rect, outRects); - if (count != -1) { - for (int k = count - 1; k >= 0; --k) { - rects.add(outRects[k]); + int splitCount = splitRects(r, drawItem.rect, outRects); + if (splitCount != -1) { + while (splitCount--) { + mergeList.add(outRects[splitCount]); } - rects.erase_at(i); + mergeList.erase_at(i); // proceed to the next rect - r = *rects[++i]; + r = *mergeList[++i]; } } } } - rects.pack(); + mergeList.pack(); - for (RectList::size_type i = 0; i < rects.size(); ++i) { - drawList.add(item, *rects[i]); + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + drawList.add(&item, *mergeList[i]); } } -void Plane::mergeToRectList(const Common::Rect &rect, RectList &rectList) const { - RectList temp; - temp.add(rect); +void Plane::mergeToRectList(const Common::Rect &rect, RectList &eraseList) const { + RectList mergeList; + Common::Rect r; + mergeList.add(rect); - for (RectList::size_type i = 0; i < temp.size(); ++i) { - Common::Rect r = *temp[i]; + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + r = *mergeList[i]; - for (RectList::size_type j = 0; j < rectList.size(); ++j) { - const Common::Rect *innerRect = rectList[j]; - if (innerRect->contains(r)) { - temp.erase_at(i); + const RectList::size_type eraseCount = eraseList.size(); + for (RectList::size_type j = 0; j < eraseCount; ++j) { + const Common::Rect &eraseRect = *eraseList[j]; + if (eraseRect.contains(r)) { + mergeList.erase_at(i); break; } - Common::Rect out[4]; - const int count = splitRects(r, *innerRect, out); - if (count != -1) { - for (int k = count - 1; k >= 0; --k) { - temp.add(out[k]); + Common::Rect outRects[4]; + int splitCount = splitRects(r, eraseRect, outRects); + if (splitCount != -1) { + while (splitCount--) { + mergeList.add(outRects[splitCount]); } - temp.erase_at(i); + mergeList.erase_at(i); // proceed to the next rect - r = *temp[++i]; + r = *mergeList[++i]; } } } - temp.pack(); + mergeList.pack(); - for (RectList::size_type i = 0; i < temp.size(); ++i) { - rectList.add(*temp[i]); + for (RectList::size_type i = 0; i < mergeList.size(); ++i) { + eraseList.add(*mergeList[i]); } } void Plane::redrawAll(Plane *visiblePlane, const PlaneList &planeList, DrawList &drawList, RectList &eraseList) { - for (ScreenItemList::const_iterator screenItemPtr = _screenItemList.begin(); screenItemPtr != _screenItemList.end(); ++screenItemPtr) { - if (*screenItemPtr != nullptr) { - ScreenItem &screenItem = **screenItemPtr; - if (!screenItem._deleted) { - screenItem.calcRects(*this); - if (!screenItem._screenRect.isEmpty()) { - drawList.add(&screenItem, screenItem._screenRect); - } + const ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type i = 0; i < screenItemCount; ++i) { + ScreenItem *screenItem = _screenItemList[i]; + if (screenItem != nullptr && !screenItem->_deleted) { + screenItem->calcRects(*this); + if (!screenItem->_screenRect.isEmpty()) { + mergeToDrawList(i, screenItem->_screenRect, drawList); } } } @@ -696,21 +735,27 @@ void Plane::redrawAll(Plane *visiblePlane, const PlaneList &planeList, DrawList breakDrawListByPlanes(drawList, planeList); --_redrawAllCount; decrementScreenItemArrayCounts(visiblePlane, true); - _screenItemList.pack(); - if (visiblePlane != nullptr) { - visiblePlane->_screenItemList.pack(); - } } void Plane::setType() { - if (_pictureId == kPlanePicOpaque) { - _type = kPlaneTypeOpaque; - } else if (_pictureId == kPlanePicTransparent) { - _type = kPlaneTypeTransparent; - } else if (_pictureId == kPlanePicColored) { + switch (_pictureId) { + case kPlanePicColored: _type = kPlaneTypeColored; - } else { - _type = kPlaneTypePicture; + break; + case kPlanePicTransparent: + _type = kPlaneTypeTransparent; + break; + case kPlanePicOpaque: + _type = kPlaneTypeOpaque; + break; + case kPlanePicTransparentPicture: + _type = kPlaneTypeTransparentPicture; + break; + default: + if (_type != kPlaneTypeTransparentPicture) { + _type = kPlaneTypePicture; + } + break; } } @@ -731,10 +776,12 @@ void Plane::sync(const Plane *other, const Common::Rect &screenRect) { _planeRect.right > other->_planeRect.right || _planeRect.bottom > other->_planeRect.bottom ) { + // the plane moved or got larger _redrawAllCount = g_sci->_gfxFrameout->getScreenCount(); - _updated = g_sci->_gfxFrameout->getScreenCount(); + _moved = g_sci->_gfxFrameout->getScreenCount(); } else if (_planeRect != other->_planeRect) { - _updated = g_sci->_gfxFrameout->getScreenCount(); + // the plane got smaller + _moved = g_sci->_gfxFrameout->getScreenCount(); } if (_priority != other->_priority) { @@ -755,7 +802,7 @@ void Plane::sync(const Plane *other, const Common::Rect &screenRect) { _deleted = 0; if (_created == 0) { - _moved = g_sci->_gfxFrameout->getScreenCount(); + _updated = g_sci->_gfxFrameout->getScreenCount(); } convertGameRectToPlaneRect(); @@ -801,18 +848,22 @@ void Plane::scrollScreenItems(const int16 deltaX, const int16 deltaY, const bool } void Plane::remapMarkRedraw() { - for (ScreenItemList::const_iterator screenItemPtr = _screenItemList.begin(); screenItemPtr != _screenItemList.end(); ++screenItemPtr) { - if (*screenItemPtr != nullptr) { - ScreenItem &screenItem = **screenItemPtr; - if (screenItem.getCelObj()._remap && !screenItem._deleted && !screenItem._created) { - screenItem._updated = g_sci->_gfxFrameout->getScreenCount(); - } + ScreenItemList::size_type screenItemCount = _screenItemList.size(); + for (ScreenItemList::size_type i = 0; i < screenItemCount; ++i) { + ScreenItem *screenItem = _screenItemList[i]; + if ( + screenItem != nullptr && + !screenItem->_deleted && !screenItem->_created && + screenItem->getCelObj()._remap + ) { + screenItem->_updated = g_sci->_gfxFrameout->getScreenCount(); } } } #pragma mark - #pragma mark PlaneList + void PlaneList::add(Plane *plane) { for (iterator it = begin(); it != end(); ++it) { if ((*it)->_priority > plane->_priority) { diff --git a/engines/sci/graphics/plane32.h b/engines/sci/graphics/plane32.h index c93fb5b64e..acd535e75a 100644 --- a/engines/sci/graphics/plane32.h +++ b/engines/sci/graphics/plane32.h @@ -32,19 +32,21 @@ namespace Sci { enum PlaneType { - kPlaneTypeColored = 0, - kPlaneTypePicture = 1, - kPlaneTypeTransparent = 2, - kPlaneTypeOpaque = 3 + kPlaneTypeColored = 0, + kPlaneTypePicture = 1, + kPlaneTypeTransparent = 2, + kPlaneTypeOpaque = 3, + kPlaneTypeTransparentPicture = 4 }; enum PlanePictureCodes { - // NOTE: Any value at or below 65532 means the plane + // NOTE: Any value at or below 65531 means the plane // is a kPlaneTypePicture. - kPlanePic = 65532, - kPlanePicOpaque = 65533, - kPlanePicTransparent = 65534, - kPlanePicColored = 65535 + kPlanePic = 65531, + kPlanePicTransparentPicture = 65532, + kPlanePicOpaque = 65533, + kPlanePicTransparent = 65534, + kPlanePicColored = 65535 }; #pragma mark - @@ -62,7 +64,14 @@ public: #pragma mark DrawList struct DrawItem { + /** + * The screen item to draw. + */ ScreenItem *screenItem; + + /** + * The target rectangle of the draw operation. + */ Common::Rect rect; inline bool operator<(const DrawItem &other) const { @@ -189,16 +198,15 @@ public: * not match * - `deleted` is set when the plane is deleted by a * kernel call - * - `moved` is set when the plane is synchronised from - * another plane and is not already in the "created" - * state + * - `moved` is set when the plane has been moved or + * resized */ int _created, _updated, _deleted, _moved; /** * The vanishing point for the plane. Used when - * calculating the correct scaling of the plane's screen - * items according to their position. + * automatically calculating the correct scaling of the + * plane's screen items according to their position. */ Common::Point _vanishingPoint; @@ -358,42 +366,33 @@ public: private: /** * Splits all rects in the given draw list at the edges - * of all non-transparent planes above the current - * plane. + * of all higher-priority, non-transparent, intersecting + * planes. */ void breakDrawListByPlanes(DrawList &drawList, const PlaneList &planeList) const; /** - * Splits all rects in the given erase list rects at the - * edges of all non-transparent planes above the current - * plane. + * Splits all rects in the given erase list at the + * edges of higher-priority, non-transparent, + * intersecting planes. */ void breakEraseListByPlanes(RectList &eraseList, const PlaneList &planeList) const; /** - * Synchronises changes to screen items from the current - * plane to the visible plane and deletes screen items - * from the current plane that have been marked as - * deleted. If `forceUpdate` is true, all screen items - * on the visible plane will be updated, even if they - * are not marked as having changed. - */ - void decrementScreenItemArrayCounts(Plane *visiblePlane, const bool forceUpdate); - - /** - * Merges the screen item from this plane at the given - * index into the given draw list, clipped to the given - * rect. TODO: Finish documenting + * Adds the screen item at `index` into `drawList`, + * ensuring it is only drawn within the bounds of + * `rect`. If an existing draw list entry exists + * for this screen item, it will be modified. + * Otherwise, a new entry will be added. */ void mergeToDrawList(const DrawList::size_type index, const Common::Rect &rect, DrawList &drawList) const; /** - * Adds the given rect into the given rect list, - * merging it with other rects already inside the list, - * if possible, to avoid overdraw. TODO: Finish - * documenting + * Merges `rect` with an existing rect in `eraseList`, + * if possible. Otherwise, adds the rect as a new entry + * to `eraseList`. */ - void mergeToRectList(const Common::Rect &rect, RectList &rectList) const; + void mergeToRectList(const Common::Rect &rect, RectList &eraseList) const; public: /** @@ -406,19 +405,73 @@ public: void calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList &drawList, RectList &eraseList); /** - * TODO: Documentation + * Synchronises changes to screen items from the current + * plane to the visible plane and deletes screen items + * from the current plane that have been marked as + * deleted. If `forceUpdate` is true, all screen items + * on the visible plane will be updated, even if they + * are not marked as having changed. + */ + void decrementScreenItemArrayCounts(Plane *visiblePlane, const bool forceUpdate); + + /** + * This method is called from the highest priority plane + * to the lowest priority plane. + * + * Adds screen items from this plane to the draw list + * that must be redrawn because they intersect entries + * in the `higherEraseList`. + * + * If this plane is opaque, all intersecting erase rects + * in `lowerEraseList` are removed, as they would be + * completely overwritten by the contents of this plane. + * + * If this plane is transparent, erase rects from the + * `lowerEraseList` are added to the erase list for this + * plane, so that lower planes. + * + * @param drawList The draw list for this plane. + * @param eraseList The erase list for this plane. + * @param higherEraseList The erase list for a plane + * above this plane. */ - void filterDownEraseRects(DrawList &drawList, RectList &eraseList, RectList &transparentEraseList) const; + void filterDownEraseRects(DrawList &drawList, RectList &eraseList, RectList &higherEraseList) const; /** - * TODO: Documentation + * This method is called from the lowest priority plane + * to the highest priority plane. + * + * Adds screen items from this plane to the draw list + * that must be drawn because the lower plane is being + * redrawn and potentially transparent screen items + * from this plane would draw over the lower priority + * plane's screen items. + * + * This method applies only to transparent planes. + * + * @param drawList The draw list for this plane. + * @param eraseList The erase list for a plane below + * this plane. */ - void filterUpEraseRects(DrawList &drawList, RectList &eraseList) const; + void filterUpEraseRects(DrawList &drawList, const RectList &lowerEraseList) const; /** - * TODO: Documentation + * This method is called from the lowest priority plane + * to the highest priority plane. + * + * Adds screen items from this plane to the draw list + * that must be drawn because the lower plane is being + * redrawn and potentially transparent screen items + * from this plane would draw over the lower priority + * plane's screen items. + * + * This method applies only to transparent planes. + * + * @param drawList The draw list for this plane. + * @param lowerDrawList The draw list for a plane below + * this plane. */ - void filterUpDrawRects(DrawList &transparentDrawList, const DrawList &drawList) const; + void filterUpDrawRects(DrawList &drawList, const DrawList &lowerDrawList) const; /** * Updates all of the plane's non-deleted screen items @@ -442,6 +495,8 @@ private: using PlaneListBase::push_back; public: + typedef int size_type; + // A method for finding the index of a plane inside a // PlaneList is used because entries in the main plane // list and visible plane list of GfxFrameout are diff --git a/engines/sci/graphics/remap.cpp b/engines/sci/graphics/remap.cpp index e331eaf971..2abf03ea29 100644 --- a/engines/sci/graphics/remap.cpp +++ b/engines/sci/graphics/remap.cpp @@ -21,31 +21,23 @@ */ #include "sci/sci.h" -#include "sci/resource.h" #include "sci/graphics/palette.h" -#include "sci/graphics/palette32.h" #include "sci/graphics/remap.h" #include "sci/graphics/screen.h" namespace Sci { -#pragma mark - -#pragma mark SCI16 remapping (QFG4 demo) - GfxRemap::GfxRemap(GfxPalette *palette) : _palette(palette) { _remapOn = false; resetRemapping(); } -GfxRemap::~GfxRemap() { -} - byte GfxRemap::remapColor(byte remappedColor, byte screenColor) { assert(_remapOn); - if (_remappingType[remappedColor] == kRemappingByRange) + if (_remappingType[remappedColor] == kRemapByRange) return _remappingByRange[screenColor]; - else if (_remappingType[remappedColor] == kRemappingByPercent) + else if (_remappingType[remappedColor] == kRemapByPercent) return _remappingByPercent[screenColor]; else error("remapColor(): Color %d isn't remapped", remappedColor); @@ -58,7 +50,7 @@ void GfxRemap::resetRemapping() { _remappingPercentToSet = 0; for (int i = 0; i < 256; i++) { - _remappingType[i] = kRemappingNone; + _remappingType[i] = kRemapNone; _remappingByPercent[i] = i; _remappingByRange[i] = i; } @@ -80,7 +72,7 @@ void GfxRemap::setRemappingPercent(byte color, byte percent) { _remappingByPercent[i] = _palette->kernelFindColor(r, g, b); } - _remappingType[color] = kRemappingByPercent; + _remappingType[color] = kRemapByPercent; } void GfxRemap::setRemappingRange(byte color, byte from, byte to, byte base) { @@ -90,7 +82,7 @@ void GfxRemap::setRemappingRange(byte color, byte from, byte to, byte base) { _remappingByRange[i] = i + base; } - _remappingType[color] = kRemappingByRange; + _remappingType[color] = kRemapByRange; } void GfxRemap::updateRemapping() { @@ -104,283 +96,4 @@ void GfxRemap::updateRemapping() { } } } - -#pragma mark - -#pragma mark SCI32 remapping - -#ifdef ENABLE_SCI32 - -GfxRemap32::GfxRemap32(GfxPalette32 *palette) : _palette(palette) { - for (int i = 0; i < REMAP_COLOR_COUNT; i++) - _remaps[i] = RemapParams(0, 0, 0, 0, 100, kRemappingNone); - _noMapStart = _noMapCount = 0; - _update = false; - _remapCount = 0; - - // The remap range was 245 - 254 in SCI2, but was changed to 235 - 244 in SCI21 middle - _remapEndColor = (getSciVersion() >= SCI_VERSION_2_1_MIDDLE) ? 244 : 254; -} - -void GfxRemap32::remapOff(byte color) { - if (!color) { - for (int i = 0; i < REMAP_COLOR_COUNT; i++) - _remaps[i] = RemapParams(0, 0, 0, 0, 100, kRemappingNone); - - _remapCount = 0; - } else { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - const byte index = _remapEndColor - color; - _remaps[index] = RemapParams(0, 0, 0, 0, 100, kRemappingNone); - _remapCount--; - } - - _update = true; -} - -void GfxRemap32::setRemappingRange(byte color, byte from, byte to, byte base) { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - _remaps[_remapEndColor - color] = RemapParams(from, to, base, 0, 100, kRemappingByRange); - initColorArrays(_remapEndColor - color); - _remapCount++; - _update = true; -} - -void GfxRemap32::setRemappingPercent(byte color, byte percent) { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - _remaps[_remapEndColor - color] = RemapParams(0, 0, 0, 0, percent, kRemappingByPercent); - initColorArrays(_remapEndColor - color); - _remapCount++; - _update = true; -} - -void GfxRemap32::setRemappingToGray(byte color, byte gray) { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - _remaps[_remapEndColor - color] = RemapParams(0, 0, 0, gray, 100, kRemappingToGray); - initColorArrays(_remapEndColor - color); - _remapCount++; - _update = true; -} - -void GfxRemap32::setRemappingToPercentGray(byte color, byte gray, byte percent) { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - _remaps[_remapEndColor - color] = RemapParams(0, 0, 0, gray, percent, kRemappingToPercentGray); - initColorArrays(_remapEndColor - color); - _remapCount++; - _update = true; -} - -void GfxRemap32::setNoMatchRange(byte from, byte count) { - _noMapStart = from; - _noMapCount = count; -} - -bool GfxRemap32::remapEnabled(byte color) const { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - const byte index = _remapEndColor - color; - return (_remaps[index].type != kRemappingNone); -} - -byte GfxRemap32::remapColor(byte color, byte target) { - assert(_remapEndColor - color >= 0 && _remapEndColor - color < REMAP_COLOR_COUNT); - const byte index = _remapEndColor - color; - if (_remaps[index].type != kRemappingNone) - return _remaps[index].remap[target]; - else - return target; -} - -void GfxRemap32::initColorArrays(byte index) { - Palette *curPalette = &_palette->_sysPalette; - RemapParams *curRemap = &_remaps[index]; - - memcpy(curRemap->curColor, curPalette->colors, NON_REMAPPED_COLOR_COUNT * sizeof(Color)); - memcpy(curRemap->targetColor, curPalette->colors, NON_REMAPPED_COLOR_COUNT * sizeof(Color)); -} - -bool GfxRemap32::updateRemap(byte index, bool palChanged) { - int result; - RemapParams *curRemap = &_remaps[index]; - const Palette *curPalette = &_palette->_sysPalette; - const Palette *nextPalette = _palette->getNextPalette(); - bool changed = false; - - if (!_update && !palChanged) - return false; - - Common::fill(_targetChanged, _targetChanged + NON_REMAPPED_COLOR_COUNT, false); - - switch (curRemap->type) { - case kRemappingNone: - return false; - case kRemappingByRange: - for (int i = 0; i < NON_REMAPPED_COLOR_COUNT; i++) { - if (curRemap->from <= i && i <= curRemap->to) - result = i + curRemap->base; - else - result = i; - - if (curRemap->remap[i] != result) { - changed = true; - curRemap->remap[i] = result; - } - - curRemap->colorChanged[i] = true; - } - return changed; - case kRemappingByPercent: - for (int i = 1; i < NON_REMAPPED_COLOR_COUNT; i++) { - // NOTE: This method uses nextPalette instead of curPalette - Color color = nextPalette->colors[i]; - - if (curRemap->curColor[i] != color) { - curRemap->colorChanged[i] = true; - curRemap->curColor[i] = color; - } - - if (curRemap->percent != curRemap->oldPercent || curRemap->colorChanged[i]) { - byte red = CLIP<byte>(color.r * curRemap->percent / 100, 0, 255); - byte green = CLIP<byte>(color.g * curRemap->percent / 100, 0, 255); - byte blue = CLIP<byte>(color.b * curRemap->percent / 100, 0, 255); - byte used = curRemap->targetColor[i].used; - - Color newColor = { used, red, green, blue }; - if (curRemap->targetColor[i] != newColor) { - _targetChanged[i] = true; - curRemap->targetColor[i] = newColor; - } - } - } - - changed = applyRemap(index); - Common::fill(curRemap->colorChanged, curRemap->colorChanged + NON_REMAPPED_COLOR_COUNT, false); - curRemap->oldPercent = curRemap->percent; - return changed; - case kRemappingToGray: - for (int i = 1; i < NON_REMAPPED_COLOR_COUNT; i++) { - Color color = curPalette->colors[i]; - - if (curRemap->curColor[i] != color) { - curRemap->colorChanged[i] = true; - curRemap->curColor[i] = color; - } - - if (curRemap->gray != curRemap->oldGray || curRemap->colorChanged[i]) { - byte lumosity = ((color.r * 77) + (color.g * 151) + (color.b * 28)) >> 8; - byte red = CLIP<byte>(color.r - ((color.r - lumosity) * curRemap->gray / 100), 0, 255); - byte green = CLIP<byte>(color.g - ((color.g - lumosity) * curRemap->gray / 100), 0, 255); - byte blue = CLIP<byte>(color.b - ((color.b - lumosity) * curRemap->gray / 100), 0, 255); - byte used = curRemap->targetColor[i].used; - - Color newColor = { used, red, green, blue }; - if (curRemap->targetColor[i] != newColor) { - _targetChanged[i] = true; - curRemap->targetColor[i] = newColor; - } - } - } - - changed = applyRemap(index); - Common::fill(curRemap->colorChanged, curRemap->colorChanged + NON_REMAPPED_COLOR_COUNT, false); - curRemap->oldGray = curRemap->gray; - return changed; - case kRemappingToPercentGray: - for (int i = 1; i < NON_REMAPPED_COLOR_COUNT; i++) { - Color color = curPalette->colors[i]; - - if (curRemap->curColor[i] != color) { - curRemap->colorChanged[i] = true; - curRemap->curColor[i] = color; - } - - if (curRemap->percent != curRemap->oldPercent || curRemap->gray != curRemap->oldGray || curRemap->colorChanged[i]) { - byte lumosity = ((color.r * 77) + (color.g * 151) + (color.b * 28)) >> 8; - lumosity = lumosity * curRemap->percent / 100; - byte red = CLIP<byte>(color.r - ((color.r - lumosity) * curRemap->gray / 100), 0, 255); - byte green = CLIP<byte>(color.g - ((color.g - lumosity) * curRemap->gray / 100), 0, 255); - byte blue = CLIP<byte>(color.b - ((color.b - lumosity) * curRemap->gray / 100), 0, 255); - byte used = curRemap->targetColor[i].used; - - Color newColor = { used, red, green, blue }; - if (curRemap->targetColor[i] != newColor) { - _targetChanged[i] = true; - curRemap->targetColor[i] = newColor; - } - } - } - - changed = applyRemap(index); - Common::fill(curRemap->colorChanged, curRemap->colorChanged + NON_REMAPPED_COLOR_COUNT, false); - curRemap->oldPercent = curRemap->percent; - curRemap->oldGray = curRemap->gray; - return changed; - default: - return false; - } -} - -static int colorDistance(Color a, Color b) { - int rDiff = (a.r - b.r) * (a.r - b.r); - int gDiff = (a.g - b.g) * (a.g - b.g); - int bDiff = (a.b - b.b) * (a.b - b.b); - return rDiff + gDiff + bDiff; -} - -bool GfxRemap32::applyRemap(byte index) { - RemapParams *curRemap = &_remaps[index]; - const bool *cycleMap = _palette->getCyclemap(); - bool unmappedColors[NON_REMAPPED_COLOR_COUNT]; - Color newColors[NON_REMAPPED_COLOR_COUNT]; - bool changed = false; - - Common::fill(unmappedColors, unmappedColors + NON_REMAPPED_COLOR_COUNT, false); - if (_noMapCount) - Common::fill(unmappedColors + _noMapStart, unmappedColors + _noMapStart + _noMapCount, true); - - for (int i = 0; i < NON_REMAPPED_COLOR_COUNT; i++) { - if (cycleMap[i]) - unmappedColors[i] = true; - } - - int curColor = 0; - for (int i = 1; i < NON_REMAPPED_COLOR_COUNT; i++) { - if (curRemap->colorChanged[i] && !unmappedColors[i]) - newColors[curColor++] = curRemap->curColor[i]; - } - - for (int i = 1; i < NON_REMAPPED_COLOR_COUNT; i++) { - Color targetColor = curRemap->targetColor[i]; - bool colorChanged = curRemap->colorChanged[curRemap->remap[i]]; - - if (!_targetChanged[i] && !colorChanged) - continue; - - if (_targetChanged[i] && colorChanged) - if (curRemap->distance[i] < 100 && colorDistance(targetColor, curRemap->curColor[curRemap->remap[i]]) <= curRemap->distance[i]) - continue; - - int diff = 0; - int16 result = _palette->matchColor(targetColor.r, targetColor.g, targetColor.b, curRemap->distance[i], diff, unmappedColors); - if (result != -1 && curRemap->remap[i] != result) { - changed = true; - curRemap->remap[i] = result; - curRemap->distance[i] = diff; - } - } - - return changed; -} - -bool GfxRemap32::remapAllTables(bool palChanged) { - bool changed = false; - - for (int i = 0; i < REMAP_COLOR_COUNT; i++) { - changed |= updateRemap(i, palChanged); - } - - _update = false; - return changed; -} - -#endif - } // End of namespace Sci diff --git a/engines/sci/graphics/remap.h b/engines/sci/graphics/remap.h index d012568f7f..98177f6d19 100644 --- a/engines/sci/graphics/remap.h +++ b/engines/sci/graphics/remap.h @@ -24,42 +24,36 @@ #define SCI_GRAPHICS_REMAP_H #include "common/array.h" -#include "sci/graphics/helpers.h" +#include "common/serializer.h" namespace Sci { class GfxScreen; -enum ColorRemappingType { - kRemappingNone = 0, - kRemappingByRange = 1, - kRemappingByPercent = 2, - kRemappingToGray = 3, - kRemappingToPercentGray = 4 -}; - -#define REMAP_COLOR_COUNT 9 -#define NON_REMAPPED_COLOR_COUNT 236 - /** - * Remap class, handles color remapping + * This class handles color remapping for the QFG4 demo. */ class GfxRemap { +private: + enum ColorRemappingType { + kRemapNone = 0, + kRemapByRange = 1, + kRemapByPercent = 2 + }; + public: GfxRemap(GfxPalette *_palette); - ~GfxRemap(); void resetRemapping(); void setRemappingPercent(byte color, byte percent); void setRemappingRange(byte color, byte from, byte to, byte base); bool isRemapped(byte color) const { - return _remapOn && (_remappingType[color] != kRemappingNone); + return _remapOn && (_remappingType[color] != kRemapNone); } byte remapColor(byte remappedColor, byte screenColor); void updateRemapping(); private: - GfxScreen *_screen; GfxPalette *_palette; bool _remapOn; @@ -68,87 +62,6 @@ private: byte _remappingByRange[256]; uint16 _remappingPercentToSet; }; - -#ifdef ENABLE_SCI32 - -struct RemapParams { - byte from; - byte to; - byte base; - byte gray; - byte oldGray; - byte percent; - byte oldPercent; - ColorRemappingType type; - Color curColor[256]; - Color targetColor[256]; - byte distance[256]; - byte remap[256]; - bool colorChanged[256]; - - RemapParams() { - from = to = base = gray = oldGray = percent = oldPercent = 0; - type = kRemappingNone; - - // curColor and targetColor are initialized in GfxRemap32::initColorArrays - memset(curColor, 0, 256 * sizeof(Color)); - memset(targetColor, 0, 256 * sizeof(Color)); - memset(distance, 0, 256); - for (int i = 0; i < NON_REMAPPED_COLOR_COUNT; i++) - remap[i] = i; - Common::fill(colorChanged, colorChanged + ARRAYSIZE(colorChanged), true); - } - - RemapParams(byte from_, byte to_, byte base_, byte gray_, byte percent_, ColorRemappingType type_) { - from = from_; - to = to_; - base = base_; - gray = oldGray = gray_; - percent = oldPercent = percent_; - type = type_; - - // curColor and targetColor are initialized in GfxRemap32::initColorArrays - memset(curColor, 0, 256 * sizeof(Color)); - memset(targetColor, 0, 256 * sizeof(Color)); - memset(distance, 0, 256); - for (int i = 0; i < NON_REMAPPED_COLOR_COUNT; i++) - remap[i] = i; - Common::fill(colorChanged, colorChanged + ARRAYSIZE(colorChanged), true); - } -}; - -class GfxRemap32 { -public: - GfxRemap32(GfxPalette32 *palette); - ~GfxRemap32() {} - - void remapOff(byte color); - void setRemappingRange(byte color, byte from, byte to, byte base); - void setRemappingPercent(byte color, byte percent); - void setRemappingToGray(byte color, byte gray); - void setRemappingToPercentGray(byte color, byte gray, byte percent); - void setNoMatchRange(byte from, byte count); - bool remapEnabled(byte color) const; - byte remapColor(byte color, byte target); - bool remapAllTables(bool palChanged); - int getRemapCount() const { return _remapCount; } - int getStartColor() const { return _remapEndColor - REMAP_COLOR_COUNT + 1; } - int getEndColor() const { return _remapEndColor; } -private: - GfxPalette32 *_palette; - RemapParams _remaps[REMAP_COLOR_COUNT]; - bool _update; - byte _noMapStart, _noMapCount; - bool _targetChanged[NON_REMAPPED_COLOR_COUNT]; - byte _remapEndColor; - int _remapCount; - - void initColorArrays(byte index); - bool applyRemap(byte index); - bool updateRemap(byte index, bool palChanged); -}; -#endif - } // End of namespace Sci #endif diff --git a/engines/sci/graphics/remap32.cpp b/engines/sci/graphics/remap32.cpp new file mode 100644 index 0000000000..d5a2362f14 --- /dev/null +++ b/engines/sci/graphics/remap32.cpp @@ -0,0 +1,468 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "sci/sci.h" +#include "sci/graphics/palette32.h" +#include "sci/graphics/remap32.h" + +namespace Sci { + +#pragma mark SingleRemap + +void SingleRemap::reset() { + _lastPercent = 100; + _lastGray = 0; + + const uint8 remapStartColor = g_sci->_gfxRemap32->getStartColor(); + const Palette ¤tPalette = g_sci->_gfxPalette32->getCurrentPalette(); + for (uint i = 0; i < remapStartColor; ++i) { + const Color &color = currentPalette.colors[i]; + _remapColors[i] = i; + _originalColors[i] = color; + _originalColorsChanged[i] = true; + _idealColors[i] = color; + _idealColorsChanged[i] = false; + _matchDistances[i] = 0; + } +} + +bool SingleRemap::update() { + switch (_type) { + case kRemapNone: + break; + case kRemapByRange: + return updateRange(); + case kRemapByPercent: + return updateBrightness(); + case kRemapToGray: + return updateSaturation(); + case kRemapToPercentGray: + return updateSaturationAndBrightness(); + default: + error("Illegal remap type %d", _type); + } + + return false; +} + +bool SingleRemap::updateRange() { + const uint8 remapStartColor = g_sci->_gfxRemap32->getStartColor(); + bool updated = false; + + for (uint i = 0; i < remapStartColor; ++i) { + uint8 targetColor; + if (_from <= i && i <= _to) { + targetColor = i + _delta; + } else { + targetColor = i; + } + + if (_remapColors[i] != targetColor) { + updated = true; + _remapColors[i] = targetColor; + } + + _originalColorsChanged[i] = true; + } + + return updated; +} + +bool SingleRemap::updateBrightness() { + const uint8 remapStartColor = g_sci->_gfxRemap32->getStartColor(); + const Palette &nextPalette = g_sci->_gfxPalette32->getNextPalette(); + for (uint i = 1; i < remapStartColor; ++i) { + Color color(nextPalette.colors[i]); + + if (_originalColors[i] != color) { + _originalColorsChanged[i] = true; + _originalColors[i] = color; + } + + if (_percent != _lastPercent || _originalColorsChanged[i]) { + // NOTE: SSCI checked if percent was over 100 and only + // then clipped values, but we always unconditionally + // ensure the result is in the correct range + color.r = MIN(255, (uint16)color.r * _percent / 100); + color.g = MIN(255, (uint16)color.g * _percent / 100); + color.b = MIN(255, (uint16)color.b * _percent / 100); + + if (_idealColors[i] != color) { + _idealColorsChanged[i] = true; + _idealColors[i] = color; + } + } + } + + const bool updated = apply(); + Common::fill(_originalColorsChanged, _originalColorsChanged + remapStartColor, false); + Common::fill(_idealColorsChanged, _idealColorsChanged + remapStartColor, false); + _lastPercent = _percent; + return updated; +} + +bool SingleRemap::updateSaturation() { + const uint8 remapStartColor = g_sci->_gfxRemap32->getStartColor(); + const Palette ¤tPalette = g_sci->_gfxPalette32->getCurrentPalette(); + for (uint i = 1; i < remapStartColor; ++i) { + Color color(currentPalette.colors[i]); + if (_originalColors[i] != color) { + _originalColorsChanged[i] = true; + _originalColors[i] = color; + } + + if (_gray != _lastGray || _originalColorsChanged[i]) { + const int luminosity = (((color.r * 77) + (color.g * 151) + (color.b * 28)) >> 8) * _percent / 100; + + color.r = MIN(255, color.r - ((color.r - luminosity) * _gray / 100)); + color.g = MIN(255, color.g - ((color.g - luminosity) * _gray / 100)); + color.b = MIN(255, color.b - ((color.b - luminosity) * _gray / 100)); + + if (_idealColors[i] != color) { + _idealColorsChanged[i] = true; + _idealColors[i] = color; + } + } + } + + const bool updated = apply(); + Common::fill(_originalColorsChanged, _originalColorsChanged + remapStartColor, false); + Common::fill(_idealColorsChanged, _idealColorsChanged + remapStartColor, false); + _lastGray = _gray; + return updated; +} + +bool SingleRemap::updateSaturationAndBrightness() { + const uint8 remapStartColor = g_sci->_gfxRemap32->getStartColor(); + const Palette ¤tPalette = g_sci->_gfxPalette32->getCurrentPalette(); + for (uint i = 1; i < remapStartColor; i++) { + Color color(currentPalette.colors[i]); + if (_originalColors[i] != color) { + _originalColorsChanged[i] = true; + _originalColors[i] = color; + } + + if (_percent != _lastPercent || _gray != _lastGray || _originalColorsChanged[i]) { + const int luminosity = (((color.r * 77) + (color.g * 151) + (color.b * 28)) >> 8) * _percent / 100; + + color.r = MIN(255, color.r - ((color.r - luminosity) * _gray) / 100); + color.g = MIN(255, color.g - ((color.g - luminosity) * _gray) / 100); + color.b = MIN(255, color.b - ((color.b - luminosity) * _gray) / 100); + + if (_idealColors[i] != color) { + _idealColorsChanged[i] = true; + _idealColors[i] = color; + } + } + } + + const bool updated = apply(); + Common::fill(_originalColorsChanged, _originalColorsChanged + remapStartColor, false); + Common::fill(_idealColorsChanged, _idealColorsChanged + remapStartColor, false); + _lastPercent = _percent; + _lastGray = _gray; + return updated; +} + +bool SingleRemap::apply() { + const GfxRemap32 *const gfxRemap32 = g_sci->_gfxRemap32; + const uint8 remapStartColor = gfxRemap32->getStartColor(); + + // Blocked colors are not allowed to be used as target + // colors for the remap + bool blockedColors[236]; + Common::fill(blockedColors, blockedColors + remapStartColor, false); + + const bool *const paletteCycleMap = g_sci->_gfxPalette32->getCycleMap(); + + const int16 blockedRangeCount = gfxRemap32->getBlockedRangeCount(); + if (blockedRangeCount) { + const uint8 blockedRangeStart = gfxRemap32->getBlockedRangeStart(); + Common::fill(blockedColors + blockedRangeStart, blockedColors + blockedRangeStart + blockedRangeCount, true); + } + + for (uint i = 0; i < remapStartColor; ++i) { + if (paletteCycleMap[i]) { + blockedColors[i] = true; + } + } + + // NOTE: SSCI did a loop over colors here to create a + // new array of updated, unblocked colors, but then + // never used it + + bool updated = false; + for (uint i = 1; i < remapStartColor; ++i) { + int distance; + + if (!_idealColorsChanged[i] && !_originalColorsChanged[_remapColors[i]]) { + continue; + } + + if ( + _idealColorsChanged[i] && + _originalColorsChanged[_remapColors[i]] && + _matchDistances[i] < 100 && + colorDistance(_idealColors[i], _originalColors[_remapColors[i]]) <= _matchDistances[i] + ) { + continue; + } + + const int16 bestColor = matchColor(_idealColors[i], _matchDistances[i], distance, blockedColors); + + if (bestColor != -1 && _remapColors[i] != bestColor) { + updated = true; + _remapColors[i] = bestColor; + _matchDistances[i] = distance; + } + } + + return updated; +} + +int SingleRemap::colorDistance(const Color &a, const Color &b) const { + int channelDistance = a.r - b.r; + int distance = channelDistance * channelDistance; + channelDistance = a.g - b.g; + distance += channelDistance * channelDistance; + channelDistance = a.b - b.b; + distance += channelDistance * channelDistance; + return distance; +} + +int16 SingleRemap::matchColor(const Color &color, const int minimumDistance, int &outDistance, const bool *const blockedIndexes) const { + int16 bestIndex = -1; + int bestDistance = 0xFFFFF; + int distance = minimumDistance; + const Palette &nextPalette = g_sci->_gfxPalette32->getNextPalette(); + + for (uint i = 0, channelDistance; i < g_sci->_gfxRemap32->getStartColor(); ++i) { + if (blockedIndexes[i]) { + continue; + } + + distance = nextPalette.colors[i].r - color.r; + distance *= distance; + if (bestDistance <= distance) { + continue; + } + channelDistance = nextPalette.colors[i].g - color.g; + distance += channelDistance * channelDistance; + if (bestDistance <= distance) { + continue; + } + channelDistance = nextPalette.colors[i].b - color.b; + distance += channelDistance * channelDistance; + if (bestDistance <= distance) { + continue; + } + bestDistance = distance; + bestIndex = i; + } + + // This value is only valid if the last index to + // perform a distance calculation was the best index + outDistance = distance; + return bestIndex; +} + +#pragma mark - +#pragma mark GfxRemap32 + +GfxRemap32::GfxRemap32() : + _needsUpdate(false), + _blockedRangeStart(0), + _blockedRangeCount(0), + _remapStartColor(236), + _numActiveRemaps(0) { + // The `_remapStartColor` seems to always be 236 in SSCI, + // but if it is ever changed then the various C-style + // member arrays hard-coded to 236 need to be changed to + // match the highest possible value of `_remapStartColor` + assert(_remapStartColor == 236); + + if (getSciVersion() >= SCI_VERSION_2_1_MIDDLE || g_sci->getGameId() == GID_KQ7) { + _remaps.resize(9); + } else { + _remaps.resize(19); + } + + _remapEndColor = _remapStartColor + _remaps.size() - 1; +} + +void GfxRemap32::remapOff(const uint8 color) { + if (color == 0) { + remapAllOff(); + return; + } + + // NOTE: SSCI simply ignored invalid input values, but + // we at least give a warning so games can be investigated + // for script bugs + if (color < _remapStartColor || color > _remapEndColor) { + warning("GfxRemap32::remapOff: %d out of remap range", color); + return; + } + + const uint8 index = _remapEndColor - color; + SingleRemap &singleRemap = _remaps[index]; + singleRemap._type = kRemapNone; + --_numActiveRemaps; + _needsUpdate = true; +} + +void GfxRemap32::remapAllOff() { + for (uint i = 0, len = _remaps.size(); i < len; ++i) { + _remaps[i]._type = kRemapNone; + } + + _numActiveRemaps = 0; + _needsUpdate = true; +} + +void GfxRemap32::remapByRange(const uint8 color, const int16 from, const int16 to, const int16 delta) { + // NOTE: SSCI simply ignored invalid input values, but + // we at least give a warning so games can be investigated + // for script bugs + if (color < _remapStartColor || color > _remapEndColor) { + warning("GfxRemap32::remapByRange: %d out of remap range", color); + return; + } + + if (from < 0) { + warning("GfxRemap32::remapByRange: attempt to remap negative color %d", from); + return; + } + + if (to >= _remapStartColor) { + warning("GfxRemap32::remapByRange: attempt to remap into the remap zone at %d", to); + return; + } + + const uint8 index = _remapEndColor - color; + SingleRemap &singleRemap = _remaps[index]; + + if (singleRemap._type == kRemapNone) { + ++_numActiveRemaps; + singleRemap.reset(); + } + + singleRemap._from = from; + singleRemap._to = to; + singleRemap._delta = delta; + singleRemap._type = kRemapByRange; + _needsUpdate = true; +} + +void GfxRemap32::remapByPercent(const uint8 color, const int16 percent) { + // NOTE: SSCI simply ignored invalid input values, but + // we at least give a warning so games can be investigated + // for script bugs + if (color < _remapStartColor || color > _remapEndColor) { + warning("GfxRemap32::remapByPercent: %d out of remap range", color); + return; + } + + const uint8 index = _remapEndColor - color; + SingleRemap &singleRemap = _remaps[index]; + + if (singleRemap._type == kRemapNone) { + ++_numActiveRemaps; + singleRemap.reset(); + } + + singleRemap._percent = percent; + singleRemap._type = kRemapByPercent; + _needsUpdate = true; +} + +void GfxRemap32::remapToGray(const uint8 color, const int8 gray) { + // NOTE: SSCI simply ignored invalid input values, but + // we at least give a warning so games can be investigated + // for script bugs + if (color < _remapStartColor || color > _remapEndColor) { + warning("GfxRemap32::remapToGray: %d out of remap range", color); + return; + } + + if (gray < 0 || gray > 100) { + error("RemapToGray percent out of range; gray = %d", gray); + } + + const uint8 index = _remapEndColor - color; + SingleRemap &singleRemap = _remaps[index]; + + if (singleRemap._type == kRemapNone) { + ++_numActiveRemaps; + singleRemap.reset(); + } + + singleRemap._gray = gray; + singleRemap._type = kRemapToGray; + _needsUpdate = true; +} + +void GfxRemap32::remapToPercentGray(const uint8 color, const int16 gray, const int16 percent) { + // NOTE: SSCI simply ignored invalid input values, but + // we at least give a warning so games can be investigated + // for script bugs + if (color < _remapStartColor || color > _remapEndColor) { + warning("GfxRemap32::remapToPercentGray: %d out of remap range", color); + return; + } + + const uint8 index = _remapEndColor - color; + SingleRemap &singleRemap = _remaps[index]; + + if (singleRemap._type == kRemapNone) { + ++_numActiveRemaps; + singleRemap.reset(); + } + + singleRemap._percent = percent; + singleRemap._gray = gray; + singleRemap._type = kRemapToPercentGray; + _needsUpdate = true; +} + +void GfxRemap32::blockRange(const uint8 from, const int16 count) { + _blockedRangeStart = from; + _blockedRangeCount = count; +} + +bool GfxRemap32::remapAllTables(const bool paletteUpdated) { + if (!_needsUpdate && !paletteUpdated) { + return false; + } + + bool updated = false; + + for (SingleRemapsList::iterator it = _remaps.begin(); it != _remaps.end(); ++it) { + if (it->_type != kRemapNone) { + updated |= it->update(); + } + } + + _needsUpdate = false; + return updated; +} +} // End of namespace Sci diff --git a/engines/sci/graphics/remap32.h b/engines/sci/graphics/remap32.h new file mode 100644 index 0000000000..5f629d733e --- /dev/null +++ b/engines/sci/graphics/remap32.h @@ -0,0 +1,400 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SCI_GRAPHICS_REMAP32_H +#define SCI_GRAPHICS_REMAP32_H + +#include "common/algorithm.h" +#include "common/array.h" +#include "common/scummsys.h" +#include "sci/graphics/helpers.h" + +namespace Sci { +class GfxPalette32; + +enum RemapType { + kRemapNone = 0, + kRemapByRange = 1, + kRemapByPercent = 2, + kRemapToGray = 3, + kRemapToPercentGray = 4 +}; + +#pragma mark - +#pragma mark SingleRemap + +/** + * SingleRemap objects each manage one remapping operation. + */ +class SingleRemap { +public: + SingleRemap() : _type(kRemapNone) {} + + /** + * The type of remap. + */ + RemapType _type; + + /** + * The first color that should be shifted by a range + * remap. + */ + uint8 _from; + + /** + * The last color that should be shifted a range remap. + */ + uint8 _to; + + /** + * The direction and amount that the colors should be + * shifted in a range remap. + */ + int16 _delta; + + /** + * The difference in brightness that should be + * applied by a brightness (percent) remap. + * + * This value may be be greater than 100, in + * which case the color will be oversaturated. + */ + int16 _percent; + + /** + * The amount of desaturation that should be + * applied by a saturation (gray) remap, where + * 0 is full saturation and 100 is full + * desaturation. + */ + uint8 _gray; + + /** + * The final array used by CelObj renderers to composite + * remapped pixels to the screen buffer. + * + * Here is how it works: + * + * The source bitmap being rendered will have pixels + * within the remap range (236-245 or 236-254), and the + * target buffer will have colors in the non-remapped + * range (0-235). + * + * To arrive at the correct color, first the source + * pixel is used to look up the correct SingleRemap for + * that pixel. Then, the final composited color is + * looked up in this array using the target's pixel + * color. In other words, + * `target = _remaps[remapEndColor - source].remapColors[target]`. + */ + uint8 _remapColors[236]; + + /** + * Resets this SingleRemap's color information to + * default values. + */ + void reset(); + + /** + * Recalculates and reapplies remap colors to the + * `_remapColors` array. + */ + bool update(); + +private: + /** + * The previous brightness value. Used to + * determine whether or not targetColors needs + * to be updated. + */ + int16 _lastPercent; + + /** + * The previous saturation value. Used to + * determine whether or not targetColors needs + * to be updated. + */ + uint8 _lastGray; + + /** + * The colors from the current GfxPalette32 palette + * before this SingleRemap is applied. + */ + Color _originalColors[236]; + + /** + * Map of colors that changed in `_originalColors` + * when this SingleRemap was updated. This map is + * transient and gets reset to `false` after the + * SingleRemap finishes updating. + */ + bool _originalColorsChanged[236]; + + /** + * The ideal target RGB color values for each generated + * remap color. + */ + Color _idealColors[236]; + + /** + * Map of colors that changed in `_idealColors` when + * this SingleRemap was updated. This map is transient + * and gets reset to `false` after the SingleRemap + * finishes applying. + */ + bool _idealColorsChanged[236]; + + /** + * When applying a SingleRemap, finding an appropriate + * color in the palette is the responsibility of a + * distance function. Once a match is found, the + * distance of that match is stored here so that the + * next time the SingleRemap is applied, it can check + * the distance from the previous application and avoid + * triggering an expensive redraw of the entire screen + * if the new palette value only changed slightly. + */ + int _matchDistances[236]; + + /** + * Computes the final target values for a range remap + * and applies them directly to the `_remaps` map. + * + * @note Was ByRange in SSCI. + */ + bool updateRange(); + + /** + * Computes the intermediate target values for a + * brightness remap and applies them indirectly via + * the `apply` method. + * + * @note Was ByPercent in SSCI. + */ + bool updateBrightness(); + + /** + * Computes the intermediate target values for a + * saturation remap and applies them indirectly via + * the `apply` method. + * + * @note Was ToGray in SSCI. + */ + bool updateSaturation(); + + /** + * Computes the intermediate target values for a + * saturation + brightness bitmap and applies them + * indirectly via the `apply` method. + * + * @note Was ToPercentGray in SSCI. + */ + bool updateSaturationAndBrightness(); + + /** + * Computes and applies the final values to the + * `_remaps` map. + * + * @note In SSCI, a boolean array of changed values + * was passed into this method, but this was done by + * creating arrays on the stack in the caller. Instead + * of doing this, we simply add another member property + * `_idealColorsChanged` and use that instead. + */ + bool apply(); + + /** + * Calculates the square distance of two colors. + * + * @note In SSCI this method is Rgb24::Dist, but it is + * only used by SingleRemap. + */ + int colorDistance(const Color &a, const Color &b) const; + + /** + * Finds the closest index in the next palette matching + * the given RGB color. Returns -1 if no match can be + * found that is closer than `minimumDistance`. + * + * @note In SSCI, this method is SOLPalette::Match, but + * this particular signature is only used by + * SingleRemap. + */ + int16 matchColor(const Color &color, const int minimumDistance, int &outDistance, const bool *const blockedIndexes) const; +}; + +#pragma mark - +#pragma mark GfxRemap32 + +/** + * This class provides color remapping support for SCI32 + * games. + */ +class GfxRemap32 : public Common::Serializable { +public: + GfxRemap32(); + + void saveLoadWithSerializer(Common::Serializer &s); + + inline uint8 getRemapCount() const { return _numActiveRemaps; } + inline uint8 getStartColor() const { return _remapStartColor; } + inline uint8 getEndColor() const { return _remapEndColor; } + inline uint8 getBlockedRangeStart() const { return _blockedRangeStart; } + inline int16 getBlockedRangeCount() const { return _blockedRangeCount; } + + /** + * Turns off remapping of the given color. If `color` is + * 0, all remaps are turned off. + */ + void remapOff(const uint8 color); + + /** + * Turns off all color remaps. + */ + void remapAllOff(); + + /** + * Configures a SingleRemap for the remap color `color`. + * The SingleRemap will shift palette colors between + * `from` and `to` (inclusive) by `delta` palette + * entries when the remap is applied. + */ + void remapByRange(const uint8 color, const int16 from, const int16 to, const int16 delta); + + /** + * Configures a SingleRemap for the remap color `color` + * to modify the brightness of remapped colors by + * `percent`. + */ + void remapByPercent(const uint8 color, const int16 percent); + + /** + * Configures a SingleRemap for the remap color `color` + * to modify the saturation of remapped colors by + * `gray`. + */ + void remapToGray(const uint8 color, const int8 gray); + + /** + * Configures a SingleRemap for the remap color `color` + * to modify the brightness of remapped colors by + * `percent`, and saturation of remapped colors by + * `gray`. + */ + void remapToPercentGray(const uint8 color, const int16 gray, const int16 percent); + + /** + * Prevents GfxRemap32 from using the given range of + * palette entries as potential remap targets. + * + * @NOTE Was DontMapToRange in SSCI. + */ + void blockRange(const uint8 from, const int16 count); + + /** + * Determines whether or not the given color has an + * active remapper. If it does not, it is treated as a + * skip color and the pixel is not drawn. + * + * @note SSCI uses a boolean array to decide whether a + * a pixel is remapped, but it is possible to get the + * same information from `_remaps`, as this function + * does. + * Presumably, the separate array was created for + * performance reasons, since this is called a lot in + * the most critical section of the renderer. + */ + inline bool remapEnabled(uint8 color) const { + const uint8 index = _remapEndColor - color; + assert(index < _remaps.size()); + return (_remaps[index]._type != kRemapNone); + } + + /** + * Calculates the correct color for a target by looking + * up the target color in the SingleRemap that controls + * the given sourceColor. If there is no remap for the + * given color, it will be treated as a skip color. + */ + inline uint8 remapColor(const uint8 sourceColor, const uint8 targetColor) const { + const uint8 index = _remapEndColor - sourceColor; + assert(index < _remaps.size()); + const SingleRemap &singleRemap = _remaps[index]; + assert(singleRemap._type != kRemapNone); + return singleRemap._remapColors[targetColor]; + } + + /** + * Updates all active remaps in response to a palette + * change or a remap settings change. + * + * `paletteChanged` is true if the next palette in + * GfxPalette32 has been previously modified by other + * palette operations. + */ + bool remapAllTables(const bool paletteUpdated); + +private: + typedef Common::Array<SingleRemap> SingleRemapsList; + + /** + * The first index of the remap area in the system + * palette. + */ + const uint8 _remapStartColor; + + /** + * The last index of the remap area in the system + * palette. + */ + uint8 _remapEndColor; + + /** + * The number of currently active remaps. + */ + uint8 _numActiveRemaps; + + /** + * The list of SingleRemaps. + */ + SingleRemapsList _remaps; + + /** + * If true, indicates that one or more SingleRemaps were + * reconfigured and all remaps need to be recalculated. + */ + bool _needsUpdate; + + /** + * The first color that is blocked from being used as a + * remap target color. + */ + uint8 _blockedRangeStart; + + /** + * The size of the range of blocked colors. If zero, + * all colors are potential targets for remapping. + */ + int16 _blockedRangeCount; +}; +} // End of namespace Sci +#endif diff --git a/engines/sci/graphics/screen_item32.cpp b/engines/sci/graphics/screen_item32.cpp index fba0fa0422..c1644a5ea3 100644 --- a/engines/sci/graphics/screen_item32.cpp +++ b/engines/sci/graphics/screen_item32.cpp @@ -273,7 +273,9 @@ void ScreenItem::calcRects(const Plane &plane) { // Cel may use a coordinate system that is not the same size as the // script coordinate system (usually this means high-resolution // pictures with low-resolution scripts) - if (celObj._scaledWidth != scriptWidth || celObj._scaledHeight != scriptHeight) { + if (celObj._scaledWidth != kLowResX || celObj._scaledHeight != kLowResY) { + // high resolution coordinates + if (_useInsetRect) { const Ratio scriptToCelX(celObj._scaledWidth, scriptWidth); const Ratio scriptToCelY(celObj._scaledHeight, scriptHeight); @@ -345,6 +347,8 @@ void ScreenItem::calcRects(const Plane &plane) { _ratioX = scaleX * celToScreenX; _ratioY = scaleY * celToScreenY; } else { + // low resolution coordinates + int displaceX = celObj._displace.x; if (_mirrorX != celObj._mirrorX && _celInfo.type != kCelTypePic) { displaceX = celObj._width - celObj._displace.x - 1; @@ -515,6 +519,25 @@ void ScreenItem::update(const reg_t object) { _deleted = 0; } +void ScreenItem::update() { + Plane *plane = g_sci->_gfxFrameout->getPlanes().findByObject(_plane); + if (plane == nullptr) { + error("ScreenItem::update: Invalid plane %04x:%04x", PRINT_REG(_plane)); + } + + if (plane->_screenItemList.findByObject(_object) == nullptr) { + error("ScreenItem::update: %04x:%04x not in plane %04x:%04x", PRINT_REG(_object), PRINT_REG(_plane)); + } + + if (!_created) { + _updated = g_sci->_gfxFrameout->getScreenCount(); + } + _deleted = 0; + + delete _celObj; + _celObj = nullptr; +} + // TODO: This code is quite similar to calcRects, so try to deduplicate // if possible Common::Rect ScreenItem::getNowSeenRect(const Plane &plane) const { @@ -563,7 +586,9 @@ Common::Rect ScreenItem::getNowSeenRect(const Plane &plane) const { displaceX = celObj._width - displaceX - 1; } - if (celObj._scaledWidth != scriptWidth || celObj._scaledHeight != scriptHeight) { + if (celObj._scaledWidth != kLowResX || celObj._scaledHeight != kLowResY) { + // high resolution coordinates + if (_useInsetRect) { Ratio scriptToCelX(celObj._scaledWidth, scriptWidth); Ratio scriptToCelY(celObj._scaledHeight, scriptHeight); @@ -597,6 +622,8 @@ Common::Rect ScreenItem::getNowSeenRect(const Plane &plane) const { mulinc(nsRect, celToScriptX, celToScriptY); nsRect.translate(_position.x - displaceX, _position.y - displaceY); } else { + // low resolution coordinates + if (!scaleX.isOne() || !scaleY.isOne()) { mulinc(nsRect, scaleX, scaleY); // TODO: This was in the original code, baked into the @@ -630,23 +657,43 @@ ScreenItem *ScreenItemList::findByObject(const reg_t object) const { return *screenItemIt; } void ScreenItemList::sort() { - // TODO: SCI engine used _unsorted as an array of indexes into the - // list itself and then performed the same swap operations on the - // _unsorted array as the _storage array during sorting, but the - // only reason to do this would be if some of the pointers in the - // list were replaced so the pointer values themselves couldnāt - // simply be recorded and then restored later. It is not yet - // verified whether this simplification of the sort/unsort is - // safe. + if (size() < 2) { + return; + } + for (size_type i = 0; i < size(); ++i) { - _unsorted[i] = (*this)[i]; + _unsorted[i] = i; } - Common::sort(begin(), end(), sortHelper); + for (size_type i = size() - 1; i > 0; --i) { + bool swap = false; + + for (size_type j = 0; j < i; ++j) { + value_type &a = operator[](j); + value_type &b = operator[](j + 1); + + if (a == nullptr || *a > *b) { + SWAP(a, b); + SWAP(_unsorted[j], _unsorted[j + 1]); + swap = true; + } + } + + if (!swap) { + break; + } + } } void ScreenItemList::unsort() { + if (size() < 2) { + return; + } + for (size_type i = 0; i < size(); ++i) { - (*this)[i] = _unsorted[i]; + while (_unsorted[i] != i) { + SWAP(operator[](_unsorted[i]), operator[](i)); + SWAP(_unsorted[_unsorted[i]], _unsorted[i]); + } } } diff --git a/engines/sci/graphics/screen_item32.h b/engines/sci/graphics/screen_item32.h index 91f54b48e9..2e44e418ce 100644 --- a/engines/sci/graphics/screen_item32.h +++ b/engines/sci/graphics/screen_item32.h @@ -236,6 +236,24 @@ public: return false; } + inline bool operator>(const ScreenItem &other) const { + if (_priority > other._priority) { + return true; + } + + if (_priority == other._priority) { + if (_position.y + _z > other._position.y + other._z) { + return true; + } + + if (_position.y + _z == other._position.y + other._z) { + return _object > other._object; + } + } + + return false; + } + /** * Calculates the dimensions and scaling parameters for * the screen item, using the given plane as the parent @@ -261,6 +279,12 @@ public: void update(const reg_t object); /** + * Updates the properties of the screen item for one not belonging + * to a VM object. Originally GraphicsMgr::UpdateScreenItem. + */ + void update(); + + /** * Gets the "now seen" rect for the screen item, which * represents the current size and position of the * screen item on the screen in script coordinates. @@ -273,12 +297,10 @@ public: typedef StablePointerArray<ScreenItem, 250> ScreenItemListBase; class ScreenItemList : public ScreenItemListBase { - inline static bool sortHelper(const ScreenItem *a, const ScreenItem *b) { - return *a < *b; - } -public: - ScreenItem *_unsorted[250]; +private: + size_type _unsorted[250]; +public: ScreenItem *findByObject(const reg_t object) const; void sort(); void unsort(); diff --git a/engines/sci/graphics/text32.cpp b/engines/sci/graphics/text32.cpp index d1c223d5d5..277e6e93d0 100644 --- a/engines/sci/graphics/text32.cpp +++ b/engines/sci/graphics/text32.cpp @@ -39,18 +39,24 @@ namespace Sci { int16 GfxText32::_defaultFontId = 0; +int16 GfxText32::_scaledWidth = 0; +int16 GfxText32::_scaledHeight = 0; GfxText32::GfxText32(SegManager *segMan, GfxCache *fonts) : _segMan(segMan), _cache(fonts), - _scaledWidth(g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth), - _scaledHeight(g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight), // Not a typo, the original engine did not initialise height, only width _width(0), _text(""), _bitmap(NULL_REG) { _fontId = _defaultFontId; _font = _cache->getFont(_defaultFontId); + + if (_scaledWidth == 0) { + // initialize the statics + _scaledWidth = g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth; + _scaledHeight = g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight; + } } reg_t GfxText32::createFontBitmap(int16 width, int16 height, const Common::Rect &rect, const Common::String &text, const uint8 foreColor, const uint8 backColor, const uint8 skipColor, const GuiResourceId fontId, const TextAlign alignment, const int16 borderColor, const bool dimmed, const bool doScaling) { @@ -115,7 +121,6 @@ reg_t GfxText32::createFontBitmap(const CelInfo32 &celInfo, const Common::Rect & int16 scriptWidth = g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth; int16 scriptHeight = g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight; - int borderSize = 1; mulinc(_textRect, Ratio(_scaledWidth, scriptWidth), Ratio(_scaledHeight, scriptHeight)); CelObjView view(celInfo.resourceId, celInfo.loopNo, celInfo.celNo); @@ -132,7 +137,6 @@ reg_t GfxText32::createFontBitmap(const CelInfo32 &celInfo, const Common::Rect & BitmapResource bitmap(_segMan, _width, _height, _skipColor, 0, 0, _scaledWidth, _scaledHeight, 0, false); _bitmap = bitmap.getObject(); - Buffer buffer(_width, _height, bitmap.getPixels()); // NOTE: The engine filled the bitmap pixels with 11 here, which is silly // because then it just erased the bitmap using the skip color. So we don't @@ -142,7 +146,7 @@ reg_t GfxText32::createFontBitmap(const CelInfo32 &celInfo, const Common::Rect & erase(bitmapRect, false); _backColor = backColor; - view.draw(buffer, bitmapRect, Common::Point(0, 0), false, Ratio(_scaledWidth, view._scaledWidth), Ratio(_scaledHeight, view._scaledHeight)); + view.draw(bitmap.getBuffer(), bitmapRect, Common::Point(0, 0), false, Ratio(_scaledWidth, view._scaledWidth), Ratio(_scaledHeight, view._scaledHeight)); if (_backColor != skipColor && _foreColor != skipColor) { erase(_textRect, false); @@ -153,7 +157,7 @@ reg_t GfxText32::createFontBitmap(const CelInfo32 &celInfo, const Common::Rect & error("TODO: Implement transparent text"); } else { if (borderColor != -1) { - drawFrame(bitmapRect, borderSize, _borderColor, false); + drawFrame(bitmapRect, 1, _borderColor, false); } drawTextBox(); @@ -231,8 +235,11 @@ void GfxText32::drawTextBox() { int16 textRectWidth = _textRect.width(); _drawPosition.y = _textRect.top; uint charIndex = 0; - if (getLongest(&charIndex, textRectWidth) == 0) { - error("DrawTextBox GetLongest=0"); + + if (g_sci->getGameId() == GID_SQ6 || g_sci->getGameId() == GID_MOTHERGOOSEHIRES) { + if (getLongest(&charIndex, textRectWidth) == 0) { + error("DrawTextBox GetLongest=0"); + } } charIndex = 0; @@ -311,6 +318,10 @@ void GfxText32::drawText(const uint index, uint length) { ++text; --length; } + if (length > 0) { + ++text; + --length; + } } else { drawChar(currentChar); } @@ -498,7 +509,7 @@ int16 GfxText32::getTextWidth(const uint index, uint length) const { --length; fontId = fontId * 10 + currentChar - '0'; - } while (length > 0 && currentChar >= '0' && currentChar <= '9'); + } while (length > 0 && *text >= '0' && *text <= '9'); if (length > 0) { font = _cache->getFont(fontId); @@ -506,7 +517,11 @@ int16 GfxText32::getTextWidth(const uint index, uint length) const { } // Forward through any more unknown control character data - while (length > 0 && currentChar != '|') { + while (length > 0 && *text != '|') { + ++text; + --length; + } + if (length > 0) { ++text; --length; } @@ -514,8 +529,10 @@ int16 GfxText32::getTextWidth(const uint index, uint length) const { width += font->getCharWidth(currentChar); } - currentChar = *text++; - --length; + if (length > 0) { + currentChar = *text++; + --length; + } } return width; @@ -573,11 +590,16 @@ Common::Rect GfxText32::getTextSize(const Common::String &text, int16 maxWidth, } } else { result.right = getTextWidth(0, 10000); - // NOTE: In the original engine code, the bottom was not decremented - // by 1, which means that the rect was actually a pixel taller than - // the height of the font. This was not the case in the other branch, - // which decremented the bottom by 1 at the end of the loop. - result.bottom = _font->getHeight() + 1; + + if (getSciVersion() < SCI_VERSION_2_1_MIDDLE) { + result.bottom = 0; + } else { + // NOTE: In the original engine code, the bottom was not decremented + // by 1, which means that the rect was actually a pixel taller than + // the height of the font. This was not the case in the other branch, + // which decremented the bottom by 1 at the end of the loop. + result.bottom = _font->getHeight() + 1; + } } if (doScaling) { @@ -593,14 +615,8 @@ Common::Rect GfxText32::getTextSize(const Common::String &text, int16 maxWidth, void GfxText32::erase(const Common::Rect &rect, const bool doScaling) { Common::Rect targetRect = doScaling ? scaleRect(rect) : rect; - byte *bitmap = _segMan->getHunkPointer(_bitmap); - byte *pixels = bitmap + READ_SCI11ENDIAN_UINT32(bitmap + 28); - - // NOTE: There is an extra optimisation within the SCI code to - // do a single memset if the scaledRect is the same size as - // the bitmap, not implemented here. - Buffer buffer(_width, _height, pixels); - buffer.fillRect(targetRect, _backColor); + BitmapResource bitmap(_bitmap); + bitmap.getBuffer().fillRect(targetRect, _backColor); } int16 GfxText32::getStringWidth(const Common::String &text) { @@ -635,5 +651,69 @@ int16 GfxText32::getTextCount(const Common::String &text, const uint index, cons return getTextCount(text, index, textRect, doScaling); } +void GfxText32::scrollLine(const Common::String &lineText, int numLines, uint8 color, TextAlign align, GuiResourceId fontId, ScrollDirection dir) { + BitmapResource bmr(_bitmap); + byte *pixels = bmr.getPixels(); + + int h = _font->getHeight(); + + if (dir == kScrollUp) { + // Scroll existing text down + for (int i = 0; i < (numLines - 1) * h; ++i) { + int y = _textRect.top + numLines * h - i - 1; + memcpy(pixels + y * _width + _textRect.left, + pixels + (y - h) * _width + _textRect.left, + _textRect.width()); + } + } else { + // Scroll existing text up + for (int i = 0; i < (numLines - 1) * h; ++i) { + int y = _textRect.top + i; + memcpy(pixels + y * _width + _textRect.left, + pixels + (y + h) * _width + _textRect.left, + _textRect.width()); + } + } + + Common::Rect lineRect = _textRect; + + if (dir == kScrollUp) { + lineRect.bottom = lineRect.top + h; + } else { + // It is unclear to me what the purpose of this bottom++ is. + // It does not seem to be the usual inc/exc issue. + lineRect.top += (numLines - 1) * h; + lineRect.bottom++; + } + + erase(lineRect, false); + + _drawPosition.x = _textRect.left; + _drawPosition.y = _textRect.top; + if (dir == kScrollDown) { + _drawPosition.y += (numLines - 1) * h; + } + + _foreColor = color; + _alignment = align; + //int fc = _foreColor; + + setFont(fontId); + + _text = lineText; + int16 textWidth = getTextWidth(0, lineText.size()); + + if (_alignment == kTextAlignCenter) { + _drawPosition.x += (_textRect.width() - textWidth) / 2; + } else if (_alignment == kTextAlignRight) { + _drawPosition.x += _textRect.width() - textWidth; + } + + //_foreColor = fc; + //setFont(fontId); + + drawText(0, lineText.size()); +} + } // End of namespace Sci diff --git a/engines/sci/graphics/text32.h b/engines/sci/graphics/text32.h index 20adb3d7c7..a61760dd87 100644 --- a/engines/sci/graphics/text32.h +++ b/engines/sci/graphics/text32.h @@ -23,15 +23,23 @@ #ifndef SCI_GRAPHICS_TEXT32_H #define SCI_GRAPHICS_TEXT32_H +#include "sci/engine/state.h" #include "sci/graphics/celobj32.h" #include "sci/graphics/frameout.h" +#include "sci/graphics/helpers.h" namespace Sci { enum TextAlign { - kTextAlignLeft = 0, - kTextAlignCenter = 1, - kTextAlignRight = 2 + kTextAlignDefault = -1, + kTextAlignLeft = 0, + kTextAlignCenter = 1, + kTextAlignRight = 2 +}; + +enum ScrollDirection { + kScrollUp, + kScrollDown }; enum BitmapFlags { @@ -53,6 +61,7 @@ inline void set##property(uint##size value) {\ class BitmapResource { byte *_bitmap; reg_t _object; + Buffer _buffer; /** * Gets the size of the bitmap header for the current @@ -96,6 +105,8 @@ public: if (_bitmap == nullptr || getUncompressedDataOffset() != getBitmapHeaderSize()) { error("Invalid Text bitmap %04x:%04x", PRINT_REG(bitmap)); } + + _buffer = Buffer(getWidth(), getHeight(), getPixels()); } /** @@ -103,7 +114,6 @@ public: * segment manager. */ inline BitmapResource(SegManager *segMan, const int16 width, const int16 height, const uint8 skipColor, const int16 displaceX, const int16 displaceY, const int16 scaledWidth, const int16 scaledHeight, const uint32 hunkPaletteOffset, const bool remap) { - _object = segMan->allocateHunkEntry("Bitmap()", getBitmapSize(width, height)); _bitmap = segMan->getHunkPointer(_object); @@ -124,12 +134,18 @@ public: setControlOffset(0); setScaledWidth(scaledWidth); setScaledHeight(scaledHeight); + + _buffer = Buffer(getWidth(), getHeight(), getPixels()); } - reg_t getObject() const { + inline reg_t getObject() const { return _object; } + inline Buffer &getBuffer() { + return _buffer; + } + BITMAP_PROPERTY(16, Width, 0); BITMAP_PROPERTY(16, Height, 2); @@ -173,7 +189,7 @@ public: return READ_SCI11ENDIAN_UINT32(_bitmap + 20); } - void setHunkPaletteOffset(uint32 hunkPaletteOffset) { + inline void setHunkPaletteOffset(uint32 hunkPaletteOffset) { if (hunkPaletteOffset) { hunkPaletteOffset += getBitmapHeaderSize(); } @@ -351,15 +367,15 @@ public: /** * The size of the x-dimension of the coordinate system - * used by the text renderer. + * used by the text renderer. Static since it was global in SSCI. */ - int16 _scaledWidth; + static int16 _scaledWidth; /** * The size of the y-dimension of the coordinate system - * used by the text renderer. + * used by the text renderer. Static since it was global in SSCI. */ - int16 _scaledHeight; + static int16 _scaledHeight; /** * The currently active font resource used to write text @@ -456,6 +472,13 @@ public: * `textRect` using the given font. */ int16 getTextCount(const Common::String &text, const uint index, const GuiResourceId fontId, const Common::Rect &textRect, const bool doScaling); + + /** + * Scroll up/down one line. `numLines` is the number of the lines in the + * textarea, and `textLine` contains the text to draw as the newly + * visible line. Originally FontMgr::DrawOneLine and FontMgr::UpOneLine. + */ + void scrollLine(const Common::String &textLine, int numLines, uint8 color, TextAlign align, GuiResourceId fontId, ScrollDirection dir); }; } // End of namespace Sci diff --git a/engines/sci/graphics/view.h b/engines/sci/graphics/view.h index 91590208c1..96b48c0477 100644 --- a/engines/sci/graphics/view.h +++ b/engines/sci/graphics/view.h @@ -55,6 +55,7 @@ struct LoopInfo { class GfxScreen; class GfxPalette; +class Resource; /** * View class, handles loading of view resources and drawing contained cels to screen diff --git a/engines/sci/module.mk b/engines/sci/module.mk index a02147e4d0..5d54e2a52c 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -51,7 +51,6 @@ MODULE_OBJS := \ graphics/fontsjis.o \ graphics/maciconbar.o \ graphics/menu.o \ - graphics/paint.o \ graphics/paint16.o \ graphics/palette.o \ graphics/picture.o \ @@ -69,6 +68,7 @@ MODULE_OBJS := \ sound/midiparser_sci.o \ sound/music.o \ sound/soundcmd.o \ + sound/sync.o \ sound/drivers/adlib.o \ sound/drivers/amigamac.o \ sound/drivers/cms.o \ @@ -88,8 +88,11 @@ MODULE_OBJS += \ graphics/paint32.o \ graphics/plane32.o \ graphics/palette32.o \ + graphics/remap32.o \ graphics/screen_item32.o \ graphics/text32.o \ + sound/audio32.o \ + sound/decoders/sol.o \ video/robot_decoder.o endif diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 6a5af1a6d6..3e50fc1082 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -26,6 +26,9 @@ #include "common/fs.h" #include "common/macresman.h" #include "common/textconsole.h" +#ifdef ENABLE_SCI32 +#include "common/memstream.h" +#endif #include "sci/resource.h" #include "sci/resource_intern.h" @@ -221,6 +224,12 @@ void Resource::writeToStream(Common::WriteStream *stream) const { stream->write(data, size); } +#ifdef ENABLE_SCI32 +Common::SeekableReadStream *Resource::makeStream() const { + return new Common::MemoryReadStream(data, size, DisposeAfterUse::NO); +} +#endif + uint32 Resource::getAudioCompressionType() const { return _source->getAudioCompressionType(); } @@ -229,7 +238,6 @@ uint32 AudioVolumeResourceSource::getAudioCompressionType() const { return _audioCompressionType; } - ResourceSource::ResourceSource(ResSourceType type, const Common::String &name, int volNum, const Common::FSNode *resFile) : _sourceType(type), _name(name), _volumeNumber(volNum), _resourceFile(resFile) { _scanned = false; @@ -1043,7 +1051,13 @@ Resource *ResourceManager::findResource(ResourceId id, bool lock) { if (retval->_status == kResStatusNoMalloc) loadResource(retval); else if (retval->_status == kResStatusEnqueued) + // The resource is removed from its current position + // in the LRU list because it has been requested + // again. Below, it will either be locked, or it + // will be added back to the LRU list at the 'most + // recent' position. removeFromLRU(retval); + // Unless an error occurred, the resource is now either // locked or allocated, but never queued or freed. @@ -1352,6 +1366,7 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource Common::File *file = new Common::File(); if (!file->open(source->getLocationName())) { warning("ResourceManager::processPatch(): failed to open %s", source->getLocationName().c_str()); + delete source; return; } fileStream = file; @@ -1360,6 +1375,7 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource int fsize = fileStream->size(); if (fsize < 3) { debug("Patching %s failed - file too small", source->getLocationName().c_str()); + delete source; return; } @@ -1370,6 +1386,7 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource if (patchType != checkForType) { debug("Patching %s failed - resource type mismatch", source->getLocationName().c_str()); + delete source; return; } @@ -1394,6 +1411,7 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource if (patchDataOffset + 2 >= fsize) { debug("Patching %s failed - patch starting at offset %d can't be in file of size %d", source->getLocationName().c_str(), patchDataOffset + 2, fsize); + delete source; return; } @@ -1441,13 +1459,18 @@ void ResourceManager::readResourcePatchesBase36() { files.clear(); // audio36 resources start with a @, A, or B - // sync36 resources start with a # + // sync36 resources start with a #, S, or T if (i == kResourceTypeAudio36) { SearchMan.listMatchingMembers(files, "@???????.???"); SearchMan.listMatchingMembers(files, "A???????.???"); SearchMan.listMatchingMembers(files, "B???????.???"); - } else + } else { SearchMan.listMatchingMembers(files, "#???????.???"); +#ifdef ENABLE_SCI32 + SearchMan.listMatchingMembers(files, "S???????.???"); + SearchMan.listMatchingMembers(files, "T???????.???"); +#endif + } for (Common::ArchiveMemberList::const_iterator x = files.begin(); x != files.end(); ++x) { name = (*x)->getName(); diff --git a/engines/sci/resource.h b/engines/sci/resource.h index ef474d97c2..f70bf48bd4 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -84,7 +84,10 @@ enum ResourceType { kResourceTypePatch, kResourceTypeBitmap, kResourceTypePalette, - kResourceTypeCdAudio, + kResourceTypeCdAudio = 12, +#ifdef ENABLE_SCI32 + kResourceTypeWave = 12, +#endif kResourceTypeAudio, kResourceTypeSync, kResourceTypeMessage, @@ -212,6 +215,10 @@ public: return (_type == other._type) && (_number == other._number) && (_tuple == other._tuple); } + bool operator!=(const ResourceId &other) const { + return !operator==(other); + } + bool operator<(const ResourceId &other) const { return (_type < other._type) || ((_type == other._type) && (_number < other._number)) || ((_type == other._type) && (_number == other._number) && (_tuple < other._tuple)); @@ -259,6 +266,10 @@ public: */ void writeToStream(Common::WriteStream *stream) const; +#ifdef ENABLE_SCI32 + Common::SeekableReadStream *makeStream() const; +#endif + const Common::String &getResourceLocation() const; // FIXME: This audio specific method is a hack. After all, why should a diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index 5717a09121..5ab443a16d 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -25,7 +25,7 @@ #include "common/archive.h" #include "common/file.h" #include "common/textconsole.h" - +#include "common/memstream.h" #include "sci/resource.h" #include "sci/resource_intern.h" #include "sci/util.h" @@ -869,6 +869,7 @@ void WaveResourceSource::loadResource(ResourceManager *resMan, Resource *res) { if (!fileStream) return; + assert(fileStream->size() == -1 || res->_fileOffset < fileStream->size()); fileStream->seek(res->_fileOffset, SEEK_SET); res->loadFromWaveFile(fileStream); if (_resourceFile) @@ -922,6 +923,7 @@ void AudioVolumeResourceSource::loadResource(ResourceManager *resMan, Resource * break; } } else { + assert(fileStream->size() == -1 || res->_fileOffset < fileStream->size()); // original file, directly seek to given offset and get SCI1/SCI1.1 audio resource fileStream->seek(res->_fileOffset, SEEK_SET); } diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index e14d12b918..41fa144b06 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -43,12 +43,12 @@ #include "sci/sound/audio.h" #include "sci/sound/music.h" +#include "sci/sound/sync.h" #include "sci/sound/soundcmd.h" #include "sci/graphics/animate.h" #include "sci/graphics/cache.h" #include "sci/graphics/compare.h" #include "sci/graphics/controls16.h" -#include "sci/graphics/controls32.h" #include "sci/graphics/coordadjuster.h" #include "sci/graphics/cursor.h" #include "sci/graphics/maciconbar.h" @@ -64,9 +64,12 @@ #include "sci/graphics/transitions.h" #ifdef ENABLE_SCI32 +#include "sci/graphics/controls32.h" +#include "sci/graphics/frameout.h" #include "sci/graphics/palette32.h" +#include "sci/graphics/remap32.h" #include "sci/graphics/text32.h" -#include "sci/graphics/frameout.h" +#include "sci/sound/audio32.h" #include "sci/video/robot_decoder.h" #endif @@ -86,6 +89,10 @@ SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc, SciGameId gam _gfxMacIconBar = 0; _audio = 0; + _sync = nullptr; +#ifdef ENABLE_SCI32 + _audio32 = nullptr; +#endif _features = 0; _resMan = 0; _gamestate = 0; @@ -161,16 +168,18 @@ SciEngine::~SciEngine() { // and will be destroyed when _gfxPalette16 is // destroyed delete _gfxControls32; + delete _gfxPaint32; delete _gfxText32; delete _robotDecoder; delete _gfxFrameout; delete _gfxRemap32; + delete _audio32; #endif delete _gfxMenu; delete _gfxControls16; delete _gfxText16; delete _gfxAnimate; - delete _gfxPaint; + delete _gfxPaint16; delete _gfxTransitions; delete _gfxCompare; delete _gfxCoordAdjuster; @@ -182,6 +191,7 @@ SciEngine::~SciEngine() { delete _gfxScreen; delete _audio; + delete _sync; delete _soundCmd; delete _kernel; delete _vocabulary; @@ -266,7 +276,14 @@ Common::Error SciEngine::run() { // Also, XMAS1990 apparently had a parser too. Refer to http://forums.scummvm.org/viewtopic.php?t=9135 if (getGameId() == GID_CHRISTMAS1990) _vocabulary = new Vocabulary(_resMan, false); - _audio = new AudioPlayer(_resMan); + +#ifdef ENABLE_SCI32 + if (getSciVersion() >= SCI_VERSION_2_1_EARLY) { + _audio32 = new Audio32(_resMan); + } else +#endif + _audio = new AudioPlayer(_resMan); + _sync = new Sync(_resMan, segMan); _gamestate = new EngineState(segMan); _eventMan = new EventManager(_resMan->detectFontExtended()); @@ -660,7 +677,6 @@ void SciEngine::initGraphics() { _gfxCursor = 0; _gfxMacIconBar = 0; _gfxMenu = 0; - _gfxPaint = 0; _gfxPaint16 = 0; _gfxPalette16 = 0; _gfxRemap16 = 0; @@ -684,7 +700,7 @@ void SciEngine::initGraphics() { if (getSciVersion() >= SCI_VERSION_2) { _gfxPalette32 = new GfxPalette32(_resMan, _gfxScreen); _gfxPalette16 = _gfxPalette32; - _gfxRemap32 = new GfxRemap32(_gfxPalette32); + _gfxRemap32 = new GfxRemap32(); } else { #endif _gfxPalette16 = new GfxPalette(_resMan, _gfxScreen); @@ -703,10 +719,9 @@ void SciEngine::initGraphics() { _gfxCoordAdjuster = new GfxCoordAdjuster32(_gamestate->_segMan); _gfxCursor->init(_gfxCoordAdjuster, _eventMan); _gfxCompare = new GfxCompare(_gamestate->_segMan, _gfxCache, _gfxScreen, _gfxCoordAdjuster); - _gfxPaint32 = new GfxPaint32(_resMan, _gfxCoordAdjuster, _gfxScreen, _gfxPalette32); - _gfxPaint = _gfxPaint32; + _gfxPaint32 = new GfxPaint32(_gamestate->_segMan); _robotDecoder = new RobotDecoder(getPlatform() == Common::kPlatformMacintosh); - _gfxFrameout = new GfxFrameout(_gamestate->_segMan, _resMan, _gfxCoordAdjuster, _gfxCache, _gfxScreen, _gfxPalette32, _gfxPaint32); + _gfxFrameout = new GfxFrameout(_gamestate->_segMan, _resMan, _gfxCoordAdjuster, _gfxScreen, _gfxPalette32); _gfxText32 = new GfxText32(_gamestate->_segMan, _gfxCache); _gfxControls32 = new GfxControls32(_gamestate->_segMan, _gfxCache, _gfxText32); _gfxFrameout->run(); @@ -719,7 +734,6 @@ void SciEngine::initGraphics() { _gfxCompare = new GfxCompare(_gamestate->_segMan, _gfxCache, _gfxScreen, _gfxCoordAdjuster); _gfxTransitions = new GfxTransitions(_gfxScreen, _gfxPalette16); _gfxPaint16 = new GfxPaint16(_resMan, _gamestate->_segMan, _gfxCache, _gfxPorts, _gfxCoordAdjuster, _gfxScreen, _gfxPalette16, _gfxTransitions, _audio); - _gfxPaint = _gfxPaint16; _gfxAnimate = new GfxAnimate(_gamestate, _scriptPatcher, _gfxCache, _gfxPorts, _gfxPaint16, _gfxScreen, _gfxPalette16, _gfxCursor, _gfxTransitions); _gfxText16 = new GfxText16(_gfxCache, _gfxPorts, _gfxPaint16, _gfxScreen); _gfxControls16 = new GfxControls16(_gamestate->_segMan, _gfxPorts, _gfxPaint16, _gfxText16, _gfxScreen); @@ -801,7 +815,10 @@ void SciEngine::runGame() { void SciEngine::exitGame() { if (_gamestate->abortScriptProcessing != kAbortLoadGame) { _gamestate->_executionStack.clear(); - _audio->stopAllAudio(); + if (_audio) { + _audio->stopAllAudio(); + } + _sync->stop(); _soundCmd->clearPlayList(); } @@ -897,6 +914,10 @@ Common::String SciEngine::unwrapFilename(const Common::String &name) const { return name; } +const char *SciEngine::getGameObjectName() { + return _gamestate->_segMan->getObjectName(_gameObjectAddress); +} + int SciEngine::inQfGImportRoom() const { if (_gameId == GID_QFG2 && _gamestate->currentRoomNumber() == 805) { // QFG2 character import screen diff --git a/engines/sci/sci.h b/engines/sci/sci.h index c49a516d01..956187ce69 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -56,6 +56,7 @@ class SoundCommandParser; class EventManager; class SegManager; class ScriptPatcher; +class Sync; class GfxAnimate; class GfxCache; @@ -66,7 +67,6 @@ class GfxCoordAdjuster; class GfxCursor; class GfxMacIconBar; class GfxMenu; -class GfxPaint; class GfxPaint16; class GfxPaint32; class GfxPalette; @@ -82,6 +82,7 @@ class GfxTransitions; #ifdef ENABLE_SCI32 class RobotDecoder; class GfxFrameout; +class Audio32; #endif // our engine debug levels @@ -302,6 +303,8 @@ public: /** Remove the 'TARGET-' prefix of the given filename, if present. */ Common::String unwrapFilename(const Common::String &name) const; + const char *getGameObjectName(); // Gets the name of the game object (should only be used for identifying fanmade games) + /** * Checks if we are in a QfG import screen, where special handling * of file-listings is performed. @@ -356,7 +359,6 @@ public: GfxPalette32 *_gfxPalette32; // Palette for 32-bit gfx GfxRemap *_gfxRemap16; // Remapping for the QFG4 demo GfxRemap32 *_gfxRemap32; // Remapping for 32-bit gfx - GfxPaint *_gfxPaint; GfxPaint16 *_gfxPaint16; // Painting in 16-bit gfx GfxPaint32 *_gfxPaint32; // Painting in 32-bit gfx GfxPorts *_gfxPorts; // Port managment for 16-bit gfx @@ -367,11 +369,13 @@ public: GfxMacIconBar *_gfxMacIconBar; // Mac Icon Bar manager #ifdef ENABLE_SCI32 + Audio32 *_audio32; RobotDecoder *_robotDecoder; GfxFrameout *_gfxFrameout; // kFrameout and the like for 32-bit gfx #endif AudioPlayer *_audio; + Sync *_sync; SoundCommandParser *_soundCmd; GameFeatures *_features; diff --git a/engines/sci/sound/audio.cpp b/engines/sci/sound/audio.cpp index a74bfa245f..4fb9a58003 100644 --- a/engines/sci/sound/audio.cpp +++ b/engines/sci/sound/audio.cpp @@ -22,7 +22,6 @@ #include "sci/resource.h" #include "sci/engine/kernel.h" -#include "sci/engine/selector.h" #include "sci/engine/seg_manager.h" #include "sci/sound/audio.h" @@ -45,7 +44,7 @@ namespace Sci { AudioPlayer::AudioPlayer(ResourceManager *resMan) : _resMan(resMan), _audioRate(11025), - _syncResource(NULL), _syncOffset(0), _audioCdStart(0), _initCD(false) { + _audioCdStart(0), _initCD(false) { _mixer = g_system->getMixer(); _wPlayFlag = false; @@ -56,7 +55,6 @@ AudioPlayer::~AudioPlayer() { } void AudioPlayer::stopAllAudio() { - stopSoundSync(); stopAudio(); if (_audioCdStart > 0) audioCdStop(); @@ -255,13 +253,7 @@ static void deDPCM16(byte *soundBuf, Common::SeekableReadStream &audioStream, ui static void deDPCM8Nibble(byte *soundBuf, int32 &s, byte b) { if (b & 8) { -#ifdef ENABLE_SCI32 - // SCI2.1 reverses the order of the table values here - if (getSciVersion() >= SCI_VERSION_2_1_EARLY) - s -= tableDPCM8[b & 7]; - else -#endif - s -= tableDPCM8[7 - (b & 7)]; + s -= tableDPCM8[7 - (b & 7)]; } else s += tableDPCM8[b & 7]; s = CLIP<int32>(s, 0, 255); @@ -474,43 +466,6 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32 return NULL; } -void AudioPlayer::setSoundSync(ResourceId id, reg_t syncObjAddr, SegManager *segMan) { - _syncResource = _resMan->findResource(id, 1); - _syncOffset = 0; - - if (_syncResource) { - writeSelectorValue(segMan, syncObjAddr, SELECTOR(syncCue), 0); - } else { - warning("setSoundSync: failed to find resource %s", id.toString().c_str()); - // Notify the scripts to stop sound sync - writeSelectorValue(segMan, syncObjAddr, SELECTOR(syncCue), SIGNAL_OFFSET); - } -} - -void AudioPlayer::doSoundSync(reg_t syncObjAddr, SegManager *segMan) { - if (_syncResource && (_syncOffset < _syncResource->size - 1)) { - int16 syncCue = -1; - int16 syncTime = (int16)READ_SCI11ENDIAN_UINT16(_syncResource->data + _syncOffset); - - _syncOffset += 2; - - if ((syncTime != -1) && (_syncOffset < _syncResource->size - 1)) { - syncCue = (int16)READ_SCI11ENDIAN_UINT16(_syncResource->data + _syncOffset); - _syncOffset += 2; - } - - writeSelectorValue(segMan, syncObjAddr, SELECTOR(syncTime), syncTime); - writeSelectorValue(segMan, syncObjAddr, SELECTOR(syncCue), syncCue); - } -} - -void AudioPlayer::stopSoundSync() { - if (_syncResource) { - _resMan->unlockResource(_syncResource); - _syncResource = NULL; - } -} - int AudioPlayer::audioCdPlay(int track, int start, int duration) { if (!_initCD) { // Initialize CD mode if we haven't already diff --git a/engines/sci/sound/audio.h b/engines/sci/sound/audio.h index 4a8b26567d..3d25dcaeef 100644 --- a/engines/sci/sound/audio.h +++ b/engines/sci/sound/audio.h @@ -46,12 +46,6 @@ enum AudioCommands { kSciAudioCD = 10 /* Plays SCI1.1 CD audio */ }; -enum AudioSyncCommands { - kSciAudioSyncStart = 0, - kSciAudioSyncNext = 1, - kSciAudioSyncStop = 2 -}; - #define AUDIO_VOLUME_MAX 127 class Resource; @@ -77,10 +71,6 @@ public: void handleFanmadeSciAudio(reg_t sciAudioObject, SegManager *segMan); - void setSoundSync(ResourceId id, reg_t syncObjAddr, SegManager *segMan); - void doSoundSync(reg_t syncObjAddr, SegManager *segMan); - void stopSoundSync(); - int audioCdPlay(int track, int start, int duration); void audioCdStop(); void audioCdUpdate(); @@ -93,8 +83,6 @@ private: uint16 _audioRate; Audio::SoundHandle _audioHandle; Audio::Mixer *_mixer; - Resource *_syncResource; /**< Used by kDoSync for speech syncing in CD talkie games */ - uint _syncOffset; uint32 _audioCdStart; bool _wPlayFlag; bool _initCD; diff --git a/engines/sci/sound/audio32.cpp b/engines/sci/sound/audio32.cpp new file mode 100644 index 0000000000..ced88a3028 --- /dev/null +++ b/engines/sci/sound/audio32.cpp @@ -0,0 +1,997 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "sci/sound/audio32.h" +#include "audio/audiostream.h" // for SeekableAudioStream +#include "audio/decoders/raw.h" // for makeRawStream, RawFlags::FLAG_16BITS +#include "audio/decoders/wave.h" // for makeWAVStream +#include "audio/rate.h" // for RateConverter, makeRateConverter +#include "audio/timestamp.h" // for Timestamp +#include "common/config-manager.h" // for ConfMan +#include "common/endian.h" // for MKTAG +#include "common/memstream.h" // for MemoryReadStream +#include "common/str.h" // for String +#include "common/stream.h" // for SeekableReadStream +#include "common/system.h" // for OSystem, g_system +#include "common/textconsole.h" // for warning +#include "common/types.h" // for Flag::NO +#include "engine.h" // for Engine, g_engine +#include "sci/engine/vm_types.h" // for reg_t, make_reg, NULL_REG +#include "sci/resource.h" // for ResourceId, ResourceType::kResour... +#include "sci/sci.h" // for SciEngine, g_sci, getSciVersion +#include "sci/sound/decoders/sol.h" // for makeSOLStream + +namespace Sci { + +bool detectSolAudio(Common::SeekableReadStream &stream) { + const size_t initialPosition = stream.pos(); + +// TODO: Resource manager for audio resources reads past the +// header so even though this is the detection algorithm +// in SSCI, ScummVM can't use it +#if 0 + byte header[6]; + if (stream.read(header, sizeof(header)) != sizeof(header)) { + stream.seek(initialPosition); + return false; + } + + stream.seek(initialPosition); + + if (header[0] != 0x8d || READ_BE_UINT32(header + 2) != MKTAG('S', 'O', 'L', 0)) { + return false; + } + + return true; +#else + byte header[4]; + if (stream.read(header, sizeof(header)) != sizeof(header)) { + stream.seek(initialPosition); + return false; + } + + stream.seek(initialPosition); + + if (READ_BE_UINT32(header) != MKTAG('S', 'O', 'L', 0)) { + return false; + } + + return true; +#endif +} + +bool detectWaveAudio(Common::SeekableReadStream &stream) { + const size_t initialPosition = stream.pos(); + + byte blockHeader[8]; + if (stream.read(blockHeader, sizeof(blockHeader)) != sizeof(blockHeader)) { + stream.seek(initialPosition); + return false; + } + + stream.seek(initialPosition); + const uint32 headerType = READ_BE_UINT32(blockHeader); + + if (headerType != MKTAG('R', 'I', 'F', 'F')) { + return false; + } + + return true; +} + +#pragma mark - + +Audio32::Audio32(ResourceManager *resMan) : + _resMan(resMan), + _mixer(g_system->getMixer()), + _handle(), + _mutex(), + + _numActiveChannels(0), + _inAudioThread(false), + + _globalSampleRate(44100), + _maxAllowedSampleRate(44100), + _globalBitDepth(16), + _maxAllowedBitDepth(16), + _globalNumOutputChannels(2), + _maxAllowedOutputChannels(2), + _preload(0), + + _robotAudioPaused(false), + + _pausedAtTick(0), + _startedAtTick(0), + + _attenuatedMixing(true), + + _monitoredChannelIndex(-1), + _monitoredBuffer(nullptr), + _monitoredBufferSize(0), + _numMonitoredSamples(0) { + + if (getSciVersion() < SCI_VERSION_3) { + _channels.resize(5); + } else { + _channels.resize(8); + } + + _useModifiedAttenuation = false; + if (getSciVersion() == SCI_VERSION_2_1_MIDDLE) { + switch (g_sci->getGameId()) { + case GID_MOTHERGOOSEHIRES: + case GID_PQ4: + case GID_QFG4: + case GID_SQ6: + _useModifiedAttenuation = true; + default: + break; + } + } else if (getSciVersion() == SCI_VERSION_2_1_EARLY) { + switch (g_sci->getGameId()) { + // 1.51 uses the non-standard attenuation, but 2.00b + // does not, which is strange. + case GID_KQ7: + _useModifiedAttenuation = true; + default: + break; + } + } + + _mixer->playStream(Audio::Mixer::kSFXSoundType, &_handle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); + _mixer->pauseHandle(_handle, true); +} + +Audio32::~Audio32() { + stop(kAllChannels); + _mixer->stopHandle(_handle); + free(_monitoredBuffer); +} + +#pragma mark - +#pragma mark AudioStream implementation + +int Audio32::writeAudioInternal(Audio::RewindableAudioStream *const sourceStream, Audio::RateConverter *const converter, Audio::st_sample_t *targetBuffer, const int numSamples, const Audio::st_volume_t leftVolume, const Audio::st_volume_t rightVolume, const bool loop) { + int samplesToRead = numSamples; + + // The parent rate converter will request N * 2 + // samples from this `readBuffer` call, because + // we tell it that we send stereo output, but + // the source stream we're mixing in may be + // mono, in which case we need to request half + // as many samples from the mono stream and let + // the converter double them for stereo output + if (!sourceStream->isStereo()) { + samplesToRead >>= 1; + } + + int samplesWritten = 0; + + do { + if (loop && sourceStream->endOfStream()) { + sourceStream->rewind(); + } + + const int loopSamplesWritten = converter->flow(*sourceStream, targetBuffer, samplesToRead, leftVolume, rightVolume); + + if (loopSamplesWritten == 0) { + break; + } + + samplesToRead -= loopSamplesWritten; + samplesWritten += loopSamplesWritten; + targetBuffer += loopSamplesWritten << 1; + } while (loop && samplesToRead > 0); + + if (!sourceStream->isStereo()) { + samplesWritten <<= 1; + } + + return samplesWritten; +} + +// In earlier versions of SCI32 engine, audio mixing is +// split into three different functions. +// +// The first function is called from the main game thread in +// AsyncEventCheck; later versions of SSCI also call it when +// getting the playback position. This function is +// responsible for cleaning up finished channels and +// filling active channel buffers with decompressed audio +// matching the hardware output audio format so they can +// just be copied into the main DAC buffer directly later. +// +// The second function is called by the audio hardware when +// the DAC buffer needs to be filled, and by `play` when +// there is only one active sample (so it can just blow away +// whatever was already in the DAC buffer). It merges all +// active channels into the DAC buffer and then updates the +// offset into the DAC buffer. +// +// Finally, a third function is called by the second +// function, and it actually puts data into the DAC buffer, +// performing volume, distortion, and balance adjustments. +// +// Since we only have one callback from the audio thread, +// and should be able to do all audio processing in +// real time, and we have streams, and we do not need to +// completely fill the audio buffer, the functionality of +// all these original functions is combined here and +// simplified. +int Audio32::readBuffer(Audio::st_sample_t *buffer, const int numSamples) { + Common::StackLock lock(_mutex); + + // ResourceManager is not thread-safe so we need to + // avoid calling into it from the audio thread, but at + // the same time we need to be able to clear out any + // finished channels on a regular basis + _inAudioThread = true; + + // The system mixer should not try to get data when + // Audio32 is paused + assert(_pausedAtTick == 0 && _numActiveChannels > 0); + + freeUnusedChannels(); + + // The caller of `readBuffer` is a rate converter, + // which reuses (without clearing) an intermediate + // buffer, so we need to zero the intermediate buffer + // to prevent mixing into audio data from the last + // callback. + memset(buffer, 0, numSamples * sizeof(Audio::st_sample_t)); + + // This emulates the attenuated mixing mode of SSCI + // engine, which reduces the volume of the target + // buffer when each new channel is mixed in. + // Instead of manipulating the content of the target + // buffer when mixing (which would either require + // modification of RateConverter or an expensive second + // pass against the entire target buffer), we just + // scale the volume for each channel in advance, with + // the earliest (lowest) channel having the highest + // amount of attenuation (lowest volume). + uint8 attenuationAmount; + uint8 attenuationStepAmount; + if (_useModifiedAttenuation) { + // channel | divisor + // 0 | 0 (>> 0) + // 1 | 4 (>> 2) + // 2 | 8... + attenuationAmount = _numActiveChannels * 2; + attenuationStepAmount = 2; + } else { + // channel | divisor + // 0 | 2 (>> 1) + // 1 | 4 (>> 2) + // 2 | 6... + if (_monitoredChannelIndex == -1 && _numActiveChannels > 1) { + attenuationAmount = _numActiveChannels + 1; + attenuationStepAmount = 1; + } else { + attenuationAmount = 0; + attenuationStepAmount = 0; + } + } + + int maxSamplesWritten = 0; + + for (int16 channelIndex = 0; channelIndex < _numActiveChannels; ++channelIndex) { + attenuationAmount -= attenuationStepAmount; + + const AudioChannel &channel = getChannel(channelIndex); + + if (channel.pausedAtTick || (channel.robot && _robotAudioPaused)) { + continue; + } + + // Channel finished fading and had the + // stopChannelOnFade flag set, so no longer exists + if (channel.fadeStepsRemaining && processFade(channelIndex)) { + --channelIndex; + continue; + } + + if (channel.robot) { + // TODO: Robot audio into output buffer + continue; + } + + if (channel.vmd) { + // TODO: VMD audio into output buffer + continue; + } + + Audio::st_volume_t leftVolume, rightVolume; + + if (channel.pan == -1 || !isStereo()) { + leftVolume = rightVolume = channel.volume * Audio::Mixer::kMaxChannelVolume / kMaxVolume; + } else { + // TODO: This should match the SCI3 algorithm, + // which seems to halve the volume of each + // channel when centered; is this intended? + leftVolume = channel.volume * (100 - channel.pan) / 100 * Audio::Mixer::kMaxChannelVolume / kMaxVolume; + rightVolume = channel.volume * channel.pan / 100 * Audio::Mixer::kMaxChannelVolume / kMaxVolume; + } + + if (_monitoredChannelIndex == -1 && _attenuatedMixing) { + leftVolume >>= attenuationAmount; + rightVolume >>= attenuationAmount; + } + + if (channelIndex == _monitoredChannelIndex) { + const size_t bufferSize = numSamples * sizeof(Audio::st_sample_t); + if (_monitoredBufferSize < bufferSize) { + _monitoredBuffer = (Audio::st_sample_t *)realloc(_monitoredBuffer, bufferSize); + _monitoredBufferSize = bufferSize; + } + + memset(_monitoredBuffer, 0, _monitoredBufferSize); + + _numMonitoredSamples = writeAudioInternal(channel.stream, channel.converter, _monitoredBuffer, numSamples, leftVolume, rightVolume, channel.loop); + + Audio::st_sample_t *sourceBuffer = _monitoredBuffer; + Audio::st_sample_t *targetBuffer = buffer; + const Audio::st_sample_t *const end = _monitoredBuffer + _numMonitoredSamples; + while (sourceBuffer != end) { + Audio::clampedAdd(*targetBuffer++, *sourceBuffer++); + } + + if (_numMonitoredSamples > maxSamplesWritten) { + maxSamplesWritten = _numMonitoredSamples; + } + } else if (!channel.stream->endOfStream() || channel.loop) { + const int channelSamplesWritten = writeAudioInternal(channel.stream, channel.converter, buffer, numSamples, leftVolume, rightVolume, channel.loop); + if (channelSamplesWritten > maxSamplesWritten) { + maxSamplesWritten = channelSamplesWritten; + } + } + } + + _inAudioThread = false; + + return maxSamplesWritten; +} + +#pragma mark - +#pragma mark Channel management + +int16 Audio32::findChannelByArgs(int argc, const reg_t *argv, const int startIndex, const reg_t soundNode) const { + // NOTE: argc/argv are already reduced by one in our engine because + // this call is always made from a subop, so no reduction for the + // subop is made in this function. SSCI takes extra steps to skip + // the subop argument. + + argc -= startIndex; + if (argc <= 0) { + return kAllChannels; + } + + Common::StackLock lock(_mutex); + + if (_numActiveChannels == 0) { + return kNoExistingChannel; + } + + ResourceId searchId; + + if (argc < 5) { + searchId = ResourceId(kResourceTypeAudio, argv[startIndex].toUint16()); + } else { + searchId = ResourceId( + kResourceTypeAudio36, + argv[startIndex].toUint16(), + argv[startIndex + 1].toUint16(), + argv[startIndex + 2].toUint16(), + argv[startIndex + 3].toUint16(), + argv[startIndex + 4].toUint16() + ); + } + + return findChannelById(searchId, soundNode); +} + +int16 Audio32::findChannelById(const ResourceId resourceId, const reg_t soundNode) const { + Common::StackLock lock(_mutex); + + if (_numActiveChannels == 0) { + return kNoExistingChannel; + } + + if (resourceId.getType() == kResourceTypeAudio) { + for (int16 i = 0; i < _numActiveChannels; ++i) { + const AudioChannel channel = _channels[i]; + if ( + channel.id == resourceId && + (soundNode.isNull() || soundNode == channel.soundNode) + ) { + return i; + } + } + } else if (resourceId.getType() == kResourceTypeAudio36) { + for (int16 i = 0; i < _numActiveChannels; ++i) { + const AudioChannel &candidate = getChannel(i); + if (!candidate.robot && candidate.id == resourceId) { + return i; + } + } + } else { + error("Audio32::findChannelById: Unknown resource type %d", resourceId.getType()); + } + + return kNoExistingChannel; +} + +void Audio32::freeUnusedChannels() { + Common::StackLock lock(_mutex); + for (int channelIndex = 0; channelIndex < _numActiveChannels; ++channelIndex) { + const AudioChannel &channel = getChannel(channelIndex); + if (channel.stream->endOfStream()) { + if (channel.loop) { + channel.stream->rewind(); + } else { + stop(channelIndex--); + } + } + } + + if (!_inAudioThread) { + unlockResources(); + } +} + +void Audio32::freeChannel(const int16 channelIndex) { + // The original engine did this: + // 1. Unlock memory-cached resource, if one existed + // 2. Close patched audio file descriptor, if one existed + // 3. Free decompression memory buffer, if one existed + // 4. Clear monitored memory buffer, if one existed + Common::StackLock lock(_mutex); + AudioChannel &channel = getChannel(channelIndex); + + // We cannot unlock resources from the audio thread + // because ResourceManager is not thread-safe; instead, + // we just record that the resource needs unlocking and + // unlock it whenever we are on the main thread again + if (_inAudioThread) { + _resourcesToUnlock.push_back(channel.resource); + } else { + _resMan->unlockResource(channel.resource); + } + + channel.resource = nullptr; + delete channel.stream; + channel.stream = nullptr; + delete channel.resourceStream; + channel.resourceStream = nullptr; + delete channel.converter; + channel.converter = nullptr; + + if (_monitoredChannelIndex == channelIndex) { + _monitoredChannelIndex = -1; + } +} + +void Audio32::unlockResources() { + Common::StackLock lock(_mutex); + assert(!_inAudioThread); + + for (UnlockList::const_iterator it = _resourcesToUnlock.begin(); it != _resourcesToUnlock.end(); ++it) { + _resMan->unlockResource(*it); + } + _resourcesToUnlock.clear(); +} + +#pragma mark - +#pragma mark Script compatibility + +void Audio32::setSampleRate(uint16 rate) { + if (rate > _maxAllowedSampleRate) { + rate = _maxAllowedSampleRate; + } + + _globalSampleRate = rate; +} + +void Audio32::setBitDepth(uint8 depth) { + if (depth > _maxAllowedBitDepth) { + depth = _maxAllowedBitDepth; + } + + _globalBitDepth = depth; +} + +void Audio32::setNumOutputChannels(int16 numChannels) { + if (numChannels > _maxAllowedOutputChannels) { + numChannels = _maxAllowedOutputChannels; + } + + _globalNumOutputChannels = numChannels; +} + +#pragma mark - +#pragma mark Playback + +uint16 Audio32::play(int16 channelIndex, const ResourceId resourceId, const bool autoPlay, const bool loop, const int16 volume, const reg_t soundNode, const bool monitor) { + Common::StackLock lock(_mutex); + + freeUnusedChannels(); + + if (channelIndex != kNoExistingChannel) { + AudioChannel &channel = getChannel(channelIndex); + + if (channel.pausedAtTick) { + resume(channelIndex); + return MIN(65534, 1 + channel.stream->getLength().msecs() * 60 / 1000); + } + + warning("Tried to resume channel %s that was not paused", channel.id.toString().c_str()); + return MIN(65534, 1 + channel.stream->getLength().msecs() * 60 / 1000); + } + + if (_numActiveChannels == _channels.size()) { + warning("Audio mixer is full when trying to play %s", resourceId.toString().c_str()); + return 0; + } + + // NOTE: SCI engine itself normally searches in this order: + // + // For Audio36: + // + // 1. First, request a FD using Audio36 name and use it as the + // source FD for reading the audio resource data. + // 2a. If the returned FD is -1, or equals the audio map, or + // equals the audio bundle, try to get the offset of the + // data from the audio map, using the Audio36 name. + // + // If the returned offset is -1, this is not a valid resource; + // return 0. Otherwise, set the read offset for the FD to the + // returned offset. + // 2b. Otherwise, use the FD as-is (it is a patch file), with zero + // offset, and record it separately so it can be closed later. + // + // For plain audio: + // + // 1. First, request an Audio resource from the resource cache. If + // one does not exist, make the same request for a Wave resource. + // 2a. If an audio resource was discovered, record its memory ID + // and clear the streaming FD + // 2b. Otherwise, request an Audio FD. If one does not exist, make + // the same request for a Wave FD. If neither exist, this is not + // a valid resource; return 0. Otherwise, use the returned FD as + // the streaming ID and set the memory ID to null. + // + // Once these steps are complete, the audio engine either has a file + // descriptor + offset that it can use to read streamed audio, or it + // has a memory ID that it can use to read cached audio. + // + // Here in ScummVM we just ask the resource manager to give us the + // resource and we get a seekable stream. + + // TODO: This should be fixed to use streaming, which means + // fixing the resource manager to allow streaming, which means + // probably rewriting a bunch of the resource manager. + Resource *resource = _resMan->findResource(resourceId, true); + if (resource == nullptr) { + return 0; + } + + channelIndex = _numActiveChannels++; + + AudioChannel &channel = getChannel(channelIndex); + channel.id = resourceId; + channel.resource = resource; + channel.loop = loop; + channel.robot = false; + channel.vmd = false; + channel.lastFadeTick = 0; + channel.fadeStepsRemaining = 0; + channel.soundNode = soundNode; + channel.volume = volume < 0 || volume > kMaxVolume ? (int)kMaxVolume : volume; + // TODO: SCI3 introduces stereo audio + channel.pan = -1; + + if (monitor) { + _monitoredChannelIndex = channelIndex; + } + + Common::MemoryReadStream headerStream(resource->_header, resource->_headerSize, DisposeAfterUse::NO); + Common::SeekableReadStream *dataStream = channel.resourceStream = resource->makeStream(); + + if (detectSolAudio(headerStream)) { + channel.stream = makeSOLStream(&headerStream, dataStream, DisposeAfterUse::NO); + } else if (detectWaveAudio(*dataStream)) { + channel.stream = Audio::makeWAVStream(dataStream, DisposeAfterUse::NO); + } else { + byte flags = Audio::FLAG_LITTLE_ENDIAN; + if (_globalBitDepth == 16) { + flags |= Audio::FLAG_16BITS; + } else { + flags |= Audio::FLAG_UNSIGNED; + } + + if (_globalNumOutputChannels == 2) { + flags |= Audio::FLAG_STEREO; + } + + channel.stream = Audio::makeRawStream(dataStream, _globalSampleRate, flags, DisposeAfterUse::NO); + } + + channel.converter = Audio::makeRateConverter(channel.stream->getRate(), getRate(), channel.stream->isStereo(), false); + + // NOTE: SCI engine sets up a decompression buffer here for the audio + // stream, plus writes information about the sample to the channel to + // convert to the correct hardware output format, and allocates the + // monitoring buffer to match the bitrate/samplerate/channels of the + // original stream. We do not need to do any of these things since we + // use audio streams, and allocate and fill the monitoring buffer + // when reading audio data from the stream. + + channel.duration = /* round up */ 1 + (channel.stream->getLength().msecs() * 60 / 1000); + + const uint32 now = g_sci->getTickCount(); + channel.pausedAtTick = autoPlay ? 0 : now; + channel.startedAtTick = now; + + if (_numActiveChannels == 1) { + _startedAtTick = now; + _mixer->pauseHandle(_handle, false); + } + + return channel.duration; +} + +bool Audio32::resume(const int16 channelIndex) { + if (channelIndex == kNoExistingChannel) { + return false; + } + + Common::StackLock lock(_mutex); + const uint32 now = g_sci->getTickCount(); + + if (channelIndex == kAllChannels) { + // Global pause in SSCI is an extra layer over + // individual channel pauses, so only unpause channels + // if there was not a global pause in place + if (_pausedAtTick == 0) { + return false; + } + + for (int i = 0; i < _numActiveChannels; ++i) { + AudioChannel &channel = getChannel(i); + if (!channel.pausedAtTick) { + channel.startedAtTick += now - _pausedAtTick; + } + } + + _startedAtTick += now - _pausedAtTick; + _pausedAtTick = 0; + _mixer->pauseHandle(_handle, false); + return true; + } else if (channelIndex == kRobotChannel) { + for (int i = 0; i < _numActiveChannels; ++i) { + AudioChannel &channel = getChannel(i); + if (channel.robot) { + channel.startedAtTick += now - channel.pausedAtTick; + channel.pausedAtTick = 0; + // TODO: Robot + // StartRobot(); + return true; + } + } + } else { + AudioChannel &channel = getChannel(channelIndex); + if (channel.pausedAtTick) { + channel.startedAtTick += now - channel.pausedAtTick; + channel.pausedAtTick = 0; + return true; + } + } + + return false; +} + +bool Audio32::pause(const int16 channelIndex) { + if (channelIndex == kNoExistingChannel) { + return false; + } + + Common::StackLock lock(_mutex); + const uint32 now = g_sci->getTickCount(); + bool didPause = false; + + if (channelIndex == kAllChannels) { + if (_pausedAtTick == 0) { + _pausedAtTick = now; + _mixer->pauseHandle(_handle, true); + didPause = true; + } + } else if (channelIndex == kRobotChannel) { + _robotAudioPaused = true; + for (int16 i = 0; i < _numActiveChannels; ++i) { + AudioChannel &channel = getChannel(i); + if (channel.robot) { + channel.pausedAtTick = now; + } + } + + // NOTE: The actual engine returns false here regardless of whether + // or not channels were paused + } else { + AudioChannel &channel = getChannel(channelIndex); + + if (channel.pausedAtTick == 0) { + channel.pausedAtTick = now; + didPause = true; + } + } + + return didPause; +} + +int16 Audio32::stop(const int16 channelIndex) { + Common::StackLock lock(_mutex); + const int16 oldNumChannels = _numActiveChannels; + + if (channelIndex == kNoExistingChannel || oldNumChannels == 0) { + return 0; + } + + if (channelIndex == kAllChannels) { + for (int i = 0; i < oldNumChannels; ++i) { + freeChannel(i); + } + _numActiveChannels = 0; + } else { + freeChannel(channelIndex); + --_numActiveChannels; + for (int i = channelIndex; i < oldNumChannels - 1; ++i) { + _channels[i] = _channels[i + 1]; + if (i + 1 == _monitoredChannelIndex) { + _monitoredChannelIndex = i; + } + } + } + + // NOTE: SSCI stops the DSP interrupt and frees the + // global decompression buffer here if there are no + // more active channels + if (_numActiveChannels == 0) { + _mixer->pauseHandle(_handle, true); + } + + return oldNumChannels; +} + +int16 Audio32::getPosition(const int16 channelIndex) const { + Common::StackLock lock(_mutex); + if (channelIndex == kNoExistingChannel || _numActiveChannels == 0) { + return -1; + } + + // NOTE: SSCI treats this as an unsigned short except for + // when the value is 65535, then it treats it as signed + int position = -1; + const uint32 now = g_sci->getTickCount(); + + // NOTE: The original engine also queried the audio driver to see whether + // it thought that there was audio playback occurring via driver opcode 9 + if (channelIndex == kAllChannels) { + if (_pausedAtTick) { + position = _pausedAtTick - _startedAtTick; + } else { + position = now - _startedAtTick; + } + } else { + const AudioChannel &channel = getChannel(channelIndex); + + if (channel.pausedAtTick) { + position = channel.pausedAtTick - channel.startedAtTick; + } else if (_pausedAtTick) { + position = _pausedAtTick - channel.startedAtTick; + } else { + position = now - channel.startedAtTick; + } + } + + return MIN(position, 65534); +} + +void Audio32::setLoop(const int16 channelIndex, const bool loop) { + Common::StackLock lock(_mutex); + + if (channelIndex < 0 || channelIndex >= _numActiveChannels) { + return; + } + + AudioChannel &channel = getChannel(channelIndex); + channel.loop = loop; +} + +reg_t Audio32::kernelPlay(const bool autoPlay, const int argc, const reg_t *const argv) { + if (argc == 0) { + return make_reg(0, _numActiveChannels); + } + + const int16 channelIndex = findChannelByArgs(argc, argv, 0, NULL_REG); + ResourceId resourceId; + bool loop; + int16 volume; + bool monitor = false; + reg_t soundNode = NULL_REG; + + if (argc >= 5) { + resourceId = ResourceId(kResourceTypeAudio36, argv[0].toUint16(), argv[1].toUint16(), argv[2].toUint16(), argv[3].toUint16(), argv[4].toUint16()); + + if (argc < 6 || argv[5].toSint16() == 1) { + loop = false; + } else { + // NOTE: Uses -1 for infinite loop. Presumably the + // engine was supposed to allow counter loops at one + // point, but ended up only using loop as a boolean. + loop = (bool)argv[5].toSint16(); + } + + if (argc < 7 || argv[6].toSint16() < 0 || argv[6].toSint16() > Audio32::kMaxVolume) { + volume = Audio32::kMaxVolume; + + if (argc >= 7) { + monitor = true; + } + } else { + volume = argv[6].toSint16(); + } + } else { + resourceId = ResourceId(kResourceTypeAudio, argv[0].toUint16()); + + if (argc < 2 || argv[1].toSint16() == 1) { + loop = false; + } else { + loop = (bool)argv[1].toSint16(); + } + + // TODO: SCI3 uses the 0x80 bit as a flag to + // indicate "priority channel", but the volume is clamped + // in this call to 0x7F so that flag never makes it into + // the audio subsystem + if (argc < 3 || argv[2].toSint16() < 0 || argv[2].toSint16() > Audio32::kMaxVolume) { + volume = Audio32::kMaxVolume; + + if (argc >= 3) { + monitor = true; + } + } else { + volume = argv[2].toSint16(); + } + + soundNode = argc == 4 ? argv[3] : NULL_REG; + } + + return make_reg(0, play(channelIndex, resourceId, autoPlay, loop, volume, soundNode, monitor)); +} + +#pragma mark - +#pragma mark Effects + +int16 Audio32::getVolume(const int16 channelIndex) const { + Common::StackLock lock(_mutex); + if (channelIndex < 0 || channelIndex >= _numActiveChannels) { + return _mixer->getChannelVolume(_handle) * kMaxVolume / Audio::Mixer::kMaxChannelVolume; + } + + return getChannel(channelIndex).volume; +} + +void Audio32::setVolume(const int16 channelIndex, int16 volume) { + Common::StackLock lock(_mutex); + + volume = MIN((int16)kMaxVolume, volume); + if (channelIndex == kAllChannels) { + ConfMan.setInt("sfx_volume", volume * Audio::Mixer::kMaxChannelVolume / kMaxVolume); + ConfMan.setInt("speech_volume", volume * Audio::Mixer::kMaxChannelVolume / kMaxVolume); + _mixer->setChannelVolume(_handle, volume * Audio::Mixer::kMaxChannelVolume / kMaxVolume); + g_engine->syncSoundSettings(); + } else if (channelIndex != kNoExistingChannel) { + getChannel(channelIndex).volume = volume; + } +} + +bool Audio32::fadeChannel(const int16 channelIndex, const int16 targetVolume, const int16 speed, const int16 steps, const bool stopAfterFade) { + Common::StackLock lock(_mutex); + + if (channelIndex < 0 || channelIndex >= _numActiveChannels) { + return false; + } + + AudioChannel &channel = getChannel(channelIndex); + + if (channel.id.getType() != kResourceTypeAudio || channel.volume == targetVolume) { + return false; + } + + if (steps) { + channel.fadeVolume = targetVolume; + channel.fadeSpeed = speed; + channel.fadeStepsRemaining = steps; + channel.stopChannelOnFade = stopAfterFade; + channel.lastFadeTick = g_sci->getTickCount(); + } else { + setVolume(channelIndex, targetVolume); + } + + return true; +} + +bool Audio32::processFade(const int16 channelIndex) { + Common::StackLock lock(_mutex); + AudioChannel &channel = getChannel(channelIndex); + + uint32 now = g_sci->getTickCount(); + + if (channel.lastFadeTick + channel.fadeSpeed <= now) { + --channel.fadeStepsRemaining; + + if (!channel.fadeStepsRemaining) { + if (channel.stopChannelOnFade) { + stop(channelIndex); + return true; + } else { + setVolume(channelIndex, channel.fadeVolume); + } + } else { + int volume = channel.volume - (channel.volume - channel.fadeVolume) / (channel.fadeStepsRemaining + 1); + + if (volume == channel.fadeVolume) { + channel.fadeStepsRemaining = 1; + } + + setVolume(channelIndex, volume); + channel.lastFadeTick = now; + } + } + + return false; +} + +#pragma mark - +#pragma mark Signal monitoring + +bool Audio32::hasSignal() const { + Common::StackLock lock(_mutex); + + if (_monitoredChannelIndex == -1) { + return false; + } + + const Audio::st_sample_t *buffer = _monitoredBuffer; + const Audio::st_sample_t *const end = _monitoredBuffer + _numMonitoredSamples; + + while (buffer != end) { + const Audio::st_sample_t sample = *buffer++; + if (sample > 1280 || sample < -1280) { + return true; + } + } + + return false; +} + +} // End of namespace Sci diff --git a/engines/sci/sound/audio32.h b/engines/sci/sound/audio32.h new file mode 100644 index 0000000000..416b81d865 --- /dev/null +++ b/engines/sci/sound/audio32.h @@ -0,0 +1,591 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SCI_AUDIO32_H +#define SCI_AUDIO32_H +#include "audio/audiostream.h" // for AudioStream, SeekableAudioStream (... +#include "audio/mixer.h" // for Mixer, SoundHandle +#include "audio/rate.h" // for Audio::st_volume_t, RateConverter +#include "common/array.h" // for Array +#include "common/mutex.h" // for StackLock, Mutex +#include "common/scummsys.h" // for int16, uint8, uint32, uint16 +#include "engines/sci/resource.h" // for ResourceId +#include "sci/engine/vm_types.h" // for reg_t, NULL_REG + +namespace Sci { + +/** + * An audio channel used by the software SCI mixer. + */ +struct AudioChannel { + /** + * The ID of the resource loaded into this channel. + */ + ResourceId id; + + /** + * The resource loaded into this channel. + */ + Resource *resource; + + /** + * Data stream containing the raw audio for the channel. + */ + Common::SeekableReadStream *resourceStream; + + /** + * The audio stream loaded into this channel. + * `SeekableAudioStream` is used here instead of + * `RewindableAudioStream` because + * `RewindableAudioStream` does not include the + * `getLength` function, which is needed to tell the + * game engine the duration of audio streams. + */ + Audio::SeekableAudioStream *stream; + + /** + * The converter used to transform and merge the input + * stream into the mixer's output buffer. + */ + Audio::RateConverter *converter; + + /** + * Duration of the channel, in ticks. + */ + uint32 duration; + + /** + * The tick when the channel was started. + */ + uint32 startedAtTick; + + /** + * The tick when the channel was paused. + */ + uint32 pausedAtTick; + + /** + * Whether or not the audio in this channel should loop + * infinitely. + */ + bool loop; + + /** + * The time the last fade iteration occurred. + */ + uint32 lastFadeTick; + + /** + * The target volume of the fade. + */ + int fadeVolume; + + /** + * The number of ticks that should elapse between + * each change of volume. + */ + int fadeSpeed; + + /** + * The number of iterations the fade should take to + * complete. If this value is 0, it indicates that the + * channel is not fading. + */ + int fadeStepsRemaining; + + /** + * Whether or not the channel should be stopped and + * freed when the fade is complete. + */ + bool stopChannelOnFade; + + /** + * Whether or not this channel contains a Robot + * audio block. + */ + bool robot; + + /** + * Whether or not this channel contains a VMD audio + * track. + */ + bool vmd; + + /** + * For digital sound effects, the related VM + * Sound::nodePtr object for the sound. + */ + reg_t soundNode; + + /** + * The playback volume, from 1 to 127 inclusive. + */ + int volume; + + /** + * The amount to pan to the right, from 0 to 100. + * 50 is centered, -1 is not panned. + */ + int pan; +}; + +/** + * Special audio channel indexes used to select a channel + * for digital audio playback. + */ +enum AudioChannelIndex { + kRobotChannel = -3, + kNoExistingChannel = -2, + kAllChannels = -1 +}; + +/** + * Audio32 acts as a permanent audio stream into the system + * mixer and provides digital audio services for the SCI32 + * engine, since the system mixer does not support all the + * features of SCI. + */ +class Audio32 : public Audio::AudioStream { +public: + Audio32(ResourceManager *resMan); + ~Audio32(); + +private: + ResourceManager *_resMan; + Audio::Mixer *_mixer; + Audio::SoundHandle _handle; + Common::Mutex _mutex; + + enum { + /** + * The maximum channel volume. + */ + kMaxVolume = 127 + }; + +#pragma mark - +#pragma mark AudioStream implementation +public: + int readBuffer(Audio::st_sample_t *buffer, const int numSamples); + bool isStereo() const { return true; } + int getRate() const { return _mixer->getOutputRate(); } + bool endOfData() const { return _numActiveChannels == 0; } + bool endOfStream() const { return false; } + +private: + /** + * Mixes audio from the given source stream into the + * target buffer using the given rate converter. + */ + int writeAudioInternal(Audio::RewindableAudioStream *const sourceStream, Audio::RateConverter *const converter, Audio::st_sample_t *targetBuffer, const int numSamples, const Audio::st_volume_t leftVolume, const Audio::st_volume_t rightVolume, const bool loop); + +#pragma mark - +#pragma mark Channel management +public: + /** + * Gets the number of currently active channels. + */ + inline uint8 getNumActiveChannels() const { + Common::StackLock lock(_mutex); + return _numActiveChannels; + } + + /** + * Finds a channel that is already configured for the + * given audio sample. + * + * @param startIndex The location of the audio resource + * information in the arguments list. + */ + int16 findChannelByArgs(int argc, const reg_t *argv, const int startIndex, const reg_t soundNode) const; + + /** + * Finds a channel that is already configured for the + * given audio sample. + */ + int16 findChannelById(const ResourceId resourceId, const reg_t soundNode = NULL_REG) const; + +private: + typedef Common::Array<Resource *> UnlockList; + + /** + * The audio channels. + */ + Common::Array<AudioChannel> _channels; + + /** + * The number of active audio channels in the mixer. + * Being active is not the same as playing; active + * channels may be paused. + */ + uint8 _numActiveChannels; + + /** + * Whether or not we are in the audio thread. + * + * This flag is used instead of passing a parameter to + * `freeUnusedChannels` because a parameter would + * require forwarding through the public method `stop`, + * and there is not currently any reason for this + * implementation detail to be exposed. + */ + bool _inAudioThread; + + /** + * The list of resources from freed channels that need + * to be unlocked from the main thread. + */ + UnlockList _resourcesToUnlock; + + /** + * Gets the audio channel at the given index. + */ + inline AudioChannel &getChannel(const int16 channelIndex) { + Common::StackLock lock(_mutex); + assert(channelIndex >= 0 && channelIndex < _numActiveChannels); + return _channels[channelIndex]; + } + + /** + * Gets the audio channel at the given index. + */ + inline const AudioChannel &getChannel(const int16 channelIndex) const { + Common::StackLock lock(_mutex); + assert(channelIndex >= 0 && channelIndex < _numActiveChannels); + return _channels[channelIndex]; + } + + /** + * Frees all non-looping channels that have reached the + * end of their stream. + */ + void freeUnusedChannels(); + + /** + * Frees resources allocated to the given channel. + */ + void freeChannel(const int16 channelIndex); + + /** + * Unlocks all resources that were freed by the audio + * thread. + */ + void unlockResources(); + +#pragma mark - +#pragma mark Script compatibility +public: + /** + * Gets the (fake) sample rate of the hardware DAC. + * For script compatibility only. + */ + inline uint16 getSampleRate() const { + return _globalSampleRate; + } + + /** + * Sets the (fake) sample rate of the hardware DAC. + * For script compatibility only. + */ + void setSampleRate(uint16 rate); + + /** + * Gets the (fake) bit depth of the hardware DAC. + * For script compatibility only. + */ + inline uint8 getBitDepth() const { + return _globalBitDepth; + } + + /** + * Sets the (fake) sample rate of the hardware DAC. + * For script compatibility only. + */ + void setBitDepth(uint8 depth); + + /** + * Gets the (fake) number of output (speaker) channels + * of the hardware DAC. For script compatibility only. + */ + inline uint8 getNumOutputChannels() const { + return _globalNumOutputChannels; + } + + /** + * Sets the (fake) number of output (speaker) channels + * of the hardware DAC. For script compatibility only. + */ + void setNumOutputChannels(int16 numChannels); + + /** + * Gets the (fake) number of preloaded channels. + * For script compatibility only. + */ + inline uint8 getPreload() const { + return _preload; + } + + /** + * Sets the (fake) number of preloaded channels. + * For script compatibility only. + */ + inline void setPreload(uint8 preload) { + _preload = preload; + } + +private: + /** + * The hardware DAC sample rate. Stored only for script + * compatibility. + */ + uint16 _globalSampleRate; + + /** + * The maximum allowed sample rate of the system mixer. + * Stored only for script compatibility. + */ + uint16 _maxAllowedSampleRate; + + /** + * The hardware DAC bit depth. Stored only for script + * compatibility. + */ + uint8 _globalBitDepth; + + /** + * The maximum allowed bit depth of the system mixer. + * Stored only for script compatibility. + */ + uint8 _maxAllowedBitDepth; + + /** + * The hardware DAC output (speaker) channel + * configuration. Stored only for script compatibility. + */ + uint8 _globalNumOutputChannels; + + /** + * The maximum allowed number of output (speaker) + * channels of the system mixer. Stored only for script + * compatibility. + */ + uint8 _maxAllowedOutputChannels; + + /** + * The number of audio channels that should have their + * data preloaded into memory instead of streaming from + * disk. + * 1 = all channels, 2 = 2nd active channel and above, + * etc. + * Stored only for script compatibility. + */ + uint8 _preload; + +#pragma mark - +#pragma mark Robot +public: + +private: + /** + * When true, channels marked as robot audio will not be + * played. + */ + bool _robotAudioPaused; + +#pragma mark - +#pragma mark Playback +public: + /** + * Starts or resumes playback of an audio channel. + */ + uint16 play(int16 channelIndex, const ResourceId resourceId, const bool autoPlay, const bool loop, const int16 volume, const reg_t soundNode, const bool monitor); + + /** + * Resumes playback of a paused audio channel, or of + * the entire audio player. + */ + bool resume(const int16 channelIndex); + bool resume(const ResourceId resourceId, const reg_t soundNode = NULL_REG) { + Common::StackLock lock(_mutex); + return resume(findChannelById(resourceId, soundNode)); + } + + /** + * Pauses an audio channel, or the entire audio player. + */ + bool pause(const int16 channelIndex); + bool pause(const ResourceId resourceId, const reg_t soundNode = NULL_REG) { + Common::StackLock lock(_mutex); + return pause(findChannelById(resourceId, soundNode)); + } + + /** + * Stops and unloads an audio channel, or the entire + * audio player. + */ + int16 stop(const int16 channelIndex); + int16 stop(const ResourceId resourceId, const reg_t soundNode = NULL_REG) { + Common::StackLock lock(_mutex); + return stop(findChannelById(resourceId, soundNode)); + } + + /** + * Returns the playback position for the given channel + * number, in ticks. + */ + int16 getPosition(const int16 channelIndex) const; + int16 getPosition(const ResourceId resourceId, const reg_t soundNode = NULL_REG) { + Common::StackLock lock(_mutex); + return getPosition(findChannelById(resourceId, soundNode)); + } + + /** + * Sets whether or not the given channel should loop. + */ + void setLoop(const int16 channelIndex, const bool loop); + void setLoop(const ResourceId resourceId, const reg_t soundNode, const bool loop) { + Common::StackLock lock(_mutex); + setLoop(findChannelById(resourceId, soundNode), loop); + } + + reg_t kernelPlay(const bool autoPlay, const int argc, const reg_t *const argv); + +private: + /** + * The tick when audio was globally paused. + */ + uint32 _pausedAtTick; + + /** + * The tick when audio was globally started. + */ + uint32 _startedAtTick; + +#pragma mark - +#pragma mark Effects +public: + /** + * Gets the volume for a given channel. Passing + * `kAllChannels` will get the global volume. + */ + int16 getVolume(const int16 channelIndex) const; + int16 getVolume(const ResourceId resourceId, const reg_t soundNode) const { + Common::StackLock lock(_mutex); + return getVolume(findChannelById(resourceId, soundNode)); + } + + /** + * Sets the volume of an audio channel. Passing + * `kAllChannels` will set the global volume. + */ + void setVolume(const int16 channelIndex, int16 volume); + void setVolume(const ResourceId resourceId, const reg_t soundNode, const int16 volume) { + Common::StackLock lock(_mutex); + setVolume(findChannelById(resourceId, soundNode), volume); + } + + /** + * Initiate an immediate fade of the given channel. + */ + bool fadeChannel(const int16 channelIndex, const int16 targetVolume, const int16 speed, const int16 steps, const bool stopAfterFade); + bool fadeChannel(const ResourceId resourceId, const reg_t soundNode, const int16 targetVolume, const int16 speed, const int16 steps, const bool stopAfterFade) { + Common::StackLock lock(_mutex); + return fadeChannel(findChannelById(resourceId, soundNode), targetVolume, speed, steps, stopAfterFade); + } + + /** + * Gets whether attenuated mixing mode is active. + */ + inline bool getAttenuatedMixing() const { + return _attenuatedMixing; + } + + /** + * Sets the attenuated mixing mode. + */ + void setAttenuatedMixing(bool attenuated) { + Common::StackLock lock(_mutex); + _attenuatedMixing = attenuated; + } + +private: + /** + * If true, audio will be mixed by reducing the target + * buffer by half every time a new channel is mixed in. + * The final channel is not attenuated. + */ + bool _attenuatedMixing; + + /** + * When true, a modified attenuation algorithm is used + * (`A/4 + B`) instead of standard linear attenuation + * (`A/2 + B/2`). + */ + bool _useModifiedAttenuation; + + /** + * Processes an audio fade for the given channel. + * + * @returns true if the fade was completed and the + * channel was stopped. + */ + bool processFade(const int16 channelIndex); + +#pragma mark - +#pragma mark Signal monitoring +public: + /** + * Returns whether the currently monitored audio channel + * contains any signal within the next audio frame. + */ + bool hasSignal() const; + +private: + /** + * The index of the channel being monitored for signal, + * or -1 if no channel is monitored. When a channel is + * monitored, it also causes the engine to play only the + * monitored channel. + */ + int16 _monitoredChannelIndex; + + /** + * The data buffer holding decompressed audio data for + * the channel that will be monitored for an audio + * signal. + */ + Audio::st_sample_t *_monitoredBuffer; + + /** + * The size of the buffer, in bytes. + */ + size_t _monitoredBufferSize; + + /** + * The number of valid audio samples in the signal + * monitoring buffer. + */ + int _numMonitoredSamples; +}; + +} // End of namespace Sci +#endif diff --git a/engines/sci/sound/decoders/sol.cpp b/engines/sci/sound/decoders/sol.cpp new file mode 100644 index 0000000000..e445403120 --- /dev/null +++ b/engines/sci/sound/decoders/sol.cpp @@ -0,0 +1,273 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "audio/audiostream.h" +#include "audio/decoders/raw.h" +#include "common/substream.h" +#include "common/util.h" +#include "engines/sci/sci.h" +#include "engines/sci/sound/decoders/sol.h" + +namespace Sci { + +// Note that the 16-bit version is also used in coktelvideo.cpp +static const uint16 tableDPCM16[128] = { + 0x0000, 0x0008, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080, + 0x0090, 0x00A0, 0x00B0, 0x00C0, 0x00D0, 0x00E0, 0x00F0, 0x0100, 0x0110, 0x0120, + 0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0180, 0x0190, 0x01A0, 0x01B0, 0x01C0, + 0x01D0, 0x01E0, 0x01F0, 0x0200, 0x0208, 0x0210, 0x0218, 0x0220, 0x0228, 0x0230, + 0x0238, 0x0240, 0x0248, 0x0250, 0x0258, 0x0260, 0x0268, 0x0270, 0x0278, 0x0280, + 0x0288, 0x0290, 0x0298, 0x02A0, 0x02A8, 0x02B0, 0x02B8, 0x02C0, 0x02C8, 0x02D0, + 0x02D8, 0x02E0, 0x02E8, 0x02F0, 0x02F8, 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, + 0x0328, 0x0330, 0x0338, 0x0340, 0x0348, 0x0350, 0x0358, 0x0360, 0x0368, 0x0370, + 0x0378, 0x0380, 0x0388, 0x0390, 0x0398, 0x03A0, 0x03A8, 0x03B0, 0x03B8, 0x03C0, + 0x03C8, 0x03D0, 0x03D8, 0x03E0, 0x03E8, 0x03F0, 0x03F8, 0x0400, 0x0440, 0x0480, + 0x04C0, 0x0500, 0x0540, 0x0580, 0x05C0, 0x0600, 0x0640, 0x0680, 0x06C0, 0x0700, + 0x0740, 0x0780, 0x07C0, 0x0800, 0x0900, 0x0A00, 0x0B00, 0x0C00, 0x0D00, 0x0E00, + 0x0F00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000 +}; + +static const byte tableDPCM8[8] = { 0, 1, 2, 3, 6, 10, 15, 21 }; + +/** + * Decompresses 16-bit DPCM compressed audio. Each byte read + * outputs one sample into the decompression buffer. + */ +static void deDPCM16(int16 *out, Common::ReadStream &audioStream, uint32 numBytes, int16 &sample) { + for (uint32 i = 0; i < numBytes; ++i) { + const uint8 delta = audioStream.readByte(); + if (delta & 0x80) { + sample -= tableDPCM16[delta & 0x7f]; + } else { + sample += tableDPCM16[delta]; + } + sample = CLIP<int16>(sample, -32768, 32767); + *out++ = TO_LE_16(sample); + } +} + +/** + * Decompresses one half of an 8-bit DPCM compressed audio + * byte. + */ +static void deDPCM8Nibble(int16 *out, uint8 &sample, uint8 delta) { + const uint8 lastSample = sample; + if (delta & 8) { + sample -= tableDPCM8[delta & 7]; + } else { + sample += tableDPCM8[delta & 7]; + } + sample = CLIP<byte>(sample, 0, 255); + *out = ((lastSample + sample) << 7) ^ 0x8000; +} + +/** + * Decompresses 8-bit DPCM compressed audio. Each byte read + * outputs two samples into the decompression buffer. + */ +static void deDPCM8(int16 *out, Common::ReadStream &audioStream, uint32 numBytes, uint8 &sample) { + for (uint32 i = 0; i < numBytes; ++i) { + const uint8 delta = audioStream.readByte(); + deDPCM8Nibble(out++, sample, delta >> 4); + deDPCM8Nibble(out++, sample, delta & 0xf); + } +} + +# pragma mark - + +template<bool STEREO, bool S16BIT> +SOLStream<STEREO, S16BIT>::SOLStream(Common::SeekableReadStream *stream, const DisposeAfterUse::Flag disposeAfterUse, const int32 dataOffset, const uint16 sampleRate, const int32 rawDataSize) : + _stream(stream, disposeAfterUse), + _dataOffset(dataOffset), + _sampleRate(sampleRate), + // SSCI aligns the size of SOL data to 32 bits + _rawDataSize(rawDataSize & ~3) { + // TODO: This is not valid for stereo SOL files, which + // have interleaved L/R compression so need to store the + // carried values for each channel separately. See + // 60900.aud from Lighthouse for an example stereo file + if (S16BIT) { + _dpcmCarry16 = 0; + } else { + _dpcmCarry8 = 0x80; + } + + const uint8 compressionRatio = 2; + const uint8 numChannels = STEREO ? 2 : 1; + const uint8 bytesPerSample = S16BIT ? 2 : 1; + _length = Audio::Timestamp((_rawDataSize * compressionRatio * 1000) / (_sampleRate * numChannels * bytesPerSample), 60); + } + +template <bool STEREO, bool S16BIT> +bool SOLStream<STEREO, S16BIT>::seek(const Audio::Timestamp &where) { + if (where != 0) { + // In order to seek in compressed SOL files, all + // previous bytes must be known since it uses + // differential compression. Therefore, only seeking + // to the beginning is supported now (SSCI does not + // offer seeking anyway) + return false; + } + + if (S16BIT) { + _dpcmCarry16 = 0; + } else { + _dpcmCarry8 = 0x80; + } + + return _stream->seek(_dataOffset, SEEK_SET); +} + +template <bool STEREO, bool S16BIT> +Audio::Timestamp SOLStream<STEREO, S16BIT>::getLength() const { + return _length; +} + +template <bool STEREO, bool S16BIT> +int SOLStream<STEREO, S16BIT>::readBuffer(int16 *buffer, const int numSamples) { + // Reading an odd number of 8-bit samples will result in a loss of samples + // since one byte represents two samples and we do not store the second + // nibble in this case; it should never happen in reality + assert(S16BIT || (numSamples % 2) == 0); + + const int samplesPerByte = S16BIT ? 1 : 2; + + int32 bytesToRead = numSamples / samplesPerByte; + if (_stream->pos() + bytesToRead > _rawDataSize) { + bytesToRead = _rawDataSize - _stream->pos(); + } + + if (S16BIT) { + deDPCM16(buffer, *_stream, bytesToRead, _dpcmCarry16); + } else { + deDPCM8(buffer, *_stream, bytesToRead, _dpcmCarry8); + } + + const int samplesRead = bytesToRead * samplesPerByte; + return samplesRead; +} + +template <bool STEREO, bool S16BIT> +bool SOLStream<STEREO, S16BIT>::isStereo() const { + return STEREO; +} + +template <bool STEREO, bool S16BIT> +int SOLStream<STEREO, S16BIT>::getRate() const { + return _sampleRate; +} + +template <bool STEREO, bool S16BIT> +bool SOLStream<STEREO, S16BIT>::endOfData() const { + return _stream->eos() || _stream->pos() >= _dataOffset + _rawDataSize; +} + +template <bool STEREO, bool S16BIT> +bool SOLStream<STEREO, S16BIT>::rewind() { + return seek(0); +} + +Audio::SeekableAudioStream *makeSOLStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { + + // TODO: Might not be necessary? Makes seeking work, but + // not sure if audio is ever actually seeked in SSCI. + const int32 initialPosition = stream->pos(); + + byte header[6]; + if (stream->read(header, sizeof(header)) != sizeof(header)) { + return nullptr; + } + + if (header[0] != 0x8d || READ_BE_UINT32(header + 2) != MKTAG('S', 'O', 'L', 0)) { + return nullptr; + } + + const uint8 headerSize = header[1]; + const uint16 sampleRate = stream->readUint16LE(); + const byte flags = stream->readByte(); + const uint32 dataSize = stream->readUint32LE(); + + if (flags & kCompressed) { + if (flags & kStereo && flags & k16Bit) { + return new SOLStream<true, true>(new Common::SeekableSubReadStream(stream, initialPosition, initialPosition + dataSize, disposeAfterUse), disposeAfterUse, headerSize, sampleRate, dataSize); + } else if (flags & kStereo) { + return new SOLStream<true, false>(new Common::SeekableSubReadStream(stream, initialPosition, initialPosition + dataSize, disposeAfterUse), disposeAfterUse, headerSize, sampleRate, dataSize); + } else if (flags & k16Bit) { + return new SOLStream<false, true>(new Common::SeekableSubReadStream(stream, initialPosition, initialPosition + dataSize, disposeAfterUse), disposeAfterUse, headerSize, sampleRate, dataSize); + } else { + return new SOLStream<false, false>(new Common::SeekableSubReadStream(stream, initialPosition, initialPosition + dataSize, disposeAfterUse), disposeAfterUse, headerSize, sampleRate, dataSize); + } + } + + byte rawFlags = Audio::FLAG_LITTLE_ENDIAN; + if (flags & k16Bit) { + rawFlags |= Audio::FLAG_16BITS; + } else { + rawFlags |= Audio::FLAG_UNSIGNED; + } + + if (flags & kStereo) { + rawFlags |= Audio::FLAG_STEREO; + } + + return Audio::makeRawStream(new Common::SeekableSubReadStream(stream, initialPosition + headerSize, initialPosition + headerSize + dataSize, disposeAfterUse), sampleRate, rawFlags, disposeAfterUse); +} + +// TODO: This needs to be removed when resource manager is fixed +// to not split audio into two parts +Audio::SeekableAudioStream *makeSOLStream(Common::SeekableReadStream *headerStream, Common::SeekableReadStream *dataStream, DisposeAfterUse::Flag disposeAfterUse) { + + if (headerStream->readUint32BE() != MKTAG('S', 'O', 'L', 0)) { + return nullptr; + } + + const uint16 sampleRate = headerStream->readUint16LE(); + const byte flags = headerStream->readByte(); + const int32 dataSize = headerStream->readSint32LE(); + + if (flags & kCompressed) { + if (flags & kStereo && flags & k16Bit) { + return new SOLStream<true, true>(dataStream, disposeAfterUse, 0, sampleRate, dataSize); + } else if (flags & kStereo) { + return new SOLStream<true, false>(dataStream, disposeAfterUse, 0, sampleRate, dataSize); + } else if (flags & k16Bit) { + return new SOLStream<false, true>(dataStream, disposeAfterUse, 0, sampleRate, dataSize); + } else { + return new SOLStream<false, false>(dataStream, disposeAfterUse, 0, sampleRate, dataSize); + } + } + + byte rawFlags = Audio::FLAG_LITTLE_ENDIAN; + if (flags & k16Bit) { + rawFlags |= Audio::FLAG_16BITS; + } else { + rawFlags |= Audio::FLAG_UNSIGNED; + } + + if (flags & kStereo) { + rawFlags |= Audio::FLAG_STEREO; + } + + return Audio::makeRawStream(dataStream, sampleRate, rawFlags, disposeAfterUse); +} + +} diff --git a/engines/sci/sound/decoders/sol.h b/engines/sci/sound/decoders/sol.h new file mode 100644 index 0000000000..1046d0b213 --- /dev/null +++ b/engines/sci/sound/decoders/sol.h @@ -0,0 +1,89 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SCI_SOUND_DECODERS_SOL_H +#define SCI_SOUND_DECODERS_SOL_H +#include "audio/audiostream.h" +#include "common/stream.h" + +namespace Sci { + +enum SOLFlags { + kCompressed = 1, + k16Bit = 4, + kStereo = 16 +}; + +template <bool STEREO, bool S16BIT> +class SOLStream : public Audio::SeekableAudioStream { +private: + /** + * Read stream containing possibly-compressed SOL audio. + */ + Common::DisposablePtr<Common::SeekableReadStream> _stream; + + /** + * Start offset of the audio data in the read stream. + */ + int32 _dataOffset; + + /** + * Sample rate of audio data. + */ + uint16 _sampleRate; + + /** + * The raw (possibly-compressed) size of audio data in + * the stream. + */ + int32 _rawDataSize; + + /** + * The last sample from the previous DPCM decode. + */ + union { + int16 _dpcmCarry16; + uint8 _dpcmCarry8; + }; + + /** + * The calculated length of the stream. + */ + Audio::Timestamp _length; + + virtual bool seek(const Audio::Timestamp &where) override; + virtual Audio::Timestamp getLength() const override; + virtual int readBuffer(int16 *buffer, const int numSamples) override; + virtual bool isStereo() const override; + virtual int getRate() const override; + virtual bool endOfData() const override; + virtual bool rewind() override; + +public: + SOLStream(Common::SeekableReadStream *stream, const DisposeAfterUse::Flag disposeAfterUse, const int32 dataOffset, const uint16 sampleRate, const int32 rawDataSize); +}; + +Audio::SeekableAudioStream *makeSOLStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse); + +Audio::SeekableAudioStream *makeSOLStream(Common::SeekableReadStream *headerStream, Common::SeekableReadStream *dataStream, DisposeAfterUse::Flag disposeAfterUse); +} +#endif diff --git a/engines/sci/sound/drivers/amigamac.cpp b/engines/sci/sound/drivers/amigamac.cpp index 0f93b19e7c..031fd32164 100644 --- a/engines/sci/sound/drivers/amigamac.cpp +++ b/engines/sci/sound/drivers/amigamac.cpp @@ -773,6 +773,7 @@ bool MidiDriver_AmigaMac::loadInstrumentsSCI0(Common::File &file) { if (id < 0 || id > 255) { warning("Amiga/Mac driver: Error: instrument ID out of bounds"); + delete instrument; return false; } diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 5a11ac386a..3f34ecc2f8 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -212,6 +212,13 @@ void SciMusic::clearPlayList() { void SciMusic::pauseAll(bool pause) { const MusicList::iterator end = _playList.end(); for (MusicList::iterator i = _playList.begin(); i != end; ++i) { +#ifdef ENABLE_SCI32 + // The entire DAC will have been paused by the caller; + // do not pause the individual samples too + if (_soundVersion >= SCI_VERSION_2_1_EARLY && (*i)->isSample) { + continue; + } +#endif soundToggle(*i, pause); } } @@ -472,7 +479,16 @@ void SciMusic::soundPlay(MusicEntry *pSnd) { } } - if (pSnd->pStreamAud) { + if (pSnd->isSample) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + g_sci->_audio32->stop(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj); + + g_sci->_audio32->play(kNoExistingChannel, ResourceId(kResourceTypeAudio, pSnd->resourceId), true, pSnd->loop != 0 && pSnd->loop != 1, pSnd->volume, pSnd->soundObj, false); + + return; + } else +#endif if (!_pMixer->isSoundHandleActive(pSnd->hCurrentAud)) { if ((_currentlyPlayingSample) && (_pMixer->isSoundHandleActive(_currentlyPlayingSample->hCurrentAud))) { // Another sample is already playing, we have to stop that one @@ -550,10 +566,18 @@ void SciMusic::soundStop(MusicEntry *pSnd) { pSnd->status = kSoundStopped; if (_soundVersion <= SCI_VERSION_0_LATE) pSnd->isQueued = false; - if (pSnd->pStreamAud) { - if (_currentlyPlayingSample == pSnd) - _currentlyPlayingSample = NULL; - _pMixer->stopHandle(pSnd->hCurrentAud); + if (pSnd->isSample) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + g_sci->_audio32->stop(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj); + } else { +#endif + if (_currentlyPlayingSample == pSnd) + _currentlyPlayingSample = NULL; + _pMixer->stopHandle(pSnd->hCurrentAud); +#ifdef ENABLE_SCI32 + } +#endif } if (pSnd->pMidiParser) { @@ -572,9 +596,12 @@ void SciMusic::soundStop(MusicEntry *pSnd) { void SciMusic::soundSetVolume(MusicEntry *pSnd, byte volume) { assert(volume <= MUSIC_VOLUME_MAX); - if (pSnd->pStreamAud) { - // we simply ignore volume changes for samples, because sierra sci also - // doesn't support volume for samples via kDoSound + if (pSnd->isSample) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + g_sci->_audio32->setVolume(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj, volume); + } +#endif } else if (pSnd->pMidiParser) { Common::StackLock lock(_mutex); pSnd->pMidiParser->mainThreadBegin(); @@ -614,12 +641,20 @@ void SciMusic::soundKill(MusicEntry *pSnd) { _mutex.unlock(); - if (pSnd->pStreamAud) { - if (_currentlyPlayingSample == pSnd) { - // Forget about this sound, in case it was currently playing - _currentlyPlayingSample = NULL; + if (pSnd->isSample) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + g_sci->_audio32->stop(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj); + } else { +#endif + if (_currentlyPlayingSample == pSnd) { + // Forget about this sound, in case it was currently playing + _currentlyPlayingSample = NULL; + } + _pMixer->stopHandle(pSnd->hCurrentAud); +#ifdef ENABLE_SCI32 } - _pMixer->stopHandle(pSnd->hCurrentAud); +#endif delete pSnd->pStreamAud; pSnd->pStreamAud = NULL; delete pSnd->pLoopStream; @@ -685,6 +720,18 @@ void SciMusic::soundResume(MusicEntry *pSnd) { } void SciMusic::soundToggle(MusicEntry *pSnd, bool pause) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY && pSnd->isSample) { + if (pause) { + g_sci->_audio32->pause(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj); + } else { + g_sci->_audio32->resume(ResourceId(kResourceTypeAudio, pSnd->resourceId), pSnd->soundObj); + } + + return; + } +#endif + if (pause) soundPause(pSnd); else @@ -813,6 +860,7 @@ MusicEntry::MusicEntry() { pStreamAud = 0; pLoopStream = 0; pMidiParser = 0; + isSample = false; for (int i = 0; i < 16; ++i) { _usedChannels[i] = 0xFF; diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h index 047f63b3b7..3a6de81c49 100644 --- a/engines/sci/sound/music.h +++ b/engines/sci/sound/music.h @@ -31,6 +31,9 @@ #include "sci/sci.h" #include "sci/resource.h" #include "sci/sound/drivers/mididriver.h" +#ifdef ENABLE_SCI32 +#include "sci/sound/audio32.h" +#endif namespace Audio { class LoopingAudioStream; @@ -123,6 +126,7 @@ public: Audio::RewindableAudioStream *pStreamAud; Audio::LoopingAudioStream *pLoopStream; Audio::SoundHandle hCurrentAud; + bool isSample; public: MusicEntry(); diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp index fe33ea1feb..c5d8dda56b 100644 --- a/engines/sci/sound/soundcmd.cpp +++ b/engines/sci/sound/soundcmd.cpp @@ -23,6 +23,7 @@ #include "common/config-manager.h" #include "audio/audiostream.h" #include "audio/mixer.h" +#include "sci/resource.h" #include "sci/sound/audio.h" #include "sci/sound/music.h" #include "sci/sound/soundcmd.h" @@ -97,12 +98,21 @@ void SoundCommandParser::initSoundResource(MusicEntry *newSound) { // user wants the digital version. if (_useDigitalSFX || !newSound->soundRes) { int sampleLen; - newSound->pStreamAud = _audio->getAudioStream(newSound->resourceId, 65535, &sampleLen); - newSound->soundType = Audio::Mixer::kSFXSoundType; +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + newSound->isSample = g_sci->getResMan()->testResource(ResourceId(kResourceTypeAudio, newSound->resourceId)); + } else { +#endif + newSound->pStreamAud = _audio->getAudioStream(newSound->resourceId, 65535, &sampleLen); + newSound->soundType = Audio::Mixer::kSFXSoundType; + newSound->isSample = newSound->pStreamAud != nullptr; +#ifdef ENABLE_SCI32 + } +#endif } } - if (!newSound->pStreamAud && newSound->soundRes) + if (!newSound->isSample && newSound->soundRes) _music->soundInitSnd(newSound); } @@ -118,6 +128,7 @@ void SoundCommandParser::processInitSound(reg_t obj) { newSound->resourceId = resourceId; newSound->soundObj = obj; newSound->loop = readSelectorValue(_segMan, obj, SELECTOR(loop)); + newSound->overridePriority = false; if (_soundVersion <= SCI_VERSION_0_LATE) newSound->priority = readSelectorValue(_segMan, obj, SELECTOR(priority)); else @@ -133,7 +144,7 @@ void SoundCommandParser::processInitSound(reg_t obj) { _music->pushBackSlot(newSound); - if (newSound->soundRes || newSound->pStreamAud) { + if (newSound->soundRes || newSound->isSample) { // Notify the engine if (_soundVersion <= SCI_VERSION_0_LATE) writeSelectorValue(_segMan, obj, SELECTOR(state), kSoundInitialized); @@ -214,17 +225,6 @@ void SoundCommandParser::processPlaySound(reg_t obj, bool playBed) { musicSlot->fadeStep = 0; } -reg_t SoundCommandParser::kDoSoundRestore(int argc, reg_t *argv, reg_t acc) { - // Called after loading, to restore the playlist - // We don't really use or need this - return acc; -} - -reg_t SoundCommandParser::kDoSoundDummy(int argc, reg_t *argv, reg_t acc) { - warning("cmdDummy invoked"); // not supposed to occur - return acc; -} - reg_t SoundCommandParser::kDoSoundDispose(int argc, reg_t *argv, reg_t acc) { debugC(kDebugLevelSound, "kDoSound(dispose): %04x:%04x", PRINT_REG(argv[0])); processDisposeSound(argv[0]); @@ -313,10 +313,22 @@ reg_t SoundCommandParser::kDoSoundPause(int argc, reg_t *argv, reg_t acc) { } reg_t obj = argv[0]; - uint16 value = argc > 1 ? argv[1].toUint16() : 0; - if (!obj.getSegment()) { // pause the whole playlist - _music->pauseAll(value); - } else { // pause a playlist slot + const bool shouldPause = argc > 1 ? argv[1].toUint16() : false; + if ( + (_soundVersion < SCI_VERSION_2_1_EARLY && !obj.getSegment()) || + (_soundVersion >= SCI_VERSION_2_1_EARLY && obj.isNull()) + ) { + _music->pauseAll(shouldPause); +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + if (shouldPause) { + g_sci->_audio32->pause(kAllChannels); + } else { + g_sci->_audio32->resume(kAllChannels); + } + } +#endif + } else { MusicEntry *musicSlot = _music->getSlot(obj); if (!musicSlot) { // This happens quite frequently @@ -324,7 +336,23 @@ reg_t SoundCommandParser::kDoSoundPause(int argc, reg_t *argv, reg_t acc) { return acc; } - _music->soundToggle(musicSlot, value); +#ifdef ENABLE_SCI32 + // NOTE: The original engine also expected a global + // "kernel call" flag to be true in order to perform + // this action, but the architecture of the ScummVM + // implementation is so different that it doesn't + // matter here + if (_soundVersion >= SCI_VERSION_2_1_EARLY && musicSlot->isSample) { + const int16 channelIndex = g_sci->_audio32->findChannelById(ResourceId(kResourceTypeAudio, musicSlot->resourceId), musicSlot->soundObj); + + if (shouldPause) { + g_sci->_audio32->pause(channelIndex); + } else { + g_sci->_audio32->resume(channelIndex); + } + } else +#endif + _music->soundToggle(musicSlot, shouldPause); } return acc; } @@ -354,7 +382,11 @@ reg_t SoundCommandParser::kDoSoundMasterVolume(int argc, reg_t *argv, reg_t acc) int vol = CLIP<int16>(argv[0].toSint16(), 0, MUSIC_MASTERVOLUME_MAX); vol = vol * Audio::Mixer::kMaxMixerVolume / MUSIC_MASTERVOLUME_MAX; ConfMan.setInt("music_volume", vol); - ConfMan.setInt("sfx_volume", vol); + // In SCI32, digital audio volume is controlled separately by + // kDoAudioVolume + if (_soundVersion < SCI_VERSION_2_1_EARLY) { + ConfMan.setInt("sfx_volume", vol); + } g_engine->syncSoundSettings(); } return acc; @@ -377,6 +409,13 @@ reg_t SoundCommandParser::kDoSoundFade(int argc, reg_t *argv, reg_t acc) { int volume = musicSlot->volume; +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY && musicSlot->isSample) { + g_sci->_audio32->fadeChannel(ResourceId(kResourceTypeAudio, musicSlot->resourceId), musicSlot->soundObj, argv[2].toSint16(), argv[3].toSint16(), argv[4].toSint16(), (bool)argv[5].toSint16()); + return acc; + } +#endif + // If sound is not playing currently, set signal directly if (musicSlot->status != kSoundPlaying) { debugC(kDebugLevelSound, "kDoSound(fade): %04x:%04x fading requested, but sound is currently not playing", PRINT_REG(obj)); @@ -465,7 +504,18 @@ void SoundCommandParser::processUpdateCues(reg_t obj) { return; } - if (musicSlot->pStreamAud) { + if (musicSlot->isSample) { +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + const int position = g_sci->_audio32->getPosition(g_sci->_audio32->findChannelById(ResourceId(kResourceTypeAudio, musicSlot->resourceId), musicSlot->soundObj)); + + if (position == -1) { + processStopSound(musicSlot->soundObj, true); + } + + return; + } +#endif // Update digital sound effect slots uint currentLoopCounter = 0; @@ -668,6 +718,12 @@ reg_t SoundCommandParser::kDoSoundSetVolume(int argc, reg_t *argv, reg_t acc) { value = CLIP<int>(value, 0, MUSIC_VOLUME_MAX); +#ifdef ENABLE_SCI32 + // SSCI unconditionally sets volume if it is digital audio + if (_soundVersion >= SCI_VERSION_2_1_EARLY && musicSlot->isSample) { + _music->soundSetVolume(musicSlot, value); + } else +#endif if (musicSlot->volume != value) { musicSlot->volume = value; _music->soundSetVolume(musicSlot, value); @@ -726,6 +782,15 @@ reg_t SoundCommandParser::kDoSoundSetLoop(int argc, reg_t *argv, reg_t acc) { } return acc; } + +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY) { + if (value != -1) { + value = 1; + } + } +#endif + if (value == -1) { musicSlot->loop = 0xFFFF; } else { @@ -733,6 +798,13 @@ reg_t SoundCommandParser::kDoSoundSetLoop(int argc, reg_t *argv, reg_t acc) { } writeSelectorValue(_segMan, obj, SELECTOR(loop), musicSlot->loop); + +#ifdef ENABLE_SCI32 + if (_soundVersion >= SCI_VERSION_2_1_EARLY && musicSlot->isSample) { + g_sci->_audio32->setLoop(ResourceId(kResourceTypeAudio, musicSlot->resourceId), musicSlot->soundObj, value == -1); + } +#endif + return acc; } diff --git a/engines/sci/sound/sync.cpp b/engines/sci/sound/sync.cpp new file mode 100644 index 0000000000..4e75dab725 --- /dev/null +++ b/engines/sci/sound/sync.cpp @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "sci/engine/kernel.h" +#include "sci/util.h" +#include "sync.h" + +namespace Sci { + +Sync::Sync(ResourceManager *resMan, SegManager *segMan) : + _resMan(resMan), + _segMan(segMan), + _resource(nullptr), + _offset(0) {} + +Sync::~Sync() { + stop(); +} + +void Sync::start(const ResourceId id, const reg_t syncObjAddr) { + _resource = _resMan->findResource(id, true); + _offset = 0; + + if (_resource) { + writeSelectorValue(_segMan, syncObjAddr, SELECTOR(syncCue), 0); + } else { + warning("Sync::start: failed to find resource %s", id.toString().c_str()); + // Notify the scripts to stop sound sync + writeSelectorValue(_segMan, syncObjAddr, SELECTOR(syncCue), SIGNAL_OFFSET); + } +} + +void Sync::next(const reg_t syncObjAddr) { + if (_resource && (_offset < _resource->size - 1)) { + int16 syncCue = -1; + int16 syncTime = (int16)READ_SCI11ENDIAN_UINT16(_resource->data + _offset); + + _offset += 2; + + if ((syncTime != -1) && (_offset < _resource->size - 1)) { + syncCue = (int16)READ_SCI11ENDIAN_UINT16(_resource->data + _offset); + _offset += 2; + } + + writeSelectorValue(_segMan, syncObjAddr, SELECTOR(syncTime), syncTime); + writeSelectorValue(_segMan, syncObjAddr, SELECTOR(syncCue), syncCue); + } +} + +void Sync::stop() { + if (_resource) { + _resMan->unlockResource(_resource); + _resource = nullptr; + } +} + +} // End of namespace Sci diff --git a/engines/sci/graphics/paint.cpp b/engines/sci/sound/sync.h index 482b81aff1..4b9e2d1b3c 100644 --- a/engines/sci/graphics/paint.cpp +++ b/engines/sci/sound/sync.h @@ -20,25 +20,42 @@ * */ -#include "graphics/primitives.h" +#ifndef SCI_SOUND_SYNC_H +#define SCI_SOUND_SYNC_H -#include "sci/sci.h" -#include "sci/engine/state.h" #include "sci/engine/selector.h" -#include "sci/graphics/paint.h" +#include "sci/engine/vm_types.h" namespace Sci { -GfxPaint::GfxPaint() { -} +enum AudioSyncCommands { + kSciAudioSyncStart = 0, + kSciAudioSyncNext = 1, + kSciAudioSyncStop = 2 +}; -GfxPaint::~GfxPaint() { -} +class Resource; +class ResourceManager; +class SegManager; -void GfxPaint::kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo) { -} +/** + * Sync class, kDoSync and relevant functions for SCI games. + * Provides AV synchronization for animations. + */ +class Sync { + SegManager *_segMan; + ResourceManager *_resMan; + Resource *_resource; + uint _offset; + +public: + Sync(ResourceManager *resMan, SegManager *segMan); + ~Sync(); -void GfxPaint::kernelGraphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control) { -} + void start(const ResourceId id, const reg_t syncObjAddr); + void next(const reg_t syncObjAddr); + void stop(); +}; } // End of namespace Sci +#endif diff --git a/engines/scumm/he/cup_player_he.cpp b/engines/scumm/he/cup_player_he.cpp index c409863804..3a7ad49c2f 100644 --- a/engines/scumm/he/cup_player_he.cpp +++ b/engines/scumm/he/cup_player_he.cpp @@ -408,6 +408,9 @@ void CUP_Player::handleSRLE(Common::SeekableReadStream &dataStream, uint32 dataS static void decodeLZSS(uint8 *dst, const uint8 *src1, const uint8 *src2, const uint8 *src3) { uint8 wnd[4096]; int index = 1; + + memset(wnd, 0, sizeof(wnd)); + while (1) { int code = *src1++; for (int b = 0; b < 8; ++b) { diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h index 7f7babc604..c6abac3ecc 100644 --- a/engines/scumm/he/intern_he.h +++ b/engines/scumm/he/intern_he.h @@ -121,13 +121,24 @@ class ScummEngine_v70he : public ScummEngine_v60he { friend class ResExtractor; protected: + enum HESndFlags { + HE_SND_LOOP = 1, + HE_SND_APPEND = 2, + HE_SND_SOFT_SOUND = 4, + HE_SND_QUICK_START = 8, + HE_SND_OFFSET = 16, + HE_SND_VOL = 32, + HE_SND_FREQUENCY = 64, + HE_SND_PAN = 128 + }; + ResExtractor *_resExtractor; byte *_heV7DiskOffsets; byte *_heV7RoomOffsets; uint32 *_heV7RoomIntOffsets; - int32 _heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags, _heSndSoundFreq; + int32 _heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags, _heSndSoundFreq, _heSndPan, _heSndVol; int _numStoredFlObjects; ObjectData *_storedFlObjects; @@ -168,7 +179,7 @@ protected: virtual void setDefaultCursor(); /* HE version 70 script opcodes */ - void o70_startSound(); + void o70_soundOps(); void o70_pickupObject(); void o70_getActorRoom(); void o70_resourceRoutines(); @@ -622,7 +633,7 @@ protected: void o100_redimArray(); void o100_roomOps(); void o100_setSystemMessage(); - void o100_startSound(); + void o100_soundOps(); void o100_setSpriteInfo(); void o100_startScript(); void o100_systemOps(); diff --git a/engines/scumm/he/moonbase/ai_defenseunit.cpp b/engines/scumm/he/moonbase/ai_defenseunit.cpp index 37ce303bc5..ab61297603 100644 --- a/engines/scumm/he/moonbase/ai_defenseunit.cpp +++ b/engines/scumm/he/moonbase/ai_defenseunit.cpp @@ -80,14 +80,14 @@ Common::Point *AntiAirUnit::createTargetPos(int index, int distance, int weaponT targetPos->y = getPosY(); } else { ratio = MAX(0, (getRadius() / distance)); - targetPos->x = getPosX() - ratio * (getPosX() - sourceX); - targetPos->y = getPosY() - ratio * (getPosY() - sourceY); + targetPos->x = (int16)(getPosX() - ratio * (getPosX() - sourceX)); + targetPos->y = (int16)(getPosY() - ratio * (getPosY() - sourceY)); } break; case ITEM_EMP: - if (getRadius() + 215 > distance) { //emp radius + if (getRadius() + 215 > distance) { // Emp radius double x1 = static_cast<double>(sourceX); double y1 = static_cast<double>(sourceY); double x2 = static_cast<double>(getPosX()); @@ -96,17 +96,17 @@ Common::Point *AntiAirUnit::createTargetPos(int index, int distance, int weaponT double r2 = static_cast<double>(getRadius() + 3); double d = static_cast<double>(distance); - //formulae for calculating one point of intersection of two circles + // Formulae for calculating one point of intersection of two circles float root = sqrt((((r1 + r2) * (r1 + r2)) - (d * d)) * ((d * d) - ((r2 - r1) * (r2 - r1)))); - int x = ((x1 + x2) / 2) + ((x2 - x1) * (r1 * r1 - r2 * r2)) / (2 * d * d) + ((y2 - y1) / (2 * d * d)) * root; - int y = ((y1 + y2) / 2) + ((y2 - y1) * (r1 * r1 - r2 * r2)) / (2 * d * d) - ((x2 - x1) / (2 * d * d)) * root; + int x = (int)(((x1 + x2) / 2) + ((x2 - x1) * (r1 * r1 - r2 * r2)) / (2 * d * d) + ((y2 - y1) / (2 * d * d)) * root); + int y = (int)(((y1 + y2) / 2) + ((y2 - y1) * (r1 * r1 - r2 * r2)) / (2 * d * d) - ((x2 - x1) / (2 * d * d)) * root); targetPos->x = x; targetPos->y = y; } else { ratio = 1 - (getRadius() / static_cast<float>(distance - 20)); - targetPos->x = sourceX + ratio * (getPosX() - sourceX); - targetPos->y = sourceY + ratio * (getPosY() - sourceY); + targetPos->x = (int16)(sourceX + ratio * (getPosX() - sourceX)); + targetPos->y = (int16)(sourceY + ratio * (getPosY() - sourceY)); } break; @@ -188,7 +188,7 @@ Common::Point *ShieldUnit::createTargetPos(int index, int distance, int weaponTy break; case ITEM_EMP: - if (getRadius() + 215 > distance) { //emp radius + if (getRadius() + 215 > distance) { // Emp radius double x1 = static_cast<double>(sourceX); double y1 = static_cast<double>(sourceY); double x2 = static_cast<double>(getPosX()); @@ -197,17 +197,17 @@ Common::Point *ShieldUnit::createTargetPos(int index, int distance, int weaponTy double r2 = static_cast<double>(getRadius() + 10); double d = static_cast<double>(distance); - //formulae for calculating one point of intersection of two circles + // Formulae for calculating one point of intersection of two circles float root = sqrt((((r1 + r2) * (r1 + r2)) - (d * d)) * ((d * d) - ((r2 - r1) * (r2 - r1)))); - int x = ((x1 + x2) / 2) + ((x2 - x1) * (r1 * r1 - r2 * r2)) / (2 * d * d) + ((y2 - y1) / (2 * d * d)) * root; - int y = ((y1 + y2) / 2) + ((y2 - y1) * (r1 * r1 - r2 * r2)) / (2 * d * d) - ((x2 - x1) / (2 * d * d)) * root; + int x = (int)(((x1 + x2) / 2) + ((x2 - x1) * (r1 * r1 - r2 * r2)) / (2 * d * d) + ((y2 - y1) / (2 * d * d)) * root); + int y = (int)(((y1 + y2) / 2) + ((y2 - y1) * (r1 * r1 - r2 * r2)) / (2 * d * d) - ((x2 - x1) / (2 * d * d)) * root); targetPos->x = x; targetPos->y = y; } else { ratio = 1 - (getRadius() / static_cast<float>(distance - 20)); - targetPos->x = sourceX + ratio * (getPosX() - sourceX); - targetPos->y = sourceY + ratio * (getPosY() - sourceY); + targetPos->x = (int16)(sourceX + ratio * (getPosX() - sourceX)); + targetPos->y = (int16)(sourceY + ratio * (getPosY() - sourceY)); } if (distance < getRadius()) { @@ -282,8 +282,8 @@ Common::Point *MineUnit::createTargetPos(int index, int distance, int weaponType case ITEM_EMP: ratio = 1 - (getRadius() / static_cast<float>(distance - 20)); - targetPos->x = sourceX + ratio * (getPosX() - sourceX); - targetPos->y = sourceY + ratio * (getPosY() - sourceY); + targetPos->x = (int16)(sourceX + ratio * (getPosX() - sourceX)); + targetPos->y = (int16)(sourceY + ratio * (getPosY() - sourceY)); break; default: diff --git a/engines/scumm/he/moonbase/ai_main.cpp b/engines/scumm/he/moonbase/ai_main.cpp index 7ca4fbd933..98a577bdba 100644 --- a/engines/scumm/he/moonbase/ai_main.cpp +++ b/engines/scumm/he/moonbase/ai_main.cpp @@ -606,7 +606,7 @@ int AI::masterControlProgram(const int paramCount, const int32 *params) { targetX = getHubX(closestHub); targetY = getHubY(closestHub); - delete launchAction; + delete[] launchAction; launchAction = NULL; _aiState = STATE_DEFEND_TARGET; delete myTree; @@ -647,7 +647,7 @@ int AI::masterControlProgram(const int paramCount, const int32 *params) { } } else { index++; - delete launchAction; + delete[] launchAction; launchAction = NULL; } } else { @@ -667,7 +667,7 @@ int AI::masterControlProgram(const int paramCount, const int32 *params) { _aiState = STATE_INIT_ACQUIRE_TARGET; } else { index++; - delete launchAction; + delete[] launchAction; launchAction = NULL; } } @@ -695,7 +695,7 @@ int AI::masterControlProgram(const int paramCount, const int32 *params) { } } else { index++; - delete launchAction; + delete[] launchAction; launchAction = NULL; } } @@ -817,8 +817,7 @@ int AI::masterControlProgram(const int paramCount, const int32 *params) { { // ANGLE setting - int angleAdjustment = 0; - angleAdjustment = _vm->_rnd.getRandomNumber(_aiType[getCurrentPlayer()]->getAngleVariation() * AI_VAR_BASE_ANGLE) * 3.6; + int angleAdjustment = (int)(_vm->_rnd.getRandomNumber(_aiType[getCurrentPlayer()]->getAngleVariation() * AI_VAR_BASE_ANGLE) * 3.6); //pos or neg choice angleAdjustment *= ((_vm->_rnd.getRandomNumber(1) * 2) - 1); angleAdjustment *= randomAttenuation; @@ -2111,7 +2110,7 @@ int *AI::energizeTarget(int &targetX, int &targetY, int index) { break; } - testDist = ((((n - attempt) / n) * .5) + .5) * (getDistance(getHubX(nextUnit), getHubY(nextUnit), targetX, targetY) / .8); + testDist = (((((double)n - (double)attempt) / n) * .5) + .5) * (getDistance(getHubX(nextUnit), getHubY(nextUnit), targetX, targetY) / .8); xPos = getHubX(nextUnit) + testDist * cos(degToRad(testAngle)); yPos = getHubY(nextUnit) + testDist * sin(degToRad(testAngle)); } diff --git a/engines/scumm/he/moonbase/ai_targetacquisition.cpp b/engines/scumm/he/moonbase/ai_targetacquisition.cpp index 938a02dba3..313ea7a411 100644 --- a/engines/scumm/he/moonbase/ai_targetacquisition.cpp +++ b/engines/scumm/he/moonbase/ai_targetacquisition.cpp @@ -226,7 +226,7 @@ IContainedObject *Sortie::createChildObj(int index, int &completionFlag) { if (!_ai->_vm->_rnd.getRandomNumber(4)) currentWeapon->setTypeID(ITEM_MINE); - (*i)->setDamage(thisDamage); + (*i)->setDamage((int)thisDamage); // Apply emp effect if (currentWeapon->getTypeID() == ITEM_EMP) { @@ -278,7 +278,8 @@ float Sortie::calcH() { } int Sortie::checkSuccess() { - if (!_enemyDefenses.size()) return SUCCESS; + if (!_enemyDefenses.size()) + return SUCCESS; int targetX = getTargetPosX(); int targetY = getTargetPosY(); @@ -319,6 +320,15 @@ void Sortie::printEnemyDefenses() { } } +Defender::Defender(AI *ai) : _ai(ai) { + _sourceX = _sourceY = 0; + _targetX = _targetY = 0; + _sourceUnit = 0; + _power = 0; + _angle = 0; + _unit = 0; +} + int Defender::calculateDefenseUnitPosition(int targetX, int targetY, int index) { int currentPlayer = _ai->getCurrentPlayer(); @@ -431,8 +441,8 @@ int Defender::calculateDefenseUnitPosition(int targetX, int targetY, int index) int randAngle = directAngleToHub + _ai->_vm->_rnd.getRandomNumber(179) - 90; int randDist = _ai->_vm->_rnd.getRandomNumber(109) + 40; - int x = targetX + randDist * cos(_ai->degToRad(randAngle)); - int y = targetY + randDist * sin(_ai->degToRad(randAngle)); + int x = (int)(targetX + randDist * cos(_ai->degToRad(randAngle))); + int y = (int)(targetY + randDist * sin(_ai->degToRad(randAngle))); int powAngle = _ai->getPowerAngleFromPoint(hubX, hubY, x, y, 20); @@ -496,8 +506,8 @@ int Defender::calculateDefenseUnitPosition(int targetX, int targetY, int index) int xDist = xCoord - x; int yDist = yCoord - y; - x = xCoord + (terrainSquareSize * 1.414 * (xDist / (abs(xDist) + 1))); - y = yCoord + (terrainSquareSize * 1.414 * (yDist / (abs(yDist) + 1))); + x = (int)(xCoord + (terrainSquareSize * 1.414 * (xDist / (abs(xDist) + 1)))); + y = (int)(yCoord + (terrainSquareSize * 1.414 * (yDist / (abs(yDist) + 1)))); setTargetX(x); setTargetY(y); diff --git a/engines/scumm/he/moonbase/ai_targetacquisition.h b/engines/scumm/he/moonbase/ai_targetacquisition.h index 9afe0f50ab..5e6cfed8bc 100644 --- a/engines/scumm/he/moonbase/ai_targetacquisition.h +++ b/engines/scumm/he/moonbase/ai_targetacquisition.h @@ -112,7 +112,7 @@ private: AI *_ai; public: - Defender(AI *ai) : _ai(ai) {} + Defender(AI *ai); void setSourceX(int sourceX) { _sourceX = sourceX; } void setSourceY(int sourceY) { _sourceY = sourceY; } void setTargetX(int targetX) { _targetX = targetX; } diff --git a/engines/scumm/he/moonbase/ai_traveller.cpp b/engines/scumm/he/moonbase/ai_traveller.cpp index 8294ea32b5..d6eea67b41 100644 --- a/engines/scumm/he/moonbase/ai_traveller.cpp +++ b/engines/scumm/he/moonbase/ai_traveller.cpp @@ -46,6 +46,8 @@ Traveller::Traveller(AI *ai) : _ai(ai) { _waterSourceY = 0; _waterDestX = 0; _waterDestY = 0; + + _posX = _posY = 0; } Traveller::Traveller(int originX, int originY, AI *ai) : _ai(ai) { @@ -143,10 +145,10 @@ IContainedObject *Traveller::createChildObj(int index, int &completionFlag) { if (directDist > _maxDist + 120) maxPower = _ai->getMaxPower(); else - maxPower = (static_cast<float>(directDist) / static_cast<float>(_maxDist + 120)) * _ai->getMaxPower(); + maxPower = (int)((static_cast<float>(directDist) / static_cast<float>(_maxDist + 120)) * _ai->getMaxPower()); maxPower -= 70; - power = maxPower * (1 - ((index % NUM_POWER_STEPS) * SIZE_POWER_STEP)); + power = (int)(maxPower * (1 - ((index % NUM_POWER_STEPS) * SIZE_POWER_STEP))); } retTraveller->setAngleTo(angle); @@ -188,8 +190,8 @@ IContainedObject *Traveller::createChildObj(int index, int &completionFlag) { float pwr = _ai->getMinPower() * .3; float cosine = cos((static_cast<float>(angle) / 360) * (2 * M_PI)); float sine = sin((static_cast<float>(angle) / 360) * (2 * M_PI)); - int xParam = xCoord + (pwr * cosine); - int yParam = yCoord + (pwr * sine); + int xParam = (int)(xCoord + (pwr * cosine)); + int yParam = (int)(yCoord + (pwr * sine)); if (xParam < 0) xParam += _ai->getMaxX(); @@ -233,8 +235,8 @@ IContainedObject *Traveller::createChildObj(int index, int &completionFlag) { int xDist = xCoord - _posX; int yDist = yCoord - _posY; - retTraveller->setPosX(xCoord + (terrainSquareSize * 1.414 * (xDist / (abs(xDist) + 1)))); - retTraveller->setPosY(yCoord + (terrainSquareSize * 1.414 * (yDist / (abs(yDist) + 1)))); + retTraveller->setPosX((int)(xCoord + (terrainSquareSize * 1.414 * (xDist / (abs(xDist) + 1))))); + retTraveller->setPosY((int)(yCoord + (terrainSquareSize * 1.414 * (yDist / (abs(yDist) + 1))))); int closestHub = _ai->getClosestUnit(retTraveller->getPosX(), retTraveller->getPosY(), _ai->getMaxX(), _ai->getCurrentPlayer(), 1, BUILDING_MAIN_BASE, 1, 110); diff --git a/engines/scumm/he/moonbase/ai_tree.cpp b/engines/scumm/he/moonbase/ai_tree.cpp index e3098a7b24..d18536812b 100644 --- a/engines/scumm/he/moonbase/ai_tree.cpp +++ b/engines/scumm/he/moonbase/ai_tree.cpp @@ -29,7 +29,12 @@ namespace Scumm { static int compareTreeNodes(const void *a, const void *b) { - return ((const TreeNode *)a)->value - ((const TreeNode *)b)->value; + if (((const TreeNode *)a)->value < ((const TreeNode *)b)->value) + return -1; + else if (((const TreeNode *)a)->value > ((const TreeNode *)b)->value) + return 1; + else + return 0; } Tree::Tree(AI *ai) : _ai(ai) { diff --git a/engines/scumm/he/moonbase/ai_types.h b/engines/scumm/he/moonbase/ai_types.h index e2de87d653..bb16a737e9 100644 --- a/engines/scumm/he/moonbase/ai_types.h +++ b/engines/scumm/he/moonbase/ai_types.h @@ -72,7 +72,7 @@ public: AIEntity(int id); ~AIEntity() { if (_nameString) { - delete _nameString; + delete[] _nameString; _nameString = 0; } } diff --git a/engines/scumm/he/moonbase/distortion.cpp b/engines/scumm/he/moonbase/distortion.cpp new file mode 100644 index 0000000000..6b637d0565 --- /dev/null +++ b/engines/scumm/he/moonbase/distortion.cpp @@ -0,0 +1,218 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "scumm/he/intern_he.h" +#include "engines/scumm/he/moonbase/moonbase.h" + +namespace Scumm { + +enum { + kBptHeaderSize = 8, + + kReflectionClipped = 0, + kNotClipped = 1, + kSpecializedNotClipped = 2 +}; + +static void blitDistortionCore( + Graphics::Surface *dstBitmap, + const int x, const int y, + const Graphics::Surface *distortionBitmap, + const Common::Rect *optionalclipRectPtr, + int transferOp, + const Graphics::Surface *srcBitmap, + Common::Rect *srcClipRect +) { + Common::Rect clipRect(dstBitmap->w, dstBitmap->h); + + if (optionalclipRectPtr) + if (!clipRect.intersects(*optionalclipRectPtr)) + return; + + clipRect.clip(*optionalclipRectPtr); + + Common::Rect distortionRect(distortionBitmap->w, distortionBitmap->h); + Common::Rect dstRect(x, y, x + distortionRect.width(), y + distortionRect.height()); + + if (!dstRect.intersects(clipRect)) + return; + + dstRect.clip(clipRect); + + distortionRect.moveTo(dstRect.left - x, dstRect.top - y); + + const byte *distortionPtr = (const byte *)distortionBitmap->getBasePtr(distortionRect.left, distortionRect.top); + byte *dstPtr = (byte *)dstBitmap->getBasePtr(dstRect.left, dstRect.top); + int cw = dstRect.width(); + int ch = dstRect.height(); + int idx = dstRect.left; + int dy = dstRect.top; + + int baseX, baseY; + const byte *srcData = (const byte *)srcBitmap->getBasePtr(0, 0); + int srcPitch = srcBitmap->pitch; + + switch (transferOp) { + case kReflectionClipped: + case kNotClipped: + baseX = -(0x1f / 2); // Half range + baseY = -(0x1f / 2); + break; + + case kSpecializedNotClipped: + default: + baseX = 0; + baseY = 0; + } + + while (--ch >= 0) { + uint16 *d = (uint16 *)dstPtr; + const uint16 *is = (const uint16 *)distortionPtr; + int dx = idx; + + for (int i = cw; --i >= 0;) { + uint16 p = READ_LE_UINT16(is); + int sx = baseX + dx + ((p >> 5) & 0x1f); // G color + int sy = baseY + dy + (p & 0x1f); // B color; + + if (transferOp == kReflectionClipped) { + if (sx < srcClipRect->left) + sx -= (srcClipRect->left - sx); + + if (sx > srcClipRect->right) + sx -= (sx - srcClipRect->right); + + sx = MAX<int>(srcClipRect->left, MIN<int>(sx, srcClipRect->right)); + + if (sy < srcClipRect->top) + sy -= (srcClipRect->top - sy); + + if (sy > srcClipRect->bottom) + sy -= (sy - srcClipRect->bottom); + + sy = MAX<int>(srcClipRect->top, MIN<int>(sy, srcClipRect->bottom)); + } + + *d = *((const uint16 *)(srcData + sy * srcPitch + sx * 2)); + + ++d; + ++is; + ++dx; + } + + dstPtr += dstBitmap->pitch; + distortionPtr += distortionBitmap->pitch; + + ++dy; + } +} + +void Moonbase::blitDistortion(byte *bufferData, const int bufferWidth, const int bufferHeight, const int bufferPitch, + const Common::Rect *optionalClippingRect, byte *dataStream, const int x, const int y, byte *altSourceBuffer) { + byte *sourcePixels = (altSourceBuffer) ? altSourceBuffer : bufferData; + Common::Rect dstLimitsRect(bufferWidth, bufferHeight); + Common::Rect clippedDstRect = dstLimitsRect; + + if (optionalClippingRect) { + if (!dstLimitsRect.intersects(*optionalClippingRect)) + return; + dstLimitsRect.clip(*optionalClippingRect); + } else { + clippedDstRect = dstLimitsRect; + } + + int w = READ_LE_UINT16(dataStream + kBptHeaderSize + 0); + int h = READ_LE_UINT16(dataStream + kBptHeaderSize + 2); + Common::Rect srcLimitsRect(w, h); + Common::Rect clippedSrcRect = srcLimitsRect; + Common::Rect dstOperation(x, y, x + clippedSrcRect.width(), y + clippedSrcRect.height()); + + if (!clippedDstRect.intersects(dstOperation)) + return; + + clippedDstRect.clip(dstOperation); + + int subBlockCount = READ_LE_UINT16(dataStream + kBptHeaderSize + 4); + byte *subBlockStream = dataStream + kBptHeaderSize + READ_LE_UINT32(dataStream + 4); + int cx1 = clippedDstRect.left; + int cy1 = clippedDstRect.top; + int cx2 = clippedDstRect.right - 1; + int cy2 = clippedDstRect.bottom - 1; + + for (int i = 0; i < subBlockCount; i++) { + byte *blockData = subBlockStream; + uint32 blockSize = READ_LE_UINT32(blockData); blockData += 4; + subBlockStream += blockSize; + int xOffset = READ_LE_UINT16(blockData); blockData += 2; + int yOffset = READ_LE_UINT16(blockData); blockData += 2; + int width = READ_LE_UINT16(blockData); blockData += 2; + int height = READ_LE_UINT16(blockData); blockData += 2; + int l_reach = READ_LE_UINT16(blockData); blockData += 2; + int r_reach = READ_LE_UINT16(blockData); blockData += 2; + int t_reach = READ_LE_UINT16(blockData); blockData += 2; + int b_reach = READ_LE_UINT16(blockData); blockData += 2; + int distortionPitch = ((width * 2 + 7) / 8); // 2 for 555 + + if (width == 0 && height == 0) + continue; + + Graphics::Surface dstBitmap; + dstBitmap.init(bufferWidth, bufferHeight, bufferPitch, bufferData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0)); + + Graphics::Surface srcBitmap; + srcBitmap.init(bufferWidth, bufferHeight, bufferPitch, sourcePixels, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0)); + + Graphics::Surface distortionBitmap; + distortionBitmap.init(width, height, distortionPitch, blockData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0)); + + Common::Rect srcClipRect(cx1, cy1, cx2, cy2); + Common::Rect dstClipRect(cx1, cy1, cx2, cy2); + + int src_x = (x + xOffset); + int src_y = (y + yOffset); + + Common::Rect srcReach((src_x - l_reach), (src_y - t_reach), (src_x + r_reach), (src_y + b_reach)); + Common::Rect srcLimits(srcBitmap.w, srcBitmap.h); + + if (!srcLimits.intersects(srcClipRect)) + return; + + srcLimits.clip(srcClipRect); + + if (!srcReach.intersects(srcLimits)) + return; + + srcReach.clip(srcLimits); + + if (srcLimits.contains(srcReach)) { + if (srcBitmap.pitch == 1280) { + blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kSpecializedNotClipped, &srcBitmap, 0); + } else { + blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kNotClipped, &srcBitmap, 0); + } + } else { + blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kReflectionClipped, &srcBitmap, &srcLimits); + } + } +} + +} diff --git a/engines/scumm/he/moonbase/moonbase.h b/engines/scumm/he/moonbase/moonbase.h index 243d53a11d..71c03cb007 100644 --- a/engines/scumm/he/moonbase/moonbase.h +++ b/engines/scumm/he/moonbase/moonbase.h @@ -42,6 +42,8 @@ public: void blitT14WizImage(uint8 *dst, int dstw, int dsth, int dstPitch, const Common::Rect *clipBox, uint8 *wizd, int srcx, int srcy, int rawROP, int paramROP); + void blitDistortion(byte *bufferData, const int bufferWidth, const int bufferHeight, const int bufferPitch, + const Common::Rect *optionalClippingRect, byte *dataStream, const int x, const int y, byte *altSourceBuffer); // FOW Stuff bool isFOW(int resNum, int state, uint32 conditionBits) { @@ -98,7 +100,7 @@ private: bool _fowBlackMode; - int _fowRenderTable[32768]; + int32 _fowRenderTable[32768]; Common::PEResources _exe; Common::String _fileName; diff --git a/engines/scumm/he/moonbase/moonbase_fow.cpp b/engines/scumm/he/moonbase/moonbase_fow.cpp index 48c2219926..0837d9eea3 100644 --- a/engines/scumm/he/moonbase/moonbase_fow.cpp +++ b/engines/scumm/he/moonbase/moonbase_fow.cpp @@ -59,7 +59,7 @@ void Moonbase::initFOW() { _fowBlackMode = true; - memset(_fowRenderTable, 0, 32768); + memset(_fowRenderTable, 0, sizeof(_fowRenderTable)); } void Moonbase::releaseFOWResources() { @@ -114,8 +114,14 @@ bool Moonbase::setFOWImage(int image) { delete stream; } - if (!_fowImage && image > 0) - _fowImage = _vm->getResourceAddress(rtImage, image); + if (!_fowImage && image > 0) { + int sz = _vm->getResourceSize(rtImage, image); + _fowImage = (uint8 *)malloc(sz); + + // We have to copy it, otherwise the resource manager + // will kill it earlier or later. Matches original. + memcpy(_fowImage, _vm->getResourceAddress(rtImage, image), sz); + } if (!_fowImage) return false; @@ -158,7 +164,7 @@ enum FOWElement { }; int Moonbase::readFOWVisibilityArray(int array, int y, int x) { - if (readFromArray(array, y, x) > 0) + if (readFromArray(array, x, y) > 0) return FOW_EMPTY; return FOW_SOLID; @@ -169,6 +175,8 @@ void Moonbase::setFOWInfo(int fowInfoArray, int downDim, int acrossDim, int view if (!_fowImage) return; + memset(_fowRenderTable, 0, sizeof(_fowRenderTable)); + _fowDrawX = clipX1; _fowDrawY = clipY1; @@ -210,16 +218,16 @@ void Moonbase::setFOWInfo(int fowInfoArray, int downDim, int acrossDim, int view int dataOffset = (_fowVw * 3); int dataOffset2 = (dataOffset * 2); - int *pOutterRenderTableA = _fowRenderTable; - int *pOutterRenderTableB = pOutterRenderTableA + dataOffset; + int32 *pOutterRenderTableA = _fowRenderTable; + int32 *pOutterRenderTableB = pOutterRenderTableA + dataOffset; for (int ay = 0; ay < _fowVh; ay++) { int l = il; int c = ic; int r = ir; - int *pRenderTableA = pOutterRenderTableA; - int *pRenderTableB = pOutterRenderTableB; + int32 *pRenderTableA = pOutterRenderTableA; + int32 *pRenderTableB = pOutterRenderTableB; pOutterRenderTableA += dataOffset2; pOutterRenderTableB += dataOffset2; @@ -228,7 +236,7 @@ void Moonbase::setFOWInfo(int fowInfoArray, int downDim, int acrossDim, int view int visibility = readFOWVisibilityArray(fowInfoArray, m, c); if (visibility == FOW_EMPTY) { - int bits = 0; + uint32 bits = 0; if (readFOWVisibilityArray(fowInfoArray, t, l) != 0) bits |= FF_T_L; if (readFOWVisibilityArray(fowInfoArray, t, c) != 0) bits |= FF_T; @@ -333,7 +341,7 @@ static void blackRect_16bpp(uint8 *destSurface, int dstPitch, int dstw, int dsth int h = y2 - y1; int w = ((x2 - x1) + 1) * 2; - while ( --h >= 0 ) { + while (--h >= 0) { memset(dst, 0, w); dst += dstPitch; } @@ -343,7 +351,7 @@ void Moonbase::renderFOW(uint8 *destSurface, int dstPitch, int dstType, int dstw if (!_fowImage) return; - const int *pOutterRenderTable = _fowRenderTable; + const int32 *pOutterRenderTable = _fowRenderTable; int ixPos = ((_fowVtx1 * _fowTileW) - _fowMvx) + _fowDrawX; int yPos = ((_fowVty1 * _fowTileH) - _fowMvy) + _fowDrawY; int dataOffset = _fowVw * 3; @@ -355,7 +363,7 @@ void Moonbase::renderFOW(uint8 *destSurface, int dstPitch, int dstType, int dstw int real_yPos = yPos; for (int i = 0; i < 2; i++) { - const int *pRenderTable = pOutterRenderTable; + const int32 *pRenderTable = pOutterRenderTable; pOutterRenderTable += dataOffset; int xPos = ixPos; diff --git a/engines/scumm/he/script_v100he.cpp b/engines/scumm/he/script_v100he.cpp index 2e7b4c4bf5..714f431188 100644 --- a/engines/scumm/he/script_v100he.cpp +++ b/engines/scumm/he/script_v100he.cpp @@ -184,7 +184,7 @@ void ScummEngine_v100he::setupOpcodes() { OPCODE(0x74, o6_delay); OPCODE(0x75, o6_delayMinutes); OPCODE(0x76, o6_delaySeconds); - OPCODE(0x77, o100_startSound); + OPCODE(0x77, o100_soundOps); /* 78 */ OPCODE(0x78, o80_sourceDebug); OPCODE(0x79, o100_setSpriteInfo); @@ -643,6 +643,11 @@ void ScummEngine_v100he::o100_arrayOps() { dim2end = pop(); dim2start = pop(); + debug(0, "Complex: %d = %d[%d to %d][%d to %d] %c %d[%d to %d][%d to %d]", array, + array1, a1_dim1start, a1_dim2end, a1_dim1start, a1_dim2end, + " +-&|^"[type], + array2, a2_dim1start, a2_dim2end, a2_dim1start, a2_dim2end); + int a12_num = a1_dim2end - a1_dim2start + 1; int a11_num = a1_dim1end - a1_dim1start + 1; int a22_num = a2_dim2end - a2_dim2start + 1; @@ -689,8 +694,6 @@ void ScummEngine_v100he::o100_arrayOps() { writeArray(array, dim2start, dim1, res); } } - - warning("STUB: o100_arrayOps: case 132 type %d", type); break; } case 133: // SO_RANGE_ARRAY_ASSIGNMENT @@ -1739,69 +1742,69 @@ void ScummEngine_v100he::o100_setSystemMessage() { } } -void ScummEngine_v100he::o100_startSound() { +void ScummEngine_v100he::o100_soundOps() { byte filename[260]; int var, value; byte subOp = fetchScriptByte(); switch (subOp) { - case 6: - _heSndFlags |= 16; + case 6: // SO_AT + _heSndFlags |= HE_SND_OFFSET; _heSndOffset = pop(); break; - case 47: + case 47: // SO_LOAD copyScriptString(filename, sizeof(filename)); _heSndSoundId = pop(); if (_heSndSoundId) debug(0, "Load sound %d from file %s\n", _heSndSoundId, filename); break; - case 55: - _heSndFlags |= 8; + case 55: // SO_NOW + _heSndFlags |= HE_SND_QUICK_START; break; - case 83: + case 83: // SO_VARIABLE value = pop(); var = pop(); _heSndSoundId = pop(); ((SoundHE *)_sound)->setSoundVar(_heSndSoundId, var, value); break; - case 92: - _sound->addSoundToQueue(_heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags); + case 92: // SO_END + _sound->addSoundToQueue(_heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags, _heSndSoundFreq, _heSndPan, _heSndVol); break; - case 128: - _heSndFlags |= 2; + case 128: // SO_SOUND_ADD + _heSndFlags |= HE_SND_APPEND; break; - case 129: + case 129: // SO_SOUND_CHANNEL _heSndChannel = pop(); break; - case 130: - _heSndFlags |= 64; - pop(); + case 130: // SO_SOUND_FREQUENCY + _heSndFlags |= HE_SND_FREQUENCY; + _heSndSoundFreq = pop(); break; - case 131: - _heSndFlags |= 1; + case 131: // SO_SOUND_LOOPING + _heSndFlags |= HE_SND_LOOP; break; - case 132: // Music - case 134: // Sound + case 132: // SO_SOUND_MODIFY + case 134: // SO_SOUND_START _heSndSoundId = pop(); _heSndOffset = 0; _heSndSoundFreq = 11025; _heSndChannel = VAR(VAR_SOUND_CHANNEL); _heSndFlags = 0; break; - case 133: - _heSndFlags |= 128; - pop(); + case 133: // SO_SOUND_PAN + _heSndFlags |= HE_SND_PAN; + _heSndPan = pop(); break; - case 135: - _heSndFlags |= 4; + case 135: // SO_SOUND_SOFT + _heSndFlags |= HE_SND_SOFT_SOUND; break; - case 136: - _heSndFlags |= 32; - pop(); + case 136: // SO_SOUND_VOLUME + _heSndFlags |= HE_SND_VOL; + _heSndVol = pop(); break; default: - error("o100_startSound invalid case %d", subOp); + error("o100_soundOps invalid case %d", subOp); } } @@ -2572,62 +2575,62 @@ void ScummEngine_v100he::o100_getWizData() { byte subOp = fetchScriptByte(); switch (subOp) { - case 20: + case 20: // SO_COLOR y = pop(); x = pop(); state = pop(); resId = pop(); push(_wiz->getWizPixelColor(resId, state, x, y)); break; - case 26: + case 26: // SO_COUNT resId = pop(); push(_wiz->getWizImageStates(resId)); break; - case 33: + case 33: // SO_FIND y = pop(); x = pop(); state = pop(); resId = pop(); push(_wiz->isWizPixelNonTransparent(resId, state, x, y, 0)); break; - case 39: + case 39: // SO_HEIGHT state = pop(); resId = pop(); _wiz->getWizImageDim(resId, state, w, h); push(h); break; - case 54: + case 54: // SO_NEW_GENERAL_PROPERTY type = pop(); state = pop(); resId = pop(); push(_wiz->getWizImageData(resId, state, type)); break; - case 84: + case 84: // SO_WIDTH state = pop(); resId = pop(); _wiz->getWizImageDim(resId, state, w, h); push(w); break; - case 85: + case 85: // SO_XPOS state = pop(); resId = pop(); _wiz->getWizImageSpot(resId, state, x, y); push(x); break; - case 86: + case 86: // SO_YPOS state = pop(); resId = pop(); _wiz->getWizImageSpot(resId, state, x, y); push(y); break; - case 131: + case 131: // SO_FONT_START pop(); copyScriptString(filename, sizeof(filename)); pop(); push(0); debug(0, "o100_getWizData() case 111 unhandled"); break; - case 132: + case 132: // SO_HISTOGRAM h = pop(); w = pop(); y = pop(); diff --git a/engines/scumm/he/script_v70he.cpp b/engines/scumm/he/script_v70he.cpp index b91943c685..0bdeb3211e 100644 --- a/engines/scumm/he/script_v70he.cpp +++ b/engines/scumm/he/script_v70he.cpp @@ -39,7 +39,7 @@ namespace Scumm { void ScummEngine_v70he::setupOpcodes() { ScummEngine_v60he::setupOpcodes(); - OPCODE(0x74, o70_startSound); + OPCODE(0x74, o70_soundOps); OPCODE(0x84, o70_pickupObject); OPCODE(0x8c, o70_getActorRoom); OPCODE(0x9b, o70_resourceRoutines); @@ -52,60 +52,60 @@ void ScummEngine_v70he::setupOpcodes() { OPCODE(0xfa, o70_setSystemMessage); } -void ScummEngine_v70he::o70_startSound() { +void ScummEngine_v70he::o70_soundOps() { int var, value; byte subOp = fetchScriptByte(); switch (subOp) { - case 9: - _heSndFlags |= 4; + case 9: // SO_SOUND_SOFT? + _heSndFlags |= HE_SND_SOFT_SOUND; break; - case 23: + case 23: // SO_VARIABLE value = pop(); var = pop(); _heSndSoundId = pop(); ((SoundHE *)_sound)->setSoundVar(_heSndSoundId, var, value); break; - case 25: + case 25: // SO_SOUND_VOLUME value = pop(); _heSndSoundId = pop(); - _sound->addSoundToQueue(_heSndSoundId, 0, 0, 8); + _sound->addSoundToQueue(_heSndSoundId, 0, 0, HE_SND_VOL, 0, 0, value); break; - case 56: - _heSndFlags |= 16; + case 56: // SO_NOW + _heSndFlags |= HE_SND_QUICK_START; break; - case 164: - _heSndFlags |= 2; + case 164: // SO_SOUND_ADD + _heSndFlags |= HE_SND_APPEND; break; case 222: // WORKAROUND: For errors in room script 240 (room 4) of maze break; - case 224: + case 224: // SO_SOUND_FREQUENCY _heSndSoundFreq = pop(); break; - case 230: + case 230: // SO_SOUND_CHANNEL _heSndChannel = pop(); break; - case 231: + case 231: // SO_AT _heSndOffset = pop(); break; - case 232: + case 232: // SO_SOUND_START _heSndSoundId = pop(); _heSndOffset = 0; _heSndSoundFreq = 11025; _heSndChannel = VAR(VAR_SOUND_CHANNEL); break; - case 245: - _heSndFlags |= 1; + case 245: // SO_SOUND_LOOPING + _heSndFlags |= HE_SND_LOOP; break; - case 255: - _sound->addSoundToQueue(_heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags); + case 255: // SO_END + _sound->addSoundToQueue(_heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags, _heSndSoundFreq); _heSndFlags = 0; break; default: - error("o70_startSound invalid case %d", subOp); + error("o70_soundOps invalid case %d", subOp); } } diff --git a/engines/scumm/he/sound_he.cpp b/engines/scumm/he/sound_he.cpp index 8670116c68..9da3641064 100644 --- a/engines/scumm/he/sound_he.cpp +++ b/engines/scumm/he/sound_he.cpp @@ -59,31 +59,29 @@ SoundHE::~SoundHE() { delete[] _heSoundChannels; } -void SoundHE::addSoundToQueue(int sound, int heOffset, int heChannel, int heFlags) { +void SoundHE::addSoundToQueue(int sound, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol) { if (_vm->VAR_LAST_SOUND != 0xFF) _vm->VAR(_vm->VAR_LAST_SOUND) = sound; - if ((_vm->_game.heversion <= 99 && (heFlags & 16)) || (_vm->_game.heversion >= 100 && (heFlags & 8))) { - playHESound(sound, heOffset, heChannel, heFlags); - return; + if (heFlags & 8) { + playHESound(sound, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } else { - - Sound::addSoundToQueue(sound, heOffset, heChannel, heFlags); + Sound::addSoundToQueue(sound, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } } -void SoundHE::addSoundToQueue2(int sound, int heOffset, int heChannel, int heFlags) { +void SoundHE::addSoundToQueue2(int sound, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol) { int i = _soundQue2Pos; while (i--) { if (_soundQue2[i].sound == sound && !(heFlags & 2)) return; } - Sound::addSoundToQueue2(sound, heOffset, heChannel, heFlags); + Sound::addSoundToQueue2(sound, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } void SoundHE::processSoundQueues() { - int snd, heOffset, heChannel, heFlags; + int snd, heOffset, heChannel, heFlags, heFreq, hePan, heVol; if (_vm->_game.heversion >= 72) { for (int i = 0; i <_soundQue2Pos; i++) { @@ -91,8 +89,11 @@ void SoundHE::processSoundQueues() { heOffset = _soundQue2[i].offset; heChannel = _soundQue2[i].channel; heFlags = _soundQue2[i].flags; + heFreq = _soundQue2[_soundQue2Pos].freq; + hePan = _soundQue2[_soundQue2Pos].pan; + heVol = _soundQue2[_soundQue2Pos].vol; if (snd) - playHESound(snd, heOffset, heChannel, heFlags); + playHESound(snd, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } _soundQue2Pos = 0; } else { @@ -102,8 +103,11 @@ void SoundHE::processSoundQueues() { heOffset = _soundQue2[_soundQue2Pos].offset; heChannel = _soundQue2[_soundQue2Pos].channel; heFlags = _soundQue2[_soundQue2Pos].flags; + heFreq = _soundQue2[_soundQue2Pos].freq; + hePan = _soundQue2[_soundQue2Pos].pan; + heVol = _soundQue2[_soundQue2Pos].vol; if (snd) - playHESound(snd, heOffset, heChannel, heFlags); + playHESound(snd, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } } @@ -527,7 +531,7 @@ byte *findSoundTag(uint32 tag, byte *ptr) { return NULL; } -void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) { +void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol) { Audio::RewindableAudioStream *stream = 0; byte *ptr, *spoolPtr; int size = -1; diff --git a/engines/scumm/he/sound_he.h b/engines/scumm/he/sound_he.h index e0324d0753..d5a2817a0f 100644 --- a/engines/scumm/he/sound_he.h +++ b/engines/scumm/he/sound_he.h @@ -61,8 +61,8 @@ public: SoundHE(ScummEngine *parent, Audio::Mixer *mixer); ~SoundHE(); - virtual void addSoundToQueue(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0); - virtual void addSoundToQueue2(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0); + virtual void addSoundToQueue(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0, int heFreq = 0, int hePan = 0, int heVol = 0); + virtual void addSoundToQueue2(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0, int heFreq = 0, int hePan = 0, int heVol = 0); virtual int isSoundRunning(int sound) const; virtual void stopSound(int sound); @@ -75,7 +75,7 @@ public: int getSoundPos(int sound); int getSoundVar(int sound, int var); void setSoundVar(int sound, int var, int val); - void playHESound(int soundID, int heOffset, int heChannel, int heFlags); + void playHESound(int soundID, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol); void processSoundCode(); void processSoundOpcodes(int sound, byte *codePtr, int *soundVars); void setOverrideFreq(int freq); diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp index 428960f673..9339318d19 100644 --- a/engines/scumm/he/wiz_he.cpp +++ b/engines/scumm/he/wiz_he.cpp @@ -1748,7 +1748,7 @@ void Wiz::copyCompositeWizImage(uint8 *dst, uint8 *wizPtr, uint8 *compositeInfoB drawFlags = flags; } - uint srcw1, srch1; + uint srcw1 = 0, srch1 = 0; if (drawFlags & (kWIFFlipX | kWIFFlipY)) { uint8 *wizh = _vm->findWrappedBlock(MKTAG('W','I','Z','H'), wizPtr, subState, 0); assert(wizh); @@ -1816,11 +1816,10 @@ void Wiz::copy555WizImage(uint8 *dst, uint8 *wizd, int dstPitch, int dstType, if (compID == 0x12340102) { ((ScummEngine_v100he *)_vm)->_moonbase->blitT14WizImage(dst, dstw, dsth, dstPitch, clipBox, wizd, srcx, srcy, rawROP, paramROP); } else if (compID == 0x12340802) { - warning("Distorion codec"); + ((ScummEngine_v100he *)_vm)->_moonbase->blitDistortion(dst, dstw, dsth, dstPitch, clipBox, wizd, srcx, srcy, 0); } else if (compID == 0x12340902) { error("Unsupported Distortion"); } - } #endif @@ -2790,6 +2789,14 @@ int Wiz::isWizPixelNonTransparent(uint8 *data, int state, int x, int y, int flag int c = READ_LE_UINT32(wizh + 0x0); int w = READ_LE_UINT32(wizh + 0x4); int h = READ_LE_UINT32(wizh + 0x8); + + if (_vm->_game.id == GID_MOONBASE) { + uint16 color = 0xffff; + drawWizImageEx((byte *)&color, data, 0, 2, kDstMemory, 1, 1, -x, -y, w, h, state, 0, 0, 0, 0, 2, 0, 0); + + return color != 0xffff; + } + uint8 *wizd = _vm->findWrappedBlock(MKTAG('W','I','Z','D'), data, state, 0); assert(wizd); if (x >= 0 && x < w && y >= 0 && y < h) { @@ -2841,6 +2848,13 @@ uint16 Wiz::getWizPixelColor(int resNum, int state, int x, int y) { int c = READ_LE_UINT32(wizh + 0x0); int w = READ_LE_UINT32(wizh + 0x4); int h = READ_LE_UINT32(wizh + 0x8); + + if (_vm->_game.id == GID_MOONBASE) { + drawWizImageEx((byte *)&color, data, 0, 2, kDstMemory, 1, 1, -x, -y, w, h, state, 0, 0, 0, 0, 2, 0, 0); + + return color; + } + uint8 *wizd = _vm->findWrappedBlock(MKTAG('W','I','Z','D'), data, state, 0); assert(wizd); switch (c) { diff --git a/engines/scumm/module.mk b/engines/scumm/module.mk index 04611ba1b1..85ff1aa4cd 100644 --- a/engines/scumm/module.mk +++ b/engines/scumm/module.mk @@ -147,6 +147,7 @@ MODULE_OBJS += \ he/moonbase/ai_tree.o \ he/moonbase/ai_types.o \ he/moonbase/ai_weapon.o \ + he/moonbase/distortion.o \ he/moonbase/moonbase.o \ he/moonbase/moonbase_fow.o endif diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index d5727f2a7c..3b7dea194b 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -805,6 +805,8 @@ ScummEngine_v70he::ScummEngine_v70he(OSystem *syst, const DetectorResult &dr) _heSndChannel = 0; _heSndFlags = 0; _heSndSoundFreq = 0; + _heSndPan = 0; + _heSndVol = 0; _numStoredFlObjects = 0; _storedFlObjects = (ObjectData *)calloc(100, sizeof(ObjectData)); diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp index 33b7c3108d..a62092f493 100644 --- a/engines/scumm/sound.cpp +++ b/engines/scumm/sound.cpp @@ -110,7 +110,7 @@ Sound::~Sound() { delete _talkChannelHandle; } -void Sound::addSoundToQueue(int sound, int heOffset, int heChannel, int heFlags) { +void Sound::addSoundToQueue(int sound, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol) { if (_vm->VAR_LAST_SOUND != 0xFF) _vm->VAR(_vm->VAR_LAST_SOUND) = sound; _lastSound = sound; @@ -119,15 +119,18 @@ void Sound::addSoundToQueue(int sound, int heOffset, int heChannel, int heFlags) if (sound <= _vm->_numSounds) _vm->ensureResourceLoaded(rtSound, sound); - addSoundToQueue2(sound, heOffset, heChannel, heFlags); + addSoundToQueue2(sound, heOffset, heChannel, heFlags, heFreq, hePan, heVol); } -void Sound::addSoundToQueue2(int sound, int heOffset, int heChannel, int heFlags) { +void Sound::addSoundToQueue2(int sound, int heOffset, int heChannel, int heFlags, int heFreq, int hePan, int heVol) { assert(_soundQue2Pos < ARRAYSIZE(_soundQue2)); _soundQue2[_soundQue2Pos].sound = sound; _soundQue2[_soundQue2Pos].offset = heOffset; _soundQue2[_soundQue2Pos].channel = heChannel; _soundQue2[_soundQue2Pos].flags = heFlags; + _soundQue2[_soundQue2Pos].freq = heFreq; + _soundQue2[_soundQue2Pos].pan = hePan; + _soundQue2[_soundQue2Pos].vol = heVol; _soundQue2Pos++; } @@ -806,6 +809,9 @@ void Sound::stopSound(int sound) { _soundQue2[i].offset = 0; _soundQue2[i].channel = 0; _soundQue2[i].flags = 0; + _soundQue2[i].freq = 0; + _soundQue2[i].pan = 0; + _soundQue2[i].vol = 0; } } } diff --git a/engines/scumm/sound.h b/engines/scumm/sound.h index 7fdb16371c..bc1e88f76b 100644 --- a/engines/scumm/sound.h +++ b/engines/scumm/sound.h @@ -67,6 +67,9 @@ protected: int32 offset; int16 channel; int16 flags; + int16 freq; + int16 pan; + int16 vol; } _soundQue2[10]; Common::String _sfxFilename; @@ -101,8 +104,8 @@ public: public: Sound(ScummEngine *parent, Audio::Mixer *mixer); virtual ~Sound(); - virtual void addSoundToQueue(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0); - virtual void addSoundToQueue2(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0); + virtual void addSoundToQueue(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0, int heFreq = 0, int hePan = 0, int heVol = 0); + virtual void addSoundToQueue2(int sound, int heOffset = 0, int heChannel = 0, int heFlags = 0, int heFreq = 0, int hePan = 0, int heVol = 0); void processSound(); void playSound(int soundID); diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp index c52c30191a..da4aec6994 100644 --- a/engines/sherlock/music.cpp +++ b/engines/sherlock/music.cpp @@ -226,6 +226,7 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) { _midiOption = false; _midiMusicData = nullptr; _musicVolume = ConfMan.hasKey("music_volume") ? ConfMan.getInt("music_volume") : 255; + _musicOn = false; if (IS_3DO) { // 3DO - uses digital samples for music diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp index 644c0c74c9..a05351b170 100644 --- a/engines/sherlock/objects.cpp +++ b/engines/sherlock/objects.cpp @@ -636,7 +636,9 @@ void Sprite::clear() { _altImages = nullptr; _altSeq = 0; _centerWalk = 0; - Common::fill(&_stopFrames[0], &_stopFrames[8], (ImageFrame *)nullptr); + + for (int i = 0; i < 8; i++) + _stopFrames[i] = nullptr; } void Sprite::setImageFrame() { diff --git a/engines/sherlock/saveload.cpp b/engines/sherlock/saveload.cpp index f32552c7ea..45a4eedb10 100644 --- a/engines/sherlock/saveload.cpp +++ b/engines/sherlock/saveload.cpp @@ -89,7 +89,7 @@ SaveStateList SaveManager::getSavegameList(const Common::String &target) { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String saveDesc; - Common::String pattern = Common::String::format("%s.0??", target.c_str()); + Common::String pattern = Common::String::format("%s.0##", target.c_str()); SherlockSavegameHeader header; filenames = saveFileMan->listSavefiles(pattern); diff --git a/engines/sherlock/scalpel/scalpel_user_interface.h b/engines/sherlock/scalpel/scalpel_user_interface.h index c0b8672a87..cc3aafff65 100644 --- a/engines/sherlock/scalpel/scalpel_user_interface.h +++ b/engines/sherlock/scalpel/scalpel_user_interface.h @@ -58,7 +58,7 @@ class Settings; class ScalpelUserInterface: public UserInterface { friend class Settings; - friend class Talk; + friend class Sherlock::Talk; private: char _keyPress; int _lookHelp; diff --git a/engines/sherlock/surface.h b/engines/sherlock/surface.h index 807fbeb1d1..401d9b648d 100644 --- a/engines/sherlock/surface.h +++ b/engines/sherlock/surface.h @@ -121,7 +121,7 @@ protected: virtual void addDirtyRect(const Common::Rect &r) {} public: Surface() : BaseSurface() {} - Surface(int w, int h) : BaseSurface(w, h) {} + Surface(int width, int height) : BaseSurface(width, height) {} }; } // End of namespace Sherlock diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index a37f7d250d..720ed8afc8 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -124,22 +124,29 @@ void Sound::checkSpeechFileEndianness() { uint32 index = _cowHeader[locIndex + (localNo * 2) - 1]; if (sampleSize) { uint32 size; + bool leOk = false, beOk = false; // Compute average of difference between two consecutive samples for both BE and LE _bigEndianSpeech = false; - int16 *data = uncompressSpeech(index + _cowHeaderSize, sampleSize, &size); + int16 *data = uncompressSpeech(index + _cowHeaderSize, sampleSize, &size, &leOk); uint32 maxSamples = size > 2000 ? 2000 : size; double le_diff = endiannessHeuristicValue(data, size, maxSamples); delete[] data; _bigEndianSpeech = true; - data = uncompressSpeech(index + _cowHeaderSize, sampleSize, &size); + data = uncompressSpeech(index + _cowHeaderSize, sampleSize, &size, &beOk); double be_diff = endiannessHeuristicValue(data, size, maxSamples); delete [] data; // Set the big endian flag - _bigEndianSpeech = (be_diff < le_diff); + if (leOk && !beOk) + _bigEndianSpeech = false; + else if (beOk && !leOk) + _bigEndianSpeech = true; + else + _bigEndianSpeech = (be_diff < le_diff); if (_bigEndianSpeech) debug(6, "Mac version: using big endian speech file"); else debug(6, "Mac version: using little endian speech file"); + debug(8, "Speech decompression memory check: big endian = %s, little endian = %s", beOk ? "good" : "bad", leOk ? "good" : "bad"); debug(8, "Speech endianness heuristic: average = %f for BE and %f for LE (%d samples)", be_diff, le_diff, maxSamples); } } @@ -445,7 +452,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { return false; } -int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { +int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size, bool* ok) { uint8 *fBuf = (uint8 *)malloc(cSize); _cowFile.seek(index); _cowFile.read(fBuf, cSize); @@ -455,6 +462,8 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { headerPos++; if (headerPos < 100) { + if (ok != 0) + *ok = true; int32 resSize; int16 *srcData; uint32 srcPos; @@ -507,8 +516,11 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { srcPos++; if (length < 0) { length = -length; - if (length > samplesLeft) + if (length > samplesLeft) { length = samplesLeft; + if (ok != 0) + *ok = false; + } int16 value; if (_bigEndianSpeech) { value = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + srcPos))); @@ -519,8 +531,11 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { dstData[dstPos++] = value; srcPos++; } else { - if (length > samplesLeft) + if (length > samplesLeft) { length = samplesLeft; + if (ok != 0) + *ok = false; + } if (_bigEndianSpeech) { for (uint16 cnt = 0; cnt < (uint16)length; cnt++) dstData[dstPos++] = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + (srcPos++)))); @@ -534,6 +549,8 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { } if (samplesLeft > 0) { memset(dstData + dstPos, 0, samplesLeft * 2); + if (ok != 0) + *ok = false; } if (_cowMode == CowDemo) // demo has wave output size embedded in the compressed data *(uint32 *)dstData = 0; @@ -542,6 +559,8 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { calcWaveVolume(dstData, resSize); return dstData; } else { + if (ok != 0) + *ok = false; free(fBuf); warning("Sound::uncompressSpeech(): DATA tag not found in wave header"); *size = 0; diff --git a/engines/sword1/sound.h b/engines/sword1/sound.h index e65e797934..18ee91dff2 100644 --- a/engines/sword1/sound.h +++ b/engines/sword1/sound.h @@ -110,7 +110,7 @@ private: void initCowSystem(); uint32 getSampleId(int32 fxNo); - int16 *uncompressSpeech(uint32 index, uint32 cSize, uint32 *size); + int16 *uncompressSpeech(uint32 index, uint32 cSize, uint32 *size, bool* ok = 0); void calcWaveVolume(int16 *data, uint32 length); bool _waveVolume[WAVE_VOL_TAB_LENGTH]; uint16 _waveVolPos; diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp index 4ca565c972..c5f55b5a26 100644 --- a/engines/sword25/detection.cpp +++ b/engines/sword25/detection.cpp @@ -91,7 +91,7 @@ const ExtraGuiOptions Sword25MetaEngine::getExtraGuiOptions(const Common::String SaveStateList Sword25MetaEngine::listSaves(const char *target) const { Common::String pattern = target; - pattern = pattern + ".???"; + pattern = pattern + ".###"; SaveStateList saveList; Sword25::PersistenceService ps; diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp index 32d5abb865..dc7ca67cfe 100644 --- a/engines/tinsel/music.cpp +++ b/engines/tinsel/music.cpp @@ -401,7 +401,7 @@ MidiMusicPlayer::MidiMusicPlayer(TinselEngine *vm) { if (milesAudioEnabled) { // Discworld 1 (DOS) uses Miles Audio 3 // use our own Miles Audio drivers - // + // // It seems that there are multiple versions of Discworld 1 // // Version 1: @@ -639,10 +639,14 @@ PCMMusicPlayer::PCMMusicPlayer() { _dimmed = false; _dimmedTinsel = false; _dimIteration = 0; + _dimmedVolume = 0; + _dimPosition = 0; _fadeOutVolume = 0; _fadeOutIteration = 0; + _hScript = _hSegment = 0; + _end = true; _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, diff --git a/engines/tinsel/palette.cpp b/engines/tinsel/palette.cpp index 918894cf6f..495049d1a2 100644 --- a/engines/tinsel/palette.cpp +++ b/engines/tinsel/palette.cpp @@ -132,6 +132,8 @@ void PalettesToVideoDAC() { VIDEO_DAC_Q *pDACtail = g_vidDACdata; // set tail pointer byte pal[768]; + memset(pal, 0, sizeof(pal)); + // while Q is not empty while (g_pDAChead != pDACtail) { const PALETTE *pPalette; // pointer to hardware palette diff --git a/engines/tinsel/play.cpp b/engines/tinsel/play.cpp index ef3127233d..a4f5bc8261 100644 --- a/engines/tinsel/play.cpp +++ b/engines/tinsel/play.cpp @@ -159,6 +159,9 @@ static int RegisterSoundReel(SCNHANDLE hFilm, int column, int actorCol) { } } + if (i == MAX_SOUNDREELS) + error("Out of sound reels in RegisterSoundReel()"); + g_soundReelNumbers[i]++; return i; } diff --git a/engines/tinsel/saveload.cpp b/engines/tinsel/saveload.cpp index 226cbb51c0..c8fe5f898c 100644 --- a/engines/tinsel/saveload.cpp +++ b/engines/tinsel/saveload.cpp @@ -594,8 +594,8 @@ static void DoSave() { hdr.id = SAVEGAME_ID; hdr.size = SAVEGAME_HEADER_SIZE; hdr.ver = CURRENT_VER; - memcpy(hdr.desc, g_SaveSceneDesc, SG_DESC_LEN); - hdr.desc[SG_DESC_LEN - 1] = 0; + memset(hdr.desc, 0, SG_DESC_LEN); + Common::strlcpy(hdr.desc, g_SaveSceneDesc, SG_DESC_LEN); g_system->getTimeAndDate(hdr.dateTime); hdr.scnFlag = _vm->getFeatures() & GF_SCNFILES; hdr.language = _vm->_config->_language; diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp index 1b733a08ba..44e81494f7 100644 --- a/engines/tinsel/tinsel.cpp +++ b/engines/tinsel/tinsel.cpp @@ -823,6 +823,9 @@ TinselEngine::TinselEngine(OSystem *syst, const TinselGameDescription *gameDesc) _console(0), _sound(0), _midiMusic(0), _pcmMusic(0), _bmv(0) { _vm = this; + _gameId = 0; + _driver = NULL; + _config = new Config(this); // Register debug flags diff --git a/engines/toltecs/animation.cpp b/engines/toltecs/animation.cpp index 1f776bbc02..5278b25ba8 100644 --- a/engines/toltecs/animation.cpp +++ b/engines/toltecs/animation.cpp @@ -29,6 +29,18 @@ namespace Toltecs { AnimationPlayer::AnimationPlayer(ToltecsEngine *vm) : _vm(vm) { _animBuffer = new byte[262144]; + memset(_animBuffer, 0, 262144); + + _resIndex = 0; + _width = _height = 0; + _frameNumber = 0; + _frameCount = 0; + _keepFrameCounter = 0; + _curFrameSize = _nextFrameSize = 0; + _nextFrameOffset = 0; + _firstNextFrameSize = 0; + _firstNextFrameOffset = 0; + _firstCurFrameSize = 0; } AnimationPlayer::~AnimationPlayer() { diff --git a/engines/toltecs/menu.cpp b/engines/toltecs/menu.cpp index a58771433e..5fc0599c2a 100644 --- a/engines/toltecs/menu.cpp +++ b/engines/toltecs/menu.cpp @@ -37,6 +37,16 @@ namespace Toltecs { MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm) { + _background = nullptr; + _running = false; + _currMenuID = _newMenuID = kMenuIdNone; + _currItemID = kItemIdNone; + _top = 0; + _savegameListTopIndex = 0; + _editingDescription = false; + _editingDescriptionID = kItemIdNone; + _editingDescriptionItem = nullptr; + _needRedraw = false; } MenuSystem::~MenuSystem() { diff --git a/engines/toltecs/segmap.cpp b/engines/toltecs/segmap.cpp index b27e0c8e11..d50e110485 100644 --- a/engines/toltecs/segmap.cpp +++ b/engines/toltecs/segmap.cpp @@ -27,6 +27,11 @@ namespace Toltecs { SegmentMap::SegmentMap(ToltecsEngine *vm) : _vm(vm) { + _maskRectData = NULL; + memset(_deadEndPathRects, 0, sizeof(_closedPathRects)); + _closedPathRectsCount = 0; + _deadEndPathRectsCount = 0; + _pathNodesCount = 0; } SegmentMap::~SegmentMap() { diff --git a/engines/toltecs/segmap.h b/engines/toltecs/segmap.h index c1ad293162..03bd858217 100644 --- a/engines/toltecs/segmap.h +++ b/engines/toltecs/segmap.h @@ -80,6 +80,8 @@ public: // for debugging purposes struct PathPoint { int16 y, x; + + PathPoint() : x(0), y(0) {} }; typedef Common::Array<SegmapMaskRect> SegmapMaskRectArray; diff --git a/engines/tony/font.cpp b/engines/tony/font.cpp index 850aff17be..fb40bf5c67 100644 --- a/engines/tony/font.cpp +++ b/engines/tony/font.cpp @@ -921,6 +921,12 @@ RMDialogChoice::RMDialogChoice() { _curAdded = 0; _bShow = false; + + _curSelection = 0; + _numChoices = 0; + + _drawedStrings = NULL; + _ptDrawStrings = NULL; } RMDialogChoice::~RMDialogChoice() { diff --git a/engines/tony/game.cpp b/engines/tony/game.cpp index 0a2c62330b..7b9cb4c6ca 100644 --- a/engines/tony/game.cpp +++ b/engines/tony/game.cpp @@ -319,6 +319,11 @@ RMOptionScreen::RMOptionScreen() { _fadeTime = 0; _nEditPos = 0; _nLastState = MENUGAME; + + _bExit = false; + _bLoadMenuOnly = false; + _bNoLoadSave = false; + _bAlterGfx = false; } RMOptionScreen::~RMOptionScreen() { @@ -1145,7 +1150,7 @@ void RMOptionScreen::doFrame(CORO_PARAM, RMInput *input) { // Turn on edit mode _bEditSaveName = true; _nEditPos = _ctx->i; - strcpy(_editName, _curThumbName[_ctx->i].c_str()); + Common::strlcpy(_editName, _curThumbName[_ctx->i].c_str(), sizeof(_editName)); _ctx->bRefresh = true; } diff --git a/engines/tony/gfxcore.h b/engines/tony/gfxcore.h index c9081506d7..1a0738e5b7 100644 --- a/engines/tony/gfxcore.h +++ b/engines/tony/gfxcore.h @@ -442,6 +442,7 @@ private: OTList(); OTList(RMGfxPrimitive *pr) { _prim = pr; + _next = NULL; } }; diff --git a/engines/tony/mpal/mpalutils.cpp b/engines/tony/mpal/mpalutils.cpp index 84c8a68919..d52e7332cc 100644 --- a/engines/tony/mpal/mpalutils.cpp +++ b/engines/tony/mpal/mpalutils.cpp @@ -37,6 +37,8 @@ namespace MPAL { * @param resId MPAL resource to open */ RMRes::RMRes(uint32 resID) { + _buf = NULL; + _h = g_vm->_resUpdate.queryResource(resID); if (_h == NULL) _h = mpalQueryResource(resID); diff --git a/engines/tony/sound.cpp b/engines/tony/sound.cpp index aa86750ad5..fed51dacf4 100644 --- a/engines/tony/sound.cpp +++ b/engines/tony/sound.cpp @@ -161,6 +161,7 @@ FPSfx::FPSfx(bool soundOn) { _loopStream = 0; _rewindableStream = 0; _paused = false; + _loop = 0; g_vm->_activeSfx.push_back(this); } diff --git a/engines/tony/tony.cpp b/engines/tony/tony.cpp index d8fa45cb5d..c51f449aa1 100644 --- a/engines/tony/tony.cpp +++ b/engines/tony/tony.cpp @@ -83,6 +83,8 @@ TonyEngine::TonyEngine(OSystem *syst, const TonyGameDescription *gameDesc) : Eng _bTimeFreezed = false; _nTimeFreezed = 0; _vdbCodec = FPCODEC_UNKNOWN; + + memset(_funcList, 0, sizeof(_funcList)); } TonyEngine::~TonyEngine() { diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index 169e2eff7b..837339402c 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -708,7 +708,7 @@ bool ToonEngine::showOptions() { entries[2].activeFrame = entries[2].animation->_numFrames - 1; if (!_showConversationText) { - entries[4].activeFrame = 4; + entries[4].activeFrame = 4; } else if (_useAlternativeFont) { entries[4].activeFrame = 8; } else { @@ -797,19 +797,19 @@ bool ToonEngine::showOptions() { // handle sliders if (clickingOn == OPTIONMENUHOTSPOT_VOLUMEMUSICSLIDER) { entries[clickingOnSprite].activeFrame = ratioX * (entries[clickingOnSprite].animation->_numFrames) / 256; - int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; + int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; _audioManager->_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, vol); } if (clickingOn == OPTIONMENUHOTSPOT_VOLUMEVOICESLIDER) { entries[clickingOnSprite].activeFrame = ratioX * (entries[clickingOnSprite].animation->_numFrames) / 256; - int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; + int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; _audioManager->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, vol); } if (clickingOn == OPTIONMENUHOTSPOT_VOLUMESFXSLIDER) { entries[clickingOnSprite].activeFrame = ratioX * (entries[clickingOnSprite].animation->_numFrames) / 256; - int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; + int vol = entries[clickingOnSprite].activeFrame * 256 / entries[clickingOnSprite].animation->_numFrames; _audioManager->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, vol); } @@ -935,10 +935,12 @@ bool ToonEngine::showOptions() { _gameState->_inMenu = false; _firstFrame = true; _gameState->_currentScrollValue = oldScrollValue; - + restorePalette(); dirtyAllScreen(); + delete optionPicture; + return exitGame; } @@ -1296,6 +1298,7 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription) _scriptState[i].running = false; } _currentScriptRegion = 0; + _currentFont = nullptr; } ToonEngine::~ToonEngine() { diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index fe555f2fdb..584ad87742 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -83,7 +83,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "(c) Tsunami Media"; + return "(C) Tsunami Media"; } virtual bool hasFeature(MetaEngineFeature f) const { diff --git a/engines/voyeur/detection.cpp b/engines/voyeur/detection.cpp index 9e5320aac8..7b9fa6722e 100644 --- a/engines/voyeur/detection.cpp +++ b/engines/voyeur/detection.cpp @@ -75,7 +75,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Voyeur (c) Philips P.O.V. Entertainment Group"; + return "Voyeur (C) Philips P.O.V. Entertainment Group"; } virtual bool hasFeature(MetaEngineFeature f) const; diff --git a/engines/wage/design.cpp b/engines/wage/design.cpp index eda28df159..f2a8aba812 100644 --- a/engines/wage/design.cpp +++ b/engines/wage/design.cpp @@ -422,7 +422,7 @@ void Design::drawBitmap(Graphics::ManagedSurface *surface, Common::SeekableReadS int x2 = in.readSint16BE(); int w = x2 - x1; int h = y2 - y1; - Graphics::ManagedSurface tmp; + Graphics::Surface tmp; tmp.create(w, h, Graphics::PixelFormat::createFormatCLUT8()); @@ -477,7 +477,7 @@ void Design::drawBitmap(Graphics::ManagedSurface *surface, Common::SeekableReadS if (_boundsCalculationMode) return; - FloodFill ff(&tmp, kColorWhite, kColorGreen); + Graphics::FloodFill ff(&tmp, kColorWhite, kColorGreen); for (int yy = 0; yy < h; yy++) { ff.addSeed(0, yy); ff.addSeed(w - 1, yy); @@ -541,54 +541,4 @@ void Design::drawVLine(Graphics::ManagedSurface *surface, int x, int y1, int y2, Graphics::drawVLine(x, y1, y2, color, drawPixel, &pd); } -FloodFill::FloodFill(Graphics::ManagedSurface *surface, byte color1, byte color2) { - _surface = surface; - _color1 = color1; - _color2 = color2; - _w = surface->w; - _h = surface->h; - - _visited = (byte *)calloc(_w * _h, 1); -} - -FloodFill::~FloodFill() { - while(!_queue.empty()) { - Common::Point *p = _queue.front(); - - delete p; - _queue.pop_front(); - } - - free(_visited); -} - -void FloodFill::addSeed(int x, int y) { - byte *p; - - if (x >= 0 && x < _w && y >= 0 && y < _h) { - if (!_visited[y * _w + x] && *(p = (byte *)_surface->getBasePtr(x, y)) == _color1) { - _visited[y * _w + x] = 1; - *p = _color2; - - Common::Point *pt = new Common::Point(x, y); - - _queue.push_back(pt); - } - } -} - -void FloodFill::fill() { - while (!_queue.empty()) { - Common::Point *p = _queue.front(); - _queue.pop_front(); - addSeed(p->x , p->y - 1); - addSeed(p->x - 1, p->y ); - addSeed(p->x , p->y + 1); - addSeed(p->x + 1, p->y ); - - delete p; - } -} - - } // End of namespace Wage diff --git a/engines/wage/design.h b/engines/wage/design.h index 9b0231ca96..86225c9224 100644 --- a/engines/wage/design.h +++ b/engines/wage/design.h @@ -100,21 +100,6 @@ private: void drawBitmap(Graphics::ManagedSurface *surface, Common::SeekableReadStream &in); }; -class FloodFill { -public: - FloodFill(Graphics::ManagedSurface *surface, byte color1, byte color2); - ~FloodFill(); - void addSeed(int x, int y); - void fill(); - -private: - Common::List<Common::Point *> _queue; - Graphics::ManagedSurface *_surface; - byte _color1, _color2; - byte *_visited; - int _w, _h; -}; - } // End of namespace Wage #endif diff --git a/engines/wage/detection.cpp b/engines/wage/detection.cpp index 1b418b5aa8..8b8a6399a8 100644 --- a/engines/wage/detection.cpp +++ b/engines/wage/detection.cpp @@ -101,7 +101,7 @@ SaveStateList WageMetaEngine::listSaves(const char *target) const { Common::StringArray filenames; char saveDesc[31]; Common::String pattern = target; - pattern += ".???"; + pattern += ".###"; filenames = saveFileMan->listSavefiles(pattern); diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp index f77eb5c64d..4e8eab505f 100644 --- a/engines/wintermute/detection.cpp +++ b/engines/wintermute/detection.cpp @@ -85,7 +85,7 @@ public: } virtual const char *getOriginalCopyright() const { - return "Copyright (c) 2011 Jan Nedoma"; + return "Copyright (C) 2011 Jan Nedoma"; } virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { diff --git a/graphics/nine_patch.cpp b/graphics/nine_patch.cpp index fea0d8ae66..a193200208 100644 --- a/graphics/nine_patch.cpp +++ b/graphics/nine_patch.cpp @@ -59,13 +59,13 @@ NinePatchSide::~NinePatchSide() { bool NinePatchSide::init(Graphics::TransparentSurface *bmp, bool vertical) { - const int len = vertical ? bmp->h : bmp->w; - int i; - int s, t, n, z; + const uint len = vertical ? bmp->h : bmp->w; + uint i; + int s, t, z; _m.clear(); - for (i = 1, s = -1, t = 0, n = 0, z = -1; i < len; ++i) { + for (i = 1, s = -1, t = 0, z = -1; i < len; ++i) { int zz; uint8 r, g, b, a; uint32 *color = vertical ? (uint32 *)bmp->getBasePtr(0, i) : (uint32 *)bmp->getBasePtr(i, 0); diff --git a/graphics/surface.cpp b/graphics/surface.cpp index 67ed942b0b..699e1ccd22 100644 --- a/graphics/surface.cpp +++ b/graphics/surface.cpp @@ -498,4 +498,109 @@ Graphics::Surface *Surface::convertTo(const PixelFormat &dstFormat, const byte * return surface; } +FloodFill::FloodFill(Graphics::Surface *surface, uint32 oldColor, uint32 fillColor, bool maskMode) { + _surface = surface; + _oldColor = oldColor; + _fillColor = fillColor; + _w = surface->w; + _h = surface->h; + + _mask = nullptr; + _maskMode = maskMode; + + if (_maskMode) { + _mask = new Graphics::Surface(); + _mask->create(_w, _h, Graphics::PixelFormat::createFormatCLUT8()); // Uses calloc() + } + + _visited = (byte *)calloc(_w * _h, 1); +} + +FloodFill::~FloodFill() { + while(!_queue.empty()) { + Common::Point *p = _queue.front(); + + delete p; + _queue.pop_front(); + } + + free(_visited); + + if (_mask) + delete _mask; +} + +void FloodFill::addSeed(int x, int y) { + if (x >= 0 && x < _w && y >= 0 && y < _h) { + if (!_visited[y * _w + x]) { + _visited[y * _w + x] = 1; + void *src = _surface->getBasePtr(x, y); + void *dst; + bool changed = false; + + if (_maskMode) + dst = _mask->getBasePtr(x, y); + else + dst = src; + + if (_surface->format.bytesPerPixel == 1) { + if (*((byte *)src) == _oldColor) { + *((byte *)dst) = _maskMode ? 255 : _fillColor; + changed = true; + } + } else if (_surface->format.bytesPerPixel == 2) { + if (READ_UINT16(src) == _oldColor) { + if (!_maskMode) + WRITE_UINT16(src, _fillColor); + else + *((byte *)dst) = 255; + + changed = true; + } + } else if (_surface->format.bytesPerPixel == 4) { + if (READ_UINT32(src) == _oldColor) { + if (!_maskMode) + WRITE_UINT32(src, _fillColor); + else + *((byte *)dst) = 255; + + changed = true; + } + } else { + error("Unsupported bpp in FloodFill"); + } + + if (changed) { + Common::Point *pt = new Common::Point(x, y); + + _queue.push_back(pt); + } + } + } +} + +void FloodFill::fill() { + while (!_queue.empty()) { + Common::Point *p = _queue.front(); + _queue.pop_front(); + addSeed(p->x , p->y - 1); + addSeed(p->x - 1, p->y ); + addSeed(p->x , p->y + 1); + addSeed(p->x + 1, p->y ); + + delete p; + } +} + +void FloodFill::fillMask() { + _maskMode = true; + + if (!_mask) { + _mask = new Graphics::Surface(); + _mask->create(_w, _h, Graphics::PixelFormat::createFormatCLUT8()); // Uses calloc() + } + + fill(); +} + } // End of namespace Graphics diff --git a/graphics/surface.h b/graphics/surface.h index aaa386b168..87c5f52503 100644 --- a/graphics/surface.h +++ b/graphics/surface.h @@ -24,9 +24,11 @@ #define GRAPHICS_SURFACE_H #include "common/scummsys.h" +#include "common/list.h" namespace Common { struct Rect; +struct Point; } #include "graphics/pixelformat.h" @@ -341,6 +343,72 @@ struct SharedPtrSurfaceDeleter { } }; +/** + * Stack-based flood fill algorithm for arbitrary Surfaces. + * + * It could be used in 2 ways. One is to fill the pixels of oldColor + * with fillColor. Second is when the surface stays intact but another + * surface with mask is created, where filled colors are marked with 255. + * + * Before running fill() or fillMask(), the initial pixels must be addSeed + * with addSeed() method. + */ +class FloodFill { +public: + /** + * Construct a simple Surface object. + * + * @param surface Input surface + * @param oldColor Color on the surface to change + * @param fillColor Color to fill with + */ + FloodFill(Surface *surface, uint32 oldColor, uint32 fillColor, bool maskMode = false); + ~FloodFill(); + + /** + * Add pixels to the fill queue. + * + * @param x The x coordinate of the pixel. + * @param y The x coordinate of the pixel. + */ + void addSeed(int x, int y); + + /** + * Fill the surface as requested. + * + * It uses pixels which were added with addSeed() method. + * + * @see addSeed + */ + void fill(); + + /** + * Fill the mask. The mask is a CLUT8 Surface with pixels 0 and 255. + * 255 means that the pixel has been filled. + * + * It uses pixels which were added with addSeed() method. + * + * @see addSeed + */ + void fillMask(); + + /** + * Get the resulting mask. + * + * @see fillMask + */ + Surface *getMask() { return _mask; } + +private: + Common::List<Common::Point *> _queue; + Surface *_surface; + Surface *_mask; + uint32 _oldColor, _fillColor; + byte *_visited; + int _w, _h; + + bool _maskMode; +}; } // End of namespace Graphics diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index c2deb8c61e..0ed020ebb8 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.cpp @@ -311,6 +311,12 @@ ThemeEngine::ThemeEngine(Common::String id, GraphicsMode mode) : _themeArchive = 0; _initOk = false; + _cursorHotspotX = _cursorHotspotY = 0; + _cursorWidth = _cursorHeight = 0; + _cursorPalSize = 0; + + _needPaletteUpdates = false; + // We prefer files in archive bundles over the common search paths. _themeFiles.add("default", &SearchMan, 0, false); } @@ -558,7 +564,7 @@ void ThemeEngine::restoreBackground(Common::Rect r) { void ThemeEngine::addDrawStep(const Common::String &drawDataId, const Graphics::DrawStep &step) { DrawData id = parseDrawDataId(drawDataId); - assert(_widgets[id] != 0); + assert(id != kDDNone && _widgets[id] != 0); _widgets[id]->_steps.push_back(step); } @@ -859,7 +865,7 @@ void ThemeEngine::queueDD(DrawData type, const Common::Rect &r, uint32 dynamic, void ThemeEngine::queueDDText(TextData type, TextColor color, const Common::Rect &r, const Common::String &text, bool restoreBg, bool ellipsis, Graphics::TextAlign alignH, TextAlignVertical alignV, int deltax, const Common::Rect &drawableTextArea) { - if (_texts[type] == 0) + if (type == kTextDataNone || _texts[type] == 0) return; Common::Rect area = r; @@ -1259,8 +1265,15 @@ void ThemeEngine::updateScreen(bool render) { _screenQueue.clear(); } - if (render) + if (render) { +#ifdef LAYOUT_DEBUG_DIALOG + _vectorRenderer->fillSurface(); + _themeEval->debugDraw(&_screen, _font); + _vectorRenderer->copyWholeFrame(_system); +#else renderDirtyScreen(); +#endif + } } void ThemeEngine::addDirtyRect(Common::Rect r) { diff --git a/gui/ThemeLayout.cpp b/gui/ThemeLayout.cpp index 6a6fd9e343..71e4b2c9fd 100644 --- a/gui/ThemeLayout.cpp +++ b/gui/ThemeLayout.cpp @@ -123,7 +123,7 @@ int16 ThemeLayoutStacked::getParentHeight() { #ifdef LAYOUT_DEBUG_DIALOG void ThemeLayout::debugDraw(Graphics::Surface *screen, const Graphics::Font *font) { - uint16 color = 0xFFFF; + uint32 color = 0xFFFFFFFF; font->drawString(screen, getName(), _x, _y, _w, color, Graphics::kTextAlignRight, 0, true); screen->hLine(_x, _y, _x + _w, color); screen->hLine(_x, _y + _h, _x + _w , color); diff --git a/gui/ThemeLayout.h b/gui/ThemeLayout.h index ba28fae1ac..c4d7e672dd 100644 --- a/gui/ThemeLayout.h +++ b/gui/ThemeLayout.h @@ -29,7 +29,7 @@ #ifdef LAYOUT_DEBUG_DIALOG namespace Graphics { -class Surface; +struct Surface; } #endif diff --git a/gui/Tooltip.cpp b/gui/Tooltip.cpp index ba313ee34f..09ad7ce5ca 100644 --- a/gui/Tooltip.cpp +++ b/gui/Tooltip.cpp @@ -32,7 +32,7 @@ namespace GUI { Tooltip::Tooltip() : - Dialog(-1, -1, -1, -1), _maxWidth(-1) { + Dialog(-1, -1, -1, -1), _maxWidth(-1), _parent(NULL), _xdelta(0), _ydelta(0) { _backgroundType = GUI::ThemeEngine::kDialogBackgroundTooltip; } diff --git a/gui/credits.h b/gui/credits.h index 79f4516370..8a0cd18da7 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -138,6 +138,11 @@ static const char *credits[] = { "C2""(retired)", "C0""Willem Jan Palenstijn", "", +"C1""Gnap", +"A0""Arnaud Boutonne", +"C0""Arnaud Boutonn\351", +"C0""Benjamin Haisch", +"", "C1""Gob", "A0""Torbjorn Andersson", "C0""Torbj\366rn Andersson", diff --git a/gui/dialog.cpp b/gui/dialog.cpp index 075a3bb533..50b7755bb3 100644 --- a/gui/dialog.cpp +++ b/gui/dialog.cpp @@ -51,6 +51,8 @@ Dialog::Dialog(int x, int y, int w, int h) // will for example crash after returning to the launcher when the user // started a 640x480 game with a non 1x scaler. g_gui.checkScreenChange(); + + _result = -1; } Dialog::Dialog(const Common::String &name) @@ -66,6 +68,8 @@ Dialog::Dialog(const Common::String &name) // Fixes bug #1590596: "HE: When 3x graphics are choosen, F5 crashes game" // and bug #1595627: "SCUMM: F5 crashes game (640x480)" g_gui.checkScreenChange(); + + _result = -1; } int Dialog::runModal() { diff --git a/gui/launcher.cpp b/gui/launcher.cpp index bae894cba1..9a3300b11f 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -282,6 +282,7 @@ EditGameDialog::EditGameDialog(const String &domain, const String &desc) // // 6) The MIDI tab // + _globalMIDIOverride = NULL; if (!_guioptions.contains(GUIO_NOMIDI)) { tab->addTab(_("MIDI")); @@ -296,6 +297,7 @@ EditGameDialog::EditGameDialog(const String &domain, const String &desc) // // 7) The MT-32 tab // + _globalMT32Override = NULL; if (!_guioptions.contains(GUIO_NOMIDI)) { tab->addTab(_("MT-32")); diff --git a/gui/options.cpp b/gui/options.cpp index 2bb17509eb..e410971818 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -112,6 +112,7 @@ void OptionsDialog::init() { _fullscreenCheckbox = 0; _aspectCheckbox = 0; _enableAudioSettings = false; + _midiTabId = 0; _midiPopUp = 0; _midiPopUpDesc = 0; _oplPopUp = 0; @@ -144,6 +145,7 @@ void OptionsDialog::init() { _speechVolumeSlider = 0; _speechVolumeLabel = 0; _muteCheckbox = 0; + _enableSubtitleSettings = false; _subToggleDesc = 0; _subToggleGroup = 0; _subToggleSubOnly = 0; @@ -152,6 +154,8 @@ void OptionsDialog::init() { _subSpeedDesc = 0; _subSpeedSlider = 0; _subSpeedLabel = 0; + + _pathsTabId = 0; _oldTheme = g_gui.theme()->getThemeId(); // Retrieve game GUI options @@ -209,7 +213,7 @@ void OptionsDialog::open() { #ifdef GUI_ONLY_FULLSCREEN _fullscreenCheckbox->setState(true); _fullscreenCheckbox->setEnabled(false); - _aspectCheckbox->setState(false); + _aspectCheckbox->setState(ConfMan.getBool("aspect_ratio", _domain)); _aspectCheckbox->setEnabled(false); #else // !GUI_ONLY_FULLSCREEN // Fullscreen setting diff --git a/gui/predictivedialog.cpp b/gui/predictivedialog.cpp index 63b69a39ea..933667186e 100644 --- a/gui/predictivedialog.cpp +++ b/gui/predictivedialog.cpp @@ -142,6 +142,9 @@ PredictiveDialog::PredictiveDialog() : Dialog("Predictive") { _numMemory = 0; _navigationWithKeys = false; + + _curPressedButton = kNoAct; + _needRefresh = true; } PredictiveDialog::~PredictiveDialog() { diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp index a333c5fe57..3d4adfff2b 100644 --- a/gui/saveload-dialog.cpp +++ b/gui/saveload-dialog.cpp @@ -932,6 +932,8 @@ SavenameDialog::SavenameDialog() new ButtonWidget(this, "SavenameDialog.Ok", _("OK"), 0, kOKCmd); _description = new EditTextWidget(this, "SavenameDialog.Description", Common::String(), 0, 0, kOKCmd); + + _targetSlot = 0; } void SavenameDialog::setDescription(const Common::String &desc) { diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex 917acdb13d..617f7d4bac 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/gui/widget.cpp b/gui/widget.cpp index dda44604c8..73d055527c 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -275,7 +275,7 @@ void StaticTextWidget::setAlign(Graphics::TextAlign align) { draw(); clearFlags(WIDGET_CLEARBG); } - + } @@ -542,14 +542,14 @@ void RadiobuttonWidget::drawWidget() { SliderWidget::SliderWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip, uint32 cmd) : Widget(boss, x, y, w, h, tooltip), CommandSender(boss), - _cmd(cmd), _value(0), _oldValue(0), _valueMin(0), _valueMax(100), _isDragging(false) { + _cmd(cmd), _value(0), _oldValue(0), _valueMin(0), _valueMax(100), _isDragging(false), _labelWidth(0) { setFlags(WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG); _type = kSliderWidget; } SliderWidget::SliderWidget(GuiObject *boss, const Common::String &name, const char *tooltip, uint32 cmd) : Widget(boss, name, tooltip), CommandSender(boss), - _cmd(cmd), _value(0), _oldValue(0), _valueMin(0), _valueMax(100), _isDragging(false) { + _cmd(cmd), _value(0), _oldValue(0), _valueMin(0), _valueMax(100), _isDragging(false), _labelWidth(0) { setFlags(WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG); _type = kSliderWidget; } diff --git a/gui/widgets/edittext.cpp b/gui/widgets/edittext.cpp index 1481bebae3..bef90d4382 100644 --- a/gui/widgets/edittext.cpp +++ b/gui/widgets/edittext.cpp @@ -36,6 +36,8 @@ EditTextWidget::EditTextWidget(GuiObject *boss, int x, int y, int w, int h, cons setEditString(text); setFontStyle(ThemeEngine::kFontStyleNormal); + + _leftPadding = _rightPadding = 0; } EditTextWidget::EditTextWidget(GuiObject *boss, const String &name, const String &text, const char *tooltip, uint32 cmd, uint32 finishCmd) @@ -46,6 +48,8 @@ EditTextWidget::EditTextWidget(GuiObject *boss, const String &name, const String setEditString(text); setFontStyle(ThemeEngine::kFontStyleNormal); + + _leftPadding = _rightPadding = 0; } void EditTextWidget::setEditString(const String &str) { diff --git a/gui/widgets/popup.cpp b/gui/widgets/popup.cpp index 0b2ea9fd4e..0a1010f8fa 100644 --- a/gui/widgets/popup.cpp +++ b/gui/widgets/popup.cpp @@ -144,6 +144,8 @@ PopUpDialog::PopUpDialog(PopUpWidget *boss, int clickX, int clickY) _clickY = clickY - _y; _openTime = 0; + _buffer = nullptr; + _entriesPerColumn = 1; } void PopUpDialog::drawDialog() { @@ -380,6 +382,7 @@ PopUpWidget::PopUpWidget(GuiObject *boss, const String &name, const char *toolti _type = kPopUpWidget; _selectedItem = -1; + _leftPadding = _rightPadding = 0; } PopUpWidget::PopUpWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip) diff --git a/image/codecs/bmp_raw.cpp b/image/codecs/bmp_raw.cpp index b47d5a178d..68d70f25f6 100644 --- a/image/codecs/bmp_raw.cpp +++ b/image/codecs/bmp_raw.cpp @@ -46,9 +46,30 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea _surface->create(_width, _height, format); int srcPitch = _width * (_bitsPerPixel >> 3); - const int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0; + int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0; - if (_bitsPerPixel == 4) { + if (_bitsPerPixel == 1) { + srcPitch = (_width + 7) / 8; + extraDataLength = (srcPitch % 2) ? 2 - (srcPitch % 2) : 0; + } + + if (_bitsPerPixel == 1) { + for (int i = 0; i < _height; i++) { + byte *dst = (byte *)_surface->getBasePtr(0, i); + for (int j = 0; j != _width;) { + byte color = stream.readByte(); + for (int k = 0; k < 8; k++) { + *dst++ = (color & 0x80) ? 0x0f : 0x00; + color <<= 1; + j++; + if (j == _width) { + break; + } + } + } + stream.skip(extraDataLength); + } + } else if (_bitsPerPixel == 4) { for (int i = 0; i < _height; i++) { byte *dst = (byte *)_surface->getBasePtr(0, _height - i - 1); for (int j = 0; j < _width; j++) { @@ -117,6 +138,7 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea Graphics::PixelFormat BitmapRawDecoder::getPixelFormat() const { switch (_bitsPerPixel) { + case 1: case 4: case 8: return Graphics::PixelFormat::createFormatCLUT8(); diff --git a/image/codecs/cinepak.cpp b/image/codecs/cinepak.cpp index 4e858921ee..2b02fc8127 100644 --- a/image/codecs/cinepak.cpp +++ b/image/codecs/cinepak.cpp @@ -260,7 +260,7 @@ private: } static inline byte getRGBLookupEntry(const byte *colorMap, uint16 index) { - return colorMap[s_defaultPaletteLookup[CLIP<int>(index, 0, 1024)]]; + return colorMap[s_defaultPaletteLookup[CLIP<int>(index, 0, 1023)]]; } }; diff --git a/image/pict.cpp b/image/pict.cpp index 89f115dc90..4f4f0396bf 100644 --- a/image/pict.cpp +++ b/image/pict.cpp @@ -340,6 +340,8 @@ void PICTDecoder::unpackBitsRect(Common::SeekableReadStream &stream, bool withPa uint32 lineSize = MAX<int>(width * bytesPerPixel + (8 * 2 / packBitsData.pixMap.pixelSize), packBitsData.pixMap.rowBytes); byte *buffer = new byte[lineSize * height]; + memset(buffer, 0, lineSize * height); + // Read in amount of data per row for (uint16 i = 0; i < packBitsData.pixMap.bounds.height(); i++) { // NOTE: Compression 0 is "default". The format in SCI games is packed when 0. diff --git a/po/be_BY.po b/po/be_BY.po index 84a4435946..a9531c3fe1 100644 --- a/po/be_BY.po +++ b/po/be_BY.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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-05-22 17:05+0300\n" "Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n" "Language-Team: Ivan Lukyanov <greencis@mail.ru>\n" @@ -55,16 +55,16 @@ msgstr "ĆŅÕąå" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "°ŌÜÕŻŠ" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "²ė įŠßąŠžŌė ÖŠŌŠÕęÕ ßÕąŠ×ŠßöįŠęģ ÓķāŠ ׊åŠŅŠŻŻÕ?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "ĀŠŚ" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "ĮöŻćįŽöŌŠ" msgid "Triangle" msgstr "ĀąŽåŚćāŻŠļ" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "ĄŽ×ŻŠÕ" @@ -206,14 +206,14 @@ msgstr "ĮŚöŻćęģ" msgid "Reset all FluidSynth settings to their default values." msgstr "ĮŚöŻćęģ ŻŠŪŠŌė FluidSynth ߊ ×ÜŠžēŠŻŻö." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -241,15 +241,15 @@ msgstr "·ŠŚąėęģ" msgid "Mouse click" msgstr "ŗŪöŚ Üėččć" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "æŠŚŠ×Šęģ ŚŪŠŅöļāćąć" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "æÕąŠßąėׯŠēėęģ ŚŪŠŅöčė" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "æÕąŠŚŪīēķŻŻÕ ŻŠ žŅÕįģ ķŚąŠŻ" @@ -326,7 +326,7 @@ msgstr "" "ŃÕŪŠąćįŚćī" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<ߊ ×ÜŠžēŠŻŻö>" @@ -396,217 +396,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "æÕąŠŚąėęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė ÓćēŻŠįęö" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "æÕąŠŚąėęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "æÕąŠŚąėęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "æÕąŠŚąėęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "æÕąŠŚąėęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "ČŪļåö" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "ČŪļåö" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "ČŪļå ŌŠ ÓćŪģŻö:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "ČŪļå ŌŠ ÓćŪģŻö:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "“ŠŌ. čŪļå:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "æŠŚŠ×ŅŠÕ čŪļå ŌŠ ŌŠŌŠāŚŽŅėå 䊣ŪŠž, ŌŠŌ×ÕŻėå ŌŪļ ÓćŪģŻö" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "“ŠŌ. čŪļå:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "·ŠåŠŅŠŻŻö ÓćŪģŻļž:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "æŠŚŠ×ŅŠÕ čŪļå ŌŠ ׊åŠŅŠŻŻļž ÓćŪģŻö" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "·ŠåŠŅŠŻŻö ÓćŪģŻļž:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "½Õ ׊ŌŠŌ×ÕŻė" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "æŠ ×ÜŠžēŠŻŻö" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "°ŃļąėęÕ SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "°ŃļąėęÕ ŌėąķŚāŽąėī × äŠŁŪŠÜö ÓćŪģŻö" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "°ŃļąėęÕ ŌŠŌŠāŚŽŅćī ŌėąķŚāŽąėī ÓćŪģŻö" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "°ŃļąėęÕ ŌėąķŚāŽąėī ŌŪļ ׊åŠŅŠŻŻļž" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "³ķāė ID ÓćŪģŻö žÖŽ ŅėŚŠąėįāŽžŅŠÕęęŠ. ŗŠŪö ŪŠįŚŠ, ŠŃļąėęÕ öŻčė." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~²~ėåŠŌ" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "·ŠŅļąčėęģ ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "æąŠ ß~ą~ŠÓąŠÜć..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "æąŠ ßąŠÓąŠÜć ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~½~ŠŪŠŌė..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "·ÜļŻöęģ ÓŪŠŃŠŪģŻėļ ŻŠŪŠŌė ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "æ~ć~įŚ" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "·Šßćįęöęģ ŠŃąŠŻćī ÓćŪģŻī" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~·~ŠÓąć×öęģ..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "·ŠÓąć×öęģ ׊åŠŅŠŻŻÕ ŌŪļ ŠŃąŠŻŠŁ ÓćŪģŻö" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~“~ŠŌŠęģ ÓćŪģŻī..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "ĆāąėÜŪöŅŠŁęÕ ŚŪŠŅöčć Shift, ŚŠŃ ŌŠŌŠęģ ŻÕŚŠŪģŚö ÓćŪģŻļž" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "½~Š~ŪŠŌė ÓćŪģŻö..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "·ÜļŻöęģ ŻŠŪŠŌė ÓćŪģŻö" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "²~ė~ŌŠŪöęģ ÓćŪģŻī" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "²ėŌŠŪöęģ ÓćŪģŻī įŠ įßöįć. ½Õ ŅėŌŠŪļÕ ÓćŪģŻī × ŻŽįģŃöāŠ" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~“~ŠŌŠęģ ÓćŪģŻī..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "½~Š~ŪŠŌė ÓćŪģŻö..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "²~ė~ŌŠŪöęģ ÓćŪģŻī" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "æŽčćŚ ć įßöįÕ ÓćŪģŻļž" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "æŽčćŚ:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "·ŠÓąć×öęģ ÓćŪģŻī:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "·ŠÓąć×öęģ" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -614,39 +614,39 @@ msgstr "" "²ė įŠßąŠžŌė ÖŠŌŠÕęÕ ×Šßćįęöęģ ŌķāķŚāŠą ćįöå ÓćŪģŻļž? ³ķāŠ ߊāķŻęėļŪģŻŠ ÜŽÖŠ " "ŌŠŌŠęģ ŅļŪöŚćī ŚŽŪģŚŠįęģ ÓćŪģŻļž." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖŠ ŠŌŚąėęģ Š×ŻŠēŠŻćī ŌėąķŚāŽąėī!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖŠ ׯŠŁįęö ÓćŪģŻī ž Š×ŻŠēŠŻŠŁ ŌėąķŚāŽąėö!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "°ŃļąėęÕ ÓćŪģŻī:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "²ė įŠßąŠžŌė ÖŠŌŠÕęÕ ŅėŌŠŪöęģ ŻŠŪŠŌė ŌŪļ ÓķāŠŁ ÓćŪģŻö?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "²ė ÖŠŌŠÕęÕ ×ŠÓąć×öęģ ÓćŪģŻī?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "³ķāŠļ ÓćŪģŻļ ŻÕ ߊŌāąėÜŪöŅŠÕ ׊ӹć׌ć ׊åŠŅŠŻŻļž ßąŠ× ÓŠŪŽžŻŠÕ ÜÕŻī." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ŻÕ ×ÜŽÓ ×ŻŠŁįęö ąćåŠŅöēŽŚ ŌŪļ ׊ßćįŚć ŠŃąŠŻŠŁ ÓćŪģŻö!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "ČÜŠā ÓćŪģŻļž..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "·Šßöį..." @@ -729,92 +729,92 @@ msgstr "44 Ś³ę" msgid "48 kHz" msgstr "48 Ś³ę" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "½Õ ׊ŌŠŌ×ÕŻė" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "½Õ ŠāąėÜŠŪŠįļ žÖėęģ ×ÜÕŻė ŻÕŚŠāŽąėå ÓąŠäöēŻėå ŻŠŪŠŌ:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "ŅöŌķŠąķÖėÜ ŻÕ ÜŽÖŠ Ńėęģ ×ÜÕŻÕŻė." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "ߎžŻŠķŚąŠŻŻė ąķÖėÜ ŻÕ ÜŽÖŠ Ńėęģ ×ÜÕŻÕŻė" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "ąķÖėÜ ŚŠąķŚāėąŽžŚö įćŠŌŻŽįöŻ ŃŠŚŽž ŻÕ ÜŽÖŠ Ńėęģ ×ÜÕŻÕŻė" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "³ąŠä. ąķÖėÜ:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "ĄķÖėÜ ąŠįāąć:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "ĮßÕęėļŪģŻėļ ąķÖėÜė ąķŻŌķąėŻÓć, ߊŌāąėÜŽžŅŠŻėļ ŻÕŚŠāŽąėÜö ÓćŪģŻļÜö" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "掞ŻŠķŚąŠŻŻė ąķÖėÜ" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "ŗŠąķŚęėļ įćŠŌŻŽįöŻ ŃŠŚŽž" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "ŗŠąķŚāŠŅŠęģ įćŠŌŻŽįöŻė ŃŠŚŽž ŌŪļ ÓćŪģŻļž × ŠŌąŽ×ŻÕŻŻÕÜ 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "ĆߊŌŠŃŠŻŠļ ßąėŪŠŌŠ:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "³ćŚŠŅŠļ ßąėŪŠŌŠ:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "·Š×ŻŠēŠÕ žßŠŌŠŃŠŻćī Ó挊Ņćī ßąėŪŠŌć ęö ķÜćŪļāŠą Ó挊ŅŽŁ ŚŠąāė" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "·Š×ŻŠēŠÕ ŅėåŽŌŻćī Ó挊Ņćī ßąėŪŠŌć ęö ķÜćŪļāŠą Ó挊ŅŽŁ ŚŠąāė" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "ĆߊŌŠŃŠŻŠļ:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "³ćŚŠŅŠļ ßąėŪŠŌŠ:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "ĶÜćŪļāŠą AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "³ćŚŠŅŠļ ŚŠąāŠ AdLib ŅėŚŠąėįāŽžŅŠÕęęŠ ÜŻŽÓöÜö ÓćŪģŻļÜö" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "ĒŠčēėŻļ ÓćŚć:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -822,53 +822,49 @@ msgstr "" "±ŽŪģčėļ ׯŠēķŻŻö ׊ŌŠīęģ ŪÕßčćī ļŚŠįęģ ÓćŚć, ŠŌŻŠŚ ļŻė ÜŽÓćęģ ŻÕ " "ߊŌāąėÜŪöŅŠęęŠ ŅŠčŠŁ Ó挊ŅŽŁ ŚŠąāŠŁ" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "æąėŪŠŌŠ GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "·Š×ŻŠēŠÕ ŅėåŽŌŻćī Ó挊Ņćī ßąėŪŠŌć ŌŪļ MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "½Õ ŅėŚŠąėįāŽžŅŠęģ Üć×ėŚć ŌŪļ General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "²ėŚŠąėįāŽžŅŠęģ ßÕąčćī ŌŠįāć߯ćī ßąėŪŠŌć" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont'ė ߊŌāąėÜŪöŅŠīęęŠ ŻÕŚŠāŽąėÜö Ó挊ŅėÜö ŚŠąāŠÜö, FluidSynth Ōė " "Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "·ÜÕ芯ė ąķÖėÜ AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "²ėŚŠąėįāŽžŅŠęģ ö MIDI, ö AdLib ŌŪļ ÓÕŻÕąŠęėö ÓćŚć" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Ć×ÜŠęŻÕŻŻÕ MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "½ŠŪŠŌė FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "½ŠŪ. MT-32:" @@ -994,97 +990,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "³ćēŻ. ŠÓćēŚö:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "½ŠŪŠŌė FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "ČŪļå ŌŠ āķÜ:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "ČŪļå ŌŠ āķÜ:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "æŠŚŠ×ŅŠÕ čŪļå ŌŠ ŌŠŌŠāŚŽŅėå 䊣ŪŠž ŌŠŌ×ÕŻėå, ŅėŚŠąėįāŽžŅŠŻėå ćįöÜö ÓćŪģŻļÜö " "ŠŃŽ ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "ČŪļå ŌŠ ßŪŠÓöŻŠž:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "ČŪļå ŌŠ ßŪŠÓöŻŠž:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "ĄŽ×ŻŠÕ" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "ĀķÜŠ" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "¼ŠŪļŅŠŪŚŠ GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "°žāŠ×ŠåŠŅŠŻŻÕ:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "°žāŠ×ŠåŠŅŠŻŻÕ:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "ŗŪŠŅöčė" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "¼ŽŅŠ GUI:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "¼ŽŅŠ ÓąŠäöēŻŠÓŠ öŻāķąäÕŁįć ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "æąŠŅļąŠęģ ŠŃŻŠžŪÕŻŻö:" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "ĻŚ ēŠįāŠ ßąŠŅļąŠęģ ŠŃŻŠžŪÕŻŻö ScummVM" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "æąŠŅÕąėęģ ęļßÕą" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "²ė ߊŅöŻŻė ßÕąŠ×Šßćįęöęģ ScummVM, ŚŠŃ ćÖėęģ ×ÜÕŻė." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "½Õ ÜŠÓć ßöįŠęģ ć ŠŃąŠŻćī ŌėąķŚāŽąėī. ŗŠŪö ŪŠįŚŠ, Š×ŻŠēęÕ öŻčćī." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "°ŃļąėęÕ ŌėąķŚāŽąėī ŌŪļ āķÜ GUI" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "°ŃļąėęÕ ŌėąķŚāŽąėī × ŌŠŌŠāŚŽŅėÜö 䊣ŪŠÜö" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "°ŃļąėęÕ ŌėąķŚāŽąėī × ßŪŠÓöŻŠÜö" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1101,65 +1101,65 @@ msgstr "# ŻŠįā" msgid "add" msgstr "ŌŠŌ" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "²ėŌŠŪöęģ ׯŠŚ" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* »ēŃ" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "æąŠŁÓąŠęģ ęö ׊ßöįŠęģ ÓćŪģŻļŅė ßąŠęķį" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "²ėŌŠŪöęģ" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "·ŠßöįŠęģ" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "æąŠŁÓąŠęģ" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "ĄķŌŠÓŠŅŠęģ" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "°žāŠą:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "½ŠāŠāŚö:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "²ė įŠßąŠžŌė ÖŠŌŠÕęÕ ŅėŌŠŪöęģ Óķāė ׊ßöį?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "½ÕŅļŌŽÜė ŠžāŠą" @@ -1223,7 +1223,7 @@ msgstr "ĮāŅŠąėęģ ŻŽŅė ׊ßöį ÓćŪģŻö" msgid "Name: " msgstr "½Š×ŅŠ: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "ĆŅļŌ×öęÕ ŠßöįŠŻŻÕ įŪŽāŠ %d:" @@ -1232,28 +1232,28 @@ msgstr "ĆŅļŌ×öęÕ ŠßöįŠŻŻÕ įŪŽāŠ %d:" msgid "Select a Theme" msgstr "°ŃļąėęÕ āķÜć" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "±Õ× ÓąŠäöŚö" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "±Õ× ÓąŠäöŚö" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "ĮāŠŻŌŠąāŻė ąŠįāŠąė׊āŠą" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "ĮāŠŻŌŠąāŻė" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "ĄŠįāŠąė׊āŠą įŠ ×ÓŪŠŌÖŅŠŻŻÕÜ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "ĮŠ ×ÓŪŠŌÖŅŠŻŻÕÜ" @@ -1281,39 +1281,39 @@ msgstr "°žāŠÜŠāėēŻŠ ßąŠŅļąŠęģ ŠŃŻŠžŪÕŻŻö" msgid "Proceed" msgstr "æąŠęļÓŻćęģ" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "°ēėįęöęģ ׯŠēķŻŻÕ" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "ĄćåŠŅöēŽŚ ŻÕ ߊŌāąėÜŪöŅŠÕ ž×ąŽŅÕŻģ ŠŌŪŠŌŚö '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "¼ÕŻī" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "æąŠßćįęöęģ" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "択׊" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "æąŠßćįęöęģ ąŠŌŽŚ" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "æŠÜėŪŚŠ ׊ßćįŚć ÓćŪģŻö:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "½Õ ÜŠÓć ׯŠŁįęö ąćåŠŅöēŽŚ ŌŪļ ׊ßćįŚć ŠŃąŠŻŠŁ ÓćŪģŻö" @@ -1471,15 +1471,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "³~Š~ŪŽžŻŠÕ ÜÕŻī" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "·ŠåŠŅŠęģ ÓćŪģŻī:" @@ -1488,16 +1488,16 @@ msgstr "·ŠåŠŅŠęģ ÓćŪģŻī:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "·ŠåŠŅŠęģ" @@ -1522,12 +1522,12 @@ msgstr "" "ŌŠßŠÜŽÓć." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~¾~ŗ" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~°~ŌÜÕŻŠ" @@ -1604,7 +1604,7 @@ msgstr "" msgid "Start anyway" msgstr "Ćįń ŠŌŻŽ ׊ßćįęöęģ" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "ĶÜćŪļāŠą AdLib" @@ -1721,7 +1721,7 @@ msgstr "²ė įŠßąŠžŌė ÖŠŌŠÕęÕ ŅėŁįęö?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "²ėåŠŌ" @@ -1870,7 +1870,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~·~ŠēėŻöęģ" @@ -2362,20 +2362,38 @@ msgstr "" "½Õ ׊ŃćŌ×ģęÕįļ ßąėׯŠēėęģ ŚŪŠŅöčć ŌŪļ Ō×ÕļŻŻļ 'Hide Toolbar', ŚŠŃ ćŃŠēėęģ " "ćŅÕįģ öŻŅÕŻāŠą ć ÓćŪģŻö" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "æąŠŅļąŠī ŠŃŻŠžŪÕŻŻö..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "ĄķÖėÜ ŃÕ× ŚŽŪÕąć" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "æŠŚŠ×ŅŠęģ ąŠŌŽŚ ŠŃ'ÕŚāŠž" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "²ėŚŠąėįāŽžŅŠęģ ŠąėÓöŻŠŪģŻėļ ķŚąŠŻė ׊ßöįć/ēėāŠŻŻļ ÓćŪģŻö" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2427,27 +2445,27 @@ msgstr "" "æŠŚŠ×ŅŠÕ ŠŚŻŽ × ąŠŌŚŽÜ ćŅŽŌć ŚŠÜŠŻŌė ö įāŠŅöęģ ÓćŪģŻī ŻŠ ߊž×ć (ļŚ ć SCI) " "׊ÜÕįā ćŅŽŌć ž ąķŠŪģŻėÜ ēŠįÕ." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "ĆׯŠŅöęģ ÓćŪģŻī:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "ĆׯŠŅöęģ" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2458,7 +2476,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2469,7 +2487,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2480,7 +2498,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "ÄŠŁŪ ׊įāŠžŚö '%s' ŻÕ ׯŽŁŌ×ÕŻė!" @@ -2510,20 +2528,20 @@ msgstr "" "½ŠęöįŻöęÕ ¾ŗ, ŚŠŃ ßÕąŠŅÕįęö öå ć ŻŽŅė 䊹܊ā ׊ąŠ×, ć ŠŌŅŠąŽāŻėÜ ŅėߊŌŚć " "ÓķāŠ ߊŅÕŌŠÜŪÕŻŻÕ ×'ļŅöęęŠ ×ŻŽž ßąė ŻŠįāć߯ėÜ ×ŠßćįŚć ÓćŪģŻö.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "²ėŚŠąėįāŽžŅŠęģ ąķÖėÜ ļąŚŠŁ ߊŪöāąė" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "¼ŠŪīÕ ÓąŠäöŚć × ŅėŚŠąėįāŠŻŻÕÜ ļąŚŠŁ ߊŪöāąė ÓćŪģŻö" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "½Õ ŠāąėÜŠŪŠįļ ׊ӹć×öęģ ׊åŠŅŠŻćī ÓćŪģŻī × äŠŁŪŠ." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "½Õ ŠāąėÜŠŪŠįļ ׊åŠŅŠęģ ÓćŪģŻī ž 䊣Ū." @@ -2540,7 +2558,7 @@ msgstr "ÅćāŚö ąķÖėÜ ŅöŌķŠ" msgid "Play movies at an increased speed" msgstr "æąŠŁÓąŠŅŠÕ ŅöŌķŠ ŻŠ ߊŅļŪöēŠŻŠŁ åćāŚŠįęö" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "½Õ ŠāąėÜŠŪŠįļ ׊åŠŅŠęģ ÓćŪģŻī" @@ -2749,23 +2767,23 @@ msgstr "³ŠŪŽžŻŠÕ ÜÕŻ~ī~" msgid "~W~ater Effect Enabled" msgstr "~Ķ~äÕŚāė ŅŠŌė žŚŪīēŠŻė" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "æąŠßćįęöęģ įęķŻė × ³ŠŪÕąķö ³öįāŽąėö" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "“Š×ŅŠŪļÕ ÓćŪģęć ßąŠßćįęöęģ ćįÕ įęķŻė ž ³ŠŪÕąķö ³öįāŽąėö" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "ĄŠįęļÓŻćęģ ŻŠ žŅÕįģ ķŚąŠŻ ŅöŌķŠ ßąŠ įāŅŠąķŻŻÕ ÓćŪģŻö" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "ĄŠįęļÓŅŠÕ ŅöŌķŠ ßąŠ įāŅŠąķŻŻÕ ÓćŪģŻö āŠŚ, čāŽ ļŻŽ ׊ŁÜŠÕ žŅÕįģ ķŚąŠŻ" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2774,23 +2792,23 @@ msgstr "" "½Õ ÜŠÓć ׊åŠŅŠęģ ÓćŪģŻī ž ߊ×öęėī %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "·ŠÓąć×öęģ 䊣Ū" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "·ŠÓąćÖŠī ÓćŪģŻī..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "·ŠåŠŅŠęģ 䊣Ū" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "·ŠåŽžŅŠī ÓćŪģŻī..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2806,11 +2824,11 @@ msgstr "" "½ŠęöįŻöęÕ ¾ŗ, ŚŠŃ ßÕąŠŻŠ×ŅŠęģ öå ׊ąŠ×, ć ŠŌŅŠąŽāŻėÜ ŅėߊŌŚć ÓķāŠÕ Ö " "ߊŅÕŌŠÜŪÕŻŻÕ ×'ļŅöęęŠ ßąė ŻŠįāć߯ėÜ ×ŠßćįŚć ÓćŪģŻö.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ߊįßļåŽŅŠ ßÕąŠžāŅŠąėž ćįÕ ŅŠčė ׊åŠŅŠŻŻö ÓćŪģŻļž." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2935,127 +2953,127 @@ msgid "" msgstr "" "²ėŚŠąėįāŽžŅŠęģ ŠŪģāķąŻŠāėžŻė ŻŠŃŽą įąķŃŻėå ŚćąįŽąŠž ׊ÜÕįā ×ŅėēŠŁŻėå ׊ŪŠāėå" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "æŠŚŠ×ŅŠęģ ąŠŌŽŚ ŠŃ'ÕŚāŠž" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "æŠŚŠ×ŅŠęģ ŻŠ×Ņė ŠŃ'ÕŚāŠž ćŻö×Õ ķŚąŠŻŠ" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "ĆįāŠžęÕ ŌėįŚ %c ö ŻŠęöįŻöęÕ ŚŪŠŅöčć, ŚŠŃ ßąŠęļÓŻćęģ." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "½Õ ŠāąėÜŠŪŠįļ ׯŠŁįęö %s, (%c%d) ½ŠęöįŻöęÕ ŚŪŠŅöčć." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "æŠÜėŪŚŠ ēėāŠŻŻļ ŌėįŚŠ %c, (%c%d) ½ŠęöįŻöęÕ ŚŪŠŅöčć." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "³ćŪģŻļ įßėŻÕŻŠ. ½ŠęöįŻöęÕ ßąŠŃÕŪ, ŚŠŃ ßąŠęļÓŻćęģ." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "²ė žßķžŻÕŻė, čāŽ ÖŠŌŠÕęÕ ßŠēŠęģ öׯŽž? (Y/N)Y" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "²ė žßķžŻÕŻė, čāŽ ÖŠŌŠÕęÕ ŅėŁįęö? (Y/N)Y" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "³ćŪļęģ" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "ĆįāŠžęÕ ŌėįŚ × ×ŠåŠŅŠŻŻļÜö" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "²ė ߊŅöŻŻė žŅÕįęö öÜļ" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "³ćŪģŻļ ½µ ±Ė»° ׊ßöįŠŻŠ (ŌėįŚ ߎžŻė?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "³ćŪģŻļ ½µ ±Ė»° ׊ӹćÖŠŻŠ" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "·ŠåŽžŅŠī '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "·ŠÓąćÖŠī '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "½Š×ŠŅöęÕ ×ŠåŠŅŠŻŻÕ ÓćŪģŻö" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "°ŃļąėęÕ ÓćŪģŻī ŌŪļ ׊ӹć׌ö" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "½Š×ŅŠ ÓćŪģŻö)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~æ~Šßļą" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~½~Šįā" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "ĀŽŪģŚö ŠÓćēŚŠ" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "°ÓćēŚŠ ö įćŃāėāąė" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "ĀŽŪģŚö įćŃāėāąė" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "°ÓćēŚŠ ö āķŚįā" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "°ŃļąėęÕ ž×ąŽŅÕŻģ įŚŪŠŌŠŻŠįęö." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "·Š ŌŠßŠÜŽÓŠŁ ×ŅļąŻöęÕįļ ŌŠ öŻįāąćŚęėö Loom(TM)." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "æąŠŚāėŚŠŻā" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "ĶŚįßÕąā" @@ -3592,23 +3610,23 @@ msgstr "»ļęÕęģ ŻŠßąŠŅŠ" msgid "Fly to lower right" msgstr "»ļęÕęģ ŻŠßąŠŅŠ-žŻö×" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "æąŠÓŽąāŚŠ įŚŽŚŠÜö žŚŪīēŠŻŠ" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "æąŠÓŽąāŚŠ įŚŽŚŠÜö ŅėŚŪīēŠŻŠ" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "³ćēŻ. Üć×ėŚö: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "ÅćāŚŠįęģ āėāąŠž: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3617,7 +3635,7 @@ msgstr "" "ĄķÖėÜ \"ąŽŌŻŠÓŠ\" MIDI ߊāąŠŃćÕ ŠŃŻŠžŪÕŻŻÕ Roland Upgrade ŠŌ\n" "LucasArts, ŠŪÕ ŻÕ åŠßŠÕ %s. æÕąŠŚŪīēŠīįļ ŻŠ AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3811,13 +3829,13 @@ msgstr "" "²ėŚŠąėįāŽžŅŠęģ ŠŻÓŪöŁįŚćī ŠÓćēŚć ׊ÜÕįā ŻļÜÕꌊŁ ŌŪļ žįöå ÜŽž, ŠŚąŠÜļ " "ŻļÜÕꌊŁ" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Ć ŅŠį ŠŌįćāŻöēŠÕ 䊣Ū 'teenagent.dat'. ·ŠßŠÜßćŁęÕ ļÓŽ × ŅķŃ-įŠŁāŠ ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/ca_ES.po b/po/ca_ES.po index baffd40199..7ad491c396 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\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" @@ -52,16 +52,16 @@ msgstr "Amunt" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Cancel·la" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Realment voleu suprimir aquesta partida?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "Sķ" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Triangle" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Misc" @@ -204,14 +204,14 @@ msgstr "Reset" msgid "Reset all FluidSynth settings to their default values." msgstr "Retorna tots els ajustos de FluidSynth als seus valors per defecte." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -241,15 +241,15 @@ msgstr "Tanca" msgid "Mouse click" msgstr "Clic del ratolķ" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Mostra el teclat" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Assigna les tecles" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Commuta la pantalla completa" @@ -326,7 +326,7 @@ msgstr "" "Anglčs" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<per defecte>" @@ -396,220 +396,220 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Canviar les opcions de volum" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Fer canvis sobre les opcions globals de MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Canviar les opcions de MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Fer canvis sobre les opcions globals de MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Canviar les opcions de MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Camins" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Camins" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Camķ del joc:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Camķ joc:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Camķ extra:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Especifica el camķ de dades addicionals utilitzades pel joc" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Camķ extra:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Camķ de partides:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Especifica on es desaran les partides" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Partides:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Cap" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Per defecte" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Seleccioneu el fitxer SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Seleccioneu el directori amb les dades del joc" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Seleccioneu el directori addicional del joc" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Seleccioneu el directori de les partides desades" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "" "Aquest identificador de joc ja estą en śs. Si us plau, trieu-ne un altre." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~T~anca" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Surt de ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~Q~uant a..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Quant a ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pcions..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Canvia les opcions globals de ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~I~nicia" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Iniciant el joc seleccionat" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~arrega..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Carrega una partida pel joc seleccionat" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~fegeix Joc..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Mantingueu premut Shift per a l'Addició Massiva" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~dita Joc..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Canvia les opcions del joc" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~S~uprimeix Joc" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "" "Elimina un joc de la llista. Els fitxers de dades del joc es mantenen " "intactes" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~fegeix Joc..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~dita Joc..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~S~uprimeix" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Cerca a la llista de jocs" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Carrega partida:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Carrega" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -617,41 +617,41 @@ msgstr "" "Esteu segur que voleu executar el detector massiu de jocs? Aixņ pot afegir " "una gran quantitat de jocs." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM no ha pogut obrir el directori especificat!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM no ha pogut trobar cap joc al directori especificat!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Seleccioneu el joc:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Realment voleu suprimir la configuració d'aquest joc?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 #, fuzzy msgid "Do you want to load saved game?" msgstr "Voleu carregar o desar el joc?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Aquest joc no suporta la cąrrega de partides des del llanēador." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM no ha pogut trobar cap motor capaē d'executar el joc seleccionat!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Addició Massiva..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -737,92 +737,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Cap" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "No s'han pogut aplicar alguns canvis de les opcions grąfiques:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "no s'ha pogut canviar el mode de vķdeo" -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "no s'ha pogut canviar l'ajust de pantalla completa" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "no s'ha pogut canviar l'ajust de la correcció d'aspecte" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Mode grąfic:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Mode de pintat:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Modes de tramat especials suportats per alguns jocs" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Mode pantalla completa" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Correcció de la relació d'aspecte" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregeix la relació d'aspecte per jocs de 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Disp. preferit:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Disp. de mśsica:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Especifica el dispositiu de so o l'emulador de tarja de so preferit" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Especifica el dispositiu de so o l'emulador de tarja de so de sortida" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferit:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Disp. de mśsica:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emulador AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib s'utilitza per la mśsica de molts jocs" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Freq. sortida:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -830,52 +830,48 @@ msgstr "" "Valors més alts especifiquen millor qualitat de so perņ pot ser que la " "vostra tarja de so no ho suporti" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Dispositiu GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "" "Especifica el dispositiu de so per defecte per a la sortida General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "No utilitzis mśsica General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Utilitza el primer dispositiu disponible" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "Fitxer SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "Algunes targes de so, FluidSynth i Timidity suporten SoundFont" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Mode combinat AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilitza MIDI i la generació de so AdLib alhora" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Guany MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Configuració de FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Disposit. MT-32:" @@ -1000,99 +996,103 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Volum de veus:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Configuració de FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Camķ dels temes:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Camķ temes:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Especifica el camķ de les dades addicionals utilitzades per tots els jocs o " "pel ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Camķ dels connectors:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Camķ de connectors:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Misc" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Pintat GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Desat automątic:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Auto-desat:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Tecles" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Idioma GUI:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfķcie d'usuari de ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Heu de reiniciar ScummVM perquč tots els canvis tinguin efecte." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "No es pot escriure al directori seleccionat. Si us plau, escolliu-ne un " "altre." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Seleccioneu el directori dels temes" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Seleccioneu el directori dels fitxers extra" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Seleccioneu el directori dels connectors" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1109,68 +1109,68 @@ msgstr "" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 #, fuzzy msgid "Delete char" msgstr "Suprimeix" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Suprimeix" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 #, fuzzy msgid "Playback" msgstr "Jugar" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 #, fuzzy msgid "Do you really want to delete this record?" msgstr "Realment voleu suprimir aquesta partida?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 #, fuzzy msgid "Unknown Author" msgstr "Error desconegut" @@ -1235,7 +1235,7 @@ msgstr "Crea una nova partida desada" msgid "Name: " msgstr "Nom: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Entreu la descripció per l'espai %d:" @@ -1244,30 +1244,30 @@ msgstr "Entreu la descripció per l'espai %d:" msgid "Select a Theme" msgstr "Seleccioneu un Tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX desactivats" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desactivats" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 #, fuzzy msgid "Standard Renderer" msgstr "Pintat estąndard (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Estąndard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased Renderer" msgstr "Pintat amb antialias (16bpp)" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased" msgstr "Amb antialias (16bpp)" @@ -1293,39 +1293,39 @@ msgstr "Comprova les actualitzacions..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Neteja el valor" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "El motor no suporta el nivell de depuració '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menś" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Salta" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausa" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Salta la lķnia" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Error al executar el joc:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "No s'ha pogut trobar cap motor capaē d'executar el joc seleccionat" @@ -1484,15 +1484,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~R~etorna al Llanēador" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Desa la partida:" @@ -1501,16 +1501,16 @@ msgstr "Desa la partida:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Desa" @@ -1533,12 +1533,12 @@ msgstr "" "informació bąsica i les instruccions sobre com obtenir més assistčncia." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~D~'acord" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~C~ancel·la" @@ -1613,7 +1613,7 @@ msgstr "" msgid "Start anyway" msgstr "Inicia de totes maneres" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulador d'AdLib" @@ -1731,7 +1731,7 @@ msgstr "Estąs segur de voler sortir?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Surt" @@ -1882,7 +1882,7 @@ msgid "Windows MIDI" msgstr "MIDI de Windows" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~T~anca" @@ -2375,20 +2375,38 @@ msgstr "" "No us oblideu d'assignar una tecla a l'acció 'Ocultar la barra d'eines' per " "veure l'inventari complet" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Comprova les actualitzacions..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Mode clic" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Mostra les etiquetes dels objectes" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Utilitza les pantalles originals de desat/cąrrega" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2433,27 +2451,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Recupera la partida:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Restaura" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2464,7 +2482,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2475,7 +2493,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2486,7 +2504,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "No s'ha trobat el fitxer d'escena '%s'!" @@ -2518,20 +2536,20 @@ msgstr "" "Premeu D'Acord per convertir-les ara, en cas contrari se us tornarą a " "demanar la propera vegada que engegueu el joc.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Utilitza el mode de paleta brillant" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Mostra els grąfics utilitzant la paleta brillant del joc" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "No s'ha pogut carregar l'estat del joc del fitxer." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "No s'ha pogut desar l'estat del joc al fitxer." @@ -2548,7 +2566,7 @@ msgstr "Velocitat rąpida de les pel·lķcules" msgid "Play movies at an increased speed" msgstr "Reprodueix les pel·lķcules a major velocitat" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "No s'ha pogut desar l'estat del joc" @@ -2745,23 +2763,23 @@ msgstr "~M~enś Principal" msgid "~W~ater Effect Enabled" msgstr "~E~fecte de l'aigua activat" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2770,25 +2788,25 @@ msgstr "" "No s'ha pogut desar a l'espai %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Carrega partida:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Carregant la partida..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Desa la partida:" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Desant la partida..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2805,11 +2823,11 @@ msgstr "" "Premeu D'Acord per convertir-les ara, en cas contrari se us tornarą a " "demanar la propera vegada.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ha convertit satisfactņriament totes les partides desades." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2934,130 +2952,130 @@ msgstr "" "Utilitza el conjunt alternatiu de cursors platejats, en lloc dels normals " "daurats" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Mostra les etiquetes dels objectes" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Inseriu el disc %c i premeu un botó per continuar." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "No s'ha pogut trobar %s, (%c%d) Premeu un botó." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Error llegint el disc %c, (%c%d) Premeu un botó." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Joc pausat. Premeu ESPAI per continuar." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 #, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Esteu segur de voler reiniciar? (S/N)S" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 #, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Esteu segur de voler sortir? (S/N)S" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jugar" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Inseriu el disc de partides desades" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Heu d'introduir un nom" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "La partida NO s'ha desat (el disc estą ple?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "La partida NO s'ha desat" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Desant '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Carregant '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Anomeneu la partida DESADA" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Seleccioneu una partida per CARREGAR" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Tķtol del joc)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~A~nterior" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~S~egüent" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Només veus" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Veu i subtķtols" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Només subtķtols" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Veus i sub." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Seleccioneu el nivell de competčncia." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulteu el manual de Loom(TM) per ajuda." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Prąctica" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Expert" @@ -3595,26 +3613,26 @@ msgstr "Vola a la dreta" msgid "Fly to lower right" msgstr "Vola avall i a la dreta" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 #, fuzzy msgid "Snap scroll on" msgstr "Desplaēament suau" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 #, fuzzy msgid "Music volume: " msgstr "Volum de mśsica:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 #, fuzzy msgid "Subtitle speed: " msgstr "Velocitat de subt.:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3623,7 +3641,7 @@ msgstr "" "El suport de MIDI natiu requereix l'actualització Roland de LucasArts,\n" "perņ no s'ha trobat %s. S'utilitzarą AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 #, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " @@ -3812,12 +3830,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Us falta el fitxer 'teenagent.dat'. Obteniu-lo a la pągina de ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 3a72b20898..88a743e72a 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-03 22:59+0100\n" "Last-Translator: Zbynģk Schwarz <zbynek.schwarz@gmail.com>\n" "Language-Team: \n" @@ -56,16 +56,16 @@ msgstr "Jķt nahoru" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Zru¹it" @@ -104,7 +104,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Opravdu chcete tento soubor pųepsat?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -114,7 +114,7 @@ msgid "Yes" msgstr "Ano" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -175,7 +175,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Trojśhrlnķk" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Rłzné" @@ -207,14 +207,14 @@ msgstr "Resetovat" msgid "Reset all FluidSynth settings to their default values." msgstr "Resetovat ve¹kerį nastavenķ FludSynth n ajejich vżchozķ hodnoty." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -244,15 +244,15 @@ msgstr "Zavųķt" msgid "Mouse click" msgstr "Kliknutķ my¹ķ" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Zobrazit klįvesnici" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Pųemapovat klįvesy" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Pųepnout celou obrazovku" @@ -327,7 +327,7 @@ msgid "" msgstr "Jazyk hry. Toto z va¹ķ ©panģlské verze neudģlį Anglickou" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<vżchozķ>" @@ -397,217 +397,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Potlačit globįlnķ nastavenķ hlasitosti" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Potlačit globįlnķ nastavenķ MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Potlačit globįlnķ nastavenķ MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Potlačit globįlnķ nastavenķ MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Potlačit globįlnķ nastavenķ MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Cesty" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Cesty" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Cesta Hry:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Cesta Hry:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Dodatečnį Cesta:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Stanovķ cestu pro dodatečnį data pou¾itį ve hųe" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Dodatečnį Cesta:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Cesta pro ulo¾enķ:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Stanovuje, kam jsou umķstģny va¹e ulo¾ené hry" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Cesta pro ulo¾enķ:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "®įdné" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Vżchozķ" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Vybrat SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Vyberte adresįų s daty hry" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Vyberte dodatečnż adresįų hry" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Vyberte adresįų pro ulo¾ené hry" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Toto ID hry je u¾ zabrané. Vyberte si, prosķm, jiné." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~U~končit" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Ukončit ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~O~ Programu..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "O ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~V~olby..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Zmģnit globįlnķ volby ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~pustit" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Spustit zvolenou hru" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~N~ahrįt..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Nahrįt ulo¾enou pozici pro zvolenou hru" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~P~ųidat hru..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Podr¾te Shift pro Hromadné Pųidįnķ" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~U~pravit Hru..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Zmģnit volby hry" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~O~dstranit Hru" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Odstranit hru ze seznamu. Hernķ data złstanou zachovįna" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~P~ųidat hru..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~U~pravit hru..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~O~dstranit hru" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Hledat v seznamu her" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Hledat:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Nahrįt hru:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Nahrįt" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -615,39 +615,39 @@ msgstr "" "Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciįlnģ " "pųidat velkou spoustu her. " -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nemohl tento adresįų otevųķt!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM nemohl v zadaném adresįųi najķt ¾įdnou hru!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Vybrat hru:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Opravdu chcete odstranit nastavenķ této hry?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Chcete načķst ulo¾enou pozici?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Tato hra nepodporuje spou¹tģnķ her ze spou¹tģče" -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM nemohl najķt ¾įdné jįdro schopné vybranou hru spustit!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Hromadné Pųidįnķ..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Nahrįt..." @@ -730,92 +730,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "®įdné" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Nelze pou¾ķt nģkteré zmģny mo¾nostķ grafiky:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "re¾im obrazu nemohl bżt zmģnģn." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "nastavenķ celé obrazovky nemohlo bżt zmģnģno" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "nastavenķ pomģru stran nemohlo bżt zmģnģno" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Re¾im obrazu:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Re¾im vykreslenķ:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Speciįlnķ re¾imy chvģnķ podporované nģkterżmi hrami" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Re¾im celé obrazovky" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Korekce pomģru stran" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Korigovat pomģr stran pro hry 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Prioritnķ Zaųķzenķ:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Hudebnķ zaųķzenķ" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Stanovķ prioritnķ zvukové zaųķzenķ nebo emulįtor zvukové karty" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Stanovķ vżstupnķ zvukové zaųķzenķ nebo emulįtor zvukové karty" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Prioritnķ Zaų.:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Hudebnķ zaųķzenķ" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulįtor" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib se pou¾ķvį pro hudbu v mnoha hrįch" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Vżstup. frekvence:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -823,52 +823,48 @@ msgstr "" "Vy¹¹ķ hodnota zpłsobķ lep¹ķ kvalitu zvuku, ale nemusķ bżt podporovįna Va¹i " "zvukovou kartou" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM Zaųķzenķ:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Stanovķ vżchozķ zvukové zaųķzenķ pro vżstup General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Nepou¾ķvat hudbu General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Pou¾ķt prvnķ dostupné zaųķzenķ" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont je podporovįn nģkterżmi zvukovżmi kartami, FluidSynth a Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Smķ¹enż re¾im AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Pou¾ķt obģ zvukové generace MIDI a AdLib" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Zesķlenķ MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Nastavenķ FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Zaųķzenķ MT-32:" @@ -993,95 +989,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Hlasitost ųeči" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Nastavenķ FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Cesta ke Vzhledu:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Cesta ke Vzhledu:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Stanovķ cestu k dodatečnżm datłm pou¾ķvanį v¹emi hrami nebo ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Cesta k Pluginłm:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Cesta k Pluginłm:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Rłzné" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Vzhled:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI Vykreslovač:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autouklįdįnķ:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autouklįdįnķ:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Klįvesy" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Jazyk GUI" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Jazyk GUI ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Pro pou¾itķ tģchto nastavenķ musķte restartovat ScummVM." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Do zvoleného adresįųe nelze zapisovat. Vyberte, prosķm, jinż." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Vyberte adresįų pro vhledy GUI" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Vyberte adresįų pro dodatečné soubory" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Vyberte adresįų pro zįsuvné moduly" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1098,65 +1098,65 @@ msgstr "# dal¹ķ" msgid "add" msgstr "pųidat" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Smazat znak" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Prediktivnķ" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Čķsla" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Nahrįvat nebo pųehrįt hru" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Smazat" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Nahrįt" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Pųehrįt" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Upravit" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Autor:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Poznįmky:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Opravdu chcete tento zįznam smazat?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Neznįmż autor" @@ -1220,7 +1220,7 @@ msgstr "Vytvoųit novou ulo¾enou hru." msgid "Name: " msgstr "Nįzev:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Zadejte popis pro pozici %d:" @@ -1229,28 +1229,28 @@ msgstr "Zadejte popis pro pozici %d:" msgid "Select a Theme" msgstr "Vyberte Vzhled" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX zakįzįno" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX zakįzįno" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standardnķ Vykreslovač" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standardnķ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Vykreslovač s vyhlazenżmi hranami" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "S vyhlazenżmi hranami" @@ -1275,39 +1275,39 @@ msgstr "Zkontrolovat Aktualizace..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Vyčistit hodnotu" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Jįdro nepodporuje śroveņ ladģnķ '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pųeskočit" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pauza" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Pųeskočit ųįdek" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Chyba pųi spu¹tģnķ hry:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Nelze nalézt ¾įdné jįdro schopné vybranou hru spustit" @@ -1465,15 +1465,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~N~įvrat do Spou¹tģče" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Ulo¾it hru:" @@ -1482,16 +1482,16 @@ msgstr "Ulo¾it hru:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Ulo¾it" @@ -1515,12 +1515,12 @@ msgstr "" "informace a pokyny k zķskįnķ dal¹ķ podpory." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~Z~ru¹it" @@ -1595,7 +1595,7 @@ msgstr "" msgid "Start anyway" msgstr "Pųesto spustit" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Emulįtor" @@ -1712,7 +1712,7 @@ msgstr "Opravdu chcete skončit?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Ukončit" @@ -1861,7 +1861,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~Z~avųķt" @@ -2355,20 +2355,38 @@ msgstr "" "Nezapomeņte namapovat klįvesu k činnosti 'Skrżt Panel Nįstrojł, abyste " "vidģli celż inventįų" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Zkontrolovat Aktualizace..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Re¾im pro barvoslepé" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Zobrazit jmenovky objektł" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Pou¾ķt płvodnķ obrazovky načtenķ/ulo¾enķ" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Pou¾ķt płvodnķ obrazovky načtenķ/ulo¾enķ mķsto ze ScummVM" @@ -2415,27 +2433,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Obnovit hru" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Obnovit" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2446,7 +2464,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2457,7 +2475,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2468,7 +2486,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Soubor videa '%s' nenalezen'" @@ -2499,20 +2517,20 @@ msgstr "" "Stisknģte OK, abyste je pųevedli teļ, jinak budete po¾įdįni znovu, pųi " "spu¹tģnķ této hry.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Pou¾ķt re¾im jasné palety" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Zobrazit grafiku pomocķ jasné palety hry" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Nelze načķst stav hry ze souboru." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Nelze ulo¾it stav hry do souboru." @@ -2529,7 +2547,7 @@ msgstr "Zvż¹enį rychlost videa" msgid "Play movies at an increased speed" msgstr "Pųehrįt videa se zvż¹enou rychlostķ" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Nelze ulo¾it hru." @@ -2738,23 +2756,23 @@ msgstr "~H~lavnķ Menu" msgid "~W~ater Effect Enabled" msgstr "~E~fekt Vody Zapnut" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Pųeskočit scény v Sķni zįznamł" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Umo¾ņuje hrįči pųeskočit scény v Sķni zįznamł" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Zvģt¹it filmy o vżrobģ na celou obrazovku" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Zvģt¹it filmy o vżrobģ tak, aby vyu¾ivaly celou obrazovku" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2763,25 +2781,25 @@ msgstr "" "Nelze ulo¾it hru do pozice %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Nahrįt hru:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Nahrįvįnķ hry..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Uklįdįnķ hry selhalo!" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Uklįdįnķ hry..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2797,11 +2815,11 @@ msgstr "" "\n" "Stisknģte OK, abyste je pųevedli teļ, jinak budete po¾įdįni pųķ¹tģ.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM śspģ¹nģ pųevedl v¹echny va¹e ulo¾ené pozice. " -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2920,128 +2938,128 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Pou¾ķt alternativnķ sadu stųķbrnżch kurzorł mķsto standardnķch zlatżch" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Zobrazit jmenovky objektł" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Vlo¾te Disk %c a Stisknģte Tlačķtko Pro Pokračovįnķ." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Nelze Najķt %s, (%c%d) Stisknģte Tlačķtko." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Chyba pųi čtenķ disku %c, (%c%d) Stisknģte Tlačķtko." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Hra Pozastavena. Stisknģte MEZERNĶK pro pokračovįnķ." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Jste si jisti, ¾e chcete restartovat? (A/N)A" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Jste si jisti, ¾e chcete odejķt? (A/N)A" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Hrįt" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Vlo¾te hernķ disk pro ulo¾enķ/načtenķ" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Musķte zadat jméno" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Hra NEBYLA ulo¾ena (plnż disk?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Hra NEBYLA načtena" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Uklįdįm '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Načķtįm '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Pojmenujte svoji ULO®ENOU hru" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Vyberte hru k NAČTENĶ" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Nįzev hry" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~P~ųedchozķ" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~D~al¹ķ" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Pouze Ųeč" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Ųeč a Titulky" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Pouze Titulky" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Ųeč a Titulky" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Vyberte śroveņ odbornosti." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Pro nįpovģdu si pųečtģte manuįl Loom(TM)." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Cvičenķ" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Pokročilż" @@ -3578,23 +3596,23 @@ msgstr "Letģt doprava" msgid "Fly to lower right" msgstr "Letģt doprava dolł" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Pųichycenķ pųi posunovįnķ zapnuto" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Pųichycenķ pųi posunovįnķ zapnuto" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Hlasitost hudby:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Rychlost titulkł:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3603,7 +3621,7 @@ msgstr "" "Pųirozenį podpora MIDI vy¾aduje Aktualizaci Roland od LucasArts,\n" "ale %s chybķ. Mķsto toho je pou¾it AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3787,12 +3805,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Chybķ vįm soubor 'teenagent.dat'. Mł¾ete ho zķskat ze strįnky ScummVM." -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/da_DK.po b/po/da_DK.po index 69692f03bc..94f89f624d 100644 --- a/po/da_DK.po +++ b/po/da_DK.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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-25 21:08+0100\n" "Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n" "Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n" @@ -54,16 +54,16 @@ msgstr "Gå op" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Fortryd" @@ -102,7 +102,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Vil du virkelig overskrive filen?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -112,7 +112,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -173,7 +173,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Triangulęr" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Andet" @@ -205,14 +205,14 @@ msgstr "Nulstil" msgid "Reset all FluidSynth settings to their default values." msgstr "Nulstil alle FluidSynth indstillinger til deres standard vęrdier." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -242,15 +242,15 @@ msgstr "Luk" msgid "Mouse click" msgstr "Muse klik" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Vis tastatur" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Kortlęg taster" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Skift fuldskęrm" @@ -327,7 +327,7 @@ msgstr "" "engelsk" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<standard>" @@ -397,217 +397,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale lydstyrke indstillinger" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI indstillinger" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI indstillinger" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32 indstillinger" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32 indstillinger" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Stier" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Stier" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Spil sti:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Spil sti:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Ekstra sti:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Angiver sti til ekstra data der bruges i spillet" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstra sti:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Gemme sti:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Angiver hvor dine gemmer bliver lagt" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Gemme sti:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Vęlg SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Vęlg bibliotek med spil data" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Vęlg ekstra spil bibliotek" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Vęlg bibliotek til spil gemmer" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Dette spil ID er allerede i brug. Vęlg venligst et andet." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~A~fslut" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Slut ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~I~ndstillinger..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Ęndre globale ScummVM indstillinger" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Start det valgte spil" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "Ind~l~ęs..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Indlęs gemmer for det valgte spil" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~T~ilfųj spil..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Hold Skift for at tilfųje flere" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~R~ediger spil..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Ęndre spil indstillinger" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~F~jern spil" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Fjerner spil fra listen. Spillets data filer forbliver uberųrt" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~T~ilfųj spil..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spil..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spil" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Sųg i spil liste" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Sųg:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Indlęs spil:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Indlęs" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -615,40 +615,40 @@ msgstr "" "Vil du virkelig kųre fler spils detektoren? Dette kunne potentielt tilfųje " "et stort antal spil." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke åbne det angivne bibliotek!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikke finde noget spil i det angivne bibliotek!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Vęlg spillet:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Vil du virkelig fjerne denne spil konfiguration?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Vil du indlęse gemmer?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Dette spil understųtter ikke indlęsning af spil fra spiloversigten." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikke finde en motor, istand til at afvikle det valgte spil!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Tilfųj flere..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Optag..." @@ -731,92 +731,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Anvendelse af ęndringer for grafiske indstillinger fejlede:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "videotilstanden kunne ikke ęndres." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "fuld skęrm indstillingen kunne ikke ęndres" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "billedformat indstillingen ikke kunne ęndres" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafik tilstand:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Rendere tilstand:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Speciel farvereduceringstilstand understųttet a nogle spil" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Fuldskęrms tilstand" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Billedformat korrektion" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Korrekt billedformat til 320x200 spil" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Foretruk. enhed:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musik enhed:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Angiver foretukket lyd enhed eller lydkort emulator" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Angiver lyd udgangsenhed eller lydkorts emulator" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Foretruk. enh.:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musik enhed:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulator:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib bliver brugt til musik i mange spil" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Udgangsfrekvens:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -824,51 +824,47 @@ msgstr "" "Hųjere vęrdi angiver bedre lyd kvalitet, men understųttes måske ikke af dit " "lydkort" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM enhed:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Angiver standard lyd enhed for Generel MIDI-udgang" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Brug ikke Generel MIDI musik" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Brug fųrste tilgęngelig enhed" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont er understųttet af nogle lydkort, FluidSynth og Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Blandet AdLib/MIDI tilstand" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Brug både MIDI og AdLib lyd generering" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI lydstyrke:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth indstillinger" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 enhed:" @@ -992,95 +988,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Tale lydstyrke:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth indstillinger" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Tema sti:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Tema sti:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Angiver sti til ekstra data brugt af alle spil eller ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugin sti:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugin sti:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Andet" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI renderer:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Auto gemme:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Auto gemme:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Taster" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Sprog:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Sprog for brugerfladen i ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du skal genstarte ScummVM fųr dine ęndringer har effekt." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Der kan ikke skrives til det valgte bibliotek. Vęlg venligst et andet." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Vęlg bibliotek for GUI temaer" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Vęlg bibliotek for ekstra filer" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Vęlg bibliotek for plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1097,65 +1097,65 @@ msgstr "# nęste" msgid "add" msgstr "tilfųj" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Slet tegn" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Prę" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Num" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Optag eller Afspil Gameplay" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Slet" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Optag" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Afspil" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Ret" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Forfatter: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Noter: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Vil du virkelig slette denne optagelse?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Ukendt forfatter" @@ -1219,7 +1219,7 @@ msgstr "Opret en ny gemmer" msgid "Name: " msgstr "Navn:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Indtast en beskrivelse af plads %d:" @@ -1228,28 +1228,28 @@ msgstr "Indtast en beskrivelse af plads %d:" msgid "Select a Theme" msgstr "Vęlg et tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Deaktiveret GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktiveret GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standard renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Antialias renderer" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Antialias" @@ -1274,39 +1274,39 @@ msgstr "Sųg efter opdateringer..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Slet vęrdi" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motor understųtter ikke fejlfindingsniveau '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Spring over" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Spring linje over" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Fejl ved kųrsel af spil:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikke finde nogen motor istand til at afvikle det valgte spil" @@ -1465,15 +1465,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~R~etur til oversigt" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Gemmer:" @@ -1482,16 +1482,16 @@ msgstr "Gemmer:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Gem" @@ -1515,12 +1515,12 @@ msgstr "" "oplysninger, og for at få instruktioner om, hvordan man får yderligere hjęlp." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~F~ortryd" @@ -1596,7 +1596,7 @@ msgstr "" msgid "Start anyway" msgstr "Start alligevel" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib emulator" @@ -1712,7 +1712,7 @@ msgstr "Vil du virkelig afslutte?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Afslut" @@ -1861,7 +1861,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~L~uk" @@ -2354,20 +2354,38 @@ msgstr "" "Glem ikke at tildele en tast til 'Skjul vęrktųjslinje' handling for at se " "hele oversigten" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Sųg efter opdateringer..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Farveblind-tilstand" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Vis labels på genstande" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Brug original gem/indlęs skęrme" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Brug de originale gem/indlęs skęrme, istedet for dem fra ScummVM" @@ -2414,27 +2432,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Gendan spil:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Gendan" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2445,7 +2463,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2456,7 +2474,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2467,7 +2485,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Filmsekvens fil '%s' ikke fundet!" @@ -2498,20 +2516,20 @@ msgstr "" "Tryk på OK for at konvertere dem nu, ellers vil du blive spurgt igen, nęste " "gang du starter spillet.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Brug lys palet tilstand" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Vis grafik ved hjęlp af spillets lyse palette" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Mislykkedes at indlęse spil tilstand fra fil." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Mislykkedes at gemme spil tilstand til fil." @@ -2528,7 +2546,7 @@ msgstr "Hurtig film hastighed" msgid "Play movies at an increased speed" msgstr "Afspil film med forhųjet hastighed" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Mislykkedes at gemme spil" @@ -2739,25 +2757,25 @@ msgstr "Hoved~m~enu" msgid "~W~ater Effect Enabled" msgstr "~V~andeffekter aktiveret" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Spring \"Hall of Records\" storyboard scener over" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Giver spilleren mulighed for at springe \"Hall of Records\" storyboard " "scener over" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Skalér skabelsen af videoerne til fuld skęrm" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Skalér skabelsen af videoerne, så de fylder hele skęrmen" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2766,23 +2784,23 @@ msgstr "" "Kan ikke gemme spil på plads %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Indlęs fil" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Indlęser spil..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Gem fil" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Gemmer spil..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2798,11 +2816,11 @@ msgstr "" "\n" "Tryk på OK for at konvertere dem nu, ellers vil du blive spurgt nęste gang.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM konverterede med succes alle dine gemmer." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2923,128 +2941,128 @@ msgid "" msgstr "" "Brug det alternative sęt af sųlv markųrer, i stedet for de normale gyldne" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Vis labels på genstande" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Indsęt Disk %c og Tryk på knappen for at fortsętte." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Kunne ikke finde %s, (%c%d) Tryk på knappen." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Fejl ved lęsning af disk %c, (%c%d) Tryk på knappen." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spil sat på pause. Tryk MELLEMRUM for at fortsętte." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Er du sikker på at du vil genstarte? (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Er du sikker på at du vil afslutte? (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spil" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Indsęt gem/indlęs spil disk" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Du skal indtaste et name" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Spillet blev ikke gemt (disk fuld?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Spillet blev IKKE indlęst" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Gemmer '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Indlęser '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Navngiv din GEMMER" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Vęlg et spil at indlęse" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Spil titel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "Fo~r~rige" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~ęste" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Kun tale" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Tale og Undertekster" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Kun undertekster" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tale & Tekst" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Vęlg et Fęrdighedsniveau." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Se din Loom(TM) manual for hjęlp." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Tręning" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Ekspert" @@ -3581,23 +3599,23 @@ msgstr "Flyv til hųjre" msgid "Fly to lower right" msgstr "Flyv nederst til hųjre" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Jęvn bevęgelse til" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Jęvn bevęgelse fra" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musik lydstyrke: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Tekst hastighed: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3606,7 +3624,7 @@ msgstr "" "Indbygget MIDI understųttelse kręver Roland opgradering fra LucasArts,\n" "men %s mangler. Bruger AdLib i stedet." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3795,12 +3813,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Du mangler filen 'teenagent.dat'. Hent den på ScummVM hjemmesiden" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/de_DE.po b/po/de_DE.po index 65765ecca0..1f6660093d 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2016-04-07 08:55+0200\n" -"PO-Revision-Date: 2016-05-01 15:45+0200\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" +"PO-Revision-Date: 2016-06-07 20:00+0200\n" "Last-Translator: Lothar Serra Mari <rootfather@scummvm.org>\n" "Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari " "<rootfather@scummvm.org>\n" @@ -55,16 +55,16 @@ msgstr "Pfad hoch" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Abbrechen" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Möchten Sie diese Datei wirklich überschreiben?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Dreieck" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Sonstiges" @@ -206,14 +206,14 @@ msgstr "Zurücksetzen" msgid "Reset all FluidSynth settings to their default values." msgstr "Setzt alle FluidSynth-Einstellungen auf ihre Standard-Werte zurück." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -243,15 +243,15 @@ msgstr "Schließen" msgid "Mouse click" msgstr "Mausklick" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Tastatur anzeigen" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Tasten neu zuweisen" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Vollbild umschalten" @@ -328,7 +328,7 @@ msgstr "" "Spiels in eine deutsche verwandeln." #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<Standard>" @@ -398,219 +398,219 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Globale Lautstärke-Einstellungen übergehen" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Globale MIDI-Einstellungen übergehen" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Globale MIDI-Einstellungen übergehen" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Globale MT-32-Einstellungen übergehen" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Globale MT-32-Einstellungen übergehen" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Pfade" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Pfade" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Spielpfad:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Spielpfad:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Extras:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Legt das Verzeichnis für zusätzliche Spieldateien fest." -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Extras:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Spielstände:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Legt fest, wo die Spielstände gespeichert werden." -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Spielstände:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Keiner" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "SoundFont auswählen" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Verzeichnis mit Spieldateien auswählen" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Verzeichnis mit zusätzlichen Dateien auswählen" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Verzeichnis für Spielstände auswählen" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Diese Spielkennung ist schon vergeben. Bitte eine andere wählen." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~B~eenden" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "ScummVM beenden" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Übe~r~" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Über ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~ptionen" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Globale ScummVM-Einstellungen ändern" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tarten" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Ausgewähltes Spiel starten" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~L~aden..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Spielstand für ausgewähltes Spiel laden" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "Spiel ~h~inzufügen" -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "" "Umschalttaste (Shift) gedrückt halten, um Verzeichnisse nach Spielen zu " "durchsuchen" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "Spielo~p~tionen" -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Spieloptionen ändern" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "Spiel ~e~ntfernen" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Spiel aus der Liste entfernen. Die Spieldateien bleiben erhalten." -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~H~inzufügen" -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "Spielo~p~tion" -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~E~ntfernen" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "In Spieleliste suchen" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Suchen:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Spiel laden:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Laden" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -618,40 +618,40 @@ msgstr "" "Möchten Sie wirklich den PC nach Spielen durchsuchen? Möglicherweise wird " "dabei eine größere Menge an Spielen hinzugefügt." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM konnte das gewählte Verzeichnis nicht öffnen!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM konnte im gewählten Verzeichnis kein Spiel finden!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Spiel auswählen:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Möchten Sie wirklich diese Spielkonfiguration entfernen?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Möchten Sie einen Spielstand laden?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "" "Für dieses Spiel wird das Laden aus der Spieleliste heraus nicht unterstützt." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM konnte keine Engine finden, um das Spiel zu starten!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Durchsuchen" -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Aufzeichnen" @@ -696,7 +696,7 @@ msgstr "Schneller Modus" #: gui/options.cpp:87 common/updates.cpp:56 msgid "Never" -msgstr "Niemals" +msgstr "nie" #: gui/options.cpp:87 msgid "every 5 mins" @@ -734,95 +734,95 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Kein SoundFont" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Folgende Grafikoptionen konnten nicht geändert werden:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "Grafikmodus konnte nicht geändert werden." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "Vollbildeinstellung konnte nicht geändert werden." -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "" "Einstellung für Seitenverhältniskorrektur konnte nicht geändert werden." -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafikmodus:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Render-Modus:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "" "Spezielle Farbmischungsmethoden werden von manchen Spielen unterstützt." -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Vollbildmodus" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Seitenverhältnis korrigieren" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Seitenverhältnis für Spiele mit der Auflösung 320x200 korrigieren" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Bevorzugtes Gerät:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musikgerät:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Legt das bevorzugte Tonwiedergabe-Gerät oder den Soundkarten-Emulator fest." -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Legt das Musikwiedergabe-Gerät oder den Soundkarten-Emulator fest." -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Standard-Gerät:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musikgerät:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib-Emulator" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib wird für die Musik in vielen Spielen verwendet." -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Ausgabefrequenz:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -830,53 +830,49 @@ msgstr "" "Höhere Werte bewirken eine bessere Soundqualität, werden aber möglicherweise " "nicht von jeder Soundkarte unterstützt." -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM-Gerät:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "" "Legt das standardmäßige Musikwiedergabe-Gerät für General-MIDI-Ausgabe fest." -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Keine General-MIDI-Musik" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Erstes verfügbares Gerät" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont wird von einigen Soundkarten, FluidSynth und Timidity unterstützt." -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Gemischter AdLib/MIDI-Modus" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Kombiniert MIDI-Musik mit AdLib-Soundeffekten" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI-Lautstärke:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth-Einstellungen" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32-Gerät:" @@ -1002,100 +998,104 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Sprachlautst.:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth-Einstellungen" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Themen:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Themen:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Legt das Verzeichnis für zusätzliche Spieldateien für alle Spiele in ScummVM " "fest." -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Andere" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Thema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI-Renderer:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autom. Speichern:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autospeichern:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Tasten" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Sprache:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Sprache der ScummVM-Oberfläche" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "Updates suchen:" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "Wie oft nach Aktualisierungen von ScummVM suchen?" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "Jetzt prüfen" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Sie müssen ScummVM neu starten, damit die Änderungen wirksam werden." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "In das gewählte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes " "auswählen." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Verzeichnis für Oberflächen-Themen" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Verzeichnis für zusätzliche Dateien auswählen" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Verzeichnis für Erweiterungen auswählen" # Nicht übersetzen, da diese Nachricht nur für nicht-lateinische Sprachen relevant ist. -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1113,65 +1113,65 @@ msgstr "# nächste" msgid "add" msgstr "hinzufügen" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Löschen" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Vorschau" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Zahlen" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* ABC" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Spiel aufzeichnen/wiedergeben" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Löschen" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Aufnahme" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Wiedergabe" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Bearbeiten" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Autor:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notizen:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Möchten Sie diese Aufnahme wirklich löschen?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Unbekannter Autor" @@ -1235,7 +1235,7 @@ msgstr "Erstellt einen neuen Spielstand." msgid "Name: " msgstr "Name: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Geben Sie eine Beschreibung für Speicherplatz %d ein:" @@ -1244,28 +1244,28 @@ msgstr "Geben Sie eine Beschreibung für Speicherplatz %d ein:" msgid "Select a Theme" msgstr "Thema auswählen" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX ausgeschaltet" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX ausgeschaltet" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standard-Renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Kantenglättung" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Kantenglättung" @@ -1283,7 +1283,9 @@ msgstr "" #: gui/updates-dialog.cpp:55 msgid "(You can always enable it in the options dialog on the Misc tab)" -msgstr "(Sie können diese auch jederzeit im Options-Dialog unter dem Reiter \"Sonstiges\" aktivieren)" +msgstr "" +"(Sie können diese auch jederzeit im Options-Dialog unter dem Reiter " +"\"Sonstiges\" aktivieren)" #: gui/updates-dialog.cpp:92 msgid "Check for updates automatically" @@ -1293,39 +1295,39 @@ msgstr "Automatisch nach Aktualisierungen suchen" msgid "Proceed" msgstr "Fortfahren" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Wert löschen" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Engine unterstützt den Debug-Level \"%s\" nicht." -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menü" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Überspringen" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Zeile überspringen" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Fehler beim Ausführen des Spiels:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Konnte keine Spiel-Engine finden, die dieses Spiel starten kann." @@ -1486,15 +1488,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Zur Spiele~l~iste" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Speichern:" @@ -1503,16 +1505,16 @@ msgstr "Speichern:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Speichern" @@ -1535,12 +1537,12 @@ msgstr "" "Datei für grundlegende Informationen und Anweisungen zu weiterer Hilfe." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~bbrechen" @@ -1619,7 +1621,7 @@ msgstr "" msgid "Start anyway" msgstr "Trotzdem starten" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib-Emulator" @@ -1736,7 +1738,7 @@ msgstr "Möchten Sie wirklich beenden?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Beenden" @@ -1885,7 +1887,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~S~chließen" @@ -2379,20 +2381,36 @@ msgstr "" "Vergessen Sie nicht, der Aktion \"Werkzeugleiste verbergen\" eine Taste " "zuzuweisen, um das ganze Inventar sehen zu können." -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Suche nach Aktualisierungen..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +msgid "Color mode" +msgstr "Farbmodus einschalten" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "Farbgrafik verwenden" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "Abtastzeilen/Scanlines" + +#: engines/adl/detection.cpp:64 +msgid "Show scanlines" +msgstr "Abtastzeilen (Scanlines) anzeigen" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Originale Spielstand-Menüs" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2443,27 +2461,27 @@ msgstr "" "Zeige eine Fenster mit einer Kommandozeile und pausiere das Spiel (wie in " "SCI) anstelle einer Eingabe in Echtzeit." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Spiel laden:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Laden" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2474,7 +2492,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2485,7 +2503,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2496,7 +2514,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Zwischensequenz \"%s\" nicht gefunden!" @@ -2527,20 +2545,20 @@ msgstr "" "Klicken Sie auf OK, um diese jetzt umzuwandeln, sonst werden Sie erneut " "gefragt, wenn Sie nächstes Mal dieses Spiel starten.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Modus für helle Palette verwenden" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Zeigt Grafiken über helle Spielpalette an." -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Konnte Spielstand aus Datei nicht laden." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Konnte Spielstand nicht in Datei speichern." @@ -2557,7 +2575,7 @@ msgstr "Schnelles Film-Tempo" msgid "Play movies at an increased speed" msgstr "Spielt Filme mit erhöhter Geschwindigkeit ab." -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Konnte Spielstand nicht speichern." @@ -2772,26 +2790,26 @@ msgstr "Haupt~m~enü" msgid "~W~ater Effect Enabled" msgstr "~W~assereffekt aktiviert" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Szenenbuch-Sequenz in der Chronikhalle überspringen" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Ermöglicht dem Spieler, die Szenenbuch-Sequenz in der Chronikhalle zu " "überspringen." -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Making-Of-Videos auf Vollbild skalieren" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" "Skaliert die Making-Of-Videos, sodass sie den gesamten Bildschirm ausfüllen." -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2800,23 +2818,23 @@ msgstr "" "Kann Spiel nicht speichern auf Speicherplatz %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Datei laden" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Spiel wird geladen..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Datei speichern" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Spiel wird gespeichert..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2833,11 +2851,11 @@ msgstr "" "Klicken Sie auf OK, um diese jetzt umzuwandeln, sonst werden Sie erneut " "gefragt, wenn Sie nächstes Mal dieses Spiel starten.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM hat alle Speicherstände erfolgreich umgewandelt." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2961,127 +2979,127 @@ msgstr "" "Verwendet alternativen Satz silberner Mauszeiger anstatt der normalen " "goldenen." -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "Objektzeile zeigen" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "Objektnamen und Verben am unteren Bildrand anzeigen" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Bitte Disk %c einlegen und Taste drücken" -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Kann %s (%c%d) nicht finden, bitte Taste drücken." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Fehler beim Lesen von Disk %c (%c%d), bitte Taste drücken." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spielpause. Zum Weiterspielen Leertaste drücken." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Möchten Sie wirklich neu starten? (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Möchten Sie wirklich beenden? (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spielen" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Legen Sie eine Spielstand-Disk ein." -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Sie müssen eine Bezeichnung eingeben." -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Spiel wurde NICHT gespeichert. (Datenträger voll?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Spiel wurde NICHT geladen." -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Speichere \"%s\"" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Lade \"%s\"" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Name für Spielstand eingeben" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Spielstand zum LADEN auswählen" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Spieltitel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~Z~urück" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~W~eiter" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Nur Sprache" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Sprachausgabe und Untertitel" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Nur Untertitel" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Sprache & Text" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Wähle einen Schwierigkeitsgrad." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Für Hilfe schauen Sie ins Loom-Handbuch." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Anfänger" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Experte" @@ -3618,23 +3636,23 @@ msgstr "Nach rechts fliegen" msgid "Fly to lower right" msgstr "Nach unten rechts fliegen" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Blättern einschalten" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Blättern ausschalten" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musiklautstärke:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Untertitel-Tempo:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3644,7 +3662,7 @@ msgstr "" "Roland-Upgrade von LucasArts, aber %s\n" "fehlt. Stattdessen wird AdLib verwendet." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3843,14 +3861,14 @@ msgstr "" "Verwende englische Sprachausgabe anstelle der deutschen, wenn eine andere " "Sprache als Deutsch verwendet wird." -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Ihnen fehlt die Datei \"teenagent.dat\". Laden Sie sich diese von der " "ScummVM-Website unter http://www.scummvm.org herunter." -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/es_ES.po b/po/es_ES.po index 784132da56..af10c6df4e 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-24 18:01+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -53,16 +53,16 @@ msgstr "Arriba" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Cancelar" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "æSeguro que quieres sobrescribir esta partida?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "Sķ" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "Seno" msgid "Triangle" msgstr "Triįngulo" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Otras" @@ -204,14 +204,14 @@ msgstr "Reiniciar" msgid "Reset all FluidSynth settings to their default values." msgstr "Volver a los valores por defecto de las opciones de FluidSynth" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -241,15 +241,15 @@ msgstr "Cerrar" msgid "Mouse click" msgstr "Clic de ratón" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Mostrar el teclado" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Asignar teclas" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Activar/Desactivar pantalla completa" @@ -326,7 +326,7 @@ msgstr "" "juego" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<por defecto>" @@ -396,217 +396,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Opciones de volumen especķficas" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Ignorar opciones de MIDI generales" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Opciones de MIDI especķficas" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Ignorar opciones de MT-32 generales" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Opciones de MT-32 especķficas" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Rutas" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Rutas" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Juego:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Juego:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Adicional:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Especifica un directorio para datos adicionales del juego" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Adicional:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Partidas:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Especifica dónde guardar tus partidas" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Partidas:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ninguna" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Por defecto" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Selecciona un SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Selecciona el directorio del juego" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Selecciona el directorio adicional" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Selecciona el directorio para partidas guardadas" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Esta ID ya estį siendo usada. Por favor, elige otra." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~S~alir" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Salir de ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Acerca ~d~e" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Acerca de ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pciones..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Cambiar opciones generales de ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~J~ugar" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Jugar al juego seleccionado" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~argar..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Cargar partida del juego seleccionado" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~ńadir juego..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Mantén pulsado Mayśs para ańadir varios juegos" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~ditar juego..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Cambiar opciones de juego" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "E~l~iminar juego" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Eliminar el juego de la lista. Los archivos no se borran" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~ńadir..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditar..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "E~l~iminar" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Buscar en la lista de juegos" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Buscar:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Cargar juego:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Cargar" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -614,40 +614,40 @@ msgstr "" "æSeguro que quieres ejecutar la detección masiva? Puede que se ańada un gran " "nśmero de juegos." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "”ScummVM no ha podido abrir el directorio!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "”ScummVM no ha encontrado ningśn juego en el directorio!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Elige el juego:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "æSeguro que quieres eliminar la configuración de este juego?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "æQuieres cargar la partida guardada?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Este juego no permite cargar partidas desde el lanzador." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "”ScummVM no ha podido encontrar ningśn motor capaz de ejecutar el juego!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Ańadir varios..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Grabar..." @@ -730,95 +730,95 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ninguno" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Fallo al aplicar algunos cambios en las opciones grįficas:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "no se ha podido cambiar el modo de vķdeo." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "no se ha podido cambiar el ajuste de pantalla completa" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "no se ha podido cambiar el ajuste de corrección de aspecto" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Modo grįfico:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderizado:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Modos especiales de difuminado compatibles con algunos juegos" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Pantalla completa" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Corrección de aspecto" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregir relación de aspecto en juegos 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Disp. preferido:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Disp. de mśsica:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Especifica qué dispositivo de sonido o emulador de tarjeta de sonido " "prefieres" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "" "Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferido:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Disp. de mśsica:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emul. de AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib se usa para la mśsica en muchos juegos" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Frec. de salida:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -826,53 +826,49 @@ msgstr "" "Los valores mįs altos ofrecen mayor calidad, pero puede que tu tarjeta de " "sonido no sea compatible" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Especifica el dispositivo de salida General MIDI por defecto" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "No usar mśsica General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Utilizar el primer dispositivo disponible" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont es compatible con algunas tarjetas de sonido, con FluidSynth y con " "Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Modo AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Usar tanto MIDI como AdLib en la generación de sonido" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Ganancia MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Opciones de FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Disp. MT-32:" @@ -998,96 +994,100 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Voces:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Opciones de FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Temas:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Temas:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Especifica el directorio adicional usado por los juegos y ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Otras" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Interfaz:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autoguardado:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autoguardado:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Idioma:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfaz de ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Tienes que reiniciar ScummVM para aplicar los cambios." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "No se puede escribir en el directorio elegido. Por favor, selecciona otro." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Selecciona el directorio de temas" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Selecciona el directorio adicional" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Selecciona el directorio de plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1104,65 +1104,65 @@ msgstr "# siguiente" msgid "add" msgstr "ańadir" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Borrar personaje" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Num" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Grabar o reproducir vķdeos" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Borrar" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Grabar" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Reproducción" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Editar" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Autor:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notas:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "æSeguro que quieres borrar esta grabación?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Autor desconocido" @@ -1226,7 +1226,7 @@ msgstr "Guarda una nueva partida" msgid "Name: " msgstr "Nombre:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Introduce una descripción para la ranura %d:" @@ -1235,28 +1235,28 @@ msgstr "Introduce una descripción para la ranura %d:" msgid "Select a Theme" msgstr "Selecciona un tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Grįf. desactivados" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Grįf. desactivados" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Estįndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Estįndar" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Suavizado" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Suavizado" @@ -1281,39 +1281,39 @@ msgstr "Buscar actualizaciones..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Eliminar valor" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "El motor no es compatible con el nivel de debug '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menś" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Saltar" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausar" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Saltar frase" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Error al ejecutar el juego:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "No se ha podido encontrar ningśn motor capaz de ejecutar el juego" @@ -1471,15 +1471,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~olver al lanzador" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Guardar partida" @@ -1488,16 +1488,16 @@ msgstr "Guardar partida" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Guardar" @@ -1522,12 +1522,12 @@ msgstr "" "obtener mįs ayuda." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~S~ķ" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~C~ancelar" @@ -1603,7 +1603,7 @@ msgstr "" msgid "Start anyway" msgstr "Jugar aun asķ" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulador de AdLib" @@ -1720,7 +1720,7 @@ msgstr "æSeguro que quieres salir?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Salir" @@ -1869,7 +1869,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "Cerra~r~" @@ -2362,20 +2362,38 @@ msgstr "" "No olvides asignar una tecla a la acción 'Ocultar barra de tareas' para ver " "todo el inventario" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Buscar actualizaciones..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Modo para daltónicos" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Mostrar etiquetas de objetos" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Usar pantallas de guardar/cargar originales" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2423,27 +2441,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Cargar partida:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Cargar" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2454,7 +2472,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2465,7 +2483,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2476,7 +2494,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "No se ha encontrado el vķdeo '%s'" @@ -2507,20 +2525,20 @@ msgstr "" "Pulsa Aceptar para actualizarlas, si no lo haces este mensaje volverį a " "aparecer la próxima vez.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Usar paleta original" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Utilizar los niveles de brillo originales del juego" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Fallo al cargar el estado del juego desde el archivo." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Fallo al guardar el estado del juego en el archivo." @@ -2537,7 +2555,7 @@ msgstr "Velocidad rįpida de vķdeos" msgid "Play movies at an increased speed" msgstr "Reproducir vķdeos a mayor velocidad" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Fallo al guardar la partida" @@ -2747,24 +2765,24 @@ msgstr "~M~enś principal" msgid "~W~ater Effect Enabled" msgstr "Efecto ag~u~a activado" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Saltar las escenas del salón de registros" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Permitir al jugador saltarse las escenas storyboard del salón de registros" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Redimensionar vķdeos a pantalla completa" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Redimensionar los vķdeos para que utilicen toda la pantalla" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2773,23 +2791,23 @@ msgstr "" "No se puede guardar en la ranura %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Cargar partida" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Cargando partida..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Guardar partida" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Guardando partida..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2806,11 +2824,11 @@ msgstr "" "Pulsa Aceptar para actualizarlos, si no lo haces este mensaje volverį a " "aparecer la próxima vez.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ha convertido todas las partidas guardadas correctamente." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2933,128 +2951,128 @@ msgid "" msgstr "" "Usar los cursores plateados alternativos, en vez de los dorados normales" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Mostrar etiquetas de objetos" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Inserta el disco %c y pulsa un botón para continuar." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "No se ha podido encontrar %s, (%c%d) Pulsa un botón." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Error leyendo el disco %c, (%c%d) Pulsa un botón." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Juego pausado. Pulsa Espacio para continuar." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "æSeguro que quieres reiniciar? (S/N)S" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "æSeguro que quieres salir? (S/N)S" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jugar" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Inserta el disco de las partidas guardadas" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Tienes que introducir un nombre" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "La partida no se ha guardado (ædisco lleno?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "La partida no se ha cargado" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Guardando '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Cargando '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Pon nombre a tu partida" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Selecciona un juego para cargar" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Tķtulo del juego)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~A~nterior" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "Si~g~uiente" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Solo voces" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Voces y subtķtulos" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Solo subtķtulos" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voces y sub." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Selecciona un nivel de dificultad." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulta el manual para obtener mįs información." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Prįctica" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Experto" @@ -3591,23 +3609,23 @@ msgstr "Volar a la derecha" msgid "Fly to lower right" msgstr "Volar abajo y a la derecha" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Desplazamiento mediante toques" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Desplazamiento normal" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Volumen de la mśsica:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Vel. de subtķtulos:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3616,7 +3634,7 @@ msgstr "" "El soporte MIDI nativo requiere la actualización Roland de LucasArts,\n" "pero %s no estį disponible. Se usarį AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3811,14 +3829,14 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "No se encuentra el archivo 'teenagent.dat'. Descįrgalo de la pįgina de " "ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" @@ -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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\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" @@ -52,16 +52,16 @@ msgstr "Joan gora" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Utzi" @@ -100,7 +100,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Gainidatzi fitxategia?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -110,7 +110,7 @@ msgid "Yes" msgstr "Bai" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -171,7 +171,7 @@ msgstr "Sinua" msgid "Triangle" msgstr "Triangelua" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Beste" @@ -203,14 +203,14 @@ msgstr "Berrezarri" msgid "Reset all FluidSynth settings to their default values." msgstr "Berrazarri FluidSynth-en ezarpen guztiak bere balio lehenetsietara" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -238,15 +238,15 @@ msgstr "Itxi" msgid "Mouse click" msgstr "Sagu-klika" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Erakutsi teklatua" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Esleitu teklak" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Txandakatu pantaila osoa" @@ -322,7 +322,7 @@ msgstr "" "Jokoaren hizkuntza. Honek ez du zure ingelesezko bertsioa frantsesera pasako" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<lehenetsia>" @@ -392,217 +392,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Bolumen ezarpen globalak baliogabetu" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "MIDI ezarpen globalak baliogabetu" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "MIDI ezarpen globalak baliogabetu" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "MT-32 ezarpen globalak baliogabetu" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "MT-32 ezarpen globalak baliogabetu" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Bide-izenak" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Bideak" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Jokoa:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Jokoa:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Gehigarriak:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Jokoak erabiltzen duen datu gehigarrien bide-izena" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Gehigarria:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Partida gordeak:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Zure gordetako partidak non gordeko diren zehazten du" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Partida gordeak:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Bat ere ez" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Lehenetsia" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "SoundFont-a aukeratu" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Jokoaren direktorioa aukeratu" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Direktorio gehigarria aukeratu" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Partida gordeen direktorioa aukeratu" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "ID hau jada erabilia izaten ari da. Mesedez, aukeratu beste bat." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~I~rten" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Irten ScummVM-tik" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Ho~n~i buruz..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "ScummVM-i buruz" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~A~ukerak" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "ScummVM-ren aukera globalak aldatu" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~H~asi" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Aukeraturiko jokora jolastu" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~K~argatu" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Aukeraturiko jokorako partida gordea kargatu" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~G~ehitu..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Shift mantendu sakaturik hainbat joko gehitzeko" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~ditatu..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Aldatu jokoaren aukerak" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~K~endu jokoa" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Jokoa zerrendatik kendu. Jokoaren fitxategiak ez dira ezabatzen" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~G~ehitu..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditatu..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~K~endu" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Bilatu joko-zerrendan" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Bilatu:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Jokoa kargatu:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Kargatu" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -610,41 +610,41 @@ msgstr "" "Joko detektatzaile masiboa exekutatu nahi al duzu? Honek joko kantitate " "handia gehitu dezake." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM-k ezin izan du zehazturiko direktorioa ireki!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM-k ezin izan du jokorik aurkitu zehazturiko direktorioan!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Jokoa aukeratu:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Benetan ezabatu nahi duzu joko-konfigurazio hau?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Gordetako jokoa kargatu?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Joko honek ez du uzten partidak abiarazletik kargatzen." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM-k ezin izan du aukeraturiko jokoa exekutatzeko gai den motorerik " "aurkitu!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Gehitu hainbat..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Grabatu..." @@ -729,92 +729,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Bat ere ez" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Ezin izan da grafikoen aukeretako batzuk aplikatu:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "ezin izan da bideo-modua aldatu." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "ezin izan da pantaila-osoaren ezarpena aldatu" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "formatu-ratioaren ezarpena ezin izan da aldatu" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Modu grafikoa:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderizazioa:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Joko batzuk onarturiko lausotze-modu bereziak" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Pantaila osoa" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Formatu-ratioaren zuzenketa" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "320x200 jokoentzako formatu-ratioa zuzendu" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Gogoko gailua:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musika gailua:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Gogoko soinu txartel edo emuladorea zein den ezartzen du" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Irteerako soinu txartel edo emuladorea ezartzen du" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Gail. gogokoa:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musika gailua:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emuladorea:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib musikarako hainbat jokotan erabiltzen da" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Irteera maizt.:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -822,53 +822,49 @@ msgstr "" "Balio altuagoek soinu kalitate hobea ezartzen dute, baina baliteke zure " "soinu-txartela bateragarria ez izatea" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM gailua:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Defektuzko soinu txartela ezartzen du General MIDI irteerarako" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Ez erabili General MIDI musika" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Erabilgarri dagoen lehen gailua erabili" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "Zenbait soinu txartel bateragarriak dira SoundFont-ekin, FluidSynth eta " "Timidity besteak beste" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "AdLib/MIDI modua" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Soinua sortzerakoan MIDI eta AdLib erabili" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI irabazia:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth Ezarpenak" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 gailua:" @@ -994,96 +990,100 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Ahotsak:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth Ezarpenak" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Gaiak:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Gaiak:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Joko guztiek edo ScummVM-k darabilten datu gehigarrien bide-izena ezartzen du" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Pluginak:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginak:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Beste" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Gaia:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Interfazea:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autogordetzea:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autogordetzea:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Teklak" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Hizkuntza" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "ScummVM interfazearen hizkuntza" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "ScummVM berrabiarazi behar duzu aldaketak indarrean jartzeko" -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Aukeraturiko direktorioan ezin da idatzi. Mesedez, aukeratu beste bat." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Gaien direktorioa aukeratu" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Fitxategi gehigarrien direktorioa aukeratu" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Pluginen direktorioa aukeratu" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1100,65 +1100,65 @@ msgstr "# hurrengoa" msgid "add" msgstr "gehitu" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Ezabatu karakterea" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Zenb" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Grabatu edo erreproduzitu jokoko akzioa" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Ezabatu" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Grabatu" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Erreproduzitu" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Editatu" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Egilea: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Oharrak: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Ezabatu grabazio hau?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Egile ezezaguna" @@ -1222,7 +1222,7 @@ msgstr "Sortu joko gorde berria" msgid "Name: " msgstr "Izena: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Sartu deskribapena %d zirrikiturako: " @@ -1231,28 +1231,28 @@ msgstr "Sartu deskribapena %d zirrikiturako: " msgid "Select a Theme" msgstr "Gaia aukeratu" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX desgaituta" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desgaituta" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Errendatzaile estandarra" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Estandarra" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Errendatzaile lausotua" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Lausotua" @@ -1277,39 +1277,39 @@ msgstr "Eguneraketak bilatzen..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Balioa kendu:" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motoreak ez da '%s' debug mailarekin bateragarria" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menua" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Saltatu" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Gelditu" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Lerroa saltatu" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Jokoa exekutatzean errorea:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Ezin izan da aukeraturiko jokoa exekutatzeko gai den motorerik aurkitu" @@ -1467,15 +1467,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "It~z~uli abiarazlera" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Gorde jokoa:" @@ -1484,16 +1484,16 @@ msgstr "Gorde jokoa:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Gorde" @@ -1516,12 +1516,12 @@ msgstr "" "informaziorako eta laguntza gehiago nola jaso jakiteko." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~A~dos" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~U~tzi" @@ -1596,7 +1596,7 @@ msgstr "" msgid "Start anyway" msgstr "Jolastu berdin-berdin" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib emuladorea" @@ -1713,7 +1713,7 @@ msgstr "Benetan irten?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Irten" @@ -1862,7 +1862,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~I~txi" @@ -2355,20 +2355,38 @@ msgstr "" "Ez ahaztu 'tresna-barra ezkutatu' ekintza tekla bati esleitzea inbentario " "osoa ikusteko" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Eguneraketak bilatzen..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Daltonikoentzako modua" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Erakutsi objektuen etiketak" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Erabili jatorrizko gorde/kargatu pantailak" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2416,27 +2434,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Jokoa kargatu:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Kargatu" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2447,7 +2465,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2458,7 +2476,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2469,7 +2487,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "'%s' bideo fitxategia ez da aurkitu!" @@ -2500,20 +2518,20 @@ msgstr "" "Sakatu Ados orain konbertitzeko, bestela berriz galdetuko dizut jokoa berriz " "martxan jartzen duzunean.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Erabili paleta argia" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Erakutsi grafikoak jokoaren paleta argia erabilita" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Ezin izan da fitxategitik jokoa kargatu." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Ezin izan da jokoa fitxategira gorde." @@ -2530,7 +2548,7 @@ msgstr "Bideo abiadura azkarra" msgid "Play movies at an increased speed" msgstr "Erreproduzitu bidoeak abiadura handiagoan" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Ezin izan da jokoa gorde" @@ -2740,24 +2758,24 @@ msgstr "Menu ~n~agusia" msgid "~W~ater Effect Enabled" msgstr "~U~r-efektua gaituta" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Saltatu Hall of Records-eko eszenak" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Erabiltzaileari Halls of Records-eko eszenak ez ikusteko aukera ematen dio" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Eskalatu bideoen egitea pantaila osora" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Eskalatu bideoak egiteko era, pantaila osoa erabili dezaten" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2766,23 +2784,23 @@ msgstr "" "Ezin da partida gorde %i zirrikituan\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Kargatu fitxategia:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Jokoa kargatzen..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Gorde fitxategia" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Jokoa gordetzen..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2799,11 +2817,11 @@ msgstr "" "Sakatu Ados orain konbertitzeko, bestela berriz galdetuko dizut jokoa berriz " "martxan jartzen duzunean.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM-k ondo konbertitu ditu zure gordetako partida guztiak." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2926,128 +2944,128 @@ msgstr "" "Erabili zilar kolorezko kurtsore multzo alternatiboa, urre-koloreko " "kursorenormalak erabili beharrean" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Erakutsi objektuen etiketak" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "%c diskoa sartu eta sakatu botoi bat jarraitzeko." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Ezin izan da %s, (%c%d) aurkitu. Sakatu botoi bat" -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "%c, (%c%d) diskoa irakurtzean errorea. Sakatu botoia." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Joko pausatua. Sakatu ZURIUNEA jarraitzeko." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Berrabiarazi? (B/E)B" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Irten? (B/E)B" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jolastu" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Sartu partida gordeak dituen diskoa" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Izen bat sartu behar duzu" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Jokoa EZ da gorde (diskoa beteta?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Jokoa EZ da kargatu" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "'%s' gordetzen" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "'%s' kargatzen" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Izendatu zure partida" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Aukeratu kargatzeko partida" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Jokoaren izena)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~A~urrekoa" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~H~urrengoa" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Ahotsak bakarrik" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Ahotsak eta azpitituluak" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Azpitituluak bakarrik" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Ahotsak & azpit." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Zailtasuna aukeratu." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Loom(TM)-ko eskuliburura jo ezazu laguntza lortzeko." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Entrenamendua" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Aditua" @@ -3584,23 +3602,23 @@ msgstr "Eskuinera hegan egin" msgid "Fly to lower right" msgstr "Behera eta eskuinera hegan egin" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Heldutako korritze barra gaituta" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Heldutako korritze barra desgaituta" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musika: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Azpitit. abiadura:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3609,7 +3627,7 @@ msgstr "" "MIDI euskarri natiboak LucasArts-en Roland eguneraketa behar du,\n" "baina %s ez dago eskuragarri. AdLib erabiliko da." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3800,12 +3818,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "'teenagent.dat' fitxategia falta da. Eskuratu ScummVM webgunean" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/fi_FI.po b/po/fi_FI.po index bc0e1a269b..c171819a6b 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2012-12-01 19:37+0200\n" "Last-Translator: Toni Saarela <saarela@gmail.com>\n" "Language-Team: Finnish\n" @@ -54,16 +54,16 @@ msgstr "Siirry ylös" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Peruuta" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Haluatko varmasti poistaa tämän pelitallennuksen?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Kyllä" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -177,7 +177,7 @@ msgstr "" msgid "Triangle" msgstr "" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Muut" @@ -209,14 +209,14 @@ msgstr "" msgid "Reset all FluidSynth settings to their default values." msgstr "" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -245,15 +245,15 @@ msgstr "Sulje" msgid "Mouse click" msgstr "Hiiren klikkaus" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Näytä näppäimistö" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Määritä näppäimet uudelleen" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Kokoruututilan vaihto" @@ -330,7 +330,7 @@ msgstr "" "englanninkieliseksi." #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<oletus>" @@ -400,217 +400,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Ohita globaalit äänenvoimakkuusasetukset" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Ohita globaalit MIDI-asetukset" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Ohita globaalit MIDI-asetukset" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Ohita globaalit MT-32 asetukset" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Ohita globaalit MT-32 asetukset" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Polut" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Polut" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Pelin polku:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Pelin polku:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Lisäkansio:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Määrittää polun lisätiedostoihin joita peli mahdollisesti käyttää" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Lisäkansio:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Tallennuskansio:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Määrittää polun pelitallennuksille" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Tallennuskansio:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ei määritelty" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Oletus" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Valitse äänifontti" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Valitse pelin kansio" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Valitse lisäkansio pelille" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Valitse kansio pelitallennuksille" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Pelin tunnus on jo käytössä. Valitse jokin muu." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~L~opeta" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Lopeta ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Tietoa..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Tietoa ScummVM:stä" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~A~setukset" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Muuta globaaleja ScummVM:n asetuksia" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~P~elaa" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Pelaa valittua peliä" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~L~ataa..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Lataa pelitallennus valitulle pelille" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~L~isää peli..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Pidä Shift-näppäintä pohjassa lisätäksesi useita pelejä kerralla" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "Muokkaa peliä..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Muuta pelin asetuksia" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "Poista peli" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Poista peli listasta. Pelin tiedostoja ei poisteta levyltä" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Lisää peli..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "Muokkaa peliä..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "Poista peli..." -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Etsi peliä listasta" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Etsi:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Lataa peli:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Lataa" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -618,40 +618,40 @@ msgstr "" "Haluatko varmasti lisätä pelejä alihakemistoineen? Tämä voi lisätä suuren " "määrän pelejä." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ei voi avata kyseistä hakemistoa!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ei löytänyt yhtään peliä kyseisestä hakemistosta!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Valitse peli:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Haluatko varmasti poistaa pelin asetuksineen listalta?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 #, fuzzy msgid "Do you want to load saved game?" msgstr "Haluatko tallentaa vai ladata pelin?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Tämä peli ei tue pelitallennuksien lataamista pelin ulkopuolelta." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ei löytänyt pelimoottoria joka tukee valittua peliä!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Lisää monta..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -740,94 +740,94 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ei käytössä" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Joitain grafiikka-asetuksia ei saatu asetettua:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "videotilaa ei voitu vaihtaa." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "kokoruututilaa ei voitu muuttaa" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "kuvasuhdekorjausasetusta ei voitu muuttaa" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafiikkatila:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderöintitila:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Erityiset dithering asetukset joita jotkut pelit tukevat" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Kokoruututila" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Kuvasuhteen korjaus" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Oikea kuvasuhde 320x200 peleille" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Ensisijainen laite:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musiikkilaite:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Määrittää äänilaitteen tai äänikorttiemulaattorin jota ensisijaisesti tulisi " "käyttää" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Määrittää äänikortin tai äänikorttia emuloivan ohjelmiston" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Ensisijainen:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musiikkilaite:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulaattori:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLibiä käytetään monien pelien musiikeissa" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Taajuus:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -835,52 +835,48 @@ msgstr "" "Isommat taajuudet merkitsevät parempaa äänenlaatua, mutta äänikorttisi ei " "ehkä tue niitä." -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM laite:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Määrittää oletuksena käytettävän äänilaitteen General MIDIlle" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Älä käytä General MIDIä musiikissa" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Käytä ensimmäistä laitetta" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "Äänifontti:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "Jotkut äänikortit tukevat äänifonttia (SoundFont), FluidSynth ja Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "Äänifontti:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Yhdistetty AdLib/MIDI tila" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Käytä sekä MIDIä että Adlibiä äänentuotantoon" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDIn äänilisäys:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 laite:" @@ -1003,97 +999,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Puhe:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Teemojen polku:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Teemojen polku:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Määrittää polun, jossa on lisätiedostoja joita ScummVM tai kaikki pelit " "käyttävät" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Pluginien sijainti:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginien sijainti:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Muut" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Teema" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI renderöijä:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autom. tallennus:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autom. tallennus:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Näppäimet" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "ScummVM:n kieli:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "ScummVM käyttöliittymän kieli" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "ScummVM pitää käynnistää uudelleen jotta muutokset tulevat voimaan." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Valittuun hakemistoon ei voi kirjoittaa. Valitse toinen hakemisto." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Valitse hakemisto käyttöliittymän teemoille" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Valitse hakemisto lisätiedostoille" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Valitse hakemisto plugineille" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1110,68 +1110,68 @@ msgstr "" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 #, fuzzy msgid "Delete char" msgstr "Poista" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Poista" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 #, fuzzy msgid "Playback" msgstr "Pelaa" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 #, fuzzy msgid "Do you really want to delete this record?" msgstr "Haluatko varmasti poistaa tämän pelitallennuksen?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 #, fuzzy msgid "Unknown Author" msgstr "Tuntematon virhe" @@ -1236,7 +1236,7 @@ msgstr "Luo uusi pelitallennus" msgid "Name: " msgstr "Nimi: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Anna kuvaus tallennukselle numero %d:" @@ -1245,30 +1245,30 @@ msgstr "Anna kuvaus tallennukselle numero %d:" msgid "Select a Theme" msgstr "Valitse teema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Disabloitu GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Disabloitu GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 #, fuzzy msgid "Standard Renderer" msgstr "Standardirenderöijä (16 bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standardi" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased Renderer" msgstr "Antialiasoitu renderöijä (16 bpp)" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased" msgstr "Antialiasoitu (16 bpp)" @@ -1294,39 +1294,39 @@ msgstr "Tarkista päivitykset..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Tyhjennä arvo" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Pelimoottori ei tue debug tasoa '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Valikko" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Ohita" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Tauko" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Ohita rivi" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Virhe ajettaessa peliä:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Pelimoottoria joka tukisi valittua peliä ei löytynyt" @@ -1486,15 +1486,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Palaa p~e~livalitsimeen" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Tallenna peli:" @@ -1503,16 +1503,16 @@ msgstr "Tallenna peli:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Tallenna" @@ -1535,12 +1535,12 @@ msgstr "" "lisätietoa." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~H~yväksy" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~P~eruuta" @@ -1613,7 +1613,7 @@ msgstr "" msgid "Start anyway" msgstr "Pelaa silti" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib emulaattori" @@ -1731,7 +1731,7 @@ msgstr "Haluatko varmasti lopettaa?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Lopeta" @@ -1883,7 +1883,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~S~ulje" @@ -2380,20 +2380,38 @@ msgstr "" "Muista määritellä näppäin työkalupalkin piilottamiselle, jotta voit nähdä " "koko tavaraluettelon" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Tarkista päivitykset..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Klikkaus moodi" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Näytä esineiden tiedot" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Käytä alkuperäisiä tallenna/lataa valikkoja" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Käytä alkuperäisiä tallenna/lataa valikkoja, ScummVM valikoiden sijaan" @@ -2437,27 +2455,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Lataa pelitallenne:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Lataa tallenne" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2468,7 +2486,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2479,7 +2497,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2490,7 +2508,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Videotiedostoa '%s' ei löytynyt!" @@ -2521,20 +2539,20 @@ msgstr "" "Mikäli et halua muuntaa tiedostoja nyt\n" "ScummVM kysyy asiaa seuraavan kerran kun käynnistät pelin.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Käytä kirkaspalettitilaa" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Näytä grafiikat käyttäen pelin kirkasta palettia" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Pelitallenteen lataaminen tiedostosta epäonnistui." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Pelin tallentaminen tiedostoon epäonnistui." @@ -2552,7 +2570,7 @@ msgstr "Nopea moodi" msgid "Play movies at an increased speed" msgstr "" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Pelin tallentaminen epäonnistui." @@ -2747,23 +2765,23 @@ msgstr "Päävalikko" msgid "~W~ater Effect Enabled" msgstr "Vesiefekti päällä" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2772,25 +2790,25 @@ msgstr "" "Pelin tallennus kohtaan ei onnistunut kohtaan %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Lataa peli:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Ladataan peliä..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Tallenna peli:" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Tallennetaan peliä..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2806,11 +2824,11 @@ msgstr "" "Jos et tee muunnosta nyt, ScummVM kysyy sinulta uudelleen seuraavalla " "kerralla kun käynnistät pelin.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM muunsi kaikki pelitallenteet onnistuneesti" -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2931,130 +2949,130 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Käytä vaihtoehtoisia hopeisia kursoreita normaalien kultaisten sijaan" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Näytä esineiden tiedot" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Lisää levyke %c ja paina jotain nappia jatkaaksesi." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Tiedosto %s, (%c%d) ei löydy. Paina nappia." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Virhe luettaessa levyä %c, (%c%d) Paina jotain nappia." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Pause. Paina välilyöntiä jatkaaksesi." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 #, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Haluatko varmasti aloittaa pelin alusta? (K/E)K" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 #, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Haluatko varmati lopettaa?" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Pelaa" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Laita tallennus/lataus levy asemaan" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Nimi on pakko antaa" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Peliä EI tallennettu (onko levy täysi?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Peliä EI ladattu" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Tallennetaan '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Ladataan '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Nimeä pelitallenteesi" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Valitse ladattava peli" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Pelin nimi" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "E~d~ellinen" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "Se~u~raava" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Vain puhe" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Puhe ja Tekstitys" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Vain tekstitys" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Puhe & teksti" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Valitse taitotasosi." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Lue Loom(TM) ohjekirjaa saadaksesi ohjeita." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Harjoitus" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Ekspertti" @@ -3591,26 +3609,26 @@ msgstr "Lennä oikealle" msgid "Fly to lower right" msgstr "Lennä alas oikealle" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 #, fuzzy msgid "Snap scroll on" msgstr "Pehmeä vieritys" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 #, fuzzy msgid "Music volume: " msgstr "Musiikki:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 #, fuzzy msgid "Subtitle speed: " msgstr "Tekstin nopeus:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3619,7 +3637,7 @@ msgstr "" "Suora MIDI tuki vaatii Roland päivityksen LucasArtsilta, mutta\n" "%s puuttuu. Käytetään AdLibia sen sijaan." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 #, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " @@ -3801,14 +3819,14 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Asennuksestasi puuttuu 'teenagent.dat' tiedosto. Hae se ScummVM:n " "nettisivuilta" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/fr_FR.po b/po/fr_FR.po index 05ac39d23d..fc31863c61 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-20 23:17+0000\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <scummvm-devel@lists.sf.net>\n" @@ -54,16 +54,16 @@ msgstr "Remonter" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Annuler" @@ -102,7 +102,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Voulez-vous vraiment remplacer ce fichier ?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -112,7 +112,7 @@ msgid "Yes" msgstr "Oui" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -173,7 +173,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Triangle" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Divers" @@ -205,14 +205,14 @@ msgstr "Réinitialiser" msgid "Reset all FluidSynth settings to their default values." msgstr "Remet tous les réglages ą leurs valeurs par défaut." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -241,15 +241,15 @@ msgstr "Fermer" msgid "Mouse click" msgstr "Clic de souris" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Afficher le clavier" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Changer l'affectation des touches" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Basculer en plein écran" @@ -326,7 +326,7 @@ msgstr "" "espagnole du jeu." #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<defaut>" @@ -396,218 +396,218 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Réglages spécifiques ą ce jeux" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Utiliser des réglages MIDI spécifiques ą ce jeux" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Réglages spécifiques ą ce jeux" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Utiliser des réglages MT-32 spécifiques ą ce jeux" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Réglages spécifiques ą ce jeux" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Chemins" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Chemins" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Chemin du Jeu :" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Chemin du Jeu :" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Extra :" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Extra :" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Sauvegardes :" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Définie l'emplacement oł les fichiers de sauvegarde sont créés" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Sauvegardes :" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Aucun" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Défaut" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Choisir une banque de sons" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Sélectionner le répertoire contenant les données du jeu" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Sélectionner un répertoire supplémentaire" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Sélectionner le répertoire pour les sauvegardes" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Cet ID est déją utilisé par un autre jeu. Choisissez en un autre svp." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~Q~uitter" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Quitter ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Ą ~P~ropos..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Ą propos de ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~ptions..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Change les options globales de ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~D~émarrer" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Démarre le jeu sélectionné" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~harger" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Charge une sauvegarde pour le jeu sélectionné" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~jouter..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "" "Ajoute un jeu ą la Liste. Maintenez Shift enfoncée pour un Ajout Massif" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~diter..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Change les options du jeu" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~S~upprimer" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Supprime le jeu de la liste. Les fichiers sont conservés" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~jouter..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~diter..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~S~upprimer" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Recherche dans la liste de jeux" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Filtre :" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Charger le jeu :" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Charger" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -615,40 +615,40 @@ msgstr "" "Voulez-vous vraiment lancer la détection automatique des jeux ? Cela peut " "potentiellement ajouter un grand nombre de jeux." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné." -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné." -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Choisissez le jeu :" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Voulez-vous vraiment supprimer ce jeu ?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Voulez-vous charger le jeu ?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "" "Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné." -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Ajout Massif..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Enregistrer..." @@ -732,94 +732,94 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Aucune" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Certaines options graphiques n'ont pu źtre changées :" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "le mode vidéo n'a pu źtre changé." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "le mode plein écran n'a pu źtre changé." -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "la correction de rapport d'aspect n'a pu źtre changée." -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Mode graphique :" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Mode de rendu :" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Mode spécial de tramage supporté par certains jeux" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Plein écran" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Correction du rapport d'aspect" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corrige le rapport d'aspect pour les jeu 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Sortie Préféré :" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Sortie Audio :" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Spécifie le périphérique de sortie audio ou l'émulateur de carte audio " "préféré" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Spécifie le périphérique de sortie audio ou l'émulateur de carte audio" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Sortie Préféré :" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Sortie Audio :" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Émulateur AdLib :" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib est utilisé pour la musique dans de nombreux jeux" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Fréquence :" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -827,53 +827,49 @@ msgstr "" "Une valeur plus élevée donne une meilleure qualité audio mais peut ne pas " "źtre supporté par votre carte son" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Sortie GM :" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Spécifie le périphérique audio par défaut pour la sortie General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Ne pas utiliser la musique General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Utiliser le premier périphérique disponible" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "Banque de sons :" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "La banque de sons (SoundFont) est utilisée par certaines cartes audio, " "FluidSynth et Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont :" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Mode mixe AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Utiliser ą la fois MIDI et AdLib" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Gain MIDI :" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Paramčtres FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Sortie MT-32 :" @@ -999,100 +995,104 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Dialogues :" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Paramčtres FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Thčmes :" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Thčmes :" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Spécifie un chemin vers des données supplémentaires utilisées par tous les " "jeux ou ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugins :" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins :" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Divers" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Thčme :" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Interface :" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Sauvegarde auto :" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Sauvegarde :" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Touches" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Langue :" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Langue de l'interface graphique de ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "Vérif. mises ą jour :" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "Fréquence des vérifications" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "Maintenant" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "" "Vous devez relancer ScummVM pour que le changement soit pris en compte." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "Le répertoire sélectionné est vérouillé en écriture. Sélectionnez un autre " "répertoire." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Sélectionner le répertoire des thčmes d'interface" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Sélectionner le répertoire pour les fichiers suplémentaires" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Sélectionner le répertoire des plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1109,65 +1109,65 @@ msgstr "# suivant" msgid "add" msgstr "ajouter" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Supprimer le caractčre" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pré" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* 123" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Enregistreur ou Joueur de Gameplay" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Supprimer" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Enregistrer" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Lecture" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Editer" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Auteur : " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notes : " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Voulez-vous vraiment supprimer cet enregistrement ?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Auteur inconnu" @@ -1231,7 +1231,7 @@ msgstr "Crée une nouvelle sauvegarde." msgid "Name: " msgstr "Nom: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Entrez une description pour l'emplacement %d:" @@ -1240,28 +1240,28 @@ msgstr "Entrez une description pour l'emplacement %d:" msgid "Select a Theme" msgstr "Sélectionnez un Thčme" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX désactivé" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX désactivé" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Rendu Standard" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Normal" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Rendu Anti-crénelé" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Anti-crénelé" @@ -1291,39 +1291,39 @@ msgstr "Vérifier les mises ą jour automatiquement" msgid "Proceed" msgstr "Appliquer" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Effacer la valeur" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Passer" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Mettre en pause" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Passer la phrase" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Erreur lors de l'éxécution du jeu : " -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné" @@ -1482,15 +1482,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Retour au ~L~anceur" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Sauvegarde :" @@ -1499,16 +1499,16 @@ msgstr "Sauvegarde :" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Sauver" @@ -1532,12 +1532,12 @@ msgstr "" "de base et les instructions pour obtenir de l'aide supplémentaire." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~nnuler" @@ -1612,7 +1612,7 @@ msgstr "" msgid "Start anyway" msgstr "Jouer quand mźme" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Émulateur AdLib" @@ -1729,7 +1729,7 @@ msgstr "Voulez-vous vraiment quitter ?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Quitter" @@ -1878,7 +1878,7 @@ msgid "Windows MIDI" msgstr "MIDI Windows" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~F~ermer" @@ -2372,20 +2372,36 @@ msgstr "" "Noubliez pas d'affecter une touche ą l'action 'Cacher Bar d'Outils' pour " "pouvoir voir entičrement l'inventaire" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Recherche des mises ą jour..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +msgid "Color mode" +msgstr "Mode Couleurs" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "Utiliser les graphiques en couleurs" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "Tracé par ligne" + +#: engines/adl/detection.cpp:64 +msgid "Show scanlines" +msgstr "Afficher le tracé par ligne" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Dialogues sauvegarde/chargement d'origine" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2436,27 +2452,27 @@ msgstr "" "Affiche une fenźtre de saisie de commandes et interrompt le jeu (comme pour " "les jeux SCI) ą la place d'un champ de saisie en temps réel." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Charger le jeu :" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Charger" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2467,7 +2483,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2478,7 +2494,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2489,7 +2505,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Fichier de séquence '%s' non trouvé !" @@ -2520,20 +2536,20 @@ msgstr "" "Appuyer sur OK pour les convertir maintenant, sinon le mźme message " "s'affichera la prochaine fois que vous démarrerez le jeu.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Utiliser le mode palette lumineuse" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Utiliser la palette lumineuse du jeu pour l'affichage" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Échec du chargement de l'état du jeu depuis le disque." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Échec de l'enregistrement de l'état du jeu sur le disque." @@ -2550,7 +2566,7 @@ msgstr "Vidéo rapide" msgid "Play movies at an increased speed" msgstr "Joue les vidéos plus rapidement" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Échec de la sauvegarde." @@ -2759,26 +2775,26 @@ msgstr "~M~enu Principal" msgid "~W~ater Effect Enabled" msgstr "~E~ffets de l'Eau Activés" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Sauter les scčnes storyboard de la Salle des Archives" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Permet au joueur de sauter les scčnes de storyboard de la Salle des Archives." -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Afficher les vidéos du 'making of' en plein écran." -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" "Redimensionne les vidéos du 'making of' pour qu'elles s'affichent en plein " "écran." -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2787,23 +2803,23 @@ msgstr "" "Erreur lors de la sauvegarde dans l'emplacement %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Charger une partie" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Chargement en cours..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Sauver une partie" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Sauvegarde en cours..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2820,11 +2836,11 @@ msgstr "" "Appuyer sur OK pour les convertir maintenant, sinon le mźme message " "s'affichera la prochaine fois que vous démarrerez le jeu.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM a converti avec succčs vos anciennes sauvegardes." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2946,127 +2962,127 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Utiliser les curseurs argentés au lieu des curseurs normaux dorés" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "Afficher la barre d'objets" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "Afficher le nom des objets en bas de l'écran" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Insérer le Disque %c et appuyer sur le Bouton pour Continuer." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Impossible de trouver %s, (%c%d) Appuyer sur le Bouton." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Erreur lors de la lecture du disque %c, (%c%d). Appuyer sur le Bouton." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Jeu en pause. Appuyer sur Espace pour Reprendre." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Voulez-vous vraiment recommencer ? (O/N)O" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Voulez-vous vraiment quitter ? (O/N)O" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jouer" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Insérer le disque de sauvegarde/chargement" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Vous devez entrer un nom" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Le jeu n'a pu źtre sauvé (disque plein ?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Le jeu n'a pu źtre chargé" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Sauvegarde de '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Chargement de '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Donnez un nom ą votre sauvegarde" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Sélectionnez un jeu ą charger" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Nom du jeu)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~P~récédent" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~S~uivant" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Voix" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Voix et Sous-titres" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Sous-titres" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voix & ST" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Sélectionnez un niveau de compétence." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Reportez-vous ą votre manuel d'instruction." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Essai" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Expert" @@ -3603,23 +3619,23 @@ msgstr "Voler vers la droite" msgid "Fly to lower right" msgstr "Voler vers la bas ą droite" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Défilement par ą-coups" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Défilement régulier" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Volume Musique :" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Vitesse des ST :" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3628,7 +3644,7 @@ msgstr "" "Support MIDI natif requičre la mise ą jour Roland de LucasArt,\n" "mais %s manque. Utilise AdLib ą la place." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3828,14 +3844,14 @@ msgstr "" "Utilise les voix anglaises au lieu des voix allemandes pour tous les autres " "langages" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Il vous manque le fichier 'teenagent.dat'. Téléchargez le depuis le site web " "de ScummVM." -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/gl_ES.po b/po/gl_ES.po index 1b2731dc5e..6ae36cebd1 100644 --- a/po/gl_ES.po +++ b/po/gl_ES.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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-21 00:43+0100\n" "Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n" "Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n" @@ -53,16 +53,16 @@ msgstr "Arriba" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Cancelar" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Seguro que queres sobreescribir o ficheiro?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "Si" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "Seno" msgid "Triangle" msgstr "Triįngulo" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Misc." @@ -205,14 +205,14 @@ msgid "Reset all FluidSynth settings to their default values." msgstr "" "Restablece a configuración de FluidSynth aos seus valores predefinidos." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -242,15 +242,15 @@ msgstr "Pechar" msgid "Mouse click" msgstr "Premer co rato" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Mostrar teclado" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Asignar teclas" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Activar/desactivar pantalla completa" @@ -325,7 +325,7 @@ msgid "" msgstr "Idioma do xogo. Non converterį a versión galega do xogo en inglesa" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<por defecto>" @@ -395,217 +395,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Anular a configuración do volume" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Anular a configuración de MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Anular a configuración de MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Anular a configuración de MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Anular a configuración de MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Camińos" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Camińos" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Camińo do xogo:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Camińo do xogo:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Camińo adicional:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Especifica o camińo dos datos adicionais usados no xogo" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Camińo adicional:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Camińo de gardado:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Especifica o lugar dos ficheiros de gardado" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Camińo de gardado:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ningśn" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Predefinido" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Seleccionar SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Selecciona un directorio con datos de xogo" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Selecciona un directorio con datos adicionais" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Selecciona un directorio para ficheiros de gardado" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Este ID de xogo xa estį en uso. Selecciona outro." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~S~aķr" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Saķr de ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Ace~r~ca de..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Acerca de ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pcións..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Cambiar as opcións de ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~I~niciar" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Iniciar o xogo seleccionado" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~argar..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Cargar partida do xogo seleccionado" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "Eng~a~dir xogo..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Manter premido MAIŚS para engadir en masa" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~ditar xogo..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Cambiar as opcións do xogo" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "Elimina~r~ xogo" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Eliminar o xogo da lista. Os ficheiros de datos non se modifican" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Eng~a~dir xogo..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditar xogo..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "Elimina~r~ xogo" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Buscar na lista de xogos" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Buscar:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Cargar partida:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Cargar" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -613,39 +613,39 @@ msgstr "" "Queres executar o detector de xogos en masa? É posible que se engada un gran " "nśmero de xogos." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM non foi quen de abrir o directorio!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM non foi quen de atopar xogos no directorio!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Elixe o xogo:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Seguro que queres eliminar esta configuración de xogo?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Queres cargar a partida gardada?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "O xogo non permite cargar partidas dende o iniciador." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM non foi quen de atopar un motor para executar o xogo!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Engadir en masa..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Gravar..." @@ -728,92 +728,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ningunha" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Erro ao aplicar os cambios na configuración dos grįficos:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "non se puido cambiar o modo de vķdeo." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "non se puido cambiar a configuración de pantalla completa." -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "non se puido cambiar a proporción." -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grįficos:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Procesamento:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Modos de interpolación de cores compatibles con algśns xogos" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Pantalla completa" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Corrección de proporción" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corrixir a proporción para os xogos en 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Dispositivo preferido:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Dispositivo de mśsica:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Especifica o dispositivo ou emulador de tarxeta de son preferido" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Especifica o dispositivo ou emulador de tarxeta de son de saķda" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferido:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Disp. mśsica:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emulador de AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "Moitos xogos empregan AdLib para a mśsica" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Taxa de saķda:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -821,53 +821,49 @@ msgstr "" "A maior valor, maior calidade do son, mais talvez non sexa compatible coa " "tarxeta" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Dispositivo de GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "" "Especifica o dispositivo de son por defecto para a saķda de General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Non empregar mśsica en General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Empregar o primeiro dispositivo dispońible" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont é compatible con algunhas tarxetas de son, FluidSynth e Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Modo AdLib/MIDI mixto" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Empregar xeración de son MIDI e mįis AdLib" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Ganancia de MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Configuración de FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Dispositivo de MT-32:" @@ -992,96 +988,100 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Volume voz:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Configuración de FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Camińo do tema:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Camińo tema:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Especificar o camińo dos datos adicionais de todos os xogos ou de ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Camińo dos complementos:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Camińo complementos:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Misc." -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Procesamento da interfaz:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autogardado:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autogardado:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Idioma de interfaz:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Idioma da interfaz de ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Debes reiniciar ScummVM para que os cambios teńan efecto." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Non é posible escribir no directorio elixido. Selecciona outro." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Seleccionar directorio para temas de interfaz" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Seleccionar directorio para ficheiros adicionais" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Seleccionar directorio para complementos" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1098,65 +1098,65 @@ msgstr "# seguinte" msgid "add" msgstr "engadir" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Eliminar carįcter" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Nśm" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Partida gravada ou reproducida" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Eliminar" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Gravar" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Reproducir" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Editar" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Autor:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notas:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Seguro que queres eliminar esta gravación?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Autor descońecido" @@ -1220,7 +1220,7 @@ msgstr "Crea un novo ficheiro de gardado" msgid "Name: " msgstr "Nome:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Introduce unha descrición para o espazo %d:" @@ -1229,28 +1229,28 @@ msgstr "Introduce unha descrición para o espazo %d:" msgid "Select a Theme" msgstr "Seleccionar tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Efectos grįficos desactivados" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Efectos desactivados" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Procesamento estįndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Estįndar" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Procesamento antidistorsión" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Antidistorsión" @@ -1275,39 +1275,39 @@ msgstr "Buscar actualizacións..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Limpar valor" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "O motor non é compatible co nivel de depuración %s" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menś" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Omitir" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausa" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Omitir lińa" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Erro de execución do xogo:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Non se puido atopar un motor para executar o xogo seleccionado" @@ -1465,15 +1465,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~olver ao Iniciador" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Gardar partida:" @@ -1482,16 +1482,16 @@ msgstr "Gardar partida:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Gardar" @@ -1515,12 +1515,12 @@ msgstr "" "bįsica e mįis instrucións para acadar asistencia adicional." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~A~ceptar" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~C~ancelar" @@ -1595,7 +1595,7 @@ msgstr "" msgid "Start anyway" msgstr "Iniciar de todos os xeitos" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulador de AdLib" @@ -1712,7 +1712,7 @@ msgstr "Seguro que queres saķr?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Saķr" @@ -1861,7 +1861,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~P~echar" @@ -2353,20 +2353,38 @@ msgstr "" "Non esquezas asignar unha tecla į acción Ocultar barra de ferramentas para " "ver o inventario completo" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Buscar actualizacións..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Modo accesible para daltonismo" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Mostrar etiquetas" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Empregar pantallas orixinais de gardado e carga" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2414,27 +2432,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Restaurar xogo:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Restaurar" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2445,7 +2463,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2456,7 +2474,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2467,7 +2485,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Non se atopou o ficheiro de secuencia %s!" @@ -2498,20 +2516,20 @@ msgstr "" "Preme Aceptar para convertilos. Se non, volverįs ver esta mensaxe a próxima " "vez que inicies o xogo.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Empregar modo Paleta intensa" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Mostrar os grįficos coa paletta intensa do xogo" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Erro ao cargar a partida do ficheiro." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Erro ao gardar a partida no ficheiro." @@ -2528,7 +2546,7 @@ msgstr "Velocidade de vķdeo rįpida" msgid "Play movies at an increased speed" msgstr "Reproducir vķdeos a mįis velocidade" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Erro ao gardar a partida" @@ -2739,23 +2757,23 @@ msgstr "~M~enś principal" msgid "~W~ater Effect Enabled" msgstr "Efecto de ~a~uga activado" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Omitir as escenas do Salón dos rexistros" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Permite ao xogador saltar as escenas do Salón dos rexistros" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Redimensionar vķdeos a pantalla completa" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Redimensionar a creación de vķdeos en pantalla completa" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2764,23 +2782,23 @@ msgstr "" "Non se pode gardar a partida no espazo %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Cargar ficheiro" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Cargando..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Gardar ficheiro" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Gardando..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2797,11 +2815,11 @@ msgstr "" "Preme Aceptar para cambialos. Se non, volverįs ver esta mensaxe a próxima " "vez que inicies o xogo.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM converteu correctamente todos os ficheiros de gardado." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2925,128 +2943,128 @@ msgstr "" "Emprega o xogo de cursores prateados alternativo, no canto dos dourados " "normais." -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Mostrar etiquetas" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Insire o disco %c e preme o botón para continuar." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Non se puido atopar %s, (%c%d). Preme o botón." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Erro ao ler o disco %c, (%c%d). Preme o botón." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Xogo en pausa. Pulsa a barra espazadora para continuar." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Seguro que queres reiniciar? (S/N)S" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Seguro que queres saķr? (S/N)S" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Xogar" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Inserir disco de gardado/carga" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Debes introducir un nome" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Non se puido gardar a partida (disco cheo?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Non se puido cargar a partida" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Gardando %s" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Cargando %s" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Introduce un nome para a partida gardada" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Selecciona unha partida para cargala" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Tķtulo)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~A~nterior" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~S~eguinte" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Só voz" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Voz e subtķtulos" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Só subtķtulos" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voz e subs" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Selecciona un nivel de habilidade." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulta o manual de Loom(TM) para obter axuda." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Prįctica" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Experto" @@ -3583,23 +3601,23 @@ msgstr "Voar į dereita" msgid "Fly to lower right" msgstr "Voar į dereita abaixo" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Axuste de desprazamento SI" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Axuste de desprazamento NON" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Volume de mśsica:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Velocidade dos subtķtulos:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3608,7 +3626,7 @@ msgstr "" "A compatibilidade nativa con MIDI precisa a actualización de Roland\n" "de LucasArts, mais falla %s. Empregarase AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3800,13 +3818,13 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Falta o ficheiro teenagent.dat. Descįrgao dende o sitio web de ScummVM." -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/hu_HU.po b/po/hu_HU.po index 1033063868..500482b08a 100644..100755 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2016-04-07 08:55+0100\n" -"PO-Revision-Date: 2016-04-08 07:38+0200\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" +"PO-Revision-Date: 2016-06-08 06:22+0200\n" "Last-Translator: George Kormendi <grubycza@hotmail.com>\n" "Language-Team: Hungarian\n" "Language: Magyar\n" @@ -54,16 +54,16 @@ msgstr "Feljebb" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Mégse" @@ -102,7 +102,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Biztos hogy felül akarod ķrni a fįjlt?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -112,7 +112,7 @@ msgid "Yes" msgstr "Igen" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -173,7 +173,7 @@ msgstr "Szķnusz" msgid "Triangle" msgstr "Hįromszög" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Vegyes" @@ -205,14 +205,14 @@ msgstr "Reset" msgid "Reset all FluidSynth settings to their default values." msgstr "Minden FluidSynth beįllķtįs alapértelmezett értékre." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -241,15 +241,15 @@ msgstr "Bezįr" msgid "Mouse click" msgstr "Egérkattintįs" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Billentyūzet beįllķtįsok" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Billentyūk įtįllķtįsa" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Teljesképernyõ kapcsoló" @@ -324,7 +324,7 @@ msgstr "" "A jįték nyelve. Ne įllķtsd įt a pl. Spanyol nyelvū jįtékodat Angol nyelvre" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<alapértelmezett>" @@ -394,217 +394,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Globįlis hangerõbeįllķtįsok felülbķrįlįsa" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Globįlis MIDI beįllķtįsok felülbķrįlįsa" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Globįlis MIDI beįllķtįsok felülbķrįlįsa" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Globįlis MT-32 beįllķtįsok felülbķrįlįsa" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Globįlis MT-32 beįllķtįsok felülbķrįlįsa" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Mappįk" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Mappįk" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Jįték Mappa:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Jįték Mappa:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Extra Mappa:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Mappa kivįlasztįs a jįtékok kiegészķtõ fįjljaihoz" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Extra Mappa:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Mentés Mappa:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Jįtékmentések helyének meghatįrozįsa" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Mentés Mappa:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Nincs" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Alapértelmezett" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "SoundFont kivįlasztįs" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Jįtékok helyének kivįlasztįsa" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Vįlassz mappįt a jįték kiegészķtõkhöz" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Vįlaszz jįtékmentéseknek mappįt" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Ez a jįtékazonosķtó ID mįr foglalt, Vįlassz egy mįsikat." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "Kilépés" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "ScummVM bezįrįsa" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "Névjegy" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "ScummVM névjegy" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pciók..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Globįlis ScummVM opciók cseréje" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "Indķtįs" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "A vįlasztott jįték indķtįsa" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~B~etölt..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Kimentett jįtékįllįs betöltése" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "Jįték hozzįadįs" -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Tratsd lenyomva a Shift-et a Masszķv módhoz" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "Jįtékopciók" -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Jįték beįllķtįsok megvįltoztatįsa" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "Jįték törlése" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Törli a jįték nevét a listįról. A jįtékfįjlok megmaradnak" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Jįték hozzįadįs" -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "Jįtékopciók" -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "Jįték törlése" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Keresés a jįtéklistįban" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Keresés:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Jįték betöltése:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Betöltés" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -612,40 +612,40 @@ msgstr "" "Biztos hogy futtatod a Masszķv jįtékdetektort? Ez potenciįlisan sok jįtékot " "hozzįad a listįhoz." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nem tudja megnyitni a vįlasztott mappįt!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "A ScummVM nem talįlt egy jįtékot sem a vįlasztott mappįban!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Vįlassztott jįték:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Biztosan törölni akarod ezt a jįtékkonfigurįciót?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Akarod hogy betöltésem a jįtékįllįst?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Ez a jįték nem tįmogatja a jįtékįllįs betöltést az indķtóból." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM nem talįlt olyan jįtékmotort ami a vįlasztott jįtékot tįmogatja!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Masszķv mód..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Felvétel..." @@ -728,144 +728,140 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Nincs" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Néhįny grafikus opció vįltoztatįsa sikertelen:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "a videómód nem vįltozott." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "a teljesképernyõs beįllķtįs nem vįltozott" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "a képméretarįny beįllķtįsok nem vįltoztak" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafikus mód:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Kirajzolįs mód:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Néhįny jįték tįmogatja a speciįlis įrnyalįsi módokat" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Teljesképernyõs mód:" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Képméretarįny korrekció" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Helyes oldalarįny a 320x200 jįtékokhoz" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Elsõdleges eszköz:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Zene eszköz:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Elsõdleges hangeszköz vagy hang emulįtor beįllķtįsok" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Hangeszköz vagy hangkįrtya emulįtor beįllķtįsok" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Elsõdleges eszk.:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Zene eszköz:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulįtor:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib meghajtót sok jįték hasznįlja zenéhez" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Kimeneti rįta:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" "Nagyobb értékek jobb hangminõséget adnak, de nem minden hangkįrtya tįmogatja" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM Eszköz:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Alapértelmezett hangeszköz General MIDI kimenethez" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Ne hasznįlj General MIDI zenét" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Elsõ elérhetõ eszköz hasznįlata" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "Néhįny hangkįrya, FluidSynth és Timidyti tįmogatja a SoundFont betöltését" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Vegyes AdLib/MIDI mód" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "MIDI és AdLib hanggenerįtorok hasznįlata" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI erõsķtés:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth Beįllķtįsa" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 Eszköz:" @@ -989,95 +985,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Beszéd hangerõ:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth Beįllķtįsa" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Téma Mappa:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Téma Mappa:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Minden jéték és ScummVM kiegészķtõ fįjljainak mappįja:" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugin Mappa:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugin Mappa:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Vegyes" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Téma:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI Renderelõ:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Automentés:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Automentés:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Billentyūk" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "GUI nyelve:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "A ScummVM GUI nyelve" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "Frissķtés ellenõrzés:" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "Milyen gyakran ellenõrizze a ScummVM frissķtéseket" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "Ellenõrzés most" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Indķtsd śjra a ScummVM-et a vįltozįsok érvényesķtéséhez." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "A kivįlasztott mappįba nem lehet ķrni, vįlassz egy mįsikat" -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "GUI téma mappa kivįlasztįsa" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Mappa vįlasztįs az extra fįjloknak" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Plugin mappa kivįlasztįsa" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1094,65 +1094,65 @@ msgstr "# következõ" msgid "add" msgstr "hozzįad" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Karakter törlés" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Elõzõ" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Szįm" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Jįtékmenet felvétel vagy lejįtszįs" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Töröl" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Felvétel" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Visszajįtszįs" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Javķt" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Szerzõ:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Megjegyzés:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Biztos hogy törölni akarod ezt a felvételt?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Ismeretlen Szerzõ" @@ -1216,7 +1216,7 @@ msgstr "Śj jįtékmentés készķtése" msgid "Name: " msgstr "Név:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Adj meg egy leķrįst a %d slothoz:" @@ -1225,28 +1225,28 @@ msgstr "Adj meg egy leķrįst a %d slothoz:" msgid "Select a Theme" msgstr "Vįlassz témįt" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX letiltva" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX letiltva" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standard leképezõ" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Įtlagos" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Élsimķtįsos leképezõ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Élsimķtott" @@ -1274,39 +1274,39 @@ msgstr "Frissķtések automatikus keresése" msgid "Proceed" msgstr "Folyamatban" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Érték törlése" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "A motor nem tįmogatja a '%s' debug szintet" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menü" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Tovįbb" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Szünet" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Sor įtlépése" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Hiba a jįték futtatįsakor:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Nem talįlható olyan jįtékmotor ami a vįlasztott jįtékot tįmogatja" @@ -1463,15 +1463,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Visszatérés az indķtóba" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Jįték mentése:" @@ -1480,16 +1480,16 @@ msgstr "Jįték mentése:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Mentés" @@ -1512,12 +1512,12 @@ msgstr "" "informįciókról, és hogy hogyan segķthetsz a késõbbiekben." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~M~égse" @@ -1592,7 +1592,7 @@ msgstr "" msgid "Start anyway" msgstr "Indķtįs ķgy is" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Emulįtor" @@ -1707,7 +1707,7 @@ msgstr "Biztos hogy ki akarsz lépni ?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Kilépés" @@ -1856,7 +1856,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "Bezįr" @@ -2346,20 +2346,36 @@ msgstr "" "Ne felejts billentyūt tįrsķtani az 'Eszköztįr rejtés' mūvelethez, hogy lįsd " "a teljes listįt" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Frissķtések keresése..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +msgid "Color mode" +msgstr "Szines mód" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "Szines grafikįt hasznįl" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "Pįszta" + +#: engines/adl/detection.cpp:64 +msgid "Show scanlines" +msgstr "Pįszta megjelenķtés" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Eredeti ment/tölt képernyõk hasznįlata" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 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" @@ -2407,27 +2423,27 @@ msgstr "" "Parancssor ablak megjelenķtése és jįték szüneteltetése (mint a SCI) valós " "idejü parancs helyett." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Jįtékmenet visszaįllķtįsa:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Visszaįllķtįs" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2438,7 +2454,7 @@ msgstr "" "\n" "%s fįjlból nem sikerült" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2449,7 +2465,7 @@ msgstr "" "\n" "%s fįjlba nem sikerült" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2460,7 +2476,7 @@ msgstr "" "\n" "%s fįjlba elkészült" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "'%s' įtvezetõ fįjl nem talįlható" @@ -2490,20 +2506,20 @@ msgstr "" "Nyomj OK-t ha įtalakķtod most, vagy rįkérdezek śjra ha legközelebb elindķtod " "a jįtékot.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Fényes paletta mód hasznįlata" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Grafikus megjelenķtésre hasznįlja a jįték fényes palettįjįt" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Jįtékįllįs betöltése fįjlból nem sikerült." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Jįtékįllįs mentése fįjlba nem sikerült." @@ -2520,7 +2536,7 @@ msgstr "Gyors filmsebesség" msgid "Play movies at an increased speed" msgstr "Filmek lejįtszįsa nagyobb sebességgel" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Jįték mentés nem sikerült" @@ -2728,24 +2744,24 @@ msgstr "Fõ Menü ~u~" msgid "~W~ater Effect Enabled" msgstr "Vķzeffektus engedélyezve" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Hall of Records storyboard įtvezetõk įtugrįsa" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Lehetõség, hogy a jįtékos įtugorja a Hall of Records storyboard įtvezetõket" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Hogyan készült videók įtméretezése teljesképernyõre" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Hogyan készült videók įtméretezése, hogy teljesképernyõt hasznįljanak" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2754,23 +2770,23 @@ msgstr "" "Jįtékįllįs nem menthetõ %i slotba\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Fįjl betöltése" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Jįték betöltés..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Fįjl mentése" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Jįték mentés..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2786,11 +2802,11 @@ msgstr "" "Nyomj OK-t az įtalakķtįshoz, vagy rįkérdezzek ha legközelebb elindķtod a " "jįtékot.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM konvertįlta az összes jįtékįllįsodat." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2909,127 +2925,127 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Alternatķv ezüst kurzorszett hasznįlata, a normįl arany helyett" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "Tįrgynév sor lįtható" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "Tįrgyak neveinek megjelenķtése a képernyõ aljįn" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Helyezd be a %c lemezt és gombnyomįs a folytatįshoz." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "%s, (%c%d) nem talįlható. Nyomj egy billentyūt." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Hiba a %c, (%c%d) lemez olvasįsakor. Nyomj egy billentyūt." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Jįték szünetel. SPACE a folytatįshoz." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" 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 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Biztos hogy ki akarsz lépni? (I/N)I" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jįték" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Helyezd be a jįtékmentés lemezt" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Meg kell adnod egy nevet" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "A jįték NINCS mentve (Megtelt a lemez?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "A jįték NINCS betöltve" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "'%s' Mentése" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "'%s' Betöltése" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "JįtékMENTÉS neve" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Vįlassz egy jįtékot Betöltésre" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Jįték cķme)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~E~lõzõ" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "Következõ" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Csak beszéd" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Beszéd és felirat" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Csak felirat" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Beszéd & Felir" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Vįlassz hozzįértés szintet." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Segķtségért nézd meg a Loom(TM) kézikönyvedet." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Gyakorlįs" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Szakértõ" @@ -3566,23 +3582,23 @@ msgstr "Jobbra repülés" msgid "Fly to lower right" msgstr "Jobbra le repülés" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Finomgörgetés be" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Finomgörgetés ki" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Zene hangereje:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Felirat sebesség:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3591,7 +3607,7 @@ msgstr "" "Native MIDI tįmogatįshoz kell a Roland Upgrade a LucasArts-tól,\n" "a %s hiįnyzik. AdLib-ot hasznįlok helyette." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3783,12 +3799,12 @@ msgid "" msgstr "" "Angol beszéd hasznįlata a Német helyett minden nyelven, a Németen kķvül" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Hiįnyzik a 'teenagent.dat' fįjl. Szerezd be a ScummVM website-ról" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/it_IT.po b/po/it_IT.po index 434dd6b46e..f01142dbad 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\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" @@ -52,16 +52,16 @@ msgstr "Su" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Annulla" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Sei sicuro di voler eliminare questo salvataggio?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "Sģ" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "Seno" msgid "Triangle" msgstr "Triangolo" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Varie" @@ -205,14 +205,14 @@ msgid "Reset all FluidSynth settings to their default values." msgstr "" "Ripristina tutte le impostazioni di FluidSynth al loro valore predefinito." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -242,15 +242,15 @@ msgstr "Chiudi" msgid "Mouse click" msgstr "Clic del mouse" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Mostra tastiera" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Riprogramma tasti" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Attiva / disattiva schermo intero" @@ -326,7 +326,7 @@ msgstr "" "Lingua del gioco. Un gioco inglese non potrą risultare tradotto in italiano" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<predefinito>" @@ -396,217 +396,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Ignora le impostazioni globali di volume" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Ignora le impostazioni MT-32 globali" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Ignora le impostazioni MT-32 globali" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Percorsi" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Perc." -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Percorso gioco:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Perc. gioco:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Percorso extra:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Specifica il percorso di ulteriori dati usati dal gioco" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Perc. extra:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Salvataggi:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Specifica dove archiviare i salvataggi" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Salvataggi:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Nessuno" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Predefinito" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Seleziona SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Seleziona la cartella contenente i file di gioco" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Seleziona la cartella di gioco aggiuntiva" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Seleziona la cartella dei salvataggi" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Questo ID di gioco č gią in uso. Si prega di sceglierne un'altro." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "C~h~iudi" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Esci da ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~I~nfo..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Informazioni su ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pzioni..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Modifica le opzioni globali di ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~G~ioca" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Esegue il gioco selezionato" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~arica..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Carica un salvataggio del gioco selezionato" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~ggiungi gioco..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Tieni premuto Shift per l'aggiunta in massa" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~M~odifica gioco..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Modifica le opzioni di gioco" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~R~imuovi gioco" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Rimuove il gioco dalla lista. I file del gioco rimarranno intatti" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~gg. gioco..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~M~odif. gioco..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~im. gioco" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Cerca nella lista dei giochi" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Carica gioco:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Carica" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -614,43 +614,43 @@ msgstr "" "Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere " "un numero enorme di giochi." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM non ha potuto aprire la cartella specificata!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM non ha potuto trovare nessun gioco nella cartella specificata!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Scegli il gioco:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Sei sicuro di voler rimuovere questa configurazione di gioco?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Vuoi caricare il salvataggio?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "" "Questo gioco non supporta il caricamento di salvataggi dalla schermata di " "avvio." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM non ha potuto trovare un motore in grado di eseguire il gioco " "selezionato!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Agg. in massa..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -735,94 +735,94 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Nessuno" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Impossibile applicare alcuni dei cambiamenti nelle opzioni grafiche." -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "impossibile modificare la modalitą video." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "impossibile modificare l'impostazione schermo intero" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "impossibile modificare l'impostazione proporzioni" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Modalitą:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Resa grafica:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Modalitą di resa grafica speciali supportate da alcuni giochi" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Modalitą a schermo intero" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Correzione proporzioni" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregge le proporzioni dei giochi 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Disp. preferito:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Dispositivo audio:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Specifica il dispositivo audio o l'emulatore della scheda audio preferiti" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "" "Specifica il dispositivo di output audio o l'emulatore della scheda audio" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferito:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Disposit. audio:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emulatore AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib č utilizzato per la musica in molti giochi" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Frequenza:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -830,51 +830,47 @@ msgstr "" "Valori pił alti restituiscono un suono di maggior qualitą, ma potrebbero non " "essere supportati dalla tua scheda audio" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Specifica il dispositivo audio predefinito per l'output General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Non utilizzare la musica General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Utilizza il primo dispositivo disponibile" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont č supportato da alcune schede audio, FluidSynth e Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Modalitą mista AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilizza generazione di suono sia MIDI che AdLib" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Guadagno MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Impostazioni FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Disposit. MT-32:" @@ -1000,95 +996,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Volume voci:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Impostazioni FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Percorso tema:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Perc. tema:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Specifica il percorso di ulteriori dati usati dai giochi o da ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Percorso plugin:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Perc. plugin:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Varie" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Renderer GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autosalva:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autosalva:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Tasti" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Lingua GUI:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Lingua dell'interfaccia grafica di ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Devi riavviare ScummVM affinché le modifiche abbiano effetto." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "La cartella scelta č in sola lettura. Si prega di sceglierne un'altra." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Seleziona la cartella dei temi dell'interfaccia" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Seleziona la cartella dei file aggiuntivi" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Seleziona la cartella dei plugin" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1105,68 +1105,68 @@ msgstr "" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 #, fuzzy msgid "Delete char" msgstr "Elimina" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Elimina" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 #, fuzzy msgid "Playback" msgstr "Gioca" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 #, fuzzy msgid "Do you really want to delete this record?" msgstr "Sei sicuro di voler eliminare questo salvataggio?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 #, fuzzy msgid "Unknown Author" msgstr "Errore sconosciuto" @@ -1231,7 +1231,7 @@ msgstr "Crea un nuovo salvataggio" msgid "Name: " msgstr "Nome: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Inserisci una descrizione per la posizione %d:" @@ -1240,28 +1240,28 @@ msgstr "Inserisci una descrizione per la posizione %d:" msgid "Select a Theme" msgstr "Seleziona un tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Grafica disattivata" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Grafica disattivata" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Renderer standard" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Medio" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Renderer con antialiasing" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Con antialiasing" @@ -1286,39 +1286,39 @@ msgstr "Cerca aggiornamenti..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Cancella" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Il motore non supporta il livello di debug '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Salta" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausa" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Salta battuta" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Errore nell'esecuzione del gioco:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "" "Impossibile trovare un motore in grado di eseguire il gioco selezionato" @@ -1477,15 +1477,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~ai a elenco giochi" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Salva gioco:" @@ -1494,16 +1494,16 @@ msgstr "Salva gioco:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Salva" @@ -1528,12 +1528,12 @@ msgstr "" "assistenza." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~nnulla" @@ -1609,7 +1609,7 @@ msgstr "" msgid "Start anyway" msgstr "Avvia comunque" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulatore AdLib" @@ -1728,7 +1728,7 @@ msgstr "Sei sicuro di voler uscire?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Esci" @@ -1878,7 +1878,7 @@ msgid "Windows MIDI" msgstr "MIDI Windows" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~C~hiudi" @@ -2371,20 +2371,38 @@ msgstr "" "Non dimenticare di mappare un tasto per l'azione \"Nascondi barra degli " "strumenti\" per vedere l'intero inventario" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Cerca aggiornamenti..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Modalitą clic" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Mostra etichette oggetti" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Usa schermate di salvataggio originali" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2431,27 +2449,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Ripristina gioco:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Ripristina" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2462,7 +2480,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2473,7 +2491,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2484,7 +2502,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "File della scena di intermezzo '%s' non trovato!" @@ -2516,20 +2534,20 @@ msgstr "" "Premi OK per convertirli adesso, altrimenti ti verrą richiesto al prossimo " "avvio del gioco.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Usa modalitą colori brillanti" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Visualizza la grafica con i colori brillanti del gioco" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Impossibile caricare il gioco dal file." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Impossibile salvare il gioco nel file." @@ -2546,7 +2564,7 @@ msgstr "Alta velocitą filmati" msgid "Play movies at an increased speed" msgstr "Aumenta la velocitą di riproduzione dei filmati" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Impossibile salvare il gioco" @@ -2743,23 +2761,23 @@ msgstr "~M~enu principale" msgid "~W~ater Effect Enabled" msgstr "~E~ffetto acqua attivo" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Salta le scene della Hall of Records" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Permette al giocatore di saltare le scene della Hall of Records" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Ridimensiona a tutto schermo i video dietro le quinte" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Ridimensiona i video dietro le quinte, per adattarli allo schermo" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2768,25 +2786,25 @@ msgstr "" "Impossibile salvare nella posizione %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Carica gioco:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Caricamento..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Salvataggio fallito!" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Salvataggio..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2803,11 +2821,11 @@ msgstr "" "Premi OK per convertirli adesso, altrimenti ti verrą richiesto la prossima " "volta.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ha convertito con successo tutti i tuoi salvataggi." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2930,130 +2948,130 @@ msgid "" msgstr "" "Usa il set alternativo di cursori d'argento al posto di quelli normali d'oro" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Mostra etichette oggetti" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Inserisci il disco %c e premi un pulsante per continuare." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Impossibile trovare %s, (%c%d) Premere un pulsante." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Errore nella lettura del disco %c, (%c%d) Premere un pulsante." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Gioco in pausa. Premere SPAZIO per continuare." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 #, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Sei sicuro di voler riavviare? (S/N)S" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 #, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Sei sicuro di voler uscire? (S/N)S" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Gioca" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Inserire il disco dei salvataggi" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Devi inserire un nome" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Il gioco NON č stato salvato (disco pieno?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Il gioco NON č stato caricato" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Salvataggio di '%s' in corso" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Caricamento di '%s' in corso" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Dai un nome al SALVATAGGIO" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Seleziona un gioco da caricare" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "titolo gioco)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~P~recedenti" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~S~uccessivi" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Solo voci" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Voci e testo" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Solo testo" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voci e testo" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Selezionate un livello di difficoltą." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Consultate il manuale delle istruzioni." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Base" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Expert" @@ -3591,26 +3609,26 @@ msgstr "Vola a destra" msgid "Fly to lower right" msgstr "Vola in basso a destra" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 #, fuzzy msgid "Snap scroll on" msgstr "Scorrimento morbido" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 #, fuzzy msgid "Music volume: " msgstr "Volume musica:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 #, fuzzy msgid "Subtitle speed: " msgstr "Velocitą testo:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3619,7 +3637,7 @@ msgstr "" "Il supporto nativo MIDI richiede il Roland Upgrade della LucasArts,\n" "ma %s non č presente. Verrą usato AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 #, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " @@ -3808,12 +3826,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Il file 'teenagent.dat' non č presente. Scaricarlo dal sito di ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/nb_NO.po b/po/nb_NO.po index de9be4c50e..94d071c8dd 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-25 23:42+0100\n" "Last-Translator: Einar Johan Trųan Sųmåen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -55,16 +55,16 @@ msgstr "Oppover" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Avbryt" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Vil du virkelig overskrive denne filen?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Trekant" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Diverse" @@ -206,14 +206,14 @@ msgstr "Nullstill" msgid "Reset all FluidSynth settings to their default values." msgstr "Nullstill alle FluidSynth-instillinger til standardverdier" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -242,15 +242,15 @@ msgstr "Lukk" msgid "Mouse click" msgstr "Musklikk" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Vis tastatur" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Omkoble taster" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Veksle fullskjerm" @@ -327,7 +327,7 @@ msgstr "" "versjon" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<standard>" @@ -397,217 +397,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale voluminstillinger" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillinger" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillinger" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillinger" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillinger" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Sti" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Sti" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Spillsti:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Spillsti:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Bestemmer sti til ytterligere data brukt av spillet" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Bestemmer sti til lagrede spill" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Velg SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Velg mappe med spilldata" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Velg mappe med ytterligere data" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Velg mappe for lagrede spill" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Denne spill-IDen er allerede i bruk. Vennligst velg en annen." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~V~alg..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Endre globale ScummVM-innstillinger" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Start valgt spill" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~Å~pne..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Åpne lagret spill for det valgte spillet" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~L~egg til spill..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Hold Shift for å legge til flere" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~R~ediger spill..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Endre spillinstillinger" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~F~jern spill" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Fjern spill fra listen. Spilldataene forblir intakte" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~L~egg til spill..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spill..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spill" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Sųk i spilliste" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Sųk:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Åpne spill:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Åpne" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -615,40 +615,40 @@ msgstr "" "Vil du virkelig kjųre flerspill-finneren? Dette kan potensielt legge til et " "stort antall spill." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke åpne den valgte mappen!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikke finne noe spill i den valgte mappen!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Velg spill:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Vil du virkelig fjerne denne spillkonfigurasjonen?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Vil du laste et lagret spill?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Dette spillet stųtter ikke lasting av spill fra oppstarteren." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikke finne noen motor som kunne kjųre det valgte spillet!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Legg til flere..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -733,92 +733,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Klarte ikke å aktivere enkelte av endringene i grafikkinstillinger:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "videomodusen kunne ikke endres." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "fullskjermsinnstillingen kunne ikke endres" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "aspektrate-innstillingen kunne ikke endres" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafikkmodus:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Tegnemodus:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Spesiel dithering-modus stųttet av enkelte spill" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Aspekt-rate korrigering" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Korriger aspekt-rate for 320x200-spill" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Foretrukket enhet:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musikkenhet:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Velger foretrukket lydenhet eller lydkort-emulator" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Velger ut-lydenhet eller lydkortemulator" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Foretrukket enh.:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musikkenhet:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib-emulator:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib brukes til musikk i mange spill" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Utrate:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -826,51 +826,47 @@ msgstr "" "Hųyere verdier gir bedre lydkvalitet, men stųttes kanskje ikke av ditt " "lydkort " -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM-enhet:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Velger standard lydenhet for General MIDI-utdata" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Ikke bruk General MIDI-musikk" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Bruk fųrste tilgjengelige enhet" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont stųttes ikke av enkelte lydkort, FluidSynth og Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Mikset AdLib/MIDI-modus" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Bruk både MIDI- og AdLib- lydgenerering" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth-instillinger" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 Enhet:" @@ -994,95 +990,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth-instillinger" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Velger sti for ytterligere data brukt av alle spill eller ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Div" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI-tegner:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Taster" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Språk i ScummVM-GUIet" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du må starte ScummVM på nytt for at endringene skal tre i kraft. " -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Den valgte mappen kan ikke skrives til. Vennligst velg en annen." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Velg mappe for GUI-temaer" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Velg mappe for ytterligere filer" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Velg mappe for plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1099,65 +1099,65 @@ msgstr "# neste" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Tall" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Slett" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Rediger" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Forfatter: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notater: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Ukjent Forfatter" @@ -1221,7 +1221,7 @@ msgstr "Opprett ett nytt lagret spill." msgid "Name: " msgstr "Navn:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Gi en beskrivelse for posisjon %d:" @@ -1230,28 +1230,28 @@ msgstr "Gi en beskrivelse for posisjon %d:" msgid "Select a Theme" msgstr "Velg et tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standard tegner" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Kantutjevnet tegner" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Kantutjevnet" @@ -1276,39 +1276,39 @@ msgstr "Sjekk for oppdateringer..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Tųm verdi" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motoren stųtter ikke debug-nivå '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Meny" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Hopp over" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Hopp over linje" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Problem ved kjųring av spill:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikke finne noen motor som kunne kjųre det valgte spillet" @@ -1467,15 +1467,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~T~ilbake til oppstarter" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Lagret spill:" @@ -1484,16 +1484,16 @@ msgstr "Lagret spill:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Lagre" @@ -1517,12 +1517,12 @@ msgstr "" "grunnleggende informasjon og instruksjon om hvordan du får ytterligere hjelp." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~vbryt" @@ -1597,7 +1597,7 @@ msgstr "" msgid "Start anyway" msgstr "Start allikevel" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Emulator" @@ -1714,7 +1714,7 @@ msgstr "Vil du virkelig avslutte?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avslutt" @@ -1863,7 +1863,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~L~ukk" @@ -2356,20 +2356,38 @@ msgstr "" "Ikke glem å koble en tast til handlingen 'Skjul verktųylinje' for å se hele " "inventaret" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Sjekk for oppdateringer..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Fargeblindmodus" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Vis objektmerkelapper" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Bruk originale lagre/laste-skjermer" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Bruk de originale lagre/laste-skjermene, istedenfor ScummVM-variantene" @@ -2415,27 +2433,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Gjennopprett spill:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Gjenopprett" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2446,7 +2464,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2457,7 +2475,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2468,7 +2486,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Fant ikke cutscenefil '%s'!" @@ -2499,20 +2517,20 @@ msgstr "" "Trykk OK for å konvertere dem nå, ellers vil du bli spurt igjen neste gang " "du starter spillet. \n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Bruk lys palettmodus" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Vis grafikk med spillets lyse palett" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Klarte ikke åpne spilltilstand fra fil." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Klarte ikke lagre spilltilstand fra fil." @@ -2529,7 +2547,7 @@ msgstr "Rask filmhastighet" msgid "Play movies at an increased speed" msgstr "Spill filmer med ųkt hastighet" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Klarte ikke å lagre spill." @@ -2738,23 +2756,23 @@ msgstr "Hoved~m~eny" msgid "~W~ater Effect Enabled" msgstr "~V~anneffekt aktivert" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Hopp over Hall of Records storyboard scenene." -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Tillater spilleren å hoppe forbi Hall of Records storyboard scener. " -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Skaler «making of»-videoer til fullskjerm" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Skaler «making of»-videoene, slik at de bruker hele skjermen." -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2763,23 +2781,23 @@ msgstr "" "Kan ikke lagre spilltilstand i posisjon %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Last fil" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Laster spill..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Lagre fil" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Lagrer spill..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2796,11 +2814,11 @@ msgstr "" "Trykk OK for å konvertere dem nå, ellers vil du bli spurt igjen neste gang " "du starter spillet.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM konverterte alle de lagrede spillene dine uten problemer." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2919,128 +2937,128 @@ msgid "" msgstr "" "Bruk det alternative settet med sųlvmuspekere, istedenfor de normale gylne." -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Vis objektmerkelapper" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Sett inn disk %c, og trykk Tast for å fortsette." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Fant ikke %s, (%c%d) Trykk Knapp." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Feil ved lesing av disk %c, (%c%d) Trykk Knapp." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spill pauset. Trykk på MELLOMROMstasten for å fortsette." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Er du sikker på at du vil starte på nytt? (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Er du sikker på at du vil avslutte? (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spill" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Sett inn disk for lagrede spill" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Du må skrive inn et navn" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Spillet ble IKKE lagret (full disk?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Spillet ble IKKE lastet" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Lagrer '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Laster '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Gi det LAGREDE spillet ditt et navn" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Velg et spill for LASTING" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Spilltittel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~F~orrige" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Kun tale" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Tale og undertekster" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Kun undertekster" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst & Tale" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Velg ferdighetsnivå" -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Referer til Loom(TM)-håndboka di for hjelp." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Trening" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Ekspert" @@ -3577,23 +3595,23 @@ msgstr "Fly til hųyre" msgid "Fly to lower right" msgstr "Fly til nedre hųyre" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musikkvolum: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Teksthastighet: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3602,7 +3620,7 @@ msgstr "" "Ekte MIDI-stųtte krever «Roland Upgrade» fra LucasArts,\n" "men %s mangler. Bruker AdLib istedet." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3788,12 +3806,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Du mangler 'teenagent.dat'-fila. Hent den ned fra ScummVM-hjemmesiden" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/nl_NL.po b/po/nl_NL.po index 032daf4590..1385e96a94 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-21 13:05+0100\n" "Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n" "Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n" @@ -55,16 +55,16 @@ msgstr "Ga omhoog" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Annuleren" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Wilt u dit bestand echt overschrijven?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Driehoek" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Misc" @@ -206,14 +206,14 @@ msgstr "Reset" msgid "Reset all FluidSynth settings to their default values." msgstr "Alle FluidSynth instellingen terugzetten naar de standaard waarden." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -243,15 +243,15 @@ msgstr "Sluiten" msgid "Mouse click" msgstr "Muisklik" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Toon toetsenbord" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Toetsen opnieuw koppelen" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Volledig scherm in-/uitschakelen" @@ -328,7 +328,7 @@ msgstr "" "Nederlandse." #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<standaard>" @@ -398,219 +398,219 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Negeer algemene volume instellingen" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Negeer algemene MIDI instellingen" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Negeer algemene MIDI instellingen" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Negeer algemene MT-32 instellingen" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Negeer algemene MT-32 instellingen" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Paden" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Paden" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Spel Pad:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Spel Pad:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Extra Pad:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Specificeer pad naar additionele data voor het spel" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Extra Pad:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Bewaar Pad:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Bepaalt waar opgeslagen spellen worden bewaard." -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Bewaar Pad:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Geen" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standaard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Selecteer SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Selecteer map met speldata" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Selecteer additionele speldatamap" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Selecteer map voor opgeslagen spellen" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Dit spel-ID is al in gebruik. Kies a.u.b. een andere." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~S~toppen" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Hiermee verlaat u ScummVM." -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "O~v~er..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Geeft informatie over ScummVM." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pties..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Algemene ScummVM opties" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tarten" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Start het geselecteerde spel." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~L~aad Spel..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Laad een eerder opgeslagen spel voor het geselecteerde spel." -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "Spel ~T~oevoegen" -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "" "Houd Shift ingedrukt voor het toevoegen van grote hoeveelheden spellen." -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "Spel ~B~ewerken" -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Verander spel opties" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "Spel ~V~erwijderen" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "" "Verwijder dit spel uit de lijst. De spel data bestanden blijven intact." -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~T~oevoegen..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~B~ewerken..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~V~erwijderen" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Zoek in lijst met spellen" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Zoeken:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Laad spel:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Laden" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -618,41 +618,41 @@ msgstr "" "Wilt u echt de mass game detector draaien? Dit voegt potentieel een groot " "aantal spellen toe." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kon de opgegeven map niet openen!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kon geen enkel spel vinden in de opgegeven map!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Kies het spel:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Wilt u echt deze spelconfiguratie verwijderen?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Wilt u het opgeslagen spel laden?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Dit spel ondersteunt het laden van spelen vanaf het startmenu niet." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM heeft geen engine gevonden die in staat was het geselecteerde spel " "te spelen!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Mass Add..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Opnemen..." @@ -739,92 +739,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Geen" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Sommige grafische opties konden niet worden toegepast:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "de videomodus kon niet veranderd worden." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "de volledig-scherminstelling kon niet veranderd worden" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "de pixelverhoudinginstelling kon niet veranderd worden" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafische modus:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Render modus:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Speciale ditheringmodi die door sommige games ondersteund worden." -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Volledig-scherm modus" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Pixelverhoudingcorrectie" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Corrigeer de pixelverhouding voor 320x200 spellen." -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Voorkeursapparaat:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Muziekapparaat:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Specificeert het voorkeurs geluidsapparaat of geluidskaartemulator" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Specificeert geluidsapparaat of geluidskaartemulator" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Voorkeursapparaat:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Muziekapparaat:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulator:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib word in vele spelen voor muziek gebruikt" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Output snelheid:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -832,53 +832,49 @@ msgstr "" "Hogere waarden geven betere geluidskwaliteit maar worden mogelijk niet " "ondersteund door uw geluidskaart." -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM Apparaat:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Specificeert het standaard geluidsapparaat voor General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Geen General MIDI muziek gebruiken" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Gebruik eerst beschikbare apparaat" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont wordt ondersteund door FluidSynth en Timidity en sommige " "geluidskaarten." -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Gemengde AdLib/MIDI modus" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Gebruik zowel MIDI als AdLib geluid" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth Instellingen" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 Apparaat:" @@ -1003,97 +999,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Spraak volume:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth Instellingen" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Thema Pad:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Thema Pad:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Specificeert het pad for aanvullende data voor ScummVM zelf of de spellen." -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Plugins Pad:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins Pad:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Misc" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Thema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI Renderer:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autosave:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autosave:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Toetsen" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "GUI Taal:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Taal van de ScummVM GUI" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "U dient ScummVM opnieuw op te starten om de wijzigingen te activeren." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "Er kan niet worden geschreven in de gekozen map. Selecteer a.u.b. een andere." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Selecteer map voor GUI themas" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Selecteer map voor extra bestanden" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Selecteer map voor plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1110,65 +1110,65 @@ msgstr "# volgende" msgid "add" msgstr "voeg toe" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Karakter verwijderen" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Num" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Opnemen of Afspelen Spel" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Verwijderen" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Opnemen" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Opnieuw afspelen" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Bewerken" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Auteur:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notities" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Wilt u deze opname echt verwijderen?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Onbekende Auteur" @@ -1232,7 +1232,7 @@ msgstr "Nieuw spel opslaan" msgid "Name: " msgstr "Naam: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Geef een omschrijving voor slot %d:" @@ -1241,28 +1241,28 @@ msgstr "Geef een omschrijving voor slot %d:" msgid "Select a Theme" msgstr "Selecteer een thema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX uitgeschakeld" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX uitgeschakeld" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standaard Renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standaard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Antialiased Renderer" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Antialiased" @@ -1287,39 +1287,39 @@ msgstr "Controleren op updates..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Veld leegmaken" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Engine ondersteunt debug level '%s' niet" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Overslaan" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pauze" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Regel overslaan" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Fout tijdens het starten van spel:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "" "Kon geen engine vinden die in staat was het geselecteerde spel te spelen" @@ -1479,15 +1479,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "S~t~artmenu" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Spel opslaan:" @@ -1496,16 +1496,16 @@ msgstr "Spel opslaan:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Opslaan" @@ -1530,12 +1530,12 @@ msgstr "" "assistentie." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~nnuleer" @@ -1612,7 +1612,7 @@ msgstr "" msgid "Start anyway" msgstr "Evengoed starten" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Emulator" @@ -1729,7 +1729,7 @@ msgstr "Wilt u echt stoppen?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Stoppen" @@ -1878,7 +1878,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~S~luiten" @@ -2372,20 +2372,38 @@ msgstr "" "Vergeet niet de 'Verberg werkbalk' te koppelen aan een toets om de hele " "inventaris te zien." -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Controleren op updates..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Kleurenblind Modus" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Toon objectnamen" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Gebruik originele opslaan/laad schermen" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2433,27 +2451,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Laad opgeslagen spel:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Laad" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2464,7 +2482,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2475,7 +2493,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2486,7 +2504,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Cutscene bestand '%s' niet gevonden!" @@ -2517,20 +2535,20 @@ msgstr "" "Klik OK om ze nu te converteren, anders zult u de volgende keer als u het " "spel start dit weer gevraagd worden.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Gebruik heldere palet modus" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Gebruik het heldere palet van het spel voor grafische zaken." -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Laden van opgeslagen spel mislukt." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Opslaan van spel in bestand is mislukt." @@ -2547,7 +2565,7 @@ msgstr "Film snel afspelen" msgid "Play movies at an increased speed" msgstr "Speel films sneller af" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Opslaan van spel mislukt." @@ -2757,25 +2775,25 @@ msgstr "~H~oofdmenu" msgid "~W~ater Effect Enabled" msgstr "~W~ater Effect Aangezet" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Sla de Hall of Records verhaallijnscenes over" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" "Maakt het voor de speler mogelijk om de Hall of Records verhaallijnscenes " "over te slaan" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Schaal het maken van videos naar het volledige scherm" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Schaal het maken van videos zodat ze het volledige scherm gebruiken" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2784,23 +2802,23 @@ msgstr "" "Spel opslaan in slot %i mislukt\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Laad bestand" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Spel laden..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Bestand opslaan" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Spel opslaan..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2817,11 +2835,11 @@ msgstr "" "Klik OK om ze nu te converteren, anders zult u de volgende keer als u het " "spel start dit weer gevraagd worden.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM heeft al uw opgeslagen spellen succesvol geconverteerd." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2946,128 +2964,128 @@ msgstr "" "Gebruik de alternative set van zilveren cursors, in plaats van de normale " "gouden" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Toon objectnamen" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Plaats disk %c en druk knop om verder te gaan." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Kan %s niet vinden, (%c%d) Druk op de knop." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Fout tijdens lezen van disk %c, (%c%d) Druk op de knop." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spel is gepauzeerd. Druk op de spatiebalk om verder te gaan." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Weet u zeker dat u opnieuw wilt beginnen? (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Weet u zeker dat u wilt stoppen? (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spelen" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Plaats bewaar/laad speldisk" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "U moet een naam invoeren" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Het spel was NIET opgeslagen (disk vol?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Het spel was NIET geladen" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Opslaan '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Laden '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Geef uw spel een naam" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Selecteer welk opgeslagen spel u wilt laden." -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Spel titel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~V~orige" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~V~olgende" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Alleen Spraak" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Spraak and Subtitels" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Alleen subtitels" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst en Spraak" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Selecteer een vakkundigheidsniveau." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Raadpleeg uw Loom(TM) handleiding voor hulp." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Oefenen" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Expert" @@ -3604,23 +3622,23 @@ msgstr "Vlieg naar rechts" msgid "Fly to lower right" msgstr "Vlieg naar rechts omlaag" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Snap scrollen aan" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Snap scroll uit" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Muziek volume:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Snelheid ondertitels:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3629,7 +3647,7 @@ msgstr "" "Voor MIDI support is de Roland Upgrade van Lucasarts vereist,\n" "maar %s ontbreekt. Er wordt nu AdLib gebruikt." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3819,14 +3837,14 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Het 'teenagent.dat' bestand ontbreekt. U kunt die vinden op de ScummVM " "website." -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/nn_NO.po b/po/nn_NO.po index e09e138dcc..d1adfc0318 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-26 00:37+0100\n" "Last-Translator: Einar Johan TrĆøan SĆømĆ„en <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -55,16 +55,16 @@ msgstr "Oppover" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Avbryt" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Vil du verkeleg overskrive fila?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Triangel" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Diverse" @@ -206,14 +206,14 @@ msgstr "Nullstill" msgid "Reset all FluidSynth settings to their default values." msgstr "Nullstill alle FluidSynth-instillingar til standardverdiar" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -242,15 +242,15 @@ msgstr "Steng" msgid "Mouse click" msgstr "Musklikk" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Syn Tastatur" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Omkople tastar" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Veksle fullskjerm" @@ -327,7 +327,7 @@ msgstr "" "engelsk versjon" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<standard>" @@ -397,257 +397,257 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale voluminstillingar" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillingar" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillingar" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillingar" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillingar" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Stiar" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Stiar" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Spelsti:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Spelsti:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Veljer sti til tilleggsdata nytta av spelet" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Veljer kor lagra spel vert lagra" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Vel SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Vel mappe med speldata" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Vel mappe med tileggsdata for spelet" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Vel mappe for lagra spel" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Denne spel-IDen er allerede teken. Vęr vennleg og vel ein anna." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~V~al..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Endre globale ScummVM-instillingar" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Start det velde spelet" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~Å~pne..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Åpne eit lagra spel for the velde spelet" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~L~egg til spel..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Hold Shift nede for å legge til fleire" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~R~ediger spel..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Endre spelinstillingar" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~F~jern spel" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Fjern spel frå lista. Speldataene forblir intakte" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~L~egg til spel..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spel..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spel" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Sųk i spelliste" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Sųk:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Åpne spel:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Åpne" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikkje åpne den velde mappa!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikkje finne noko spel i den velde mappa!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Vel spelet:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Vil du verkeleg fjerne denne spelkonfigurasjonen?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Vil du laste det lagra spelet?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Dette spelet stųttar ikkje åpning av lagra spel frå oppstartaren." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikkje finne nokon motor som var i stand til å kųyre det velde " "spelet!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Legg til fleire..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -731,92 +731,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Klarte ikkje å aktivere nokre av grafikkvalendringane:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "Kunne ikkje endre videomodus." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "Fullskjerminstillinga kunne ikkje endrast" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "aspektrate-innstillinga kunne ikkje endrast" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafikkmodus:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Teiknemodus:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Spesielle dithering-modus som stųttast av nokre spel" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Aspekt-korrigering" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Rett opp aspekt for 320x200 spel" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Fųretrukken eining:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musikkeining:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musikkeining:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib emulator:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib nyttast til musikk i mange spel" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -824,51 +824,47 @@ msgstr "" "Hųgare verdier gir betre lydkvalitet, men stųttast kanskje ikkje av " "lydkortet ditt" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM Eining:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Veljer standard lydeining for General MIDI avspeling" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Ikkje nytt General MIDI musikk" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Nytt fųrste tilgjengelege eining" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont stųttast av enkelte lydkort, FluidSynth og Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Blanda AdLib/MIDI-modus" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Nytt båe MIDI og AdLib lydskaping" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth instillingar" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 Eining:" @@ -990,95 +986,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth instillingar" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Div" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI-teiknar:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Tastar" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Språk i ScummVM-GUIet" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du må starte ScummVM på nytt for at endringane skal tre i kraft." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Den velde mappa kan ikkje skrivast til. Vennlegst vel ein annan." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Vel ei mappe for GUI-tema:" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Vel ei mappe for ekstra filer" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Vel ei mappe for plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1095,65 +1095,65 @@ msgstr "# neste" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Tal" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Slett" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Rediger" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Forfattar: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Notatar: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Ukjend Forfattar" @@ -1217,7 +1217,7 @@ msgstr "Lag eit nytt lagra spel" msgid "Name: " msgstr "Namn:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "" @@ -1226,28 +1226,28 @@ msgstr "" msgid "Select a Theme" msgstr "Vel eit tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standardteiknar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Kantutjevna teiknar" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Kantutjevna" @@ -1272,39 +1272,39 @@ msgstr "SJå etter oppdateringar..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Tųm verdi" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motoren stųttar ikkje debug-nivå '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Meny" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Hopp over" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Hopp over linje" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Feil under kųyring av spel:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikkje finne nokon motor som kunne kųyre det velde spelet." @@ -1463,15 +1463,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Tilbake til Oppsta~r~tar" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Lagra spel:" @@ -1480,16 +1480,16 @@ msgstr "Lagra spel:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Lagre" @@ -1514,12 +1514,12 @@ msgstr "" "ytterlegare hjelp." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~vbryt" @@ -1590,7 +1590,7 @@ msgstr "" msgid "Start anyway" msgstr "Start allikevel" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Emulator" @@ -1707,7 +1707,7 @@ msgstr "Vil du verkeleg avslutte?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avslutt" @@ -1856,7 +1856,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~L~ukk" @@ -2347,20 +2347,38 @@ msgstr "" "Ikkje glųym å kople ein tast til 'Skjul verktųylinje' for å se heile " "inventaret" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "SJå etter oppdateringar..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Fargeblindmodus" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Syn objektmerkelappar" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Nytt opprinnelege skjermar for lagring/lasting" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2403,27 +2421,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Gjenopprett spel:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Gjenopprett" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2431,7 +2449,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2439,7 +2457,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2447,7 +2465,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "" @@ -2478,20 +2496,20 @@ msgstr "" "Trykk OK for å konvertere dei no, ellers kjem du til å verte spurt neste " "gong du startar spelet.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Nytt lys palett-modus" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Kunne ikkje laste lagra spel frå fil." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Klarte ikkje lagre speltilstand til fil." @@ -2508,7 +2526,7 @@ msgstr "Rask filmfart" msgid "Play movies at an increased speed" msgstr "Spel filmar med auka hastighet" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Klarte ikkje lagre spel" @@ -2700,23 +2718,23 @@ msgstr "Hoved~m~eny" msgid "~W~ater Effect Enabled" msgstr "~V~anneffekt aktivert" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2725,23 +2743,23 @@ msgstr "" "Kan ikkje lagre spel i spor %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Last fil:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Lastar spel..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Lagra fil:" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Lagrar spel..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2751,11 +2769,11 @@ msgid "" "Press OK to convert them now, otherwise you will be asked next time.\n" msgstr "" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "" -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2869,128 +2887,128 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Nytt det alternative settet med sųlvpeikarar, istaden for dei gylne" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Syn objektmerkelappar" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Sett inn disk %c og trykk på knappen for å fortsette." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "" -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "" -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spelet er pausa. Trykk MELLOMROM for å fortsette." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Er du sikker på at du vil starte på nytt (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Er du sikker på at du vil avslutte (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spel" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Sett in lagre/laste speldisk" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Du må skrive eit namn" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Spelet vart IKKJE lagra (full disk?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Spelet vart IKKJE lasta" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Lagrar '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Lastar '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Namngi det LAGRA spelet" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Vel eit spel for LASTING" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Speltittel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~F~orrige" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Berre Tale" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Tale og undertekstar" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Berre undertekstar" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst & Tale" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "" -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Sjå i Loom(TM)-manualen for hjelp." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Ųving" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Ekspert" @@ -3527,30 +3545,30 @@ msgstr "Fly til hųgre" msgid "Fly to lower right" msgstr "Fly til nedre hųgre" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musikkvolum:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Subtitle speed: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" "but %s is missing. Using AdLib instead." msgstr "" -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3731,12 +3749,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Du mangler fila 'teenagent.dat'. Skaff den frå ScummVM-heimesida" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/pl_PL.po b/po/pl_PL.po index 3ed207efea..8566e6f09e 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-20 23:43+0100\n" "Last-Translator: Micha³ Zi±bkowski <mziab@o2.pl>\n" "Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n" @@ -58,16 +58,16 @@ msgstr "W górź" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Anuluj" @@ -106,7 +106,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Na pewno chcesz nadpisaę ten plik?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -116,7 +116,7 @@ msgid "Yes" msgstr "Tak" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -177,7 +177,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Trójk±t" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Róæne" @@ -209,14 +209,14 @@ msgstr "Reset" msgid "Reset all FluidSynth settings to their default values." msgstr "Przywróę domy¶lne warto¶ci wszystkich ustawień FluidSynth." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -245,15 +245,15 @@ msgstr "Zamknij" msgid "Mouse click" msgstr "Klikniźcie" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Wy¶wietl klawiaturź" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Dostosuj klawisze" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "W³±cz/wy³±cz pe³ny ekran" @@ -328,7 +328,7 @@ msgid "" msgstr "Jźzyk gry. Nie zmieni to hiszpańskiej wersji gry w angielsk±." #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<domy¶lne>" @@ -398,256 +398,256 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Uæyj w³asnych ustawień g³o¶no¶ci" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Uæyj w³asnych ustawień MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Uæyj w³asnych ustawień MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Uæyj w³asnych ustawień MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Uæyj w³asnych ustawień MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "¦cieæki" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "¦cieæki" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "¦cieæka gry:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "¦cieæka gry:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "¦c. dodatków:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Okre¶la ¶cieækź dodatkowych danych gry" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "¦c. dodatków:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "¦cieæka zapisów:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Okre¶la gdzie zapisywaę stan gry" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "¦cieæka zapisów:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Brak" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Domy¶lnie" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Wybierz SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Wybierz katalog z plikami gry" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Wybierz dodatkowy katalog gry" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Wybierz katalog dla zapisów" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Identyfikator jest juæ zajźty. Wybierz inny." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~Z~akończ" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Zakończ ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "I~n~formacje..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Ksi±æka ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pcje..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Zmień ustawienia ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Rozpocznij wybran± grź" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~W~czytaj..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Wczytaj zapis wybranej gry" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~D~odaj grź..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Przytrzymaj Shift, by dodawaę zbiorowo" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~dytuj grź..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Zmień opcje gry" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~U~suń grź" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Usuwa grź z listy. Pliki gry pozostaj± nietkniźte" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~D~odaj grź..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~dytuj grź..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~U~suń grź" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Wyszukaj grź na li¶cie" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Szukaj" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Wczytaj grź:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Wczytaj" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" "Chcesz uruchomię masowy detektor gier? Moæe dodaę wiele tytu³ów do listy" -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nie moæe otworzyę katalogu!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM nie znalaz³ æadnej gry w tym katalogu!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Wybierz grź:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Na pewno chcesz usun±ę tź grź z konfiguracji?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Chcesz wczytaę zapis stanu gry?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Ta gra nie wspiera wczytywania z launchera." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM nie znalaz³ silnika zdolnego uruchomię wybran± grź!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Przeszukaj..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Nagraj..." @@ -730,92 +730,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Brak" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Nie uda³o siź zastosowaę czź¶ci zmian opcji grafiki:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "nie uda³o siź zmienię trybu wideo." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "nie uda³o siź zmienię trybu pe³noekranowego" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "nie uda³o siź zmienię formatu obrazu" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Tryb grafiki:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderer:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Specjalne tryby ditheringu wspierane przez niektóre gry" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Pe³ny ekran" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Korekcja formatu obrazu" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Korekcja formatu obrazu dla gier 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Pref. urz±dzenie:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Urz. muzyczne:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Okre¶la preferowane urz±dzenie d¼wiźkowe lub emulator karty d¼wiźkowej" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Okre¶la wyj¶ciowe urz±dzenie d¼wiźkowe lub emulator karty d¼wiźkowej" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Pref. urz±dzenie:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Urz. muzyczne:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emulator AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib jest uæywany do muzyki w wielu grach" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Czźst. wyj.:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -823,53 +823,49 @@ msgstr "" "Wyæsze warto¶ci daj± lepsz± jako¶ę d¼wiźku, ale mog± byę nieobs³ugiwane " "przez twoj± kartź d¼wiźkow±" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Urz±dzenie GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Okre¶la domy¶lne urz±dzenie d¼wiźkowe dla wyj¶cia General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Nie uæywaj muzyki General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Uæyj pierwszego dostźpnego urz±dzenia" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont jest wspierany przez niektóre karty d¼wiźkowe, FluidSynth i " "Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Tryb miksowanego AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Uæywaj obu generatorów d¼wiźku, MIDI i AdLib, jednocze¶nie" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Wzm. MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "Ustawienia FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Urz±dzenie MT-32:" @@ -994,95 +990,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "G³o¶no¶ę mowy:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "Ustawienia FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "¦cieæka stylu:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "¦cieæka stylu:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Okre¶la ¶cieækź dla dodatkowych danych dla wszystkich gier lub ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "¦cieæka wtyczek:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "¦cieæka wtyczek:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Róæne" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Styl:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Renderer interf.:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autozapis:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autozapis:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Klawisze" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Jźzyk interfejsu:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Jźzyk interfejsu ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Musisz zrestartowaę ScummVM, by zmiany zosta³y uwzglźdnione." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Ten katalog jest zabezpieczony przed zapisem. Wybierz inny." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Wybierz katalog dla stylów GUI." -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Wybierz katalog dla dodatkowych plików" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Wybierz katalog dla wtyczek" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1099,65 +1099,65 @@ msgstr "# nastźpny" msgid "add" msgstr "dodaj" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Usuń znak" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Num" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Nagrywanie/odtwarzanie rozgrywki" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Skasuj" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Nagrywaj" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Odtwarzaj" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Edytuj" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Autor: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Uwagi: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Na pewno chcesz usun±ę to nagranie?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Nieznany autor" @@ -1221,7 +1221,7 @@ msgstr "Stwórz nowy zapis" msgid "Name: " msgstr "Nazwa: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Podaj opis dla slotu %d:" @@ -1230,28 +1230,28 @@ msgstr "Podaj opis dla slotu %d:" msgid "Select a Theme" msgstr "Wybierz styl" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Wy³±czona grafika" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Wy³±czona grafika" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standardowy renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standardowy" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Wyg³adzany renderer" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Wyg³adzany" @@ -1276,39 +1276,39 @@ msgstr "Sprawd¼ aktualizacjź..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Wyczy¶ę" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Silnik nie wspiera poziomu debugowania '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pomiń" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Wstrzymaj" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Pomiń liniź" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "B³±d podczas uruchamiania gry:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Nie uda³o siź znale¼ę silnika zdolnego do uruchomienia zaznaczonej gry" @@ -1466,15 +1466,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~P~owrót do launchera" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Zapis:" @@ -1483,16 +1483,16 @@ msgstr "Zapis:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Zapisz" @@ -1516,12 +1516,12 @@ msgstr "" "dowiedzieę jak szukaę dalszej pomocy, sprawd¼ plik README." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~A~nuluj" @@ -1592,7 +1592,7 @@ msgstr "" msgid "Start anyway" msgstr "W³±cz mimo tego" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulator AdLib" @@ -1709,7 +1709,7 @@ msgstr "Na pewno chcesz wyj¶ę?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Zakończ" @@ -1858,7 +1858,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~Z~amknij" @@ -2348,20 +2348,38 @@ msgstr "" "Nie zapomnij przypisaę klawisza 'Ukryj pasek narzździ', by widzieę ca³y " "ekwipunek" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Sprawd¼ aktualizacjź..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Tryb dla daltonistów" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Pokaæ etykiety obiektów" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Uæyj oryginalnych ekranów odczytu/zapisu" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Uæyj oryginalnych ekranów odczytu/zapisu zamiast tych ze ScummVM" @@ -2408,27 +2426,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Wznów grź:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Wznów" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2439,7 +2457,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2450,7 +2468,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2461,7 +2479,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Nie znaleziono pliku przerywnika '%s'!" @@ -2491,20 +2509,20 @@ msgstr "" "Naci¶nij OK, æeby je teraz przekonwertowaę. W przeciwnym wypadku zostaniesz " "zapytany ponownie przy nastźpnym w³±czeniu gry.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Uæyj trybu jasnej palety" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Wy¶wietlaj grafikź za pomoc± jasnej palety gry" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Nie uda³o siź wczytaę stanu gry z pliku." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Nie uda³o siź zapisaę stanu gry do pliku." @@ -2521,7 +2539,7 @@ msgstr "Przy¶pieszone filmy" msgid "Play movies at an increased speed" msgstr "Odtwarzaj filmy ze zwiźkszon± prźdko¶ci±" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Nie uda³o siź zapisaę stanu gry" @@ -2729,23 +2747,23 @@ msgstr "~M~enu g³ówne" msgid "~W~ater Effect Enabled" msgstr "~E~fekty wody w³±czone" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Pomiń scenki storyboardowe w Hali Rekordów" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Pozwala graczowi na pomijanie scenek storyboardowych w Hali Rekordów" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Skaluj filmy making of na pe³ny ekran" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Skaluj filmy making of, by wype³nia³y ca³y ekran" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2754,23 +2772,23 @@ msgstr "" "Nie moæna zapisaę w slocie %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Wczytaj plik" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Wczytywanie stanu gry..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Zapisz plik" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Zapisywanie stanu gry..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2786,11 +2804,11 @@ msgstr "" "Naci¶nij OK, æeby je teraz przekonwertowaę. W przeciwnym wypadku zostaniesz " "zapytany ponownie przy nastźpnym w³±czeniu gry.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM pomy¶lnie przekonwertowa³ wszystkie twoje zapisy." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2911,128 +2929,128 @@ msgid "" msgstr "" "Uæyj alternatywnego zestawu srebrnych kursorów zamiast zwyk³ych z³otych" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Pokaæ etykiety obiektów" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "W³óæ dysk %c i naci¶nij przycisk, aby kontynuowaę." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Nie znaleziono %s, (%c%d). Naci¶nij przycisk." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "B³±d podczas odczytu dysku %c, (%c%d). Naci¶nij przycisk." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Gra wstrzymana. Naci¶nij spacjź, aby wznowię." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Na pewno chcesz zrestartowaę? (T/N)T" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Na pewno chcesz wyj¶ę? (T/N)T" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Uruchom" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "W³óæ dysk zapisu" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Musisz podaę nazwź" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "NIE zapisano stanu gry (brak miejsca?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "NIE wczytano gry" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Zapisywanie '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Wczytywanie '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Podaj nazwź zapisu" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Wybierz zapis do wczytania" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Tytu³ gry)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~P~oprzednia" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~astźpna" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Tylko mowa" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Mowa i napisy" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Tylko napisy" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Mowa i napisy" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Wybierz poziom umiejźtno¶ci." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Pomocy szukaj w instrukcji do³±czonej do Loom(TM)." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Trening" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Ekspert" @@ -3569,23 +3587,23 @@ msgstr "Leę w prawo" msgid "Fly to lower right" msgstr "Leę w dó³, w prawo" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Przesuwanie skokowe w³±czone" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Przesuwanie skokowe wy³±czone" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "G³o¶no¶ę muzyki: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Prźd. napisów: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3594,7 +3612,7 @@ msgstr "" "Natywne wsparcie MIDI wymaga aktualizacji Rolanda od LucasArts,\n" "ale brakuje %s. Prze³±czam na tryb AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3788,12 +3806,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Nie masz pliku \"teenagent.dat\". Pobierz go ze strony ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/pt_BR.po b/po/pt_BR.po index adf05bbf79..d3e495d1f9 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\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" @@ -57,16 +57,16 @@ msgstr "Acima" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Cancelar" @@ -106,7 +106,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Vocź realmente quer excluir este jogo salvo?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -116,7 +116,7 @@ msgid "Yes" msgstr "Sim" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -180,7 +180,7 @@ msgstr "" msgid "Triangle" msgstr "" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Outros" @@ -212,14 +212,14 @@ msgstr "" msgid "Reset all FluidSynth settings to their default values." msgstr "" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -248,15 +248,15 @@ msgstr "Fechar" msgid "Mouse click" msgstr "Clique do mouse" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Mostrar teclado" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Remapear teclas" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 #, fuzzy msgid "Toggle fullscreen" msgstr "Habilita Tela Cheia" @@ -332,7 +332,7 @@ msgid "" msgstr "Idioma do jogo. Isto nćo irį passar seu jogo Inglźs para Portuguźs" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<padrćo>" @@ -403,218 +403,218 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Sobrepor configuraēćo global de volume" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Sobrepor configuraēćo global de MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Sobrepor configuraēćo global de MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Sobrepor configuraēćo global de MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Sobrepor configuraēćo global de MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Pastas" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Pastas" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Pasta do Jogo:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Pasta do Jogo:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Pasta de Extras" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Especifique a pasta para dados utilizados no jogo" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Pasta de Extras" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Pasta para Salvar" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Especifique onde guardar seus jogos salvos" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Pasta para Salvar" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Nenhum(a)" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Padrćo" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Selecione o SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Selecione a pasta com os arquivos do jogo" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Selecione a pasta adicional do jogo" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Selecione a pasta para os jogos salvos" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Este código jį esta sendo utilizado. Por favor, escolha outro." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~S~air" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Sair do ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "So~b~re..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Sobre o ScumnmVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~pēões" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Alterar opēões globais do ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~I~niciar" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Iniciar jogo selecionado" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~C~arregar" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Carregar jogo salvo do jogo selecionado" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~dicionar Jogo..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Segure Shift para Multi-Adiēćo" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~ditar Jogo..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Alterar opēões do jogo" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~R~emover Jogo" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "" "Remover jogo da lista. Os arquivos de dados do jogo permanecem intactos" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~dicionar Jogo..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditar Jogo..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~emover Jogo" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Pesquisar na lista de jogos" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Pesquisar:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Carregar jogo:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Carregar" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -622,42 +622,42 @@ msgstr "" "Vocź realmente deseja adicionar vįrios jogos ao mesmo tempo? Isso poderį " "resultar em uma adiēćo gigantesca de jogos." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nćo conseguiu abrir a pasta especificada!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM nćo encontrou nenhum jogo na pasta especificada!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Escolha o jogo:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Vocź deseja realmente remover a configuraēćo deste jogo?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 #, fuzzy msgid "Do you want to load saved game?" msgstr "Vocź deseja carregar ou salvar o jogo?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Este jogo nćo suporta abrir jogos a partir do menu principal." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM nćo conseguiu encontrar qualquer programa capaz de rodar o jogo " "selecionado!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Multi-Adiēćo..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -746,92 +746,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Nenhum(a)" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Falha ao aplicar algumas mudanēas nas opēões de grįfico:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "o modo de vķdeo nćo pōde ser alterado." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "a configuraēćo de tela cheia nćo pōde ser mudada" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "a configuraēćo de proporēćo nćo pōde ser mudada" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Modo grįfico:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderizaēćo" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Modos especiais de dithering suportados por alguns jogos" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Modo Tela Cheia" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Correēćo de proporēćo" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Correēćo de proporēćo para jogos 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Dispositivo pref.:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Disp. de mśsica:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Especifica o dispositivo de som preferido ou emulador de placa de som" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Especifica o dispositivo de saķda de som ou emulador de placa de som" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Dispositivo pref.:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Dispositivo de mśsica:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "Emulador AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib é utilizado para mśsica em vįrios jogos" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Taxa de saķda:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -839,51 +839,47 @@ msgstr "" "Maior valor especifica melhor qualidade de som, mas pode nćo ser suportado " "por sua placa de som" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Especifique o dispositivo de som padrćo para a saķda General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Nćo usar mśsica General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Usar o primeiro dispositivo disponķvel" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont é suportado por algumas placas de som, FluidSynth e Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Mixar AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Usar MIDI e AdLib juntos na geraēćo de som" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "Ganho MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Dispositivo MT-32:" @@ -1008,97 +1004,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Volume da Voz:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Pasta do Tema" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Pasta do Tema" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Especifica a pasta para os dados adicionais usados por todos os jogos ou " "ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Pasta de Plugins:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pasta de Plugins:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Outros" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Renderizador GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Auto-Salvar:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Auto-Salvar:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Idioma do GUI:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Linguagem do ScummVM GUI" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Vocź tem que reiniciar o ScummVM para funcionar." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "O diretório escolhido nćo pode ser usado. Por favor, selecione outro." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Selecione a pasta para os temas da Interface de Uso Grįfico" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Selecione a pasta para os arquivos extras" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Selecione a pasta para os plugins" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1115,68 +1115,68 @@ msgstr "" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 #, fuzzy msgid "Delete char" msgstr "Excluir" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Excluir" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 #, fuzzy msgid "Playback" msgstr "Jogar" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 #, fuzzy msgid "Do you really want to delete this record?" msgstr "Vocź realmente quer excluir este jogo salvo?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 #, fuzzy msgid "Unknown Author" msgstr "Erro desconhecido" @@ -1244,7 +1244,7 @@ msgstr "Falha ao salvar o jogo" msgid "Name: " msgstr "Nome:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "" @@ -1253,31 +1253,31 @@ msgstr "" msgid "Select a Theme" msgstr "Selecione um Tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "GFX desabilitado" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desabilitado" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 #, fuzzy msgid "Standard Renderer" msgstr "Renderizador padrćo (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 #, fuzzy msgid "Standard" msgstr "Padrćo (16bpp)" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased Renderer" msgstr "Renderizador Anti-Serrilhamento (16bpp)" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 #, fuzzy msgid "Antialiased" msgstr "Anti-Serrilhamento (16bpp)" @@ -1303,39 +1303,39 @@ msgstr "Procurar por Atualizaēões..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Limpar valor" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Esse programa nćo suporta o nķvel de debug '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Menu" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pular" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausar" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Pula linha" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Erro ao executar o jogo:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "" "Nćo foi possķvel encontrar qualquer programa capaz de rodar o jogo " @@ -1496,15 +1496,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~oltar ao menu" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Salvar jogo:" @@ -1513,16 +1513,16 @@ msgstr "Salvar jogo:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Salvar" @@ -1547,12 +1547,12 @@ msgstr "" "instruēões sobre como obter assistźncia adicional." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~C~ancelar" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Start anyway" msgstr "Iniciar de qualquer maneira" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "Emulador AdLib" @@ -1747,7 +1747,7 @@ msgstr "Vocź realmente deseja sair?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Sair" @@ -1900,7 +1900,7 @@ msgid "Windows MIDI" msgstr "MIDI Windows" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~F~echar" @@ -2395,20 +2395,36 @@ msgstr "" "Nćo se esqueēa de mapear uma tecla para \"Ocultar a barra de ferramentas\" " "para ver todo o seu inventįrio" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Procurar por Atualizaēões..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +msgid "Color mode" +msgstr "" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +msgid "Show scanlines" +msgstr "" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2451,27 +2467,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Restaurar jogo:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Restaurar" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2482,7 +2498,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2493,7 +2509,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2504,7 +2520,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Arquivo de vķdeo '%s' nćo encontrado!" @@ -2536,16 +2552,16 @@ msgstr "" "Pressione OK para convertź-los agora, caso contrįrio vocź serį solicitado " "novamente na próxima vez que vocź iniciar o jogo.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 #, fuzzy msgid "Use bright palette mode" msgstr "Item da direita superior" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "" @@ -2553,7 +2569,7 @@ msgstr "" "\n" "%s" -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "" @@ -2574,7 +2590,7 @@ msgstr "Modo rįpido" msgid "Play movies at an increased speed" msgstr "" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Falha ao salvar o jogo" @@ -2780,23 +2796,23 @@ msgstr "~M~enu Principal ScummVM" msgid "~W~ater Effect Enabled" msgstr "Modo ~E~feitos de įgua ativado" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2805,25 +2821,25 @@ msgstr "" "Nćo é possķvel salvar o jogo na posiēćo %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Carregar jogo:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Carregando jogo..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Falha ao salvar jogo!" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Salvando jogo..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2840,11 +2856,11 @@ msgstr "" "Pressione OK para convertź-los agora, caso contrįrio vocź serį solicitado na " "próxima vez.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM converteu com źxito todos os seus jogos salvos." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2963,129 +2979,129 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Insera o Disk %c e Pressione o Botćo para Continuar." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Incapaz de encontrar %s, (%c%d) Pressione o Botćo." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Erro de leitura do disco %c, (%c%d) Pressione o Botćo." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Jogo pausado. Pressione ESPAĒO para continuar." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 #, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Tem certeza de que deseja reiniciar? (S/N)S" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 #, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Tem certeza de que deseja sair? (S/N)S" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Jogar" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Insira o disco para salvar/carregar o jogo" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Vocź deve digitar um nome" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "O jogo NĆO foi salvo (disco cheio?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "O jogo NĆO foi carregado" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Salvando '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Carregando '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Dź um nome ao seu SAVE" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Selecione um jogo para CARREGAR" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Tķtulo do jogo)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~A~nterior" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~P~róximo" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Somente Voz" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Voz e Legendas" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Somente Legendas" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voz e Legendas" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "" -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "" -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "" @@ -3622,26 +3638,26 @@ msgstr "Voar para direita" msgid "Fly to lower right" msgstr "Voar para direita inferior" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 #, fuzzy msgid "Snap scroll on" msgstr "Descer na lista" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 #, fuzzy msgid "Music volume: " msgstr "Volume da Mśsica:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 #, fuzzy msgid "Subtitle speed: " msgstr "Rapidez legendas:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3651,7 +3667,7 @@ msgstr "" "LucasArts,\n" "mas %s estį faltando. Utilizando AdLib ao invés." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 #, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " @@ -3840,12 +3856,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/ru_RU.po b/po/ru_RU.po index 339bc7769b..17a021c372 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-05-22 17:04+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Russian\n" @@ -55,16 +55,16 @@ msgstr "²ŅÕąå" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "¾āÜÕŻŠ" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "²ė ŌÕŁįāŅŲāÕŪģŻŽ åŽāŲāÕ ßÕąÕ׊ßŲįŠāģ ķāŽā 䊣Ū?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "“Š" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "ĮŲŻćįŽŲŌŠ" msgid "Triangle" msgstr "ĀąÕćÓŽŪģŻŠļ" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "ĄŠ×ŻŽÕ" @@ -206,14 +206,14 @@ msgstr "ĮŃąŽį" msgid "Reset all FluidSynth settings to their default values." msgstr "ĮŃąŽįŲāģ ŅįÕ ćįāŠŻŽŅŚŲ FluidSynth Ņ ׯŠēÕŻŲļ ߎ ćÜŽŪēŠŻŲī." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -243,15 +243,15 @@ msgstr "·ŠŚąėāģ" msgid "Mouse click" msgstr "ŗŪŲŚ Üėčģī" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "æŽŚŠ×Šāģ ŚŪŠŅŲŠāćąć" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "æÕąÕŻŠ×ŻŠēŲāģ ŚŪŠŅŲčŲ" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "æÕąÕŚŪīēÕŻŲÕ ŻŠ ŅÕįģ ķŚąŠŻ" @@ -327,7 +327,7 @@ msgstr "" "Ļ×ėŚ ŲÓąė. ø×ÜÕŻÕŻŲÕ ķāŽŁ ŻŠįāąŽŁŚŲ ŻÕ ßąÕŅąŠāŲā ŲÓąć ŻŠ ŠŻÓŪŲŁįŚŽÜ Ņ ąćįįŚćī" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<ߎ ćÜŽŪēŠŻŲī>" @@ -397,217 +397,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "æÕąÕŚąėāģ ÓŪŽŃŠŪģŻėÕ ćįāŠŻŽŅŚŲ ÓąŽÜŚŽįāŲ" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "æÕąÕŚąėāģ ÓŪŽŃŠŪģŻėÕ ćįāŠŻŽŅŚŲ MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "æÕąÕŚąėāģ ÓŪŽŃŠŪģŻėÕ ćįāŠŻŽŅŚŲ MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "æÕąÕŚąėāģ ÓŪŽŃŠŪģŻėÕ ćįāŠŻŽŅŚŲ MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "æÕąÕŚąėāģ ÓŪŽŃŠŪģŻėÕ ćįāŠŻŽŅŚŲ MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "æćāŲ" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "æćāŲ" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "æćāģ Ś ŲÓąÕ:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "³ŌÕ ŲÓąŠ:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "“Žß. ßćāģ:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "ĆŚŠ×ėŅŠÕā ßćāģ Ś ŌŽßŽŪŻŲāÕŪģŻėÜ äŠŁŪŠÜ ŌŠŻŻėå ŌŪļ ŲÓąė" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "“Žß. ßćāģ:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "ĮŽåąŠŻÕŻŲļ ŲÓą:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "ĆŚŠ×ėŅŠÕā ßćāģ Ś įŽåąŠŻÕŻŲļÜ ŲÓąė" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "æćāģ įŽåą:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "½Õ ׊ŌŠŻ" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "æŽ ćÜŽŪēŠŻŲī" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "²ėŃÕąŲāÕ SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "²ėŃÕąŲāÕ ŌŲąÕŚāŽąŲī į 䊣ŪŠÜŲ ŲÓąė" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "²ėŃÕąŲāÕ ŌŽßŽŪŻŲāÕŪģŻćī ŌŲąÕŚāŽąŲī ŲÓąė" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "²ėŃÕąŲāÕ ŌŲąÕŚāŽąŲī ŌŪļ įŽåąŠŻÕŻŲŁ" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "ĶāŽā ID ŲÓąė ćÖÕ ŲįߎŪģ×ćÕāįļ. æŽÖŠŪćŁįāŠ, ŅėŃÕąŲāÕ ŌąćÓŽŁ." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~²~ėåŽŌ" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "·ŠŅÕąčŲāģ ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "¾ ß~ą~ŽÓąŠÜÜÕ..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "¾ ßąŽÓąŠÜÜÕ ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~½~ŠįāąŽŁŚŲ..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "ø×ÜÕŻŲāģ ÓŪŽŃŠŪģŻėÕ ŻŠįāąŽŁŚŲ ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "æ~ć~įŚ" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "·ŠßćįāŲāģ ŅėŃąŠŻŻćī ŲÓąć" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~·~ŠÓąć×Ųāģ..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "·ŠÓąć×Ųāģ įŽåąŻÕŻŲÕ ŌŪļ ŅėŃąŠŻŻŽŁ ŲÓąė" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~“~ŽŃŠŅŲāģ ŲÓąć..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "ĆŌÕąÖŲŅŠŁāÕ ŚŪŠŅŲčć Shift, ēāŽŃė ŌŽŃŠŅŲāģ ŻÕįŚŽŪģŚŽ ŲÓą" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "½~Š~įāąŽŁŚŲ ŲÓąė..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "ø×ÜÕŻŲāģ ŻŠįāąŽŁŚŲ ŲÓąė" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~Ć~ŌŠŪŲāģ ŲÓąć" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "ĆŌŠŪŲāģ ŲÓąć Ų× įßŲįŚŠ. ½Õ ćŌŠŪļÕā ŲÓąć į ŻŽįŲāÕŪļ" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~“~ŽŃ. ŲÓąć..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "½~Š~į. ŲÓąė..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~Ć~ŌŠŪŲāģ ŲÓąć" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "æŽŲįŚ Ņ įßŲįŚÕ ŲÓą" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "æŽŲįŚ:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "·ŠÓąć×Ųāģ ŲÓąć:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "·ŠÓąć×Ųāģ" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -615,39 +615,39 @@ msgstr "" "²ė ŌÕŁįāŅŲāÕŪģŻŽ åŽāŲāÕ ×ŠßćįāŲāģ ŌÕāÕŚāŽą ŅįÕå ŲÓą? ĶāŽ ߎāÕŻęŲŠŪģŻŽ ÜŽÖÕā " "ŌŽŃŠŅŲāģ ŃŽŪģčŽÕ ŚŽŪŲēÕįāŅŽ ŲÓą." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖÕā ŽāŚąėāģ 挊׊ŻŻćī ŌŲąÕŚāŽąŲī!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖÕā ŻŠŁāŲ ŲÓąć Ņ 挊׊ŻŻŽŁ ŌŲąÕŚāŽąŲŲ!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "²ėŃÕąŲāÕ ŲÓąć:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "²ė ŌÕŁįāŅŲāÕŪģŻŽ åŽāŲāÕ ćŌŠŪŲāģ ŻŠįāąŽŁŚŲ ŌŪļ ķāŽŁ ŲÓąė?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "²ė åŽāŲāÕ ×ŠÓąć×Ųāģ ŲÓąć?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "ĶāŠ ŲÓąŠ ŻÕ ߎŌŌÕąÖŲŅŠÕā ׊ӹć׌ć įŽåąŠŻÕŻŲŁ ēÕąÕ× ÓŪŠŅŻŽÕ ÜÕŻī." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ŻÕ įÜŽÓ ŻŠŁāŲ ŌŅŲÖŽŚ ŌŪļ ׊ßćįŚŠ ŅėŃąŠŻŻŽŁ ŲÓąė!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "¼ŻŽÓŽ ŲÓą..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "·ŠßŲįģ..." @@ -730,93 +730,93 @@ msgstr "44 Ś³ę" msgid "48 kHz" msgstr "48 Ś³ę" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "½Õ ׊ŌŠŻ" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "½Õ ćŌŠŪŽįģ ßąŲÜÕŻŲāģ Ų×ÜÕŻÕŻŲļ ŻÕŚŽāŽąėå ÓąŠäŲēÕįŚŲå ŻŠįāąŽÕŚ:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "ŅŲŌÕŽąÕÖŲÜ ŻÕ ÜŽÖÕā Ńėāģ Ų×ÜÕŻńŻ." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "ߎŪŻŽķŚąŠŻŻėŁ ąÕÖŲÜ ŻÕ ÜŽÖÕā Ńėāģ Ų×ÜÕŻńŻ" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "ąÕÖŲÜ ŚŽąąÕŚāŲąŽŅŚŲ įŽŽāŻŽčÕŻŲļ įāŽąŽŻ ŻÕ ÜŽÖÕā Ńėāģ Ų×ÜÕŻńŻ" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "³ąŠä. ąÕÖŲÜ:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "ĄÕÖŲÜ ąŠįāąŠ:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "ĮßÕęŲŠŪģŻėÕ ąÕÖŲÜė ąÕŻŌÕąŲŻÓŠ, ߎŌŌÕąÖŲŅŠÕÜėÕ ŻÕŚŽāŽąėÜŲ ŲÓąŠÜŲ" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "æŽŪŻŽķŚąŠŻŻėŁ ąÕÖŲÜ" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "ŗŽąąÕŚęŲļ įŽŽāŻŽčÕŻŲļ įāŽąŽŻ" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "ŗŽąąÕŚāŲąŽŅŠāģ įŽŽāŻŽčÕŻŲÕ įāŽąŽŻ ŌŪļ ŲÓą į ąŠ×ąÕčÕŻŲÕÜ 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "æąÕŌߎēŲāŠÕÜŽÕ:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "·Ņ挎ŅŽÕ ćįā-ŅŽ:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "ĆŚŠ×ėŅŠÕā ßąÕŌߎēŲāŠÕÜŽÕ ×Ņ挎ŅŽÕ ćįāąŽŁįāŅŽ ŲŪŲ ķÜćŪļāŽą ×Ņ挎ŅŽŁ ŚŠąāė" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "ĆŚŠ×ėŅŠÕā ŅėåŽŌŻŽÕ ×Ņ挎ŅŽÕ ćįāąŽŁįāŅŽ ŲŪŲ ķÜćŪļāŽą ×Ņ挎ŅŽŁ ŚŠąāė" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "æąÕŌߎēŲāŠÕÜŽÕ:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "·Ņ挎ŅŽÕ ćįā-ŅŽ:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "ĶÜćŪļāŽą AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "·Ņ挎ŅŠļ ŚŠąāŠ AdLib ŲįߎŪģ×ćÕāįļ ÜŻŽÓŲÜŲ ŲÓąŠÜŲ" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "ĒŠįāŽāŠ ×Ņ挊:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -824,53 +824,49 @@ msgstr "" "±¾ŪģčŲÕ ×ŻŠēÕŻŲļ ׊ŌŠīā ŪćēčÕÕ ŚŠēÕįāŅŽ ×Ņ挊, ŽŌŻŠŚŽ ŽŻŲ ÜŽÓćā ŻÕ " "ߎŌŌÕąÖŲŅŠāģįļ ŅŠčÕŁ ×Ņ挎ŅŽŁ ŚŠąāŽŁ" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "ĆįāąŽŁįāŅŽ GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "ĆŚŠ×ėŅŠÕā ŅėåŽŌŻŽÕ ×Ņ挎ŅŽÕ ćįāąŽŁįāŅŽ ŌŪļ MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "½Õ ŲįߎŪģ׎ŅŠāģ Üć×ėŚć ŌŪļ General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "øįߎŪģ׎ŅŠāģ ßÕąŅŽÕ ŌŽįāć߯ŽÕ ćįāąŽŁįāŅŽ" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont'ė ߎŌŌÕąÖŲŅŠīāįļ ŻÕŚŽāŽąėÜŲ ×Ņ挎ŅėÜŲ ŚŠąāŠÜŲ, FluidSynth Ų " "Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "ĮÜÕ芯ŻėŁ ąÕÖŲÜ AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "øįߎŪģ׎ŅŠāģ Ų MIDI, Ų AdLib ŌŪļ ÓÕŻÕąŠęŲŲ ×Ņ挊" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "ĆįŲŪÕŻŲÕ MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "½ŠįāąŽŁŚŲ FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "Ćįāą. MT-32:" @@ -996,97 +992,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "³ąŽÜŚ. Ž×ŅćēŚŲ:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "½ŠįāąŽŁŚŲ FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "æćāģ Ś āÕÜŠÜ:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "³ŌÕ āÕÜė:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "ĆŚŠ×ėŅŠÕā ßćāģ Ś ŌŽßŽŪŻŲāÕŪģŻėÜ äŠŁŪŠÜ ŌŠŻŻėå, ŲįߎŪģ×ćÕÜėå ŅįÕÜŲ ŲÓąŠÜŲ " "ŪŲŃŽ ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "æćāģ Ś ßŪŠÓŲŻŠÜ:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "æćāģ Ś ßŪŠÓŲŻŠÜ:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "ĄŠ×ŻŽÕ" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "ĀÕÜŠ:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "ĄŲįŽŅŠŪŚŠ GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "°ŅāŽįŽåąŠŻÕŻŲÕ:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "°ŅāŽįŽåą.:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "ŗŪŠŅŲčŲ" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Ļ×ėŚ GUI:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Ļ×ėŚ ÓąŠäŲēÕįŚŽÓŽ ŲŻāÕąäÕŁįŠ ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "æąŽŅÕąļāģ ŽŃŻŽŅŪÕŻŲļ:" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "ŗŠŚ ēŠįāŽ ßąŽŅÕąļāģ ŽŃŻŽŅŪÕŻŲļ ScummVM" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "æąŽŅÕąŲāģ įÕŁēŠį" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "²ė ŌŽŪÖŻė ßÕąÕ׊ßćįāŲāģ ScummVM, ēāŽŃė ßąŲÜÕŻŲāģ Ų×ÜÕŻÕŻŲļ." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "½Õ ÜŽÓć ßŲįŠāģ Ņ ŅėŃąŠŻŻćī ŌŲąÕŚāŽąŲī. æŽÖŠŪćŁįāŠ, 挊ÖŲāÕ ŌąćÓćī." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "²ėŃÕąŲāÕ ŌŲąÕŚāŽąŲī ŌŪļ āÕÜ GUI" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "²ėŃÕąŲāÕ ŌŲąÕŚāŽąŲī į ŌŽßŽŪŻŲāÕŪģŻėÜŲ 䊣ŪŠÜŲ" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "²ėŃÕąŲāÕ ŌŲąÕŚāŽąŲī į ßŪŠÓŲŻŠÜŲ" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1103,65 +1103,65 @@ msgstr "# įŪÕŌ" msgid "add" msgstr "ŌŽŃ" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "ĆŌŠŪŲāģ įŲÜŅŽŪ" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Ęäą" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "²ŽįßąŽŲ×ŅÕįāŲ ŲŪŲ ׊ßŲįŠāģ ŲÓąŽŅŽŁ ßąŽęÕįį" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "ĆŌŠŪŲāģ" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "·ŠßŲįŠāģ" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "²ŽįßąŽŲ×ŅÕįāŲ" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "ĄÕŌŠŚāŲąŽŅŠāģ" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "°ŅāŽą: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "·ŠÜÕāŚŲ: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "²ė ŌÕŁįāŅŲāÕŪģŻŽ åŽāŲāÕ ćŌŠŪŲāģ ķāć ׊ßŲįģ?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "½ÕŲ×ŅÕįāŻėŁ ŠŅāŽą" @@ -1225,7 +1225,7 @@ msgstr "ĮŽ×ŌŠāģ ŻŽŅćī ׊ßŲįģ ŲÓąė" msgid "Name: " msgstr "½Š×ŅŠŻŲÕ: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "²ŅÕŌŲāÕ ŽßŲįŠŻŲÕ įŪŽāŠ %d:" @@ -1234,28 +1234,28 @@ msgstr "²ŅÕŌŲāÕ ŽßŲįŠŻŲÕ įŪŽāŠ %d:" msgid "Select a Theme" msgstr "²ėŃÕąŲāÕ āÕÜć" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "±Õ× ÓąŠäŲŚŲ" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "±Õ× ÓąŠäŲŚŲ" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "ĮāŠŻŌŠąāŻėŁ ąŠįāÕąŲ׊āŽą" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "ĮāŠŻŌŠąāŻėŁ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "ĄŠįāÕąŲ׊āŽą įŽ įÓŪŠÖŲŅŠŻŲÕÜ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "ĮŽ įÓŪŠÖŲŅŠŻŲÕÜ" @@ -1283,39 +1283,39 @@ msgstr "°ŅāŽÜŠāŲēÕįŚŲ ßąŽŅÕąļāģ ŽŃŻŽŅŪÕŻŲļ" msgid "Proceed" msgstr "æąŽŌŽŪÖŲāģ" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "¾ēŲįāŲāģ ׯŠēÕŻŲÕ" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "“ŅŲÖŽŚ ŻÕ ߎŌŌÕąÖŲŅŠÕā 湎ŅÕŻģ ŽāŪŠŌŚŲ '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "¼ÕŻī" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "æąŽßćįāŲāģ" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "æŠć׊" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "æąŽßćįāŲāģ įāąŽŚć" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "¾čŲŃŚŠ ׊ßćįŚŠ ŲÓąė:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "½Õ ÜŽÓć ŻŠŁāŲ ŌŅŲÖŽŚ ŌŪļ ׊ßćįŚŠ ŅėŃąŠŻŻŽŁ ŲÓąė" @@ -1473,15 +1473,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~²~ ÓŪŠŅŻŽÕ ÜÕŻī" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "ĮŽåąŠŻŲāģ ŲÓąć:" @@ -1490,16 +1490,16 @@ msgstr "ĮŽåąŠŻŲāģ ŲÓąć:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "ĮŽåąŠŻŲāģ" @@ -1524,12 +1524,12 @@ msgstr "" "ߎ܎éģ." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "¾~ā~ÜÕŻŠ" @@ -1606,7 +1606,7 @@ msgstr "" msgid "Start anyway" msgstr "²įń ąŠŅŻŽ ׊ßćįāŲāģ" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "ĶÜćŪļāŽą AdLib" @@ -1723,7 +1723,7 @@ msgstr "²ė ŌÕŁįāŅŲāÕŪģŻŽ åŽāŲāÕ ŅėŁāŲ?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "²ėåŽŌ" @@ -1872,7 +1872,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~·~ŠŚąėāģ" @@ -2362,20 +2362,38 @@ msgstr "" "½Õ ׊ŃćŌģāÕ ŻŠ×ŻŠēŲāģ ŚŪŠŅŲčć ŌŪļ ŌÕŁįāŅŲļ 'Hide Toolbar', ēāŽŃė ćŅŲŌÕāģ " "ŅÕįģ ŲŻŅÕŻāŠąģ Ņ ŲÓąÕ" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "æąŽŅÕąŲāģ ŽŃŻŽŅŪÕŻŲļ..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "ĄÕÖŲÜ ŃÕ× ęŅÕāŠ" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "æŽŚŠ×ėŅŠāģ įāąŽŚć ŽŃźÕŚāŽŅ" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "øįߎŪģ׎ŅŠāģ ŽąŲÓŲŻŠŪģŻėÕ ķŚąŠŻė ׊ßŲįŲ/ēāÕŻŲļ ŲÓąė" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2426,27 +2444,27 @@ msgstr "" "æŽŚŠ×ėŅŠÕā ŽŚŻŽ įŽ įāąŽŚŽŁ ŅŅŽŌŠ ŚŽÜŠŻŌė Ų įāŠŅŲā ŲÓąć ŻŠ ߊć×ć (ŚŠŚ Ņ SCI) " "ŅÜÕįāŽ ŅŅŽŌŠ Ņ ąÕŠŪģŻŽÜ ŅąÕÜÕŻŲ." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "²ŽįįāŠŻŽŅŲāģ ŲÓąć:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "²ŽįįāŠŻŽŅŲāģ" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2457,7 +2475,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2468,7 +2486,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2479,7 +2497,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "ÄŠŁŪ ׊įāŠŅŚŲ '%s' ŻÕ ŻŠŁŌÕŻ!" @@ -2510,20 +2528,20 @@ msgstr "" "½ŠÖÜŲāÕ ¾ŗ, ēāŽŃė ßÕąÕŅÕįāŲ Ųå Ņ ŻŽŅėŁ 䎹܊ā įÕŁēŠį, Ņ ßąŽāŲŅŻŽÜ įŪćēŠÕ ķāŽ " "įŽŽŃéÕŻŲÕ ßŽļŅŲāįļ įŻŽŅŠ ßąŲ įŪÕŌćīéÕÜ ×ŠßćįŚÕ ŲÓąė.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "øįߎŪģ׎ŅŠāģ ąÕÖŲÜ ļąŚŽŁ ߊŪŲāąė" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "ĄŲįćÕā ÓąŠäŲŚć į ŲįߎŪģ׎ŅŠŻŲÕÜ ļąŚŽŁ ߊŪŲāąė ŲÓąė" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "½Õ ćŌŠŪŽįģ ׊ӹć×Ųāģ įŽåąŠŻńŻŻćī ŲÓąć Ų× äŠŁŪŠ." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "½Õ ćŌŠŪŽįģ įŽåąŠŻŲāģ ŲÓąć Ņ 䊣Ū." @@ -2540,7 +2558,7 @@ msgstr "ĄÕÖŲÜ ćįŚŽąÕŻŻŽÓŽ ŅŲŌÕŽ" msgid "Play movies at an increased speed" msgstr "²ŽįßąŽŲ×ŅŽŌŲā ŅŲŌÕŽąŽŪŲŚŲ į ćŅÕŪŲēÕŻŻŽŁ įŚŽąŽįāģī" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "½Õ ćŌŠŪŽįģ įŽåąŠŻŲāģ ŲÓąć" @@ -2749,23 +2767,23 @@ msgstr "³ŪŠŅŻŽÕ ÜÕŻ~ī~" msgid "~W~ater Effect Enabled" msgstr "~Ķ~ääÕŚāė ŅŽŌė ŅŚŪīēÕŻė" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "æąŽßćįāŲāģ įęÕŻė Ų× ³ŠŪÕąÕŲ øįāŽąŲŲ" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "æŽ×ŅŽŪļÕā ŲÓąŽŚć ßąŽßćįāŲāģ ŅįÕ įęÕŻė Ņ ³ŠŪÕąÕÕ øįāŽąŲŲ" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "ĄŠįāļŻćāģ ŻŠ ŅÕįģ ķŚąŠŻ ŅŲŌÕŽ Ž įŽ×ŌŠŻŲŲ ŲÓąė" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "ĄŠįāļÓŲŅŠÕā ŅŲŌÕŽ Ž įŽ×ŌŠŻŲŲ ŲÓąė āŠŚ, ēāŽ ŽŻŽ ׊ŻŲÜŠÕā ŅÕįģ ķŚąŠŻ" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2774,23 +2792,23 @@ msgstr "" "½Õ ÜŽÓć įŽåąŠŻŲāģ ŲÓąć Ņ ߎ×ŲęŲī %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "·ŠÓąć×Ųāģ 䊣Ū" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "·ŠÓąćÖŠī ŲÓąć..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "ĮŽåąŠŻŲāģ 䊣Ū" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "ĮŽåąŠŻļī ŲÓąć..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2807,11 +2825,11 @@ msgstr "" "½ŠÖÜŲāÕ ¾ŗ, ēāŽŃė ßÕąÕŲÜÕŻŽŅŠāģ Ųå įÕŁēŠį, Ņ ßąŽāŲŅŻŽÜ įŪćēŠÕ ķāŽ ÖÕ " "įŽŽŃéÕŻŲÕ ßŽļŅŲāįļ ßąŲ įŪÕŌćīéÕÜ ×ŠßćįŚÕ ŲÓąė.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ćįßÕ诎 ßąÕŽŃąŠ×ŽŅŠŪ ŅįÕ ŅŠčŲ įŽåąŠŻÕŻŲļ ŲÓą." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2937,127 +2955,127 @@ msgid "" msgstr "" "øįߎŪģ׎ŅŠāģ ŠŪģāÕąŻŠāŲŅŻėŁ ŻŠŃŽą įÕąÕŃąļŻėå ŚćąįŽąŽŅ ŅÜÕįāŽ ŽŃėēŻėå ׎ŪŽāėå" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "æŽŚŠ×ėŅŠāģ įāąŽŚć ŽŃźÕŚāŽŅ" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "æŽŚŠ×ėŅŠāģ ŻŠ×ŅŠŻŲļ ŽŃźÕŚāŽŅ ŅŻŲ×ć ķŚąŠŻŠ" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "²įāŠŅģāÕ ŌŲįŚ %c Ų ŻŠÖÜŲāÕ ŚŪŠŅŲčć, ēāŽŃė ßąŽŌŽŪÖŲāģ." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "½Õ ćŌŠŪŽįģ ŻŠŁāŲ %s, (%c%d) ½ŠÖÜŲāÕ ŚŪŠŅŲčć." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "¾čŲŃŚŠ ēāÕŻŲļ ŌŲįŚŠ %c, (%c%d) ½ŠÖÜŲāÕ ŚŪŠŅŲčć." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "øÓąŠ ŽįāŠŻŽŅŪÕŻŠ. ½ŠÖÜŲāÕ ßąŽŃÕŪ, ēāŽŃė ßąŽŌŽŪÖŲāģ." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "²ė ćŅÕąÕŻė, ēāŽ åŽāŲāÕ ŻŠēŠāģ įŻŽŅŠ? (Y/N)Y" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "²ė ćŅÕąÕŻė, ēāŽ åŽāŲāÕ ŅėŁāŲ? (Y/N)Y" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "øÓąŠāģ" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "²įāŠŅģāÕ ŌŲįŚ į įŽåąŠŻÕŻŲļÜŲ" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "²ė ŌŽŪÖŻė ŅŅÕįāŲ ŲÜļ" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "øÓąŠ ½µ ±Ė»° ׊ßŲįŠŻŠ (ŌŲįŚ ߎŪŽŻ?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "øÓąŠ ½µ ±Ė»° ׊ӹćÖÕŻŠ" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "ĮŽåąŠŻļī '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "·ŠÓąćÖŠī '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "½Š×ŽŅŲāÕ įŽåąŠŻÕŻŲÕ ŲÓąė" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "²ėŃÕąŲāÕ ŲÓąć ŌŪļ ׊ӹć׌Ų" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "½Š×ŅŠŻŲÕ ŲÓąė)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~æ~ąÕŌ" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~Į~ŪÕŌ" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "ĀŽŪģŚŽ Ž×ŅćēŚŠ" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "¾×ŅćēŚŠ Ų įćŃāŲāąė" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "ĀŽŪģŚŽ įćŃāŲāąė" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "¾×ŅćēŚŠ Ų āÕŚįā" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "²ėŃÕąŲāÕ ćąŽŅÕŻģ įŪŽÖŻŽįāŲ." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "·Š ߎ܎éģī ŽŃąŠāŲāÕįģ Ś ŲŻįāąćŚęŲŲ Loom(TM)." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "æąŠŚāŲŚŠŻā" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "ĶŚįßÕąā" @@ -3594,23 +3612,23 @@ msgstr "»ÕāÕāģ ŅßąŠŅŽ" msgid "Fly to lower right" msgstr "»ÕāÕāģ ŅßąŠŅŽ-ŅŻŲ×" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "æąŽŚąćāŚŠ įŚŠēŚŠÜŲ ŅŚŪīēÕŻŠ" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "æąŽŚąćāŚŠ įŚŠēŚŠÜŲ ŅėŚŪīēÕŻŠ" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "³ąŽÜŚ. Üć×ėŚŲ: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "ĮŚŽąŽįāģ āŲāąŽŅ: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3619,7 +3637,7 @@ msgstr "" "ĄÕÖŲÜ \"ąŽŌŻŽÓŽ\" MIDI āąÕŃćÕā ŽŃŻŽŅŪÕŻŲÕ Roland Upgrade Žā\n" "LucasArts, ŻŽ ŻÕ åŅŠāŠÕā %s. æÕąÕŚŪīēŠīįģ ŻŠ AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3811,13 +3829,13 @@ msgstr "" "øįߎŪģ׎ŅŠāģ ŠŻÓŪŲŁįŚćī Ž×ŅćēŚć ŅÜÕįāŽ ŻÕÜÕꌎŁ ŌŪļ ŅįÕå ļ×ėŚŽŅ, ŚąŽÜÕ " "ŻÕÜÕꌎӎ" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Ć ŅŠį ŽāįćāįāŅćÕā 䊣Ū 'teenagent.dat'. ĮŚŠēŠŁāÕ ÕÓŽ į ŅÕŃ-įŠŁāŠ ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/scummvm.pot b/po/scummvm.pot index 8bc74ef781..8a2431dc59 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\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" @@ -53,16 +53,16 @@ msgstr "" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "" msgid "Triangle" msgstr "" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "" @@ -204,14 +204,14 @@ msgstr "" msgid "Reset all FluidSynth settings to their default values." msgstr "" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -239,15 +239,15 @@ msgstr "" msgid "Mouse click" msgstr "" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "" @@ -320,7 +320,7 @@ msgid "" msgstr "" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "" @@ -390,255 +390,255 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "" -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "" -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "" -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "" -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "" -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "" -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "" -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "" @@ -721,142 +721,138 @@ msgstr "" msgid "48 kHz" msgstr "" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "" -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "" @@ -976,95 +972,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "" -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1079,65 +1079,65 @@ msgstr "" msgid "add" msgstr "" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "" @@ -1201,7 +1201,7 @@ msgstr "" msgid "Name: " msgstr "" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "" @@ -1210,28 +1210,28 @@ msgstr "" msgid "Select a Theme" msgstr "" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "" @@ -1255,39 +1255,39 @@ msgstr "" msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "" @@ -1444,15 +1444,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "" @@ -1461,16 +1461,16 @@ msgstr "" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "" @@ -1489,12 +1489,12 @@ msgid "" msgstr "" #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "" @@ -1554,7 +1554,7 @@ msgstr "" msgid "Start anyway" msgstr "" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "" @@ -1663,7 +1663,7 @@ msgstr "" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "" @@ -1812,7 +1812,7 @@ msgid "Windows MIDI" msgstr "" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "" @@ -2300,20 +2300,36 @@ msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "" +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +msgid "Color mode" +msgstr "" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +msgid "Show scanlines" +msgstr "" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2355,27 +2371,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2383,7 +2399,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2391,7 +2407,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2399,7 +2415,7 @@ msgid "" "%s" msgstr "" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "" @@ -2423,20 +2439,20 @@ msgid "" "time you start the game.\n" msgstr "" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "" -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "" @@ -2453,7 +2469,7 @@ msgstr "" msgid "Play movies at an increased speed" msgstr "" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "" @@ -2643,46 +2659,46 @@ msgstr "" msgid "~W~ater Effect Enabled" msgstr "" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" "\n" msgstr "" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "" -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "" -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2692,11 +2708,11 @@ msgid "" "Press OK to convert them now, otherwise you will be asked next time.\n" msgstr "" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "" -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2808,127 +2824,127 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "" -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "" -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "" -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "" #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "" -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "" -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "" @@ -3465,30 +3481,30 @@ msgstr "" msgid "Fly to lower right" msgstr "" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" "but %s is missing. Using AdLib instead." msgstr "" -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3650,12 +3666,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/sv_SE.po b/po/sv_SE.po index 894dfadec3..0a7de9c2bb 100644 --- a/po/sv_SE.po +++ b/po/sv_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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-02-25 23:06+0100\n" "Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n" "Language-Team: \n" @@ -55,16 +55,16 @@ msgstr "Uppåt" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Avbryt" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Vill du verkligen skriva över filen?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "Ja" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "Sinus" msgid "Triangle" msgstr "Triangel" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Diverse" @@ -207,14 +207,14 @@ msgid "Reset all FluidSynth settings to their default values." msgstr "" "Återställ alla FluidSynth-inställningar till deras ursprungliga värden." -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -244,15 +244,15 @@ msgstr "Stäng" msgid "Mouse click" msgstr "Musklick" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Visa tangentbord" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Ställ in tangenter" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Fullskärmsläge" @@ -329,7 +329,7 @@ msgstr "" "till en engelsk" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<standard>" @@ -399,217 +399,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Överskrid globala volyminställningar" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Överskrid globala MIDI-inställningar" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Överskrid globala MIDI-inställningar" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Överskrid globala MT-32 inställningar" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Överskrid globala MT-32 inställningar" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Sökvägar" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Sökvägar" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Sökv. spel:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Sökv. spel:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Sökv. extra:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Bestämmer sökvägen till ytterligare data som spelet använder" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Sökv. extra:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Sökv. sparat:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Bestämmer var dina spardata lagras" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Sökv. sparat:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Välj SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Välj katalog med speldata" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Välj en ytterligare spelkatalog" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Välj katalog för spardata" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Detta ID-namn är upptaget. Var god välj ett annat." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~A~vsluta" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avsluta ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "O~m~..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~I~nställningar..." -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Redigera globala ScummVM-inställningar" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~tarta" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Starta det valda spelet" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~L~adda..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Ladda spardata för det valda spelet" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "Lä~g~g till spel..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Håll ned Skift för masstillägg" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "R~e~digera spel..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Redigera spelinställningarna" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~R~adera spel" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Radera spelet från listan. Spelets datafiler påverkas inte." -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Lä~g~g till spel..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "R~e~digera spel..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~adera spel" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Sök i spellistan" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Sök:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Ladda spel:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Ladda" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -617,40 +617,40 @@ msgstr "" "Vill du verkligen använda mass-speldetektorn? Processen kan potentiellt " "lägga till ett enormt antal spel." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunde inte öppna den valda katalogen!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunde inte hitta några spel i den valda katalogen!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Välj spel:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Vill du verkligen radera den här spelkonfigurationen?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Vill du ladda sparat spel?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Det här spelet stöder inte laddning av spardata från launchern." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunde inte hitta en motor kapabel till att köra det valda spelet!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "Masstillägg..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Spela in..." @@ -733,92 +733,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Kunde inte verkställa några av grafikinställningarna:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "videoläget kunde inte ändras." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "fullskärmsinställningen kunde inte ändras." -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "inställningen för bildförhållandet kunde inte ändras." -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Grafikläge:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Renderingsläge:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Speciella gitterlägen stödda av vissa spel" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Fullskärmsläge" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Korrektion av bildförhållande" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "Korrigerar bildförhållanden för 320x200-spel" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Föredragen enhet:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Musikenhet:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Bestämmer din föredragna emulator för ljudenhet eller ljudkort" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Bestämmer emulator för ljudenhet eller ljudkort" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Föredr. enhet:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Musikenhet:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib-emulator:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib används för musik i många spel" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Ljudfrekvens:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -826,51 +826,47 @@ msgstr "" "Ett högre värde betecknar bättre ljudkvalitet men stöds kanske inte av ditt " "ljudkort" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM-enhet:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Bestämmer standardenheten för General MIDI-uppspelning" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Använd inte General MIDI-musik" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Använd första tillgängliga enhet" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "SoundFont stöds endast av vissa ljudkort, FluidSynth och Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Blandat AdLib/MIDI-läge" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "Använd både MIDI och AdLib för ljudgeneration" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth inställningar" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 enhet:" @@ -995,97 +991,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Talvolym:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth inställningar" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Sökv. tema:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Sökv. tema:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Bestämmer sökväg till andra data som används av alla spel eller ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Sökv. tillägg:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Sökv. tillägg:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Diverse" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "GUI-rendering:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Autospara:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Autospara:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Tangenter" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "Språk för ScummVM:s användargränssnitt" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du måste starta om ScummVM för att ändringarna ska få effekt." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "Det går inte att skriva till den valda katalogen. Var god välj en annan." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Välj katalog för GUI-teman" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Välj katalog för extra filer" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Välj katalog för tillägg" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1102,65 +1102,65 @@ msgstr "# nästa" msgid "add" msgstr "Lägg till" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Radera tecken" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Pre." #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* 123" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* ABC" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Inspelare eller återuppspelning" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Radera" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Spela in" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Spela upp" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Redigera" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Skapare: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Anteckningar: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Vill du verkligen radera den här inspelningen?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Okänd skapare" @@ -1224,7 +1224,7 @@ msgstr "Skapa ett nytt sparat spel" msgid "Name: " msgstr "Namn:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Ange en beskrivning för position %d:" @@ -1233,28 +1233,28 @@ msgstr "Ange en beskrivning för position %d:" msgid "Select a Theme" msgstr "Välj ett tema" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Inaktiverad GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Inaktiverad GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Standard rendering" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Standard" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Antialiserad rendering" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Antialiserad" @@ -1279,39 +1279,39 @@ msgstr "Sök efter uppdateringar..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Töm sökfältet" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motorn stöder inte debug-nivå '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Meny" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Skippa" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Paus" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Skippa rad" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Fel under körning av spel:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Kunde inte hitta en motor kapabel till att köra det valda spelet" @@ -1470,15 +1470,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Åte~r~vänd till launcher" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Spara spelet:" @@ -1487,16 +1487,16 @@ msgstr "Spara spelet:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Spara" @@ -1520,12 +1520,12 @@ msgstr "" "information och instruktioner för hur du kan få mer hjälp." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "A~v~bryt" @@ -1600,7 +1600,7 @@ msgstr "" msgid "Start anyway" msgstr "Starta ändå" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib-emulator" @@ -1717,7 +1717,7 @@ msgstr "Vill du verkligen avsluta?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avsluta" @@ -1866,7 +1866,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~S~täng" @@ -2359,20 +2359,38 @@ msgstr "" "Glöm inte att välja en tangent för \"Göm verktygsrad\" för att se hela " "inventariet" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Sök efter uppdateringar..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Färgblint läge" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Visa etiketter" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Använd originalskärmar för spara/ladda" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Använder originalskärmarna för spara/ladda istället för ScummVM:s" @@ -2419,27 +2437,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Återställ spel:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Återställ" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2450,7 +2468,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2461,7 +2479,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2472,7 +2490,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Filmscensfilen '%s' hittades ej!" @@ -2503,20 +2521,20 @@ msgstr "" "Tryck på OK för att konvertera dem nu, annars kommer du tillfrågas igen " "nästa gång du startar spelet.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Använd ljus palett-läge" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Visa grafik med spelets ljusa palett" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Kunde inte läsa spardata från filen" -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Kunde inte skriva spardata till filen." @@ -2533,7 +2551,7 @@ msgstr "Snabb filmhastighet" msgid "Play movies at an increased speed" msgstr "Spela filmer i högre hastighet" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Kunde inte spara spelet." @@ -2744,23 +2762,23 @@ msgstr "Huvud~m~eny" msgid "~W~ater Effect Enabled" msgstr "~V~atteneffekt aktiverad" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Skippa Hall of Records storyboard-scenerna" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Låter spelaren skippa Hall of Records storyboard-scenerna" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Skala dokumentärvideor till helskärm" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Skala dokumentärvideorna så att de använder hela skärmen" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2769,25 +2787,25 @@ msgstr "" "Kan inte spara data i position %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 #, fuzzy msgid "Load file" msgstr "Ladda spel:" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Laddar speldata..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 #, fuzzy msgid "Save file" msgstr "Spara spelet:" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Sparar speldata..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2804,11 +2822,11 @@ msgstr "" "Tryck \"OK\" för att konvertera dem nu, annars kommer du tillfrågas igen " "nästa gång du startar spelet.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM lyckades konvertera alla dina spardata." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2928,128 +2946,128 @@ msgid "" msgstr "" "Använd de alternativa silverpekarna istället för de normala guldpekarna" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Visa etiketter" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Mata in skivan %c och tryck på knappen för att fortsätta." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Kunde inte hitta %s, (%c%d) tryck på knappen." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Fel vid inläsning av skivan %c, (%c%d) tryck på knappen." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Spelet pausat. Tryck MELLANSLAG för att fortsätta." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Är du säker på att du vill starta om? (J/N)J" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Är du säker på att du vill avsluta? (J/N)J" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Spela" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Mata in skiva för spardata" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Du måste ange ett namn" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Spelet sprades EJ (skivan full?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Spelet laddades EJ" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Sparar '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Laddar '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Namnge ditt SPARADE spel" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Välj ett spel att LADDA" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Speltitel)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~F~öregående" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~ästa" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Endast tal" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Tal och undertexter" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Endast undertexter" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tal & text" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Välj en skicklighetsnivå." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Hänvisa till din Loom(TM)-manual för hjälp." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Övning" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Expert" @@ -3586,23 +3604,23 @@ msgstr "Flyg åt höger" msgid "Fly to lower right" msgstr "Flyg åt nedre höger" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Snäpprullning på" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Snäpprullning av" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Musikvolym: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Texthastighet: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3611,7 +3629,7 @@ msgstr "" "Stöd för Native MIDI kräver Roland-uppdateringen från LucasArts,\n" "men %s saknas. Använder AdLib istället." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3799,12 +3817,12 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "Du har inte 'teenagent.dat'-filen. Hämta den från ScummVM:s webbsida" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/uk_UA.po b/po/uk_UA.po index 5b4f3078ec..f35cd4ce62 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: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2015-11-06 10:07+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Ukrainian\n" @@ -55,16 +55,16 @@ msgstr "²ÓŽąć" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "²öŌÜöŻŠ" @@ -103,7 +103,7 @@ msgid "Do you really want to overwrite the file?" msgstr "²Ų ŌöŁįŻŽ åŽēÕāÕ ×ŠÜöŻŲāŲ ęÕŁ 䊣Ū?" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -113,7 +113,7 @@ msgid "Yes" msgstr "ĀŠŚ" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -174,7 +174,7 @@ msgstr "ĮŲŻćįŽ÷ŌŠ" msgid "Triangle" msgstr "ĀąŲŚćāŻŲŚ" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "ĄöׯÕ" @@ -206,14 +206,14 @@ msgstr "ĮŚŲŻćāŲ" msgid "Reset all FluidSynth settings to their default values." msgstr "ĮŚŲŻćāŲ Ņįö ŻŠŪŠčāćŅŠŻŻļ FluidSynth ŌŽ ÷å ׯŠēÕŻģ ׊ ׊܎ŅēÕŻŻļÜ" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -243,15 +243,15 @@ msgstr "·ŠŚąŲāŲ" msgid "Mouse click" msgstr "ŗŪöŚ ÜŲ茎ī" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "æŽŚŠ×ŠāŲ ŚŪŠŅöŠāćąć" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "æÕąÕßąŲׯŠēŲāŲ ŚŪŠŅöčö" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "æÕąÕÜŚŻćāŲ ߎŅŻŽÕŚąŠŻŻŲŁ ąÕÖŲÜ" @@ -328,7 +328,7 @@ msgstr "" "挹Š÷ŻįģŚć" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<׊ ćÜŽŅēŠŻŻļÜ>" @@ -398,217 +398,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "æÕąÕŚąŲāŲ ÓŪŽŃŠŪģŻö ćįāŠŻŽŅŚŲ ÓćēŻŽįāö" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "æÕąÕŚąŲāŲ ÓŪŽŃŠŪģŻö ćįāŠŻŽŅŚŲ MIDI" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "æÕąÕŚąŲāŲ ÓŪŽŃŠŪģŻö ćįāŠŻŽŅŚŲ MIDI" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "æÕąÕŚąŲāŲ ÓŪŽŃŠŪģŻö ćįāŠŻŽŅŚŲ MT-32" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "æÕąÕŚąŲāŲ ÓŪŽŃŠŪģŻö ćįāŠŻŽŅŚŲ MT-32" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "ČŪļåŲ" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "ČŪļåŲ" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "ČŪļå ŌŽ ÓąŲ:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "ČŪļå ŌŽ ÓąŲ:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "“ŽŌŠāŚ. čŪļå:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "²ŚŠ×ćō čŪļå ŌŽ ŌŽŌŠāŚŽŅŲå 䊣ŪöŅ ŌŠŻŲå ŌŪļ ÓąŲ" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "“ŽŌ. čŪļå:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "ČŪļå ×ŃÕą.:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "²ŚŠ×ćō čŪļå ŌŽ ×ŃÕąÕÖÕŻģ ÓąŲ" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "ČŪļå ×ŃÕą.:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "½Õ ׊ŅŌŠŻŲŁ" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "·Š ćÜŽŅēŠŻŻļÜ" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "²ŲŃÕąöāģ SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "²ŲŃÕąöāģ ߊߌć × äŠŁŪŠÜŲ ÓąŲ" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "²ŲŃÕąöāģ ŌŽŌŠāŚŽŅć ߊߌć ÓąŲ" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "²ŲŃÕąöāģ ߊߌć ŌŪļ ×ŃÕąÕÖÕŻģ" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "ĘÕŁ ID ÓąŲ ŅÖÕ ŅŲŚŽąŲįāŽŅćōāģįļ. ±ćŌģ ŪŠįŚŠ, ŅŲŃÕąöāģ öŻčŲŁ." -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~²~ŲåöŌ" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "²ŲåöŌ ×ö ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "æąŽ ß~ą~ŽÓąŠÜć..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "æąŽ ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~½~ŠŪŠčāćŅŠŻŻļ" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "·ÜöŻŲāŲ ÓŪŽŃŠŪģŻö ŻŠŪŠčāćŅŠŻŻļ ScummVM" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "·~Š~ßćįŚ" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "·ŠßćįāŲāŲ ŅŲŃąŠŻć Óąć" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~·~ŠŅŠŻāŠÖŲāŲ..." -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "·ŠŅŠŻāŠÖŲāŲ ×ŃÕąÕÖÕŻŻļ ŌŪļ ŅŲŃąŠŻŽ÷ ÓąŲ" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~“~ŽŌŠāŲ Óąć..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "ĆāąŲÜćŁāÕ ŚŪŠŅöčć Shift ŌŪļ āŽÓŽ, éŽŃ ŌŽŌŠāŲ ŌÕŚöŪģŚŠ öÓŽą" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "ĄÕŌŠ~Ó~ćŅŠāŲ Óąć" -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "·ÜöŻŲāŲ ŻŠŪŠčāćŅŠŻŻļ ÓąŲ" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~²~ŲŌŠŪŲāŲ Óąć" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "²ŲŌŠŪŲāŲ Óąć ×ö įßŲįŚć. ½Õ ŅŲŌŠŪļō Óąć × ÖŽąįāŚŽÓŽ ŌŲįŚć" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~“~ŽŌŠāŲ Óąć..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "ĄÕŌŠ~Ó~. Óąć..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~²~ŲŌŠŪŲāŲ Óąć" -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "æŽčćŚ ć įßŲįŚć öÓŽą" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "æŽčćŚ:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "·ŠŅŠŻāŠÖŲāŲ Óąć:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "·ŠŅŠŻāŠÖŲāŲ" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -616,39 +616,39 @@ msgstr "" "ĒŲ ŅŲ ŌöŁįŻŽ åŽēÕāÕ ×ŠßćįāŲāŲ ߎčćŚ ćįöå öÓŽą? ĘÕ ßŽāÕŻęöŁŻŽ ÜŽÖÕ ŌŽŌŠāŲ " "ŅÕŪŲŚć ŚöŪģŚöįāģ öÓŽą." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖÕ ŅöŌŚąŲāŲ ŅŚŠ×ŠŻć ߊߌć!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ŻÕ ÜŽÖÕ ×ŻŠŁāŲ Óąć ć ŅŚŠ×ŠŻöŁ ߊßęö!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "²ŲŃÕąöāģ Óąć:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "²Ų ŌöŁįŻŽ åŽēÕāÕ ŅŲŌŠŪŲāŲ ćįāŠŻŽŅŚŲ ŌŪļ ęöō÷ ÓąŲ?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "²Ų åŽēÕāÕ ×ŠŅŠŻāŠÖŲāŲ ×ŃÕąÕÖÕŻć Óąć?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Ęļ ÓąŠ ŻÕ ßöŌāąŲÜćō ׊ŅŠŻāŠÖÕŻŻļ ×ŃÕąÕÖÕŻģ ēÕąÕ× ÓŽŪŽŅŻÕ ÜÕŻī." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ŻÕ ×ÜöÓ ×ŻŠŁāŲ ŌŅŲÖŽŚ ŌŪļ ׊ßćįŚć ŅŲŃąŠŻŽ÷ ÓąŲ!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "“ŽŌ. ŃŠÓŠāŽ..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "·ŠßŲį..." @@ -731,92 +731,92 @@ msgstr "44 Ś³ę" msgid "48 kHz" msgstr "48 Ś³ę" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "½Õ ׊ŌŠŻŲŁ" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "½Õ ŅŌŠŪŽįļ ׊įāŽįćŅŠāŲ ŌÕļŚö ×ö ×ÜöŻ ÓąŠäöēŻŲå ŻŠŪŠčāćŅŠŻģ:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "ŻÕ ŅŌŠŪŽįļ ×ÜöŻŲāŲ ÓąŠäöēŻŲŁ ąÕÖŲÜ." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "ŻÕ ŅŌŠŪŽįļ ×ÜöŻŲāŲ ąÕÖŲÜ ßŽŅŻŽÓŽ ÕŚąŠŻć" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "ŻÕ ŅŌŠŪŽįļ ×ÜöŻŲāŲ ąÕÖŲÜ ŚŽąÕŚęö÷ įßöŅŅöŌŻŽčÕŻŻļ įāŽąöŻ" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "³ąŠäöēŻ. ąÕÖŲÜ:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "ĄÕÖŲÜ ąŠįāąćŅ.:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "ĮßÕęöŠŪģŻö ąÕÖŲÜŲ ąŠįāąćŅŠŻŻļ, ļŚö ßöŌāąŲÜćīāģ ŌÕļŚö öÓąŲ" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "æŽŅŻŽÕŚąŠŻŻŲŁ ąÕÖŲÜ" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "ŗŽąÕŚęöļ įßöŅŅöŌŻŽčÕŻŻļ įāŽąöŻ" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "ŗŽąŲÓćŅŠāŲ įßöŅŅöŌŻŽčÕŻŻļ įāŽąöŻ ŌŪļ öÓŽą × ÓąŠäöŚŽī 320x200" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "ĆߎŌŽŃŠŻŲŁ ßąŲįāąöŁ:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "¼ć×Ųē. ßąŲįāąöŁ:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "²ŚŠ×ćō ćߎŌŽŃŠŻŲŁ ×Ņ挎ŅŲŁ ßąŲįāąöŁ ŠŃŽ ÕÜćŪļāŽą ×Ņ挎ŅŽ÷ ŚŠąāŲ" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "²ŚŠ×ćō ŅŲåöŌŻŲŁ ×Ņ挎ŅŲŁ ßąŲįāąöŁ ŠŃŽ ÕÜćŪļāŽą ×Ņ挎ŅŽ÷ ŚŠąāŲ" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "ĆߎŌŽŃ. ßąŲįāąöŁ:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "¼ć×ŲēŻŲŁ ßąŲįāąöŁ:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "µÜćŪļāŽą AdLib:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "·Ņ挎ŅŠ ŚŠąāŠ AdLib ŅŲŚŽąŲįāŽŅćōāģįļ ŃŠÓŠāģÜŠ öÓąŠÜŲ" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "²ŲåöŌŻŠ ēŠįāŽāŠ:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -824,52 +824,48 @@ msgstr "" "²ÕŪŲŚö ׯŠēÕŻŻļ ׊ŌŠīāģ ŚąŠéć ļŚöįāģ ×ŅćŚć, ßąŽāÕ ŅŽŻŲ ÜŽÖćāģ ŻÕ " "ßöŌāąŲÜćŅŠāŲįļ ŅŠčŽī ×Ņ挎ŅŽī ŚŠąāŽī" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "æąŲįāąöŁ GM:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "²ŚŠ×ćō ŅŲåöŌŻŲŁ ×Ņ挎ŅŲŁ ßąŲįāąöŁ ŌŪļ General MIDI" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "½Õ ŅŲŚŽąŲįāŽŅćŅŠāŲ Üć×ŲŚć General MIDI" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "²ŲŚŽąŲįāŽŅćŅŠāŲ ßÕąčŲŁ ŻŠļŅŻŲŁ ßąŲįāąöŁ" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" "SoundFont ßöŌāąŲÜćōāģįļ ŌÕļŚŲÜŲ ×Ņ挎ŅŲÜŲ ŚŠąāŠÜŲ, FluidSynth āŠ Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "·Üö芯ŲŁ ąÕÖŲÜ AdLib/MIDI" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "²ŲŚŽąŲįāŽŅćŅŠāŲ ö MIDI ö AdLib ŌŪļ ÓÕŻÕąŠęö÷ ×ŅćŚć" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "æŽįŲŪÕŻŻļ MIDI:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "½ŠŪŠčāćŅŠŻŻļ FluidSynth" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "æąŲįāąöŁ MT-32:" @@ -995,97 +991,101 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "³ćēŻ. Ž×ŅćēŚŲ:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "½ŠŪŠčāćŅŠŻŻļ FluidSynth" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "ČŪļå ŌŽ āÕÜ:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "ČŪļå ŌŽ āÕÜ:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "²ŚŠ×ćō čŪļå ŌŽ ŌŽŌŠāŚŽŅŲå 䊣ŪöŅ ŌŠŻŲå, ļŚö ŅŲŚŽąŲįāŽŅćīāģįļ ćįöÜŠ öÓąŠÜŲ " "ŠŃŽ ScummVM" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "ČŪļå ŌŽ ŅāćŪŚöŅ:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "ČŪļå ŌŽ ŅāćŪŚöŅ:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "ĄöׯÕ" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "ĀÕÜŠ:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "ĄŠįāÕą. GUI:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "°ŅāŽ×ŃÕąÕÖÕŻŻļ:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "°ŅāŽ×ŃÕąÕÖ.:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "ŗŪŠŅöčö" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "¼ŽŅŠ öŻāÕąä.:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "¼ŽŅŠ ÓąŠäöēŻŽÓŽ öŻāÕąäÕŁįć ScummVM" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "æÕąÕŅöąļāŲ ŽŻŽŅŪÕŻŻļ:" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "ĻŚ ēŠįāŽ ßÕąÕŅöąļāŲ ŽŻŽŅŪÕŻŻļ ScummVM" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "æÕąÕŅöąŲāŲ ׊ąŠ×" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "²Ų ߎŅŲŻŻö ßÕąÕ׊ßćįāŲāŲ ScummVM éŽŃ ׊įāŽįćŅŠāŲ ×ÜöŻŲ." -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "½Õ ÜŽÖć ßŲįŠāŲ ć ŅŲŃąŠŻć ߊߌć. ±ćŌģ ŪŠįŚŠ, ŅŚŠÖöāģ öŻčć." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "²ŲŃÕąöāģ ߊߌć ŌŪļ āÕÜ GUI" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "²ŲŃÕąöāģ ߊߌć × ŌŽŌŠāŚŽŅŲÜŲ 䊣ŪŠÜŲ" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "²ŲŃÕąöāģ ߊߌć ×ö ŅāćŪŚŠÜŲ" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1102,65 +1102,65 @@ msgstr "# ŻŠįā" msgid "add" msgstr "ŌŽŌ" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "²ŲŌŠŪŲāŲ įÜÜŅŽŪ" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* æąÕ" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Ęäą" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Abc" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "·ŠßŲįćŅŠāŲ ŠŃŽ ŅöŌāŅŽąŲāŲ ßąŽęÕį ÓąŲ" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "²ŲŌŠŪŲāŲ" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "·ŠßŲįŠāŲ" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "²öŌāŅŽąŲāŲ" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "ĄÕŌŠÓćŅŠāŲ" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "°ŅāŽą: " -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "æąŲÜöāŚŲ: " -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "²Ų ŌöŁįŻŽ åŽēÕāÕ ŅŲŌŠŪŲāŲ ęÕŁ ׊ßŲį?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "½ÕŅöŌŽÜŲŁ ŠŅāŽą" @@ -1224,7 +1224,7 @@ msgstr "ĮāŅŽąŲāŲ ŻŽŅŲŁ ׊ßŲį ÓąŲ" msgid "Name: " msgstr "½Š×ŅŠ: " -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "²ŅÕŌöāģ ŽßŲį ŌŪļ įŪŽāć %d:" @@ -1233,28 +1233,28 @@ msgstr "²ŅÕŌöāģ ŽßŲį ŌŪļ įŪŽāć %d:" msgid "Select a Theme" msgstr "²ŲŃÕąöāģ āÕÜć" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "±Õ× ÓąŠäöŚŲ" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "±Õ× ÓąŠäöŚŲ" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "ĮāŠŻŌŠąāŻŲŁ ąŠįāÕąŲ׊āŽą" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "ĮāŠŻŌŠąāŻŲŁ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "ĄŠįāÕąŲ׊āŽą ×ö ×ÓŪŠŌÖćŅŠŻŻļÜ" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "·ö ×ÓŪŠŌÖćŅŠŻŻļÜ" @@ -1282,39 +1282,39 @@ msgstr "°ŅāŽÜŠāėēŻŽ ßÕąÕŅöąļāŲ ŽŻŽŅŪÕŻŻļ" msgid "Proceed" msgstr "æąŽŌŽŅÖŲāŲ" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "¾ēŲįāŲāŲ ׯŠēÕŻŻļ" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "“ŅŲÖŽŚ ŻÕ ßöŌāąŲÜćō ąöŅÕŻģ ŅöŌŪŠŌŚŲ '%s'" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "¼ÕŻī" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "æąŽßćįāŲāŲ" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "æŠć׊" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "æąŽßćįāŲāŲ ąļŌŽŚ" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "æŽÜŲŪŚŠ ׊ßćįŚć ÓąŲ:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "½Õ ÜŽÖć ׯŠŁāŲ ŌŅŲÖŽŚ ŌŪļ ׊ßćįŚć ŅŲŃąŠŻŽ÷ ÓąŲ" @@ -1471,15 +1471,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~æ~ŽŅÕą.Ņ ÓŽŪŽŅŻÕ ÜÕŻī" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "·ŃÕąÕÓāŲ Óąć: " @@ -1488,16 +1488,16 @@ msgstr "·ŃÕąÕÓāŲ Óąć: " #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "·ŠßŲįŠāŲ" @@ -1521,12 +1521,12 @@ msgstr "" "ŽįŻŽŅŻŽ÷ öŻŽąÜŠęö÷, Š āŠŚŽÖ öŻįāąćŚęöŁ, ļŚ ŽāąŲÜŠāŲ ߎŌŠŪģčć ŌŽßŽÜŽÓć." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "²ö~Ō~ÜöŻŠ" @@ -1601,7 +1601,7 @@ msgstr "" msgid "Start anyway" msgstr "²įÕ ŽŌŻŽ ׊ßćįāŲāŲ" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "µÜćŪļāŽą AdLib" @@ -1718,7 +1718,7 @@ msgstr "²Ų ŌöŁįŻŽ åŽēÕāÕ ŅŲŁāŲ?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "²ŲåöŌ" @@ -1867,7 +1867,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~·~ŠŚąŲāŲ" @@ -2359,20 +2359,38 @@ msgstr "" "½Õ ׊ŃćŌģāÕ ßÕąÕßąŲׯŠēŲāŲ ŚŻŽßŚć ŌŪļ Ōö÷ 'ĮåŽŅŠāŲ æŠŻÕŪģ öŻįāą.' éŽŃ " "ߎъēŲāŲ ŅÕįģ öŻŅÕŻāŠą" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "æÕąÕŅöąŲāŲ ŽŻŽŅŪÕŻŻļ..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "ĄÕÖŲÜ ŃÕ× ŚŽŪģŽąć" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "æŽŚŠ×ćŅŠāŲ ŪöŻö÷ ŽŃ'ōŚāöŅ" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "²ŲŚŽąŲįāŽŅćŅŠāŲ ŽąŲÓ. ×ŃÕąÕÖÕŻŻļ/׊ŅŠŻāŠÖÕŻŻļ ÕŚąŠŻŲ" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "" @@ -2423,27 +2441,27 @@ msgstr "" "æŽŚŠ×ćō ŅöŚŻŽ ŌŪļ ŅŅŽŌć ŚŽÜŠŻŌŲ āŠ įāŠŅŲāģ Óąć ŻŠ ߊć×ć (ߎŌöŃŻŽ ŌŽ SCI)," "׊Üöįāģ ŃÕ×ߎįÕąÕŌŻģŽÓŽ ŅŅŽŌć." -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "²öŌŻŽŅŲāŲ Óąć:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "²öŌŻŽŅŲāŲ" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2454,7 +2472,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2465,7 +2483,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2476,7 +2494,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "ÄŠŁŪ ąŽŪŲŚć '%s' ŻÕ ׯŠŁŌÕŻŽ!" @@ -2506,20 +2524,20 @@ msgstr "" "½ŠāŲįŻöāģ ¾ŗ, éŽŃ ßÕąÕŅÕįāŲ ÷å ׊ąŠ×, öŻŠŚčÕ ćÕ ßŽŅöŌŽÜŪÕŻŻļ ×'ļŅŲāģįļ ßąŲ " "ŻŠįāć߯ŽÜć ׊ßćįŚć ÓąŲ.\n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "²ŲŚŽąŲįāŽŅćŅŠāŲ ļįŚąŠŅŲŁ ąÕÖŲÜ ßŠŪöāąŲ" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "²öŌŽŃąŠÖÕŻŻļ ÓąŠäöŚŲ × ŅŲŚŽąŲįāŠŻŻļÜ ļįŚąŠŅŽ÷ ߊŪöāąŲ öÓą" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "½Õ ŅŌŠŪŽįļ ׊ŅŠŻāŠÖŲāŲ įāŠŻ ÓąŲ × äŠŁŪć." -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "½Õ ŅŌŠŪŽįļ ×ŃÕąÕÓāŲ įāŠŻ ÓąŲ ć 䊣Ū." @@ -2536,7 +2554,7 @@ msgstr "ĄÕÖŲÜ čŅŲŌŚŽÓŽ ŅöŌÕŽ" msgid "Play movies at an increased speed" msgstr "æąŽÓąŠŅŠāŲ ŅöŌÕŽ × ßöŌŅŲéÕŻŻŽī čŅŲŌŚöįāī" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "½Õ ŅŌŠŪŽįļ ׊ßŲįŠāŲ Óąć" @@ -2744,23 +2762,23 @@ msgstr "³ŽŪŽŅŻÕ ÜÕŻī" msgid "~W~ater Effect Enabled" msgstr "µäÕŚāŲ ŅŽŌŲ ćŅöÜŚŻÕŻŽ" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "æÕąÕįŚŠŚćŅŠāŲ ·ŠŪć ĄÕŚŽąŌöŅ" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "“Ž×ŅŽŪļō ÓąŠŅęÕŅö ßÕąÕįŚŠŚćŅŠāŲ ēÕąÕ× įęÕŻŲ ć ·ŠŪö ĄÕŚŽąŌöŅ" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "ĄŽ×āļÓćŅŠāŲ ŅöŌÕŽ ßąŽ įāŅŽąÕŻŻļ öÓąŲ" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "ĄŽ×āļÓćŅŠāŲ ŅöŌÕŽ ßąŽ įāŅŽąÕŻŻļ öÓąŲ āŠŚ, éŽ ŅŽŻŽ ׊ŁÜŠāŲÜÕ ŅÕįģ ÕŚąŠŻ" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2769,23 +2787,23 @@ msgstr "" "½Õ ÜŽÖć ×ŃÕąÕÓāŲ Óąć ć įŪŽā %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "·ŠŅŠŻāŠÖŲāŲ 䊣Ū" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "·ŠŅŠŻāŠÖćī Óąć..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "·ŃÕąÕÓāŲ 䊣Ū" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "·ŃÕąÕÖćī Óąć..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2801,11 +2819,11 @@ msgstr "" "½ŠāŲįŻöāģ ¾ŗ, éŽŃ ßÕąÕŅÕįāŲ ÷å ׊ąŠ×, öŻŠŚčÕ ćÕ ßŽŅöŌŽÜŪÕŻŻļ ×'ļŅŲāģįļ ßąŲ " "ŻŠįāć߯ŽÜć ׊ßćįŚć ÓąŲ.\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM ćįßö诎 ßÕąÕŅöŅ ćįö ²Ščö ×ŃÕąÕÖÕŻŻļ." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2927,127 +2945,127 @@ msgstr "" "²ŲŚŽąŲįāŽŅćŅŠāŲ ŠŪģāÕąŻŠāŲŅŻŲŁ ŻŠŃöą įąöŃŻŲå ŚćąįŽąöŅ, ׊Üöįāģ ×ŅŲēŠŁŻŲå " "׎ŪŽāŲå" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 msgid "Show Object Line" msgstr "æŽŚŠ×ćŅŠāŲ ŪöŻö÷ ŽŃ'ōŚāöŅ" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "æŽŚŠ×ćŅŠāŲ ŻŠ×ŅŲ ŽŃ'ōŚāŲŅ ŅŻŲ×ć ÕŚąŠŻć" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "²įāŠŅāÕ ŌŲįŚ %c āŠ ŻŠāŲįŻöāģ ŚŪŠŅöčć ŌŪļ ßąŽŌŽŅÖÕŻŻļ." -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "½Õ ŅŌŠŪŽįļ ׯŠŁāŲ %s, (%c%d) ½ŠāŲįŻöāģ ŚŪŠŅöčć." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "æŽÜŲŪŚŠ ēŲāŠŻŻļ ŌŲįŚć %c, (%c%d) ½ŠāŲįŻöāģ ŚŪŠŅöčć." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "¦Óąć ßąŲ×ćßŲŻÕŻŽ. ½ŠāŲįŻöāģ ßąŽŃöŪ ŌŪļ ßąŽŌŽŅÖÕŻŻļ." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "²Ų ćßÕŅŻÕŻö, éŽ åŽēÕāÕ ąŽ×ߎēŠāŲ įߎēŠāŚć? (Y/N)Y" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "²Ų ćßÕŅŻÕŻö, éŽ åŽēÕāÕ ŅŲŁāŲ? (Y/N)Y" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "³ąŠāŲ" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "²įāŠŅāÕ ŌŲįŚ ×ö ×ŃÕąÕÖÕŻŻļÜ öÓŽą" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "²Ų ÜćįŲāÕ ŅŅÕįāŲ öÜ'ļ" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "³ąć ½µ ±Ć»¾ ׊ßŲįŠŻŽ (ŌŲįŚ ߎŅŻŲŁ?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "³ąć ½µ ±Ć»¾ ׊ŅŠŻāŠÖÕŻŽ" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "·ŠßŲįćī '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "·ŠŅŠŻāŠÖćī '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "½Š×ŽŅöāģ įŅŽō ×ŃÕąÕÖÕŻŻļ öÓąŲ" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "²ŲŃÕąöāģ Óąć ŌŪļ ׊ŅŠŻāŠÖÕŻŻļ" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "½Š×ŅŠ ÓąŲ)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~æ~ŽßÕą" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~½~Šįā" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "ĀöŪģŚŲ Ž×ŅćēŚŠ" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "¾×ŅćēŚŠ āŠ įćŃāŲāąŲ" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "ĀöŪģŚŲ įćŃāŲāąŲ" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "¾×ŅćēŚŠ āŠ āÕŚįā" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "¾ŃÕąöāģ ąÕÖŲÜ įŚŪŠŌŻŽįāö." -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "·Š ŌŽßŽÜŽÓŽī ×ŅÕąāŠŁāÕįļ ŌŽ öŻįāąćŚęö÷ Loom(TM)." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "æąŠŚāŲŚŠ" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "µŚįßÕąā" @@ -3584,23 +3602,23 @@ msgstr "»ÕāöāŲ ŻŠßąŠŅŽ" msgid "Fly to lower right" msgstr "»ÕāöāŲ ŌŽŻŲ×ć ŻŠßąŠŅŽ" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "æąŽŚąćāŚŠ įāąŲŃŚŠÜŲ" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "²ÜŲŚŠō ßąŽŚąćāŚć įāąŲŃŚŠÜŲ" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "³ćēŻöįāģ Üć×ŲŚŲ: " -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "ČŅŲŌ. įćŃāŲāąöŅ: " -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3609,7 +3627,7 @@ msgstr "" "ĄÕÖŲÜ \"ąöŌŻŽÓŽ\" MIDI ߎāąÕŃćō ߎŻŽŅŪÕŻŻļ Roland Upgrade ŅöŌ\n" "LucasArts, ßąŽāÕ %s ŅöŌįćāŻöŁ. æÕąÕÜŲŚŠīįģ ŻŠ AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3798,13 +3816,13 @@ msgstr "" "²ŲŚŽąŲįāŽŅćŅŠāŲ Ž×ŅćēÕŻŻļ ŠŻÓŪöŁįŚŽī ׊Üöįāģ ŻöÜÕęģŚŽÓŽ ŌŪļ Ņįöå ÜŽŅ ŽŚąöÜ " "ŻöÜÕęģŚŽ÷" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Ć ŅŠį ŅöŌįāćŻöŁ 䊣Ū 'teenagent.dat'. ²ö×ģÜöāģ ŁŽÓŽ ŻŠ ŅÕŃįŠŁāö ScummVM" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/po/zh-Latn_CN.po b/po/zh-Latn_CN.po index d90a6ba715..a44f6d5b2c 100644 --- a/po/zh-Latn_CN.po +++ b/po/zh-Latn_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2016-04-07 08:55+0100\n" +"POT-Creation-Date: 2016-06-07 19:20+0200\n" "PO-Revision-Date: 2016-03-15 04:09-0700\n" "Last-Translator: Chenbo Li <lichenbo1949@gmail.com>\n" "Language-Team: Chenbo Li <lichenbo1949@gmail.com>\n" @@ -53,16 +53,16 @@ msgstr "ShangYiJi" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 #: gui/filebrowser-dialog.cpp:64 gui/fluidsynth-dialog.cpp:152 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1255 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 +#: gui/KeysDialog.cpp:43 gui/launcher.cpp:353 gui/massadd.cpp:95 +#: gui/options.cpp:1259 gui/predictivedialog.cpp:73 gui/recorderdialog.cpp:69 +#: gui/recorderdialog.cpp:155 gui/saveload-dialog.cpp:216 #: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 #: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 #: gui/updates-dialog.cpp:113 engines/engine.cpp:546 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: backends/platform/wii/options.cpp:48 engines/drascula/saveload.cpp:49 -#: engines/parallaction/saveload.cpp:274 engines/scumm/dialogs.cpp:191 +#: engines/parallaction/saveload.cpp:271 engines/scumm/dialogs.cpp:187 #: engines/sword1/control.cpp:865 msgid "Cancel" msgstr "Quxiao" @@ -101,7 +101,7 @@ msgid "Do you really want to overwrite the file?" msgstr "Nin Shifou Queding Fugai Ciwenjian" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -111,7 +111,7 @@ msgid "Yes" msgstr "Shi" #: gui/filebrowser-dialog.cpp:132 gui/fluidsynth-dialog.cpp:217 -#: gui/launcher.cpp:795 gui/launcher.cpp:943 gui/launcher.cpp:1002 +#: gui/launcher.cpp:797 gui/launcher.cpp:945 gui/launcher.cpp:1004 #: backends/events/symbiansdl/symbiansdl-events.cpp:186 #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 @@ -172,7 +172,7 @@ msgstr "Zhengxian" msgid "Triangle" msgstr "Sanjiaoxing" -#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1170 +#: gui/fluidsynth-dialog.cpp:138 gui/options.cpp:1174 msgid "Misc" msgstr "Zaxiang" @@ -204,14 +204,14 @@ msgstr "Chongzhi" msgid "Reset all FluidSynth settings to their default values." msgstr "Chongzhi Suoyou de FluidSynth Shezhi" -#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:352 -#: gui/launcher.cpp:1050 gui/launcher.cpp:1054 gui/massadd.cpp:92 -#: gui/options.cpp:1256 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 +#: gui/fluidsynth-dialog.cpp:153 gui/KeysDialog.cpp:42 gui/launcher.cpp:354 +#: gui/launcher.cpp:1052 gui/launcher.cpp:1056 gui/massadd.cpp:92 +#: gui/options.cpp:1260 gui/saveload-dialog.cpp:932 engines/engine.cpp:465 #: engines/engine.cpp:476 backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:54 -#: engines/agos/animation.cpp:558 engines/drascula/saveload.cpp:49 -#: engines/groovie/script.cpp:408 engines/parallaction/saveload.cpp:274 -#: engines/scumm/dialogs.cpp:193 engines/scumm/scumm.cpp:1831 +#: engines/agos/animation.cpp:559 engines/drascula/saveload.cpp:49 +#: engines/groovie/script.cpp:407 engines/parallaction/saveload.cpp:271 +#: engines/scumm/dialogs.cpp:189 engines/scumm/scumm.cpp:1850 #: engines/scumm/players/player_v3m.cpp:130 #: engines/scumm/players/player_v5m.cpp:108 engines/sky/compact.cpp:131 #: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:524 @@ -239,15 +239,15 @@ msgstr "Guanbi" msgid "Mouse click" msgstr "Shubiao Danji" -#: gui/gui-manager.cpp:126 base/main.cpp:325 +#: gui/gui-manager.cpp:126 base/main.cpp:328 msgid "Display keyboard" msgstr "Xianshi Jianpan" -#: gui/gui-manager.cpp:130 base/main.cpp:329 +#: gui/gui-manager.cpp:130 base/main.cpp:332 msgid "Remap keys" msgstr "Yingshe Jianwei" -#: gui/gui-manager.cpp:133 base/main.cpp:332 engines/scumm/help.cpp:87 +#: gui/gui-manager.cpp:133 base/main.cpp:335 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" msgstr "Quanping Qiehuan" @@ -323,7 +323,7 @@ msgstr "" "Youxi de Yuyan. CiXiang buhui jiang Yige XibanyaYu Banben Zhuancheng Yingwen" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:89 -#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210 +#: gui/options.cpp:741 gui/options.cpp:754 gui/options.cpp:1214 #: audio/null.cpp:41 msgid "<default>" msgstr "<Moren>" @@ -393,217 +393,217 @@ msgctxt "lowres" msgid "Override global volume settings" msgstr "Fugai Quanju YinLiang Shezhi" -#: gui/launcher.cpp:286 gui/options.cpp:1111 +#: gui/launcher.cpp:287 gui/options.cpp:1111 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:289 +#: gui/launcher.cpp:290 msgid "Override global MIDI settings" msgstr "Fugai Quanju MIDI Shezhi" -#: gui/launcher.cpp:291 +#: gui/launcher.cpp:292 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Fugai Quanju MIDI Shezhi" -#: gui/launcher.cpp:300 gui/options.cpp:1117 +#: gui/launcher.cpp:302 gui/options.cpp:1121 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:303 +#: gui/launcher.cpp:305 msgid "Override global MT-32 settings" msgstr "Fugai Quanju MT-32 Shezhi" -#: gui/launcher.cpp:305 +#: gui/launcher.cpp:307 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Fugai Quanju MT-32 Shezhi" -#: gui/launcher.cpp:314 gui/options.cpp:1124 +#: gui/launcher.cpp:316 gui/options.cpp:1128 msgid "Paths" msgstr "Lujing" -#: gui/launcher.cpp:316 gui/options.cpp:1126 +#: gui/launcher.cpp:318 gui/options.cpp:1130 msgctxt "lowres" msgid "Paths" msgstr "Lujing" -#: gui/launcher.cpp:323 +#: gui/launcher.cpp:325 msgid "Game Path:" msgstr "Youxi Lujing:" -#: gui/launcher.cpp:325 +#: gui/launcher.cpp:327 msgctxt "lowres" msgid "Game Path:" msgstr "Youxi Lujing:" -#: gui/launcher.cpp:330 gui/options.cpp:1150 +#: gui/launcher.cpp:332 gui/options.cpp:1154 msgid "Extra Path:" msgstr "Qita Lujing:" -#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 +#: gui/launcher.cpp:332 gui/launcher.cpp:334 gui/launcher.cpp:335 msgid "Specifies path to additional data used by the game" msgstr "Zhiding Youxi Suoyong de Shuju de Cunfang Lujing" -#: gui/launcher.cpp:332 gui/options.cpp:1152 +#: gui/launcher.cpp:334 gui/options.cpp:1156 msgctxt "lowres" msgid "Extra Path:" msgstr "Qita Lujing:" -#: gui/launcher.cpp:339 gui/options.cpp:1134 +#: gui/launcher.cpp:341 gui/options.cpp:1138 msgid "Save Path:" msgstr "Baocun Lujing:" -#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 -#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137 +#: gui/launcher.cpp:341 gui/launcher.cpp:343 gui/launcher.cpp:344 +#: gui/options.cpp:1138 gui/options.cpp:1140 gui/options.cpp:1141 msgid "Specifies where your saved games are put" msgstr "Zhiding Nin Jiang Youxi Baocun Zai le Nali" -#: gui/launcher.cpp:341 gui/options.cpp:1136 +#: gui/launcher.cpp:343 gui/options.cpp:1140 msgctxt "lowres" msgid "Save Path:" msgstr "Baocun Lujing:" -#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 -#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153 -#: gui/options.cpp:1162 gui/options.cpp:1293 gui/options.cpp:1299 -#: gui/options.cpp:1307 gui/options.cpp:1337 gui/options.cpp:1343 -#: gui/options.cpp:1350 gui/options.cpp:1456 gui/options.cpp:1459 -#: gui/options.cpp:1471 +#: gui/launcher.cpp:362 gui/launcher.cpp:461 gui/launcher.cpp:519 +#: gui/launcher.cpp:573 gui/options.cpp:1149 gui/options.cpp:1157 +#: gui/options.cpp:1166 gui/options.cpp:1297 gui/options.cpp:1303 +#: gui/options.cpp:1311 gui/options.cpp:1341 gui/options.cpp:1347 +#: gui/options.cpp:1354 gui/options.cpp:1460 gui/options.cpp:1463 +#: gui/options.cpp:1475 msgctxt "path" msgid "None" msgstr "Wu" -#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 -#: gui/options.cpp:1287 gui/options.cpp:1331 gui/options.cpp:1462 +#: gui/launcher.cpp:367 gui/launcher.cpp:467 gui/launcher.cpp:577 +#: gui/options.cpp:1291 gui/options.cpp:1335 gui/options.cpp:1466 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Moren" -#: gui/launcher.cpp:510 gui/options.cpp:1465 +#: gui/launcher.cpp:512 gui/options.cpp:1469 msgid "Select SoundFont" msgstr "Xuanze SoundFont" -#: gui/launcher.cpp:529 gui/launcher.cpp:682 +#: gui/launcher.cpp:531 gui/launcher.cpp:684 msgid "Select directory with game data" msgstr "Xuanze Youxi Shuju Mulu" -#: gui/launcher.cpp:547 +#: gui/launcher.cpp:549 msgid "Select additional game directory" msgstr "Xuanze Qita Youxi Mulu" -#: gui/launcher.cpp:559 gui/options.cpp:1408 +#: gui/launcher.cpp:561 gui/options.cpp:1412 msgid "Select directory for saved games" msgstr "Xuanze Youxi Baocun Mulu" -#: gui/launcher.cpp:586 +#: gui/launcher.cpp:588 msgid "This game ID is already taken. Please choose another one." msgstr "Ci Youxi ID Yi Bei Zhanyong. Qing Xuanze Qita Mingcheng" -#: gui/launcher.cpp:626 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 +#: gui/launcher.cpp:628 engines/dialogs.cpp:111 engines/mohawk/dialogs.cpp:115 msgid "~Q~uit" msgstr "~Q~Tuichu" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 +#: gui/launcher.cpp:628 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Tuichu ScummVM" -#: gui/launcher.cpp:627 +#: gui/launcher.cpp:629 msgid "A~b~out..." msgstr "~b~Guanyu" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 +#: gui/launcher.cpp:629 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Guanyu ScummVM" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "~O~ptions..." msgstr "~O~Xuanxiang" -#: gui/launcher.cpp:628 +#: gui/launcher.cpp:630 msgid "Change global ScummVM options" msgstr "Genggai ScummVM Quanju Shezhi" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "~S~tart" msgstr "~S~Kaishi" -#: gui/launcher.cpp:630 +#: gui/launcher.cpp:632 msgid "Start selected game" msgstr "Kaishi Xuanze de Youxi" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "~L~oad..." msgstr "~L~Jiazai" -#: gui/launcher.cpp:633 +#: gui/launcher.cpp:635 msgid "Load saved game for selected game" msgstr "Jiazai Xuanze Baocun de Youxi" -#: gui/launcher.cpp:638 +#: gui/launcher.cpp:640 msgid "~A~dd Game..." msgstr "~A~Tianjia Youxi ..." -#: gui/launcher.cpp:638 gui/launcher.cpp:645 +#: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Hold Shift for Mass Add" msgstr "Anzhu Shift Lai Piliang Tianjia" -#: gui/launcher.cpp:640 +#: gui/launcher.cpp:642 msgid "~E~dit Game..." msgstr "~E~Bianji Youxi ..." -#: gui/launcher.cpp:640 gui/launcher.cpp:647 +#: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Change game options" msgstr "Genggai Youxi Xuanxiang" -#: gui/launcher.cpp:642 +#: gui/launcher.cpp:644 msgid "~R~emove Game" msgstr "~R~Yichu Youxi" -#: gui/launcher.cpp:642 gui/launcher.cpp:649 +#: gui/launcher.cpp:644 gui/launcher.cpp:651 msgid "Remove game from the list. The game data files stay intact" msgstr "Cong Liebiao zhong YIchu Youxi. Baoliu Youxi Shuju Wenjian" -#: gui/launcher.cpp:645 +#: gui/launcher.cpp:647 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~Tianjia Youxi ..." -#: gui/launcher.cpp:647 +#: gui/launcher.cpp:649 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~Bianji Youxi ..." -#: gui/launcher.cpp:649 +#: gui/launcher.cpp:651 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~Yichu Youxi ..." -#: gui/launcher.cpp:657 +#: gui/launcher.cpp:659 msgid "Search in game list" msgstr "Zai Youxi Liebiao zhong Sousuo" -#: gui/launcher.cpp:661 gui/launcher.cpp:1224 +#: gui/launcher.cpp:663 gui/launcher.cpp:1226 msgid "Search:" msgstr "Sousuo:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 -#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:718 -#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 +#: engines/mohawk/dialogs.cpp:120 engines/mohawk/riven.cpp:729 +#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:601 msgid "Load game:" msgstr "Jiazai Youxi:" -#: gui/launcher.cpp:685 engines/dialogs.cpp:115 +#: gui/launcher.cpp:687 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/cruise/menu.cpp:214 engines/mohawk/dialogs.cpp:120 -#: engines/mohawk/riven.cpp:718 engines/parallaction/saveload.cpp:197 -#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:189 -#: engines/tsage/scenes.cpp:600 +#: engines/mohawk/riven.cpp:729 engines/parallaction/saveload.cpp:194 +#: engines/pegasus/pegasus.cpp:353 engines/scumm/dialogs.cpp:185 +#: engines/tsage/scenes.cpp:601 msgid "Load" msgstr "Jiazai" -#: gui/launcher.cpp:794 +#: gui/launcher.cpp:796 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -611,39 +611,39 @@ msgstr "" "Nin Queding yao Yunxing Youxi Piliang Jiance Ma? Zhe You Keneng Hui Zengjia " "Daliang Youxi." -#: gui/launcher.cpp:843 +#: gui/launcher.cpp:845 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM Wufa Dakai Zhiding Mulu!" -#: gui/launcher.cpp:855 +#: gui/launcher.cpp:857 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM zai Zhiding Mulu Zhong Wufa Zhaodao Renhe Youxi!" -#: gui/launcher.cpp:869 +#: gui/launcher.cpp:871 msgid "Pick the game:" msgstr "Xuanze Youxi:" -#: gui/launcher.cpp:943 +#: gui/launcher.cpp:945 msgid "Do you really want to remove this game configuration?" msgstr "Nin Zhende Xiangyao Yichu Zhege Youxi Peizhi?" -#: gui/launcher.cpp:1001 +#: gui/launcher.cpp:1003 msgid "Do you want to load saved game?" msgstr "Nin Yao Zairu Baocun de Youxi ma?" -#: gui/launcher.cpp:1050 +#: gui/launcher.cpp:1052 msgid "This game does not support loading games from the launcher." msgstr "Ci Youxi Bu Zhichi cong Jiazaiqi Zhong Jiazai Youxi." -#: gui/launcher.cpp:1054 +#: gui/launcher.cpp:1056 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM Wufa Zhaodao Keyi Yunxing Ci Youxi de Yinqing!" -#: gui/launcher.cpp:1161 +#: gui/launcher.cpp:1163 msgid "Mass Add..." msgstr "PiLiang Zengjia ..." -#: gui/launcher.cpp:1163 +#: gui/launcher.cpp:1165 msgid "Record..." msgstr "Luxiang ..." @@ -726,92 +726,92 @@ msgstr "44 kHz" msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:257 gui/options.cpp:481 gui/options.cpp:582 -#: gui/options.cpp:651 gui/options.cpp:859 +#: gui/options.cpp:261 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:655 gui/options.cpp:863 msgctxt "soundfont" msgid "None" msgstr "Wu" -#: gui/options.cpp:391 +#: gui/options.cpp:395 msgid "Failed to apply some of the graphic options changes:" msgstr "Tuxing Xuanxiang Genggai Shibai:" -#: gui/options.cpp:403 +#: gui/options.cpp:407 msgid "the video mode could not be changed." msgstr "Shipin Moshi Wufa Genggai." -#: gui/options.cpp:409 +#: gui/options.cpp:413 msgid "the fullscreen setting could not be changed" msgstr "Quanping Shezhi Wufa Genggai" -#: gui/options.cpp:415 +#: gui/options.cpp:419 msgid "the aspect ratio setting could not be changed" msgstr "Bili Xuanxiang Wufa Genggai" -#: gui/options.cpp:734 +#: gui/options.cpp:738 msgid "Graphics mode:" msgstr "Tuxing Moshi:" -#: gui/options.cpp:748 +#: gui/options.cpp:752 msgid "Render mode:" msgstr "Xuanran Moshi:" -#: gui/options.cpp:748 gui/options.cpp:749 +#: gui/options.cpp:752 gui/options.cpp:753 msgid "Special dithering modes supported by some games" msgstr "Youxi Zhichi Teshu de Doudong Moshi" -#: gui/options.cpp:760 +#: gui/options.cpp:764 #: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2316 msgid "Fullscreen mode" msgstr "Quanping Moshi" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Aspect ratio correction" msgstr "Bili Jiaozheng" -#: gui/options.cpp:763 +#: gui/options.cpp:767 msgid "Correct aspect ratio for 320x200 games" msgstr "320x200 Youxi Bili Jiaozheng" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Preferred Device:" msgstr "Youxian Shebei:" -#: gui/options.cpp:771 +#: gui/options.cpp:775 msgid "Music Device:" msgstr "Yinyue Shebei:" -#: gui/options.cpp:771 gui/options.cpp:773 +#: gui/options.cpp:775 gui/options.cpp:777 msgid "Specifies preferred sound device or sound card emulator" msgstr "Zhiding Youxian Shengyin Shebei huo Shengka Moniqi" -#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774 +#: gui/options.cpp:775 gui/options.cpp:777 gui/options.cpp:778 msgid "Specifies output sound device or sound card emulator" msgstr "Zhiding Shuchu Shengyin Shebei huo Shengka Moniqi" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Youxian Shebei:" -#: gui/options.cpp:773 +#: gui/options.cpp:777 msgctxt "lowres" msgid "Music Device:" msgstr "Yinyue Shebei:" -#: gui/options.cpp:800 +#: gui/options.cpp:804 msgid "AdLib emulator:" msgstr "AdLib Moniqi:" -#: gui/options.cpp:800 gui/options.cpp:801 +#: gui/options.cpp:804 gui/options.cpp:805 msgid "AdLib is used for music in many games" msgstr "AdLib bei Henduo Youxi Yonglai Bofang Yinyue" -#: gui/options.cpp:811 +#: gui/options.cpp:815 msgid "Output rate:" msgstr "Shuchu Malv:" -#: gui/options.cpp:811 gui/options.cpp:812 +#: gui/options.cpp:815 gui/options.cpp:816 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -819,51 +819,47 @@ msgstr "" "Genggao de Shuxing Hui Tisheng Yinyue Zhiliang dan Youkeneng Nin de Shengka " "Buzhichi" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "GM Device:" msgstr "GM Shebei:" -#: gui/options.cpp:822 +#: gui/options.cpp:826 msgid "Specifies default sound device for General MIDI output" msgstr "Zhiding Tongyong MIDI Shuchu Moren Shengyin Shebei" -#: gui/options.cpp:833 +#: gui/options.cpp:837 msgid "Don't use General MIDI music" msgstr "Buyao Shiyong Tongyong MIDI Yinyue" -#: gui/options.cpp:844 gui/options.cpp:910 +#: gui/options.cpp:848 gui/options.cpp:910 msgid "Use first available device" msgstr "Shiyong Diyige keyong de Shebei" -#: gui/options.cpp:856 +#: gui/options.cpp:860 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859 +#: gui/options.cpp:860 gui/options.cpp:862 gui/options.cpp:863 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "Yixie Shengka Zhichi SoundFont, Biru FluidSynth He Timidity" -#: gui/options.cpp:858 +#: gui/options.cpp:862 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Mixed AdLib/MIDI mode" msgstr "Hunhe AdLib/MIDI Moshi" -#: gui/options.cpp:864 +#: gui/options.cpp:868 msgid "Use both MIDI and AdLib sound generation" msgstr "TongShi Shiyong MIDI He AdLib Shengyin Shengcheng" -#: gui/options.cpp:867 +#: gui/options.cpp:871 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:874 -msgid "FluidSynth Settings" -msgstr "FluidSynth Xuanxiang" - #: gui/options.cpp:881 msgid "MT-32 Device:" msgstr "MT-32 Shebei:" @@ -989,95 +985,99 @@ msgctxt "lowres" msgid "Speech volume:" msgstr "Yuyin Yinliang:" -#: gui/options.cpp:1142 +#: gui/options.cpp:1115 +msgid "FluidSynth Settings" +msgstr "FluidSynth Xuanxiang" + +#: gui/options.cpp:1146 msgid "Theme Path:" msgstr "Zhuti Lujing:" -#: gui/options.cpp:1144 +#: gui/options.cpp:1148 msgctxt "lowres" msgid "Theme Path:" msgstr "Zhuti Lujing:" -#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153 +#: gui/options.cpp:1154 gui/options.cpp:1156 gui/options.cpp:1157 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Zhiding Suoyou Youxi huo ScummVM de Shuju Lujing" -#: gui/options.cpp:1159 +#: gui/options.cpp:1163 msgid "Plugins Path:" msgstr "Chajian Lujing:" -#: gui/options.cpp:1161 +#: gui/options.cpp:1165 msgctxt "lowres" msgid "Plugins Path:" msgstr "Chajian Lujing:" -#: gui/options.cpp:1172 +#: gui/options.cpp:1176 msgctxt "lowres" msgid "Misc" msgstr "Zaxiang" -#: gui/options.cpp:1174 +#: gui/options.cpp:1178 msgid "Theme:" msgstr "Zhuti:" -#: gui/options.cpp:1178 +#: gui/options.cpp:1182 msgid "GUI Renderer:" msgstr "Jiemian Xuanran:" -#: gui/options.cpp:1190 +#: gui/options.cpp:1194 msgid "Autosave:" msgstr "Zidong Baocun:" -#: gui/options.cpp:1192 +#: gui/options.cpp:1196 msgctxt "lowres" msgid "Autosave:" msgstr "Zidong Baocun:" -#: gui/options.cpp:1200 +#: gui/options.cpp:1204 msgid "Keys" msgstr "Guanjianzi" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "GUI Language:" msgstr "Jiemian Yuyan:" -#: gui/options.cpp:1207 +#: gui/options.cpp:1211 msgid "Language of ScummVM GUI" msgstr "ScummVM Jiemian Yuyan" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "Update check:" msgstr "" -#: gui/options.cpp:1235 +#: gui/options.cpp:1239 msgid "How often to check ScummVM updates" msgstr "" -#: gui/options.cpp:1247 +#: gui/options.cpp:1251 msgid "Check now" msgstr "" -#: gui/options.cpp:1382 +#: gui/options.cpp:1386 msgid "You have to restart ScummVM before your changes will take effect." msgstr "Nin Xuyao Chongqi ScummVM Lai Shi Genggai Shengxiao" -#: gui/options.cpp:1415 +#: gui/options.cpp:1419 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Zhiding de Mulu Buneng Xieru. Qing Xuanze Qita de Mulu." -#: gui/options.cpp:1424 +#: gui/options.cpp:1428 msgid "Select directory for GUI themes" msgstr "Xuanze Jiemian Zhuti de Mulu" -#: gui/options.cpp:1434 +#: gui/options.cpp:1438 msgid "Select directory for extra files" msgstr "Xuanze QIta Wenjian Mulu" -#: gui/options.cpp:1445 +#: gui/options.cpp:1449 msgid "Select directory for plugins" msgstr "Xuanze Chajian Mulu" -#: gui/options.cpp:1498 +#: gui/options.cpp:1502 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." @@ -1094,65 +1094,65 @@ msgstr "# Xia Yi Ge" msgid "add" msgstr "Zengjia" -#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:164 +#: gui/predictivedialog.cpp:92 gui/predictivedialog.cpp:167 msgid "Delete char" msgstr "Shanchu Zifu" -#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:168 +#: gui/predictivedialog.cpp:97 gui/predictivedialog.cpp:171 msgid "<" msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is -#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:572 +#: gui/predictivedialog.cpp:99 gui/predictivedialog.cpp:575 msgid "* Pre" msgstr "* Guanci" #. I18N: 'Num' means Numbers -#: gui/predictivedialog.cpp:575 +#: gui/predictivedialog.cpp:578 msgid "* Num" msgstr "* Shuzi" #. I18N: 'Abc' means Latin alphabet input -#: gui/predictivedialog.cpp:578 +#: gui/predictivedialog.cpp:581 msgid "* Abc" msgstr "* Zimu" -#: gui/recorderdialog.cpp:64 +#: gui/recorderdialog.cpp:63 msgid "Recorder or Playback Gameplay" msgstr "Youxi Luxiang Huo Huifang" -#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 +#: gui/recorderdialog.cpp:68 gui/recorderdialog.cpp:155 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 msgid "Delete" msgstr "Shanchu" -#: gui/recorderdialog.cpp:71 +#: gui/recorderdialog.cpp:70 msgid "Record" msgstr "Luxiang" -#: gui/recorderdialog.cpp:72 +#: gui/recorderdialog.cpp:71 msgid "Playback" msgstr "Huifang" -#: gui/recorderdialog.cpp:74 +#: gui/recorderdialog.cpp:73 msgid "Edit" msgstr "Binaji" -#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 -#: gui/recorderdialog.cpp:253 +#: gui/recorderdialog.cpp:85 gui/recorderdialog.cpp:242 +#: gui/recorderdialog.cpp:252 msgid "Author: " msgstr "Zuozhe:" -#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 -#: gui/recorderdialog.cpp:254 +#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 +#: gui/recorderdialog.cpp:253 msgid "Notes: " msgstr "Zhushi:" -#: gui/recorderdialog.cpp:155 +#: gui/recorderdialog.cpp:154 msgid "Do you really want to delete this record?" msgstr "Nin Zhende Xinagyao Shanchu Zhege Luxiang ma?" -#: gui/recorderdialog.cpp:174 +#: gui/recorderdialog.cpp:173 msgid "Unknown Author" msgstr "Weizhi Zuozhe" @@ -1216,7 +1216,7 @@ msgstr "Chuangjian Yige Xin Cundang" msgid "Name: " msgstr "Mingcheng:" -#: gui/saveload-dialog.cpp:949 +#: gui/saveload-dialog.cpp:951 #, c-format msgid "Enter a description for slot %d:" msgstr "Shuru dui %d Dangwei de Miaoshu" @@ -1225,28 +1225,28 @@ msgstr "Shuru dui %d Dangwei de Miaoshu" msgid "Select a Theme" msgstr "Xuanze Zhuti" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgid "Disabled GFX" msgstr "Jinyong GFX" -#: gui/ThemeEngine.cpp:347 +#: gui/ThemeEngine.cpp:353 msgctxt "lowres" msgid "Disabled GFX" msgstr "Jinyong GFX" -#: gui/ThemeEngine.cpp:348 +#: gui/ThemeEngine.cpp:354 msgid "Standard Renderer" msgstr "Biaozhun Xuanranqi" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 +#: gui/ThemeEngine.cpp:354 engines/scumm/dialogs.cpp:659 msgid "Standard" msgstr "Biaozhun" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased Renderer" msgstr "Fanjuchi Xuanranqi" -#: gui/ThemeEngine.cpp:350 +#: gui/ThemeEngine.cpp:356 msgid "Antialiased" msgstr "Fanjuchi" @@ -1271,39 +1271,39 @@ msgstr "Jiancha Gengxin..." msgid "Proceed" msgstr "" -#: gui/widget.cpp:327 gui/widget.cpp:329 gui/widget.cpp:335 gui/widget.cpp:337 +#: gui/widget.cpp:335 gui/widget.cpp:337 gui/widget.cpp:343 gui/widget.cpp:345 msgid "Clear value" msgstr "Qingchu Zhi" -#: base/main.cpp:240 +#: base/main.cpp:243 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Yinqing Buzhichi Tiaoshi Jibie ā%sā" -#: base/main.cpp:312 +#: base/main.cpp:315 msgid "Menu" msgstr "Caidan" -#: base/main.cpp:315 backends/platform/symbian/src/SymbianActions.cpp:45 +#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:45 #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Tiaoguo" -#: base/main.cpp:318 backends/platform/symbian/src/SymbianActions.cpp:50 +#: base/main.cpp:321 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Zanting" -#: base/main.cpp:321 +#: base/main.cpp:324 msgid "Skip line" msgstr "Tiaoguo Cihang" -#: base/main.cpp:520 +#: base/main.cpp:524 msgid "Error running game:" msgstr "Youxi Yunxing Cuowu:" -#: base/main.cpp:567 +#: base/main.cpp:571 msgid "Could not find any engine capable of running the selected game" msgstr "Wufa Zhaodao Shihe Yunxing Youxi de Yinqing" @@ -1461,15 +1461,15 @@ msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~R~Fanhui Qidongqi" -#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:764 -#: engines/avalanche/parser.cpp:1899 engines/cge/events.cpp:74 -#: engines/cge2/events.cpp:67 engines/cruise/menu.cpp:212 -#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 +#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:761 +#: engines/avalanche/parser.cpp:1900 engines/cge/events.cpp:72 +#: engines/cge2/events.cpp:65 engines/cruise/menu.cpp:212 +#: engines/drascula/saveload.cpp:364 engines/dreamweb/saveload.cpp:262 #: engines/hugo/file.cpp:298 engines/mohawk/dialogs.cpp:121 -#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:778 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save game:" msgstr "Baocun Youxi:" @@ -1478,16 +1478,16 @@ msgstr "Baocun Youxi:" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:231 -#: engines/agi/saveload.cpp:764 engines/avalanche/parser.cpp:1899 -#: engines/cge/events.cpp:74 engines/cge2/events.cpp:67 -#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/hugo/file.cpp:298 -#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:877 -#: engines/parallaction/saveload.cpp:212 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:188 +#: engines/agi/saveload.cpp:761 engines/avalanche/parser.cpp:1900 +#: engines/cge/events.cpp:72 engines/cge2/events.cpp:65 +#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:364 +#: engines/dreamweb/saveload.cpp:262 engines/hugo/file.cpp:298 +#: engines/mohawk/dialogs.cpp:121 engines/neverhood/menumodule.cpp:880 +#: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 +#: engines/sci/engine/kfile.cpp:778 engines/scumm/dialogs.cpp:184 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:281 -#: engines/toon/toon.cpp:3338 engines/tsage/scenes.cpp:598 +#: engines/toon/toon.cpp:3339 engines/tsage/scenes.cpp:599 msgid "Save" msgstr "Baocun" @@ -1510,12 +1510,12 @@ msgstr "" "Gengduo Xinxi" #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:117 -#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:106 +#: engines/mohawk/dialogs.cpp:242 engines/tsage/dialogs.cpp:112 msgid "~O~K" msgstr "~O~Queding" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:118 -#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:107 +#: engines/mohawk/dialogs.cpp:243 engines/tsage/dialogs.cpp:113 msgid "~C~ancel" msgstr "~C~Quxiao" @@ -1590,7 +1590,7 @@ msgstr "" msgid "Start anyway" msgstr "Qiangzhi Qidong" -#: audio/adlib.cpp:2291 +#: audio/adlib.cpp:2290 msgid "AdLib Emulator" msgstr "AdLib Moniqi" @@ -1707,7 +1707,7 @@ msgstr "Nin Zhende Yao Tuichu Ma?" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/dialogs.cpp:188 engines/scumm/help.cpp:83 #: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Tuichu" @@ -1856,7 +1856,7 @@ msgid "Windows MIDI" msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 -#: engines/scumm/dialogs.cpp:291 +#: engines/scumm/dialogs.cpp:287 msgid "~C~lose" msgstr "~C~Guanbi" @@ -2346,20 +2346,38 @@ msgstr "" "Buyao Wnagji Yingshe YIge Jian Dao 'YIncang Gongjulan' Lai Chakan Suoyou " "xiang" -#: backends/updates/macosx/macosx-updates.mm:68 +#: backends/updates/macosx/macosx-updates.mm:79 msgid "Check for Updates..." msgstr "Jiancha Gengxin..." +#: engines/adl/detection.cpp:43 engines/adl/detection.cpp:53 +#, fuzzy +msgid "Color mode" +msgstr "Semang Moshi" + +#: engines/adl/detection.cpp:44 engines/adl/detection.cpp:54 +msgid "Use color graphics" +msgstr "" + +#: engines/adl/detection.cpp:63 +msgid "Scanlines" +msgstr "" + +#: engines/adl/detection.cpp:64 +#, fuzzy +msgid "Show scanlines" +msgstr "Xianshi Wuti Biaoqian" + #: engines/agi/detection.cpp:147 engines/cine/detection.cpp:70 -#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:47 -#: engines/neverhood/detection.cpp:160 engines/sci/detection.cpp:410 +#: engines/drascula/detection.cpp:302 engines/dreamweb/detection.cpp:48 +#: engines/neverhood/detection.cpp:177 engines/sci/detection.cpp:410 #: engines/toltecs/detection.cpp:200 engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" msgstr "Shiyong Yuanshi Baocun/Zairu Pingmu" #: engines/agi/detection.cpp:148 engines/cine/detection.cpp:71 -#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:48 -#: engines/neverhood/detection.cpp:161 engines/sci/detection.cpp:411 +#: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 +#: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:411 #: engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Shiyong Yuanshi Baocun/Zairu Pingmu, Bu Shiyong ScummVM de" @@ -2404,27 +2422,27 @@ msgid "" "real-time prompt." msgstr "" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore game:" msgstr "Huifu Youxi:" -#: engines/agi/saveload.cpp:777 engines/avalanche/parser.cpp:1887 -#: engines/cge/events.cpp:85 engines/cge2/events.cpp:78 -#: engines/drascula/saveload.cpp:349 engines/dreamweb/saveload.cpp:169 -#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:890 +#: engines/agi/saveload.cpp:774 engines/avalanche/parser.cpp:1888 +#: engines/cge/events.cpp:83 engines/cge2/events.cpp:76 +#: engines/drascula/saveload.cpp:377 engines/dreamweb/saveload.cpp:170 +#: engines/hugo/file.cpp:400 engines/neverhood/menumodule.cpp:893 #: engines/sci/engine/kfile.cpp:877 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:256 -#: engines/toon/toon.cpp:3430 +#: engines/toon/toon.cpp:3431 msgid "Restore" msgstr "Huifu" -#: engines/agos/saveload.cpp:160 engines/scumm/scumm.cpp:2374 +#: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2393 #, c-format msgid "" "Failed to load game state from file:\n" @@ -2435,7 +2453,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:195 engines/scumm/scumm.cpp:2367 +#: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2386 #, c-format msgid "" "Failed to save game state to file:\n" @@ -2446,7 +2464,7 @@ msgstr "" "\n" "%s" -#: engines/agos/saveload.cpp:203 engines/scumm/scumm.cpp:2385 +#: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2404 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -2457,7 +2475,7 @@ msgstr "" "\n" "%s" -#: engines/agos/animation.cpp:557 +#: engines/agos/animation.cpp:558 #, c-format msgid "Cutscene file '%s' not found!" msgstr "Changjing Qiehuan Wenjian '%s' Wei Zhaodao!" @@ -2488,20 +2506,20 @@ msgstr "" "Zaici Xunwen\n" " \n" -#: engines/dreamweb/detection.cpp:57 +#: engines/dreamweb/detection.cpp:58 msgid "Use bright palette mode" msgstr "Shiyong Liang Tiaoseban Moshi" -#: engines/dreamweb/detection.cpp:58 +#: engines/dreamweb/detection.cpp:59 msgid "Display graphics using the game's bright palette" msgstr "Shiyong youxi de Liang Tiaoseban Lai Xianshi Tuxiang" -#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 +#: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." msgstr "Wufa Cong Cundang Wenjian Zhong Duqu" -#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 +#: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." msgstr "Wufa Baocun Cundang " @@ -2518,7 +2536,7 @@ msgstr "Kuaisu Yingpian" msgid "Play movies at an increased speed" msgstr "Yong Gengkuai de Sudu Bofang Yingpian" -#: engines/groovie/script.cpp:408 +#: engines/groovie/script.cpp:407 msgid "Failed to save game" msgstr "Wufa baocun Youxi" @@ -2728,23 +2746,23 @@ msgstr "~M~Zhucaidan" msgid "~W~ater Effect Enabled" msgstr "~W~Qiyong Shuimian Xiaoguo" -#: engines/neverhood/detection.cpp:167 +#: engines/neverhood/detection.cpp:184 msgid "Skip the Hall of Records storyboard scenes" msgstr "Tiaoguo Hall of Records Jishiban Changjing" -#: engines/neverhood/detection.cpp:168 +#: engines/neverhood/detection.cpp:185 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "Yunxu Wanjia Tiaoguo Hall of Records Jishiban Changjing" -#: engines/neverhood/detection.cpp:174 +#: engines/neverhood/detection.cpp:191 msgid "Scale the making of videos to full screen" msgstr "Fangda Shipin Zhizuo Dao Quanping" -#: engines/neverhood/detection.cpp:175 +#: engines/neverhood/detection.cpp:192 msgid "Scale the making of videos, so that they use the whole screen" msgstr "Suofang Shipin Zhizuo, Quanping Ke Yong" -#: engines/parallaction/saveload.cpp:133 +#: engines/parallaction/saveload.cpp:130 #, c-format msgid "" "Can't save game in slot %i\n" @@ -2753,23 +2771,23 @@ msgstr "" "Wufa Baocun Youxi Dao Kongwei %i\n" "\n" -#: engines/parallaction/saveload.cpp:197 +#: engines/parallaction/saveload.cpp:194 msgid "Load file" msgstr "Zairu Wenjian" -#: engines/parallaction/saveload.cpp:204 +#: engines/parallaction/saveload.cpp:201 msgid "Loading game..." msgstr "Zairu youxi..." -#: engines/parallaction/saveload.cpp:212 +#: engines/parallaction/saveload.cpp:209 msgid "Save file" msgstr "Baocun Wenjian" -#: engines/parallaction/saveload.cpp:219 +#: engines/parallaction/saveload.cpp:216 msgid "Saving game..." msgstr "Baocun Youxi..." -#: engines/parallaction/saveload.cpp:272 +#: engines/parallaction/saveload.cpp:269 msgid "" "ScummVM found that you have old savefiles for Nippon Safes that should be " "renamed.\n" @@ -2783,11 +2801,11 @@ msgstr "" "Buneng Zairu Tamen.\n" "Dianji Queding Lai Xianzai Zhuanhuan, Fouze Nin Hui zai Xiaci Bei Xunwen\n" -#: engines/parallaction/saveload.cpp:319 +#: engines/parallaction/saveload.cpp:316 msgid "ScummVM successfully converted all your savefiles." msgstr "ScummVM Chenggong Zhuanhuan le Nin de Suoyou Cundang Wenjian." -#: engines/parallaction/saveload.cpp:321 +#: engines/parallaction/saveload.cpp:318 msgid "" "ScummVM printed some warnings in your console window and can't guarantee all " "your files have been converted.\n" @@ -2906,128 +2924,128 @@ msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" msgstr "Shiyong Qita Yinse Guangbiao" -#: engines/scumm/detection.cpp:1335 +#: engines/scumm/detection.cpp:1340 #, fuzzy msgid "Show Object Line" msgstr "Xianshi Wuti Biaoqian" -#: engines/scumm/detection.cpp:1336 +#: engines/scumm/detection.cpp:1341 msgid "Show the names of objects at the bottom of the screen" msgstr "" -#: engines/scumm/dialogs.cpp:176 +#: engines/scumm/dialogs.cpp:172 #, c-format msgid "Insert Disk %c and Press Button to Continue." msgstr "Charu Guangpan %c Bing An Anniu YI jixu" -#: engines/scumm/dialogs.cpp:177 +#: engines/scumm/dialogs.cpp:173 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." msgstr "Wufa zhaodao %s, (%c%d) Qing an anniu." -#: engines/scumm/dialogs.cpp:178 +#: engines/scumm/dialogs.cpp:174 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." msgstr "Duqu Guangpan %c Cuowu, (%c%d) Qing An Anniu." -#: engines/scumm/dialogs.cpp:179 +#: engines/scumm/dialogs.cpp:175 msgid "Game Paused. Press SPACE to Continue." msgstr "Youxi Zanting. An Kongge Yi jixu." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' -#: engines/scumm/dialogs.cpp:183 +#: engines/scumm/dialogs.cpp:179 msgid "Are you sure you want to restart? (Y/N)Y" msgstr "NinQueding Yao Chongqi ma? (Y/N)Y" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment -#: engines/scumm/dialogs.cpp:185 +#: engines/scumm/dialogs.cpp:181 msgid "Are you sure you want to quit? (Y/N)Y" msgstr "NinQueding Yao Tuichu Ma? (Y/N)Y" -#: engines/scumm/dialogs.cpp:190 +#: engines/scumm/dialogs.cpp:186 msgid "Play" msgstr "Kaishi" -#: engines/scumm/dialogs.cpp:194 +#: engines/scumm/dialogs.cpp:190 msgid "Insert save/load game disk" msgstr "Charu Cundang/Duqu youxi Guangpan" -#: engines/scumm/dialogs.cpp:195 +#: engines/scumm/dialogs.cpp:191 msgid "You must enter a name" msgstr "Nin bixu Shuru Yige Mingcheng" -#: engines/scumm/dialogs.cpp:196 +#: engines/scumm/dialogs.cpp:192 msgid "The game was NOT saved (disk full?)" msgstr "Youxi Meiyou Baocun (Cipan Kongjian YIman?)" -#: engines/scumm/dialogs.cpp:197 +#: engines/scumm/dialogs.cpp:193 msgid "The game was NOT loaded" msgstr "Youxi Meiyou Jiazai" -#: engines/scumm/dialogs.cpp:198 +#: engines/scumm/dialogs.cpp:194 #, c-format msgid "Saving '%s'" msgstr "Baocun '%s'" -#: engines/scumm/dialogs.cpp:199 +#: engines/scumm/dialogs.cpp:195 #, c-format msgid "Loading '%s'" msgstr "Zairu '%s'" -#: engines/scumm/dialogs.cpp:200 +#: engines/scumm/dialogs.cpp:196 msgid "Name your SAVE game" msgstr "Wei baocun Youxi Qiming" -#: engines/scumm/dialogs.cpp:201 +#: engines/scumm/dialogs.cpp:197 msgid "Select a game to LOAD" msgstr "Qing Xuanze Yige Youxi Jiazai" -#: engines/scumm/dialogs.cpp:202 +#: engines/scumm/dialogs.cpp:198 msgid "Game title)" msgstr "Youxi Biaoti)" #. I18N: Previous page button -#: engines/scumm/dialogs.cpp:288 +#: engines/scumm/dialogs.cpp:284 msgid "~P~revious" msgstr "~P~Shangyige" #. I18N: Next page button -#: engines/scumm/dialogs.cpp:290 +#: engines/scumm/dialogs.cpp:286 msgid "~N~ext" msgstr "~N~Xiayige" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:598 msgid "Speech Only" msgstr "Jin Yuyin" -#: engines/scumm/dialogs.cpp:603 +#: engines/scumm/dialogs.cpp:599 msgid "Speech and Subtitles" msgstr "Yuyin he Zimu" -#: engines/scumm/dialogs.cpp:604 +#: engines/scumm/dialogs.cpp:600 msgid "Subtitles Only" msgstr "Jin Zimu" -#: engines/scumm/dialogs.cpp:612 +#: engines/scumm/dialogs.cpp:608 msgctxt "lowres" msgid "Speech & Subs" msgstr "Yuyin He Zimu" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:654 msgid "Select a Proficiency Level." msgstr "Qing Xuanze Shulian Dengji" -#: engines/scumm/dialogs.cpp:660 +#: engines/scumm/dialogs.cpp:656 msgid "Refer to your Loom(TM) manual for help." msgstr "Qingchayue Loom(TM) Shouce Huoqu Bangzhu." -#: engines/scumm/dialogs.cpp:664 +#: engines/scumm/dialogs.cpp:660 msgid "Practice" msgstr "Lianxi" -#: engines/scumm/dialogs.cpp:665 +#: engines/scumm/dialogs.cpp:661 msgid "Expert" msgstr "Zhuanjia" @@ -3564,23 +3582,23 @@ msgstr "Feiwang Youbian" msgid "Fly to lower right" msgstr "Feiwang Youxia" -#: engines/scumm/input.cpp:580 +#: engines/scumm/input.cpp:578 msgid "Snap scroll on" msgstr "Snap hundong kai" -#: engines/scumm/input.cpp:582 +#: engines/scumm/input.cpp:580 msgid "Snap scroll off" msgstr "Snap Gundong Guan" -#: engines/scumm/input.cpp:595 +#: engines/scumm/input.cpp:593 msgid "Music volume: " msgstr "Yinyue Yinliang:" -#: engines/scumm/input.cpp:612 +#: engines/scumm/input.cpp:610 msgid "Subtitle speed: " msgstr "Zimu Sudu:" -#: engines/scumm/scumm.cpp:1829 +#: engines/scumm/scumm.cpp:1848 #, c-format msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" @@ -3589,7 +3607,7 @@ msgstr "" "Bendi MIDI Zhichi Xuyao Cong LucasArts Shengji Zhi Roland,\n" "Dnahsi %s meiyou zhaodao. Shiyong AdLib." -#: engines/scumm/scumm.cpp:2645 +#: engines/scumm/scumm.cpp:2664 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 " @@ -3771,13 +3789,13 @@ msgid "" "Use English speech instead of German for every language other than German" msgstr "" -#: engines/teenagent/resources.cpp:95 +#: engines/teenagent/resources.cpp:96 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" msgstr "" "Zhaobudao 'teenagent.dat' Wenjian. Cong ScummVM wangzhan Shangmian Dedao" -#: engines/teenagent/resources.cpp:116 +#: engines/teenagent/resources.cpp:117 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" diff --git a/test/common/array.h b/test/common/array.h index 7473398058..2dc67837db 100644 --- a/test/common/array.h +++ b/test/common/array.h @@ -362,7 +362,7 @@ struct ListElement { }; static int compareInts(const void *a, const void *b) { - return ((ListElement *)a)->value - ((ListElement *)a)->value; + return ((ListElement *)a)->value - ((ListElement *)b)->value; } class SortedArrayTestSuite : public CxxTest::TestSuite { @@ -373,8 +373,6 @@ public: // Fill the container with some random data container.insert(new ListElement(1)); - return; - container.insert(new ListElement(7)); container.insert(new ListElement(8)); container.insert(new ListElement(3)); @@ -390,8 +388,9 @@ public: for (int i = 1; i < 10; i++) { TS_ASSERT_EQUALS((*iter)->value, i); ++iter; - TS_ASSERT_DIFFERS(iter, container.end()); } + + TS_ASSERT_EQUALS(iter, container.end()); } }; |