diff options
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/ @@ -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. @@ -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 @@ -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 Binary files differnew file mode 100644 index 0000000000..8217019be4 --- /dev/null +++ b/dists/scummvm_logo.bmp 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(¬eFont); +} + +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 Binary files differindex f141524ba3..3a9804f663 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat 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 "CancelЗla" #: 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 estрndard (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estрndard" @@ -1385,7 +1398,7 @@ msgstr "~R~etorna al Llanчador" #: 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 grрfics 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~egќent" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Nomщs veus" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Veu i subtэtols" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Nomщs subtэtols" -#: 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 competшncia." -#: 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 "Prрctica" -#: 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. -# Zbynьk 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: Zbynьk 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с jсdra:" +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 "Jэt nahoru" +msgstr "JУt nahoru" #: gui/browser.cpp:72 gui/browser.cpp:74 msgid "Go to previous directory level" -msgstr "Jэt na pјedchozэ њroveђ adresсјe" +msgstr "JУt na pХedchozУ УКroveХ adresУЁХe" #: gui/browser.cpp:74 msgctxt "lowres" msgid "Go up" -msgstr "Jэt 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 "ZruЙit" +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 "Jmщno" +msgstr "JmУЉno" #: gui/editrecorddialog.cpp:60 -#, fuzzy msgid "Notes:" -msgstr "Poznсmky:" +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 "Zavјэt" +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 klсvesnici" +msgstr "Zobrazit klУЁvesnici" #: gui/gui-manager.cpp:128 base/main.cpp:323 msgid "Remap keys" -msgstr "Pјemapovat klсvesy" +msgstr "PХemapovat klУЁvesy" #: gui/gui-manager.cpp:131 base/main.cpp:326 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" -msgstr "Pјepnout 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 mapovсnэ" +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 kliknьte '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 "Pјiјazenс klсvesa: %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 "Pјiјazenс klсvesa: Осdnс" +msgstr "PХiХazenУЁ klУЁvesa: ХОУЁdnУЁ" #: gui/KeysDialog.cpp:90 msgid "Please select an action" -msgstr "Prosэm vyberte шinnost" +msgstr "ProsУm vyberte Фinnost" #: gui/KeysDialog.cpp:106 msgid "Press the key to associate" -msgstr "Zmсшknьte klсvesu pro pјiјazenэ" +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 "" -"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" +"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§ nсzev hry" +msgstr "УplnУН nУЁzev hry" #: gui/launcher.cpp:206 msgctxt "lowres" msgid "Name:" -msgstr "Jmщno:" +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Йэ Љpanьlskщ verze neudьlс 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 "<v§chozэ>" +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 pљvodnь vytvoјena" +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 "Jсdro" +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 "Potlaшit globсlnэ nastavenэ obrazu" +msgstr "PotlaФit globУЁlnУ nastavenУ obrazu" #: gui/launcher.cpp:250 msgctxt "lowres" msgid "Override global graphic settings" -msgstr "Potlaшit globсlnэ 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 "Potlaшit globсlnэ nastavenэ zvuku" +msgstr "PotlaФit globУЁlnУ nastavenУ zvuku" #: gui/launcher.cpp:262 msgctxt "lowres" msgid "Override global audio settings" -msgstr "Potlaшit globсlnэ 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 "Potlaшit globсlnэ nastavenэ hlasitosti" +msgstr "PotlaФit globУЁlnУ nastavenУ hlasitosti" #: gui/launcher.cpp:278 msgctxt "lowres" msgid "Override global volume settings" -msgstr "Potlaшit globсlnэ 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 "Potlaшit globсlnэ nastavenэ MIDI" +msgstr "PotlaФit globУЁlnУ nastavenУ MIDI" #: gui/launcher.cpp:291 msgctxt "lowres" msgid "Override global MIDI settings" -msgstr "Potlaшit globсlnэ 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 "Potlaшit globсlnэ nastavenэ MT-32" +msgstr "PotlaФit globУЁlnУ nastavenУ MT-32" #: gui/launcher.cpp:305 msgctxt "lowres" msgid "Override global MT-32 settings" -msgstr "Potlaшit globсlnэ 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 "Dodateшnс 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 dodateшnс data pouОitс ve hјe" +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 "Dodateшnс Cesta:" +msgstr "DodateФnУЁ Cesta:" #: gui/launcher.cpp:339 gui/options.cpp:1132 msgid "Save Path:" -msgstr "Cesta pro uloОenэ:" +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 umэstьny vaЙe uloОenщ 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 uloОenэ:" +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 uloОenэ:" #: 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 "V§chozэ" +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 dodateшn§ 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 uloОenщ 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, prosэm, 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~konшit" +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 "Ukonшit 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 "Zmьnit globсlnэ 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~ahrсt..." +msgstr "~N~ahrУЁt..." #: gui/launcher.cpp:633 msgid "Load saved game for selected game" -msgstr "Nahrсt uloОenou 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 "PodrОte Shift pro Hromadnщ Pјidсnэ" +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 "Zmьnit 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 zљstanou zachovсna" +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 "Nahrсt hru:" +msgstr "NahrУЁt hru:" #: gui/launcher.cpp:685 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 @@ -483,43 +513,23 @@ msgstr "Nahrсt hru:" #: engines/mohawk/riven.cpp:718 engines/pegasus/pegasus.cpp:353 #: engines/scumm/dialogs.cpp:189 engines/tsage/scenes.cpp:600 msgid "Load" -msgstr "Nahrсt" +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 potenciсlnь " -"pјidat 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сј otevјэt!" +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 zadanщm adresсјi najэt Ос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э tщto hry?" +msgstr "Opravdu chcete odstranit nastavenУ tУЉto hry?" #: gui/launcher.cpp:999 msgid "Do you want to load saved game?" -msgstr "Chcete naшэst uloОenou 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 spouЙtьnэ her ze spouЙtьшe" +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 najэt Осdnщ jсdro 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щ Pјidсnэ..." +msgstr "HromadnУЉ PХidУЁnУ..." #: gui/launcher.cpp:1161 msgid "Record..." -msgstr "Nahrсt..." +msgstr "NahrУЁt..." #: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." -msgstr "... prљbьh ..." +msgstr "... prХЏbФh ..." #: gui/massadd.cpp:259 msgid "Scan complete!" -msgstr "Hledсnэ dokonшeno!" +msgstr "HledУЁnУ dokonФeno!" #: gui/massadd.cpp:262 #, c-format msgid "Discovered %d new games, ignored %d previously added games." -msgstr "Objeveno %d nov§ch her, ignorovсno %d dјэve pјidan§ch 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 "Prohledсno %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 nov§ch her, ignorovсno %d dјэve pјidan§ch 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 "Pјepnout" +msgstr "PХepnout do hry" #: gui/onscreendialog.cpp:110 -#, fuzzy msgid "Fast replay" -msgstr "Rychl§ reОim" +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 "KaОd§ch 5 min" +msgstr "KaХОdУНch 5 min" #: gui/options.cpp:85 msgid "every 10 mins" -msgstr "KaОd§ch 10 min" +msgstr "KaХОdУНch 10 min" #: gui/options.cpp:85 msgid "every 15 mins" -msgstr "KaОd§ch 15 min" +msgstr "KaХОdУНch 15 min" #: gui/options.cpp:85 msgid "every 30 mins" -msgstr "KaОd§ch 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 pouОэt nьkterщ zmьny moОnostэ 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 "reОim obrazu nemohl b§t zmьnьn." +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 b§t zmьnьno" +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э pomьru stran nemohlo b§t zmьnьno" +msgstr "nastavenУ pomФru stran nemohlo bУНt zmФnФno" #: gui/options.cpp:732 msgid "Graphics mode:" -msgstr "ReОim obrazu:" +msgstr "ReХОim obrazu:" #: gui/options.cpp:746 msgid "Render mode:" -msgstr "ReОim vykreslenэ:" +msgstr "ReХОim vykreslenУ:" #: gui/options.cpp:746 gui/options.cpp:747 msgid "Special dithering modes supported by some games" -msgstr "Speciсlnэ reОimy chvьnэ podporovanщ nьkter§mi 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 "ReОim celщ obrazovky" +msgstr "ReХОim celУЉ obrazovky" #: gui/options.cpp:761 msgid "Aspect ratio correction" -msgstr "Korekce pomьru stran" +msgstr "Korekce pomФru stran" #: gui/options.cpp:761 msgid "Correct aspect ratio for 320x200 games" -msgstr "Korigovat pomьr stran pro hry 320x200" +msgstr "Korigovat pomФr stran pro hry 320x200" #: gui/options.cpp:769 msgid "Preferred Device:" -msgstr "Prioritnэ Zaјэzenэ:" +msgstr "PrioritnУ ZaХУzenУ:" #: gui/options.cpp:769 msgid "Music Device:" -msgstr "Hudebnэ zaјэzenэ" +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щ zaјэzenэ nebo emulсtor 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э v§stupnэ zvukovщ zaјэzenэ nebo emulсtor 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э zaјэzenэ" +msgstr "HudebnУ zaХУzenУ" #: gui/options.cpp:798 msgid "AdLib emulator:" -msgstr "AdLib emulсtor" +msgstr "AdLib emulУЁtor" #: gui/options.cpp:798 gui/options.cpp:799 msgid "AdLib is used for music in many games" -msgstr "AdLib se pouОэvс pro hudbu v mnoha hrсch" +msgstr "AdLib se pouХОУvУЁ pro hudbu v mnoha hrУЁch" #: gui/options.cpp:809 msgid "Output rate:" -msgstr "V§stup. 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 zpљsobэ lepЙэ kvalitu zvuku, ale nemusэ b§t podporovсna VaЙi " +"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 Zaјэzenэ:" +msgstr "GM ZaХУzenУ:" #: gui/options.cpp:820 msgid "Specifies default sound device for General MIDI output" -msgstr "Stanovэ v§chozэ zvukovщ zaјэzenэ pro v§stup 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 "NepouОэvat hudbu General MIDI" +msgstr "NepouХОУvat hudbu General MIDI" #: gui/options.cpp:842 gui/options.cpp:908 msgid "Use first available device" -msgstr "PouОэt prvnэ dostupnщ zaјэzenэ" +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 podporovсn nьkter§mi zvukov§mi 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 "SmэЙen§ reОim AdLib/MIDI" +msgstr "SmУХЁenУН reХОim AdLib/MIDI" #: gui/options.cpp:862 msgid "Use both MIDI and AdLib sound generation" -msgstr "PouОэt obь zvukovщ generace MIDI a AdLib" +msgstr "PouХОУt obФ zvukovУЉ generace MIDI a AdLib" #: gui/options.cpp:865 msgid "MIDI gain:" -msgstr "Zesэlenэ 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 "Zaјэzenэ 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э v§chozэ zvukovщ v§stupnэ zaјэzenэ 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 "" -"ZaЙkrtnьte, pokud chcete pouОэt pravщ hardwarovщ zaјэzenэ kompatibilnэ s " -"Roland, pјipojenщ k vaЙemu poшэtaшi" +"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 "Zaјэzenэ Roland GS (zapne mapovсnэ 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 "" -"ZaЙkrtnьte, pokud chcete povolit zсplaty mapovсnэ umoОђujэcэ emulovat MT-32 " -"na zaјэzenэ 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 "NepouОэvat 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 pјehrсvat ј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 VЙe" +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 speciсlnэch zvukov§ch 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 јeшi" +msgstr "Hlasitost ХeФi" #: gui/options.cpp:983 msgctxt "lowres" msgid "Speech volume:" -msgstr "Hlasitost јeшi" +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 dodateшn§m datљm pouОэvanс vЙemi 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 Pluginљm:" +msgstr "Cesta k PluginХЏm:" #: gui/options.cpp:1159 msgctxt "lowres" msgid "Plugins Path:" -msgstr "Cesta k Pluginљm:" +msgstr "Cesta k PluginХЏm:" #: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138 msgid "Misc" -msgstr "Rљznщ" +msgstr "RХЏznУЉ" #: gui/options.cpp:1170 msgctxt "lowres" msgid "Misc" -msgstr "Rљznщ" +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 "Autouklсdсnэ:" +msgstr "AutouklУЁdУЁnУ:" #: gui/options.cpp:1190 msgctxt "lowres" msgid "Autosave:" -msgstr "Autouklсdсnэ:" +msgstr "AutouklУЁdУЁnУ:" #: gui/options.cpp:1198 msgid "Keys" -msgstr "Klсvesy" +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 pouОitэ tьchto nastavenэ musэte 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 zvolenщho adresсјe nelze zapisovat. Vyberte, prosэm, 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 dodateшnщ soubory" +msgstr "Vyberte adresУЁХ pro dodateФnУЉ soubory" #: gui/options.cpp:1414 msgid "Select directory for plugins" -msgstr "Vyberte adresсј pro zсsuvnщ 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сЙ souшasn§ jazyk. Pokud chcete " -"tento vzhled pouОэt, musэte nejdјэve pјepnout 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 "Nahrсvat nebo pјehrсt 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 "Nahrсt" +msgstr "NahrУЁt" #: gui/recorderdialog.cpp:72 msgid "Playback" -msgstr "Pјehrсt" +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 "Poznсmky:" +msgstr "PoznУЁmky:" #: gui/recorderdialog.cpp:155 msgid "Do you really want to delete this record?" -msgstr "Opravdu chcete tento zсznam smazat?" +msgstr "Opravdu chcete tento zУЁznam smazat?" #: gui/recorderdialog.cpp:174 -#, fuzzy msgid "Unknown Author" -msgstr "Neznсmс 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 "MјэОka" +msgstr "MХУХОka" #: gui/saveload-dialog.cpp:211 gui/saveload-dialog.cpp:360 msgid "No date saved" -msgstr "NeuloОena Осdnс data" +msgstr "NeuloХОena ХОУЁdnУЁ data" #: gui/saveload-dialog.cpp:212 gui/saveload-dialog.cpp:361 msgid "No time saved" -msgstr "Ўсdn§ uloОen§ шas" +msgstr "ХНУЁdnУН uloХОenУН Фas" #: gui/saveload-dialog.cpp:213 gui/saveload-dialog.cpp:362 msgid "No playtime saved" -msgstr "Ўсdnс uloОenс 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 uloОenou 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§ uloОen§ 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 "Pјedchozэ" +msgstr "PХedchozУ" #: gui/saveload-dialog.cpp:748 msgid "New Save" -msgstr "Novс uloОenс pozice" +msgstr "NovУЁ uloХОenУЁ pozice" #: gui/saveload-dialog.cpp:748 msgid "Create a new save game" -msgstr "Vytvoјit novou uloОenou hru." +msgstr "VytvoХit novou uloХОenou hru." #: gui/saveload-dialog.cpp:877 msgid "Name: " -msgstr "Nсzev:" +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 zakсzсno" +msgstr "GFX zakУЁzУЁno" #: gui/ThemeEngine.cpp:347 msgctxt "lowres" msgid "Disabled GFX" -msgstr "GFX zakсzсno" +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 vyhlazen§mi hranami" +msgstr "VykreslovaФ s vyhlazenУНmi hranami" #: gui/ThemeEngine.cpp:350 msgid "Antialiased" -msgstr "S vyhlazen§mi 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 "Vyшistit 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 "Mэstnost:" +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 "Trojњhrlnэk" +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 "Lineсrnэ" +msgstr "LineУЁrnУ" #: gui/fluidsynth-dialog.cpp:145 msgid "Fourth-order" -msgstr "Interpolace шtvrtщho јсdu" +msgstr "Interpolace ФtvrtУЉho ХУЁdu" #: gui/fluidsynth-dialog.cpp:146 msgid "Seventh-order" -msgstr "Interpolace sedmщho јс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 veЙkerс nastavenэ FludSynth n ajejich v§chozэ 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 veЙkerс nastavenэ FluidSynth na jejich v§chozэ " +"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 "Jсdro nepodporuje њroveђ ladьnэ '%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 "Pјeskoшit" +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 "Pјeskoшit јсdek" +msgstr "PХeskoФit ХУЁdek" #: base/main.cpp:507 msgid "Error running game:" -msgstr "Chyba pјi spuЙtьnэ 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 nalщzt Осdnщ jсdro 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э podporovсno" +msgstr "Id hry nenУ podporovУЁno" #: common/error.cpp:44 msgid "Unsupported color mode" -msgstr "Nepodporovan§ barevn§ reОim" +msgstr "NepodporovanУН barevnУН reХОim" #: common/error.cpp:47 msgid "Read permission denied" -msgstr "Oprсvnьnэ ke шtenэ zamэtnuto" +msgstr "OprУЁvnФnУ ke ФtenУ zamУtnuto" #: common/error.cpp:49 msgid "Write permission denied" -msgstr "Oprсvnьnэ k zсpisu zamэtnuto" +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 vytvoјit 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 "Zсpis dat selhal" +msgstr "ZУЁpis dat selhal" #: common/error.cpp:66 msgid "Could not find suitable engine plugin" -msgstr "Nelze nalщzt vhodn§ zсs. modul jсdra" +msgstr "Nelze nalУЉzt vhodnУН zУЁs. modul jУЁdra" #: common/error.cpp:68 msgid "Engine plugin does not support save states" -msgstr "Zсs. modul jсdra nepodporuje uloОenщ stavy" +msgstr "ZУЁs. modul jУЁdra nepodporuje uloХОenУЉ stavy" #: common/error.cpp:71 msgid "User canceled" -msgstr "ZruЙeno uОivatelem" +msgstr "ZruХЁeno uХОivatelem" #: common/error.cpp:75 msgid "Unknown error" -msgstr "Neznсmс 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с b§t neznсmс." +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 "Prosэm nahlaste nсsledujэcэ data t§mu ScummVM spolu se jmщnem" +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 pјidat 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~okraшovat" +msgstr "~P~okraФovat" #: engines/dialogs.cpp:87 msgid "~L~oad" -msgstr "~N~ahrсt" +msgstr "~N~ahrУЁt" #: engines/dialogs.cpp:91 msgid "~S~ave" -msgstr "~U~loОit" +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~сpovьda" +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 SpouЙtьшe" +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 SpouЙtьшe" +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 "UloОit 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 "UloОit 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 "UloОit" +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 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." +"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 "" -"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." +"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~ruЙit" +msgstr "~Z~ruХЁit" #: engines/dialogs.cpp:311 msgid "~K~eys" -msgstr "~K~lсvesy" +msgstr "~K~lУЁvesy" #: engines/engine.cpp:276 msgid "Could not initialize color format." -msgstr "Nelze zavщst barevn§ formсt." +msgstr "Nelze zavУЉst barevnУН formУЁt." #: engines/engine.cpp:284 msgid "Could not switch to video mode: '" -msgstr "Nelze pјepnout na reОim obrazu: '" +msgstr "Nelze pХepnout na reХОim obrazu: '" #: engines/engine.cpp:293 msgid "Could not apply aspect ratio setting." -msgstr "Nelze pouОэt nastavenэ pomьru stran." +msgstr "Nelze pouХОУt nastavenУ pomФru stran." #: engines/engine.cpp:298 msgid "Could not apply fullscreen setting." -msgstr "Nelze pouОэt 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 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." +"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 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." +"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 "" -"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." +"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 "" -"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." +"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 "Pјesto spustit" +msgstr "PХesto spustit" #: audio/fmopl.cpp:62 msgid "MAME OPL emulator" -msgstr "MAME OPL Emulсtor" +msgstr "MAME OPL EmulУЁtor" #: audio/fmopl.cpp:64 msgid "DOSBox OPL emulator" -msgstr "DOSBox OPL Emulсtor" +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щ zaјэzenэ '%s' nebylo nalezeno (napј. mљОe b§t 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 navrсcenэ na nejbliОЙэ dostupnщ zaјэzenэ..." +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щ zaјэzenэ '%s' nelze pouОэt. Podэvejte se na zсznam pro vэce " -"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 "" -"Upјednostђovanщ zvukovщ zaјэzenэ '%s' nebylo nalezeno (napј. mљОe b§t " +"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 "" -"Upјednostђovanщ zvukovщ zaјэzenэ '%s' nelze pouОэt. Podэvejte se na zсznam " -"pro vэce 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 "Emulсtor zvuku Amiga" +msgstr "EmulУЁtor zvuku Amiga" #: audio/adlib.cpp:2291 msgid "AdLib Emulator" -msgstr "AdLib Emulсtor" +msgstr "AdLib EmulУЁtor" #: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" -msgstr "Apple II GS Emulсtor (NENЭ ZAVEDEN)" +msgstr "Apple II GS EmulУЁtor (NENУ ZAVEDEN)" #: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" -msgstr "Emulсtor zvuku C64" +msgstr "EmulУЁtor zvuku C64" #: audio/softsynth/mt32.cpp:200 msgid "Initializing MT-32 Emulator" -msgstr "Zavсdэm MT-32 Emulсtor" +msgstr "ZavУЁdУm MT-32 EmulУЁtor" #: audio/softsynth/mt32.cpp:426 msgid "MT-32 Emulator" -msgstr "MT-32 Emulсtor" +msgstr "MT-32 EmulУЁtor" #: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" -msgstr "PC Speaker Emulсtor" +msgstr "PC Speaker EmulУЁtor" #: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" -msgstr "IBM PCjr Emulсtor" +msgstr "IBM PCjr EmulУЁtor" #: backends/keymapper/remap-dialog.cpp:48 msgid "Keymap:" -msgstr "Mapa Klсves:" +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 " (Blokovсno)" +msgstr " (BlokovУЁno)" #: backends/keymapper/remap-dialog.cpp:120 msgid " (Global)" -msgstr "(Globсlnэ)" +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~avјэt" +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~eОim pro levсky" +msgstr "~R~eХОim pro levУЁky" #: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" -msgstr "~O~vlсdсnэ Indyho boje" +msgstr "~O~vlУЁdУЁnУ Indyho boje" #: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" -msgstr "Zobrazit kurzor myЙi" +msgstr "Zobrazit kurzor myХЁi" #: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" -msgstr "Pјichytit k okrajљm" +msgstr "PХichytit k okrajХЏm" #: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" -msgstr "Dotykovщ vyrovnсni na ose X" +msgstr "DotykovУЉ vyrovnУЁni na ose X" #: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" -msgstr "Dotykovщ vyrovnсni 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 "PouОэt styl kontroly kurzoru jako u ovlсdacэ poduЙky 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 "Ћuknьte pro levщ kliknutэ, dvakrсt 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 "Poшсteшnэ zmьna 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 "Zmьna 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с zmьna velikosti (rychlщ, ale nэzkс 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с zmьna 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 zmьny velikosti (musэte 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 "Zakсzat vypnutэ" +msgstr "ZakУЁzat vypnutУ" #: backends/platform/iphone/osys_events.cpp:300 msgid "Mouse-click-and-drag mode enabled." -msgstr "ReОim pјetсhnutэ myЙi 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 "ReОim pјetсhnutэ myЙi vypnut." +msgstr "ReХОim pХetУЁhnutУ myХЁi vypnut." #: backends/platform/iphone/osys_events.cpp:313 msgid "Touchpad mode enabled." -msgstr "Touchpad reОim zapnut" +msgstr "Touchpad reХОim zapnut" #: backends/platform/iphone/osys_events.cpp:315 msgid "Touchpad mode disabled." -msgstr "Touchpad reОim vypnut" +msgstr "Touchpad reХОim vypnut" #: backends/platform/maemo/maemo.cpp:208 msgid "Click Mode" -msgstr "ReОim kliknutэ" +msgstr "ReХОim kliknutУ" #: backends/platform/maemo/maemo.cpp:214 #: backends/platform/symbian/src/SymbianActions.cpp:42 @@ -1712,72 +1718,72 @@ msgstr "ReОim 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э prostјednэm tlaшэtkem" +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 "Skr§t 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 "Skr§t 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 VЙe" +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 "Normсlnэ (bez zmьny 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 "Normсlnэ (bez zmьny 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 pomьru 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 "Zakсzсna korekce pomьru 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 "ReОim 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 filtrovсnэ)" +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 "Zamьnit znaky" +msgstr "ZamФnit znaky" #: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" -msgstr "Pјeskoшit text" +msgstr "PХeskoФit text" #: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" -msgstr "Rychl§ reОim" +msgstr "RychlУН reХОim" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 -#: engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 +#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 msgid "Quit" -msgstr "Ukonшit" +msgstr "UkonФit" #: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" -msgstr "Ladэcэ program" +msgstr "LadУcУ program" #: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" -msgstr "Globсlnэ menu" +msgstr "GlobУЁlnУ menu" #: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" -msgstr "Virtuсlnэ klсvesnice" +msgstr "VirtuУЁlnУ klУЁvesnice" #: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" -msgstr "Mapovaш klсves" +msgstr "MapovaФ klУЁves" #: backends/events/symbiansdl/symbiansdl-events.cpp:186 msgid "Do you want to quit ?" -msgstr "Chcete ukonшit ?" +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 "Souшasn§ reОim obrazu:" +msgstr "SouФasnУН reХОim obrazu:" #: backends/platform/wii/options.cpp:56 msgid "Double-strike" -msgstr "Dvojitщ pјeЙkrtnutэ" +msgstr "DvojitУЉ pХeХЁkrtnutУ" #: backends/platform/wii/options.cpp:60 msgid "Horizontal underscan:" -msgstr "Horizontсlnэ zmenЙenэ" +msgstr "HorizontУЁlnУ zmenХЁenУ" #: backends/platform/wii/options.cpp:66 msgid "Vertical underscan:" -msgstr "Vertikсlnэ zmenЙenэ" +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 "Neznсmщ" +msgstr "NeznУЁmУЉ" #: backends/platform/wii/options.cpp:93 msgid "Mount DVD" -msgstr "Pјipojit 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 "Sdэlenэ:" +msgstr "SdУlenУ:" #: backends/platform/wii/options.cpp:114 msgid "Username:" -msgstr "UОivatelskщ jmщno" +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 "Pјipojit 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 њspьЙnь pјipojeno" +msgstr "DVD УКspФХЁnФ pХipojeno" #: backends/platform/wii/options.cpp:146 msgid "Error while mounting the DVD" -msgstr "Chyba pјi pјipojovсnэ DVD" +msgstr "Chyba pХi pХipojovУЁnУ DVD" #: backends/platform/wii/options.cpp:148 msgid "DVD not mounted" -msgstr "DVD nepјipojeno" +msgstr "DVD nepХipojeno" #: backends/platform/wii/options.cpp:161 msgid "Network up, share mounted" -msgstr "SэЛ je zapnuta, sdэlenэ pјipojeno" +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 pјi pјipojovсnэ sdэlenэ" +msgstr ", chyba pХi pХipojovУЁnУ sdУlenУ" #: backends/platform/wii/options.cpp:168 msgid ", share not mounted" -msgstr ", sdэlenэ nenэ pјipojeno" +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 "Zavсdэm sэЛ" +msgstr "ZavУЁdУm sУХЅ" #: backends/platform/wii/options.cpp:182 msgid "Timeout while initializing network" -msgstr "Pјi zavсdьnэ sэtь vyprЙel 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 "Skr§t Panel nсstrojљ" +msgstr "SkrУНt Panel nУЁstrojХЏ" #: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" -msgstr "Zobrazit klсvesnici" +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 "Ukсzat/Skr§t Kurzor" +msgstr "UkУЁzat/SkrУНt Kurzor" #: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" -msgstr "RozhlэОenэ pomocэ myЙi" +msgstr "RozhlУХОenУ pomocУ myХЁi" #: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" -msgstr "PјiblэОenэ nahoru" +msgstr "PХiblУХОenУ nahoru" #: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" -msgstr "PјiblэОenэ dolљ" +msgstr "PХiblУХОenУ dolХЏ" #: backends/platform/wince/CEActionsPocket.cpp:55 #: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" -msgstr "Pјiјadit klсvesy" +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 nahrсt nebo uloОit?" +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 odejэt ? " +msgstr " Jste si jisti, ХОe chcete odejУt ? " #: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" -msgstr "Klсvesnice" +msgstr "KlУЁvesnice" #: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" -msgstr "Otсшet" +msgstr "OtУЁФet" #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "Using SDL driver " -msgstr "PouОэvс 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 provщst automatickщ hledсnэ ?" +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 "" -"Musэte namapovat klсvesu pro шinnost 'Pravщ Kliknutэ', abyste tuto hru mohli " -"hrсt" +"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 skr§t panel nсstrojљ" +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 "" -"Musэte namapovat klсvesu pro шinnost 'Skr§t Panel nсstrojљ', abyste tuto hru " -"mohli hrсt" +"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 PјiblэОit 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 PјiblэОit 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 "" -"Nezapomeђte namapovat klсvesu k шinnosti 'Skr§t Panel Nсstrojљ, abyste " -"vidьli 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 vrсtit do SpouЙtьшe?" +msgstr "Opravdu se chcete vrУЁtit do SpouХЁtФФe?" #: backends/events/default/default-events.cpp:196 msgid "Launcher" -msgstr "SpouЙtьш" +msgstr "SpouХЁtФФ" #: backends/events/default/default-events.cpp:218 msgid "Do you really want to quit?" -msgstr "Opravdu chcete skonшit?" +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 "'ReОim Ћ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 "'ReОim Ћ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 "'ReОim Ћ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 "Maximсlnэ Hlasitost" +msgstr "MaximУЁlnУ Hlasitost" #: backends/events/gph/gph-events.cpp:411 msgid "Increasing Volume" -msgstr "ZvyЙuji Hlasitost" +msgstr "ZvyХЁuji Hlasitost" #: backends/events/gph/gph-events.cpp:417 msgid "Minimal Volume" -msgstr "Minimсlnэ Hlasitost" +msgstr "MinimУЁlnУ Hlasitost" #: backends/events/gph/gph-events.cpp:419 msgid "Decreasing Volume" -msgstr "SniОuji Hlasitost" +msgstr "SniХОuji Hlasitost" #: backends/events/openpandora/op-events.cpp:174 msgid "Touchscreen 'Tap Mode' - Hover (DPad Clicks)" -msgstr "'ReОim Ћ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 "Klсvesa 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 Klсvesnici" +msgstr "Zobrazit KlУЁvesnici" #: backends/platform/tizen/form.cpp:309 msgid "Control Mouse" -msgstr "Ovlсdсnэ MyЙi" +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э Zakсzсno" +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 "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ" +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 "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ mэsto 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 "PouОэt 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 "" -"PouОэt alternativnэ paletu, bьОnщ pro hry Amiga. Toto byl pљvodnэ 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 myЙi" +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 myЙi. UmoОnэ pouОэt myЙ pro pohyb a pro ovlсdсnэ hernэch " -"nabэdek." +"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 "" -"Nahrсnэ stavu hry selhalo ze souboru:\n" +"NahrУЁnУ stavu hry selhalo ze souboru:\n" "\n" "%s" @@ -2250,7 +2255,7 @@ msgid "" "\n" "%s" msgstr "" -"UloОenэ 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 њspьЙnь uloОen 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 "ReОim 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ь zapэnat reОim 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 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" +"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" -"Stisknьte OK, abyste je pјevedli teя, jinak budete poОсdсni znovu, pјi " -"spuЙtьnэ tщto 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 "PouОэt reОim 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 naшэst 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 uloОit 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 "Zv§Йenс rychlost videa" +msgstr "ZvУНХЁenУЁ rychlost videa" #: engines/groovie/detection.cpp:313 msgid "Play movies at an increased speed" -msgstr "Pјehrсt videa se zv§Йenou rychlostэ" +msgstr "PХehrУЁt videa se zvУНХЁenou rychlostУ" #: engines/groovie/script.cpp:408 msgid "Failed to save game" -msgstr "Nelze uloОit hru." +msgstr "Nelze uloХОit hru." #: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86 msgid "Gore Mode" -msgstr "Povolit nсsilnщ scщny" +msgstr "Povolit nУЁsilnУЉ scУЉny" #: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87 msgid "Enable Gore Mode when available" -msgstr "Povolit nсsilnщ scщny, 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 pјeskoшenэ" +msgstr "Podpora pХeskoФenУ" #: engines/kyra/detection.cpp:74 msgid "Allow text and cutscenes to be skipped" -msgstr "UmoОnit, aby text a videa mohly b§t pјeskoшeny" +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 "Hщliov§ reОim" +msgstr "HУЉliovУН reХОim" #: engines/kyra/detection.cpp:85 msgid "Enable helium mode" -msgstr "Zapnout hщliov§ reОim" +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щ posunovсnэ" +msgstr "PlynulУЉ posunovУЁnУ" #: engines/kyra/detection.cpp:100 msgid "Enable smooth scrolling when walking" -msgstr "Povolit plynulщ posunovсnэ pјi chљzi" +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§ indikсtor zdravэ" +msgstr "SloupcovУН indikУЁtor zdravУ" #: engines/kyra/detection.cpp:128 msgid "Enable hit point bar graphs" -msgstr "Povolit sloupcov§ indikсtor 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 "Vpјed" +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 "Pјesunout se Doleva" +msgstr "PХesunout se Doleva" #: engines/kyra/lol.cpp:484 msgid "Slide Right" -msgstr "Pјesunout se Doprava" +msgstr "PХesunout se Doprava" #: engines/kyra/lol.cpp:485 engines/pegasus/pegasus.cpp:2509 msgid "Turn Left" -msgstr "Otoшit se doleva" +msgstr "OtoФit se doleva" #: engines/kyra/lol.cpp:486 engines/pegasus/pegasus.cpp:2510 msgid "Turn Right" -msgstr "Otoшit se doprava" +msgstr "OtoФit se doprava" #: engines/kyra/lol.cpp:487 msgid "Rest" -msgstr "Odpoшinout 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 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ь." +"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 nсsledujэcэ soubor s uloОenou 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 pouОэt 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 urшenщ pozici %d byl nalezen soubor s uloОenou hrou. Pјepsat?\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 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" +"%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~eОim SviЙtьnэ Aktivovсn" +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 Strсnku" +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 "Pјeskoшit scщny v Sэni zсznamљ" +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 "UmoОђuje hrсшi pјeskoшit scщny v Sэni zсznamљ" +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 "ZvьtЙit filmy o v§robь 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 "ZvьtЙit filmy o v§robь tak, aby vyuОivaly 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 uloОit hru do pozice %i\n" +"Nelze uloХОit hru do pozice %i\n" "\n" #: engines/parallaction/saveload.cpp:204 msgid "Loading game..." -msgstr "Nahrсvсnэ hry..." +msgstr "NahrУЁvУЁnУ hry..." #: engines/parallaction/saveload.cpp:219 msgid "Saving game..." -msgstr "Uklсdсnэ 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 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" +"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" -"Stisknьte OK, abyste je pјevedli teя, jinak budete poОсdсni pјэЙtь.\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 њspьЙnь pјevedl vЙechny vaЙe uloОenщ 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 nьkterс varovсnэ ve vaЙem oknь konzole a nemљОe zaruшit, Оe " -"vЙechny vaЙe soubory byly pјevedeny.\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" -"Prosэm nahlaste to t§mu" +"ProsУm nahlaste to tУНmu" #: engines/pegasus/pegasus.cpp:714 msgid "Invalid save file name" -msgstr "Neplatn§ nсzev souboru" +msgstr "NeplatnУН nУЁzev souboru" #: engines/pegasus/pegasus.cpp:2507 msgid "Up/Zoom In/Move Forward/Open Doors" -msgstr "Nahoru/PјiblэОit/Pohyb dopјedu/Otevјэt dveјe" +msgstr "Nahoru/PХiblУХОit/Pohyb dopХedu/OtevХУt dveХe" #: engines/pegasus/pegasus.cpp:2508 msgid "Down/Zoom Out" -msgstr "Dolљ/Oddсlenэ" +msgstr "DolХЏ/OddУЁlenУ" #: engines/pegasus/pegasus.cpp:2511 msgid "Display/Hide Inventory Tray" -msgstr "Zobrazit/Skr§t podnos inventсјe" +msgstr "Zobrazit/SkrУНt podnos inventУЁХe" #: engines/pegasus/pegasus.cpp:2512 msgid "Display/Hide Biochip Tray" -msgstr "Zobrazit/Skr§t podnos bioшipu" +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 "Pјepnout centrсlnэ datovou obrazovku" +msgstr "PХepnout centrУЁlnУ datovou obrazovku" #: engines/pegasus/pegasus.cpp:2515 msgid "Display/Hide Info Screen" -msgstr "Zobrazit/Skr§to obrazovku informacэ" +msgstr "Zobrazit/SkrУНto obrazovku informacУ" #: engines/pegasus/pegasus.cpp:2516 msgid "Display/Hide Pause Menu" -msgstr "Zobrazit/Skr§t " +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 "PouОэt 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 "Pјekoшit prљchod rozkladu barev EGA (pozadэ v pln§ch barvсch)" +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 "" -"Pјeskoшit prљchod rozkladu barev EGA, obraze je zobrazen v pln§ch barvсch" +"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 "Upјednostђovat digitсlnэ 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 "Upјednostђovat digitсlnэ zvukovщ efekty pјed syntetizovan§mi" +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 "PouОэt IMF/Yamaha FB-01 pro v§stup 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 "" -"PouОэt kartu IBM Music Feature nebo modul syntetizсtoru Yamaha FB-01 FM pro " -"v§stup 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 "PouОэt 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 "PouОэt zvuky na CD mэsto ve hјe, 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 "PouОэt 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 "PouОэt kurzory Windows (menЙэ a шernobэlщ) mэsto 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 "PouОэt stјэbrnщ 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 "PouОэt alternativnэ sadu stјэbrn§ch kurzorљ mэsto standardnэch zlat§ch" +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 "VloОte Disk %c a Stisknьte Tlaшэtko Pro Pokraшovсnэ." +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 Najэt %s, (%c%d) Stisknьte Tlaшэtko." +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 pјi шtenэ disku %c, (%c%d) Stisknьte Tlaшэtko." +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. Stisknьte MEZERNЭK pro pokraшovсnэ." +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 odejэt? (A/N)A" +msgstr "Jste si jisti, ХОe chcete odejУt? (A/N)A" #: engines/scumm/dialogs.cpp:190 msgid "Play" -msgstr "Hrсt" +msgstr "HrУЁt" #: engines/scumm/dialogs.cpp:194 msgid "Insert save/load game disk" -msgstr "VloОte hernэ disk pro uloОenэ/naшtenэ" +msgstr "VloХОte hernУ disk pro uloХОenУ/naФtenУ" #: engines/scumm/dialogs.cpp:195 msgid "You must enter a name" -msgstr "Musэte zadat jmщno" +msgstr "MusУte zadat jmУЉno" #: engines/scumm/dialogs.cpp:196 msgid "The game was NOT saved (disk full?)" -msgstr "Hra NEBYLA uloОena (pln§ disk?)" +msgstr "Hra NEBYLA uloХОena (plnУН disk?)" #: engines/scumm/dialogs.cpp:197 msgid "The game was NOT loaded" -msgstr "Hra NEBYLA naшtena" +msgstr "Hra NEBYLA naФtena" #: engines/scumm/dialogs.cpp:198 #, c-format msgid "Saving '%s'" -msgstr "Uklсdсm '%s'" +msgstr "UklУЁdУЁm '%s'" #: engines/scumm/dialogs.cpp:199 #, c-format msgid "Loading '%s'" -msgstr "Naшэtсm '%s'" +msgstr "NaФУtУЁm '%s'" #: engines/scumm/dialogs.cpp:200 msgid "Name your SAVE game" -msgstr "Pojmenujte svoji ULOЎENOU hru" +msgstr "Pojmenujte svoji ULOХНENOU hru" #: engines/scumm/dialogs.cpp:201 msgid "Select a game to LOAD" -msgstr "Vyberte hru k NAШTENЭ" +msgstr "Vyberte hru k NAФTENУ" #: engines/scumm/dialogs.cpp:202 msgid "Game title)" -msgstr "Nсzev 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 nсpovьdu si pјeшtьte manuсl 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 "Cviшenэ" +msgstr "CviФenУ" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" -msgstr "Pokroшil§" +msgstr "PokroФilУН" #: engines/scumm/help.cpp:74 msgid "Common keyboard commands:" -msgstr "BьОnщ klсvesovщ pјэkazy" +msgstr "BФХОnУЉ klУЁvesovУЉ pХУkazy" #: engines/scumm/help.cpp:75 msgid "Save / Load dialog" -msgstr "Dialog Nahrсt / UloОit" +msgstr "Dialog NahrУЁt / UloХОit" #: engines/scumm/help.cpp:77 msgid "Skip line of text" -msgstr "Pјeskoшit јсdek textu" +msgstr "PХeskoФit ХУЁdek textu" #: engines/scumm/help.cpp:78 msgid "Esc" -msgstr "Mezernэk" +msgstr "MezernУk" #: engines/scumm/help.cpp:78 msgid "Skip cutscene" -msgstr "Pјeskoшit video" +msgstr "PХeskoФit video" #: engines/scumm/help.cpp:79 msgid "Space" -msgstr "Mezernэk" +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 "Nahrсt 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 "UloОit 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 "Zv§Йit / SnэОit rychlost textu" +msgstr "ZvУНХЁit / SnУХОit rychlost textu" #: engines/scumm/help.cpp:90 msgid "Simulate left mouse button" -msgstr "Napodobit levщ tlaшэtko myЙi" +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щ tlaшэtko myЙi" +msgstr "Napodobit pravУЉ tlaФУtko myХЁi" #: engines/scumm/help.cpp:94 msgid "Special keyboard commands:" -msgstr "Speciсlnэ klсvesovщ pјэkazy" +msgstr "SpeciУЁlnУ klУЁvesovУЉ pХУkazy" #: engines/scumm/help.cpp:95 msgid "Show / Hide console" -msgstr "Ukсzat / Skr§t konzoli" +msgstr "UkУЁzat / SkrУНt konzoli" #: engines/scumm/help.cpp:96 msgid "Start the debugger" -msgstr "Spustit ladэcэ program" +msgstr "Spustit ladУcУ program" #: engines/scumm/help.cpp:97 msgid "Show memory consumption" -msgstr "Zobrazit spotјebu pamьti" +msgstr "Zobrazit spotХebu pamФti" #: engines/scumm/help.cpp:98 msgid "Run in fast mode (*)" -msgstr "Spustit v rychlщm reОimu (*)" +msgstr "Spustit v rychlУЉm reХОimu (*)" #: engines/scumm/help.cpp:99 msgid "Run in really fast mode (*)" -msgstr "Spustit ve velmi rychlщm reОimu (*)" +msgstr "Spustit ve velmi rychlУЉm reХОimu (*)" #: engines/scumm/help.cpp:100 msgid "Toggle mouse capture" -msgstr "Povolit zachycovсnэ myЙi" +msgstr "Povolit zachycovУЁnУ myХЁi" #: engines/scumm/help.cpp:101 msgid "Switch between graphics filters" -msgstr "Pјepэnat mezi grafick§mi filtry" +msgstr "PХepУnat mezi grafickУНmi filtry" #: engines/scumm/help.cpp:102 msgid "Increase / Decrease scale factor" -msgstr "ZvьtЙit / ZmenЙit faktor zmьny velikosti" +msgstr "ZvФtХЁit / ZmenХЁit faktor zmФny velikosti" #: engines/scumm/help.cpp:103 msgid "Toggle aspect-ratio correction" -msgstr "Povolit korekci pomьru stran" +msgstr "Povolit korekci pomФru stran" #: engines/scumm/help.cpp:108 msgid "* Note that using ctrl-f and" -msgstr "Upozorђujeme, Оe pouОэvсnэ 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э doporuшeno" +msgstr " ctrl-g nenУ doporuФeno" #: engines/scumm/help.cpp:110 msgid " since they may cause crashes" -msgstr "jelikoО mљОou zpљsobit pсd" +msgstr "jelikoХО mХЏХОou zpХЏsobit pУЁd" #: engines/scumm/help.cpp:111 msgid " or incorrect game behavior." -msgstr " nebo nesprсvnщ chovсnэ hry." +msgstr " nebo nesprУЁvnУЉ chovУЁnУ hry." #: engines/scumm/help.cpp:115 msgid "Spinning drafts on the keyboard:" -msgstr "Pletenэ nсшrtkљ na klсvesnici:" +msgstr "PletenУ nУЁФrtkХЏ na klУЁvesnici:" #: engines/scumm/help.cpp:117 msgid "Main game controls:" -msgstr "Hlavnэ ovlсdacэ prvky:" +msgstr "HlavnУ ovlУЁdacУ prvky:" #: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 #: engines/scumm/help.cpp:162 msgid "Push" -msgstr "Tlaшit" +msgstr "TlaФit" #: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 #: engines/scumm/help.cpp:163 msgid "Pull" -msgstr "Tсhnout" +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 "Dсt" +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 "Otevјэt" +msgstr "OtevХУt" #: engines/scumm/help.cpp:127 msgid "Go to" -msgstr "Jэt do" +msgstr "JУt do" #: engines/scumm/help.cpp:128 msgid "Get" -msgstr "Vzэt" +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 "PouОэt" +msgstr "PouХОУt" #: engines/scumm/help.cpp:130 engines/scumm/help.cpp:142 msgid "Read" -msgstr "Pјeшэst" +msgstr "PХeФУst" #: engines/scumm/help.cpp:131 engines/scumm/help.cpp:148 msgid "New kid" -msgstr "Novщ dэtь" +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 "Pјejэt 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 "Oblщct" +msgstr "OblУЉct" #: engines/scumm/help.cpp:151 msgid "Take off" -msgstr "Svlщct" +msgstr "SvlУЉct" #: engines/scumm/help.cpp:157 msgid "Fix" @@ -3031,11 +3036,11 @@ msgstr "Spravit" #: engines/scumm/help.cpp:159 msgid "Switch" -msgstr "Pјepnout" +msgstr "PХepnout" #: engines/scumm/help.cpp:167 engines/scumm/help.cpp:229 msgid "Look" -msgstr "Dэvat 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 "zahrсt c moll na pјeslici" +msgstr "zahrУЁt c moll na pХeslici" #: engines/scumm/help.cpp:181 msgid "play D on distaff" -msgstr "zahrсt D na pјeslici" +msgstr "zahrУЁt D na pХeslici" #: engines/scumm/help.cpp:182 msgid "play E on distaff" -msgstr "zahrсt E na pјeslici" +msgstr "zahrУЁt E na pХeslici" #: engines/scumm/help.cpp:183 msgid "play F on distaff" -msgstr "zahrсt F na pјeslici" +msgstr "zahrУЁt F na pХeslici" #: engines/scumm/help.cpp:184 msgid "play G on distaff" -msgstr "zahrсt G na pјeslici" +msgstr "zahrУЁt G na pХeslici" #: engines/scumm/help.cpp:185 msgid "play A on distaff" -msgstr "zahrсt A na pјeslici" +msgstr "zahrУЁt A na pХeslici" #: engines/scumm/help.cpp:186 msgid "play B on distaff" -msgstr "zahrсt B na pјeslici" +msgstr "zahrУЁt B na pХeslici" #: engines/scumm/help.cpp:187 msgid "play C major on distaff" -msgstr "zahrсt C dur na pјeslici" +msgstr "zahrУЁt C dur na pХeslici" #: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 msgid "puSh" -msgstr "tlaшIt" +msgstr "tlaФIt" #: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 msgid "pull (Yank)" -msgstr "tсhnout (Љ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 "Dэvat 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 "KlсvesaNahoru" +msgstr "KlУЁvesaNahoru" #: engines/scumm/help.cpp:218 msgid "Highlight prev dialogue" -msgstr "Zv§raznit pјedchozэ dialog" +msgstr "ZvУНraznit pХedchozУ dialog" #: engines/scumm/help.cpp:219 msgid "KeyDown" -msgstr "KlсvesaDolљ" +msgstr "KlУЁvesaDolХЏ" #: engines/scumm/help.cpp:219 msgid "Highlight next dialogue" -msgstr "Zv§raznit nсsledujэcэ dialog" +msgstr "ZvУНraznit nУЁsledujУcУ dialog" #: engines/scumm/help.cpp:223 msgid "Walk" -msgstr "Jэt" +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 "Шernobэlщ / Barva" +msgstr "ФernobУlУЉ / Barva" #: engines/scumm/help.cpp:233 msgid "Eyes" -msgstr "Oшi" +msgstr "OФi" #: engines/scumm/help.cpp:234 msgid "Tongue" @@ -3150,7 +3155,7 @@ msgstr "Jazyk" #: engines/scumm/help.cpp:236 msgid "Punch" -msgstr "Udeјit" +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 "Prohlщdnout" +msgstr "ProhlУЉdnout" #: engines/scumm/help.cpp:241 msgid "Regular cursor" -msgstr "Obyшejn§ 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 "UloОit / Nahrсt / Volby" +msgstr "UloХОit / NahrУЁt / Volby" #: engines/scumm/help.cpp:256 msgid "Other game controls:" -msgstr "DalЙэ ovlсdacэ 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 "PoloОka vlevo nahoјe" +msgstr "PoloХОka vlevo nahoХe" #: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 msgid "Lower left item" -msgstr "PoloОka vlevo dole" +msgstr "PoloХОka vlevo dole" #: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 msgid "Upper right item" -msgstr "PoloОka vpravo nahoјe" +msgstr "PoloХОka vpravo nahoХe" #: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 msgid "Lower right item" -msgstr "PoloОka vpravo dole" +msgstr "PoloХОka vpravo dole" #: engines/scumm/help.cpp:270 msgid "Middle left item" -msgstr "PoloОka vlevo uprostјed" +msgstr "PoloХОka vlevo uprostХed" #: engines/scumm/help.cpp:273 msgid "Middle right item" -msgstr "PoloОka vpravo uprostјed" +msgstr "PoloХОka vpravo uprostХed" #: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 msgid "Switching characters:" -msgstr "Mьnьnэ postav:" +msgstr "MФnФnУ postav:" #: engines/scumm/help.cpp:282 msgid "Second kid" -msgstr "Druhщ dэtь" +msgstr "DruhУЉ dУtФ" #: engines/scumm/help.cpp:283 msgid "Third kid" -msgstr "Tјetэ dэtь" +msgstr "TХetУ dУtФ" #: engines/scumm/help.cpp:292 msgid "Toggle Inventory/IQ Points display" -msgstr "Pјepэnat zobrazenэ inventсјe/chytrostnэch bodљ" +msgstr "PХepУnat zobrazenУ inventУЁХe/chytrostnУch bodХЏ" #: engines/scumm/help.cpp:293 msgid "Toggle Keyboard/Mouse Fighting (*)" -msgstr "Pјepэnat bojovсnэ pomocэ klсves/myЙi (*)" +msgstr "PХepУnat bojovУЁnУ pomocУ klУЁves/myХЁi (*)" #: engines/scumm/help.cpp:295 msgid "* Keyboard Fighting is always on," -msgstr "* Bojovсnэ pomocэ klсvesnice je vОdy 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 " takОe 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 skuteшnosti ovlсdс bojovсnэ s myЙэ" +msgstr " toto ve skuteФnosti ovlУЁdУЁ bojovУЁnУ s myХЁУ" #: engines/scumm/help.cpp:304 msgid "Fighting controls (numpad):" -msgstr "Ovlсdсnэ boje (num. klсv.)" +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 "Brсnit nahoјe" +msgstr "BrУЁnit nahoХe" #: engines/scumm/help.cpp:309 msgid "Block middle" -msgstr "Brсnit uprostјed" +msgstr "BrУЁnit uprostХed" #: engines/scumm/help.cpp:310 msgid "Block low" -msgstr "Brсnit dole" +msgstr "BrУЁnit dole" #: engines/scumm/help.cpp:311 msgid "Punch high" -msgstr "Udeјit nahoru" +msgstr "UdeХit nahoru" #: engines/scumm/help.cpp:312 msgid "Punch middle" -msgstr "Udeјit doprostјed" +msgstr "UdeХit doprostХed" #: engines/scumm/help.cpp:313 msgid "Punch low" -msgstr "Udeјit dolљ" +msgstr "UdeХit dolХЏ" #: engines/scumm/help.cpp:315 msgid "Sucker punch" -msgstr "Neшekanс rсna" +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 zamьnьny 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 poјadэ." +msgstr "9, 6 a 3, v tomto poХadУ." #: engines/scumm/help.cpp:328 msgid "Biplane controls (numpad):" -msgstr "Kontrola dvojploЙnэku (numerickс klсvesnice)" +msgstr "Kontrola dvojploХЁnУku (numerickУЁ klУЁvesnice)" #: engines/scumm/help.cpp:329 msgid "Fly to upper left" -msgstr "Letьt doprava nahoru" +msgstr "LetФt doprava nahoru" #: engines/scumm/help.cpp:330 msgid "Fly to left" -msgstr "Letьt doleva" +msgstr "LetФt doleva" #: engines/scumm/help.cpp:331 msgid "Fly to lower left" -msgstr "Letьt doleva dolљ" +msgstr "LetФt doleva dolХЏ" #: engines/scumm/help.cpp:332 msgid "Fly upwards" -msgstr "Letьt nahoru" +msgstr "LetФt nahoru" #: engines/scumm/help.cpp:333 msgid "Fly straight" -msgstr "Letьt rovnь" +msgstr "LetФt rovnФ" #: engines/scumm/help.cpp:334 msgid "Fly down" -msgstr "Letьt dolљ" +msgstr "LetФt dolХЏ" #: engines/scumm/help.cpp:335 msgid "Fly to upper right" -msgstr "Letьt doprava nahoru" +msgstr "LetФt doprava nahoru" #: engines/scumm/help.cpp:336 msgid "Fly to right" -msgstr "Letьt doprava" +msgstr "LetФt doprava" #: engines/scumm/help.cpp:337 msgid "Fly to lower right" -msgstr "Letьt doprava dolљ" +msgstr "LetФt doprava dolХЏ" #: engines/scumm/input.cpp:572 -#, fuzzy msgid "Snap scroll on" -msgstr "Plynulщ posunovсnэ" +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 "" -"Pјirozenс podpora MIDI vyОaduje Aktualizaci Roland od LucasArts,\n" -"ale %s chybэ. Mэsto toho je pouОit 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 "" -"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." +"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 najэt spustiteln§ soubor 'Loom' pro Macintosh z jehoО\n" -"majэ b§t naшteny hudebnэ nсstroje. Hudba bude zakсzсna." +"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 najэt spustiteln§ soubor 'Monkey Island' pro Macintosh z\n" -"jehoО majэ b§t naшteny hudebnэ nсstroje. Hudba bude zakсzсna." +"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 nalщzt soubor \"sky.cpt\"!\n" -"Stсhnьte si ho, prosэm 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с nesprсvnou velikost.\n" -"Stсhnьte si ho, prosэm, (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 "PouОэt 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' nemљОe b§t pјehrсn v reОimu 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 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" +"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" -"Stisknьte OK, abyste je pјevedli teя, jinak budete poОсdсni znovu, pјi " -"spuЙtьnэ tщto 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с cэlovс uloОenс hra jiО existuje!\n" -"Chtьli byste ponechat starou uloОenou 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љ pјi najetэ myЙi" +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э vсm soubor 'teenagent.dat'. MљОete ho zэskat ze strсnky 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 komprimovсn a zlib nenэ souшсstэ spustitelnщho " -"souboru. Prosэm 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 poшэtadlo 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 souшasn§ poшet snэmkљ za sekundu v hornэm levщm 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 "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ mэsto 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щ snэmky za sekundu" +msgstr "DvojitУЉ snУmky za sekundu" #: engines/zvision/detection_tables.h:62 -#, fuzzy msgid "Increase framerate from 30 to 60 FPS" -msgstr "Zv§Йit hernэ snэmky 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 systщm nсpovьdy Venus" +msgstr "Povolit systУЉm nУЁpovФdy Venus" #: engines/zvision/detection_tables.h:81 msgid "Disable animation while turning" -msgstr "Zakсzat animaci pјi otсшenэ" +msgstr "ZakУЁzat animaci pХi otУЁФenУ" #: engines/zvision/detection_tables.h:82 -#, fuzzy msgid "Disable animation while turning in panorama mode" -msgstr "Zakсzat animaci pјi otсшenэ v panoramatickщm reОimu" +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 "PouОэt videa MPEG ve vysokщm rozliЙenэ" +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 "" -"PouОэt videa MPEG ve vysokщm rozliЙenэ pochсzejэcэ z DVD verze, namэsto " -"videэ AVI v nэzkщm rozliЙenэ." +"PouХОУt video MPEG pochУЁzejУcУ z DVD verze, namУsto videa AVI v nУzkУЉm " +"rozliХЁenУ." #~ msgid "EGA undithering" -#~ msgstr "Nerozklсdсnэ EGA" +#~ msgstr "NerozklУЁdУЁnУ EGA" #~ msgid "Enable undithering in EGA games" -#~ msgstr "Povolit nerozklсdсnэ v EGA hrсch" +#~ 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 odejэt? (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 "" -#~ "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." +#~ "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щ Pјidсnэ..." +#~ msgstr "HromadnУЉ PХidУЁnУ..." #~ msgid "" #~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" #~ msgstr "" -#~ "Vypne mapovсnэ General MIDI pro hry s Roland MT-32 zvukov§m 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 podporovсna" +#~ msgstr "Videa MPGE2 jiХО nejsou podporovУЁna" #~ msgid "OpenGL Normal" -#~ msgstr "OpenGL Normсlnэ" +#~ msgstr "OpenGL NormУЁlnУ" #~ msgid "OpenGL Conserve" -#~ msgstr "OpenGL Zachovсvajэcэ" +#~ msgstr "OpenGL ZachovУЁvajУcУ" #~ msgid "OpenGL Original" -#~ msgstr "OpenGL Pљvodnэ" +#~ msgstr "OpenGL PХЏvodnУ" #~ msgid "Current display mode" -#~ msgstr "Souшasn§ reОim obrazu" +#~ msgstr "SouФasnУН reХОim obrazu" #~ msgid "Current scale" -#~ msgstr "Souшasnс velikost" +#~ msgstr "SouФasnУЁ velikost" #~ msgid "Active filter mode: Linear" -#~ msgstr "Aktivnэ reОim filtru: Lineсrnэ" +#~ msgstr "AktivnУ reХОim filtru: LineУЁrnУ" #~ msgid "Active filter mode: Nearest" -#~ msgstr "Aktivnэ reОim filtru: NejbliОЙэ" +#~ msgstr "AktivnУ reХОim filtru: NejbliХОХЁУ" #~ msgid "Enable Roland GS Mode" -#~ msgstr "Zapnout reОim 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 "Uklсdсnэ hry selhalo!" +#~ msgstr "UklУЁdУЁnУ hry selhalo!" #~ msgctxt "lowres" #~ msgid "Add Game..." -#~ msgstr "Pјidat Hru..." +#~ msgstr "PХidat Hru..." #~ msgid "Add Game..." -#~ msgstr "Pјidat Hru..." +#~ msgstr "PХidat Hru..." #~ msgid "" #~ "Your game version has been detected using filename matching as a variant " #~ "of %s." #~ msgstr "" -#~ "Bylo zjiЙtьno, Оe VaЙe verze hry pouОэvс jmщno souboru shodujэcэ 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 pљvodnэ a nezmьnьnс verze, ohlaste prosэm jakщkoli" +#~ 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 "pјedeЙle vypsanщ informace od ScummVM zpсtky t§mu." +#~ msgstr "pХedeХЁle vypsanУЉ informace od ScummVM zpУЁtky tУНmu." #~ msgid "Discovered %d new games." -#~ msgstr "Objeveno %d nov§ch her." +#~ msgstr "Objeveno %d novУНch her." #~ msgid "Command line argument not processed" -#~ msgstr "Argument pјэkazovщ јсdky nebyl zpracovсn" +#~ msgstr "Argument pХУkazovУЉ ХУЁdky nebyl zpracovУЁn" #~ msgid "FM Towns Emulator" -#~ msgstr "FM Towns Emulсtor" +#~ 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 "Vцlg" @@ -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. Vцlg 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 kјre fler spils detektoren? Dette kunne potentielt tilfјje " "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 understјttet 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 "Fuldskцrms 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 "Hјjre 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 "Aktivщr billedformat korrektion" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Deaktivщr 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 "Vцlg et Fцrdighedsniveau." -#: 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 hjцlp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Trцning" -#: 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 "Auswфhlen" @@ -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 "Mіchten Sie diese Aufnahme wirklich lіschen?" + +#: 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 wфhlen." 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 "" "Mіchten Sie wirklich den PC nach Spielen durchsuchen? Mіglicherweise wird " "dabei eine grіпere Menge an Spielen hinzugefќgt." -#: 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 gewфhlte Verzeichnis nicht іffnen!" @@ -668,7 +681,7 @@ msgstr "" "Spezielle Farbmischungsmethoden werden von manchen Spielen unterstќtzt." #: 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 "Seitenverhфltniskorrektur an" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Seitenverhфltniskorrektur 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 Menќs 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~urќck" 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 "Wфhle einen Schwierigkeitsgrad." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Fќr Hilfe schauen Sie ins Loom-Handbuch." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Anfфnger" -#: 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. # Tomсs 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 detecciѓn masiva? Puede que se aёada un gran " "nњmero 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 expansiѓn 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 "Grсf. desactivados" msgid "Standard Renderer" msgstr "Estсndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estсndar" @@ -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 correcciѓn de aspecto" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Desactivar la correcciѓn de aspecto" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro de grсficos 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 subtэtulos" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Solo subtэtulos" -#: 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 mсs informaciѓn." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Prсctica" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Experto" @@ -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 ylіs" #: 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 tфmфn 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 kфytіssф. 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 lisфtф pelejф alihakemistoineen? Tфmф voi lisфtф suuren " "mффrфn 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 "Standardirenderіijф (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 "Nфytф 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 pффllф" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Kuvasuhteen korjaus pois pффltф" -#: 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 associщe: %s" #: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" -msgstr "Touche associщe: aucune" +msgstr "Touche associщe : 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 "Systшme :" #: 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щ conчu" #: gui/launcher.cpp:224 msgctxt "lowres" msgid "Platform:" -msgstr "Systшme:" +msgstr "Systшme :" #: 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 "Dщfinie un chemin vers des donnщes suplщmentaires utilisщes 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 "Dщfinie l'emplacement oљ les fichiers de sauvegarde sont crщщs" #: 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 dщjр 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 dщtection 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 rщpertoire sщlectionnщ." @@ -522,7 +534,7 @@ msgstr "ScummVM n'a pas trouvщ de jeux dans le rщpertoire sщlectionnщ." #: 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 "Arrъter" #: 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 changщes:" +msgstr "Certaines options graphiques n'ont pu ъtre changщes :" #: 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 changщe." #: 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 spщcial 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 Prщfщrщ:" +msgstr "Sortie Prщfщrщ :" #: 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 "Spщcifie le pщriphщrique de sortie audio ou l'щmulateur de carte audio" #: gui/options.cpp:771 msgctxt "lowres" msgid "Preferred Dev.:" -msgstr "Sortie Prщfщrщ:" +msgstr "Sortie Prщfщrщ :" #: 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 "Frщquence:" +msgstr "Frщquence :" #: 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 pщriphщrique 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 "Paramшtres 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 spщciaux 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 "Thшmes:" +msgstr "Thшmes :" #: gui/options.cpp:1142 msgctxt "lowres" msgid "Theme Path:" -msgstr "Thшmes:" +msgstr "Thшmes :" #: 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 "Thшme:" +msgstr "Thшme :" #: 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 caractшre" #: 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 "Durщe de jeu: " +msgstr "Durщe de jeu : " #: gui/saveload-dialog.cpp:408 gui/saveload-dialog.cpp:496 msgid "Untitled savestate" @@ -1138,7 +1144,7 @@ msgstr "GFX dщsactivщ" 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 "Piшce:" +msgstr "Piшce :" #: gui/fluidsynth-dialog.cpp:79 msgid "Damp:" -msgstr "Attщnuation:" +msgstr "Attщnuation :" #: 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'щxщcution du jeu:" +msgstr "Erreur lors de l'щxщcution 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 rщpertoire" +msgstr "Le chemin n'est pas un rщpertoire" #: common/error.cpp:56 msgid "Path not a file" @@ -1314,11 +1320,11 @@ msgstr "Impossible de crщer 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 donnщes" +msgstr "Щchec de l'щcriture des donnщes" #: 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 supplщmentaire." #: 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 apprъtez р jouer n'est pas encore " +"Attention : le jeu que vous vous apprъtez р jouer n'est pas encore " "complшtement 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 dщtails." +"Le pщriphщrique audio sщlectionnщ '%s' ne peut pas ъtre utilisщ. Voir le " +"fichier de log pour plus de dщtails." #: audio/mididrv.cpp:257 #, c-format @@ -1689,7 +1695,7 @@ msgstr "Sans changement d'щchelle (vous devez faire dщfiler 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 "Fenъtre" -#: 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 "Dщsactiver 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 Fenъtre" -#: 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 succшs dans le fichier:\n" +"Щtat du jeu enregistrщ avec succшs dans le fichier :\n" "\n" "%s" #: engines/agos/animation.cpp:557 #, c-format msgid "Cutscene file '%s' not found!" -msgstr "Fichier de sщquence '%s' non trouvщ!" +msgstr "Fichier de sщquence '%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 dщfaut" #: 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 pщriphщrique General MIDI,\n" -"mais ce jeu ne support que le MIDI Roland MT32. Nous essayons\n" +"Il semble que vous utilisez un pщriphщrique 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 jouщes 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 rщpertoire 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 dщjр 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щ importщes avec succшs. 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 "Prщfщrer les effets sonors digitals" +msgstr "Prщfщrer 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~rщcщdent" 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 "Sщlectionnez un niveau de compщtence." -#: 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 spщciales:" +msgstr "Commandes clavier spщciales :" #: engines/scumm/help.cpp:95 msgid "Show / Hide console" @@ -2902,7 +2922,7 @@ msgstr "Ouvrir le dщbugger" #: engines/scumm/help.cpp:97 msgid "Show memory consumption" -msgstr "Afficher la consomation de mщmoire" +msgstr "Afficher la consommation de mщmoire" #: 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 "Contrєles 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 "Troisiшme 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/dщsactive 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 "Dщfilement rщgulier" +msgstr "Dщfilement par р-coups" #: engines/scumm/input.cpp:574 msgid "Snap scroll off" -msgstr "" +msgstr "Dщfilement rщgulier" #: 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 dщmarrer maintenant. Cependant ScummVM " -"ne supporte pas encore cette fonctionalitщ. Pour jouer р Maniac Mansion, " -"choisissez 'Ajouter...' dans le Lanceur de ScummVM et sщlectionnez le " -"rщpertoire 'Maniac Mansion' dans le rщpertoire du jeu Day Of The Tentacle." +"Normalement, Maniac Mansion devrait dщmarrer maintenant. Mais pour que cela " +"marche il faut que les fichiers du jeu Maniac Mansion soient dans e " +"rщpertoire 'Maniac' р l'intщrieur du rщpertoire 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'exщcutable Macintosh de 'Loom' n'a pas щtщ trouvщ pour\n" +"y lire les instruments. La musique sera dщsactivщe." #: 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'exщcutable Macintosh de 'Monkey Island' n'a pas щtщ trouvщ pour\n" +"y lire les instruments. La musique sera dщsactivщe." #: 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 plutєt 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 systшme d'aide Venus" #: engines/zvision/detection_tables.h:81 msgid "Disable animation while turning" -msgstr "" +msgstr "Dщsactiver les animations en tournant" #: engines/zvision/detection_tables.h:82 msgid "Disable animation while turning in panorama mode" -msgstr "" +msgstr "Dщsactiver les animations en tournant dans le mode panorama" #: engines/zvision/detection_tables.h:91 msgid "Use high resolution MPEG video" -msgstr "" +msgstr "Utiliser les vidщos MPEG haute rщsolution" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" -msgstr "Utiliser les curseurs argentщs au lieu des curseurs normaux dorщs" +msgstr "" +"Utiliser les vidщos MPEG du DVD р la place des vidщos AVI de plus basse " +"rщsolution" #~ msgid "EGA undithering" #~ msgstr "Dщtramage 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~aэr" -#: 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 "Saэr de ScummVM" @@ -390,7 +423,7 @@ msgstr "Saэr 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 " "nњmero 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 interpolaciѓn de cores compatibles con algњns 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 estсndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estсndar" @@ -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 "Botѓn central" msgid "Right Click" msgstr "Botѓn 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 "Correcciѓn de proporciѓn activada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Correcciѓn de proporciѓn desactivada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro de grсficos 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 subtэtulos" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Sѓ subtэtulos" -#: 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 "Prсctica" -#: 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 "Mщgse" #: 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 "Vсlaszt" @@ -89,6 +89,38 @@ msgstr "Megjegyzщs:" msgid "Ok" msgstr "Ok" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "Vсlassz betіltendѕ fсjlt" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "Эrd be a fсjlnevet mentщshez" + +#: gui/filebrowser-dialog.cpp:132 +msgid "Do you really want to overwrite the file?" +msgstr "Biztos hogy felќl akarod эrni a fсjlt?" + +#: gui/filebrowser-dialog.cpp:132 gui/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 "" -"Rіvid jсtщkazonosэtѓ a jсtщkmentщsekhez щs a jсtщk parancssori futtatсsсhoz" +"Rіvid jсtщkazonosэtѓ a jсtщkmentщsekhez щs a jсtщk parancssori " +"futtatсsсhoz" #: 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 jсtщk nyelve. Ne сllэtsd сt a pl. Spanyol nyelvћ jсtщkodat Angol nyelvre" +"A jсtщk nyelve. Ne сllэtsd сt a pl. Spanyol nyelvћ jсtщkodat Angol " +"nyelvre" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87 #: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208 @@ -384,7 +418,7 @@ msgstr "Ez a jсtщkazonosэtѓ ID mсr foglalt, Vсlassz egy mсsikat." msgid "~Q~uit" msgstr "Kilщpщs" -#: 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 bezсrсsa" @@ -392,7 +426,7 @@ msgstr "ScummVM bezсrсsa" msgid "A~b~out..." msgstr "Nщvjegy" -#: 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 nщvjegy" @@ -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 Masszэv jсtщkdetektort? Ez potenciсlisan sok jсtщkot " -"hozzсad a listсhoz." - -#: 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 Masszэv jсtщkdetektort? Ez potenciсlisan sok " +"jсtщkot hozzсad a listсhoz." #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" @@ -532,12 +546,14 @@ msgstr "Akarod hogy betіltщsem a jсtщkсllсst?" #: gui/launcher.cpp:1048 msgid "This game does not support loading games from the launcher." -msgstr "Ez a jсtщk nem tсmogatja a jсtщkсllсs betіltщst az indэtѓbѓl." +msgstr "" +"Ez a jсtщk nem tсmogatja a jсtщkсllсs betіltщst az indэtѓbѓl." #: gui/launcher.cpp:1052 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" -"ScummVM nem talсlt olyan jсtщkmotort ami a vсlasztott jсtщkot tсmogatja!" +"ScummVM nem talсlt olyan jсtщkmotort ami a vсlasztott jсtщkot " +"tсmogatja!" #: gui/launcher.cpp:1159 msgid "Mass Add..." @@ -558,7 +574,8 @@ msgstr "Vizsgсlat kщsz!" #: gui/massadd.cpp:262 #, c-format msgid "Discovered %d new games, ignored %d previously added games." -msgstr "%d њj jсtщkot talсltam, %d elѕzѕleg hozzсadott jсtщk kihagyva..." +msgstr "" +"%d њj jсtщkot talсltam, %d elѕzѕleg hozzсadott jсtщk kihagyva..." #: gui/massadd.cpp:266 #, c-format @@ -568,7 +585,8 @@ msgstr "%d Mappa сtvizsgсlva..." #: gui/massadd.cpp:269 #, c-format msgid "Discovered %d new games, ignored %d previously added games ..." -msgstr "%d њj jсtщkot talсltam, %d elѕzѕleg hozzсadott jсtщk kihagyva..." +msgstr "" +"%d њj jсtщkot talсltam, %d elѕzѕleg hozzсadott jсtщk kihagyva..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" @@ -661,7 +679,7 @@ msgid "Special dithering modes supported by some games" msgstr "Nщhсny jсtщk tсmogatja a speciсlis сrnyalсsi mѓdokat" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Teljeskщpernyѕs mѓd:" @@ -716,7 +734,8 @@ msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -"Nagyobb щrtщkek jobb hangminѕsщget adnak, de nem minden hangkсrtya tсmogatja" +"Nagyobb щrtщkek jobb hangminѕsщget adnak, de nem minden hangkсrtya " +"tсmogatja" #: 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 "" -"Nщhсny hangkсrya, FluidSynth щs Timidyti tсmogatja a SoundFont betіltщsщt" +"Nщhсny hangkсrya, FluidSynth щs Timidyti tсmogatja a SoundFont " +"betіltщsщt" #: gui/options.cpp:856 msgctxt "lowres" @@ -770,7 +790,8 @@ msgstr "MT-32 Eszkіz:" #: gui/options.cpp:879 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" -msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapщrtelmezett hangeszkіzіk beсllэtсsa" +msgstr "" +"Roland MT-32/LAPC1/CM32l/CM64 alapщrtelmezett hangeszkіzіk beсllэtсsa" #: 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 "" -"Jelіld be, ha hardveres Roland-Kompatibilis hangeszkіz van csatlakoztatva a " -"gщpedhez щs hasznсlni akarod" +"Jelіld be, ha hardveres Roland-Kompatibilis hangeszkіz van csatlakoztatva " +"a gщpedhez щs hasznсlni 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 "" -"Ellenѕrzщs ha engedщlyezni akarod az emulсlt MT-32 Folt lekщpezщst a Roland " -"GS eszkіzіn" +"Ellenѕrzщs ha engedщlyezni akarod az emulсlt MT-32 Folt lekщpezщst a " +"Roland GS eszkіzіn" #: gui/options.cpp:898 msgid "Don't use Roland MT-32 music" @@ -1118,7 +1139,7 @@ msgstr "GFX letiltva" msgid "Standard Renderer" msgstr "Standard lekщpezѕ" -#: 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 beсllэtсs alapщrtelmezett щrtщkre." msgid "" "Do you really want to reset all FluidSynth settings to their default values?" msgstr "" -"Biztos visszaсllэtassz minden FluidSynth beсllэtсst alapщrtelmezett щrtщkre?" +"Biztos visszaсllэtassz minden FluidSynth beсllэtсst alapщrtelmezett " +"щrtщkre?" #: base/main.cpp:228 #, c-format @@ -1250,7 +1272,8 @@ msgstr "Hiba a jсtщk futtatсsakor:" #: base/main.cpp:554 msgid "Could not find any engine capable of running the selected game" -msgstr "Nem talсlhatѓ olyan jсtщkmotor ami a vсlasztott jсtщkot tсmogatja" +msgstr "" +"Nem talсlhatѓ olyan jсtщkmotor ami a vсlasztott jсtщkot tсmogatja" #: common/error.cpp:38 msgid "No error" @@ -1323,7 +1346,8 @@ msgstr "A '%s' jсtщk ismeretlennek tћnik." #: engines/advancedDetector.cpp:318 msgid "Please, report the following data to the ScummVM team along with name" -msgstr "Kщrlek jelezd a ScummVM csapatnak a kіvetkezѕ adatokat, egyќtt a jсtщk" +msgstr "" +"Kщrlek jelezd a ScummVM csapatnak a kіvetkezѕ adatokat, egyќtt a jсtщk" #: engines/advancedDetector.cpp:320 msgid "of the game you tried to add and its version/language/etc.:" @@ -1364,7 +1388,7 @@ msgstr "Visszatщrщs az indэtѓba" #: 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 "Jсtщk mentщse:" #: 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 "" -"Sajnсlom, a motor jelenleg nem tartalmaz jсtщk kіzbeni sњgѓt. Olvassd el a " -"README-t az alap informсciѓkrѓl, щs hogy hogyan segэthetsz a kщsѕbbiekben." +"Sajnсlom, a motor jelenleg nem tartalmaz jсtщk kіzbeni sњgѓt. Olvassd " +"el a README-t az alap informсciѓkrѓl, щs hogy hogyan segэthetsz a " +"kщsѕbbiekben." #: 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) jсtщkсllсs betіltщse nem sikerќlt!. Olvassd el a README-t az alap " -"informсciѓkrѓl, щs hogy hogyan segэthetsz a kщsѕbbiekben." +"(%s) jсtщkсllсs betіltщse nem sikerќlt!. Olvassd el a README-t az " +"alap informсciѓkrѓl, щs hogy hogyan segэthetsz a kщsѕbbiekben." #: engines/engine.cpp:480 msgid "" @@ -1475,8 +1500,8 @@ msgid "" "not work in future versions of ScummVM." msgstr "" "FIGYELEM: A jсtщkot amit indэtani akarsz mщg nem teljesen tсmogatotja a " -"ScummVM. Szсmэts rс hogy nem stabilan fut, щs a mentщsek nem mћkіdnek a " -"jіvѕbeni ScummVM verziѓkkal." +"ScummVM. Szсmэts rс hogy nem stabilan fut, щs a mentщsek nem mћkіdnek " +"a jіvѕbeni ScummVM verziѓkkal." #: 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 kivсlasztott '%s' hangeszkіz nem talсlhatѓ (Lekapcsoltad, vagy kihњztad)." +"A kivсlasztott '%s' hangeszkіz nem talсlhatѓ (Lekapcsoltad, vagy " +"kihњztad)." #: 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 elsѕdleges '%s' hangeszkіz nem talсlhatѓ (Lekapcsoltad, vagy kihњztad)." +"Az elsѕdleges '%s' hangeszkіz nem talсlhatѓ (Lekapcsoltad, vagy " +"kihњztad)." #: audio/mididrv.cpp:272 #, c-format @@ -1713,57 +1740,57 @@ msgstr "Kіzщpsѕ 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 elrejtщse" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Tіbbi elrejtщse" -#: 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 mщret" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normсl (nincs сtmщretezщs)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normсl (nincs сtmщretezщs)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Mщretarсny korrekciѓ engedщlyezve" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Mщretarсny korrekciѓ letiltva" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktэv grafikus szћrѕk:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Ablakos mѓd" -#: 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 szћrщs)" @@ -2079,8 +2106,8 @@ msgstr "Kicsinyэtщs mћvelet (opcionсlis)" msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" -"Ne felejts billentyћt tсrsэtani az 'Eszkіztсr rejtщs' mћvelethez, hogy lсsd " -"a teljes listсt" +"Ne felejts billentyћt tсrsэtani az 'Eszkіztсr rejtщs' mћvelethez, hogy " +"lсsd a teljes listсt" #: backends/events/default/default-events.cpp:196 msgid "Do you really want to return to the Launcher?" @@ -2179,7 +2206,8 @@ msgstr "Eredeti ment/tіlt kщpernyѕk hasznсlata" #: 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 mentщs/betіltщs kщpernyѕ hasznсlata a ScummVM kщpek helyett" +msgstr "" +"Az eredeti mentщs/betіltщs kщpernyѕ hasznсlata a ScummVM kщpek 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 "" -"Alternatэv paletta hasznсlat, kіzіs minden Amiga jсtщknсl. Ez egy rщgi " -"megoldсs" +"Alternatэv paletta hasznсlat, kіzіs minden Amiga jсtщknсl. Ez egy " +"rщgi megoldсs" #: engines/agi/detection.cpp:167 msgid "Mouse support" @@ -2201,17 +2229,17 @@ msgstr "Egщr tсmogatсs" msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" -"Egщrmѓd engщlyezve. Lehetѕvщ teszi az egщrrel mozgatсst jсtщkban щs " -"jсtщkmenќkben." +"Egщrmѓd engщlyezve. Lehetѕvщ teszi az egщrrel mozgatсst jсtщkban " +"щs jсtщkmenќkben." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: 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 "Jсtщkmenet visszaсllэtсsa:" #: 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 "Visszaсllэtсs" @@ -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 rщgi jсtщkmentщst talсlt a Drascula-hoz, ezt сt kell alakэtani.\n" -"A rщgi jсtщkmentщs forma tіbbщ nem tсmogatott, ezщrt a jсtщk mentщse nem " -"tіltѕdik be ha nem akэtod сt azt.\n" +"ScummVM rщgi jсtщkmentщst talсlt a Drascula-hoz, ezt сt kell alakэ" +"tani.\n" +"A rщgi jсtщkmentщs forma tіbbщ nem tсmogatott, ezщrt a jсtщk " +"mentщse nem tіltѕdik be ha nem akэtod сt azt.\n" "\n" -"Nyomj OK-t ha сtalakэtod most, vagy rсkщrdezek њjra ha legkіzelebb elindэtod " -"a jсtщkot.\n" +"Nyomj OK-t ha сtalakэtod most, vagy rсkщrdezek њjra ha legkіzelebb " +"elindэtod a jсtщkot.\n" #: engines/dreamweb/detection.cpp:57 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 kіvetkezѕ eredeti jсtщkmentщs fсjlt talсltam a jсtщkkіnyvtсrban:\n" +"A kіvetkezѕ eredeti jсtщkmentщs fсjlt talсltam a " +"jсtщkkіnyvtсrban:\n" "\n" "%s %s\n" "\n" @@ -2478,7 +2508,8 @@ msgid "" "\n" msgstr "" "%d eredeti jсtщkmentщs fсjlt sikeresen importсlta a\n" -"ScummVM. Ha kщsѕbb manuсlisan akarod importсlni az eredeti jсtщkmentщseket\n" +"ScummVM. Ha kщsѕbb manuсlisan akarod importсlni az eredeti " +"jсtщkmentщseket\n" "meg kell nyitnod a ScummVM debug konzolt щs hasznсld az 'import_savefile' " "utasэtсst.\n" "\n" @@ -2516,7 +2547,8 @@ msgstr "Hall of Records storyboard сtvezetѕk сtugrсsa" #: engines/neverhood/detection.cpp:168 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -"Lehetѕsщg, hogy a jсtщkos сtugorja a Hall of Records storyboard сtvezetѕket" +"Lehetѕsщg, hogy a jсtщkos сtugorja a Hall of Records storyboard " +"сtvezetѕket" #: engines/neverhood/detection.cpp:174 msgid "Scale the making of videos to full screen" @@ -2524,7 +2556,9 @@ msgstr "Hogyan kщszќlt videѓk сtmщretezщse teljeskщpernyѕre" #: engines/neverhood/detection.cpp:175 msgid "Scale the making of videos, so that they use the whole screen" -msgstr "Hogyan kщszќlt videѓk сtmщretezщse, hogy teljeskщpernyѕt hasznсljanak" +msgstr "" +"Hogyan kщszќlt videѓk сtmщretezщse, hogy teljeskщpernyѕt " +"hasznсljanak" #: 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 rщgi jсtщkmentщst talсlt a Nippon Safes hez ezt сt kell nevezni.\n" -"A rщgi jсtщkmentщs nem tсmogatott, ezщrt a jсtщk nem tіltѕdik be сtnevezщs " -"nщlkќl..\n" +"ScummVM rщgi jсtщkmentщst talсlt a Nippon Safes hez ezt сt kell " +"nevezni.\n" +"A rщgi jсtщkmentщs nem tсmogatott, ezщrt a jсtщk nem tіltѕdik be " +"сtnevezщs nщlkќl..\n" "\n" -"Nyomj OK-t az сtalakэtсshoz, vagy rсkщrdezzek ha legkіzelebb elindэtod a " -"jсtщkot.\n" +"Nyomj OK-t az сtalakэtсshoz, vagy rсkщrdezzek ha legkіzelebb elindэtod " +"a jсtщkot.\n" #: engines/parallaction/saveload.cpp:319 msgid "ScummVM successfully converted all your savefiles." @@ -2570,8 +2605,8 @@ msgid "" "\n" "Please report to the team." msgstr "" -"ScummVM kiэrt nщhсny figyelmeztetщst a konzolablakba щs nem biztos hogy az " -"іsszes fсjlod сt lett alakэtva.\n" +"ScummVM kiэrt nщhсny figyelmeztetщst a konzolablakba щs nem biztos hogy " +"az іsszes fсjlod сt lett alakэtva.\n" "\n" "Lщgyszэves jelentsd a csapatnak." @@ -2626,7 +2661,8 @@ msgstr "EGA szэnmodulсciѓ сtugrсsa (Szэnes hсttereknщl)" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" msgstr "" -"Szэnmodulсciѓ сtugrсsa EGA jсtщkoknсl, grafikсk teljes szэnben lсthatѓk" +"Szэnmodulсciѓ сtugrсsa EGA jсtщkoknсl, grafikсk teljes szэnben " +"lсthatѓk" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" @@ -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 kсrtya vagy Yamaha FB-01 FM szintetizсtor modul hasznсlata " -"MIDI kimenetre" +"IBM Music Feature kсrtya vagy Yamaha FB-01 FM szintetizсtor modul " +"hasznсlata MIDI kimenetre" #: engines/sci/detection.cpp:415 msgid "Use CD audio" @@ -2663,7 +2699,8 @@ msgstr "Windows kurzorok hasznсlata" #: engines/sci/detection.cpp:427 msgid "" "Use the Windows cursors (smaller and monochrome) instead of the DOS ones" -msgstr "Windows kurzorok hasznсlata (kisebb щs monokrѓm) a DOS-osok helyett " +msgstr "" +"Windows kurzorok hasznсlata (kisebb щs monokrѓm) a DOS-osok helyett " #: engines/sci/detection.cpp:437 msgid "Use silver cursors" @@ -2757,36 +2794,36 @@ msgstr "~E~lѕzѕ" msgid "~N~ext" msgstr "Kіvetkezѕ" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Csak beszщd" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Beszщd щ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 "Beszщd & Felir" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Vсlassz hozzсщrtщs szintet." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Segэtsщgщrt nщzd meg a Loom(TM) kщzikіnyvedet." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Gyakorlсs" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Szakщrtѕ" @@ -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 "" -"Сltalсban a Maniac Mansion indulna most. De a mћkіdщshez a Maniac Mansion " -"fсjljainak, a 'Maniac' mappсban kell lenni a Tentacle jсtщkmappсjсn belќl, " -"щs a jсtщkot эgy adja hozzс a ScummVM a listсhoz." +"Сltalсban a Maniac Mansion indulna most. De a mћkіdщshez a Maniac " +"Mansion fсjljainak, a 'Maniac' mappсban kell lenni a Tentacle " +"jсtщkmappсjсn belќl, щs a jсtщkot эgy adja hozzс a ScummVM a " +"listсhoz." #: engines/scumm/players/player_v3m.cpp:129 msgid "" @@ -3405,14 +3443,15 @@ msgstr "'%s' PSX stream сtvezetѕ nem jсtszhatѓ le paletta mѓdban" #: engines/sword1/animation.cpp:545 engines/sword2/animation.cpp:445 msgid "DXA cutscenes found but ScummVM has been built without zlib" -msgstr "DXA сtvezetѕ elщrhetѕ, de a ScummVM zlib tсmogatсs nincs lefordэtva" +msgstr "" +"DXA сtvezetѕ elщrhetѕ, de a ScummVM zlib tсmogatсs nincs lefordэtva" #: 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 сtvezetѕfilmet talсltam, de a ScummVM MPEG-2 tсmogatсs nщlkќl van " -"lefordэtva" +"MPEG-2 сtvezetѕfilmet talсltam, de a ScummVM MPEG-2 tсmogatсs nщlkќl " +"van lefordэtva" #: engines/sword1/animation.cpp:568 engines/sword2/animation.cpp:470 #, c-format @@ -3431,11 +3470,11 @@ msgid "" msgstr "" "ScummVM rщgi jсtщkmentщst talсlt a Broken Sword 1 hez, ezt сt kell " "alakэtani.\n" -"A rщgi jсtщkmentщs nem tсmogatott, ezщrt a jсtщk nem tіltѕdik be сtalakэtсs " -"nщlkќl.\n" +"A rщgi jсtщkmentщs nem tсmogatott, ezщrt a jсtщk nem tіltѕdik be " +"сtalakэtсs nщlkќl.\n" "\n" -"Nyomj OK-t az сtalakэtсshoz, vagy rсkщrdezzek ha legkіzelebb elindэtod a " -"jсtщkot.\n" +"Nyomj OK-t az сtalakэtсshoz, vagy rсkщrdezzek ha legkіzelebb elindэtod " +"a jсtщkot.\n" #: engines/sword1/control.cpp:1232 #, c-format @@ -3462,8 +3501,8 @@ msgstr "Ez a Broken Sword 1 Demo vщge" msgid "" "PSX cutscenes found but ScummVM has been built without RGB color support" msgstr "" -"PSX сtvezetѕfilmet talсltam, de ez a ScummVM RGB szэntсmogatсs nщlkќl van " -"lefordэtva" +"PSX сtvezetѕfilmet talсltam, de ez a ScummVM RGB szэntсmogatсs nщlkќl " +"van lefordэtva" #: engines/sword2/sword2.cpp:79 msgid "Show object labels" @@ -3493,11 +3532,13 @@ msgstr "FPS szсmlсlѓ lсtszik" #: engines/wintermute/detection.cpp:59 msgid "Show the current number of frames per second in the upper left corner" msgstr "" -"A jelenlegi mсsodpercenkщnti kщpkocka szсm kijelzщse a bal felsѕ sarokban" +"A jelenlegi mсsodpercenkщnti kщpkocka szсm kijelzщse a bal felsѕ " +"sarokban" #: engines/zvision/detection_tables.h:52 msgid "Use the original save/load screens instead of the ScummVM interface" -msgstr "Hasznсld az eredeti mentщs/tіltщs kщpet a ScummVM felќlet helyett" +msgstr "" +"Hasznсld az eredeti mentщs/tіltщs kщpet a ScummVM felќlet helyett" #: engines/zvision/detection_tables.h:61 msgid "Double FPS" @@ -3529,7 +3570,8 @@ msgstr "Nagyfelbontсsњ MPEG videѓ hasznсlat" #: engines/zvision/detection_tables.h:92 msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" -msgstr "MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett" +msgstr "" +"MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett" #~ msgid "EGA undithering" #~ msgstr "EGA szinjavэtсs" @@ -3539,7 +3581,8 @@ msgstr "MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett" #~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2" #~ msgstr "" -#~ "MPEG-2 сtvezetѕfilmet talсltam, de a ScummVM MPEG-2 nщlkќl van lefordэtva" +#~ "MPEG-2 сtvezetѕfilmet talсltam, de a ScummVM MPEG-2 nщlkќl van " +#~ "lefordэtva" #~ msgctxt "lowres" #~ msgid "Mass Add..." @@ -3547,7 +3590,8 @@ msgstr "MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett" #~ msgid "" #~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" -#~ msgstr "General MIDI lekщpezщs Roland MT-32 zenщs jсtщkokhoz kikapcsolva" +#~ msgstr "" +#~ "General MIDI lekщpezщs Roland MT-32 zenщs jсtщkokhoz kikapcsolva" #~ msgid "Standard (16bpp)" #~ msgstr "Standard (16bpp)" @@ -3606,7 +3650,8 @@ msgstr "MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett" #~ msgid "" #~ "Your game version has been detected using filename matching as a variant " #~ "of %s." -#~ msgstr "A felismert jсtщkverziѓd a hasznсlt fсjlnщvvel a %s egy vсltozata." +#~ msgstr "" +#~ "A felismert jсtщkverziѓd a hasznсlt fсjlnщvvel a %s egy vсltozata." #~ msgid "If this is an original and unmodified version, please report any" #~ msgstr "Ha ez egy eredeti nem vсltoztatott verziѓ, kщrlek 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. Sјmхen <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 Trјan Sјmхen <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 kjјre 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 stјttet 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 "Hјyreklikk" -#: 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)-hхndboka 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. Sјmхen <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 Trјan Sјmхen <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 stјttast 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 "Hјgreklikk" -#: 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Г ZiБbkowski <mziab@o2.pl>\n" "Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n" @@ -55,13 +55,13 @@ msgid "Go up" msgstr "W gѓrъ" #: 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П zajъty. Wybierz inny." msgid "~Q~uit" msgstr "~Z~akoёcz" -#: 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 "Zakoёcz ScummVM" @@ -393,7 +426,7 @@ msgstr "Zakoёcz 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 "KsiБПka ScummVM" @@ -490,26 +523,6 @@ msgid "" msgstr "" "Chcesz uruchomiц masowy detektor gier? MoПe dodaц wiele tytuГѓw 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 moПe otworzyц katalogu!" @@ -662,7 +675,7 @@ msgid "Special dithering modes supported by some games" msgstr "Specjalne tryby ditheringu wspierane przez niektѓre gry" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "PeГny ekran" @@ -1126,7 +1139,7 @@ msgstr "WyГБczona 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~owrѓt 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 "Klikniъcie 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 pozostaГe" -#: 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 "ZwykГy (bez skalowania)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "ZwykГy (bez skalowania)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "WГБczono korekcjъ formatu obrazu" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "WyГБczono 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 "Wznѓw 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 "Wznѓw" @@ -2751,36 +2764,36 @@ msgstr "~P~oprzednia" msgid "~N~ext" msgstr "~N~astъpna" -#: 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 umiejъtnoЖci." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Pomocy szukaj w instrukcji doГБczonej 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 "Nуo" + #: 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 cѓdigo 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 vсrios jogos ao mesmo tempo? Isso poderс " "resultar em uma adiчуo 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 "Nуo" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nуo 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 padrуo (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 #, fuzzy msgid "Standard" msgstr "Padrуo (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 botуo 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 "Correчуo de proporчуo habilitada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Correчуo de proporчуo desabilitada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Ativa os filtros grсficos" -#: 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~rѓximo" -#: 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 "Uppхt" #: 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 "Vфlj" @@ -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 hфr 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 vфlj 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 anvфnda mass-speldetektorn? Processen kan potentiellt " "lфgga 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 gitterlфgen stіdda 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 "Fullskфrmslфge" @@ -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~vфnd 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 "Hіgerklick" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Gіm ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Gіm і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 "Fіnster" -#: 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 bildfіrhхllande pх" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Korrektion av bildfіrhхllande 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 "Fіnsterlфge" -#: 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 "Хterstфll 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 "Хterstфll" @@ -2767,36 +2780,36 @@ msgstr "~F~іregхende" 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 "Vфlj en skicklighetsnivх." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Hфnvisa till din Loom(TM)-manual fіr hjфlp." -#: engines/scumm/dialogs.cpp: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 з ніжчою " +"роздільною здатністю" @@ -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 |