aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Bénony2016-01-06 16:20:23 +0100
committerVincent Bénony2016-01-06 16:20:23 +0100
commitefdb5679ce6304dbc854afbbc511e633d7513338 (patch)
treee680a240e5f6018fc3a4cce53b50060caa22a929
parent4687ff6d6d2863cc95c8137543ecf9c39bc01723 (diff)
parentb72c02bad44749a1355acefdb198e36b2e772575 (diff)
downloadscummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.tar.gz
scummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.tar.bz2
scummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.zip
IOS: Merge branch 'master' into ios-fix
-rw-r--r--.gitignore1
-rw-r--r--COPYRIGHT2
-rw-r--r--NEWS1
-rw-r--r--audio/softsynth/mt32.cpp4
-rw-r--r--audio/softsynth/mt32/ROMInfo.cpp11
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.cpp59
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.h13
-rw-r--r--backends/platform/sdl/macosx/appmenu_osx.mm25
-rw-r--r--backends/platform/symbian/README2
-rw-r--r--backends/platform/symbian/S60/ScummVM_S60.mmp.in2
-rw-r--r--backends/platform/symbian/S60/ScummVM_S60_App.mmp2
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in2
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in2
-rw-r--r--backends/platform/symbian/S80/ScummVM_S80.mmp.in2
-rw-r--r--backends/platform/symbian/S80/ScummVM_S80_App.mmp2
-rw-r--r--backends/platform/symbian/S90/Scummvm_S90.mmp.in2
-rw-r--r--backends/platform/symbian/S90/Scummvm_S90_App.mmp2
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM.rss2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM.rss2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_A0000658.rss2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in2
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss2
-rw-r--r--backends/platform/symbian/mmp/config.mmh2
-rw-r--r--backends/platform/symbian/mmp/scummvm_access.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_agi.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_agos.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_avalanche.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_bbvs.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cge.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cge2.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cine.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_composer.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cruise.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_draci.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_drascula.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_dreamweb.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_fullpipe.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_gob.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_groovie.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_hopkins.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_hugo.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_kyra.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_lure.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_m4.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_made.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_mads.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_mohawk.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_mortevielle.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_neverhood.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_parallaction.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_pegasus.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_prince.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_queen.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_saga.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sci.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_scumm.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sherlock.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sky.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword1.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword2.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword25.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_teenagent.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_testbed.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tinsel.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_toltecs.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tony.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_toon.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_touche.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tsage.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tucker.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_voyeur.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_wintermute.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_zvision.mmp.in2
-rw-r--r--backends/platform/symbian/res/ScummVmAif.rss2
-rw-r--r--backends/platform/symbian/res/scummvm.rss2
-rw-r--r--backends/platform/symbian/res/scummvm_A0000658.rss2
-rw-r--r--backends/platform/symbian/src/ScummVm.hrh2
-rwxr-xr-xconfigure45
-rw-r--r--dists/debian/copyright2
-rw-r--r--dists/macosx/Info.plist11
-rw-r--r--dists/macosx/Info.plist.in9
-rw-r--r--dists/scummvm.rc2
-rw-r--r--dists/scummvm.rc.in2
-rw-r--r--dists/scummvm_logo.bmpbin0 -> 16052 bytes
-rw-r--r--dists/win32/migration.bat2
-rw-r--r--dists/win32/scummvm.nsi2
-rw-r--r--dists/win32/scummvm.nsi.in2
-rw-r--r--doc/cz/PrectiMe2
-rw-r--r--doc/de/Neues1
-rw-r--r--engines/agi/agi.cpp5
-rw-r--r--engines/bbvs/bbvs.cpp4
-rw-r--r--engines/bbvs/bbvs.h3
-rw-r--r--engines/bbvs/graphics.cpp4
-rw-r--r--engines/cine/POTFILES1
-rw-r--r--engines/cine/cine.h3
-rw-r--r--engines/cine/detection.cpp20
-rw-r--r--engines/cine/detection_tables.h2
-rw-r--r--engines/cine/saveload.cpp2
-rw-r--r--engines/cine/various.cpp66
-rw-r--r--engines/dreamweb/dreamweb.cpp2
-rw-r--r--engines/engine.cpp65
-rw-r--r--engines/gob/gob.h6
-rw-r--r--engines/lab/anim.cpp349
-rw-r--r--engines/lab/anim.h105
-rw-r--r--engines/lab/configure.engine3
-rw-r--r--engines/lab/console.cpp136
-rw-r--r--engines/lab/console.h46
-rw-r--r--engines/lab/detection.cpp249
-rw-r--r--engines/lab/dispman.cpp950
-rw-r--r--engines/lab/dispman.h274
-rw-r--r--engines/lab/engine.cpp1196
-rw-r--r--engines/lab/eventman.cpp213
-rw-r--r--engines/lab/eventman.h131
-rw-r--r--engines/lab/image.cpp136
-rw-r--r--engines/lab/image.h83
-rw-r--r--engines/lab/interface.cpp152
-rw-r--r--engines/lab/intro.cpp418
-rw-r--r--engines/lab/intro.h67
-rw-r--r--engines/lab/lab.cpp270
-rw-r--r--engines/lab/lab.h508
-rw-r--r--engines/lab/labsets.cpp77
-rw-r--r--engines/lab/labsets.h61
-rw-r--r--engines/lab/map.cpp553
-rw-r--r--engines/lab/module.mk30
-rw-r--r--engines/lab/music.cpp178
-rw-r--r--engines/lab/music.h94
-rw-r--r--engines/lab/processroom.cpp623
-rw-r--r--engines/lab/processroom.h190
-rw-r--r--engines/lab/resource.cpp309
-rw-r--r--engines/lab/resource.h124
-rw-r--r--engines/lab/savegame.cpp250
-rw-r--r--engines/lab/special.cpp469
-rw-r--r--engines/lab/speciallocks.cpp394
-rw-r--r--engines/lab/speciallocks.h94
-rw-r--r--engines/lab/utils.cpp272
-rw-r--r--engines/lab/utils.h105
-rw-r--r--engines/logo_data.h1099
-rw-r--r--engines/mads/phantom/phantom_scenes4.cpp2
-rw-r--r--engines/mads/scene.cpp2
-rw-r--r--engines/neverhood/neverhood.cpp4
-rw-r--r--engines/sci/console.cpp6
-rw-r--r--engines/sci/detection_tables.h32
-rw-r--r--engines/sci/engine/features.cpp70
-rw-r--r--engines/sci/engine/features.h15
-rw-r--r--engines/sci/engine/file.cpp2
-rw-r--r--engines/sci/engine/file.h5
-rw-r--r--engines/sci/engine/kernel.cpp13
-rw-r--r--engines/sci/engine/kernel.h27
-rw-r--r--engines/sci/engine/kernel_tables.h111
-rw-r--r--engines/sci/engine/kevent.cpp32
-rw-r--r--engines/sci/engine/kfile.cpp30
-rw-r--r--engines/sci/engine/klists.cpp24
-rw-r--r--engines/sci/engine/kmisc.cpp2
-rw-r--r--engines/sci/engine/kscripts.cpp2
-rw-r--r--engines/sci/engine/ksound.cpp2
-rw-r--r--engines/sci/engine/kstring.cpp341
-rw-r--r--engines/sci/engine/kvideo.cpp2
-rw-r--r--engines/sci/engine/message.cpp2
-rw-r--r--engines/sci/engine/object.cpp8
-rw-r--r--engines/sci/engine/object.h22
-rw-r--r--engines/sci/engine/savegame.cpp2
-rw-r--r--engines/sci/engine/script.cpp18
-rw-r--r--engines/sci/engine/static_selectors.cpp18
-rw-r--r--engines/sci/engine/vm_types.cpp8
-rw-r--r--engines/sci/graphics/compare.cpp4
-rw-r--r--engines/sci/graphics/frameout.cpp6
-rw-r--r--engines/sci/graphics/text16.cpp9
-rw-r--r--engines/sci/graphics/view.cpp2
-rw-r--r--engines/sci/resource.cpp142
-rw-r--r--engines/sci/resource.h2
-rw-r--r--engines/sci/resource_audio.cpp2
-rw-r--r--engines/sci/sci.cpp92
-rw-r--r--engines/sci/sci.h4
-rw-r--r--engines/sci/sound/audio.cpp59
-rw-r--r--engines/sci/sound/drivers/midi.cpp2
-rw-r--r--engines/sci/sound/midiparser_sci.cpp6
-rw-r--r--engines/sci/sound/music.cpp2
-rw-r--r--engines/sci/util.cpp2
-rw-r--r--engines/toltecs/toltecs.cpp3
-rw-r--r--engines/tony/loc.cpp27
-rw-r--r--engines/tony/loc.h2
-rw-r--r--engines/tony/sound.cpp208
-rw-r--r--engines/tony/sound.h13
-rw-r--r--engines/tony/tony.cpp41
-rw-r--r--engines/tony/tony.h1
-rw-r--r--engines/wintermute/base/base_keyboard_state.cpp46
-rw-r--r--engines/wintermute/base/font/base_font_truetype.cpp4
-rw-r--r--engines/zvision/detection.cpp100
-rw-r--r--engines/zvision/text/truetype_font.cpp2
-rw-r--r--engines/zvision/zvision.cpp3
-rw-r--r--graphics/fonts/ttf.cpp144
-rw-r--r--graphics/fonts/ttf.h24
-rw-r--r--gui/ThemeEngine.cpp2
-rw-r--r--gui/about.cpp2
-rw-r--r--gui/gui-manager.cpp2
-rw-r--r--gui/gui-manager.h2
-rw-r--r--gui/launcher.cpp2
-rw-r--r--gui/themes/translations.datbin477774 -> 484065 bytes
-rw-r--r--po/be_BY.po131
-rw-r--r--po/ca_ES.po131
-rw-r--r--po/cs_CZ.po1547
-rw-r--r--po/da_DA.po131
-rw-r--r--po/de_DE.po136
-rw-r--r--po/es_ES.po131
-rw-r--r--po/eu.po131
-rw-r--r--po/fi_FI.po131
-rw-r--r--po/fr_FR.po480
-rw-r--r--po/gl_ES.po131
-rw-r--r--po/hu_HU.po309
-rw-r--r--po/it_IT.po131
-rw-r--r--po/nb_NO.po131
-rw-r--r--po/nl_NL.po133
-rw-r--r--po/nn_NO.po131
-rw-r--r--po/pl_PL.po131
-rw-r--r--po/pt_BR.po131
-rw-r--r--po/ru_RU.po152
-rw-r--r--po/scummvm.pot128
-rw-r--r--po/se_SE.po131
-rw-r--r--po/uk_UA.po148
-rw-r--r--ports.mk2
223 files changed, 14292 insertions, 2941 deletions
diff --git a/.gitignore b/.gitignore
index 17012f3bb7..03e3393220 100644
--- a/.gitignore
+++ b/.gitignore
@@ -152,6 +152,7 @@ Thumbs.db
*.sbr
*.sdf
*.opensdf
+*.opendb
obj/
_ReSharper*/
ipch/
diff --git a/COPYRIGHT b/COPYRIGHT
index 8e6b12cd04..f2db1a5aed 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,5 +1,5 @@
ScummVM
-Copyright (C) 2001-2015 by the following:
+Copyright (C) 2001-2016 by the following:
If you have contributed to this project then you deserve to be on this
list. Contact us (see: AUTHORS) and we'll add you.
diff --git a/NEWS b/NEWS
index 47a72daf21..9ab579849d 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added support for The Lost Files of Sherlock Holmes: The Case of the Rose Tattoo.
- Added support for Beavis and Butthead in Virtual Stupidity.
- Added support for Amazon: Guardians of Eden.
+ - Added support for Broken Sword 2.5: The Return of the Templars.
New Ports:
- Added Raspberry Pi port.
diff --git a/audio/softsynth/mt32.cpp b/audio/softsynth/mt32.cpp
index b9799db618..4420657854 100644
--- a/audio/softsynth/mt32.cpp
+++ b/audio/softsynth/mt32.cpp
@@ -199,10 +199,10 @@ int MidiDriver_MT32::open() {
_initializing = true;
debug(4, _s("Initializing MT-32 Emulator"));
_controlFile = new Common::File();
- if (!_controlFile->open("MT32_CONTROL.ROM") && !_controlFile->open("CM32L_CONTROL.ROM"))
+ if (!_controlFile->open("CM32L_CONTROL.ROM") && !_controlFile->open("MT32_CONTROL.ROM"))
error("Error opening MT32_CONTROL.ROM / CM32L_CONTROL.ROM");
_pcmFile = new Common::File();
- if (!_pcmFile->open("MT32_PCM.ROM") && !_pcmFile->open("CM32L_PCM.ROM"))
+ if (!_pcmFile->open("CM32L_PCM.ROM") && !_pcmFile->open("MT32_PCM.ROM"))
error("Error opening MT32_PCM.ROM / CM32L_PCM.ROM");
_controlROM = MT32Emu::ROMImage::makeROMImage(_controlFile);
_pcmROM = MT32Emu::ROMImage::makeROMImage(_pcmFile);
diff --git a/audio/softsynth/mt32/ROMInfo.cpp b/audio/softsynth/mt32/ROMInfo.cpp
index 7c0127078b..f6817c1a4d 100644
--- a/audio/softsynth/mt32/ROMInfo.cpp
+++ b/audio/softsynth/mt32/ROMInfo.cpp
@@ -54,12 +54,21 @@ static const ROMInfo *getKnownROMInfoFromList(unsigned int index) {
const ROMInfo* ROMInfo::getROMInfo(Common::File *file) {
size_t fileSize = file->size();
+ Common::String fileName = file->getName();
+ fileName.toUppercase();
+ bool isCM32LROM = fileName.hasPrefix("CM32L_");
// We haven't added the SHA1 checksum code in ScummVM, as the file size
- // suffices for our needs for now.
+ // and ROM name suffices for our needs for now.
//const char *fileDigest = file->getSHA1();
for (int i = 0; getKnownROMInfoFromList(i) != NULL; i++) {
const ROMInfo *romInfo = getKnownROMInfoFromList(i);
if (fileSize == romInfo->fileSize /*&& !strcmp(fileDigest, romInfo->sha1Digest)*/) {
+ if (fileSize == 65536) {
+ // If we are looking for a CM-32L ROM, make sure we return the first matching
+ // CM-32L ROM from the list, instead of the first matching MT-32 ROM
+ if (isCM32LROM && romInfo->controlROMFeatures->isDefaultReverbMT32Compatible())
+ continue;
+ }
return romInfo;
}
}
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index b2da47110b..2b9d3aa100 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -2367,6 +2367,14 @@ void SurfaceSdlGraphicsManager::notifyVideoExpose() {
_forceFull = true;
}
+#ifdef USE_SDL_RESIZABLE_WINDOW
+void SurfaceSdlGraphicsManager::notifyResize(const uint width, const uint height) {
+#if SDL_VERSION_ATLEAST(2, 0, 0)
+ setWindowResolution(width, height);
+#endif
+}
+#endif
+
void SurfaceSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
#if SDL_VERSION_ATLEAST(2, 0, 0)
// In SDL2 the actual output resolution might be different from what we
@@ -2402,21 +2410,10 @@ void SurfaceSdlGraphicsManager::deinitializeRenderer() {
_window->destroyWindow();
}
-SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) {
- deinitializeRenderer();
-
- const bool isFullscreen = (flags & SDL_FULLSCREEN) != 0;
- if (!_window->createWindow(width, height, isFullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)) {
- return nullptr;
- }
+void SurfaceSdlGraphicsManager::setWindowResolution(int width, int height) {
+ _windowWidth = width;
+ _windowHeight = height;
- _renderer = SDL_CreateRenderer(_window->getSDLWindow(), -1, 0);
- if (!_renderer) {
- deinitializeRenderer();
- return nullptr;
- }
-
- SDL_GetWindowSize(_window->getSDLWindow(), &_windowWidth, &_windowHeight);
// We expect full screen resolution as inputs coming from the event system.
_eventSource->resetKeyboadEmulation(_windowWidth - 1, _windowHeight - 1);
@@ -2425,7 +2422,7 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height,
// this case, we add black bars if necessary to assure the aspect ratio
// is preserved.
const frac_t outputAspect = intToFrac(_windowWidth) / _windowHeight;
- const frac_t desiredAspect = intToFrac(width) / height;
+ const frac_t desiredAspect = intToFrac(_videoMode.hardwareWidth) / _videoMode.hardwareHeight;
_viewport.w = _windowWidth;
_viewport.h = _windowHeight;
@@ -2433,15 +2430,43 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height,
// Adjust one dimension for mantaining the aspect ratio.
if (abs(outputAspect - desiredAspect) >= (int)(FRAC_ONE / 1000)) {
if (outputAspect < desiredAspect) {
- _viewport.h = height * _windowWidth / width;
+ _viewport.h = _videoMode.hardwareHeight * _windowWidth / _videoMode.hardwareWidth;
} else if (outputAspect > desiredAspect) {
- _viewport.w = width * _windowHeight / height;
+ _viewport.w = _videoMode.hardwareWidth * _windowHeight / _videoMode.hardwareHeight;
}
}
_viewport.x = (_windowWidth - _viewport.w) / 2;
_viewport.y = (_windowHeight - _viewport.h) / 2;
+ // Force a full redraw because we changed the viewport.
+ _forceFull = true;
+}
+
+SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) {
+ deinitializeRenderer();
+
+ uint32 createWindowFlags = 0;
+#ifdef USE_SDL_RESIZABLE_WINDOW
+ createWindowFlags |= SDL_WINDOW_RESIZABLE;
+#endif
+ if ((flags & SDL_FULLSCREEN) != 0) {
+ createWindowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ }
+
+ if (!_window->createWindow(width, height, createWindowFlags)) {
+ return nullptr;
+ }
+
+ _renderer = SDL_CreateRenderer(_window->getSDLWindow(), -1, 0);
+ if (!_renderer) {
+ deinitializeRenderer();
+ return nullptr;
+ }
+
+ SDL_GetWindowSize(_window->getSDLWindow(), &_windowWidth, &_windowHeight);
+ setWindowResolution(_windowWidth, _windowHeight);
+
_screenTexture = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STREAMING, width, height);
if (!_screenTexture) {
deinitializeRenderer();
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index ac9844c849..c4f7346525 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -39,6 +39,15 @@
#define USE_SDL_DEBUG_FOCUSRECT
#endif
+// We have (some) support for resizable windows when SDL2 is used. However
+// the overlay still uses the resolution setup with SDL_SetVideoMode. This
+// makes the GUI look subpar when the user resizes the window. In addition
+// we do not adapt the scale factor right now. Thus, we disable this code
+// path for now.
+#if SDL_VERSION_ATLEAST(2, 0, 0) && 0
+#define USE_SDL_RESIZABLE_WINDOW
+#endif
+
#if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
// Uncomment this to enable the 'on screen display' code.
#define USE_OSD 1
@@ -143,6 +152,9 @@ public:
// SdlGraphicsManager interface
virtual void notifyVideoExpose();
+#ifdef USE_SDL_RESIZABLE_WINDOW
+ virtual void notifyResize(const uint width, const uint height);
+#endif
virtual void transformMouseCoordinates(Common::Point &point);
virtual void notifyMousePos(Common::Point mouse);
@@ -174,6 +186,7 @@ protected:
SDL_Rect _viewport;
int _windowWidth, _windowHeight;
void deinitializeRenderer();
+ void setWindowResolution(int width, int height);
SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);
void SDL_UpdateRects(SDL_Surface *screen, int numrects, SDL_Rect *rects);
diff --git a/backends/platform/sdl/macosx/appmenu_osx.mm b/backends/platform/sdl/macosx/appmenu_osx.mm
index d083fb8483..feea40bc06 100644
--- a/backends/platform/sdl/macosx/appmenu_osx.mm
+++ b/backends/platform/sdl/macosx/appmenu_osx.mm
@@ -28,12 +28,22 @@
#include <Cocoa/Cocoa.h>
-// Apple removed setAppleMenu from the header files in 10.4,
-// but as the method still exists we declare it ourselves here.
+// Apple added setAppleMenu in 10.5 and removed it in 10.6.
+// But as the method still exists we declare it ourselves here.
// Yes, this works :)
@interface NSApplication(MissingFunction)
- (void)setAppleMenu:(NSMenu *)menu;
@end
+// However maybe we should conditionally use it depending on the system on which we run ScummVM (and not
+// the one on which we compile) to only do it on OS X 10.5.
+// Here is the relevant bit from the release notes for 10.6:
+// In Leopard and earlier, apps that tried to construct a menu bar without a nib would get an undesirable
+// stubby application menu that could not be removed. To work around this problem on Leopard, you can call
+// the undocumented setAppleMenu: method and pass it the application menu, like so:
+// [NSApp setAppleMenu:[[[NSApp mainMenu] itemAtIndex:0] submenu]];
+// In SnowLeopard, this workaround is unnecessary and should not be used. Under SnowLeopard, the first menu
+// is always identified as the application menu.
+
NSString *constructNSStringFromCString(const char *rawCString, CFStringEncoding stringEncoding) {
return (NSString *)CFStringCreateWithCString(NULL, rawCString, stringEncoding);
@@ -46,13 +56,14 @@ void replaceApplicationMenuItems() {
NSMenu *windowMenu;
NSMenuItem *menuItem;
- // For some reason [[NSApp mainMenu] removeAllItems] doesn't work and crashes, so we need
- // to remove the SDL generated menus one by one
- [[NSApp mainMenu] removeItemAtIndex:0]; // Remove application menu
- [[NSApp mainMenu] removeItemAtIndex:0]; // Remove "Windows" menu
+ // We cannot use [[NSApp mainMenu] removeAllItems] as removeAllItems was added in OS X 10.6
+ // So remove the SDL generated menus one by one instead.
+ while ([[NSApp mainMenu] numberOfItems] > 0) {
+ [[NSApp mainMenu] removeItemAtIndex:0];
+ }
// Create new application menu
- appleMenu = [[NSMenu alloc] initWithTitle:@""];
+ appleMenu = [[NSMenu alloc] initWithTitle:@"ScummVM"];
NSString *nsString = NULL;
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README
index 655ec5137a..47a3097ac0 100644
--- a/backends/platform/symbian/README
+++ b/backends/platform/symbian/README
@@ -1,7 +1,7 @@
ScummVM - ScummVM ported to EPOC/SymbianOS
- Copyright (C) 2008-2015 ScummVM Team
+ Copyright (C) 2008-2016 ScummVM Team
Copyright (C) 2013-2013 Fedor Strizhniou aka zanac
Copyright (C) 2003-2013 Lars 'AnotherGuest' Persson
Copyright (C) 2002-2008 Jurgen 'SumthinWicked' Braam
diff --git a/backends/platform/symbian/S60/ScummVM_S60.mmp.in b/backends/platform/symbian/S60/ScummVM_S60.mmp.in
index c4b0bf49df..14e586246a 100644
--- a/backends/platform/symbian/S60/ScummVM_S60.mmp.in
+++ b/backends/platform/symbian/S60/ScummVM_S60.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S60/ScummVM_S60_App.mmp b/backends/platform/symbian/S60/ScummVM_S60_App.mmp
index f9bd30025c..e75059b4b7 100644
--- a/backends/platform/symbian/S60/ScummVM_S60_App.mmp
+++ b/backends/platform/symbian/S60/ScummVM_S60_App.mmp
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
index 308b9ee2af..a669943933 100644
--- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
@@ -3,7 +3,7 @@
* Copyright (C) 2003-2014 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
* Copyright (C) 2013-2014 Fedor Strizhniou Additional library porting, engine support, help files etc
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
index 4e6e62362c..ac8fc6b35a 100644
--- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
@@ -3,7 +3,7 @@
* Copyright (C) 2003-2014 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
* Copyright (C) 2013-2014 Fedor Strizhniou Additional library porting, engine support, help files etc
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S80/ScummVM_S80.mmp.in b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
index 0a7a755e47..e7ebe900bb 100644
--- a/backends/platform/symbian/S80/ScummVM_S80.mmp.in
+++ b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S80/ScummVM_S80_App.mmp b/backends/platform/symbian/S80/ScummVM_S80_App.mmp
index a949c10169..4b3fc052cf 100644
--- a/backends/platform/symbian/S80/ScummVM_S80_App.mmp
+++ b/backends/platform/symbian/S80/ScummVM_S80_App.mmp
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S90/Scummvm_S90.mmp.in b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
index eaf4673de8..e35cdb9107 100644
--- a/backends/platform/symbian/S90/Scummvm_S90.mmp.in
+++ b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/S90/Scummvm_S90_App.mmp b/backends/platform/symbian/S90/Scummvm_S90_App.mmp
index e4426a3351..1716629ceb 100644
--- a/backends/platform/symbian/S90/Scummvm_S90_App.mmp
+++ b/backends/platform/symbian/S90/Scummvm_S90_App.mmp
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/UIQ2/ScummVM.rss b/backends/platform/symbian/UIQ2/ScummVM.rss
index b8b48cd8f7..13712e26c4 100644
--- a/backends/platform/symbian/UIQ2/ScummVM.rss
+++ b/backends/platform/symbian/UIQ2/ScummVM.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
diff --git a/backends/platform/symbian/UIQ3/ScummVM.rss b/backends/platform/symbian/UIQ3/ScummVM.rss
index 612c52e0b2..5e133ac137 100644
--- a/backends/platform/symbian/UIQ3/ScummVM.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
index 612c52e0b2..5e133ac137 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
index 7d580255bc..5e27b87433 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2009 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2009 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
index 33a2276b0d..8568a51ec3 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
index b79beddcb7..8f8ff5c3b0 100644
--- a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/config.mmh b/backends/platform/symbian/mmp/config.mmh
index da91117cf6..8a81fd2b78 100644
--- a/backends/platform/symbian/mmp/config.mmh
+++ b/backends/platform/symbian/mmp/config.mmh
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2014 Fedor Strizhniou
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_access.mmp.in b/backends/platform/symbian/mmp/scummvm_access.mmp.in
index 4f8b258ec0..8e1c85f3e3 100644
--- a/backends/platform/symbian/mmp/scummvm_access.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_access.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2013 The ScummVM project
+ * Copyright (C) 2005-2016 The ScummVM project
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
index e4bdae3e2f..dcea8f023b 100644
--- a/backends/platform/symbian/mmp/scummvm_agi.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_agos.mmp.in b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
index 8db7132a96..c5eb4d8ad4 100644
--- a/backends/platform/symbian/mmp/scummvm_agos.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in b/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
index 6d44c66bf7..a9580c643e 100644
--- a/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index d547070578..58a56c95ac 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_bbvs.mmp.in b/backends/platform/symbian/mmp/scummvm_bbvs.mmp.in
index 8f643377fc..864d019c97 100644
--- a/backends/platform/symbian/mmp/scummvm_bbvs.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_bbvs.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2014 Fedor Strizhniou - Epoc project file
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_cge.mmp.in b/backends/platform/symbian/mmp/scummvm_cge.mmp.in
index 2b11ef94a6..bcfbec8a70 100644
--- a/backends/platform/symbian/mmp/scummvm_cge.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cge.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_cge2.mmp.in b/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
index 7c78f47bfd..f09a2b2427 100644
--- a/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
index d0a9f86808..ff55b1bc1d 100644
--- a/backends/platform/symbian/mmp/scummvm_cine.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_composer.mmp.in b/backends/platform/symbian/mmp/scummvm_composer.mmp.in
index 8761718a12..c974df098a 100644
--- a/backends/platform/symbian/mmp/scummvm_composer.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_composer.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
index a586a67c0d..134c924d2a 100644
--- a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_draci.mmp.in b/backends/platform/symbian/mmp/scummvm_draci.mmp.in
index 4101ce680f..66d111efb0 100644
--- a/backends/platform/symbian/mmp/scummvm_draci.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_draci.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
index 2ac3e6000f..b3128978c3 100644
--- a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_dreamweb.mmp.in b/backends/platform/symbian/mmp/scummvm_dreamweb.mmp.in
index a238904653..b7841ee9cb 100644
--- a/backends/platform/symbian/mmp/scummvm_dreamweb.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_dreamweb.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_fullpipe.mmp.in b/backends/platform/symbian/mmp/scummvm_fullpipe.mmp.in
index aae44bda97..85bbfa69be 100644
--- a/backends/platform/symbian/mmp/scummvm_fullpipe.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_fullpipe.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
index 1bb8982a9e..b91fbb68b7 100644
--- a/backends/platform/symbian/mmp/scummvm_gob.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
index 199bb4c4a8..effff997df 100644
--- a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_hopkins.mmp.in b/backends/platform/symbian/mmp/scummvm_hopkins.mmp.in
index 59adffb1ea..4df1db9be6 100644
--- a/backends/platform/symbian/mmp/scummvm_hopkins.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_hopkins.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
index 6ccdb2e95e..c294588147 100644
--- a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
index 365c041b27..ad6dfebe71 100644
--- a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
index 4791307aa6..9c49fe7dcb 100644
--- a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
index 1cd46de184..4982576432 100644
--- a/backends/platform/symbian/mmp/scummvm_lure.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_m4.mmp.in b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
index e6621d812d..5a87e3fd14 100644
--- a/backends/platform/symbian/mmp/scummvm_m4.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_made.mmp.in b/backends/platform/symbian/mmp/scummvm_made.mmp.in
index e8835b6428..ab809351c5 100644
--- a/backends/platform/symbian/mmp/scummvm_made.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_made.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_mads.mmp.in b/backends/platform/symbian/mmp/scummvm_mads.mmp.in
index eb1d20749e..65224af700 100644
--- a/backends/platform/symbian/mmp/scummvm_mads.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_mads.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2014 Fedor Strizhniou - Epoc project file
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
index 694032ede6..ff3bce9767 100644
--- a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_mortevielle.mmp.in b/backends/platform/symbian/mmp/scummvm_mortevielle.mmp.in
index caf8e330f3..e04006ea85 100644
--- a/backends/platform/symbian/mmp/scummvm_mortevielle.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_mortevielle.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_neverhood.mmp.in b/backends/platform/symbian/mmp/scummvm_neverhood.mmp.in
index db0f445089..05f195c2c4 100644
--- a/backends/platform/symbian/mmp/scummvm_neverhood.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_neverhood.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
index 7c5c4c8abd..933deec4b7 100644
--- a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_pegasus.mmp.in b/backends/platform/symbian/mmp/scummvm_pegasus.mmp.in
index fa65964f3f..e292764ed9 100644
--- a/backends/platform/symbian/mmp/scummvm_pegasus.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_pegasus.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_prince.mmp.in b/backends/platform/symbian/mmp/scummvm_prince.mmp.in
index 7dfec04f46..c0b8193c38 100644
--- a/backends/platform/symbian/mmp/scummvm_prince.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_prince.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2013 The ScummVM project
+ * Copyright (C) 2005-2016 The ScummVM project
* Copyright (C) 2014 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
index 9280b94fea..106037e741 100644
--- a/backends/platform/symbian/mmp/scummvm_queen.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
index 838ee18ccf..230b54ed07 100644
--- a/backends/platform/symbian/mmp/scummvm_saga.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_sci.mmp.in b/backends/platform/symbian/mmp/scummvm_sci.mmp.in
index daed96856d..42c79c4ccf 100644
--- a/backends/platform/symbian/mmp/scummvm_sci.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sci.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
index 91c6e79fde..c727a6f1be 100644
--- a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in b/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in
index 1edd781100..4c4117f39e 100644
--- a/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2015 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
index 51054597ef..621dcd8699 100644
--- a/backends/platform/symbian/mmp/scummvm_sky.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
index 9ce462f517..0904732a1b 100644
--- a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
index bd4756c903..48aea59db3 100644
--- a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_sword25.mmp.in b/backends/platform/symbian/mmp/scummvm_sword25.mmp.in
index b395a25799..49e37e3140 100644
--- a/backends/platform/symbian/mmp/scummvm_sword25.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword25.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
index fa976791c3..85091abf2c 100644
--- a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_testbed.mmp.in b/backends/platform/symbian/mmp/scummvm_testbed.mmp.in
index e15e02fe1c..3302bfe8af 100644
--- a/backends/platform/symbian/mmp/scummvm_testbed.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_testbed.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
index 095e693372..21fe837a8a 100644
--- a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_toltecs.mmp.in b/backends/platform/symbian/mmp/scummvm_toltecs.mmp.in
index 5f92b2f376..00f2d2261d 100644
--- a/backends/platform/symbian/mmp/scummvm_toltecs.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_toltecs.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_tony.mmp.in b/backends/platform/symbian/mmp/scummvm_tony.mmp.in
index de1d497412..a05fba8842 100644
--- a/backends/platform/symbian/mmp/scummvm_tony.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tony.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_toon.mmp.in b/backends/platform/symbian/mmp/scummvm_toon.mmp.in
index 49f0b0e19d..1f268b3c00 100644
--- a/backends/platform/symbian/mmp/scummvm_toon.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_toon.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_touche.mmp.in b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
index 1ff5d66cb5..636b448168 100644
--- a/backends/platform/symbian/mmp/scummvm_touche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
index 6b57827e1e..d45a808628 100644
--- a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
index 3be99ab47d..68c81aebbb 100644
--- a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_voyeur.mmp.in b/backends/platform/symbian/mmp/scummvm_voyeur.mmp.in
index c31d3fcfa2..9e02567651 100644
--- a/backends/platform/symbian/mmp/scummvm_voyeur.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_voyeur.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_wintermute.mmp.in b/backends/platform/symbian/mmp/scummvm_wintermute.mmp.in
index 97fbd6e3ea..d5eef5d3a3 100644
--- a/backends/platform/symbian/mmp/scummvm_wintermute.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_wintermute.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/mmp/scummvm_zvision.mmp.in b/backends/platform/symbian/mmp/scummvm_zvision.mmp.in
index 838520799e..1bd34dfe38 100644
--- a/backends/platform/symbian/mmp/scummvm_zvision.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_zvision.mmp.in
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
* Copyright (C) 2013 Strizniou Fedor - Epoc project file
*
* ScummVM is the legal property of its developers, whose names
diff --git a/backends/platform/symbian/res/ScummVmAif.rss b/backends/platform/symbian/res/ScummVmAif.rss
index 8238bdd005..3bb86ca796 100644
--- a/backends/platform/symbian/res/ScummVmAif.rss
+++ b/backends/platform/symbian/res/ScummVmAif.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/res/scummvm.rss b/backends/platform/symbian/res/scummvm.rss
index ae34e9fbaa..67af8b77d0 100644
--- a/backends/platform/symbian/res/scummvm.rss
+++ b/backends/platform/symbian/res/scummvm.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/res/scummvm_A0000658.rss b/backends/platform/symbian/res/scummvm_A0000658.rss
index 3b31f9f0a0..2f478962de 100644
--- a/backends/platform/symbian/res/scummvm_A0000658.rss
+++ b/backends/platform/symbian/res/scummvm_A0000658.rss
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/backends/platform/symbian/src/ScummVm.hrh b/backends/platform/symbian/src/ScummVm.hrh
index f756912d96..927da51e3d 100644
--- a/backends/platform/symbian/src/ScummVm.hrh
+++ b/backends/platform/symbian/src/ScummVm.hrh
@@ -2,7 +2,7 @@
* Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL
* Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System
* Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer
- * Copyright (C) 2005-2015 The ScummVM Team
+ * Copyright (C) 2005-2016 The ScummVM Team
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
diff --git a/configure b/configure
index 1b9c394c51..6afa8e16f9 100755
--- a/configure
+++ b/configure
@@ -1692,23 +1692,33 @@ LD=$CXX
#
echocheck "compiler version"
-# We first check whether we have an Intel compiler here, since the Intel compiler
-# can also fake itself as an gcc (to ease compatibility with common Linux etc.
-# programs).
+# Some compilers pretend to be gcc to ease compatibility with
+# common Linux etc. programs. We first check for some of these here.
+have_gcc=no
+cc_check_define __GNUC__ && have_gcc=yes
have_icc=no
cc_check_define __INTEL_COMPILER && have_icc=yes
+have_clang=no
+cc_check_define __clang__ && have_clang=yes
if test "$have_icc" = yes; then
add_line_to_config_mk 'HAVE_ICC = 1'
- # Make ICC error our on unknown command line options instead of printing
+ # Make ICC error out on unknown command line options instead of printing
# a warning. This is for example required to make the -Wglobal-destructors
# detection work correctly.
append_var CXXFLAGS "-diag-error 10006,10148"
+
+ # ICC doesn't accept all gcc options, so we disable have_gcc, even if
+ # ICC does have the gcc-compatibility defines.
+ have_gcc=no
fi
-have_gcc=no
-cc_check_define __GNUC__ && have_gcc=yes
+if test "$have_clang" = yes; then
+ add_line_to_config_mk 'HAVE_CLANG = 1'
+
+ # clang does accept all gcc options we use, so we keep have_gcc
+fi
if test "$have_gcc" = yes; then
add_line_to_config_mk 'HAVE_GCC = 1'
@@ -1716,11 +1726,17 @@ if test "$have_gcc" = yes; then
_cxx_minor=`gcc_get_define __GNUC_MINOR__`
cxx_version="`( $CXX -dumpversion ) 2>&1`"
- if test -n "`gcc_get_define __clang__`"; then
- add_line_to_config_mk 'HAVE_CLANG = 1'
- fi
-
- if test "$_cxx_major" -eq 2 && test "$_cxx_minor" -ge 95 || \
+ if test "$have_clang" = yes; then
+ # Clang sets a gcc version number for compatibility.
+ # We keep that as _cxx_minor/_cxx_major for later
+ # compiler version checks.
+
+ # For the version reported in the configure log (cxx_version),
+ # we get the actual clang version.
+ cxx_version=`gcc_get_define __clang_version__`
+ cxx_version="`echo "${cxx_version}" | sed -e 's/"\([^ ]*\) .*/\1/'`"
+ cxx_version="clang $cxx_version, ok"
+ elif test "$_cxx_major" -eq 2 && test "$_cxx_minor" -ge 95 || \
test "$_cxx_major" -gt 2 ; then
cxx_version="$cxx_version, ok"
cxx_verc_fail=no
@@ -2607,8 +2623,10 @@ if test -n "$_host"; then
# since SDL2 manages dispmanx/GLES2 very well internally.
# SDL1 is bit-rotten on this platform.
_sdlconfig=sdl2-config
- # We should add _opengles=yes later here if we wanted the GLES renderer.
- # For now, we use plain SDL2 only, which in turn uses GLES2 by default.
+ # OpenGL(ES) support is mature enough as to be the best option on
+ # the Raspberry Pi, so it's enabled by default.
+ _opengl=yes
+ _opengles=yes
;;
dreamcast)
append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER"
@@ -4632,6 +4650,7 @@ STAGINGPATH=$_stagingpath
WIN32PATH=$_win32path
AMIGAOSPATH=$_amigaospath
STATICLIBPATH=$_staticlibpath
+SDLCONFIG=$_sdlconfig
ABI := $ABI
diff --git a/dists/debian/copyright b/dists/debian/copyright
index 734ec77039..06705fd6bc 100644
--- a/dists/debian/copyright
+++ b/dists/debian/copyright
@@ -7,7 +7,7 @@ It was downloaded from <http://www.scummvm.org/>.
Upstream Authors: see `/usr/share/doc/scummvm/AUTHORS'.
-ScummVM is Copyright © 2002-2015 The ScummVM Team
+ScummVM is Copyright © 2002-2016 The ScummVM Team
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
diff --git a/dists/macosx/Info.plist b/dists/macosx/Info.plist
index 2a9a1998ae..92f82d082b 100644
--- a/dists/macosx/Info.plist
+++ b/dists/macosx/Info.plist
@@ -9,7 +9,7 @@
<key>CFBundleExecutable</key>
<string>scummvm</string>
<key>CFBundleGetInfoString</key>
- <string>1.8.0git, Copyright 2001-2015 The ScummVM Team</string>
+ <string>1.8.0git, Copyright 2001-2016 The ScummVM Team</string>
<key>CFBundleIconFile</key>
<string>scummvm.icns</string>
<key>CFBundleIdentifier</key>
@@ -19,15 +19,20 @@
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
+ <string>be</string>
<string>ca</string>
<string>cs</string>
<string>da</string>
<string>de</string>
<string>es</string>
+ <string>eu</string>
+ <string>fi</string>
<string>fr</string>
+ <string>gl</string>
<string>hu</string>
<string>it</string>
<string>nb</string>
+ <string>nl</string>
<string>nn</string>
<string>pl</string>
<string>pt</string>
@@ -44,9 +49,11 @@
<key>CFBundleVersion</key>
<string>1.8.0git</string>
<key>NSHumanReadableCopyright</key>
- <string>Copyright 2001-2015 The ScummVM Team</string>
+ <string>Copyright 2001-2016 The ScummVM Team</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright 2001-2016 The ScummVM Team</string>
<key>SUFeedURL</key>
<string>http://www.scummvm.org/appcasts/macosx/release.xml</string>
<key>SUPublicDSAKeyFile</key>
diff --git a/dists/macosx/Info.plist.in b/dists/macosx/Info.plist.in
index 7e91984f39..1a83447e26 100644
--- a/dists/macosx/Info.plist.in
+++ b/dists/macosx/Info.plist.in
@@ -7,15 +7,20 @@
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
+ <string>be</string>
<string>ca</string>
<string>cs</string>
<string>da</string>
<string>de</string>
<string>es</string>
+ <string>eu</string>
+ <string>fi</string>
<string>fr</string>
+ <string>gl</string>
<string>hu</string>
<string>it</string>
<string>nb</string>
+ <string>nl</string>
<string>nn</string>
<string>pl</string>
<string>pt</string>
@@ -28,7 +33,7 @@
<key>CFBundleExecutable</key>
<string>scummvm</string>
<key>CFBundleGetInfoString</key>
- <string>@VERSION@, Copyright 2001-2015 The ScummVM Team</string>
+ <string>@VERSION@, Copyright 2001-2016 The ScummVM Team</string>
<key>CFBundleIconFile</key>
<string>scummvm.icns</string>
<key>CFBundleIdentifier</key>
@@ -46,7 +51,7 @@
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHumanReadableCopyright</key>
- <string>Copyright 2001-2015 The ScummVM Team</string>
+ <string>Copyright 2001-2016 The ScummVM Team</string>
<key>SUFeedURL</key>
<string>http://www.scummvm.org/appcasts/macosx/release.xml</string>
<key>SUPublicDSAKeyFile</key>
diff --git a/dists/scummvm.rc b/dists/scummvm.rc
index fbf2f44434..002dc42112 100644
--- a/dists/scummvm.rc
+++ b/dists/scummvm.rc
@@ -84,7 +84,7 @@ BEGIN
VALUE "FileDescription", "http://www.scummvm.org/\0"
VALUE "FileVersion", "1.8.0git\0"
VALUE "InternalName", "scummvm\0"
- VALUE "LegalCopyright", "Copyright 2001-2015 The ScummVM Team\0"
+ VALUE "LegalCopyright", "Copyright 2001-2016 The ScummVM Team\0"
VALUE "LegalTrademarks", "'SCUMM', and all SCUMM games are a TM of LucasArts. Simon The Sorcerer is a TM of AdventureSoft. Beneath a Steel Sky and Broken Sword are a TM of Revolution. Flight of the Amazon Queen is a TM of John Passfield and Steve Stamatiadis. \0"
VALUE "OriginalFilename", "scummvm.exe\0"
VALUE "ProductName", "ScummVM\0"
diff --git a/dists/scummvm.rc.in b/dists/scummvm.rc.in
index fc68f95a95..34a4948381 100644
--- a/dists/scummvm.rc.in
+++ b/dists/scummvm.rc.in
@@ -84,7 +84,7 @@ BEGIN
VALUE "FileDescription", "http://www.scummvm.org/\0"
VALUE "FileVersion", "@VERSION@\0"
VALUE "InternalName", "scummvm\0"
- VALUE "LegalCopyright", "Copyright 2001-2015 The ScummVM Team\0"
+ VALUE "LegalCopyright", "Copyright 2001-2016 The ScummVM Team\0"
VALUE "LegalTrademarks", "'SCUMM', and all SCUMM games are a TM of LucasArts. Simon The Sorcerer is a TM of AdventureSoft. Beneath a Steel Sky and Broken Sword are a TM of Revolution. Flight of the Amazon Queen is a TM of John Passfield and Steve Stamatiadis. \0"
VALUE "OriginalFilename", "scummvm.exe\0"
VALUE "ProductName", "ScummVM\0"
diff --git a/dists/scummvm_logo.bmp b/dists/scummvm_logo.bmp
new file mode 100644
index 0000000000..8217019be4
--- /dev/null
+++ b/dists/scummvm_logo.bmp
Binary files differ
diff --git a/dists/win32/migration.bat b/dists/win32/migration.bat
index e1b27a1fb3..0ab38653f6 100644
--- a/dists/win32/migration.bat
+++ b/dists/win32/migration.bat
@@ -4,7 +4,7 @@
:: This script will copy any saved games located in the
:: old default location, to the new default location.
::
-:: (c) 2012-2014 ScummVM Team
+:: (c) 2012-2016 ScummVM Team
::
@echo off
diff --git a/dists/win32/scummvm.nsi b/dists/win32/scummvm.nsi
index a7e891acc2..3bcc621965 100644
--- a/dists/win32/scummvm.nsi
+++ b/dists/win32/scummvm.nsi
@@ -76,7 +76,7 @@ Name ScummVM
!define COMPANY "ScummVM Team"
!define URL "http://scummvm.org/"
!define DESCRIPTION "ScummVM Installer. Look! A three headed monkey (TM)!"
-!define COPYRIGHT "Copyright 2001-2015 The ScummVM Team"
+!define COPYRIGHT "Copyright 2001-2016 The ScummVM Team"
#########################################################################################
# Installer configuration
diff --git a/dists/win32/scummvm.nsi.in b/dists/win32/scummvm.nsi.in
index 7a156fb7b4..79e1a9d581 100644
--- a/dists/win32/scummvm.nsi.in
+++ b/dists/win32/scummvm.nsi.in
@@ -76,7 +76,7 @@ Name ScummVM
!define COMPANY "ScummVM Team"
!define URL "http://scummvm.org/"
!define DESCRIPTION "ScummVM Installer. Look! A three headed monkey (TM)!"
-!define COPYRIGHT "Copyright 2001-2015 The ScummVM Team"
+!define COPYRIGHT "Copyright 2001-2016 The ScummVM Team"
#########################################################################################
# Installer configuration
diff --git a/doc/cz/PrectiMe b/doc/cz/PrectiMe
index 2baf145cd9..d360aa46f9 100644
--- a/doc/cz/PrectiMe
+++ b/doc/cz/PrectiMe
@@ -1841,7 +1841,7 @@ Nebo novější (starší verze mohou fungovat, ale nejsou podporovány) a podpo
Některé části ScummVM, zvláště zvětšovače, mají vysoce optimalizované verze napsané v assembleru. Pokud si přejete tuto možnost použít, potřebuje mít nainstalován assembler nasm (viz http://nasm.sf.net). Nezapomeňte, že v současnosti máme pouze verze optimalizované pro x86 MMX, a nebudou sestaveny pro jiné procesory.
-Na Win9x/NT/XP můžete určit USE_WINDBG a připojit WinDbg pro procházení ladících zpráv (viz http://www.sysinternals.com/ntw2k/freeware/debugview.shtml).
+Na Win9x/NT/XP můžete určit USE_WINDBG a připojit WinDbg pro procházení ladících zpráv (viz https://technet.microsoft.com/en-us/sysinternals/debugview.aspx).
GCC a MinGW32:
* Zadejte "./configure"
diff --git a/doc/de/Neues b/doc/de/Neues
index 0c681bf1c9..db183e57fe 100644
--- a/doc/de/Neues
+++ b/doc/de/Neues
@@ -12,6 +12,7 @@ Sie auf Englisch unter:
- Unterstützung für The Lost Files of Sherlock Holmes: The Case of the Rose Tattoo hinzugefügt.
- Unterstützung für Beavis and Butthead in Virtual Stupidity hinzugefügt.
- Unterstützung für Amazon: Guardians of Eden hinzugefügt.
+ - Unterstützung für Broken Sword 2.5: The Return of the Templars hinzugefügt.
Neue Portierungen:
- Portierung auf den Raspberry Pi erfolgt.
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp
index 2b5d7137bc..e907d3835e 100644
--- a/engines/agi/agi.cpp
+++ b/engines/agi/agi.cpp
@@ -505,11 +505,6 @@ struct GameSettings {
};
AgiBase::AgiBase(OSystem *syst, const AGIGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
- // Assign default values to the config manager, in case settings are missing
- ConfMan.registerDefault("originalsaveload", "false");
- ConfMan.registerDefault("altamigapalette", "false");
- ConfMan.registerDefault("mousesupport", "true");
-
_noSaveLoadAllowed = false;
_rnd = new Common::RandomSource("agi");
diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp
index 816b713b1f..d40d5e482f 100644
--- a/engines/bbvs/bbvs.cpp
+++ b/engines/bbvs/bbvs.cpp
@@ -118,15 +118,19 @@ BbvsEngine::BbvsEngine(OSystem *syst, const ADGameDescription *gd) :
Engine::syncSoundSettings();
+#ifdef USE_TRANSLATION
_oldGUILanguage = TransMan.getCurrentLanguage();
if (gd->flags & GF_GUILANGSWITCH)
TransMan.setLanguage(getLanguageLocale(gd->language));
+#endif
}
BbvsEngine::~BbvsEngine() {
+#ifdef USE_TRANSLATION
if (TransMan.getCurrentLanguage() != _oldGUILanguage)
TransMan.setLanguage(_oldGUILanguage);
+#endif
delete _random;
diff --git a/engines/bbvs/bbvs.h b/engines/bbvs/bbvs.h
index d098aaf90b..ff4afe9526 100644
--- a/engines/bbvs/bbvs.h
+++ b/engines/bbvs/bbvs.h
@@ -234,7 +234,10 @@ public:
private:
Graphics::PixelFormat _pixelFormat;
+
+#ifdef USE_TRANSLATION
Common::String _oldGUILanguage;
+#endif
public:
Common::RandomSource *_random;
diff --git a/engines/bbvs/graphics.cpp b/engines/bbvs/graphics.cpp
index 43840607c8..e60bf0b8eb 100644
--- a/engines/bbvs/graphics.cpp
+++ b/engines/bbvs/graphics.cpp
@@ -66,7 +66,7 @@ void Screen::clear() {
void Screen::drawDrawList(DrawList &drawList, SpriteModule *spriteModule) {
for (uint i = 0; i < drawList.size(); ++i) {
- debug(1, "index: %d; x: %d; y: %d; priority: %d", drawList[i].index, drawList[i].x, drawList[i].y, drawList[i].priority);
+ debug(4, "index: %d; x: %d; y: %d; priority: %d", drawList[i].index, drawList[i].x, drawList[i].y, drawList[i].priority);
Sprite sprite = spriteModule->getSprite(drawList[i].index);
drawSprite(sprite, drawList[i].x, drawList[i].y);
}
@@ -105,7 +105,7 @@ void Screen::drawSprite(Sprite &sprite, int x, int y) {
if (destX + width >= _surface->w)
width = _surface->w - destX;
- debug(0, "drawSprite() (%d, %d, %d, %d); skipX: %d; skipY: %d; %d", destX, destY, width, height, skipX, skipY, sprite.type);
+ debug(6, "drawSprite() (%d, %d, %d, %d); skipX: %d; skipY: %d; %d", destX, destY, width, height, skipX, skipY, sprite.type);
if (sprite.type == 1) {
for (int yc = 0; yc < height; ++yc) {
diff --git a/engines/cine/POTFILES b/engines/cine/POTFILES
new file mode 100644
index 0000000000..76f76832c3
--- /dev/null
+++ b/engines/cine/POTFILES
@@ -0,0 +1 @@
+engines/cine/detection.cpp
diff --git a/engines/cine/cine.h b/engines/cine/cine.h
index 71a0c242b6..7c0191b4d9 100644
--- a/engines/cine/cine.h
+++ b/engines/cine/cine.h
@@ -123,6 +123,7 @@ public:
bool loadSaveDirectory();
void makeSystemMenu();
+ int scummVMSaveLoadDialog(bool isSave);
int modifyGameSpeed(int speedChange);
int getTimerDelay() const;
Common::Error loadGameState(int slot);
@@ -152,7 +153,7 @@ private:
bool makeLoad(const Common::String &saveName);
void makeSaveFW(Common::OutSaveFile &out);
void makeSaveOS(Common::OutSaveFile &out);
- void makeSave(char *saveFileName);
+ void makeSave(const Common::String &saveFileName);
void mainLoop(int bootScriptIdx);
void readVolCnf();
diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp
index 4202bdc942..40e79f96ac 100644
--- a/engines/cine/detection.cpp
+++ b/engines/cine/detection.cpp
@@ -24,8 +24,10 @@
#include "engines/advancedDetector.h"
#include "engines/obsolete.h"
+
#include "common/system.h"
#include "common/textconsole.h"
+#include "common/translation.h"
#include "cine/cine.h"
#include "cine/various.h"
@@ -61,11 +63,25 @@ static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = {
#include "cine/detection_tables.h"
+static const ADExtraGuiOptionsMap optionsList[] = {
+ {
+ GAMEOPTION_ORIGINAL_SAVELOAD,
+ {
+ _s("Use original save/load screens"),
+ _s("Use the original save/load screens, instead of the ScummVM ones"),
+ "originalsaveload",
+ false
+ }
+ },
+
+ AD_EXTRA_GUI_OPTIONS_TERMINATOR
+};
+
class CineMetaEngine : public AdvancedMetaEngine {
public:
- CineMetaEngine() : AdvancedMetaEngine(Cine::gameDescriptions, sizeof(Cine::CINEGameDescription), cineGames) {
+ CineMetaEngine() : AdvancedMetaEngine(Cine::gameDescriptions, sizeof(Cine::CINEGameDescription), cineGames, optionsList) {
_singleid = "cine";
- _guioptions = GUIO1(GUIO_NOSPEECH);
+ _guioptions = GUIO2(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVELOAD);
}
virtual GameDescriptor findGame(const char *gameid) const {
diff --git a/engines/cine/detection_tables.h b/engines/cine/detection_tables.h
index 1188deb1a6..ca6a8a9168 100644
--- a/engines/cine/detection_tables.h
+++ b/engines/cine/detection_tables.h
@@ -22,6 +22,8 @@
namespace Cine {
+#define GAMEOPTION_ORIGINAL_SAVELOAD GUIO_GAMEOPTIONS1
+
static const CINEGameDescription gameDescriptions[] = {
{
{
diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp
index 907086a9a1..1f4f286694 100644
--- a/engines/cine/saveload.cpp
+++ b/engines/cine/saveload.cpp
@@ -969,7 +969,7 @@ void CineEngine::makeSaveOS(Common::OutSaveFile &out) {
saveBgIncrustList(out);
}
-void CineEngine::makeSave(char *saveFileName) {
+void CineEngine::makeSave(const Common::String &saveFileName) {
Common::SharedPtr<Common::OutSaveFile> fHandle(_saveFileMan->openForSaving(saveFileName));
setMouseCursor(MOUSE_CURSOR_DISK);
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 8687699a44..cd877a3295 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -21,12 +21,16 @@
*/
+#include "common/config-manager.h"
#include "common/endian.h"
#include "common/events.h"
#include "common/textconsole.h"
+#include "common/translation.h"
#include "graphics/cursorman.h"
+#include "gui/saveload.h"
+
#include "cine/cine.h"
#include "cine/main_loop.h"
#include "cine/object.h"
@@ -335,6 +339,55 @@ void CineEngine::resetEngine() {
}
}
+int CineEngine::scummVMSaveLoadDialog(bool isSave) {
+ GUI::SaveLoadChooser *dialog;
+ Common::String desc;
+ int slot;
+
+ if (isSave) {
+ dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+
+ slot = dialog->runModalWithCurrentTarget();
+ desc = dialog->getResultString();
+
+ if (desc.empty()) {
+ // create our own description for the saved game, the user didnt enter it
+ desc = dialog->createDefaultSaveDescription(slot);
+ }
+ }
+ else {
+ dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
+ slot = dialog->runModalWithCurrentTarget();
+ }
+
+ delete dialog;
+
+ if (slot < 0)
+ return true;
+
+ Common::String saveFileName(Common::String::format("%s.%1d", _targetName.c_str(), slot));
+
+ if (isSave) {
+ Common::String tmp = Common::String::format("%s.dir", _targetName.c_str());
+
+ Common::OutSaveFile *fHandle = _saveFileMan->openForSaving(tmp);
+ if (!fHandle) {
+ warning("Unable to open file %s for saving", tmp.c_str());
+ return false;
+ }
+
+ Common::strlcpy(currentSaveName[slot], desc.c_str(), 20);
+
+ fHandle->write(currentSaveName, 200);
+ delete fHandle;
+
+ makeSave(saveFileName);
+ return true;
+ } else {
+ return makeLoad(saveFileName);
+ }
+}
+
void CineEngine::makeSystemMenu() {
int16 numEntry, systemCommand;
int16 mouseX, mouseY, mouseButton;
@@ -381,7 +434,11 @@ void CineEngine::makeSystemMenu() {
}
case 4: { // load game
if (loadSaveDirectory()) {
-// int16 selectedSave;
+ if (!ConfMan.getBool("originalsaveload")) {
+ scummVMSaveLoadDialog(false);
+ inMenu = false;
+ return;
+ }
getMouseData(mouseUpdateStatus, (uint16 *)&mouseButton, (uint16 *)&mouseX, (uint16 *)&mouseY);
selectedSave = makeMenuChoice(currentSaveName, 10, mouseX, mouseY + 8, 180);
@@ -417,6 +474,13 @@ void CineEngine::makeSystemMenu() {
}
case 5: { // Save game
loadSaveDirectory();
+
+ if (!ConfMan.getBool("originalsaveload")) {
+ scummVMSaveLoadDialog(true);
+ inMenu = false;
+ return;
+ }
+
selectedSave = makeMenuChoice(currentSaveName, 10, mouseX, mouseY + 8, 180);
if (selectedSave >= 0) {
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 94a2e60ef1..0514c6e889 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -407,8 +407,6 @@ Common::Error DreamWebEngine::run() {
_console = new DreamWebConsole(this);
_sound = new DreamWebSound(this);
- ConfMan.registerDefault("originalsaveload", "false");
- ConfMan.registerDefault("bright_palette", true);
_hasSpeech = Common::File::exists(_speechDirName + "/r01c0000.raw") && !ConfMan.getBool("speech_mute");
_brightPalette = ConfMan.getBool("bright_palette");
_copyProtection = ConfMan.getBool("copy_protection");
diff --git a/engines/engine.cpp b/engines/engine.cpp
index 24008dd073..475cc77064 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -40,7 +40,7 @@
#include "common/str.h"
#include "common/error.h"
#include "common/list.h"
-#include "common/list_intern.h"
+#include "common/memstream.h"
#include "common/scummsys.h"
#include "common/taskbar.h"
#include "common/textconsole.h"
@@ -48,7 +48,9 @@
#include "common/singleton.h"
#include "backends/keymapper/keymapper.h"
+#include "base/version.h"
+#include "gui/gui-manager.h"
#include "gui/debugger.h"
#include "gui/dialog.h"
#include "gui/message.h"
@@ -56,7 +58,9 @@
#include "audio/mixer.h"
#include "graphics/cursorman.h"
+#include "graphics/fontman.h"
#include "graphics/pixelformat.h"
+#include "image/bmp.h"
#ifdef _WIN32_WCE
extern bool isSmartphone();
@@ -240,6 +244,62 @@ void initCommonGFX(bool defaultTo1XScaler) {
g_system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen"));
}
+// Please leave the splash screen in working order for your releases, even if they're commercial.
+// This is a proper and good way to show your appreciation for our hard work over these years.
+bool splash = false;
+
+#include "logo_data.h"
+
+void splashScreen() {
+ Common::MemoryReadStream stream(logo_data, ARRAYSIZE(logo_data));
+
+ Image::BitmapDecoder bitmap;
+
+ if (!bitmap.loadStream(stream)) {
+ warning("Error loading logo file");
+ return;
+ }
+
+ g_system->showOverlay();
+
+ // Fill with orange
+ Graphics::Surface screen;
+ screen.create(g_system->getOverlayWidth(), g_system->getOverlayHeight(), g_system->getOverlayFormat());
+ screen.fillRect(Common::Rect(screen.w, screen.h), screen.format.ARGBToColor(0xff, 0xd4, 0x75, 0x0b));
+
+ // 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;
+
+ // Print version information
+ const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kConsoleFont);
+ int w = font->getStringWidth(gScummVMVersionDate);
+ int x = g_system->getOverlayWidth() - w - 5; // lx + logo->w - w + 5;
+ int y = g_system->getOverlayHeight() - font->getFontHeight() - 5; //ly + logo->h + 5;
+ font->drawString(&screen, gScummVMVersionDate, x, y, w, screen.format.ARGBToColor(0xff, 0, 0, 0));
+
+ g_system->copyRectToOverlay(screen.getPixels(), screen.pitch, 0, 0, screen.w, screen.h);
+ screen.free();
+
+ // Draw logo
+ g_system->copyRectToOverlay(logo->getPixels(), logo->pitch, lx, ly, logo->w, logo->h);
+ logo->free();
+ delete logo;
+
+ // Delay 0.6 secs
+ uint time0 = g_system->getMillis();
+ Common::Event event;
+ while (time0 + 600 > g_system->getMillis()) {
+ g_system->updateScreen();
+ g_system->getEventManager()->pollEvent(event);
+ g_system->delayMillis(10);
+ }
+ g_system->hideOverlay();
+
+ splash = true;
+}
+
void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics::PixelFormat *format) {
g_system->beginGFXTransaction();
@@ -258,6 +318,9 @@ void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics:
OSystem::TransactionError gfxError = g_system->endGFXTransaction();
+ if (!splash && !GUI::GuiManager::instance()._launched)
+ splashScreen();
+
if (gfxError == OSystem::kTransactionSuccess)
return;
diff --git a/engines/gob/gob.h b/engines/gob/gob.h
index aefc63c707..730d393906 100644
--- a/engines/gob/gob.h
+++ b/engines/gob/gob.h
@@ -25,7 +25,6 @@
#include "common/random.h"
#include "common/system.h"
-#include "common/savefile.h"
#include "graphics/pixelformat.h"
@@ -33,10 +32,6 @@
#include "gob/console.h"
-namespace GUI {
-class StaticTextWidget;
-}
-
/**
* This is the namespace of the Gob engine.
*
@@ -75,7 +70,6 @@ class PalAnim;
class Scenery;
class Util;
class SaveLoad;
-class GobConsole;
class PreGob;
#define WRITE_VAR_UINT32(var, val) _vm->_inter->_variables->writeVar32(var, val)
diff --git a/engines/lab/anim.cpp b/engines/lab/anim.cpp
new file mode 100644
index 0000000000..01ca905cee
--- /dev/null
+++ b/engines/lab/anim.cpp
@@ -0,0 +1,349 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/music.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+Anim::Anim(LabEngine *vm) : _vm(vm) {
+ _lastBlockHeader = 0;
+ _numChunks = 1;
+ _headerdata._width = 0;
+ _headerdata._height = 0;
+ _headerdata._fps = 0;
+ _headerdata._flags = 0;
+ _delayMicros = 0;
+ _continuous = false;
+ _isPlaying = false;
+ _isAnim = false;
+ _isPal = false;
+ _noPalChange = false;
+ _donePal = false;
+ _frameNum = 0;
+ _playOnce = false;
+ _diffFile = nullptr;
+ _diffFileStart = 0;
+ _size = 0;
+ _scrollScreenBuffer = nullptr;
+ _waitForEffect = false;
+ _stopPlayingEnd = false;
+ _sampleSpeed = 0;
+ _doBlack = false;
+ _diffWidth = 0;
+ _diffHeight = 0;
+
+ for (int i = 0; i < 3 * 256; i++)
+ _diffPalette[i] = 0;
+
+ _outputBuffer = nullptr; // output to screen
+}
+
+Anim::~Anim() {
+ delete[] _vm->_anim->_scrollScreenBuffer;
+ _vm->_anim->_scrollScreenBuffer = nullptr;
+}
+
+void Anim::setOutputBuffer(byte *memoryBuffer) {
+ _outputBuffer = memoryBuffer;
+}
+
+uint16 Anim::getDIFFHeight() {
+ return _headerdata._height;
+}
+
+void Anim::diffNextFrame(bool onlyDiffData) {
+ if (_lastBlockHeader == 65535)
+ // Already done.
+ return;
+
+ bool drawOnScreen = false;
+ byte *startOfBuf = _outputBuffer;
+ int bufPitch = _vm->_graphics->_screenWidth;
+
+ if (!startOfBuf) {
+ startOfBuf = _vm->_graphics->getCurrentDrawingBuffer();
+ drawOnScreen = true;
+ }
+ byte *endOfBuf = startOfBuf + (int)_diffWidth * _diffHeight;
+
+ int curBit = 0;
+
+ while (1) {
+ byte *buf = startOfBuf + 0x10000 * curBit;
+
+ if (buf >= endOfBuf) {
+ if (!onlyDiffData) {
+ if (_headerdata._fps) {
+ uint32 targetMillis = _vm->_system->getMillis() + _delayMicros;
+ while (_vm->_system->getMillis() < targetMillis)
+ _vm->_system->delayMillis(10);
+ }
+
+ if (_isPal && !_noPalChange) {
+ _vm->_graphics->setPalette(_diffPalette, 256);
+ _isPal = false;
+ }
+
+ _donePal = true;
+ }
+
+ if (_isPal && !_noPalChange && !onlyDiffData && !_donePal) {
+ _vm->_graphics->setPalette(_diffPalette, 256);
+ _isPal = false;
+ }
+
+ _donePal = false;
+
+ _frameNum++;
+
+ if ((_frameNum == 1) && (_continuous || !_playOnce))
+ _diffFileStart = _diffFile->pos();
+
+ _isAnim = (_frameNum >= 3) && (!_playOnce);
+
+ if (drawOnScreen)
+ _vm->_graphics->screenUpdate();
+
+ // done with the next frame.
+ return;
+ }
+
+ _vm->updateEvents();
+ _lastBlockHeader = _diffFile->readUint32LE();
+ _size = _diffFile->readUint32LE();
+
+ uint32 curPos = 0;
+
+ switch (_lastBlockHeader) {
+ case 8:
+ _diffFile->read(_diffPalette, _size);
+ _isPal = true;
+ break;
+
+ case 10:
+ if (onlyDiffData) {
+ if (curBit > 0)
+ error("diffNextFrame: attempt to read screen to non-zero plane (%d)", curBit);
+ delete[] _scrollScreenBuffer;
+ _scrollScreenBuffer = new byte[_headerdata._width * _headerdata._height];
+ _diffFile->read(_scrollScreenBuffer, _size);
+ } else {
+ _diffFile->read(buf, _size);
+ }
+ curBit++;
+ break;
+
+ case 11:
+ curPos = _diffFile->pos();
+ _diffFile->skip(4);
+ _vm->_utils->runLengthDecode(buf, _diffFile);
+ curBit++;
+ _diffFile->seek(curPos + _size, SEEK_SET);
+ break;
+
+ case 12:
+ curPos = _diffFile->pos();
+ _diffFile->skip(4);
+ _vm->_utils->verticalRunLengthDecode(buf, _diffFile, bufPitch);
+ curBit++;
+ _diffFile->seek(curPos + _size, SEEK_SET);
+ break;
+
+ case 20:
+ curPos = _diffFile->pos();
+ _vm->_utils->unDiff(buf, buf, _diffFile, bufPitch, false);
+ curBit++;
+ _diffFile->seek(curPos + _size, SEEK_SET);
+ break;
+
+ case 21:
+ curPos = _diffFile->pos();
+ _vm->_utils->unDiff(buf, buf, _diffFile, bufPitch, true);
+ curBit++;
+ _diffFile->seek(curPos + _size, SEEK_SET);
+ break;
+
+ case 25:
+ case 26:
+ curBit++;
+ break;
+
+ case 30:
+ case 31:
+ if (_waitForEffect) {
+ while (_vm->_music->isSoundEffectActive()) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ }
+ }
+
+ _size -= 8;
+
+ _diffFile->skip(4);
+ _sampleSpeed = _diffFile->readUint16LE();
+ _diffFile->skip(2);
+
+ // Sound effects embedded in animations are started here. These are
+ // usually animation-specific, like door opening sounds, and are not looped
+ _vm->_music->playSoundEffect(_sampleSpeed, _size, false, _diffFile);
+ break;
+
+ case 65535:
+ if ((_frameNum == 1) || _playOnce || _stopPlayingEnd) {
+ bool didTOF = false;
+
+ if (_waitForEffect) {
+ while (_vm->_music->isSoundEffectActive()) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+
+ if (drawOnScreen)
+ didTOF = true;
+ }
+ }
+
+ _isPlaying = false;
+
+ if (!didTOF)
+ _vm->_graphics->screenUpdate();
+
+ return;
+ }
+
+ // Random frame number so it never gets back to 2
+ _frameNum = 4;
+ _diffFile->seek(_diffFileStart, SEEK_SET);
+ break;
+
+ default:
+ _diffFile->skip(_size);
+ break;
+ }
+ }
+}
+
+void Anim::stopDiff() {
+ if (_isPlaying && _isAnim)
+ _vm->_graphics->blackScreen();
+}
+
+void Anim::stopDiffEnd() {
+ if (!_isPlaying)
+ return;
+
+ _stopPlayingEnd = true;
+ while (_isPlaying) {
+ _vm->updateEvents();
+ diffNextFrame();
+ }
+}
+
+void Anim::readDiff(Common::File *diffFile, bool playOnce, bool onlyDiffData) {
+ _playOnce = playOnce;
+ _delayMicros = 0;
+ _frameNum = 0;
+ _numChunks = 1;
+ _donePal = false;
+ _stopPlayingEnd = false;
+ _isPlaying = true;
+
+ if (_doBlack) {
+ _doBlack = false;
+ _vm->_graphics->blackScreen();
+ }
+
+ _diffFile = diffFile;
+
+ _continuous = false;
+ uint32 signature1 = _diffFile->readUint32BE();
+ uint32 signature2 = _diffFile->readUint32LE();
+
+ if ((signature1 != MKTAG('D', 'I', 'F', 'F')) || (signature2 != 1219009121)) {
+ _isPlaying = false;
+ return;
+ }
+
+ uint32 signature3 = _diffFile->readUint32LE();
+ _size = _diffFile->readUint32LE();
+
+ if (signature3 != 0)
+ return;
+
+ // sizeof(headerdata) != 18, but the padding might be at the end
+ // 2 bytes, version, unused.
+ _diffFile->skip(2);
+ _headerdata._width = _diffFile->readUint16LE();
+ _headerdata._height = _diffFile->readUint16LE();
+ // 1 byte, depth, unused
+ _diffFile->skip(1);
+ _headerdata._fps = _diffFile->readByte();
+
+ // HACK: The original game defines a 1 second delay when changing screens, which is
+ // very annoying. We first removed the delay, but it looked wrong when changing screens
+ // as it was possible to see that something was displayed, without being able to tell
+ // what it was. A shorter delay (150ms) makes it acceptable during gameplay and
+ // readable. The big question is: do we need that message?
+ _vm->_system->delayMillis(150);
+
+ if (_headerdata._fps == 1)
+ _headerdata._fps = 0;
+
+ // 4 + 2 bytes, buffer size and machine, unused
+ _diffFile->skip(6);
+ _headerdata._flags = _diffFile->readUint32LE();
+
+ _diffFile->skip(_size - 18);
+
+ _continuous = CONTINUOUS & _headerdata._flags;
+ _diffWidth = _headerdata._width;
+ _diffHeight = _headerdata._height;
+ _vm->_utils->setBytesPerRow(_diffWidth);
+
+ delete[] _scrollScreenBuffer;
+ _scrollScreenBuffer = nullptr;
+
+ if (_headerdata._fps)
+ _delayMicros = 1000 / _headerdata._fps;
+
+ _lastBlockHeader = signature3;
+ if (_playOnce) {
+ while (_lastBlockHeader != 65535)
+ diffNextFrame(onlyDiffData);
+ } else
+ diffNextFrame(onlyDiffData);
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/anim.h b/engines/lab/anim.h
new file mode 100644
index 0000000000..bdb02e3f02
--- /dev/null
+++ b/engines/lab/anim.h
@@ -0,0 +1,105 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_ANIM_H
+#define LAB_ANIM_H
+
+namespace Lab {
+
+class LabEngine;
+#define CONTINUOUS 0xFFFF
+
+struct DIFFHeader {
+ uint16 _width;
+ uint16 _height;
+ char _fps;
+ uint32 _flags;
+};
+
+class Anim {
+private:
+ LabEngine *_vm;
+
+ uint32 _lastBlockHeader;
+ uint16 _numChunks;
+ uint32 _delayMicros;
+ bool _continuous;
+ bool _isPlaying;
+ bool _isAnim;
+ bool _isPal;
+ bool _donePal;
+ uint16 _frameNum;
+ bool _playOnce;
+ Common::File *_diffFile;
+ uint32 _diffFileStart;
+ uint32 _size;
+ bool _stopPlayingEnd;
+ uint16 _sampleSpeed;
+ uint32 _diffWidth;
+ uint32 _diffHeight;
+
+ byte *_outputBuffer;
+ DIFFHeader _headerdata;
+
+public:
+ Anim(LabEngine *vm);
+ ~Anim();
+
+ char _diffPalette[256 * 3];
+ bool _waitForEffect; // Wait for each sound effect to finish before continuing.
+ bool _doBlack; // Black the screen before new picture
+ bool _noPalChange; // Don't change the palette.
+ byte *_scrollScreenBuffer;
+
+ /**
+ * Reads in a DIFF file.
+ */
+ void setOutputBuffer(byte *memoryBuffer); // nullptr for output to screen
+ void readDiff(Common::File *diffFile, bool playOnce, bool onlyDiffData);
+ void diffNextFrame(bool onlyDiffData = false);
+
+ /**
+ * Stops an animation from running.
+ */
+ void stopDiff();
+
+ /**
+ * Stops an animation from running.
+ */
+ void stopDiffEnd();
+
+ uint16 getDIFFHeight();
+
+ bool isPlaying() const { return _isPlaying; }
+};
+
+} // End of namespace Lab
+
+#endif // LAB_ANIM_H
diff --git a/engines/lab/configure.engine b/engines/lab/configure.engine
new file mode 100644
index 0000000000..18091b1b84
--- /dev/null
+++ b/engines/lab/configure.engine
@@ -0,0 +1,3 @@
+# This file is included from the main "configure" script
+# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
+add_engine lab "Labyrinth of Time" no
diff --git a/engines/lab/console.cpp b/engines/lab/console.cpp
new file mode 100644
index 0000000000..217dc28579
--- /dev/null
+++ b/engines/lab/console.cpp
@@ -0,0 +1,136 @@
+/* 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 "gui/debugger.h"
+
+#include "lab/lab.h"
+#include "lab/console.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+
+namespace Lab {
+
+Console::Console(LabEngine *vm) : GUI::Debugger(), _vm(vm) {
+ registerCmd("scene", WRAP_METHOD(Console, Cmd_Scene));
+ registerCmd("scene_resources", WRAP_METHOD(Console, Cmd_DumpSceneResources));
+ registerCmd("find_action", WRAP_METHOD(Console, Cmd_FindAction));
+}
+
+Console::~Console() {
+}
+
+bool Console::Cmd_Scene(int argc, const char **argv) {
+ if (argc != 2) {
+ const char *directions[] = { "North", "South", "East", "West" };
+ debugPrintf("Current scene is %d, direction: %s\n", _vm->_roomNum, directions[_vm->getDirection()]);
+ debugPrintf("Use %s <scene number> to change the current scene\n", argv[0]);
+ return true;
+ }
+
+ _vm->_roomNum = atoi(argv[1]);
+ _vm->_curFileName = " ";
+ _vm->_closeDataPtr = nullptr;
+ _vm->_mainDisplay = true;
+ _vm->_followingCrumbs = false;
+ _vm->_event->simulateEvent();
+ _vm->_graphics->_longWinInFront = false;
+
+ return false;
+}
+
+bool Console::Cmd_DumpSceneResources(int argc, const char **argv) {
+ if (argc != 2) {
+ debugPrintf("Usage: %s <scene number> to dump the resources for a scene\n", argv[0]);
+ return true;
+ }
+
+ int scene = atoi(argv[1]);
+ _vm->_resource->readViews(scene);
+ RoomData *roomData = &_vm->_rooms[scene];
+ RuleList &rules = roomData->_rules;
+ const char *transitions[] = { "None", "Wipe", "ScrollWipe", "ScrollBlack", "ScrollBounce", "Transporter", "ReadFirstFrame", "ReadNextFrame" };
+ const char *ruleTypes[] = { "None", "Action", "Operate", "Go forward", "Conditions", "Turn", "Go main view", "Turn from to" };
+ const char *directions[] = { "", "North", "South", "East", "West" };
+ const char *actionTypes[] = {
+ "", "PlaySound", "PlaySoundLooping", "ShowDiff", "ShowDiffLooping", "LoadDiff", "LoadBitmap", "ShowBitmap", "Transition", "NoUpdate", "ForceUpdate",
+ "ShowCurPict", "SetElement", "UnsetElement", "ShowMessage", "ShowMessages", "ChangeRoom", "SetCloseup", "MainView", "SubInv", "AddInv", "ShowDir",
+ "WaitSecs", "StopMusic", "StartMusic", "ChangeMusic", "ResetMusic", "FillMusic", "WaitSound", "ClearSound", "WinMusic", "WinGame", "LostGame",
+ "ResetBuffer", "SpecialCmd", "CShowMessage", "PlaySoundNoWait"
+ };
+
+ debugPrintf("Room mesage: %s\n", roomData->_roomMsg.c_str());
+ debugPrintf("Transition: %s (%d)\n", transitions[roomData->_transitionType], roomData->_transitionType);
+
+ debugPrintf("Script:\n");
+
+ for (RuleList::iterator rule = rules.begin(); rule != rules.end(); ++rule) {
+ debugPrintf("Rule type: %s", ruleTypes[rule->_ruleType]);
+ if (rule->_ruleType == kRuleTypeAction || rule->_ruleType == kRuleTypeOperate)
+ debugPrintf(" (item %d, closeup %d)", rule->_param1, rule->_param2);
+ else if (rule->_ruleType == kRuleTypeGoForward)
+ debugPrintf(" (%s)", directions[rule->_param1]);
+ else if (rule->_ruleType == kRuleTypeTurnFromTo)
+ debugPrintf(" (from %s to %s)", directions[rule->_param1], directions[rule->_param2]);
+ debugPrintf("\n");
+
+ ActionList::iterator action;
+ for (action = rule->_actionList.begin(); action != rule->_actionList.end(); ++action) {
+ debugPrintf(" - %s ('%s', %d, %d, %d)\n", actionTypes[action->_actionType], action->_messages[0].c_str(), action->_param1, action->_param2, action->_param3);
+ }
+ }
+
+ return true;
+}
+
+bool Console::Cmd_FindAction(int argc, const char **argv) {
+ if (argc < 2) {
+ debugPrintf("Usage: %s <action id> [param 1] [param 2] [param 3]\n", argv[0]);
+ return true;
+ }
+
+ int actionId = atoi(argv[1]);
+ int param1 = (argc > 2) ? atoi(argv[2]) : -1;
+ int param2 = (argc > 3) ? atoi(argv[3]) : -1;
+ int param3 = (argc > 4) ? atoi(argv[4]) : -1;
+
+ for (int i = 1; i <= _vm->_manyRooms; i++) {
+ _vm->_resource->readViews(i);
+
+ for (RuleList::iterator rule = _vm->_rooms[i]._rules.begin(); rule != _vm->_rooms[i]._rules.end(); ++rule) {
+ ActionList::iterator action;
+ for (action = rule->_actionList.begin(); action != rule->_actionList.end(); ++action) {
+ if (action->_actionType == actionId &&
+ (action->_param1 == param1 || param1 == -1) &&
+ (action->_param2 == param2 || param2 == -1) &&
+ (action->_param3 == param3 || param3 == -1)) {
+ debugPrintf("Found at script %d\n", i);
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/lab/console.h b/engines/lab/console.h
new file mode 100644
index 0000000000..af41b6034b
--- /dev/null
+++ b/engines/lab/console.h
@@ -0,0 +1,46 @@
+/* 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 LAB_CONSOLE_H
+#define LAB_CONSOLE_H
+
+#include "gui/debugger.h"
+
+namespace Lab {
+
+class LabEngine;
+
+class Console : public GUI::Debugger {
+public:
+ Console(LabEngine *vm);
+ virtual ~Console(void);
+
+private:
+ LabEngine *_vm;
+
+ bool Cmd_Scene(int argc, const char **argv);
+ bool Cmd_DumpSceneResources(int argc, const char **argv);
+ bool Cmd_FindAction(int argc, const char **argv);
+};
+
+} // End of namespace Lab
+#endif
diff --git a/engines/lab/detection.cpp b/engines/lab/detection.cpp
new file mode 100644
index 0000000000..c26231292b
--- /dev/null
+++ b/engines/lab/detection.cpp
@@ -0,0 +1,249 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "engines/advancedDetector.h"
+
+#include "lab/lab.h"
+
+static const PlainGameDescriptor lab_setting[] = {
+ { "lab", "Labyrinth of Time" },
+ { 0, 0 }
+};
+
+static const ADGameDescription labDescriptions[] = {
+ {
+ "lab",
+ "",
+ {
+ { "doors", 0, "d77536010e7e5ae17ee066323ceb9585", 2537 }, // game/doors
+ { "noteold.fon", 0, "6c1d90ad55149556e79d3f7bfddb4bd7", 9252 }, // game/spict/noteold.fon
+ { NULL, 0, NULL, 0 }
+ },
+ Common::EN_ANY,
+ Common::kPlatformDOS,
+ ADGF_NO_FLAGS,
+ GUIO0()
+ },
+ {
+ "lab",
+ "Lowres",
+ {
+ { "doors", 0, "d77536010e7e5ae17ee066323ceb9585", 2537 }, // game/doors
+ { "64b", 0, "3a84d41bcc6a782f22e8e954bce09721", 39916 }, // game/pict/h2/64b
+ { NULL, 0, NULL, 0 }
+ },
+ Common::EN_ANY,
+ Common::kPlatformDOS,
+ Lab::GF_LOWRES,
+ GUIO0()
+ },
+ {
+ "lab",
+ "Rerelease",
+ {
+ { "doors", 0, "d77536010e7e5ae17ee066323ceb9585", 2537 }, // game/doors
+ { "noteold.fon", 0, "6c1d90ad55149556e79d3f7bfddb4bd7", 9252 }, // game/spict/noteold.fon
+ { "wyrmkeep",0, "97c7064c54c28b952d37c4ebff6efa50", 52286 }, // game/spict/intro
+ { NULL, 0, NULL, 0 }
+ },
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO0()
+ },
+ {
+ "lab",
+ "",
+ AD_ENTRY1s("doors", "7bf458df6ec30cc8ef4665e4d7c77f59", 2537), // game/doors
+ Common::EN_ANY,
+ Common::kPlatformAmiga,
+ Lab::GF_LOWRES,
+ GUIO0()
+ },
+ AD_TABLE_END_MARKER
+};
+
+static const char *const directoryGlobs[] = {
+ "game",
+ "pict",
+ "spict",
+ "rooms",
+ "h2",
+ "intro",
+ 0
+};
+
+namespace Lab {
+
+Common::Platform LabEngine::getPlatform() const {
+ return _gameDescription->platform;
+}
+
+uint32 LabEngine::getFeatures() const {
+ return _gameDescription->flags | _extraGameFeatures;
+}
+
+} // End of namespace Lab
+
+class LabMetaEngine : public AdvancedMetaEngine {
+public:
+ LabMetaEngine() : AdvancedMetaEngine(labDescriptions, sizeof(ADGameDescription), lab_setting) {
+ _singleid = "lab";
+
+ _maxScanDepth = 4;
+ _directoryGlobs = directoryGlobs;
+ _flags = kADFlagUseExtraAsHint;
+ }
+
+ virtual const char *getName() const {
+ return "Lab";
+ }
+
+ virtual const char *getOriginalCopyright() const {
+ 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 {
+ // Instantiate Engine even if the game data is not found.
+ *engine = new Lab::LabEngine(syst, desc);
+ return true;
+ }
+
+ virtual bool hasFeature(MetaEngineFeature f) const;
+ SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
+ void removeSaveState(const char *target, int slot) const;
+ SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
+};
+
+bool LabMetaEngine::hasFeature(MetaEngineFeature f) const {
+ return
+ (f == kSupportsListSaves) ||
+ (f == kSupportsLoadingDuringStartup) ||
+ (f == kSupportsDeleteSave) ||
+ (f == kSavesSupportMetaInfo) ||
+ (f == kSavesSupportThumbnail) ||
+ (f == kSavesSupportCreationDate) ||
+ (f == kSavesSupportPlayTime);
+}
+
+bool Lab::LabEngine::hasFeature(EngineFeature f) const {
+ return
+ (f == kSupportsRTL) ||
+ (f == kSupportsLoadingDuringRuntime) ||
+ (f == kSupportsSavingDuringRuntime);
+}
+
+SaveStateList LabMetaEngine::listSaves(const char *target) const {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Lab::SaveGameHeader header;
+ Common::String pattern = target;
+ pattern += ".???";
+
+ Common::StringArray filenames;
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)*/
+
+ SaveStateList saveList;
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ if ((slotNum >= 0) && (slotNum <= 999)) {
+ Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
+ if (in) {
+ if (Lab::readSaveGameHeader(in, header))
+ saveList.push_back(SaveStateDescriptor(slotNum, header._descr.getDescription()));
+ delete in;
+ }
+ }
+ }
+
+ return saveList;
+}
+
+int LabMetaEngine::getMaximumSaveSlot() const {
+ return 999;
+}
+
+void LabMetaEngine::removeSaveState(const char *target, int slot) const {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::String filename = Common::String::format("%s.%03u", target, slot);
+
+ saveFileMan->removeSavefile(filename.c_str());
+
+ Common::StringArray filenames;
+ Common::String pattern = target;
+ pattern += ".???";
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ // Rename every slot greater than the deleted slot,
+ if (slotNum > slot) {
+ saveFileMan->renameSavefile(file->c_str(), filename.c_str());
+ filename = Common::String::format("%s.%03u", target, ++slot);
+ }
+ }
+}
+
+SaveStateDescriptor LabMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
+ Common::String filename = Common::String::format("%s.%03u", target, slot);
+ Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename.c_str());
+
+ if (in) {
+ Lab::SaveGameHeader header;
+
+ bool successfulRead = Lab::readSaveGameHeader(in, header);
+ delete in;
+
+ if (successfulRead) {
+ SaveStateDescriptor desc(slot, header._descr.getDescription());
+ // Do not allow save slot 0 (used for auto-saving) to be deleted or
+ // overwritten.
+ //desc.setDeletableFlag(slot != 0);
+ //desc.setWriteProtectedFlag(slot == 0);
+
+ return header._descr;
+ }
+ }
+
+ return SaveStateDescriptor();
+}
+
+#if PLUGIN_ENABLED_DYNAMIC(LAB)
+ REGISTER_PLUGIN_DYNAMIC(LAB, PLUGIN_TYPE_ENGINE, LabMetaEngine);
+#else
+ REGISTER_PLUGIN_STATIC(LAB, PLUGIN_TYPE_ENGINE, LabMetaEngine);
+#endif
diff --git a/engines/lab/dispman.cpp b/engines/lab/dispman.cpp
new file mode 100644
index 0000000000..17623d4f08
--- /dev/null
+++ b/engines/lab/dispman.cpp
@@ -0,0 +1,950 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "graphics/palette.h"
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/music.h"
+#include "lab/image.h"
+#include "lab/resource.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+DisplayMan::DisplayMan(LabEngine *vm) : _vm(vm) {
+ _longWinInFront = false;
+ _lastMessageLong = false;
+ _actionMessageShown = false;
+
+ _screenBytesPerPage = 0;
+ _curBitmap = nullptr;
+ _displayBuffer = nullptr;
+ _currentDisplayBuffer = nullptr;
+ _fadePalette = nullptr;
+
+ _screenWidth = 0;
+ _screenHeight = 0;
+
+ for (int i = 0; i < 256 * 3; i++)
+ _curVgaPal[i] = 0;
+}
+
+DisplayMan::~DisplayMan() {
+ freePict();
+ delete[] _displayBuffer;
+}
+
+void DisplayMan::loadPict(const Common::String filename) {
+ freePict();
+ _curBitmap = _vm->_resource->openDataFile(filename);
+}
+
+void DisplayMan::loadBackPict(const Common::String fileName, uint16 *highPal) {
+ _fadePalette = highPal;
+ _vm->_anim->_noPalChange = true;
+ readPict(fileName);
+
+ for (int i = 0; i < 16; i++) {
+ highPal[i] = ((_vm->_anim->_diffPalette[i * 3] >> 2) << 8) +
+ ((_vm->_anim->_diffPalette[i * 3 + 1] >> 2) << 4) +
+ ((_vm->_anim->_diffPalette[i * 3 + 2] >> 2));
+ }
+
+ _vm->_anim->_noPalChange = false;
+}
+
+void DisplayMan::readPict(const Common::String filename, bool playOnce, bool onlyDiffData, byte *memoryBuffer) {
+ _vm->_anim->stopDiff();
+ loadPict(filename);
+ _vm->updateEvents();
+ _vm->_anim->setOutputBuffer(memoryBuffer);
+ _vm->_anim->readDiff(_curBitmap, playOnce, onlyDiffData);
+}
+
+void DisplayMan::freePict() {
+ delete _curBitmap;
+ _curBitmap = nullptr;
+}
+
+Common::String DisplayMan::getWord(const char *mainBuffer) {
+ Common::String result;
+
+ for (int i = 0; mainBuffer[i] && (mainBuffer[i] != ' ') && (mainBuffer[i] != '\n'); i++)
+ result += mainBuffer[i];
+
+ return result;
+}
+
+Common::String DisplayMan::getLine(TextFont *tf, const char **mainBuffer, uint16 lineWidth) {
+ uint16 curWidth = 0;
+ Common::String result;
+
+ while ((*mainBuffer)[0]) {
+ Common::String wordBuffer = getWord(*mainBuffer);
+
+ if ((curWidth + textLength(tf, wordBuffer)) <= lineWidth) {
+ result += wordBuffer;
+ (*mainBuffer) += wordBuffer.size();
+
+ // end of line
+ if ((*mainBuffer)[0] == '\n') {
+ (*mainBuffer)++;
+ break;
+ }
+
+ // append any space after the word
+ if ((*mainBuffer)[0]) {
+ result += (*mainBuffer)[0];
+ (*mainBuffer)++;
+ }
+
+ curWidth = textLength(tf, result);
+ } else
+ break;
+ }
+
+ return result;
+}
+
+int DisplayMan::flowText(TextFont *font, int16 spacing, byte penColor, byte backPen,
+ bool fillBack, bool centerh, bool centerv, bool output, Common::Rect textRect, const char *str, Image *targetImage) {
+
+ byte *saveDisplayBuffer = _currentDisplayBuffer;
+
+ if (targetImage) {
+ _currentDisplayBuffer = targetImage->_imageData;
+ assert(_screenBytesPerPage == (uint32)(targetImage->_width * targetImage->_height));
+ }
+
+ if (fillBack)
+ rectFill(textRect, backPen);
+
+ if (!str)
+ return 0;
+
+ const char *orig = str;
+
+ TextFont *msgFont = font;
+ uint16 fontHeight = textHeight(msgFont) + spacing;
+ uint16 numLines = (textRect.height() + 1) / fontHeight;
+ uint16 width = textRect.width() + 1;
+ uint16 y = textRect.top;
+
+ if (centerv && output) {
+ const char *temp = str;
+ uint16 actlines = 0;
+
+ while (temp[0]) {
+ getLine(msgFont, &temp, width);
+ actlines++;
+ }
+
+ if (actlines <= numLines)
+ y += ((textRect.height() + 1) - (actlines * fontHeight)) / 2;
+ }
+
+ while (numLines && str[0]) {
+ Common::String lineBuffer;
+ lineBuffer = getLine(msgFont, &str, width);
+
+ uint16 x = textRect.left;
+
+ if (centerh)
+ x += (width - textLength(msgFont, lineBuffer)) / 2;
+
+ if (output)
+ drawText(msgFont, x, y, penColor, lineBuffer);
+
+ numLines--;
+ y += fontHeight;
+ }
+
+ _currentDisplayBuffer = saveDisplayBuffer;
+
+ return (str - orig);
+}
+
+void DisplayMan::createBox(uint16 y2) {
+ // Message box area
+ rectFillScaled(4, 154, 315, y2 - 2, 7);
+
+ // Box around message area
+ drawHLine(_vm->_utils->vgaScaleX(2), _vm->_utils->vgaScaleY(152), _vm->_utils->vgaScaleX(317), 0);
+ drawVLine(_vm->_utils->vgaScaleX(317), _vm->_utils->vgaScaleY(152), _vm->_utils->vgaScaleY(y2), 0);
+ drawHLine(_vm->_utils->vgaScaleX(2), _vm->_utils->vgaScaleY(y2), _vm->_utils->vgaScaleX(317), 0);
+ drawVLine(_vm->_utils->vgaScaleX(2), _vm->_utils->vgaScaleY(152), _vm->_utils->vgaScaleY(y2), 0);
+}
+
+int DisplayMan::longDrawMessage(Common::String str, bool isActionMessage) {
+ if (isActionMessage) {
+ _actionMessageShown = true;
+ } else if (_actionMessageShown) {
+ _actionMessageShown = false;
+ return 0;
+ }
+
+ if (str.empty())
+ return 0;
+
+ _vm->_event->attachButtonList(nullptr);
+
+ if (!_longWinInFront) {
+ _longWinInFront = true;
+ // Clear Area
+ rectFill(0, _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2), _vm->_utils->vgaScaleX(319), _vm->_utils->vgaScaleY(199), 3);
+ }
+
+ createBox(198);
+
+ return flowText(_vm->_msgFont, 0, 1, 7, false, true, true, true, _vm->_utils->vgaRectScale(6, 155, 313, 195), str.c_str());
+}
+
+void DisplayMan::drawMessage(Common::String str, bool isActionMessage) {
+ if (isActionMessage) {
+ _actionMessageShown = true;
+ } else if (_actionMessageShown) {
+ _actionMessageShown = false;
+ return;
+ }
+
+ if (str.empty())
+ return;
+
+ if ((textLength(_vm->_msgFont, str) > _vm->_utils->vgaScaleX(306))) {
+ longDrawMessage(str, isActionMessage);
+ _lastMessageLong = true;
+ } else {
+ if (_longWinInFront) {
+ _longWinInFront = false;
+ drawPanel();
+ }
+
+ createBox(168);
+ drawText(_vm->_msgFont, _vm->_utils->vgaScaleX(7), _vm->_utils->vgaScaleY(155) + _vm->_utils->svgaCord(2), 1, str);
+ _lastMessageLong = false;
+ }
+}
+
+void DisplayMan::drawPanel() {
+ // Clear Area
+ rectFill(0, _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2), _vm->_utils->vgaScaleX(319), _vm->_utils->vgaScaleY(199), 3);
+
+ // First Line
+ drawHLine(0, _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2), _vm->_utils->vgaScaleX(319), 0);
+ // Second Line
+ drawHLine(0, _vm->_utils->vgaScaleY(149) + 1 + _vm->_utils->svgaCord(2), _vm->_utils->vgaScaleX(319), 5);
+ // Button Separators
+ drawHLine(0, _vm->_utils->vgaScaleY(170), _vm->_utils->vgaScaleX(319), 0);
+
+ if (!_vm->_alternate) {
+ // The horizontal lines under the black one
+ drawHLine(0, _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleX(319), 4);
+ _vm->_event->drawButtonList(&_vm->_moveButtonList);
+ } else {
+ if (_vm->getPlatform() != Common::kPlatformWindows) {
+ // Vertical Black lines
+ drawVLine(_vm->_utils->vgaScaleX(124), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleY(199), 0);
+ drawVLine(_vm->_utils->vgaScaleX(194), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleY(199), 0);
+ } else {
+ // Vertical Black lines
+ drawVLine(_vm->_utils->vgaScaleX(90), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleY(199), 0);
+ drawVLine(_vm->_utils->vgaScaleX(160), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleY(199), 0);
+ drawVLine(_vm->_utils->vgaScaleX(230), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleY(199), 0);
+ }
+
+ // The horizontal lines under the black one
+ drawHLine(0, _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleX(122), 4);
+ drawHLine(_vm->_utils->vgaScaleX(126), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleX(192), 4);
+ drawHLine(_vm->_utils->vgaScaleX(196), _vm->_utils->vgaScaleY(170) + 1, _vm->_utils->vgaScaleX(319), 4);
+ // The vertical high light lines
+ drawVLine(_vm->_utils->vgaScaleX(1), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+
+ if (_vm->getPlatform() != Common::kPlatformWindows) {
+ drawVLine(_vm->_utils->vgaScaleX(126), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+ drawVLine(_vm->_utils->vgaScaleX(196), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+ } else {
+ drawVLine(_vm->_utils->vgaScaleX(92), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+ drawVLine(_vm->_utils->vgaScaleX(162), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+ drawVLine(_vm->_utils->vgaScaleX(232), _vm->_utils->vgaScaleY(170) + 2, _vm->_utils->vgaScaleY(198), 4);
+ }
+
+ _vm->_event->drawButtonList(&_vm->_invButtonList);
+ }
+}
+
+void DisplayMan::setUpScreens() {
+ EventManager *e = _vm->_event;
+ ButtonList *moveButtonList = &_vm->_moveButtonList;
+ ButtonList *invButtonList = &_vm->_invButtonList;
+ Image **moveImages = _vm->_moveImages;
+ Image **invImages = _vm->_invImages;
+
+ createScreen(_vm->_isHiRes);
+
+ // TODO: The CONTROL file is not present in the Amiga version
+ Common::File *controlFile = _vm->_resource->openDataFile("P:Control");
+ for (int i = 0; i < 20; i++)
+ _vm->_moveImages[i] = new Image(controlFile, _vm);
+ delete controlFile;
+
+ // Creates the buttons for the movement control panel
+ // The key mapping was only set for the Windows version.
+ // It's very convenient to have those shortcut, so I added them
+ // for all versions. (Strangerke)
+ uint16 y = _vm->_utils->vgaScaleY(173) - _vm->_utils->svgaCord(2);
+ moveButtonList->push_back(e->createButton( 1, y, 0, Common::KEYCODE_t, moveImages[0], moveImages[1]));
+ moveButtonList->push_back(e->createButton( 33, y, 1, Common::KEYCODE_m, moveImages[2], moveImages[3]));
+ moveButtonList->push_back(e->createButton( 65, y, 2, Common::KEYCODE_o, moveImages[4], moveImages[5]));
+ moveButtonList->push_back(e->createButton( 97, y, 3, Common::KEYCODE_c, moveImages[6], moveImages[7]));
+ moveButtonList->push_back(e->createButton(129, y, 4, Common::KEYCODE_l, moveImages[8], moveImages[9]));
+ moveButtonList->push_back(e->createButton(161, y, 5, Common::KEYCODE_i, moveImages[12], moveImages[13]));
+ moveButtonList->push_back(e->createButton(193, y, 6, Common::KEYCODE_LEFT, moveImages[14], moveImages[15]));
+ moveButtonList->push_back(e->createButton(225, y, 7, Common::KEYCODE_UP, moveImages[16], moveImages[17]));
+ moveButtonList->push_back(e->createButton(257, y, 8, Common::KEYCODE_RIGHT, moveImages[18], moveImages[19]));
+ moveButtonList->push_back(e->createButton(289, y, 9, Common::KEYCODE_p, moveImages[10], moveImages[11]));
+
+ // TODO: The INV file is not present in the Amiga version
+ Common::File *invFile = _vm->_resource->openDataFile("P:Inv");
+ if (_vm->getPlatform() == Common::kPlatformWindows) {
+ for (int imgIdx = 0; imgIdx < 10; imgIdx++)
+ _vm->_invImages[imgIdx] = new Image(invFile, _vm);
+ } else {
+ for (int imgIdx = 0; imgIdx < 6; imgIdx++)
+ _vm->_invImages[imgIdx] = new Image(invFile, _vm);
+ }
+ invButtonList->push_back(e->createButton( 24, y, 0, Common::KEYCODE_ESCAPE, invImages[0], invImages[1]));
+ invButtonList->push_back(e->createButton( 56, y, 1, Common::KEYCODE_g, invImages[2], invImages[3]));
+ invButtonList->push_back(e->createButton( 94, y, 2, Common::KEYCODE_u, invImages[4], invImages[5]));
+ invButtonList->push_back(e->createButton(126, y, 3, Common::KEYCODE_l, moveImages[8], moveImages[9]));
+ invButtonList->push_back(e->createButton(164, y, 4, Common::KEYCODE_LEFT, moveImages[14], moveImages[15]));
+ invButtonList->push_back(e->createButton(196, y, 5, Common::KEYCODE_RIGHT, moveImages[18], moveImages[19]));
+
+ // The windows version has 2 extra buttons for breadcrumb trail
+ // CHECKME: the game is really hard to play without those, maybe we could add something to enable that.
+ if (_vm->getPlatform() == Common::kPlatformWindows) {
+ invButtonList->push_back(e->createButton(234, y, 6, Common::KEYCODE_b, invImages[6], invImages[7]));
+ invButtonList->push_back(e->createButton(266, y, 7, Common::KEYCODE_f, invImages[8], invImages[9]));
+ }
+
+ delete invFile;
+}
+
+void DisplayMan::rectFill(Common::Rect fillRect, byte color) {
+ int width = fillRect.width() + 1;
+ int height = fillRect.height() + 1;
+
+ if (fillRect.left + width > _screenWidth)
+ width = _screenWidth - fillRect.left;
+
+ if (fillRect.top + height > _screenHeight)
+ height = _screenHeight - fillRect.top;
+
+ if ((width > 0) && (height > 0)) {
+ byte *d = getCurrentDrawingBuffer() + fillRect.top * _screenWidth + fillRect.left;
+
+ while (height-- > 0) {
+ byte *dd = d;
+ int ww = width;
+
+ while (ww-- > 0) {
+ *dd++ = color;
+ }
+
+ d += _screenWidth;
+ }
+ }
+}
+
+void DisplayMan::rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte color) {
+ rectFill(Common::Rect(x1, y1, x2, y2), color);
+}
+
+void DisplayMan::rectFillScaled(uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte color) {
+ rectFill(_vm->_utils->vgaRectScale(x1, y1, x2, y2), color);
+}
+
+void DisplayMan::drawVLine(uint16 x, uint16 y1, uint16 y2, byte color) {
+ rectFill(x, y1, x, y2, color);
+}
+
+void DisplayMan::drawHLine(uint16 x1, uint16 y, uint16 x2, byte color) {
+ rectFill(x1, y, x2, y, color);
+}
+
+void DisplayMan::screenUpdate() {
+ _vm->_system->copyRectToScreen(_displayBuffer, _screenWidth, 0, 0, _screenWidth, _screenHeight);
+ _vm->_system->updateScreen();
+
+ _vm->_event->processInput();
+}
+
+void DisplayMan::createScreen(bool hiRes) {
+ if (hiRes) {
+ _screenWidth = 640;
+ _screenHeight = 480;
+ } else {
+ _screenWidth = 320;
+ _screenHeight = 200;
+ }
+ _screenBytesPerPage = _screenWidth * _screenHeight;
+
+ if (_displayBuffer)
+ delete[] _displayBuffer;
+ _displayBuffer = new byte[_screenBytesPerPage];
+ memset(_displayBuffer, 0, _screenBytesPerPage);
+}
+
+void DisplayMan::setAmigaPal(uint16 *pal) {
+ byte vgaPal[16 * 3];
+ uint16 vgaIdx = 0;
+
+ for (int i = 0; i < 16; i++) {
+ vgaPal[vgaIdx++] = (byte)(((pal[i] & 0xf00) >> 8) << 2);
+ vgaPal[vgaIdx++] = (byte)(((pal[i] & 0x0f0) >> 4) << 2);
+ vgaPal[vgaIdx++] = (byte)(((pal[i] & 0x00f)) << 2);
+ }
+
+ writeColorRegs(vgaPal, 0, 16);
+ _vm->waitTOF();
+}
+
+void DisplayMan::writeColorRegs(byte *buf, uint16 first, uint16 numReg) {
+ assert(first + numReg <= 256);
+ byte tmp[256 * 3];
+
+ for (int i = 0; i < numReg * 3; i++)
+ tmp[i] = (buf[i] << 2) | (buf[i] >> 4); // better results than buf[i] * 4
+
+ _vm->_system->getPaletteManager()->setPalette(tmp, first, numReg);
+ memcpy(&(_curVgaPal[first * 3]), buf, numReg * 3);
+}
+
+void DisplayMan::setPalette(void *newPal, uint16 numColors) {
+ if (memcmp(newPal, _curVgaPal, numColors * 3) != 0)
+ writeColorRegs((byte *)newPal, 0, numColors);
+}
+
+byte *DisplayMan::getCurrentDrawingBuffer() {
+ if (_currentDisplayBuffer)
+ return _currentDisplayBuffer;
+
+ return _displayBuffer;
+}
+
+void DisplayMan::checkerBoardEffect(uint16 penColor, uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
+ int w = x2 - x1 + 1;
+ int h = y2 - y1 + 1;
+
+ if (x1 + w > _screenWidth)
+ w = _screenWidth - x1;
+
+ if (y1 + h > _screenHeight)
+ h = _screenHeight - y1;
+
+ if ((w > 0) && (h > 0)) {
+ byte *d = getCurrentDrawingBuffer() + y1 * _screenWidth + x1;
+
+ while (h-- > 0) {
+ byte *dd = d;
+ int ww = w;
+
+ if (y1 & 1) {
+ dd++;
+ ww--;
+ }
+
+ while (ww > 0) {
+ *dd = penColor;
+ dd += 2;
+ ww -= 2;
+ }
+
+ d += _screenWidth;
+ y1++;
+ }
+ }
+}
+
+void DisplayMan::freeFont(TextFont **font) {
+ if (*font) {
+ if ((*font)->_data)
+ delete[] (*font)->_data;
+
+ delete *font;
+ *font = nullptr;
+ }
+}
+
+uint16 DisplayMan::textLength(TextFont *font, const Common::String text) {
+ uint16 length = 0;
+
+ if (font) {
+ int numChars = text.size();
+ for (int i = 0; i < numChars; i++) {
+ length += font->_widths[(byte)text[i]];
+ }
+ }
+
+ return length;
+}
+
+uint16 DisplayMan::textHeight(TextFont *tf) {
+ return (tf) ? tf->_height : 0;
+}
+
+void DisplayMan::drawText(TextFont *tf, uint16 x, uint16 y, uint16 color, const Common::String text) {
+ byte *vgaTop = getCurrentDrawingBuffer();
+ int numChars = text.size();
+
+ for (int i = 0; i < numChars; i++) {
+ uint32 realOffset = (_screenWidth * y) + x;
+ uint16 curPage = realOffset / _screenBytesPerPage;
+ uint32 segmentOffset = realOffset - (curPage * _screenBytesPerPage);
+ int32 leftInSegment = _screenBytesPerPage - segmentOffset;
+ byte *vgaCur = vgaTop + segmentOffset;
+
+ if (tf->_widths[(byte)text[i]]) {
+ byte *cdata = tf->_data + tf->_offsets[(byte)text[i]];
+ uint16 bwidth = *cdata++;
+ byte *vgaTemp = vgaCur;
+ byte *vgaTempLine = vgaCur;
+
+ for (int rows = 0; rows < tf->_height; rows++) {
+ int32 templeft = leftInSegment;
+
+ vgaTemp = vgaTempLine;
+
+ for (int cols = 0; cols < bwidth; cols++) {
+ uint16 data = *cdata++;
+
+ if (data && (templeft >= 8)) {
+ for (int j = 7; j >= 0; j--) {
+ if ((1 << j) & data)
+ *vgaTemp = color;
+ vgaTemp++;
+ }
+
+ templeft -= 8;
+ } else if (data) {
+ uint16 mask = 0x80;
+ templeft = leftInSegment;
+
+ for (int counterb = 0; counterb < 8; counterb++) {
+ if (templeft <= 0) {
+ curPage++;
+ vgaTemp = vgaTop - templeft;
+ // Set up VGATempLine for next line
+ vgaTempLine -= _screenBytesPerPage;
+ // Set up LeftInSegment for next line
+ leftInSegment += _screenBytesPerPage + templeft;
+ templeft += _screenBytesPerPage;
+ }
+
+ if (mask & data)
+ *vgaTemp = color;
+
+ vgaTemp++;
+
+ mask = mask >> 1;
+ templeft--;
+ }
+ } else {
+ templeft -= 8;
+ vgaTemp += 8;
+ }
+ }
+
+ vgaTempLine += _screenWidth;
+ leftInSegment -= _screenWidth;
+
+ if (leftInSegment <= 0) {
+ curPage++;
+ vgaTempLine -= _screenBytesPerPage;
+ leftInSegment += _screenBytesPerPage;
+ }
+ }
+ }
+
+ x += tf->_widths[(byte)text[i]];
+ }
+}
+
+void DisplayMan::doScrollBlack() {
+ uint16 width = _vm->_utils->vgaScaleX(320);
+ uint16 height = _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2);
+
+ _vm->_event->mouseHide();
+
+ byte *mem = new byte[width * height];
+ int16 by = _vm->_utils->vgaScaleX(4);
+ int16 verticalScroll = height;
+
+ while (verticalScroll > 0) {
+ scrollDisplayY(-by, 0, 0, width - 1, height - 1, mem);
+ verticalScroll -= by;
+
+ _vm->updateEvents();
+ _vm->waitTOF();
+ }
+
+ delete[] mem;
+
+ _vm->_event->mouseShow();
+}
+
+void DisplayMan::copyPage(uint16 width, uint16 height, uint16 nheight, uint16 startLine, byte *mem) {
+ byte *baseAddr = getCurrentDrawingBuffer();
+
+ uint32 size = (int32)(height - nheight) * (int32)width;
+ mem += startLine * width;
+ uint16 curPage = ((int32)nheight * (int32)width) / _screenBytesPerPage;
+ uint32 offSet = ((int32)nheight * (int32)width) - (curPage * _screenBytesPerPage);
+
+ while (size) {
+ uint32 copySize;
+ if (size > (_screenBytesPerPage - offSet))
+ copySize = _screenBytesPerPage - offSet;
+ else
+ copySize = size;
+
+ size -= copySize;
+
+ memcpy(baseAddr + (offSet >> 2), mem, copySize);
+ mem += copySize;
+ curPage++;
+ offSet = 0;
+ }
+}
+
+void DisplayMan::doScrollWipe(const Common::String filename) {
+ _vm->_event->mouseHide();
+ uint16 width = _vm->_utils->vgaScaleX(320);
+ uint16 height = _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2);
+
+ while (_vm->_music->isSoundEffectActive()) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ }
+
+ readPict(filename, true, true);
+ setPalette(_vm->_anim->_diffPalette, 256);
+ byte *mem = _vm->_anim->_scrollScreenBuffer;
+
+ _vm->updateEvents();
+ uint16 by = _vm->_utils->vgaScaleX(3);
+ uint16 nheight = height;
+ uint16 startLine = 0, onRow = 0;
+
+ while (onRow < _vm->_anim->getDIFFHeight()) {
+ _vm->updateEvents();
+
+ if ((by > nheight) && nheight)
+ by = nheight;
+
+ if ((startLine + by) > (_vm->_anim->getDIFFHeight() - height - 1))
+ break;
+
+ if (nheight)
+ nheight -= by;
+
+ copyPage(width, height, nheight, startLine, mem);
+ screenUpdate();
+
+ if (!nheight)
+ startLine += by;
+
+ onRow += by;
+
+ if (nheight <= (height / 4))
+ by = _vm->_utils->vgaScaleX(5);
+ else if (nheight <= (height / 3))
+ by = _vm->_utils->vgaScaleX(4);
+ else if (nheight <= (height / 2))
+ by = _vm->_utils->vgaScaleX(3);
+ }
+
+ _vm->_event->mouseShow();
+}
+
+void DisplayMan::doScrollBounce() {
+ const uint16 offsets[8] = { 3, 3, 2, 2, 2, 1, 1, 1 };
+ const int multiplier = (_vm->_isHiRes) ? 2 : 1;
+
+ _vm->_event->mouseHide();
+ int width = _vm->_utils->vgaScaleX(320);
+ int height = _vm->_utils->vgaScaleY(149) + _vm->_utils->svgaCord(2);
+ byte *mem = _vm->_anim->_scrollScreenBuffer;
+
+ _vm->updateEvents();
+ int startLine = _vm->_anim->getDIFFHeight() - height - 1;
+
+ for (int i = 0; i < 5; i++) {
+ _vm->updateEvents();
+ startLine -= (5 - i) * multiplier;
+ copyPage(width, height, 0, startLine, mem);
+ _vm->waitTOF();
+ }
+
+ for (int i = 8; i > 0; i--) {
+ _vm->updateEvents();
+ startLine += offsets[i - 1] * multiplier;
+ copyPage(width, height, 0, startLine, mem);
+ _vm->waitTOF();
+ }
+
+ _vm->_event->mouseShow();
+}
+
+void DisplayMan::doTransWipe(const Common::String filename) {
+ uint16 lastY, linesLast;
+
+ if (_vm->_isHiRes) {
+ linesLast = 3;
+ lastY = 358;
+ } else {
+ linesLast = 1;
+ lastY = 148;
+ }
+
+ uint16 linesDone = 0;
+
+ for (int j = 0; j < 2; j++) {
+ for (int i = 0; i < 2; i++) {
+ uint16 curY = i * 2;
+
+ while (curY < lastY) {
+ if (linesDone >= linesLast) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ linesDone = 0;
+ }
+
+ if (j == 0)
+ checkerBoardEffect(0, 0, curY, _screenWidth - 1, curY + 1);
+ else
+ rectFill(0, curY, _screenWidth - 1, curY + 1, 0);
+ curY += 4;
+ linesDone++;
+ } // while
+ } // for i
+ } // for j
+
+ if (filename.empty())
+ _vm->_curFileName = _vm->getPictName(true);
+ else if (filename[0] > ' ')
+ _vm->_curFileName = filename;
+ else
+ _vm->_curFileName = _vm->getPictName(true);
+
+ byte *bitMapBuffer = new byte[_screenWidth * (lastY + 5)];
+ readPict(_vm->_curFileName, true, false, bitMapBuffer);
+
+ setPalette(_vm->_anim->_diffPalette, 256);
+
+ Image imgSource(_vm);
+ imgSource._width = _screenWidth;
+ imgSource._height = lastY;
+ imgSource.setData(bitMapBuffer, true);
+
+ Image imgDest(_vm);
+ imgDest._width = _screenWidth;
+ imgDest._height = _screenHeight;
+ imgDest.setData(getCurrentDrawingBuffer(), false);
+
+ for (int j = 0; j < 2; j++) {
+ for (int i = 0; i < 2; i++) {
+ uint16 curY = i * 2;
+
+ while (curY < lastY) {
+ if (linesDone >= linesLast) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ linesDone = 0;
+ }
+
+ imgDest.setData(getCurrentDrawingBuffer(), false);
+
+ if (j == 0) {
+ imgSource.blitBitmap(0, curY, &imgDest, 0, curY, _screenWidth, 2, false);
+ checkerBoardEffect(0, 0, curY, _screenWidth - 1, curY + 1);
+ } else {
+ uint16 bitmapHeight = (curY == lastY) ? 1 : 2;
+ imgSource.blitBitmap(0, curY, &imgDest, 0, curY, _screenWidth, bitmapHeight, false);
+ }
+ curY += 4;
+ linesDone++;
+ } // while
+ } // for i
+ } // for j
+
+ // bitMapBuffer will be deleted by the Image destructor
+}
+
+void DisplayMan::doTransition(TransitionType transitionType, const Common::String filename) {
+ switch (transitionType) {
+ case kTransitionWipe:
+ case kTransitionTransporter:
+ doTransWipe(filename);
+ break;
+ case kTransitionScrollWipe: // only used in scene 7 (street, when teleporting to the surreal maze)
+ doScrollWipe(filename);
+ break;
+ case kTransitionScrollBlack: // only used in scene 7 (street, when teleporting to the surreal maze)
+ doScrollBlack();
+ break;
+ case kTransitionScrollBounce: // only used in scene 7 (street, when teleporting to the surreal maze)
+ doScrollBounce();
+ break;
+ case kTransitionReadFirstFrame: // only used in scene 7 (street, when teleporting to the surreal maze)
+ readPict(filename, false);
+ break;
+ case kTransitionReadNextFrame: // only used in scene 7 (street, when teleporting to the surreal maze)
+ _vm->_anim->diffNextFrame();
+ break;
+ case kTransitionNone:
+ default:
+ break;
+ }
+}
+
+void DisplayMan::blackScreen() {
+ byte pal[256 * 3];
+ memset(pal, 0, 248 * 3);
+ writeColorRegs(pal, 8, 248);
+
+ _vm->_system->delayMillis(32);
+}
+
+void DisplayMan::whiteScreen() {
+ byte pal[256 * 3];
+ memset(pal, 255, 248 * 3);
+ writeColorRegs(pal, 8, 248);
+}
+
+void DisplayMan::blackAllScreen() {
+ byte pal[256 * 3];
+ memset(pal, 0, 256 * 3);
+ writeColorRegs(pal, 0, 256);
+
+ _vm->_system->delayMillis(32);
+}
+
+void DisplayMan::scrollDisplayX(int16 dx, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer) {
+ Image img(_vm);
+ img.setData(buffer, false);
+
+ if (x1 > x2)
+ SWAP<uint16>(x1, x2);
+
+ if (y1 > y2)
+ SWAP<uint16>(y1, y2);
+
+ if (dx > 0) {
+ img._width = x2 - x1 + 1 - dx;
+ img._height = y2 - y1 + 1;
+
+ img.readScreenImage(x1, y1);
+ img.drawImage(x1 + dx, y1);
+
+ rectFill(x1, y1, x1 + dx - 1, y2, 0);
+ } else if (dx < 0) {
+ img._width = x2 - x1 + 1 + dx;
+ img._height = y2 - y1 + 1;
+
+ img.readScreenImage(x1 - dx, y1);
+ img.drawImage(x1, y1);
+
+ rectFill(x2 + dx + 1, y1, x2, y2, 0);
+ }
+}
+
+void DisplayMan::scrollDisplayY(int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer) {
+ Image img(_vm);
+ img.setData(buffer, false);
+
+ if (x1 > x2)
+ SWAP<uint16>(x1, x2);
+
+ if (y1 > y2)
+ SWAP<uint16>(y1, y2);
+
+ if (dy > 0) {
+ img._width = x2 - x1 + 1;
+ img._height = y2 - y1 + 1 - dy;
+
+ img.readScreenImage(x1, y1);
+ img.drawImage(x1, y1 + dy);
+
+ rectFill(x1, y1, x2, y1 + dy - 1, 0);
+ } else if (dy < 0) {
+ img._width = x2 - x1 + 1;
+ img._height = y2 - y1 + 1 + dy;
+
+ img.readScreenImage(x1, y1 - dy);
+ img.drawImage(x1, y1);
+
+ rectFill(x1, y2 + dy + 1, x2, y2, 0);
+ }
+}
+
+uint16 DisplayMan::fadeNumIn(uint16 num, uint16 res, uint16 counter) {
+ return (num - ((((int32)(15 - counter)) * ((int32)(num - res))) / 15));
+}
+
+uint16 DisplayMan::fadeNumOut(uint16 num, uint16 res, uint16 counter) {
+ return (num - ((((int32) counter) * ((int32)(num - res))) / 15));
+}
+
+void DisplayMan::fade(bool fadeIn) {
+ uint16 newPal[16];
+
+ for (int i = 0; i < 16; i++) {
+ for (int palIdx = 0; palIdx < 16; palIdx++) {
+ if (fadeIn)
+ newPal[palIdx] = (0x00F & fadeNumIn(0x00F & _fadePalette[palIdx], 0, i)) +
+ (0x0F0 & fadeNumIn(0x0F0 & _fadePalette[palIdx], 0, i)) +
+ (0xF00 & fadeNumIn(0xF00 & _fadePalette[palIdx], 0, i));
+ else
+ newPal[palIdx] = (0x00F & fadeNumOut(0x00F & _fadePalette[palIdx], 0, i)) +
+ (0x0F0 & fadeNumOut(0x0F0 & _fadePalette[palIdx], 0, i)) +
+ (0xF00 & fadeNumOut(0xF00 & _fadePalette[palIdx], 0, i));
+ }
+
+ setAmigaPal(newPal);
+ _vm->waitTOF();
+ _vm->updateEvents();
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/dispman.h b/engines/lab/dispman.h
new file mode 100644
index 0000000000..d83d4fb73e
--- /dev/null
+++ b/engines/lab/dispman.h
@@ -0,0 +1,274 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_DISPMAN_H
+#define LAB_DISPMAN_H
+
+namespace Lab {
+
+class LabEngine;
+class Image;
+
+struct TextFont {
+ uint32 _dataLength;
+ uint16 _height;
+ byte _widths[256];
+ uint16 _offsets[256];
+ byte *_data;
+};
+
+enum TransitionType {
+ kTransitionNone,
+ kTransitionWipe,
+ kTransitionScrollWipe,
+ kTransitionScrollBlack,
+ kTransitionScrollBounce,
+ kTransitionTransporter,
+ kTransitionReadFirstFrame,
+ kTransitionReadNextFrame
+};
+
+class DisplayMan {
+private:
+ LabEngine *_vm;
+
+ /**
+ * Does the fading of the Palette on the screen.
+ */
+ uint16 fadeNumIn(uint16 num, uint16 res, uint16 counter);
+ uint16 fadeNumOut(uint16 num, uint16 res, uint16 counter);
+
+ /**
+ * Extracts the first word from a string.
+ */
+ Common::String getWord(const char *mainBuffer);
+
+ void createBox(uint16 y2);
+
+ /**
+ * Sets up either a low-res or a high-res 256 color screen.
+ */
+ void createScreen(bool hiRes);
+
+ /**
+ * Scrolls the display to black.
+ */
+ void doScrollBlack();
+ void copyPage(uint16 width, uint16 height, uint16 nheight, uint16 startline, byte *mem);
+
+ /**
+ * Scrolls the display to a new picture from a black screen.
+ */
+ void doScrollWipe(const Common::String filename);
+
+ /**
+ * Does the scroll bounce. Assumes bitmap already in memory.
+ */
+ void doScrollBounce();
+
+ /**
+ * Does the transporter wipe.
+ */
+ void doTransWipe(const Common::String filename);
+
+ /**
+ * Draws a vertical line.
+ */
+ void drawHLine(uint16 x, uint16 y1, uint16 y2, byte color);
+
+ /**
+ * Draws a horizontal line.
+ */
+ void drawVLine(uint16 x1, uint16 y, uint16 x2, byte color);
+
+ /**
+ * Draws the text to the screen.
+ */
+ void drawText(TextFont *tf, uint16 x, uint16 y, uint16 color, const Common::String text);
+
+ /**
+ * Gets a line of text for flowText; makes sure that its length is less than
+ * or equal to the maximum width.
+ */
+ Common::String getLine(TextFont *tf, const char **mainBuffer, uint16 lineWidth);
+
+ /**
+ * Returns the length of a text in the specified font.
+ */
+ uint16 textLength(TextFont *font, const Common::String text);
+
+ bool _actionMessageShown;
+ Common::File *_curBitmap;
+ byte _curVgaPal[256 * 3];
+ byte *_currentDisplayBuffer;
+
+public:
+ DisplayMan(LabEngine *lab);
+ virtual ~DisplayMan();
+
+ void loadPict(const Common::String filename);
+ void loadBackPict(const Common::String fileName, uint16 *highPal);
+
+ /**
+ * Reads in a picture into the display bitmap.
+ */
+ void readPict(const Common::String filename, bool playOnce = true, bool onlyDiffData = false, byte *memoryBuffer = nullptr);
+ void freePict();
+
+ /**
+ * Does a certain number of pre-programmed wipes.
+ */
+ void doTransition(TransitionType transitionType, const Common::String filename);
+
+ /**
+ * Changes the front screen to black.
+ */
+ void blackScreen();
+
+ /**
+ * Changes the front screen to white.
+ */
+ void whiteScreen();
+
+ /**
+ * Changes the entire screen to black.
+ */
+ void blackAllScreen();
+
+ /**
+ * Draws the control panel display.
+ */
+ void drawPanel();
+
+ /**
+ * Sets up the Labyrinth screens, and opens up the initial windows.
+ */
+ void setUpScreens();
+
+ int longDrawMessage(Common::String str, bool isActionMessage);
+
+ /**
+ * Draws a message to the message box.
+ */
+ void drawMessage(Common::String str, bool isActionMessage);
+
+ void setActionMessage(bool val) { _actionMessageShown = val; }
+
+ /**
+ * Fills in a rectangle.
+ */
+ void rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte color);
+ void rectFill(Common::Rect fillRect, byte color);
+ void rectFillScaled(uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte color);
+ /**
+ * Dumps a chunk of text to an arbitrary box; flows it within that box and
+ * optionally centers it. Returns the number of characters that were processed.
+ * @note Every individual word MUST be int16 enough to fit on a line, and
+ * each line less than 255 characters.
+ * @param font Pointer on the font used
+ * @param spacing How much vertical spacing between the lines
+ * @param penColor Pen number to use for text
+ * @param backPen Background color
+ * @param fillBack Whether to fill the background
+ * @param centerh Whether to center the text horizontally
+ * @param centerv Whether to center the text vertically
+ * @param output Whether to output any text
+ * @param textRect Coords
+ * @param text The text itself
+ */
+ int flowText(TextFont *font, int16 spacing, byte penColor, byte backPen, bool fillBack,
+ bool centerh, bool centerv, bool output, Common::Rect textRect, const char *text, Image *targetImage = nullptr);
+
+ void screenUpdate();
+
+ /**
+ * Converts a 16-color Amiga palette to a VGA palette, then sets
+ * the VGA palette.
+ */
+ void setAmigaPal(uint16 *pal);
+
+ /**
+ * Writes any number of the 256 color registers.
+ * @param buf A char pointer which contains the selected color registers.
+ * Each value representing a color register occupies 3 bytes in the array. The
+ * order is red, green then blue. The first byte in the array is the red component
+ * of the first element selected. The length of the buffer is 3 times the number
+ * of registers selected.
+ * @param first The number of the first color register to write.
+ * @param numReg The number of registers to write.
+ */
+ void writeColorRegs(byte *buf, uint16 first, uint16 numReg);
+ void setPalette(void *newPal, uint16 numColors);
+
+ /**
+ * Overlays a region on the screen using the desired pen color.
+ */
+ void checkerBoardEffect(uint16 penColor, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
+
+ /**
+ * Returns the base address of the current VGA display.
+ */
+ byte *getCurrentDrawingBuffer();
+
+ /**
+ * Scrolls the display in the x direction by blitting.
+ * The _tempScrollData variable must be initialized to some memory, or this
+ * function will fail.
+ */
+ void scrollDisplayX(int16 dx, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer);
+
+ /**
+ * Scrolls the display in the y direction by blitting.
+ */
+ void scrollDisplayY(int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer);
+ void fade(bool fadein);
+
+ /**
+ * Closes a font and frees all memory associated with it.
+ */
+ void freeFont(TextFont **font);
+
+ /**
+ * Returns the height of a specified font.
+ */
+ uint16 textHeight(TextFont *tf);
+
+ bool _longWinInFront;
+ bool _lastMessageLong;
+ uint32 _screenBytesPerPage;
+ int _screenWidth;
+ int _screenHeight;
+ byte *_displayBuffer;
+ uint16 *_fadePalette;
+};
+
+} // End of namespace Lab
+
+#endif // LAB_DISPMAN_H
diff --git a/engines/lab/engine.cpp b/engines/lab/engine.cpp
new file mode 100644
index 0000000000..cd47342097
--- /dev/null
+++ b/engines/lab/engine.cpp
@@ -0,0 +1,1196 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/config-manager.h"
+
+#include "lab/lab.h"
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+#include "lab/intro.h"
+#include "lab/labsets.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+#include "lab/speciallocks.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+#define CRUMBSWIDTH 24
+#define CRUMBSHEIGHT 24
+
+enum SpecialLock {
+ kLockCombination = 100,
+ kLockTiles = 101,
+ kLockTileSolution = 102
+};
+
+enum Items {
+ kItemHelmet = 1,
+ kItemBelt = 3,
+ kItemPithHelmet = 7,
+ kItemJournal = 9,
+ kItemNotes = 12,
+ kItemWestPaper = 18,
+ kItemWhiskey = 25,
+ kItemLamp = 27,
+ kItemMap = 28,
+ kItemQuarter = 30
+};
+
+enum Monitors {
+ kMonitorMuseum = 71,
+ kMonitorGramophone = 72,
+ kMonitorUnicycle = 73,
+ kMonitorStatue = 74,
+ kMonitorTalisman = 75,
+ kMonitorLute = 76,
+ kMonitorClock = 77,
+ kMonitorWindow = 78,
+ //kMonitorBelt = 79,
+ kMonitorLibrary = 80,
+ kMonitorTerminal = 81
+ //kMonitorLevers = 82
+};
+
+enum AltButtons {
+ kButtonMainDisplay,
+ kButtonSaveLoad,
+ kButtonUseItem,
+ kButtonLookAtItem,
+ kButtonPrevItem,
+ kButtonNextItem,
+ kButtonBreadCrumbs,
+ kButtonFollowCrumbs
+};
+
+static char initColors[] = { '\x00', '\x00', '\x00', '\x30',
+ '\x30', '\x30', '\x10', '\x10',
+ '\x10', '\x14', '\x14', '\x14',
+ '\x20', '\x20', '\x20', '\x24',
+ '\x24', '\x24', '\x2c', '\x2c',
+ '\x2c', '\x08', '\x08', '\x08' };
+
+uint16 LabEngine::getQuarters() {
+ return _inventory[kItemQuarter]._quantity;
+}
+
+void LabEngine::setQuarters(uint16 quarters) {
+ _inventory[kItemQuarter]._quantity = quarters;
+}
+
+void LabEngine::drawRoomMessage(uint16 curInv, const CloseData *closePtr) {
+ if (_lastTooLong) {
+ _lastTooLong = false;
+ return;
+ }
+
+ if (_alternate) {
+ if ((curInv <= _numInv) && _conditions->in(curInv) && !_inventory[curInv]._bitmapName.empty()) {
+ if ((curInv == kItemLamp) && _conditions->in(kCondLampOn))
+ // LAB: Labyrinth specific
+ drawStaticMessage(kTextkLampOn);
+ else if (_inventory[curInv]._quantity > 1) {
+ Common::String roomMessage = _inventory[curInv]._name + " (" + Common::String::format("%d", _inventory[curInv]._quantity) + ")";
+ _graphics->drawMessage(roomMessage.c_str(), false);
+ } else
+ _graphics->drawMessage(_inventory[curInv]._name.c_str(), false);
+ }
+ } else
+ drawDirection(closePtr);
+
+ _lastTooLong = _graphics->_lastMessageLong;
+}
+
+void LabEngine::freeScreens() {
+ for (int i = 0; i < 20; i++) {
+ delete _moveImages[i];
+ _moveImages[i] = nullptr;
+ }
+
+ for (int imgIdx = 0; imgIdx < 10; imgIdx++) {
+ delete _invImages[imgIdx];
+ _invImages[imgIdx] = nullptr;
+ }
+
+ // We can't use freeButtonList() here, because some buttons are shared
+ // between the two lists.
+ for (ButtonList::iterator buttonIter = _moveButtonList.begin(); buttonIter != _moveButtonList.end(); ++buttonIter) {
+ delete *buttonIter;
+ }
+ _moveButtonList.clear();
+
+ for (ButtonList::iterator buttonIter = _invButtonList.begin(); buttonIter != _invButtonList.end(); ++buttonIter) {
+ delete *buttonIter;
+ }
+ _invButtonList.clear();
+}
+
+void LabEngine::perFlipButton(uint16 buttonId) {
+ for (ButtonList::iterator button = _moveButtonList.begin(); button != _moveButtonList.end(); ++button) {
+ Button *topButton = *button;
+ if (topButton->_buttonId == buttonId) {
+ SWAP<Image *>(topButton->_image, topButton->_altImage);
+
+ if (!_alternate)
+ topButton->_image->drawImage(topButton->_x, topButton->_y);
+
+ break;
+ }
+ }
+}
+
+void LabEngine::eatMessages() {
+ IntuiMessage *msg;
+
+ do {
+ msg = _event->getMsg();
+ } while (msg && !shouldQuit());
+}
+
+bool LabEngine::doCloseUp(const CloseData *closePtr) {
+ if (!closePtr)
+ return false;
+
+ int luteRight;
+ Common::Rect textRect;
+
+ if (getPlatform() != Common::kPlatformWindows) {
+ textRect = Common::Rect(0, 0, 319, 165);
+ luteRight = 124;
+ } else {
+ textRect = Common::Rect(2, 2, 317, 165);
+ luteRight = 128;
+ }
+
+ switch (closePtr->_closeUpType) {
+ case kMonitorMuseum:
+ case kMonitorLibrary:
+ case kMonitorWindow:
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorGramophone:
+ textRect.right = 171;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorUnicycle:
+ textRect.left = 100;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorStatue:
+ textRect.left = 117;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorTalisman:
+ textRect.right = 184;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorLute:
+ textRect.right = luteRight;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorClock:
+ textRect.right = 206;
+ doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
+ break;
+ case kMonitorTerminal:
+ doMonitor(closePtr->_graphicName, closePtr->_message, true, textRect);
+ break;
+ default:
+ return false;
+ }
+
+ _curFileName = " ";
+ _graphics->drawPanel();
+
+ return true;
+}
+
+Common::String LabEngine::getInvName(uint16 curInv) {
+ if (_mainDisplay)
+ return _inventory[curInv]._bitmapName;
+
+ if ((curInv == kItemLamp) && _conditions->in(kCondLampOn))
+ return "P:Mines/120";
+
+ if ((curInv == kItemBelt) && _conditions->in(kCondBeltGlowing))
+ return "P:Future/kCondBeltGlowing";
+
+ if (curInv == kItemWestPaper) {
+ _curFileName = _inventory[curInv]._bitmapName;
+ _anim->_noPalChange = true;
+ _graphics->readPict(_curFileName, false);
+ _anim->_noPalChange = false;
+ doWestPaper();
+ } else if (curInv == kItemNotes) {
+ _curFileName = _inventory[curInv]._bitmapName;
+ _anim->_noPalChange = true;
+ _graphics->readPict(_curFileName, false);
+ _anim->_noPalChange = false;
+ doNotes();
+ }
+
+ return _inventory[curInv]._bitmapName;
+}
+
+void LabEngine::interfaceOff() {
+ if (!_interfaceOff) {
+ _event->attachButtonList(nullptr);
+ _event->mouseHide();
+ _interfaceOff = true;
+ }
+}
+
+void LabEngine::interfaceOn() {
+ if (_interfaceOff) {
+ _interfaceOff = false;
+ _event->mouseShow();
+ }
+
+ if (_graphics->_longWinInFront)
+ _event->attachButtonList(nullptr);
+ else if (_alternate)
+ _event->attachButtonList(&_invButtonList);
+ else
+ _event->attachButtonList(&_moveButtonList);
+}
+
+bool LabEngine::doUse(uint16 curInv) {
+ switch (curInv) {
+ case kItemMap:
+ drawStaticMessage(kTextUseMap);
+ interfaceOff();
+ _anim->stopDiff();
+ _curFileName = " ";
+ _closeDataPtr = nullptr;
+ doMap(_roomNum);
+ _graphics->setPalette(initColors, 8);
+ _graphics->drawMessage("", false);
+ _graphics->drawPanel();
+ return true;
+ case kItemJournal:
+ drawStaticMessage(kTextUseJournal);
+ interfaceOff();
+ _anim->stopDiff();
+ _curFileName = " ";
+ _closeDataPtr = nullptr;
+ doJournal();
+ _graphics->drawPanel();
+ _graphics->drawMessage("", false);
+ return true;
+ case kItemLamp:
+ interfaceOff();
+
+ if (_conditions->in(kCondLampOn)) {
+ drawStaticMessage(kTextTurnLampOff);
+ _conditions->exclElement(kCondLampOn);
+ } else {
+ drawStaticMessage(kTextTurnkLampOn);
+ _conditions->inclElement(kCondLampOn);
+ }
+
+ _anim->_doBlack = false;
+ _anim->_waitForEffect = true;
+ _graphics->readPict("Music:Click");
+ _anim->_waitForEffect = false;
+
+ _anim->_doBlack = false;
+ _nextFileName = getInvName(curInv);
+ return true;
+ case kItemBelt:
+ if (!_conditions->in(kCondBeltGlowing))
+ _conditions->inclElement(kCondBeltGlowing);
+
+ _anim->_doBlack = false;
+ _nextFileName = getInvName(curInv);
+ return true;
+ case kItemWhiskey:
+ _conditions->inclElement(kCondUsedHelmet);
+ drawStaticMessage(kTextUseWhiskey);
+ return true;
+ case kItemPithHelmet:
+ _conditions->inclElement(kCondUsedHelmet);
+ drawStaticMessage(kTextUsePith);
+ return true;
+ case kItemHelmet:
+ _conditions->inclElement(kCondUsedHelmet);
+ drawStaticMessage(kTextUseHelmet);
+ return true;
+ default:
+ return false;
+ }
+}
+
+void LabEngine::decIncInv(uint16 *curInv, bool decreaseFl) {
+ int8 step = (decreaseFl) ? -1 : 1;
+ uint newInv = *curInv + step;
+
+ // Handle wrapping
+ if (newInv < 1)
+ newInv = _numInv;
+ if (newInv > _numInv)
+ newInv = 1;
+
+ interfaceOff();
+
+ while (newInv && (newInv <= _numInv)) {
+ if (_conditions->in(newInv) && !_inventory[newInv]._bitmapName.empty()) {
+ _nextFileName = getInvName(newInv);
+ *curInv = newInv;
+ break;
+ }
+
+ newInv += step;
+
+ // Handle wrapping
+ if (newInv < 1)
+ newInv = _numInv;
+ if (newInv > _numInv)
+ newInv = 1;
+ }
+}
+
+void LabEngine::mainGameLoop() {
+ _graphics->setPalette(initColors, 8);
+
+ _closeDataPtr = nullptr;
+ _roomNum = 1;
+ _direction = kDirectionNorth;
+
+ _resource->readRoomData("LAB:Doors");
+ if (!(_inventory = _resource->readInventory("LAB:Inventor")))
+ return;
+
+ if (!(_conditions = new LargeSet(_highestCondition + 1, this)))
+ return;
+
+ if (!(_roomsFound = new LargeSet(_manyRooms + 1, this)))
+ return;
+
+ _conditions->readInitialConditions("LAB:Conditio");
+
+ _graphics->_longWinInFront = false;
+ _graphics->drawPanel();
+
+ uint16 actionMode = 4;
+ perFlipButton(actionMode);
+
+ // Load saved slot from the launcher, if requested
+ if (ConfMan.hasKey("save_slot")) {
+ loadGame(ConfMan.getInt("save_slot"));
+
+ // Since the intro hasn't been shown, init the background music here
+ if (getPlatform() != Common::kPlatformAmiga)
+ _music->changeMusic("Music:BackGrou", false, false);
+ else
+ _music->changeMusic("Music:BackGround", false, false);
+ _music->checkRoomMusic();
+ }
+
+ uint16 curInv = kItemMap;
+ bool forceDraw = false;
+ bool gotMessage = true;
+ // Set up initial picture.
+ while (1) {
+ _event->processInput();
+ _system->delayMillis(10);
+
+ if (gotMessage) {
+ if (_quitLab || shouldQuit()) {
+ _anim->stopDiff();
+ break;
+ }
+
+ // Sees what kind of close up we're in and does the appropriate stuff, if any.
+ if (doCloseUp(_closeDataPtr)) {
+ _closeDataPtr = nullptr;
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ }
+
+ // Sets the current picture properly on the screen
+ if (_mainDisplay)
+ _nextFileName = getPictName(true);
+
+ if (_noUpdateDiff) {
+ // Potentially entered another room
+ _roomsFound->inclElement(_roomNum);
+ forceDraw |= (_nextFileName != _curFileName);
+
+ _noUpdateDiff = false;
+ _curFileName = _nextFileName;
+ } else if (_nextFileName != _curFileName) {
+ interfaceOff();
+ // Potentially entered another room
+ _roomsFound->inclElement(_roomNum);
+ _curFileName = _nextFileName;
+
+ if (_closeDataPtr && _mainDisplay) {
+ switch (_closeDataPtr->_closeUpType) {
+ case kLockCombination:
+ _specialLocks->showCombinationLock(_curFileName);
+ break;
+ case kLockTiles:
+ case kLockTileSolution:
+ _specialLocks->showTileLock(_curFileName, (_closeDataPtr->_closeUpType == kLockTileSolution));
+ break;
+ default:
+ _graphics->readPict(_curFileName, false);
+ break;
+ }
+ } else
+ _graphics->readPict(_curFileName, false);
+
+ drawRoomMessage(curInv, _closeDataPtr);
+ forceDraw = false;
+
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+
+ if (!_followingCrumbs)
+ eatMessages();
+ }
+
+ if (forceDraw) {
+ drawRoomMessage(curInv, _closeDataPtr);
+ forceDraw = false;
+ _graphics->screenUpdate();
+ }
+ }
+
+ // Make sure we check the music at least after every message
+ updateEvents();
+ interfaceOn();
+ IntuiMessage *curMsg = _event->getMsg();
+ if (shouldQuit()) {
+ _quitLab = true;
+ return;
+ }
+
+ if (!curMsg) {
+ // Does music load and next animation frame when you've run out of messages
+ gotMessage = false;
+ _music->checkRoomMusic();
+ updateEvents();
+ _anim->diffNextFrame();
+
+ if (_followingCrumbs) {
+ MainButton code = followCrumbs();
+
+ if (code == kButtonForward || code == kButtonLeft || code == kButtonRight) {
+ gotMessage = true;
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ if (!processEvent(kMessageButtonUp, code, 0, _event->updateAndGetMousePos(), curInv, curMsg, forceDraw, code, actionMode))
+ break;
+ }
+ }
+
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ } else {
+ gotMessage = true;
+ _followingCrumbs = false;
+ if (!processEvent(curMsg->_msgClass, curMsg->_code, curMsg->_qualifier, curMsg->_mouse, curInv, curMsg, forceDraw, curMsg->_code, actionMode))
+ break;
+ }
+ }
+}
+
+void LabEngine::showLab2Teaser() {
+ _graphics->blackAllScreen();
+ _graphics->readPict("P:End/L2In.1");
+
+ for (int i = 0; i < 120; i++) {
+ updateEvents();
+ waitTOF();
+ }
+
+ _graphics->readPict("P:End/L2In.9");
+ _graphics->readPict("P:End/Lost");
+
+ while (!_event->getMsg() && !shouldQuit()) {
+ updateEvents();
+ _anim->diffNextFrame();
+ waitTOF();
+ }
+}
+
+bool LabEngine::processEvent(MessageClass tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
+ uint16 &curInv, IntuiMessage *curMsg, bool &forceDraw, uint16 buttonId, uint16 &actionMode) {
+
+ if (shouldQuit())
+ return false;
+
+ MessageClass msgClass = tmpClass;
+ Common::Point curPos = tmpPos;
+ uint16 oldDirection = 0;
+ uint16 lastInv = kItemMap;
+
+ if (code == Common::KEYCODE_RETURN)
+ msgClass = kMessageLeftClick;
+
+ bool leftButtonClick = (msgClass == kMessageLeftClick);
+ bool rightButtonClick = (msgClass == kMessageRightClick);
+
+ _anim->_doBlack = false;
+
+ if (_graphics->_longWinInFront) {
+ if (msgClass == kMessageRawKey || leftButtonClick || rightButtonClick) {
+ _graphics->_longWinInFront = false;
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+ _graphics->screenUpdate();
+ }
+ } else if (msgClass == kMessageRawKey) {
+ return processKey(curMsg, msgClass, qualifier, curPos, curInv, forceDraw, code);
+ } else if (msgClass == kMessageButtonUp) {
+ if (!_alternate)
+ processMainButton(curInv, lastInv, oldDirection, forceDraw, buttonId, actionMode);
+ else
+ processAltButton(curInv, lastInv, buttonId, actionMode);
+ } else if (leftButtonClick && _mainDisplay) {
+ interfaceOff();
+ _mainDisplay = true;
+
+ if (_closeDataPtr && _closeDataPtr->_closeUpType == kLockCombination)
+ _specialLocks->combinationClick(curPos);
+ else if (_closeDataPtr && _closeDataPtr->_closeUpType == kLockTiles)
+ _specialLocks->tileClick(curPos);
+ else
+ performAction(actionMode, curPos, curInv);
+
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ } else if (rightButtonClick) {
+ eatMessages();
+ _alternate = !_alternate;
+ _anim->_doBlack = true;
+ _mainDisplay = true;
+ // Sets the correct button list
+ interfaceOn();
+
+ if (_alternate) {
+ if (lastInv && _conditions->in(lastInv))
+ curInv = lastInv;
+ else
+ decIncInv(&curInv, false);
+ }
+
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ }
+
+ return true;
+}
+
+bool LabEngine::processKey(IntuiMessage *curMsg, uint32 msgClass, uint16 &qualifier, Common::Point &curPos, uint16 &curInv, bool &forceDraw, uint16 code) {
+ if ((getPlatform() == Common::kPlatformWindows) && (code == Common::KEYCODE_b)) {
+ // Start bread crumbs
+ _breadCrumbs[0]._roomNum = 0;
+ _numCrumbs = 0;
+ _droppingCrumbs = true;
+ mayShowCrumbIndicator();
+ _graphics->screenUpdate();
+ } else if (getPlatform() == Common::kPlatformWindows && (code == Common::KEYCODE_f || code == Common::KEYCODE_r)) {
+ // Follow bread crumbs
+ if (_droppingCrumbs) {
+ if (_numCrumbs > 0) {
+ _followingCrumbs = true;
+ _followCrumbsFast = (code == Common::KEYCODE_r);
+ _isCrumbTurning = false;
+ _isCrumbWaiting = false;
+ _crumbTimestamp = _system->getMillis();
+
+ if (_alternate) {
+ eatMessages();
+ _alternate = false;
+ _anim->_doBlack = true;
+
+ _mainDisplay = true;
+ // Sets the correct button list
+ interfaceOn();
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+ _graphics->screenUpdate();
+ }
+ } else {
+ _breadCrumbs[0]._roomNum = 0;
+ _droppingCrumbs = false;
+
+ // Need to hide indicator!!!!
+ mayShowCrumbIndicatorOff();
+ _graphics->screenUpdate();
+ }
+ }
+ } else if ((code == Common::KEYCODE_x) || (code == Common::KEYCODE_q)) {
+ // Quit?
+ _graphics->drawMessage("Do you want to quit? (Y/N)", false);
+ eatMessages();
+ interfaceOff();
+
+ while (1) {
+ // Make sure we check the music at least after every message
+ updateEvents();
+ curMsg = _event->getMsg();
+
+ if (shouldQuit())
+ return false;
+
+ if (!curMsg) {
+ // Does music load and next animation frame when you've run out of messages
+ updateEvents();
+ _anim->diffNextFrame();
+ } else if (curMsg->_msgClass == kMessageRawKey) {
+ if ((curMsg->_code == Common::KEYCODE_y) || (curMsg->_code == Common::KEYCODE_q)) {
+ _anim->stopDiff();
+ return false;
+ } else if (curMsg->_code < 128)
+ break;
+ } else if ((curMsg->_msgClass == kMessageLeftClick) || (curMsg->_msgClass == kMessageRightClick))
+ break;
+ }
+
+ forceDraw = true;
+ interfaceOn();
+ } else if (code == Common::KEYCODE_ESCAPE) {
+ _closeDataPtr = nullptr;
+ } else if (code == Common::KEYCODE_TAB) {
+ const CloseData *tmpClosePtr = _closeDataPtr;
+
+ // get next close-up in list after the one pointed to by curPos
+ setCurrentClose(curPos, &tmpClosePtr, true, true);
+
+ if (tmpClosePtr != _closeDataPtr)
+ _event->setMousePos(Common::Point(_utils->scaleX((tmpClosePtr->_x1 + tmpClosePtr->_x2) / 2), _utils->scaleY((tmpClosePtr->_y1 + tmpClosePtr->_y2) / 2)));
+ }
+
+ eatMessages();
+
+ return true;
+}
+
+void LabEngine::processMainButton(uint16 &curInv, uint16 &lastInv, uint16 &oldDirection, bool &forceDraw, uint16 buttonId, uint16 &actionMode) {
+ switch (buttonId) {
+ case kButtonPickup:
+ case kButtonUse:
+ case kButtonOpen:
+ case kButtonClose:
+ case kButtonLook:
+ if ((actionMode == 4) && (buttonId == kButtonLook) && _closeDataPtr) {
+ doMainView();
+
+ _anim->_doBlack = true;
+ _closeDataPtr = nullptr;
+ mayShowCrumbIndicator();
+ } else {
+ uint16 oldActionMode = actionMode;
+ actionMode = buttonId;
+
+ if (oldActionMode < 5)
+ perFlipButton(oldActionMode);
+
+ perFlipButton(actionMode);
+ drawStaticMessage(kTextTakeWhat + buttonId);
+ }
+ break;
+
+ case kButtonInventory:
+ eatMessages();
+
+ _alternate = true;
+ _anim->_doBlack = true;
+ // Sets the correct button list
+ interfaceOn();
+ _mainDisplay = false;
+
+ if (lastInv && _conditions->in(lastInv)) {
+ curInv = lastInv;
+ _nextFileName = getInvName(curInv);
+ } else
+ decIncInv(&curInv, false);
+
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+
+ mayShowCrumbIndicator();
+ break;
+
+ case kButtonLeft:
+ case kButtonRight: {
+ _closeDataPtr = nullptr;
+ if (buttonId == kButtonLeft)
+ drawStaticMessage(kTextTurnLeft);
+ else
+ drawStaticMessage(kTextTurnRight);
+
+ _curFileName = " ";
+ oldDirection = _direction;
+
+ uint16 newDir = processArrow(_direction, buttonId - 6);
+ doTurn(_direction, newDir);
+ _anim->_doBlack = true;
+ _direction = newDir;
+ forceDraw = true;
+ mayShowCrumbIndicator();
+ }
+ break;
+
+ case kButtonForward: {
+ _closeDataPtr = nullptr;
+ int oldRoomNum = _roomNum;
+
+ if (doGoForward()) {
+ if (oldRoomNum == _roomNum)
+ _anim->_doBlack = true;
+ } else {
+ _anim->_doBlack = true;
+ _direction = processArrow(_direction, buttonId - 6);
+
+ if (oldRoomNum != _roomNum) {
+ drawStaticMessage(kTextGoForward);
+ // Potentially entered a new room
+ _roomsFound->inclElement(_roomNum);
+ _curFileName = " ";
+ forceDraw = true;
+ } else {
+ _anim->_doBlack = true;
+ drawStaticMessage(kTextNoPath);
+ }
+ }
+
+ if (_followingCrumbs) {
+ if (_isCrumbTurning) {
+ if (_direction == oldDirection)
+ _followingCrumbs = false;
+ } else if (_roomNum == oldRoomNum) { // didn't get there?
+ _followingCrumbs = false;
+ }
+ } else if (_droppingCrumbs && (oldRoomNum != _roomNum)) {
+ // If in surreal maze, turn off DroppingCrumbs.
+ if ((_roomNum >= 245) && (_roomNum <= 280)) {
+ _followingCrumbs = false;
+ _droppingCrumbs = false;
+ _numCrumbs = 0;
+ _breadCrumbs[0]._roomNum = 0;
+ } else {
+ bool intersect = false;
+ for (int idx = 0; idx < _numCrumbs; idx++) {
+ if (_breadCrumbs[idx]._roomNum == _roomNum) {
+ _numCrumbs = idx + 1;
+ _breadCrumbs[_numCrumbs]._roomNum = 0;
+ intersect = true;
+ }
+ }
+
+ if (!intersect) {
+ if (_numCrumbs == MAX_CRUMBS) {
+ _numCrumbs = MAX_CRUMBS - 1;
+ memcpy(&_breadCrumbs[0], &_breadCrumbs[1], _numCrumbs * sizeof _breadCrumbs[0]);
+ }
+
+ _breadCrumbs[_numCrumbs]._roomNum = _roomNum;
+ _breadCrumbs[_numCrumbs++]._direction = _direction;
+ }
+ }
+ }
+
+ mayShowCrumbIndicator();
+ }
+ break;
+
+ case kButtonMap:
+ doUse(kItemMap);
+
+ mayShowCrumbIndicator();
+ break;
+ }
+
+ _graphics->screenUpdate();
+}
+
+void LabEngine::processAltButton(uint16 &curInv, uint16 &lastInv, uint16 buttonId, uint16 &actionMode) {
+ _anim->_doBlack = true;
+
+ switch (buttonId) {
+ case kButtonMainDisplay:
+ eatMessages();
+ _alternate = false;
+ _anim->_doBlack = true;
+
+ _mainDisplay = true;
+ // Sets the correct button list
+ interfaceOn();
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+ break;
+
+ case kButtonSaveLoad: {
+ interfaceOff();
+ _anim->stopDiff();
+ _curFileName = " ";
+
+ bool saveRestoreSuccessful = saveRestoreGame();
+ _closeDataPtr = nullptr;
+ _mainDisplay = true;
+
+ curInv = lastInv = kItemMap;
+ _nextFileName = getInvName(curInv);
+
+ _graphics->drawPanel();
+
+ if (!saveRestoreSuccessful) {
+ _graphics->drawMessage("Save/restore aborted", false);
+ _graphics->setPalette(initColors, 8);
+ _system->delayMillis(1000);
+ }
+ }
+ break;
+
+ case kButtonUseItem:
+ if (!doUse(curInv)) {
+ uint16 oldActionMode = actionMode;
+ // Use button
+ actionMode = 5;
+
+ if (oldActionMode < 5)
+ perFlipButton(oldActionMode);
+
+ drawStaticMessage(kTextUseOnWhat);
+ _mainDisplay = true;
+ }
+ break;
+
+ case kButtonLookAtItem:
+ _mainDisplay = !_mainDisplay;
+
+ if ((curInv == 0) || (curInv > _numInv)) {
+ curInv = 1;
+
+ while ((curInv <= _numInv) && !_conditions->in(curInv))
+ curInv++;
+ }
+
+ if ((curInv <= _numInv) && _conditions->in(curInv) && !_inventory[curInv]._bitmapName.empty())
+ _nextFileName = getInvName(curInv);
+
+ break;
+
+ case kButtonPrevItem:
+ decIncInv(&curInv, true);
+ lastInv = curInv;
+ drawRoomMessage(curInv, _closeDataPtr);
+ break;
+
+ case kButtonNextItem:
+ decIncInv(&curInv, false);
+ lastInv = curInv;
+ drawRoomMessage(curInv, _closeDataPtr);
+ break;
+
+ case kButtonBreadCrumbs:
+ _breadCrumbs[0]._roomNum = 0;
+ _numCrumbs = 0;
+ _droppingCrumbs = true;
+ mayShowCrumbIndicator();
+ break;
+
+ case kButtonFollowCrumbs:
+ if (_droppingCrumbs) {
+ if (_numCrumbs > 0) {
+ _followingCrumbs = true;
+ _followCrumbsFast = false;
+ _isCrumbTurning = false;
+ _isCrumbWaiting = false;
+ _crumbTimestamp = _system->getMillis();
+
+ eatMessages();
+ _alternate = false;
+ _anim->_doBlack = true;
+
+ _mainDisplay = true;
+ // Sets the correct button list
+ interfaceOn();
+ _graphics->drawPanel();
+ drawRoomMessage(curInv, _closeDataPtr);
+ } else {
+ _breadCrumbs[0]._roomNum = 0;
+ _droppingCrumbs = false;
+
+ // Need to hide indicator!!!!
+ mayShowCrumbIndicatorOff();
+ }
+ }
+ break;
+ }
+
+ _graphics->screenUpdate();
+}
+
+void LabEngine::performAction(uint16 actionMode, Common::Point curPos, uint16 &curInv) {
+ eatMessages();
+
+ switch (actionMode) {
+ case 0:
+ // Take something.
+ if (doActionRule(curPos, actionMode, _roomNum))
+ _curFileName = _newFileName;
+ else if (takeItem(curPos))
+ drawStaticMessage(kTextTakeItem);
+ else if (doActionRule(curPos, kRuleActionTakeDef, _roomNum))
+ _curFileName = _newFileName;
+ else if (doActionRule(curPos, kRuleActionTake, 0))
+ _curFileName = _newFileName;
+ else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
+ drawStaticMessage(kTextNothing);
+
+ break;
+
+ case 1:
+ case 2:
+ case 3:
+ // Manipulate an object, Open up a "door" or Close a "door"
+ if (doActionRule(curPos, actionMode, _roomNum))
+ _curFileName = _newFileName;
+ else if (!doActionRule(curPos, actionMode, 0)) {
+ if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
+ drawStaticMessage(kTextNothing);
+ }
+ break;
+
+ case 4: {
+ // Look at closeups
+ const CloseData *tmpClosePtr = _closeDataPtr;
+ setCurrentClose(curPos, &tmpClosePtr, true);
+
+ if (_closeDataPtr == tmpClosePtr) {
+ if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
+ drawStaticMessage(kTextNothing);
+ } else if (!tmpClosePtr->_graphicName.empty()) {
+ _anim->_doBlack = true;
+ _closeDataPtr = tmpClosePtr;
+ } else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
+ drawStaticMessage(kTextNothing);
+ }
+ break;
+
+ case 5:
+ if (_conditions->in(curInv)) {
+ // Use an item on something else
+ if (doOperateRule(curPos, curInv)) {
+ _curFileName = _newFileName;
+
+ if (!_conditions->in(curInv))
+ decIncInv(&curInv, false);
+ }
+ else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
+ drawStaticMessage(kTextNothing);
+ }
+ }
+}
+
+void LabEngine::go() {
+ _isHiRes = ((getFeatures() & GF_LOWRES) == 0);
+ _graphics->setUpScreens();
+
+ _event->initMouse();
+ if (_msgFont)
+ _graphics->freeFont(&_msgFont);
+
+ if (getPlatform() != Common::kPlatformAmiga)
+ _msgFont = _resource->getFont("F:AvanteG.12");
+ else
+ _msgFont = _resource->getFont("F:Map.fon");
+
+ // If the user has requested to load a game from the launcher, skip the intro
+ if (!ConfMan.hasKey("save_slot")) {
+ _event->mouseHide();
+ _introPlaying = true;
+ Intro *intro = new Intro(this);
+ intro->play();
+ delete intro;
+ _introPlaying = false;
+ _event->mouseShow();
+ }
+
+ mainGameLoop();
+
+ _graphics->freeFont(&_msgFont);
+ _graphics->freePict();
+
+ freeScreens();
+
+ _music->freeMusic();
+}
+
+MainButton LabEngine::followCrumbs() {
+ // kDirectionNorth, kDirectionSouth, kDirectionEast, kDirectionWest
+ MainButton movement[4][4] = {
+ { kButtonForward, kButtonRight, kButtonRight, kButtonLeft },
+ { kButtonRight, kButtonForward, kButtonLeft, kButtonRight },
+ { kButtonLeft, kButtonRight, kButtonForward, kButtonRight },
+ { kButtonRight, kButtonLeft, kButtonRight, kButtonForward }
+ };
+
+ if (_isCrumbWaiting) {
+ if (_system->getMillis() <= _crumbTimestamp)
+ return kButtonNone;
+
+ _isCrumbWaiting = false;
+ }
+
+ if (!_isCrumbTurning)
+ _breadCrumbs[_numCrumbs--]._roomNum = 0;
+
+ // Is the current crumb this room? If not, logic error.
+ if (_roomNum != _breadCrumbs[_numCrumbs]._roomNum) {
+ _numCrumbs = 0;
+ _breadCrumbs[0]._roomNum = 0;
+ _droppingCrumbs = false;
+ _followingCrumbs = false;
+ return kButtonNone;
+ }
+
+ Direction exitDir;
+ // which direction is last crumb
+ if (_breadCrumbs[_numCrumbs]._direction == kDirectionEast)
+ exitDir = kDirectionWest;
+ else if (_breadCrumbs[_numCrumbs]._direction == kDirectionWest)
+ exitDir = kDirectionEast;
+ else if (_breadCrumbs[_numCrumbs]._direction == kDirectionNorth)
+ exitDir = kDirectionSouth;
+ else
+ exitDir = kDirectionNorth;
+
+ MainButton moveDir = movement[_direction][exitDir];
+
+ if (_numCrumbs == 0) {
+ _isCrumbTurning = false;
+ _breadCrumbs[0]._roomNum = 0;
+ _droppingCrumbs = false;
+ _followingCrumbs = false;
+ } else {
+ _isCrumbTurning = (moveDir != kButtonForward);
+ _isCrumbWaiting = true;
+
+ int theDelay = (_followCrumbsFast ? 1000 / 4 : 1000);
+ _crumbTimestamp = theDelay + _system->getMillis();
+ }
+
+ return moveDir;
+}
+
+
+void LabEngine::mayShowCrumbIndicator() {
+ static byte dropCrumbsImageData[CRUMBSWIDTH * CRUMBSHEIGHT] = {
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
+ 4, 7, 7, 3, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 7, 7, 4,
+ 4, 7, 4, 4, 0, 0, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 3, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 2, 3, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 3, 3, 3, 4, 4, 4, 4, 4, 4, 0, 0, 3, 2, 3, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 0, 4, 7, 7, 7, 7, 7, 7, 4, 3, 2, 2, 2, 3, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 4, 7, 7, 4, 4, 4, 4, 7, 7, 4, 3, 3, 3, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 4, 7, 4, 4, 0, 0, 4, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 4, 4, 4, 3, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 0, 4, 3, 2, 3, 0, 0, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 0, 0, 3, 2, 3, 0, 0, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 4, 0, 0, 0, 0, 0, 3, 2, 2, 2, 3, 4, 4, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 4, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 4, 0, 0, 0, 0, 4, 7, 4,
+ 0, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0, 0, 0, 0, 0, 4, 7, 4,
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 4, 7, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 3, 0, 0, 0, 0, 4, 7, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 3, 0, 0, 0, 0, 4, 7, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 3, 0, 0, 4, 4, 7, 4,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 4,
+ 0, 0, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0
+ };
+
+ if (getPlatform() != Common::kPlatformWindows)
+ return;
+
+ if (_droppingCrumbs && _mainDisplay) {
+ static byte *imgData = new byte[CRUMBSWIDTH * CRUMBSHEIGHT];
+ memcpy(imgData, dropCrumbsImageData, CRUMBSWIDTH * CRUMBSHEIGHT);
+ static Image dropCrumbsImage(CRUMBSWIDTH, CRUMBSHEIGHT, imgData, this);
+
+ dropCrumbsImage.drawMaskImage(612, 4);
+ }
+}
+
+void LabEngine::mayShowCrumbIndicatorOff() {
+ static byte dropCrumbsOffImageData[CRUMBSWIDTH * CRUMBSHEIGHT] = {
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 0,
+ 4, 8, 8, 3, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 8, 8, 4,
+ 4, 8, 4, 4, 0, 0, 3, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 3, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 3, 8, 8, 8, 3, 0, 0, 0, 0, 0, 0, 0, 3, 8, 3, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 3, 3, 3, 4, 4, 4, 4, 4, 4, 0, 0, 3, 8, 3, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 0, 4, 8, 8, 8, 8, 8, 8, 4, 3, 8, 8, 8, 3, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 4, 8, 8, 4, 4, 4, 4, 8, 8, 4, 3, 3, 3, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 4, 8, 4, 4, 0, 0, 4, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 4, 4, 4, 3, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 0, 4, 3, 8, 3, 0, 0, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 0, 0, 3, 8, 3, 0, 0, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 4, 0, 0, 0, 0, 0, 3, 8, 8, 8, 3, 4, 4, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 4, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 4, 0, 0, 0, 0, 4, 8, 4,
+ 0, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 0, 0, 0, 0, 0, 4, 8, 4,
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0, 0, 0, 0, 0, 4, 8, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 3, 0, 0, 0, 0, 4, 8, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 3, 0, 0, 0, 0, 4, 8, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 8, 8, 3, 0, 0, 4, 4, 8, 4,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 4,
+ 0, 0, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0
+ };
+
+ if (getPlatform() != Common::kPlatformWindows)
+ return;
+
+ if (_mainDisplay) {
+ static byte *imgData = new byte[CRUMBSWIDTH * CRUMBSHEIGHT];
+ memcpy(imgData, dropCrumbsOffImageData, CRUMBSWIDTH * CRUMBSHEIGHT);
+ static Image dropCrumbsOffImage(CRUMBSWIDTH, CRUMBSHEIGHT, imgData, this);
+
+ dropCrumbsOffImage.drawMaskImage(612, 4);
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/eventman.cpp b/engines/lab/eventman.cpp
new file mode 100644
index 0000000000..a94ddbf16b
--- /dev/null
+++ b/engines/lab/eventman.cpp
@@ -0,0 +1,213 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/events.h"
+
+#include "lab/lab.h"
+
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+
+namespace Lab {
+
+static const byte mouseData[] = {
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 7, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 7, 7, 1, 0, 0, 0, 0, 0, 0,
+ 1, 7, 7, 7, 1, 0, 0, 0, 0, 0,
+ 1, 7, 7, 7, 7, 1, 0, 0, 0, 0,
+ 1, 7, 7, 7, 7, 7, 1, 0, 0, 0,
+ 1, 7, 7, 7, 7, 7, 7, 1, 0, 0,
+ 1, 7, 7, 7, 7, 7, 7, 7, 1, 0,
+ 1, 7, 7, 7, 7, 7, 1, 1, 1, 1,
+ 1, 7, 7, 1, 7, 7, 1, 0, 0, 0,
+ 1, 7, 1, 0, 1, 7, 7, 1, 0, 0,
+ 1, 1, 0, 0, 1, 7, 7, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 7, 7, 1, 0,
+ 0, 0, 0, 0, 0, 1, 7, 7, 1, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0
+};
+
+#define MOUSE_WIDTH 10
+#define MOUSE_HEIGHT 15
+
+EventManager::EventManager(LabEngine *vm) : _vm(vm) {
+ _leftClick = false;
+ _rightClick = false;
+
+ _lastButtonHit = nullptr;
+ _screenButtonList = nullptr;
+ _hitButton = nullptr;
+ _mousePos = Common::Point(0, 0);
+ _keyPressed = Common::KEYCODE_INVALID;
+}
+
+Button *EventManager::checkButtonHit(ButtonList *buttonList, Common::Point pos) {
+ for (ButtonList::iterator buttonItr = buttonList->begin(); buttonItr != buttonList->end(); ++buttonItr) {
+ Button *button = *buttonItr;
+ Common::Rect buttonRect(button->_x, button->_y, button->_x + button->_image->_width - 1, button->_y + button->_image->_height - 1);
+
+ if (buttonRect.contains(pos) && button->_isEnabled) {
+ if (_vm->_isHiRes) {
+ _hitButton = button;
+ } else {
+ button->_altImage->drawImage(button->_x, button->_y);
+
+ for (int i = 0; i < 3; i++)
+ _vm->waitTOF();
+
+ button->_image->drawImage(button->_x, button->_y);
+ }
+
+ return button;
+ }
+ }
+
+ return nullptr;
+}
+
+void EventManager::attachButtonList(ButtonList *buttonList) {
+ if (_screenButtonList != buttonList)
+ _lastButtonHit = nullptr;
+
+ _screenButtonList = buttonList;
+}
+
+Button *EventManager::getButton(uint16 id) {
+ for (ButtonList::iterator buttonItr = _screenButtonList->begin(); buttonItr != _screenButtonList->end(); ++buttonItr) {
+ Button *button = *buttonItr;
+ if (button->_buttonId == id)
+ return button;
+ }
+
+ return nullptr;
+}
+
+void EventManager::updateMouse() {
+ if (!_hitButton)
+ return;
+
+ _hitButton->_altImage->drawImage(_hitButton->_x, _hitButton->_y);
+ for (int i = 0; i < 3; i++)
+ _vm->waitTOF();
+ _hitButton->_image->drawImage(_hitButton->_x, _hitButton->_y);
+
+ _hitButton = nullptr;
+ _vm->_graphics->screenUpdate();
+}
+
+void EventManager::initMouse() {
+ _vm->_system->setMouseCursor(mouseData, MOUSE_WIDTH, MOUSE_HEIGHT, 0, 0, 0);
+ _vm->_system->showMouse(false);
+
+ setMousePos(Common::Point(_vm->_graphics->_screenWidth / 2, _vm->_graphics->_screenHeight / 2));
+}
+
+void EventManager::mouseShow() {
+ _vm->_system->showMouse(true);
+}
+
+void EventManager::mouseHide() {
+ _vm->_system->showMouse(false);
+}
+
+void EventManager::setMousePos(Common::Point pos) {
+ if (_vm->_isHiRes)
+ _vm->_system->warpMouse(pos.x, pos.y);
+ else
+ _vm->_system->warpMouse(pos.x * 2, pos.y);
+}
+
+void EventManager::processInput() {
+ Common::Event event;
+ Button *curButton = nullptr;
+
+ while (_vm->_system->getEventManager()->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_LBUTTONDOWN:
+ if (_screenButtonList)
+ curButton = checkButtonHit(_screenButtonList, _vm->_isHiRes ? _mousePos : Common::Point(_mousePos.x / 2, _mousePos.y));
+
+ if (curButton)
+ _lastButtonHit = curButton;
+ else
+ _leftClick = true;
+ break;
+ case Common::EVENT_RBUTTONDOWN:
+ _rightClick = true;
+ break;
+ case Common::EVENT_MOUSEMOVE:
+ _mousePos = event.mouse;
+ break;
+ case Common::EVENT_KEYDOWN:
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_LEFTBRACKET:
+ _vm->changeVolume(-1);
+ break;
+ case Common::KEYCODE_RIGHTBRACKET:
+ _vm->changeVolume(1);
+ break;
+ case Common::KEYCODE_d:
+ if (event.kbd.hasFlags(Common::KBD_CTRL)) {
+ // Open debugger console
+ _vm->_console->attach();
+ continue;
+ }
+ // Intentional fall through
+ default:
+ _keyPressed = event.kbd;
+ break;
+ }
+ break;
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RTL:
+ default:
+ break;
+ }
+ }
+
+ _vm->_system->copyRectToScreen(_vm->_graphics->_displayBuffer, _vm->_graphics->_screenWidth, 0, 0, _vm->_graphics->_screenWidth, _vm->_graphics->_screenHeight);
+ _vm->_console->onFrame();
+ _vm->_system->updateScreen();
+}
+
+Common::Point EventManager::updateAndGetMousePos() {
+ processInput();
+
+ return _mousePos;
+}
+
+void EventManager::simulateEvent() {
+ // Simulate an event by setting an unused key
+ _keyPressed = Common::KeyState(Common::KEYCODE_SEMICOLON);
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/eventman.h b/engines/lab/eventman.h
new file mode 100644
index 0000000000..f26e2eba1c
--- /dev/null
+++ b/engines/lab/eventman.h
@@ -0,0 +1,131 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_EVENTMAN_H
+#define LAB_EVENTMAN_H
+
+#include "common/events.h"
+
+namespace Lab {
+
+class LabEngine;
+class Image;
+
+struct IntuiMessage {
+ MessageClass _msgClass;
+ uint16 _code; // KeyCode or Button Id
+ uint16 _qualifier;
+ Common::Point _mouse;
+};
+
+struct Button {
+ uint16 _x, _y, _buttonId;
+ Common::KeyCode _keyEquiv; // the key which activates this button
+ bool _isEnabled;
+ Image *_image, *_altImage;
+};
+
+typedef Common::List<Button *> ButtonList;
+
+class EventManager {
+private:
+ LabEngine *_vm;
+
+ bool _leftClick;
+ bool _rightClick;
+
+ Button *_hitButton;
+ Button *_lastButtonHit;
+ ButtonList *_screenButtonList;
+ Common::Point _mousePos;
+ Common::KeyState _keyPressed;
+
+private:
+ /**
+ * Checks whether or not the cords fall within one of the buttons in a list
+ * of buttons.
+ */
+ Button *checkButtonHit(ButtonList *buttonList, Common::Point pos);
+
+ /**
+ * Checks whether or not the coords fall within one of the buttons in a list
+ * of buttons.
+ */
+ Button *checkNumButtonHit(ButtonList *buttonList, Common::KeyCode key);
+
+public:
+ EventManager (LabEngine *vm);
+
+ void attachButtonList(ButtonList *buttonList);
+ Button *createButton(uint16 x, uint16 y, uint16 id, Common::KeyCode key, Image *image, Image *altImage);
+ void toggleButton(Button *button, uint16 penColor, bool enable);
+
+ /**
+ * Draws a button list to the screen.
+ */
+ void drawButtonList(ButtonList *buttonList);
+ void freeButtonList(ButtonList *buttonList);
+ Button *getButton(uint16 id);
+
+ IntuiMessage *getMsg();
+
+ /**
+ * Initializes the mouse.
+ */
+ void initMouse();
+
+ /**
+ * Shows the mouse.
+ */
+ void mouseShow();
+
+ /**
+ * Hides the mouse.
+ */
+ void mouseHide();
+ void processInput();
+
+ /**
+ * Moves the mouse to new co-ordinates.
+ */
+ void setMousePos(Common::Point pos);
+ void updateMouse();
+ Common::Point updateAndGetMousePos();
+
+ /**
+ * Simulates an event for the game main loop, when a game is
+ * loaded or when the user teleports to a scene
+ */
+ void simulateEvent();
+};
+
+} // End of namespace Lab
+
+#endif // LAB_EVENTMAN_H
diff --git a/engines/lab/image.cpp b/engines/lab/image.cpp
new file mode 100644
index 0000000000..ec516718e8
--- /dev/null
+++ b/engines/lab/image.cpp
@@ -0,0 +1,136 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/file.h"
+
+#include "lab/lab.h"
+
+#include "lab/dispman.h"
+#include "lab/image.h"
+
+namespace Lab {
+
+Image::Image(Common::File *s, LabEngine *vm) : _vm(vm) {
+ _width = s->readUint16LE();
+ _height = s->readUint16LE();
+ s->skip(4);
+
+ uint32 size = _width * _height;
+ if (size & 1)
+ size++;
+
+ _imageData = new byte[size];
+ s->read(_imageData, size);
+ _autoFree = true;
+}
+
+Image::~Image() {
+ if (_autoFree)
+ delete[] _imageData;
+}
+
+void Image::setData(byte *d, bool autoFree) {
+ if (_autoFree)
+ delete[] _imageData;
+ _imageData = d;
+ _autoFree = autoFree;
+}
+
+void Image::blitBitmap(uint16 srcX, uint16 srcY, Image *imgDest,
+ uint16 destX, uint16 destY, uint16 width, uint16 height, byte masked) {
+ int clipWidth = width;
+ int clipHeight = height;
+ int destWidth = (imgDest) ? imgDest->_width : _vm->_graphics->_screenWidth;
+ int destHeight = (imgDest) ? imgDest->_height : _vm->_graphics->_screenHeight;
+ byte *destBuffer = (imgDest) ? imgDest->_imageData : _vm->_graphics->getCurrentDrawingBuffer();
+
+ if (destX + clipWidth > destWidth)
+ clipWidth = destWidth - destX;
+
+ if (destY + clipHeight > destHeight)
+ clipHeight = destHeight - destY;
+
+ if ((clipWidth > 0) && (clipHeight > 0)) {
+ byte *img = _imageData + srcY * _width + srcX;
+ byte *dest = destBuffer + destY * destWidth + destX;
+
+ if (!masked) {
+ for (int i = 0; i < clipHeight; i++) {
+ memcpy(dest, img, clipWidth);
+ img += _width;
+ dest += destWidth;
+ }
+ } else {
+ for (int i = 0; i < clipHeight; i++) {
+ for (int j = 0; j < clipWidth; j++) {
+ byte c = img[j];
+
+ if (c)
+ dest[j] = c - 1;
+ }
+
+ img += _width;
+ dest += destWidth;
+ }
+ }
+ }
+}
+
+void Image::drawImage(uint16 x, uint16 y) {
+ blitBitmap(0, 0, nullptr, x, y, _width, _height, false);
+}
+
+void Image::drawMaskImage(uint16 x, uint16 y) {
+ blitBitmap(0, 0, nullptr, x, y, _width, _height, true);
+}
+
+void Image::readScreenImage(uint16 x, uint16 y) {
+ int clipWidth = _width;
+ int clipHeight = _height;
+
+ if (x + clipWidth > _vm->_graphics->_screenWidth)
+ clipWidth = _vm->_graphics->_screenWidth - x;
+
+ if (y + clipHeight > _vm->_graphics->_screenHeight)
+ clipHeight = _vm->_graphics->_screenHeight - y;
+
+ if ((clipWidth > 0) && (clipHeight > 0)) {
+ byte *img = _imageData;
+ byte *screen = _vm->_graphics->getCurrentDrawingBuffer() + y * _vm->_graphics->_screenWidth + x;
+
+ while (clipHeight-- > 0) {
+ memcpy(img, screen, clipWidth);
+ img += _width;
+ screen += _vm->_graphics->_screenWidth;
+ }
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/image.h b/engines/lab/image.h
new file mode 100644
index 0000000000..0f985e09eb
--- /dev/null
+++ b/engines/lab/image.h
@@ -0,0 +1,83 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_IMAGE_H
+#define LAB_IMAGE_H
+
+namespace Common {
+ class File;
+}
+
+namespace Lab {
+
+class LabEngine;
+
+class Image {
+ LabEngine *_vm;
+
+public:
+ uint16 _width;
+ uint16 _height;
+ byte *_imageData;
+
+ Image(LabEngine *vm) : _width(0), _height(0), _imageData(nullptr), _vm(vm), _autoFree(true) {}
+ Image(int w, int h, byte *d, LabEngine *vm, bool autoFree = true) : _width(w), _height(h), _imageData(d), _vm(vm), _autoFree(autoFree) {}
+ Image(Common::File *s, LabEngine *vm);
+ ~Image();
+
+ void setData(byte *d, bool autoFree = true);
+
+ /**
+ * Draws an image to the screen.
+ */
+ void drawImage(uint16 x, uint16 y);
+
+ /**
+ * Draws an image to the screen with transparency.
+ */
+ void drawMaskImage(uint16 x, uint16 y);
+
+ /**
+ * Reads an image from the screen.
+ */
+ void readScreenImage(uint16 x, uint16 y);
+
+ /**
+ * Blits a piece of one image to another.
+ */
+ void blitBitmap(uint16 srcX, uint16 srcY, Image *imgDest, uint16 destX, uint16 destY, uint16 width, uint16 height, byte masked);
+
+private:
+ bool _autoFree; ///< Free _imageData in destructor?
+};
+
+} // End of namespace Lab
+
+#endif // LAB_IMAGE_H
diff --git a/engines/lab/interface.cpp b/engines/lab/interface.cpp
new file mode 100644
index 0000000000..30f2f13fa5
--- /dev/null
+++ b/engines/lab/interface.cpp
@@ -0,0 +1,152 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/events.h"
+
+#include "lab/lab.h"
+
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+Button *EventManager::createButton(uint16 x, uint16 y, uint16 id, Common::KeyCode key, Image *image, Image *altImage) {
+ Button *button = new Button();
+
+ if (button) {
+ button->_x = _vm->_utils->vgaScaleX(x);
+ button->_y = y;
+ button->_buttonId = id;
+ button->_keyEquiv = key;
+ button->_image = image;
+ button->_altImage = altImage;
+ button->_isEnabled = true;
+
+ return button;
+ } else
+ return nullptr;
+}
+
+void EventManager::freeButtonList(ButtonList *buttonList) {
+ for (ButtonList::iterator buttonIter = buttonList->begin(); buttonIter != buttonList->end(); ++buttonIter) {
+ Button *button = *buttonIter;
+ delete button->_image;
+ delete button->_altImage;
+ delete button;
+ }
+
+ buttonList->clear();
+}
+
+void EventManager::drawButtonList(ButtonList *buttonList) {
+ for (ButtonList::iterator button = buttonList->begin(); button != buttonList->end(); ++button) {
+ toggleButton((*button), 1, true);
+
+ if (!(*button)->_isEnabled)
+ toggleButton((*button), 1, false);
+ }
+}
+
+void EventManager::toggleButton(Button *button, uint16 disabledPenColor, bool enable) {
+ if (!enable)
+ _vm->_graphics->checkerBoardEffect(disabledPenColor, button->_x, button->_y, button->_x + button->_image->_width - 1, button->_y + button->_image->_height - 1);
+ else
+ button->_image->drawImage(button->_x, button->_y);
+
+ button->_isEnabled = enable;
+}
+
+Button *EventManager::checkNumButtonHit(ButtonList *buttonList, Common::KeyCode key) {
+ uint16 gkey = key - '0';
+
+ if (!buttonList)
+ return nullptr;
+
+ for (ButtonList::iterator buttonItr = buttonList->begin(); buttonItr != buttonList->end(); ++buttonItr) {
+ Button *button = *buttonItr;
+ if (!button->_isEnabled)
+ continue;
+
+ if ((gkey - 1 == button->_buttonId) || (gkey == 0 && button->_buttonId == 9) || (button->_keyEquiv != Common::KEYCODE_INVALID && key == button->_keyEquiv)) {
+ button->_altImage->drawImage(button->_x, button->_y);
+ _vm->_system->delayMillis(80);
+ button->_image->drawImage(button->_x, button->_y);
+ return button;
+ }
+ }
+
+ return nullptr;
+}
+
+IntuiMessage *EventManager::getMsg() {
+ static IntuiMessage message;
+
+ updateMouse();
+ processInput();
+
+ if (_lastButtonHit) {
+ updateMouse();
+ message._msgClass = kMessageButtonUp;
+ message._code = _lastButtonHit->_buttonId;
+ message._qualifier = _keyPressed.flags;
+ _lastButtonHit = nullptr;
+ return &message;
+ } else if (_leftClick || _rightClick) {
+ message._msgClass = (_leftClick) ? kMessageLeftClick : kMessageRightClick;
+ message._qualifier = 0;
+ message._mouse = _mousePos;
+ if (!_vm->_isHiRes)
+ message._mouse.x /= 2;
+ _leftClick = _rightClick = false;
+ return &message;
+ } else if (_keyPressed.keycode != Common::KEYCODE_INVALID) {
+ Button *curButton = checkNumButtonHit(_screenButtonList, _keyPressed.keycode);
+
+ if (curButton) {
+ message._msgClass = kMessageButtonUp;
+ message._code = curButton->_buttonId;
+ } else {
+ message._msgClass = kMessageRawKey;
+ message._code = _keyPressed.keycode;
+ }
+
+ message._qualifier = _keyPressed.flags;
+ message._mouse = _mousePos;
+
+ _keyPressed.keycode = Common::KEYCODE_INVALID;
+
+ return &message;
+ } else
+ return nullptr;
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/intro.cpp b/engines/lab/intro.cpp
new file mode 100644
index 0000000000..b2a1b2059e
--- /dev/null
+++ b/engines/lab/intro.cpp
@@ -0,0 +1,418 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/intro.h"
+#include "lab/music.h"
+#include "lab/resource.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+Intro::Intro(LabEngine *vm) : _vm(vm) {
+ _quitIntro = false;
+ _font = _vm->_resource->getFont("F:Map.fon");
+}
+
+Intro::~Intro() {
+ _vm->_graphics->freeFont(&_font);
+}
+
+void Intro::introEatMessages() {
+ while (1) {
+ IntuiMessage *msg = _vm->_event->getMsg();
+
+ if (_vm->shouldQuit()) {
+ _quitIntro = true;
+ return;
+ }
+
+ if (!msg)
+ return;
+
+ if ((msg->_msgClass == kMessageRightClick)
+ || ((msg->_msgClass == kMessageRawKey) && (msg->_code == Common::KEYCODE_ESCAPE)))
+ _quitIntro = true;
+ }
+}
+
+void Intro::doPictText(const Common::String filename, bool isScreen) {
+ Common::String path = Common::String("Lab:rooms/Intro/") + filename;
+
+ uint timeDelay = (isScreen) ? 35 : 7;
+ _vm->updateEvents();
+
+ if (_quitIntro)
+ return;
+
+ uint32 lastMillis = 0;
+ bool drawNextText = true;
+ bool doneFl = false;
+ bool begin = true;
+
+ Common::File *textFile = _vm->_resource->openDataFile(path);
+ char *textBuffer = new char[textFile->size()];
+ textFile->read(textBuffer, textFile->size());
+ delete textFile;
+ const char *curText = textBuffer;
+
+ while (1) {
+ if (drawNextText) {
+ if (begin)
+ begin = false;
+ else if (isScreen)
+ _vm->_graphics->fade(false);
+
+ if (isScreen) {
+ _vm->_graphics->rectFillScaled(10, 10, 310, 190, 7);
+
+ curText += _vm->_graphics->flowText(_font, _vm->_isHiRes ? 0 : -1, 5, 7, false, false, true, true, _vm->_utils->vgaRectScale(14, 11, 306, 189), curText);
+ _vm->_graphics->fade(true);
+ } else
+ curText += _vm->_graphics->longDrawMessage(Common::String(curText), false);
+
+ doneFl = (*curText == 0);
+
+ drawNextText = false;
+ introEatMessages();
+
+ if (_quitIntro) {
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ }
+
+ lastMillis = _vm->_system->getMillis();
+ }
+
+ IntuiMessage *msg = _vm->_event->getMsg();
+ if (_vm->shouldQuit()) {
+ _quitIntro = true;
+ return;
+ }
+
+ if (!msg) {
+ _vm->updateEvents();
+ _vm->_anim->diffNextFrame();
+
+ uint32 elapsedSeconds = (_vm->_system->getMillis() - lastMillis) / 1000;
+
+ if (elapsedSeconds > timeDelay) {
+ if (doneFl) {
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ } else {
+ drawNextText = true;
+ }
+ }
+ _vm->waitTOF();
+ } else {
+ uint32 msgClass = msg->_msgClass;
+ uint16 code = msg->_code;
+
+ if ((msgClass == kMessageRightClick) ||
+ ((msgClass == kMessageRawKey) && (code == Common::KEYCODE_ESCAPE))) {
+ _quitIntro = true;
+
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ } else if ((msgClass == kMessageLeftClick) || (msgClass == kMessageRightClick)) {
+ if (msgClass == kMessageLeftClick) {
+ if (doneFl) {
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ } else
+ drawNextText = true;
+ }
+
+ introEatMessages();
+
+ if (_quitIntro) {
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ }
+ }
+
+ if (doneFl) {
+ if (isScreen)
+ _vm->_graphics->fade(false);
+
+ delete[] textBuffer;
+ return;
+ } else
+ drawNextText = true;
+ }
+ } // while(1)
+}
+
+void Intro::nReadPict(const Common::String filename, bool playOnce, bool noPalChange, bool doBlack, int wait) {
+ Common::String finalFileName = Common::String("P:Intro/") + filename;
+
+ _vm->updateEvents();
+ introEatMessages();
+
+ if (_quitIntro)
+ return;
+
+ if (noPalChange)
+ _vm->_anim->_noPalChange = true;
+
+ _vm->_anim->_doBlack = doBlack;
+ _vm->_anim->stopDiffEnd();
+ _vm->_graphics->readPict(finalFileName, playOnce);
+
+ if (wait) {
+ for (int i = 0; i < wait / 10; i++) {
+ _vm->updateEvents();
+ introEatMessages();
+ if (_quitIntro)
+ break;
+ _vm->_system->delayMillis(10);
+ }
+ }
+
+ if (noPalChange)
+ _vm->_anim->_noPalChange = false;
+}
+
+void Intro::play() {
+ uint16 palette[16] = {
+ 0x0000, 0x0855, 0x0FF9, 0x0EE7,
+ 0x0ED5, 0x0DB4, 0x0CA2, 0x0C91,
+ 0x0B80, 0x0B80, 0x0B91, 0x0CA2,
+ 0x0CB3, 0x0DC4, 0x0DD6, 0x0EE7
+ };
+
+ if (_vm->getPlatform() == Common::kPlatformDOS) {
+ nReadPict("EA0");
+ nReadPict("EA1");
+ nReadPict("EA2");
+ nReadPict("EA3");
+ } else if (_vm->getPlatform() == Common::kPlatformWindows) {
+ nReadPict("WYRMKEEP", true, false, false, 4000);
+ }
+
+ _vm->_graphics->blackAllScreen();
+
+ if (_vm->getPlatform() != Common::kPlatformAmiga)
+ _vm->_music->changeMusic("Music:BackGrou", false, false);
+ else
+ _vm->_music->changeMusic("Music:BackGround", false, false);
+
+ if (_vm->getPlatform() == Common::kPlatformDOS)
+ nReadPict("TNDcycle.pic", true, true);
+ else
+ nReadPict("TNDcycle2.pic", true, true);
+
+ _vm->_graphics->_fadePalette = palette;
+
+ for (int i = 0; i < 16; i++) {
+ palette[i] = ((_vm->_anim->_diffPalette[i * 3] >> 2) << 8) +
+ ((_vm->_anim->_diffPalette[i * 3 + 1] >> 2) << 4) +
+ (_vm->_anim->_diffPalette[i * 3 + 2] >> 2);
+ }
+
+ _vm->updateEvents();
+ introEatMessages();
+ if (!_quitIntro)
+ _vm->_graphics->fade(true);
+
+ for (int times = 0; times < 150; times++) {
+ _vm->updateEvents();
+ introEatMessages();
+ if (_quitIntro)
+ break;
+
+ uint16 temp = palette[2];
+
+ for (int i = 2; i < 15; i++)
+ palette[i] = palette[i + 1];
+
+ palette[15] = temp;
+
+ _vm->_graphics->setAmigaPal(palette);
+ _vm->waitTOF();
+ }
+
+ if (!_quitIntro) {
+ _vm->_graphics->fade(false);
+ _vm->_graphics->blackAllScreen();
+ _vm->updateEvents();
+ introEatMessages();
+ }
+
+ nReadPict("Title.A");
+ nReadPict("AB", true, false, false, 1000);
+ nReadPict("BA");
+ nReadPict("AC", true, false, false, 1000);
+ nReadPict("CA");
+ nReadPict("AD", true, false, false, 1000);
+ nReadPict("DA");
+
+ _vm->_graphics->blackAllScreen();
+ _vm->updateEvents();
+ introEatMessages();
+
+ nReadPict("Intro.1", true, true);
+
+ for (int i = 0; i < 16; i++) {
+ palette[i] = ((_vm->_anim->_diffPalette[i * 3] >> 2) << 8) +
+ ((_vm->_anim->_diffPalette[i * 3 + 1] >> 2) << 4) +
+ (_vm->_anim->_diffPalette[i * 3 + 2] >> 2);
+ }
+
+ doPictText("i.1", true);
+ if (_vm->getPlatform() == Common::kPlatformWindows) {
+ doPictText("i.2A", true);
+ doPictText("i.2B", true);
+ }
+
+ _vm->_graphics->blackAllScreen();
+ _vm->updateEvents();
+ introEatMessages();
+
+ nReadPict("Station1", true, false, true);
+ doPictText("i.3");
+
+ nReadPict("Station2", true, false, true);
+ doPictText("i.4");
+
+ nReadPict("Stiles4", true, false, true);
+ doPictText("i.5");
+
+ nReadPict("Stiles3", true, false, true);
+ doPictText("i.6");
+
+ if (_vm->getPlatform() == Common::kPlatformWindows)
+ nReadPict("Platform2", true, false, true);
+ else
+ nReadPict("Platform", true, false, true);
+ doPictText("i.7");
+
+ nReadPict("Subway.1", true, false, true);
+ doPictText("i.8");
+
+ nReadPict("Subway.2", true, false, true);
+
+ doPictText("i.9");
+ doPictText("i.10");
+ doPictText("i.11");
+
+ for (int i = 0; i < 50; i++) {
+ _vm->updateEvents();
+ introEatMessages();
+ if (_quitIntro)
+ break;
+
+ for (int idx = (8 * 3); idx < (255 * 3); idx++)
+ _vm->_anim->_diffPalette[idx] = 255 - _vm->_anim->_diffPalette[idx];
+
+ _vm->waitTOF();
+ _vm->_graphics->setPalette(_vm->_anim->_diffPalette, 256);
+ _vm->waitTOF();
+ _vm->waitTOF();
+ }
+
+ doPictText("i.12");
+ doPictText("i.13");
+
+ nReadPict("Daed0");
+ doPictText("i.14");
+
+ nReadPict("Daed1");
+ doPictText("i.15");
+
+ nReadPict("Daed2");
+ doPictText("i.16");
+ doPictText("i.17");
+ doPictText("i.18");
+
+ nReadPict("Daed3");
+ doPictText("i.19");
+ doPictText("i.20");
+
+ nReadPict("Daed4");
+ doPictText("i.21");
+
+ nReadPict("Daed5");
+ doPictText("i.22");
+ doPictText("i.23");
+ doPictText("i.24");
+
+ nReadPict("Daed6");
+ doPictText("i.25");
+ doPictText("i.26");
+
+ nReadPict("Daed7", false);
+ doPictText("i.27");
+ doPictText("i.28");
+
+ nReadPict("Daed8");
+ doPictText("i.29");
+ doPictText("i.30");
+
+ nReadPict("Daed9");
+ doPictText("i.31");
+ doPictText("i.32");
+ doPictText("i.33");
+
+ nReadPict("Daed9a");
+ nReadPict("Daed10");
+ doPictText("i.34");
+ doPictText("i.35");
+ doPictText("i.36");
+
+ nReadPict("SubX");
+
+ if (_quitIntro) {
+ _vm->_graphics->rectFill(0, 0, _vm->_graphics->_screenWidth - 1, _vm->_graphics->_screenHeight - 1, 0);
+ _vm->_anim->_doBlack = true;
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/intro.h b/engines/lab/intro.h
new file mode 100644
index 0000000000..f86d3baf69
--- /dev/null
+++ b/engines/lab/intro.h
@@ -0,0 +1,67 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_INTRO_H
+#define LAB_INTRO_H
+
+namespace Lab {
+
+class Intro {
+public:
+ Intro(LabEngine *vm);
+ ~Intro();
+
+ /**
+ * Does the introduction sequence for Labyrinth.
+ */
+ void play();
+
+private:
+ /**
+ * Goes through, and responds to all the intuition messages currently in the
+ * message queue.
+ */
+ void introEatMessages();
+
+ /**
+ * Reads in a picture.
+ */
+ void doPictText(const Common::String filename, bool isScreen = false);
+
+ void nReadPict(const Common::String filename, bool playOnce = true, bool noPalChange = false, bool doBlack = false, int wait = 0);
+
+ LabEngine *_vm;
+ bool _quitIntro;
+ TextFont *_font;
+};
+
+} // End of namespace Lab
+
+#endif // LAB_INTRO_H
diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp
new file mode 100644
index 0000000000..47b864d98b
--- /dev/null
+++ b/engines/lab/lab.cpp
@@ -0,0 +1,270 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/debug-channels.h"
+#include "common/error.h"
+
+#include "engines/util.h"
+#include "gui/message.h"
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/console.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+#include "lab/speciallocks.h"
+#include "lab/utils.h"
+
+namespace Lab {
+LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
+ : Engine(syst), _gameDescription(gameDesc), _extraGameFeatures(0) {
+ _lastWaitTOFTicks = 0;
+
+ _isHiRes = false;
+ _roomNum = -1;
+ for (int i = 0; i < MAX_CRUMBS; i++) {
+ _breadCrumbs[i]._roomNum = 0;
+ _breadCrumbs[i]._direction = kDirectionNorth;
+ }
+
+ _numCrumbs = 0;
+ _droppingCrumbs = false;
+ _followingCrumbs = false;
+ _followCrumbsFast = false;
+ _isCrumbTurning = false;
+ _isCrumbWaiting = false;
+ _noUpdateDiff = false;
+ _quitLab = false;
+ _mainDisplay = true;
+
+ _numInv = 0;
+ _manyRooms = 0;
+ _direction = 0;
+ _highestCondition = 0;
+ _crumbTimestamp = 0;
+ _maxRooms = 0;
+
+ _event = nullptr;
+ _resource = nullptr;
+ _music = nullptr;
+ _anim = nullptr;
+ _closeDataPtr = nullptr;
+ _conditions = nullptr;
+ _graphics = nullptr;
+ _rooms = nullptr;
+ _roomsFound = nullptr;
+ _specialLocks = nullptr;
+ _utils = nullptr;
+ _console = nullptr;
+ _journalBackImage = nullptr;
+
+ _lastTooLong = false;
+ _interfaceOff = false;
+ _alternate = false;
+
+ for (int i = 0; i < 20; i++)
+ _moveImages[i] = nullptr;
+
+ for (int i = 0; i < 10; i++)
+ _invImages[i] = nullptr;
+
+ _curFileName = " ";
+ _msgFont = nullptr;
+ _inventory = nullptr;
+
+ _imgMap = nullptr;
+ _imgRoom = nullptr;
+ _imgUpArrowRoom = nullptr;
+ _imgDownArrowRoom = nullptr;
+ _imgBridge = nullptr;
+ _imgHRoom = nullptr;
+ _imgVRoom = nullptr;
+ _imgMaze = nullptr;
+ _imgHugeMaze = nullptr;
+ _imgPath = nullptr;
+ for (int i = 0; i < 4; i++)
+ _imgMapX[i] = nullptr;
+ _maps = nullptr;
+
+ _blankJournal = nullptr;
+ _journalFont = nullptr;
+ _journalPage = 0;
+ _lastPage = false;
+ _monitorPage = 0;
+ _monitorTextFilename = "";
+ _monitorButton = nullptr;
+ _monitorButtonHeight = 1;
+ for (int i = 0; i < 20; i++)
+ _highPalette[i] = 0;
+ _introPlaying = false;
+}
+
+LabEngine::~LabEngine() {
+ // Remove all of our debug levels here
+ DebugMan.clearAllDebugChannels();
+
+ freeMapData();
+ delete[] _rooms;
+ delete[] _inventory;
+
+ delete _conditions;
+ delete _roomsFound;
+ delete _event;
+ delete _resource;
+ delete _music;
+ delete _anim;
+ delete _graphics;
+ delete _specialLocks;
+ delete _utils;
+ delete _console;
+ delete _journalBackImage;
+}
+
+Common::Error LabEngine::run() {
+ if (getFeatures() & GF_LOWRES)
+ initGraphics(320, 200, false);
+ else
+ initGraphics(640, 480, true);
+
+ _event = new EventManager(this);
+ _resource = new Resource(this);
+ _music = new Music(this);
+ _graphics = new DisplayMan(this);
+ _anim = new Anim(this);
+ _specialLocks = new SpecialLocks(this);
+ _utils = new Utils(this);
+ _console = new Console(this);
+ _journalBackImage = new Image(this);
+
+ if (getPlatform() == Common::kPlatformWindows) {
+ // Check if this is the Wyrmkeep trial
+ Common::File roomFile;
+ bool knownVersion = true;
+ bool roomFileOpened = roomFile.open("game/rooms/48");
+
+ if (!roomFileOpened)
+ knownVersion = false;
+ else if (roomFile.size() != 892)
+ knownVersion = false;
+ else {
+ roomFile.seek(352);
+ byte checkByte = roomFile.readByte();
+ if (checkByte == 0x00) {
+ // Full Windows version
+ } else if (checkByte == 0x80) {
+ // Wyrmkeep trial version
+ _extraGameFeatures = GF_WINDOWS_TRIAL;
+
+ GUI::MessageDialog trialMessage("This is a trial Windows version of the game. To play the full version, you will need to use the original interpreter and purchase a key from Wyrmkeep");
+ trialMessage.runModal();
+ } else {
+ knownVersion = false;
+ }
+
+ roomFile.close();
+
+ if (!knownVersion) {
+ warning("Unknown Windows version found, please report this version to the ScummVM team");
+ return Common::kNoGameDataFoundError;
+ }
+ }
+ }
+
+ go();
+
+ return Common::kNoError;
+}
+
+Common::String LabEngine::generateSaveFileName(uint slot) {
+ return Common::String::format("%s.%03u", _targetName.c_str(), slot);
+}
+
+void LabEngine::drawStaticMessage(byte index) {
+ _graphics->drawMessage(_resource->getStaticText((StaticText)index), false);
+}
+
+void LabEngine::changeVolume(int delta) {
+ int sfxPrev = _mixer->getVolumeForSoundType(Audio::Mixer::kSFXSoundType);
+ int musicPrev = _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType);
+ int sfxNew = (delta > 0) ? MIN<int>(sfxPrev + 10, Audio::Mixer::kMaxMixerVolume) : MAX<int>(sfxPrev - 10, 0);
+ int musicNew = (delta > 0) ? MIN<int>(musicPrev + 10, Audio::Mixer::kMaxMixerVolume) : MAX<int>(musicPrev - 10, 0);
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, sfxNew);
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, musicNew);
+}
+
+void LabEngine::waitTOF() {
+ _system->copyRectToScreen(_graphics->_displayBuffer, _graphics->_screenWidth, 0, 0, _graphics->_screenWidth, _graphics->_screenHeight);
+ _system->updateScreen();
+
+ _event->processInput();
+
+ uint32 now;
+
+ for (now = _system->getMillis(); now - _lastWaitTOFTicks <= 0xF; now = _system->getMillis() )
+ _system->delayMillis(_lastWaitTOFTicks - now + 17);
+
+ _lastWaitTOFTicks = now;
+}
+
+void LabEngine::updateEvents() {
+ _event->processInput();
+ _event->updateMouse();
+}
+
+Common::Error LabEngine::loadGameState(int slot) {
+ bool result = loadGame(slot);
+ _curFileName = " ";
+ _closeDataPtr = nullptr;
+ _mainDisplay = true;
+ _followingCrumbs = false;
+ _event->simulateEvent();
+ _graphics->_longWinInFront = false;
+ return (result) ? Common::kNoError : Common::kUserCanceled;
+}
+
+Common::Error LabEngine::saveGameState(int slot, const Common::String &desc) {
+ bool result = saveGame(slot, desc);
+ return (result) ? Common::kNoError : Common::kUserCanceled;
+}
+
+bool LabEngine::canLoadGameStateCurrently() {
+ return !_anim->isPlaying() && !_introPlaying;
+}
+
+bool LabEngine::canSaveGameStateCurrently() {
+ return !_anim->isPlaying() && !_introPlaying;
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/lab.h b/engines/lab/lab.h
new file mode 100644
index 0000000000..2c3a723f3e
--- /dev/null
+++ b/engines/lab/lab.h
@@ -0,0 +1,508 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_LAB_H
+#define LAB_LAB_H
+
+#include "common/system.h"
+#include "common/random.h"
+#include "common/rect.h"
+#include "common/savefile.h"
+#include "engines/engine.h"
+#include "engines/savestate.h"
+
+#include "lab/console.h"
+#include "lab/image.h"
+#include "lab/labsets.h"
+
+struct ADGameDescription;
+
+namespace Lab {
+
+struct MapData;
+struct Action;
+struct CloseData;
+struct Button;
+struct IntuiMessage;
+struct InventoryData;
+struct RoomData;
+struct Rule;
+struct TextFont;
+struct ViewData;
+
+class Anim;
+class DisplayMan;
+class EventManager;
+class Image;
+class Music;
+class Resource;
+class SpecialLocks;
+class Utils;
+
+struct SaveGameHeader {
+ byte _version;
+ SaveStateDescriptor _descr;
+ uint16 _roomNumber;
+ uint16 _direction;
+};
+
+enum GameFeatures {
+ GF_LOWRES = 1 << 0,
+ GF_WINDOWS_TRIAL = 1 << 1
+};
+
+typedef Common::List<Button *> ButtonList;
+
+struct CrumbData {
+ uint16 _roomNum;
+ uint16 _direction;
+};
+
+#define MAX_CRUMBS 128
+
+typedef Common::List<Rule> RuleList;
+typedef Common::List<Action> ActionList;
+typedef Common::List<CloseData> CloseDataList;
+typedef Common::List<ViewData> ViewDataList;
+
+enum Direction {
+ kDirectionNorth,
+ kDirectionSouth,
+ kDirectionEast,
+ kDirectionWest
+};
+
+enum MainButton {
+ kButtonNone = -1,
+ kButtonPickup,
+ kButtonUse,
+ kButtonOpen,
+ kButtonClose,
+ kButtonLook,
+ kButtonInventory,
+ kButtonLeft,
+ kButtonForward,
+ kButtonRight,
+ kButtonMap
+};
+
+enum MessageClass {
+ kMessageLeftClick,
+ kMessageRightClick,
+ kMessageButtonUp,
+ kMessageRawKey
+};
+
+class LabEngine : public Engine {
+ friend class Console;
+
+private:
+ bool _interfaceOff;
+ bool _isCrumbWaiting;
+ bool _lastTooLong;
+ bool _lastPage;
+ bool _mainDisplay;
+ bool _noUpdateDiff;
+ bool _quitLab;
+
+ byte *_blankJournal;
+
+ int _lastWaitTOFTicks;
+
+ uint16 _direction;
+ uint16 _highPalette[20];
+ uint16 _journalPage;
+ uint16 _maxRooms;
+ uint16 _monitorPage;
+ uint16 _monitorButtonHeight;
+
+ uint32 _extraGameFeatures;
+
+ Common::String _journalText;
+ Common::String _journalTextTitle;
+ Common::String _nextFileName;
+ Common::String _newFileName;
+ Common::String _monitorTextFilename;
+
+ const CloseData *_closeDataPtr;
+ ButtonList _journalButtonList;
+ ButtonList _mapButtonList;
+ Image *_imgMap, *_imgRoom, *_imgUpArrowRoom, *_imgDownArrowRoom, *_imgBridge;
+ Image *_imgHRoom, *_imgVRoom, *_imgMaze, *_imgHugeMaze, *_imgPath;
+ Image *_imgMapX[4];
+ InventoryData *_inventory;
+ MapData *_maps;
+ Image *_monitorButton;
+ Image *_journalBackImage;
+ TextFont *_journalFont;
+ bool _introPlaying;
+
+public:
+ bool _alternate;
+ bool _droppingCrumbs;
+ bool _followingCrumbs;
+ bool _followCrumbsFast;
+ bool _isCrumbTurning;
+ bool _isHiRes;
+
+ int _roomNum;
+
+ uint16 _highestCondition;
+ uint16 _manyRooms;
+ uint16 _numCrumbs;
+ uint16 _numInv;
+
+ uint32 _crumbTimestamp;
+
+ Common::String _curFileName;
+
+ Anim *_anim;
+ CrumbData _breadCrumbs[MAX_CRUMBS];
+ DisplayMan *_graphics;
+ EventManager *_event;
+ ButtonList _invButtonList;
+ ButtonList _moveButtonList;
+ Image *_invImages[10];
+ Image *_moveImages[20];
+ LargeSet *_conditions, *_roomsFound;
+ Music *_music;
+ Resource *_resource;
+ RoomData *_rooms;
+ TextFont *_msgFont;
+ SpecialLocks *_specialLocks;
+ Utils *_utils;
+ Console *_console;
+ GUI::Debugger *getDebugger() { return _console; }
+
+public:
+ LabEngine(OSystem *syst, const ADGameDescription *gameDesc);
+ ~LabEngine();
+
+ virtual Common::Error run();
+ void go();
+
+ const ADGameDescription *_gameDescription;
+ Common::Platform getPlatform() const;
+ uint32 getFeatures() const;
+
+ bool hasFeature(EngineFeature f) const;
+ Common::String generateSaveFileName(uint slot);
+
+ void changeVolume(int delta);
+ uint16 getDirection() { return _direction; }
+
+ /**
+ * Returns the current picture name.
+ */
+ Common::String getPictName(bool useClose);
+ uint16 getQuarters();
+ void setDirection(uint16 direction) { _direction = direction; };
+ void setQuarters(uint16 quarters);
+ void updateEvents();
+ void waitTOF();
+
+ Common::Error loadGameState(int slot);
+ Common::Error saveGameState(int slot, const Common::String &desc);
+ bool canLoadGameStateCurrently();
+ bool canSaveGameStateCurrently();
+
+private:
+ /**
+ * Checks whether all the conditions in a condition list are met.
+ */
+ bool checkConditions(const Common::Array<int16> &cond);
+
+ /**
+ * Decrements the current inventory number.
+ */
+ void decIncInv(uint16 *CurInv, bool dec);
+
+ /**
+ * Processes the action list.
+ */
+ void doActions(const ActionList &actionList);
+
+ /**
+ * Goes through the rules if an action is taken.
+ */
+ bool doActionRule(Common::Point pos, int16 action, int16 roomNum);
+
+ /**
+ * Does the work for doActionRule.
+ */
+ bool doActionRuleSub(int16 action, int16 roomNum, const CloseData *closePtr, bool allowDefaults);
+
+ /**
+ * Checks whether the close up is one of the special case closeups.
+ */
+ bool doCloseUp(const CloseData *closePtr);
+
+ /**
+ * Goes through the rules if the user tries to go forward.
+ */
+ bool doGoForward();
+
+ /**
+ * Does the journal processing.
+ */
+ void doJournal();
+
+ /**
+ * Goes through the rules if the user tries to go to the main view
+ */
+ bool doMainView();
+
+ /**
+ * Does the map processing.
+ */
+ void doMap(uint16 curRoom);
+
+ /**
+ * Does what's necessary for the monitor.
+ */
+ void doMonitor(const Common::String background, const Common::String textfile, bool isinteractive, Common::Rect textRect);
+
+ /**
+ * Does the things to properly set up the detective notes.
+ */
+ void doNotes();
+
+ /**
+ * Does the work for doActionRule.
+ */
+ bool doOperateRuleSub(int16 itemNum, int16 roomNum, const CloseData *closePtr, bool allowDefaults);
+
+ /**
+ * Goes through the rules if the user tries to operate an item on an object.
+ */
+ bool doOperateRule(Common::Point pos, int16 ItemNum);
+
+ /**
+ * Goes through the rules if the user tries to turn.
+ */
+ bool doTurn(uint16 from, uint16 to);
+
+ /**
+ * If the user hits the "Use" button; things that can get used on themselves.
+ */
+ bool doUse(uint16 curInv);
+
+ /**
+ * Does the things to properly set up the old west newspaper. Assumes that
+ * OpenHiRes already called.
+ */
+ void doWestPaper();
+
+ /**
+ * Draws the current direction to the screen.
+ */
+ void drawDirection(const CloseData *closePtr);
+
+ /**
+ * Draws the journal from page x.
+ */
+ void drawJournal(uint16 wipenum, bool needFade);
+
+ /**
+ * Draws the text to the back journal screen to the appropriate Page number
+ */
+ void drawJournalText();
+
+ /**
+ * Draws the map
+ */
+ void drawMap(uint16 curRoom, uint16 curMsg, uint16 floorNum, bool fadeIn);
+
+ /**
+ * Draws the text for the monitor.
+ */
+ void drawMonText(const char *text, TextFont *monitorFont, Common::Rect textRect, bool isinteractive);
+
+ /**
+ * Draws a room map.
+ */
+ void drawRoomMap(uint16 curRoom, bool drawMarkFl);
+
+ /**
+ * Draws the message for the room.
+ */
+ void drawRoomMessage(uint16 curInv, const CloseData *closePtr);
+ void drawStaticMessage(byte index);
+
+ /**
+ * Eats all the available messages.
+ */
+ void eatMessages();
+
+ /**
+ * Goes through the list of closeups to find a match.
+ * @note Known bug here. If there are two objects that have closeups, and
+ * some of the closeups have the same hit boxes, then this returns the first
+ * occurrence of the object with the same hit box.
+ */
+ const CloseData *findClosePtrMatch(const CloseData *closePtr, const CloseDataList &list);
+
+ /**
+ * Checks if a floor has been visited.
+ */
+ bool floorVisited(uint16 floorNum);
+
+ /**
+ * New code to allow quick(er) return navigation in game.
+ */
+ MainButton followCrumbs();
+ void freeMapData();
+ void freeScreens();
+ bool processEvent(MessageClass tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
+ uint16 &curInv, IntuiMessage *curMsg, bool &forceDraw, uint16 buttonId, uint16 &actionMode);
+
+ /**
+ * Gets the current inventory name.
+ */
+ Common::String getInvName(uint16 curInv);
+
+ /**
+ * Returns the floor to show when the down arrow is pressed
+ * @note The original did not show all the visited floors, but we do
+ */
+ uint16 getLowerFloor(uint16 floorNum);
+
+ /**
+ * Gets an object, if any, from the user's click on the screen.
+ */
+ const CloseData *getObject(Common::Point pos, const CloseData *closePtr);
+
+ /**
+ * Returns the floor to show when the up arrow is pressed
+ * @note The original did not show all the visited floors, but we do
+ */
+ uint16 getUpperFloor(uint16 floorNum);
+
+ /**
+ * Gets the current ViewDataPointer.
+ */
+ ViewData *getViewData(uint16 roomNum, uint16 direction);
+
+ /**
+ * Turns the interface off.
+ */
+ void interfaceOff();
+
+ /**
+ * Turns the interface on.
+ */
+ void interfaceOn();
+
+ /**
+ * Loads in the data for the journal.
+ */
+ void loadJournalData();
+
+ /**
+ * Loads in the map data.
+ */
+ void loadMapData();
+
+ /**
+ * The main game loop.
+ */
+ void mainGameLoop();
+ void showLab2Teaser();
+ void mayShowCrumbIndicator();
+ void mayShowCrumbIndicatorOff();
+
+ /**
+ * Permanently flips the imagery of a button.
+ */
+ void perFlipButton(uint16 buttonId);
+
+ /**
+ * process a arrow button movement.
+ */
+ uint16 processArrow(uint16 curDirection, uint16 arrow);
+
+ /**
+ * Processes user input.
+ */
+ void processJournal();
+
+ /**
+ * Processes the map.
+ */
+ void processMap(uint16 curRoom);
+
+ /**
+ * Processes user input.
+ */
+ void processMonitor(const char *ntext, TextFont *monitorFont, bool isInteractive, Common::Rect textRect);
+
+ /**
+ * Figures out what a room's coordinates should be.
+ */
+ Common::Rect roomCoords(uint16 curRoom);
+ bool saveRestoreGame();
+
+ /**
+ * Sets the current close up data.
+ */
+ void setCurrentClose(Common::Point pos, const CloseData **closePtrList, bool useAbsoluteCoords, bool next=false);
+
+ /**
+ * Takes the currently selected item.
+ */
+ bool takeItem(Common::Point pos);
+
+ /**
+ * Does the turn page wipe.
+ */
+ void turnPage(bool fromLeft);
+ bool processKey(IntuiMessage *curMsg, uint32 msgClass, uint16 &qualifier, Common::Point &curPos, uint16 &curInv, bool &forceDraw, uint16 code);
+ void processMainButton(uint16 &curInv, uint16 &lastInv, uint16 &oldDirection, bool &forceDraw, uint16 buttonId, uint16 &actionMode);
+ void processAltButton(uint16 &curInv, uint16 &lastInv, uint16 buttonId, uint16 &actionMode);
+ void performAction(uint16 actionMode, Common::Point curPos, uint16 &curInv);
+
+private:
+ /**
+ * Writes the game out to disk.
+ */
+ bool saveGame(int slot, const Common::String desc);
+
+ /**
+ * Reads the game from disk.
+ */
+ bool loadGame(int slot);
+ void writeSaveGameHeader(Common::OutSaveFile *out, const Common::String &saveName);
+};
+
+bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header);
+
+} // End of namespace Lab
+
+#endif // LAB_LAB_H
diff --git a/engines/lab/labsets.cpp b/engines/lab/labsets.cpp
new file mode 100644
index 0000000000..3e84275fa4
--- /dev/null
+++ b/engines/lab/labsets.cpp
@@ -0,0 +1,77 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/file.h"
+
+#include "lab/lab.h"
+
+#include "lab/labsets.h"
+#include "lab/resource.h"
+
+namespace Lab {
+
+LargeSet::LargeSet(uint16 last, LabEngine *vm) : _vm(vm) {
+ last = (((last + 15) >> 4) << 4);
+
+ _array = new uint16[last >> 3];
+ memset(_array, 0, last >> 3);
+ _lastElement = last;
+}
+
+LargeSet::~LargeSet() {
+ delete[] _array;
+}
+
+bool LargeSet::in(uint16 element) {
+ return ((1 << ((element - 1) % 16)) & (_array[(element - 1) >> 4])) > 0;
+}
+
+void LargeSet::inclElement(uint16 element) {
+ _array[(element - 1) >> 4] |= 1 << ((element - 1) % 16);
+}
+
+void LargeSet::exclElement(uint16 element) {
+ _array[(element - 1) >> 4] &= ~(1 << ((element - 1) % 16));
+}
+
+bool LargeSet::readInitialConditions(const Common::String fileName) {
+ Common::File *file = _vm->_resource->openDataFile(fileName, MKTAG('C', 'O', 'N', '0'));
+
+ uint16 conditions = file->readUint16LE();
+ for (int i = 0; i < conditions; i++) {
+ inclElement(file->readUint16LE());
+ }
+
+ delete file;
+ return true;
+}
+
+
+} // End of namespace Lab
diff --git a/engines/lab/labsets.h b/engines/lab/labsets.h
new file mode 100644
index 0000000000..afd997e9eb
--- /dev/null
+++ b/engines/lab/labsets.h
@@ -0,0 +1,61 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_LABSETS_H
+#define LAB_LABSETS_H
+
+namespace Lab {
+
+//---------------------------
+//----- From LabSets.c ------
+//---------------------------
+
+class LabEngine;
+
+class LargeSet {
+public:
+ LargeSet(uint16 last, LabEngine *vm);
+ ~LargeSet();
+ bool in(uint16 element);
+ void inclElement(uint16 element);
+ void exclElement(uint16 element);
+ bool readInitialConditions(const Common::String fileName);
+
+private:
+ LabEngine *_vm;
+
+public:
+ uint16 _lastElement;
+ uint16 *_array;
+};
+
+} // End of namespace Lab
+
+#endif // LAB_LABSETS_H
diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp
new file mode 100644
index 0000000000..2b283aec4a
--- /dev/null
+++ b/engines/lab/map.cpp
@@ -0,0 +1,553 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "lab/lab.h"
+
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+#include "lab/labsets.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+/*---------------------------------------------------------------------------*/
+/*------------------------------ The Map stuff ------------------------------*/
+/*---------------------------------------------------------------------------*/
+
+enum MapFloor {
+ kFloorNone,
+ kFloorLower,
+ kFloorMiddle,
+ kFloorUpper,
+ kFloorMedMaze,
+ kFloorHedgeMaze,
+ kFloorSurMaze,
+ kFloorCarnival
+};
+
+void LabEngine::loadMapData() {
+ Common::File *mapImages = _resource->openDataFile("P:MapImage");
+
+ _imgMap = new Image(mapImages, this);
+ _imgRoom = new Image(mapImages, this);
+ _imgUpArrowRoom = new Image(mapImages, this);
+ _imgDownArrowRoom = new Image(mapImages, this);
+ _imgHRoom = new Image(mapImages, this);
+ _imgVRoom = new Image(mapImages, this);
+ _imgMaze = new Image(mapImages, this);
+ _imgHugeMaze = new Image(mapImages, this);
+
+ _imgMapX[kDirectionNorth] = new Image(mapImages, this);
+ _imgMapX[kDirectionEast] = new Image(mapImages, this);
+ _imgMapX[kDirectionSouth] = new Image(mapImages, this);
+ _imgMapX[kDirectionWest] = new Image(mapImages, this);
+ _imgPath = new Image(mapImages, this);
+ _imgBridge = new Image(mapImages, this);
+
+ _mapButtonList.push_back(_event->createButton( 8, _utils->vgaScaleY(105), 0, Common::KEYCODE_ESCAPE, new Image(mapImages, this), new Image(mapImages, this))); // back
+ _mapButtonList.push_back(_event->createButton( 55, _utils->vgaScaleY(105), 1, Common::KEYCODE_UP, new Image(mapImages, this), new Image(mapImages, this))); // up
+ _mapButtonList.push_back(_event->createButton(101, _utils->vgaScaleY(105), 2, Common::KEYCODE_DOWN, new Image(mapImages, this), new Image(mapImages, this))); // down
+
+ delete mapImages;
+
+ Common::File *mapFile = _resource->openDataFile("Lab:Maps", MKTAG('M', 'A', 'P', '0'));
+ updateEvents();
+
+ _maxRooms = mapFile->readUint16LE();
+ _maps = new MapData[_maxRooms + 1]; // will be freed when the user exits the map
+ for (int i = 0; i <= _maxRooms; i++) {
+ _maps[i]._x = mapFile->readUint16LE();
+ _maps[i]._y = mapFile->readUint16LE();
+ _maps[i]._pageNumber = mapFile->readUint16LE();
+ _maps[i]._specialID = (SpecialRoom) mapFile->readUint16LE();
+ _maps[i]._mapFlags = mapFile->readUint32LE();
+ }
+
+ delete mapFile;
+}
+
+void LabEngine::freeMapData() {
+ _event->freeButtonList(&_mapButtonList);
+
+ delete _imgMap;
+ delete _imgRoom;
+ delete _imgUpArrowRoom;
+ delete _imgDownArrowRoom;
+ delete _imgBridge;
+ delete _imgHRoom;
+ delete _imgVRoom;
+ delete _imgMaze;
+ delete _imgHugeMaze;
+ delete _imgPath;
+ for (int i = 0; i < 4; i++)
+ delete _imgMapX[i];
+ delete[] _maps;
+
+ _imgMap = nullptr;
+ _imgRoom = nullptr;
+ _imgUpArrowRoom = nullptr;
+ _imgDownArrowRoom = nullptr;
+ _imgBridge = nullptr;
+ _imgHRoom = nullptr;
+ _imgVRoom = nullptr;
+ _imgMaze = nullptr;
+ _imgHugeMaze = nullptr;
+ _imgPath = nullptr;
+ for (int i = 0; i < 4; i++)
+ _imgMapX[i] = nullptr;
+ _maps = nullptr;
+}
+
+Common::Rect LabEngine::roomCoords(uint16 curRoom) {
+ Image *curRoomImg = nullptr;
+
+ switch (_maps[curRoom]._specialID) {
+ case kNormalRoom:
+ case kUpArrowRoom:
+ case kDownArrowRoom:
+ curRoomImg = _imgRoom;
+ break;
+ case kBridgeRoom:
+ curRoomImg = _imgBridge;
+ break;
+ case kVerticalCorridor:
+ curRoomImg = _imgVRoom;
+ break;
+ case kHorizontalCorridor:
+ curRoomImg = _imgHRoom;
+ break;
+ default:
+ // Some rooms (like the map) do not have an image
+ break;
+ }
+
+ int x1 = _utils->mapScaleX(_maps[curRoom]._x);
+ int y1 = _utils->mapScaleY(_maps[curRoom]._y);
+ int x2 = x1;
+ int y2 = y1;
+
+ if (curRoomImg) {
+ x2 += curRoomImg->_width;
+ y2 += curRoomImg->_height;
+ }
+
+ return Common::Rect(x1, y1, x2, y2);
+}
+
+void LabEngine::drawRoomMap(uint16 curRoom, bool drawMarkFl) {
+ uint16 drawX, drawY, offset;
+
+ uint16 x = _utils->mapScaleX(_maps[curRoom]._x);
+ uint16 y = _utils->mapScaleY(_maps[curRoom]._y);
+ uint32 flags = _maps[curRoom]._mapFlags;
+
+ switch (_maps[curRoom]._specialID) {
+ case kNormalRoom:
+ case kUpArrowRoom:
+ case kDownArrowRoom:
+ if (_maps[curRoom]._specialID == kNormalRoom)
+ _imgRoom->drawImage(x, y);
+ else if (_maps[curRoom]._specialID == kDownArrowRoom)
+ _imgDownArrowRoom->drawImage(x, y);
+ else
+ _imgUpArrowRoom->drawImage(x, y);
+
+ offset = (_imgRoom->_width - _imgPath->_width) / 2;
+
+ if ((kDoorLeftNorth & flags) && (y >= _imgPath->_height))
+ _imgPath->drawImage(x + offset, y - _imgPath->_height);
+
+ if (kDoorLeftSouth & flags)
+ _imgPath->drawImage(x + offset, y + _imgRoom->_height);
+
+ offset = (_imgRoom->_height - _imgPath->_height) / 2;
+
+ if (kDoorLeftEast & flags)
+ _imgPath->drawImage(x + _imgRoom->_width, y + offset);
+
+ if (kDoorLeftWest & flags)
+ _imgPath->drawImage(x - _imgPath->_width, y + offset);
+
+ drawX = x + (_imgRoom->_width - _imgMapX[_direction]->_width) / 2;
+ drawY = y + (_imgRoom->_height - _imgMapX[_direction]->_height) / 2;
+
+ break;
+
+ case kBridgeRoom:
+ _imgBridge->drawImage(x, y);
+
+ drawX = x + (_imgBridge->_width - _imgMapX[_direction]->_width) / 2;
+ drawY = y + (_imgBridge->_height - _imgMapX[_direction]->_height) / 2;
+
+ break;
+
+ case kVerticalCorridor:
+ _imgVRoom->drawImage(x, y);
+
+ offset = (_imgVRoom->_width - _imgPath->_width) / 2;
+
+ if (kDoorLeftNorth & flags)
+ _imgPath->drawImage(x + offset, y - _imgPath->_height);
+
+ if (kDoorLeftSouth & flags)
+ _imgPath->drawImage(x + offset, y + _imgVRoom->_height);
+
+ offset = (_imgRoom->_height - _imgPath->_height) / 2;
+
+ if (kDoorLeftEast & flags)
+ _imgPath->drawImage(x + _imgVRoom->_width, y + offset);
+
+ if (kDoorLeftWest & flags)
+ _imgPath->drawImage(x - _imgPath->_width, y + offset);
+
+ if (kDoorBottomEast & flags)
+ _imgPath->drawImage(x + _imgVRoom->_width, y - offset - _imgPath->_height + _imgVRoom->_height);
+
+ if (kDoorBottomWest & flags)
+ _imgPath->drawImage(x - _imgPath->_width, y - offset - _imgPath->_height + _imgVRoom->_height);
+
+ offset = (_imgVRoom->_height - _imgPath->_height) / 2;
+
+ if (kDoorMiddleEast & flags)
+ _imgPath->drawImage(x + _imgVRoom->_width, y - offset - _imgPath->_height + _imgVRoom->_height);
+
+ if (kDoorMiddleWest & flags)
+ _imgPath->drawImage(x - _imgPath->_width, y - offset - _imgPath->_height + _imgVRoom->_height);
+
+ drawX = x + (_imgVRoom->_width - _imgMapX[_direction]->_width) / 2;
+ drawY = y + (_imgVRoom->_height - _imgMapX[_direction]->_height) / 2;
+
+ break;
+
+ case kHorizontalCorridor:
+ _imgHRoom->drawImage(x, y);
+
+ offset = (_imgRoom->_width - _imgPath->_width) / 2;
+
+ if (kDoorLeftNorth & flags)
+ _imgPath->drawImage(x + offset, y - _imgPath->_height);
+
+ if (kDoorLeftSouth & flags)
+ _imgPath->drawImage(x + offset, y + _imgRoom->_height);
+
+ if (kDoorRightNorth & flags)
+ _imgPath->drawImage(x - offset - _imgPath->_width + _imgHRoom->_width, y - _imgPath->_height);
+
+ if (kDoorRightSouth & flags)
+ _imgPath->drawImage(x - offset - _imgPath->_width + _imgHRoom->_width, y + _imgRoom->_height);
+
+ offset = (_imgHRoom->_width - _imgPath->_width) / 2;
+
+ if (kDoorMiddleNorth & flags)
+ _imgPath->drawImage(x - offset - _imgPath->_width + _imgHRoom->_width, y - _imgPath->_height);
+
+ if (kDoorMiddleSouth & flags)
+ _imgPath->drawImage(x - offset - _imgPath->_width + _imgHRoom->_width, y + _imgRoom->_height);
+
+ offset = (_imgRoom->_height - _imgPath->_height) / 2;
+
+ if (kDoorLeftEast & flags)
+ _imgPath->drawImage(x + _imgHRoom->_width, y + offset);
+
+ if (kDoorLeftWest & flags)
+ _imgPath->drawImage(x - _imgPath->_width, y + offset);
+
+ drawX = x + (_imgHRoom->_width - _imgMapX[_direction]->_width) / 2;
+ drawY = y + (_imgHRoom->_height - _imgMapX[_direction]->_height) / 2;
+
+ break;
+
+ default:
+ return;
+ }
+
+ if (drawMarkFl)
+ _imgMapX[_direction]->drawImage(drawX, drawY);
+}
+
+bool LabEngine::floorVisited(uint16 floorNum) {
+ for (int i = 0; i < _maxRooms; i++) {
+ if ((_maps[i]._pageNumber == floorNum) && _roomsFound->in(i) && _maps[i]._x)
+ return true;
+ }
+
+ return false;
+}
+
+uint16 LabEngine::getUpperFloor(uint16 floorNum) {
+ if ((floorNum == kFloorCarnival) || (floorNum == kFloorNone))
+ return kFloorNone;
+
+ for (int i = floorNum; i < kFloorCarnival; i++)
+ if (floorVisited(i + 1))
+ return i + 1;
+
+ return kFloorNone;
+}
+
+uint16 LabEngine::getLowerFloor(uint16 floorNum) {
+ if ((floorNum == kFloorLower) || (floorNum == kFloorNone))
+ return kFloorNone;
+
+ for (int i = floorNum; i > kFloorLower; i--)
+ if (floorVisited(i - 1))
+ return i - 1;
+
+ return kFloorNone;
+}
+
+void LabEngine::drawMap(uint16 curRoom, uint16 curMsg, uint16 floorNum, bool fadeIn) {
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, _graphics->_screenHeight - 1, 0);
+ _imgMap->drawImage(0, 0);
+ _event->drawButtonList(&_mapButtonList);
+
+ for (int i = 1; i <= _maxRooms; i++) {
+ if ((_maps[i]._pageNumber == floorNum) && _roomsFound->in(i) && _maps[i]._x) {
+ drawRoomMap(i, (bool)(i == curRoom));
+ }
+ }
+
+ updateEvents();
+
+ // Makes sure the X is drawn in corridors
+ // NOTE: this here on purpose just in case there's some weird
+ // condition, like the surreal maze where there are no rooms
+ if ((_maps[curRoom]._pageNumber == floorNum) && _roomsFound->in(curRoom) && _maps[curRoom]._x)
+ drawRoomMap(curRoom, true);
+
+ _event->toggleButton(_event->getButton(1), 12, (getUpperFloor(floorNum) != kFloorNone)); // up button
+ _event->toggleButton(_event->getButton(2), 12, (getLowerFloor(floorNum) != kFloorNone)); // down button
+
+ // Labyrinth specific code
+ if (floorNum == kFloorLower) {
+ if (floorVisited(kFloorSurMaze))
+ _imgMaze->drawImage(_utils->mapScaleX(538), _utils->mapScaleY(277));
+ } else if (floorNum == kFloorMiddle) {
+ if (floorVisited(kFloorCarnival))
+ _imgMaze->drawImage(_utils->mapScaleX(358), _utils->mapScaleY(72));
+
+ if (floorVisited(kFloorMedMaze))
+ _imgMaze->drawImage(_utils->mapScaleX(557), _utils->mapScaleY(325));
+ } else if (floorNum == kFloorUpper) {
+ if (floorVisited(kFloorHedgeMaze))
+ _imgHugeMaze->drawImage(_utils->mapScaleX(524), _utils->mapScaleY(97));
+ } else if (floorNum == kFloorSurMaze) {
+ Common::Rect textRect = Common::Rect(_utils->mapScaleX(360), 0, _utils->mapScaleX(660), _utils->mapScaleY(450));
+ const char *textPtr = _resource->getStaticText(kTextSurmazeMessage).c_str();
+ _graphics->flowText(_msgFont, 0, 7, 0, true, true, true, true, textRect, textPtr);
+ }
+
+ if ((floorNum >= kFloorLower) && (floorNum <= kFloorCarnival)) {
+ const char *textPrt = _resource->getStaticText(floorNum - 1).c_str();
+ _graphics->flowText(_msgFont, 0, 5, 3, true, true, true, true, _utils->vgaRectScale(14, 75, 134, 97), textPrt);
+ }
+
+ if (!_rooms[curMsg]._roomMsg.empty())
+ _graphics->flowText(_msgFont, 0, 5, 3, true, true, true, true, _utils->vgaRectScale(14, 148, 134, 186), _rooms[curMsg]._roomMsg.c_str());
+
+ if (fadeIn)
+ _graphics->fade(true);
+}
+
+void LabEngine::processMap(uint16 curRoom) {
+ byte place = 1;
+ uint16 curMsg = curRoom;
+ uint16 curFloor = _maps[curRoom]._pageNumber;
+
+ while (1) {
+ // Make sure we check the music at least after every message
+ updateEvents();
+ IntuiMessage *msg = _event->getMsg();
+ if (shouldQuit()) {
+ _quitLab = true;
+ return;
+ }
+
+ if (!msg) {
+ updateEvents();
+
+ byte newcolor[3];
+
+ if (place <= 14) {
+ newcolor[0] = 14 << 2;
+ newcolor[1] = place << 2;
+ newcolor[2] = newcolor[1];
+ } else {
+ newcolor[0] = 14 << 2;
+ newcolor[1] = (28 - place) << 2;
+ newcolor[2] = newcolor[1];
+ }
+
+ waitTOF();
+ _graphics->writeColorRegs(newcolor, 1, 1);
+ _event->updateMouse();
+ waitTOF();
+
+ place++;
+
+ if (place >= 28)
+ place = 1;
+
+ } else {
+ uint32 msgClass = msg->_msgClass;
+ uint16 msgCode = msg->_code;
+ uint16 mouseX = msg->_mouse.x;
+ uint16 mouseY = msg->_mouse.y;
+
+ if ((msgClass == kMessageRightClick) || ((msgClass == kMessageRawKey) && (msgCode == Common::KEYCODE_ESCAPE)))
+ return;
+
+ if (msgClass == kMessageButtonUp) {
+ if (msgCode == 0) {
+ // Quit menu button
+ return;
+ } else if (msgCode == 1) {
+ // Up arrow
+ uint16 upperFloor = getUpperFloor(curFloor);
+ if (upperFloor != kFloorNone) {
+ curFloor = upperFloor;
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ }
+ } else if (msgCode == 2) {
+ // Down arrow
+ uint16 lowerFloor = getLowerFloor(curFloor);
+ if (lowerFloor != kFloorNone) {
+ curFloor = lowerFloor;
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ }
+ }
+ } else if (msgClass == kMessageLeftClick) {
+ if ((curFloor == kFloorLower) && _utils->mapRectScale(538, 277, 633, 352).contains(mouseX, mouseY)
+ && floorVisited(kFloorSurMaze)) {
+ curFloor = kFloorSurMaze;
+
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ } else if ((curFloor == kFloorMiddle) && _utils->mapRectScale(358, 71, 452, 147).contains(mouseX, mouseY)
+ && floorVisited(kFloorCarnival)) {
+ curFloor = kFloorCarnival;
+
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ } else if ((curFloor == kFloorMiddle) && _utils->mapRectScale(557, 325, 653, 401).contains(mouseX, mouseY)
+ && floorVisited(kFloorMedMaze)) {
+ curFloor = kFloorMedMaze;
+
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ } else if ((curFloor == kFloorUpper) && _utils->mapRectScale(524, 97, 645, 207).contains(mouseX, mouseY)
+ && floorVisited(kFloorHedgeMaze)) {
+ curFloor = kFloorHedgeMaze;
+
+ _graphics->fade(false);
+ drawMap(curRoom, curMsg, curFloor, false);
+ _graphics->fade(true);
+ } else if (mouseX > _utils->mapScaleX(314)) {
+ uint16 oldMsg = curMsg;
+ Common::Rect curCoords;
+
+ for (int i = 1; i <= _maxRooms; i++) {
+ curCoords = roomCoords(i);
+
+ if ((_maps[i]._pageNumber == curFloor)
+ && _roomsFound->in(i) && curCoords.contains(Common::Point(mouseX, mouseY))) {
+ curMsg = i;
+ }
+ }
+
+ if (oldMsg != curMsg) {
+ if (!_rooms[curMsg]._roomMsg.empty())
+ _resource->readViews(curMsg);
+
+ const char *sptr;
+ if ((sptr = _rooms[curMsg]._roomMsg.c_str())) {
+ _graphics->rectFillScaled(13, 148, 135, 186, 3);
+ _graphics->flowText(_msgFont, 0, 5, 3, true, true, true, true, _utils->vgaRectScale(14, 148, 134, 186), sptr);
+
+ if (_maps[oldMsg]._pageNumber == curFloor)
+ drawRoomMap(oldMsg, (bool)(oldMsg == curRoom));
+
+ curCoords = roomCoords(curMsg);
+ int right = (curCoords.left + curCoords.right) / 2;
+ int left = right - 1;
+ int top, bottom;
+ top = bottom = (curCoords.top + curCoords.bottom) / 2;
+
+ if ((curMsg != curRoom) && (_maps[curMsg]._pageNumber == curFloor))
+ _graphics->rectFill(left, top, right, bottom, 1);
+ }
+ }
+ }
+ }
+
+ _graphics->screenUpdate();
+ }
+ }
+}
+
+void LabEngine::doMap(uint16 curRoom) {
+ static uint16 amigaMapPalette[] = {
+ 0x0BA8, 0x0C11, 0x0A74, 0x0076,
+ 0x0A96, 0x0DCB, 0x0CCA, 0x0222,
+ 0x0444, 0x0555, 0x0777, 0x0999,
+ 0x0AAA, 0x0ED0, 0x0EEE, 0x0694
+ };
+
+ _graphics->_fadePalette = amigaMapPalette;
+
+ updateEvents();
+ loadMapData();
+ _graphics->blackAllScreen();
+ _event->attachButtonList(&_mapButtonList);
+ drawMap(curRoom, curRoom, _maps[curRoom]._pageNumber, true);
+ _event->mouseShow();
+ _graphics->screenUpdate();
+ processMap(curRoom);
+ _event->attachButtonList(nullptr);
+ _graphics->fade(false);
+ _graphics->blackAllScreen();
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, _graphics->_screenHeight - 1, 0);
+ freeMapData();
+ _graphics->blackAllScreen();
+ _graphics->screenUpdate();
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/module.mk b/engines/lab/module.mk
new file mode 100644
index 0000000000..7bb86c8c1e
--- /dev/null
+++ b/engines/lab/module.mk
@@ -0,0 +1,30 @@
+MODULE := engines/lab
+
+MODULE_OBJS := \
+ anim.o \
+ console.o \
+ detection.o \
+ dispman.o \
+ engine.o \
+ eventman.o \
+ image.o \
+ interface.o \
+ intro.o \
+ lab.o \
+ labsets.o \
+ map.o \
+ music.o \
+ processroom.o \
+ resource.o \
+ savegame.o \
+ special.o \
+ speciallocks.o \
+ utils.o
+
+# This module can be built as a plugin
+ifeq ($(ENABLE_LAB), DYNAMIC_PLUGIN)
+PLUGIN := 1
+endif
+
+# Include common rules
+include $(srcdir)/rules.mk
diff --git a/engines/lab/music.cpp b/engines/lab/music.cpp
new file mode 100644
index 0000000000..8045c51044
--- /dev/null
+++ b/engines/lab/music.cpp
@@ -0,0 +1,178 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "audio/decoders/raw.h"
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/eventman.h"
+#include "lab/music.h"
+#include "lab/resource.h"
+
+namespace Lab {
+
+#define SAMPLESPEED 15000
+#define CLOWNROOM 123
+#define DIMROOM 80
+
+Music::Music(LabEngine *vm) : _vm(vm) {
+ _musicFile = nullptr;
+ _curRoomMusic = 1;
+ _storedPos = 0;
+}
+
+byte Music::getSoundFlags() {
+ byte soundFlags = Audio::FLAG_LITTLE_ENDIAN;
+ if (_vm->getPlatform() == Common::kPlatformWindows)
+ soundFlags |= Audio::FLAG_16BITS;
+ else if (_vm->getPlatform() == Common::kPlatformDOS)
+ soundFlags |= Audio::FLAG_UNSIGNED;
+
+ return soundFlags;
+}
+
+void Music::changeMusic(const Common::String filename, bool storeCurPos, bool seektoStoredPos) {
+ if (storeCurPos)
+ _storedPos = _musicFile->pos();
+
+ stopSoundEffect();
+ freeMusic();
+ _musicFile = _vm->_resource->openDataFile(filename);
+ if (seektoStoredPos)
+ _musicFile->seek(_storedPos);
+
+ Audio::SeekableAudioStream *audioStream = Audio::makeRawStream(_musicFile, SAMPLESPEED, getSoundFlags());
+ _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, new Audio::LoopingAudioStream(audioStream, 0));
+}
+
+void Music::playSoundEffect(uint16 sampleSpeed, uint32 length, bool loop, Common::File *dataFile) {
+ stopSoundEffect();
+
+ // NOTE: We need to use malloc(), cause this will be freed with free()
+ // by the music code
+ byte *soundData = (byte *)malloc(length);
+ dataFile->read(soundData, length);
+
+ Audio::SeekableAudioStream *audioStream = Audio::makeRawStream((const byte *)soundData, length, MAX<uint16>(sampleSpeed, 4000), getSoundFlags());
+ _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_sfxHandle, new Audio::LoopingAudioStream(audioStream, (loop) ? 0 : 1));
+}
+
+void Music::stopSoundEffect() {
+ if (isSoundEffectActive())
+ _vm->_mixer->stopHandle(_sfxHandle);
+}
+
+bool Music::isSoundEffectActive() const {
+ return _vm->_mixer->isSoundHandleActive(_sfxHandle);
+}
+
+void Music::freeMusic() {
+ _vm->_mixer->stopHandle(_musicHandle);
+ _vm->_mixer->stopHandle(_sfxHandle);
+ _musicFile = nullptr;
+}
+
+void Music::checkRoomMusic() {
+ if ((_curRoomMusic == _vm->_roomNum) || !_musicFile)
+ return;
+
+ if (_vm->_roomNum == CLOWNROOM) {
+ changeMusic("Music:Laugh", true, false);
+ } else if (_vm->_roomNum == DIMROOM) {
+ changeMusic("Music:Rm81", true, false);
+ } else if (_curRoomMusic == CLOWNROOM || _curRoomMusic == DIMROOM) {
+ if (_vm->getPlatform() != Common::kPlatformAmiga)
+ changeMusic("Music:Backgrou", false, true);
+ else
+ changeMusic("Music:Background", false, true);
+ }
+
+ _curRoomMusic = _vm->_roomNum;
+}
+
+bool Music::loadSoundEffect(const Common::String filename, bool loop, bool waitTillFinished) {
+ Common::File *file = _vm->_resource->openDataFile(filename, MKTAG('D', 'I', 'F', 'F'));
+ stopSoundEffect();
+
+ if (!file)
+ return false;
+
+ _vm->_anim->_doBlack = false;
+ readSound(waitTillFinished, loop, file);
+
+ return true;
+}
+
+void Music::readSound(bool waitTillFinished, bool loop, Common::File *file) {
+ uint32 magicBytes = file->readUint32LE();
+ if (magicBytes != 1219009121) {
+ warning("readSound: Bad signature, skipping");
+ return;
+ }
+ uint32 soundTag = file->readUint32LE();
+ uint32 soundSize = file->readUint32LE();
+
+ if (soundTag == 0)
+ file->skip(soundSize); // skip the header
+ else
+ return;
+
+ while (soundTag != 65535) {
+ _vm->updateEvents();
+ soundTag = file->readUint32LE();
+ soundSize = file->readUint32LE() - 8;
+
+ if ((soundTag == 30) || (soundTag == 31)) {
+ if (waitTillFinished) {
+ while (isSoundEffectActive()) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ }
+ }
+
+ file->skip(4);
+
+ uint16 sampleRate = file->readUint16LE();
+ file->skip(2);
+ playSoundEffect(sampleRate, soundSize, loop, file);
+ } else if (soundTag == 65535) {
+ if (waitTillFinished) {
+ while (isSoundEffectActive()) {
+ _vm->updateEvents();
+ _vm->waitTOF();
+ }
+ }
+ } else
+ file->skip(soundSize);
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/music.h b/engines/lab/music.h
new file mode 100644
index 0000000000..09bb9694ac
--- /dev/null
+++ b/engines/lab/music.h
@@ -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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_MUSIC_H
+#define LAB_MUSIC_H
+
+#include "common/file.h"
+#include "audio/mixer.h"
+#include "audio/audiostream.h"
+
+namespace Lab {
+
+class LabEngine;
+
+//---------------------------
+//----- From LabMusic.c -----
+//---------------------------
+
+#define MAXBUFFERS 5
+
+class Music {
+private:
+ LabEngine *_vm;
+
+ Common::File *_musicFile;
+ uint16 _curRoomMusic;
+ uint32 _storedPos;
+
+ Audio::SoundHandle _musicHandle;
+ Audio::SoundHandle _sfxHandle;
+
+private:
+ void readSound(bool waitTillFinished, bool loop, Common::File *file);
+ byte getSoundFlags();
+
+public:
+ Music(LabEngine *vm);
+
+ /**
+ * Changes the background music to something else.
+ */
+ void changeMusic(const Common::String filename, bool storeCurPos, bool seektoStoredPos);
+
+ /**
+ * Checks the music that should be playing in a particular room.
+ */
+ void checkRoomMusic();
+
+ /**
+ * Frees up the music buffers and closes the file.
+ */
+ void freeMusic();
+
+ bool isSoundEffectActive() const;
+ void playSoundEffect(uint16 sampleSpeed, uint32 length, bool loop, Common::File *dataFile);
+
+ /**
+ * Reads in a sound effect file. Ignores any graphics.
+ */
+ bool loadSoundEffect(const Common::String filename, bool loop, bool waitTillFinished);
+
+ void stopSoundEffect();
+};
+
+} // End of namespace Lab
+
+#endif // LAB_MUSIC_H
diff --git a/engines/lab/processroom.cpp b/engines/lab/processroom.cpp
new file mode 100644
index 0000000000..491cdf39da
--- /dev/null
+++ b/engines/lab/processroom.cpp
@@ -0,0 +1,623 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "gui/message.h"
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/labsets.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+#define NOFILE "no file"
+
+bool LabEngine::checkConditions(const Common::Array<int16> &condition) {
+ for (unsigned int i = 0; i < condition.size(); ++i)
+ if (!_conditions->in(condition[i]))
+ return false;
+
+ return true;
+}
+
+ViewData *LabEngine::getViewData(uint16 roomNum, uint16 direction) {
+ if (_rooms[roomNum]._roomMsg.empty())
+ _resource->readViews(roomNum);
+
+ ViewDataList &views = _rooms[roomNum]._view[direction];
+ ViewDataList::iterator view;
+
+ for (view = views.begin(); view != views.end(); ++view) {
+ if (checkConditions(view->_condition))
+ return &(*view);
+ }
+
+ error("No view with matching condition found");
+}
+
+const CloseData *LabEngine::getObject(Common::Point pos, const CloseData *closePtr) {
+ const CloseDataList *list;
+ if (!closePtr)
+ list = &(getViewData(_roomNum, _direction)->_closeUps);
+ else
+ list = &(closePtr->_subCloseUps);
+
+ CloseDataList::const_iterator wrkClosePtr;
+
+ for (wrkClosePtr = list->begin(); wrkClosePtr != list->end(); ++wrkClosePtr) {
+ Common::Rect objRect;
+ objRect = _utils->rectScale(wrkClosePtr->_x1, wrkClosePtr->_y1, wrkClosePtr->_x2, wrkClosePtr->_y2);
+ if (objRect.contains(pos))
+ return &(*wrkClosePtr);
+ }
+
+ return nullptr;
+}
+
+const CloseData *LabEngine::findClosePtrMatch(const CloseData *closePtr, const CloseDataList &list) {
+ CloseDataList::const_iterator i;
+
+ for (i = list.begin(); i != list.end(); ++i) {
+ if ((closePtr->_x1 == i->_x1) && (closePtr->_x2 == i->_x2) &&
+ (closePtr->_y1 == i->_y1) && (closePtr->_y2 == i->_y2) &&
+ (closePtr->_depth == i->_depth))
+ return &(*i);
+
+ const CloseData *resClosePtr = findClosePtrMatch(closePtr, i->_subCloseUps);
+
+ if (resClosePtr)
+ return resClosePtr;
+ }
+
+ return nullptr;
+}
+
+Common::String LabEngine::getPictName(bool useClose) {
+ ViewData *viewPtr = getViewData(_roomNum, _direction);
+
+ if (useClose && _closeDataPtr) {
+ _closeDataPtr = findClosePtrMatch(_closeDataPtr, viewPtr->_closeUps);
+
+ if (_closeDataPtr)
+ return _closeDataPtr->_graphicName;
+ }
+
+ return viewPtr->_graphicName;
+}
+
+void LabEngine::drawDirection(const CloseData *closePtr) {
+ if (closePtr && !closePtr->_message.empty()) {
+ _graphics->drawMessage(closePtr->_message, false);
+ return;
+ }
+
+ Common::String message;
+
+ if (!_rooms[_roomNum]._roomMsg.empty())
+ message = _rooms[_roomNum]._roomMsg + ", ";
+
+ if (_direction == kDirectionNorth)
+ message += _resource->getStaticText(kTextFacingNorth);
+ else if (_direction == kDirectionEast)
+ message += _resource->getStaticText(kTextFacingEast);
+ else if (_direction == kDirectionSouth)
+ message += _resource->getStaticText(kTextFacingSouth);
+ else if (_direction == kDirectionWest)
+ message += _resource->getStaticText(kTextFacingWest);
+
+ _graphics->drawMessage(message, false);
+}
+
+uint16 LabEngine::processArrow(uint16 curDirection, uint16 arrow) {
+ if (arrow == 1) { // Forward
+ uint16 room = _rooms[_roomNum]._doors[curDirection];
+ if (room != 0)
+ _roomNum = room;
+
+ return curDirection;
+ } else if (arrow == 0) { // Left
+ if (curDirection == kDirectionNorth)
+ return kDirectionWest;
+ else if (curDirection == kDirectionWest)
+ return kDirectionSouth;
+ else if (curDirection == kDirectionSouth)
+ return kDirectionEast;
+ else
+ return kDirectionNorth;
+ } else if (arrow == 2) { // Right
+ if (curDirection == kDirectionNorth)
+ return kDirectionEast;
+ else if (curDirection == kDirectionEast)
+ return kDirectionSouth;
+ else if (curDirection == kDirectionSouth)
+ return kDirectionWest;
+ else
+ return kDirectionNorth;
+ }
+
+ // Should never reach here!
+ return curDirection;
+}
+
+void LabEngine::setCurrentClose(Common::Point pos, const CloseData **closePtrList, bool useAbsoluteCoords, bool next) {
+ const CloseDataList *list;
+
+ if (!*closePtrList)
+ list = &(getViewData(_roomNum, _direction)->_closeUps);
+ else
+ list = &((*closePtrList)->_subCloseUps);
+
+ CloseDataList::const_iterator closePtr;
+ for (closePtr = list->begin(); closePtr != list->end(); ++closePtr) {
+ Common::Rect target;
+ if (!useAbsoluteCoords)
+ target = Common::Rect(closePtr->_x1, closePtr->_y1, closePtr->_x2, closePtr->_y2);
+ else
+ target = _utils->rectScale(closePtr->_x1, closePtr->_y1, closePtr->_x2, closePtr->_y2);
+
+ if (target.contains(pos) && (next || !closePtr->_graphicName.empty())) {
+
+ if (next) {
+ // cycle to the next one
+ ++closePtr;
+ if (closePtr == list->end())
+ closePtr = list->begin();
+ }
+ *closePtrList = &(*closePtr);
+
+ return;
+ }
+ }
+
+ // If we got here, no match was found. If we want the "next" close-up,
+ // return the first one in the list, if any.
+ if (next) {
+ if (!list->empty())
+ *closePtrList = &(*list->begin());
+ }
+}
+
+bool LabEngine::takeItem(Common::Point pos) {
+ const CloseDataList *list;
+ if (!_closeDataPtr) {
+ list = &(getViewData(_roomNum, _direction)->_closeUps);
+ } else if (_closeDataPtr->_closeUpType < 0) {
+ _conditions->inclElement(abs(_closeDataPtr->_closeUpType));
+ return true;
+ } else
+ list = &(_closeDataPtr->_subCloseUps);
+
+ CloseDataList::const_iterator closePtr;
+ for (closePtr = list->begin(); closePtr != list->end(); ++closePtr) {
+ Common::Rect objRect;
+ objRect = _utils->rectScale(closePtr->_x1, closePtr->_y1, closePtr->_x2, closePtr->_y2);
+ if (objRect.contains(pos) && (closePtr->_closeUpType < 0)) {
+ _conditions->inclElement(abs(closePtr->_closeUpType));
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void LabEngine::doActions(const ActionList &actionList) {
+ ActionList::const_iterator action;
+ for (action = actionList.begin(); action != actionList.end(); ++action) {
+ updateEvents();
+
+ switch (action->_actionType) {
+ case kActionPlaySound:
+ _music->loadSoundEffect(action->_messages[0], false, true);
+ break;
+
+ case kActionPlaySoundNoWait: // only used in scene 7 (street, when teleporting to the surreal maze)
+ _music->loadSoundEffect(action->_messages[0], false, false);
+ break;
+
+ case kActionPlaySoundLooping:
+ _music->loadSoundEffect(action->_messages[0], true, false);
+ break;
+
+ case kActionShowDiff:
+ _graphics->readPict(action->_messages[0], true);
+ break;
+
+ case kActionShowDiffLooping: // used in scene 44 (heart of the labyrinth, minotaur)
+ _graphics->readPict(action->_messages[0], false);
+ break;
+
+ case kActionLoadDiff:
+ if (!action->_messages[0].empty())
+ // Puts a file into memory
+ _graphics->loadPict(action->_messages[0]);
+ break;
+
+ case kActionLoadBitmap:
+ error("Unused opcode kActionLoadBitmap has been called");
+
+ case kActionShowBitmap:
+ error("Unused opcode kActionShowBitmap has been called");
+
+ case kActionTransition:
+ _graphics->doTransition((TransitionType)action->_param1, action->_messages[0].c_str());
+ break;
+
+ case kActionNoUpdate:
+ _noUpdateDiff = true;
+ _anim->_doBlack = false;
+ break;
+
+ case kActionForceUpdate:
+ _curFileName = " ";
+ break;
+
+ case kActionShowCurPict: {
+ Common::String test = getPictName(true);
+
+ if (test != _curFileName) {
+ _curFileName = test;
+ _graphics->readPict(_curFileName);
+ }
+ }
+ break;
+
+ case kActionSetElement:
+ _conditions->inclElement(action->_param1);
+ break;
+
+ case kActionUnsetElement:
+ _conditions->exclElement(action->_param1);
+ break;
+
+ case kActionShowMessage:
+ if (_graphics->_longWinInFront)
+ _graphics->longDrawMessage(action->_messages[0], true);
+ else
+ _graphics->drawMessage(action->_messages[0], true);
+ break;
+
+ case kActionCShowMessage:
+ if (!_closeDataPtr)
+ _graphics->drawMessage(action->_messages[0], true);
+ break;
+
+ case kActionShowMessages:
+ _graphics->drawMessage(action->_messages[_utils->getRandom(action->_param1)], true);
+ break;
+
+ case kActionChangeRoom:
+ if (action->_param1 & 0x8000) {
+ // This is a Wyrmkeep Windows trial version, thus stop at this
+ // point, since we can't check for game payment status
+ _graphics->readPict(getPictName(true));
+ GUI::MessageDialog trialMessage("This is the end of the trial version. You can play the full game using the original interpreter from Wyrmkeep");
+ trialMessage.runModal();
+ break;
+ }
+
+ _roomNum = action->_param1;
+ _direction = action->_param2 - 1;
+ _closeDataPtr = nullptr;
+ _anim->_doBlack = true;
+ break;
+
+ case kActionSetCloseup: {
+ Common::Point curPos = Common::Point(_utils->scaleX(action->_param1), _utils->scaleY(action->_param2));
+ const CloseData *tmpClosePtr = getObject(curPos, _closeDataPtr);
+
+ if (tmpClosePtr)
+ _closeDataPtr = tmpClosePtr;
+ }
+ break;
+
+ case kActionMainView:
+ _closeDataPtr = nullptr;
+ break;
+
+ case kActionSubInv:
+ if (_inventory[action->_param1]._quantity)
+ (_inventory[action->_param1]._quantity)--;
+
+ if (_inventory[action->_param1]._quantity == 0)
+ _conditions->exclElement(action->_param1);
+
+ break;
+
+ case kActionAddInv:
+ (_inventory[action->_param1]._quantity) += action->_param2;
+ _conditions->inclElement(action->_param1);
+ break;
+
+ case kActionShowDir:
+ _graphics->setActionMessage(false);
+ break;
+
+ case kActionWaitSecs: {
+ uint32 targetMillis = _system->getMillis() + action->_param1 * 1000;
+
+ _graphics->screenUpdate();
+
+ while (_system->getMillis() < targetMillis) {
+ updateEvents();
+ _anim->diffNextFrame();
+ }
+ }
+ break;
+
+ case kActionStopMusic: // used in scene 44 (heart of the labyrinth, minotaur)
+ _music->freeMusic();
+ break;
+
+ case kActionStartMusic: // unused
+ error("Unused opcode kActionStartMusic has been called");
+ break;
+
+ case kActionChangeMusic: // used in scene 46 (museum exhibit, for the alarm)
+ _music->changeMusic(action->_messages[0], true, false);
+ break;
+
+ case kActionResetMusic: // used in scene 45 (sheriff's office, after museum)
+ if (getPlatform() != Common::kPlatformAmiga)
+ _music->changeMusic("Music:BackGrou", false, true);
+ else
+ _music->changeMusic("Music:BackGround", false, true);
+ break;
+
+ case kActionFillMusic:
+ error("Unused opcode kActionFillMusic has been called");
+ break;
+
+ case kActionWaitSound: // used in scene 44 (heart of the labyrinth / ending)
+ while (_music->isSoundEffectActive()) {
+ updateEvents();
+ _anim->diffNextFrame();
+ waitTOF();
+ }
+ break;
+
+ case kActionClearSound:
+ _music->stopSoundEffect();
+ break;
+
+ case kActionWinMusic: // used in scene 44 (heart of the labyrinth / ending)
+ _music->freeMusic();
+ _music->changeMusic("Music:WinGame", false, false);
+ break;
+
+ case kActionWinGame: // used in scene 44 (heart of the labyrinth / ending)
+ _quitLab = true;
+ showLab2Teaser();
+ break;
+
+ case kActionLostGame:
+ error("Unused opcode kActionLostGame has been called");
+
+ case kActionResetBuffer:
+ _graphics->freePict();
+ break;
+
+ case kActionSpecialCmd:
+ if (action->_param1 == 0)
+ _anim->_doBlack = true;
+ else if (action->_param1 == 1)
+ _anim->_doBlack = (_closeDataPtr == nullptr);
+ else if (action->_param1 == 2)
+ _anim->_doBlack = (_closeDataPtr != nullptr);
+ else if (action->_param1 == 5) {
+ // inverse the palette
+ for (int idx = (8 * 3); idx < (255 * 3); idx++)
+ _anim->_diffPalette[idx] = 255 - _anim->_diffPalette[idx];
+
+ waitTOF();
+ _graphics->setPalette(_anim->_diffPalette, 256);
+ waitTOF();
+ waitTOF();
+ } else if (action->_param1 == 4) {
+ // white the palette
+ _graphics->whiteScreen();
+ waitTOF();
+ waitTOF();
+ } else if (action->_param1 == 6) {
+ // Restore the palette
+ waitTOF();
+ _graphics->setPalette(_anim->_diffPalette, 256);
+ waitTOF();
+ waitTOF();
+ } else if (action->_param1 == 7) {
+ // Quick pause
+ waitTOF();
+ waitTOF();
+ waitTOF();
+ }
+
+ break;
+ }
+ }
+
+ _music->stopSoundEffect();
+}
+
+bool LabEngine::doActionRuleSub(int16 action, int16 roomNum, const CloseData *closePtr, bool allowDefaults) {
+ action++;
+
+ if (closePtr) {
+ RuleList *rules = &(_rooms[_roomNum]._rules);
+
+ if (!rules && (roomNum == 0)) {
+ _resource->readViews(roomNum);
+ rules = &(_rooms[roomNum]._rules);
+ }
+
+ for (RuleList::iterator rule = rules->begin(); rule != rules->end(); ++rule) {
+ if ((rule->_ruleType == kRuleTypeAction) &&
+ ((rule->_param1 == action) || ((rule->_param1 == 0) && allowDefaults))) {
+ if (((rule->_param2 == closePtr->_closeUpType) ||
+ ((rule->_param2 == 0) && allowDefaults)) ||
+ ((action == 1) && (rule->_param2 == -closePtr->_closeUpType))) {
+ if (checkConditions(rule->_condition)) {
+ doActions(rule->_actionList);
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+bool LabEngine::doActionRule(Common::Point pos, int16 action, int16 roomNum) {
+ if (roomNum)
+ _newFileName = NOFILE;
+ else
+ _newFileName = _curFileName;
+
+ const CloseData *curClosePtr = getObject(pos, _closeDataPtr);
+
+ if (doActionRuleSub(action, roomNum, curClosePtr, false))
+ return true;
+ else if (doActionRuleSub(action, roomNum, _closeDataPtr, false))
+ return true;
+ else if (doActionRuleSub(action, roomNum, curClosePtr, true))
+ return true;
+ else if (doActionRuleSub(action, roomNum, _closeDataPtr, true))
+ return true;
+
+ return false;
+}
+
+bool LabEngine::doOperateRuleSub(int16 itemNum, int16 roomNum, const CloseData *closePtr, bool allowDefaults) {
+ if (closePtr)
+ if (closePtr->_closeUpType > 0) {
+ RuleList *rules = &(_rooms[roomNum]._rules);
+
+ if (!rules && (roomNum == 0)) {
+ _resource->readViews(roomNum);
+ rules = &(_rooms[roomNum]._rules);
+ }
+
+ for (RuleList::iterator rule = rules->begin(); rule != rules->end(); ++rule) {
+ if ((rule->_ruleType == kRuleTypeOperate) &&
+ ((rule->_param1 == itemNum) || ((rule->_param1 == 0) && allowDefaults)) &&
+ ((rule->_param2 == closePtr->_closeUpType) || ((rule->_param2 == 0) && allowDefaults))) {
+ if (checkConditions(rule->_condition)) {
+ doActions(rule->_actionList);
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+bool LabEngine::doOperateRule(Common::Point pos, int16 ItemNum) {
+ _newFileName = NOFILE;
+ const CloseData *closePtr = getObject(pos, _closeDataPtr);
+
+ if (doOperateRuleSub(ItemNum, _roomNum, closePtr, false))
+ return true;
+ else if (doOperateRuleSub(ItemNum, _roomNum, _closeDataPtr, false))
+ return true;
+ else if (doOperateRuleSub(ItemNum, _roomNum, closePtr, true))
+ return true;
+ else if (doOperateRuleSub(ItemNum, _roomNum, _closeDataPtr, true))
+ return true;
+ else {
+ _newFileName = _curFileName;
+
+ if (doOperateRuleSub(ItemNum, 0, closePtr, false))
+ return true;
+ else if (doOperateRuleSub(ItemNum, 0, _closeDataPtr, false))
+ return true;
+ else if (doOperateRuleSub(ItemNum, 0, closePtr, true))
+ return true;
+ else if (doOperateRuleSub(ItemNum, 0, _closeDataPtr, true))
+ return true;
+ }
+
+ return false;
+}
+
+bool LabEngine::doGoForward() {
+ RuleList &rules = _rooms[_roomNum]._rules;
+
+ for (RuleList::iterator rule = rules.begin(); rule != rules.end(); ++rule) {
+ if ((rule->_ruleType == kRuleTypeGoForward) && (rule->_param1 == (_direction + 1))) {
+ if (checkConditions(rule->_condition)) {
+ doActions(rule->_actionList);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool LabEngine::doTurn(uint16 from, uint16 to) {
+ from++;
+ to++;
+
+ RuleList &rules = _rooms[_roomNum]._rules;
+
+ for (RuleList::iterator rule = rules.begin(); rule != rules.end(); ++rule) {
+ if ((rule->_ruleType == kRuleTypeTurn) ||
+ ((rule->_ruleType == kRuleTypeTurnFromTo) &&
+ (rule->_param1 == from) && (rule->_param2 == to))) {
+ if (checkConditions(rule->_condition)) {
+ doActions(rule->_actionList);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool LabEngine::doMainView() {
+ RuleList &rules = _rooms[_roomNum]._rules;
+ for (RuleList::iterator rule = rules.begin(); rule != rules.end(); ++rule) {
+ if (rule->_ruleType == kRuleTypeGoMainView) {
+ if (checkConditions(rule->_condition)) {
+ doActions(rule->_actionList);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/processroom.h b/engines/lab/processroom.h
new file mode 100644
index 0000000000..1d53ce01af
--- /dev/null
+++ b/engines/lab/processroom.h
@@ -0,0 +1,190 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_PROCESSROOM_H
+#define LAB_PROCESSROOM_H
+
+namespace Lab {
+
+enum ActionType {
+ kActionPlaySound = 1,
+ kActionPlaySoundLooping = 2,
+ kActionShowDiff = 3,
+ kActionShowDiffLooping = 4,
+ kActionLoadDiff = 5,
+ kActionLoadBitmap = 6, // unused
+ kActionShowBitmap = 7, // unused
+ kActionTransition = 8,
+ kActionNoUpdate = 9,
+ kActionForceUpdate = 10,
+ kActionShowCurPict = 11,
+ kActionSetElement = 12,
+ kActionUnsetElement = 13,
+ kActionShowMessage = 14,
+ kActionShowMessages = 15,
+ kActionChangeRoom = 16,
+ kActionSetCloseup = 17,
+ kActionMainView = 18,
+ kActionSubInv = 19,
+ kActionAddInv = 20,
+ kActionShowDir = 21,
+ kActionWaitSecs = 22,
+ kActionStopMusic = 23,
+ kActionStartMusic = 24,
+ kActionChangeMusic = 25,
+ kActionResetMusic = 26,
+ kActionFillMusic = 27,
+ kActionWaitSound = 28,
+ kActionClearSound = 29,
+ kActionWinMusic = 30,
+ kActionWinGame = 31,
+ kActionLostGame = 32, // unused
+ kActionResetBuffer = 33,
+ kActionSpecialCmd = 34,
+ kActionCShowMessage = 35,
+ kActionPlaySoundNoWait = 36
+};
+
+enum RuleType {
+ kRuleTypeNone = 0,
+ kRuleTypeAction = 1,
+ kRuleTypeOperate = 2,
+ kRuleTypeGoForward = 3,
+ kRuleTypeConditions = 4, // unused?
+ kRuleTypeTurn = 5,
+ kRuleTypeGoMainView = 6,
+ kRuleTypeTurnFromTo = 7
+};
+
+enum RuleAction {
+ kRuleActionTake = 0,
+ kRuleActionMove = 1, // unused?
+ kRuleActionOpenDoor = 2, // unused?
+ kRuleActionCloseDoor = 3, // unused?
+ kRuleActionTakeDef = 4
+};
+
+enum Condition {
+ kCondBeltGlowing = 70,
+ kCondBridge1 = 104,
+ kCondNoNews = 135,
+ kCondBridge0 = 148,
+ kCondLampOn = 151,
+ kCondNoClean = 152,
+ kCondDirty = 175,
+ kCondUsedHelmet = 184
+};
+
+enum MapDoors {
+ kDoorLeftNorth = 1,
+ kDoorLeftEast = 2,
+ kDoorLeftSouth = 4,
+ kDoorLeftWest = 8,
+
+ kDoorMiddleNorth = 16,
+ kDoorRightNorth = 32,
+ kDoorMiddleSouth = 64,
+ kDoorRightSouth = 128,
+
+ kDoorMiddleEast = 16,
+ kDoorBottomEast = 32,
+ kDoorMiddleWest = 64,
+ kDoorBottomWest = 128
+};
+
+enum SpecialRoom {
+ kNormalRoom = 0,
+ kUpArrowRoom,
+ kDownArrowRoom,
+ kBridgeRoom,
+ kVerticalCorridor,
+ kHorizontalCorridor,
+ kMedMaze,
+ kHedgeMaze,
+ kSurMaze,
+ kMultiMazeF1,
+ kMultiMazeF2,
+ kMultiMazeF3
+};
+
+struct CloseData {
+ uint16 _x1, _y1, _x2, _y2;
+ int16 _closeUpType; // if > 0, an object. If < 0, an item
+ uint16 _depth; // Level of the closeup.
+ Common::String _graphicName;
+ Common::String _message;
+ CloseDataList _subCloseUps;
+};
+
+struct ViewData {
+ Common::Array<int16> _condition;
+ Common::String _graphicName;
+ CloseDataList _closeUps;
+};
+
+struct Action {
+ ActionType _actionType;
+ int16 _param1;
+ int16 _param2;
+ int16 _param3;
+ Common::Array<Common::String> _messages;
+};
+
+struct Rule {
+ RuleType _ruleType;
+ int16 _param1;
+ int16 _param2;
+ Common::Array<int16> _condition;
+ ActionList _actionList;
+};
+
+struct RoomData {
+ uint16 _doors[4];
+ byte _transitionType;
+ ViewDataList _view[4];
+ RuleList _rules;
+ Common::String _roomMsg;
+};
+
+struct InventoryData {
+ uint16 _quantity;
+ Common::String _name;
+ Common::String _bitmapName;
+};
+
+struct MapData {
+ uint16 _x, _y, _pageNumber;
+ SpecialRoom _specialID;
+ uint32 _mapFlags;
+};
+
+} // End of namespace Lab
+
+#endif // LAB_PROCESSROOM_H
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
new file mode 100644
index 0000000000..8883cefe10
--- /dev/null
+++ b/engines/lab/resource.cpp
@@ -0,0 +1,309 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "lab/lab.h"
+
+#include "lab/dispman.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+
+namespace Lab {
+
+Resource::Resource(LabEngine *vm) : _vm(vm) {
+ readStaticText();
+}
+
+void Resource::readStaticText() {
+ Common::File *labTextFile = openDataFile("Lab:Rooms/LabText");
+
+ for (int i = 0; i < 48; i++)
+ _staticText[i] = labTextFile->readLine();
+
+ delete labTextFile;
+}
+
+TextFont *Resource::getFont(const Common::String fileName) {
+ // TODO: Add support for the font format of the Amiga version
+ Common::File *dataFile = openDataFile(fileName, MKTAG('V', 'G', 'A', 'F'));
+
+ uint32 headerSize = 4 + 2 + 256 * 3 + 4;
+ uint32 fileSize = dataFile->size();
+ if (fileSize <= headerSize)
+ return nullptr;
+
+ _vm->updateEvents();
+
+ TextFont *textfont = new TextFont();
+ textfont->_dataLength = fileSize - headerSize;
+ textfont->_height = dataFile->readUint16LE();
+ dataFile->read(textfont->_widths, 256);
+ for (int i = 0; i < 256; i++)
+ textfont->_offsets[i] = dataFile->readUint16LE();
+ dataFile->skip(4);
+ textfont->_data = new byte[textfont->_dataLength + 4];
+ dataFile->read(textfont->_data, textfont->_dataLength);
+ delete dataFile;
+ return textfont;
+}
+
+Common::String Resource::getText(const Common::String fileName) {
+ Common::File *dataFile = openDataFile(fileName);
+
+ _vm->updateEvents();
+
+ uint32 count = dataFile->size();
+ byte *buffer = new byte[count];
+ byte *text = buffer;
+ dataFile->read(buffer, count);
+
+ while (text && (*text != '\0'))
+ *text++ -= (byte)95;
+
+ delete dataFile;
+
+ Common::String str = (char *)buffer;
+ delete[] buffer;
+
+ return str;
+}
+
+void Resource::readRoomData(const Common::String fileName) {
+ Common::File *dataFile = openDataFile(fileName, MKTAG('D', 'O', 'R', '1'));
+
+ _vm->_manyRooms = dataFile->readUint16LE();
+ _vm->_highestCondition = dataFile->readUint16LE();
+ _vm->_rooms = new RoomData[_vm->_manyRooms + 1];
+
+ for (int i = 1; i <= _vm->_manyRooms; i++) {
+ RoomData *curRoom = &_vm->_rooms[i];
+ curRoom->_doors[kDirectionNorth] = dataFile->readUint16LE();
+ curRoom->_doors[kDirectionSouth] = dataFile->readUint16LE();
+ curRoom->_doors[kDirectionEast] = dataFile->readUint16LE();
+ curRoom->_doors[kDirectionWest] = dataFile->readUint16LE();
+ curRoom->_transitionType = dataFile->readByte();
+ }
+
+ delete dataFile;
+}
+
+InventoryData *Resource::readInventory(const Common::String fileName) {
+ Common::File *dataFile = openDataFile(fileName, MKTAG('I', 'N', 'V', '1'));
+
+ _vm->_numInv = dataFile->readUint16LE();
+ InventoryData *inventory = new InventoryData[_vm->_numInv + 1];
+
+ for (int i = 1; i <= _vm->_numInv; i++) {
+ inventory[i]._quantity = dataFile->readUint16LE();
+ inventory[i]._name = readString(dataFile);
+ inventory[i]._bitmapName = readString(dataFile);
+ }
+
+ delete dataFile;
+ return inventory;
+}
+
+void Resource::readViews(uint16 roomNum) {
+ Common::String fileName = "LAB:Rooms/" + Common::String::format("%d", roomNum);
+ Common::File *dataFile = openDataFile(fileName, MKTAG('R', 'O', 'M', '4'));
+
+ RoomData *curRoom = &_vm->_rooms[roomNum];
+
+ curRoom->_roomMsg = readString(dataFile);
+ readView(dataFile, curRoom->_view[kDirectionNorth]);
+ readView(dataFile, curRoom->_view[kDirectionSouth]);
+ readView(dataFile, curRoom->_view[kDirectionEast]);
+ readView(dataFile, curRoom->_view[kDirectionWest]);
+ readRule(dataFile, curRoom->_rules);
+
+ _vm->updateEvents();
+ delete dataFile;
+}
+
+Common::String Resource::translateFileName(const Common::String filename) {
+ Common::String upperFilename = filename;
+ upperFilename.toUppercase();
+ Common::String fileNameStrFinal;
+
+ if (upperFilename.hasPrefix("P:") || upperFilename.hasPrefix("F:")) {
+ if (_vm->_isHiRes)
+ fileNameStrFinal = "GAME/SPICT/";
+ else
+ fileNameStrFinal = "GAME/PICT/";
+
+ if (_vm->getPlatform() == Common::kPlatformAmiga) {
+ if (upperFilename.hasPrefix("P:")) {
+ fileNameStrFinal = "PICT/";
+ } else {
+ fileNameStrFinal = "LABFONTS/";
+ upperFilename += "T"; // all the Amiga fonts have a ".FONT" suffix
+ }
+ }
+ } else if (upperFilename.hasPrefix("LAB:")) {
+ if (_vm->getPlatform() != Common::kPlatformAmiga)
+ fileNameStrFinal = "GAME/";
+ } else if (upperFilename.hasPrefix("MUSIC:")) {
+ if (_vm->getPlatform() != Common::kPlatformAmiga)
+ fileNameStrFinal = "GAME/MUSIC/";
+ else
+ fileNameStrFinal = "MUSIC/";
+ }
+
+ if (upperFilename.contains(':')) {
+ while (upperFilename[0] != ':') {
+ upperFilename.deleteChar(0);
+ }
+
+ upperFilename.deleteChar(0);
+ }
+
+ fileNameStrFinal += upperFilename;
+
+ return fileNameStrFinal;
+}
+
+Common::File *Resource::openDataFile(const Common::String fileName, uint32 fileHeader) {
+ Common::File *dataFile = new Common::File();
+ dataFile->open(translateFileName(fileName));
+ if (!dataFile->isOpen())
+ error("openDataFile: Couldn't open %s (%s)", translateFileName(fileName).c_str(), fileName.c_str());
+
+ if (fileHeader > 0) {
+ uint32 headerTag = dataFile->readUint32BE();
+ if (headerTag != fileHeader) {
+ dataFile->close();
+ error("openDataFile: Unexpected header in %s (%s) - expected: %d, got: %d", translateFileName(fileName).c_str(), fileName.c_str(), fileHeader, headerTag);
+ }
+ }
+
+ return dataFile;
+}
+
+Common::String Resource::readString(Common::File *file) {
+ byte size = file->readByte();
+ if (!size)
+ return Common::String("");
+
+ char *str = new char[size];
+ for (int i = 0; i < size; i++) {
+ char c = file->readByte();
+ // Decrypt char
+ c = (i < size - 1) ? c - 95 : '\0';
+ str[i] = c;
+ }
+
+ Common::String result = str;
+ delete[] str;
+ return result;
+}
+
+Common::Array<int16> Resource::readConditions(Common::File *file) {
+ int16 cond;
+ Common::Array<int16> list;
+
+ while ((cond = file->readUint16LE()) != 0)
+ list.push_back(cond);
+
+ if (list.size() > 24) {
+ // The original only allocated 24 elements, and silently
+ // dropped remaining parts.
+ warning("More than 24 parts in condition");
+ }
+
+ return list;
+}
+
+void Resource::readRule(Common::File *file, RuleList &rules) {
+ rules.clear();
+ while (file->readByte() == 1) {
+ rules.push_back(Rule());
+ Rule &rule = rules.back();
+
+ rule._ruleType = (RuleType)file->readSint16LE();
+ rule._param1 = file->readSint16LE();
+ rule._param2 = file->readSint16LE();
+ rule._condition = readConditions(file);
+ readAction(file, rule._actionList);
+ }
+}
+
+void Resource::readAction(Common::File *file, ActionList &list) {
+ list.clear();
+
+ while (file->readByte() == 1) {
+ list.push_back(Action());
+ Action &action = list.back();
+
+ action._actionType = (ActionType)file->readSint16LE();
+ action._param1 = file->readSint16LE();
+ action._param2 = file->readSint16LE();
+ action._param3 = file->readSint16LE();
+
+ if (action._actionType == kActionShowMessages) {
+ action._messages.reserve(action._param1);
+ for (int i = 0; i < action._param1; i++)
+ action._messages.push_back(readString(file));
+ } else {
+ action._messages.push_back(readString(file));
+ }
+ }
+}
+
+void Resource::readCloseUps(uint16 depth, Common::File *file, CloseDataList &list) {
+ list.clear();
+ while (file->readByte() != '\0') {
+ list.push_back(CloseData());
+ CloseData &closeup = list.back();
+
+ closeup._x1 = file->readUint16LE();
+ closeup._y1 = file->readUint16LE();
+ closeup._x2 = file->readUint16LE();
+ closeup._y2 = file->readUint16LE();
+ closeup._closeUpType = file->readSint16LE();
+ closeup._depth = depth;
+ closeup._graphicName = readString(file);
+ closeup._message = readString(file);
+ readCloseUps(depth + 1, file, closeup._subCloseUps);
+ }
+}
+
+void Resource::readView(Common::File *file, ViewDataList &list) {
+ list.clear();
+ while (file->readByte() == 1) {
+ list.push_back(ViewData());
+ ViewData &view = list.back();
+
+ view._condition = readConditions(file);
+ view._graphicName = readString(file);
+ readCloseUps(0, file, view._closeUps);
+ }
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/resource.h b/engines/lab/resource.h
new file mode 100644
index 0000000000..307eac3068
--- /dev/null
+++ b/engines/lab/resource.h
@@ -0,0 +1,124 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_RESOURCE_H
+#define LAB_RESOURCE_H
+
+namespace Lab {
+
+struct ViewData;
+
+enum StaticText {
+ kTextLowerFloor,
+ kTextMiddleFloor,
+ kTextUpperFloor,
+ kTextMedMazeFloor,
+ kTextHedgeMazeFloor,
+ kTextSurMazeFloor,
+ kTextCarnivalFloor,
+
+ kTextSurmazeMessage,
+
+ kTextFacingNorth,
+ kTextFacingEast,
+ kTextFacingSouth,
+ kTextFacingWest,
+
+ kTextkLampOn,
+
+ kTextTurnLeft,
+ kTextTurnRight,
+ kTextGoForward,
+ kTextNoPath,
+ kTextTakeItem,
+ kTextSave,
+ kTextLoad,
+ kTextBookmark,
+ kTextPersonal,
+ kTextDisk,
+ kTextSaveBook,
+ kTextRestoreBook,
+ kTextSaveFlash,
+ kTextRestoreFlash,
+ kTextSaveDisk,
+ kTextRestoreDisk,
+ kTextNoDiskInDrive,
+ kTextWriteProtected,
+ kTextSelectDisk,
+ kTextFormatFloppy,
+ kTextFormatting,
+
+ kTextNothing,
+ kTextUseOnWhat,
+ kTextTakeWhat,
+ kTextMoveWhat,
+ kTextOpenWhat,
+ kTextCloseWhat,
+ kTextLookWhat,
+
+ kTextUseMap,
+ kTextUseJournal,
+ kTextTurnkLampOn,
+ kTextTurnLampOff,
+ kTextUseWhiskey,
+ kTextUsePith,
+ kTextUseHelmet
+};
+
+class Resource {
+public:
+ Resource(LabEngine *vm);
+ ~Resource() {}
+
+ Common::File *openDataFile(const Common::String fileName, uint32 fileHeader = 0);
+ void readRoomData(const Common::String fileName);
+ InventoryData *readInventory(const Common::String fileName);
+ void readViews(uint16 roomNum);
+ TextFont *getFont(const Common::String fileName);
+ Common::String getText(const Common::String fileName);
+ Common::String getStaticText(byte index) const { return _staticText[index]; }
+
+private:
+ LabEngine *_vm;
+ Common::String readString(Common::File *file);
+ Common::Array<int16> readConditions(Common::File *file);
+ void readRule(Common::File *file, RuleList &rules);
+ void readAction(Common::File *file, ActionList &action);
+ void readCloseUps(uint16 depth, Common::File *file, CloseDataList &close);
+ void readView(Common::File *file, ViewDataList &view);
+ void readStaticText();
+ Common::String translateFileName(const Common::String filename);
+
+ Common::String _staticText[48];
+};
+
+} // End of namespace Lab
+
+#endif // LAB_RESOURCE_H
diff --git a/engines/lab/savegame.cpp b/engines/lab/savegame.cpp
new file mode 100644
index 0000000000..d815929c39
--- /dev/null
+++ b/engines/lab/savegame.cpp
@@ -0,0 +1,250 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/savefile.h"
+#include "common/translation.h"
+
+#include "gui/message.h"
+#include "gui/saveload.h"
+
+#include "graphics/thumbnail.h"
+#include "engines/savestate.h"
+
+#include "lab/lab.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/labsets.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/speciallocks.h"
+
+namespace Lab {
+
+#define SAVEGAME_ID MKTAG('L', 'O', 'T', 'S')
+#define SAVEGAME_VERSION 1
+
+void LabEngine::writeSaveGameHeader(Common::OutSaveFile *out, const Common::String &saveName) {
+ out->writeUint32BE(SAVEGAME_ID);
+
+ // Write version
+ out->writeByte(SAVEGAME_VERSION);
+
+ // Write savegame name
+ out->writeString(saveName);
+ out->writeByte(0);
+
+ // Save the game thumbnail
+ Graphics::saveThumbnail(*out);
+
+ // Creation date/time
+ TimeDate curTime;
+ _system->getTimeAndDate(curTime);
+
+ uint32 saveDate = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF);
+ uint16 saveTime = ((curTime.tm_hour & 0xFF) << 8) | ((curTime.tm_min) & 0xFF);
+ uint32 playTime = getTotalPlayTime() / 1000;
+
+ out->writeUint32BE(saveDate);
+ out->writeUint16BE(saveTime);
+ out->writeUint32BE(playTime);
+}
+
+bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header) {
+ uint32 id = in->readUint32BE();
+
+ // Check if it's a valid ScummVM savegame
+ if (id != SAVEGAME_ID)
+ return false;
+
+ // Read in the version
+ header._version = in->readByte();
+
+ // Check that the save version isn't newer than this binary
+ if (header._version > SAVEGAME_VERSION)
+ return false;
+
+ // Read in the save name
+ Common::String saveName;
+ char ch;
+ while ((ch = (char)in->readByte()) != '\0')
+ saveName += ch;
+ header._descr.setDescription(saveName);
+
+ // Get the thumbnail
+ header._descr.setThumbnail(Graphics::loadThumbnail(*in));
+
+ uint32 saveDate = in->readUint32BE();
+ uint16 saveTime = in->readUint16BE();
+ uint32 playTime = in->readUint32BE();
+
+ int day = (saveDate >> 24) & 0xFF;
+ int month = (saveDate >> 16) & 0xFF;
+ int year = saveDate & 0xFFFF;
+ header._descr.setSaveDate(year, month, day);
+
+ int hour = (saveTime >> 8) & 0xFF;
+ int minutes = saveTime & 0xFF;
+ header._descr.setSaveTime(hour, minutes);
+
+ header._descr.setPlayTime(playTime * 1000);
+ if (g_engine)
+ g_engine->setTotalPlayTime(playTime * 1000);
+
+ return true;
+}
+
+bool LabEngine::saveGame(int slot, const Common::String desc) {
+ Common::String fileName = generateSaveFileName(slot);
+ Common::SaveFileManager *saveFileManager = _system->getSavefileManager();
+ Common::OutSaveFile *file = saveFileManager->openForSaving(fileName);
+
+ if (!file)
+ return false;
+
+ // Load scene pic
+ _graphics->readPict(getPictName(false));
+
+
+ writeSaveGameHeader(file, desc);
+ file->writeUint16LE(_roomNum);
+ file->writeUint16LE(getDirection());
+ file->writeUint16LE(getQuarters());
+
+ // Conditions
+ for (int i = 0; i < _conditions->_lastElement / (8 * 2); i++)
+ file->writeUint16LE(_conditions->_array[i]);
+
+ // Rooms found
+ for (int i = 0; i < _roomsFound->_lastElement / (8 * 2); i++)
+ file->writeUint16LE(_roomsFound->_array[i]);
+
+ _specialLocks->save(file);
+
+ // Breadcrumbs
+ for (uint i = 0; i < MAX_CRUMBS; i++) {
+ file->writeUint16LE(_breadCrumbs[i]._roomNum);
+ file->writeUint16LE(_breadCrumbs[i]._direction);
+ }
+
+ file->flush();
+ file->finalize();
+ delete file;
+
+ return true;
+}
+
+bool LabEngine::loadGame(int slot) {
+ Common::String fileName = generateSaveFileName(slot);
+ Common::SaveFileManager *saveFileManager = _system->getSavefileManager();
+ Common::InSaveFile *file = saveFileManager->openForLoading(fileName);
+
+ if (!file)
+ return false;
+
+ SaveGameHeader header;
+ readSaveGameHeader(file, header);
+ _roomNum = file->readUint16LE();
+ setDirection(file->readUint16LE());
+ setQuarters(file->readUint16LE());
+
+ // Conditions
+ for (int i = 0; i < _conditions->_lastElement / (8 * 2); i++)
+ _conditions->_array[i] = file->readUint16LE();
+
+ // Rooms found
+ for (int i = 0; i < _roomsFound->_lastElement / (8 * 2); i++)
+ _roomsFound->_array[i] = file->readUint16LE();
+
+ _specialLocks->load(file);
+
+ // Breadcrumbs
+ for (int i = 0; i < MAX_CRUMBS; i++) {
+ _breadCrumbs[i]._roomNum = file->readUint16LE();
+ _breadCrumbs[i]._direction = file->readUint16LE();
+ }
+
+ _droppingCrumbs = (_breadCrumbs[0]._roomNum != 0);
+ _followingCrumbs = false;
+
+ for (int i = 0; i < MAX_CRUMBS; i++) {
+ if (_breadCrumbs[i]._roomNum == 0)
+ break;
+ _numCrumbs = i;
+ }
+
+ delete file;
+
+ return true;
+}
+
+bool LabEngine::saveRestoreGame() {
+ bool isOK = false;
+
+ // The original had one screen for saving/loading. We have two.
+ // Ask the user which screen to use.
+ GUI::MessageDialog saveOrLoad(_("Would you like to save or restore a game?"), _("Save"), _("Restore"));
+
+ int choice = saveOrLoad.runModal();
+ if (choice == GUI::kMessageOK) {
+ // Save
+ GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+ int slot = dialog->runModalWithCurrentTarget();
+ if (slot >= 0) {
+ Common::String desc = dialog->getResultString();
+
+ if (desc.empty()) {
+ // create our own description for the saved game, the user didn't enter it
+ desc = dialog->createDefaultSaveDescription(slot);
+ }
+
+ isOK = saveGame(slot, desc);
+ }
+ delete dialog;
+ } else {
+ // Restore
+ GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
+ int slot = dialog->runModalWithCurrentTarget();
+ if (slot >= 0) {
+ isOK = loadGame(slot);
+ if (isOK)
+ _music->checkRoomMusic();
+ }
+ delete dialog;
+ }
+
+ _alternate = false;
+ _mainDisplay = true;
+ _event->initMouse();
+ _graphics->screenUpdate();
+
+ return isOK;
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp
new file mode 100644
index 0000000000..43d6056125
--- /dev/null
+++ b/engines/lab/special.cpp
@@ -0,0 +1,469 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "lab/lab.h"
+
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/eventman.h"
+#include "lab/image.h"
+#include "lab/labsets.h"
+#include "lab/music.h"
+#include "lab/processroom.h"
+#include "lab/resource.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+void LabEngine::doNotes() {
+ TextFont *noteFont = _resource->getFont("F:Note.fon");
+ Common::String noteText = _resource->getText("Lab:Rooms/Notes");
+
+ Common::Rect textRect = Common::Rect(_utils->vgaScaleX(25) + _utils->svgaCord(15), _utils->vgaScaleY(50), _utils->vgaScaleX(295) - _utils->svgaCord(15), _utils->vgaScaleY(148));
+ _graphics->flowText(noteFont, -2 + _utils->svgaCord(1), 0, 0, false, false, true, true, textRect, noteText.c_str());
+ _graphics->setPalette(_anim->_diffPalette, 256);
+ _graphics->freeFont(&noteFont);
+}
+
+void LabEngine::doWestPaper() {
+ TextFont *paperFont = _resource->getFont("F:News22.fon");
+ Common::String paperText = _resource->getText("Lab:Rooms/Date");
+
+ Common::Rect textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(77) + _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(91));
+ _graphics->flowText(paperFont, 0, 0, 0, false, true, false, true, textRect, paperText.c_str());
+ _graphics->freeFont(&paperFont);
+
+ paperFont = _resource->getFont("F:News32.fon");
+ paperText = _resource->getText("Lab:Rooms/Headline");
+
+ int fileLen = paperText.size() - 1;
+ textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(118));
+ int charsPrinted = _graphics->flowText(paperFont, -8, 0, 0, false, true, false, true, textRect, paperText.c_str());
+
+ uint16 y;
+
+ if (charsPrinted < fileLen) {
+ y = 130 - _utils->svgaCord(5);
+ textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(132));
+ _graphics->flowText(paperFont, -8 - _utils->svgaCord(1), 0, 0, false, true, false, true, textRect, paperText.c_str());
+ } else
+ y = 115 - _utils->svgaCord(5);
+
+ _graphics->freeFont(&paperFont);
+
+ paperFont = _resource->getFont("F:Note.fon");
+ paperText = _resource->getText("Lab:Rooms/Col1");
+ _graphics->flowText(paperFont, -4, 0, 0, false, false, false, true, _utils->vgaRectScale(45, y, 158, 148), paperText.c_str());
+
+ paperText = _resource->getText("Lab:Rooms/Col2");
+ _graphics->flowText(paperFont, -4, 0, 0, false, false, false, true, _utils->vgaRectScale(162, y, 275, 148), paperText.c_str());
+
+ _graphics->freeFont(&paperFont);
+ _graphics->setPalette(_anim->_diffPalette, 256);
+}
+
+void LabEngine::loadJournalData() {
+ if (_journalFont)
+ _graphics->freeFont(&_journalFont);
+
+ _journalFont = _resource->getFont("F:Journal.fon");
+ updateEvents();
+
+ Common::String filename = "Lab:Rooms/j";
+
+ bool bridge = _conditions->in(kCondBridge0) || _conditions->in(kCondBridge1);
+ bool dirty = _conditions->in(kCondDirty);
+ bool news = !_conditions->in(kCondNoNews);
+ bool clean = !_conditions->in(kCondNoClean);
+
+ if (bridge && clean && news)
+ filename += '8';
+ else if (clean && news)
+ filename += '9';
+ else if (bridge && clean)
+ filename += '6';
+ else if (clean)
+ filename += '7';
+ else if (bridge && dirty && news)
+ filename += '4';
+ else if (dirty && news)
+ filename += '5';
+ else if (bridge && dirty)
+ filename += '2';
+ else if (dirty)
+ filename += '3';
+ else if (bridge)
+ filename += '1';
+ else
+ filename += '0';
+
+ _journalText = _resource->getText(filename);
+ _journalTextTitle = _resource->getText("Lab:Rooms/jt");
+
+ Common::File *journalFile = _resource->openDataFile("P:JImage");
+ _journalButtonList.push_back(_event->createButton( 80, _utils->vgaScaleY(162) + _utils->svgaCord(1), 0, Common::KEYCODE_LEFT, new Image(journalFile, this), new Image(journalFile, this))); // back
+ _journalButtonList.push_back(_event->createButton(194, _utils->vgaScaleY(162) + _utils->svgaCord(1), 2, Common::KEYCODE_RIGHT, new Image(journalFile, this), new Image(journalFile, this))); // forward
+ _journalButtonList.push_back(_event->createButton(144, _utils->vgaScaleY(164) - _utils->svgaCord(1), 1, Common::KEYCODE_ESCAPE, new Image(journalFile, this), new Image(journalFile, this))); // cancel
+ delete journalFile;
+
+ _anim->_noPalChange = true;
+ _journalBackImage->setData(new byte[_graphics->_screenBytesPerPage]);
+ _graphics->readPict("P:Journal.pic", true, false, _journalBackImage->_imageData);
+ _anim->_noPalChange = false;
+
+ // Keep a copy of the blank journal
+ _blankJournal = new byte[_graphics->_screenBytesPerPage];
+ memcpy(_blankJournal, _journalBackImage->_imageData, _graphics->_screenBytesPerPage);
+}
+
+void LabEngine::drawJournalText() {
+ uint16 drawingToPage = 1;
+ const char *curText = _journalText.c_str();
+
+ assert((_journalPage & 1) == 0);
+
+ while (drawingToPage < _journalPage) {
+ updateEvents();
+
+ // flowText without output
+ curText += _graphics->flowText(_journalFont, -2, 2, 0, false, false, false, false, _utils->vgaRectScale(52, 32, 152, 148), curText);
+
+ _lastPage = (*curText == 0);
+
+ if (_lastPage) {
+ // Reset _journalPage to this page, in case it was set too high
+ _journalPage = (drawingToPage / 2) * 2;
+ break;
+ }
+
+ drawingToPage++;
+ }
+
+ if (_journalPage == 0) {
+ // draw title page centered
+ _graphics->flowText(_journalFont, -2, 2, 0, false, true, true, true, _utils->vgaRectScale(52, 32, 152, 148), _journalTextTitle.c_str(), _journalBackImage);
+ } else {
+ curText += _graphics->flowText(_journalFont, -2, 2, 0, false, false, false, true, _utils->vgaRectScale(52, 32, 152, 148), curText, _journalBackImage);
+ }
+
+ updateEvents();
+ curText += _graphics->flowText(_journalFont, -2, 2, 0, false, false, false, true, _utils->vgaRectScale(171, 32, 271, 148), curText, _journalBackImage);
+
+ _lastPage = (*curText == 0);
+}
+
+void LabEngine::turnPage(bool fromLeft) {
+ if (fromLeft) {
+ for (int i = 0; i < _graphics->_screenWidth; i += 8) {
+ updateEvents();
+ waitTOF();
+ _journalBackImage->blitBitmap(i, 0, nullptr, i, 0, 8, _graphics->_screenHeight, false);
+ }
+ } else {
+ for (int i = (_graphics->_screenWidth - 8); i > 0; i -= 8) {
+ updateEvents();
+ waitTOF();
+ _journalBackImage->blitBitmap(i, 0, nullptr, i, 0, 8, _graphics->_screenHeight, false);
+ }
+ }
+}
+
+void LabEngine::drawJournal(uint16 wipenum, bool needFade) {
+ _event->mouseHide();
+ updateEvents();
+ drawJournalText();
+ _graphics->loadBackPict("P:Journal.pic", _highPalette);
+
+ if (wipenum == 0)
+ _journalBackImage->blitBitmap(0, 0, nullptr, 0, 0, _graphics->_screenWidth, _graphics->_screenHeight, false);
+ else
+ turnPage((wipenum == 1));
+
+ _event->toggleButton(_event->getButton(0), 15, (_journalPage > 0)); // back button
+ _event->toggleButton(_event->getButton(2), 15, (!_lastPage)); // forward button
+
+ if (needFade)
+ _graphics->fade(true);
+
+ // Reset the journal background, so that all the text that has been blitted on it is erased
+ memcpy(_journalBackImage->_imageData, _blankJournal, _graphics->_screenBytesPerPage);
+
+ eatMessages();
+ _event->mouseShow();
+}
+
+void LabEngine::processJournal() {
+ while (1) {
+ // Make sure we check the music at least after every message
+ updateEvents();
+ IntuiMessage *msg = _event->getMsg();
+ if (shouldQuit()) {
+ _quitLab = true;
+ return;
+ }
+
+ if (!msg)
+ updateEvents();
+ else {
+ MessageClass msgClass = msg->_msgClass;
+
+ if ((msgClass == kMessageRightClick) ||
+ ((msgClass == kMessageRawKey) && (msg->_code == Common::KEYCODE_ESCAPE)))
+ return;
+ else if (msgClass == kMessageButtonUp) {
+ uint16 buttonId = msg->_code;
+ if (buttonId == 0) {
+ if (_journalPage >= 2) {
+ _journalPage -= 2;
+ drawJournal(1, false);
+ }
+ } else if (buttonId == 1) {
+ return;
+ } else if (buttonId == 2) {
+ if (!_lastPage) {
+ _journalPage += 2;
+ drawJournal(2, false);
+ }
+ }
+ }
+ }
+ }
+}
+
+void LabEngine::doJournal() {
+ _graphics->blackAllScreen();
+ _lastPage = false;
+
+ _journalBackImage->_width = _graphics->_screenWidth;
+ _journalBackImage->_height = _graphics->_screenHeight;
+ _journalBackImage->setData(nullptr, true);
+
+ updateEvents();
+ loadJournalData();
+ _event->attachButtonList(&_journalButtonList);
+ drawJournal(0, true);
+ _event->mouseShow();
+ processJournal();
+ _event->attachButtonList(nullptr);
+ _graphics->fade(false);
+ _event->mouseHide();
+
+ delete[] _blankJournal;
+ _blankJournal = nullptr;
+ _journalBackImage->setData(nullptr, true);
+
+ _event->freeButtonList(&_journalButtonList);
+ _graphics->freeFont(&_journalFont);
+
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, _graphics->_screenHeight - 1, 0);
+ _graphics->blackScreen();
+}
+
+void LabEngine::drawMonText(const char *text, TextFont *monitorFont, Common::Rect textRect, bool isinteractive) {
+ uint16 drawingToPage = 0, yspacing = 0;
+ int charsDrawn = 0;
+ const char *curText = text;
+
+ _event->mouseHide();
+
+ if (*text == '%') {
+ text++;
+ uint16 numlines = (*text - '0') * 10;
+ text++;
+ numlines += (*text - '0');
+ text += 2;
+
+ uint16 fheight = _graphics->textHeight(monitorFont);
+ textRect.left = _monitorButton->_width + _utils->vgaScaleX(3);
+ _monitorButtonHeight = _monitorButton->_height + _utils->vgaScaleY(3);
+
+ if (_monitorButtonHeight > fheight)
+ yspacing = _monitorButtonHeight - fheight;
+ else
+ _monitorButtonHeight = fheight;
+
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, textRect.bottom, 0);
+
+ for (int i = 0; i < numlines; i++)
+ _monitorButton->drawImage(0, i * _monitorButtonHeight);
+ } else if (isinteractive) {
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, textRect.bottom, 0);
+ } else {
+ _graphics->rectFill(textRect, 0);
+ }
+
+ while (drawingToPage < _monitorPage) {
+ updateEvents();
+ curText = text + charsDrawn;
+ charsDrawn += _graphics->flowText(monitorFont, yspacing, 0, 0, false, false, false, false, textRect, curText);
+ _lastPage = (*curText == 0);
+
+ if (_lastPage)
+ _monitorPage = drawingToPage;
+ else
+ drawingToPage++;
+ }
+
+ curText = text + charsDrawn;
+ _lastPage = (*curText == 0);
+ _graphics->flowText(monitorFont, yspacing, 2, 0, false, false, false, true, textRect, curText);
+ _event->mouseShow();
+}
+
+void LabEngine::processMonitor(const char *ntext, TextFont *monitorFont, bool isInteractive, Common::Rect textRect) {
+ Common::String startFileName = _monitorTextFilename;
+ const CloseData *startClosePtr = _closeDataPtr, *lastClosePtr[10];
+ uint16 depth = 0;
+
+ lastClosePtr[0] = _closeDataPtr;
+
+ while (1) {
+ if (isInteractive) {
+ if (!_closeDataPtr)
+ _closeDataPtr = startClosePtr;
+
+ Common::String filename;
+ if (_closeDataPtr == startClosePtr)
+ filename = startFileName;
+ else
+ filename = _closeDataPtr->_graphicName;
+
+ if (filename != _monitorTextFilename) {
+ _monitorPage = 0;
+ _monitorTextFilename = filename;
+
+ Common::String text = _resource->getText(_monitorTextFilename);
+ _graphics->fade(false);
+ drawMonText(text.c_str(), monitorFont, textRect, isInteractive);
+ _graphics->fade(true);
+ }
+ }
+
+ // Make sure we check the music at least after every message
+ updateEvents();
+ IntuiMessage *msg = _event->getMsg();
+ if (shouldQuit()) {
+ _quitLab = true;
+ return;
+ }
+
+ if (!msg)
+ updateEvents();
+ else {
+ MessageClass msgClass = msg->_msgClass;
+
+ if ((msgClass == kMessageRightClick) ||
+ ((msgClass == kMessageRawKey) && (msg->_code == Common::KEYCODE_ESCAPE)))
+ return;
+
+ if (msgClass == kMessageLeftClick) {
+ int16 mouseX = msg->_mouse.x;
+ int16 mouseY = msg->_mouse.y;
+
+ if ((mouseY >= _utils->vgaScaleY(171)) && (mouseY <= _utils->vgaScaleY(200))) {
+ if (mouseX <= _utils->vgaScaleX(31))
+ return;
+
+ if (mouseX <= _utils->vgaScaleX(59)) {
+ if (isInteractive) {
+ _monitorPage = 0;
+
+ if (depth) {
+ depth--;
+ _closeDataPtr = lastClosePtr[depth];
+ }
+ } else if (_monitorPage > 0) {
+ _monitorPage = 0;
+ drawMonText(ntext, monitorFont, textRect, isInteractive);
+ }
+ } else if (mouseX < _utils->vgaScaleX(259)) {
+ return;
+ } else if (mouseX <= _utils->vgaScaleX(289)) {
+ if (!_lastPage) {
+ _monitorPage += 1;
+ drawMonText(ntext, monitorFont, textRect, isInteractive);
+ }
+ } else if (_monitorPage >= 1) {
+ // mouseX is greater than 290 (scaled)
+ _monitorPage -= 1;
+ drawMonText(ntext, monitorFont, textRect, isInteractive);
+ }
+ } else if (isInteractive) {
+ const CloseData *tmpClosePtr = _closeDataPtr;
+ mouseY = 64 + (mouseY / _monitorButtonHeight) * 42;
+ mouseX = 101;
+ setCurrentClose(Common::Point(mouseX, mouseY), &_closeDataPtr, false);
+
+ if (tmpClosePtr != _closeDataPtr) {
+ lastClosePtr[depth] = tmpClosePtr;
+ depth++;
+ }
+ }
+ }
+ }
+ }
+}
+
+void LabEngine::doMonitor(const Common::String background, const Common::String textfile, bool isinteractive, Common::Rect textRect) {
+ Common::Rect scaledRect = _utils->vgaRectScale(textRect.left, textRect.top, textRect.right, textRect.bottom);
+ _monitorTextFilename = textfile;
+
+ _graphics->blackAllScreen();
+ _graphics->readPict("P:Mon/Monitor.1");
+ _graphics->readPict("P:Mon/NWD1");
+ _graphics->readPict("P:Mon/NWD2");
+ _graphics->readPict("P:Mon/NWD3");
+ _graphics->blackAllScreen();
+
+ _monitorPage = 0;
+ _lastPage = false;
+ _graphics->_fadePalette = _highPalette;
+
+ TextFont *monitorFont = _resource->getFont("F:Map.fon");
+ Common::File *buttonFile = _resource->openDataFile("P:MonImage");
+ _monitorButton = new Image(buttonFile, this);
+ delete buttonFile;
+
+ Common::String ntext = _resource->getText(textfile);
+ _graphics->loadBackPict(background, _highPalette);
+ drawMonText(ntext.c_str(), monitorFont, scaledRect, isinteractive);
+ _event->mouseShow();
+ _graphics->fade(true);
+ processMonitor(ntext.c_str(), monitorFont, isinteractive, scaledRect);
+ _graphics->fade(false);
+ _event->mouseHide();
+ _graphics->freeFont(&monitorFont);
+
+ _graphics->rectFill(0, 0, _graphics->_screenWidth - 1, _graphics->_screenHeight - 1, 0);
+ _graphics->blackAllScreen();
+ _graphics->freePict();
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/speciallocks.cpp b/engines/lab/speciallocks.cpp
new file mode 100644
index 0000000000..fe70b0f111
--- /dev/null
+++ b/engines/lab/speciallocks.cpp
@@ -0,0 +1,394 @@
+/* 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.
+ *
+ */
+
+ /*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/file.h"
+
+#include "gui/message.h"
+
+#include "lab/lab.h"
+#include "lab/anim.h"
+#include "lab/dispman.h"
+#include "lab/image.h"
+#include "lab/labsets.h"
+#include "lab/resource.h"
+#include "lab/speciallocks.h"
+#include "lab/utils.h"
+
+namespace Lab {
+
+#define BRICKOPEN 115
+#define COMBINATIONUNLOCKED 130
+
+enum TileScroll {
+ kScrollLeft = 1,
+ kScrollRight = 2,
+ kScrollUp = 3,
+ kScrollDown = 4
+};
+
+const uint16 INIT_TILE[4][4] = {
+ { 1, 5, 9, 13 },
+ { 2, 6, 10, 14 },
+ { 3, 7, 11, 15 },
+ { 4, 8, 12, 0 }
+};
+
+const uint16 SOLUTION[4][4] = {
+ { 7, 1, 8, 3 },
+ { 2, 11, 15, 4 },
+ { 9, 5, 14, 6 },
+ { 10, 13, 12, 0 }
+};
+
+const int COMBINATION_X[6] = { 45, 83, 129, 166, 211, 248 };
+
+SpecialLocks::SpecialLocks(LabEngine *vm) : _vm(vm) {
+ for (int i = 0; i < 16; i++)
+ _tiles[i] = nullptr;
+
+ for (int i = 0; i < 4; i++) {
+ for (int j = 0; j < 4; j++)
+ _curTile[i][j] = INIT_TILE[i][j];
+ }
+
+ for (int i = 0; i < 6; i++)
+ _combination[i] = 0;
+
+ for (int i = 0; i < 10; i++)
+ _numberImages[i] = nullptr;
+}
+
+SpecialLocks::~SpecialLocks() {
+ for (int i = 0; i < 16; i++)
+ delete _tiles[i];
+
+ for (int imgIdx = 0; imgIdx < 10; imgIdx++) {
+ delete _numberImages[imgIdx];
+ _numberImages[imgIdx] = nullptr;
+ }
+}
+
+void SpecialLocks::tileClick(Common::Point pos) {
+ Common::Point realPos = _vm->_utils->vgaUnscale(pos);
+
+ if ((realPos.x < 101) || (realPos.y < 26))
+ return;
+
+ int tileX = (realPos.x - 101) / 30;
+ int tileY = (realPos.y - 26) / 25;
+
+ if ((tileX < 4) && (tileY < 4))
+ changeTile(tileX, tileY);
+}
+
+void SpecialLocks::changeTile(uint16 col, uint16 row) {
+ int16 scrolltype = -1;
+
+ if (row > 0) {
+ if (_curTile[col][row - 1] == 0) {
+ _curTile[col][row - 1] = _curTile[col][row];
+ _curTile[col][row] = 0;
+ scrolltype = kScrollDown;
+ }
+ }
+
+ if (col > 0) {
+ if (_curTile[col - 1][row] == 0) {
+ _curTile[col - 1][row] = _curTile[col][row];
+ _curTile[col][row] = 0;
+ scrolltype = kScrollRight;
+ }
+ }
+
+ if (row < 3) {
+ if (_curTile[col][row + 1] == 0) {
+ _curTile[col][row + 1] = _curTile[col][row];
+ _curTile[col][row] = 0;
+ scrolltype = kScrollUp;
+ }
+ }
+
+ if (col < 3) {
+ if (_curTile[col + 1][row] == 0) {
+ _curTile[col + 1][row] = _curTile[col][row];
+ _curTile[col][row] = 0;
+ scrolltype = kScrollLeft;
+ }
+ }
+
+ if (scrolltype != -1) {
+ if (_vm->getFeatures() & GF_WINDOWS_TRIAL) {
+ GUI::MessageDialog trialMessage("This puzzle is not available in the trial version of the game");
+ trialMessage.runModal();
+ return;
+ }
+
+ doTileScroll(col, row, scrolltype);
+ bool check = true;
+ row = 0;
+ col = 0;
+
+ while (row < 4) {
+ while (col < 4) {
+ check &= (_curTile[row][col] == SOLUTION[row][col]);
+ col++;
+ }
+
+ row++;
+ col = 0;
+ }
+
+ if (check) {
+ // unlocked combination
+ _vm->_conditions->inclElement(BRICKOPEN);
+ _vm->_anim->_doBlack = true;
+ _vm->_graphics->readPict("p:Up/BDOpen");
+ }
+ }
+}
+
+void SpecialLocks::combinationClick(Common::Point pos) {
+ Common::Point realPos = _vm->_utils->vgaUnscale(pos);
+
+ if (!Common::Rect(44, 63, 285, 99).contains(realPos))
+ return;
+
+ uint16 number = 0;
+ if (realPos.x < 83)
+ number = 0;
+ else if (realPos.x < 127)
+ number = 1;
+ else if (realPos.x < 165)
+ number = 2;
+ else if (realPos.x < 210)
+ number = 3;
+ else if (realPos.x < 245)
+ number = 4;
+ else if (realPos.x < 286)
+ number = 5;
+
+ changeCombination(number);
+}
+
+void SpecialLocks::doTile(bool showsolution) {
+ uint16 row = 0, col = 0, rowm, colm, num;
+ int16 rows, cols;
+
+ if (showsolution) {
+ rowm = _vm->_utils->vgaScaleY(23);
+ colm = _vm->_utils->vgaScaleX(27);
+
+ rows = _vm->_utils->vgaScaleY(31);
+ cols = _vm->_utils->vgaScaleX(105);
+ } else {
+ _vm->_graphics->rectFillScaled(97, 22, 220, 126, 0);
+
+ rowm = _vm->_utils->vgaScaleY(25);
+ colm = _vm->_utils->vgaScaleX(30);
+
+ rows = _vm->_utils->vgaScaleY(25);
+ cols = _vm->_utils->vgaScaleX(100);
+ }
+
+ while (row < 4) {
+ while (col < 4) {
+ if (showsolution)
+ num = SOLUTION[col][row];
+ else
+ num = _curTile[col][row];
+
+ if (showsolution || num)
+ _tiles[num]->drawImage(cols + (col * colm), rows + (row * rowm));
+
+ col++;
+ }
+
+ row++;
+ col = 0;
+ }
+}
+
+void SpecialLocks::showTileLock(const Common::String filename, bool showSolution) {
+ _vm->_anim->_doBlack = true;
+ _vm->_anim->_noPalChange = true;
+ _vm->_graphics->readPict(filename);
+ _vm->_anim->_noPalChange = false;
+ _vm->_graphics->blackScreen();
+
+ Common::File *tileFile = _vm->_resource->openDataFile(showSolution ? "P:TileSolution" : "P:Tile");
+
+ int start = showSolution ? 0 : 1;
+
+ for (int curBit = start; curBit < 16; curBit++)
+ _tiles[curBit] = new Image(tileFile, _vm);
+
+ delete tileFile;
+
+ doTile(showSolution);
+ _vm->_graphics->setPalette(_vm->_anim->_diffPalette, 256);
+}
+
+void SpecialLocks::doTileScroll(uint16 col, uint16 row, uint16 scrolltype) {
+ int16 dX = 0, dY = 0, dx = 0, dy = 0, sx = 0, sy = 0;
+ int last = 0;
+
+ if (scrolltype == kScrollLeft) {
+ dX = _vm->_utils->vgaScaleX(5);
+ sx = _vm->_utils->vgaScaleX(5);
+ last = 6;
+ } else if (scrolltype == kScrollRight) {
+ dX = _vm->_utils->vgaScaleX(-5);
+ dx = _vm->_utils->vgaScaleX(-5);
+ sx = _vm->_utils->vgaScaleX(5);
+ last = 6;
+ } else if (scrolltype == kScrollUp) {
+ dY = _vm->_utils->vgaScaleY(5);
+ sy = _vm->_utils->vgaScaleY(5);
+ last = 5;
+ } else if (scrolltype == kScrollDown) {
+ dY = _vm->_utils->vgaScaleY(-5);
+ dy = _vm->_utils->vgaScaleY(-5);
+ sy = _vm->_utils->vgaScaleY(5);
+ last = 5;
+ }
+
+ sx += _vm->_utils->svgaCord(2);
+
+ uint16 x1 = _vm->_utils->vgaScaleX(100) + (col * _vm->_utils->vgaScaleX(30)) + dx;
+ uint16 y1 = _vm->_utils->vgaScaleY(25) + (row * _vm->_utils->vgaScaleY(25)) + dy;
+
+ byte *buffer = new byte[_tiles[1]->_width * _tiles[1]->_height * 2];
+
+ for (int i = 0; i < last; i++) {
+ _vm->waitTOF();
+ scrollRaster(dX, dY, x1, y1, x1 + _vm->_utils->vgaScaleX(28) + sx, y1 + _vm->_utils->vgaScaleY(23) + sy, buffer);
+ x1 += dX;
+ y1 += dY;
+ }
+
+ delete[] buffer;
+}
+
+void SpecialLocks::scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer) {
+ if (dx)
+ _vm->_graphics->scrollDisplayX(dx, x1, y1, x2, y2, buffer);
+
+ if (dy)
+ _vm->_graphics->scrollDisplayY(dy, x1, y1, x2, y2, buffer);
+}
+
+void SpecialLocks::changeCombination(uint16 number) {
+ const int solution[6] = { 0, 4, 0, 8, 7, 2 };
+
+ Image display(_vm);
+
+ if (_combination[number] < 9)
+ (_combination[number])++;
+ else
+ _combination[number] = 0;
+
+ uint16 combnum = _combination[number];
+
+ display.setData(_vm->_graphics->getCurrentDrawingBuffer(), false);
+ display._width = _vm->_graphics->_screenWidth;
+ display._height = _vm->_graphics->_screenHeight;
+
+ byte *buffer = new byte[_numberImages[1]->_width * _numberImages[1]->_height * 2];
+
+ for (int i = 1; i <= (_numberImages[combnum]->_height / 2); i++) {
+ if (_vm->_isHiRes) {
+ if (i & 1)
+ _vm->waitTOF();
+ }
+ else
+ _vm->waitTOF();
+
+ display.setData(_vm->_graphics->getCurrentDrawingBuffer(), false);
+ _vm->_graphics->scrollDisplayY(2, _vm->_utils->vgaScaleX(COMBINATION_X[number]), _vm->_utils->vgaScaleY(65), _vm->_utils->vgaScaleX(COMBINATION_X[number]) + (_numberImages[combnum])->_width - 1, _vm->_utils->vgaScaleY(65) + (_numberImages[combnum])->_height, buffer);
+ _numberImages[combnum]->blitBitmap(0, (_numberImages[combnum])->_height - (2 * i), &(display), _vm->_utils->vgaScaleX(COMBINATION_X[number]), _vm->_utils->vgaScaleY(65), (_numberImages[combnum])->_width, 2, false);
+ }
+
+ delete[] buffer;
+
+ bool unlocked = true;
+ for (int i = 0; i < 6; i++)
+ unlocked &= (_combination[i] == solution[i]);
+
+ if (unlocked)
+ _vm->_conditions->inclElement(COMBINATIONUNLOCKED);
+ else
+ _vm->_conditions->exclElement(COMBINATIONUNLOCKED);
+}
+
+void SpecialLocks::showCombinationLock(const Common::String filename) {
+ _vm->_anim->_doBlack = true;
+ _vm->_anim->_noPalChange = true;
+ _vm->_graphics->readPict(filename);
+ _vm->_anim->_noPalChange = false;
+
+ _vm->_graphics->blackScreen();
+
+ Common::File *numFile = _vm->_resource->openDataFile("P:Numbers");
+
+ for (int i = 0; i < 10; i++) {
+ _numberImages[i] = new Image(numFile, _vm);
+ }
+
+ delete numFile;
+
+ for (int i = 0; i <= 5; i++)
+ _numberImages[_combination[i]]->drawImage(_vm->_utils->vgaScaleX(COMBINATION_X[i]), _vm->_utils->vgaScaleY(65));
+
+ _vm->_graphics->setPalette(_vm->_anim->_diffPalette, 256);
+}
+
+void SpecialLocks::save(Common::OutSaveFile *file) {
+ // Combination lock
+ for (int i = 0; i < 6; i++)
+ file->writeByte(_combination[i]);
+
+ // Tiles
+ for (int i = 0; i < 4; i++)
+ for (int j = 0; j < 4; j++)
+ file->writeUint16LE(_curTile[i][j]);
+}
+
+void SpecialLocks::load(Common::InSaveFile *file) {
+ // Combination lock
+ for (int i = 0; i < 6; i++)
+ _combination[i] = file->readByte();
+
+ // Tiles
+ for (int i = 0; i < 4; i++)
+ for (int j = 0; j < 4; j++)
+ _curTile[i][j] = file->readUint16LE();
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/speciallocks.h b/engines/lab/speciallocks.h
new file mode 100644
index 0000000000..424eba242a
--- /dev/null
+++ b/engines/lab/speciallocks.h
@@ -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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_TILEPUZZLE_H
+#define LAB_TILEPUZZLE_H
+
+#include "common/savefile.h"
+
+namespace Lab {
+
+class LabEngine;
+
+class SpecialLocks {
+private:
+ LabEngine *_vm;
+ Image *_tiles[16];
+ Image *_numberImages[10];
+ uint16 _curTile[4][4];
+ byte _combination[6];
+
+public:
+ SpecialLocks(LabEngine *vm);
+ ~SpecialLocks();
+
+ void showTileLock(const Common::String filename, bool showSolution);
+
+ /**
+ * Processes mouse clicks and changes tile positions.
+ */
+ void tileClick(Common::Point pos);
+
+ void showCombinationLock(const Common::String filename);
+
+ /**
+ * Processes mouse clicks and changes the door combination.
+ */
+ void combinationClick(Common::Point pos);
+
+ void save(Common::OutSaveFile *file);
+ void load(Common::InSaveFile *file);
+
+private:
+ /**
+ * Changes the combination number of one of the slots
+ */
+ void changeCombination(uint16 number);
+
+ /**
+ * Changes the tile positions in the tile puzzle
+ */
+ void changeTile(uint16 col, uint16 row);
+
+ /**
+ * Draws the images of the combination lock to the display bitmap.
+ */
+ void doTile(bool showsolution);
+
+ /**
+ * Does the scrolling for the tiles on the tile puzzle.
+ */
+ void doTileScroll(uint16 col, uint16 row, uint16 scrolltype);
+ void scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer);
+};
+
+} // End of namespace Lab
+
+#endif // LAB_TILEPUZZLE_H
diff --git a/engines/lab/utils.cpp b/engines/lab/utils.cpp
new file mode 100644
index 0000000000..a1409d231b
--- /dev/null
+++ b/engines/lab/utils.cpp
@@ -0,0 +1,272 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#include "common/file.h"
+
+#include "lab/lab.h"
+#include "lab/utils.h"
+
+namespace Lab {
+Utils::Utils(LabEngine *vm) : _vm(vm), _rnd("lab") {
+ _dataBytesPerRow = 0;
+}
+
+uint16 Utils::scaleX(uint16 x) {
+ if (_vm->_isHiRes)
+ return (uint16)((x * 16) / 9);
+ else
+ return (uint16)((x * 8) / 9);
+}
+
+uint16 Utils::scaleY(uint16 y) {
+ if (_vm->_isHiRes)
+ return (y + (y / 14));
+ else
+ return ((y * 10) / 24);
+}
+
+Common::Rect Utils::rectScale(int16 x1, int16 y1, int16 x2, int16 y2) {
+ return Common::Rect(scaleX(x1), scaleY(y1), scaleX(x2), scaleY(y2));
+}
+
+uint16 Utils::mapScaleX(uint16 x) {
+ if (_vm->_isHiRes)
+ return (x - 45);
+ else
+ return ((x - 45) >> 1);
+}
+
+uint16 Utils::mapScaleY(uint16 y) {
+ if (_vm->_isHiRes)
+ return y;
+ else
+ return ((y - 35) >> 1) - (y >> 6);
+}
+
+Common::Rect Utils::mapRectScale(int16 x1, int16 y1, int16 x2, int16 y2) {
+ return Common::Rect(mapScaleX(x1), mapScaleY(y1), mapScaleX(x2), mapScaleY(y2));
+}
+
+int16 Utils::vgaScaleX(int16 x) {
+ if (_vm->_isHiRes)
+ return (x * 2);
+ else
+ return x;
+}
+
+int16 Utils::vgaScaleY(int16 y) {
+ if (_vm->_isHiRes)
+ return ((y * 12) / 5);
+ else
+ return y;
+}
+
+Common::Rect Utils::vgaRectScale(int16 x1, int16 y1, int16 x2, int16 y2) {
+ return Common::Rect(vgaScaleX(x1), vgaScaleY(y1), vgaScaleX(x2), vgaScaleY(y2));
+}
+
+uint16 Utils::svgaCord(uint16 cord) {
+ if (_vm->_isHiRes)
+ return cord;
+ else
+ return 0;
+}
+
+Common::Point Utils::vgaUnscale(Common::Point pos) {
+ Common::Point result;
+ if (_vm->_isHiRes) {
+ result.x = pos.x / 2;
+ result.y = (pos.y * 5) / 12;
+ } else
+ result = pos;
+
+ return result;
+}
+
+template<typename T>
+void Utils::unDiff(T *dest, Common::File *sourceFile) {
+ byte bytesPerWord = sizeof(T);
+
+ while (1) {
+ uint16 skip = sourceFile->readByte();
+ uint16 copy = sourceFile->readByte();
+
+ if (skip == 255) {
+ if (copy == 0) {
+ skip = sourceFile->readUint16LE();
+ copy = sourceFile->readUint16LE();
+ } else if (copy == 255)
+ return;
+ }
+
+ dest += skip;
+
+ if (bytesPerWord == 1) {
+ sourceFile->read(dest, copy);
+ dest += copy;
+ } else {
+ while (copy) {
+ *dest = sourceFile->readUint16LE();
+ dest++;
+ copy--;
+ }
+ }
+ }
+}
+
+template<typename T>
+void Utils::verticalUnDiff(T *dest, Common::File *sourceFile, uint16 bytesPerRow) {
+ uint16 counter = 0;
+ byte bytesPerWord = sizeof(T);
+ uint16 wordsPerRow = bytesPerRow / bytesPerWord;
+
+ while (counter < wordsPerRow) {
+ T *curPtr = dest + counter;
+
+ for (;;) {
+ uint16 skip = sourceFile->readByte();
+ uint16 copy = sourceFile->readByte();
+
+ if (skip == 255) {
+ counter += copy;
+ break;
+ } else {
+ curPtr += (skip * wordsPerRow);
+
+ while (copy) {
+ if (bytesPerWord == 1)
+ *curPtr++ = sourceFile->readByte();
+ else if (bytesPerWord == 2)
+ *curPtr = sourceFile->readUint16LE();
+ else if (bytesPerWord == 4)
+ *curPtr = sourceFile->readUint32LE();
+ else
+ error("verticalUnDiff: Invalid bytesPerWord (%d)", bytesPerWord);
+ curPtr += wordsPerRow;
+ copy--;
+ }
+ }
+ }
+ }
+}
+
+void Utils::runLengthDecode(byte *dest, Common::File *sourceFile) {
+ int8 num;
+ int16 count;
+
+ while (1) {
+ num = sourceFile->readSByte();
+
+ if (num == 127) {
+ return;
+ } else if (num > '\0') {
+ sourceFile->read(dest, num);
+ dest += num;
+ } else {
+ count = (int16)(-num);
+ num = sourceFile->readSByte();
+
+ while (count) {
+ *dest = num;
+ dest++;
+ count--;
+ }
+ }
+ }
+}
+
+void Utils::verticalRunLengthDecode(byte *dest, Common::File *sourceFile, uint16 bytesPerRow) {
+ int16 count;
+ byte *top = dest;
+
+ for (int i = 0; i < _dataBytesPerRow; i++) {
+ dest = top;
+ dest += i;
+
+ int8 num = sourceFile->readSByte();
+
+ while (num != 127) {
+ if (num > '\0') {
+ while (num) {
+ *dest = sourceFile->readByte();
+ dest += bytesPerRow;
+ num--;
+ }
+ } else {
+ count = (int16)(-num);
+ num = sourceFile->readSByte();
+
+ while (count) {
+ *dest = num;
+ dest += bytesPerRow;
+ count--;
+ }
+ }
+
+ num = sourceFile->readSByte();
+ }
+ }
+}
+
+void Utils::unDiff(byte *newBuf, byte *oldBuf, Common::File *sourceFile, uint16 bytesPerRow, bool isVertical) {
+ sourceFile->skip(1);
+ byte bufType = sourceFile->readByte();
+
+ if (isVertical) {
+ if (bufType == 0)
+ verticalUnDiff<byte>(newBuf, sourceFile, bytesPerRow);
+ else if (bufType == 1)
+ verticalUnDiff<uint16>((uint16 *)newBuf, sourceFile, bytesPerRow);
+ else if (bufType == 3)
+ verticalUnDiff<uint32>((uint32 *)newBuf, sourceFile, bytesPerRow);
+ else
+ error("Unexpected variable compression scheme %d", bufType);
+ } else {
+ if (bufType == 0)
+ unDiff<byte>(newBuf, sourceFile);
+ else if (bufType == 1)
+ unDiff<uint16>((uint16 *)newBuf, sourceFile);
+ else
+ error("Unexpected compression scheme %d", bufType);
+ }
+}
+
+void Utils::setBytesPerRow(int num) {
+ _dataBytesPerRow = num;
+}
+
+uint16 Utils::getRandom(uint16 max) {
+ if (max > 1)
+ return _rnd.getRandomNumber(max - 1);
+ else
+ return 0;
+}
+
+} // End of namespace Lab
diff --git a/engines/lab/utils.h b/engines/lab/utils.h
new file mode 100644
index 0000000000..a7bb42007e
--- /dev/null
+++ b/engines/lab/utils.h
@@ -0,0 +1,105 @@
+/* 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.
+ *
+ */
+
+/*
+ * This code is based on Labyrinth of Time code with assistance of
+ *
+ * Copyright (c) 1993 Terra Nova Development
+ * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
+ *
+ */
+
+#ifndef LAB_UTILS_H
+#define LAB_UTILS_H
+
+namespace Lab {
+
+class Utils {
+private:
+ LabEngine *_vm;
+ uint16 _dataBytesPerRow;
+
+ /**
+ * Undiffs a piece of memory based on the header size.
+ */
+ template<typename T>
+ void unDiff(T *dest, Common::File *sourceFile);
+
+ /**
+ * Undiffs a piece of memory when header size is a byte, and copy/skip size
+ * is a byte or a word or a double word.
+ */
+ template<typename T>
+ void verticalUnDiff(T *dest, Common::File *sourceFile, uint16 bytesPerRow);
+
+public:
+ Utils(LabEngine *vm);
+
+ Common::RandomSource _rnd;
+
+ /**
+ * Scales the x co-ordinates to that of the new display. In the room parser
+ * file, co-ordinates are set up on a 360x336 display.
+ */
+ uint16 scaleX(uint16 x);
+
+ /**
+ * Scales the y co-ordinates to that of the new display. In the room parser
+ * file, co-ordinates are set up on a 368x336 display.
+ */
+ uint16 scaleY(uint16 y);
+ Common::Rect rectScale(int16 x1, int16 y1, int16 x2, int16 y2);
+
+ /**
+ * Scales the VGA x coords to SVGA if necessary; otherwise, returns VGA coords.
+ */
+ int16 vgaScaleX(int16 x);
+
+ /**
+ * Scales the VGA y coords to SVGA if necessary; otherwise, returns VGA coords.
+ */
+ int16 vgaScaleY(int16 y);
+ Common::Rect vgaRectScale(int16 x1, int16 y1, int16 x2, int16 y2);
+ uint16 svgaCord(uint16 cord);
+ uint16 mapScaleX(uint16 x);
+ uint16 mapScaleY(uint16 y);
+ Common::Rect mapRectScale(int16 x1, int16 y1, int16 x2, int16 y2);
+
+ /**
+ * Converts SVGA coords to VGA if necessary, otherwise returns VGA coords.
+ */
+ Common::Point vgaUnscale(Common::Point pos);
+
+ /**
+ * Does the undiffing between the bitmaps.
+ */
+ void unDiff(byte *newBuf, byte *oldBuf, Common::File *sourceFile, uint16 bytesPerRow, bool isVertical);
+ void runLengthDecode(byte *dest, Common::File *sourceFile);
+ void verticalRunLengthDecode(byte *dest, Common::File *sourceFile, uint16 bytesPerRow);
+ void setBytesPerRow(int num);
+ uint16 getRandom(uint16 max);
+};
+
+
+} // End of namespace Lab
+
+#endif // LAB_UTILS_H
diff --git a/engines/logo_data.h b/engines/logo_data.h
new file mode 100644
index 0000000000..2eaff6930f
--- /dev/null
+++ b/engines/logo_data.h
@@ -0,0 +1,1099 @@
+/* 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.
+ *
+ */
+
+// This is a BMP file dumped into array.
+// recode ../d1 <dists/scummvm_logo.bmp >logo_data.h
+// The tool is from https://github.com/pinard/Recode
+
+byte logo_data[] = {
+ 66, 77, 180, 62, 0, 0, 0, 0, 0, 0, 54, 4, 0, 0, 40,
+ 0, 0, 0, 44, 1, 0, 0, 83, 0, 0, 0, 1, 0, 8, 0,
+ 1, 0, 0, 0, 126, 58, 0, 0, 19, 11, 0, 0, 19, 11, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2,
+ 0, 0, 0, 1, 9, 0, 0, 4, 1, 0, 1, 5, 3, 0, 2,
+ 4, 11, 0, 5, 7, 14, 0, 6, 10, 7, 0, 0, 10, 11, 0,
+ 0, 8, 18, 0, 3, 15, 14, 0, 5, 14, 21, 0, 13, 16, 14,
+ 0, 1, 16, 28, 0, 1, 20, 16, 0, 0, 22, 18, 0, 7, 19,
+ 31, 0, 3, 21, 35, 0, 2, 26, 21, 0, 22, 24, 23, 0, 12,
+ 26, 23, 0, 0, 29, 25, 0, 4, 24, 43, 0, 0, 33, 28, 0,
+ 2, 27, 48, 0, 29, 31, 29, 0, 8, 31, 52, 0, 4, 32, 57,
+ 0, 13, 39, 33, 0, 0, 41, 34, 0, 36, 38, 36, 0, 4, 36,
+ 64, 0, 8, 48, 40, 0, 42, 45, 43, 0, 5, 41, 73, 0, 2,
+ 52, 42, 0, 25, 53, 49, 0, 5, 46, 83, 0, 49, 52, 50, 0,
+ 0, 58, 47, 0, 54, 57, 55, 0, 6, 52, 92, 0, 4, 68, 56,
+ 0, 59, 62, 60, 0, 31, 67, 59, 0, 5, 57, 102, 0, 23, 70,
+ 61, 0, 63, 66, 64, 0, 0, 75, 62, 0, 3, 62, 110, 0, 7,
+ 63, 116, 0, 69, 71, 70, 0, 2, 67, 121, 0, 43, 79, 71, 0,
+ 6, 85, 70, 0, 75, 77, 76, 0, 7, 71, 126, 0, 38, 85, 77,
+ 0, 78, 81, 79, 0, 0, 91, 73, 0, 4, 74, 136, 0, 81, 84,
+ 82, 0, 9, 97, 77, 0, 10, 78, 141, 0, 85, 87, 86, 0, 1,
+ 80, 144, 0, 88, 91, 89, 0, 0, 103, 80, 0, 1, 106, 71, 0,
+ 0, 102, 85, 0, 5, 83, 148, 0, 41, 98, 86, 0, 3, 110, 67,
+ 0, 10, 85, 154, 0, 92, 95, 93, 0, 0, 112, 72, 0, 96, 99,
+ 97, 0, 6, 89, 162, 0, 0, 112, 87, 0, 0, 117, 76, 0, 2,
+117, 82, 0, 28, 111, 94, 0, 100, 102, 101, 0, 0, 95, 169, 0,
+ 0, 122, 80, 0, 0, 121, 87, 0, 103, 106, 104, 0, 3, 96, 172,
+ 0, 10, 97, 179, 0, 0, 126, 86, 0, 0, 128, 81, 0, 0, 123,
+ 98, 0, 107, 110, 108, 0, 1, 127, 94, 0, 19, 124, 101, 0, 110,
+113, 111, 0, 61, 120, 105, 0, 0, 132, 87, 0, 4, 103, 186, 0,
+114, 117, 115, 0, 0, 136, 91, 0, 0, 135, 96, 0, 0, 132, 107,
+ 0, 12, 107, 192, 0, 0, 135, 103, 0, 1, 140, 87, 0, 118, 121,
+119, 0, 2, 109, 199, 0, 5, 142, 89, 0, 0, 145, 94, 0, 122,
+125, 123, 0, 0, 143, 105, 0, 12, 140, 112, 0, 0, 145, 101, 0,
+ 11, 113, 206, 0, 0, 144, 115, 0, 1, 150, 99, 0, 127, 130, 128,
+ 0, 53, 140, 120, 0, 2, 118, 212, 0, 6, 152, 101, 0, 131, 134,
+132, 0, 41, 146, 123, 0, 0, 154, 111, 0, 0, 156, 106, 0, 0,
+153, 117, 0, 0, 158, 101, 0, 135, 138, 136, 0, 78, 147, 130, 0,
+ 4, 163, 106, 0, 139, 142, 140, 0, 0, 167, 111, 0, 0, 164, 122,
+ 0, 0, 169, 106, 0, 0, 166, 117, 0, 144, 147, 145, 0, 0, 171,
+115, 0, 21, 165, 136, 0, 6, 172, 124, 0, 44, 165, 137, 0, 7,
+176, 113, 0, 9, 175, 120, 0, 2, 171, 137, 0, 151, 154, 152, 0,
+ 0, 178, 124, 0, 0, 180, 118, 0, 82, 164, 146, 0, 30, 178, 122,
+ 0, 155, 158, 156, 0, 3, 186, 117, 0, 5, 186, 124, 0, 4, 185,
+131, 0, 0, 183, 145, 0, 0, 191, 123, 0, 29, 186, 131, 0, 40,
+185, 132, 0, 161, 164, 162, 0, 0, 190, 130, 0, 51, 185, 134, 0,
+ 32, 182, 155, 0, 46, 183, 151, 0, 0, 195, 127, 0, 4, 199, 123,
+ 0, 80, 181, 158, 0, 63, 184, 154, 0, 10, 196, 136, 0, 47, 189,
+147, 0, 169, 172, 170, 0, 21, 192, 153, 0, 0, 202, 128, 0, 26,
+195, 143, 0, 66, 191, 143, 0, 0, 201, 134, 0, 0, 199, 141, 0,
+ 57, 194, 145, 0, 42, 196, 144, 0, 0, 199, 154, 0, 0, 206, 132,
+ 0, 98, 188, 166, 0, 4, 211, 129, 0, 4, 206, 147, 0, 177, 180,
+178, 0, 6, 208, 142, 0, 84, 197, 153, 0, 28, 206, 146, 0, 0,
+212, 139, 0, 37, 205, 152, 0, 0, 215, 134, 0, 61, 202, 161, 0,
+ 58, 206, 156, 0, 43, 205, 166, 0, 0, 211, 163, 0, 183, 187, 185,
+ 0, 0, 215, 155, 0, 0, 218, 145, 0, 0, 220, 140, 0, 25, 216,
+151, 0, 5, 223, 135, 0, 25, 213, 162, 0, 0, 224, 137, 0, 43,
+215, 154, 0, 67, 207, 175, 0, 46, 213, 162, 0, 188, 191, 189, 0,
+ 0, 226, 139, 0, 101, 209, 171, 0, 192, 195, 193, 0, 67, 216, 165,
+ 0, 19, 227, 146, 0, 0, 228, 150, 0, 24, 227, 155, 0, 25, 230,
+149, 0, 109, 211, 187, 0, 196, 200, 198, 0, 120, 214, 179, 0, 44,
+230, 157, 0, 45, 225, 180, 0, 34, 227, 181, 0, 201, 204, 202, 0,
+ 7, 235, 164, 0, 59, 232, 164, 0, 65, 229, 179, 0, 61, 232, 173,
+ 0, 71, 234, 167, 0, 205, 209, 207, 0, 53, 234, 176, 0, 81, 235,
+174, 0, 210, 213, 211, 0, 92, 237, 178, 0, 93, 232, 195, 0, 213,
+216, 214, 0, 100, 236, 186, 0, 120, 229, 203, 0, 101, 238, 180, 0,
+108, 236, 186, 0, 28, 244, 188, 0, 34, 243, 199, 0, 121, 234, 202,
+ 0, 120, 239, 191, 0, 218, 221, 219, 0, 56, 247, 189, 0, 223, 226,
+224, 0, 83, 249, 202, 0, 98, 250, 200, 0, 130, 246, 204, 0, 110,
+250, 200, 0, 227, 230, 228, 0, 231, 234, 232, 0, 125, 252, 212, 0,
+117, 253, 214, 0, 105, 255, 215, 0, 234, 237, 235, 0, 134, 253, 222,
+ 0, 137, 255, 234, 0, 240, 243, 241, 0, 244, 247, 245, 0, 255, 119,
+ 24, 119, 0, 13, 114, 107, 103, 98, 88, 87, 77, 73, 70, 63, 70,
+ 77, 107, 0, 8, 119, 0, 0, 255, 119, 20, 119, 0, 5, 114, 87,
+ 65, 60, 60, 0, 11, 63, 1, 60, 1, 88, 7, 119, 0, 0, 255,
+119, 19, 119, 0, 3, 98, 63, 63, 0, 4, 65, 0, 9, 70, 63,
+ 60, 52, 50, 45, 45, 50, 65, 0, 3, 63, 1, 98, 6, 119, 0,
+ 0, 251, 119, 0, 6, 107, 98, 88, 77, 73, 63, 3, 60, 1, 77,
+ 1, 114, 11, 119, 0, 13, 114, 65, 52, 49, 41, 31, 22, 11, 4,
+ 1, 1, 4, 1, 0, 3, 4, 0, 5, 2, 49, 65, 63, 65, 0,
+ 6, 119, 0, 0, 204, 119, 4, 114, 41, 119, 1, 88, 1, 60, 5,
+ 63, 1, 65, 1, 65, 4, 63, 1, 88, 10, 119, 1, 52, 3, 4,
+ 1, 1, 3, 4, 1, 1, 4, 4, 1, 1, 4, 4, 0, 4, 45,
+ 65, 63, 103, 5, 119, 0, 0, 203, 119, 1, 77, 5, 63, 0, 4,
+ 77, 98, 114, 114, 16, 119, 5, 114, 14, 119, 0, 11, 70, 65, 65,
+ 63, 60, 60, 56, 52, 45, 45, 56, 0, 4, 63, 1, 88, 8, 119,
+ 1, 77, 4, 4, 0, 5, 1, 4, 1, 4, 1, 0, 3, 4, 1,
+ 1, 1, 1, 3, 4, 0, 5, 1, 1, 60, 63, 88, 0, 5, 119,
+ 0, 0, 202, 119, 4, 65, 8, 63, 1, 70, 1, 88, 6, 119, 0,
+ 4, 107, 87, 77, 70, 9, 63, 1, 77, 11, 119, 0, 4, 77, 56,
+ 24, 1, 3, 4, 0, 7, 1, 4, 1, 4, 1, 1, 52, 0, 3,
+ 63, 1, 107, 6, 119, 0, 7, 114, 1, 1, 4, 1, 4, 1, 0,
+ 3, 4, 0, 14, 1, 1, 4, 4, 1, 4, 4, 1, 4, 1, 4,
+ 31, 65, 87, 5, 119, 0, 0, 80, 119, 1, 114, 1, 88, 3, 77,
+ 1, 87, 1, 107, 4, 119, 0, 4, 103, 87, 83, 87, 3, 88, 0,
+ 4, 98, 98, 103, 114, 99, 119, 0, 6, 88, 45, 16, 9, 27, 49,
+ 10, 63, 0, 4, 114, 119, 119, 107, 15, 63, 1, 65, 10, 119, 1,
+ 16, 6, 4, 1, 1, 1, 1, 5, 4, 0, 4, 37, 65, 63, 73,
+ 6, 119, 1, 37, 4, 4, 1, 1, 5, 4, 0, 3, 19, 30, 33,
+ 0, 3, 43, 0, 7, 4, 4, 1, 4, 11, 70, 77, 0, 5, 119,
+ 0, 0, 15, 119, 0, 3, 107, 77, 65, 0, 8, 63, 1, 73, 1,
+ 98, 21, 119, 0, 3, 114, 88, 70, 0, 6, 63, 1, 77, 1, 98,
+ 16, 119, 1, 114, 1, 77, 25, 63, 0, 3, 65, 98, 98, 0, 7,
+ 77, 0, 8, 87, 88, 98, 114, 119, 119, 103, 70, 12, 63, 1, 77,
+ 6, 119, 0, 11, 114, 98, 77, 70, 63, 65, 77, 114, 119, 119, 98,
+ 0, 7, 77, 0, 8, 87, 88, 98, 114, 119, 119, 98, 70, 12, 63,
+ 1, 77, 6, 119, 0, 8, 107, 98, 77, 70, 63, 65, 83, 114, 7,
+119, 0, 3, 114, 4, 1, 0, 3, 4, 0, 8, 1, 4, 2, 4,
+ 17, 41, 60, 65, 4, 63, 0, 16, 119, 107, 63, 63, 65, 65, 63,
+ 56, 45, 34, 27, 17, 4, 4, 22, 56, 3, 63, 1, 77, 8, 119,
+ 0, 20, 13, 4, 1, 4, 1, 1, 4, 4, 1, 4, 1, 4, 1,
+ 1, 4, 4, 50, 63, 63, 98, 5, 119, 1, 4, 1, 4, 3, 1,
+ 1, 40, 3, 43, 0, 4, 47, 12, 47, 43, 4, 47, 0, 7, 7,
+ 4, 1, 4, 4, 70, 77, 0, 5, 119, 0, 0, 12, 119, 0, 3,
+ 88, 65, 65, 0, 14, 63, 0, 3, 65, 77, 114, 0, 14, 119, 0,
+ 3, 98, 65, 65, 0, 12, 63, 1, 65, 1, 83, 11, 119, 1, 98,
+ 1, 65, 3, 63, 6, 65, 5, 63, 10, 65, 17, 63, 1, 65, 1,
+ 65, 15, 63, 5, 65, 9, 63, 1, 65, 13, 63, 1, 65, 1, 65,
+ 15, 63, 5, 65, 9, 63, 1, 77, 6, 119, 1, 22, 5, 4, 0,
+ 4, 1, 4, 4, 1, 3, 4, 0, 18, 1, 11, 65, 63, 63, 107,
+ 70, 17, 4, 4, 2, 4, 1, 1, 4, 4, 1, 4, 3, 1, 0,
+ 5, 13, 65, 63, 63, 107, 0, 6, 119, 0, 4, 45, 4, 1, 1,
+ 3, 4, 0, 14, 1, 1, 4, 1, 4, 1, 1, 4, 4, 1, 1,
+ 65, 63, 65, 5, 119, 1, 1, 3, 4, 1, 19, 5, 47, 1, 19,
+ 1, 43, 5, 47, 0, 7, 19, 4, 4, 1, 1, 70, 73, 0, 5,
+119, 0, 0, 10, 119, 0, 14, 77, 65, 63, 63, 65, 70, 52, 37,
+ 31, 26, 26, 27, 34, 45, 3, 65, 5, 63, 1, 70, 1, 107, 10,
+119, 0, 12, 88, 65, 63, 63, 65, 70, 60, 45, 41, 37, 41, 50,
+ 3, 65, 4, 63, 1, 65, 1, 83, 8, 119, 0, 8, 70, 63, 65,
+ 63, 37, 13, 4, 4, 3, 1, 0, 11, 4, 11, 37, 56, 34, 9,
+ 4, 2, 4, 5, 2, 0, 4, 4, 0, 6, 5, 17, 45, 70, 65,
+ 65, 6, 70, 4, 65, 3, 63, 0, 15, 70, 56, 37, 31, 27, 27,
+ 26, 22, 17, 16, 13, 16, 34, 60, 65, 0, 6, 63, 0, 11, 65,
+ 65, 70, 65, 60, 70, 65, 63, 63, 65, 65, 0, 6, 70, 4, 65,
+ 3, 63, 0, 15, 70, 56, 37, 31, 27, 27, 26, 22, 17, 13, 13,
+ 16, 34, 63, 65, 0, 5, 63, 3, 65, 0, 5, 70, 65, 60, 70,
+ 65, 0, 3, 63, 1, 87, 4, 119, 1, 88, 4, 4, 0, 4, 1,
+ 1, 4, 1, 4, 4, 0, 7, 1, 4, 1, 4, 65, 63, 52, 0,
+ 3, 1, 4, 4, 1, 1, 1, 1, 6, 4, 0, 5, 1, 13, 70,
+ 63, 88, 0, 6, 119, 0, 15, 7, 4, 4, 1, 4, 4, 19, 30,
+ 38, 43, 43, 47, 43, 2, 1, 0, 3, 4, 0, 4, 37, 65, 63,
+ 87, 4, 119, 0, 6, 1, 4, 4, 1, 12, 51, 3, 47, 0, 3,
+ 51, 25, 40, 0, 4, 47, 0, 8, 51, 30, 1, 1, 4, 1, 60,
+ 70, 5, 119, 0, 0, 8, 119, 0, 8, 103, 65, 65, 70, 41, 16,
+ 5, 2, 9, 1, 0, 5, 4, 11, 31, 60, 65, 0, 4, 63, 1,
+ 77, 7, 119, 0, 8, 114, 70, 63, 70, 45, 22, 9, 4, 7, 1,
+ 0, 5, 4, 11, 37, 65, 65, 0, 3, 63, 1, 65, 1, 114, 4,
+119, 0, 5, 107, 65, 63, 22, 5, 0, 26, 1, 1, 4, 1, 9,
+ 3, 4, 0, 12, 2, 2, 4, 2, 4, 4, 5, 9, 22, 41, 17,
+ 4, 13, 1, 0, 17, 9, 52, 63, 49, 37, 24, 11, 9, 4, 4,
+ 1, 1, 2, 6, 27, 27, 9, 0, 3, 4, 0, 12, 2, 2, 4,
+ 2, 4, 4, 5, 9, 24, 41, 16, 2, 13, 1, 0, 9, 11, 52,
+ 60, 49, 37, 24, 11, 9, 4, 0, 4, 1, 0, 6, 5, 45, 65,
+ 63, 63, 114, 3, 119, 5, 4, 5, 1, 6, 4, 0, 3, 1, 22,
+ 63, 0, 3, 1, 0, 5, 4, 1, 1, 4, 1, 0, 3, 4, 1,
+ 1, 1, 1, 3, 4, 0, 5, 1, 1, 41, 63, 77, 0, 5, 119,
+ 0, 6, 114, 4, 4, 1, 4, 25, 3, 51, 1, 47, 5, 51, 5,
+ 4, 0, 4, 60, 63, 63, 114, 3, 119, 0, 5, 5, 1, 1, 4,
+ 7, 0, 5, 51, 1, 30, 1, 38, 5, 51, 0, 7, 33, 1, 4,
+ 4, 1, 52, 65, 0, 5, 119, 0, 0, 7, 119, 0, 4, 77, 65,
+ 50, 13, 18, 1, 0, 3, 9, 34, 70, 0, 3, 63, 1, 70, 1,
+114, 4, 119, 0, 5, 98, 65, 60, 17, 4, 0, 15, 1, 0, 3,
+ 13, 56, 65, 0, 3, 63, 0, 6, 103, 119, 119, 107, 65, 26, 119,
+ 1, 0, 7, 31, 65, 63, 98, 119, 119, 56, 0, 3, 1, 0, 22,
+ 4, 5, 40, 40, 38, 33, 19, 7, 1, 1, 4, 1, 4, 1, 4,
+ 11, 4, 4, 1, 1, 4, 4, 6, 1, 1, 7, 1, 5, 3, 1,
+ 0, 4, 4, 16, 70, 77, 5, 119, 1, 41, 3, 4, 1, 1, 1,
+ 43, 9, 51, 0, 9, 19, 1, 4, 1, 1, 24, 65, 63, 77, 0,
+ 3, 119, 0, 5, 22, 4, 4, 1, 1, 0, 5, 51, 1, 38, 1,
+ 33, 5, 51, 1, 43, 1, 1, 3, 4, 1, 49, 1, 63, 5, 119,
+ 0, 0, 6, 119, 0, 3, 70, 60, 13, 0, 22, 1, 0, 3, 4,
+ 41, 65, 0, 3, 63, 0, 6, 114, 119, 119, 98, 65, 24, 20, 1,
+ 1, 22, 1, 65, 3, 63, 0, 4, 98, 107, 56, 9, 121, 1, 0,
+ 5, 49, 63, 77, 119, 103, 0, 4, 4, 0, 3, 1, 40, 43, 0,
+ 5, 47, 0, 4, 43, 38, 4, 4, 4, 1, 3, 4, 0, 7, 2,
+ 33, 40, 43, 43, 47, 51, 0, 3, 55, 0, 8, 58, 12, 1, 1,
+ 4, 4, 70, 70, 5, 119, 0, 8, 5, 1, 4, 1, 1, 55, 55,
+ 51, 3, 55, 1, 51, 3, 55, 0, 24, 58, 4, 4, 1, 4, 4,
+ 50, 63, 63, 103, 119, 119, 37, 4, 4, 1, 1, 51, 55, 51, 55,
+ 55, 40, 30, 3, 55, 3, 51, 0, 6, 1, 1, 4, 4, 41, 63,
+ 5, 119, 0, 0, 5, 119, 1, 70, 1, 34, 26, 1, 1, 22, 1,
+ 70, 3, 63, 0, 4, 107, 98, 50, 5, 22, 1, 0, 6, 6, 56,
+ 65, 63, 63, 45, 10, 1, 0, 4, 8, 21, 23, 21, 6, 1, 0,
+ 6, 4, 10, 8, 4, 4, 0, 97, 1, 0, 5, 22, 65, 73, 119,
+ 31, 0, 4, 4, 1, 19, 9, 47, 1, 38, 3, 1, 0, 6, 4,
+ 1, 4, 1, 1, 38, 3, 55, 1, 58, 3, 55, 0, 10, 58, 55,
+ 58, 33, 1, 4, 1, 4, 56, 63, 5, 119, 1, 2, 3, 4, 1,
+ 25, 1, 58, 3, 55, 0, 20, 58, 55, 58, 58, 55, 58, 55, 33,
+ 1, 1, 4, 1, 11, 70, 63, 70, 119, 119, 50, 4, 3, 1, 0,
+ 20, 51, 58, 55, 58, 55, 43, 12, 38, 43, 58, 55, 58, 61, 1,
+ 1, 4, 1, 37, 63, 107, 4, 119, 0, 0, 4, 119, 1, 73, 1,
+ 22, 9, 1, 0, 4, 29, 48, 59, 62, 3, 67, 0, 4, 59, 48,
+ 35, 8, 8, 1, 1, 5, 1, 60, 3, 63, 1, 41, 9, 1, 0,
+ 9, 21, 39, 48, 54, 59, 59, 48, 32, 4, 0, 8, 1, 0, 3,
+ 50, 65, 50, 0, 7, 1, 0, 11, 18, 54, 78, 93, 89, 80, 79,
+ 89, 93, 78, 42, 0, 3, 1, 0, 4, 112, 89, 85, 85, 5, 93,
+ 1, 104, 1, 21, 3, 1, 0, 7, 8, 23, 21, 21, 18, 15, 14,
+ 0, 3, 8, 6, 1, 0, 3, 59, 62, 62, 0, 5, 67, 0, 3,
+ 78, 78, 8, 0, 9, 1, 0, 4, 4, 21, 35, 42, 5, 1, 0,
+ 10, 8, 23, 21, 21, 18, 14, 14, 8, 8, 4, 5, 1, 0, 4,
+ 10, 59, 62, 62, 5, 67, 0, 3, 78, 78, 4, 0, 9, 1, 0,
+ 4, 8, 21, 35, 48, 5, 1, 0, 3, 65, 63, 77, 0, 3, 4,
+ 0, 7, 1, 4, 51, 47, 47, 51, 51, 0, 5, 47, 0, 5, 43,
+ 4, 4, 1, 1, 0, 4, 4, 1, 33, 10, 58, 0, 8, 47, 2,
+ 1, 4, 4, 45, 63, 114, 3, 119, 1, 70, 1, 4, 3, 1, 1,
+ 47, 10, 58, 0, 3, 55, 61, 7, 0, 4, 4, 0, 11, 37, 63,
+ 63, 88, 119, 65, 4, 1, 4, 1, 51, 0, 4, 58, 0, 15, 55,
+ 40, 33, 25, 19, 61, 58, 61, 4, 4, 1, 1, 31, 63, 98, 0,
+ 4, 119, 0, 0, 3, 119, 1, 77, 1, 11, 7, 1, 0, 17, 35,
+ 67, 93, 79, 75, 72, 72, 68, 72, 75, 72, 72, 80, 93, 78, 42,
+ 4, 0, 7, 1, 0, 3, 60, 65, 41, 0, 7, 1, 0, 5, 29,
+ 59, 93, 85, 79, 0, 3, 75, 0, 6, 72, 72, 80, 93, 67, 35,
+ 7, 1, 1, 27, 1, 4, 5, 1, 0, 5, 14, 67, 89, 75, 75,
+ 0, 5, 79, 0, 7, 75, 68, 80, 93, 29, 1, 104, 0, 5, 79,
+ 0, 5, 72, 68, 68, 79, 32, 0, 3, 1, 0, 5, 115, 89, 89,
+ 85, 85, 0, 3, 89, 0, 3, 93, 93, 67, 0, 4, 1, 0, 12,
+ 18, 89, 75, 75, 79, 75, 75, 72, 68, 68, 80, 8, 3, 1, 0,
+ 11, 35, 42, 54, 67, 78, 93, 93, 85, 80, 80, 35, 0, 4, 1,
+ 1, 102, 1, 89, 6, 85, 0, 3, 89, 93, 59, 0, 4, 1, 0,
+ 4, 39, 89, 79, 79, 3, 75, 0, 19, 72, 68, 68, 80, 4, 1,
+ 1, 4, 35, 42, 54, 67, 78, 93, 93, 89, 80, 80, 14, 0, 4,
+ 1, 0, 8, 52, 65, 11, 4, 1, 1, 4, 33, 10, 51, 1, 47,
+ 1, 1, 5, 4, 0, 3, 1, 4, 19, 0, 4, 61, 1, 58, 1,
+ 58, 3, 61, 0, 9, 58, 61, 1, 4, 4, 1, 37, 63, 98, 0,
+ 3, 119, 0, 7, 16, 1, 4, 1, 1, 55, 58, 0, 4, 61, 0,
+ 3, 58, 61, 58, 0, 4, 61, 0, 17, 47, 2, 4, 4, 1, 5,
+ 65, 63, 65, 119, 88, 4, 4, 1, 1, 47, 58, 0, 7, 61, 1,
+ 2, 3, 19, 0, 7, 4, 1, 4, 1, 26, 65, 88, 0, 4, 119,
+ 0, 0, 0, 4, 119, 119, 98, 9, 6, 1, 0, 5, 32, 91, 79,
+ 75, 79, 0, 8, 90, 0, 7, 89, 79, 72, 68, 72, 93, 48, 0,
+ 6, 1, 1, 2, 1, 31, 6, 1, 0, 18, 18, 78, 85, 72, 79,
+ 79, 89, 90, 100, 100, 90, 79, 79, 75, 72, 79, 78, 18, 11, 1,
+ 0, 28, 39, 101, 79, 90, 90, 100, 100, 105, 105, 108, 105, 97, 90,
+ 89, 79, 101, 67, 100, 109, 120, 109, 108, 100, 90, 79, 72, 80, 29,
+ 3, 1, 0, 11, 125, 90, 89, 79, 89, 89, 79, 75, 68, 68, 67,
+ 0, 4, 1, 1, 8, 1, 113, 4, 100, 0, 5, 90, 90, 75, 68,
+ 80, 0, 3, 1, 1, 35, 1, 89, 3, 79, 0, 7, 89, 90, 90,
+ 75, 68, 72, 62, 0, 4, 1, 0, 11, 112, 79, 79, 90, 89, 79,
+ 79, 72, 68, 68, 78, 0, 4, 1, 0, 16, 39, 120, 100, 97, 100,
+100, 90, 90, 79, 72, 80, 4, 1, 1, 54, 89, 7, 79, 0, 3,
+ 75, 68, 42, 0, 4, 1, 0, 7, 45, 37, 1, 4, 4, 1, 7,
+ 0, 3, 51, 1, 55, 4, 51, 0, 4, 55, 51, 51, 55, 3, 1,
+ 5, 4, 1, 7, 1, 64, 5, 61, 0, 15, 64, 61, 64, 61, 64,
+ 4, 1, 4, 4, 31, 63, 88, 119, 119, 114, 0, 3, 4, 1, 1,
+ 1, 12, 4, 64, 4, 61, 1, 64, 4, 61, 0, 29, 64, 19, 1,
+ 1, 4, 4, 27, 65, 63, 77, 114, 1, 1, 4, 2, 47, 61, 61,
+ 64, 61, 61, 64, 61, 61, 58, 51, 55, 55, 7, 0, 3, 4, 0,
+ 3, 22, 65, 87, 0, 4, 119, 0, 0, 0, 3, 119, 119, 13, 0,
+ 6, 1, 0, 8, 67, 89, 79, 90, 97, 109, 129, 129, 3, 126, 3,
+109, 0, 9, 105, 100, 90, 79, 75, 72, 80, 93, 18, 0, 11, 1,
+ 0, 20, 39, 101, 79, 79, 90, 90, 109, 116, 109, 108, 109, 109, 100,
+ 97, 97, 89, 75, 68, 93, 32, 9, 1, 0, 29, 39, 89, 89, 100,
+109, 116, 109, 105, 109, 116, 126, 126, 116, 109, 108, 105, 109, 109, 120,
+131, 136, 129, 116, 108, 109, 108, 84, 79, 23, 0, 3, 1, 0, 11,
+168, 116, 109, 109, 108, 109, 116, 108, 84, 72, 67, 0, 5, 1, 0,
+ 10, 124, 120, 124, 126, 120, 116, 97, 79, 72, 80, 4, 1, 1, 124,
+ 4, 109, 0, 6, 126, 116, 90, 75, 68, 91, 4, 1, 1, 132, 4,
+109, 0, 6, 100, 97, 89, 75, 72, 78, 4, 1, 0, 4, 35, 136,
+126, 116, 3, 109, 0, 9, 108, 90, 79, 85, 4, 1, 1, 23, 124,
+ 0, 3, 108, 0, 7, 109, 109, 100, 100, 89, 72, 78, 0, 4, 1,
+ 0, 7, 34, 4, 1, 1, 4, 1, 47, 0, 12, 55, 0, 4, 19,
+ 4, 1, 1, 4, 4, 1, 1, 4, 64, 1, 66, 1, 61, 4, 64,
+ 0, 11, 66, 7, 1, 1, 4, 22, 65, 77, 119, 119, 98, 0, 4,
+ 4, 0, 4, 43, 64, 64, 61, 5, 64, 1, 66, 4, 64, 0, 3,
+ 61, 61, 4, 0, 4, 1, 0, 9, 60, 63, 63, 114, 5, 1, 4,
+ 4, 47, 0, 5, 64, 1, 61, 5, 64, 0, 8, 66, 12, 1, 1,
+ 4, 13, 70, 77, 4, 119, 0, 0, 1, 119, 1, 41, 5, 1, 0,
+ 13, 10, 104, 79, 90, 108, 116, 116, 109, 126, 147, 147, 141, 136, 0,
+ 5, 126, 0, 8, 109, 97, 90, 89, 75, 72, 93, 21, 9, 1, 0,
+ 22, 54, 89, 90, 105, 109, 105, 105, 116, 126, 116, 120, 126, 129, 126,
+116, 116, 109, 100, 79, 72, 80, 32, 7, 1, 0, 14, 21, 113, 90,
+100, 109, 124, 129, 129, 120, 120, 126, 129, 131, 129, 6, 126, 0, 10,
+129, 133, 131, 126, 109, 109, 116, 97, 89, 21, 3, 1, 0, 11, 191,
+133, 131, 129, 126, 109, 109, 129, 116, 79, 78, 0, 5, 1, 0, 3,
+145, 129, 126, 0, 3, 129, 0, 4, 116, 97, 79, 80, 4, 1, 1,
+151, 3, 129, 3, 126, 0, 4, 109, 90, 72, 91, 4, 1, 1, 152,
+ 1, 131, 3, 129, 0, 6, 126, 120, 100, 79, 72, 91, 4, 1, 0,
+ 12, 32, 150, 136, 136, 126, 109, 116, 116, 109, 90, 93, 4, 3, 1,
+ 0, 3, 170, 129, 129, 0, 3, 126, 0, 5, 120, 109, 90, 79, 104,
+ 0, 4, 1, 5, 4, 0, 7, 7, 51, 58, 58, 55, 58, 55, 0,
+ 7, 58, 0, 5, 33, 4, 4, 1, 1, 0, 3, 4, 1, 1, 1,
+ 58, 3, 66, 0, 25, 64, 66, 66, 64, 66, 64, 66, 12, 4, 4,
+ 1, 11, 70, 73, 119, 119, 37, 1, 4, 4, 1, 55, 66, 66, 64,
+ 0, 6, 66, 0, 20, 64, 64, 66, 64, 66, 66, 30, 1, 1, 4,
+ 4, 13, 65, 63, 65, 5, 1, 4, 1, 38, 5, 66, 1, 64, 4,
+ 66, 0, 9, 64, 66, 12, 4, 1, 4, 6, 70, 77, 0, 4, 119,
+ 0, 0, 1, 83, 5, 1, 0, 28, 8, 125, 90, 108, 120, 129, 131,
+131, 126, 126, 136, 147, 147, 136, 133, 129, 129, 133, 133, 129, 116, 100,
+ 90, 90, 79, 75, 85, 8, 7, 1, 0, 24, 42, 101, 100, 109, 126,
+133, 129, 126, 120, 126, 129, 129, 136, 147, 141, 133, 131, 129, 126, 108,
+ 90, 72, 85, 14, 6, 1, 0, 30, 115, 108, 116, 109, 109, 116, 129,
+147, 141, 133, 133, 136, 141, 141, 136, 136, 133, 129, 133, 133, 131, 133,
+136, 136, 129, 116, 109, 97, 89, 14, 3, 1, 0, 11, 217, 147, 147,
+141, 136, 126, 109, 116, 109, 84, 78, 0, 5, 1, 0, 10, 154, 141,
+129, 126, 126, 131, 136, 120, 90, 85, 4, 1, 0, 5, 190, 147, 147,
+136, 131, 0, 3, 129, 0, 3, 109, 79, 80, 0, 4, 1, 0, 11,
+168, 158, 147, 136, 136, 133, 131, 120, 90, 75, 91, 0, 4, 1, 0,
+ 12, 23, 170, 147, 147, 133, 126, 116, 109, 109, 105, 101, 4, 3, 1,
+ 0, 12, 160, 155, 147, 136, 131, 129, 129, 120, 105, 89, 104, 4, 4,
+ 1, 0, 12, 4, 4, 1, 4, 33, 7, 19, 47, 58, 61, 58, 61,
+ 5, 58, 0, 11, 61, 51, 4, 1, 4, 4, 1, 4, 4, 1, 47,
+ 0, 10, 66, 1, 19, 3, 1, 0, 10, 2, 70, 70, 119, 119, 4,
+ 1, 4, 1, 2, 16, 66, 0, 14, 74, 7, 1, 4, 4, 1, 50,
+ 63, 63, 5, 4, 1, 1, 33, 12, 66, 1, 25, 1, 1, 3, 4,
+ 1, 70, 1, 73, 4, 119, 0, 0, 1, 37, 4, 1, 0, 17, 8,
+132, 109, 116, 126, 129, 133, 136, 136, 131, 129, 136, 136, 147, 147, 136,
+133, 0, 4, 129, 0, 8, 126, 116, 108, 100, 90, 79, 72, 102, 6,
+ 1, 0, 16, 14, 123, 105, 120, 126, 129, 133, 133, 129, 131, 136, 141,
+136, 136, 147, 147, 3, 136, 0, 6, 133, 126, 109, 79, 68, 112, 5,
+ 1, 0, 10, 32, 113, 116, 126, 126, 120, 116, 120, 131, 141, 3, 136,
+ 0, 7, 147, 147, 155, 147, 147, 136, 136, 0, 4, 133, 0, 7, 136,
+131, 126, 116, 100, 89, 8, 0, 3, 1, 0, 11, 217, 155, 147, 147,
+141, 131, 116, 116, 105, 79, 78, 0, 5, 1, 0, 10, 154, 147, 131,
+126, 116, 126, 131, 126, 90, 80, 4, 1, 0, 11, 122, 171, 147, 141,
+136, 133, 129, 129, 116, 90, 80, 0, 4, 1, 0, 3, 166, 158, 147,
+ 0, 4, 136, 0, 4, 129, 105, 79, 91, 4, 1, 0, 11, 18, 170,
+136, 133, 131, 129, 120, 109, 100, 90, 104, 0, 4, 1, 0, 12, 122,
+171, 158, 147, 136, 133, 129, 126, 109, 90, 85, 8, 4, 1, 0, 4,
+ 4, 4, 1, 33, 3, 61, 0, 12, 25, 1, 25, 51, 61, 64, 61,
+ 58, 61, 61, 64, 55, 4, 1, 1, 4, 3, 1, 0, 35, 40, 74,
+ 66, 74, 74, 66, 74, 74, 66, 74, 74, 33, 1, 4, 4, 1, 60,
+ 65, 119, 103, 4, 1, 1, 4, 33, 74, 66, 74, 74, 66, 74, 74,
+ 66, 74, 66, 0, 4, 74, 0, 16, 66, 66, 74, 43, 1, 4, 1,
+ 4, 4, 65, 63, 4, 1, 4, 1, 25, 4, 74, 0, 5, 66, 66,
+ 74, 74, 66, 0, 3, 74, 1, 33, 3, 1, 0, 3, 4, 65, 70,
+ 0, 4, 119, 0, 0, 1, 17, 4, 1, 0, 5, 168, 126, 129, 131,
+133, 0, 3, 136, 0, 5, 141, 141, 136, 147, 158, 0, 3, 171, 0,
+ 14, 155, 136, 131, 129, 129, 126, 129, 126, 108, 90, 89, 75, 80, 32,
+ 5, 1, 0, 6, 104, 109, 126, 129, 129, 133, 3, 136, 0, 3, 131,
+140, 147, 0, 3, 155, 0, 11, 158, 147, 147, 141, 136, 129, 124, 100,
+ 79, 72, 39, 0, 4, 1, 1, 91, 1, 109, 3, 126, 0, 14, 129,
+126, 116, 120, 129, 133, 136, 147, 158, 171, 183, 171, 171, 155, 3, 136,
+ 0, 9, 133, 136, 136, 133, 126, 116, 100, 101, 4, 0, 3, 1, 0,
+ 11, 217, 155, 147, 136, 136, 133, 126, 120, 108, 79, 78, 0, 5, 1,
+ 0, 5, 154, 147, 136, 133, 126, 0, 3, 109, 1, 90, 1, 80, 4,
+ 1, 0, 12, 32, 171, 158, 147, 136, 133, 131, 131, 126, 100, 79, 14,
+ 3, 1, 0, 11, 170, 155, 147, 136, 136, 133, 131, 126, 109, 79, 102,
+ 0, 4, 1, 0, 11, 14, 165, 136, 133, 129, 126, 126, 120, 100, 79,
+ 93, 0, 4, 1, 0, 12, 71, 171, 171, 155, 141, 131, 131, 126, 116,
+ 90, 79, 8, 4, 1, 0, 4, 4, 1, 12, 66, 3, 64, 0, 31,
+ 61, 64, 51, 12, 1, 38, 64, 64, 61, 64, 64, 61, 1, 1, 4,
+ 4, 1, 4, 1, 1, 33, 76, 76, 66, 64, 66, 55, 40, 30, 12,
+ 1, 0, 4, 4, 0, 10, 1, 50, 63, 119, 63, 1, 1, 4, 4,
+ 64, 6, 74, 3, 76, 4, 74, 0, 6, 76, 66, 74, 74, 76, 12,
+ 4, 1, 1, 34, 1, 63, 4, 4, 0, 8, 19, 76, 74, 76, 76,
+ 74, 76, 76, 3, 74, 0, 9, 76, 66, 43, 1, 4, 1, 4, 56,
+ 65, 0, 4, 119, 0, 0, 1, 9, 3, 1, 0, 6, 14, 186, 147,
+155, 147, 147, 4, 141, 0, 12, 147, 158, 183, 183, 205, 214, 205, 205,
+171, 147, 136, 136, 3, 131, 0, 6, 126, 100, 97, 89, 75, 104, 4,
+ 1, 0, 14, 21, 134, 129, 136, 131, 131, 136, 136, 141, 147, 147, 141,
+147, 158, 4, 183, 0, 10, 158, 155, 141, 136, 129, 124, 100, 79, 112,
+ 4, 3, 1, 0, 21, 168, 129, 131, 131, 129, 131, 131, 124, 116, 129,
+136, 136, 155, 188, 205, 214, 214, 183, 171, 158, 147, 0, 4, 136, 0,
+ 5, 141, 136, 124, 97, 89, 0, 4, 1, 0, 4, 216, 155, 147, 136,
+ 3, 131, 0, 4, 129, 116, 90, 78, 5, 1, 0, 10, 166, 147, 141,
+141, 131, 116, 109, 109, 89, 80, 5, 1, 0, 11, 188, 171, 155, 141,
+136, 136, 131, 129, 109, 89, 35, 0, 3, 1, 0, 11, 170, 155, 147,
+141, 136, 131, 129, 124, 109, 89, 102, 0, 4, 1, 0, 11, 8, 186,
+147, 136, 136, 131, 129, 129, 108, 79, 93, 0, 4, 1, 0, 12, 18,
+207, 171, 155, 141, 141, 136, 129, 120, 100, 79, 15, 4, 1, 0, 3,
+ 4, 1, 51, 0, 3, 66, 0, 16, 61, 64, 64, 66, 66, 74, 12,
+ 66, 64, 64, 66, 64, 66, 2, 4, 4, 3, 1, 1, 4, 1, 1,
+ 4, 4, 0, 9, 7, 25, 40, 55, 74, 82, 82, 66, 1, 0, 3,
+ 4, 0, 4, 37, 63, 107, 13, 4, 1, 0, 4, 74, 76, 76, 74,
+ 6, 76, 1, 74, 8, 76, 1, 61, 1, 1, 3, 4, 0, 9, 1,
+ 65, 5, 4, 4, 1, 7, 82, 74, 0, 10, 76, 0, 7, 51, 1,
+ 1, 4, 4, 49, 65, 0, 4, 119, 0, 0, 1, 27, 4, 1, 0,
+ 5, 71, 171, 183, 171, 158, 0, 5, 155, 0, 3, 189, 201, 44, 0,
+ 3, 1, 0, 15, 7, 205, 158, 155, 141, 141, 136, 140, 131, 120, 109,
+100, 79, 80, 4, 0, 3, 1, 0, 5, 102, 129, 136, 141, 141, 0,
+ 4, 136, 0, 23, 141, 141, 155, 175, 229, 163, 212, 232, 214, 205, 171,
+155, 154, 141, 136, 126, 100, 89, 23, 1, 1, 23, 165, 0, 3, 141,
+ 0, 9, 136, 140, 136, 131, 124, 129, 141, 176, 62, 0, 3, 1, 0,
+ 8, 57, 237, 205, 171, 158, 141, 136, 136, 3, 131, 0, 3, 126, 100,
+ 93, 0, 4, 1, 0, 11, 216, 158, 147, 141, 141, 136, 131, 131, 126,
+100, 78, 0, 5, 1, 0, 10, 175, 155, 141, 141, 136, 126, 116, 116,
+100, 80, 5, 1, 0, 11, 188, 171, 158, 155, 141, 136, 131, 124, 100,
+ 79, 54, 0, 3, 1, 0, 11, 170, 147, 155, 141, 141, 136, 131, 129,
+116, 89, 104, 0, 4, 1, 0, 11, 8, 186, 155, 154, 141, 136, 136,
+131, 116, 89, 104, 0, 5, 1, 1, 207, 1, 155, 4, 141, 0, 5,
+136, 124, 100, 79, 32, 0, 5, 1, 1, 25, 7, 66, 0, 5, 64,
+ 66, 74, 12, 74, 0, 4, 66, 0, 11, 74, 25, 1, 4, 1, 4,
+ 1, 4, 1, 7, 86, 0, 3, 82, 4, 76, 0, 16, 82, 76, 86,
+ 4, 4, 1, 4, 27, 63, 77, 1, 1, 4, 4, 19, 82, 4, 76,
+ 1, 82, 8, 76, 1, 82, 3, 76, 0, 22, 82, 82, 33, 1, 4,
+ 1, 1, 17, 17, 1, 4, 4, 1, 86, 82, 76, 76, 82, 82, 76,
+ 76, 82, 3, 76, 0, 7, 66, 1, 4, 1, 4, 41, 63, 0, 4,
+119, 0, 0, 1, 50, 5, 1, 0, 10, 163, 214, 214, 205, 171, 174,
+155, 198, 94, 0, 6, 1, 1, 32, 1, 174, 3, 154, 0, 9, 141,
+141, 140, 131, 116, 116, 89, 80, 18, 0, 3, 1, 0, 6, 132, 131,
+140, 141, 154, 154, 5, 140, 1, 217, 1, 14, 4, 1, 0, 15, 128,
+214, 214, 183, 171, 166, 155, 140, 129, 100, 104, 1, 1, 48, 157, 0,
+ 3, 154, 1, 141, 3, 140, 0, 4, 129, 126, 151, 29, 5, 1, 0,
+ 6, 7, 237, 183, 174, 158, 154, 3, 140, 0, 4, 131, 124, 100, 93,
+ 4, 1, 0, 11, 216, 166, 155, 154, 141, 140, 140, 136, 124, 100, 78,
+ 0, 5, 1, 0, 10, 189, 174, 155, 154, 141, 136, 120, 116, 97, 85,
+ 5, 1, 0, 11, 188, 174, 155, 155, 154, 140, 136, 129, 109, 89, 69,
+ 0, 3, 1, 0, 11, 170, 155, 155, 154, 141, 141, 140, 131, 124, 97,
+104, 0, 4, 1, 0, 11, 8, 186, 155, 154, 154, 141, 140, 136, 126,
+ 90, 104, 0, 5, 1, 0, 3, 166, 155, 141, 0, 3, 140, 0, 5,
+141, 136, 116, 79, 48, 0, 4, 1, 1, 4, 4, 74, 1, 66, 1,
+ 74, 3, 66, 0, 10, 74, 74, 6, 76, 74, 66, 74, 66, 66, 40,
+ 3, 1, 0, 11, 4, 1, 4, 4, 1, 82, 82, 86, 86, 82, 86,
+ 0, 4, 82, 1, 86, 1, 7, 3, 4, 0, 3, 22, 65, 52, 0,
+ 4, 1, 0, 4, 58, 82, 86, 76, 5, 82, 0, 6, 86, 82, 86,
+ 82, 86, 76, 5, 82, 0, 9, 86, 74, 1, 1, 4, 1, 1, 24,
+ 4, 0, 3, 1, 0, 3, 76, 82, 86, 0, 4, 82, 0, 13, 86,
+ 82, 86, 82, 82, 86, 1, 4, 1, 4, 37, 63, 114, 0, 3, 119,
+ 0, 0, 1, 119, 6, 1, 0, 7, 232, 214, 214, 205, 188, 142, 4,
+ 0, 8, 1, 0, 21, 10, 170, 154, 145, 145, 141, 145, 145, 136, 124,
+120, 100, 79, 39, 1, 1, 14, 151, 136, 145, 145, 0, 4, 154, 0,
+ 4, 145, 145, 191, 8, 6, 1, 0, 24, 53, 214, 214, 205, 183, 174,
+155, 150, 180, 112, 1, 1, 81, 154, 154, 144, 145, 145, 136, 145, 140,
+124, 116, 91, 7, 1, 1, 28, 1, 205, 3, 174, 0, 7, 154, 154,
+144, 145, 131, 100, 93, 0, 4, 1, 0, 11, 216, 174, 154, 154, 144,
+145, 144, 145, 124, 100, 94, 0, 5, 1, 0, 10, 189, 154, 151, 145,
+144, 136, 124, 116, 90, 85, 5, 1, 0, 11, 160, 174, 166, 154, 155,
+154, 151, 140, 124, 100, 91, 0, 3, 1, 1, 190, 1, 166, 3, 154,
+ 0, 6, 144, 136, 136, 124, 100, 104, 4, 1, 0, 11, 8, 202, 154,
+154, 145, 145, 136, 131, 129, 97, 104, 0, 5, 1, 0, 4, 139, 166,
+144, 136, 3, 145, 0, 4, 144, 131, 90, 59, 4, 1, 1, 33, 1,
+ 76, 4, 74, 1, 66, 3, 74, 0, 4, 76, 82, 4, 76, 5, 74,
+ 1, 64, 1, 1, 6, 4, 0, 5, 1, 66, 86, 86, 82, 0, 3,
+ 86, 1, 82, 3, 86, 0, 7, 12, 4, 4, 1, 16, 70, 27, 0,
+ 3, 4, 0, 4, 1, 19, 19, 7, 4, 86, 1, 82, 5, 86, 1,
+ 82, 8, 86, 1, 47, 4, 1, 1, 4, 1, 4, 3, 1, 0, 4,
+ 74, 86, 86, 82, 8, 86, 0, 8, 95, 4, 4, 1, 1, 31, 63,
+103, 3, 119, 0, 0, 1, 119, 1, 87, 5, 1, 0, 5, 4, 232,
+214, 229, 57, 0, 10, 1, 0, 20, 142, 150, 145, 145, 144, 145, 144,
+145, 136, 131, 131, 116, 89, 42, 1, 1, 59, 144, 131, 145, 3, 150,
+ 0, 5, 151, 154, 145, 134, 29, 0, 8, 1, 0, 8, 128, 214, 205,
+237, 229, 122, 21, 8, 3, 1, 0, 12, 94, 175, 151, 145, 144, 145,
+144, 136, 136, 124, 113, 32, 7, 1, 0, 12, 4, 229, 174, 175, 154,
+175, 175, 150, 145, 136, 100, 85, 4, 1, 0, 11, 217, 175, 154, 145,
+145, 150, 145, 144, 136, 100, 91, 0, 5, 1, 0, 10, 170, 151, 150,
+145, 145, 141, 131, 124, 100, 85, 5, 1, 0, 11, 102, 189, 175, 154,
+151, 151, 154, 145, 129, 100, 102, 0, 3, 1, 0, 11, 168, 175, 151,
+150, 150, 144, 131, 136, 131, 100, 104, 0, 4, 1, 0, 11, 8, 202,
+175, 150, 144, 144, 141, 131, 124, 100, 104, 0, 5, 1, 0, 11, 122,
+175, 145, 131, 145, 150, 145, 144, 136, 100, 69, 0, 4, 1, 1, 38,
+ 7, 76, 0, 7, 74, 76, 76, 82, 61, 1, 55, 0, 3, 82, 0,
+ 6, 76, 74, 1, 4, 4, 1, 3, 4, 1, 1, 1, 51, 7, 86,
+ 0, 21, 92, 86, 92, 25, 4, 4, 1, 4, 70, 1, 1, 4, 4,
+ 1, 86, 95, 7, 92, 86, 86, 92, 0, 5, 86, 1, 40, 9, 86,
+ 0, 3, 92, 4, 4, 0, 3, 1, 0, 5, 4, 1, 4, 1, 66,
+ 0, 6, 86, 1, 92, 4, 86, 1, 95, 1, 7, 3, 1, 0, 3,
+ 24, 63, 98, 0, 3, 119, 0, 0, 0, 3, 119, 119, 56, 0, 5,
+ 1, 0, 3, 36, 249, 36, 0, 10, 1, 0, 6, 69, 151, 150, 150,
+145, 145, 3, 150, 0, 12, 145, 136, 136, 124, 100, 48, 1, 1, 115,
+170, 144, 144, 4, 150, 0, 3, 144, 129, 137, 0, 9, 1, 0, 4,
+ 7, 146, 46, 14, 7, 1, 0, 3, 94, 175, 170, 0, 5, 150, 0,
+ 4, 144, 124, 100, 21, 8, 1, 0, 11, 242, 188, 175, 170, 150, 150,
+145, 144, 131, 100, 91, 0, 4, 1, 0, 11, 217, 175, 170, 150, 145,
+150, 150, 145, 141, 116, 93, 0, 5, 1, 0, 10, 186, 170, 170, 157,
+150, 145, 136, 124, 100, 93, 5, 1, 0, 11, 54, 186, 175, 170, 170,
+150, 150, 136, 124, 100, 115, 0, 3, 1, 0, 11, 190, 157, 157, 150,
+150, 145, 136, 136, 124, 100, 104, 0, 4, 1, 0, 4, 8, 198, 175,
+157, 3, 150, 0, 5, 144, 136, 100, 104, 4, 0, 4, 1, 0, 11,
+ 81, 189, 170, 141, 136, 150, 150, 144, 124, 101, 67, 0, 4, 1, 0,
+ 7, 40, 82, 76, 76, 82, 82, 76, 0, 3, 82, 0, 13, 76, 82,
+ 76, 76, 19, 6, 7, 7, 33, 76, 1, 4, 1, 0, 4, 4, 1,
+ 1, 1, 40, 3, 92, 1, 95, 1, 38, 5, 12, 0, 14, 4, 1,
+ 1, 4, 1, 52, 4, 1, 1, 4, 40, 92, 95, 7, 4, 92, 1,
+ 86, 3, 92, 0, 3, 47, 4, 95, 0, 8, 92, 0, 3, 95, 64,
+ 1, 0, 4, 4, 0, 4, 1, 4, 1, 64, 9, 92, 0, 10, 86,
+ 92, 92, 12, 1, 4, 1, 17, 65, 88, 3, 119, 0, 0, 3, 119,
+ 1, 34, 5, 1, 1, 7, 10, 1, 0, 3, 91, 134, 145, 0, 5,
+157, 0, 13, 165, 170, 165, 157, 144, 124, 113, 29, 1, 1, 137, 170,
+170, 0, 4, 157, 0, 4, 150, 136, 113, 102, 20, 1, 0, 4, 94,
+175, 170, 170, 5, 157, 0, 3, 131, 101, 21, 0, 8, 1, 0, 11,
+216, 189, 170, 170, 157, 144, 136, 134, 134, 113, 91, 0, 4, 1, 0,
+ 11, 217, 175, 165, 145, 144, 145, 145, 136, 124, 113, 93, 0, 5, 1,
+ 1, 186, 4, 170, 0, 5, 165, 150, 136, 113, 93, 0, 5, 1, 1,
+ 35, 1, 202, 3, 170, 0, 6, 157, 145, 134, 113, 101, 115, 3, 1,
+ 0, 11, 190, 175, 170, 170, 157, 144, 131, 136, 134, 100, 104, 0, 4,
+ 1, 0, 4, 8, 198, 170, 170, 4, 157, 0, 4, 145, 113, 104, 4,
+ 4, 1, 0, 11, 54, 202, 175, 157, 145, 150, 157, 145, 134, 101, 67,
+ 0, 4, 1, 0, 13, 38, 82, 82, 86, 82, 86, 82, 86, 86, 82,
+ 82, 86, 82, 0, 5, 86, 1, 33, 1, 19, 3, 4, 1, 1, 1,
+ 1, 3, 4, 1, 7, 3, 19, 1, 5, 1, 51, 5, 82, 1, 47,
+ 1, 1, 3, 4, 1, 27, 1, 1, 3, 4, 0, 8, 86, 95, 99,
+ 7, 95, 92, 95, 95, 3, 92, 0, 8, 95, 12, 4, 19, 92, 95,
+ 92, 95, 4, 92, 0, 11, 95, 95, 19, 4, 4, 1, 4, 1, 4,
+ 1, 61, 0, 5, 95, 0, 8, 92, 95, 92, 95, 95, 92, 95, 19,
+ 3, 4, 0, 3, 13, 65, 77, 0, 3, 119, 0, 0, 4, 119, 1,
+ 11, 13, 1, 0, 4, 39, 115, 124, 144, 4, 165, 0, 3, 157, 151,
+150, 0, 3, 165, 0, 8, 157, 134, 123, 4, 1, 1, 159, 186, 4,
+165, 0, 5, 157, 157, 141, 113, 62, 0, 20, 1, 0, 12, 94, 189,
+189, 186, 165, 157, 144, 144, 157, 136, 101, 23, 8, 1, 0, 11, 217,
+189, 186, 165, 165, 157, 144, 136, 134, 124, 91, 0, 4, 1, 0, 4,
+216, 189, 186, 150, 3, 144, 0, 4, 124, 113, 101, 93, 5, 1, 0,
+ 4, 202, 184, 165, 157, 3, 165, 0, 3, 144, 113, 104, 0, 5, 1,
+ 0, 3, 18, 202, 186, 0, 3, 165, 0, 5, 157, 144, 124, 100, 115,
+ 0, 3, 1, 0, 11, 201, 189, 188, 189, 186, 157, 134, 134, 124, 101,
+104, 0, 4, 1, 0, 6, 14, 216, 186, 186, 165, 157, 3, 144, 0,
+ 3, 124, 104, 4, 0, 4, 1, 0, 11, 42, 198, 184, 165, 165, 157,
+157, 150, 136, 100, 69, 0, 4, 1, 1, 40, 3, 86, 1, 82, 8,
+ 86, 1, 82, 5, 86, 0, 4, 51, 1, 4, 1, 3, 4, 0, 7,
+ 1, 1, 19, 82, 76, 76, 92, 0, 6, 95, 0, 3, 76, 1, 1,
+ 0, 4, 4, 0, 8, 1, 4, 4, 95, 95, 99, 7, 99, 6, 95,
+ 1, 92, 3, 1, 1, 86, 9, 95, 1, 86, 1, 1, 6, 4, 6,
+ 12, 1, 76, 4, 95, 0, 9, 99, 95, 25, 4, 4, 1, 11, 70,
+ 73, 0, 3, 119, 0, 0, 4, 119, 1, 114, 11, 1, 0, 6, 14,
+ 91, 111, 123, 151, 165, 4, 184, 0, 9, 165, 157, 144, 151, 165, 165,
+157, 138, 152, 0, 3, 1, 0, 3, 160, 186, 184, 0, 3, 173, 0,
+ 5, 165, 173, 151, 113, 59, 0, 20, 1, 0, 12, 81, 207, 189, 186,
+184, 165, 151, 141, 136, 124, 101, 29, 8, 1, 1, 236, 1, 186, 3,
+184, 0, 6, 165, 157, 157, 144, 123, 91, 4, 1, 0, 11, 217, 207,
+186, 165, 144, 144, 151, 144, 124, 101, 93, 0, 5, 1, 0, 11, 198,
+186, 173, 157, 151, 157, 157, 151, 124, 101, 4, 0, 4, 1, 0, 11,
+ 14, 198, 186, 184, 173, 184, 165, 157, 134, 113, 115, 0, 3, 1, 1,
+190, 1, 207, 3, 186, 0, 6, 184, 144, 124, 123, 113, 104, 4, 1,
+ 0, 12, 29, 216, 186, 186, 184, 173, 157, 138, 134, 113, 104, 4, 4,
+ 1, 0, 11, 48, 198, 184, 165, 165, 172, 165, 157, 151, 113, 69, 0,
+ 4, 1, 1, 40, 3, 86, 1, 92, 11, 86, 0, 5, 92, 86, 86,
+ 92, 47, 0, 3, 1, 4, 4, 1, 0, 1, 110, 4, 99, 1, 95,
+ 4, 99, 0, 3, 106, 1, 1, 0, 6, 4, 0, 6, 25, 99, 99,
+106, 7, 106, 6, 99, 0, 5, 82, 1, 1, 4, 12, 0, 10, 99,
+ 0, 14, 38, 1, 1, 4, 1, 4, 4, 40, 92, 92, 86, 95, 40,
+ 76, 3, 99, 0, 4, 95, 99, 99, 30, 4, 4, 1, 70, 1, 73,
+ 3, 119, 0, 0, 5, 119, 1, 98, 9, 1, 0, 9, 59, 115, 101,
+113, 144, 173, 180, 184, 184, 0, 4, 180, 1, 173, 3, 157, 0, 3,
+151, 134, 115, 0, 3, 1, 0, 3, 139, 207, 202, 0, 3, 180, 0,
+ 5, 172, 172, 165, 123, 91, 0, 20, 1, 0, 12, 62, 207, 202, 202,
+200, 180, 173, 151, 138, 123, 101, 35, 8, 1, 0, 11, 236, 200, 184,
+180, 200, 184, 173, 144, 138, 113, 78, 0, 4, 1, 0, 11, 236, 207,
+207, 200, 173, 157, 173, 157, 134, 101, 104, 0, 4, 1, 0, 12, 21,
+180, 200, 180, 173, 157, 157, 151, 144, 124, 101, 32, 4, 1, 1, 35,
+ 1, 193, 5, 180, 0, 4, 173, 138, 113, 91, 3, 1, 0, 11, 190,
+184, 180, 180, 202, 202, 173, 151, 134, 113, 112, 0, 4, 1, 0, 3,
+ 54, 193, 200, 0, 3, 184, 0, 6, 172, 151, 138, 113, 101, 8, 4,
+ 1, 0, 11, 54, 198, 200, 180, 172, 172, 173, 165, 157, 123, 54, 0,
+ 4, 1, 1, 47, 8, 92, 1, 86, 6, 92, 0, 5, 86, 86, 92,
+ 92, 82, 0, 3, 4, 1, 1, 1, 4, 3, 1, 3, 99, 1, 106,
+ 6, 99, 0, 15, 110, 7, 1, 4, 4, 1, 1, 4, 1, 74, 99,
+ 99, 110, 7, 106, 0, 3, 99, 0, 9, 106, 99, 106, 43, 1, 4,
+ 1, 4, 76, 0, 6, 99, 1, 106, 3, 99, 4, 1, 0, 9, 4,
+ 1, 38, 106, 99, 106, 99, 43, 74, 0, 3, 99, 0, 10, 106, 99,
+ 99, 38, 1, 4, 1, 4, 70, 70, 3, 119, 0, 0, 5, 119, 1,
+114, 7, 1, 0, 11, 29, 104, 113, 124, 124, 134, 144, 157, 182, 182,
+180, 0, 5, 182, 0, 6, 172, 172, 165, 144, 134, 8, 3, 1, 0,
+ 4, 118, 231, 207, 198, 4, 182, 0, 3, 161, 134, 115, 0, 9, 1,
+ 0, 3, 4, 48, 29, 0, 8, 1, 0, 4, 48, 221, 202, 200, 3,
+182, 0, 5, 165, 144, 134, 100, 48, 0, 8, 1, 0, 11, 236, 200,
+200, 196, 196, 198, 182, 144, 136, 113, 78, 0, 4, 1, 1, 236, 3,
+200, 0, 7, 198, 182, 172, 165, 136, 113, 104, 0, 4, 1, 1, 69,
+ 4, 182, 0, 7, 172, 172, 161, 144, 124, 100, 69, 0, 4, 1, 1,
+ 78, 1, 193, 6, 182, 0, 3, 144, 113, 69, 0, 3, 1, 0, 11,
+202, 200, 182, 182, 196, 200, 196, 182, 150, 124, 115, 0, 4, 1, 0,
+ 3, 102, 182, 198, 0, 4, 182, 0, 5, 165, 145, 134, 100, 48, 0,
+ 4, 1, 0, 4, 91, 196, 200, 180, 3, 182, 0, 4, 172, 157, 124,
+ 39, 4, 1, 0, 5, 58, 95, 92, 95, 92, 0, 4, 95, 0, 7,
+ 92, 92, 95, 95, 92, 95, 92, 0, 3, 95, 0, 11, 92, 92, 1,
+ 4, 1, 4, 1, 4, 4, 1, 74, 0, 7, 106, 0, 4, 99, 106,
+110, 19, 5, 4, 0, 8, 1, 4, 106, 99, 106, 110, 7, 110, 6,
+106, 1, 4, 1, 4, 3, 1, 1, 7, 10, 106, 0, 8, 58, 4,
+ 4, 1, 1, 4, 30, 110, 3, 106, 1, 43, 1, 66, 6, 106, 0,
+ 7, 51, 1, 1, 4, 4, 60, 70, 0, 3, 119, 0, 0, 5, 119,
+ 1, 34, 6, 1, 0, 13, 54, 125, 124, 136, 150, 145, 136, 144, 150,
+177, 194, 196, 196, 0, 5, 185, 0, 4, 177, 172, 150, 115, 4, 1,
+ 0, 4, 46, 229, 207, 200, 3, 196, 0, 5, 185, 172, 144, 113, 18,
+ 0, 8, 1, 0, 8, 59, 101, 101, 111, 91, 48, 29, 4, 3, 1,
+ 0, 12, 35, 225, 200, 196, 194, 185, 185, 182, 157, 136, 113, 59, 8,
+ 1, 1, 236, 1, 200, 5, 196, 0, 4, 172, 144, 120, 78, 4, 1,
+ 1, 236, 4, 196, 0, 7, 194, 182, 172, 145, 113, 101, 18, 0, 3,
+ 1, 0, 3, 168, 172, 177, 0, 3, 185, 0, 6, 172, 172, 161, 144,
+124, 115, 4, 1, 0, 11, 152, 177, 194, 194, 196, 196, 194, 194, 161,
+124, 42, 0, 3, 1, 0, 12, 202, 196, 185, 172, 185, 196, 196, 185,
+161, 136, 113, 4, 3, 1, 0, 4, 142, 177, 196, 196, 3, 185, 0,
+ 5, 177, 161, 144, 124, 125, 0, 4, 1, 0, 11, 151, 185, 196, 196,
+194, 185, 185, 177, 157, 124, 21, 0, 4, 1, 1, 74, 4, 95, 1,
+ 99, 3, 95, 0, 3, 92, 61, 99, 0, 5, 95, 1, 99, 3, 95,
+ 3, 4, 0, 11, 1, 4, 4, 1, 1, 51, 106, 106, 110, 106, 106,
+ 0, 3, 110, 0, 6, 106, 110, 30, 1, 4, 1, 3, 4, 1, 7,
+ 3, 106, 0, 16, 117, 7, 110, 106, 110, 110, 106, 106, 95, 1, 4,
+ 4, 1, 4, 1, 64, 3, 110, 3, 106, 0, 16, 110, 106, 110, 110,
+ 7, 4, 1, 4, 1, 19, 117, 110, 106, 110, 47, 74, 3, 106, 3,
+110, 1, 64, 3, 1, 0, 3, 4, 50, 65, 0, 3, 119, 0, 0,
+ 4, 119, 1, 77, 6, 1, 0, 11, 91, 124, 131, 161, 177, 185, 177,
+161, 153, 161, 185, 0, 9, 194, 1, 177, 1, 168, 6, 1, 0, 12,
+221, 221, 200, 196, 194, 194, 185, 161, 145, 124, 115, 4, 6, 1, 0,
+ 4, 29, 111, 100, 113, 4, 100, 0, 16, 125, 91, 1, 1, 23, 225,
+222, 196, 194, 187, 194, 185, 172, 145, 116, 78, 7, 1, 0, 4, 4,
+235, 196, 196, 4, 194, 0, 4, 177, 150, 124, 67, 4, 1, 0, 18,
+235, 194, 196, 196, 194, 194, 196, 194, 177, 140, 116, 115, 23, 14, 59,
+157, 177, 177, 5, 194, 0, 10, 177, 172, 145, 124, 91, 18, 14, 78,
+145, 172, 4, 194, 0, 5, 185, 177, 153, 134, 10, 0, 3, 1, 0,
+ 17, 198, 194, 177, 161, 177, 194, 194, 185, 194, 172, 136, 125, 23, 14,
+ 69, 157, 185, 0, 3, 194, 0, 22, 185, 194, 185, 177, 161, 145, 120,
+ 67, 15, 15, 91, 150, 177, 185, 185, 194, 194, 185, 177, 145, 113, 8,
+ 4, 1, 8, 99, 0, 3, 106, 19, 30, 0, 10, 99, 0, 3, 4,
+ 4, 1, 0, 3, 4, 0, 3, 1, 1, 38, 0, 10, 117, 0, 8,
+ 38, 1, 4, 4, 1, 4, 4, 47, 3, 117, 1, 121, 1, 12, 6,
+117, 0, 3, 76, 4, 4, 0, 5, 1, 10, 117, 0, 7, 99, 1,
+ 1, 4, 4, 7, 121, 0, 3, 117, 1, 47, 1, 76, 6, 117, 0,
+ 7, 92, 1, 4, 1, 1, 45, 63, 0, 3, 119, 0, 0, 3, 119,
+ 1, 114, 6, 1, 0, 8, 104, 109, 136, 145, 161, 187, 194, 194, 4,
+195, 0, 4, 194, 210, 194, 194, 3, 210, 0, 4, 194, 187, 180, 8,
+ 6, 1, 0, 13, 201, 226, 220, 215, 194, 195, 195, 177, 153, 131, 100,
+115, 21, 0, 3, 1, 0, 26, 8, 42, 111, 109, 124, 131, 124, 120,
+113, 100, 100, 112, 1, 1, 4, 240, 220, 215, 210, 194, 195, 195, 177,
+145, 120, 115, 7, 1, 0, 12, 4, 235, 215, 210, 210, 194, 195, 185,
+177, 149, 124, 69, 4, 1, 1, 235, 1, 195, 3, 187, 0, 29, 177,
+194, 194, 195, 177, 150, 140, 136, 151, 161, 177, 185, 195, 195, 194, 195,
+187, 187, 185, 161, 150, 140, 124, 123, 134, 136, 153, 177, 187, 0, 3,
+195, 0, 4, 187, 177, 145, 123, 4, 1, 0, 42, 198, 215, 195, 161,
+161, 169, 185, 169, 161, 177, 162, 145, 144, 151, 150, 169, 195, 194, 195,
+195, 194, 195, 195, 187, 172, 153, 136, 116, 124, 134, 136, 153, 177, 177,
+185, 187, 195, 187, 177, 145, 132, 4, 3, 1, 1, 12, 1, 110, 7,
+106, 0, 4, 92, 0, 4, 106, 3, 99, 4, 106, 0, 12, 99, 99,
+ 33, 1, 4, 1, 1, 4, 1, 4, 30, 127, 5, 121, 0, 6, 127,
+127, 121, 127, 61, 1, 3, 4, 0, 10, 1, 1, 127, 127, 121, 127,
+130, 12, 127, 127, 3, 121, 0, 11, 127, 38, 1, 4, 1, 4, 1,
+ 1, 4, 58, 127, 0, 3, 121, 0, 12, 127, 127, 121, 127, 121, 127,
+ 25, 1, 4, 4, 1, 130, 3, 121, 0, 3, 51, 86, 127, 0, 6,
+121, 1, 1, 3, 4, 1, 37, 1, 63, 3, 119, 0, 0, 3, 119,
+ 1, 41, 5, 1, 0, 4, 115, 126, 136, 145, 3, 161, 0, 4, 177,
+195, 195, 187, 3, 195, 1, 210, 1, 220, 4, 215, 0, 3, 210, 210,
+ 14, 0, 7, 1, 0, 5, 118, 228, 226, 215, 210, 0, 3, 195, 0,
+ 20, 187, 153, 131, 116, 113, 115, 91, 115, 123, 126, 131, 140, 145, 149,
+145, 131, 124, 109, 100, 39, 3, 1, 0, 11, 240, 226, 220, 220, 215,
+210, 208, 195, 153, 124, 125, 0, 7, 1, 0, 4, 4, 235, 215, 210,
+ 3, 208, 0, 5, 195, 177, 149, 124, 59, 0, 4, 1, 1, 235, 1,
+208, 3, 187, 0, 11, 169, 161, 177, 187, 179, 162, 161, 161, 162, 179,
+208, 0, 4, 210, 0, 13, 215, 208, 187, 177, 169, 153, 145, 149, 145,
+145, 153, 177, 187, 0, 5, 195, 0, 3, 179, 145, 125, 0, 4, 1,
+ 0, 18, 216, 215, 215, 195, 177, 169, 177, 177, 153, 149, 161, 169, 153,
+161, 177, 187, 195, 210, 3, 215, 3, 210, 0, 17, 187, 162, 149, 140,
+133, 145, 161, 162, 177, 187, 187, 195, 195, 187, 177, 145, 115, 0, 4,
+ 1, 1, 38, 8, 106, 0, 3, 7, 4, 1, 0, 10, 106, 0, 10,
+ 55, 1, 1, 4, 4, 1, 4, 4, 19, 135, 9, 130, 0, 7, 95,
+ 1, 4, 4, 1, 4, 12, 0, 4, 130, 1, 135, 1, 12, 3, 130,
+ 0, 7, 127, 130, 130, 1, 4, 1, 4, 0, 5, 1, 1, 121, 1,
+127, 5, 130, 0, 9, 127, 130, 130, 135, 4, 1, 4, 1, 127, 0,
+ 3, 130, 1, 51, 1, 92, 6, 130, 0, 10, 135, 1, 1, 4, 1,
+ 27, 63, 107, 119, 119, 0, 0, 0, 3, 119, 119, 107, 0, 5, 1,
+ 0, 13, 78, 145, 162, 177, 179, 187, 195, 179, 177, 179, 162, 177, 195,
+ 0, 3, 208, 4, 215, 1, 211, 1, 191, 10, 1, 0, 4, 245, 228,
+220, 210, 3, 208, 0, 20, 199, 177, 153, 145, 140, 131, 131, 140, 149,
+162, 187, 187, 179, 187, 187, 177, 145, 126, 123, 8, 3, 1, 0, 5,
+221, 220, 220, 215, 211, 0, 3, 208, 0, 4, 187, 140, 123, 8, 6,
+ 1, 0, 3, 8, 219, 211, 0, 4, 208, 0, 5, 195, 177, 149, 126,
+ 54, 0, 4, 1, 0, 12, 240, 215, 208, 204, 197, 197, 187, 177, 179,
+162, 161, 177, 3, 187, 3, 208, 1, 211, 1, 211, 3, 215, 0, 18,
+211, 208, 187, 162, 153, 161, 162, 161, 177, 187, 195, 197, 197, 208, 209,
+187, 145, 54, 4, 1, 0, 5, 216, 220, 215, 211, 208, 0, 4, 195,
+ 0, 9, 177, 162, 162, 149, 161, 179, 195, 197, 204, 0, 5, 211, 0,
+ 8, 215, 210, 208, 195, 187, 169, 153, 161, 3, 177, 0, 7, 187, 197,
+199, 187, 177, 145, 32, 0, 4, 1, 1, 40, 5, 110, 0, 3, 106,
+110, 76, 0, 3, 1, 0, 4, 99, 110, 110, 106, 6, 110, 0, 10,
+106, 1, 4, 4, 1, 4, 1, 4, 4, 148, 10, 135, 1, 1, 1,
+ 1, 3, 4, 1, 33, 4, 135, 0, 3, 143, 12, 143, 0, 4, 135,
+ 1, 117, 1, 1, 3, 4, 0, 6, 5, 4, 4, 1, 1, 47, 10,
+135, 1, 43, 3, 1, 1, 117, 3, 135, 1, 55, 1, 99, 6, 135,
+ 0, 10, 143, 7, 1, 1, 4, 22, 63, 98, 119, 119, 0, 0, 0,
+ 3, 119, 119, 65, 0, 4, 1, 0, 16, 4, 151, 177, 199, 209, 204,
+199, 197, 197, 187, 187, 177, 187, 199, 208, 211, 4, 215, 1, 219, 1,
+115, 11, 1, 0, 26, 146, 231, 226, 215, 208, 197, 197, 187, 169, 153,
+153, 179, 179, 169, 177, 169, 177, 195, 208, 208, 204, 199, 197, 177, 145,
+ 59, 4, 1, 0, 12, 188, 220, 215, 215, 211, 208, 204, 204, 195, 149,
+124, 14, 6, 1, 0, 12, 10, 219, 208, 204, 195, 187, 187, 177, 161,
+133, 116, 54, 3, 1, 0, 14, 4, 240, 220, 215, 211, 208, 199, 199,
+197, 187, 177, 179, 197, 204, 4, 208, 0, 5, 211, 208, 208, 211, 215,
+ 0, 3, 220, 0, 10, 215, 209, 179, 177, 177, 162, 177, 187, 187, 195,
+ 3, 187, 1, 162, 1, 138, 5, 1, 1, 225, 1, 215, 3, 211, 0,
+ 11, 208, 208, 204, 197, 197, 195, 187, 177, 187, 197, 204, 0, 3, 208,
+ 0, 4, 211, 215, 211, 211, 4, 215, 0, 14, 211, 208, 187, 177, 179,
+179, 177, 187, 195, 195, 187, 161, 144, 4, 4, 1, 0, 4, 33, 30,
+121, 121, 4, 117, 0, 11, 1, 4, 1, 1, 86, 121, 117, 117, 121,
+117, 117, 0, 4, 86, 1, 4, 3, 1, 0, 8, 4, 1, 4, 1,
+135, 143, 148, 148, 6, 143, 0, 19, 156, 7, 1, 4, 4, 1, 110,
+143, 143, 148, 143, 148, 12, 148, 143, 148, 148, 143, 82, 0, 3, 1,
+ 1, 4, 1, 60, 3, 4, 0, 6, 1, 1, 121, 148, 143, 148, 3,
+143, 0, 13, 148, 143, 143, 156, 12, 4, 1, 110, 143, 143, 148, 64,
+106, 0, 6, 143, 0, 10, 156, 19, 4, 1, 4, 17, 65, 88, 119,
+119, 0, 0, 0, 3, 119, 119, 27, 0, 4, 1, 0, 21, 142, 161,
+177, 197, 208, 208, 204, 199, 197, 199, 195, 179, 195, 208, 208, 211, 215,
+215, 210, 217, 10, 0, 13, 1, 0, 13, 229, 234, 226, 211, 195, 187,
+179, 169, 161, 153, 187, 199, 187, 0, 3, 177, 1, 187, 4, 208, 0,
+ 4, 199, 179, 176, 4, 4, 1, 0, 12, 139, 223, 220, 211, 208, 199,
+197, 187, 169, 145, 124, 23, 6, 1, 0, 12, 14, 219, 208, 197, 187,
+177, 169, 162, 149, 129, 109, 48, 3, 1, 0, 12, 4, 240, 220, 215,
+215, 208, 208, 209, 208, 209, 197, 209, 5, 211, 4, 208, 0, 20, 211,
+215, 215, 220, 220, 215, 211, 204, 197, 197, 187, 177, 195, 197, 204, 197,
+187, 179, 161, 69, 5, 1, 0, 4, 225, 215, 208, 208, 3, 211, 3,
+208, 0, 3, 211, 208, 199, 0, 4, 208, 3, 211, 1, 210, 3, 215,
+ 0, 6, 211, 211, 215, 210, 208, 208, 3, 197, 0, 7, 179, 187, 197,
+197, 187, 161, 39, 0, 4, 1, 0, 4, 25, 135, 64, 12, 4, 127,
+ 1, 58, 3, 4, 0, 4, 1, 86, 127, 130, 3, 127, 0, 7, 121,
+ 4, 64, 61, 61, 4, 1, 0, 3, 4, 0, 6, 1, 4, 1, 106,
+156, 148, 5, 156, 0, 15, 148, 156, 156, 25, 1, 1, 4, 7, 156,
+156, 148, 156, 148, 156, 12, 0, 5, 127, 0, 26, 30, 1, 1, 4,
+ 4, 63, 45, 1, 1, 4, 4, 38, 156, 156, 148, 156, 148, 156, 156,
+148, 156, 148, 95, 1, 1, 99, 3, 156, 1, 66, 1, 110, 4, 156,
+ 0, 12, 148, 148, 156, 25, 1, 1, 4, 16, 65, 77, 119, 119, 0,
+ 0, 1, 119, 1, 119, 5, 1, 0, 14, 182, 179, 187, 195, 199, 204,
+199, 199, 197, 197, 187, 177, 195, 208, 3, 215, 1, 240, 1, 32, 15,
+ 1, 0, 6, 28, 248, 234, 226, 220, 215, 3, 208, 0, 15, 187, 197,
+209, 208, 197, 197, 187, 187, 204, 208, 211, 208, 197, 193, 14, 0, 5,
+ 1, 0, 5, 118, 228, 226, 215, 208, 0, 3, 197, 0, 4, 179, 149,
+120, 39, 6, 1, 0, 12, 14, 215, 211, 208, 204, 199, 195, 187, 177,
+149, 116, 42, 3, 1, 0, 6, 4, 225, 223, 220, 215, 215, 3, 211,
+ 0, 19, 208, 209, 225, 220, 223, 223, 220, 215, 215, 211, 208, 211, 220,
+242, 221, 226, 223, 220, 215, 0, 3, 211, 0, 9, 204, 187, 197, 208,
+211, 211, 208, 195, 142, 0, 6, 1, 0, 3, 222, 223, 215, 0, 6,
+211, 0, 4, 215, 225, 215, 211, 6, 215, 0, 8, 220, 220, 242, 226,
+226, 220, 215, 215, 3, 211, 0, 9, 208, 211, 211, 197, 197, 208, 204,
+195, 142, 0, 5, 1, 0, 9, 86, 130, 135, 110, 1, 121, 135, 127,
+ 1, 0, 3, 4, 0, 4, 1, 61, 135, 130, 3, 135, 0, 16, 130,
+ 4, 135, 130, 135, 7, 4, 4, 1, 4, 1, 4, 1, 64, 156, 167,
+ 7, 156, 0, 7, 167, 38, 1, 4, 1, 25, 167, 0, 4, 156, 0,
+ 22, 167, 76, 74, 76, 76, 74, 66, 1, 4, 1, 1, 6, 77, 119,
+ 6, 4, 4, 1, 1, 117, 156, 167, 7, 156, 0, 4, 167, 25, 1,
+ 86, 3, 156, 1, 74, 1, 117, 6, 156, 0, 10, 167, 33, 4, 1,
+ 1, 11, 70, 73, 119, 119, 0, 0, 1, 119, 1, 88, 4, 1, 0,
+ 18, 23, 209, 209, 199, 195, 197, 195, 197, 197, 199, 197, 179, 169, 195,
+208, 211, 235, 42, 18, 1, 0, 16, 36, 252, 238, 233, 226, 220, 215,
+215, 208, 211, 211, 215, 215, 211, 208, 208, 3, 211, 0, 3, 208, 219,
+ 29, 0, 6, 1, 0, 12, 71, 231, 233, 226, 215, 211, 211, 215, 208,
+179, 133, 59, 6, 1, 0, 12, 20, 220, 220, 215, 211, 208, 208, 204,
+197, 162, 129, 39, 3, 1, 0, 6, 4, 243, 233, 228, 223, 220, 4,
+215, 0, 24, 168, 14, 250, 233, 233, 228, 226, 223, 220, 215, 220, 221,
+ 1, 36, 248, 238, 234, 228, 223, 220, 220, 215, 208, 211, 3, 215, 1,
+209, 1, 168, 7, 1, 0, 16, 243, 233, 228, 223, 220, 215, 215, 220,
+220, 201, 10, 243, 226, 228, 228, 226, 3, 223, 0, 19, 226, 201, 1,
+ 36, 248, 238, 233, 228, 226, 223, 220, 215, 215, 220, 215, 211, 211, 209,
+168, 0, 5, 1, 0, 10, 12, 148, 143, 143, 135, 135, 4, 82, 40,
+ 4, 3, 1, 0, 3, 4, 38, 148, 0, 5, 143, 0, 6, 4, 148,
+143, 143, 38, 1, 3, 4, 0, 4, 1, 4, 4, 40, 10, 167, 0,
+ 5, 55, 4, 1, 1, 76, 0, 11, 167, 0, 15, 121, 1, 1, 4,
+ 4, 37, 114, 119, 63, 4, 1, 4, 1, 25, 181, 0, 9, 167, 0,
+ 3, 148, 1, 74, 0, 3, 167, 1, 76, 1, 117, 7, 167, 0, 9,
+ 40, 4, 1, 4, 4, 70, 70, 119, 119, 0, 0, 0, 1, 119, 1,
+ 73, 4, 1, 0, 17, 78, 211, 211, 208, 199, 199, 197, 199, 199, 208,
+208, 195, 162, 179, 219, 91, 4, 0, 20, 1, 0, 20, 10, 252, 244,
+238, 233, 226, 223, 220, 215, 215, 223, 223, 220, 220, 215, 220, 215, 210,
+235, 18, 7, 1, 0, 12, 46, 234, 238, 238, 233, 226, 223, 223, 220,
+195, 153, 115, 6, 1, 0, 12, 28, 228, 228, 226, 223, 220, 215, 211,
+209, 179, 136, 39, 3, 1, 0, 6, 4, 248, 244, 238, 234, 233, 3,
+226, 0, 29, 223, 139, 1, 12, 232, 244, 238, 234, 233, 226, 222, 188,
+ 4, 1, 1, 12, 212, 244, 238, 234, 233, 233, 228, 226, 223, 223, 220,
+235, 54, 0, 8, 1, 0, 5, 249, 244, 244, 234, 228, 0, 3, 226,
+ 0, 12, 223, 122, 1, 7, 229, 248, 238, 234, 233, 226, 226, 164, 3,
+ 1, 0, 7, 10, 232, 244, 238, 238, 234, 233, 0, 3, 228, 0, 4,
+226, 215, 235, 42, 6, 1, 1, 127, 6, 148, 0, 9, 30, 4, 4,
+ 1, 1, 4, 1, 19, 156, 0, 5, 148, 0, 7, 4, 156, 148, 148,
+ 82, 1, 1, 0, 4, 4, 1, 1, 1, 30, 8, 181, 0, 8, 167,
+181, 86, 1, 4, 1, 181, 167, 4, 181, 1, 167, 3, 181, 0, 4,
+167, 181, 66, 4, 3, 1, 1, 65, 3, 119, 1, 11, 3, 4, 0,
+ 6, 1, 95, 167, 181, 181, 167, 3, 181, 0, 5, 167, 181, 181, 43,
+ 61, 0, 3, 181, 1, 95, 1, 86, 7, 181, 0, 9, 55, 1, 4,
+ 1, 4, 70, 70, 119, 119, 0, 0, 0, 1, 119, 1, 63, 4, 1,
+ 0, 15, 137, 215, 215, 211, 208, 204, 199, 199, 204, 199, 197, 195, 153,
+170, 18, 0, 8, 1, 0, 3, 4, 104, 104, 0, 13, 1, 0, 17,
+ 57, 252, 244, 238, 234, 233, 228, 226, 226, 233, 228, 226, 226, 223, 240,
+ 94, 4, 0, 8, 1, 0, 12, 10, 253, 252, 252, 248, 249, 250, 250,
+242, 235, 219, 191, 6, 1, 0, 12, 44, 234, 238, 234, 233, 233, 226,
+223, 215, 195, 161, 35, 3, 1, 0, 7, 4, 237, 252, 253, 252, 249,
+250, 0, 3, 242, 1, 81, 3, 1, 0, 6, 20, 96, 163, 163, 81,
+ 18, 6, 1, 0, 11, 20, 128, 248, 248, 249, 249, 250, 242, 139, 28,
+ 4, 0, 9, 1, 0, 10, 232, 252, 253, 252, 249, 250, 250, 242, 242,
+ 46, 3, 1, 0, 6, 20, 96, 163, 163, 81, 14, 6, 1, 0, 11,
+ 20, 146, 248, 248, 249, 245, 250, 229, 122, 28, 4, 0, 6, 1, 1,
+ 95, 6, 156, 0, 10, 167, 19, 4, 1, 4, 4, 1, 4, 1, 167,
+ 5, 156, 0, 17, 4, 167, 156, 156, 148, 1, 4, 1, 4, 4, 1,
+ 4, 19, 203, 181, 181, 192, 0, 3, 181, 0, 8, 192, 181, 192, 127,
+ 1, 1, 25, 192, 10, 181, 0, 7, 192, 25, 1, 4, 4, 5, 65,
+ 0, 3, 119, 1, 87, 1, 1, 3, 4, 1, 12, 1, 206, 6, 181,
+ 0, 10, 192, 181, 181, 192, 47, 192, 181, 181, 148, 25, 7, 181, 0,
+ 9, 76, 1, 1, 4, 4, 65, 65, 119, 119, 0, 0, 0, 1, 119,
+ 1, 63, 4, 1, 1, 137, 3, 220, 0, 10, 210, 211, 208, 208, 209,
+195, 187, 179, 157, 23, 8, 1, 0, 5, 39, 111, 100, 100, 78, 0,
+ 13, 1, 0, 6, 4, 28, 128, 252, 248, 248, 3, 245, 0, 5, 250,
+250, 164, 46, 8, 0, 12, 1, 3, 4, 3, 7, 0, 4, 8, 8,
+ 10, 4, 6, 1, 0, 12, 44, 248, 252, 252, 248, 245, 245, 226, 223,
+219, 210, 35, 9, 1, 0, 4, 4, 4, 8, 8, 19, 1, 0, 4,
+ 7, 8, 12, 4, 18, 1, 0, 4, 4, 4, 8, 8, 19, 1, 0,
+ 4, 7, 8, 8, 4, 9, 1, 1, 66, 7, 167, 0, 10, 121, 1,
+ 1, 4, 4, 1, 4, 4, 1, 148, 4, 167, 1, 156, 1, 7, 4,
+167, 0, 5, 4, 1, 1, 4, 1, 0, 3, 4, 1, 213, 9, 192,
+ 0, 4, 167, 1, 1, 51, 11, 192, 1, 181, 1, 1, 3, 4, 1,
+ 16, 1, 88, 4, 119, 1, 22, 3, 4, 1, 1, 1, 66, 10, 192,
+ 1, 181, 4, 192, 1, 1, 7, 192, 1, 117, 1, 1, 3, 4, 0,
+ 4, 56, 65, 119, 119, 0, 0, 1, 119, 1, 70, 4, 1, 0, 13,
+ 94, 220, 220, 215, 215, 210, 211, 208, 208, 197, 187, 153, 134, 0, 7,
+ 1, 0, 8, 15, 91, 113, 109, 108, 100, 113, 18, 5, 1, 1, 24,
+ 1, 4, 9, 1, 0, 6, 7, 20, 28, 28, 18, 10, 33, 1, 1,
+ 10, 3, 20, 4, 28, 1, 32, 1, 32, 90, 1, 0, 12, 106, 181,
+181, 167, 181, 167, 181, 167, 181, 4, 4, 1, 4, 4, 0, 9, 1,
+ 1, 135, 167, 167, 181, 167, 167, 7, 0, 4, 181, 1, 12, 6, 4,
+ 1, 1, 1, 181, 5, 203, 3, 206, 0, 8, 203, 213, 1, 1, 148,
+203, 206, 206, 3, 203, 1, 206, 4, 203, 0, 6, 117, 1, 1, 4,
+ 1, 45, 5, 119, 0, 9, 103, 1, 1, 4, 1, 7, 213, 203, 206,
+ 0, 3, 203, 1, 206, 7, 203, 0, 3, 206, 47, 181, 0, 6, 203,
+ 0, 9, 143, 1, 1, 4, 1, 45, 65, 119, 119, 0, 0, 0, 1,
+119, 1, 87, 4, 1, 0, 14, 32, 223, 220, 215, 215, 211, 211, 208,
+208, 209, 187, 145, 124, 29, 4, 1, 0, 10, 35, 78, 113, 109, 126,
+140, 133, 109, 105, 115, 5, 1, 0, 3, 41, 63, 34, 0, 22, 1,
+ 0, 4, 31, 114, 119, 13, 74, 1, 0, 4, 11, 88, 114, 17, 41,
+ 1, 1, 25, 1, 156, 8, 181, 1, 95, 1, 1, 3, 4, 0, 6,
+ 9, 4, 4, 1, 1, 117, 5, 181, 1, 4, 4, 181, 1, 19, 1,
+ 4, 3, 1, 0, 8, 4, 1, 1, 121, 206, 213, 206, 213, 5, 206,
+ 0, 4, 218, 25, 12, 218, 4, 206, 1, 213, 5, 206, 0, 7, 213,
+ 58, 4, 1, 4, 4, 70, 0, 6, 119, 0, 6, 34, 1, 4, 4,
+ 1, 51, 14, 206, 1, 148, 1, 61, 6, 206, 1, 181, 1, 1, 3,
+ 4, 0, 4, 37, 63, 119, 119, 0, 0, 1, 119, 1, 119, 5, 1,
+ 0, 28, 228, 226, 215, 215, 211, 208, 197, 195, 187, 179, 149, 116, 123,
+ 67, 69, 78, 111, 113, 116, 131, 145, 153, 177, 177, 140, 109, 105, 59,
+ 4, 1, 0, 5, 27, 63, 119, 77, 11, 0, 19, 1, 1, 63, 3,
+119, 1, 114, 1, 24, 54, 1, 0, 5, 9, 45, 87, 88, 41, 0,
+ 12, 1, 1, 31, 1, 73, 4, 119, 1, 34, 21, 1, 0, 5, 11,
+ 45, 88, 87, 37, 0, 12, 1, 0, 3, 47, 130, 206, 0, 8, 192,
+ 1, 181, 3, 1, 0, 8, 4, 4, 98, 4, 1, 4, 4, 95, 5,
+192, 1, 7, 1, 135, 3, 192, 0, 3, 47, 1, 1, 0, 3, 4,
+ 0, 4, 1, 1, 66, 218, 6, 213, 0, 6, 206, 213, 218, 40, 43,
+218, 10, 213, 1, 224, 1, 12, 3, 4, 1, 9, 1, 73, 6, 119,
+ 1, 114, 1, 1, 4, 4, 1, 206, 13, 213, 1, 192, 1, 7, 6,
+213, 1, 218, 1, 1, 3, 4, 0, 4, 31, 63, 114, 119, 0, 0,
+ 0, 3, 119, 119, 22, 0, 4, 1, 0, 28, 229, 228, 220, 211, 211,
+208, 197, 199, 195, 187, 169, 145, 133, 131, 129, 129, 133, 133, 149, 162,
+169, 187, 195, 197, 169, 133, 109, 125, 4, 1, 1, 13, 1, 77, 3,
+119, 1, 73, 1, 31, 14, 1, 1, 24, 1, 60, 7, 119, 0, 7,
+ 77, 45, 31, 22, 17, 17, 16, 0, 3, 13, 0, 7, 11, 11, 17,
+ 37, 73, 119, 56, 0, 16, 1, 0, 21, 41, 56, 41, 34, 31, 27,
+ 27, 24, 17, 16, 17, 34, 56, 107, 119, 103, 70, 52, 52, 70, 107,
+ 0, 6, 119, 0, 10, 87, 52, 34, 17, 13, 16, 24, 37, 52, 87,
+ 8, 119, 0, 21, 98, 56, 41, 31, 31, 27, 27, 22, 17, 16, 17,
+ 34, 56, 114, 119, 103, 65, 50, 52, 70, 107, 0, 6, 119, 0, 3,
+ 87, 52, 4, 0, 3, 1, 0, 9, 4, 30, 99, 156, 213, 206, 203,
+203, 206, 0, 6, 203, 0, 14, 206, 64, 4, 4, 1, 4, 22, 119,
+ 5, 1, 4, 1, 55, 206, 4, 203, 0, 10, 192, 4, 206, 203, 203,
+110, 1, 4, 4, 1, 3, 4, 1, 33, 5, 218, 1, 213, 1, 213,
+ 3, 218, 0, 20, 64, 117, 218, 218, 213, 218, 218, 213, 218, 218, 213,
+218, 218, 181, 1, 1, 4, 1, 24, 98, 7, 119, 0, 6, 45, 1,
+ 4, 1, 1, 33, 7, 218, 1, 213, 4, 218, 0, 4, 213, 218, 12,
+224, 5, 218, 0, 9, 227, 4, 4, 1, 4, 22, 63, 98, 119, 0,
+ 0, 0, 0, 3, 119, 119, 56, 0, 4, 1, 0, 5, 28, 231, 226,
+215, 211, 0, 5, 208, 0, 18, 195, 177, 162, 177, 177, 162, 177, 179,
+195, 197, 187, 195, 199, 204, 195, 161, 138, 35, 4, 1, 1, 27, 7,
+119, 0, 5, 87, 50, 31, 17, 5, 0, 3, 1, 0, 4, 11, 27,
+ 41, 73, 27, 119, 0, 5, 114, 45, 24, 11, 4, 0, 4, 1, 1,
+ 4, 3, 1, 0, 3, 11, 34, 88, 0, 73, 119, 0, 10, 107, 4,
+ 1, 1, 4, 1, 181, 206, 206, 213, 10, 206, 0, 14, 167, 1, 1,
+ 4, 1, 4, 119, 119, 5, 1, 4, 4, 33, 218, 4, 206, 0, 7,
+213, 19, 218, 213, 213, 192, 1, 0, 3, 4, 0, 5, 1, 4, 4,
+ 25, 227, 0, 4, 218, 3, 224, 0, 4, 218, 218, 121, 218, 4, 224,
+ 1, 218, 5, 224, 0, 3, 218, 99, 1, 0, 3, 4, 1, 52, 9,
+119, 0, 9, 5, 4, 4, 1, 1, 203, 224, 218, 224, 0, 3, 218,
+ 0, 3, 224, 224, 218, 0, 4, 224, 1, 86, 1, 156, 5, 227, 0,
+ 9, 239, 19, 4, 4, 1, 13, 63, 88, 119, 0, 0, 0, 0, 3,
+119, 119, 98, 0, 5, 1, 0, 19, 163, 234, 228, 220, 215, 211, 211,
+215, 215, 211, 197, 179, 187, 204, 208, 209, 208, 211, 208, 0, 3, 211,
+ 0, 4, 208, 199, 193, 29, 5, 1, 1, 77, 135, 119, 0, 6, 11,
+ 4, 4, 1, 1, 82, 13, 213, 1, 224, 1, 40, 3, 1, 0, 10,
+ 4, 37, 119, 119, 13, 4, 1, 4, 1, 224, 4, 213, 0, 6, 218,
+ 7, 43, 43, 40, 43, 4, 1, 3, 4, 0, 4, 12, 239, 227, 227,
+ 7, 224, 0, 7, 227, 224, 227, 224, 224, 227, 227, 0, 4, 224, 0,
+ 4, 227, 230, 43, 1, 3, 4, 1, 73, 9, 119, 1, 56, 3, 4,
+ 1, 1, 1, 19, 3, 227, 4, 224, 4, 227, 0, 18, 224, 224, 206,
+ 19, 51, 51, 47, 43, 43, 47, 7, 1, 1, 4, 11, 65, 77, 119,
+ 0, 0, 3, 119, 1, 27, 5, 1, 0, 13, 212, 238, 231, 226, 215,
+208, 211, 215, 215, 210, 208, 208, 211, 0, 3, 215, 5, 220, 1, 219,
+ 1, 176, 6, 1, 1, 4, 135, 119, 1, 73, 3, 4, 1, 1, 1,
+ 7, 14, 218, 0, 6, 148, 1, 4, 1, 1, 4, 3, 119, 0, 6,
+ 37, 4, 4, 1, 1, 213, 5, 218, 0, 6, 203, 203, 192, 203, 206,
+ 19, 3, 1, 4, 4, 1, 241, 16, 227, 1, 230, 4, 227, 0, 7,
+241, 4, 4, 1, 4, 11, 77, 0, 10, 119, 0, 6, 9, 4, 1,
+ 4, 1, 167, 10, 227, 0, 3, 230, 227, 227, 0, 5, 213, 0, 10,
+206, 218, 40, 4, 4, 1, 9, 65, 73, 119, 0, 0, 3, 119, 1,
+107, 6, 1, 0, 7, 178, 244, 238, 233, 220, 215, 220, 0, 3, 215,
+ 0, 4, 210, 215, 215, 220, 3, 215, 0, 4, 220, 220, 225, 94, 6,
+ 1, 1, 2, 1, 103, 135, 119, 1, 4, 4, 1, 1, 148, 4, 224,
+ 1, 218, 5, 224, 0, 5, 218, 224, 224, 230, 25, 0, 3, 4, 1,
+ 1, 1, 52, 3, 119, 0, 6, 60, 1, 1, 4, 1, 181, 4, 224,
+ 1, 218, 5, 224, 0, 9, 30, 4, 1, 1, 4, 1, 4, 1, 206,
+ 0, 4, 230, 0, 3, 227, 230, 227, 0, 5, 230, 3, 227, 0, 8,
+230, 230, 227, 227, 230, 230, 167, 1, 3, 4, 1, 31, 1, 103, 10,
+119, 0, 9, 77, 4, 1, 4, 1, 4, 230, 227, 227, 0, 7, 230,
+ 3, 227, 3, 230, 3, 227, 0, 9, 239, 58, 4, 4, 1, 6, 70,
+ 65, 119, 0, 0, 0, 4, 119, 1, 73, 6, 1, 0, 6, 57, 237,
+244, 234, 228, 226, 3, 223, 0, 9, 220, 220, 223, 226, 226, 220, 215,
+225, 139, 0, 7, 1, 1, 4, 1, 107, 135, 119, 1, 41, 1, 1,
+ 3, 4, 0, 7, 33, 230, 224, 227, 224, 227, 224, 0, 4, 227, 0,
+ 10, 224, 227, 224, 227, 110, 1, 4, 1, 1, 13, 4, 119, 0, 10,
+103, 4, 1, 4, 1, 143, 227, 227, 224, 227, 5, 224, 0, 3, 227,
+ 55, 1, 0, 5, 4, 1, 1, 1, 127, 4, 230, 1, 239, 3, 230,
+ 0, 19, 239, 230, 230, 239, 230, 239, 230, 227, 230, 239, 230, 230, 239,
+ 74, 1, 4, 4, 1, 60, 0, 12, 119, 1, 17, 4, 1, 0, 3,
+135, 230, 239, 0, 10, 230, 1, 227, 6, 230, 0, 8, 82, 1, 1,
+ 4, 4, 70, 65, 119, 0, 0, 5, 119, 1, 37, 7, 1, 0, 7,
+ 53, 212, 237, 238, 234, 233, 231, 0, 4, 228, 0, 3, 231, 201, 42,
+ 0, 8, 1, 1, 11, 136, 119, 0, 7, 107, 1, 4, 4, 1, 1,
+203, 0, 3, 227, 0, 17, 230, 230, 227, 227, 230, 227, 230, 230, 227,
+227, 241, 12, 1, 4, 1, 1, 77, 0, 5, 119, 0, 5, 2, 1,
+ 4, 1, 110, 0, 3, 227, 1, 224, 1, 230, 5, 227, 0, 4, 130,
+ 1, 4, 1, 3, 4, 0, 3, 1, 58, 230, 0, 6, 239, 0, 5,
+230, 230, 239, 239, 230, 0, 7, 239, 0, 8, 230, 246, 33, 1, 4,
+ 4, 9, 77, 12, 119, 1, 88, 3, 4, 0, 3, 1, 1, 230, 0,
+ 7, 239, 1, 230, 3, 239, 0, 9, 230, 230, 239, 239, 230, 239, 239,
+110, 1, 0, 3, 4, 0, 3, 70, 65, 119, 0, 0, 0, 6, 119,
+ 1, 31, 9, 1, 1, 2, 1, 36, 3, 71, 1, 57, 1, 18, 11,
+ 1, 1, 41, 137, 119, 0, 10, 11, 4, 1, 4, 4, 95, 239, 230,
+227, 227, 3, 230, 0, 3, 227, 230, 227, 0, 4, 230, 0, 6, 61,
+ 1, 1, 4, 1, 24, 6, 119, 0, 5, 4, 1, 4, 4, 74, 0,
+ 10, 230, 0, 11, 218, 1, 4, 4, 1, 4, 4, 1, 25, 241, 241,
+ 0, 3, 239, 0, 3, 241, 239, 241, 0, 9, 239, 3, 241, 1, 247,
+ 4, 1, 1, 17, 1, 87, 13, 119, 0, 14, 31, 1, 1, 4, 4,
+ 99, 239, 241, 239, 241, 239, 241, 239, 241, 6, 239, 0, 12, 241, 239,
+241, 239, 135, 1, 1, 4, 4, 60, 65, 119, 0, 0, 7, 119, 1,
+ 60, 1, 2, 23, 1, 1, 5, 1, 107, 137, 119, 1, 77, 4, 4,
+ 0, 4, 1, 227, 239, 230, 5, 239, 1, 230, 1, 230, 3, 239, 0,
+ 8, 230, 241, 4, 1, 1, 4, 1, 107, 6, 119, 0, 30, 11, 1,
+ 4, 4, 40, 241, 230, 239, 230, 239, 239, 230, 239, 230, 239, 247, 7,
+ 4, 4, 1, 4, 4, 1, 19, 206, 203, 203, 206, 203, 224, 8, 241,
+ 1, 239, 3, 241, 0, 4, 239, 241, 148, 1, 3, 4, 1, 37, 1,
+114, 13, 119, 0, 9, 103, 4, 4, 1, 4, 1, 227, 241, 239, 0,
+ 15, 241, 0, 8, 167, 1, 4, 1, 4, 50, 65, 119, 0, 0, 8,
+119, 1, 114, 1, 11, 21, 1, 1, 63, 138, 119, 0, 7, 114, 4,
+ 4, 1, 4, 1, 135, 0, 3, 192, 1, 224, 10, 239, 1, 33, 1,
+ 1, 3, 4, 1, 37, 7, 119, 0, 7, 11, 4, 4, 1, 12, 247,
+241, 0, 3, 239, 0, 8, 230, 239, 241, 241, 239, 241, 25, 1, 6,
+ 4, 1, 117, 3, 110, 0, 3, 121, 7, 246, 0, 9, 241, 0, 10,
+246, 246, 241, 241, 47, 4, 1, 4, 1, 70, 15, 119, 0, 8, 45,
+ 1, 1, 4, 4, 61, 241, 246, 9, 241, 0, 3, 239, 241, 246, 0,
+ 3, 241, 1, 206, 1, 1, 3, 4, 0, 3, 41, 63, 119, 0, 0,
+ 0, 10, 119, 1, 88, 1, 11, 16, 1, 1, 16, 1, 87, 140, 119,
+ 1, 45, 4, 4, 1, 25, 3, 117, 1, 51, 1, 130, 9, 241, 0,
+ 6, 218, 1, 4, 1, 4, 4, 8, 119, 0, 9, 31, 1, 4, 4,
+ 1, 247, 241, 241, 239, 0, 3, 241, 0, 19, 246, 241, 239, 241, 38,
+ 4, 1, 4, 4, 1, 4, 1, 251, 241, 241, 246, 241, 25, 206, 0,
+ 6, 241, 1, 246, 4, 241, 0, 8, 246, 251, 25, 1, 4, 4, 11,
+ 77, 15, 119, 1, 114, 3, 4, 0, 3, 1, 1, 218, 0, 3, 241,
+ 1, 246, 8, 241, 1, 246, 3, 241, 0, 8, 239, 1, 1, 4, 1,
+ 31, 63, 114, 0, 0, 12, 119, 0, 3, 114, 88, 37, 0, 9, 1,
+ 0, 4, 11, 49, 98, 114, 141, 119, 0, 7, 98, 1, 1, 4, 4,
+ 1, 230, 0, 3, 241, 1, 117, 1, 130, 4, 241, 1, 246, 4, 241,
+ 0, 6, 19, 1, 4, 1, 1, 50, 8, 119, 0, 6, 50, 1, 1,
+ 4, 1, 213, 10, 241, 1, 66, 1, 1, 3, 4, 0, 4, 1, 4,
+ 1, 206, 4, 246, 0, 7, 127, 121, 247, 241, 241, 246, 241, 0, 4,
+246, 0, 10, 241, 246, 241, 246, 1, 4, 1, 4, 27, 88, 16, 119,
+ 0, 9, 60, 1, 4, 4, 1, 33, 255, 251, 254, 0, 3, 251, 1,
+254, 1, 251, 3, 246, 1, 241, 4, 246, 0, 8, 254, 1, 4, 1,
+ 1, 22, 63, 107, 0, 0, 16, 119, 1, 114, 1, 103, 4, 98, 1,
+107, 1, 114, 145, 119, 0, 6, 22, 1, 4, 4, 1, 82, 3, 241,
+ 0, 3, 246, 110, 130, 0, 3, 241, 0, 11, 246, 241, 246, 246, 241,
+148, 1, 1, 4, 4, 11, 0, 9, 119, 1, 87, 3, 4, 0, 21,
+ 1, 156, 241, 246, 246, 247, 241, 241, 246, 247, 241, 246, 143, 1, 4,
+ 1, 4, 1, 4, 1, 117, 0, 4, 247, 0, 5, 251, 19, 254, 246,
+247, 0, 7, 246, 0, 8, 247, 246, 121, 1, 1, 4, 1, 45, 18,
+119, 1, 1, 1, 4, 3, 1, 1, 33, 4, 40, 0, 4, 38, 38,
+ 12, 247, 6, 246, 0, 9, 247, 254, 12, 4, 1, 1, 11, 63, 98,
+ 0, 0, 0, 168, 119, 0, 27, 70, 4, 1, 4, 4, 1, 246, 246,
+241, 246, 241, 117, 130, 241, 241, 246, 241, 246, 241, 246, 246, 7, 4,
+ 1, 4, 1, 70, 0, 10, 119, 0, 24, 1, 1, 4, 4, 33, 58,
+ 55, 55, 4, 239, 246, 246, 241, 246, 241, 230, 1, 4, 1, 1, 4,
+ 1, 1, 47, 3, 247, 0, 12, 246, 251, 25, 213, 241, 239, 241, 241,
+239, 241, 241, 239, 3, 241, 1, 33, 4, 4, 1, 73, 18, 119, 1,
+ 77, 4, 4, 0, 3, 19, 254, 251, 0, 3, 247, 0, 18, 254, 38,
+241, 246, 247, 246, 246, 247, 247, 246, 251, 33, 1, 4, 4, 9, 65,
+ 87, 0, 0, 168, 119, 0, 6, 5, 4, 4, 1, 1, 167, 4, 246,
+ 0, 3, 241, 117, 143, 0, 3, 255, 0, 10, 251, 241, 241, 246, 99,
+ 1, 4, 4, 1, 24, 11, 119, 0, 5, 4, 1, 4, 4, 82, 0,
+ 3, 247, 1, 213, 1, 4, 5, 246, 0, 15, 254, 4, 4, 1, 4,
+ 1, 4, 4, 19, 247, 246, 246, 247, 247, 143, 0, 3, 58, 3, 61,
+ 0, 12, 58, 58, 61, 58, 55, 61, 4, 1, 4, 4, 17, 87, 19,
+119, 1, 6, 4, 1, 0, 3, 148, 247, 246, 0, 3, 247, 0, 17,
+192, 66, 246, 247, 247, 246, 246, 247, 247, 251, 47, 4, 4, 1, 9,
+ 65, 77, 0, 0, 0, 167, 119, 0, 7, 45, 4, 1, 4, 4, 25,
+247, 0, 5, 246, 1, 143, 3, 30, 0, 5, 19, 61, 255, 254, 251,
+ 0, 4, 1, 1, 4, 1, 88, 11, 119, 0, 10, 11, 1, 1, 4,
+ 47, 251, 247, 246, 247, 0, 3, 247, 0, 5, 246, 247, 251, 30, 1,
+ 0, 3, 4, 0, 8, 1, 4, 12, 251, 251, 246, 247, 247, 11, 251,
+ 0, 3, 254, 239, 1, 0, 3, 4, 1, 34, 1, 98, 19, 119, 0,
+ 7, 98, 4, 1, 4, 4, 7, 251, 0, 4, 247, 0, 6, 241, 4,
+251, 247, 251, 251, 3, 247, 0, 8, 251, 66, 4, 1, 1, 4, 65,
+ 65, 0, 0, 166, 119, 0, 11, 98, 4, 4, 1, 4, 4, 239, 247,
+246, 247, 246, 0, 3, 247, 0, 7, 254, 251, 251, 254, 47, 25, 25,
+ 0, 5, 4, 1, 37, 12, 119, 0, 6, 16, 1, 4, 4, 30, 254,
+ 3, 247, 1, 1, 4, 247, 0, 3, 246, 247, 47, 0, 6, 4, 1,
+ 7, 1, 251, 14, 247, 0, 8, 251, 247, 82, 1, 1, 4, 4, 50,
+ 21, 119, 0, 7, 17, 1, 1, 4, 1, 117, 251, 0, 3, 247, 0,
+ 5, 251, 38, 246, 247, 246, 0, 4, 247, 0, 8, 251, 95, 1, 1,
+ 4, 4, 65, 65, 0, 0, 166, 119, 0, 6, 27, 4, 1, 4, 1,
+ 61, 12, 247, 0, 9, 251, 255, 241, 1, 4, 1, 1, 4, 107, 0,
+ 12, 119, 1, 26, 3, 4, 1, 1, 1, 255, 3, 247, 1, 1, 1,
+251, 5, 247, 1, 86, 1, 1, 3, 4, 3, 1, 1, 251, 1, 251,
+ 6, 247, 1, 251, 7, 247, 0, 7, 251, 19, 1, 4, 4, 2, 77,
+ 0, 21, 119, 1, 114, 1, 2, 4, 1, 1, 246, 4, 247, 0, 3,
+203, 74, 251, 0, 6, 247, 0, 7, 127, 1, 1, 4, 2, 70, 65,
+ 0, 0, 0, 166, 119, 0, 6, 1, 4, 1, 1, 7, 255, 8, 247,
+ 1, 251, 4, 247, 0, 3, 251, 30, 4, 0, 3, 1, 1, 52, 13,
+119, 0, 11, 45, 4, 4, 1, 1, 241, 247, 251, 251, 1, 251, 0,
+ 5, 247, 0, 5, 156, 1, 4, 4, 1, 0, 3, 4, 1, 192, 1,
+251, 8, 247, 0, 13, 251, 247, 251, 251, 247, 247, 254, 7, 4, 1,
+ 1, 24, 88, 0, 22, 119, 1, 27, 3, 4, 0, 8, 1, 74, 251,
+251, 247, 247, 246, 1, 6, 247, 0, 8, 251, 148, 1, 4, 1, 4,
+ 65, 65, 0, 0, 166, 119, 1, 1, 3, 4, 0, 9, 1, 95, 181,
+227, 254, 254, 251, 247, 251, 0, 6, 247, 0, 7, 192, 1, 1, 4,
+ 1, 1, 114, 0, 13, 119, 1, 70, 4, 1, 0, 5, 181, 247, 251,
+251, 1, 0, 4, 247, 0, 6, 251, 247, 230, 1, 1, 4, 4, 1,
+ 0, 3, 99, 251, 251, 0, 8, 247, 3, 251, 0, 4, 247, 247, 206,
+ 1, 3, 4, 1, 41, 1, 107, 23, 119, 0, 15, 5, 4, 1, 4,
+ 1, 230, 247, 251, 247, 251, 33, 241, 251, 247, 247, 0, 3, 251, 0,
+ 7, 181, 1, 4, 1, 4, 52, 77, 0, 0, 0, 166, 119, 0, 5,
+ 11, 1, 4, 1, 4, 0, 4, 1, 0, 6, 55, 135, 206, 230, 254,
+251, 4, 247, 4, 4, 1, 1, 1, 77, 14, 119, 0, 6, 114, 1,
+ 4, 1, 1, 130, 3, 247, 1, 1, 1, 251, 4, 247, 1, 251, 1,
+255, 5, 4, 0, 3, 1, 1, 38, 0, 3, 251, 0, 3, 247, 251,
+247, 0, 3, 251, 0, 3, 247, 247, 251, 0, 3, 247, 1, 51, 3,
+ 1, 1, 4, 1, 56, 24, 119, 0, 25, 41, 4, 4, 1, 4, 43,
+251, 251, 247, 247, 192, 82, 247, 251, 247, 251, 247, 247, 203, 1, 4,
+ 4, 1, 45, 114, 0, 0, 0, 166, 119, 0, 4, 45, 4, 1, 1,
+ 4, 4, 5, 1, 0, 6, 4, 61, 156, 213, 224, 76, 3, 4, 1,
+ 1, 1, 9, 16, 119, 4, 4, 0, 13, 76, 247, 247, 251, 135, 33,
+247, 251, 247, 247, 251, 254, 33, 0, 4, 1, 0, 3, 4, 1, 7,
+ 0, 3, 251, 3, 247, 0, 15, 251, 247, 251, 247, 247, 251, 247, 247,
+251, 7, 4, 4, 1, 5, 83, 0, 25, 119, 1, 6, 1, 4, 3,
+ 1, 1, 203, 3, 251, 0, 15, 247, 1, 247, 241, 239, 224, 213, 206,
+ 33, 1, 4, 4, 1, 77, 119, 0, 0, 0, 167, 119, 0, 3, 26,
+ 4, 1, 0, 5, 4, 0, 7, 1, 4, 1, 4, 1, 4, 4, 0,
+ 3, 1, 0, 5, 4, 4, 1, 4, 107, 0, 16, 119, 0, 5, 11,
+ 4, 4, 1, 51, 0, 3, 251, 0, 16, 247, 1, 247, 247, 251, 251,
+247, 251, 58, 1, 4, 4, 1, 1, 4, 7, 4, 247, 4, 251, 7,
+247, 3, 4, 0, 3, 1, 31, 98, 0, 25, 119, 0, 11, 52, 4,
+ 4, 1, 4, 1, 74, 95, 58, 33, 4, 0, 5, 1, 0, 8, 4,
+ 4, 1, 4, 1, 6, 119, 119, 0, 0, 168, 119, 0, 3, 73, 11,
+ 6, 0, 4, 4, 0, 4, 1, 4, 4, 1, 3, 4, 1, 1, 1,
+ 4, 4, 1, 1, 26, 17, 119, 1, 17, 3, 4, 0, 8, 33, 255,
+247, 251, 247, 1, 251, 247, 3, 251, 0, 5, 247, 106, 1, 4, 1,
+ 0, 4, 4, 0, 4, 251, 247, 247, 251, 4, 247, 3, 251, 0, 4,
+247, 247, 251, 156, 3, 1, 0, 3, 4, 45, 114, 0, 26, 119, 0,
+ 3, 16, 4, 1, 0, 4, 4, 0, 7, 1, 1, 4, 4, 1, 4,
+ 1, 0, 4, 4, 0, 5, 1, 4, 50, 119, 119, 0, 0, 0, 172,
+119, 0, 5, 87, 41, 6, 7, 2, 0, 3, 4, 3, 1, 1, 4,
+ 1, 1, 3, 4, 18, 119, 1, 26, 3, 1, 0, 17, 12, 255, 251,
+251, 247, 47, 58, 247, 251, 247, 251, 251, 167, 1, 4, 1, 1, 0,
+ 3, 4, 0, 3, 247, 251, 251, 0, 3, 247, 1, 251, 4, 247, 0,
+ 5, 251, 247, 247, 33, 4, 0, 3, 1, 1, 63, 27, 119, 1, 88,
+ 4, 4, 4, 1, 0, 4, 4, 4, 1, 1, 3, 4, 0, 4, 1,
+ 4, 4, 31, 3, 119, 0, 0, 177, 119, 0, 11, 77, 37, 7, 2,
+ 1, 1, 4, 4, 1, 1, 98, 0, 18, 119, 1, 41, 3, 4, 0,
+ 40, 1, 254, 251, 247, 251, 251, 4, 246, 247, 251, 251, 247, 230, 1,
+ 1, 4, 4, 1, 4, 4, 167, 247, 251, 251, 247, 247, 251, 251, 247,
+251, 247, 254, 247, 247, 4, 1, 1, 4, 11, 107, 28, 119, 0, 8,
+ 88, 4, 4, 1, 1, 4, 1, 4, 3, 1, 0, 7, 4, 1, 4,
+ 4, 2, 4, 73, 0, 4, 119, 0, 0, 182, 119, 0, 4, 77, 37,
+ 31, 60, 20, 119, 0, 7, 60, 1, 1, 4, 1, 110, 251, 0, 3,
+247, 0, 16, 1, 246, 251, 251, 247, 247, 255, 1, 4, 4, 1, 1,
+ 4, 1, 86, 247, 3, 251, 1, 247, 4, 251, 0, 4, 254, 241, 181,
+ 12, 4, 1, 1, 50, 31, 119, 0, 13, 52, 4, 4, 1, 1, 4,
+ 13, 27, 41, 56, 77, 107, 114, 0, 7, 119, 0, 0, 206, 119, 0,
+ 43, 88, 4, 1, 4, 1, 4, 19, 82, 192, 254, 1, 247, 251, 247,
+251, 247, 255, 33, 4, 4, 1, 1, 4, 1, 4, 156, 167, 117, 64,
+ 33, 12, 12, 7, 4, 4, 1, 1, 4, 4, 1, 4, 4, 98, 0,
+ 33, 119, 1, 114, 1, 114, 16, 119, 0, 0, 207, 119, 0, 24, 4,
+ 4, 1, 1, 4, 4, 1, 1, 4, 4, 19, 76, 192, 255, 254, 255,
+ 58, 1, 1, 4, 4, 1, 4, 4, 7, 1, 1, 4, 1, 1, 6,
+ 4, 1, 1, 1, 52, 52, 119, 0, 0, 207, 119, 1, 41, 3, 4,
+ 0, 3, 1, 4, 4, 0, 3, 1, 1, 4, 3, 1, 0, 7, 19,
+ 30, 4, 1, 4, 1, 4, 0, 3, 1, 1, 4, 3, 1, 0, 7,
+ 4, 4, 1, 1, 4, 1, 1, 0, 4, 4, 1, 45, 53, 119, 0,
+ 0, 208, 119, 1, 37, 4, 4, 0, 5, 1, 4, 1, 4, 1, 0,
+ 4, 4, 1, 1, 4, 4, 0, 10, 5, 4, 4, 1, 1, 4, 1,
+ 4, 1, 1, 3, 4, 0, 6, 1, 1, 4, 1, 17, 83, 54, 119,
+ 0, 0, 209, 119, 0, 5, 88, 56, 31, 4, 4, 0, 3, 1, 1,
+ 4, 1, 1, 4, 4, 0, 8, 1, 4, 1, 1, 27, 98, 27, 1,
+ 4, 4, 0, 9, 5, 17, 31, 41, 56, 73, 77, 88, 107, 0, 56,
+119, 0, 0, 213, 119, 0, 4, 107, 77, 52, 31, 6, 4, 0, 4,
+ 1, 1, 4, 5, 3, 119, 0, 4, 114, 88, 88, 107, 66, 119, 0,
+ 0, 218, 119, 0, 8, 107, 77, 50, 34, 13, 1, 11, 41, 74, 119,
+ 0, 1
+};
diff --git a/engines/mads/phantom/phantom_scenes4.cpp b/engines/mads/phantom/phantom_scenes4.cpp
index 618677beda..da6d62e727 100644
--- a/engines/mads/phantom/phantom_scenes4.cpp
+++ b/engines/mads/phantom/phantom_scenes4.cpp
@@ -3506,7 +3506,7 @@ void Scene409::preActions() {
Scene410::Scene410(MADSEngine *vm) : Scene4xx(vm) {
for (int i = 0; i < 26; i++)
- _skullSequence[i];
+ _skullSequence[i] = 0;
}
void Scene410::synchronize(Common::Serializer &s) {
diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp
index 2875bc0b56..cbc15b9da8 100644
--- a/engines/mads/scene.cpp
+++ b/engines/mads/scene.cpp
@@ -504,6 +504,8 @@ void Scene::drawElements(ScreenTransition transitionType, bool surfaceFlag) {
// Merge any identified dirty areas
_dirtyAreas.merge(1, DIRTY_AREAS_SIZE);
+ if (_posAdjust != Common::Point(0, 0))
+ warning("Adjust used %d %d", _posAdjust.x, _posAdjust.y);
// Copy background for the dirty areas to the screen
_dirtyAreas.copy(&_backgroundSurface, &_vm->_screen, _posAdjust);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index c0a235cae3..c6cff86c72 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -77,10 +77,6 @@ Common::Error NeverhoodEngine::run() {
_gameState.sceneNum = 0;
_gameState.which = 0;
- // Assign default values to the config manager, in case settings are missing
- ConfMan.registerDefault("originalsaveload", "false");
- ConfMan.registerDefault("skiphallofrecordsscenes", "false");
-
_staticData = new StaticData();
_staticData->load("neverhood.dat");
_gameVars = new GameVars();
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 1e95393e4d..5cd7b9f7ca 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -483,9 +483,7 @@ bool Console::cmdGetVersion(int argc, const char **argv) {
debugPrintf("Move count type: %s\n", (_engine->_features->handleMoveCount()) ? "increment" : "ignore");
debugPrintf("SetCursor type: %s\n", getSciVersionDesc(_engine->_features->detectSetCursorType()));
#ifdef ENABLE_SCI32
- if (getSciVersion() >= SCI_VERSION_2)
- debugPrintf("kString type: %s\n", (_engine->_features->detectSci2StringFunctionType() == kSci2StringFunctionOld) ? "SCI2 (old)" : "SCI2.1 (new)");
- if (getSciVersion() == SCI_VERSION_2_1)
+ if ((getSciVersion() >= SCI_VERSION_2_1_EARLY) && (getSciVersion() <= SCI_VERSION_2_1_LATE))
debugPrintf("SCI2.1 kernel table: %s\n", (_engine->_features->detectSci21KernelType() == SCI_VERSION_2) ? "modified SCI2 (old)" : "SCI2.1 (new)");
#endif
debugPrintf("View type: %s\n", viewTypeDesc[g_sci->getResMan()->getViewType()]);
@@ -1046,7 +1044,7 @@ bool Console::cmdVerifyScripts(int argc, const char **argv) {
if (!script)
debugPrintf("Error: script %d couldn't be loaded\n", itr->getNumber());
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() <= SCI_VERSION_2_1_LATE) {
heap = _engine->getResMan()->findResource(ResourceId(kResourceTypeHeap, itr->getNumber()), false);
if (!heap)
debugPrintf("Error: script %d doesn't have a corresponding heap\n", itr->getNumber());
diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h
index f6283bf77b..d37dd18df9 100644
--- a/engines/sci/detection_tables.h
+++ b/engines/sci/detection_tables.h
@@ -1651,7 +1651,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195},
{"resource.map", 0, "40ccafb2195301504eba2e4f4f2c7f3d", 18925},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - English Windows (from the King's Quest Collection)
// Executable scanning reports "2.100.002", VERSION file reports "1.4"
@@ -1659,7 +1659,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "2be9ab94429c721af8e05c507e048a15", 18697},
{"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 203882535},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - English DOS (from FRG)
// SCI interpreter version 2.100.002, VERSION file reports "2.00b"
@@ -1667,7 +1667,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709},
{"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformDOS, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformDOS, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - English Windows (from FRG)
// SCI interpreter version 2.100.002, VERSION file reports "2.00b"
@@ -1675,7 +1675,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709},
{"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - German Windows (supplied by markcoolio in bug report #2727402)
// SCI interpreter version 2.100.002
@@ -1683,7 +1683,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "838b9ff132bd6962026fee832e8a7ddb", 18697},
{"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576},
AD_LISTEND},
- Common::DE_DEU, Common::kPlatformDOS, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::DE_DEU, Common::kPlatformDOS, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - Spanish DOS (from jvprat)
// Executable scanning reports "2.100.002", VERSION file reports "2.00"
@@ -1691,7 +1691,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "0b62693cbe87e3aaca3e8655a437f27f", 18709},
{"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100},
AD_LISTEND},
- Common::ES_ESP, Common::kPlatformDOS, ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::ES_ESP, Common::kPlatformDOS, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Quest 7 - English DOS Non-Interactive Demo
// SCI interpreter version 2.100.002
@@ -1707,7 +1707,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resource.map", 0, "38e627a37a975aea40cc72b0518b0709", 18412},
{"resource.000", 0, "bad61d50aaa64298fa57a7c6ccd3bccf", 84020382},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// King's Questions mini-game from the King's Quest Collection
// SCI interpreter version 2.000.000
@@ -4110,7 +4110,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "9a3e172cde9963d0a969f26469318cec", 3403},
{"ressci.000", 0, "db3e290481c35c3224e9602e71e4a1f1", 5073868},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage (Multilingual) - English Windows CD
// SCI interpreter version 2.100.002
@@ -4118,7 +4118,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799},
{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage (Multilingual) - Spanish Windows CD (from jvprat)
// Executable scanning reports "2.100.002", VERSION file reports "1.0"
@@ -4127,7 +4127,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},
// TODO: depend on one of the patches?
AD_LISTEND},
- Common::ES_ESP, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::ES_ESP, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage (Multilingual) - French Windows CD
// SCI interpreter version 2.100.002
@@ -4135,7 +4135,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799},
{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},
AD_LISTEND},
- Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage - German Windows CD (from m_kiewitz)
// SCI interpreter version 2.100.002
@@ -4144,7 +4144,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "e55c3097329b3c53752301e01c6af2fb", 9787},
{"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56127540},
AD_LISTEND},
- Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage (Multilingual) - German Windows CD
// SCI interpreter version 2.100.002
@@ -4152,7 +4152,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799},
{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},
AD_LISTEND},
- Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage (Multilingual) - Italian Windows CD (from glorifindel)
// SCI interpreter version 2.100.002
@@ -4160,7 +4160,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799},
{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},
AD_LISTEND},
- Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage - French Windows (from LePhilousophe)
// SCI interpreter version 2.100.002
@@ -4168,7 +4168,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"resmap.000", 0, "66ed46e3e56f487e688d52f05b33d0ba", 9787},
{"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56126981},
AD_LISTEND},
- Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
// Torin's Passage - English Macintosh
{"torin", "", {
@@ -4180,7 +4180,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
{"Data6", 0, "b639487c83d1dae0e001e700f3631566", 7594881},
{"Data7", 0, "2afd9b5434102b89610916b904c3f73a", 7627374},
AD_LISTEND},
- Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE | ADGF_CD, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
#endif // ENABLE_SCI32
// SCI Fanmade Games
diff --git a/engines/sci/engine/features.cpp b/engines/sci/engine/features.cpp
index be062dba64..a993506f7a 100644
--- a/engines/sci/engine/features.cpp
+++ b/engines/sci/engine/features.cpp
@@ -40,7 +40,6 @@ GameFeatures::GameFeatures(SegManager *segMan, Kernel *kernel) : _segMan(segMan)
_moveCountType = kMoveCountUninitialized;
#ifdef ENABLE_SCI32
_sci21KernelType = SCI_VERSION_NONE;
- _sci2StringFunctionType = kSci2StringFunctionUninitialized;
#endif
_usesCdTrack = Common::File::exists("cdaudio.map");
if (!ConfMan.getBool("use_cdaudio"))
@@ -143,8 +142,8 @@ SciVersion GameFeatures::detectDoSoundType() {
// SCI0LATE. Although the last SCI0EARLY game (lsl2) uses SCI0LATE resources
_doSoundType = g_sci->getResMan()->detectEarlySound() ? SCI_VERSION_0_EARLY : SCI_VERSION_0_LATE;
#ifdef ENABLE_SCI32
- } else if (getSciVersion() >= SCI_VERSION_2_1) {
- _doSoundType = SCI_VERSION_2_1;
+ } else if (getSciVersion() >= SCI_VERSION_2_1_EARLY) {
+ _doSoundType = SCI_VERSION_2_1_EARLY;
#endif
} else if (SELECTOR(nodePtr) == -1) {
// No nodePtr selector, so this game is definitely using newer
@@ -271,7 +270,7 @@ SciVersion GameFeatures::detectLofsType() {
return _lofsType;
}
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
// SCI1.1 type, i.e. we compensate for the fact that the heap is attached
// to the end of the script
_lofsType = SCI_VERSION_1_1;
@@ -475,7 +474,7 @@ bool GameFeatures::autoDetectSci21KernelType() {
}
warning("autoDetectSci21KernelType(): Sound object not loaded, assuming a SCI2.1 table");
- _sci21KernelType = SCI_VERSION_2_1;
+ _sci21KernelType = SCI_VERSION_2_1_EARLY;
return true;
}
@@ -514,7 +513,7 @@ bool GameFeatures::autoDetectSci21KernelType() {
_sci21KernelType = SCI_VERSION_2;
return true;
} else if (kFuncNum == 0x75) {
- _sci21KernelType = SCI_VERSION_2_1;
+ _sci21KernelType = SCI_VERSION_2_1_EARLY;
return true;
}
}
@@ -532,65 +531,6 @@ SciVersion GameFeatures::detectSci21KernelType() {
}
return _sci21KernelType;
}
-
-Sci2StringFunctionType GameFeatures::detectSci2StringFunctionType() {
- if (_sci2StringFunctionType == kSci2StringFunctionUninitialized) {
- if (getSciVersion() <= SCI_VERSION_1_1) {
- error("detectSci21StringFunctionType() called from SCI1.1 or earlier");
- } else if (getSciVersion() == SCI_VERSION_2) {
- // SCI2 games are always using the old type
- _sci2StringFunctionType = kSci2StringFunctionOld;
- } else if (getSciVersion() == SCI_VERSION_3) {
- // SCI3 games are always using the new type
- _sci2StringFunctionType = kSci2StringFunctionNew;
- } else { // SCI2.1
- if (!autoDetectSci21StringFunctionType())
- _sci2StringFunctionType = kSci2StringFunctionOld;
- else
- _sci2StringFunctionType = kSci2StringFunctionNew;
- }
- }
-
- debugC(1, kDebugLevelVM, "Detected SCI2 kString type: %s", (_sci2StringFunctionType == kSci2StringFunctionOld) ? "old" : "new");
-
- return _sci2StringFunctionType;
-}
-
-bool GameFeatures::autoDetectSci21StringFunctionType() {
- // Look up the script address
- reg_t addr = getDetectionAddr("Str", SELECTOR(size));
-
- if (!addr.getSegment())
- return false;
-
- uint16 offset = addr.getOffset();
- Script *script = _segMan->getScript(addr.getSegment());
-
- while (true) {
- int16 opparams[4];
- byte extOpcode;
- byte opcode;
- offset += readPMachineInstruction(script->getBuf(offset), extOpcode, opparams);
- opcode = extOpcode >> 1;
-
- // Check for end of script
- if (opcode == op_ret || offset >= script->getBufSize())
- break;
-
- if (opcode == op_callk) {
- uint16 kFuncNum = opparams[0];
-
- // SCI2.1 games which use the new kString functions call kString(8).
- // Earlier ones call the callKernel script function, but not kString
- // directly
- if (_kernel->getKernelName(kFuncNum) == "String")
- return true;
- }
- }
-
- return false; // not found a call to kString
-}
-
#endif
bool GameFeatures::autoDetectMoveCountType() {
diff --git a/engines/sci/engine/features.h b/engines/sci/engine/features.h
index a4d715fee0..1c410267e6 100644
--- a/engines/sci/engine/features.h
+++ b/engines/sci/engine/features.h
@@ -34,12 +34,6 @@ enum MoveCountType {
kIncrementMoveCount
};
-enum Sci2StringFunctionType {
- kSci2StringFunctionUninitialized,
- kSci2StringFunctionOld,
- kSci2StringFunctionNew
-};
-
class GameFeatures {
public:
GameFeatures(SegManager *segMan, Kernel *kernel);
@@ -82,13 +76,6 @@ public:
* @return Graphics functions type, SCI_VERSION_2 / SCI_VERSION_2_1
*/
SciVersion detectSci21KernelType();
-
- /**
- * Autodetects the string subfunctions used in SCI2 - SCI3
- * @return string subfunctions type, kSci2StringFunctionOld / kSci2StringFunctionNew
- */
- Sci2StringFunctionType detectSci2StringFunctionType();
-
#endif
/**
@@ -132,13 +119,11 @@ private:
bool autoDetectMoveCountType();
#ifdef ENABLE_SCI32
bool autoDetectSci21KernelType();
- bool autoDetectSci21StringFunctionType();
#endif
SciVersion _doSoundType, _setCursorType, _lofsType, _gfxFunctionsType, _messageFunctionType;
#ifdef ENABLE_SCI32
SciVersion _sci21KernelType;
- Sci2StringFunctionType _sci2StringFunctionType;
#endif
MoveCountType _moveCountType;
diff --git a/engines/sci/engine/file.cpp b/engines/sci/engine/file.cpp
index 623caec856..a602cb4503 100644
--- a/engines/sci/engine/file.cpp
+++ b/engines/sci/engine/file.cpp
@@ -129,7 +129,7 @@ reg_t file_open(EngineState *s, const Common::String &filename, int mode, bool u
}
FileHandle *getFileFromHandle(EngineState *s, uint handle) {
- if (handle == 0 || handle == VIRTUALFILE_HANDLE) {
+ if ((handle == 0) || ((handle >= VIRTUALFILE_HANDLE_START) && (handle <= VIRTUALFILE_HANDLE_END))) {
error("Attempt to use invalid file handle (%d)", handle);
return 0;
}
diff --git a/engines/sci/engine/file.h b/engines/sci/engine/file.h
index 052eb735e9..54627d5228 100644
--- a/engines/sci/engine/file.h
+++ b/engines/sci/engine/file.h
@@ -41,8 +41,11 @@ enum {
MAX_SAVEGAME_NR = 20 /**< Maximum number of savegames */
};
-#define VIRTUALFILE_HANDLE 200
+#define VIRTUALFILE_HANDLE_START 32000
+#define VIRTUALFILE_HANDLE_SCI32SAVE 32100
#define PHANTASMAGORIA_SAVEGAME_INDEX "phantsg.dir"
+#define VIRTUALFILE_HANDLE_SCIAUDIO 32300
+#define VIRTUALFILE_HANDLE_END 32300
struct SavegameDesc {
int16 id;
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index bfb7bfcd08..3e70eb0788 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -35,6 +35,9 @@ namespace Sci {
Kernel::Kernel(ResourceManager *resMan, SegManager *segMan)
: _resMan(resMan), _segMan(segMan), _invalid("<invalid>") {
+#ifdef ENABLE_SCI32
+ _kernelFunc_StringId = 0;
+#endif
}
Kernel::~Kernel() {
@@ -118,7 +121,7 @@ void Kernel::loadSelectorNames() {
// Starting with KQ7, Mac versions have a BE name table. GK1 Mac and earlier (and all
// other platforms) always use LE.
- bool isBE = (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1
+ bool isBE = (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY
&& g_sci->getGameId() != GID_GK1);
if (!r) { // No such resource?
@@ -603,6 +606,10 @@ void Kernel::mapFunctions() {
}
#ifdef ENABLE_SCI32
+ if (kernelName == "String") {
+ _kernelFunc_StringId = id;
+ }
+
// HACK: Phantasmagoria Mac uses a modified kDoSound (which *nothing*
// else seems to use)!
if (g_sci->getPlatform() == Common::kPlatformMacintosh && g_sci->getGameId() == GID_PHANTASMAGORIA && kernelName == "DoSound") {
@@ -863,7 +870,9 @@ void Kernel::loadKernelNames(GameFeatures *features) {
_kernelNames = Common::StringArray(sci2_default_knames, kKernelEntriesSci2);
break;
- case SCI_VERSION_2_1:
+ case SCI_VERSION_2_1_EARLY:
+ case SCI_VERSION_2_1_MIDDLE:
+ case SCI_VERSION_2_1_LATE:
if (features->detectSci21KernelType() == SCI_VERSION_2) {
// Some early SCI2.1 games use a modified SCI2 kernel table instead of
// the SCI2.1 kernel table. We detect which version to use based on
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index 57b4d9455b..f62a074ef1 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -173,6 +173,12 @@ public:
typedef Common::Array<KernelFunction> KernelFunctionArray;
KernelFunctionArray _kernelFuncs; /**< Table of kernel functions. */
+#ifdef ENABLE_SCI32
+ // id of kString function, for quick usage in kArray
+ // kArray calls kString in case parameters are strings
+ uint16 _kernelFunc_StringId;
+#endif
+
/**
* Determines whether a list of registers matches a given signature.
* If no signature is given (i.e., if sig is NULL), this is always
@@ -414,6 +420,27 @@ 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);
reg_t kString(EngineState *s, int argc, reg_t *argv);
+
+reg_t kStringNew(EngineState *s, int argc, reg_t *argv);
+reg_t kStringSize(EngineState *s, int argc, reg_t *argv);
+reg_t kStringAt(EngineState *s, int argc, reg_t *argv);
+reg_t kStringPutAt(EngineState *s, int argc, reg_t *argv);
+reg_t kStringFree(EngineState *s, int argc, reg_t *argv);
+reg_t kStringFill(EngineState *s, int argc, reg_t *argv);
+reg_t kStringCopy(EngineState *s, int argc, reg_t *argv);
+reg_t kStringCompare(EngineState *s, int argc, reg_t *argv);
+reg_t kStringDup(EngineState *s, int argc, reg_t *argv);
+reg_t kStringGetData(EngineState *s, int argc, reg_t *argv);
+reg_t kStringLen(EngineState *s, int argc, reg_t *argv);
+reg_t kStringPrintf(EngineState *s, int argc, reg_t *argv);
+reg_t kStringPrintfBuf(EngineState *s, int argc, reg_t *argv);
+reg_t kStringAtoi(EngineState *s, int argc, reg_t *argv);
+reg_t kStringTrim(EngineState *s, int argc, reg_t *argv);
+reg_t kStringUpper(EngineState *s, int argc, reg_t *argv);
+reg_t kStringLower(EngineState *s, int argc, reg_t *argv);
+reg_t kStringTrn(EngineState *s, int argc, reg_t *argv);
+reg_t kStringTrnExclude(EngineState *s, int argc, reg_t *argv);
+
reg_t kMulDiv(EngineState *s, int argc, reg_t *argv);
reg_t kCantBeHere32(EngineState *s, int argc, reg_t *argv);
reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv);
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 2cbd79366d..49dfa17554 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -34,6 +34,15 @@ namespace Sci {
// . -> any type
// i* -> optional multiple integers
// .* -> any parameters afterwards (or none)
+//
+// data types:
+// i - regular integer
+// o - object
+// r - reference
+// n - node
+// 0 - NULL
+// . - any
+// ! - invalid reference/offset
struct SciKernelMapSubEntry {
SciVersion fromVersion;
@@ -56,7 +65,8 @@ struct SciKernelMapSubEntry {
#define SIG_SCI1 SCI_VERSION_1_EGA_ONLY, SCI_VERSION_1_LATE
#define SIG_SCI11 SCI_VERSION_1_1, SCI_VERSION_1_1
#define SIG_SINCE_SCI11 SCI_VERSION_1_1, SCI_VERSION_NONE
-#define SIG_SCI21 SCI_VERSION_2_1, SCI_VERSION_3
+#define SIG_SINCE_SCI21 SCI_VERSION_2_1_EARLY, SCI_VERSION_3
+#define SIG_UNTIL_SCI21MID SCI_VERSION_2_1_EARLY, SCI_VERSION_2_1_MIDDLE
#define SIG_SCI16 SCI_VERSION_NONE, SCI_VERSION_1_1
#define SIG_SCI32 SCI_VERSION_2, SCI_VERSION_NONE
@@ -65,7 +75,7 @@ struct SciKernelMapSubEntry {
#define SIG_SOUNDSCI0 SCI_VERSION_0_EARLY, SCI_VERSION_0_LATE
#define SIG_SOUNDSCI1EARLY SCI_VERSION_1_EARLY, SCI_VERSION_1_EARLY
#define SIG_SOUNDSCI1LATE SCI_VERSION_1_LATE, SCI_VERSION_1_LATE
-#define SIG_SOUNDSCI21 SCI_VERSION_2_1, SCI_VERSION_3
+#define SIG_SOUNDSCI21 SCI_VERSION_2_1_EARLY, SCI_VERSION_3
#define SIGFOR_ALL 0x3f
#define SIGFOR_DOS 1 << 0
@@ -190,7 +200,7 @@ static const SciKernelMapSubEntry kGraph_subops[] = {
// version, subId, function-mapping, signature, workarounds
static const SciKernelMapSubEntry kPalVary_subops[] = {
- { SIG_SCI21, 0, MAP_CALL(PalVaryInit), "ii(i)(i)(i)", NULL },
+ { SIG_SINCE_SCI21, 0, MAP_CALL(PalVaryInit), "ii(i)(i)(i)", NULL },
{ SIG_SCIALL, 0, MAP_CALL(PalVaryInit), "ii(i)(i)", NULL },
{ SIG_SCIALL, 1, MAP_CALL(PalVaryReverse), "(i)(i)(i)", NULL },
{ SIG_SCIALL, 2, MAP_CALL(PalVaryGetCurrentStep), "", NULL },
@@ -246,6 +256,7 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
#ifdef ENABLE_SCI32
+// version, subId, function-mapping, signature, workarounds
static const SciKernelMapSubEntry kSave_subops[] = {
{ SIG_SCI32, 0, MAP_CALL(SaveGame), "[r0]i[r0](r0)", NULL },
{ SIG_SCI32, 1, MAP_CALL(RestoreGame), "[r0]i[r0]", NULL },
@@ -261,31 +272,73 @@ static const SciKernelMapSubEntry kSave_subops[] = {
// version, subId, function-mapping, signature, workarounds
static const SciKernelMapSubEntry kList_subops[] = {
- { SIG_SCI21, 0, MAP_CALL(NewList), "", NULL },
- { SIG_SCI21, 1, MAP_CALL(DisposeList), "l", NULL },
- { SIG_SCI21, 2, MAP_CALL(NewNode), ".(.)", NULL },
- { SIG_SCI21, 3, MAP_CALL(FirstNode), "[l0]", NULL },
- { SIG_SCI21, 4, MAP_CALL(LastNode), "l", NULL },
- { SIG_SCI21, 5, MAP_CALL(EmptyList), "l", NULL },
- { SIG_SCI21, 6, MAP_CALL(NextNode), "n", NULL },
- { SIG_SCI21, 7, MAP_CALL(PrevNode), "n", NULL },
- { SIG_SCI21, 8, MAP_CALL(NodeValue), "[n0]", NULL },
- { SIG_SCI21, 9, MAP_CALL(AddAfter), "lnn.", NULL },
- { SIG_SCI21, 10, MAP_CALL(AddToFront), "ln.", NULL },
- { SIG_SCI21, 11, MAP_CALL(AddToEnd), "ln(.)", NULL },
- { SIG_SCI21, 12, MAP_CALL(AddBefore), "ln.", NULL },
- { SIG_SCI21, 13, MAP_CALL(MoveToFront), "ln", NULL },
- { SIG_SCI21, 14, MAP_CALL(MoveToEnd), "ln", NULL },
- { SIG_SCI21, 15, MAP_CALL(FindKey), "l.", NULL },
- { SIG_SCI21, 16, MAP_CALL(DeleteKey), "l.", NULL },
- { SIG_SCI21, 17, MAP_CALL(ListAt), "li", NULL },
- { SIG_SCI21, 18, MAP_CALL(ListIndexOf) , "l[io]", NULL },
- { SIG_SCI21, 19, MAP_CALL(ListEachElementDo), "li(.*)", NULL },
- { SIG_SCI21, 20, MAP_CALL(ListFirstTrue), "li(.*)", NULL },
- { SIG_SCI21, 21, MAP_CALL(ListAllTrue), "li(.*)", NULL },
- { SIG_SCI21, 22, MAP_CALL(Sort), "ooo", NULL },
+ { SIG_SINCE_SCI21, 0, MAP_CALL(NewList), "", NULL },
+ { SIG_SINCE_SCI21, 1, MAP_CALL(DisposeList), "l", NULL },
+ { SIG_SINCE_SCI21, 2, MAP_CALL(NewNode), ".(.)", NULL },
+ { SIG_SINCE_SCI21, 3, MAP_CALL(FirstNode), "[l0]", NULL },
+ { SIG_SINCE_SCI21, 4, MAP_CALL(LastNode), "l", NULL },
+ { SIG_SINCE_SCI21, 5, MAP_CALL(EmptyList), "l", NULL },
+ { SIG_SINCE_SCI21, 6, MAP_CALL(NextNode), "n", NULL },
+ { SIG_SINCE_SCI21, 7, MAP_CALL(PrevNode), "n", NULL },
+ { SIG_SINCE_SCI21, 8, MAP_CALL(NodeValue), "[n0]", NULL },
+ { SIG_SINCE_SCI21, 9, MAP_CALL(AddAfter), "lnn.", NULL },
+ { SIG_SINCE_SCI21, 10, MAP_CALL(AddToFront), "ln.", NULL },
+ { SIG_SINCE_SCI21, 11, MAP_CALL(AddToEnd), "ln(.)", NULL },
+ { SIG_SINCE_SCI21, 12, MAP_CALL(AddBefore), "ln.", NULL },
+ { SIG_SINCE_SCI21, 13, MAP_CALL(MoveToFront), "ln", NULL },
+ { SIG_SINCE_SCI21, 14, MAP_CALL(MoveToEnd), "ln", NULL },
+ { SIG_SINCE_SCI21, 15, MAP_CALL(FindKey), "l.", NULL },
+ { SIG_SINCE_SCI21, 16, MAP_CALL(DeleteKey), "l.", NULL },
+ { SIG_SINCE_SCI21, 17, MAP_CALL(ListAt), "li", NULL },
+ { SIG_SINCE_SCI21, 18, MAP_CALL(ListIndexOf) , "l[io]", NULL },
+ { SIG_SINCE_SCI21, 19, MAP_CALL(ListEachElementDo), "li(.*)", NULL },
+ { SIG_SINCE_SCI21, 20, MAP_CALL(ListFirstTrue), "li(.*)", NULL },
+ { SIG_SINCE_SCI21, 21, MAP_CALL(ListAllTrue), "li(.*)", NULL },
+ { SIG_SINCE_SCI21, 22, MAP_CALL(Sort), "ooo", NULL },
+ SCI_SUBOPENTRY_TERMINATOR
+};
+
+// version, subId, function-mapping, signature, workarounds
+static const SciKernelMapSubEntry kString_subops[] = {
+ { SIG_SCI32, 0, MAP_CALL(StringNew), "i(i)", NULL },
+ { SIG_SCI32, 1, MAP_CALL(StringSize), "[or]", NULL },
+ { SIG_SCI32, 2, MAP_CALL(StringAt), "[or]i", NULL },
+ { SIG_SCI32, 3, MAP_CALL(StringPutAt), "[or]i(i*)", NULL },
+ // StringFree accepts invalid references
+ { SIG_SCI32, 4, MAP_CALL(StringFree), "[or0!]", NULL },
+ { SIG_SCI32, 5, MAP_CALL(StringFill), "[or]ii", NULL },
+ { SIG_SCI32, 6, MAP_CALL(StringCopy), "[or]i[or]ii", NULL },
+ { SIG_SCI32, 7, MAP_CALL(StringCompare), "[or][or](i)", NULL },
+
+ // =SCI2.1 Early and SCI2.1 Middle=
+ { SIG_UNTIL_SCI21MID, 8, MAP_CALL(StringDup), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 9, MAP_CALL(StringGetData), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 10, MAP_CALL(StringLen), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 11, MAP_CALL(StringPrintf), "[or](.*)", NULL },
+ { SIG_UNTIL_SCI21MID, 12, MAP_CALL(StringPrintfBuf), "[or](.*)", NULL },
+ { SIG_UNTIL_SCI21MID, 13, MAP_CALL(StringAtoi), "[or]", NULL },
+ // exact functionality of Trim is unknown atm
+ { SIG_UNTIL_SCI21MID, 14, MAP_CALL(StringTrim), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 15, MAP_CALL(StringUpper), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 16, MAP_CALL(StringLower), "[or]", NULL },
+ // the following 2 are unknown atm (happen in Phantasmagoria)
+ // possibly translate?
+ { SIG_UNTIL_SCI21MID, 17, MAP_CALL(StringTrn), "[or]", NULL },
+ { SIG_UNTIL_SCI21MID, 18, MAP_CALL(StringTrnExclude), "[or]", NULL },
+
+ // SCI2.1 Late + SCI3 - kStringDup + kStringGetData were removed
+ { SIG_SCI32, 8, MAP_CALL(StringLen), "[or]", NULL },
+ { SIG_SCI32, 9, MAP_CALL(StringPrintf), "[or](.*)", NULL },
+ { SIG_SCI32, 10, MAP_CALL(StringPrintfBuf), "[or](.*)", NULL },
+ { SIG_SCI32, 11, MAP_CALL(StringAtoi), "[or]", NULL },
+ { SIG_SCI32, 12, MAP_CALL(StringTrim), "[or]", NULL },
+ { SIG_SCI32, 13, MAP_CALL(StringUpper), "[or]", NULL },
+ { SIG_SCI32, 14, MAP_CALL(StringLower), "[or]", NULL },
+ { SIG_SCI32, 15, MAP_CALL(StringTrn), "[or]", NULL },
+ { SIG_SCI32, 16, MAP_CALL(StringTrnExclude), "[or]", NULL },
SCI_SUBOPENTRY_TERMINATOR
};
+
#endif
struct SciKernelMapEntry {
@@ -429,7 +482,7 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_CALL(Said), SIG_EVERYWHERE, "[r0]", NULL, NULL },
{ MAP_CALL(SaveGame), SIG_EVERYWHERE, "[r0]i[r0](r0)", NULL, NULL },
{ MAP_CALL(ScriptID), SIG_EVERYWHERE, "[io](i)", NULL, NULL },
- { MAP_CALL(SetCursor), SIG_SCI21, SIGFOR_ALL, "i(i)([io])(i*)", NULL, NULL },
+ { MAP_CALL(SetCursor), SIG_SINCE_SCI21, SIGFOR_ALL, "i(i)([io])(i*)", NULL, NULL },
// TODO: SCI2.1 may supply an object optionally (mother goose sci21 right on startup) - find out why
{ MAP_CALL(SetCursor), SIG_SCI11, SIGFOR_ALL, "i(i)(i)(i)(iiiiii)", NULL, NULL },
{ MAP_CALL(SetCursor), SIG_EVERYWHERE, "i(i)(i)(i)(i)", NULL, kSetCursor_workarounds },
@@ -513,7 +566,7 @@ static SciKernelMapEntry s_kernelMap[] = {
// our garbage collector (i.e. the SCI0-SCI1.1 semantics).
{ "Purge", kFlushResources, SIG_EVERYWHERE, "i", NULL, NULL },
{ MAP_CALL(SetShowStyle), SIG_EVERYWHERE, "ioiiiii([ri])(i)", NULL, NULL },
- { MAP_CALL(String), SIG_EVERYWHERE, "(.*)", NULL, NULL },
+ { MAP_CALL(String), SIG_EVERYWHERE, "(.*)", kString_subops, NULL },
{ MAP_CALL(UpdatePlane), SIG_EVERYWHERE, "o", NULL, NULL },
{ MAP_CALL(UpdateScreenItem), SIG_EVERYWHERE, "o", NULL, NULL },
{ MAP_CALL(ObjectIntersect), SIG_EVERYWHERE, "oo", NULL, NULL },
@@ -570,7 +623,7 @@ static SciKernelMapEntry s_kernelMap[] = {
// SCI2.1 Kernel Functions
{ MAP_CALL(CD), SIG_EVERYWHERE, "(.*)", NULL, NULL },
{ MAP_CALL(IsOnMe), SIG_EVERYWHERE, "iioi", NULL, NULL },
- { MAP_CALL(List), SIG_SCI21, SIGFOR_ALL, "(.*)", kList_subops, NULL },
+ { MAP_CALL(List), SIG_SINCE_SCI21, SIGFOR_ALL, "(.*)", kList_subops, NULL },
{ MAP_CALL(MulDiv), SIG_EVERYWHERE, "iii", NULL, NULL },
{ MAP_CALL(PlayVMD), SIG_EVERYWHERE, "(.*)", NULL, NULL },
{ MAP_CALL(Robot), SIG_EVERYWHERE, "(.*)", NULL, NULL },
diff --git a/engines/sci/engine/kevent.cpp b/engines/sci/engine/kevent.cpp
index 8e16e0a07a..beaad2628a 100644
--- a/engines/sci/engine/kevent.cpp
+++ b/engines/sci/engine/kevent.cpp
@@ -42,6 +42,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
reg_t obj = argv[1];
SciEvent curEvent;
int modifier_mask = getSciVersion() <= SCI_VERSION_01 ? SCI_KEYMOD_ALL : SCI_KEYMOD_NO_FOOLOCK;
+ uint16 modifiers = 0;
SegManager *segMan = s->_segMan;
Common::Point mousePos;
@@ -58,7 +59,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
// In case we use a simulated event we query the current mouse position
mousePos = g_sci->_gfxCursor->getPosition();
#ifdef ENABLE_SCI32
- if (getSciVersion() >= SCI_VERSION_2_1)
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY)
g_sci->_gfxCoordAdjuster->fromDisplayToScript(mousePos.y, mousePos.x);
#endif
// Limit the mouse cursor position, if necessary
@@ -84,7 +85,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
// For a real event we use its associated mouse position
mousePos = curEvent.mousePos;
#ifdef ENABLE_SCI32
- if (getSciVersion() >= SCI_VERSION_2_1)
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY)
g_sci->_gfxCoordAdjuster->fromDisplayToScript(mousePos.y, mousePos.x);
#endif
// Limit the mouse cursor position, if necessary
@@ -110,6 +111,26 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
writeSelectorValue(segMan, obj, SELECTOR(x), mousePos.x);
writeSelectorValue(segMan, obj, SELECTOR(y), mousePos.y);
+ // Get current keyboard modifiers, only keep relevant bits
+ modifiers = curEvent.modifiers & modifier_mask;
+ if (g_sci->getPlatform() == Common::kPlatformDOS) {
+ // We are supposed to emulate SCI running in DOS
+
+ // We set the higher byte of the modifiers to 02h
+ // Original SCI also did that indirectly, because it asked BIOS for shift status
+ // via AH=0x02 INT16, which then sets the shift flags in AL
+ // AH is supposed to be destroyed in that case and it's not defined that 0x02
+ // is still in it on return. The value of AX was then set into the modifiers selector.
+ // At least one fan-made game (Betrayed Alliance) requires 0x02 to be in the upper byte,
+ // otherwise the darts game (script 111) will not work properly.
+
+ // It seems Sierra fixed this behaviour (effectively bug) in the SCI1 keyboard driver.
+ // SCI32 also resets the upper byte.
+ if (getSciVersion() <= SCI_VERSION_01) {
+ modifiers |= 0x0200;
+ }
+ }
+
//s->_gui->moveCursor(s->gfx_state->pointer_pos.x, s->gfx_state->pointer_pos.y);
switch (curEvent.type) {
@@ -125,7 +146,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
writeSelectorValue(segMan, obj, SELECTOR(message), curEvent.character);
// We only care about the translated character
- writeSelectorValue(segMan, obj, SELECTOR(modifiers), curEvent.modifiers & modifier_mask);
+ writeSelectorValue(segMan, obj, SELECTOR(modifiers), modifiers);
break;
case SCI_EVENT_MOUSE_RELEASE:
@@ -149,10 +170,11 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
default:
break;
}
+ modifiers |= extra_bits; // add these additional bits to the mix
writeSelectorValue(segMan, obj, SELECTOR(type), curEvent.type);
writeSelectorValue(segMan, obj, SELECTOR(message), 0);
- writeSelectorValue(segMan, obj, SELECTOR(modifiers), (curEvent.modifiers | extra_bits) & modifier_mask);
+ writeSelectorValue(segMan, obj, SELECTOR(modifiers), modifiers);
s->r_acc = make_reg(0, 1);
}
break;
@@ -161,7 +183,7 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
// Return a null event
writeSelectorValue(segMan, obj, SELECTOR(type), SCI_EVENT_NONE);
writeSelectorValue(segMan, obj, SELECTOR(message), 0);
- writeSelectorValue(segMan, obj, SELECTOR(modifiers), curEvent.modifiers & modifier_mask);
+ writeSelectorValue(segMan, obj, SELECTOR(modifiers), modifiers);
s->r_acc = NULL_REG;
}
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index 61ac76d0a7..80bd683dcd 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -258,16 +258,21 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
}
debugC(kDebugLevelFile, "kFileIO(open): %s, 0x%x", name.c_str(), mode);
+ if (name.hasPrefix("sciAudio\\")) {
+ // fan-made sciAudio extension, don't create those files and instead return a virtual handle
+ return make_reg(0, VIRTUALFILE_HANDLE_SCIAUDIO);
+ }
+
#ifdef ENABLE_SCI32
if (name == PHANTASMAGORIA_SAVEGAME_INDEX) {
if (s->_virtualIndexFile) {
- return make_reg(0, VIRTUALFILE_HANDLE);
+ return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
} else {
Common::String englishName = g_sci->getSciLanguageString(name, K_LANG_ENGLISH);
Common::String wrappedName = g_sci->wrapFilename(englishName);
if (!g_sci->getSaveFileManager()->listSavefiles(wrappedName).empty()) {
s->_virtualIndexFile = new VirtualIndexFile(wrappedName);
- return make_reg(0, VIRTUALFILE_HANDLE);
+ return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
}
}
}
@@ -320,7 +325,7 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) {
s->_virtualIndexFile->write("\0", 1);
s->_virtualIndexFile->write("\0", 1); // Spot description (empty)
s->_virtualIndexFile->seek(0, SEEK_SET);
- return make_reg(0, VIRTUALFILE_HANDLE);
+ return make_reg(0, VIRTUALFILE_HANDLE_SCI32SAVE);
}
}
#endif
@@ -346,12 +351,17 @@ reg_t kFileIOClose(EngineState *s, int argc, reg_t *argv) {
uint16 handle = argv[0].toUint16();
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE) {
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
s->_virtualIndexFile->close();
return SIGNAL_REG;
}
#endif
+ if (handle >= VIRTUALFILE_HANDLE_START) {
+ // it's a virtual handle? ignore it
+ return SIGNAL_REG;
+ }
+
FileHandle *f = getFileFromHandle(s, handle);
if (f) {
f->close();
@@ -373,7 +383,7 @@ reg_t kFileIOReadRaw(EngineState *s, int argc, reg_t *argv) {
debugC(kDebugLevelFile, "kFileIO(readRaw): %d, %d", handle, size);
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE) {
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
bytesRead = s->_virtualIndexFile->read(buf, size);
} else {
#endif
@@ -403,7 +413,7 @@ reg_t kFileIOWriteRaw(EngineState *s, int argc, reg_t *argv) {
debugC(kDebugLevelFile, "kFileIO(writeRaw): %d, %d", handle, size);
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE) {
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
s->_virtualIndexFile->write(buf, size);
success = true;
} else {
@@ -480,7 +490,7 @@ reg_t kFileIOReadString(EngineState *s, int argc, reg_t *argv) {
uint32 bytesRead;
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE)
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE)
bytesRead = s->_virtualIndexFile->readLine(buf, maxsize);
else
#endif
@@ -503,7 +513,7 @@ reg_t kFileIOWriteString(EngineState *s, int argc, reg_t *argv) {
// We skip creating these files, and instead handle the calls
// directly. Since the sciAudio calls are only creating text files,
// this is probably the most straightforward place to handle them.
- if (handle == 0xFFFF && str.hasPrefix("(sciAudio")) {
+ if (handle == VIRTUALFILE_HANDLE_SCIAUDIO) {
Common::List<ExecStack>::const_iterator iter = s->_executionStack.reverse_begin();
iter--; // sciAudio
iter--; // sciAudio child
@@ -512,7 +522,7 @@ reg_t kFileIOWriteString(EngineState *s, int argc, reg_t *argv) {
}
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE) {
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE) {
s->_virtualIndexFile->write(str.c_str(), str.size());
return NULL_REG;
}
@@ -539,7 +549,7 @@ reg_t kFileIOSeek(EngineState *s, int argc, reg_t *argv) {
debugC(kDebugLevelFile, "kFileIO(seek): %d, %d, %d", handle, offset, whence);
#ifdef ENABLE_SCI32
- if (handle == VIRTUALFILE_HANDLE)
+ if (handle == VIRTUALFILE_HANDLE_SCI32SAVE)
return make_reg(0, s->_virtualIndexFile->seek(offset, whence));
#endif
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp
index 66590da23f..c0da2daaeb 100644
--- a/engines/sci/engine/klists.cpp
+++ b/engines/sci/engine/klists.cpp
@@ -669,26 +669,44 @@ reg_t kArray(EngineState *s, int argc, reg_t *argv) {
// TODO: we need to either merge SCI2 strings and
// arrays together, and in the future merge them with
// the SCI1 strings and arrays in the segment manager
+ bool callStringFunc = false;
if (op == 0) {
// New, check if the target type is 3 (string)
if (argv[2].toUint16() == 3)
- return kString(s, argc, argv);
+ callStringFunc = true;
} else {
if (s->_segMan->getSegmentType(argv[1].getSegment()) == SEG_TYPE_STRING ||
s->_segMan->getSegmentType(argv[1].getSegment()) == SEG_TYPE_SCRIPT) {
- return kString(s, argc, argv);
+ callStringFunc = true;
}
#if 0
if (op == 6) {
if (s->_segMan->getSegmentType(argv[3].getSegment()) == SEG_TYPE_STRING ||
s->_segMan->getSegmentType(argv[3].getSegment()) == SEG_TYPE_SCRIPT) {
- return kString(s, argc, argv);
+ callStringFunc = true;
}
}
#endif
}
+ if (callStringFunc) {
+ Kernel *kernel = g_sci->getKernel();
+ uint16 kernelStringFuncId = kernel->_kernelFunc_StringId;
+ if (kernelStringFuncId) {
+ const KernelFunction *kernelStringFunc = &kernel->_kernelFuncs[kernelStringFuncId];
+
+ if (op < kernelStringFunc->subFunctionCount) {
+ // subfunction-id is valid
+ const KernelSubFunction *kernelStringSubCall = &kernelStringFunc->subFunctions[op];
+ argc--;
+ argv++; // remove subfunction-id from arguments
+ // and call the kString subfunction
+ return kernelStringSubCall->function(s, argc, argv);
+ }
+ }
+ }
+
switch (op) {
case 0: { // New
reg_t arrayHandle;
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index 448e641b63..1d9dae69b7 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -487,7 +487,7 @@ reg_t kMacPlatform(EngineState *s, int argc, reg_t *argv) {
// In SCI1, its usage is still unknown
// In SCI1.1, it's NOP
// In SCI32, it's used for remapping cursor ID's
- if (getSciVersion() >= SCI_VERSION_2_1) // Set Mac cursor remap
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY) // Set Mac cursor remap
g_sci->_gfxCursor->setMacCursorRemapList(argc - 1, argv + 1);
else if (getSciVersion() != SCI_VERSION_1_1)
warning("Unknown SCI1 kMacPlatform(0) call");
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index 5c271780dd..303de079aa 100644
--- a/engines/sci/engine/kscripts.cpp
+++ b/engines/sci/engine/kscripts.cpp
@@ -229,7 +229,7 @@ reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
uint16 address = scr->validateExportFunc(index, true);
// Point to the heap for SCI1.1 - SCI2.1 games
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE)
address += scr->getScriptSize();
// Bugfix for the intro speed in PQ2 version 1.002.011.
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index 6a1708d21a..032191e4c1 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -185,7 +185,7 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
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) {
+ 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);
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index eef758a0d9..cd0d6af936 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -674,189 +674,230 @@ reg_t kText(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
-reg_t kString(EngineState *s, int argc, reg_t *argv) {
- uint16 op = argv[0].toUint16();
+// TODO: there is an unused second argument, happens at least in LSL6 right during the intro
+reg_t kStringNew(EngineState *s, int argc, reg_t *argv) {
+ reg_t stringHandle;
+ SciString *string = s->_segMan->allocateString(&stringHandle);
+ string->setSize(argv[0].toUint16());
- if (g_sci->_features->detectSci2StringFunctionType() == kSci2StringFunctionNew) {
- if (op >= 8) // Dup, GetData have been removed
- op += 2;
- }
+ // Make sure the first character is a null character
+ if (string->getSize() > 0)
+ string->setValue(0, 0);
- switch (op) {
- case 0: { // New
- reg_t stringHandle;
- SciString *string = s->_segMan->allocateString(&stringHandle);
- string->setSize(argv[1].toUint16());
+ return stringHandle;
+}
- // Make sure the first character is a null character
- if (string->getSize() > 0)
- string->setValue(0, 0);
+reg_t kStringSize(EngineState *s, int argc, reg_t *argv) {
+ return make_reg(0, s->_segMan->getString(argv[0]).size());
+}
- return stringHandle;
- }
- case 1: // Size
- return make_reg(0, s->_segMan->getString(argv[1]).size());
- case 2: { // At (return value at an index)
- // Note that values are put in bytes to avoid sign extension
- if (argv[1].getSegment() == s->_segMan->getStringSegmentId()) {
- SciString *string = s->_segMan->lookupString(argv[1]);
- byte val = string->getRawData()[argv[2].toUint16()];
- return make_reg(0, val);
- } else {
- Common::String string = s->_segMan->getString(argv[1]);
- byte val = string[argv[2].toUint16()];
- return make_reg(0, val);
- }
+// At (return value at an index)
+reg_t kStringAt(EngineState *s, int argc, reg_t *argv) {
+ // Note that values are put in bytes to avoid sign extension
+ if (argv[0].getSegment() == s->_segMan->getStringSegmentId()) {
+ SciString *string = s->_segMan->lookupString(argv[0]);
+ byte val = string->getRawData()[argv[1].toUint16()];
+ return make_reg(0, val);
+ } else {
+ Common::String string = s->_segMan->getString(argv[0]);
+ byte val = string[argv[1].toUint16()];
+ return make_reg(0, val);
}
- case 3: { // Atput (put value at an index)
- SciString *string = s->_segMan->lookupString(argv[1]);
+}
- uint32 index = argv[2].toUint16();
- uint32 count = argc - 3;
+// Atput (put value at an index)
+reg_t kStringPutAt(EngineState *s, int argc, reg_t *argv) {
+ SciString *string = s->_segMan->lookupString(argv[0]);
- if (index + count > 65535)
- break;
+ uint32 index = argv[1].toUint16();
+ uint32 count = argc - 2;
- if (string->getSize() < index + count)
- string->setSize(index + count);
+ if (index + count > 65535)
+ return NULL_REG;
- for (uint16 i = 0; i < count; i++)
- string->setValue(i + index, argv[i + 3].toUint16());
+ if (string->getSize() < index + count)
+ string->setSize(index + count);
- return argv[1]; // We also have to return the handle
- }
- case 4: // Free
- // Freeing of strings is handled by the garbage collector
- return s->r_acc;
- case 5: { // Fill
- SciString *string = s->_segMan->lookupString(argv[1]);
- uint16 index = argv[2].toUint16();
+ for (uint16 i = 0; i < count; i++)
+ string->setValue(i + index, argv[i + 2].toUint16());
+
+ return argv[0]; // We also have to return the handle
+}
+
+reg_t kStringFree(EngineState *s, int argc, reg_t *argv) {
+ // Freeing of strings is handled by the garbage collector
+ return s->r_acc;
+}
+
+reg_t kStringFill(EngineState *s, int argc, reg_t *argv) {
+ SciString *string = s->_segMan->lookupString(argv[0]);
+ uint16 index = argv[1].toUint16();
+
+ // A count of -1 means fill the rest of the array
+ uint16 count = argv[2].toSint16() == -1 ? string->getSize() - index : argv[2].toUint16();
+ uint16 stringSize = string->getSize();
- // A count of -1 means fill the rest of the array
- uint16 count = argv[3].toSint16() == -1 ? string->getSize() - index : argv[3].toUint16();
- uint16 stringSize = string->getSize();
+ if (stringSize < index + count)
+ string->setSize(index + count);
- if (stringSize < index + count)
- string->setSize(index + count);
+ for (uint16 i = 0; i < count; i++)
+ string->setValue(i + index, argv[3].toUint16());
- for (uint16 i = 0; i < count; i++)
- string->setValue(i + index, argv[4].toUint16());
+ return argv[0];
+}
+
+reg_t kStringCopy(EngineState *s, int argc, reg_t *argv) {
+ const char *string2 = 0;
+ uint32 string2Size = 0;
+ Common::String string;
- return argv[1];
+ if (argv[2].getSegment() == s->_segMan->getStringSegmentId()) {
+ SciString *sstr;
+ sstr = s->_segMan->lookupString(argv[2]);
+ string2 = sstr->getRawData();
+ string2Size = sstr->getSize();
+ } else {
+ string = s->_segMan->getString(argv[2]);
+ string2 = string.c_str();
+ string2Size = string.size() + 1;
}
- case 6: { // Cpy
- const char *string2 = 0;
- uint32 string2Size = 0;
- Common::String string;
-
- if (argv[3].getSegment() == s->_segMan->getStringSegmentId()) {
- SciString *sstr;
- sstr = s->_segMan->lookupString(argv[3]);
- string2 = sstr->getRawData();
- string2Size = sstr->getSize();
- } else {
- string = s->_segMan->getString(argv[3]);
- string2 = string.c_str();
- string2Size = string.size() + 1;
+
+ uint32 index1 = argv[1].toUint16();
+ uint32 index2 = argv[3].toUint16();
+
+ if (argv[0] == argv[2]) {
+ // source and destination string are one and the same
+ if (index1 == index2) {
+ // even same index? ignore this call
+ // Happens in KQ7, when starting a chapter
+ return argv[0];
}
+ // TODO: this will crash, when setSize() is triggered later
+ // we need to exactly replicate original interpreter behavior
+ warning("kString(Copy): source is the same as destination string");
+ }
- uint32 index1 = argv[2].toUint16();
- uint32 index2 = argv[4].toUint16();
+ // The original engine ignores bad copies too
+ if (index2 > string2Size)
+ return NULL_REG;
- // The original engine ignores bad copies too
- if (index2 > string2Size)
- break;
+ // A count of -1 means fill the rest of the array
+ uint32 count = argv[4].toSint16() == -1 ? string2Size - index2 + 1 : argv[4].toUint16();
+// reg_t strAddress = argv[0];
- // A count of -1 means fill the rest of the array
- uint32 count = argv[5].toSint16() == -1 ? string2Size - index2 + 1 : argv[5].toUint16();
- reg_t strAddress = argv[1];
+ SciString *string1 = s->_segMan->lookupString(argv[0]);
+ //SciString *string1 = !argv[1].isNull() ? s->_segMan->lookupString(argv[1]) : s->_segMan->allocateString(&strAddress);
- SciString *string1 = s->_segMan->lookupString(argv[1]);
- //SciString *string1 = !argv[1].isNull() ? s->_segMan->lookupString(argv[1]) : s->_segMan->allocateString(&strAddress);
+ if (string1->getSize() < index1 + count)
+ string1->setSize(index1 + count);
- if (string1->getSize() < index1 + count)
- string1->setSize(index1 + count);
+ // Note: We're accessing from c_str() here because the
+ // string's size ignores the trailing 0 and therefore
+ // triggers an assert when doing string2[i + index2].
+ for (uint16 i = 0; i < count; i++)
+ string1->setValue(i + index1, string2[i + index2]);
- // Note: We're accessing from c_str() here because the
- // string's size ignores the trailing 0 and therefore
- // triggers an assert when doing string2[i + index2].
- for (uint16 i = 0; i < count; i++)
- string1->setValue(i + index1, string2[i + index2]);
+ return argv[0];
+}
- return strAddress;
- }
- case 7: { // Cmp
- Common::String string1 = argv[1].isNull() ? "" : s->_segMan->getString(argv[1]);
- Common::String string2 = argv[2].isNull() ? "" : s->_segMan->getString(argv[2]);
-
- if (argc == 4) // Strncmp
- return make_reg(0, strncmp(string1.c_str(), string2.c_str(), argv[3].toUint16()));
- else // Strcmp
- return make_reg(0, strcmp(string1.c_str(), string2.c_str()));
- }
- case 8: { // Dup
- reg_t stringHandle;
+reg_t kStringCompare(EngineState *s, int argc, reg_t *argv) {
+ Common::String string1 = argv[0].isNull() ? "" : s->_segMan->getString(argv[0]);
+ Common::String string2 = argv[1].isNull() ? "" : s->_segMan->getString(argv[1]);
- SciString *dupString = s->_segMan->allocateString(&stringHandle);
+ if (argc == 3) // Strncmp
+ return make_reg(0, strncmp(string1.c_str(), string2.c_str(), argv[2].toUint16()));
+ else // Strcmp
+ return make_reg(0, strcmp(string1.c_str(), string2.c_str()));
+}
- if (argv[1].getSegment() == s->_segMan->getStringSegmentId()) {
- *dupString = *s->_segMan->lookupString(argv[1]);
- } else {
- dupString->fromString(s->_segMan->getString(argv[1]));
- }
+// was removed for SCI2.1 Late+
+reg_t kStringDup(EngineState *s, int argc, reg_t *argv) {
+ reg_t stringHandle;
- return stringHandle;
- }
- case 9: // Getdata
- if (!s->_segMan->isHeapObject(argv[1]))
- return argv[1];
-
- return readSelector(s->_segMan, argv[1], SELECTOR(data));
- case 10: // Stringlen
- return make_reg(0, s->_segMan->strlen(argv[1]));
- case 11: { // Printf
- reg_t stringHandle;
- s->_segMan->allocateString(&stringHandle);
-
- reg_t *adjustedArgs = new reg_t[argc];
- adjustedArgs[0] = stringHandle;
- memcpy(&adjustedArgs[1], argv + 1, (argc - 1) * sizeof(reg_t));
-
- kFormat(s, argc, adjustedArgs);
- delete[] adjustedArgs;
- return stringHandle;
- }
- case 12: // Printf Buf
- return kFormat(s, argc - 1, argv + 1);
- case 13: { // atoi
- Common::String string = s->_segMan->getString(argv[1]);
- return make_reg(0, (uint16)atoi(string.c_str()));
- }
- // New subops in SCI2.1 late / SCI3
- case 14: // unknown
- warning("kString, subop %d", op);
- return NULL_REG;
- case 15: { // upper
- Common::String string = s->_segMan->getString(argv[1]);
+ SciString *dupString = s->_segMan->allocateString(&stringHandle);
- string.toUppercase();
- s->_segMan->strcpy(argv[1], string.c_str());
- return NULL_REG;
+ if (argv[0].getSegment() == s->_segMan->getStringSegmentId()) {
+ *dupString = *s->_segMan->lookupString(argv[0]);
+ } else {
+ dupString->fromString(s->_segMan->getString(argv[0]));
}
- case 16: { // lower
- Common::String string = s->_segMan->getString(argv[1]);
- string.toLowercase();
- s->_segMan->strcpy(argv[1], string.c_str());
- return NULL_REG;
- }
- default:
- error("Unknown kString subop %d", argv[0].toUint16());
- }
+ return stringHandle;
+}
+
+// was removed for SCI2.1 Late+
+reg_t kStringGetData(EngineState *s, int argc, reg_t *argv) {
+ if (!s->_segMan->isHeapObject(argv[0]))
+ return argv[0];
+
+ return readSelector(s->_segMan, argv[0], SELECTOR(data));
+}
+
+reg_t kStringLen(EngineState *s, int argc, reg_t *argv) {
+ return make_reg(0, s->_segMan->strlen(argv[0]));
+}
+
+reg_t kStringPrintf(EngineState *s, int argc, reg_t *argv) {
+ reg_t stringHandle;
+ s->_segMan->allocateString(&stringHandle);
+
+ reg_t *adjustedArgs = new reg_t[argc + 1];
+ adjustedArgs[0] = stringHandle;
+ memcpy(&adjustedArgs[1], argv, argc * sizeof(reg_t));
+
+ kFormat(s, argc + 1, adjustedArgs);
+ delete[] adjustedArgs;
+ return stringHandle;
+}
+
+reg_t kStringPrintfBuf(EngineState *s, int argc, reg_t *argv) {
+ return kFormat(s, argc, argv);
+}
+reg_t kStringAtoi(EngineState *s, int argc, reg_t *argv) {
+ Common::String string = s->_segMan->getString(argv[0]);
+ return make_reg(0, (uint16)atoi(string.c_str()));
+}
+
+reg_t kStringTrim(EngineState *s, int argc, reg_t *argv) {
+ warning("kStringTrim (argc = %d)", argc);
+ return NULL_REG;
+}
+
+reg_t kStringUpper(EngineState *s, int argc, reg_t *argv) {
+ Common::String string = s->_segMan->getString(argv[0]);
+
+ string.toUppercase();
+ s->_segMan->strcpy(argv[0], string.c_str());
+ return NULL_REG;
+}
+
+reg_t kStringLower(EngineState *s, int argc, reg_t *argv) {
+ Common::String string = s->_segMan->getString(argv[0]);
+
+ string.toLowercase();
+ s->_segMan->strcpy(argv[0], string.c_str());
return NULL_REG;
}
+// Possibly kStringTranslate?
+reg_t kStringTrn(EngineState *s, int argc, reg_t *argv) {
+ warning("kStringTrn (argc = %d)", argc);
+ return NULL_REG;
+}
+
+// Possibly kStringTranslateExclude?
+reg_t kStringTrnExclude(EngineState *s, int argc, reg_t *argv) {
+ warning("kStringTrnExclude (argc = %d)", argc);
+ return NULL_REG;
+}
+
+reg_t kString(EngineState *s, int argc, reg_t *argv) {
+ if (!s)
+ return make_reg(0, getSciVersion());
+ error("not supposed to call this");
+}
+
#endif
} // End of namespace Sci
diff --git a/engines/sci/engine/kvideo.cpp b/engines/sci/engine/kvideo.cpp
index f925111fc9..6920466711 100644
--- a/engines/sci/engine/kvideo.cpp
+++ b/engines/sci/engine/kvideo.cpp
@@ -181,7 +181,7 @@ reg_t kShowMovie(EngineState *s, int argc, reg_t *argv) {
// for the video, so we'll just play it from there for now.
#ifdef ENABLE_SCI32
- if (getSciVersion() >= SCI_VERSION_2_1) {
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY) {
// SCI2.1 always has argv[0] as 1, the rest of the arguments seem to
// follow SCI1.1/2.
if (argv[0].toUint16() != 1)
diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp
index 640175b20a..5300b72b71 100644
--- a/engines/sci/engine/message.cpp
+++ b/engines/sci/engine/message.cpp
@@ -182,7 +182,7 @@ bool MessageState::getRecord(CursorStack &stack, bool recurse, MessageRecord &re
#ifdef ENABLE_SCI32
case 5: // v5 seems to be compatible with v4
// SCI32 Mac is different than SCI32 DOS/Win here
- if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1)
+ if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY)
reader = new MessageReaderV4_MacSCI32(res->data, res->size);
else
#endif
diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp
index eeff45163d..0626c084c1 100644
--- a/engines/sci/engine/object.cpp
+++ b/engines/sci/engine/object.cpp
@@ -45,7 +45,7 @@ static bool relocateBlock(Common::Array<reg_t> &block, int block_location, Segme
return false;
}
block[idx].setSegment(segment); // Perform relocation
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE)
block[idx].incOffset(scriptSize);
return true;
@@ -63,7 +63,7 @@ void Object::init(byte *buf, reg_t obj_pos, bool initVariables) {
for (int i = 0; i < _methodCount * 2 + 2; ++i) {
_baseMethod.push_back(READ_SCI11ENDIAN_UINT16(data + READ_LE_UINT16(data + kOffsetFunctionArea) + i * 2));
}
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
_variables.resize(READ_SCI11ENDIAN_UINT16(data + 2));
_baseVars = (const uint16 *)(buf + READ_SCI11ENDIAN_UINT16(data + 4));
_methodCount = READ_SCI11ENDIAN_UINT16(buf + READ_SCI11ENDIAN_UINT16(data + 6));
@@ -75,7 +75,7 @@ void Object::init(byte *buf, reg_t obj_pos, bool initVariables) {
}
if (initVariables) {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() <= SCI_VERSION_2_1_LATE) {
for (uint i = 0; i < _variables.size(); i++)
_variables[i] = make_reg(0, READ_SCI11ENDIAN_UINT16(data + (i * 2)));
} else {
@@ -92,7 +92,7 @@ int Object::locateVarSelector(SegManager *segMan, Selector slc) const {
const byte *buf = 0;
uint varnum = 0;
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() <= SCI_VERSION_2_1_LATE) {
const Object *obj = getClass(segMan);
varnum = getSciVersion() <= SCI_VERSION_1_LATE ? getVarCount() : obj->getVariable(1).toUint16();
buf = (const byte *)obj->_baseVars;
diff --git a/engines/sci/engine/object.h b/engines/sci/engine/object.h
index 00fe7c6875..0ae7ed2cab 100644
--- a/engines/sci/engine/object.h
+++ b/engines/sci/engine/object.h
@@ -79,42 +79,42 @@ public:
}
reg_t getSpeciesSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _variables[_offset];
else // SCI3
return _speciesSelectorSci3;
}
void setSpeciesSelector(reg_t value) {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
_variables[_offset] = value;
else // SCI3
_speciesSelectorSci3 = value;
}
reg_t getSuperClassSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _variables[_offset + 1];
else // SCI3
return _superClassPosSci3;
}
void setSuperClassSelector(reg_t value) {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
_variables[_offset + 1] = value;
else // SCI3
_superClassPosSci3 = value;
}
reg_t getInfoSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _variables[_offset + 2];
else // SCI3
return _infoSelectorSci3;
}
void setInfoSelector(reg_t info) {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
_variables[_offset + 2] = info;
else // SCI3
_infoSelectorSci3 = info;
@@ -123,7 +123,7 @@ public:
// No setter for the -info- selector
reg_t getNameSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _offset + 3 < (uint16)_variables.size() ? _variables[_offset + 3] : NULL_REG;
else // SCI3
return _variables.size() ? _variables[0] : NULL_REG;
@@ -132,7 +132,7 @@ public:
// No setter for the name selector
reg_t getPropDictSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _variables[2];
else
// This should never occur, this is called from a SCI1.1 - SCI2.1 only function
@@ -140,7 +140,7 @@ public:
}
void setPropDictSelector(reg_t value) {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
_variables[2] = value;
else
// This should never occur, this is called from a SCI1.1 - SCI2.1 only function
@@ -148,14 +148,14 @@ public:
}
reg_t getClassScriptSelector() const {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
return _variables[4];
else // SCI3
return make_reg(0, READ_SCI11ENDIAN_UINT16(_baseObj + 6));
}
void setClassScriptSelector(reg_t value) {
- if (getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() < SCI_VERSION_3)
_variables[4] = value;
else // SCI3
// This should never occur, this is called from a SCI1.1 - SCI2.1 only function
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index 93b3a997cc..b464d347bd 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -465,7 +465,7 @@ void Script::syncStringHeap(Common::Serializer &s) {
break;
} while (1);
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1){
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE){
// Strings in SCI1.1 come after the object instances
byte *buf = _heapStart + 4 + READ_SCI11ENDIAN_UINT16(_heapStart + 2) * 2;
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index 36e33ccfa6..26a7ff5718 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -84,7 +84,7 @@ void Script::load(int script_nr, ResourceManager *resMan, ScriptPatcher *scriptP
if (getSciVersion() == SCI_VERSION_0_EARLY) {
_bufSize += READ_LE_UINT16(script->data) * 2;
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
// In SCI1.1 - SCI2.1, the heap was in a separate space from the script. We append
// it to the end of the script, and adjust addressing accordingly.
// However, since we address the heap with a 16-bit pointer, the
@@ -142,7 +142,7 @@ void Script::load(int script_nr, ResourceManager *resMan, ScriptPatcher *scriptP
assert(_bufSize >= script->size);
memcpy(_buf, script->data, script->size);
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
Resource *heap = resMan->findResource(ResourceId(kResourceTypeHeap, _nr), 0);
assert(heap != 0);
@@ -171,7 +171,7 @@ void Script::load(int script_nr, ResourceManager *resMan, ScriptPatcher *scriptP
_localsOffset = localsBlock - _buf + 4;
_localsCount = (READ_LE_UINT16(_buf + _localsOffset - 2) - 4) >> 1; // half block size
}
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
if (READ_LE_UINT16(_buf + 1 + 5) > 0) { // does the script have an export table?
_exportTable = (const uint16 *)(_buf + 1 + 5 + 2);
_numExports = READ_SCI11ENDIAN_UINT16(_exportTable - 1);
@@ -387,7 +387,7 @@ void Script::identifyOffsets() {
scriptDataLeft -= blockSize;
} while (1);
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
// Strings in SCI1.1 up to SCI2 come after the object instances
scriptDataPtr = _heapStart;
scriptDataLeft = _heapSize;
@@ -668,7 +668,7 @@ static bool relocateBlock(Common::Array<reg_t> &block, int block_location, Segme
return false;
}
block[idx].setSegment(segment); // Perform relocation
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1)
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE)
block[idx].incOffset(scriptSize);
return true;
@@ -702,7 +702,7 @@ void Script::relocateSci0Sci21(reg_t block) {
uint16 heapSize = (uint16)_bufSize;
uint16 heapOffset = 0;
- if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
heap = _heapStart;
heapSize = (uint16)_heapSize;
heapOffset = _scriptSize;
@@ -930,7 +930,7 @@ void Script::initializeClasses(SegManager *segMan) {
if (getSciVersion() <= SCI_VERSION_1_LATE) {
seeker = findBlockSCI0(SCI_OBJ_CLASS);
mult = 1;
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
seeker = _heapStart + 4 + READ_SCI11ENDIAN_UINT16(_heapStart + 2) * 2;
mult = 2;
} else if (getSciVersion() == SCI_VERSION_3) {
@@ -962,7 +962,7 @@ void Script::initializeClasses(SegManager *segMan) {
if (isClass)
species = READ_SCI11ENDIAN_UINT16(seeker + 12);
classpos += 12;
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
isClass = (READ_SCI11ENDIAN_UINT16(seeker + 14) & kInfoFlagClass); // -info- selector
species = READ_SCI11ENDIAN_UINT16(seeker + 10);
} else if (getSciVersion() == SCI_VERSION_3) {
@@ -1104,7 +1104,7 @@ void Script::initializeObjectsSci3(SegManager *segMan, SegmentId segmentId) {
void Script::initializeObjects(SegManager *segMan, SegmentId segmentId) {
if (getSciVersion() <= SCI_VERSION_1_LATE)
initializeObjectsSci0(segMan, segmentId);
- else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1)
+ else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE)
initializeObjectsSci11(segMan, segmentId);
else if (getSciVersion() == SCI_VERSION_3)
initializeObjectsSci3(segMan, segmentId);
diff --git a/engines/sci/engine/static_selectors.cpp b/engines/sci/engine/static_selectors.cpp
index 188da3d5a2..8aa1697f07 100644
--- a/engines/sci/engine/static_selectors.cpp
+++ b/engines/sci/engine/static_selectors.cpp
@@ -114,16 +114,16 @@ static const SelectorRemap sciSelectorRemap[] = {
{ SCI_VERSION_1_1, SCI_VERSION_1_1, "cantBeHere", 54 },
// The following are not really needed. They've only been defined to
// ease game debugging.
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-objID-", 4096 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-size-", 4097 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-propDict-", 4098 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-methDict-", 4099 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-classScript-", 4100 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-script-", 4101 },
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-super-", 4102 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-objID-", 4096 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-size-", 4097 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-propDict-", 4098 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-methDict-", 4099 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-classScript-", 4100 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-script-", 4101 },
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-super-", 4102 },
//
- { SCI_VERSION_1_1, SCI_VERSION_2_1, "-info-", 4103 },
- { SCI_VERSION_NONE, SCI_VERSION_NONE, 0, 0 }
+ { SCI_VERSION_1_1, SCI_VERSION_2_1_LATE, "-info-", 4103 },
+ { SCI_VERSION_NONE, SCI_VERSION_NONE, 0, 0 }
};
struct ClassReference {
diff --git a/engines/sci/engine/vm_types.cpp b/engines/sci/engine/vm_types.cpp
index 65a82832cc..cf008c45e1 100644
--- a/engines/sci/engine/vm_types.cpp
+++ b/engines/sci/engine/vm_types.cpp
@@ -29,7 +29,7 @@
namespace Sci {
SegmentId reg_t::getSegment() const {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() < SCI_VERSION_3) {
return _segment;
} else {
// Return the lower 14 bits of the segment
@@ -38,7 +38,7 @@ SegmentId reg_t::getSegment() const {
}
void reg_t::setSegment(SegmentId segment) {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() < SCI_VERSION_3) {
_segment = segment;
} else {
// Set the lower 14 bits of the segment, and preserve the upper 2 ones for the offset
@@ -47,7 +47,7 @@ void reg_t::setSegment(SegmentId segment) {
}
uint32 reg_t::getOffset() const {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() < SCI_VERSION_3) {
return _offset;
} else {
// Return the lower 16 bits from the offset, and the 17th and 18th bits from the segment
@@ -56,7 +56,7 @@ uint32 reg_t::getOffset() const {
}
void reg_t::setOffset(uint32 offset) {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() < SCI_VERSION_3) {
_offset = offset;
} else {
// Store the lower 16 bits in the offset, and the 17th and 18th bits in the segment
diff --git a/engines/sci/graphics/compare.cpp b/engines/sci/graphics/compare.cpp
index 3c2285a470..716a366b7c 100644
--- a/engines/sci/graphics/compare.cpp
+++ b/engines/sci/graphics/compare.cpp
@@ -130,7 +130,7 @@ void GfxCompare::kernelSetNowSeen(reg_t objectReference) {
#ifdef ENABLE_SCI32
if (view->isSci2Hires())
view->adjustToUpscaledCoordinates(y, x);
- else if (getSciVersion() == SCI_VERSION_2_1)
+ else if ((getSciVersion() >= SCI_VERSION_2_1_EARLY) && (getSciVersion() <= SCI_VERSION_2_1_LATE))
_coordAdjuster->fromScriptToDisplay(y, x);
#endif
@@ -140,7 +140,7 @@ void GfxCompare::kernelSetNowSeen(reg_t objectReference) {
if (view->isSci2Hires()) {
view->adjustBackUpscaledCoordinates(celRect.top, celRect.left);
view->adjustBackUpscaledCoordinates(celRect.bottom, celRect.right);
- } else if (getSciVersion() == SCI_VERSION_2_1) {
+ } else if ((getSciVersion() >= SCI_VERSION_2_1_EARLY) && (getSciVersion() <= SCI_VERSION_2_1_LATE)) {
_coordAdjuster->fromDisplayToScript(celRect.top, celRect.left);
_coordAdjuster->fromDisplayToScript(celRect.bottom, celRect.right);
}
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index ccc362dc37..61aeb00ac3 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -23,7 +23,7 @@
#include "common/algorithm.h"
#include "common/events.h"
#include "common/keyboard.h"
-#include "common/list_intern.h"
+#include "common/list.h"
#include "common/str.h"
#include "common/system.h"
#include "common/textconsole.h"
@@ -727,7 +727,7 @@ void GfxFrameout::kernelFrameout() {
if (view && view->isSci2Hires()) {
view->adjustToUpscaledCoordinates(itemEntry->y, itemEntry->x);
view->adjustToUpscaledCoordinates(itemEntry->z, dummyX);
- } else if (getSciVersion() >= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_2_1_EARLY) {
_coordAdjuster->fromScriptToDisplay(itemEntry->y, itemEntry->x);
_coordAdjuster->fromScriptToDisplay(itemEntry->z, dummyX);
}
@@ -782,7 +782,7 @@ void GfxFrameout::kernelFrameout() {
view->adjustBackUpscaledCoordinates(nsRect.top, nsRect.left);
view->adjustBackUpscaledCoordinates(nsRect.bottom, nsRect.right);
g_sci->_gfxCompare->setNSRect(itemEntry->object, nsRect);
- } else if (getSciVersion() >= SCI_VERSION_2_1 && _resMan->detectHires()) {
+ } else if (getSciVersion() >= SCI_VERSION_2_1_EARLY && _resMan->detectHires()) {
_coordAdjuster->fromDisplayToScript(nsRect.top, nsRect.left);
_coordAdjuster->fromDisplayToScript(nsRect.bottom, nsRect.right);
g_sci->_gfxCompare->setNSRect(itemEntry->object, nsRect);
diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp
index 89c9be59f0..b0f2c52791 100644
--- a/engines/sci/graphics/text16.cpp
+++ b/engines/sci/graphics/text16.cpp
@@ -83,8 +83,7 @@ void GfxText16::ClearChar(int16 chr) {
}
// This internal function gets called as soon as a '|' is found in a text. It
-// will process the encountered code and set new font/set color. We only support
-// one-digit codes currently, don't know if multi-digit codes are possible.
+// will process the encountered code and set new font/set color.
// Returns textcode character count.
int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int16 orgPenColor, bool doingDrawing) {
const char *textCode = text;
@@ -99,10 +98,8 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1
// c -> sets textColor to current port pen color
// cX -> sets textColor to _textColors[X-1]
curCode = textCode[0];
- curCodeParm = textCode[1];
- if (Common::isDigit(curCodeParm)) {
- curCodeParm -= '0';
- } else {
+ curCodeParm = strtol(textCode+1, NULL, 10);
+ if (!Common::isDigit(textCode[1])) {
curCodeParm = -1;
}
switch (curCode) {
diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp
index da61ecf4c3..2ee18b5c9a 100644
--- a/engines/sci/graphics/view.cpp
+++ b/engines/sci/graphics/view.cpp
@@ -356,7 +356,7 @@ void GfxView::initData(GuiResourceId resourceId) {
for (loopNo = 0; loopNo < _loopCount; loopNo++)
for (celNo = 0; celNo < _loop[loopNo].celCount; celNo++)
_screen->adjustBackUpscaledCoordinates(_loop[loopNo].cel[celNo].scriptWidth, _loop[loopNo].cel[celNo].scriptHeight, _sci2ScaleRes);
- } else if (getSciVersion() == SCI_VERSION_2_1) {
+ } else if ((getSciVersion() >= SCI_VERSION_2_1_EARLY) && (getSciVersion() <= SCI_VERSION_2_1_LATE)) {
for (loopNo = 0; loopNo < _loopCount; loopNo++)
for (celNo = 0; celNo < _loop[loopNo].celCount; celNo++)
_coordAdjuster->fromDisplayToScript(_loop[loopNo].cel[celNo].scriptHeight, _loop[loopNo].cel[celNo].scriptWidth);
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index 10740a8b7b..54ef4b3363 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -82,8 +82,12 @@ const char *getSciVersionDesc(SciVersion version) {
return "SCI1.1";
case SCI_VERSION_2:
return "SCI2";
- case SCI_VERSION_2_1:
- return "SCI2.1";
+ case SCI_VERSION_2_1_EARLY:
+ return "Early SCI2.1";
+ case SCI_VERSION_2_1_MIDDLE:
+ return "Middle SCI2.1";
+ case SCI_VERSION_2_1_LATE:
+ return "Late SCI2.1";
case SCI_VERSION_3:
return "SCI3";
default:
@@ -2121,6 +2125,79 @@ ViewType ResourceManager::detectViewType() {
return kViewUnknown;
}
+// to detect selector "wordFail" in LE vocab resource
+static const byte detectSci21EarlySignature[] = {
+ 10, // size of signature
+ 0x08, 0x00, 'w', 'o', 'r', 'd', 'F', 'a', 'i', 'l'
+};
+
+// to detect selector "wordFail" in BE vocab resource (SCI2.1 Early)
+static const byte detectSci21EarlyBESignature[] = {
+ 10, // size of signature
+ 0x00, 0x08, 'w', 'o', 'r', 'd', 'F', 'a', 'i', 'l'
+};
+
+// to detect new kString calling to detect SCI2.1 Late
+static const byte detectSci21NewStringSignature[] = {
+ 8, // size of signature
+ 0x78, // push1
+ 0x78, // push1
+ 0x39, 0x09, // pushi 09
+ 0x59, 0x01, // rest 01
+ 0x43, 0x5c, // callk String
+};
+
+bool ResourceManager::checkResourceDataForSignature(Resource *resource, const byte *signature) {
+ byte signatureSize = *signature;
+ const byte *resourceData = resource->data;
+
+ signature++; // skip over size byte
+ if (signatureSize < 4)
+ error("resource signature is too small, internal error");
+ if (signatureSize > resource->size)
+ return false;
+
+ const uint32 signatureDWord = *((const uint32 *)signature);
+ signature += 4; signatureSize -= 4;
+
+ const uint32 searchLimit = resource->size - signatureSize + 1;
+ uint32 DWordOffset = 0;
+ while (DWordOffset < searchLimit) {
+ if (signatureDWord == READ_UINT32(resourceData + DWordOffset)) {
+ // magic DWORD found, check if the rest matches as well
+ uint32 offset = DWordOffset + 4;
+ uint32 signaturePos = 0;
+ while (signaturePos < signatureSize) {
+ if (resourceData[offset] != signature[signaturePos])
+ break;
+ offset++;
+ signaturePos++;
+ }
+ if (signaturePos >= signatureSize)
+ return true; // signature found
+ }
+ DWordOffset++;
+ }
+ return false;
+}
+
+bool ResourceManager::checkResourceForSignatures(ResourceType resourceType, uint16 resourceNr, const byte *signature1, const byte *signature2) {
+ Resource *resource = findResource(ResourceId(resourceType, resourceNr), false);
+
+ if (resource) {
+ // resource found and loaded, check for signatures
+ if (signature1) {
+ if (checkResourceDataForSignature(resource, signature1))
+ return true;
+ }
+ if (signature2) {
+ if (checkResourceDataForSignature(resource, signature2))
+ return true;
+ }
+ }
+ return false;
+}
+
void ResourceManager::detectSciVersion() {
// We use the view compression to set a preliminary s_sciVersion for the sake of getResourceInfo
// Pretend we have a SCI0 game
@@ -2180,31 +2257,52 @@ void ResourceManager::detectSciVersion() {
// no Mac SCI2 games. Yes, that means that GK1 Mac is SCI2.1 and not SCI2.
// TODO: Decide between SCI2.1 and SCI3
- if (res)
- s_sciVersion = SCI_VERSION_2_1;
- else
+ if (res) {
+ s_sciVersion = SCI_VERSION_2_1_EARLY; // we check for SCI2.1 specifics a bit later
+ } else {
s_sciVersion = SCI_VERSION_1_1;
- return;
+ return;
+ }
}
// Handle SCI32 versions here
- if (_volVersion >= kResVersionSci2) {
- Common::List<ResourceId> heaps = listResources(kResourceTypeHeap);
- bool hasHeapResources = !heaps.empty();
-
- // SCI2.1/3 and SCI1 Late resource maps are the same, except that
- // SCI1 Late resource maps have the resource types or'd with
- // 0x80. We differentiate between SCI2 and SCI2.1/3 based on that.
- if (_mapVersion == kResVersionSci1Late) {
- s_sciVersion = SCI_VERSION_2;
- return;
- } else if (hasHeapResources) {
- s_sciVersion = SCI_VERSION_2_1;
+ if (s_sciVersion != SCI_VERSION_2_1_EARLY) {
+ if (_volVersion >= kResVersionSci2) {
+ Common::List<ResourceId> heaps = listResources(kResourceTypeHeap);
+ bool hasHeapResources = !heaps.empty();
+
+ // SCI2.1/3 and SCI1 Late resource maps are the same, except that
+ // SCI1 Late resource maps have the resource types or'd with
+ // 0x80. We differentiate between SCI2 and SCI2.1/3 based on that.
+ if (_mapVersion == kResVersionSci1Late) {
+ s_sciVersion = SCI_VERSION_2;
+ return;
+ } else if (hasHeapResources) {
+ s_sciVersion = SCI_VERSION_2_1_EARLY; // exact SCI2.1 version is checked a bit later
+ } else {
+ s_sciVersion = SCI_VERSION_3;
+ return;
+ }
+ }
+ }
+
+ if (s_sciVersion == SCI_VERSION_2_1_EARLY) {
+ // we only know that it's SCI2.1, not which exact version it is
+
+ // check, if selector "wordFail" inside vocab 997 exists, if it does it's SCI2.1 Early
+ if ((checkResourceForSignatures(kResourceTypeVocab, 997, detectSci21EarlySignature, detectSci21EarlyBESignature))) {
+ // found -> it is SCI2.1 early
return;
- } else {
- s_sciVersion = SCI_VERSION_3;
+ }
+
+ s_sciVersion = SCI_VERSION_2_1_MIDDLE;
+ if (checkResourceForSignatures(kResourceTypeScript, 64918, detectSci21NewStringSignature, nullptr)) {
+ // new kString call detected, it's SCI2.1 late
+ // TODO: this call seems to be different on Mac
+ s_sciVersion = SCI_VERSION_2_1_LATE;
return;
}
+ return;
}
// Check for transitive SCI1/SCI1.1 games, like PQ1 here
@@ -2537,7 +2635,7 @@ reg_t ResourceManager::findGameObject(bool addSci11ScriptOffset) {
int16 offset = !isSci11Mac() ? READ_LE_UINT16(offsetPtr) : READ_BE_UINT16(offsetPtr);
return make_reg(1, offset);
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
offsetPtr = script->data + 4 + 2 + 2;
// In SCI1.1 - SCI2.1, the heap is appended at the end of the script,
@@ -2565,7 +2663,7 @@ Common::String ResourceManager::findSierraGameId() {
if (getSciVersion() < SCI_VERSION_1_1) {
heap = findResource(ResourceId(kResourceTypeScript, 0), false);
- } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) {
+ } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1_LATE) {
heap = findResource(ResourceId(kResourceTypeHeap, 0), false);
nameSelector += 5;
} else if (getSciVersion() == SCI_VERSION_3) {
diff --git a/engines/sci/resource.h b/engines/sci/resource.h
index ef48998b04..eb5b508254 100644
--- a/engines/sci/resource.h
+++ b/engines/sci/resource.h
@@ -559,6 +559,8 @@ protected:
ViewType detectViewType();
bool hasSci0Voc999();
bool hasSci1Voc900();
+ bool checkResourceDataForSignature(Resource *resource, const byte *signature);
+ bool checkResourceForSignatures(ResourceType resourceType, uint16 resourceNr, const byte *signature1, const byte *signature2);
void detectSciVersion();
};
diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp
index 3a43774492..6869e6379e 100644
--- a/engines/sci/resource_audio.cpp
+++ b/engines/sci/resource_audio.cpp
@@ -637,7 +637,7 @@ SoundResource::SoundResource(uint32 resourceNr, ResourceManager *resMan, SciVers
case SCI_VERSION_1_EARLY:
case SCI_VERSION_1_LATE:
- case SCI_VERSION_2_1:
+ case SCI_VERSION_2_1_EARLY:
data = resource->data;
// Count # of tracks
_trackCount = 0;
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 668ad053cc..f1ab65ef98 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -194,12 +194,6 @@ SciEngine::~SciEngine() {
extern void showScummVMDialog(const Common::String &message);
Common::Error SciEngine::run() {
- // Assign default values to the config manager, in case settings are missing
- ConfMan.registerDefault("originalsaveload", "false");
- ConfMan.registerDefault("native_fb01", "false");
- ConfMan.registerDefault("windows_cursors", "false"); // Windows cursors for KQ6 Windows
- ConfMan.registerDefault("silver_cursors", "false"); // Silver cursors for SQ4 CD
-
_resMan = new ResourceManager();
assert(_resMan);
_resMan->addAppropriateSources();
@@ -892,29 +886,79 @@ bool SciEngine::speechAndSubtitlesEnabled() {
}
void SciEngine::syncIngameAudioOptions() {
- // Sync the in-game speech/subtitles settings for SCI1.1 CD games
- if (isCD() && getSciVersion() == SCI_VERSION_1_1) {
- bool subtitlesOn = ConfMan.getBool("subtitles");
- bool speechOn = !ConfMan.getBool("speech_mute");
+ bool useGlobal90 = false;
- if (subtitlesOn && !speechOn) {
- _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 1); // subtitles
- } else if (!subtitlesOn && speechOn) {
- _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2); // speech
- } else if (subtitlesOn && speechOn) {
- // Is it a game that supports simultaneous speech and subtitles?
+ // Sync the in-game speech/subtitles settings for SCI1.1 CD games
+ if (isCD()) {
+ switch (getSciVersion()) {
+ case SCI_VERSION_1_1:
+ // All SCI1.1 CD games use global 90
+ useGlobal90 = true;
+ break;
+#ifdef ENABLE_SCI32
+ case SCI_VERSION_2:
+ case SCI_VERSION_2_1_EARLY:
+ case SCI_VERSION_2_1_MIDDLE:
+ case SCI_VERSION_2_1_LATE:
+ // Only use global 90 for some specific games, not all SCI32 games used this method
switch (_gameId) {
- case GID_SQ4:
- case GID_FREDDYPHARKAS:
- case GID_ECOQUEST:
- case GID_LSL6:
- case GID_LAURABOW2:
- case GID_KQ6:
- _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 3); // speech + subtitles
+ case GID_KQ7: // SCI2.1
+ case GID_GK1: // SCI2
+ case GID_GK2: // SCI2.1
+ case GID_SQ6: // SCI2.1
+ case GID_TORIN: // SCI2.1
+ case GID_QFG4: // SCI2.1
+ useGlobal90 = true;
break;
+ case GID_LSL6: // SCI2.1
+ // TODO: Uses gameFlags array
+ break;
+ // TODO: Unknown at the moment:
+ // Shivers - seems not to use global 90
+ // Police Quest: SWAT - unable to check
+ // Police Quest 4 - unable to check
+ // Mixed Up Mother Goose - unable to check
+ // Phantasmagoria - seems to use global 90, unable to check for subtitles atm
default:
- // Game does not support speech and subtitles, set it to speech
+ return;
+ }
+ break;
+#endif // ENABLE_SCI32
+ default:
+ return;
+ }
+
+ bool subtitlesOn = ConfMan.getBool("subtitles");
+ bool speechOn = !ConfMan.getBool("speech_mute");
+
+ if (useGlobal90) {
+ if (subtitlesOn && !speechOn) {
+ _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 1); // subtitles
+ } else if (!subtitlesOn && speechOn) {
_gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2); // speech
+ } else if (subtitlesOn && speechOn) {
+ // Is it a game that supports simultaneous speech and subtitles?
+ switch (_gameId) {
+ case GID_SQ4:
+ case GID_FREDDYPHARKAS:
+ case GID_ECOQUEST:
+ case GID_LSL6:
+ case GID_LAURABOW2:
+ case GID_KQ6:
+#ifdef ENABLE_SCI32
+ // Unsure about Gabriel Knight 2
+ case GID_KQ7: // SCI2.1
+ case GID_GK1: // SCI2
+ case GID_SQ6: // SCI2.1, SQ6 seems to always use subtitles anyway
+ case GID_TORIN: // SCI2.1
+ case GID_QFG4: // SCI2.1
+#endif // ENABLE_SCI32
+ _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 3); // speech + subtitles
+ break;
+ default:
+ // Game does not support speech and subtitles, set it to speech
+ _gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2); // speech
+ }
}
}
}
diff --git a/engines/sci/sci.h b/engines/sci/sci.h
index c6813aa07c..15034d5e94 100644
--- a/engines/sci/sci.h
+++ b/engines/sci/sci.h
@@ -200,7 +200,9 @@ enum SciVersion {
SCI_VERSION_1_LATE, // Dr. Brain 1, EcoQuest 1, Longbow, PQ3, SQ1, LSL5, KQ5 CD
SCI_VERSION_1_1, // Dr. Brain 2, EcoQuest 1 CD, EcoQuest 2, KQ6, QFG3, SQ4CD, XMAS 1992 and many more
SCI_VERSION_2, // GK1, PQ4 floppy, QFG4 floppy
- SCI_VERSION_2_1, // GK2, KQ7, LSL6 hires, MUMG Deluxe, Phantasmagoria 1, PQ4CD, PQ:SWAT, QFG4CD, Shivers 1, SQ6, Torin
+ SCI_VERSION_2_1_EARLY, // GK2 demo, KQ7, LSL6 hires, PQ4, QFG4 floppy
+ SCI_VERSION_2_1_MIDDLE, // GK2, KQ7, MUMG Deluxe, Phantasmagoria 1, PQ4CD, PQ:SWAT, QFG4CD, Shivers 1, SQ6, Torin
+ SCI_VERSION_2_1_LATE, // demos of LSL7, Lighthouse, RAMA
SCI_VERSION_3 // LSL7, Lighthouse, RAMA, Phantasmagoria 2
};
diff --git a/engines/sci/sound/audio.cpp b/engines/sci/sound/audio.cpp
index fb9a3f17b9..57f0415285 100644
--- a/engines/sci/sound/audio.cpp
+++ b/engines/sci/sound/audio.cpp
@@ -79,15 +79,23 @@ void AudioPlayer::handleFanmadeSciAudio(reg_t sciAudioObject, SegManager *segMan
Common::String command = segMan->getString(commandReg);
if (command == "play" || command == "playx") {
-#ifdef USE_MAD
reg_t fileNameReg = readSelector(segMan, sciAudioObject, kernel->findSelector("fileName"));
Common::String fileName = segMan->getString(fileNameReg);
- int16 loopCount = (int16)readSelectorValue(segMan, sciAudioObject, kernel->findSelector("loopCount"));
- // When loopCount is -1, we treat it as infinite looping, else no looping is done.
- // This is observed by game scripts, which can set loopCount to all sorts of random values.
+ reg_t loopCountReg = readSelector(segMan, sciAudioObject, kernel->findSelector("loopCount"));
+ Common::String loopCountStr = segMan->getString(loopCountReg);
+ int16 loopCount = atoi(loopCountStr.c_str());
+
// Adjust loopCount for ScummVM's LoopingAudioStream semantics
- loopCount = (loopCount == -1) ? 0 : 1;
+ if (loopCount == -1) {
+ loopCount = 0; // loop endlessly
+ } else if (loopCount >= 0) {
+ // sciAudio loopCount == 0 -> play 1 time -> ScummVM's loopCount should be 1
+ // sciAudio loopCount == 1 -> play 2 times -> ScummVM's loopCount should be 2
+ loopCount++;
+ } else {
+ loopCount = 1; // play once in case the value makes no sense
+ }
// Determine sound type
Audio::Mixer::SoundType soundType = Audio::Mixer::kSFXSoundType;
@@ -96,20 +104,51 @@ void AudioPlayer::handleFanmadeSciAudio(reg_t sciAudioObject, SegManager *segMan
else if (fileName.hasPrefix("speech"))
soundType = Audio::Mixer::kSpeechSoundType;
- Common::File *sciAudio = new Common::File();
+ // Determine compression
+ uint32 audioCompressionType = 0;
+ if ((fileName.hasSuffix(".mp3")) || (fileName.hasSuffix(".sciAudio")) || (fileName.hasSuffix(".sciaudio"))) {
+ audioCompressionType = MKTAG('M','P','3',' ');
+ } else if (fileName.hasSuffix(".wav")) {
+ audioCompressionType = MKTAG('W','A','V',' ');
+ } else if (fileName.hasSuffix(".aiff")) {
+ audioCompressionType = MKTAG('A','I','F','F');
+ } else {
+ error("sciAudio: unsupported file type");
+ }
+
+ Common::File *sciAudioFile = new Common::File();
// Replace backwards slashes
for (uint i = 0; i < fileName.size(); i++) {
if (fileName[i] == '\\')
fileName.setChar('/', i);
}
- sciAudio->open("sciAudio/" + fileName);
+ sciAudioFile->open("sciAudio/" + fileName);
+
+ Audio::RewindableAudioStream *audioStream = nullptr;
+
+ switch (audioCompressionType) {
+ case MKTAG('M','P','3',' '):
+#ifdef USE_MAD
+ audioStream = Audio::makeMP3Stream(sciAudioFile, DisposeAfterUse::YES);
+#endif
+ break;
+ case MKTAG('W','A','V',' '):
+ audioStream = Audio::makeWAVStream(sciAudioFile, DisposeAfterUse::YES);
+ break;
+ case MKTAG('A','I','F','F'):
+ audioStream = Audio::makeAIFFStream(sciAudioFile, DisposeAfterUse::YES);
+ break;
+ default:
+ break;
+ }
- Audio::SeekableAudioStream *audioStream = Audio::makeMP3Stream(sciAudio, DisposeAfterUse::YES);
+ if (!audioStream) {
+ error("sciAudio: requested compression not compiled into ScummVM");
+ }
// We only support one audio handle
_mixer->playStream(soundType, &_audioHandle,
Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audioStream, loopCount));
-#endif
} else if (command == "stop") {
_mixer->stopHandle(_audioHandle);
} else {
@@ -217,7 +256,7 @@ 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)
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY)
s -= tableDPCM8[b & 7];
else
#endif
diff --git a/engines/sci/sound/drivers/midi.cpp b/engines/sci/sound/drivers/midi.cpp
index baf85de74c..aa464cdc19 100644
--- a/engines/sci/sound/drivers/midi.cpp
+++ b/engines/sci/sound/drivers/midi.cpp
@@ -1019,7 +1019,7 @@ int MidiPlayer_Midi::open(ResourceManager *resMan) {
if (!isMt32GmPatch(res->data, res->size)) {
mapMt32ToGm(res->data, res->size);
} else {
- if (getSciVersion() <= SCI_VERSION_2_1) {
+ if (getSciVersion() < SCI_VERSION_3) {
error("MT-32 patch has wrong type");
} else {
// Happens in the SCI3 interactive demo of Lighthouse
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 9f0d8d150f..21f95f17e0 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -717,7 +717,7 @@ bool MidiParser_SCI::processEvent(const EventInfo &info, bool fireEvents) {
break;
case SCI_VERSION_1_EARLY:
case SCI_VERSION_1_LATE:
- case SCI_VERSION_2_1:
+ case SCI_VERSION_2_1_EARLY:
inc = 1;
break;
default:
@@ -862,7 +862,7 @@ void MidiParser_SCI::setMasterVolume(byte masterVolume) {
case SCI_VERSION_1_EARLY:
case SCI_VERSION_1_LATE:
- case SCI_VERSION_2_1:
+ case SCI_VERSION_2_1_EARLY:
// directly set master volume (global volume is merged with channel volumes)
((MidiPlayer *)_driver)->setVolume(masterVolume);
break;
@@ -887,7 +887,7 @@ void MidiParser_SCI::setVolume(byte volume) {
case SCI_VERSION_1_EARLY:
case SCI_VERSION_1_LATE:
- case SCI_VERSION_2_1:
+ case SCI_VERSION_2_1_EARLY:
// Send previous channel volumes again to actually update the volume
for (int i = 0; i < 15; i++)
if (_channelRemap[i] != -1)
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index dca73c3f51..31cf27f7e0 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -73,7 +73,7 @@ void SciMusic::init() {
// Default to MIDI in SCI2.1+ games, as many don't have AdLib support.
// Also, default to MIDI for Windows versions of SCI1.1 games, as their
// soundtrack is written for GM.
- if (getSciVersion() >= SCI_VERSION_2_1 || g_sci->_features->useAltWinGMSound())
+ if (getSciVersion() >= SCI_VERSION_2_1_EARLY || g_sci->_features->useAltWinGMSound())
deviceFlags |= MDT_PREFER_GM;
// Currently our CMS implementation only supports SCI1(.1)
diff --git a/engines/sci/util.cpp b/engines/sci/util.cpp
index 3a9ed9ca69..c72d3beb19 100644
--- a/engines/sci/util.cpp
+++ b/engines/sci/util.cpp
@@ -49,7 +49,7 @@ uint16 READ_SCI11ENDIAN_UINT16(const void *ptr) {
}
uint16 READ_SCI32ENDIAN_UINT16(const void *ptr) {
- if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1)
+ if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY)
return READ_BE_UINT16(ptr);
else
return READ_LE_UINT16(ptr);
diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp
index d3b69e7f21..c91f51bade 100644
--- a/engines/toltecs/toltecs.cpp
+++ b/engines/toltecs/toltecs.cpp
@@ -62,9 +62,6 @@ struct GameSettings {
};
ToltecsEngine::ToltecsEngine(OSystem *syst, const ToltecsGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
- // Assign default values to the config manager, in case settings are missing
- ConfMan.registerDefault("originalsaveload", "false");
-
_rnd = new Common::RandomSource("toltecs");
}
diff --git a/engines/tony/loc.cpp b/engines/tony/loc.cpp
index 09a00deed1..be2b20294f 100644
--- a/engines/tony/loc.cpp
+++ b/engines/tony/loc.cpp
@@ -506,15 +506,13 @@ void RMItem::readFromStream(Common::SeekableReadStream &ds, bool bLOX) {
if (!ds.err()) {
for (int i = 0; i < _nSprites && !ds.err(); i++) {
// Download the sprites
- if (bLOX) {
+ if (bLOX)
_sprites[i].LOXGetSizeFromStream(ds, &dimx, &dimy);
- _sprites[i].init(newItemSpriteBuffer(dimx, dimy, true));
- _sprites[i].readFromStream(ds, true);
- } else {
+ else
_sprites[i].getSizeFromStream(ds, &dimx, &dimy);
- _sprites[i].init(newItemSpriteBuffer(dimx, dimy, false));
- _sprites[i].readFromStream(ds, false);
- }
+
+ _sprites[i].init(newItemSpriteBuffer(dimx, dimy, bLOX));
+ _sprites[i].readFromStream(ds, bLOX);
if (_cm == CM_256 && _bPal)
_sprites[i].setPalette(_pal._data);
@@ -523,21 +521,14 @@ void RMItem::readFromStream(Common::SeekableReadStream &ds, bool bLOX) {
if (!ds.err()) {
for (int i = 0; i < _nSfx && !ds.err(); i++) {
- if (bLOX)
- _sfx[i].readFromStream(ds, true);
- else
- _sfx[i].readFromStream(ds, false);
+ _sfx[i].readFromStream(ds, bLOX);
}
}
// Read the pattern from pattern 1
if (!ds.err()) {
- for (int i = 1; i <= _nPatterns && !ds.err(); i++) {
- if (bLOX)
- _patterns[i].readFromStream(ds, true);
- else
- _patterns[i].readFromStream(ds, false);
- }
+ for (int i = 1; i <= _nPatterns && !ds.err(); i++)
+ _patterns[i].readFromStream(ds, bLOX);
}
// Initialize the current pattern
@@ -610,7 +601,7 @@ void RMItem::draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
// Offset direction for scrolling
prim->getDst().offset(-_curScroll);
- // We must offset the cordinates of the item inside the primitive
+ // We must offset the coordinates of the item inside the primitive
// It is estimated as nonno + (babbo + figlio)
prim->getDst().offset(calculatePos());
diff --git a/engines/tony/loc.h b/engines/tony/loc.h
index ac65a4a0bd..d065d60445 100644
--- a/engines/tony/loc.h
+++ b/engines/tony/loc.h
@@ -151,7 +151,7 @@ public:
// Reads the position of the pattern
RMPoint pos();
- void readFromStream(Common::ReadStream &ds, bool bLOX = false);
+ void readFromStream(Common::ReadStream &ds, bool bLOX);
private:
void updateCoord();
diff --git a/engines/tony/sound.cpp b/engines/tony/sound.cpp
index 2a4eb826f3..aa86750ad5 100644
--- a/engines/tony/sound.cpp
+++ b/engines/tony/sound.cpp
@@ -28,7 +28,9 @@
#include "audio/audiostream.h"
#include "audio/decoders/adpcm.h"
-#include "audio/decoders/raw.h"
+#include "audio/decoders/flac.h"
+#include "audio/decoders/mp3.h"
+#include "audio/decoders/vorbis.h"
#include "audio/decoders/wave.h"
#include "common/textconsole.h"
#include "tony/game.h"
@@ -49,6 +51,18 @@ static int remapVolume(int volume) {
return (int)((double)Audio::Mixer::kMaxChannelVolume * pow(10.0, dsvol / 2000.0) + 0.5);
}
+// Another obvious rip from gob engine. Hi DrMcCoy!
+Common::String setExtension(const Common::String &str, const Common::String &ext) {
+ if (str.empty())
+ return str;
+
+ const char *dot = strrchr(str.c_str(), '.');
+ if (dot)
+ return Common::String(str.c_str(), dot - str.c_str()) + ext;
+
+ return str + ext;
+}
+
/****************************************************************************\
* FPSOUND Methods
\****************************************************************************/
@@ -204,12 +218,45 @@ bool FPSfx::loadVoiceFromVDB(Common::File &vdbFP) {
if (!_soundSupported)
return true;
- uint32 size = vdbFP.readUint32LE();
- uint32 rate = vdbFP.readUint32LE();
- _isVoice = true;
-
- _rewindableStream = Audio::makeADPCMStream(vdbFP.readStream(size), DisposeAfterUse::YES, 0, Audio::kADPCMDVI, rate, 1);
+ switch (g_vm->_vdbCodec) {
+ case FPCODEC_ADPCM: {
+ uint32 size = vdbFP.readUint32LE();
+ uint32 rate = vdbFP.readUint32LE();
+ _rewindableStream = Audio::makeADPCMStream(vdbFP.readStream(size), DisposeAfterUse::YES, 0, Audio::kADPCMDVI, rate, 1);
+ }
+ break;
+ case FPCODEC_MP3 : {
+#ifdef USE_MAD
+ uint32 size = vdbFP.readUint32LE();
+ _rewindableStream = Audio::makeMP3Stream(vdbFP.readStream(size), DisposeAfterUse::YES);
+#else
+ return false;
+#endif
+ }
+ break;
+ case FPCODEC_OGG : {
+#ifdef USE_VORBIS
+ uint32 size = vdbFP.readUint32LE();
+ _rewindableStream = Audio::makeVorbisStream(vdbFP.readStream(size), DisposeAfterUse::YES);
+#else
+ return false;
+#endif
+ }
+ break;
+ case FPCODEC_FLAC : {
+#ifdef USE_FLAC
+ uint32 size = vdbFP.readUint32LE();
+ _rewindableStream = Audio::makeFLACStream(vdbFP.readStream(size), DisposeAfterUse::YES);
+#else
+ return false;
+#endif
+ }
+ break;
+ default:
+ return false;
+ }
+ _isVoice = true;
_fileLoaded = true;
setVolume(62);
return true;
@@ -219,39 +266,64 @@ bool FPSfx::loadVoiceFromVDB(Common::File &vdbFP) {
* Opens a file and loads a sound effect.
*
* @param fileName Sfx filename
- * @param codec CODEC used to uncompress the samples
*
* @returns True is everything is OK, False otherwise
*/
-bool FPSfx::loadFile(const char *fileName, uint32 codec) {
+bool FPSfx::loadFile(const char *fileName) {
if (!_soundSupported)
return true;
+ SoundCodecs codec = FPCODEC_UNKNOWN;
+
Common::File file;
- if (!file.open(fileName)) {
+ if (file.open(fileName))
+ codec = FPCODEC_ADPCM;
+ else if (file.open(setExtension(fileName, ".MP3")))
+ codec = FPCODEC_MP3;
+ else if (file.open(setExtension(fileName, ".OGG")))
+ codec = FPCODEC_OGG;
+ else if (file.open(setExtension(fileName, ".FLA")))
+ codec = FPCODEC_FLAC;
+ else {
warning("FPSfx::LoadFile(): Cannot open sfx file!");
return false;
}
- if (file.readUint32BE() != MKTAG('A', 'D', 'P', 0x10)) {
- warning("FPSfx::LoadFile(): Invalid ADP header!");
- return false;
- }
-
- uint32 rate = file.readUint32LE();
- uint32 channels = file.readUint32LE();
+ Common::SeekableReadStream *buffer;
+ switch (codec) {
+ case FPCODEC_ADPCM: {
+ if (file.readUint32BE() != MKTAG('A', 'D', 'P', 0x10)) {
+ warning("FPSfx::LoadFile(): Invalid ADP header!");
+ return false;
+ }
- Common::SeekableReadStream *buffer = file.readStream(file.size() - file.pos());
+ uint32 rate = file.readUint32LE();
+ uint32 channels = file.readUint32LE();
- if (codec == FPCODEC_ADPCM) {
+ buffer = file.readStream(file.size() - file.pos());
_rewindableStream = Audio::makeADPCMStream(buffer, DisposeAfterUse::YES, 0, Audio::kADPCMDVI, rate, channels);
- } else {
- byte flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
-
- if (channels == 2)
- flags |= Audio::FLAG_STEREO;
-
- _rewindableStream = Audio::makeRawStream(buffer, rate, flags, DisposeAfterUse::YES);
+ }
+ break;
+ case FPCODEC_MP3:
+#ifdef USE_MAD
+ buffer = file.readStream(file.size());
+ _rewindableStream = Audio::makeMP3Stream(buffer, DisposeAfterUse::YES);
+#endif
+ break;
+ case FPCODEC_OGG:
+#ifdef USE_VORBIS
+ buffer = file.readStream(file.size());
+ _rewindableStream = Audio::makeVorbisStream(buffer, DisposeAfterUse::YES);
+#endif
+ break;
+ case FPCODEC_FLAC:
+ buffer = file.readStream(file.size());
+#ifdef USE_FLAC
+ _rewindableStream = Audio::makeFLACStream(buffer, DisposeAfterUse::YES);
+#endif
+ break;
+ default:
+ return false;
}
_fileLoaded = true;
@@ -469,50 +541,96 @@ void FPStream::release() {
* Opens a file stream
*
* @param fileName Filename to be opened
- * @param codec CODEC to be used to uncompress samples
+ * @param bufSize Buffer size
*
* @returns True is everything is OK, False otherwise
*/
-bool FPStream::loadFile(const Common::String &fileName, uint32 codec, int bufSize) {
+bool FPStream::loadFile(const Common::String &fileName, int bufSize) {
if (!_soundSupported)
return true;
if (_fileLoaded)
unloadFile();
- // Save the codec type
- _codec = codec;
+ SoundCodecs codec = FPCODEC_UNKNOWN;
// Open the file stream for reading
- if (!_file.open(fileName)) {
- // Fallback: try with an extra '0' prefix
- if (!_file.open("0" + fileName))
- return false;
+ if (_file.open(fileName))
+ codec = FPCODEC_ADPCM;
+ else if (_file.open(setExtension(fileName, ".MP3")))
+ codec = FPCODEC_MP3;
+ else if (_file.open(setExtension(fileName, ".OGG")))
+ codec = FPCODEC_OGG;
+ else if (_file.open(setExtension(fileName, ".FLA")))
+ codec = FPCODEC_FLAC;
+ // Fallback: try with an extra '0' prefix
+ else if (_file.open("0" + fileName)) {
+ codec = FPCODEC_ADPCM;
warning("FPStream::loadFile(): Fallback from %s to %s", fileName.c_str(), _file.getName());
- }
+ } else if (_file.open(setExtension("0" + fileName, ".MP3"))) {
+ codec = FPCODEC_MP3;
+ warning("FPStream::loadFile(): Fallback from %s to %s", fileName.c_str(), _file.getName());
+ } else if (_file.open(setExtension("0" + fileName, ".OGG"))) {
+ codec = FPCODEC_OGG;
+ warning("FPStream::loadFile(): Fallback from %s to %s", fileName.c_str(), _file.getName());
+ } else if (_file.open(setExtension("0" + fileName, ".FLA"))) {
+ codec = FPCODEC_FLAC;
+ warning("FPStream::loadFile(): Fallback from %s to %s", fileName.c_str(), _file.getName());
+ } else
+ return false;
// Save the size of the stream
_size = _file.size();
- switch (_codec) {
- case FPCODEC_RAW:
- _rewindableStream = Audio::makeRawStream(&_file, 44100, Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN | Audio::FLAG_STEREO, DisposeAfterUse::NO);
- break;
-
- case FPCODEC_ADPCM:
#ifdef __amigaos4__
- // HACK: AmigaOS 4 has weird performance problems with reading in the audio thread,
- // so we read the whole stream into memory.
+ // HACK: AmigaOS 4 has weird performance problems with reading in the audio thread,
+ // so we read the whole stream into memory.
+ switch (codec) {
+ case FPCODEC_ADPCM:
_rewindableStream = Audio::makeADPCMStream(_file.readStream(_size), DisposeAfterUse::YES, 0, Audio::kADPCMDVI, 44100, 2);
+ break;
+ case FPCODEC_MP3:
+#ifdef USE_MAD
+ _rewindableStream = Audio::makeMP3Stream(&_file, DisposeAfterUse::YES);
+#endif
+ break;
+ case FPCODEC_OGG:
+#ifdef USE_VORBIS
+ _rewindableStream = Audio::makeVorbisStream(&_file, DisposeAfterUse::YES);
+#endif
+ break;
+ case FPCODEC_FLAC:
+#ifdef USE_FLAC
+ _rewindableStream = Audio::makeFLACStream(&_file, DisposeAfterUse::YES);
+#endif
+ break;
+ default:
+ break;
+ }
#else
+ switch (codec) {
+ case FPCODEC_ADPCM:
_rewindableStream = Audio::makeADPCMStream(&_file, DisposeAfterUse::NO, 0, Audio::kADPCMDVI, 44100, 2);
+ break;
+ case FPCODEC_MP3:
+#ifdef USE_MAD
+ _rewindableStream = Audio::makeMP3Stream(&_file, DisposeAfterUse::NO);
+#endif
+ break;
+ case FPCODEC_OGG:
+#ifdef USE_VORBIS
+ _rewindableStream = Audio::makeVorbisStream(&_file, DisposeAfterUse::NO);
+#endif
+ break;
+ case FPCODEC_FLAC:
+#ifdef USE_FLAC
+ _rewindableStream = Audio::makeFLACStream(&_file, DisposeAfterUse::NO);
#endif
break;
-
default:
- _file.close();
- return false;
+ break;
}
+#endif
// All done
_fileLoaded = true;
diff --git a/engines/tony/sound.h b/engines/tony/sound.h
index 446dc68d80..206935f314 100644
--- a/engines/tony/sound.h
+++ b/engines/tony/sound.h
@@ -45,8 +45,11 @@ class FPStream;
class FPSfx;
enum SoundCodecs {
- FPCODEC_RAW,
- FPCODEC_ADPCM
+ FPCODEC_UNKNOWN,
+ FPCODEC_ADPCM,
+ FPCODEC_MP3,
+ FPCODEC_OGG,
+ FPCODEC_FLAC
};
/**
@@ -179,7 +182,7 @@ public:
* @returns True is everything is OK, False otherwise
*/
- bool loadFile(const char *fileName, uint32 codec = FPCODEC_RAW);
+ bool loadFile(const char *fileName);
bool loadWave(Common::SeekableReadStream *stream);
bool loadVoiceFromVDB(Common::File &vdbFP);
@@ -246,7 +249,6 @@ class FPStream {
private:
uint32 _bufferSize; // Buffer size (bytes)
uint32 _size; // Stream size (bytes)
- uint32 _codec; // CODEC used
Common::File _file; // File handle used for the stream
@@ -297,12 +299,11 @@ public:
* Opens a file stream
*
* @param fileName Filename to be opened
- * @param codec CODEC to be used to uncompress samples
*
* @returns True is everything is OK, False otherwise
*/
- bool loadFile(const Common::String &fileName, uint32 codec = FPCODEC_RAW, int sync = 2000);
+ bool loadFile(const Common::String &fileName, int sync);
/**
* Closes a file stream (opened or not).
diff --git a/engines/tony/tony.cpp b/engines/tony/tony.cpp
index 2857bb93f8..d8fa45cb5d 100644
--- a/engines/tony/tony.cpp
+++ b/engines/tony/tony.cpp
@@ -82,6 +82,7 @@ TonyEngine::TonyEngine(OSystem *syst, const TonyGameDescription *gameDesc) : Eng
_bQuitNow = false;
_bTimeFreezed = false;
_nTimeFreezed = 0;
+ _vdbCodec = FPCODEC_UNKNOWN;
}
TonyEngine::~TonyEngine() {
@@ -323,10 +324,10 @@ void TonyEngine::playMusic(int nChannel, const Common::String &fname, int nFX, b
_stream[GLOBALS._nextChannel]->unloadFile();
if (!getIsDemo()) {
- if (!_stream[GLOBALS._nextChannel]->loadFile(fname, FPCODEC_ADPCM, nSync))
+ if (!_stream[GLOBALS._nextChannel]->loadFile(fname, nSync))
error("failed to open music file '%s'", fname.c_str());
} else {
- _stream[GLOBALS._nextChannel]->loadFile(fname, FPCODEC_ADPCM, nSync);
+ _stream[GLOBALS._nextChannel]->loadFile(fname, nSync);
}
_stream[GLOBALS._nextChannel]->setLoop(bLoop);
@@ -335,10 +336,10 @@ void TonyEngine::playMusic(int nChannel, const Common::String &fname, int nFX, b
GLOBALS._flipflop = 1 - GLOBALS._flipflop;
} else {
if (!getIsDemo()) {
- if (!_stream[nChannel]->loadFile(fname, FPCODEC_ADPCM, nSync))
+ if (!_stream[nChannel]->loadFile(fname, nSync))
error("failed to open music file '%s'", fname.c_str());
} else {
- _stream[nChannel]->loadFile(fname, FPCODEC_ADPCM, nSync);
+ _stream[nChannel]->loadFile(fname, nSync);
}
_stream[nChannel]->setLoop(bLoop);
@@ -356,10 +357,10 @@ void TonyEngine::doNextMusic(CORO_PARAM, const void *param) {
CORO_BEGIN_CODE(_ctx);
if (!g_vm->getIsDemo()) {
- if (!streams[GLOBALS._nextChannel]->loadFile(GLOBALS._nextMusic, FPCODEC_ADPCM, GLOBALS._nextSync))
+ if (!streams[GLOBALS._nextChannel]->loadFile(GLOBALS._nextMusic, GLOBALS._nextSync))
error("failed to open next music file '%s'", GLOBALS._nextMusic.c_str());
} else {
- streams[GLOBALS._nextChannel]->loadFile(GLOBALS._nextMusic, FPCODEC_ADPCM, GLOBALS._nextSync);
+ streams[GLOBALS._nextChannel]->loadFile(GLOBALS._nextMusic, GLOBALS._nextSync);
}
streams[GLOBALS._nextChannel]->setLoop(GLOBALS._nextLoop);
@@ -433,7 +434,7 @@ void TonyEngine::preloadSFX(int nChannel, const char *fn) {
_theSound.createSfx(&_sfx[nChannel]);
- _sfx[nChannel]->loadFile(fn, FPCODEC_ADPCM);
+ _sfx[nChannel]->loadFile(fn);
}
FPSfx *TonyEngine::createSFX(Common::SeekableReadStream *stream) {
@@ -453,7 +454,7 @@ void TonyEngine::preloadUtilSFX(int nChannel, const char *fn) {
_theSound.createSfx(&_utilSfx[nChannel]);
- _utilSfx[nChannel]->loadFile(fn, FPCODEC_ADPCM);
+ _utilSfx[nChannel]->loadFile(fn);
_utilSfx[nChannel]->setVolume(63);
}
@@ -573,18 +574,26 @@ void TonyEngine::loadState(CORO_PARAM, int n) {
}
bool TonyEngine::openVoiceDatabase() {
- char id[4];
- uint32 numfiles;
-
// Open the voices database
if (!_vdbFP.open("voices.vdb"))
- return false;
+ if (!_vdbFP.open("voices.mdb"))
+ if (!_vdbFP.open("voices.odb"))
+ if (!_vdbFP.open("voices.fdb"))
+ return false;
_vdbFP.seek(-8, SEEK_END);
- numfiles = _vdbFP.readUint32LE();
- _vdbFP.read(id, 4);
-
- if (id[0] != 'V' || id[1] != 'D' || id[2] != 'B' || id[3] != '1') {
+ uint32 numfiles = _vdbFP.readUint32LE();
+ int32 id = _vdbFP.readUint32BE();
+
+ if (id == MKTAG('V', 'D', 'B', '1'))
+ _vdbCodec = FPCODEC_ADPCM;
+ else if (id == MKTAG('M', 'D', 'B', '1'))
+ _vdbCodec = FPCODEC_MP3;
+ else if (id == MKTAG('O', 'D', 'B', '1'))
+ _vdbCodec = FPCODEC_OGG;
+ else if (id == MKTAG('F', 'D', 'B', '1'))
+ _vdbCodec = FPCODEC_FLAC;
+ else {
_vdbFP.close();
return false;
}
diff --git a/engines/tony/tony.h b/engines/tony/tony.h
index 40a5184c31..40bace8db8 100644
--- a/engines/tony/tony.h
+++ b/engines/tony/tony.h
@@ -104,6 +104,7 @@ public:
RMResUpdate _resUpdate;
uint32 _hEndOfFrame;
Common::File _vdbFP;
+ SoundCodecs _vdbCodec;
Common::Array<VoiceHeader> _voices;
FPSound _theSound;
Common::List<FPSfx *> _activeSfx;
diff --git a/engines/wintermute/base/base_keyboard_state.cpp b/engines/wintermute/base/base_keyboard_state.cpp
index f672c83d39..d26685a256 100644
--- a/engines/wintermute/base/base_keyboard_state.cpp
+++ b/engines/wintermute/base/base_keyboard_state.cpp
@@ -200,6 +200,12 @@ const char *BaseKeyboardState::scToString() {
bool BaseKeyboardState::readKey(Common::Event *event) {
//_currentPrintable = (event->type == SDL_TEXTINPUT); // TODO
_currentCharCode = keyCodeToVKey(event);
+ // convert all lowercase keys to uppercase to make it easier for handling later on for consistency
+ if (Common::isLower(_currentCharCode) && (event->kbd.hasFlags(Common::KBD_SHIFT) || event->kbd.flags & Common::KBD_CAPS)) {
+ if (!(event->kbd.keycode >= Common::KEYCODE_F1 && event->kbd.keycode <= Common::KEYCODE_F12)) {
+ _currentCharCode = toupper(_currentCharCode);
+ }
+ }
// Verify that this is a printable ISO-8859-character (including the upper charset)
if ((_currentCharCode <= 0x7E && _currentCharCode >= 0x20) || (_currentCharCode <= 0xFF && _currentCharCode >= 0xA0)) {
_currentPrintable = true;
@@ -263,7 +269,11 @@ bool BaseKeyboardState::isCurrentPrintable() const {
//////////////////////////////////////////////////////////////////////////
enum VKeyCodes {
+ kVkBack = 8,
+ kVkTab = 9,
+
kVkReturn = 13,
+ kVkPause = 19,
kVkEscape = 27,
@@ -274,6 +284,7 @@ enum VKeyCodes {
kVkUp = 38,
kVkRight = 39,
kVkDown = 40,
+ kVkInsert = 45,
kVkF1 = 112,
kVkF2 = 113,
@@ -297,26 +308,53 @@ uint32 BaseKeyboardState::keyCodeToVKey(Common::Event *event) {
return 0;
}
+ // return ASCII value if key pressed is an alphanumeric key
+ // number keys pressed on numpad are handled in next block
+ if (Common::isAlnum(event->kbd.keycode)) {
+ return event->kbd.ascii;
+ }
+
+ // if NumLock is active, return ASCII for numpad keys
+ // keys pressed on numpad without NumLock are considered as normal keycodes, handled in the next block
+ if (Common::isDigit(event->kbd.ascii) && ((event->kbd.flags & Common::KBD_NUM) != 0)) {
+ return event->kbd.ascii;
+ }
+
switch (event->kbd.keycode) {
+ case Common::KEYCODE_BACKSPACE:
+ return kVkBack;
+ case Common::KEYCODE_TAB:
+ return kVkTab;
case Common::KEYCODE_RETURN:
case Common::KEYCODE_KP_ENTER:
return kVkReturn;
+ case Common::KEYCODE_PAUSE:
+ return kVkPause;
case Common::KEYCODE_ESCAPE:
return kVkEscape;
case Common::KEYCODE_SPACE:
return kVkSpace;
case Common::KEYCODE_END:
+ case Common::KEYCODE_KP1:
return kVkEnd;
case Common::KEYCODE_HOME:
+ case Common::KEYCODE_KP7:
return kVkHome;
case Common::KEYCODE_LEFT:
+ case Common::KEYCODE_KP4:
return kVkLeft;
case Common::KEYCODE_RIGHT:
+ case Common::KEYCODE_KP6:
return kVkRight;
case Common::KEYCODE_UP:
+ case Common::KEYCODE_KP8:
return kVkUp;
case Common::KEYCODE_DOWN:
+ case Common::KEYCODE_KP2:
return kVkDown;
+ case Common::KEYCODE_INSERT:
+ case Common::KEYCODE_KP0:
+ return kVkInsert;
case Common::KEYCODE_F1:
return kVkF1;
case Common::KEYCODE_F2:
@@ -342,8 +380,12 @@ uint32 BaseKeyboardState::keyCodeToVKey(Common::Event *event) {
case Common::KEYCODE_F12:
return kVkF12;
default:
- warning("Key not handled: %d '%c'", event->kbd.keycode, event->kbd.keycode);
- return event->kbd.keycode;
+ // check if any non-sticky keys were used, otherwise key is unknown to us
+ if ((event->kbd.flags & Common::KBD_NON_STICKY) == 0) {
+ warning("Key pressed is not recognized, ASCII returned (%d '%c').", event->kbd.keycode, event->kbd.keycode);
+ }
+ // return ASCII if no match, since it could be used for typing
+ return event->kbd.ascii;
break;
}
diff --git a/engines/wintermute/base/font/base_font_truetype.cpp b/engines/wintermute/base/font/base_font_truetype.cpp
index f27b565a7f..fa6973c58f 100644
--- a/engines/wintermute/base/font/base_font_truetype.cpp
+++ b/engines/wintermute/base/font/base_font_truetype.cpp
@@ -581,7 +581,7 @@ bool BaseFontTT::initFont() {
}
if (file) {
- _deletableFont = Graphics::loadTTFFont(*file, _fontHeight, 96); // Use the same dpi as WME (96 vs 72).
+ _deletableFont = Graphics::loadTTFFont(*file, _fontHeight, Graphics::kTTFSizeModeCharacter, 96); // Use the same dpi as WME (96 vs 72).
_font = _deletableFont;
BaseFileManager::getEngineInstance()->closeFile(file);
file = nullptr;
@@ -607,7 +607,7 @@ bool BaseFontTT::initFont() {
if (themeArchive->hasFile(fallbackFilename)) {
file = nullptr;
file = themeArchive->createReadStreamForMember(fallbackFilename);
- _deletableFont = Graphics::loadTTFFont(*file, _fontHeight, 96); // Use the same dpi as WME (96 vs 72).
+ _deletableFont = Graphics::loadTTFFont(*file, _fontHeight, Graphics::kTTFSizeModeCharacter, 96); // Use the same dpi as WME (96 vs 72).
_font = _deletableFont;
}
// We're not using BaseFileManager, so clean up after ourselves:
diff --git a/engines/zvision/detection.cpp b/engines/zvision/detection.cpp
index f44e653c2a..944d366d90 100644
--- a/engines/zvision/detection.cpp
+++ b/engines/zvision/detection.cpp
@@ -82,20 +82,20 @@ public:
bool ZVisionMetaEngine::hasFeature(MetaEngineFeature f) const {
return
- (f == kSupportsListSaves) ||
- (f == kSupportsLoadingDuringStartup) ||
- (f == kSupportsDeleteSave) ||
- (f == kSavesSupportMetaInfo) ||
- (f == kSavesSupportThumbnail) ||
- (f == kSavesSupportCreationDate);
- //(f == kSavesSupportPlayTime);
+ (f == kSupportsListSaves) ||
+ (f == kSupportsLoadingDuringStartup) ||
+ (f == kSupportsDeleteSave) ||
+ (f == kSavesSupportMetaInfo) ||
+ (f == kSavesSupportThumbnail) ||
+ (f == kSavesSupportCreationDate);
+ //(f == kSavesSupportPlayTime);
}
bool ZVision::ZVision::hasFeature(EngineFeature f) const {
- return
- (f == kSupportsRTL) ||
- (f == kSupportsLoadingDuringRuntime) ||
- (f == kSupportsSavingDuringRuntime);
+ return
+ (f == kSupportsRTL) ||
+ (f == kSupportsLoadingDuringRuntime) ||
+ (f == kSupportsSavingDuringRuntime);
}
Common::Error ZVision::ZVision::loadGameState(int slot) {
@@ -139,18 +139,18 @@ SaveStateList ZVisionMetaEngine::listSaves(const char *target) const {
ZVision::SaveManager *zvisionSaveMan = new ZVision::SaveManager(NULL);
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); file++) {
- // Obtain the last 3 digits of the filename, since they correspond to the save slot
- int slotNum = atoi(file->c_str() + file->size() - 3);
-
- if (slotNum >= 0 && slotNum <= 999) {
- Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
- if (in) {
- if (zvisionSaveMan->readSaveGameHeader(in, header)) {
- saveList.push_back(SaveStateDescriptor(slotNum, header.saveName));
- }
- delete in;
- }
- }
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ if (slotNum >= 0 && slotNum <= 999) {
+ Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
+ if (in) {
+ if (zvisionSaveMan->readSaveGameHeader(in, header)) {
+ saveList.push_back(SaveStateDescriptor(slotNum, header.saveName));
+ }
+ delete in;
+ }
+ }
}
delete zvisionSaveMan;
@@ -175,14 +175,14 @@ void ZVisionMetaEngine::removeSaveState(const char *target, int slot) const {
Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
- // Obtain the last 3 digits of the filename, since they correspond to the save slot
- int slotNum = atoi(file->c_str() + file->size() - 3);
-
- // Rename every slot greater than the deleted slot,
- if (slotNum > slot) {
- saveFileMan->renameSavefile(file->c_str(), filename.c_str());
- filename = Common::String::format("%s.%03u", target, ++slot);
- }
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ // Rename every slot greater than the deleted slot,
+ if (slotNum > slot) {
+ saveFileMan->renameSavefile(file->c_str(), filename.c_str());
+ filename = Common::String::format("%s.%03u", target, ++slot);
+ }
}
}
@@ -191,48 +191,48 @@ SaveStateDescriptor ZVisionMetaEngine::querySaveMetaInfos(const char *target, in
Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename.c_str());
if (in) {
- ZVision::SaveGameHeader header;
+ ZVision::SaveGameHeader header;
// We only use readSaveGameHeader() here, which doesn't need an engine callback
ZVision::SaveManager *zvisionSaveMan = new ZVision::SaveManager(NULL);
bool successfulRead = zvisionSaveMan->readSaveGameHeader(in, header);
delete zvisionSaveMan;
- delete in;
+ delete in;
- if (successfulRead) {
- SaveStateDescriptor desc(slot, header.saveName);
+ if (successfulRead) {
+ SaveStateDescriptor desc(slot, header.saveName);
// Do not allow save slot 0 (used for auto-saving) to be deleted or
// overwritten.
desc.setDeletableFlag(slot != 0);
desc.setWriteProtectedFlag(slot == 0);
- desc.setThumbnail(header.thumbnail);
+ desc.setThumbnail(header.thumbnail);
- if (header.version > 0) {
- int day = header.saveDay;
- int month = header.saveMonth;
- int year = header.saveYear;
+ if (header.version > 0) {
+ int day = header.saveDay;
+ int month = header.saveMonth;
+ int year = header.saveYear;
- desc.setSaveDate(year, month, day);
+ desc.setSaveDate(year, month, day);
- int hour = header.saveHour;
- int minutes = header.saveMinutes;
+ int hour = header.saveHour;
+ int minutes = header.saveMinutes;
- desc.setSaveTime(hour, minutes);
+ desc.setSaveTime(hour, minutes);
- //desc.setPlayTime(header.playTime * 1000);
- }
+ //desc.setPlayTime(header.playTime * 1000);
+ }
- return desc;
- }
+ return desc;
+ }
}
return SaveStateDescriptor();
}
#if PLUGIN_ENABLED_DYNAMIC(ZVISION)
-REGISTER_PLUGIN_DYNAMIC(ZVISION, PLUGIN_TYPE_ENGINE, ZVisionMetaEngine);
+ REGISTER_PLUGIN_DYNAMIC(ZVISION, PLUGIN_TYPE_ENGINE, ZVisionMetaEngine);
#else
-REGISTER_PLUGIN_STATIC(ZVISION, PLUGIN_TYPE_ENGINE, ZVisionMetaEngine);
+ REGISTER_PLUGIN_STATIC(ZVISION, PLUGIN_TYPE_ENGINE, ZVisionMetaEngine);
#endif
diff --git a/engines/zvision/text/truetype_font.cpp b/engines/zvision/text/truetype_font.cpp
index acb053ea8d..ccb86d9440 100644
--- a/engines/zvision/text/truetype_font.cpp
+++ b/engines/zvision/text/truetype_font.cpp
@@ -123,7 +123,7 @@ bool StyledTTFont::loadFont(const Common::String &fontName, int32 point, uint st
!file.open(freeFontName) && !_engine->getSearchManager()->openFile(file, freeFontName))
error("Unable to open font file %s (Liberation Font alternative: %s, FreeFont alternative: %s)", newFontName.c_str(), liberationFontName.c_str(), freeFontName.c_str());
- Graphics::Font *newFont = Graphics::loadTTFFont(file, point, 60, (sharp ? Graphics::kTTFRenderModeMonochrome : Graphics::kTTFRenderModeNormal)); // 66 dpi for 640 x 480 on 14" display
+ Graphics::Font *newFont = Graphics::loadTTFFont(file, point, Graphics::kTTFSizeModeCell, 0, (sharp ? Graphics::kTTFRenderModeMonochrome : Graphics::kTTFRenderModeNormal));
if (newFont == nullptr) {
return false;
}
diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index 779fdc4464..b0d69c5f94 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -136,9 +136,6 @@ void ZVision::registerDefaultSettings() {
ConfMan.registerDefault(settingsKeys[i].name, settingsKeys[i].defaultBoolValue);
}
}
-
- ConfMan.registerDefault("originalsaveload", false);
- ConfMan.registerDefault("doublefps", false);
}
void ZVision::loadSettings() {
diff --git a/graphics/fonts/ttf.cpp b/graphics/fonts/ttf.cpp
index dc7335f1c2..98420f6dfb 100644
--- a/graphics/fonts/ttf.cpp
+++ b/graphics/fonts/ttf.cpp
@@ -33,11 +33,15 @@
#include "common/singleton.h"
#include "common/stream.h"
+#include "common/memstream.h"
#include "common/hashmap.h"
+#include "common/ptr.h"
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
+#include FT_TRUETYPE_TABLES_H
+#include FT_TRUETYPE_TAGS_H
namespace Graphics {
@@ -47,6 +51,10 @@ inline int ftCeil26_6(FT_Pos x) {
return (x + 63) / 64;
}
+inline int divRoundToNearest(int dividend, int divisor) {
+ return (dividend + (divisor / 2)) / divisor;
+}
+
} // End of anonymous namespace
class TTFLibrary : public Common::Singleton<TTFLibrary> {
@@ -101,7 +109,7 @@ public:
TTFFont();
virtual ~TTFFont();
- bool load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
+ bool load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
virtual int getFontHeight() const;
@@ -137,6 +145,12 @@ private:
bool _allowLateCaching;
void assureCached(uint32 chr) const;
+ Common::SeekableReadStream *readTTFTable(FT_ULong tag) const;
+
+ int computePointSize(int size, TTFSizeMode sizeMode) const;
+ int readPointSizeFromVDMXTable(int height) const;
+ int computePointSizeFromHeaders(int height) const;
+
FT_Int32 _loadFlags;
FT_Render_Mode _renderMode;
bool _hasKerning;
@@ -162,7 +176,7 @@ TTFFont::~TTFFont() {
}
}
-bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
+bool TTFFont::load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
if (!g_ttf.isInitialized())
return false;
@@ -200,7 +214,7 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRe
// Check whether we have kerning support
_hasKerning = (FT_HAS_KERNING(_face) != 0);
- if (FT_Set_Char_Size(_face, 0, size * 64, dpi, dpi)) {
+ if (FT_Set_Char_Size(_face, 0, computePointSize(size, sizeMode) * 64, dpi, dpi)) {
delete[] _ttfFile;
_ttfFile = 0;
@@ -262,6 +276,126 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRe
return _initialized;
}
+int TTFFont::computePointSize(int size, TTFSizeMode sizeMode) const {
+ int ptSize;
+ switch (sizeMode) {
+ case kTTFSizeModeCell: {
+ ptSize = readPointSizeFromVDMXTable(size);
+
+ if (ptSize == 0) {
+ ptSize = computePointSizeFromHeaders(size);
+ }
+
+ if (ptSize == 0) {
+ warning("Unable to compute point size for font '%s'", _face->family_name);
+ ptSize = 1;
+ }
+ break;
+ }
+ case kTTFSizeModeCharacter:
+ ptSize = size;
+ break;
+ }
+
+ return ptSize;
+}
+
+Common::SeekableReadStream *TTFFont::readTTFTable(FT_ULong tag) const {
+ // Find the required buffer size by calling the load function with nullptr
+ FT_ULong size = 0;
+ FT_Error err = FT_Load_Sfnt_Table(_face, tag, 0, nullptr, &size);
+ if (err) {
+ return nullptr;
+ }
+
+ byte *buf = (byte *)malloc(size);
+ if (!buf) {
+ return nullptr;
+ }
+
+ err = FT_Load_Sfnt_Table(_face, tag, 0, buf, &size);
+ if (err) {
+ free(buf);
+ return nullptr;
+ }
+
+ return new Common::MemoryReadStream(buf, size, DisposeAfterUse::YES);
+}
+
+int TTFFont::readPointSizeFromVDMXTable(int height) const {
+ // The Vertical Device Metrics table matches font heights with point sizes.
+ // FreeType does not expose it, we have to parse it ourselves.
+ // See https://www.microsoft.com/typography/otspec/vdmx.htm
+
+ Common::ScopedPtr<Common::SeekableReadStream> vdmxBuf(readTTFTable(TTAG_VDMX));
+ if (!vdmxBuf) {
+ return 0;
+ }
+
+ // Read the main header
+ vdmxBuf->skip(4); // Skip the version
+ uint16 numRatios = vdmxBuf->readUint16BE();
+
+ // Compute the starting position for the group table positions table
+ int32 offsetTableStart = vdmxBuf->pos() + 4 * numRatios;
+
+ // Search the ratio table for the 1:1 ratio, or the default record (0, 0, 0)
+ int32 selectedRatio = -1;
+ for (uint16 i = 0; i < numRatios; i++) {
+ vdmxBuf->skip(1); // Skip the charset subset
+ uint8 xRatio = vdmxBuf->readByte();
+ uint8 yRatio1 = vdmxBuf->readByte();
+ uint8 yRatio2 = vdmxBuf->readByte();
+
+ if ((xRatio == 1 && yRatio1 <= 1 && yRatio2 >= 1)
+ || (xRatio == 0 && yRatio1 == 0 && yRatio2 == 0)) {
+ selectedRatio = i;
+ break;
+ }
+ }
+ if (selectedRatio < 0) {
+ return 0;
+ }
+
+ // Read from group table positions table to get the group table offset
+ vdmxBuf->seek(offsetTableStart + sizeof(uint16) * selectedRatio);
+ uint16 groupOffset = vdmxBuf->readUint16BE();
+
+ // Read the group table header
+ vdmxBuf->seek(groupOffset);
+ uint16 numRecords = vdmxBuf->readUint16BE();
+ vdmxBuf->skip(2); // Skip the table bounds
+
+ // Search a record matching the required height
+ for (uint16 i = 0; i < numRecords; i++) {
+ uint16 pointSize = vdmxBuf->readUint16BE();
+ int16 yMax = vdmxBuf->readSint16BE();
+ int16 yMin = vdmxBuf->readSint16BE();
+
+ if (yMax + -yMin > height) {
+ return 0;
+ }
+ if (yMax + -yMin == height) {
+ return pointSize;
+ }
+ }
+
+ return 0;
+}
+
+int TTFFont::computePointSizeFromHeaders(int height) const {
+ TT_OS2 *os2Header = (TT_OS2 *)FT_Get_Sfnt_Table(_face, ft_sfnt_os2);
+ TT_HoriHeader *horiHeader = (TT_HoriHeader *)FT_Get_Sfnt_Table(_face, ft_sfnt_hhea);
+
+ if (os2Header && (os2Header->usWinAscent + os2Header->usWinDescent != 0)) {
+ return divRoundToNearest(_face->units_per_EM * height, os2Header->usWinAscent + os2Header->usWinDescent);
+ } else if (horiHeader && (horiHeader->Ascender + horiHeader->Descender != 0)) {
+ return divRoundToNearest(_face->units_per_EM * height, horiHeader->Ascender + horiHeader->Descender);
+ }
+
+ return 0;
+}
+
int TTFFont::getFontHeight() const {
return _height;
}
@@ -521,10 +655,10 @@ void TTFFont::assureCached(uint32 chr) const {
}
}
-Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
+Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
TTFFont *font = new TTFFont();
- if (!font->load(stream, size, dpi, renderMode, mapping)) {
+ if (!font->load(stream, size, sizeMode, dpi, renderMode, mapping)) {
delete font;
return 0;
}
diff --git a/graphics/fonts/ttf.h b/graphics/fonts/ttf.h
index bd25b69f21..4110486357 100644
--- a/graphics/fonts/ttf.h
+++ b/graphics/fonts/ttf.h
@@ -56,10 +56,32 @@ enum TTFRenderMode {
};
/**
+ * This specifies how the font size is defined.
+ */
+enum TTFSizeMode {
+ /**
+ * Character height only.
+ *
+ * This matches rendering obtained when calling
+ * CreateFont in Windows with negative height values.
+ */
+ kTTFSizeModeCharacter,
+
+ /**
+ * Full cell height.
+ *
+ * This matches rendering obtained when calling
+ * CreateFont in Windows with positive height values.
+ */
+ kTTFSizeModeCell
+};
+
+/**
* Loads a TTF font file from a given data stream object.
*
* @param stream Stream object to load font data from.
* @param size The point size to load.
+ * @param sizeMode The point size definition used for the size parameter.
* @param dpi The dpi to use for size calculations, by default 72dpi
* are used.
* @param renderMode FreeType2 mode used to render glyphs. @see TTFRenderMode
@@ -71,7 +93,7 @@ enum TTFRenderMode {
* supported.
* @return 0 in case loading fails, otherwise a pointer to the Font object.
*/
-Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0);
+Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode = kTTFSizeModeCharacter, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0);
void shutdownTTF();
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index 6562a1d922..536e5192e0 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -1459,7 +1459,7 @@ const Graphics::Font *ThemeEngine::loadScalableFont(const Common::String &filena
for (Common::ArchiveMemberList::const_iterator i = members.begin(), end = members.end(); i != end; ++i) {
Common::SeekableReadStream *stream = (*i)->createReadStream();
if (stream) {
- font = Graphics::loadTTFFont(*stream, pointsize, 0, Graphics::kTTFRenderModeLight,
+ font = Graphics::loadTTFFont(*stream, pointsize, Graphics::kTTFSizeModeCharacter, 0, Graphics::kTTFRenderModeLight,
#ifdef USE_TRANSLATION
TransMan.getCharsetMapping()
#else
diff --git a/gui/about.cpp b/gui/about.cpp
index daec2b7e48..211542adb3 100644
--- a/gui/about.cpp
+++ b/gui/about.cpp
@@ -57,7 +57,7 @@ enum {
static const char *copyright_text[] = {
"",
-"C0""Copyright (C) 2001-2015 The ScummVM Team",
+"C0""Copyright (C) 2001-2016 The ScummVM Team",
"C0""http://www.scummvm.org",
"",
"C0""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 binary.",
diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index 9b6cf5a0b6..20c6d3fa13 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -64,6 +64,8 @@ GuiManager::GuiManager() : _redrawStatus(kRedrawDisabled), _stateIsSaved(false),
_width = _system->getOverlayWidth();
_height = _system->getOverlayHeight();
+ _launched = false;
+
// Clear the cursor
memset(_cursor, 0xFF, sizeof(_cursor));
diff --git a/gui/gui-manager.h b/gui/gui-manager.h
index 4186a93ccb..26c8d6def9 100644
--- a/gui/gui-manager.h
+++ b/gui/gui-manager.h
@@ -98,6 +98,8 @@ public:
*/
bool checkScreenChange();
+ bool _launched;
+
protected:
enum RedrawStatus {
kRedrawDisabled = 0,
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 5abf0aba26..bae894cba1 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -683,6 +683,8 @@ LauncherDialog::LauncherDialog()
// Create Load dialog
_loadDialog = new SaveLoadChooser(_("Load game:"), _("Load"), false);
+
+ GUI::GuiManager::instance()._launched = true;
}
void LauncherDialog::selectTarget(const String &target) {
diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat
index f141524ba3..3a9804f663 100644
--- a/gui/themes/translations.dat
+++ b/gui/themes/translations.dat
Binary files differ
diff --git a/po/be_BY.po b/po/be_BY.po
index 5b22098c1c..21a05988a2 100644
--- a/po/be_BY.po
+++ b/po/be_BY.po
@@ -1,5 +1,5 @@
# Belarusian translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Ivan Lukyanov <greencis@mail.ru>, 2013-2014.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-02 17:22+0300\n"
"Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n"
"Language-Team: Ivan Lukyanov <greencis@mail.ru>\n"
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr ""
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr ""
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr ""
@@ -89,6 +89,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr " ?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -386,7 +419,7 @@ msgstr " ID . , ."
msgid "~Q~uit"
msgstr "~~"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr " ScummVM"
@@ -394,7 +427,7 @@ msgstr " ScummVM"
msgid "A~b~out..."
msgstr " ~~..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr " ScummVM"
@@ -492,26 +525,6 @@ msgstr ""
" ? "
" ."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr ""
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr ""
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM !"
@@ -664,7 +677,7 @@ msgid "Special dithering modes supported by some games"
msgstr " , "
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr " "
@@ -1131,7 +1144,7 @@ msgstr " "
msgid "Standard Renderer"
msgstr " "
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr ""
@@ -1377,7 +1390,7 @@ msgstr "~~ "
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1390,7 +1403,7 @@ msgstr " :"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1732,57 +1745,57 @@ msgstr " "
msgid "Right Click"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr " ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr " :"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr " "
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL ( )"
@@ -2226,13 +2239,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr " :"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr ""
@@ -2772,36 +2785,36 @@ msgstr "~~"
msgid "~N~ext"
msgstr "~~"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr " "
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr " "
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr " ."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr " Loom(TM)."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr ""
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 096990848c..432e1b800b 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -1,5 +1,5 @@
# Catalan translation for ScummVM.
-# Copyright (C) 2007-2015 The ScummVM Team
+# Copyright (C) 2007-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Jordi Vilalta Prat <jvprat@jvprat.com>, 2007-2011.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\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"
@@ -51,13 +51,13 @@ msgid "Go up"
msgstr "Amunt"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -66,7 +66,7 @@ msgid "Cancel"
msgstr "Cancella"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Escull"
@@ -86,6 +86,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Realment voleu suprimir aquesta partida?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "S"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "No"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -384,7 +417,7 @@ msgstr ""
msgid "~Q~uit"
msgstr "~T~anca"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Surt de ScummVM"
@@ -392,7 +425,7 @@ msgstr "Surt de ScummVM"
msgid "A~b~out..."
msgstr "~Q~uant a..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Quant a ScummVM"
@@ -492,26 +525,6 @@ msgstr ""
"Esteu segur que voleu executar el detector massiu de jocs? Aix pot afegir "
"una gran quantitat de jocs."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "S"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "No"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM no ha pogut obrir el directori especificat!"
@@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Modes de tramat especials suportats per alguns jocs"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Mode pantalla completa"
@@ -1135,7 +1148,7 @@ msgstr "GFX desactivats"
msgid "Standard Renderer"
msgstr "Pintat estndard (16bpp)"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Estndard"
@@ -1385,7 +1398,7 @@ msgstr "~R~etorna al Llanador"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1398,7 +1411,7 @@ msgstr "Desa la partida:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1736,58 +1749,58 @@ msgstr "Clic central"
msgid "Right Click"
msgstr "Clic dret"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Amaga ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Oculta els altres"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mostra-ho tot"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Finestra"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimitza"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (sense escalar)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (no escalat)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "S'ha activat la correcci de la relaci d'aspecte"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "S'ha desactivat la correcci de la relaci d'aspecte"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Filtre de grfics actiu:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Mode de finestra"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
#, fuzzy
msgid "OpenGL"
msgstr "Obre"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr ""
@@ -2230,13 +2243,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Recupera la partida:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Restaura"
@@ -2777,36 +2790,36 @@ msgstr "~A~nterior"
msgid "~N~ext"
msgstr "~S~egent"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Noms veus"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Veu i subttols"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Noms subttols"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Veus i sub."
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Seleccioneu el nivell de competncia."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Consulteu el manual de Loom(TM) per ajuda."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Prctica"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Expert"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index aa3fc856b8..84783ce4d0 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -1,15 +1,15 @@
# Czech translation for ScummVM.
-# Copyright (C) 2001-2015 The ScummVM Team
+# Copyright (C) 2001-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
-# Zbynk Schwarz <zbynek.schwarz@gmail.com>, 2011-2013.
+# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011-2013.
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
-"PO-Revision-Date: 2015-07-26 18:51+0200\n"
-"Last-Translator: Zbynk Schwarz <zbynek.schwarz@gmail.com>\n"
+"POT-Creation-Date: 2015-12-24 13:36+0100\n"
+"PO-Revision-Date: 2015-12-24 13:37+0100\n"
+"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: \n"
"Language: Cesky\n"
"MIME-Version: 1.0\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Poedit-SourceCharset: iso-8859-2\n"
-"X-Generator: Poedit 1.8.3\n"
+"X-Generator: Poedit 1.8.6\n"
"X-Poedit-Basepath: ..\n"
#: gui/about.cpp:94
@@ -27,97 +27,127 @@ msgstr "(sestaveno %s)"
#: gui/about.cpp:101
msgid "Features compiled in:"
-msgstr "Zakompilovan funkce:"
+msgstr "Zakompilované funkce:"
#: gui/about.cpp:110
msgid "Available engines:"
-msgstr "Dostupn jdra:"
+msgstr "Dostupná jádra:"
#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
-msgstr "Zobrazit skryt soubory"
+msgstr "Zobrazit skryté soubory"
#: gui/browser.cpp:68
msgid "Show files marked with the hidden attribute"
-msgstr "Zobrazit soubory s vlastnost skryt"
+msgstr "Zobrazit soubory s vlastností skryté"
#: gui/browser.cpp:72
msgid "Go up"
-msgstr "Jt nahoru"
+msgstr "Jít nahoru"
#: gui/browser.cpp:72 gui/browser.cpp:74
msgid "Go to previous directory level"
-msgstr "Jt na pedchoz rove adrese"
+msgstr "Jít na předchozí úroveň adresáře"
#: gui/browser.cpp:74
msgctxt "lowres"
msgid "Go up"
-msgstr "Jt nahoru"
+msgstr "Jít nahoru"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
#: engines/scumm/dialogs.cpp:191 engines/sword1/control.cpp:865
msgid "Cancel"
-msgstr "Zruit"
+msgstr "Zrušit"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Zvolit"
#: gui/editrecorddialog.cpp:58
-#, fuzzy
msgid "Author:"
msgstr "Autor:"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
-msgstr "Jmno"
+msgstr "Jméno"
#: gui/editrecorddialog.cpp:60
-#, fuzzy
msgid "Notes:"
-msgstr "Poznmky:"
+msgstr "Poznámky:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
-msgstr ""
+msgstr "Ok"
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr "Zvolte soubor pro načtení"
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr "Zadejte název souboru pro uložení"
+
+#: gui/filebrowser-dialog.cpp:132
+msgid "Do you really want to overwrite the file?"
+msgstr "Opravdu chcete tento soubor přepsat?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ano"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Ne"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
#: engines/scumm/help.cpp:210
msgid "Close"
-msgstr "Zavt"
+msgstr "Zavřít"
#: gui/gui-manager.cpp:120
msgid "Mouse click"
-msgstr "Kliknut my"
+msgstr "Kliknutí myší"
#: gui/gui-manager.cpp:124 base/main.cpp:319
msgid "Display keyboard"
-msgstr "Zobrazit klvesnici"
+msgstr "Zobrazit klávesnici"
#: gui/gui-manager.cpp:128 base/main.cpp:323
msgid "Remap keys"
-msgstr "Pemapovat klvesy"
+msgstr "Přemapovat klávesy"
#: gui/gui-manager.cpp:131 base/main.cpp:326 engines/scumm/help.cpp:87
msgid "Toggle fullscreen"
-msgstr "Pepnout celou obrazovku"
+msgstr "Přepnout celou obrazovku"
#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
msgid "Choose an action to map"
-msgstr "Zvolte innost k mapovn"
+msgstr "Zvolte činnost k mapování"
#: gui/KeysDialog.cpp:41
msgid "Map"
@@ -145,25 +175,25 @@ msgstr "OK"
#: gui/KeysDialog.cpp:49
msgid "Select an action and click 'Map'"
-msgstr "Zvolte innost a kliknte 'Mapovat'"
+msgstr "Zvolte činnost a klikněte 'Mapovat'"
#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
#, c-format
msgid "Associated key : %s"
-msgstr "Piazen klvesa: %s"
+msgstr "Přiřazená klávesa: %s"
#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
#, c-format
msgid "Associated key : none"
-msgstr "Piazen klvesa: dn"
+msgstr "Přiřazená klávesa: žádná"
#: gui/KeysDialog.cpp:90
msgid "Please select an action"
-msgstr "Prosm vyberte innost"
+msgstr "Prosím vyberte činnost"
#: gui/KeysDialog.cpp:106
msgid "Press the key to associate"
-msgstr "Zmknte klvesu pro piazen"
+msgstr "Zmáčkněte klávesu pro přiřazení"
#: gui/launcher.cpp:193
msgid "Game"
@@ -178,8 +208,8 @@ msgid ""
"Short game identifier used for referring to saved games and running the game "
"from the command line"
msgstr ""
-"Krtk identifiktor her, pouvan jako odkaz k uloenm hrm a sputn "
-"hry z pkazovho dku"
+"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění "
+"hry z příkazového řádku"
#: gui/launcher.cpp:199
msgctxt "lowres"
@@ -188,12 +218,12 @@ msgstr "ID:"
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
-msgstr "pln nzev hry"
+msgstr "Úplný název hry"
#: gui/launcher.cpp:206
msgctxt "lowres"
msgid "Name:"
-msgstr "Jmno:"
+msgstr "Jméno:"
#: gui/launcher.cpp:210
msgid "Language:"
@@ -203,13 +233,13 @@ msgstr "Jazyk:"
msgid ""
"Language of the game. This will not turn your Spanish game version into "
"English"
-msgstr "Jazyk hry. Toto z va panlsk verze neudl Anglickou"
+msgstr "Jazyk hry. Toto z vaší Španělské verze neudělá Anglickou"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
-msgstr "<vchoz>"
+msgstr "<výchozí>"
#: gui/launcher.cpp:222
msgid "Platform:"
@@ -217,7 +247,7 @@ msgstr "Platforma:"
#: gui/launcher.cpp:222 gui/launcher.cpp:224 gui/launcher.cpp:225
msgid "Platform the game was originally designed for"
-msgstr "Platforma, pro kterou byla hra pvodn vytvoena"
+msgstr "Platforma, pro kterou byla hra původně vytvořena"
#: gui/launcher.cpp:224
msgctxt "lowres"
@@ -226,7 +256,7 @@ msgstr "Platforma:"
#: gui/launcher.cpp:237
msgid "Engine"
-msgstr "Jdro"
+msgstr "Jádro"
#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
@@ -238,12 +268,12 @@ msgstr "GFX"
#: gui/launcher.cpp:248
msgid "Override global graphic settings"
-msgstr "Potlait globln nastaven obrazu"
+msgstr "Potlačit globální nastavení obrazu"
#: gui/launcher.cpp:250
msgctxt "lowres"
msgid "Override global graphic settings"
-msgstr "Potlait globln nastaven obrazu"
+msgstr "Potlačit globální nastavení obrazu"
#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
@@ -251,12 +281,12 @@ msgstr "Zvuk"
#: gui/launcher.cpp:260
msgid "Override global audio settings"
-msgstr "Potlait globln nastaven zvuku"
+msgstr "Potlačit globální nastavení zvuku"
#: gui/launcher.cpp:262
msgctxt "lowres"
msgid "Override global audio settings"
-msgstr "Potlait globln nastaven zvuku"
+msgstr "Potlačit globální nastavení zvuku"
#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
@@ -269,12 +299,12 @@ msgstr "Hlasitost"
#: gui/launcher.cpp:276
msgid "Override global volume settings"
-msgstr "Potlait globln nastaven hlasitosti"
+msgstr "Potlačit globální nastavení hlasitosti"
#: gui/launcher.cpp:278
msgctxt "lowres"
msgid "Override global volume settings"
-msgstr "Potlait globln nastaven hlasitosti"
+msgstr "Potlačit globální nastavení hlasitosti"
#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
@@ -282,12 +312,12 @@ msgstr "MIDI"
#: gui/launcher.cpp:289
msgid "Override global MIDI settings"
-msgstr "Potlait globln nastaven MIDI"
+msgstr "Potlačit globální nastavení MIDI"
#: gui/launcher.cpp:291
msgctxt "lowres"
msgid "Override global MIDI settings"
-msgstr "Potlait globln nastaven MIDI"
+msgstr "Potlačit globální nastavení MIDI"
#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
@@ -295,12 +325,12 @@ msgstr "MT-32"
#: gui/launcher.cpp:303
msgid "Override global MT-32 settings"
-msgstr "Potlait globln nastaven MT-32"
+msgstr "Potlačit globální nastavení MT-32"
#: gui/launcher.cpp:305
msgctxt "lowres"
msgid "Override global MT-32 settings"
-msgstr "Potlait globln nastaven MT-32"
+msgstr "Potlačit globální nastavení MT-32"
#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
@@ -322,30 +352,30 @@ msgstr "Cesta Hry:"
#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
-msgstr "Dodaten Cesta:"
+msgstr "Dodatečná Cesta:"
#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333
msgid "Specifies path to additional data used by the game"
-msgstr "Stanov cestu pro dodaten data pouit ve he"
+msgstr "Stanoví cestu pro dodatečná data použitá ve hře"
#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
-msgstr "Dodaten Cesta:"
+msgstr "Dodatečná Cesta:"
#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
-msgstr "Cesta pro uloen:"
+msgstr "Cesta pro uložení:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
-msgstr "Stanovuje, kam jsou umstny vae uloen hry"
+msgstr "Stanovuje, kam jsou umístěny vaše uložené hry"
#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
-msgstr "Cesta pro uloen:"
+msgstr "Cesta pro uložení:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
@@ -355,13 +385,13 @@ msgstr "Cesta pro uloen:"
#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
-msgstr "dn"
+msgstr "Žádné"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
-msgstr "Vchoz"
+msgstr "Výchozí"
#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
@@ -369,33 +399,33 @@ msgstr "Vybrat SoundFont"
#: gui/launcher.cpp:529 gui/launcher.cpp:682
msgid "Select directory with game data"
-msgstr "Vyberte adres s daty hry"
+msgstr "Vyberte adresář s daty hry"
#: gui/launcher.cpp:547
msgid "Select additional game directory"
-msgstr "Vyberte dodaten adres hry"
+msgstr "Vyberte dodatečný adresář hry"
#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
-msgstr "Vyberte adres pro uloen hry"
+msgstr "Vyberte adresář pro uložené hry"
#: gui/launcher.cpp:586
msgid "This game ID is already taken. Please choose another one."
-msgstr "Toto ID hry je u zabran. Vyberte si, prosm, jin."
+msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné."
#: gui/launcher.cpp:626 engines/dialogs.cpp:111
msgid "~Q~uit"
-msgstr "~U~konit"
+msgstr "~U~končit"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
-msgstr "Ukonit ScummVM"
+msgstr "Ukončit ScummVM"
#: gui/launcher.cpp:627
msgid "A~b~out..."
msgstr "~O~ Programu..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "O ScummVM"
@@ -405,7 +435,7 @@ msgstr "~V~olby..."
#: gui/launcher.cpp:628
msgid "Change global ScummVM options"
-msgstr "Zmnit globln volby ScummVM"
+msgstr "Změnit globální volby ScummVM"
#: gui/launcher.cpp:630
msgid "~S~tart"
@@ -417,19 +447,19 @@ msgstr "Spustit zvolenou hru"
#: gui/launcher.cpp:633
msgid "~L~oad..."
-msgstr "~N~ahrt..."
+msgstr "~N~ahrát..."
#: gui/launcher.cpp:633
msgid "Load saved game for selected game"
-msgstr "Nahrt uloenou pozici pro zvolenou hru"
+msgstr "Nahrát uloženou pozici pro zvolenou hru"
#: gui/launcher.cpp:638
msgid "~A~dd Game..."
-msgstr "~P~idat hru..."
+msgstr "~P~řidat hru..."
#: gui/launcher.cpp:638 gui/launcher.cpp:645
msgid "Hold Shift for Mass Add"
-msgstr "Podrte Shift pro Hromadn Pidn"
+msgstr "Podržte Shift pro Hromadné Přidání"
#: gui/launcher.cpp:640
msgid "~E~dit Game..."
@@ -437,7 +467,7 @@ msgstr "~U~pravit Hru..."
#: gui/launcher.cpp:640 gui/launcher.cpp:647
msgid "Change game options"
-msgstr "Zmnit volby hry"
+msgstr "Změnit volby hry"
#: gui/launcher.cpp:642
msgid "~R~emove Game"
@@ -445,12 +475,12 @@ msgstr "~O~dstranit Hru"
#: gui/launcher.cpp:642 gui/launcher.cpp:649
msgid "Remove game from the list. The game data files stay intact"
-msgstr "Odstranit hru ze seznamu. Hern data zstanou zachovna"
+msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována"
#: gui/launcher.cpp:645
msgctxt "lowres"
msgid "~A~dd Game..."
-msgstr "~P~idat hru..."
+msgstr "~P~řidat hru..."
#: gui/launcher.cpp:647
msgctxt "lowres"
@@ -474,7 +504,7 @@ msgstr "Hledat:"
#: engines/mohawk/myst.cpp:245 engines/mohawk/riven.cpp:718
#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600
msgid "Load game:"
-msgstr "Nahrt hru:"
+msgstr "Nahrát hru:"
#: gui/launcher.cpp:685 engines/dialogs.cpp:115
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -483,43 +513,23 @@ msgstr "Nahrt hru:"
#: engines/mohawk/riven.cpp:718 engines/pegasus/pegasus.cpp:353
#: engines/scumm/dialogs.cpp:189 engines/tsage/scenes.cpp:600
msgid "Load"
-msgstr "Nahrt"
+msgstr "Nahrát"
#: gui/launcher.cpp:792
msgid ""
"Do you really want to run the mass game detector? This could potentially add "
"a huge number of games."
msgstr ""
-"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciln "
-"pidat velkou spoustu her. "
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ano"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Ne"
+"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně "
+"přidat velkou spoustu her. "
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM nemohl tento adres otevt!"
+msgstr "ScummVM nemohl tento adresář otevřít!"
#: gui/launcher.cpp:853
msgid "ScummVM could not find any game in the specified directory!"
-msgstr "ScummVM nemohl v zadanm adresi najt dnou hru!"
+msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!"
#: gui/launcher.cpp:867
msgid "Pick the game:"
@@ -527,68 +537,66 @@ msgstr "Vybrat hru:"
#: gui/launcher.cpp:941
msgid "Do you really want to remove this game configuration?"
-msgstr "Opravdu chcete odstranit nastaven tto hry?"
+msgstr "Opravdu chcete odstranit nastavení této hry?"
#: gui/launcher.cpp:999
msgid "Do you want to load saved game?"
-msgstr "Chcete nast uloenou pozici?"
+msgstr "Chcete načíst uloženou pozici?"
#: gui/launcher.cpp:1048
msgid "This game does not support loading games from the launcher."
-msgstr "Tato hra nepodporuje spoutn her ze spoute"
+msgstr "Tato hra nepodporuje spouštění her ze spouštěče"
#: gui/launcher.cpp:1052
msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr "ScummVM nemohl najt dn jdro schopn vybranou hru spustit!"
+msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!"
#: gui/launcher.cpp:1159
msgid "Mass Add..."
-msgstr "Hromadn Pidn..."
+msgstr "Hromadné Přidání..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr "Nahrt..."
+msgstr "Nahrát..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
-msgstr "... prbh ..."
+msgstr "... průběh ..."
#: gui/massadd.cpp:259
msgid "Scan complete!"
-msgstr "Hledn dokoneno!"
+msgstr "Hledání dokončeno!"
#: gui/massadd.cpp:262
#, c-format
msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "Objeveno %d novch her, ignorovno %d dve pidanch her."
+msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her."
#: gui/massadd.cpp:266
#, c-format
msgid "Scanned %d directories ..."
-msgstr "Prohledno %d adres..."
+msgstr "Prohledáno %d adresářů..."
#: gui/massadd.cpp:269
#, c-format
msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "Objeveno %d novch her, ignorovno %d dve pidanch her ..."
+msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..."
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
-msgstr ""
+msgstr "Zastavit"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
-msgstr ""
+msgstr "Upravit popis záznamu"
#: gui/onscreendialog.cpp:108
-#, fuzzy
msgid "Switch to Game"
-msgstr "Pepnout"
+msgstr "Přepnout do hry"
#: gui/onscreendialog.cpp:110
-#, fuzzy
msgid "Fast replay"
-msgstr "Rychl reim"
+msgstr "Rychlé přehrávání"
#: gui/options.cpp:85
msgid "Never"
@@ -596,19 +604,19 @@ msgstr "Nikdy"
#: gui/options.cpp:85
msgid "every 5 mins"
-msgstr "Kadch 5 min"
+msgstr "Každých 5 min"
#: gui/options.cpp:85
msgid "every 10 mins"
-msgstr "Kadch 10 min"
+msgstr "Každých 10 min"
#: gui/options.cpp:85
msgid "every 15 mins"
-msgstr "Kadch 15 min"
+msgstr "Každých 15 min"
#: gui/options.cpp:85
msgid "every 30 mins"
-msgstr "Kadch 30 min"
+msgstr "Každých 30 min"
#: gui/options.cpp:87
msgid "8 kHz"
@@ -634,110 +642,110 @@ msgstr "48 kHz"
#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
-msgstr "dn"
+msgstr "Žádné"
#: gui/options.cpp:389
msgid "Failed to apply some of the graphic options changes:"
-msgstr "Nelze pout nkter zmny monost grafiky:"
+msgstr "Nelze použít některé změny možností grafiky:"
#: gui/options.cpp:401
msgid "the video mode could not be changed."
-msgstr "reim obrazu nemohl bt zmnn."
+msgstr "režim obrazu nemohl být změněn."
#: gui/options.cpp:407
msgid "the fullscreen setting could not be changed"
-msgstr "nastaven cel obrazovky nemohlo bt zmnno"
+msgstr "nastavení celé obrazovky nemohlo být změněno"
#: gui/options.cpp:413
msgid "the aspect ratio setting could not be changed"
-msgstr "nastaven pomru stran nemohlo bt zmnno"
+msgstr "nastavení poměru stran nemohlo být změněno"
#: gui/options.cpp:732
msgid "Graphics mode:"
-msgstr "Reim obrazu:"
+msgstr "Režim obrazu:"
#: gui/options.cpp:746
msgid "Render mode:"
-msgstr "Reim vykreslen:"
+msgstr "Režim vykreslení:"
#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
-msgstr "Speciln reimy chvn podporovan nktermi hrami"
+msgstr "Speciální režimy chvění podporované některými hrami"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
-msgstr "Reim cel obrazovky"
+msgstr "Režim celé obrazovky"
#: gui/options.cpp:761
msgid "Aspect ratio correction"
-msgstr "Korekce pomru stran"
+msgstr "Korekce poměru stran"
#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
-msgstr "Korigovat pomr stran pro hry 320x200"
+msgstr "Korigovat poměr stran pro hry 320x200"
#: gui/options.cpp:769
msgid "Preferred Device:"
-msgstr "Prioritn Zazen:"
+msgstr "Prioritní Zařízení:"
#: gui/options.cpp:769
msgid "Music Device:"
-msgstr "Hudebn zazen"
+msgstr "Hudební zařízení"
#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
-msgstr "Stanov prioritn zvukov zazen nebo emultor zvukov karty"
+msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty"
#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
-msgstr "Stanov vstupn zvukov zazen nebo emultor zvukov karty"
+msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty"
#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
-msgstr "Prioritn Za.:"
+msgstr "Prioritní Zař.:"
#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
-msgstr "Hudebn zazen"
+msgstr "Hudební zařízení"
#: gui/options.cpp:798
msgid "AdLib emulator:"
-msgstr "AdLib emultor"
+msgstr "AdLib emulátor"
#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
-msgstr "AdLib se pouv pro hudbu v mnoha hrch"
+msgstr "AdLib se používá pro hudbu v mnoha hrách"
#: gui/options.cpp:809
msgid "Output rate:"
-msgstr "Vstup. frekvence:"
+msgstr "Výstup. frekvence:"
#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
msgstr ""
-"Vy hodnota zpsob lep kvalitu zvuku, ale nemus bt podporovna Vai "
+"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši "
"zvukovou kartou"
#: gui/options.cpp:820
msgid "GM Device:"
-msgstr "GM Zazen:"
+msgstr "GM Zařízení:"
#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
-msgstr "Stanov vchoz zvukov zazen pro vstup General MIDI"
+msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI"
#: gui/options.cpp:831
msgid "Don't use General MIDI music"
-msgstr "Nepouvat hudbu General MIDI"
+msgstr "Nepoužívat hudbu General MIDI"
#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
-msgstr "Pout prvn dostupn zazen"
+msgstr "Použít první dostupné zařízení"
#: gui/options.cpp:854
msgid "SoundFont:"
@@ -746,7 +754,7 @@ msgstr "SoundFont:"
#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
-"SoundFont je podporovn nktermi zvukovmi kartami, FluidSynth a Timidity"
+"SoundFont je podporován některými zvukovými kartami, FluidSynth a Timidity"
#: gui/options.cpp:856
msgctxt "lowres"
@@ -755,69 +763,69 @@ msgstr "SoundFont:"
#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
-msgstr "Smen reim AdLib/MIDI"
+msgstr "Smíšený režim AdLib/MIDI"
#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
-msgstr "Pout ob zvukov generace MIDI a AdLib"
+msgstr "Použít obě zvukové generace MIDI a AdLib"
#: gui/options.cpp:865
msgid "MIDI gain:"
-msgstr "Zeslen MIDI:"
+msgstr "Zesílení MIDI:"
#: gui/options.cpp:872
msgid "FluidSynth Settings"
-msgstr "Nastaven FluidSynth"
+msgstr "Nastavení FluidSynth"
#: gui/options.cpp:879
msgid "MT-32 Device:"
-msgstr "Zazen MT-32:"
+msgstr "Zařízení MT-32:"
#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
-"Stanov vchoz zvukov vstupn zazen pro Roland MT-32/LAPC1/CM32l/CM64"
+"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64"
#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Opravdov Roland MT-32 (vypne GM emulaci)"
+msgstr "Opravdový Roland MT-32 (vypne GM emulaci)"
#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
msgstr ""
-"Zakrtnte, pokud chcete pout prav hardwarov zazen kompatibiln s "
-"Roland, pipojen k vaemu potai"
+"Zaškrtněte, pokud chcete použít pravé hardwarové zařízení kompatibilní s "
+"Roland, připojené k vašemu počítači"
#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Opravdov Roland MT-32 (dn GM emulace)"
+msgstr "Opravdový Roland MT-32 (žádná GM emulace)"
#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
-msgstr "Zazen Roland GS (zapne mapovn MT-32)"
+msgstr "Zařízení Roland GS (zapne mapování MT-32)"
#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-"Zakrtnte, pokud chcete povolit zplaty mapovn umoujc emulovat MT-32 "
-"na zazen Roland GS"
+"Zaškrtněte, pokud chcete povolit záplaty mapování umožňující emulovat MT-32 "
+"na zařízení Roland GS"
#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
-msgstr "Nepouvat hudbu Roland MT-32"
+msgstr "Nepoužívat hudbu Roland MT-32"
#: gui/options.cpp:925
msgid "Text and Speech:"
-msgstr "Text a e"
+msgstr "Text a Řeč"
#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
-msgstr "e"
+msgstr "Řeč"
#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
@@ -829,16 +837,16 @@ msgstr "Oba"
#: gui/options.cpp:933
msgid "Subtitle speed:"
-msgstr "Rychlost titulk:"
+msgstr "Rychlost titulků:"
#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
-msgstr "Text a e:"
+msgstr "Text a Řeč:"
#: gui/options.cpp:939
msgid "Spch"
-msgstr "e"
+msgstr "Řeč"
#: gui/options.cpp:940
msgid "Subs"
@@ -851,12 +859,12 @@ msgstr "Oba"
#: gui/options.cpp:941
msgid "Show subtitles and play speech"
-msgstr "Zobrazit titulky a pehrvat e"
+msgstr "Zobrazit titulky a přehrávat řeč"
#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
-msgstr "Rychlost titulk"
+msgstr "Rychlost titulků"
#: gui/options.cpp:959
msgid "Music volume:"
@@ -869,29 +877,29 @@ msgstr "Hlasitost hudby"
#: gui/options.cpp:968
msgid "Mute All"
-msgstr "Ztlumit Ve"
+msgstr "Ztlumit Vše"
#: gui/options.cpp:971
msgid "SFX volume:"
-msgstr "Hlasitost zvuk"
+msgstr "Hlasitost zvuků"
#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
-msgstr "Hlasitost specilnch zvukovch efekt"
+msgstr "Hlasitost speciálních zvukových efektů"
#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
-msgstr "Hlasitost zvuk"
+msgstr "Hlasitost zvuků"
#: gui/options.cpp:981
msgid "Speech volume:"
-msgstr "Hlasitost ei"
+msgstr "Hlasitost řeči"
#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
-msgstr "Hlasitost ei"
+msgstr "Hlasitost řeči"
#: gui/options.cpp:1140
msgid "Theme Path:"
@@ -904,25 +912,25 @@ msgstr "Cesta ke Vzhledu:"
#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr "Stanov cestu k dodatenm datm pouvan vemi hrami nebo ScummVM"
+msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM"
#: gui/options.cpp:1157
msgid "Plugins Path:"
-msgstr "Cesta k Pluginm:"
+msgstr "Cesta k Pluginům:"
#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
-msgstr "Cesta k Pluginm:"
+msgstr "Cesta k Pluginům:"
#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
-msgstr "Rzn"
+msgstr "Různé"
#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
-msgstr "Rzn"
+msgstr "Různé"
#: gui/options.cpp:1172
msgid "Theme:"
@@ -930,20 +938,20 @@ msgstr "Vzhled:"
#: gui/options.cpp:1176
msgid "GUI Renderer:"
-msgstr "GUI Vykreslova:"
+msgstr "GUI Vykreslovač:"
#: gui/options.cpp:1188
msgid "Autosave:"
-msgstr "Autoukldn:"
+msgstr "Autoukládání:"
#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
-msgstr "Autoukldn:"
+msgstr "Autoukládání:"
#: gui/options.cpp:1198
msgid "Keys"
-msgstr "Klvesy"
+msgstr "Klávesy"
#: gui/options.cpp:1205
msgid "GUI Language:"
@@ -955,58 +963,57 @@ msgstr "Jazyk GUI ScummVM"
#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Pro pouit tchto nastaven muste restartovat ScummVM."
+msgstr "Pro použití těchto nastavení musíte restartovat ScummVM."
#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
-msgstr "Do zvolenho adrese nelze zapisovat. Vyberte, prosm, jin."
+msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný."
#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
-msgstr "Vyberte adres pro vhledy GUI"
+msgstr "Vyberte adresář pro vhledy GUI"
#: gui/options.cpp:1403
msgid "Select directory for extra files"
-msgstr "Vyberte adres pro dodaten soubory"
+msgstr "Vyberte adresář pro dodatečné soubory"
#: gui/options.cpp:1414
msgid "Select directory for plugins"
-msgstr "Vyberte adres pro zsuvn moduly"
+msgstr "Vyberte adresář pro zásuvné moduly"
#: gui/options.cpp:1467
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."
msgstr ""
-"Vzhled, kter jste zvolili, nepodporuje V souasn jazyk. Pokud chcete "
-"tento vzhled pout, muste nejdve pepnout na jin jazyk."
+"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete "
+"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk."
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
-msgstr ""
+msgstr "# další"
#: gui/predictivedialog.cpp:88
msgid "add"
-msgstr ""
+msgstr "přidat"
#: gui/predictivedialog.cpp:92
-#, fuzzy
msgid "Delete char"
-msgstr "Smazat"
+msgstr "Smazat znak"
#: gui/predictivedialog.cpp:96
msgid "<"
-msgstr ""
+msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
-msgstr ""
+msgstr "* Prediktivní"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr "Nahrvat nebo pehrt hru"
+msgstr "Nahrávat nebo přehrát hru"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -1015,11 +1022,11 @@ msgstr "Smazat"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr "Nahrt"
+msgstr "Nahrát"
#: gui/recorderdialog.cpp:72
msgid "Playback"
-msgstr "Pehrt"
+msgstr "Přehrát"
#: gui/recorderdialog.cpp:74
msgid "Edit"
@@ -1033,16 +1040,15 @@ msgstr "Autor:"
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr "Poznmky:"
+msgstr "Poznámky:"
#: gui/recorderdialog.cpp:155
msgid "Do you really want to delete this record?"
-msgstr "Opravdu chcete tento zznam smazat?"
+msgstr "Opravdu chcete tento záznam smazat?"
#: gui/recorderdialog.cpp:174
-#, fuzzy
msgid "Unknown Author"
-msgstr "Neznm chyba"
+msgstr "Neznámý autor"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1050,23 +1056,23 @@ msgstr "Seznam"
#: gui/saveload-dialog.cpp:168
msgid "Grid view"
-msgstr "Mka"
+msgstr "Mřížka"
#: gui/saveload-dialog.cpp:211 gui/saveload-dialog.cpp:360
msgid "No date saved"
-msgstr "Neuloena dn data"
+msgstr "Neuložena žádná data"
#: gui/saveload-dialog.cpp:212 gui/saveload-dialog.cpp:361
msgid "No time saved"
-msgstr "dn uloen as"
+msgstr "Žádný uložený čas"
#: gui/saveload-dialog.cpp:213 gui/saveload-dialog.cpp:362
msgid "No playtime saved"
-msgstr "dn uloen doba hran"
+msgstr "Žádná uložená doba hraní"
#: gui/saveload-dialog.cpp:275
msgid "Do you really want to delete this saved game?"
-msgstr "Opravdu chcete tuto uloenou hru vymazat"
+msgstr "Opravdu chcete tuto uloženou hru vymazat"
#: gui/saveload-dialog.cpp:385 gui/saveload-dialog.cpp:884
msgid "Date: "
@@ -1074,35 +1080,35 @@ msgstr "Datum:"
#: gui/saveload-dialog.cpp:389 gui/saveload-dialog.cpp:890
msgid "Time: "
-msgstr "as:"
+msgstr "Čas:"
#: gui/saveload-dialog.cpp:395 gui/saveload-dialog.cpp:898
msgid "Playtime: "
-msgstr "Doba hran:"
+msgstr "Doba hraní:"
#: gui/saveload-dialog.cpp:408 gui/saveload-dialog.cpp:496
msgid "Untitled savestate"
-msgstr "Bezejmenn uloen stav"
+msgstr "Bezejmenný uložený stav"
#: gui/saveload-dialog.cpp:548
msgid "Next"
-msgstr "Dal"
+msgstr "Další"
#: gui/saveload-dialog.cpp:551
msgid "Prev"
-msgstr "Pedchoz"
+msgstr "Předchozí"
#: gui/saveload-dialog.cpp:748
msgid "New Save"
-msgstr "Nov uloen pozice"
+msgstr "Nová uložená pozice"
#: gui/saveload-dialog.cpp:748
msgid "Create a new save game"
-msgstr "Vytvoit novou uloenou hru."
+msgstr "Vytvořit novou uloženou hru."
#: gui/saveload-dialog.cpp:877
msgid "Name: "
-msgstr "Nzev:"
+msgstr "Název:"
#: gui/saveload-dialog.cpp:949
#, c-format
@@ -1115,32 +1121,32 @@ msgstr "Vyberte Vzhled"
#: gui/ThemeEngine.cpp:347
msgid "Disabled GFX"
-msgstr "GFX zakzno"
+msgstr "GFX zakázáno"
#: gui/ThemeEngine.cpp:347
msgctxt "lowres"
msgid "Disabled GFX"
-msgstr "GFX zakzno"
+msgstr "GFX zakázáno"
#: gui/ThemeEngine.cpp:348
msgid "Standard Renderer"
-msgstr "Standardn Vykreslova"
+msgstr "Standardní Vykreslovač"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
-msgstr "Standardn"
+msgstr "Standardní"
#: gui/ThemeEngine.cpp:350
msgid "Antialiased Renderer"
-msgstr "Vykreslova s vyhlazenmi hranami"
+msgstr "Vykreslovač s vyhlazenými hranami"
#: gui/ThemeEngine.cpp:350
msgid "Antialiased"
-msgstr "S vyhlazenmi hranami"
+msgstr "S vyhlazenými hranami"
#: gui/widget.cpp:323 gui/widget.cpp:325 gui/widget.cpp:331 gui/widget.cpp:333
msgid "Clear value"
-msgstr "Vyistit hodnotu"
+msgstr "Vyčistit hodnotu"
#: gui/fluidsynth-dialog.cpp:68
msgid "Reverb"
@@ -1148,23 +1154,23 @@ msgstr "Dozvuk"
#: gui/fluidsynth-dialog.cpp:70 gui/fluidsynth-dialog.cpp:102
msgid "Active"
-msgstr "Aktivn"
+msgstr "Aktivní"
#: gui/fluidsynth-dialog.cpp:72
msgid "Room:"
-msgstr "Mstnost:"
+msgstr "Místnost:"
#: gui/fluidsynth-dialog.cpp:79
msgid "Damp:"
-msgstr "Tlumen:"
+msgstr "Tlumení:"
#: gui/fluidsynth-dialog.cpp:86
msgid "Width:"
-msgstr "ka:"
+msgstr "Šířka:"
#: gui/fluidsynth-dialog.cpp:93 gui/fluidsynth-dialog.cpp:111
msgid "Level:"
-msgstr "rove:"
+msgstr "Úroveň:"
#: gui/fluidsynth-dialog.cpp:100
msgid "Chorus"
@@ -1192,7 +1198,7 @@ msgstr "Sinus"
#: gui/fluidsynth-dialog.cpp:136
msgid "Triangle"
-msgstr "Trojhrlnk"
+msgstr "Trojúhrlník"
#: gui/fluidsynth-dialog.cpp:140
msgid "Interpolation:"
@@ -1200,19 +1206,19 @@ msgstr "Interpolace:"
#: gui/fluidsynth-dialog.cpp:143
msgid "None (fastest)"
-msgstr "dn (Nejrychlej)"
+msgstr "Žádná (Nejrychlejší)"
#: gui/fluidsynth-dialog.cpp:144
msgid "Linear"
-msgstr "Linern"
+msgstr "Lineární"
#: gui/fluidsynth-dialog.cpp:145
msgid "Fourth-order"
-msgstr "Interpolace tvrtho du"
+msgstr "Interpolace čtvrtého řádu"
#: gui/fluidsynth-dialog.cpp:146
msgid "Seventh-order"
-msgstr "Interpolace sedmho du"
+msgstr "Interpolace sedmého řádu"
#: gui/fluidsynth-dialog.cpp:150
msgid "Reset"
@@ -1220,19 +1226,19 @@ msgstr "Resetovat"
#: gui/fluidsynth-dialog.cpp:150
msgid "Reset all FluidSynth settings to their default values."
-msgstr "Resetovat veker nastaven FludSynth n ajejich vchoz hodnoty."
+msgstr "Resetovat veškerá nastavení FludSynth n ajejich výchozí hodnoty."
#: gui/fluidsynth-dialog.cpp:217
msgid ""
"Do you really want to reset all FluidSynth settings to their default values?"
msgstr ""
-"Opravdu chcete resetovat veker nastaven FluidSynth na jejich vchoz "
+"Opravdu chcete resetovat veškerá nastavení FluidSynth na jejich výchozí "
"hodnoty?"
#: base/main.cpp:228
#, c-format
msgid "Engine does not support debug level '%s'"
-msgstr "Jdro nepodporuje rove ladn '%s'"
+msgstr "Jádro nepodporuje úroveň ladění '%s'"
#: base/main.cpp:306
msgid "Menu"
@@ -1242,7 +1248,7 @@ msgstr "Menu"
#: backends/platform/wince/CEActionsPocket.cpp:45
#: backends/platform/wince/CEActionsSmartphone.cpp:46
msgid "Skip"
-msgstr "Peskoit"
+msgstr "Přeskočit"
#: base/main.cpp:312 backends/platform/symbian/src/SymbianActions.cpp:50
#: backends/platform/wince/CEActionsPocket.cpp:42
@@ -1251,19 +1257,19 @@ msgstr "Pauza"
#: base/main.cpp:315
msgid "Skip line"
-msgstr "Peskoit dek"
+msgstr "Přeskočit řádek"
#: base/main.cpp:507
msgid "Error running game:"
-msgstr "Chyba pi sputn hry:"
+msgstr "Chyba při spuštění hry:"
#: base/main.cpp:554
msgid "Could not find any engine capable of running the selected game"
-msgstr "Nelze nalzt dn jdro schopn vybranou hru spustit"
+msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit"
#: common/error.cpp:38
msgid "No error"
-msgstr "dn chyba"
+msgstr "Žádná chyba"
#: common/error.cpp:40
msgid "Game data not found"
@@ -1271,19 +1277,19 @@ msgstr "Data hry nenalezena"
#: common/error.cpp:42
msgid "Game id not supported"
-msgstr "Id hry nen podporovno"
+msgstr "Id hry není podporováno"
#: common/error.cpp:44
msgid "Unsupported color mode"
-msgstr "Nepodporovan barevn reim"
+msgstr "Nepodporovaný barevný režim"
#: common/error.cpp:47
msgid "Read permission denied"
-msgstr "Oprvnn ke ten zamtnuto"
+msgstr "Oprávnění ke čtení zamítnuto"
#: common/error.cpp:49
msgid "Write permission denied"
-msgstr "Oprvnn k zpisu zamtnuto"
+msgstr "Oprávnění k zápisu zamítnuto"
#: common/error.cpp:52
msgid "Path does not exist"
@@ -1291,64 +1297,64 @@ msgstr "Cesta neexistuje"
#: common/error.cpp:54
msgid "Path not a directory"
-msgstr "Cesta nen adres"
+msgstr "Cesta není adresář"
#: common/error.cpp:56
msgid "Path not a file"
-msgstr "Cesta nen soubor"
+msgstr "Cesta není soubor"
#: common/error.cpp:59
msgid "Cannot create file"
-msgstr "Nelze vytvoit soubor"
+msgstr "Nelze vytvořit soubor"
#: common/error.cpp:61
msgid "Reading data failed"
-msgstr "ten dat selhalo"
+msgstr "Čtení dat selhalo"
#: common/error.cpp:63
msgid "Writing data failed"
-msgstr "Zpis dat selhal"
+msgstr "Zápis dat selhal"
#: common/error.cpp:66
msgid "Could not find suitable engine plugin"
-msgstr "Nelze nalzt vhodn zs. modul jdra"
+msgstr "Nelze nalézt vhodný zás. modul jádra"
#: common/error.cpp:68
msgid "Engine plugin does not support save states"
-msgstr "Zs. modul jdra nepodporuje uloen stavy"
+msgstr "Zás. modul jádra nepodporuje uložené stavy"
#: common/error.cpp:71
msgid "User canceled"
-msgstr "Zrueno uivatelem"
+msgstr "Zrušeno uživatelem"
#: common/error.cpp:75
msgid "Unknown error"
-msgstr "Neznm chyba"
+msgstr "Neznámá chyba"
#: engines/advancedDetector.cpp:317
#, c-format
msgid "The game in '%s' seems to be unknown."
-msgstr "Hra v '%s' se zd bt neznm."
+msgstr "Hra v '%s' se zdá být neznámá."
#: engines/advancedDetector.cpp:318
msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Prosm nahlaste nsledujc data tmu ScummVM spolu se jmnem"
+msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem"
#: engines/advancedDetector.cpp:320
msgid "of the game you tried to add and its version/language/etc.:"
-msgstr "hry, kterou jste se pokusili pidat a jej verzi/jazyk/atd.:"
+msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:"
#: engines/dialogs.cpp:85
msgid "~R~esume"
-msgstr "~P~okraovat"
+msgstr "~P~okračovat"
#: engines/dialogs.cpp:87
msgid "~L~oad"
-msgstr "~N~ahrt"
+msgstr "~N~ahrát"
#: engines/dialogs.cpp:91
msgid "~S~ave"
-msgstr "~U~loit"
+msgstr "~U~ložit"
#: engines/dialogs.cpp:95
msgid "~O~ptions"
@@ -1356,7 +1362,7 @@ msgstr "~V~olby"
#: engines/dialogs.cpp:100
msgid "~H~elp"
-msgstr "~N~povda"
+msgstr "~N~ápověda"
#: engines/dialogs.cpp:102
msgid "~A~bout"
@@ -1364,20 +1370,20 @@ msgstr "~O~ programu"
#: engines/dialogs.cpp:105 engines/dialogs.cpp:181
msgid "~R~eturn to Launcher"
-msgstr "~N~vrat do Spoute"
+msgstr "~N~ávrat do Spouštěče"
#: engines/dialogs.cpp:107 engines/dialogs.cpp:183
msgctxt "lowres"
msgid "~R~eturn to Launcher"
-msgstr "~N~vrat do Spoute"
+msgstr "~N~ávrat do Spouštěče"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
-msgstr "Uloit hru:"
+msgstr "Uložit hru:"
#: engines/dialogs.cpp:116 backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
@@ -1386,11 +1392,11 @@ msgstr "Uloit hru:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
-msgstr "Uloit"
+msgstr "Uložit"
#: engines/dialogs.cpp:145
msgid ""
@@ -1398,9 +1404,9 @@ msgid ""
"the README for basic information, and for instructions on how to obtain "
"further assistance."
msgstr ""
-"Je nm lto, ale toto jdro v souasnosti nepodporuje hern npovdu. Prosm "
-"prohldnte si README pro zkladn informace a pro instrukce jak zskat "
-"dal pomoc."
+"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím "
+"prohlédněte si README pro základní informace a pro instrukce jak získat "
+"další pomoc."
#: engines/dialogs.cpp:234 engines/pegasus/pegasus.cpp:393
#, c-format
@@ -1408,8 +1414,8 @@ msgid ""
"Gamestate save failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Uloen stavu hry selhalo (%s)! Prosm pette si dokumentaci pro zkladn "
-"informace a pokyny k zskn dal podpory."
+"Uložení stavu hry selhalo (%s)! Prosím přečtěte si dokumentaci pro základní "
+"informace a pokyny k získání další podpory."
#: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:109
#: engines/mohawk/dialogs.cpp:170 engines/tsage/dialogs.cpp:106
@@ -1419,27 +1425,27 @@ msgstr "~O~K"
#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110
#: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107
msgid "~C~ancel"
-msgstr "~Z~ruit"
+msgstr "~Z~rušit"
#: engines/dialogs.cpp:311
msgid "~K~eys"
-msgstr "~K~lvesy"
+msgstr "~K~lávesy"
#: engines/engine.cpp:276
msgid "Could not initialize color format."
-msgstr "Nelze zavst barevn formt."
+msgstr "Nelze zavést barevný formát."
#: engines/engine.cpp:284
msgid "Could not switch to video mode: '"
-msgstr "Nelze pepnout na reim obrazu: '"
+msgstr "Nelze přepnout na režim obrazu: '"
#: engines/engine.cpp:293
msgid "Could not apply aspect ratio setting."
-msgstr "Nelze pout nastaven pomru stran."
+msgstr "Nelze použít nastavení poměru stran."
#: engines/engine.cpp:298
msgid "Could not apply fullscreen setting."
-msgstr "Nelze pout nastaven cel obrazovky."
+msgstr "Nelze použít nastavení celé obrazovky."
#: engines/engine.cpp:398
msgid ""
@@ -1449,11 +1455,11 @@ msgid ""
"the data files to your hard disk instead.\n"
"See the README file for details."
msgstr ""
-"Vypad to, e tuto hru hrajete pmo z\n"
-" CD. Je znmo, e toto zpsobuje problmy\n"
-" a je tedy doporueno, a msto toho zkoprujete\n"
-"datov soubory na V pevn disk.\n"
-"Pro podrobnosti si pette README."
+"Vypadá to, že tuto hru hrajete přímo z\n"
+" CD. Je známo, že toto způsobuje problémy\n"
+" a je tedy doporučeno, ať místo toho zkopírujete\n"
+"datové soubory na Váš pevný disk.\n"
+"Pro podrobnosti si přečtěte README."
#: engines/engine.cpp:409
msgid ""
@@ -1463,11 +1469,11 @@ msgid ""
"order to listen to the game's music.\n"
"See the README file for details."
msgstr ""
-"Tato hra m na svm disku zvukov stopy. Tyto\n"
-"stopy mus bt z disku zkoprovny pouitm\n"
-"vhodnho nstroje pro extrakci zvuku z CD,\n"
-"abyste mohli poslouchat hudbu ve he.\n"
-"Pro podrobnosti si pette README."
+"Tato hra má na svém disku zvukové stopy. Tyto\n"
+"stopy musí být z disku zkopírovány použitím\n"
+"vhodného nástroje pro extrakci zvuku z CD,\n"
+"abyste mohli poslouchat hudbu ve hře.\n"
+"Pro podrobnosti si přečtěte README."
#: engines/engine.cpp:467
#, c-format
@@ -1475,8 +1481,8 @@ msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Naten stavu hry selhalo (%s)! Prosm pette si dokumentaci pro zkladn "
-"informace a pokyny k zskn dal podpory."
+"Načtení stavu hry selhalo (%s)! Prosím přečtěte si dokumentaci pro základní "
+"informace a pokyny k získání další podpory."
#: engines/engine.cpp:480
msgid ""
@@ -1484,25 +1490,25 @@ msgid ""
"ScummVM. As such, it is likely to be unstable, and any saves you make might "
"not work in future versions of ScummVM."
msgstr ""
-"VAROVN: Hra, kterou se chystte spustit, nen jet pln podporovna "
-"ScummVM. Proto je mon, e bude nestabiln a jakkoli uloen hry nemus "
-"fungovat v budoucch verzch ScummVM."
+"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována "
+"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí "
+"fungovat v budoucích verzích ScummVM."
#: engines/engine.cpp:483
msgid "Start anyway"
-msgstr "Pesto spustit"
+msgstr "Přesto spustit"
#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
-msgstr "MAME OPL Emultor"
+msgstr "MAME OPL Emulátor"
#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
-msgstr "DOSBox OPL Emultor"
+msgstr "DOSBox OPL Emulátor"
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
-msgstr ""
+msgstr "ALSA Přímá FM"
#: audio/mididrv.cpp:209
#, c-format
@@ -1510,13 +1516,13 @@ msgid ""
"The selected audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"Zvolen zvukov zazen '%s' nebylo nalezeno (nap. me bt vypnuto nebo "
+"Zvolené zvukové zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
"odpojeno)."
#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257
#: audio/mididrv.cpp:272
msgid "Attempting to fall back to the next available device..."
-msgstr "Pokus o navrcen na nejbli dostupn zazen..."
+msgstr "Pokus o navrácení na nejbližší dostupné zařízení..."
#: audio/mididrv.cpp:221
#, c-format
@@ -1524,8 +1530,8 @@ msgid ""
"The selected audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
-"Zvolen zvukov zazen '%s' nelze pout. Podvejte se na zznam pro vce "
-"informac."
+"Zvolené zvukové zařízení '%s' nelze použít. Podívejte se na záznam pro více "
+"informací."
#: audio/mididrv.cpp:257
#, c-format
@@ -1533,7 +1539,7 @@ msgid ""
"The preferred audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"Upednostovan zvukov zazen '%s' nebylo nalezeno (nap. me bt "
+"Upřednostňované zvukové zařízení '%s' nebylo nalezeno (např. může být "
"vypnuto nebo odpojeno)."
#: audio/mididrv.cpp:272
@@ -1542,8 +1548,8 @@ msgid ""
"The preferred audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
-"Upednostovan zvukov zazen '%s' nelze pout. Podvejte se na zznam "
-"pro vce informac."
+"Upřednostňované zvukové zařízení '%s' nelze použít. Podívejte se na záznam "
+"pro více informací."
#: audio/null.h:44
msgid "No music"
@@ -1551,55 +1557,55 @@ msgstr "Bez hudby"
#: audio/mods/paula.cpp:196
msgid "Amiga Audio Emulator"
-msgstr "Emultor zvuku Amiga"
+msgstr "Emulátor zvuku Amiga"
#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
-msgstr "AdLib Emultor"
+msgstr "AdLib Emulátor"
#: audio/softsynth/appleiigs.cpp:33
msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Apple II GS Emultor (NEN ZAVEDEN)"
+msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)"
#: audio/softsynth/sid.cpp:1430
msgid "C64 Audio Emulator"
-msgstr "Emultor zvuku C64"
+msgstr "Emulátor zvuku C64"
#: audio/softsynth/mt32.cpp:200
msgid "Initializing MT-32 Emulator"
-msgstr "Zavdm MT-32 Emultor"
+msgstr "Zavádím MT-32 Emulátor"
#: audio/softsynth/mt32.cpp:426
msgid "MT-32 Emulator"
-msgstr "MT-32 Emultor"
+msgstr "MT-32 Emulátor"
#: audio/softsynth/pcspk.cpp:139
msgid "PC Speaker Emulator"
-msgstr "PC Speaker Emultor"
+msgstr "PC Speaker Emulátor"
#: audio/softsynth/pcspk.cpp:158
msgid "IBM PCjr Emulator"
-msgstr "IBM PCjr Emultor"
+msgstr "IBM PCjr Emulátor"
#: backends/keymapper/remap-dialog.cpp:48
msgid "Keymap:"
-msgstr "Mapa Klves:"
+msgstr "Mapa Kláves:"
#: backends/keymapper/remap-dialog.cpp:67
msgid " (Effective)"
-msgstr " (Aktivn)"
+msgstr " (Aktivní)"
#: backends/keymapper/remap-dialog.cpp:107
msgid " (Active)"
-msgstr "(Aktivn)"
+msgstr "(Aktivní)"
#: backends/keymapper/remap-dialog.cpp:107
msgid " (Blocked)"
-msgstr " (Blokovno)"
+msgstr " (Blokováno)"
#: backends/keymapper/remap-dialog.cpp:120
msgid " (Global)"
-msgstr "(Globln)"
+msgstr "(Globální)"
#: backends/keymapper/remap-dialog.cpp:128
msgid " (Game)"
@@ -1612,43 +1618,43 @@ msgstr "Windows MIDI"
#: backends/platform/ds/arm9/source/dsoptions.cpp:56
#: engines/scumm/dialogs.cpp:291
msgid "~C~lose"
-msgstr "~Z~avt"
+msgstr "~Z~avřít"
#: backends/platform/ds/arm9/source/dsoptions.cpp:57
msgid "ScummVM Main Menu"
-msgstr "Hlavn Menu ScummVM"
+msgstr "Hlavní Menu ScummVM"
#: backends/platform/ds/arm9/source/dsoptions.cpp:63
msgid "~L~eft handed mode"
-msgstr "~R~eim pro levky"
+msgstr "~R~ežim pro leváky"
#: backends/platform/ds/arm9/source/dsoptions.cpp:64
msgid "~I~ndy fight controls"
-msgstr "~O~vldn Indyho boje"
+msgstr "~O~vládání Indyho boje"
#: backends/platform/ds/arm9/source/dsoptions.cpp:65
msgid "Show mouse cursor"
-msgstr "Zobrazit kurzor myi"
+msgstr "Zobrazit kurzor myši"
#: backends/platform/ds/arm9/source/dsoptions.cpp:66
msgid "Snap to edges"
-msgstr "Pichytit k okrajm"
+msgstr "Přichytit k okrajům"
#: backends/platform/ds/arm9/source/dsoptions.cpp:68
msgid "Touch X Offset"
-msgstr "Dotykov vyrovnni na ose X"
+msgstr "Dotykové vyrovnáni na ose X"
#: backends/platform/ds/arm9/source/dsoptions.cpp:75
msgid "Touch Y Offset"
-msgstr "Dotykov vyrovnni na ose Y"
+msgstr "Dotykové vyrovnáni na ose Y"
#: backends/platform/ds/arm9/source/dsoptions.cpp:87
msgid "Use laptop trackpad-style cursor control"
-msgstr "Pout styl kontroly kurzoru jako u ovldac poduky laptopu"
+msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu"
#: backends/platform/ds/arm9/source/dsoptions.cpp:88
msgid "Tap for left click, double tap right click"
-msgstr "uknte pro lev kliknut, dvakrt pro prav kliknut"
+msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí"
#: backends/platform/ds/arm9/source/dsoptions.cpp:90
msgid "Sensitivity"
@@ -1656,23 +1662,23 @@ msgstr "Citlivost"
#: backends/platform/ds/arm9/source/dsoptions.cpp:99
msgid "Initial top screen scale:"
-msgstr "Poten zmna velikosti horn obrazovky:"
+msgstr "Počáteční změna velikosti horní obrazovky:"
#: backends/platform/ds/arm9/source/dsoptions.cpp:105
msgid "Main screen scaling:"
-msgstr "Zmna velikosti hlavn obrazovky:"
+msgstr "Změna velikosti hlavní obrazovky:"
#: backends/platform/ds/arm9/source/dsoptions.cpp:107
msgid "Hardware scale (fast, but low quality)"
-msgstr "Hardwarov zmna velikosti (rychl, ale nzk kvalita)"
+msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)"
#: backends/platform/ds/arm9/source/dsoptions.cpp:108
msgid "Software scale (good quality, but slower)"
-msgstr "Softwarov zmna velikosti (dobr kvalita, ale pomalej)"
+msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)"
#: backends/platform/ds/arm9/source/dsoptions.cpp:109
msgid "Unscaled (you must scroll left and right)"
-msgstr "Beze zmny velikosti (muste posunovat doleva a doprava)"
+msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)"
#: backends/platform/ds/arm9/source/dsoptions.cpp:111
msgid "Brightness:"
@@ -1680,31 +1686,31 @@ msgstr "Jas:"
#: backends/platform/ds/arm9/source/dsoptions.cpp:121
msgid "High quality audio (slower) (reboot)"
-msgstr "Vysok kvalita zvuku (pomalej) (restart) "
+msgstr "Vysoká kvalita zvuku (pomalejší) (restart) "
#: backends/platform/ds/arm9/source/dsoptions.cpp:122
msgid "Disable power off"
-msgstr "Zakzat vypnut"
+msgstr "Zakázat vypnutí"
#: backends/platform/iphone/osys_events.cpp:300
msgid "Mouse-click-and-drag mode enabled."
-msgstr "Reim pethnut myi zapnut."
+msgstr "Režim přetáhnutí myši zapnut."
#: backends/platform/iphone/osys_events.cpp:302
msgid "Mouse-click-and-drag mode disabled."
-msgstr "Reim pethnut myi vypnut."
+msgstr "Režim přetáhnutí myši vypnut."
#: backends/platform/iphone/osys_events.cpp:313
msgid "Touchpad mode enabled."
-msgstr "Touchpad reim zapnut"
+msgstr "Touchpad režim zapnut"
#: backends/platform/iphone/osys_events.cpp:315
msgid "Touchpad mode disabled."
-msgstr "Touchpad reim vypnut"
+msgstr "Touchpad režim vypnut"
#: backends/platform/maemo/maemo.cpp:208
msgid "Click Mode"
-msgstr "Reim kliknut"
+msgstr "Režim kliknutí"
#: backends/platform/maemo/maemo.cpp:214
#: backends/platform/symbian/src/SymbianActions.cpp:42
@@ -1712,72 +1718,72 @@ msgstr "Reim kliknut"
#: backends/platform/wince/CEActionsSmartphone.cpp:43
#: backends/platform/tizen/form.cpp:275
msgid "Left Click"
-msgstr "Lev Kliknut"
+msgstr "Levé Kliknutí"
#: backends/platform/maemo/maemo.cpp:217
msgid "Middle Click"
-msgstr "Kliknut prostednm tlatkem"
+msgstr "Kliknutí prostředním tlačítkem"
#: backends/platform/maemo/maemo.cpp:220
#: backends/platform/symbian/src/SymbianActions.cpp:43
#: backends/platform/wince/CEActionsSmartphone.cpp:44
#: backends/platform/tizen/form.cpp:267
msgid "Right Click"
-msgstr "Prav kliknut"
+msgstr "Pravé kliknutí"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
-msgstr "Skrt ScummVM"
+msgstr "Skrýt ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
-msgstr "Skrt Ostatn"
+msgstr "Skrýt Ostatní"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
-msgstr "Zobrazit Ve"
+msgstr "Zobrazit Vše"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Okno"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimalizovat"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
-msgstr "Normln (bez zmny velikosti)"
+msgstr "Normální (bez změny velikosti)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
-msgstr "Normln (bez zmny velikosti)"
+msgstr "Normální (bez změny velikosti)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
-msgstr "Povolena korekce pomru stran"
+msgstr "Povolena korekce poměru stran"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
-msgstr "Zakzna korekce pomru stran"
+msgstr "Zakázána korekce poměru stran"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
-msgstr "Aktivn grafick filtr:"
+msgstr "Aktivní grafický filtr:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
-msgstr "Reim do okna"
+msgstr "Režim do okna"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
-msgstr "OpenGL (bez filtrovn)"
+msgstr "OpenGL (bez filtrování)"
#: backends/platform/symbian/src/SymbianActions.cpp:38
#: backends/platform/wince/CEActionsSmartphone.cpp:39
@@ -1787,7 +1793,7 @@ msgstr "Nahoru"
#: backends/platform/symbian/src/SymbianActions.cpp:39
#: backends/platform/wince/CEActionsSmartphone.cpp:40
msgid "Down"
-msgstr "Dol"
+msgstr "Dolů"
#: backends/platform/symbian/src/SymbianActions.cpp:40
#: backends/platform/wince/CEActionsSmartphone.cpp:41
@@ -1812,44 +1818,43 @@ msgstr "Multi Funkce"
#: backends/platform/symbian/src/SymbianActions.cpp:48
msgid "Swap character"
-msgstr "Zamnit znaky"
+msgstr "Zaměnit znaky"
#: backends/platform/symbian/src/SymbianActions.cpp:49
msgid "Skip text"
-msgstr "Peskoit text"
+msgstr "Přeskočit text"
#: backends/platform/symbian/src/SymbianActions.cpp:51
msgid "Fast mode"
-msgstr "Rychl reim"
+msgstr "Rychlý režim"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218
-#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
-#: engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
+#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
msgid "Quit"
-msgstr "Ukonit"
+msgstr "Ukončit"
#: backends/platform/symbian/src/SymbianActions.cpp:53
msgid "Debugger"
-msgstr "Ladc program"
+msgstr "Ladící program"
#: backends/platform/symbian/src/SymbianActions.cpp:54
msgid "Global menu"
-msgstr "Globln menu"
+msgstr "Globální menu"
#: backends/platform/symbian/src/SymbianActions.cpp:55
msgid "Virtual keyboard"
-msgstr "Virtuln klvesnice"
+msgstr "Virtuální klávesnice"
#: backends/platform/symbian/src/SymbianActions.cpp:56
msgid "Key mapper"
-msgstr "Mapova klves"
+msgstr "Mapovač kláves"
#: backends/events/symbiansdl/symbiansdl-events.cpp:186
msgid "Do you want to quit ?"
-msgstr "Chcete ukonit ?"
+msgstr "Chcete ukončit ?"
#: backends/platform/wii/options.cpp:51
msgid "Video"
@@ -1857,19 +1862,19 @@ msgstr "Video"
#: backends/platform/wii/options.cpp:54
msgid "Current video mode:"
-msgstr "Souasn reim obrazu:"
+msgstr "Současný režim obrazu:"
#: backends/platform/wii/options.cpp:56
msgid "Double-strike"
-msgstr "Dvojit pekrtnut"
+msgstr "Dvojité přeškrtnutí"
#: backends/platform/wii/options.cpp:60
msgid "Horizontal underscan:"
-msgstr "Horizontln zmenen"
+msgstr "Horizontální zmenšení"
#: backends/platform/wii/options.cpp:66
msgid "Vertical underscan:"
-msgstr "Vertikln zmenen"
+msgstr "Vertikální zmenšení"
#: backends/platform/wii/options.cpp:71
msgid "Input"
@@ -1881,7 +1886,7 @@ msgstr "Citlivost GC Padu"
#: backends/platform/wii/options.cpp:80
msgid "GC Pad acceleration:"
-msgstr "Zrychlen GC Padu"
+msgstr "Zrychlení GC Padu"
#: backends/platform/wii/options.cpp:86
msgid "DVD"
@@ -1893,11 +1898,11 @@ msgstr "Stav:"
#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
msgid "Unknown"
-msgstr "Neznm"
+msgstr "Neznámé"
#: backends/platform/wii/options.cpp:93
msgid "Mount DVD"
-msgstr "Pipojit DVD"
+msgstr "Připojit DVD"
#: backends/platform/wii/options.cpp:94
msgid "Unmount DVD"
@@ -1913,11 +1918,11 @@ msgstr "Server:"
#: backends/platform/wii/options.cpp:110
msgid "Share:"
-msgstr "Sdlen:"
+msgstr "Sdílení:"
#: backends/platform/wii/options.cpp:114
msgid "Username:"
-msgstr "Uivatelsk jmno"
+msgstr "Uživatelské jméno"
#: backends/platform/wii/options.cpp:118
msgid "Password:"
@@ -1925,11 +1930,11 @@ msgstr "Heslo"
#: backends/platform/wii/options.cpp:121
msgid "Init network"
-msgstr "Spustit s"
+msgstr "Spustit síť"
#: backends/platform/wii/options.cpp:123
msgid "Mount SMB"
-msgstr "Pipojit SMB"
+msgstr "Připojit SMB"
#: backends/platform/wii/options.cpp:124
msgid "Unmount SMB"
@@ -1937,56 +1942,56 @@ msgstr "Odpojit SMB"
#: backends/platform/wii/options.cpp:143
msgid "DVD Mounted successfully"
-msgstr "DVD spn pipojeno"
+msgstr "DVD úspěšně připojeno"
#: backends/platform/wii/options.cpp:146
msgid "Error while mounting the DVD"
-msgstr "Chyba pi pipojovn DVD"
+msgstr "Chyba při připojování DVD"
#: backends/platform/wii/options.cpp:148
msgid "DVD not mounted"
-msgstr "DVD nepipojeno"
+msgstr "DVD nepřipojeno"
#: backends/platform/wii/options.cpp:161
msgid "Network up, share mounted"
-msgstr "S je zapnuta, sdlen pipojeno"
+msgstr "Síť je zapnuta, sdílení připojeno"
#: backends/platform/wii/options.cpp:163
msgid "Network up"
-msgstr "S je zapnuta"
+msgstr "Síť je zapnuta"
#: backends/platform/wii/options.cpp:166
msgid ", error while mounting the share"
-msgstr ", chyba pi pipojovn sdlen"
+msgstr ", chyba při připojování sdílení"
#: backends/platform/wii/options.cpp:168
msgid ", share not mounted"
-msgstr ", sdlen nen pipojeno"
+msgstr ", sdílení není připojeno"
#: backends/platform/wii/options.cpp:174
msgid "Network down"
-msgstr "S je nedostupn"
+msgstr "Síť je nedostupná"
#: backends/platform/wii/options.cpp:178
msgid "Initializing network"
-msgstr "Zavdm s"
+msgstr "Zavádím síť"
#: backends/platform/wii/options.cpp:182
msgid "Timeout while initializing network"
-msgstr "Pi zavdn st vyprel limit"
+msgstr "Při zavádění sítě vypršel limit"
#: backends/platform/wii/options.cpp:186
#, c-format
msgid "Network not initialized (%d)"
-msgstr "S nen zavedena (%d)"
+msgstr "Síť není zavedena (%d)"
#: backends/platform/wince/CEActionsPocket.cpp:46
msgid "Hide Toolbar"
-msgstr "Skrt Panel nstroj"
+msgstr "Skrýt Panel nástrojů"
#: backends/platform/wince/CEActionsPocket.cpp:47
msgid "Show Keyboard"
-msgstr "Zobrazit klvesnici"
+msgstr "Zobrazit klávesnici"
#: backends/platform/wince/CEActionsPocket.cpp:48
msgid "Sound on/off"
@@ -1994,66 +1999,66 @@ msgstr "Zvuk zapnout/vypnout"
#: backends/platform/wince/CEActionsPocket.cpp:49
msgid "Right click"
-msgstr "Prav kliknut"
+msgstr "Pravé kliknutí"
#: backends/platform/wince/CEActionsPocket.cpp:50
msgid "Show/Hide Cursor"
-msgstr "Ukzat/Skrt Kurzor"
+msgstr "Ukázat/Skrýt Kurzor"
#: backends/platform/wince/CEActionsPocket.cpp:51
msgid "Free look"
-msgstr "Rozhlen pomoc myi"
+msgstr "Rozhlížení pomocí myši"
#: backends/platform/wince/CEActionsPocket.cpp:52
msgid "Zoom up"
-msgstr "Piblen nahoru"
+msgstr "Přiblížení nahoru"
#: backends/platform/wince/CEActionsPocket.cpp:53
msgid "Zoom down"
-msgstr "Piblen dol"
+msgstr "Přiblížení dolů"
#: backends/platform/wince/CEActionsPocket.cpp:55
#: backends/platform/wince/CEActionsSmartphone.cpp:49
msgid "Bind Keys"
-msgstr "Piadit klvesy"
+msgstr "Přiřadit klávesy"
#: backends/platform/wince/CEActionsPocket.cpp:56
msgid "Cursor Up"
-msgstr "ipka Nahoru"
+msgstr "Šipka Nahoru"
#: backends/platform/wince/CEActionsPocket.cpp:57
msgid "Cursor Down"
-msgstr "ipka Dol"
+msgstr "Šipka Dolů"
#: backends/platform/wince/CEActionsPocket.cpp:58
msgid "Cursor Left"
-msgstr "ipka Doleva"
+msgstr "Šipka Doleva"
#: backends/platform/wince/CEActionsPocket.cpp:59
msgid "Cursor Right"
-msgstr "ipka Doprava"
+msgstr "Šipka Doprava"
#: backends/platform/wince/CEActionsPocket.cpp:267
#: backends/platform/wince/CEActionsSmartphone.cpp:231
msgid "Do you want to load or save the game?"
-msgstr "Chcete hru nahrt nebo uloit?"
+msgstr "Chcete hru nahrát nebo uložit?"
#: backends/platform/wince/CEActionsPocket.cpp:326
#: backends/platform/wince/CEActionsSmartphone.cpp:287
msgid " Are you sure you want to quit ? "
-msgstr " Jste si jisti, e chcete odejt ? "
+msgstr " Jste si jisti, že chcete odejít ? "
#: backends/platform/wince/CEActionsSmartphone.cpp:50
msgid "Keyboard"
-msgstr "Klvesnice"
+msgstr "Klávesnice"
#: backends/platform/wince/CEActionsSmartphone.cpp:51
msgid "Rotate"
-msgstr "Otet"
+msgstr "Otáčet"
#: backends/platform/wince/CELauncherDialog.cpp:56
msgid "Using SDL driver "
-msgstr "Pouv ovlada SDL"
+msgstr "Používá ovladač SDL"
#: backends/platform/wince/CELauncherDialog.cpp:60
msgid "Display "
@@ -2061,92 +2066,92 @@ msgstr "Displej"
#: backends/platform/wince/CELauncherDialog.cpp:83
msgid "Do you want to perform an automatic scan ?"
-msgstr "Chcete provst automatick hledn ?"
+msgstr "Chcete provést automatické hledání ?"
#: backends/platform/wince/wince-sdl.cpp:516
msgid "Map right click action"
-msgstr "Mapovat innost prav kliknut"
+msgstr "Mapovat činnost pravé kliknutí"
#: backends/platform/wince/wince-sdl.cpp:520
msgid "You must map a key to the 'Right Click' action to play this game"
msgstr ""
-"Muste namapovat klvesu pro innost 'Prav Kliknut', abyste tuto hru mohli "
-"hrt"
+"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli "
+"hrát"
#: backends/platform/wince/wince-sdl.cpp:529
msgid "Map hide toolbar action"
-msgstr "Mapovat innost skrt panel nstroj"
+msgstr "Mapovat činnost skrýt panel nástrojů"
#: backends/platform/wince/wince-sdl.cpp:533
msgid "You must map a key to the 'Hide toolbar' action to play this game"
msgstr ""
-"Muste namapovat klvesu pro innost 'Skrt Panel nstroj', abyste tuto hru "
-"mohli hrt"
+"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru "
+"mohli hrát"
#: backends/platform/wince/wince-sdl.cpp:542
msgid "Map Zoom Up action (optional)"
-msgstr "Namapovat innost Piblit Nahoru (nepovinn)"
+msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)"
#: backends/platform/wince/wince-sdl.cpp:545
msgid "Map Zoom Down action (optional)"
-msgstr "Namapovat innost Piblit Dol (nepovinn)"
+msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)"
#: backends/platform/wince/wince-sdl.cpp:553
msgid ""
"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
msgstr ""
-"Nezapomete namapovat klvesu k innosti 'Skrt Panel Nstroj, abyste "
-"vidli cel invent"
+"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste "
+"viděli celý inventář"
#: backends/events/default/default-events.cpp:196
msgid "Do you really want to return to the Launcher?"
-msgstr "Opravdu se chcete vrtit do Spoute?"
+msgstr "Opravdu se chcete vrátit do Spouštěče?"
#: backends/events/default/default-events.cpp:196
msgid "Launcher"
-msgstr "Spout"
+msgstr "Spouštěč"
#: backends/events/default/default-events.cpp:218
msgid "Do you really want to quit?"
-msgstr "Opravdu chcete skonit?"
+msgstr "Opravdu chcete skončit?"
#: backends/events/gph/gph-events.cpp:385
#: backends/events/gph/gph-events.cpp:428
#: backends/events/openpandora/op-events.cpp:168
msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr "'Reim uknut' Dotykov Obrazovky - Lev Kliknut"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí"
#: backends/events/gph/gph-events.cpp:387
#: backends/events/gph/gph-events.cpp:430
#: backends/events/openpandora/op-events.cpp:170
msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr "'Reim uknut' Dotykov Obrazovky - Prav Kliknut"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí"
#: backends/events/gph/gph-events.cpp:389
#: backends/events/gph/gph-events.cpp:432
#: backends/events/openpandora/op-events.cpp:172
msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr "'Reim uknut' Dotykov Obrazovky - Najet (Bez Kliknut)"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)"
#: backends/events/gph/gph-events.cpp:409
msgid "Maximum Volume"
-msgstr "Maximln Hlasitost"
+msgstr "Maximální Hlasitost"
#: backends/events/gph/gph-events.cpp:411
msgid "Increasing Volume"
-msgstr "Zvyuji Hlasitost"
+msgstr "Zvyšuji Hlasitost"
#: backends/events/gph/gph-events.cpp:417
msgid "Minimal Volume"
-msgstr "Minimln Hlasitost"
+msgstr "Minimální Hlasitost"
#: backends/events/gph/gph-events.cpp:419
msgid "Decreasing Volume"
-msgstr "Sniuji Hlasitost"
+msgstr "Snižuji Hlasitost"
#: backends/events/openpandora/op-events.cpp:174
msgid "Touchscreen 'Tap Mode' - Hover (DPad Clicks)"
-msgstr "'Reim uknut' Dotykov Obrazovky - Najet (Dpad klik)"
+msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Dpad kliká)"
#: backends/updates/macosx/macosx-updates.mm:67
msgid "Check for Updates..."
@@ -2154,7 +2159,7 @@ msgstr "Zkontrolovat Aktualizace..."
#: backends/platform/tizen/form.cpp:263
msgid "Right Click Once"
-msgstr "Prav kliknut jednou"
+msgstr "Pravé kliknutí jednou"
#: backends/platform/tizen/form.cpp:271
msgid "Move Only"
@@ -2162,7 +2167,7 @@ msgstr "Pouze Pohyb"
#: backends/platform/tizen/form.cpp:294
msgid "Escape Key"
-msgstr "Klvesa Escape"
+msgstr "Klávesa Escape"
#: backends/platform/tizen/form.cpp:299
msgid "Game Menu"
@@ -2170,64 +2175,64 @@ msgstr "Menu Hry"
#: backends/platform/tizen/form.cpp:304
msgid "Show Keypad"
-msgstr "Zobrazit Klvesnici"
+msgstr "Zobrazit Klávesnici"
#: backends/platform/tizen/form.cpp:309
msgid "Control Mouse"
-msgstr "Ovldn Myi"
+msgstr "Ovládání Myši"
#: backends/events/maemosdl/maemosdl-events.cpp:180
msgid "Clicking Enabled"
-msgstr "Kliknut Povoleno"
+msgstr "Kliknutí Povoleno"
#: backends/events/maemosdl/maemosdl-events.cpp:180
msgid "Clicking Disabled"
-msgstr "Kliknut Zakzno"
+msgstr "Kliknutí Zakázáno"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
-msgstr "Pout pvodn obrazovky naten/uloen"
+msgstr "Použít původní obrazovky načtení/uložení"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr "Pout pvodn obrazovky naten/uloen msto ze ScummVM"
+msgstr "Použít původní obrazovky načtení/uložení místo ze ScummVM"
#: engines/agi/detection.cpp:157
msgid "Use an alternative palette"
-msgstr "Pout jinou paletu"
+msgstr "Použít jinou paletu"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
-"Pout alternativn paletu, bn pro hry Amiga. Toto byl pvodn star "
+"Použít alternativní paletu, běžné pro hry Amiga. Toto byl původní starý "
"standard"
#: engines/agi/detection.cpp:167
msgid "Mouse support"
-msgstr "Podpora myi"
+msgstr "Podpora myši"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
-"Povol podporu myi. Umon pout my pro pohyb a pro ovldn hernch "
-"nabdek."
+"Povolí podporu myši. Umožní použít myš pro pohyb a pro ovládání herních "
+"nabídek."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Obnovit hru"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Obnovit"
@@ -2239,7 +2244,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Nahrn stavu hry selhalo ze souboru:\n"
+"Nahrání stavu hry selhalo ze souboru:\n"
"\n"
"%s"
@@ -2250,7 +2255,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Uloen stavu hry selhalo do souboru:\n"
+"Uložení stavu hry selhalo do souboru:\n"
"\n"
"%s"
@@ -2261,7 +2266,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Stav hry spn uloen do:\n"
+"Stav hry úspěšně uložen do:\n"
"\n"
"%s"
@@ -2272,11 +2277,11 @@ msgstr "Soubor videa '%s' nenalezen'"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
msgid "Color Blind Mode"
-msgstr "Reim pro barvoslep"
+msgstr "Režim pro barvoslepé"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr "Standardn zapnat reim pro barvoslep"
+msgstr "Standardně zapínat režim pro barvoslepé"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2288,31 +2293,31 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked again the next "
"time you start the game.\n"
msgstr ""
-"ScummVM zjistil, e mte star uloen pozice pro Drascula, kter by mly "
-"bt pevedeny.\n"
-"Star formt uloench her ji nen podporovn, take pokud je nepevedete, "
-"nebudete moci vae hry nast.\n"
+"ScummVM zjistil, že máte staré uložené pozice pro Drascula, které by měly "
+"být převedeny.\n"
+"Starý formát uložených her již není podporován, takže pokud je nepřevedete, "
+"nebudete moci vaše hry načíst.\n"
"\n"
-"Stisknte OK, abyste je pevedli te, jinak budete podni znovu, pi "
-"sputn tto hry.\n"
+"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
msgid "Use bright palette mode"
-msgstr "Pout reim jasn palety"
+msgstr "Použít režim jasné palety"
#: engines/dreamweb/detection.cpp:58
msgid "Display graphics using the game's bright palette"
-msgstr "Zobrazit grafiku pomoc jasn palety hry"
+msgstr "Zobrazit grafiku pomocí jasné palety hry"
#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470
#: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532
msgid "Failed to load game state from file."
-msgstr "Nelze nast stav hry ze souboru."
+msgstr "Nelze načíst stav hry ze souboru."
#: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263
#: engines/tinsel/saveload.cpp:545
msgid "Failed to save game state to file."
-msgstr "Nelze uloit stav hry do souboru."
+msgstr "Nelze uložit stav hry do souboru."
#: engines/gob/inter_v5.cpp:107
msgid "Failed to delete file."
@@ -2320,23 +2325,23 @@ msgstr "Nelze smazat soubor."
#: engines/groovie/detection.cpp:312
msgid "Fast movie speed"
-msgstr "Zven rychlost videa"
+msgstr "Zvýšená rychlost videa"
#: engines/groovie/detection.cpp:313
msgid "Play movies at an increased speed"
-msgstr "Pehrt videa se zvenou rychlost"
+msgstr "Přehrát videa se zvýšenou rychlostí"
#: engines/groovie/script.cpp:408
msgid "Failed to save game"
-msgstr "Nelze uloit hru."
+msgstr "Nelze uložit hru."
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr "Povolit nsiln scny"
+msgstr "Povolit násilné scény"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr "Povolit nsiln scny, jsou-li dostupn"
+msgstr "Povolit násilné scény, jsou-li dostupné"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2351,66 +2356,66 @@ msgstr "Povolit publikum ve studiu"
#. I18N: This option allows the user to skip text and cutscenes.
#: engines/kyra/detection.cpp:73
msgid "Skip support"
-msgstr "Podpora peskoen"
+msgstr "Podpora přeskočení"
#: engines/kyra/detection.cpp:74
msgid "Allow text and cutscenes to be skipped"
-msgstr "Umonit, aby text a videa mohly bt peskoeny"
+msgstr "Umožnit, aby text a videa mohly být přeskočeny"
#. I18N: Helium mode makes people sound like they've inhaled Helium.
#: engines/kyra/detection.cpp:84
msgid "Helium mode"
-msgstr "Hliov reim"
+msgstr "Héliový režim"
#: engines/kyra/detection.cpp:85
msgid "Enable helium mode"
-msgstr "Zapnout hliov reim"
+msgstr "Zapnout héliový režim"
#. I18N: When enabled, this option makes scrolling smoother when
#. changing from one screen to another.
#: engines/kyra/detection.cpp:99
msgid "Smooth scrolling"
-msgstr "Plynul posunovn"
+msgstr "Plynulé posunování"
#: engines/kyra/detection.cpp:100
msgid "Enable smooth scrolling when walking"
-msgstr "Povolit plynul posunovn pi chzi"
+msgstr "Povolit plynulé posunování při chůzi"
#. I18N: When enabled, this option changes the cursor when it floats to the
#. edge of the screen to a directional arrow. The player can then click to
#. walk towards that direction.
#: engines/kyra/detection.cpp:112
msgid "Floating cursors"
-msgstr "Plovouc kurzory"
+msgstr "Plovoucí kurzory"
#: engines/kyra/detection.cpp:113
msgid "Enable floating cursors"
-msgstr "Povolit plovouc kurzory"
+msgstr "Povolit plovoucí kurzory"
#. I18N: HP stands for Hit Points
#: engines/kyra/detection.cpp:127
msgid "HP bar graphs"
-msgstr "Sloupcov indiktor zdrav"
+msgstr "Sloupcový indikátor zdraví"
#: engines/kyra/detection.cpp:128
msgid "Enable hit point bar graphs"
-msgstr "Povolit sloupcov indiktor zdrav"
+msgstr "Povolit sloupcový indikátor zdraví"
#: engines/kyra/lol.cpp:478
msgid "Attack 1"
-msgstr "tok 1"
+msgstr "Útok 1"
#: engines/kyra/lol.cpp:479
msgid "Attack 2"
-msgstr "tok 2"
+msgstr "Útok 2"
#: engines/kyra/lol.cpp:480
msgid "Attack 3"
-msgstr "tok 3"
+msgstr "Útok 3"
#: engines/kyra/lol.cpp:481
msgid "Move Forward"
-msgstr "Vped"
+msgstr "Vpřed"
#: engines/kyra/lol.cpp:482
msgid "Move Back"
@@ -2418,23 +2423,23 @@ msgstr "Vzad"
#: engines/kyra/lol.cpp:483
msgid "Slide Left"
-msgstr "Pesunout se Doleva"
+msgstr "Přesunout se Doleva"
#: engines/kyra/lol.cpp:484
msgid "Slide Right"
-msgstr "Pesunout se Doprava"
+msgstr "Přesunout se Doprava"
#: engines/kyra/lol.cpp:485 engines/pegasus/pegasus.cpp:2509
msgid "Turn Left"
-msgstr "Otoit se doleva"
+msgstr "Otočit se doleva"
#: engines/kyra/lol.cpp:486 engines/pegasus/pegasus.cpp:2510
msgid "Turn Right"
-msgstr "Otoit se doprava"
+msgstr "Otočit se doprava"
#: engines/kyra/lol.cpp:487
msgid "Rest"
-msgstr "Odpoinout si"
+msgstr "Odpočinout si"
#: engines/kyra/lol.cpp:488
msgid "Options"
@@ -2452,11 +2457,11 @@ msgid ""
"General MIDI ones. It is still possible that\n"
"some tracks sound incorrect."
msgstr ""
-"Zd se, e pouvte zazen General MIDI,\n"
-"ale vae hra podporuje pouze Roland MT32 MIDI.\n"
-"Sname se mapovat nstroje Roland MT32 na\n"
-"ty od General MIDI. Je stle mon, e\n"
-"nkter stopy nebudou znt sprvn."
+"Zdá se, že používáte zařízení General MIDI,\n"
+"ale vaše hra podporuje pouze Roland MT32 MIDI.\n"
+"Snažíme se mapovat nástroje Roland MT32 na\n"
+"ty od General MIDI. Je stále možné, že\n"
+"některé stopy nebudou znít správně."
#: engines/kyra/saveload_eob.cpp:557
#, c-format
@@ -2468,11 +2473,11 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
-"V cest va hry byl nalezen nsledujc soubor s uloenou hrou:\n"
+"V cestě vaší hry byl nalezen následující soubor s uloženou hrou:\n"
"\n"
"%s %s\n"
"\n"
-"Chcete tento soubor pout v ScummVM?\n"
+"Chcete tento soubor použít v ScummVM?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:590
@@ -2481,7 +2486,7 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
-"V uren pozici %d byl nalezen soubor s uloenou hrou. Pepsat?\n"
+"V určené pozici %d byl nalezen soubor s uloženou hrou. Přepsat?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:623
@@ -2494,24 +2499,24 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
-"%d pvodnch soubor s uloenou hrou bylo spn importovno do\n"
-"ScummVM. Pokud chcete pozdji toto uinit znovu run, je teba otevt\n"
-"ladc konzoli ScummVM a pout pkaz 'import_savefile'.\n"
+"%d původních souborů s uloženou hrou bylo úspěšně importováno do\n"
+"ScummVM. Pokud chcete později toto učinit znovu ručně, je třeba otevřít\n"
+"ladící konzoli ScummVM a použít příkaz 'import_savefile'.\n"
"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
msgid "~Z~ip Mode Activated"
-msgstr "~R~eim Svitn Aktivovn"
+msgstr "~R~ežim Svištění Aktivován"
#: engines/mohawk/dialogs.cpp:93
msgid "~T~ransitions Enabled"
-msgstr "~P~echody zapnuty"
+msgstr "~P~řechody zapnuty"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
msgid "~D~rop Page"
-msgstr "~Z~ahodit Strnku"
+msgstr "~Z~ahodit Stránku"
#: engines/mohawk/dialogs.cpp:99
msgid "~S~how Map"
@@ -2519,7 +2524,7 @@ msgstr "~Z~obrazit Mapu"
#: engines/mohawk/dialogs.cpp:105
msgid "~M~ain Menu"
-msgstr "~H~lavn Menu"
+msgstr "~H~lavní Menu"
#: engines/mohawk/dialogs.cpp:168
msgid "~W~ater Effect Enabled"
@@ -2527,19 +2532,19 @@ msgstr "~E~fekt Vody Zapnut"
#: engines/neverhood/detection.cpp:167
msgid "Skip the Hall of Records storyboard scenes"
-msgstr "Peskoit scny v Sni zznam"
+msgstr "Přeskočit scény v Síni záznamů"
#: engines/neverhood/detection.cpp:168
msgid "Allows the player to skip past the Hall of Records storyboard scenes"
-msgstr "Umouje hri peskoit scny v Sni zznam"
+msgstr "Umožňuje hráči přeskočit scény v Síni záznamů"
#: engines/neverhood/detection.cpp:174
msgid "Scale the making of videos to full screen"
-msgstr "Zvtit filmy o vrob na celou obrazovku"
+msgstr "Zvětšit filmy o výrobě na celou obrazovku"
#: engines/neverhood/detection.cpp:175
msgid "Scale the making of videos, so that they use the whole screen"
-msgstr "Zvtit filmy o vrob tak, aby vyuivaly celou obrazovku"
+msgstr "Zvětšit filmy o výrobě tak, aby využivaly celou obrazovku"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2547,16 +2552,16 @@ msgid ""
"Can't save game in slot %i\n"
"\n"
msgstr ""
-"Nelze uloit hru do pozice %i\n"
+"Nelze uložit hru do pozice %i\n"
"\n"
#: engines/parallaction/saveload.cpp:204
msgid "Loading game..."
-msgstr "Nahrvn hry..."
+msgstr "Nahrávání hry..."
#: engines/parallaction/saveload.cpp:219
msgid "Saving game..."
-msgstr "Ukldn hry..."
+msgstr "Ukládání hry..."
#: engines/parallaction/saveload.cpp:272
msgid ""
@@ -2567,16 +2572,16 @@ msgid ""
"\n"
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
-"ScummVM zjistil, e mte star uloen pozice pro Nippon Safes, kter by "
-"mly bt pejmenovny.\n"
-"Star nzvy ji nejsou podporovny, take pokud je nepevedete, nebudete "
-"moci vae hry nast.\n"
+"ScummVM zjistil, že máte staré uložené pozice pro Nippon Safes, které by "
+"měly být přejmenovány.\n"
+"Staré názvy již nejsou podporovány, takže pokud je nepřevedete, nebudete "
+"moci vaše hry načíst.\n"
"\n"
-"Stisknte OK, abyste je pevedli te, jinak budete podni pt.\n"
+"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n"
#: engines/parallaction/saveload.cpp:319
msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM spn pevedl vechny vae uloen pozice. "
+msgstr "ScummVM úspěšně převedl všechny vaše uložené pozice. "
#: engines/parallaction/saveload.cpp:321
msgid ""
@@ -2585,249 +2590,249 @@ msgid ""
"\n"
"Please report to the team."
msgstr ""
-"ScummVM vytiskl nkter varovn ve vaem okn konzole a neme zaruit, e "
-"vechny vae soubory byly pevedeny.\n"
+"ScummVM vytiskl některá varování ve vašem okně konzole a nemůže zaručit, že "
+"všechny vaše soubory byly převedeny.\n"
"\n"
-"Prosm nahlaste to tmu"
+"Prosím nahlaste to týmu"
#: engines/pegasus/pegasus.cpp:714
msgid "Invalid save file name"
-msgstr "Neplatn nzev souboru"
+msgstr "Neplatný název souboru"
#: engines/pegasus/pegasus.cpp:2507
msgid "Up/Zoom In/Move Forward/Open Doors"
-msgstr "Nahoru/Piblit/Pohyb dopedu/Otevt dvee"
+msgstr "Nahoru/Přiblížit/Pohyb dopředu/Otevřít dveře"
#: engines/pegasus/pegasus.cpp:2508
msgid "Down/Zoom Out"
-msgstr "Dol/Oddlen"
+msgstr "Dolů/Oddálení"
#: engines/pegasus/pegasus.cpp:2511
msgid "Display/Hide Inventory Tray"
-msgstr "Zobrazit/Skrt podnos invente"
+msgstr "Zobrazit/Skrýt podnos inventáře"
#: engines/pegasus/pegasus.cpp:2512
msgid "Display/Hide Biochip Tray"
-msgstr "Zobrazit/Skrt podnos bioipu"
+msgstr "Zobrazit/Skrýt podnos biočipu"
#: engines/pegasus/pegasus.cpp:2513
msgid "Action/Select"
-msgstr "innost/Vybrat"
+msgstr "Činnost/Vybrat"
#: engines/pegasus/pegasus.cpp:2514
msgid "Toggle Center Data Display"
-msgstr "Pepnout centrln datovou obrazovku"
+msgstr "Přepnout centrální datovou obrazovku"
#: engines/pegasus/pegasus.cpp:2515
msgid "Display/Hide Info Screen"
-msgstr "Zobrazit/Skrto obrazovku informac"
+msgstr "Zobrazit/Skrýto obrazovku informací"
#: engines/pegasus/pegasus.cpp:2516
msgid "Display/Hide Pause Menu"
-msgstr "Zobrazit/Skrt "
+msgstr "Zobrazit/Skrýt "
#: engines/queen/detection.cpp:56
msgid "Alternative intro"
-msgstr "Alternativn vod"
+msgstr "Alternativní úvod"
#: engines/queen/detection.cpp:57
msgid "Use an alternative game intro (CD version only)"
-msgstr "Pout jinou verzi vodu (Pouze verze CD)"
+msgstr "Použít jinou verzi úvodu (Pouze verze CD)"
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
-msgstr "Pekoit prchod rozkladu barev EGA (pozad v plnch barvch)"
+msgstr "Překočit průchod rozkladu barev EGA (pozadí v plných barvách)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
-"Peskoit prchod rozkladu barev EGA, obraze je zobrazen v plnch barvch"
+"Přeskočit průchod rozkladu barev EGA, obraze je zobrazen v plných barvách"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
-msgstr "Upednostovat digitln zvukov efekty"
+msgstr "Upřednostňovat digitální zvukové efekty"
#: engines/sci/detection.cpp:385
msgid "Prefer digital sound effects instead of synthesized ones"
-msgstr "Upednostovat digitln zvukov efekty ped syntetizovanmi"
+msgstr "Upřednostňovat digitální zvukové efekty před syntetizovanými"
#: engines/sci/detection.cpp:404
msgid "Use IMF/Yamaha FB-01 for MIDI output"
-msgstr "Pout IMF/Yamaha FB-01 pro vstup MIDI"
+msgstr "Použít IMF/Yamaha FB-01 pro výstup MIDI"
#: engines/sci/detection.cpp:405
msgid ""
"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"Pout kartu IBM Music Feature nebo modul syntetiztoru Yamaha FB-01 FM pro "
-"vstup MIDI"
+"Použít kartu IBM Music Feature nebo modul syntetizátoru Yamaha FB-01 FM pro "
+"výstup MIDI"
#: engines/sci/detection.cpp:415
msgid "Use CD audio"
-msgstr "Pout zvuky na CD"
+msgstr "Použít zvuky na CD"
#: engines/sci/detection.cpp:416
msgid "Use CD audio instead of in-game audio, if available"
-msgstr "Pout zvuky na CD msto ve he, pokud je dostupn"
+msgstr "Použít zvuky na CD místo ve hře, pokud je dostupné"
#: engines/sci/detection.cpp:426
msgid "Use Windows cursors"
-msgstr "Pout kurzory Windows"
+msgstr "Použít kurzory Windows"
#: engines/sci/detection.cpp:427
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
-msgstr "Pout kurzory Windows (men a ernobl) msto kurzor z DOS"
+msgstr "Použít kurzory Windows (menší a černobílé) místo kurzorů z DOS"
#: engines/sci/detection.cpp:437
msgid "Use silver cursors"
-msgstr "Pout stbrn kurzory"
+msgstr "Použít stříbrné kurzory"
#: engines/sci/detection.cpp:438
msgid ""
"Use the alternate set of silver cursors, instead of the normal golden ones"
-msgstr "Pout alternativn sadu stbrnch kurzor msto standardnch zlatch"
+msgstr "Použít alternativní sadu stříbrných kurzorů místo standardních zlatých"
#: engines/scumm/dialogs.cpp:176
#, c-format
msgid "Insert Disk %c and Press Button to Continue."
-msgstr "Vlote Disk %c a Stisknte Tlatko Pro Pokraovn."
+msgstr "Vložte Disk %c a Stiskněte Tlačítko Pro Pokračování."
#: engines/scumm/dialogs.cpp:177
#, c-format
msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr "Nelze Najt %s, (%c%d) Stisknte Tlatko."
+msgstr "Nelze Najít %s, (%c%d) Stiskněte Tlačítko."
#: engines/scumm/dialogs.cpp:178
#, c-format
msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr "Chyba pi ten disku %c, (%c%d) Stisknte Tlatko."
+msgstr "Chyba při čtení disku %c, (%c%d) Stiskněte Tlačítko."
#: engines/scumm/dialogs.cpp:179
msgid "Game Paused. Press SPACE to Continue."
-msgstr "Hra Pozastavena. Stisknte MEZERNK pro pokraovn."
+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
msgid "Are you sure you want to restart? (Y/N)Y"
-msgstr "Jste si jisti, e chcete restartovat? (A/N)A"
+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
msgid "Are you sure you want to quit? (Y/N)Y"
-msgstr "Jste si jisti, e chcete odejt? (A/N)A"
+msgstr "Jste si jisti, že chcete odejít? (A/N)A"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
-msgstr "Hrt"
+msgstr "Hrát"
#: engines/scumm/dialogs.cpp:194
msgid "Insert save/load game disk"
-msgstr "Vlote hern disk pro uloen/naten"
+msgstr "Vložte herní disk pro uložení/načtení"
#: engines/scumm/dialogs.cpp:195
msgid "You must enter a name"
-msgstr "Muste zadat jmno"
+msgstr "Musíte zadat jméno"
#: engines/scumm/dialogs.cpp:196
msgid "The game was NOT saved (disk full?)"
-msgstr "Hra NEBYLA uloena (pln disk?)"
+msgstr "Hra NEBYLA uložena (plný disk?)"
#: engines/scumm/dialogs.cpp:197
msgid "The game was NOT loaded"
-msgstr "Hra NEBYLA natena"
+msgstr "Hra NEBYLA načtena"
#: engines/scumm/dialogs.cpp:198
#, c-format
msgid "Saving '%s'"
-msgstr "Ukldm '%s'"
+msgstr "Ukládám '%s'"
#: engines/scumm/dialogs.cpp:199
#, c-format
msgid "Loading '%s'"
-msgstr "Natm '%s'"
+msgstr "Načítám '%s'"
#: engines/scumm/dialogs.cpp:200
msgid "Name your SAVE game"
-msgstr "Pojmenujte svoji ULOENOU hru"
+msgstr "Pojmenujte svoji ULOŽENOU hru"
#: engines/scumm/dialogs.cpp:201
msgid "Select a game to LOAD"
-msgstr "Vyberte hru k NATEN"
+msgstr "Vyberte hru k NAČTENÍ"
#: engines/scumm/dialogs.cpp:202
msgid "Game title)"
-msgstr "Nzev hry"
+msgstr "Název hry"
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:288
msgid "~P~revious"
-msgstr "~P~edchoz"
+msgstr "~P~ředchozí"
#. I18N: Next page button
#: engines/scumm/dialogs.cpp:290
msgid "~N~ext"
-msgstr "~D~al"
+msgstr "~D~alší"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
-msgstr "Pouze e"
+msgstr "Pouze Řeč"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
-msgstr "e a Titulky"
+msgstr "Řeč a Titulky"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Pouze Titulky"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
-msgstr "e a Titulky"
+msgstr "Řeč a Titulky"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
-msgstr "Vyberte rove odbornosti."
+msgstr "Vyberte úroveň odbornosti."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
-msgstr "Pro npovdu si pette manul Loom(TM)."
+msgstr "Pro nápovědu si přečtěte manuál Loom(TM)."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
-msgstr "Cvien"
+msgstr "Cvičení"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
-msgstr "Pokroil"
+msgstr "Pokročilý"
#: engines/scumm/help.cpp:74
msgid "Common keyboard commands:"
-msgstr "Bn klvesov pkazy"
+msgstr "Běžné klávesové příkazy"
#: engines/scumm/help.cpp:75
msgid "Save / Load dialog"
-msgstr "Dialog Nahrt / Uloit"
+msgstr "Dialog Nahrát / Uložit"
#: engines/scumm/help.cpp:77
msgid "Skip line of text"
-msgstr "Peskoit dek textu"
+msgstr "Přeskočit řádek textu"
#: engines/scumm/help.cpp:78
msgid "Esc"
-msgstr "Mezernk"
+msgstr "Mezerník"
#: engines/scumm/help.cpp:78
msgid "Skip cutscene"
-msgstr "Peskoit video"
+msgstr "Přeskočit video"
#: engines/scumm/help.cpp:79
msgid "Space"
-msgstr "Mezernk"
+msgstr "Mezerník"
#: engines/scumm/help.cpp:79
msgid "Pause game"
@@ -2843,7 +2848,7 @@ msgstr "Ctrl"
#: engines/scumm/help.cpp:80
msgid "Load game state 1-10"
-msgstr "Nahrt stav hry 1-10"
+msgstr "Nahrát stav hry 1-10"
#: engines/scumm/help.cpp:81 engines/scumm/help.cpp:85
#: engines/scumm/help.cpp:87 engines/scumm/help.cpp:101
@@ -2853,7 +2858,7 @@ msgstr "Alt"
#: engines/scumm/help.cpp:81
msgid "Save game state 1-10"
-msgstr "Uloit stav hry 1-10"
+msgstr "Uložit stav hry 1-10"
#: engines/scumm/help.cpp:87 engines/scumm/help.cpp:90
msgid "Enter"
@@ -2861,15 +2866,15 @@ msgstr "Enter"
#: engines/scumm/help.cpp:88
msgid "Music volume up / down"
-msgstr "Hlasitost hudby nahoru / dol"
+msgstr "Hlasitost hudby nahoru / dolů"
#: engines/scumm/help.cpp:89
msgid "Text speed slower / faster"
-msgstr "Zvit / Snit rychlost textu"
+msgstr "Zvýšit / Snížit rychlost textu"
#: engines/scumm/help.cpp:90
msgid "Simulate left mouse button"
-msgstr "Napodobit lev tlatko myi"
+msgstr "Napodobit levé tlačítko myši"
#: engines/scumm/help.cpp:91
msgid "Tab"
@@ -2877,116 +2882,116 @@ msgstr "Tab"
#: engines/scumm/help.cpp:91
msgid "Simulate right mouse button"
-msgstr "Napodobit prav tlatko myi"
+msgstr "Napodobit pravé tlačítko myši"
#: engines/scumm/help.cpp:94
msgid "Special keyboard commands:"
-msgstr "Speciln klvesov pkazy"
+msgstr "Speciální klávesové příkazy"
#: engines/scumm/help.cpp:95
msgid "Show / Hide console"
-msgstr "Ukzat / Skrt konzoli"
+msgstr "Ukázat / Skrýt konzoli"
#: engines/scumm/help.cpp:96
msgid "Start the debugger"
-msgstr "Spustit ladc program"
+msgstr "Spustit ladící program"
#: engines/scumm/help.cpp:97
msgid "Show memory consumption"
-msgstr "Zobrazit spotebu pamti"
+msgstr "Zobrazit spotřebu paměti"
#: engines/scumm/help.cpp:98
msgid "Run in fast mode (*)"
-msgstr "Spustit v rychlm reimu (*)"
+msgstr "Spustit v rychlém režimu (*)"
#: engines/scumm/help.cpp:99
msgid "Run in really fast mode (*)"
-msgstr "Spustit ve velmi rychlm reimu (*)"
+msgstr "Spustit ve velmi rychlém režimu (*)"
#: engines/scumm/help.cpp:100
msgid "Toggle mouse capture"
-msgstr "Povolit zachycovn myi"
+msgstr "Povolit zachycování myši"
#: engines/scumm/help.cpp:101
msgid "Switch between graphics filters"
-msgstr "Pepnat mezi grafickmi filtry"
+msgstr "Přepínat mezi grafickými filtry"
#: engines/scumm/help.cpp:102
msgid "Increase / Decrease scale factor"
-msgstr "Zvtit / Zmenit faktor zmny velikosti"
+msgstr "Zvětšit / Zmenšit faktor změny velikosti"
#: engines/scumm/help.cpp:103
msgid "Toggle aspect-ratio correction"
-msgstr "Povolit korekci pomru stran"
+msgstr "Povolit korekci poměru stran"
#: engines/scumm/help.cpp:108
msgid "* Note that using ctrl-f and"
-msgstr "Upozorujeme, e pouvn ctrl-f a"
+msgstr "Upozorňujeme, že používání ctrl-f a"
#: engines/scumm/help.cpp:109
msgid " ctrl-g are not recommended"
-msgstr " ctrl-g nen doporueno"
+msgstr " ctrl-g není doporučeno"
#: engines/scumm/help.cpp:110
msgid " since they may cause crashes"
-msgstr "jeliko mou zpsobit pd"
+msgstr "jelikož můžou způsobit pád"
#: engines/scumm/help.cpp:111
msgid " or incorrect game behavior."
-msgstr " nebo nesprvn chovn hry."
+msgstr " nebo nesprávné chování hry."
#: engines/scumm/help.cpp:115
msgid "Spinning drafts on the keyboard:"
-msgstr "Pleten nrtk na klvesnici:"
+msgstr "Pletení náčrtků na klávesnici:"
#: engines/scumm/help.cpp:117
msgid "Main game controls:"
-msgstr "Hlavn ovldac prvky:"
+msgstr "Hlavní ovládací prvky:"
#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
#: engines/scumm/help.cpp:162
msgid "Push"
-msgstr "Tlait"
+msgstr "Tlačit"
#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138
#: engines/scumm/help.cpp:163
msgid "Pull"
-msgstr "Thnout"
+msgstr "Táhnout"
#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139
#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:198
#: engines/scumm/help.cpp:208
msgid "Give"
-msgstr "Dt"
+msgstr "Dát"
#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140
#: engines/scumm/help.cpp:165 engines/scumm/help.cpp:191
#: engines/scumm/help.cpp:209
msgid "Open"
-msgstr "Otevt"
+msgstr "Otevřít"
#: engines/scumm/help.cpp:127
msgid "Go to"
-msgstr "Jt do"
+msgstr "Jít do"
#: engines/scumm/help.cpp:128
msgid "Get"
-msgstr "Vzt"
+msgstr "Vzít"
#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:153
#: engines/scumm/help.cpp:171 engines/scumm/help.cpp:199
#: engines/scumm/help.cpp:214 engines/scumm/help.cpp:225
#: engines/scumm/help.cpp:251
msgid "Use"
-msgstr "Pout"
+msgstr "Použít"
#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:142
msgid "Read"
-msgstr "Pest"
+msgstr "Přečíst"
#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:148
msgid "New kid"
-msgstr "Nov dt"
+msgstr "Nové dítě"
#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
#: engines/scumm/help.cpp:172
@@ -3001,7 +3006,7 @@ msgstr "Vypnout"
#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168
#: engines/scumm/help.cpp:195
msgid "Walk to"
-msgstr "Pejt na"
+msgstr "Přejít na"
#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:211
@@ -3019,11 +3024,11 @@ msgstr "Odemknout"
#: engines/scumm/help.cpp:150
msgid "Put on"
-msgstr "Oblct"
+msgstr "Obléct"
#: engines/scumm/help.cpp:151
msgid "Take off"
-msgstr "Svlct"
+msgstr "Svléct"
#: engines/scumm/help.cpp:157
msgid "Fix"
@@ -3031,11 +3036,11 @@ msgstr "Spravit"
#: engines/scumm/help.cpp:159
msgid "Switch"
-msgstr "Pepnout"
+msgstr "Přepnout"
#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:229
msgid "Look"
-msgstr "Dvat se"
+msgstr "Dívat se"
#: engines/scumm/help.cpp:174 engines/scumm/help.cpp:224
msgid "Talk"
@@ -3052,43 +3057,43 @@ msgstr "Henrymu / Indymu"
#. I18N: These are different musical notes
#: engines/scumm/help.cpp:180
msgid "play C minor on distaff"
-msgstr "zahrt c moll na peslici"
+msgstr "zahrát c moll na přeslici"
#: engines/scumm/help.cpp:181
msgid "play D on distaff"
-msgstr "zahrt D na peslici"
+msgstr "zahrát D na přeslici"
#: engines/scumm/help.cpp:182
msgid "play E on distaff"
-msgstr "zahrt E na peslici"
+msgstr "zahrát E na přeslici"
#: engines/scumm/help.cpp:183
msgid "play F on distaff"
-msgstr "zahrt F na peslici"
+msgstr "zahrát F na přeslici"
#: engines/scumm/help.cpp:184
msgid "play G on distaff"
-msgstr "zahrt G na peslici"
+msgstr "zahrát G na přeslici"
#: engines/scumm/help.cpp:185
msgid "play A on distaff"
-msgstr "zahrt A na peslici"
+msgstr "zahrát A na přeslici"
#: engines/scumm/help.cpp:186
msgid "play B on distaff"
-msgstr "zahrt B na peslici"
+msgstr "zahrát B na přeslici"
#: engines/scumm/help.cpp:187
msgid "play C major on distaff"
-msgstr "zahrt C dur na peslici"
+msgstr "zahrát C dur na přeslici"
#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
msgid "puSh"
-msgstr "tlaIt"
+msgstr "tlačIt"
#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216
msgid "pull (Yank)"
-msgstr "thnout (kubnout)"
+msgstr "táhnout (Škubnout)"
#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:213
#: engines/scumm/help.cpp:249
@@ -3097,7 +3102,7 @@ msgstr "Mluvit s"
#: engines/scumm/help.cpp:200 engines/scumm/help.cpp:212
msgid "Look at"
-msgstr "Dvat se na"
+msgstr "Dívat se na"
#: engines/scumm/help.cpp:201
msgid "turn oN"
@@ -3109,28 +3114,28 @@ msgstr "vypnoUt"
#: engines/scumm/help.cpp:218
msgid "KeyUp"
-msgstr "KlvesaNahoru"
+msgstr "KlávesaNahoru"
#: engines/scumm/help.cpp:218
msgid "Highlight prev dialogue"
-msgstr "Zvraznit pedchoz dialog"
+msgstr "Zvýraznit předchozí dialog"
#: engines/scumm/help.cpp:219
msgid "KeyDown"
-msgstr "KlvesaDol"
+msgstr "KlávesaDolů"
#: engines/scumm/help.cpp:219
msgid "Highlight next dialogue"
-msgstr "Zvraznit nsledujc dialog"
+msgstr "Zvýraznit následující dialog"
#: engines/scumm/help.cpp:223
msgid "Walk"
-msgstr "Jt"
+msgstr "Jít"
#: engines/scumm/help.cpp:226 engines/scumm/help.cpp:235
#: engines/scumm/help.cpp:242 engines/scumm/help.cpp:250
msgid "Inventory"
-msgstr "Invent"
+msgstr "Inventář"
#: engines/scumm/help.cpp:227
msgid "Object"
@@ -3138,11 +3143,11 @@ msgstr "Objekt"
#: engines/scumm/help.cpp:230
msgid "Black and White / Color"
-msgstr "ernobl / Barva"
+msgstr "Černobílé / Barva"
#: engines/scumm/help.cpp:233
msgid "Eyes"
-msgstr "Oi"
+msgstr "Oči"
#: engines/scumm/help.cpp:234
msgid "Tongue"
@@ -3150,7 +3155,7 @@ msgstr "Jazyk"
#: engines/scumm/help.cpp:236
msgid "Punch"
-msgstr "Udeit"
+msgstr "Udeřit"
#: engines/scumm/help.cpp:237
msgid "Kick"
@@ -3158,11 +3163,11 @@ msgstr "Kopnout"
#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:248
msgid "Examine"
-msgstr "Prohldnout"
+msgstr "Prohlédnout"
#: engines/scumm/help.cpp:241
msgid "Regular cursor"
-msgstr "Obyejn kurzor"
+msgstr "Obyčejný kurzor"
#. I18N: Comm is a communication device
#: engines/scumm/help.cpp:244
@@ -3171,15 +3176,15 @@ msgstr "Komunikace"
#: engines/scumm/help.cpp:247
msgid "Save / Load / Options"
-msgstr "Uloit / Nahrt / Volby"
+msgstr "Uložit / Nahrát / Volby"
#: engines/scumm/help.cpp:256
msgid "Other game controls:"
-msgstr "Dal ovldac prvky hry"
+msgstr "Další ovládací prvky hry"
#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268
msgid "Inventory:"
-msgstr "Invent:"
+msgstr "Inventář:"
#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
msgid "Scroll list up"
@@ -3191,63 +3196,63 @@ msgstr "Posunout seznam dolu"
#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269
msgid "Upper left item"
-msgstr "Poloka vlevo nahoe"
+msgstr "Položka vlevo nahoře"
#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
msgid "Lower left item"
-msgstr "Poloka vlevo dole"
+msgstr "Položka vlevo dole"
#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272
msgid "Upper right item"
-msgstr "Poloka vpravo nahoe"
+msgstr "Položka vpravo nahoře"
#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274
msgid "Lower right item"
-msgstr "Poloka vpravo dole"
+msgstr "Položka vpravo dole"
#: engines/scumm/help.cpp:270
msgid "Middle left item"
-msgstr "Poloka vlevo uprosted"
+msgstr "Položka vlevo uprostřed"
#: engines/scumm/help.cpp:273
msgid "Middle right item"
-msgstr "Poloka vpravo uprosted"
+msgstr "Položka vpravo uprostřed"
#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285
msgid "Switching characters:"
-msgstr "Mnn postav:"
+msgstr "Měnění postav:"
#: engines/scumm/help.cpp:282
msgid "Second kid"
-msgstr "Druh dt"
+msgstr "Druhé dítě"
#: engines/scumm/help.cpp:283
msgid "Third kid"
-msgstr "Tet dt"
+msgstr "Třetí dítě"
#: engines/scumm/help.cpp:292
msgid "Toggle Inventory/IQ Points display"
-msgstr "Pepnat zobrazen invente/chytrostnch bod"
+msgstr "Přepínat zobrazení inventáře/chytrostních bodů"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr "Pepnat bojovn pomoc klves/myi (*)"
+msgstr "Přepínat bojování pomocí kláves/myši (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr "* Bojovn pomoc klvesnice je vdy zapnuto,"
+msgstr "* Bojování pomocí klávesnice je vždy zapnuto,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr " take nehled a to, co k hra,"
+msgstr " takže nehledě a to, co říká hra,"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr " toto ve skutenosti ovld bojovn s my"
+msgstr " toto ve skutečnosti ovládá bojování s myší"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
-msgstr "Ovldn boje (num. klv.)"
+msgstr "Ovládání boje (num. kláv.)"
#: engines/scumm/help.cpp:305 engines/scumm/help.cpp:306
#: engines/scumm/help.cpp:307
@@ -3256,31 +3261,31 @@ msgstr "Ustoupit"
#: engines/scumm/help.cpp:308
msgid "Block high"
-msgstr "Brnit nahoe"
+msgstr "Bránit nahoře"
#: engines/scumm/help.cpp:309
msgid "Block middle"
-msgstr "Brnit uprosted"
+msgstr "Bránit uprostřed"
#: engines/scumm/help.cpp:310
msgid "Block low"
-msgstr "Brnit dole"
+msgstr "Bránit dole"
#: engines/scumm/help.cpp:311
msgid "Punch high"
-msgstr "Udeit nahoru"
+msgstr "Udeřit nahoru"
#: engines/scumm/help.cpp:312
msgid "Punch middle"
-msgstr "Udeit doprosted"
+msgstr "Udeřit doprostřed"
#: engines/scumm/help.cpp:313
msgid "Punch low"
-msgstr "Udeit dol"
+msgstr "Udeřit dolů"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr "Neekan rna"
+msgstr "Nečekaná rána"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3288,74 +3293,71 @@ msgstr "Tyto jsou pro Indyho nalevo."
#: engines/scumm/help.cpp:319
msgid "When Indy is on the right,"
-msgstr "Kdy je Indy napravo,"
+msgstr "Když je Indy napravo,"
#: engines/scumm/help.cpp:320
msgid "7, 4, and 1 are switched with"
-msgstr "7, 4 a 1 jsou zamnny s"
+msgstr "7, 4 a 1 jsou zaměněny s"
#: engines/scumm/help.cpp:321
msgid "9, 6, and 3, respectively."
-msgstr "9, 6 a 3, v tomto poad."
+msgstr "9, 6 a 3, v tomto pořadí."
#: engines/scumm/help.cpp:328
msgid "Biplane controls (numpad):"
-msgstr "Kontrola dvojplonku (numerick klvesnice)"
+msgstr "Kontrola dvojplošníku (numerická klávesnice)"
#: engines/scumm/help.cpp:329
msgid "Fly to upper left"
-msgstr "Lett doprava nahoru"
+msgstr "Letět doprava nahoru"
#: engines/scumm/help.cpp:330
msgid "Fly to left"
-msgstr "Lett doleva"
+msgstr "Letět doleva"
#: engines/scumm/help.cpp:331
msgid "Fly to lower left"
-msgstr "Lett doleva dol"
+msgstr "Letět doleva dolů"
#: engines/scumm/help.cpp:332
msgid "Fly upwards"
-msgstr "Lett nahoru"
+msgstr "Letět nahoru"
#: engines/scumm/help.cpp:333
msgid "Fly straight"
-msgstr "Lett rovn"
+msgstr "Letět rovně"
#: engines/scumm/help.cpp:334
msgid "Fly down"
-msgstr "Lett dol"
+msgstr "Letět dolů"
#: engines/scumm/help.cpp:335
msgid "Fly to upper right"
-msgstr "Lett doprava nahoru"
+msgstr "Letět doprava nahoru"
#: engines/scumm/help.cpp:336
msgid "Fly to right"
-msgstr "Lett doprava"
+msgstr "Letět doprava"
#: engines/scumm/help.cpp:337
msgid "Fly to lower right"
-msgstr "Lett doprava dol"
+msgstr "Letět doprava dolů"
#: engines/scumm/input.cpp:572
-#, fuzzy
msgid "Snap scroll on"
-msgstr "Plynul posunovn"
+msgstr "Přichycení při posunování zapnuto"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
-msgstr ""
+msgstr "Přichycení při posunování zapnuto"
#: engines/scumm/input.cpp:587
-#, fuzzy
msgid "Music volume: "
-msgstr "Hlasitost hudby"
+msgstr "Hlasitost hudby:"
#: engines/scumm/input.cpp:604
-#, fuzzy
msgid "Subtitle speed: "
-msgstr "Rychlost titulk:"
+msgstr "Rychlost titulkù:"
#: engines/scumm/scumm.cpp:1832
#, c-format
@@ -3363,8 +3365,8 @@ msgid ""
"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
"but %s is missing. Using AdLib instead."
msgstr ""
-"Pirozen podpora MIDI vyaduje Aktualizaci Roland od LucasArts,\n"
-"ale %s chyb. Msto toho je pouit AdLib."
+"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:2644
msgid ""
@@ -3372,54 +3374,54 @@ msgid ""
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Normln by te byl sputn Maniac Mansion. Ale aby toto mohlo fungovat, "
-"mus bt soubory se hrou umstny do sloky 'Maniac' uvnit sloky se hrou "
-"Tentacle a hra mus bt pidna do ScummVM."
+"Normálně by teď byl spuštěn Maniac Mansion. Ale aby toto mohlo fungovat, "
+"musí být soubory se hrou umístěny do složky 'Maniac' uvnitř složky se hrou "
+"Tentacle a hra musí být přidána do ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
-"Nelze najt spustiteln soubor 'Loom' pro Macintosh z jeho\n"
-"maj bt nateny hudebn nstroje. Hudba bude zakzna."
+"Nelze najít spustitelný soubor 'Loom' pro Macintosh z jehož\n"
+"mají být načteny hudební nástroje. Hudba bude zakázána."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
-"Nelze najt spustiteln soubor 'Monkey Island' pro Macintosh z\n"
-"jeho maj bt nateny hudebn nstroje. Hudba bude zakzna."
+"Nelze najít spustitelný soubor 'Monkey Island' pro Macintosh z\n"
+"jehož mají být načteny hudební nástroje. Hudba bude zakázána."
#: engines/sky/compact.cpp:130
msgid ""
"Unable to find \"sky.cpt\" file!\n"
"Please download it from www.scummvm.org"
msgstr ""
-"Nelze nalzt soubor \"sky.cpt\"!\n"
-"Sthnte si ho, prosm z www.scummvm.org"
+"Nelze nalézt soubor \"sky.cpt\"!\n"
+"Stáhněte si ho, prosím z www.scummvm.org"
#: engines/sky/compact.cpp:141
msgid ""
"The \"sky.cpt\" file has an incorrect size.\n"
"Please (re)download it from www.scummvm.org"
msgstr ""
-"Soubor \"sky.cpt\" m nesprvnou velikost.\n"
-"Sthnte si ho, prosm, (znovu) z www.scummvm.org"
+"Soubor \"sky.cpt\" má nesprávnou velikost.\n"
+"Stáhněte si ho, prosím, (znovu) z www.scummvm.org"
#: engines/sky/detection.cpp:44
msgid "Floppy intro"
-msgstr "vod z diskety"
+msgstr "Úvod z diskety"
#: engines/sky/detection.cpp:45
msgid "Use the floppy version's intro (CD version only)"
-msgstr "Pout verzi vodu z diskety (Pouze verze CD)"
+msgstr "Použít verzi úvodu z diskety (Pouze verze CD)"
#: engines/sword1/animation.cpp:524
#, c-format
msgid "PSX stream cutscene '%s' cannot be played in paletted mode"
-msgstr "Proud videa PSX '%s' neme bt pehrn v reimu palety"
+msgstr "Proud videa PSX '%s' nemůže být přehrán v režimu palety"
#: engines/sword1/animation.cpp:545 engines/sword2/animation.cpp:445
msgid "DXA cutscenes found but ScummVM has been built without zlib"
@@ -3445,13 +3447,13 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked again the next "
"time you start the game.\n"
msgstr ""
-"ScummVM zjistil, e mte star uloen pozice pro Broken Sword 1, kter by "
-"mly bt pevedeny.\n"
-"Star formt uloench her ji nen podporovn, take pokud je nepevedete, "
-"nebudete moci vae hry nast.\n"
+"ScummVM zjistil, že máte staré uložené pozice pro Broken Sword 1, které by "
+"měly být převedeny.\n"
+"Starý formát uložených her již není podporován, takže pokud je nepřevedete, "
+"nebudete moci vaše hry načíst.\n"
"\n"
-"Stisknte OK, abyste je pevedli te, jinak budete podni znovu, pi "
-"sputn tto hry.\n"
+"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při "
+"spuštění této hry.\n"
#: engines/sword1/control.cpp:1232
#, c-format
@@ -3459,8 +3461,8 @@ msgid ""
"Target new save game already exists!\n"
"Would you like to keep the old save game (%s) or the new one (%s)?\n"
msgstr ""
-"Nov clov uloen hra ji existuje!\n"
-"Chtli byste ponechat starou uloenou hru (%s), nebo novou (%s)?\n"
+"Nová cílová uložená hra již existuje!\n"
+"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n"
#: engines/sword1/control.cpp:1235
msgid "Keep the old one"
@@ -3481,46 +3483,44 @@ msgstr "Videa PSX nalezena, ale ScummVM byl sestaven bez podpory barev RGB"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
-msgstr "Zobrazit jmenovky objekt"
+msgstr "Zobrazit jmenovky objektů"
#: engines/sword2/sword2.cpp:80
msgid "Show labels for objects on mouse hover"
-msgstr "Zobrazit jmenovky objekt pi najet myi"
+msgstr "Zobrazit jmenovky objektů při najetí myši"
#: engines/teenagent/resources.cpp:95
msgid ""
"You're missing the 'teenagent.dat' file. Get it from the ScummVM website"
-msgstr "Chyb vm soubor 'teenagent.dat'. Mete ho zskat ze strnky ScummVM."
+msgstr "Chybí vám soubor 'teenagent.dat'. Můžete ho získat ze stránky ScummVM."
#: engines/teenagent/resources.cpp:116
msgid ""
"The teenagent.dat file is compressed and zlib hasn't been included in this "
"executable. Please decompress it"
msgstr ""
-"Soubor teenagent.dat je komprimovn a zlib nen soust spustitelnho "
-"souboru. Prosm dekomprimujte ho"
+"Soubor teenagent.dat je komprimován a zlib není součástí spustitelného "
+"souboru. Prosím dekomprimujte ho"
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr "Zobrazit potadlo FPS"
+msgstr "Zobrazit počítadlo FPS"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
-msgstr "Zobrazit souasn poet snmk za sekundu v hornm levm rohu"
+msgstr "Zobrazit současný počet snímků za sekundu v horním levém rohu"
#: engines/zvision/detection_tables.h:52
-#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
-msgstr "Pout pvodn obrazovky naten/uloen msto ze ScummVM"
+msgstr "Použít původní obrazovky načtení/uložení místo rozhraní ScummVM"
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr "Dvojit snmky za sekundu"
+msgstr "Dvojité snímky za sekundu"
#: engines/zvision/detection_tables.h:62
-#, fuzzy
msgid "Increase framerate from 30 to 60 FPS"
-msgstr "Zvit hern snmky za sekundu z 30 na 60"
+msgstr "Zvýšit snímkovou frekvenci z 30 na 60"
#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
@@ -3528,137 +3528,134 @@ msgstr "Povolit Venus"
#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
-msgstr "Povolit systm npovdy Venus"
+msgstr "Povolit systém nápovědy Venus"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr "Zakzat animaci pi oten"
+msgstr "Zakázat animaci při otáčení"
#: engines/zvision/detection_tables.h:82
-#, fuzzy
msgid "Disable animation while turning in panorama mode"
-msgstr "Zakzat animaci pi oten v panoramatickm reimu"
+msgstr "Zakázat animaci při otáčení v panoramatickém režimu"
#: engines/zvision/detection_tables.h:91
-#, fuzzy
msgid "Use high resolution MPEG video"
-msgstr "Pout videa MPEG ve vysokm rozlien"
+msgstr "Použít video MPEG ve vysokém rozlišení"
#: engines/zvision/detection_tables.h:92
-#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
-"Pout videa MPEG ve vysokm rozlien pochzejc z DVD verze, namsto "
-"vide AVI v nzkm rozlien."
+"Použít video MPEG pocházející z DVD verze, namísto videa AVI v nízkém "
+"rozlišení."
#~ msgid "EGA undithering"
-#~ msgstr "Nerozkldn EGA"
+#~ msgstr "Nerozkládání EGA"
#~ msgid "Enable undithering in EGA games"
-#~ msgstr "Povolit nerozkldn v EGA hrch"
+#~ msgstr "Povolit nerozkládání v EGA hrách"
#~ msgid "Are you sure you want to restart? (Y/N)"
-#~ msgstr "Jste si jisti, e chcete restartovat? (A/N)A"
+#~ msgstr "Jste si jisti, že chcete restartovat? (A/N)A"
#~ msgid "Are you sure you want to quit? (Y/N)"
-#~ msgstr "Jste si jisti, e chcete odejt? (A/N)A"
+#~ msgstr "Jste si jisti, že chcete odejít? (A/N)A"
#~ msgid ""
#~ "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. "
#~ "To play it, go to 'Add Game' in the ScummVM start menu and select the "
#~ "'Maniac' directory inside the Tentacle game directory."
#~ msgstr ""
-#~ "Normln by te Maniac Mansion byl sputn. Ale ScummVM toto zatm "
-#~ "nedl. Abyste toto mohli hrt, pejdte do 'Pidat Hru' v potenm "
-#~ "menu ScummVM a vyberte adres 'Maniac' uvnit hernho adrese Tentacle."
+#~ "Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím "
+#~ "nedělá. Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním "
+#~ "menu ScummVM a vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle."
#~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2"
#~ msgstr "Videa MPEG-2 nalezena, ale ScummVM byl sestaven bez MPEG-2"
#~ msgctxt "lowres"
#~ msgid "Mass Add..."
-#~ msgstr "Hromadn Pidn..."
+#~ msgstr "Hromadné Přidání..."
#~ msgid ""
#~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
#~ msgstr ""
-#~ "Vypne mapovn General MIDI pro hry s Roland MT-32 zvukovm doprovodem"
+#~ "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem"
#~ msgid "Standard (16bpp)"
-#~ msgstr "Standardn (16bpp)"
+#~ msgstr "Standardní (16bpp)"
#~ msgid "MPEG2 cutscenes are no longer supported"
-#~ msgstr "Videa MPGE2 ji nejsou podporovna"
+#~ msgstr "Videa MPGE2 již nejsou podporována"
#~ msgid "OpenGL Normal"
-#~ msgstr "OpenGL Normln"
+#~ msgstr "OpenGL Normální"
#~ msgid "OpenGL Conserve"
-#~ msgstr "OpenGL Zachovvajc"
+#~ msgstr "OpenGL Zachovávající"
#~ msgid "OpenGL Original"
-#~ msgstr "OpenGL Pvodn"
+#~ msgstr "OpenGL Původní"
#~ msgid "Current display mode"
-#~ msgstr "Souasn reim obrazu"
+#~ msgstr "Současný režim obrazu"
#~ msgid "Current scale"
-#~ msgstr "Souasn velikost"
+#~ msgstr "Současná velikost"
#~ msgid "Active filter mode: Linear"
-#~ msgstr "Aktivn reim filtru: Linern"
+#~ msgstr "Aktivní režim filtru: Lineární"
#~ msgid "Active filter mode: Nearest"
-#~ msgstr "Aktivn reim filtru: Nejbli"
+#~ msgstr "Aktivní režim filtru: Nejbližší"
#~ msgid "Enable Roland GS Mode"
-#~ msgstr "Zapnout reim Roland GS"
+#~ msgstr "Zapnout režim Roland GS"
#~ msgid "Hercules Green"
-#~ msgstr "Hercules Zelen"
+#~ msgstr "Hercules Zelená"
#~ msgid "Hercules Amber"
-#~ msgstr "Hercules Jantarov"
+#~ msgstr "Hercules Jantarová"
#~ msgctxt "lowres"
#~ msgid "Hercules Green"
-#~ msgstr "Hercules Zelen"
+#~ msgstr "Hercules Zelená"
#~ msgctxt "lowres"
#~ msgid "Hercules Amber"
-#~ msgstr "Hercules Jantarov"
+#~ msgstr "Hercules Jantarová"
#~ msgid "Save game failed!"
-#~ msgstr "Ukldn hry selhalo!"
+#~ msgstr "Ukládání hry selhalo!"
#~ msgctxt "lowres"
#~ msgid "Add Game..."
-#~ msgstr "Pidat Hru..."
+#~ msgstr "Přidat Hru..."
#~ msgid "Add Game..."
-#~ msgstr "Pidat Hru..."
+#~ msgstr "Přidat Hru..."
#~ msgid ""
#~ "Your game version has been detected using filename matching as a variant "
#~ "of %s."
#~ msgstr ""
-#~ "Bylo zjitno, e Vae verze hry pouv jmno souboru shodujc se s "
+#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s "
#~ "variantou %s."
#~ msgid "If this is an original and unmodified version, please report any"
-#~ msgstr "Pokud je toto pvodn a nezmnn verze, ohlaste prosm jakkoli"
+#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli"
#~ msgid "information previously printed by ScummVM to the team."
-#~ msgstr "pedele vypsan informace od ScummVM zptky tmu."
+#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu."
#~ msgid "Discovered %d new games."
-#~ msgstr "Objeveno %d novch her."
+#~ msgstr "Objeveno %d nových her."
#~ msgid "Command line argument not processed"
-#~ msgstr "Argument pkazov dky nebyl zpracovn"
+#~ msgstr "Argument příkazové řádky nebyl zpracován"
#~ msgid "FM Towns Emulator"
-#~ msgstr "FM Towns Emultor"
+#~ msgstr "FM Towns Emulátor"
#~ msgid "Invalid Path"
-#~ msgstr "Neplatn Cesta"
+#~ msgstr "Neplatná Cesta"
diff --git a/po/da_DA.po b/po/da_DA.po
index 0da2db01f3..ce523f345a 100644
--- a/po/da_DA.po
+++ b/po/da_DA.po
@@ -1,5 +1,5 @@
# Dansk translation for ScummVM
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Steffen Nyeland <steffen@nyeland.dk>, 2010.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-09 17:34+0100\n"
"Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n"
"Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n"
@@ -53,13 +53,13 @@ msgid "Go up"
msgstr "G op"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,7 +68,7 @@ msgid "Cancel"
msgstr "Fortryd"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vlg"
@@ -88,6 +88,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Vil du virkelig slette denne gemmer?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nej"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -385,7 +418,7 @@ msgstr "Dette spil ID er allerede i brug. Vlg venligst et andet."
msgid "~Q~uit"
msgstr "~A~fslut"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Slut ScummVM"
@@ -393,7 +426,7 @@ msgstr "Slut ScummVM"
msgid "A~b~out..."
msgstr "~O~m..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Om ScummVM"
@@ -491,26 +524,6 @@ msgstr ""
"Vil du virkelig kre fler spils detektoren? Dette kunne potentielt tilfje "
"et stort antal spil."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nej"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM kunne ikke bne det angivne bibliotek!"
@@ -664,7 +677,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Speciel farvereduceringstilstand understttet a nogle spil"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Fuldskrms tilstand"
@@ -1125,7 +1138,7 @@ msgstr "Deaktiveret GFX"
msgid "Standard Renderer"
msgstr "Standard renderer"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standard"
@@ -1373,7 +1386,7 @@ msgstr "~R~etur til oversigt"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1386,7 +1399,7 @@ msgstr "Gemmer:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1725,57 +1738,57 @@ msgstr "Miderste klik"
msgid "Right Click"
msgstr "Hjre klik"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Skjul ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Skjul andre"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Vis alle"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Vindue"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimer"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (ingen skalering)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (ingen skalering)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Aktivr billedformat korrektion"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Deaktivr billedformat korrektion"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktive grafik filtre:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Vindue tilstand"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (Ingen filtrering)"
@@ -2218,13 +2231,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Gendan spil:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Gendan"
@@ -2762,36 +2775,36 @@ msgstr "Fo~r~rige"
msgid "~N~ext"
msgstr "~N~ste"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Kun tale"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Tale og Undertekster"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Kun undertekster"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Tale & Tekst"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Vlg et Frdighedsniveau."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Se din Loom(TM) manual for hjlp."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Trning"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Ekspert"
diff --git a/po/de_DE.po b/po/de_DE.po
index 60fd903be9..86fa385f28 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,5 +1,5 @@
# German translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari <scummvm@rootfather.de>, 2015.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2015-10-16 11:00+0200\n"
"Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n"
"Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari "
@@ -55,13 +55,13 @@ msgid "Go up"
msgstr "Pfad hoch"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -70,7 +70,7 @@ msgid "Cancel"
msgstr "Abbrechen"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Auswhlen"
@@ -90,6 +90,39 @@ msgstr "Notizen:"
msgid "Ok"
msgstr "OK"
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Mchten Sie diese Aufnahme wirklich lschen?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nein"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -387,7 +420,7 @@ msgstr "Diese Spielkennung ist schon vergeben. Bitte eine andere whlen."
msgid "~Q~uit"
msgstr "~B~eenden"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "ScummVM beenden"
@@ -395,7 +428,7 @@ msgstr "ScummVM beenden"
msgid "A~b~out..."
msgstr "be~r~"
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "ber ScummVM"
@@ -495,26 +528,6 @@ msgstr ""
"Mchten Sie wirklich den PC nach Spielen durchsuchen? Mglicherweise wird "
"dabei eine grere Menge an Spielen hinzugefgt."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nein"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM konnte das gewhlte Verzeichnis nicht ffnen!"
@@ -668,7 +681,7 @@ msgstr ""
"Spezielle Farbmischungsmethoden werden von manchen Spielen untersttzt."
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Vollbildmodus"
@@ -1136,7 +1149,7 @@ msgstr "GFX ausgeschaltet"
msgid "Standard Renderer"
msgstr "Standard-Renderer"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standard"
@@ -1387,7 +1400,7 @@ msgstr "Zur Spiele~l~iste"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1400,7 +1413,7 @@ msgstr "Speichern:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1742,57 +1755,57 @@ msgstr "Mittelklick"
msgid "Right Click"
msgstr "Rechtsklick"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "ScummVM ausblenden"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Andere ausblenden"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Alle einblenden"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Fenster"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimieren"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (keine Skalierung)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal ohn.Skalieren"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Seitenverhltniskorrektur an"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Seitenverhltniskorrektur aus"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktiver Grafikfilter:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Fenstermodus"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (ohne Filter)"
@@ -1842,8 +1855,9 @@ msgstr "Schneller Modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Beenden"
@@ -2238,13 +2252,13 @@ msgstr ""
"und in Mens innerhalb des Spiels."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Spiel laden:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Laden"
@@ -2804,36 +2818,36 @@ msgstr "~Z~urck"
msgid "~N~ext"
msgstr "~W~eiter"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Nur Sprache"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Sprachausgabe und Untertitel"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Nur Untertitel"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Sprache & Text"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Whle einen Schwierigkeitsgrad."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Fr Hilfe schauen Sie ins Loom-Handbuch."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Anfnger"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Experte"
diff --git a/po/es_ES.po b/po/es_ES.po
index 9d2e236d46..cc44dae2b8 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,5 +1,5 @@
# Spanish translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Toms Maidagan, 2011.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-06 20:39+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -52,13 +52,13 @@ msgid "Go up"
msgstr "Arriba"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,7 +67,7 @@ msgid "Cancel"
msgstr "Cancelar"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Aceptar"
@@ -87,6 +87,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Seguro que quieres borrar esta partida?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "S"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "No"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -384,7 +417,7 @@ msgstr "Esta ID ya est siendo usada. Por favor, elige otra."
msgid "~Q~uit"
msgstr "~S~alir"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Salir de ScummVM"
@@ -392,7 +425,7 @@ msgstr "Salir de ScummVM"
msgid "A~b~out..."
msgstr "Acerca ~d~e"
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Acerca de ScummVM"
@@ -490,26 +523,6 @@ msgstr ""
"Seguro que quieres ejecutar la deteccin masiva? Puede que se aada un gran "
"nmero de juegos."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "S"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "No"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM no ha podido abrir el directorio!"
@@ -663,7 +676,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Modos especiales de expansin compatibles con algunos juegos"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Pantalla completa"
@@ -1132,7 +1145,7 @@ msgstr "Grf. desactivados"
msgid "Standard Renderer"
msgstr "Estndar"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Estndar"
@@ -1379,7 +1392,7 @@ msgstr "~V~olver al lanzador"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1392,7 +1405,7 @@ msgstr "Guardar partida"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1733,57 +1746,57 @@ msgstr "Clic central"
msgid "Right Click"
msgstr "Clic derecho"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Ocultar ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Ocultar otros"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mostrar todo"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Ventana"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimizar"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (sin reescalado)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Activar la correccin de aspecto"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Desactivar la correccin de aspecto"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Filtro de grficos activo:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Modo ventana"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (sin filtros)"
@@ -2228,13 +2241,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Cargar partida:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Cargar"
@@ -2774,36 +2787,36 @@ msgstr "~A~nterior"
msgid "~N~ext"
msgstr "Si~g~uiente"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Solo voces"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Voces y subttulos"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Solo subttulos"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Voces y sub."
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Selecciona un nivel de dificultad."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Consulta el manual para obtener ms informacin."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Prctica"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Experto"
diff --git a/po/eu.po b/po/eu.po
index 97e13810e5..d7722504e4 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -1,5 +1,5 @@
# Basque translation for ScummVM.
-# Copyright (C) 2012-2015 The ScummVM Team
+# Copyright (C) 2012-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Mikel Iturbe Urretxa <mikel@hamahiru.org>, 2012.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\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,13 +52,13 @@ msgid "Go up"
msgstr "Joan gora"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,7 +67,7 @@ msgid "Cancel"
msgstr "Utzi"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Aukeratu"
@@ -87,6 +87,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Ezabatu partida gorde hau?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Bai"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Ez"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -384,7 +417,7 @@ msgstr "ID hau jada erabilia izaten ari da. Mesedez, aukeratu beste bat."
msgid "~Q~uit"
msgstr "~I~rten"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Irten ScummVM-tik"
@@ -392,7 +425,7 @@ msgstr "Irten ScummVM-tik"
msgid "A~b~out..."
msgstr "Ho~n~i buruz..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "ScummVM-i buruz"
@@ -490,26 +523,6 @@ msgstr ""
"Joko detektatzaile masiboa exekutatu nahi al duzu? Honek joko kantitate "
"handia gehitu dezake."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Bai"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Ez"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM-k ezin izan du zehazturiko direktorioa ireki!"
@@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Joko batzuk onarturiko lausotze-modu bereziak"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Pantaila osoa"
@@ -1136,7 +1149,7 @@ msgstr "GFX desgaituta"
msgid "Standard Renderer"
msgstr "Estandarra (16bpp)"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Estandarra"
@@ -1387,7 +1400,7 @@ msgstr "It~z~uli abiarazlera"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1400,7 +1413,7 @@ msgstr "Gorde jokoa:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1738,58 +1751,58 @@ msgstr "Erdiko klika"
msgid "Right Click"
msgstr "Eskuin-klika"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "ScummVM ezkutatu"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Besteak ezkutatu"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Denak erakutsi"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Leihoa"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimizatu"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normala (eskalatu gabe)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normala"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Formatu-ratio zuzenketa gaituta"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Formatu-ratio zuzenketa desgaituta"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Filtro grafiko aktiboa:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Leiho modua"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
#, fuzzy
msgid "OpenGL"
msgstr "Ireki"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr ""
@@ -2231,13 +2244,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Jokoa kargatu:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Kargatu"
@@ -2780,36 +2793,36 @@ msgstr "~A~urrekoa"
msgid "~N~ext"
msgstr "~H~urrengoa"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Ahotsak bakarrik"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Ahotsak eta azpitituluak"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Azpitituluak bakarrik"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Ahotsak & azpit."
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Zailtasuna aukeratu."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Loom(TM)-ko eskuliburura jo ezazu laguntza lortzeko."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Entrenamendua"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Aditua"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index aeed76304e..9a4cc49da9 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -1,5 +1,5 @@
# Finnish translation for ScummVM.
-# Copyright (c) 2012-2015 The ScummVM Team
+# Copyright (c) 2012-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Toni Saarela <saarela@gmail.com>, 2012.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2012-12-01 19:37+0200\n"
"Last-Translator: Toni Saarela <saarela@gmail.com>\n"
"Language-Team: Finnish\n"
@@ -53,13 +53,13 @@ msgid "Go up"
msgstr "Siirry yls"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,7 +68,7 @@ msgid "Cancel"
msgstr "Peruuta"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Valitse"
@@ -88,6 +88,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Haluatko varmasti poistaa tmn pelitallennuksen?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Kyll"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Ei"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -385,7 +418,7 @@ msgstr "Pelin tunnus on jo kytss. Valitse jokin muu."
msgid "~Q~uit"
msgstr "~L~opeta"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Lopeta ScummVM"
@@ -393,7 +426,7 @@ msgstr "Lopeta ScummVM"
msgid "A~b~out..."
msgstr "Tietoa..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Tietoa ScummVM:st"
@@ -491,26 +524,6 @@ msgstr ""
"Haluatko varmasti list pelej alihakemistoineen? Tm voi list suuren "
"mrn pelej."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Kyll"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Ei"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM ei voi avata kyseist hakemistoa!"
@@ -668,7 +681,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Erityiset dithering asetukset joita jotkut pelit tukevat"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Kokoruututila"
@@ -1134,7 +1147,7 @@ msgstr "Disabloitu GFX"
msgid "Standard Renderer"
msgstr "Standardirenderij (16 bpp)"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standardi"
@@ -1387,7 +1400,7 @@ msgstr "Palaa p~e~livalitsimeen"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1400,7 +1413,7 @@ msgstr "Tallenna peli:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1738,58 +1751,58 @@ msgstr "Keskiklikkaus"
msgid "Right Click"
msgstr "Oikea klikkaus"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Piilota ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Piilota muut"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Nyt kaikki"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Ikkuna"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimoi"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normaali (ei skaalausta)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normaali (ei skaalausta)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Kuvasuhteen korjaus pll"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Kuvasuhteen korjaus pois plt"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Valittu grafiikkafiltteri:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Ikkunoitu tila"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
#, fuzzy
msgid "OpenGL"
msgstr "Avaa"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr ""
@@ -2234,13 +2247,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Lataa pelitallenne:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Lataa tallenne"
@@ -2774,36 +2787,36 @@ msgstr "E~d~ellinen"
msgid "~N~ext"
msgstr "Se~u~raava"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Vain puhe"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Puhe ja Tekstitys"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Vain tekstitys"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Puhe & teksti"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Valitse taitotasosi."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Lue Loom(TM) ohjekirjaa saadaksesi ohjeita."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Harjoitus"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Ekspertti"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index c6b785c794..d1480a3c83 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,14 +1,14 @@
# French translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Thierry Crozat <criezy@scummvm.org>, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
+"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
-"PO-Revision-Date: 2014-07-05 13:49-0000\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
+"PO-Revision-Date: 2015-12-26 16:06+0000\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <scummvm-devel@lists.sf.net>\n"
"Language: Francais\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Poedit 1.6.6\n"
+"X-Generator: Poedit 1.8.6\n"
#: gui/about.cpp:94
#, c-format
@@ -25,11 +25,11 @@ msgstr "(compil sur %s)"
#: gui/about.cpp:101
msgid "Features compiled in:"
-msgstr "Options incluses:"
+msgstr "Options incluses :"
#: gui/about.cpp:110
msgid "Available engines:"
-msgstr "Moteurs disponibles:"
+msgstr "Moteurs disponibles :"
#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
@@ -53,12 +53,12 @@ msgid "Go up"
msgstr "Remonter"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
@@ -68,25 +68,57 @@ msgid "Cancel"
msgstr "Annuler"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Choisir"
#: gui/editrecorddialog.cpp:58
msgid "Author:"
-msgstr ""
+msgstr "Auteur :"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
-msgstr "Nom:"
+msgstr "Nom :"
#: gui/editrecorddialog.cpp:60
msgid "Notes:"
-msgstr ""
+msgstr "Notes :"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
-msgstr ""
+msgstr "Ok"
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr "Choisir le fichier charger"
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr "Choisir le nom de fichier pour la sauvegarde"
+
+#: gui/filebrowser-dialog.cpp:132
+msgid "Do you really want to overwrite the file?"
+msgstr "Voulez-vous vraiment remplacer ce fichier ?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Oui"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Non"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@@ -151,7 +183,7 @@ msgstr "Touche associe: %s"
#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
#, c-format
msgid "Associated key : none"
-msgstr "Touche associe: aucune"
+msgstr "Touche associe : aucune"
#: gui/KeysDialog.cpp:90
msgid "Please select an action"
@@ -167,7 +199,7 @@ msgstr "Jeu"
#: gui/launcher.cpp:197
msgid "ID:"
-msgstr "ID:"
+msgstr "ID :"
#: gui/launcher.cpp:197 gui/launcher.cpp:199 gui/launcher.cpp:200
msgid ""
@@ -180,7 +212,7 @@ msgstr ""
#: gui/launcher.cpp:199
msgctxt "lowres"
msgid "ID:"
-msgstr "ID:"
+msgstr "ID :"
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
@@ -189,11 +221,11 @@ msgstr "Nom complet du jeu"
#: gui/launcher.cpp:206
msgctxt "lowres"
msgid "Name:"
-msgstr "Nom:"
+msgstr "Nom :"
#: gui/launcher.cpp:210
msgid "Language:"
-msgstr "Langue:"
+msgstr "Langue :"
#: gui/launcher.cpp:210 gui/launcher.cpp:211
msgid ""
@@ -211,7 +243,7 @@ msgstr "<defaut>"
#: gui/launcher.cpp:222
msgid "Platform:"
-msgstr "Plateforme:"
+msgstr "Systme :"
#: gui/launcher.cpp:222 gui/launcher.cpp:224 gui/launcher.cpp:225
msgid "Platform the game was originally designed for"
@@ -220,7 +252,7 @@ msgstr "Plateforme pour laquelle votre jeu a t conu"
#: gui/launcher.cpp:224
msgctxt "lowres"
msgid "Platform:"
-msgstr "Systme:"
+msgstr "Systme :"
#: gui/launcher.cpp:237
msgid "Engine"
@@ -311,16 +343,16 @@ msgstr "Chemins"
#: gui/launcher.cpp:323
msgid "Game Path:"
-msgstr "Chemin du Jeu:"
+msgstr "Chemin du Jeu :"
#: gui/launcher.cpp:325
msgctxt "lowres"
msgid "Game Path:"
-msgstr "Chemin du Jeu:"
+msgstr "Chemin du Jeu :"
#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
-msgstr "Extra:"
+msgstr "Extra :"
#: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333
msgid "Specifies path to additional data used by the game"
@@ -329,11 +361,11 @@ msgstr "Dfinie un chemin vers des donnes suplmentaires utilises par le jeu"
#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
-msgstr "Extra:"
+msgstr "Extra :"
#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
-msgstr "Sauvegardes:"
+msgstr "Sauvegardes :"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
@@ -343,7 +375,7 @@ msgstr "Dfinie l'emplacement o les fichiers de sauvegarde sont crs"
#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
-msgstr "Sauvegardes:"
+msgstr "Sauvegardes :"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
@@ -385,7 +417,7 @@ msgstr "Cet ID est dj utilis par un autre jeu. Choisissez en un autre svp."
msgid "~Q~uit"
msgstr "~Q~uitter"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Quitter ScummVM"
@@ -393,7 +425,7 @@ msgstr "Quitter ScummVM"
msgid "A~b~out..."
msgstr " ~P~ropos..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr " propos de ScummVM"
@@ -467,13 +499,13 @@ msgstr "Recherche dans la liste de jeux"
#: gui/launcher.cpp:661 gui/launcher.cpp:1222
msgid "Search:"
-msgstr "Filtre:"
+msgstr "Filtre :"
#: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214
#: engines/mohawk/myst.cpp:245 engines/mohawk/riven.cpp:718
#: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600
msgid "Load game:"
-msgstr "Charger le jeu:"
+msgstr "Charger le jeu :"
#: gui/launcher.cpp:685 engines/dialogs.cpp:115
#: backends/platform/wince/CEActionsPocket.cpp:267
@@ -492,26 +524,6 @@ msgstr ""
"Voulez-vous vraiment lancer la dtection automatique des jeux ? Cela peut "
"potentiellement ajouter un grand nombre de jeux."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Oui"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Non"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM n'a pas pu ouvrir le rpertoire slectionn."
@@ -522,7 +534,7 @@ msgstr "ScummVM n'a pas trouv de jeux dans le rpertoire slectionn."
#: gui/launcher.cpp:867
msgid "Pick the game:"
-msgstr "Choisissez le jeu:"
+msgstr "Choisissez le jeu :"
#: gui/launcher.cpp:941
msgid "Do you really want to remove this game configuration?"
@@ -547,7 +559,7 @@ msgstr "Ajout Massif..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr ""
+msgstr "Enregistrer..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@@ -555,7 +567,7 @@ msgstr "... en cours ..."
#: gui/massadd.cpp:259
msgid "Scan complete!"
-msgstr "Examen termin!"
+msgstr "Examen termin !"
#: gui/massadd.cpp:262
#, c-format
@@ -575,21 +587,19 @@ msgstr ""
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
-msgstr ""
+msgstr "Arrter"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
-msgstr ""
+msgstr "Changer la description de l'enregistrement"
#: gui/onscreendialog.cpp:108
-#, fuzzy
msgid "Switch to Game"
-msgstr "Commuter"
+msgstr "Retourner au jeu"
#: gui/onscreendialog.cpp:110
-#, fuzzy
msgid "Fast replay"
-msgstr "Mode rapide"
+msgstr "Rejouer rapidement"
#: gui/options.cpp:85
msgid "Never"
@@ -639,7 +649,7 @@ msgstr "Aucune"
#: gui/options.cpp:389
msgid "Failed to apply some of the graphic options changes:"
-msgstr "Certaines options graphiques n'ont pu tre changes:"
+msgstr "Certaines options graphiques n'ont pu tre changes :"
#: gui/options.cpp:401
msgid "the video mode could not be changed."
@@ -655,18 +665,18 @@ msgstr "la correction de rapport d'aspect n'a pu tre change."
#: gui/options.cpp:732
msgid "Graphics mode:"
-msgstr "Mode graphique:"
+msgstr "Mode graphique :"
#: gui/options.cpp:746
msgid "Render mode:"
-msgstr "Mode de rendu:"
+msgstr "Mode de rendu :"
#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Mode spcial de tramage support par certains jeux"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Plein cran"
@@ -680,11 +690,11 @@ msgstr "Corrige le rapport d'aspect pour les jeu 320x200"
#: gui/options.cpp:769
msgid "Preferred Device:"
-msgstr "Sortie Prfr:"
+msgstr "Sortie Prfr :"
#: gui/options.cpp:769
msgid "Music Device:"
-msgstr "Sortie Audio:"
+msgstr "Sortie Audio :"
#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
@@ -699,16 +709,16 @@ msgstr "Spcifie le priphrique de sortie audio ou l'mulateur de carte audio"
#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
-msgstr "Sortie Prfr:"
+msgstr "Sortie Prfr :"
#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
-msgstr "Sortie Audio:"
+msgstr "Sortie Audio :"
#: gui/options.cpp:798
msgid "AdLib emulator:"
-msgstr "mulateur AdLib:"
+msgstr "mulateur AdLib :"
#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
@@ -716,7 +726,7 @@ msgstr "AdLib est utilis pour la musique dans de nombreux jeux"
#: gui/options.cpp:809
msgid "Output rate:"
-msgstr "Frquence:"
+msgstr "Frquence :"
#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
@@ -728,7 +738,7 @@ msgstr ""
#: gui/options.cpp:820
msgid "GM Device:"
-msgstr "Sortie GM:"
+msgstr "Sortie GM :"
#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
@@ -744,7 +754,7 @@ msgstr "Utiliser le premier priphrique disponible"
#: gui/options.cpp:854
msgid "SoundFont:"
-msgstr "Banque de sons:"
+msgstr "Banque de sons :"
#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
@@ -755,7 +765,7 @@ msgstr ""
#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
-msgstr "SoundFont:"
+msgstr "SoundFont :"
#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
@@ -767,7 +777,7 @@ msgstr "Utiliser la fois MIDI et AdLib"
#: gui/options.cpp:865
msgid "MIDI gain:"
-msgstr "Gain MIDI:"
+msgstr "Gain MIDI :"
#: gui/options.cpp:872
msgid "FluidSynth Settings"
@@ -775,7 +785,7 @@ msgstr "Paramtres FluidSynth"
#: gui/options.cpp:879
msgid "MT-32 Device:"
-msgstr "Sortie MT-32:"
+msgstr "Sortie MT-32 :"
#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
@@ -818,7 +828,7 @@ msgstr "Ne pas utiliser la musique Roland MT-32"
#: gui/options.cpp:925
msgid "Text and Speech:"
-msgstr "Dialogue:"
+msgstr "Dialogue :"
#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
@@ -834,12 +844,12 @@ msgstr "Les deux"
#: gui/options.cpp:933
msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
+msgstr "Vitesse des ST :"
#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
-msgstr "Dialogue:"
+msgstr "Dialogue :"
#: gui/options.cpp:939
msgid "Spch"
@@ -861,16 +871,16 @@ msgstr "Affiche les sous-titres et joue les dialogues audio"
#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
+msgstr "Vitesse des ST :"
#: gui/options.cpp:959
msgid "Music volume:"
-msgstr "Volume Musique:"
+msgstr "Volume Musique :"
#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
-msgstr "Musique:"
+msgstr "Musique :"
#: gui/options.cpp:968
msgid "Mute All"
@@ -878,7 +888,7 @@ msgstr "Silence"
#: gui/options.cpp:971
msgid "SFX volume:"
-msgstr "Volume Bruitage:"
+msgstr "Volume Bruitage :"
#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
@@ -887,25 +897,25 @@ msgstr "Volume des effets spciaux sonores"
#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
-msgstr "Bruitage:"
+msgstr "Bruitage :"
#: gui/options.cpp:981
msgid "Speech volume:"
-msgstr "Volume Dialogues:"
+msgstr "Volume Dialogues :"
#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
-msgstr "Dialogues:"
+msgstr "Dialogues :"
#: gui/options.cpp:1140
msgid "Theme Path:"
-msgstr "Thmes:"
+msgstr "Thmes :"
#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
-msgstr "Thmes:"
+msgstr "Thmes :"
#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
@@ -915,12 +925,12 @@ msgstr ""
#: gui/options.cpp:1157
msgid "Plugins Path:"
-msgstr "Plugins:"
+msgstr "Plugins :"
#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
-msgstr "Plugins:"
+msgstr "Plugins :"
#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
@@ -933,20 +943,20 @@ msgstr "Divers"
#: gui/options.cpp:1172
msgid "Theme:"
-msgstr "Thme:"
+msgstr "Thme :"
#: gui/options.cpp:1176
msgid "GUI Renderer:"
-msgstr "Interface:"
+msgstr "Interface :"
#: gui/options.cpp:1188
msgid "Autosave:"
-msgstr "Sauvegarde auto:"
+msgstr "Sauvegarde auto :"
#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
-msgstr "Sauvegarde:"
+msgstr "Sauvegarde :"
#: gui/options.cpp:1198
msgid "Keys"
@@ -954,7 +964,7 @@ msgstr "Touches"
#: gui/options.cpp:1205
msgid "GUI Language:"
-msgstr "Langue:"
+msgstr "Langue :"
#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
@@ -994,29 +1004,28 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
-msgstr ""
+msgstr "# suivant"
#: gui/predictivedialog.cpp:88
msgid "add"
-msgstr ""
+msgstr "ajouter"
#: gui/predictivedialog.cpp:92
-#, fuzzy
msgid "Delete char"
-msgstr "Supprimer"
+msgstr "Supprimer le caractre"
#: gui/predictivedialog.cpp:96
msgid "<"
-msgstr ""
+msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
-msgstr ""
+msgstr "* Pr"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr ""
+msgstr "Enregistreur ou Joueur de Gameplay"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -1025,36 +1034,33 @@ msgstr "Supprimer"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr ""
+msgstr "Enregistrer"
#: gui/recorderdialog.cpp:72
-#, fuzzy
msgid "Playback"
-msgstr "Jouer"
+msgstr "Lecture"
#: gui/recorderdialog.cpp:74
msgid "Edit"
-msgstr ""
+msgstr "Editer"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
-msgstr ""
+msgstr "Auteur : "
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr ""
+msgstr "Notes : "
#: gui/recorderdialog.cpp:155
-#, fuzzy
msgid "Do you really want to delete this record?"
-msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?"
+msgstr "Voulez-vous vraiment supprimer cet enregistrement ?"
#: gui/recorderdialog.cpp:174
-#, fuzzy
msgid "Unknown Author"
-msgstr "Erreur inconnue"
+msgstr "Auteur inconnu"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1082,15 +1088,15 @@ msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?"
#: gui/saveload-dialog.cpp:385 gui/saveload-dialog.cpp:884
msgid "Date: "
-msgstr "Date: "
+msgstr "Date : "
#: gui/saveload-dialog.cpp:389 gui/saveload-dialog.cpp:890
msgid "Time: "
-msgstr "Heure: "
+msgstr "Heure : "
#: gui/saveload-dialog.cpp:395 gui/saveload-dialog.cpp:898
msgid "Playtime: "
-msgstr "Dure de jeu: "
+msgstr "Dure de jeu : "
#: gui/saveload-dialog.cpp:408 gui/saveload-dialog.cpp:496
msgid "Untitled savestate"
@@ -1138,7 +1144,7 @@ msgstr "GFX dsactiv"
msgid "Standard Renderer"
msgstr "Rendu Standard"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Normal"
@@ -1164,19 +1170,19 @@ msgstr "Actif"
#: gui/fluidsynth-dialog.cpp:72
msgid "Room:"
-msgstr "Pice:"
+msgstr "Pice :"
#: gui/fluidsynth-dialog.cpp:79
msgid "Damp:"
-msgstr "Attnuation:"
+msgstr "Attnuation :"
#: gui/fluidsynth-dialog.cpp:86
msgid "Width:"
-msgstr "Largeur:"
+msgstr "Largeur :"
#: gui/fluidsynth-dialog.cpp:93 gui/fluidsynth-dialog.cpp:111
msgid "Level:"
-msgstr "Niveau:"
+msgstr "Niveau :"
#: gui/fluidsynth-dialog.cpp:100
msgid "Chorus"
@@ -1184,19 +1190,19 @@ msgstr "Chorus"
#: gui/fluidsynth-dialog.cpp:104
msgid "N:"
-msgstr "N:"
+msgstr "N :"
#: gui/fluidsynth-dialog.cpp:118
msgid "Speed:"
-msgstr "Vitesse:"
+msgstr "Vitesse :"
#: gui/fluidsynth-dialog.cpp:125
msgid "Depth:"
-msgstr "Profondeur:"
+msgstr "Profondeur :"
#: gui/fluidsynth-dialog.cpp:132
msgid "Type:"
-msgstr "Type:"
+msgstr "Type :"
#: gui/fluidsynth-dialog.cpp:135
msgid "Sine"
@@ -1208,7 +1214,7 @@ msgstr "Triangle"
#: gui/fluidsynth-dialog.cpp:140
msgid "Interpolation:"
-msgstr "Interpolation:"
+msgstr "Interpolation :"
#: gui/fluidsynth-dialog.cpp:143
msgid "None (fastest)"
@@ -1266,7 +1272,7 @@ msgstr "Passer la phrase"
#: base/main.cpp:507
msgid "Error running game:"
-msgstr "Erreur lors de l'xcution du jeu:"
+msgstr "Erreur lors de l'xcution du jeu : "
#: base/main.cpp:554
msgid "Could not find any engine capable of running the selected game"
@@ -1302,7 +1308,7 @@ msgstr "Chemin inexistant"
#: common/error.cpp:54
msgid "Path not a directory"
-msgstr "Chemin n'est pas un rpertoire"
+msgstr "Le chemin n'est pas un rpertoire"
#: common/error.cpp:56
msgid "Path not a file"
@@ -1314,11 +1320,11 @@ msgstr "Impossible de crer le fichier"
#: common/error.cpp:61
msgid "Reading data failed"
-msgstr "Echec de la lecture"
+msgstr "chec de la lecture"
#: common/error.cpp:63
msgid "Writing data failed"
-msgstr "Echec de l'criture des donnes"
+msgstr "chec de l'criture des donnes"
#: common/error.cpp:66
msgid "Could not find suitable engine plugin"
@@ -1386,11 +1392,11 @@ msgstr "Retour au ~L~anceur"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
-msgstr "Sauvegarde:"
+msgstr "Sauvegarde :"
#: engines/dialogs.cpp:116 backends/platform/symbian/src/SymbianActions.cpp:44
#: backends/platform/wince/CEActionsPocket.cpp:43
@@ -1399,7 +1405,7 @@ msgstr "Sauvegarde:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1488,7 +1494,7 @@ msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"Echec du chargement (%s)! . Lisez le fichier README pour les informations de "
+"Echec du chargement (%s) ! Lisez le fichier README pour les informations de "
"base et les instructions pour obtenir de l'aide supplmentaire."
#: engines/engine.cpp:480
@@ -1497,7 +1503,7 @@ msgid ""
"ScummVM. As such, it is likely to be unstable, and any saves you make might "
"not work in future versions of ScummVM."
msgstr ""
-"Attention:le jeu que vous vous apprtez jouer n'est pas encore "
+"Attention : le jeu que vous vous apprtez jouer n'est pas encore "
"compltement support par ScummVM. Il est donc instable et les sauvegardes "
"peuvent ne pas marcher avec une future version de ScummVM."
@@ -1515,7 +1521,7 @@ msgstr "mulateur DOSBox OPL"
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
-msgstr ""
+msgstr "ALSA direct-FM"
#: audio/mididrv.cpp:209
#, c-format
@@ -1537,8 +1543,8 @@ msgid ""
"The selected audio device '%s' cannot be used. See log file for more "
"information."
msgstr ""
-"The selected audio device '%s' ne peut pas tre utilis. Voir le fichier de "
-"log pour plus de dtails."
+"Le priphrique audio slectionn '%s' ne peut pas tre utilis. Voir le "
+"fichier de log pour plus de dtails."
#: audio/mididrv.cpp:257
#, c-format
@@ -1689,7 +1695,7 @@ msgstr "Sans changement d'chelle (vous devez faire dfiler l'cran)"
#: backends/platform/ds/arm9/source/dsoptions.cpp:111
msgid "Brightness:"
-msgstr "Luminosit:"
+msgstr "Luminosit :"
#: backends/platform/ds/arm9/source/dsoptions.cpp:121
msgid "High quality audio (slower) (reboot)"
@@ -1738,57 +1744,57 @@ msgstr "Clic Milieu"
msgid "Right Click"
msgstr "Clic Droit"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Masquer ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Masquer les autres"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Tout afficher"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Fentre"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Placer dans le Dock"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (chelle d'origine)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Activer la correction du rapport d'aspect"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Dsactiver la correction du rapport d'aspect"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Mode graphique actif:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Mode Fentre"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (sans filtre)"
@@ -1838,9 +1844,8 @@ msgstr "Mode rapide"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218
-#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
-#: engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
+#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Quitter"
@@ -1902,7 +1907,7 @@ msgstr "DVD"
#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
msgid "Status:"
-msgstr "Status:"
+msgstr "tat :"
#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
msgid "Unknown"
@@ -1926,15 +1931,15 @@ msgstr "Serveur:"
#: backends/platform/wii/options.cpp:110
msgid "Share:"
-msgstr "Disque partag:"
+msgstr "Disque partag :"
#: backends/platform/wii/options.cpp:114
msgid "Username:"
-msgstr "Nom d'utilisateur:"
+msgstr "Nom d'utilisateur :"
#: backends/platform/wii/options.cpp:118
msgid "Password:"
-msgstr "Mot de passe:"
+msgstr "Mot de passe :"
#: backends/platform/wii/options.cpp:121
msgid "Init network"
@@ -2213,34 +2218,36 @@ msgstr ""
"ScummVM"
#: engines/agi/detection.cpp:157
-#, fuzzy
msgid "Use an alternative palette"
-msgstr "Utiliser une intro alternative (version CD uniquement)"
+msgstr "Utiliser une palette alternative"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
+"Utiliser une palette de remplacement commune tous les jeux Amiga. C'est "
+"l'ancien comportement."
#: engines/agi/detection.cpp:167
-#, fuzzy
msgid "Mouse support"
-msgstr "Support des interruptions"
+msgstr "Support de la souris"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
+"Activer le support de la souris. Cela permet d'utiliser la souris pour les "
+"mouvements et la navigation dans les menus."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
-msgstr "Charger le jeu:"
+msgstr "Charger le jeu :"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Charger"
@@ -2252,7 +2259,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"chec du chargement de l'tat du jeu depuis le fichier:\n"
+"chec du chargement de l'tat du jeu depuis le fichier :\n"
"\n"
"%s"
@@ -2263,7 +2270,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"chec de l'enregistrement de l'tat du jeu dans le fichier:\n"
+"chec de l'enregistrement de l'tat du jeu dans le fichier :\n"
"\n"
"%s"
@@ -2274,23 +2281,22 @@ msgid ""
"\n"
"%s"
msgstr ""
-"tat du jeu enregistr avec succs dans le fichier:\n"
+"tat du jeu enregistr avec succs dans le fichier :\n"
"\n"
"%s"
#: engines/agos/animation.cpp:557
#, c-format
msgid "Cutscene file '%s' not found!"
-msgstr "Fichier de squence '%s' non trouv!"
+msgstr "Fichier de squence '%s' non trouv !"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
-#, fuzzy
msgid "Color Blind Mode"
-msgstr "Mode Clic"
+msgstr "Mode Daltonien"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr ""
+msgstr "Activer le mode Daltonien par dfaut"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2346,11 +2352,11 @@ msgstr "chec de la sauvegarde."
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr ""
+msgstr "Mode Sanglant"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr ""
+msgstr "Activer le Mode Sanglant quand il est disponible"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2466,8 +2472,8 @@ msgid ""
"General MIDI ones. It is still possible that\n"
"some tracks sound incorrect."
msgstr ""
-"Il semble que vous utilisiez un priphrique General MIDI,\n"
-"mais ce jeu ne support que le MIDI Roland MT32. Nous essayons\n"
+"Il semble que vous utilisez un priphrique General MIDI,\n"
+"mais ce jeu ne supporte que le MIDI Roland MT32. Nous essayons\n"
"d'associer les instruments Roland MT32 aux instruments General\n"
"MIDI. Cependant il est possible que quelques pistes ne soient\n"
" pas joues correctement."
@@ -2482,6 +2488,13 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
+"Le fichier de sauvegarde original suivant a t trouv dans le rpertoire du "
+"jeu :\n"
+"\n"
+"%s %s\n"
+"\n"
+"Voulez-vous utiliser cette sauvegarde avec ScummVM ?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@@ -2489,6 +2502,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
+"Une sauvegarde existe dj dans l'emplacement %d. craser ?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@@ -2500,6 +2515,11 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
+"%d sauvegardes originales ont t importes avec succs. Si vous voulez\n"
+"importer d'autre sauvegardes originales plus tard, vous devrez ouvrir la\n"
+"console de debug de ScummVM et utiliser la commande 'import_savefile'.\n"
+"\n"
+" \n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@@ -2640,15 +2660,17 @@ msgstr "Utiliser une intro alternative (version CD uniquement)"
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
-msgstr ""
+msgstr "Passer l'tape de tramage EGA (fonds de couleurs pleines)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
+"Passer l'tape de tramage dans les jeux EGA ; les images utilisent des "
+"couleurs pleines"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
-msgstr "Prfrer les effets sonors digitals"
+msgstr "Prfrer les effets sonores digitaux"
#: engines/sci/detection.cpp:385
msgid "Prefer digital sound effects instead of synthesized ones"
@@ -2719,13 +2741,11 @@ msgstr "Jeu en pause. Appuyer sur Espace pour Reprendre."
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
msgstr "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
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
msgstr "Voulez-vous vraiment quitter ? (O/N)O"
@@ -2781,42 +2801,42 @@ msgstr "~P~rcdent"
msgid "~N~ext"
msgstr "~S~uivant"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Voix"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Voix et Sous-titres"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Sous-titres"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Voix & ST"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Slectionnez un niveau de comptence."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Reportez-vous votre manuel d'instruction."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Essai"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Expert"
#: engines/scumm/help.cpp:74
msgid "Common keyboard commands:"
-msgstr "Commandes clavier communes:"
+msgstr "Commandes clavier communes :"
#: engines/scumm/help.cpp:75
msgid "Save / Load dialog"
@@ -2840,7 +2860,7 @@ msgstr "Espace"
#: engines/scumm/help.cpp:79
msgid "Pause game"
-msgstr "Mettre en pause:"
+msgstr "Mettre en pause"
#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:85
#: engines/scumm/help.cpp:96 engines/scumm/help.cpp:97
@@ -2852,7 +2872,7 @@ msgstr "Ctrl"
#: engines/scumm/help.cpp:80
msgid "Load game state 1-10"
-msgstr "Charger sauvegarde 1-10:"
+msgstr "Charger sauvegarde 1-10"
#: engines/scumm/help.cpp:81 engines/scumm/help.cpp:85
#: engines/scumm/help.cpp:87 engines/scumm/help.cpp:101
@@ -2862,7 +2882,7 @@ msgstr "Alt"
#: engines/scumm/help.cpp:81
msgid "Save game state 1-10"
-msgstr "crire sauvegarde 1-10:"
+msgstr "crire sauvegarde 1-10"
#: engines/scumm/help.cpp:87 engines/scumm/help.cpp:90
msgid "Enter"
@@ -2890,7 +2910,7 @@ msgstr "Simuler bouton droit de la souris"
#: engines/scumm/help.cpp:94
msgid "Special keyboard commands:"
-msgstr "Commandes clavier spciales:"
+msgstr "Commandes clavier spciales :"
#: engines/scumm/help.cpp:95
msgid "Show / Hide console"
@@ -2902,7 +2922,7 @@ msgstr "Ouvrir le dbugger"
#: engines/scumm/help.cpp:97
msgid "Show memory consumption"
-msgstr "Afficher la consomation de mmoire"
+msgstr "Afficher la consommation de mmoire"
#: engines/scumm/help.cpp:98
msgid "Run in fast mode (*)"
@@ -2946,11 +2966,11 @@ msgstr " ou comportement incorrect du jeu."
#: engines/scumm/help.cpp:115
msgid "Spinning drafts on the keyboard:"
-msgstr "Filage au clavier:"
+msgstr "Filage au clavier :"
#: engines/scumm/help.cpp:117
msgid "Main game controls:"
-msgstr "Controles principaux du jeu:"
+msgstr "Contrles principaux du jeu :"
#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
#: engines/scumm/help.cpp:162
@@ -3235,25 +3255,24 @@ msgid "Third kid"
msgstr "Troisime enfant"
#: engines/scumm/help.cpp:292
-#, fuzzy
msgid "Toggle Inventory/IQ Points display"
-msgstr "Basculer l'Affichage Central"
+msgstr "Basculer entre Inventaire/Points QI"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr ""
+msgstr "Basculer entre Clavier et Souris pour les combats (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr ""
+msgstr "* Le clavier peut toujours tre utilis pour les combats,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr ""
+msgstr " donc malgr le message dans le jeu cela simplement"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr ""
+msgstr " active/dsactive le combat la souris"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@@ -3290,7 +3309,7 @@ msgstr "Frapper bas"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr ""
+msgstr "Sucker punch"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3349,23 +3368,20 @@ msgid "Fly to lower right"
msgstr "Voler vers la bas droite"
#: engines/scumm/input.cpp:572
-#, fuzzy
msgid "Snap scroll on"
-msgstr "Dfilement rgulier"
+msgstr "Dfilement par -coups"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
-msgstr ""
+msgstr "Dfilement rgulier"
#: engines/scumm/input.cpp:587
-#, fuzzy
msgid "Music volume: "
-msgstr "Volume Musique:"
+msgstr "Volume Musique :"
#: engines/scumm/input.cpp:604
-#, fuzzy
msgid "Subtitle speed: "
-msgstr "Vitesse des ST:"
+msgstr "Vitesse des ST :"
#: engines/scumm/scumm.cpp:1832
#, c-format
@@ -3377,28 +3393,31 @@ msgstr ""
"mais %s manque. Utilise AdLib la place."
#: engines/scumm/scumm.cpp:2644
-#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Normalement, Maniac Mansion devrait dmarrer maintenant. Cependant ScummVM "
-"ne supporte pas encore cette fonctionalit. Pour jouer Maniac Mansion, "
-"choisissez 'Ajouter...' dans le Lanceur de ScummVM et slectionnez le "
-"rpertoire 'Maniac Mansion' dans le rpertoire du jeu Day Of The Tentacle."
+"Normalement, Maniac Mansion devrait dmarrer maintenant. Mais pour que cela "
+"marche il faut que les fichiers du jeu Maniac Mansion soient dans e "
+"rpertoire 'Maniac' l'intrieur du rpertoire du jeu Day of the Tentacle, "
+"et le jeu doit tre ajouter ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"L'excutable Macintosh de 'Loom' n'a pas t trouv pour\n"
+"y lire les instruments. La musique sera dsactive."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"L'excutable Macintosh de 'Monkey Island' n'a pas t trouv pour\n"
+"y lire les instruments. La musique sera dsactive."
#: engines/sky/compact.cpp:130
msgid ""
@@ -3519,14 +3538,14 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr ""
+msgstr "Afficher le compteur FPS"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
+"Affiche le nombre d'images par seconde (FPS) dans le coin en haut gauche"
#: engines/zvision/detection_tables.h:52
-#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
"Utiliser les dialogues sauvegarde/chargement d'origine plutt que ceux de "
@@ -3534,38 +3553,37 @@ msgstr ""
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr ""
+msgstr "Doubler les FPS"
#: engines/zvision/detection_tables.h:62
msgid "Increase framerate from 30 to 60 FPS"
-msgstr ""
+msgstr "Augmente de 30 60 le nombre d'images par seconde"
#: engines/zvision/detection_tables.h:71
-#, fuzzy
msgid "Enable Venus"
-msgstr "Activer le mode helium"
+msgstr "Activer Venus"
#: engines/zvision/detection_tables.h:72
-#, fuzzy
msgid "Enable the Venus help system"
-msgstr "Activer le mode helium"
+msgstr "Active le systme d'aide Venus"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr ""
+msgstr "Dsactiver les animations en tournant"
#: engines/zvision/detection_tables.h:82
msgid "Disable animation while turning in panorama mode"
-msgstr ""
+msgstr "Dsactiver les animations en tournant dans le mode panorama"
#: engines/zvision/detection_tables.h:91
msgid "Use high resolution MPEG video"
-msgstr ""
+msgstr "Utiliser les vidos MPEG haute rsolution"
#: engines/zvision/detection_tables.h:92
-#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
-msgstr "Utiliser les curseurs argents au lieu des curseurs normaux dors"
+msgstr ""
+"Utiliser les vidos MPEG du DVD la place des vidos AVI de plus basse "
+"rsolution"
#~ msgid "EGA undithering"
#~ msgstr "Dtramage EGA"
diff --git a/po/gl_ES.po b/po/gl_ES.po
index 905c87d316..76c76d492b 100644
--- a/po/gl_ES.po
+++ b/po/gl_ES.po
@@ -1,5 +1,5 @@
# Galician translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Santiago G. Sanz <s.sanz@uvigo.es>, 2013.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-02 09:51+0100\n"
"Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n"
"Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n"
@@ -52,13 +52,13 @@ msgid "Go up"
msgstr "Arriba"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,7 +67,7 @@ msgid "Cancel"
msgstr "Cancelar"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Elixir"
@@ -87,6 +87,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Seguro que queres eliminar esta partida?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Si"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Non"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -382,7 +415,7 @@ msgstr "Este ID de xogo xa est en uso. Selecciona outro."
msgid "~Q~uit"
msgstr "~S~ar"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Sar de ScummVM"
@@ -390,7 +423,7 @@ msgstr "Sar de ScummVM"
msgid "A~b~out..."
msgstr "Ace~r~ca de..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Acerca de ScummVM"
@@ -488,26 +521,6 @@ msgstr ""
"Queres executar o detector de xogos en masa? posible que se engada un gran "
"nmero de xogos."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Si"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Non"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM non foi quen de abrir o directorio!"
@@ -660,7 +673,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Modos de interpolacin de cores compatibles con algns xogos"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Pantalla completa"
@@ -1125,7 +1138,7 @@ msgstr "Efectos desactivados"
msgid "Standard Renderer"
msgstr "Procesamento estndar"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Estndar"
@@ -1373,7 +1386,7 @@ msgstr "~V~olver ao Iniciador"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1386,7 +1399,7 @@ msgstr "Gardar partida:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1725,57 +1738,57 @@ msgstr "Botn central"
msgid "Right Click"
msgstr "Botn secundario"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Ocultar ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Ocultar outros"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mostrar todo"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Vent"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimizar"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (sen escala)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (sen escala)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Correccin de proporcin activada"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Correccin de proporcin desactivada"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Filtro de grficos activo:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Modo en vent"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (Sen filtraxe)"
@@ -2218,13 +2231,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Restaurar xogo:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Restaurar"
@@ -2764,36 +2777,36 @@ msgstr "~A~nterior"
msgid "~N~ext"
msgstr "~S~eguinte"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "S voz"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Voz e subttulos"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "S subttulos"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Voz e subs"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Selecciona un nivel de habilidade."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Consulta o manual de Loom(TM) para obter axuda."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Prctica"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Experto"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 89538e9f61..c13b1f0434 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,5 +1,5 @@
# Hungarian translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# George Kormendi <grubycza@hotmail.com>, 2010.
#
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
-"PO-Revision-Date: 2015-10-12 11:10+0200\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
+"PO-Revision-Date: 2015-12-23 05:02+0100\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian\n"
"Language: Magyar\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Poedit 1.8.6\n"
#: gui/about.cpp:94
#, c-format
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr "Feljebb"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr "Mgse"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vlaszt"
@@ -89,6 +89,38 @@ msgstr "Megjegyzs:"
msgid "Ok"
msgstr "Ok"
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr "Vlassz betltend fjlt"
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr "rd be a fjlnevet mentshez"
+
+#: gui/filebrowser-dialog.cpp:132
+msgid "Do you really want to overwrite the file?"
+msgstr "Biztos hogy fell akarod rni a fjlt?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Igen"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nem"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -175,7 +207,8 @@ msgid ""
"Short game identifier used for referring to saved games and running the game "
"from the command line"
msgstr ""
-"Rvid jtkazonost a jtkmentsekhez s a jtk parancssori futtatshoz"
+"Rvid jtkazonost a jtkmentsekhez s a jtk parancssori "
+"futtatshoz"
#: gui/launcher.cpp:199
msgctxt "lowres"
@@ -200,7 +233,8 @@ msgid ""
"Language of the game. This will not turn your Spanish game version into "
"English"
msgstr ""
-"A jtk nyelve. Ne lltsd t a pl. Spanyol nyelv jtkodat Angol nyelvre"
+"A jtk nyelve. Ne lltsd t a pl. Spanyol nyelv jtkodat Angol "
+"nyelvre"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
@@ -384,7 +418,7 @@ msgstr "Ez a jtkazonost ID mr foglalt, Vlassz egy msikat."
msgid "~Q~uit"
msgstr "Kilps"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "ScummVM bezrsa"
@@ -392,7 +426,7 @@ msgstr "ScummVM bezrsa"
msgid "A~b~out..."
msgstr "Nvjegy"
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "ScummVM nvjegy"
@@ -487,28 +521,8 @@ msgid ""
"Do you really want to run the mass game detector? This could potentially add "
"a huge number of games."
msgstr ""
-"Biztos hogy futtatod a Masszv jtkdetektort? Ez potencilisan sok jtkot "
-"hozzad a listhoz."
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Igen"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nem"
+"Biztos hogy futtatod a Masszv jtkdetektort? Ez potencilisan sok "
+"jtkot hozzad a listhoz."
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
@@ -532,12 +546,14 @@ msgstr "Akarod hogy betltsem a jtkllst?"
#: gui/launcher.cpp:1048
msgid "This game does not support loading games from the launcher."
-msgstr "Ez a jtk nem tmogatja a jtklls betltst az indtbl."
+msgstr ""
+"Ez a jtk nem tmogatja a jtklls betltst az indtbl."
#: gui/launcher.cpp:1052
msgid "ScummVM could not find any engine capable of running the selected game!"
msgstr ""
-"ScummVM nem tallt olyan jtkmotort ami a vlasztott jtkot tmogatja!"
+"ScummVM nem tallt olyan jtkmotort ami a vlasztott jtkot "
+"tmogatja!"
#: gui/launcher.cpp:1159
msgid "Mass Add..."
@@ -558,7 +574,8 @@ msgstr "Vizsglat ksz!"
#: gui/massadd.cpp:262
#, c-format
msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..."
+msgstr ""
+"%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..."
#: gui/massadd.cpp:266
#, c-format
@@ -568,7 +585,8 @@ msgstr "%d Mappa tvizsglva..."
#: gui/massadd.cpp:269
#, c-format
msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..."
+msgstr ""
+"%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..."
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
@@ -661,7 +679,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Nhny jtk tmogatja a specilis rnyalsi mdokat"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Teljeskpernys md:"
@@ -716,7 +734,8 @@ msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
msgstr ""
-"Nagyobb rtkek jobb hangminsget adnak, de nem minden hangkrtya tmogatja"
+"Nagyobb rtkek jobb hangminsget adnak, de nem minden hangkrtya "
+"tmogatja"
#: gui/options.cpp:820
msgid "GM Device:"
@@ -741,7 +760,8 @@ msgstr "SoundFont:"
#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
-"Nhny hangkrya, FluidSynth s Timidyti tmogatja a SoundFont betltst"
+"Nhny hangkrya, FluidSynth s Timidyti tmogatja a SoundFont "
+"betltst"
#: gui/options.cpp:856
msgctxt "lowres"
@@ -770,7 +790,8 @@ msgstr "MT-32 Eszkz:"
#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr "Roland MT-32/LAPC1/CM32l/CM64 alaprtelmezett hangeszkzk belltsa"
+msgstr ""
+"Roland MT-32/LAPC1/CM32l/CM64 alaprtelmezett hangeszkzk belltsa"
#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
@@ -781,8 +802,8 @@ msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
msgstr ""
-"Jelld be, ha hardveres Roland-Kompatibilis hangeszkz van csatlakoztatva a "
-"gpedhez s hasznlni akarod"
+"Jelld be, ha hardveres Roland-Kompatibilis hangeszkz van csatlakoztatva "
+"a gpedhez s hasznlni akarod"
#: gui/options.cpp:886
msgctxt "lowres"
@@ -798,8 +819,8 @@ msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-"Ellenrzs ha engedlyezni akarod az emullt MT-32 Folt lekpezst a Roland "
-"GS eszkzn"
+"Ellenrzs ha engedlyezni akarod az emullt MT-32 Folt lekpezst a "
+"Roland GS eszkzn"
#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
@@ -1118,7 +1139,7 @@ msgstr "GFX letiltva"
msgid "Standard Renderer"
msgstr "Standard lekpez"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "tlagos"
@@ -1218,7 +1239,8 @@ msgstr "Minden FluidSynth bellts alaprtelmezett rtkre."
msgid ""
"Do you really want to reset all FluidSynth settings to their default values?"
msgstr ""
-"Biztos visszalltassz minden FluidSynth belltst alaprtelmezett rtkre?"
+"Biztos visszalltassz minden FluidSynth belltst alaprtelmezett "
+"rtkre?"
#: base/main.cpp:228
#, c-format
@@ -1250,7 +1272,8 @@ msgstr "Hiba a jtk futtatsakor:"
#: base/main.cpp:554
msgid "Could not find any engine capable of running the selected game"
-msgstr "Nem tallhat olyan jtkmotor ami a vlasztott jtkot tmogatja"
+msgstr ""
+"Nem tallhat olyan jtkmotor ami a vlasztott jtkot tmogatja"
#: common/error.cpp:38
msgid "No error"
@@ -1323,7 +1346,8 @@ msgstr "A '%s' jtk ismeretlennek tnik."
#: engines/advancedDetector.cpp:318
msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Krlek jelezd a ScummVM csapatnak a kvetkez adatokat, egytt a jtk"
+msgstr ""
+"Krlek jelezd a ScummVM csapatnak a kvetkez adatokat, egytt a jtk"
#: engines/advancedDetector.cpp:320
msgid "of the game you tried to add and its version/language/etc.:"
@@ -1364,7 +1388,7 @@ msgstr "Visszatrs az indtba"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1377,7 +1401,7 @@ msgstr "Jtk mentse:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1389,8 +1413,9 @@ msgid ""
"the README for basic information, and for instructions on how to obtain "
"further assistance."
msgstr ""
-"Sajnlom, a motor jelenleg nem tartalmaz jtk kzbeni sgt. Olvassd el a "
-"README-t az alap informcikrl, s hogy hogyan segthetsz a ksbbiekben."
+"Sajnlom, a motor jelenleg nem tartalmaz jtk kzbeni sgt. Olvassd "
+"el a README-t az alap informcikrl, s hogy hogyan segthetsz a "
+"ksbbiekben."
#: engines/dialogs.cpp:234 engines/pegasus/pegasus.cpp:393
#, c-format
@@ -1465,8 +1490,8 @@ msgid ""
"Gamestate load failed (%s)! Please consult the README for basic information, "
"and for instructions on how to obtain further assistance."
msgstr ""
-"(%s) jtklls betltse nem sikerlt!. Olvassd el a README-t az alap "
-"informcikrl, s hogy hogyan segthetsz a ksbbiekben."
+"(%s) jtklls betltse nem sikerlt!. Olvassd el a README-t az "
+"alap informcikrl, s hogy hogyan segthetsz a ksbbiekben."
#: engines/engine.cpp:480
msgid ""
@@ -1475,8 +1500,8 @@ msgid ""
"not work in future versions of ScummVM."
msgstr ""
"FIGYELEM: A jtkot amit indtani akarsz mg nem teljesen tmogatotja a "
-"ScummVM. Szmts r hogy nem stabilan fut, s a mentsek nem mkdnek a "
-"jvbeni ScummVM verzikkal."
+"ScummVM. Szmts r hogy nem stabilan fut, s a mentsek nem mkdnek "
+"a jvbeni ScummVM verzikkal."
#: engines/engine.cpp:483
msgid "Start anyway"
@@ -1500,7 +1525,8 @@ msgid ""
"The selected audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"A kivlasztott '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy kihztad)."
+"A kivlasztott '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy "
+"kihztad)."
#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257
#: audio/mididrv.cpp:272
@@ -1522,7 +1548,8 @@ msgid ""
"The preferred audio device '%s' was not found (e.g. might be turned off or "
"disconnected)."
msgstr ""
-"Az elsdleges '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy kihztad)."
+"Az elsdleges '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy "
+"kihztad)."
#: audio/mididrv.cpp:272
#, c-format
@@ -1713,57 +1740,57 @@ msgstr "Kzps katt"
msgid "Right Click"
msgstr "Jobb katt"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "ScummVM elrejtse"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Tbbi elrejtse"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mutasd mind"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Ablak"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Kis mret"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Norml (nincs tmretezs)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Norml (nincs tmretezs)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Mretarny korrekci engedlyezve"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Mretarny korrekci letiltva"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktv grafikus szrk:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Ablakos md"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (Nincs szrs)"
@@ -2079,8 +2106,8 @@ msgstr "Kicsinyts mvelet (opcionlis)"
msgid ""
"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
msgstr ""
-"Ne felejts billentyt trstani az 'Eszkztr rejts' mvelethez, hogy lsd "
-"a teljes listt"
+"Ne felejts billentyt trstani az 'Eszkztr rejts' mvelethez, hogy "
+"lsd a teljes listt"
#: backends/events/default/default-events.cpp:196
msgid "Do you really want to return to the Launcher?"
@@ -2179,7 +2206,8 @@ msgstr "Eredeti ment/tlt kpernyk hasznlata"
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
msgid "Use the original save/load screens, instead of the ScummVM ones"
-msgstr "Az eredeti ments/betlts kperny hasznlata a ScummVM kpek helyett"
+msgstr ""
+"Az eredeti ments/betlts kperny hasznlata a ScummVM kpek helyett"
#: engines/agi/detection.cpp:157
msgid "Use an alternative palette"
@@ -2190,8 +2218,8 @@ msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
-"Alternatv paletta hasznlat, kzs minden Amiga jtknl. Ez egy rgi "
-"megolds"
+"Alternatv paletta hasznlat, kzs minden Amiga jtknl. Ez egy "
+"rgi megolds"
#: engines/agi/detection.cpp:167
msgid "Mouse support"
@@ -2201,17 +2229,17 @@ msgstr "Egr tmogats"
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
-"Egrmd englyezve. Lehetv teszi az egrrel mozgatst jtkban s "
-"jtkmenkben."
+"Egrmd englyezve. Lehetv teszi az egrrel mozgatst jtkban "
+"s jtkmenkben."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Jtkmenet visszalltsa:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Visszallts"
@@ -2272,12 +2300,13 @@ msgid ""
"Press OK to convert them now, otherwise you will be asked again the next "
"time you start the game.\n"
msgstr ""
-"ScummVM rgi jtkmentst tallt a Drascula-hoz, ezt t kell alaktani.\n"
-"A rgi jtkments forma tbb nem tmogatott, ezrt a jtk mentse nem "
-"tltdik be ha nem aktod t azt.\n"
+"ScummVM rgi jtkmentst tallt a Drascula-hoz, ezt t kell alak"
+"tani.\n"
+"A rgi jtkments forma tbb nem tmogatott, ezrt a jtk "
+"mentse nem tltdik be ha nem aktod t azt.\n"
"\n"
-"Nyomj OK-t ha talaktod most, vagy rkrdezek jra ha legkzelebb elindtod "
-"a jtkot.\n"
+"Nyomj OK-t ha talaktod most, vagy rkrdezek jra ha legkzelebb "
+"elindtod a jtkot.\n"
#: engines/dreamweb/detection.cpp:57
msgid "Use bright palette mode"
@@ -2451,7 +2480,8 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
-"A kvetkez eredeti jtkments fjlt talltam a jtkknyvtrban:\n"
+"A kvetkez eredeti jtkments fjlt talltam a "
+"jtkknyvtrban:\n"
"\n"
"%s %s\n"
"\n"
@@ -2478,7 +2508,8 @@ msgid ""
"\n"
msgstr ""
"%d eredeti jtkments fjlt sikeresen importlta a\n"
-"ScummVM. Ha ksbb manulisan akarod importlni az eredeti jtkmentseket\n"
+"ScummVM. Ha ksbb manulisan akarod importlni az eredeti "
+"jtkmentseket\n"
"meg kell nyitnod a ScummVM debug konzolt s hasznld az 'import_savefile' "
"utastst.\n"
"\n"
@@ -2516,7 +2547,8 @@ msgstr "Hall of Records storyboard tvezetk tugrsa"
#: engines/neverhood/detection.cpp:168
msgid "Allows the player to skip past the Hall of Records storyboard scenes"
msgstr ""
-"Lehetsg, hogy a jtkos tugorja a Hall of Records storyboard tvezetket"
+"Lehetsg, hogy a jtkos tugorja a Hall of Records storyboard "
+"tvezetket"
#: engines/neverhood/detection.cpp:174
msgid "Scale the making of videos to full screen"
@@ -2524,7 +2556,9 @@ msgstr "Hogyan kszlt videk tmretezse teljeskpernyre"
#: engines/neverhood/detection.cpp:175
msgid "Scale the making of videos, so that they use the whole screen"
-msgstr "Hogyan kszlt videk tmretezse, hogy teljeskpernyt hasznljanak"
+msgstr ""
+"Hogyan kszlt videk tmretezse, hogy teljeskpernyt "
+"hasznljanak"
#: engines/parallaction/saveload.cpp:133
#, c-format
@@ -2552,12 +2586,13 @@ msgid ""
"\n"
"Press OK to convert them now, otherwise you will be asked next time.\n"
msgstr ""
-"ScummVM rgi jtkmentst tallt a Nippon Safes hez ezt t kell nevezni.\n"
-"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be tnevezs "
-"nlkl..\n"
+"ScummVM rgi jtkmentst tallt a Nippon Safes hez ezt t kell "
+"nevezni.\n"
+"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be "
+"tnevezs nlkl..\n"
"\n"
-"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod a "
-"jtkot.\n"
+"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod "
+"a jtkot.\n"
#: engines/parallaction/saveload.cpp:319
msgid "ScummVM successfully converted all your savefiles."
@@ -2570,8 +2605,8 @@ msgid ""
"\n"
"Please report to the team."
msgstr ""
-"ScummVM kirt nhny figyelmeztetst a konzolablakba s nem biztos hogy az "
-"sszes fjlod t lett alaktva.\n"
+"ScummVM kirt nhny figyelmeztetst a konzolablakba s nem biztos hogy "
+"az sszes fjlod t lett alaktva.\n"
"\n"
"Lgyszves jelentsd a csapatnak."
@@ -2626,7 +2661,8 @@ msgstr "EGA sznmodulci tugrsa (Sznes httereknl)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
-"Sznmodulci tugrsa EGA jtkoknl, grafikk teljes sznben lthatk"
+"Sznmodulci tugrsa EGA jtkoknl, grafikk teljes sznben "
+"lthatk"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@@ -2645,8 +2681,8 @@ msgid ""
"Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI "
"output"
msgstr ""
-"IBM Music Feature krtya vagy Yamaha FB-01 FM szintetiztor modul hasznlata "
-"MIDI kimenetre"
+"IBM Music Feature krtya vagy Yamaha FB-01 FM szintetiztor modul "
+"hasznlata MIDI kimenetre"
#: engines/sci/detection.cpp:415
msgid "Use CD audio"
@@ -2663,7 +2699,8 @@ msgstr "Windows kurzorok hasznlata"
#: engines/sci/detection.cpp:427
msgid ""
"Use the Windows cursors (smaller and monochrome) instead of the DOS ones"
-msgstr "Windows kurzorok hasznlata (kisebb s monokrm) a DOS-osok helyett "
+msgstr ""
+"Windows kurzorok hasznlata (kisebb s monokrm) a DOS-osok helyett "
#: engines/sci/detection.cpp:437
msgid "Use silver cursors"
@@ -2757,36 +2794,36 @@ msgstr "~E~lz"
msgid "~N~ext"
msgstr "Kvetkez"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Csak beszd"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Beszd s felirat"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Csak felirat"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Beszd & Felir"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Vlassz hozzrts szintet."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Segtsgrt nzd meg a Loom(TM) kziknyvedet."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Gyakorls"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Szakrt"
@@ -3354,9 +3391,10 @@ msgid ""
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"ltalban a Maniac Mansion indulna most. De a mkdshez a Maniac Mansion "
-"fjljainak, a 'Maniac' mappban kell lenni a Tentacle jtkmappjn bell, "
-"s a jtkot gy adja hozz a ScummVM a listhoz."
+"ltalban a Maniac Mansion indulna most. De a mkdshez a Maniac "
+"Mansion fjljainak, a 'Maniac' mappban kell lenni a Tentacle "
+"jtkmappjn bell, s a jtkot gy adja hozz a ScummVM a "
+"listhoz."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
@@ -3405,14 +3443,15 @@ msgstr "'%s' PSX stream tvezet nem jtszhat le paletta mdban"
#: engines/sword1/animation.cpp:545 engines/sword2/animation.cpp:445
msgid "DXA cutscenes found but ScummVM has been built without zlib"
-msgstr "DXA tvezet elrhet, de a ScummVM zlib tmogats nincs lefordtva"
+msgstr ""
+"DXA tvezet elrhet, de a ScummVM zlib tmogats nincs lefordtva"
#: engines/sword1/animation.cpp:561 engines/sword2/animation.cpp:461
msgid ""
"MPEG-2 cutscenes found but ScummVM has been built without MPEG-2 support"
msgstr ""
-"MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 tmogats nlkl van "
-"lefordtva"
+"MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 tmogats nlkl "
+"van lefordtva"
#: engines/sword1/animation.cpp:568 engines/sword2/animation.cpp:470
#, c-format
@@ -3431,11 +3470,11 @@ msgid ""
msgstr ""
"ScummVM rgi jtkmentst tallt a Broken Sword 1 hez, ezt t kell "
"alaktani.\n"
-"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be talakts "
-"nlkl.\n"
+"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be "
+"talakts nlkl.\n"
"\n"
-"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod a "
-"jtkot.\n"
+"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod "
+"a jtkot.\n"
#: engines/sword1/control.cpp:1232
#, c-format
@@ -3462,8 +3501,8 @@ msgstr "Ez a Broken Sword 1 Demo vge"
msgid ""
"PSX cutscenes found but ScummVM has been built without RGB color support"
msgstr ""
-"PSX tvezetfilmet talltam, de ez a ScummVM RGB szntmogats nlkl van "
-"lefordtva"
+"PSX tvezetfilmet talltam, de ez a ScummVM RGB szntmogats nlkl "
+"van lefordtva"
#: engines/sword2/sword2.cpp:79
msgid "Show object labels"
@@ -3493,11 +3532,13 @@ msgstr "FPS szmll ltszik"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-"A jelenlegi msodpercenknti kpkocka szm kijelzse a bal fels sarokban"
+"A jelenlegi msodpercenknti kpkocka szm kijelzse a bal fels "
+"sarokban"
#: engines/zvision/detection_tables.h:52
msgid "Use the original save/load screens instead of the ScummVM interface"
-msgstr "Hasznld az eredeti ments/tlts kpet a ScummVM fellet helyett"
+msgstr ""
+"Hasznld az eredeti ments/tlts kpet a ScummVM fellet helyett"
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
@@ -3529,7 +3570,8 @@ msgstr "Nagyfelbonts MPEG vide hasznlat"
#: engines/zvision/detection_tables.h:92
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
-msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett"
+msgstr ""
+"MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett"
#~ msgid "EGA undithering"
#~ msgstr "EGA szinjavts"
@@ -3539,7 +3581,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett"
#~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2"
#~ msgstr ""
-#~ "MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 nlkl van lefordtva"
+#~ "MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 nlkl van "
+#~ "lefordtva"
#~ msgctxt "lowres"
#~ msgid "Mass Add..."
@@ -3547,7 +3590,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett"
#~ msgid ""
#~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-#~ msgstr "General MIDI lekpezs Roland MT-32 zens jtkokhoz kikapcsolva"
+#~ msgstr ""
+#~ "General MIDI lekpezs Roland MT-32 zens jtkokhoz kikapcsolva"
#~ msgid "Standard (16bpp)"
#~ msgstr "Standard (16bpp)"
@@ -3606,7 +3650,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett"
#~ msgid ""
#~ "Your game version has been detected using filename matching as a variant "
#~ "of %s."
-#~ msgstr "A felismert jtkverzid a hasznlt fjlnvvel a %s egy vltozata."
+#~ msgstr ""
+#~ "A felismert jtkverzid a hasznlt fjlnvvel a %s egy vltozata."
#~ msgid "If this is an original and unmodified version, please report any"
#~ msgstr "Ha ez egy eredeti nem vltoztatott verzi, krlek jelezd minden"
diff --git a/po/it_IT.po b/po/it_IT.po
index 21c4341570..27ac587e2c 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,5 +1,5 @@
# Italian translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Matteo 'Maff' Angelino <matteo.maff at gmail dot com>, 2010.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\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"
@@ -51,13 +51,13 @@ msgid "Go up"
msgstr "Su"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -66,7 +66,7 @@ msgid "Cancel"
msgstr "Annulla"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Scegli"
@@ -86,6 +86,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Sei sicuro di voler eliminare questo salvataggio?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "S"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "No"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -382,7 +415,7 @@ msgstr "Questo ID di gioco gi in uso. Si prega di sceglierne un'altro."
msgid "~Q~uit"
msgstr "C~h~iudi"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Esci da ScummVM"
@@ -390,7 +423,7 @@ msgstr "Esci da ScummVM"
msgid "A~b~out..."
msgstr "~I~nfo..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Informazioni su ScummVM"
@@ -488,26 +521,6 @@ msgstr ""
"Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere "
"un numero enorme di giochi."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "S"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "No"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM non ha potuto aprire la cartella specificata!"
@@ -664,7 +677,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Modalit di resa grafica speciali supportate da alcuni giochi"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Modalit a schermo intero"
@@ -1129,7 +1142,7 @@ msgstr "Grafica disattivata"
msgid "Standard Renderer"
msgstr "Renderer standard"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Medio"
@@ -1378,7 +1391,7 @@ msgstr "~V~ai a elenco giochi"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1391,7 +1404,7 @@ msgstr "Salva gioco:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1732,57 +1745,57 @@ msgstr "Clic centrale"
msgid "Right Click"
msgstr "Clic destro"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Nascondi ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Nascondi altre"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mostra tutte"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Finestra"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Contrai"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normale (nessun ridimensionamento)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normale (no ridim.)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Correzione proporzioni attivata"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Correzione proporzioni disattivata"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Filtro grafico attivo:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Modalit finestra"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (senza filtri)"
@@ -2226,13 +2239,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Ripristina gioco:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Ripristina"
@@ -2771,36 +2784,36 @@ msgstr "~P~recedenti"
msgid "~N~ext"
msgstr "~S~uccessivi"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Solo voci"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Voci e testo"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Solo testo"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Voci e testo"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Selezionate un livello di difficolt."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Consultate il manuale delle istruzioni."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Base"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Expert"
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 086cb488a7..06d1ef8083 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -1,5 +1,5 @@
# Norwegian (Bokmaal) translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Einar Johan T. Smen <einarjohants@gmail.com>, 2010.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-11 00:02+0100\n"
"Last-Translator: Einar Johan Tran Smen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr "Oppover"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr "Avbryt"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Velg"
@@ -89,6 +89,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Vil du virkelig slette dette lagrede spillet?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nei"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -386,7 +419,7 @@ msgstr "Denne spill-IDen er allerede i bruk. Vennligst velg en annen."
msgid "~Q~uit"
msgstr "~A~vslutt"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Avslutt ScummVM"
@@ -394,7 +427,7 @@ msgstr "Avslutt ScummVM"
msgid "A~b~out..."
msgstr "~O~m..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Om ScummVM"
@@ -492,26 +525,6 @@ msgstr ""
"Vil du virkelig kjre flerspill-finneren? Dette kan potensielt legge til et "
"stort antall spill."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nei"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM kunne ikke pne den valgte mappen!"
@@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Spesiel dithering-modus stttet av enkelte spill"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Fullskjermsmodus"
@@ -1126,7 +1139,7 @@ msgstr "Deaktivert GFX"
msgid "Standard Renderer"
msgstr "Standard tegner"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standard"
@@ -1373,7 +1386,7 @@ msgstr "~T~ilbake til oppstarter"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1386,7 +1399,7 @@ msgstr "Lagret spill:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1725,57 +1738,57 @@ msgstr "Midtklikk"
msgid "Right Click"
msgstr "Hyreklikk"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Skjul ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Skjul andre"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Vis alle"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Vindu"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimer"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (ingen skalering)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (ingen skalering)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Aspekt-rate korrigering aktivert"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Aspekt-rate korrigering deaktivert"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktivt grafikkfilter:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Vindusmodus"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (Ingen filtrering)"
@@ -2218,13 +2231,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Gjennopprett spill:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Gjenopprett"
@@ -2762,36 +2775,36 @@ msgstr "~F~orrige"
msgid "~N~ext"
msgstr "~N~este"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Kun tale"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Tale og undertekster"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Kun undertekster"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Tekst & Tale"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Velg ferdighetsniv"
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Referer til Loom(TM)-hndboka di for hjelp."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Trening"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Ekspert"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 0f4548951d..c6a133ce4d 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -1,5 +1,5 @@
-# LANGUAGE translation for ScummVM.
-# Copyright (C) 2014-2015 The ScummVM Team
+# Dutch translation for ScummVM.
+# Copyright (C) 2014-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# FIRST AUTHOR scummvm@bencastricum.nl, 2014.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-11-25 20:46+0100\n"
"Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n"
"Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n"
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr "Ga omhoog"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr "Annuleren"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Selecteer"
@@ -89,6 +89,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Wilt u dit opgeslagen spel echt verwijderen?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nee"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -386,7 +419,7 @@ msgstr "Dit spel-ID is al in gebruik. Kies a.u.b. een andere."
msgid "~Q~uit"
msgstr "~S~toppen"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Hiermee verlaat u ScummVM."
@@ -394,7 +427,7 @@ msgstr "Hiermee verlaat u ScummVM."
msgid "A~b~out..."
msgstr "O~v~er..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Geeft informatie over ScummVM."
@@ -494,26 +527,6 @@ msgstr ""
"Wilt u echt de mass game detector draaien? Dit voegt potentieel een groot "
"aantal spellen toe."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nee"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM kon de opgegeven map niet openen!"
@@ -672,7 +685,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Speciale ditheringmodi die door sommige games ondersteund worden."
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Volledig-scherm modus"
@@ -1138,7 +1151,7 @@ msgstr "GFX uitgeschakeld"
msgid "Standard Renderer"
msgstr "Standaard Renderer"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standaard"
@@ -1387,7 +1400,7 @@ msgstr "S~t~artmenu"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1400,7 +1413,7 @@ msgstr "Spel opslaan:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1742,57 +1755,57 @@ msgstr "Middelste Klik"
msgid "Right Click"
msgstr "Rechter klik"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Verberg ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Verberg Anderen"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Toon Alles"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Venster"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimaliseer"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normaal (niet schalen)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normaal (niet schalen)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Pixelverhoudingcorrectie ingeschakeld"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Pixelverhoudingcorrectie uitgeschakeld"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Actieve grafische filter:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Venstermodus"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (geen filters)"
@@ -2238,13 +2251,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Laad opgeslagen spel:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Laad"
@@ -2797,36 +2810,36 @@ msgstr "~V~orige"
msgid "~N~ext"
msgstr "~V~olgende"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Alleen Spraak"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Spraak and Subtitels"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Alleen subtitels"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Tekst en Spraak"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Selecteer een vakkundigheidsniveau."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Raadpleeg uw Loom(TM) handleiding voor hulp."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Oefenen"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Expert"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index a6af5e4b60..73cb0b33e2 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -1,5 +1,5 @@
# Norwegian (Nynorsk) translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Einar Johan T. Smen <einarjohants@gmail.com>, 2010.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-11 00:04+0100\n"
"Last-Translator: Einar Johan Tran Smen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr "Oppover"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr "Avbryt"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vel"
@@ -89,6 +89,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Vil du verkeleg slette det lagra spelet?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nei"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -387,7 +420,7 @@ msgstr ""
msgid "~Q~uit"
msgstr "~A~vslutt"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Avslutt ScummVM"
@@ -395,7 +428,7 @@ msgstr "Avslutt ScummVM"
msgid "A~b~out..."
msgstr "~O~m..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Om ScummVM"
@@ -491,26 +524,6 @@ msgid ""
"a huge number of games."
msgstr ""
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nei"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM kunne ikkje pne den velde mappa!"
@@ -665,7 +678,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Spesielle dithering-modus som stttast av nokre spel"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Fullskjermsmodus"
@@ -1125,7 +1138,7 @@ msgstr "Deaktivert GFX"
msgid "Standard Renderer"
msgstr "Standardteiknar"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standard"
@@ -1372,7 +1385,7 @@ msgstr "Tilbake til Oppsta~r~tar"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1385,7 +1398,7 @@ msgstr "Lagra spel:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1704,59 +1717,59 @@ msgstr "Midtklikk"
msgid "Right Click"
msgstr "Hgreklikk"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Skjul ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Skjul Andre"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Syn alle"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Vindu"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimer"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (ikkje skaler)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (ikkje skaler)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
#, fuzzy
msgid "Enabled aspect ratio correction"
msgstr "Aspekt-korrigering"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
#, fuzzy
msgid "Disabled aspect ratio correction"
msgstr "Aspekt-korrigering"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktivt grafikkfilter:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Vindusmodus"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (Ingen filtrering)"
@@ -2212,13 +2225,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Gjenopprett spel:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Gjenopprett"
@@ -2742,37 +2755,37 @@ msgstr "~F~orrige"
msgid "~N~ext"
msgstr "~N~este"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Berre Tale"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Tale og undertekstar"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Berre undertekstar"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Tekst & Tale"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
#, fuzzy
msgid "Select a Proficiency Level."
msgstr "G til forrige mappeniv"
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Sj i Loom(TM)-manualen for hjelp."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Ekspert"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 477ecb6e69..2bfa4077b9 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -1,5 +1,5 @@
# Polish translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Grajpopolsku.pl <grajpopolsku@gmail.com>, 2011-2013.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-02 12:28+0100\n"
"Last-Translator: Micha Zibkowski <mziab@o2.pl>\n"
"Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n"
@@ -55,13 +55,13 @@ msgid "Go up"
msgstr "W gr"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -70,7 +70,7 @@ msgid "Cancel"
msgstr "Anuluj"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Wybierz"
@@ -90,6 +90,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Na pewno chcesz skasowa ten zapis?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Tak"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nie"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -385,7 +418,7 @@ msgstr "Identyfikator jest ju zajty. Wybierz inny."
msgid "~Q~uit"
msgstr "~Z~akocz"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Zakocz ScummVM"
@@ -393,7 +426,7 @@ msgstr "Zakocz ScummVM"
msgid "A~b~out..."
msgstr "I~n~formacje..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Ksika ScummVM"
@@ -490,26 +523,6 @@ msgid ""
msgstr ""
"Chcesz uruchomi masowy detektor gier? Moe doda wiele tytuw do listy"
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Tak"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nie"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM nie moe otworzy katalogu!"
@@ -662,7 +675,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Specjalne tryby ditheringu wspierane przez niektre gry"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Peny ekran"
@@ -1126,7 +1139,7 @@ msgstr "Wyczona grafika"
msgid "Standard Renderer"
msgstr "Standardowy renderer"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standardowy"
@@ -1372,7 +1385,7 @@ msgstr "~P~owrt do launchera"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1385,7 +1398,7 @@ msgstr "Zapis:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1720,57 +1733,57 @@ msgstr "rodkowy przycisk"
msgid "Right Click"
msgstr "Kliknicie PPM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Ukryj ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Ukryj pozostae"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Poka wszystkie"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Okno"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Miniaturka"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Zwyky (bez skalowania)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Zwyky (bez skalowania)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Wczono korekcj formatu obrazu"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Wyczono korekcj formatu obrazu"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktywny filtr graficzny:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Okno"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (bez filtrowania)"
@@ -2210,13 +2223,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Wznw gr:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Wznw"
@@ -2751,36 +2764,36 @@ msgstr "~P~oprzednia"
msgid "~N~ext"
msgstr "~N~astpna"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Tylko mowa"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Mowa i napisy"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Tylko napisy"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Mowa i napisy"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Wybierz poziom umiejtnoci."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Pomocy szukaj w instrukcji doczonej do Loom(TM)."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "Trening"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Ekspert"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index a406d5e096..5ab75cf0a9 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,5 +1,5 @@
# Portuguese (Brazilian) translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Saulo Benigno <saulobenigno@gmail.com>, 2010.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\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"
@@ -56,13 +56,13 @@ msgid "Go up"
msgstr "Acima"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -71,7 +71,7 @@ msgid "Cancel"
msgstr "Cancelar"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Escolher"
@@ -91,6 +91,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Voc realmente quer excluir este jogo salvo?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Sim"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "No"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -388,7 +421,7 @@ msgstr "Este cdigo j esta sendo utilizado. Por favor, escolha outro."
msgid "~Q~uit"
msgstr "~S~air"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Sair do ScummVM"
@@ -396,7 +429,7 @@ msgstr "Sair do ScummVM"
msgid "A~b~out..."
msgstr "So~b~re..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Sobre o ScumnmVM"
@@ -495,26 +528,6 @@ msgstr ""
"Voc realmente deseja adicionar vrios jogos ao mesmo tempo? Isso poder "
"resultar em uma adio gigantesca de jogos."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Sim"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "No"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM no conseguiu abrir a pasta especificada!"
@@ -674,7 +687,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Modos especiais de dithering suportados por alguns jogos"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Modo Tela Cheia"
@@ -1142,7 +1155,7 @@ msgstr "GFX desabilitado"
msgid "Standard Renderer"
msgstr "Renderizador padro (16bpp)"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
#, fuzzy
msgid "Standard"
msgstr "Padro (16bpp)"
@@ -1397,7 +1410,7 @@ msgstr "~V~oltar ao menu"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1410,7 +1423,7 @@ msgstr "Salvar jogo:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1753,58 +1766,58 @@ msgstr "Item do meio na esquerda"
msgid "Right Click"
msgstr "Clique com o boto direito"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Ocultar ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Ocultar Outros"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Mostrar Tudo"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Janela"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimizar"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normal (sem escala)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normal (sem escala)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Correo de proporo habilitada"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Correo de proporo desabilitada"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Ativa os filtros grficos"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Modo janela"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
#, fuzzy
msgid "OpenGL"
msgstr "Abrir"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr ""
@@ -2246,13 +2259,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "Restaurar jogo:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "Restaurar"
@@ -2806,36 +2819,36 @@ msgstr "~A~nterior"
msgid "~N~ext"
msgstr "~P~rximo"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Somente Voz"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Voz e Legendas"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Somente Legendas"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Voz e Legendas"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr ""
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr ""
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr ""
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 5fbb8dcb24..fae8ff711f 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,13 +1,13 @@
# Russian translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
-# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
+# Eugene Sandulenko <sev@scummvm.org>, 2010-2016
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2015-11-06 09:23+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Russian\n"
@@ -15,7 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 1.5.5\n"
#: gui/about.cpp:94
@@ -53,13 +54,13 @@ msgid "Go up"
msgstr ""
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,7 +69,7 @@ msgid "Cancel"
msgstr ""
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr ""
@@ -88,6 +89,39 @@ msgstr ":"
msgid "Ok"
msgstr "Ok"
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr " ?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -384,7 +418,7 @@ msgstr " ID . , ."
msgid "~Q~uit"
msgstr "~~"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr " ScummVM"
@@ -392,7 +426,7 @@ msgstr " ScummVM"
msgid "A~b~out..."
msgstr " ~~..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr " ScummVM"
@@ -490,26 +524,6 @@ msgstr ""
" ? "
" ."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr ""
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr ""
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM !"
@@ -660,7 +674,7 @@ msgid "Special dithering modes supported by some games"
msgstr " , "
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr " "
@@ -1124,7 +1138,7 @@ msgstr " "
msgid "Standard Renderer"
msgstr " "
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr ""
@@ -1372,7 +1386,7 @@ msgstr "~~ "
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1385,7 +1399,7 @@ msgstr " :"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1727,57 +1741,57 @@ msgstr " "
msgid "Right Click"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr " ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr " Dock"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr " :"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr " "
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL ( )"
@@ -2206,7 +2220,8 @@ msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
-" Amiga. "
+" Amiga. "
+""
#: engines/agi/detection.cpp:167
msgid "Mouse support"
@@ -2216,16 +2231,17 @@ msgstr " "
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
-" . ."
+" . "
+" ."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr " :"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr ""
@@ -2467,7 +2483,8 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
-" :\n"
+" "
+" :\n"
"\n"
"%s %s\n"
"\n"
@@ -2639,7 +2656,9 @@ msgstr " EGA ( )"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
-msgstr " EGA, "
+msgstr ""
+" EGA, "
+""
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@@ -2776,36 +2795,36 @@ msgstr "~~"
msgid "~N~ext"
msgstr "~~"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr " "
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr " "
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr " ."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr " Loom(TM)"
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr ""
@@ -3550,7 +3569,8 @@ msgstr " MPEG "
#: engines/zvision/detection_tables.h:92
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
-" MPEG DVD , AVI"
+" MPEG DVD , "
+" AVI"
#~ msgid "EGA undithering"
#~ msgstr "EGA "
diff --git a/po/scummvm.pot b/po/scummvm.pot
index 1d6b4028bc..0445534008 100644
--- a/po/scummvm.pot
+++ b/po/scummvm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\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"
@@ -52,13 +52,13 @@ msgid "Go up"
msgstr ""
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,7 +67,7 @@ msgid "Cancel"
msgstr ""
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr ""
@@ -87,6 +87,38 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+msgid "Do you really want to overwrite the file?"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -380,7 +412,7 @@ msgstr ""
msgid "~Q~uit"
msgstr ""
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr ""
@@ -388,7 +420,7 @@ msgstr ""
msgid "A~b~out..."
msgstr ""
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr ""
@@ -484,26 +516,6 @@ msgid ""
"a huge number of games."
msgstr ""
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr ""
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr ""
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr ""
@@ -654,7 +666,7 @@ msgid "Special dithering modes supported by some games"
msgstr ""
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr ""
@@ -1103,7 +1115,7 @@ msgstr ""
msgid "Standard Renderer"
msgstr ""
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr ""
@@ -1348,7 +1360,7 @@ msgstr ""
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1361,7 +1373,7 @@ msgstr ""
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1672,57 +1684,57 @@ msgstr ""
msgid "Right Click"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr ""
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr ""
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr ""
@@ -2158,13 +2170,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr ""
@@ -2661,36 +2673,36 @@ msgstr ""
msgid "~N~ext"
msgstr ""
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr ""
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr ""
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr ""
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr ""
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr ""
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr ""
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr ""
diff --git a/po/se_SE.po b/po/se_SE.po
index 814a5b1e86..d757d28240 100644
--- a/po/se_SE.po
+++ b/po/se_SE.po
@@ -1,5 +1,5 @@
# Swedish translation for ScummVM.
-# Copyright (C) 2011-2015 The ScummVM Team
+# Copyright (C) 2011-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Hampus Flink <hampus.flink@gmail.com>, 2011.
#
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2014-07-02 16:30+0100\n"
"Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n"
"Language-Team: \n"
@@ -54,13 +54,13 @@ msgid "Go up"
msgstr "Uppt"
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,7 +69,7 @@ msgid "Cancel"
msgstr "Avbryt"
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vlj"
@@ -89,6 +89,39 @@ msgstr ""
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr "Vill du verkligen radera den hr spardatan?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr "Ja"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr "Nej"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -386,7 +419,7 @@ msgstr "Detta ID-namn r upptaget. Var god vlj ett annat."
msgid "~Q~uit"
msgstr "~A~vsluta"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr "Avsluta ScummVM"
@@ -394,7 +427,7 @@ msgstr "Avsluta ScummVM"
msgid "A~b~out..."
msgstr "O~m~..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr "Om ScummVM"
@@ -492,26 +525,6 @@ msgstr ""
"Vill du verkligen anvnda mass-speldetektorn? Processen kan potentiellt "
"lgga till ett enormt antal spel."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr "Ja"
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr "Nej"
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM kunde inte ppna den valda katalogen!"
@@ -665,7 +678,7 @@ msgid "Special dithering modes supported by some games"
msgstr "Speciella gitterlgen stdda av vissa spel"
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr "Fullskrmslge"
@@ -1129,7 +1142,7 @@ msgstr "Inaktiverad GFX"
msgid "Standard Renderer"
msgstr "Standard rendering"
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr "Standard"
@@ -1378,7 +1391,7 @@ msgstr "te~r~vnd till launcher"
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1391,7 +1404,7 @@ msgstr "Spara spelet:"
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1730,57 +1743,57 @@ msgstr "Mittenklick"
msgid "Right Click"
msgstr "Hgerklick"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr "Gm ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr "Gm vriga"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr "Visa alla"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr "Fnster"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr "Minimera"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr "Normalt (ingen skalning)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr "Normalt (ingen skalning)"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr "Korrektion av bildfrhllande p"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr "Korrektion av bildfrhllande av"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr "Aktivt grafikfilter:"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr "Fnsterlge"
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL (ingen filtrering)"
@@ -2223,13 +2236,13 @@ msgid ""
msgstr ""
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr "terstll spel:"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr "terstll"
@@ -2767,36 +2780,36 @@ msgstr "~F~regende"
msgid "~N~ext"
msgstr "~N~sta"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr "Endast tal"
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr "Tal och undertexter"
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr "Endast undertexter"
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr "Tal & text"
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr "Vlj en skicklighetsniv."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr "Hnvisa till din Loom(TM)-manual fr hjlp."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr "vning"
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr "Expert"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index c4264f84c2..cc4c29228a 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -1,14 +1,14 @@
# Ukrainian translation for ScummVM.
-# Copyright (C) 2010-2015 The ScummVM Team
+# Copyright (C) 2010-2016 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Lubomyr Lisen, 2010.
-# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
+# Eugene Sandulenko <sev@scummvm.org>, 2010-2016
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"POT-Creation-Date: 2015-12-23 00:28+0000\n"
"PO-Revision-Date: 2015-11-06 10:07+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Ukrainian\n"
@@ -16,7 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: gui/about.cpp:94
#, c-format
@@ -53,13 +54,13 @@ msgid "Go up"
msgstr ""
#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
-#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
-#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
-#: gui/recorderdialog.cpp:156 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/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
-#: backends/platform/wii/options.cpp:48
+#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351
+#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74
+#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
+#: 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/fluidsynth-dialog.cpp:152
+#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,7 +69,7 @@ msgid "Cancel"
msgstr ""
#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
-#: gui/themebrowser.cpp:56
+#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56
msgid "Choose"
msgstr ""
@@ -88,6 +89,39 @@ msgstr ":"
msgid "Ok"
msgstr ""
+#: gui/filebrowser-dialog.cpp:49
+msgid "Choose file for loading"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:49
+msgid "Enter filename for saving"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132
+#, fuzzy
+msgid "Do you really want to overwrite the file?"
+msgstr " ?"
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "Yes"
+msgstr ""
+
+#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941
+#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217
+#: backends/events/symbiansdl/symbiansdl-events.cpp:186
+#: backends/platform/wince/CEActionsPocket.cpp:326
+#: backends/platform/wince/CEActionsSmartphone.cpp:287
+#: backends/platform/wince/CELauncherDialog.cpp:83
+#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
+msgid "No"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -385,7 +419,7 @@ msgstr " ID . , ."
msgid "~Q~uit"
msgstr "~~"
-#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95
+#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106
msgid "Quit ScummVM"
msgstr " ScummVM"
@@ -393,7 +427,7 @@ msgstr " ScummVM"
msgid "A~b~out..."
msgstr " ~~..."
-#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69
+#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80
msgid "About ScummVM"
msgstr " ScummVM"
@@ -491,26 +525,6 @@ msgstr ""
" ? "
" ."
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "Yes"
-msgstr ""
-
-#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000
-#: gui/fluidsynth-dialog.cpp:217
-#: backends/events/symbiansdl/symbiansdl-events.cpp:186
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590
-msgid "No"
-msgstr ""
-
#: gui/launcher.cpp:841
msgid "ScummVM couldn't open the specified directory!"
msgstr "ScummVM !"
@@ -661,7 +675,7 @@ msgid "Special dithering modes supported by some games"
msgstr " , "
#: gui/options.cpp:758
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313
msgid "Fullscreen mode"
msgstr " "
@@ -1123,7 +1137,7 @@ msgstr " "
msgid "Standard Renderer"
msgstr " "
-#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661
+#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663
msgid "Standard"
msgstr ""
@@ -1370,7 +1384,7 @@ msgstr "~~. "
#: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803
#: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336
-#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873
+#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877
#: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save game:"
@@ -1383,7 +1397,7 @@ msgstr " : "
#: backends/platform/wince/CEActionsSmartphone.cpp:231
#: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212
#: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261
-#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377
+#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377
#: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188
#: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598
msgid "Save"
@@ -1722,57 +1736,57 @@ msgstr " "
msgid "Right Click"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:77
+#: backends/platform/sdl/macosx/appmenu_osx.mm:88
msgid "Hide ScummVM"
msgstr " ScummVM"
-#: backends/platform/sdl/macosx/appmenu_osx.mm:82
+#: backends/platform/sdl/macosx/appmenu_osx.mm:93
msgid "Hide Others"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:87
+#: backends/platform/sdl/macosx/appmenu_osx.mm:98
msgid "Show All"
msgstr " "
-#: backends/platform/sdl/macosx/appmenu_osx.mm:109
#: backends/platform/sdl/macosx/appmenu_osx.mm:120
+#: backends/platform/sdl/macosx/appmenu_osx.mm:131
msgid "Window"
msgstr ""
-#: backends/platform/sdl/macosx/appmenu_osx.mm:114
+#: backends/platform/sdl/macosx/appmenu_osx.mm:125
msgid "Minimize"
msgstr ""
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66
msgctxt "lowres"
msgid "Normal (no scaling)"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212
msgid "Enabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218
msgid "Disabled aspect ratio correction"
msgstr " "
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273
msgid "Active graphics filter:"
msgstr " :"
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300
+#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315
msgid "Windowed mode"
msgstr " "
-#: backends/graphics/opengl/opengl-graphics.cpp:118
+#: backends/graphics/opengl/opengl-graphics.cpp:119
msgid "OpenGL"
msgstr "OpenGL"
-#: backends/graphics/opengl/opengl-graphics.cpp:119
+#: backends/graphics/opengl/opengl-graphics.cpp:120
msgid "OpenGL (No filtering)"
msgstr "OpenGL ( )"
@@ -2202,7 +2216,8 @@ msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
-" , Amiga. ."
+" , Amiga. "
+" ."
#: engines/agi/detection.cpp:167
msgid "Mouse support"
@@ -2212,16 +2227,17 @@ msgstr " "
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
-" . ."
+" . "
+" ."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore game:"
msgstr " :"
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
-#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
+#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890
#: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256
msgid "Restore"
msgstr ""
@@ -2488,7 +2504,8 @@ msgid ""
"\n"
msgstr ""
"%d \n"
-"ScummVM. , \n"
+"ScummVM. "
+", \n"
" 'import_savefile'.\n"
"\n"
@@ -2766,36 +2783,36 @@ msgstr "~~"
msgid "~N~ext"
msgstr "~~"
-#: engines/scumm/dialogs.cpp:600
+#: engines/scumm/dialogs.cpp:602
msgid "Speech Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:601
+#: engines/scumm/dialogs.cpp:603
msgid "Speech and Subtitles"
msgstr " "
-#: engines/scumm/dialogs.cpp:602
+#: engines/scumm/dialogs.cpp:604
msgid "Subtitles Only"
msgstr " "
-#: engines/scumm/dialogs.cpp:610
+#: engines/scumm/dialogs.cpp:612
msgctxt "lowres"
msgid "Speech & Subs"
msgstr " "
-#: engines/scumm/dialogs.cpp:656
+#: engines/scumm/dialogs.cpp:658
msgid "Select a Proficiency Level."
msgstr " ."
-#: engines/scumm/dialogs.cpp:658
+#: engines/scumm/dialogs.cpp:660
msgid "Refer to your Loom(TM) manual for help."
msgstr " Loom(TM)."
-#: engines/scumm/dialogs.cpp:662
+#: engines/scumm/dialogs.cpp:664
msgid "Practice"
msgstr ""
-#: engines/scumm/dialogs.cpp:663
+#: engines/scumm/dialogs.cpp:665
msgid "Expert"
msgstr ""
@@ -3537,4 +3554,5 @@ msgstr " MPEG "
#: engines/zvision/detection_tables.h:92
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
-" MPEG DVD-, AVI "
+" MPEG DVD-, AVI "
+" "
diff --git a/ports.mk b/ports.mk
index 1b6547c488..99846494dc 100644
--- a/ports.mk
+++ b/ports.mk
@@ -222,7 +222,7 @@ endif
ifneq ($(BACKEND), iphone)
ifneq ($(BACKEND), ios7)
# Static libaries, used for the scummvm-static and iphone targets
-OSX_STATIC_LIBS := `$(STATICLIBPATH)/bin/sdl-config --static-libs`
+OSX_STATIC_LIBS := `$(SDLCONFIG) --static-libs`
endif
endif